From 6fab4a86d4e5be49a3cedf265b199aac5c737eae Mon Sep 17 00:00:00 2001 From: eafonyang Date: Thu, 9 Jul 2026 11:16:59 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20wiki?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...em.md => Docker Compose 编排与 rsync 增量部署.md} | 17 + .../_module.yaml | 15 - .qoder/repowiki/knowledge/zh/_index.yaml | 95 +---- .../zh/全栈错误处理与响应规范/_module.yaml | 13 - .../{error_handling.md => 全栈错误处理与响应规范.md} | 15 + .../zh/后端日志系统 (Winston)/_module.yaml | 11 - ...{logging_system.md => 后端日志系统 (Winston).md} | 13 + .../_module.yaml | 14 - ...gement.md => 基于 pnpm 与 Docker 的前后端依赖管理.md} | 16 + .../_module.yaml | 14 - ...m.md => 基于环境变量与 Docker Compose 的分层配置体系.md} | 16 + ...功能边界拆分 model_index.vue 为子组件与 composable.md | 30 ++ .../_module.yaml | 12 - ...end_style.md => 深色玻璃拟态主题系统 (Lux Theme).md} | 14 + .../_module.yaml | 2 +- .../架构设计.md | 4 + .../概述.md | 1 + .../耳机品牌与 OTA 升级管理前端/_module.yaml | 0 .../耳机品牌与 OTA 升级管理前端/技术栈.md | 0 .../耳机品牌与 OTA 升级管理前端/架构设计.md | 0 .../耳机品牌与 OTA 升级管理前端/概述.md | 0 .../耳机品牌与 OTA 升级管理前端/编码规范.md | 0 .../耳机品牌与型号管理后端 API}/_module.yaml | 2 +- .../耳机品牌与型号管理后端 API/技术栈.md | 1 + .../耳机品牌与型号管理后端 API/架构设计.md | 4 + .../耳机品牌与型号管理后端 API/概述.md | 1 + .../耳机品牌与型号管理后端 API/特殊配置与命令.md | 1 + .../耳机品牌与型号管理后端 API/编码规范.md | 5 + .../zh/音频设备管理全栈平台/架构设计.md | 4 - .../knowledge/zh/音频设备管理全栈平台/概述.md | 1 - .../zh/音频设备管理全栈平台/特殊配置与命令.md | 2 - .../zh/音频设备管理全栈平台/编码规范.md | 2 - .../音频设备管理后端 API/技术栈.md | 5 - .../音频设备管理后端 API/架构设计.md | 5 - .../音频设备管理后端 API/概述.md | 1 - .../音频设备管理后端 API/特殊配置与命令.md | 3 - .../音频设备管理后端 API/编码规范.md | 4 - .../zh/content/{ => 开发指南}/开发指南.md | 0 .../repowiki/zh/content/开发指南/设计系统.md | 325 ++++++++++++++++++ .../repowiki/zh/content/系统架构/后端架构.md | 82 ++++- .../zh/content/部署与运维/部署指南.md | 107 ++++-- .../repowiki/zh/meta/repowiki-metadata.json | 2 +- 42 files changed, 625 insertions(+), 234 deletions(-) rename .qoder/repowiki/knowledge/zh/Docker Compose 编排与 rsync 增量部署/{build_system.md => Docker Compose 编排与 rsync 增量部署.md} (90%) delete mode 100644 .qoder/repowiki/knowledge/zh/Docker Compose 编排与 rsync 增量部署/_module.yaml delete mode 100644 .qoder/repowiki/knowledge/zh/全栈错误处理与响应规范/_module.yaml rename .qoder/repowiki/knowledge/zh/全栈错误处理与响应规范/{error_handling.md => 全栈错误处理与响应规范.md} (89%) delete mode 100644 .qoder/repowiki/knowledge/zh/后端日志系统 (Winston)/_module.yaml rename .qoder/repowiki/knowledge/zh/后端日志系统 (Winston)/{logging_system.md => 后端日志系统 (Winston).md} (88%) delete mode 100644 .qoder/repowiki/knowledge/zh/基于 pnpm 与 Docker 的前后端依赖管理/_module.yaml rename .qoder/repowiki/knowledge/zh/基于 pnpm 与 Docker 的前后端依赖管理/{dependency_management.md => 基于 pnpm 与 Docker 的前后端依赖管理.md} (87%) delete mode 100644 .qoder/repowiki/knowledge/zh/基于环境变量与 Docker Compose 的分层配置体系/_module.yaml rename .qoder/repowiki/knowledge/zh/基于环境变量与 Docker Compose 的分层配置体系/{configuration_system.md => 基于环境变量与 Docker Compose 的分层配置体系.md} (91%) create mode 100644 .qoder/repowiki/knowledge/zh/按功能边界拆分 model_index.vue 为子组件与 composable/按功能边界拆分 model_index.vue 为子组件与 composable.md delete mode 100644 .qoder/repowiki/knowledge/zh/深色玻璃拟态主题系统 (Lux Theme)/_module.yaml rename .qoder/repowiki/knowledge/zh/深色玻璃拟态主题系统 (Lux Theme)/{frontend_style.md => 深色玻璃拟态主题系统 (Lux Theme).md} (92%) rename .qoder/repowiki/knowledge/zh/{音频设备管理全栈平台 => 耳机品牌与 OTA 升级管理平台(前后端编排)}/_module.yaml (75%) create mode 100644 .qoder/repowiki/knowledge/zh/耳机品牌与 OTA 升级管理平台(前后端编排)/架构设计.md create mode 100644 .qoder/repowiki/knowledge/zh/耳机品牌与 OTA 升级管理平台(前后端编排)/概述.md rename .qoder/repowiki/knowledge/zh/{音频设备管理全栈平台 => 耳机品牌与 OTA 升级管理平台(前后端编排)}/耳机品牌与 OTA 升级管理前端/_module.yaml (100%) rename .qoder/repowiki/knowledge/zh/{音频设备管理全栈平台 => 耳机品牌与 OTA 升级管理平台(前后端编排)}/耳机品牌与 OTA 升级管理前端/技术栈.md (100%) rename .qoder/repowiki/knowledge/zh/{音频设备管理全栈平台 => 耳机品牌与 OTA 升级管理平台(前后端编排)}/耳机品牌与 OTA 升级管理前端/架构设计.md (100%) rename .qoder/repowiki/knowledge/zh/{音频设备管理全栈平台 => 耳机品牌与 OTA 升级管理平台(前后端编排)}/耳机品牌与 OTA 升级管理前端/概述.md (100%) rename .qoder/repowiki/knowledge/zh/{音频设备管理全栈平台 => 耳机品牌与 OTA 升级管理平台(前后端编排)}/耳机品牌与 OTA 升级管理前端/编码规范.md (100%) rename .qoder/repowiki/knowledge/zh/{音频设备管理全栈平台/音频设备管理后端 API => 耳机品牌与 OTA 升级管理平台(前后端编排)/耳机品牌与型号管理后端 API}/_module.yaml (73%) create mode 100644 .qoder/repowiki/knowledge/zh/耳机品牌与 OTA 升级管理平台(前后端编排)/耳机品牌与型号管理后端 API/技术栈.md create mode 100644 .qoder/repowiki/knowledge/zh/耳机品牌与 OTA 升级管理平台(前后端编排)/耳机品牌与型号管理后端 API/架构设计.md create mode 100644 .qoder/repowiki/knowledge/zh/耳机品牌与 OTA 升级管理平台(前后端编排)/耳机品牌与型号管理后端 API/概述.md create mode 100644 .qoder/repowiki/knowledge/zh/耳机品牌与 OTA 升级管理平台(前后端编排)/耳机品牌与型号管理后端 API/特殊配置与命令.md create mode 100644 .qoder/repowiki/knowledge/zh/耳机品牌与 OTA 升级管理平台(前后端编排)/耳机品牌与型号管理后端 API/编码规范.md delete mode 100644 .qoder/repowiki/knowledge/zh/音频设备管理全栈平台/架构设计.md delete mode 100644 .qoder/repowiki/knowledge/zh/音频设备管理全栈平台/概述.md delete mode 100644 .qoder/repowiki/knowledge/zh/音频设备管理全栈平台/特殊配置与命令.md delete mode 100644 .qoder/repowiki/knowledge/zh/音频设备管理全栈平台/编码规范.md delete mode 100644 .qoder/repowiki/knowledge/zh/音频设备管理全栈平台/音频设备管理后端 API/技术栈.md delete mode 100644 .qoder/repowiki/knowledge/zh/音频设备管理全栈平台/音频设备管理后端 API/架构设计.md delete mode 100644 .qoder/repowiki/knowledge/zh/音频设备管理全栈平台/音频设备管理后端 API/概述.md delete mode 100644 .qoder/repowiki/knowledge/zh/音频设备管理全栈平台/音频设备管理后端 API/特殊配置与命令.md delete mode 100644 .qoder/repowiki/knowledge/zh/音频设备管理全栈平台/音频设备管理后端 API/编码规范.md rename .qoder/repowiki/zh/content/{ => 开发指南}/开发指南.md (100%) create mode 100644 .qoder/repowiki/zh/content/开发指南/设计系统.md diff --git a/.qoder/repowiki/knowledge/zh/Docker Compose 编排与 rsync 增量部署/build_system.md b/.qoder/repowiki/knowledge/zh/Docker Compose 编排与 rsync 增量部署/Docker Compose 编排与 rsync 增量部署.md similarity index 90% rename from .qoder/repowiki/knowledge/zh/Docker Compose 编排与 rsync 增量部署/build_system.md rename to .qoder/repowiki/knowledge/zh/Docker Compose 编排与 rsync 增量部署/Docker Compose 编排与 rsync 增量部署.md index 7894378..9fd0f6b 100644 --- a/.qoder/repowiki/knowledge/zh/Docker Compose 编排与 rsync 增量部署/build_system.md +++ b/.qoder/repowiki/knowledge/zh/Docker Compose 编排与 rsync 增量部署/Docker Compose 编排与 rsync 增量部署.md @@ -1,3 +1,20 @@ +--- +kind: build_system +name: Docker Compose 编排与 rsync 增量部署 +category: build_system +scope: + - '**' +source_files: + - docker-compose.yml + - backend/Dockerfile + - frontend/Dockerfile + - frontend/nginx.conf + - scripts/upload.sh + - DEPLOY.md + - backend/package.json + - frontend/package.json +--- + ## 1. 构建系统与工具链 项目采用 **Docker Compose** 作为核心编排工具,结合 **pnpm** 进行依赖管理。整体架构分为前端(Vue 3 + Vite)和后端(Node.js + Express)两个独立服务。 diff --git a/.qoder/repowiki/knowledge/zh/Docker Compose 编排与 rsync 增量部署/_module.yaml b/.qoder/repowiki/knowledge/zh/Docker Compose 编排与 rsync 增量部署/_module.yaml deleted file mode 100644 index 7242da1..0000000 --- a/.qoder/repowiki/knowledge/zh/Docker Compose 编排与 rsync 增量部署/_module.yaml +++ /dev/null @@ -1,15 +0,0 @@ -schema_version: 1 -module_path: build_system -title: Docker Compose 编排与 rsync 增量部署 -scope: [] -source_files: - - docker-compose.yml - - backend/Dockerfile - - frontend/Dockerfile - - frontend/nginx.conf - - scripts/upload.sh - - DEPLOY.md - - backend/package.json - - frontend/package.json -depends_on: [] -related_to: [] diff --git a/.qoder/repowiki/knowledge/zh/_index.yaml b/.qoder/repowiki/knowledge/zh/_index.yaml index 6b5b3c0..6931a54 100644 --- a/.qoder/repowiki/knowledge/zh/_index.yaml +++ b/.qoder/repowiki/knowledge/zh/_index.yaml @@ -3,11 +3,11 @@ schema_version: 1 locale: zh-CN branch: main nodes_managed: true -exported_at: "2026-07-01T09:22:46Z" +exported_at: "2026-07-09T02:41:34Z" modules: "": - dir_name: 音频设备管理全栈平台 - title: 音频设备管理全栈平台 + dir_name: 耳机品牌与 OTA 升级管理平台(前后端编排) + title: 耳机品牌与 OTA 升级管理平台(前后端编排) scope: - .gitignore - README.md @@ -23,8 +23,8 @@ modules: depends_on: [] related_to: [] backend: - dir_name: 音频设备管理后端 API - title: 音频设备管理后端 API + dir_name: 耳机品牌与型号管理后端 API + title: 耳机品牌与型号管理后端 API scope: - backend/ source_files: [] @@ -32,66 +32,6 @@ modules: depends_on: [] related_to: - path: frontend - build_system: - dir_name: Docker Compose 编排与 rsync 增量部署 - title: Docker Compose 编排与 rsync 增量部署 - scope: [] - source_files: - - docker-compose.yml - - backend/Dockerfile - - frontend/Dockerfile - - frontend/nginx.conf - - scripts/upload.sh - - DEPLOY.md - - backend/package.json - - frontend/package.json - children: [] - depends_on: [] - related_to: [] - configuration_system: - dir_name: 基于环境变量与 Docker Compose 的分层配置体系 - title: 基于环境变量与 Docker Compose 的分层配置体系 - scope: [] - source_files: - - .env.example - - backend/src/config/loadEnv.js - - backend/src/config/env.js - - backend/src/config/database.js - - backend/src/config/redis.js - - docker-compose.yml - - frontend/vite.config.js - children: [] - depends_on: [] - related_to: [] - dependency_management: - dir_name: 基于 pnpm 与 Docker 的前后端依赖管理 - title: 基于 pnpm 与 Docker 的前后端依赖管理 - scope: [] - source_files: - - backend/package.json - - frontend/package.json - - backend/pnpm-lock.yaml - - frontend/pnpm-lock.yaml - - backend/Dockerfile - - frontend/Dockerfile - - frontend/pnpm-workspace.yaml - children: [] - depends_on: [] - related_to: [] - error_handling: - dir_name: 全栈错误处理与响应规范 - title: 全栈错误处理与响应规范 - scope: [] - source_files: - - backend/src/utils/response.js - - backend/src/app.js - - backend/src/middleware/auth.js - - backend/src/routes/models.js - - backend/src/routes/auth.js - - frontend/src/utils/request.js - children: [] - depends_on: [] - related_to: [] frontend: dir_name: 耳机品牌与 OTA 升级管理前端 title: 耳机品牌与 OTA 升级管理前端 @@ -102,28 +42,3 @@ modules: depends_on: [] related_to: - path: backend - frontend_style: - dir_name: 深色玻璃拟态主题系统 (Lux Theme) - title: 深色玻璃拟态主题系统 (Lux Theme) - scope: [] - source_files: - - frontend/src/styles/lux-theme.css - - frontend/src/layout/index.vue - - frontend/src/main.js - - frontend/src/App.vue - - frontend/package.json - children: [] - depends_on: [] - related_to: [] - logging_system: - dir_name: 后端日志系统 (Winston) - title: 后端日志系统 (Winston) - scope: [] - source_files: - - backend/src/config/logger.js - - backend/src/app.js - - backend/src/routes/auth.js - - backend/src/config/database.js - children: [] - depends_on: [] - related_to: [] diff --git a/.qoder/repowiki/knowledge/zh/全栈错误处理与响应规范/_module.yaml b/.qoder/repowiki/knowledge/zh/全栈错误处理与响应规范/_module.yaml deleted file mode 100644 index 9e8e1f8..0000000 --- a/.qoder/repowiki/knowledge/zh/全栈错误处理与响应规范/_module.yaml +++ /dev/null @@ -1,13 +0,0 @@ -schema_version: 1 -module_path: error_handling -title: 全栈错误处理与响应规范 -scope: [] -source_files: - - backend/src/utils/response.js - - backend/src/app.js - - backend/src/middleware/auth.js - - backend/src/routes/models.js - - backend/src/routes/auth.js - - frontend/src/utils/request.js -depends_on: [] -related_to: [] diff --git a/.qoder/repowiki/knowledge/zh/全栈错误处理与响应规范/error_handling.md b/.qoder/repowiki/knowledge/zh/全栈错误处理与响应规范/全栈错误处理与响应规范.md similarity index 89% rename from .qoder/repowiki/knowledge/zh/全栈错误处理与响应规范/error_handling.md rename to .qoder/repowiki/knowledge/zh/全栈错误处理与响应规范/全栈错误处理与响应规范.md index c5bc9ab..bef11e5 100644 --- a/.qoder/repowiki/knowledge/zh/全栈错误处理与响应规范/error_handling.md +++ b/.qoder/repowiki/knowledge/zh/全栈错误处理与响应规范/全栈错误处理与响应规范.md @@ -1,3 +1,18 @@ +--- +kind: error_handling +name: 全栈错误处理与响应规范 +category: error_handling +scope: + - '**' +source_files: + - backend/src/utils/response.js + - backend/src/app.js + - backend/src/middleware/auth.js + - backend/src/routes/models.js + - backend/src/routes/auth.js + - frontend/src/utils/request.js +--- + ### 1. 核心策略:统一响应结构与业务码 该仓库采用**基于 HTTP 200 的业务状态码**模式,而非依赖 HTTP 协议层的状态码来区分业务逻辑的成功与失败。 diff --git a/.qoder/repowiki/knowledge/zh/后端日志系统 (Winston)/_module.yaml b/.qoder/repowiki/knowledge/zh/后端日志系统 (Winston)/_module.yaml deleted file mode 100644 index d35b70e..0000000 --- a/.qoder/repowiki/knowledge/zh/后端日志系统 (Winston)/_module.yaml +++ /dev/null @@ -1,11 +0,0 @@ -schema_version: 1 -module_path: logging_system -title: 后端日志系统 (Winston) -scope: [] -source_files: - - backend/src/config/logger.js - - backend/src/app.js - - backend/src/routes/auth.js - - backend/src/config/database.js -depends_on: [] -related_to: [] diff --git a/.qoder/repowiki/knowledge/zh/后端日志系统 (Winston)/logging_system.md b/.qoder/repowiki/knowledge/zh/后端日志系统 (Winston)/后端日志系统 (Winston).md similarity index 88% rename from .qoder/repowiki/knowledge/zh/后端日志系统 (Winston)/logging_system.md rename to .qoder/repowiki/knowledge/zh/后端日志系统 (Winston)/后端日志系统 (Winston).md index 7520e8e..00b3467 100644 --- a/.qoder/repowiki/knowledge/zh/后端日志系统 (Winston)/logging_system.md +++ b/.qoder/repowiki/knowledge/zh/后端日志系统 (Winston)/后端日志系统 (Winston).md @@ -1,3 +1,16 @@ +--- +kind: logging_system +name: 后端日志系统 (Winston) +category: logging_system +scope: + - '**' +source_files: + - backend/src/config/logger.js + - backend/src/app.js + - backend/src/routes/auth.js + - backend/src/config/database.js +--- + ## 1. 核心框架与配置 - **框架**: 使用 `winston` 作为后端 Node.js 应用的统一日志框架。 - **配置文件**: `backend/src/config/logger.js` 负责初始化 logger 实例。 diff --git a/.qoder/repowiki/knowledge/zh/基于 pnpm 与 Docker 的前后端依赖管理/_module.yaml b/.qoder/repowiki/knowledge/zh/基于 pnpm 与 Docker 的前后端依赖管理/_module.yaml deleted file mode 100644 index 806383e..0000000 --- a/.qoder/repowiki/knowledge/zh/基于 pnpm 与 Docker 的前后端依赖管理/_module.yaml +++ /dev/null @@ -1,14 +0,0 @@ -schema_version: 1 -module_path: dependency_management -title: 基于 pnpm 与 Docker 的前后端依赖管理 -scope: [] -source_files: - - backend/package.json - - frontend/package.json - - backend/pnpm-lock.yaml - - frontend/pnpm-lock.yaml - - backend/Dockerfile - - frontend/Dockerfile - - frontend/pnpm-workspace.yaml -depends_on: [] -related_to: [] diff --git a/.qoder/repowiki/knowledge/zh/基于 pnpm 与 Docker 的前后端依赖管理/dependency_management.md b/.qoder/repowiki/knowledge/zh/基于 pnpm 与 Docker 的前后端依赖管理/基于 pnpm 与 Docker 的前后端依赖管理.md similarity index 87% rename from .qoder/repowiki/knowledge/zh/基于 pnpm 与 Docker 的前后端依赖管理/dependency_management.md rename to .qoder/repowiki/knowledge/zh/基于 pnpm 与 Docker 的前后端依赖管理/基于 pnpm 与 Docker 的前后端依赖管理.md index a395d66..e950f03 100644 --- a/.qoder/repowiki/knowledge/zh/基于 pnpm 与 Docker 的前后端依赖管理/dependency_management.md +++ b/.qoder/repowiki/knowledge/zh/基于 pnpm 与 Docker 的前后端依赖管理/基于 pnpm 与 Docker 的前后端依赖管理.md @@ -1,3 +1,19 @@ +--- +kind: dependency_management +name: 基于 pnpm 与 Docker 的前后端依赖管理 +category: dependency_management +scope: + - '**' +source_files: + - backend/package.json + - frontend/package.json + - backend/pnpm-lock.yaml + - frontend/pnpm-lock.yaml + - backend/Dockerfile + - frontend/Dockerfile + - frontend/pnpm-workspace.yaml +--- + ## 1. 核心系统与工具 该项目采用 **pnpm** 作为前后端统一的 JavaScript/TypeScript 包管理器,并通过 **Docker Compose** 进行容器化编排。项目明确指定了 `packageManager` 字段(`pnpm@11.5.2`),利用 Corepack 机制确保开发环境与生产环境使用完全一致的包管理版本。 diff --git a/.qoder/repowiki/knowledge/zh/基于环境变量与 Docker Compose 的分层配置体系/_module.yaml b/.qoder/repowiki/knowledge/zh/基于环境变量与 Docker Compose 的分层配置体系/_module.yaml deleted file mode 100644 index b2bd245..0000000 --- a/.qoder/repowiki/knowledge/zh/基于环境变量与 Docker Compose 的分层配置体系/_module.yaml +++ /dev/null @@ -1,14 +0,0 @@ -schema_version: 1 -module_path: configuration_system -title: 基于环境变量与 Docker Compose 的分层配置体系 -scope: [] -source_files: - - .env.example - - backend/src/config/loadEnv.js - - backend/src/config/env.js - - backend/src/config/database.js - - backend/src/config/redis.js - - docker-compose.yml - - frontend/vite.config.js -depends_on: [] -related_to: [] diff --git a/.qoder/repowiki/knowledge/zh/基于环境变量与 Docker Compose 的分层配置体系/configuration_system.md b/.qoder/repowiki/knowledge/zh/基于环境变量与 Docker Compose 的分层配置体系/基于环境变量与 Docker Compose 的分层配置体系.md similarity index 91% rename from .qoder/repowiki/knowledge/zh/基于环境变量与 Docker Compose 的分层配置体系/configuration_system.md rename to .qoder/repowiki/knowledge/zh/基于环境变量与 Docker Compose 的分层配置体系/基于环境变量与 Docker Compose 的分层配置体系.md index 82d0a89..bf5a843 100644 --- a/.qoder/repowiki/knowledge/zh/基于环境变量与 Docker Compose 的分层配置体系/configuration_system.md +++ b/.qoder/repowiki/knowledge/zh/基于环境变量与 Docker Compose 的分层配置体系/基于环境变量与 Docker Compose 的分层配置体系.md @@ -1,3 +1,19 @@ +--- +kind: configuration_system +name: 基于环境变量与 Docker Compose 的分层配置体系 +category: configuration_system +scope: + - '**' +source_files: + - .env.example + - backend/src/config/loadEnv.js + - backend/src/config/env.js + - backend/src/config/database.js + - backend/src/config/redis.js + - docker-compose.yml + - frontend/vite.config.js +--- + ## 1. 核心系统与工具 该项目采用 **环境变量(Environment Variables)** 作为唯一的配置来源,结合 **`dotenv`** 库进行本地开发时的文件加载,并通过 **Docker Compose** 在部署时注入环境变量。这种模式遵循了 [12-Factor App](https://12factor.net/zh-cn/config) 的配置原则,实现了配置与代码的分离。 diff --git a/.qoder/repowiki/knowledge/zh/按功能边界拆分 model_index.vue 为子组件与 composable/按功能边界拆分 model_index.vue 为子组件与 composable.md b/.qoder/repowiki/knowledge/zh/按功能边界拆分 model_index.vue 为子组件与 composable/按功能边界拆分 model_index.vue 为子组件与 composable.md new file mode 100644 index 0000000..cd110cf --- /dev/null +++ b/.qoder/repowiki/knowledge/zh/按功能边界拆分 model_index.vue 为子组件与 composable/按功能边界拆分 model_index.vue 为子组件与 composable.md @@ -0,0 +1,30 @@ +--- +kind: design +name: 按功能边界拆分 model/index.vue 为子组件与 composable +source: session +category: adr +--- + +# 按功能边界拆分 model/index.vue 为子组件与 composable + +_来源:e2577ff → b4926ba 提交周期内记录的编码计划——内容为规划时意图,实现可能滞后或有出入。_ + +**状态:** accepted + +## 背景 +frontend/src/views/model/index.vue 文件膨胀至 1824 行,同时承载搜索列表、5 个对话框、大量状态管理与样式,导致可读性与可维护性下降。 + +## 决策驱动 +- 单文件过大难以维护 +- 各对话框逻辑耦合在页面中 +- 列表/搜索/分页等通用逻辑需要复用 + +## 备选方案 +- **保持 monolithic index.vue** _(已否决)_ — 优点:改动最小;缺点:文件持续膨胀,新需求只能继续往里堆代码 +- **拆分为 components + composables 目录结构** — 优点:每个对话框独立成组件;useModelList.js 抽取列表/搜索/分页/排序/复制等共享逻辑;index.vue 仅保留编排职责(~250 行);缺点:引入更多文件,需维护 props/emits 契约 + +## 决策 +将 model/index.vue 按功能边界拆分为:components/ModelFormDialog.vue、EqCacheDialog.vue、PushProgressDialog.vue、CsvViewerDialog.vue、PushViewDialog.vue 五个对话框组件,以及 composables/useModelList.js 提取列表核心逻辑;index.vue 仅保留搜索表单+表格+分页模板与操作按钮的编排逻辑。 + +## 影响 +每个对话框可独立演进与测试,useModelList.js 可在其他页面复用列表能力;代价是新增跨组件通信需通过 props/emits/ref,且目录层级加深。 \ No newline at end of file diff --git a/.qoder/repowiki/knowledge/zh/深色玻璃拟态主题系统 (Lux Theme)/_module.yaml b/.qoder/repowiki/knowledge/zh/深色玻璃拟态主题系统 (Lux Theme)/_module.yaml deleted file mode 100644 index 41d3c3c..0000000 --- a/.qoder/repowiki/knowledge/zh/深色玻璃拟态主题系统 (Lux Theme)/_module.yaml +++ /dev/null @@ -1,12 +0,0 @@ -schema_version: 1 -module_path: frontend_style -title: 深色玻璃拟态主题系统 (Lux Theme) -scope: [] -source_files: - - frontend/src/styles/lux-theme.css - - frontend/src/layout/index.vue - - frontend/src/main.js - - frontend/src/App.vue - - frontend/package.json -depends_on: [] -related_to: [] diff --git a/.qoder/repowiki/knowledge/zh/深色玻璃拟态主题系统 (Lux Theme)/frontend_style.md b/.qoder/repowiki/knowledge/zh/深色玻璃拟态主题系统 (Lux Theme)/深色玻璃拟态主题系统 (Lux Theme).md similarity index 92% rename from .qoder/repowiki/knowledge/zh/深色玻璃拟态主题系统 (Lux Theme)/frontend_style.md rename to .qoder/repowiki/knowledge/zh/深色玻璃拟态主题系统 (Lux Theme)/深色玻璃拟态主题系统 (Lux Theme).md index 60c99ac..94f6ba7 100644 --- a/.qoder/repowiki/knowledge/zh/深色玻璃拟态主题系统 (Lux Theme)/frontend_style.md +++ b/.qoder/repowiki/knowledge/zh/深色玻璃拟态主题系统 (Lux Theme)/深色玻璃拟态主题系统 (Lux Theme).md @@ -1,3 +1,17 @@ +--- +kind: frontend_style +name: 深色玻璃拟态主题系统 (Lux Theme) +category: frontend_style +scope: + - '**' +source_files: + - frontend/src/styles/lux-theme.css + - frontend/src/layout/index.vue + - frontend/src/main.js + - frontend/src/App.vue + - frontend/package.json +--- + ## 1. 核心系统与工具 - **UI 框架**: Vue 3 + Element Plus。 - **样式方案**: 原生 CSS + CSS Variables (CSS Custom Properties)。 diff --git a/.qoder/repowiki/knowledge/zh/音频设备管理全栈平台/_module.yaml b/.qoder/repowiki/knowledge/zh/耳机品牌与 OTA 升级管理平台(前后端编排)/_module.yaml similarity index 75% rename from .qoder/repowiki/knowledge/zh/音频设备管理全栈平台/_module.yaml rename to .qoder/repowiki/knowledge/zh/耳机品牌与 OTA 升级管理平台(前后端编排)/_module.yaml index f126d7d..c5b0b03 100644 --- a/.qoder/repowiki/knowledge/zh/音频设备管理全栈平台/_module.yaml +++ b/.qoder/repowiki/knowledge/zh/耳机品牌与 OTA 升级管理平台(前后端编排)/_module.yaml @@ -1,6 +1,6 @@ schema_version: 1 module_path: "" -title: 音频设备管理全栈平台 +title: 耳机品牌与 OTA 升级管理平台(前后端编排) scope: - .gitignore - README.md diff --git a/.qoder/repowiki/knowledge/zh/耳机品牌与 OTA 升级管理平台(前后端编排)/架构设计.md b/.qoder/repowiki/knowledge/zh/耳机品牌与 OTA 升级管理平台(前后端编排)/架构设计.md new file mode 100644 index 0000000..5c729bd --- /dev/null +++ b/.qoder/repowiki/knowledge/zh/耳机品牌与 OTA 升级管理平台(前后端编排)/架构设计.md @@ -0,0 +1,4 @@ +- **服务编排**:`docker-compose.yml` 定义 `backend`(Node.js + Sequelize)和 `frontend`(Nginx 静态托管)两个服务,共用 `audio-network` 桥接网络,前端通过 Nginx 反向代理 `/api` 至后端。 +- **配置边界**:根目录 `.env` 为唯一环境变量源,Compose 注入后端容器;`.env.example` 提供模板,禁止子模块各自维护环境文件。 +- **存储契约**:宿主机 `/data/projects/source` 挂载至后端容器,作为 OTA 升级包的持久化共享卷,前后端以此路径为约定进行文件交互。 +- **部署流水线**:`scripts/upload.sh` 基于 rsync/ssh 将前端构建产物、后端源码与编排文件增量推送至服务器,配合 `DEPLOY.md` 形成本地→远端的标准化运维路径。 \ No newline at end of file diff --git a/.qoder/repowiki/knowledge/zh/耳机品牌与 OTA 升级管理平台(前后端编排)/概述.md b/.qoder/repowiki/knowledge/zh/耳机品牌与 OTA 升级管理平台(前后端编排)/概述.md new file mode 100644 index 0000000..97938d2 --- /dev/null +++ b/.qoder/repowiki/knowledge/zh/耳机品牌与 OTA 升级管理平台(前后端编排)/概述.md @@ -0,0 +1 @@ +通过 Docker Compose 统一编排 Vue 3 前端与 Express 后端,并以标准化脚本驱动从本地到远程服务器的增量同步与容器化部署。 \ No newline at end of file diff --git a/.qoder/repowiki/knowledge/zh/音频设备管理全栈平台/耳机品牌与 OTA 升级管理前端/_module.yaml b/.qoder/repowiki/knowledge/zh/耳机品牌与 OTA 升级管理平台(前后端编排)/耳机品牌与 OTA 升级管理前端/_module.yaml similarity index 100% rename from .qoder/repowiki/knowledge/zh/音频设备管理全栈平台/耳机品牌与 OTA 升级管理前端/_module.yaml rename to .qoder/repowiki/knowledge/zh/耳机品牌与 OTA 升级管理平台(前后端编排)/耳机品牌与 OTA 升级管理前端/_module.yaml diff --git a/.qoder/repowiki/knowledge/zh/音频设备管理全栈平台/耳机品牌与 OTA 升级管理前端/技术栈.md b/.qoder/repowiki/knowledge/zh/耳机品牌与 OTA 升级管理平台(前后端编排)/耳机品牌与 OTA 升级管理前端/技术栈.md similarity index 100% rename from .qoder/repowiki/knowledge/zh/音频设备管理全栈平台/耳机品牌与 OTA 升级管理前端/技术栈.md rename to .qoder/repowiki/knowledge/zh/耳机品牌与 OTA 升级管理平台(前后端编排)/耳机品牌与 OTA 升级管理前端/技术栈.md diff --git a/.qoder/repowiki/knowledge/zh/音频设备管理全栈平台/耳机品牌与 OTA 升级管理前端/架构设计.md b/.qoder/repowiki/knowledge/zh/耳机品牌与 OTA 升级管理平台(前后端编排)/耳机品牌与 OTA 升级管理前端/架构设计.md similarity index 100% rename from .qoder/repowiki/knowledge/zh/音频设备管理全栈平台/耳机品牌与 OTA 升级管理前端/架构设计.md rename to .qoder/repowiki/knowledge/zh/耳机品牌与 OTA 升级管理平台(前后端编排)/耳机品牌与 OTA 升级管理前端/架构设计.md diff --git a/.qoder/repowiki/knowledge/zh/音频设备管理全栈平台/耳机品牌与 OTA 升级管理前端/概述.md b/.qoder/repowiki/knowledge/zh/耳机品牌与 OTA 升级管理平台(前后端编排)/耳机品牌与 OTA 升级管理前端/概述.md similarity index 100% rename from .qoder/repowiki/knowledge/zh/音频设备管理全栈平台/耳机品牌与 OTA 升级管理前端/概述.md rename to .qoder/repowiki/knowledge/zh/耳机品牌与 OTA 升级管理平台(前后端编排)/耳机品牌与 OTA 升级管理前端/概述.md diff --git a/.qoder/repowiki/knowledge/zh/音频设备管理全栈平台/耳机品牌与 OTA 升级管理前端/编码规范.md b/.qoder/repowiki/knowledge/zh/耳机品牌与 OTA 升级管理平台(前后端编排)/耳机品牌与 OTA 升级管理前端/编码规范.md similarity index 100% rename from .qoder/repowiki/knowledge/zh/音频设备管理全栈平台/耳机品牌与 OTA 升级管理前端/编码规范.md rename to .qoder/repowiki/knowledge/zh/耳机品牌与 OTA 升级管理平台(前后端编排)/耳机品牌与 OTA 升级管理前端/编码规范.md diff --git a/.qoder/repowiki/knowledge/zh/音频设备管理全栈平台/音频设备管理后端 API/_module.yaml b/.qoder/repowiki/knowledge/zh/耳机品牌与 OTA 升级管理平台(前后端编排)/耳机品牌与型号管理后端 API/_module.yaml similarity index 73% rename from .qoder/repowiki/knowledge/zh/音频设备管理全栈平台/音频设备管理后端 API/_module.yaml rename to .qoder/repowiki/knowledge/zh/耳机品牌与 OTA 升级管理平台(前后端编排)/耳机品牌与型号管理后端 API/_module.yaml index e26db3b..5a87b50 100644 --- a/.qoder/repowiki/knowledge/zh/音频设备管理全栈平台/音频设备管理后端 API/_module.yaml +++ b/.qoder/repowiki/knowledge/zh/耳机品牌与 OTA 升级管理平台(前后端编排)/耳机品牌与型号管理后端 API/_module.yaml @@ -1,6 +1,6 @@ schema_version: 1 module_path: backend -title: 音频设备管理后端 API +title: 耳机品牌与型号管理后端 API scope: - backend/ source_files: [] diff --git a/.qoder/repowiki/knowledge/zh/耳机品牌与 OTA 升级管理平台(前后端编排)/耳机品牌与型号管理后端 API/技术栈.md b/.qoder/repowiki/knowledge/zh/耳机品牌与 OTA 升级管理平台(前后端编排)/耳机品牌与型号管理后端 API/技术栈.md new file mode 100644 index 0000000..c3d0317 --- /dev/null +++ b/.qoder/repowiki/knowledge/zh/耳机品牌与 OTA 升级管理平台(前后端编排)/耳机品牌与型号管理后端 API/技术栈.md @@ -0,0 +1 @@ +Node.js 22 (Alpine) + Express v4;Sequelize v6 + mysql2 访问 MySQL;ioredis 连接 Redis 缓存 EQ;@aws-sdk/client-s3 上传 OTA 包与测量文件;axios 调用 Meilisearch 搜索索引;jsonwebtoken 签发/验证 JWT;zod 做参数校验;winston 输出到 `logs/app.log`。 \ No newline at end of file diff --git a/.qoder/repowiki/knowledge/zh/耳机品牌与 OTA 升级管理平台(前后端编排)/耳机品牌与型号管理后端 API/架构设计.md b/.qoder/repowiki/knowledge/zh/耳机品牌与 OTA 升级管理平台(前后端编排)/耳机品牌与型号管理后端 API/架构设计.md new file mode 100644 index 0000000..6d8101e --- /dev/null +++ b/.qoder/repowiki/knowledge/zh/耳机品牌与 OTA 升级管理平台(前后端编排)/耳机品牌与型号管理后端 API/架构设计.md @@ -0,0 +1,4 @@ +- 入口 `src/app.js` 加载 `.env`(`config/loadEnv.js` 从仓库根目录读取)、注册 CORS/JSON/bodyLimit 中间件、挂载路由数组并调用 `sequelize.sync()` 建表后执行 `ensureBootstrapSuperAdmin` 引导超级管理员。 +- 分层组织:`routes/` 按业务域拆分(auth, brands, models, ota, blacklist, otaTargetDevice, shareCodeLogs, users, dashboard),由 `routes/index.js` 汇总导出供 app 遍历挂载;`models/` 使用 Sequelize 定义实体并通过 `index.js` 统一导出;`services/` 封装外部依赖(S3、Redis、Meilisearch、曲线服务);`middleware/` 提供认证与请求体大小限制;`utils/` 暴露 JWT、密码哈希、统一响应格式;`validators/` 以 zod schema 校验入参。 +- 认证边界:`middleware/auth.js` 解析 Bearer token 注入 `req.user`,受保护路由在各自文件中通过 `router.use(authMiddleware)` 全局启用,仅 `/health`、根路径等公开接口例外;`requireSuperAdmin` 用于超管专用端点。 +- 启动流程:`start.sh` → `node src/app.js` → `loadEnv` → `sequelize.sync()` → `userBootstrap.ensureBootstrapSuperAdmin()` → `app.listen(8083)`,异常时降级继续运行。 \ No newline at end of file diff --git a/.qoder/repowiki/knowledge/zh/耳机品牌与 OTA 升级管理平台(前后端编排)/耳机品牌与型号管理后端 API/概述.md b/.qoder/repowiki/knowledge/zh/耳机品牌与 OTA 升级管理平台(前后端编排)/耳机品牌与型号管理后端 API/概述.md new file mode 100644 index 0000000..8af4cc9 --- /dev/null +++ b/.qoder/repowiki/knowledge/zh/耳机品牌与 OTA 升级管理平台(前后端编排)/耳机品牌与型号管理后端 API/概述.md @@ -0,0 +1 @@ +基于 Express + Sequelize 的 RESTful 服务,提供耳机品牌、型号、OTA 升级、用户与黑名单管理的后端接口。 \ No newline at end of file diff --git a/.qoder/repowiki/knowledge/zh/耳机品牌与 OTA 升级管理平台(前后端编排)/耳机品牌与型号管理后端 API/特殊配置与命令.md b/.qoder/repowiki/knowledge/zh/耳机品牌与 OTA 升级管理平台(前后端编排)/耳机品牌与型号管理后端 API/特殊配置与命令.md new file mode 100644 index 0000000..6d7768e --- /dev/null +++ b/.qoder/repowiki/knowledge/zh/耳机品牌与 OTA 升级管理平台(前后端编排)/耳机品牌与型号管理后端 API/特殊配置与命令.md @@ -0,0 +1 @@ +包管理器锁定为 `pnpm@11.5.2`,安装需 `pnpm install --frozen-lockfile`;本地开发可用 `pnpm dev`(nodemon 热重载),生产通过 `start.sh`/`stop.sh`/`restart.sh` 或 Docker 镜像启动;首次启动若 `dashboard_user` 为空则根据 `DASHBOARD_ADMIN_USERNAME/PASSWORD` 环境变量创建初始超级管理员。 \ No newline at end of file diff --git a/.qoder/repowiki/knowledge/zh/耳机品牌与 OTA 升级管理平台(前后端编排)/耳机品牌与型号管理后端 API/编码规范.md b/.qoder/repowiki/knowledge/zh/耳机品牌与 OTA 升级管理平台(前后端编排)/耳机品牌与型号管理后端 API/编码规范.md new file mode 100644 index 0000000..a3d7d6e --- /dev/null +++ b/.qoder/repowiki/knowledge/zh/耳机品牌与 OTA 升级管理平台(前后端编排)/耳机品牌与型号管理后端 API/编码规范.md @@ -0,0 +1,5 @@ +- 所有 API 返回统一 JSON 结构,包含 `code`(1:成功 / 0:错误 / 2:无数据)、`msg` 和 `data` 字段,由 `utils/response.js` 的 `ApiResponse` 生成。 +- 受保护路由在各自文件顶部通过 `router.use(authMiddleware)` 全局启用 JWT 校验,仅健康检查等公开接口例外。 +- 更新操作显式判断请求体字段是否为 `undefined` 或 `'null'` 字符串,区分“未提供”与“设为空”,避免覆盖现有值。 +- 关键业务动作(登录、CRUD、权限拒绝)通过 `logger.info/warn/error` 记录到 `logs/app.log`,错误堆栈附带上下文信息。 +- 环境变量集中通过 `config/loadEnv.js` 从仓库根目录 `.env` 加载,Docker 场景下由 compose env_file 注入而不覆盖已有变量。 \ No newline at end of file diff --git a/.qoder/repowiki/knowledge/zh/音频设备管理全栈平台/架构设计.md b/.qoder/repowiki/knowledge/zh/音频设备管理全栈平台/架构设计.md deleted file mode 100644 index f82e612..0000000 --- a/.qoder/repowiki/knowledge/zh/音频设备管理全栈平台/架构设计.md +++ /dev/null @@ -1,4 +0,0 @@ -- **服务编排**:使用 `docker-compose.yml` 定义 `backend` (Node.js) 和 `frontend` (Nginx) 服务,通过 `audio-network` 桥接网络实现内部通信。 -- **配置管理**:根目录 `.env` 作为唯一环境变量源,由 Compose 注入后端容器,前端通过 Nginx 反向代理 `/api` 至后端。 -- **部署流水线**:`scripts/upload.sh` 脚本基于 rsync/ssh 实现增量代码同步,配合 `DEPLOY.md` 规范了从本地构建到服务器重启的标准化运维路径。 -- **存储映射**:宿主机目录 `/data/projects/source` 挂载至后端容器,用于持久化存储 OTA 升级包。 \ No newline at end of file diff --git a/.qoder/repowiki/knowledge/zh/音频设备管理全栈平台/概述.md b/.qoder/repowiki/knowledge/zh/音频设备管理全栈平台/概述.md deleted file mode 100644 index 837828e..0000000 --- a/.qoder/repowiki/knowledge/zh/音频设备管理全栈平台/概述.md +++ /dev/null @@ -1 +0,0 @@ -通过 Docker Compose 统一编排前后端服务,结合标准化部署脚本实现从本地开发到远程服务器的自动化同步与容器化运维。 \ No newline at end of file diff --git a/.qoder/repowiki/knowledge/zh/音频设备管理全栈平台/特殊配置与命令.md b/.qoder/repowiki/knowledge/zh/音频设备管理全栈平台/特殊配置与命令.md deleted file mode 100644 index 017db93..0000000 --- a/.qoder/repowiki/knowledge/zh/音频设备管理全栈平台/特殊配置与命令.md +++ /dev/null @@ -1,2 +0,0 @@ -- **一键同步**:执行 `./scripts/upload.sh all` 将前端产物、后端源码及编排文件同步至远程服务器。 -- **服务启动**:在服务器端执行 `docker compose build --no-cache backend && docker compose up -d` 完成全量更新与启动。 \ No newline at end of file diff --git a/.qoder/repowiki/knowledge/zh/音频设备管理全栈平台/编码规范.md b/.qoder/repowiki/knowledge/zh/音频设备管理全栈平台/编码规范.md deleted file mode 100644 index 3d4ca4e..0000000 --- a/.qoder/repowiki/knowledge/zh/音频设备管理全栈平台/编码规范.md +++ /dev/null @@ -1,2 +0,0 @@ -- 所有服务共享根目录 `.env` 进行环境配置,禁止在各子模块中维护独立的环境变量文件。 -- 前端静态资源通过 Nginx 托管并代理 API 请求,后端统一暴露于 8000 端口(容器内)并通过 Compose 映射至宿主机 8083。 \ No newline at end of file diff --git a/.qoder/repowiki/knowledge/zh/音频设备管理全栈平台/音频设备管理后端 API/技术栈.md b/.qoder/repowiki/knowledge/zh/音频设备管理全栈平台/音频设备管理后端 API/技术栈.md deleted file mode 100644 index fe402c7..0000000 --- a/.qoder/repowiki/knowledge/zh/音频设备管理全栈平台/音频设备管理后端 API/技术栈.md +++ /dev/null @@ -1,5 +0,0 @@ -- **运行时与框架**:Node.js 22 (Alpine), Express.js v4。 -- **数据持久化**:MySQL (via `mysql2` and `sequelize` ORM)。 -- **缓存与搜索**:Redis (via `ioredis` for EQ cache), Meilisearch (via `axios` for model search)。 -- **文件存储**:AWS S3 (via `@aws-sdk/client-s3` for OTA packages and measurement files)。 -- **工具库**:`jsonwebtoken` (JWT), `zod` (Schema 验证), `multer` (文件上传), `winston` (日志)。 \ No newline at end of file diff --git a/.qoder/repowiki/knowledge/zh/音频设备管理全栈平台/音频设备管理后端 API/架构设计.md b/.qoder/repowiki/knowledge/zh/音频设备管理全栈平台/音频设备管理后端 API/架构设计.md deleted file mode 100644 index 96211df..0000000 --- a/.qoder/repowiki/knowledge/zh/音频设备管理全栈平台/音频设备管理后端 API/架构设计.md +++ /dev/null @@ -1,5 +0,0 @@ -- **分层架构**:采用经典的 MVC 模式,`routes/` 处理 HTTP 请求与响应,`models/` (Sequelize) 定义数据模型,`services/` 封装外部存储(S3, Redis)和业务逻辑。 -- **入口与初始化**:`src/app.js` 为应用入口,负责加载环境变量、同步数据库表结构 (`sequelize.sync()`) 并引导创建超级管理员 (`userBootstrap`)。 -- **路由组织**:`src/routes/index.js` 汇总所有业务路由(auth, brands, models, ota 等),通过 Express 中间件机制挂载。 -- **认证机制**:`middleware/auth.js` 实现基于 JWT 的身份验证,支持普通用户登录与超级管理员权限校验 (`requireSuperAdmin`)。 -- **外部集成**:通过 `services/` 目录下的模块与 AWS S3 (文件存储)、Redis (EQ 缓存)、Meilisearch (搜索索引) 及远程曲线服务进行交互。 \ No newline at end of file diff --git a/.qoder/repowiki/knowledge/zh/音频设备管理全栈平台/音频设备管理后端 API/概述.md b/.qoder/repowiki/knowledge/zh/音频设备管理全栈平台/音频设备管理后端 API/概述.md deleted file mode 100644 index e274216..0000000 --- a/.qoder/repowiki/knowledge/zh/音频设备管理全栈平台/音频设备管理后端 API/概述.md +++ /dev/null @@ -1 +0,0 @@ -提供耳机品牌、型号、OTA 升级及用户管理的 RESTful API,集成 MySQL、Redis、S3 和 Meilisearch。 \ No newline at end of file diff --git a/.qoder/repowiki/knowledge/zh/音频设备管理全栈平台/音频设备管理后端 API/特殊配置与命令.md b/.qoder/repowiki/knowledge/zh/音频设备管理全栈平台/音频设备管理后端 API/特殊配置与命令.md deleted file mode 100644 index 2f51e97..0000000 --- a/.qoder/repowiki/knowledge/zh/音频设备管理全栈平台/音频设备管理后端 API/特殊配置与命令.md +++ /dev/null @@ -1,3 +0,0 @@ -- **依赖管理**:使用 `pnpm` 作为包管理器 (`packageManager: pnpm@11.5.2`),安装命令为 `pnpm install --frozen-lockfile`。 -- **启动脚本**:提供 `start.sh`, `stop.sh`, `restart.sh` 用于进程管理;Docker 镜像基于 `node:22-alpine` 构建。 -- **环境引导**:首次启动时会自动执行 `ensureBootstrapSuperAdmin`,若数据库无用户则根据环境变量 `DASHBOARD_ADMIN_USERNAME/PASSWORD` 创建初始超级管理员。 \ No newline at end of file diff --git a/.qoder/repowiki/knowledge/zh/音频设备管理全栈平台/音频设备管理后端 API/编码规范.md b/.qoder/repowiki/knowledge/zh/音频设备管理全栈平台/音频设备管理后端 API/编码规范.md deleted file mode 100644 index 0e242ba..0000000 --- a/.qoder/repowiki/knowledge/zh/音频设备管理全栈平台/音频设备管理后端 API/编码规范.md +++ /dev/null @@ -1,4 +0,0 @@ -- 统一响应格式:所有 API 均通过 `utils/response.js` 中的 `ApiResponse` 对象返回标准化 JSON,包含 `code` (1:成功, 0:错误, 2:无数据), `msg` 和 `data` 字段。 -- 集中式日志记录:使用 `winston` 配置的 `logger` 记录关键业务操作(如登录、创建/更新/删除资源)及错误信息,日志输出至 `logs/app.log`。 -- 路由级认证保护:受保护的路由组(如 brands, models, ota)在路由文件顶部通过 `router.use(authMiddleware)` 全局启用 JWT 验证,仅公开接口(如 `/health`, `/api/ota/latest/check`)例外。 -- 参数空值处理:在更新操作中,显式检查请求体字段是否为 `undefined` 或 `'null'` 字符串,以区分“未提供”与“设为空”,避免意外覆盖现有数据。 \ No newline at end of file diff --git a/.qoder/repowiki/zh/content/开发指南.md b/.qoder/repowiki/zh/content/开发指南/开发指南.md similarity index 100% rename from .qoder/repowiki/zh/content/开发指南.md rename to .qoder/repowiki/zh/content/开发指南/开发指南.md diff --git a/.qoder/repowiki/zh/content/开发指南/设计系统.md b/.qoder/repowiki/zh/content/开发指南/设计系统.md new file mode 100644 index 0000000..7bc2bf9 --- /dev/null +++ b/.qoder/repowiki/zh/content/开发指南/设计系统.md @@ -0,0 +1,325 @@ +# 设计系统 + + +**本文引用的文件** +- [backend/src/app.js](file://backend/src/app.js) +- [backend/src/routes/index.js](file://backend/src/routes/index.js) +- [backend/src/routes/auth.js](file://backend/src/routes/auth.js) +- [backend/src/models/index.js](file://backend/src/models/index.js) +- [backend/src/models/Brand.js](file://backend/src/models/Brand.js) +- [backend/src/models/Model.js](file://backend/src/models/Model.js) +- [backend/src/config/database.js](file://backend/src/config/database.js) +- [backend/package.json](file://backend/package.json) +- [frontend/src/main.js](file://frontend/src/main.js) +- [frontend/src/App.vue](file://frontend/src/App.vue) +- [frontend/src/router/index.js](file://frontend/src/router/index.js) +- [frontend/src/layout/index.vue](file://frontend/src/layout/index.vue) +- [frontend/src/views/home/index.vue](file://frontend/src/views/home/index.vue) +- [frontend/package.json](file://frontend/package.json) +- [docker-compose.yml](file://docker-compose.yml) +- [DEPLOY.md](file://DEPLOY.md) + + +## 目录 +1. [简介](#简介) +2. [项目结构](#项目结构) +3. [核心组件](#核心组件) +4. [架构总览](#架构总览) +5. [详细组件分析](#详细组件分析) +6. [依赖关系分析](#依赖关系分析) +7. [性能与可扩展性](#性能与可扩展性) +8. [故障排查指南](#故障排查指南) +9. [结论](#结论) +10. [附录](#附录) + +## 简介 +本项目是一个面向耳机品牌与型号管理的后台管理系统,包含前后端分离的完整实现:前端基于 Vue 3 + Element Plus,后端基于 Express + Sequelize(MySQL),通过 Docker Compose 进行容器化部署。系统提供品牌管理、型号管理、OTA 升级包管理、黑名单管理、定向升级、分享码日志以及用户认证等能力。 + +## 项目结构 +仓库采用前后端分层组织方式: +- backend:Express 应用入口、路由、模型、配置、中间件、服务与工具模块 +- frontend:Vue 3 应用入口、路由、布局、视图、API 封装、样式与工具 +- docker-compose.yml:编排前端 Nginx 与后端 Node 服务 +- DEPLOY.md:部署与环境说明 + +```mermaid +graph TB +subgraph "前端" +FE_main["frontend/src/main.js"] +FE_app["frontend/src/App.vue"] +FE_router["frontend/src/router/index.js"] +FE_layout["frontend/src/layout/index.vue"] +FE_home["frontend/src/views/home/index.vue"] +end +subgraph "后端" +BE_app["backend/src/app.js"] +BE_routes["backend/src/routes/index.js"] +BE_auth["backend/src/routes/auth.js"] +BE_models["backend/src/models/index.js"] +BE_brand["backend/src/models/Brand.js"] +BE_model["backend/src/models/Model.js"] +BE_db["backend/src/config/database.js"] +end +FE_main --> FE_app +FE_app --> FE_router +FE_router --> FE_layout +FE_layout --> FE_home +FE_main --> |"HTTP 请求 /api/*"| BE_app +BE_app --> BE_routes +BE_routes --> BE_auth +BE_auth --> BE_models +BE_models --> BE_brand +BE_models --> BE_model +BE_app --> BE_db +``` + +**图表来源** +- [frontend/src/main.js:1-26](file://frontend/src/main.js#L1-L26) +- [frontend/src/App.vue:1-30](file://frontend/src/App.vue#L1-L30) +- [frontend/src/router/index.js:1-103](file://frontend/src/router/index.js#L1-L103) +- [frontend/src/layout/index.vue:1-348](file://frontend/src/layout/index.vue#L1-L348) +- [frontend/src/views/home/index.vue:1-327](file://frontend/src/views/home/index.vue#L1-L327) +- [backend/src/app.js:1-60](file://backend/src/app.js#L1-L60) +- [backend/src/routes/index.js:1-15](file://backend/src/routes/index.js#L1-L15) +- [backend/src/routes/auth.js:1-112](file://backend/src/routes/auth.js#L1-L112) +- [backend/src/models/index.js:1-10](file://backend/src/models/index.js#L1-L10) +- [backend/src/models/Brand.js:1-23](file://backend/src/models/Brand.js#L1-L23) +- [backend/src/models/Model.js:1-53](file://backend/src/models/Model.js#L1-L53) +- [backend/src/config/database.js:1-24](file://backend/src/config/database.js#L1-L24) + +**章节来源** +- [backend/src/app.js:1-60](file://backend/src/app.js#L1-L60) +- [frontend/src/main.js:1-26](file://frontend/src/main.js#L1-L26) +- [docker-compose.yml:1-48](file://docker-compose.yml#L1-L48) +- [DEPLOY.md:1-269](file://DEPLOY.md#L1-L269) + +## 核心组件 +- 应用入口 + - 后端:Express 应用初始化、全局中间件、健康检查、路由挂载、数据库同步与启动监听 + - 前端:Vue 应用创建、Element Plus 注册、路由挂载、加载遮罩处理 +- 路由层 + - 后端:按功能域拆分路由并统一汇总挂载 + - 前端:基于 vue-router 的页面路由与导航守卫(鉴权、超级管理员控制) +- 数据模型 + - 使用 Sequelize 定义实体(如 Brand、Model),集中导出供路由与服务使用 +- 配置与基础设施 + - 数据库连接、环境变量加载、日志、Redis 等(部分在配置目录中) + +**章节来源** +- [backend/src/app.js:1-60](file://backend/src/app.js#L1-L60) +- [backend/src/routes/index.js:1-15](file://backend/src/routes/index.js#L1-L15) +- [frontend/src/main.js:1-26](file://frontend/src/main.js#L1-L26) +- [frontend/src/router/index.js:1-103](file://frontend/src/router/index.js#L1-L103) +- [backend/src/models/index.js:1-10](file://backend/src/models/index.js#L1-L10) +- [backend/src/config/database.js:1-24](file://backend/src/config/database.js#L1-L24) + +## 架构总览 +系统采用经典的前后端分离架构,前端静态资源由 Nginx 托管并通过反向代理将 /api 转发到后端;后端以 Express 提供服务,使用 Sequelize 访问 MySQL。 + +```mermaid +graph TB +Client["浏览器客户端"] +Nginx["Nginx(前端容器)"] +API["Express(后端容器)"] +DB["MySQL"] +Redis["Redis(可选)"] +Client --> Nginx +Nginx --> |"/api/*" 代理| API +API --> DB +API --> Redis +``` + +**图表来源** +- [docker-compose.yml:1-48](file://docker-compose.yml#L1-L48) +- [DEPLOY.md:1-269](file://DEPLOY.md#L1-L269) + +## 详细组件分析 + +### 认证流程(登录与鉴权) +该流程涵盖前端导航守卫、后端登录接口、JWT 签发与受保护接口的鉴权中间件。 + +```mermaid +sequenceDiagram +participant U as "用户" +participant FE as "前端路由守卫" +participant API as "后端认证路由" +participant DB as "数据库" +participant JWT as "JWT工具" +U->>FE : 访问受保护页面 +FE->>FE : 检查本地令牌是否过期 +alt 无令牌或已过期 +FE-->>U : 重定向至登录页 +else 有有效令牌 +FE->>API : GET /api/auth/me +API->>DB : 查询当前用户 +DB-->>API : 返回用户信息 +API-->>FE : 返回用户信息 +FE-->>U : 放行并渲染页面 +end +U->>API : POST /api/auth/login +API->>DB : 校验用户名/状态 +DB-->>API : 返回用户记录 +API->>API : 校验密码哈希 +API->>JWT : 生成访问令牌 +JWT-->>API : 返回令牌 +API-->>U : 返回令牌与用户信息 +``` + +**图表来源** +- [frontend/src/router/index.js:76-100](file://frontend/src/router/index.js#L76-L100) +- [backend/src/routes/auth.js:24-64](file://backend/src/routes/auth.js#L24-L64) +- [backend/src/routes/auth.js:66-77](file://backend/src/routes/auth.js#L66-L77) + +**章节来源** +- [frontend/src/router/index.js:76-100](file://frontend/src/router/index.js#L76-L100) +- [backend/src/routes/auth.js:24-64](file://backend/src/routes/auth.js#L24-L64) +- [backend/src/routes/auth.js:66-77](file://backend/src/routes/auth.js#L66-L77) + +### 首页“今日新增”数据流 +首页展示当日新增的型号与 OTA 记录,调用仪表盘统计接口获取数据。 + +```mermaid +sequenceDiagram +participant V as "Home 视图" +participant API as "Dashboard API" +participant S as "后端路由/服务" +participant DB as "数据库" +V->>API : 请求今日统计数据 +API->>S : 进入业务逻辑 +S->>DB : 聚合当日新增型号/OTA +DB-->>S : 返回统计结果 +S-->>API : 组装响应 +API-->>V : 返回 models/otas 列表 +V->>V : 渲染卡片与列表 +``` + +**图表来源** +- [frontend/src/views/home/index.vue:127-148](file://frontend/src/views/home/index.vue#L127-L148) + +**章节来源** +- [frontend/src/views/home/index.vue:127-148](file://frontend/src/views/home/index.vue#L127-L148) + +### 数据模型与关系(简化) +以下模型用于品牌与型号管理,字段注释清晰,便于理解数据结构。 + +```mermaid +erDiagram +BRAND { +int id PK +string name UK +} +MODEL { +int id PK +string brand_name +string name +string form +string rig +string source +string eq_key +datetime create_at +} +BRAND ||--o{ MODEL : "brand_name 关联" +``` + +**图表来源** +- [backend/src/models/Brand.js:1-23](file://backend/src/models/Brand.js#L1-L23) +- [backend/src/models/Model.js:1-53](file://backend/src/models/Model.js#L1-53) + +**章节来源** +- [backend/src/models/Brand.js:1-23](file://backend/src/models/Brand.js#L1-L23) +- [backend/src/models/Model.js:1-53](file://backend/src/models/Model.js#L1-53) + +### 布局与导航 +侧边栏支持折叠/展开、面包屑与用户菜单,结合路由元信息进行权限控制与高亮。 + +```mermaid +flowchart TD +Start(["进入 Layout"]) --> ResolveMenu["根据当前路径计算展开菜单"] +ResolveMenu --> Breadcrumb["解析面包屑标题与分组"] +Breadcrumb --> UserMenu{"用户菜单操作"} +UserMenu --> |退出| Logout["清除本地认证并重定向登录"] +UserMenu --> |账号管理| ToUsers["跳转系统用户管理"] +UserMenu --> |修改密码| OpenDialog["打开修改密码弹窗"] +Logout --> End(["结束"]) +ToUsers --> End +OpenDialog --> End +``` + +**图表来源** +- [frontend/src/layout/index.vue:174-231](file://frontend/src/layout/index.vue#L174-L231) + +**章节来源** +- [frontend/src/layout/index.vue:174-231](file://frontend/src/layout/index.vue#L174-L231) + +## 依赖关系分析 +- 后端依赖 + - Express、Sequelize、MySQL、JSON Web Token、Multer、Axios、Zod、Winston、ioredis、AWS SDK(S3)等 +- 前端依赖 + - Vue 3、Element Plus、Vue Router、Axios、JSON Pretty 等 +- 运行时编排 + - Docker Compose 编排前端 Nginx 与后端 Node 服务,端口映射与网络互通 + +```mermaid +graph LR +FE_pkg["frontend/package.json"] +BE_pkg["backend/package.json"] +Compose["docker-compose.yml"] +FE_pkg --> |"构建产物 dist"| Compose +BE_pkg --> |"镜像构建/运行"| Compose +Compose --> |"Nginx 8082 -> 80"| FE_static["前端静态资源"] +Compose --> |"Node 8083 -> 8000"| BE_api["后端 API"] +``` + +**图表来源** +- [frontend/package.json:1-24](file://frontend/package.json#L1-L24) +- [backend/package.json:1-29](file://backend/package.json#L1-L29) +- [docker-compose.yml:1-48](file://docker-compose.yml#L1-L48) + +**章节来源** +- [frontend/package.json:1-24](file://frontend/package.json#L1-L24) +- [backend/package.json:1-29](file://backend/package.json#L1-L29) +- [docker-compose.yml:1-48](file://docker-compose.yml#L1-L48) + +## 性能与可扩展性 +- 数据库连接 + - 使用 Sequelize 连接 MySQL,建议在生产环境启用连接池与慢查询日志,合理设置超时与重试策略 +- 静态资源 + - 前端通过 Nginx 缓存静态资源,开启 Gzip/Brotli 压缩可提升首屏加载速度 +- 鉴权与限流 + - 建议在网关层增加速率限制与请求体大小限制(后端已有 bodyLimit 中间件) +- 扩展点 + - 可按功能域继续拆分路由与服务,引入缓存层(Redis)与消息队列以提升吞吐 + +[本节为通用指导,不直接分析具体文件] + +## 故障排查指南 +- 前端空白 + - 确认 dist 已上传且 Nginx 配置正确,查看浏览器控制台是否有 404 或跨域错误 +- API 请求失败 + - 检查后端容器状态与健康检查接口,查看后端日志定位数据库/Redis 连接问题 +- 后端构建失败 + - 确认镜像基础版本与 pnpm 版本一致,确保上传了 package.json 与锁文件 +- 环境变量未生效 + - 重新创建容器使 .env 生效 + +**章节来源** +- [DEPLOY.md:226-269](file://DEPLOY.md#L226-L269) + +## 结论 +本设计系统以清晰的模块化与容器化部署为基础,提供了完整的品牌与型号管理能力,并在认证、路由、模型与部署方面形成了稳定的工程实践。后续可在缓存、监控与可观测性方面进一步增强,以满足更大规模的生产需求。 + +[本节为总结性内容,不直接分析具体文件] + +## 附录 +- 关键入口与脚本 + - 后端入口:[backend/src/app.js](file://backend/src/app.js) + - 前端入口:[frontend/src/main.js](file://frontend/src/main.js) + - 路由汇总:[backend/src/routes/index.js](file://backend/src/routes/index.js) + - 认证路由:[backend/src/routes/auth.js](file://backend/src/routes/auth.js) + - 模型索引:[backend/src/models/index.js](file://backend/src/models/index.js) + - 数据库配置:[backend/src/config/database.js](file://backend/src/config/database.js) + - 前端路由:[frontend/src/router/index.js](file://frontend/src/router/index.js) + - 布局组件:[frontend/src/layout/index.vue](file://frontend/src/layout/index.vue) + - 首页视图:[frontend/src/views/home/index.vue](file://frontend/src/views/home/index.vue) + - 部署文档:[DEPLOY.md](file://DEPLOY.md) + - 编排文件:[docker-compose.yml](file://docker-compose.yml) \ No newline at end of file diff --git a/.qoder/repowiki/zh/content/系统架构/后端架构.md b/.qoder/repowiki/zh/content/系统架构/后端架构.md index cc5357e..1425043 100644 --- a/.qoder/repowiki/zh/content/系统架构/后端架构.md +++ b/.qoder/repowiki/zh/content/系统架构/后端架构.md @@ -22,6 +22,13 @@ - [backend/src/services/measurementStorage.js](file://backend/src/services/measurementStorage.js) +## 更新摘要 +**变更内容** +- 增强了curveClient服务的错误处理和日志记录机制 +- 提升了音频曲线API集成的可靠性和可观测性 +- 优化了外部API调用的超时配置和异常处理 +- 完善了响应数据的详细日志输出用于调试 + ## 目录 1. [引言](#引言) 2. [项目结构](#项目结构) @@ -392,6 +399,8 @@ I --> |是| K["放行"] - 外部服务错误 - S3/曲线服务捕获异常并记录日志,抛出统一错误 +**更新** curveClient服务增强了错误处理和日志记录机制,提升了音频曲线API集成的可靠性 + 章节来源 - [backend/src/utils/response.js:1-25](file://backend/src/utils/response.js#L1-L25) - [backend/src/routes/auth.js:60-64](file://backend/src/routes/auth.js#L60-L64) @@ -485,6 +494,62 @@ App->>App : "listen(PORT)" - [backend/src/app.js:22-34](file://backend/src/app.js#L22-L34) - [backend/src/app.js:42-59](file://backend/src/app.js#L42-L59) +### 音频曲线API集成增强 + +**新增** curveClient服务经过重大增强,显著提升了音频曲线API集成的可靠性和可观测性: + +#### 增强的错误处理机制 +- **网络请求异常处理**:axios请求失败时记录详细的警告日志,包含完整的URL和错误信息 +- **HTTP状态码验证**:对非200状态码进行专门处理,返回明确的错误信息 +- **响应数据验证**:多层嵌套的响应数据结构解析,支持多种格式 +- **Base64解码容错**:自定义字符映射和标准Base64转换的错误处理 +- **JSON解析异常**:解码后JSON格式的验证和错误捕获 + +#### 完善的日志记录系统 +- **请求追踪日志**:记录完整的请求参数(品牌、型号、佩戴方式、目标类型、完整URL) +- **响应调试日志**:详细记录响应状态码、数据类型和部分响应内容(限制长度避免日志过大) +- **错误诊断日志**:关键错误点记录原始数据片段,便于问题定位 +- **结构化日志格式**:统一的timestamp-level-message格式,支持元数据扩展 + +#### 可靠的超时配置 +- **请求超时控制**:默认20秒超时,防止长时间阻塞 +- **连接超时保护**:Redis客户端配置10秒连接超时 +- **重试机制**:Redis操作最多重试2次 + +```mermaid +sequenceDiagram +participant Client as "调用方" +participant Curve as "curveClient.js" +participant Axios as "Axios HTTP客户端" +participant Logger as "日志系统" +participant External as "外部曲线API" +Client->>Curve : fetchAndValidateCurve() +Curve->>Logger : 记录请求参数日志 +Curve->>Axios : GET 请求(带超时配置) +Axios->>External : 发送HTTP请求 +External-->>Axios : 返回响应 +Axios-->>Curve : 响应数据 +Curve->>Logger : 记录响应状态和数据类型 +Curve->>Curve : 解析响应数据 +alt 解析成功 +Curve->>Curve : Base64解码 +Curve->>Curve : JSON解析 +Curve->>Curve : 验证parametric_eq结构 +Curve-->>Client : 返回验证结果 +else 解析失败 +Curve->>Logger : 记录详细错误信息 +Curve-->>Client : 返回错误信息 +end +``` + +图表来源 +- [backend/src/services/curveClient.js:81-138](file://backend/src/services/curveClient.js#L81-L138) +- [backend/src/config/logger.js:10-26](file://backend/src/config/logger.js#L10-L26) + +章节来源 +- [backend/src/services/curveClient.js:1-147](file://backend/src/services/curveClient.js#L1-147) +- [backend/src/config/logger.js:1-29](file://backend/src/config/logger.js#L1-L29) + ## 依赖关系分析 - 包管理与运行 - 依赖 express、sequelize、mysql2、jsonwebtoken、winston、ioredis 等 @@ -531,6 +596,10 @@ SVC --> LOG["logger.js"] - 设置超时与错误处理,避免阻塞请求 - 日志 - 控制台与文件双通道,避免 info 级日志过多 +- 音频曲线API + - 合理的超时配置(20秒)防止长时间等待 + - 响应数据截断日志避免日志过大 + - 错误处理快速失败,不阻塞主流程 ## 故障排查指南 - 认证失败 @@ -545,15 +614,22 @@ SVC --> LOG["logger.js"] - S3 读取/上传失败 - 检查凭证或 IAM 角色配置 - 关注 NoSuchKey 等特定异常 +- **音频曲线API问题** + - 检查 CURVE_API_BASE_URL 环境变量配置 + - 查看详细的请求和响应日志,特别是响应数据类型和内容 + - 确认网络连接和防火墙设置 + - 检查Base64编码格式是否正确 + - 验证parametric_eq数据结构是否符合要求 章节来源 - [backend/src/middleware/auth.js:1-36](file://backend/src/middleware/auth.js#L1-L36) - [backend/src/app.js:48-51](file://backend/src/app.js#L48-L51) - [backend/src/config/redis.js:24-26](file://backend/src/config/redis.js#L24-L26) - [backend/src/services/measurementStorage.js:102-107](file://backend/src/services/measurementStorage.js#L102-L107) +- [backend/src/services/curveClient.js:92-116](file://backend/src/services/curveClient.js#L92-L116) ## 结论 -本后端以 Express 为核心,采用清晰的分层与模块化设计,结合 Sequelize、Redis 与 Winston 实现了稳定的数据访问、缓存与日志能力。认证授权、请求限制与统一响应提升了安全性与一致性。建议后续引入 API 版本前缀、完善错误分类与指标上报,持续优化数据库与缓存策略以提升整体性能与可观测性。 +本后端以 Express 为核心,采用清晰的分层与模块化设计,结合 Sequelize、Redis 与 Winston 实现了稳定的数据访问、缓存与日志能力。认证授权、请求限制与统一响应提升了安全性与一致性。**最新的curveClient服务增强显著提升了音频曲线API集成的可靠性和可观测性,通过完善的错误处理机制、详细的日志记录和合理的超时配置,确保了外部服务调用的稳定性。** 建议后续引入 API 版本前缀、完善错误分类与指标上报,持续优化数据库与缓存策略以提升整体性能与可观测性。 ## 附录 - 环境变量 @@ -563,6 +639,7 @@ SVC --> LOG["logger.js"] - JWT_SECRET:令牌签名密钥 - DASHBOARD_ADMIN_*:超级管理员初始化用户名与密码 - AWS_*:S3 区域、凭证与桶名 + - **CURVE_API_BASE_URL:音频曲线API基础地址** - 路由示例 - GET / → 根路径 - GET /health → 健康检查 @@ -578,4 +655,5 @@ SVC --> LOG["logger.js"] - [backend/src/services/userBootstrap.js:9-10](file://backend/src/services/userBootstrap.js#L9-L10) - [backend/src/services/measurementStorage.js:9-12](file://backend/src/services/measurementStorage.js#L9-L12) - [backend/src/app.js:22-34](file://backend/src/app.js#L22-L34) -- [backend/src/routes/auth.js:24-77](file://backend/src/routes/auth.js#L24-L77) \ No newline at end of file +- [backend/src/routes/auth.js:24-77](file://backend/src/routes/auth.js#L24-L77) +- [backend/src/services/curveClient.js:8](file://backend/src/services/curveClient.js#L8) \ No newline at end of file diff --git a/.qoder/repowiki/zh/content/部署与运维/部署指南.md b/.qoder/repowiki/zh/content/部署与运维/部署指南.md index 885024e..a0be84d 100644 --- a/.qoder/repowiki/zh/content/部署与运维/部署指南.md +++ b/.qoder/repowiki/zh/content/部署与运维/部署指南.md @@ -20,6 +20,13 @@ - [frontend/vite.config.js](file://frontend/vite.config.js) +## 更新摘要 +**变更内容** +- 更新了Docker Compose配置说明,突出网络和卷挂载优化 +- 增强了前后端服务连接稳定性的配置细节 +- 添加了网络隔离和容器间通信的配置说明 +- 完善了卷挂载的安全性和性能考虑 + ## 目录 1. [简介](#简介) 2. [项目结构](#项目结构) @@ -41,10 +48,11 @@ - 后端容器暴露 8000 端口,并通过环境变量 PORT 固定该值以匹配 Nginx 代理。 - 日志采用 JSON 文件轮转策略,单文件最大 10MB,最多保留 5 份。 - 提供 OTA 升级包本地存储卷挂载,便于 X9 设备升级包管理。 +- **新增**:使用自定义桥接网络 `audio-network` 确保容器间通信的稳定性和安全性。 ```mermaid graph TB -subgraph "服务器" +subgraph "Docker 网络 audio-network" FE["Nginx 前端
端口 80 映射 8082"] BE["Node.js 后端
端口 8000 映射 8083"] VOL1["/data/project/dashboard/frontend/dist"] @@ -55,12 +63,12 @@ FE --- VOL1 BE --- VOL2 ``` -图表来源 +**图表来源** - [docker-compose.yml:7-46](file://docker-compose.yml#L7-L46) - [frontend/nginx.conf:11-21](file://frontend/nginx.conf#L11-L21) -章节来源 -- [docker-compose.yml:1-46](file://docker-compose.yml#L1-L46) +**章节来源** +- [docker-compose.yml:1-48](file://docker-compose.yml#L1-L48) - [DEPLOY.md:1-16](file://DEPLOY.md#L1-L16) ## 核心组件 @@ -68,10 +76,12 @@ BE --- VOL2 - 基于 Node.js 22 Alpine,使用 pnpm 作为包管理器,生产依赖安装在容器内完成。 - 通过环境变量 PORT=8000 固定容器内端口,与 Nginx 代理保持一致。 - 日志目录在容器内创建,便于持久化与查看。 + - **新增**:加入 `extra_hosts` 配置支持 `host.docker.internal` 访问宿主机。 - 前端服务(Nginx) - 使用 nginx:alpine 镜像,直接挂载服务器上的 dist 与 nginx.conf。 - Nginx 监听 80 端口,将 /api 请求代理到后端容器的 8000 端口。 - 支持静态资源缓存与上传大小限制。 + - **新增**:卷挂载使用只读模式 (`:ro`) 提升安全性。 - 上传脚本(upload.sh) - 基于 rsync + SSH,支持分模块上传(frontend、backend、compose),也支持自定义路径。 - 提供虚拟执行(-n)预览能力,便于确认同步范围。 @@ -80,12 +90,12 @@ BE --- VOL2 - 后端支持通过 APP_ENV 切换开发/生产环境行为。 - JWT 密钥、管理员密码等敏感信息需在生产环境强制替换。 -章节来源 +**章节来源** - [backend/Dockerfile:1-20](file://backend/Dockerfile#L1-L20) - [frontend/Dockerfile:1-32](file://frontend/Dockerfile#L1-L32) - [scripts/upload.sh:1-191](file://scripts/upload.sh#L1-L191) - [frontend/nginx.conf:1-34](file://frontend/nginx.conf#L1-L34) -- [backend/src/config/env.js:1-12](file://backend/src/config/env.js#L1-L12) +- [backend/src/config/env.js:1-13](file://backend/src/config/env.js#L1-L13) - [backend/src/config/loadEnv.js:1-14](file://backend/src/config/loadEnv.js#L1-L14) - [backend/src/utils/jwt.js:1-27](file://backend/src/utils/jwt.js#L1-L27) @@ -94,21 +104,26 @@ BE --- VOL2 - 前端静态资源来自服务器上的 dist 目录,Nginx 直接挂载。 - 后端容器挂载 OTA 升级包存储目录,便于设备侧访问。 - Docker Compose 控制服务生命周期与网络隔离。 +- **新增**:所有服务加入自定义桥接网络 `audio-network`,确保容器间通信的稳定性和安全性。 ```mermaid graph TB U["用户浏览器"] --> P["宿主机端口 8082/Nginx"] P --> |"/api 代理"| B["后端容器 8000"] -P --> |静态资源"| D["/data/project/dashboard/frontend/dist"] +P --> |静态资源| D["/data/project/dashboard/frontend/dist"] B --> S["OTA 存储卷 /data/projects/source"] +subgraph "Docker 网络 audio-network" +B +P +end ``` -图表来源 +**图表来源** - [docker-compose.yml:7-46](file://docker-compose.yml#L7-L46) - [frontend/nginx.conf:11-21](file://frontend/nginx.conf#L11-L21) -章节来源 -- [DEPLOY.md:5-16](file://DEPLY.md#L5-L16) +**章节来源** +- [DEPLOY.md:5-16](file://DEPLOY.md#L5-L16) - [docker-compose.yml:7-46](file://docker-compose.yml#L7-L46) ## 详细组件分析 @@ -122,9 +137,9 @@ B --> S["OTA 存储卷 /data/projects/source"] - 关键点:PORT=8000(容器内固定)、JWT_SECRET、DASHBOARD_ADMIN_PASSWORD、数据库、搜索、S3、Redis、OTA 等参数 - .env 不会被上传脚本自动上传,需在服务器单独维护 - 上传代码并启动 - - 参考“本地构建 + 上传”章节 + - 参考"本地构建 + 上传"章节 -章节来源 +**章节来源** - [DEPLOY.md:18-46](file://DEPLOY.md#L18-L46) ### 本地构建 + 上传(推荐) @@ -146,7 +161,7 @@ B --> S["OTA 存储卷 /data/projects/source"] - 后端 API:http://服务器 IP:8083/api/... - 健康检查:http://服务器 IP:8083/health -章节来源 +**章节来源** - [DEPLOY.md:49-120](file://DEPLOY.md#L49-L120) - [scripts/upload.sh:39-75](file://scripts/upload.sh#L39-L75) - [scripts/upload.sh:142-187](file://scripts/upload.sh#L142-L187) @@ -159,7 +174,7 @@ B --> S["OTA 存储卷 /data/projects/source"] - 一键流程 - 本地构建前端并上传,服务器执行后端镜像构建与启动 -章节来源 +**章节来源** - [DEPLOY.md:122-154](file://DEPLOY.md#L122-L154) ### docker-compose.yml 说明 @@ -168,17 +183,21 @@ B --> S["OTA 存储卷 /data/projects/source"] - environment: 设置 PORT=8000,覆盖容器内端口 - ports: 8083:8000(宿主:容器) - volumes: 挂载 OTA 存储目录 + - **新增**:networks: audio-network 加入自定义网络 + - **新增**:extra_hosts: host.docker.internal:host-gateway 支持宿主机访问 - frontend - image: nginx:alpine - ports: 8082:80 - - volumes: 挂载 dist 与 nginx.conf + - volumes: 挂载 dist 与 nginx.conf(只读模式 :ro) - depends_on: 依赖后端容器 + - **新增**:networks: audio-network 加入自定义网络 - 日志轮转 - 每个服务启用 json-file,单文件最大 10MB,最多 5 份 - 网络 - - 使用自定义桥接网络 audio-network,便于容器间通信 + - **新增**:使用自定义桥接网络 audio-network,便于容器间通信 + - **新增**:网络驱动为 bridge,提供容器间隔离和通信 -章节来源 +**章节来源** - [docker-compose.yml:7-46](file://docker-compose.yml#L7-L46) - [DEPLOY.md:157-171](file://DEPLOY.md#L157-L171) @@ -186,7 +205,7 @@ B --> S["OTA 存储卷 /data/projects/source"] - 后端镜像构建所需文件 - Dockerfile、package.json、pnpm-lock.yaml、src/ -章节来源 +**章节来源** - [DEPLOY.md:174-187](file://DEPLOY.md#L174-L187) ### 环境变量参考 @@ -198,7 +217,7 @@ B --> S["OTA 存储卷 /data/projects/source"] - OTA:OTA_X8_PUBLIC_BASE、OTA_X9_URL_BASE、OTA_UPLOAD_DIR - Redis EQ:REDIS_HOST、REDIS_PORT、REDIS_PASSWORD、REDIS_EQ_DB -章节来源 +**章节来源** - [DEPLOY.md:190-203](file://DEPLOY.md#L190-L203) ### 目录结构(服务器) @@ -215,7 +234,7 @@ B --> S["OTA 存储卷 /data/projects/source"] - nginx.conf - /data/projects/source/(OTA 升级包存储) -章节来源 +**章节来源** - [DEPLOY.md:206-223](file://DEPLOY.md#L206-L223) ### 上传脚本使用方法 @@ -229,7 +248,7 @@ B --> S["OTA 存储卷 /data/projects/source"] - 默认不同步 nginx.conf 与 Dockerfile,需要时需显式指定 - 路径不在项目内会被跳过 -章节来源 +**章节来源** - [scripts/upload.sh:39-75](file://scripts/upload.sh#L39-L75) - [scripts/upload.sh:142-187](file://scripts/upload.sh#L142-L187) @@ -243,7 +262,7 @@ B --> S["OTA 存储卷 /data/projects/source"] - Compose - scp docker-compose.yml 至服务器根目录 -章节来源 +**章节来源** - [DEPLOY.md:77-91](file://DEPLOY.md#L77-L91) ### 构建与启动命令 @@ -255,7 +274,7 @@ B --> S["OTA 存储卷 /data/projects/source"] - 停止服务 - docker compose down -章节来源 +**章节来源** - [DEPLOY.md:92-103](file://DEPLOY.md#L92-L103) - [DEPLOY.md:251-256](file://DEPLOY.md#L251-L256) @@ -269,7 +288,7 @@ B --> S["OTA 存储卷 /data/projects/source"] - 前端:http://服务器 IP:8082 - 后端 API:http://服务器 IP:8083/api/... -章节来源 +**章节来源** - [DEPLOY.md:104-119](file://DEPLOY.md#L104-L119) ### 后端本地脚本(非 Docker) @@ -277,7 +296,7 @@ B --> S["OTA 存储卷 /data/projects/source"] - restart.sh:停止占用 8083 端口的进程并重启服务 - stop.sh:查找并终止占用 8083 端口的进程 -章节来源 +**章节来源** - [backend/start.sh:1-5](file://backend/start.sh#L1-L5) - [backend/restart.sh:1-43](file://backend/restart.sh#L1-L43) - [backend/stop.sh:1-14](file://backend/stop.sh#L1-L14) @@ -289,7 +308,7 @@ B --> S["OTA 存储卷 /data/projects/source"] - 监听 80,将 /api 代理到后端容器 8000 - 支持静态资源缓存与上传大小限制 -章节来源 +**章节来源** - [frontend/vite.config.js:17-25](file://frontend/vite.config.js#L17-L25) - [frontend/nginx.conf:11-21](file://frontend/nginx.conf#L11-L21) @@ -303,6 +322,7 @@ B --> S["OTA 存储卷 /data/projects/source"] - 外部依赖与集成点 - Docker Compose 管理服务生命周期与网络 - Nginx 作为反向代理与静态资源服务 + - **新增**:自定义网络 audio-network 提供容器间通信 ```mermaid graph LR @@ -312,13 +332,17 @@ BE --> DB["数据库"] BE --> MEILI["Meilisearch"] BE --> S3["S3 对象存储"] BE --> REDIS["Redis"] +subgraph "Docker 网络 audio-network" +NGINX +BE +end ``` -图表来源 +**图表来源** - [docker-compose.yml:7-46](file://docker-compose.yml#L7-L46) - [frontend/nginx.conf:11-21](file://frontend/nginx.conf#L11-L21) -章节来源 +**章节来源** - [backend/package.json:1-29](file://backend/package.json#L1-L29) - [frontend/package.json:1-24](file://frontend/package.json#L1-L24) @@ -329,10 +353,16 @@ BE --> REDIS["Redis"] - Nginx 对静态资源进行缓存与压缩,提升前端加载速度 - 端口与网络 - 明确的端口映射与自定义桥接网络,减少冲突与提升隔离性 +- **新增**:卷挂载优化 + - 前端卷挂载使用只读模式 (:ro),提升安全性和性能 + - 后端 OTA 存储卷直接映射宿主机目录,避免额外开销 +- **新增**:网络优化 + - 自定义桥接网络减少网络延迟 + - 容器间通信通过内部网络,不经过宿主机网络栈 -章节来源 +**章节来源** - [docker-compose.yml:1-5](file://docker-compose.yml#L1-L5) -- [frontend/nginx.conf:7-32](file://frontend/nginx.conf#L7-L32) +- [frontend/nginx.conf:7-32](file://frontend/nginx.conf#L7-32) ## 故障排查指南 - 前端页面空白 @@ -343,19 +373,26 @@ BE --> REDIS["Redis"] - 确认后端容器处于 running 状态 - 查看后端日志,定位数据库、Redis、Meilisearch 连接问题 - 确认 Nginx 代理目标为 http://backend:8000 + - **新增**:检查容器是否在同一个网络中:`docker network inspect audio-network` - 后端构建失败(pnpm / Node 版本) - 后端镜像基于 node:22-alpine,确保上传了 package.json 与 pnpm-lock.yaml - 修改 .env 后不生效 - 通过 docker compose up -d --force-recreate 使新环境变量生效 +- 网络相关问题 + - **新增**:检查网络连通性:`docker exec dashboard-frontend ping backend` + - **新增**:查看网络配置:`docker network ls` + - **新增**:检查容器网络:`docker inspect dashboard-backend | grep NetworkMode` - 停止服务 - docker compose down -章节来源 +**章节来源** - [DEPLOY.md:226-256](file://DEPLOY.md#L226-L256) ## 结论 本指南提供了从服务器准备、目录与环境配置、本地构建与上传、Docker Compose 编排与启动、健康检查与验证,到更新部署与故障排查的完整流程。遵循本文档可快速、稳定地完成 Audio Dashboard 的部署与运维。 +**新增**:通过自定义网络、只读卷挂载和额外的主机配置,系统在网络稳定性和安全性方面得到了显著提升。 + ## 附录 ### 环境变量与安全配置建议 @@ -366,12 +403,16 @@ BE --> REDIS["Redis"] - S3 通常通过云服务 IAM 角色访问,避免在 .env 中硬编码密钥 - 网络与端口 - 仅开放必要端口,防火墙策略最小化 + - **新增**:利用 Docker 网络隔离,避免不必要的端口暴露 - 日志与监控 - 结合日志轮转与容器日志采集,定期巡检 - 配置加载 - 后端通过 APP_ENV 切换开发/生产行为,确保生产环境严格校验 +- **新增**:卷挂载安全 + - 前端静态资源使用只读挂载 (:ro),防止运行时修改 + - 后端数据卷根据业务需求选择合适的挂载模式 -章节来源 +**章节来源** - [DEPLOY.md:36-42](file://DEPLOY.md#L36-L42) -- [backend/src/config/env.js:1-12](file://backend/src/config/env.js#L1-L12) +- [backend/src/config/env.js:1-13](file://backend/src/config/env.js#L1-L13) - [backend/src/utils/jwt.js:1-27](file://backend/src/utils/jwt.js#L1-L27) \ No newline at end of file diff --git a/.qoder/repowiki/zh/meta/repowiki-metadata.json b/.qoder/repowiki/zh/meta/repowiki-metadata.json index 914c29a..71dc20b 100644 --- a/.qoder/repowiki/zh/meta/repowiki-metadata.json +++ b/.qoder/repowiki/zh/meta/repowiki-metadata.json @@ -1 +1 @@ -{"code_snippets":[{"id":"2ba6ee170718db40d0a0c1e0e271ab8c","path":"frontend/src/views/ota/index.vue","line_range":"1-1003","gmt_create":"2026-06-30T18:39:29.609311+08:00","gmt_modified":"2026-06-30T18:39:29.609311+08:00"},{"id":"3e935f654a28968186e9260f2c5035c7","path":"frontend/src/api/ota.js","line_range":"1-68","gmt_create":"2026-06-30T18:39:29.609615+08:00","gmt_modified":"2026-06-30T18:39:29.609615+08:00"},{"id":"edbb69e747bbcd76dd1bc3a361ebf7c0","path":"frontend/src/api/blacklist.js","line_range":"1-57","gmt_create":"2026-06-30T18:39:29.609775+08:00","gmt_modified":"2026-06-30T18:39:29.609775+08:00"},{"id":"4e817a7f3bd90bb9e57c6a2e9009380f","path":"frontend/src/api/otaTargetDevice.js","line_range":"1-57","gmt_create":"2026-06-30T18:39:29.609938+08:00","gmt_modified":"2026-06-30T18:39:29.609938+08:00"},{"id":"72de55f3f022487777e9ad301c9d942b","path":"backend/src/routes/blacklist.js","line_range":"1-223","gmt_create":"2026-06-30T18:39:29.610091+08:00","gmt_modified":"2026-06-30T18:39:29.610091+08:00"},{"id":"ba9810388706ac5ffb0156f74ada8b88","path":"backend/src/routes/otaTargetDevice.js","line_range":"1-248","gmt_create":"2026-06-30T18:39:29.610237+08:00","gmt_modified":"2026-06-30T18:39:29.610237+08:00"},{"id":"f3b38dfd34a76e0d2e62a863fca301a8","path":"frontend/src/views/ota/index.vue","line_range":"420-831","gmt_create":"2026-06-30T18:39:29.611431+08:00","gmt_modified":"2026-06-30T18:39:29.611431+08:00"},{"id":"ae7ce676a4f649c15d0490bbb2954cfe","path":"frontend/src/api/ota.js","line_range":"13-67","gmt_create":"2026-06-30T18:39:29.611582+08:00","gmt_modified":"2026-06-30T18:39:29.611583+08:00"},{"id":"859ba4011a4720ad0ad431545e144986","path":"frontend/src/api/blacklist.js","line_range":"12-56","gmt_create":"2026-06-30T18:39:29.611724+08:00","gmt_modified":"2026-06-30T18:39:29.611724+08:00"},{"id":"c910f65a89648ecf30c84b77b136ad70","path":"frontend/src/api/otaTargetDevice.js","line_range":"12-55","gmt_create":"2026-06-30T18:39:29.611869+08:00","gmt_modified":"2026-06-30T18:39:29.611869+08:00"},{"id":"c042223cf0aa5b2e59be1747923b4baf","path":"frontend/src/api/ota.js","line_range":"13-49","gmt_create":"2026-06-30T18:39:29.612183+08:00","gmt_modified":"2026-06-30T18:39:29.612183+08:00"},{"id":"b1e9d90908a2a5e3d545ca0cf2c86769","path":"backend/src/routes/ota.js","line_range":"24-268","gmt_create":"2026-06-30T18:39:29.612679+08:00","gmt_modified":"2026-06-30T18:39:29.612679+08:00"},{"id":"aae8712924efab58e019d0c963576781","path":"backend/src/routes/blacklist.js","line_range":"96-139","gmt_create":"2026-06-30T18:39:29.612821+08:00","gmt_modified":"2026-06-30T18:39:29.612821+08:00"},{"id":"fb9daf52780951bc4b93f14b1fcfa8f1","path":"backend/src/routes/otaTargetDevice.js","line_range":"96-139","gmt_create":"2026-06-30T18:39:29.612979+08:00","gmt_modified":"2026-06-30T18:39:29.612979+08:00"},{"id":"23aa29b61d1387fca0530a0a1e57e27f","path":"backend/src/routes/ota.js","line_range":"1-292","gmt_create":"2026-06-30T18:39:29.613104+08:00","gmt_modified":"2026-06-30T18:39:29.613104+08:00"},{"id":"e6f541a0af8390b3610d1e380a8d3236","path":"backend/src/models/Ota.js","line_range":"4-94","gmt_create":"2026-06-30T18:39:29.61355+08:00","gmt_modified":"2026-06-30T18:39:29.61355+08:00"},{"id":"4aad83e3e76ccc16e5b91d801ab1b278","path":"backend/src/models/BlackList.js","line_range":"5-36","gmt_create":"2026-06-30T18:39:29.613684+08:00","gmt_modified":"2026-06-30T18:39:29.613684+08:00"},{"id":"54c99704b8bcabdfe63adda9c4392452","path":"backend/src/models/OtaTargetDevice.js","line_range":"5-37","gmt_create":"2026-06-30T18:39:29.613824+08:00","gmt_modified":"2026-06-30T18:39:29.613824+08:00"},{"id":"b7c66d1bc7887a6132dc3acbf6421a5d","path":"backend/src/models/Ota.js","line_range":"1-97","gmt_create":"2026-06-30T18:39:29.613982+08:00","gmt_modified":"2026-06-30T18:39:29.613982+08:00"},{"id":"058bc5c3e018c854b5cf42905abd45d7","path":"backend/src/models/BlackList.js","line_range":"1-36","gmt_create":"2026-06-30T18:39:29.614129+08:00","gmt_modified":"2026-06-30T18:39:29.614129+08:00"},{"id":"3830639d0b7444aa8a1cf3c80d4eef7e","path":"backend/src/models/OtaTargetDevice.js","line_range":"1-37","gmt_create":"2026-06-30T18:39:29.614371+08:00","gmt_modified":"2026-06-30T18:39:29.614371+08:00"},{"id":"be497152bcedca75299e4c2521c11859","path":"backend/src/services/otaStorage.js","line_range":"46-103","gmt_create":"2026-06-30T18:39:29.614741+08:00","gmt_modified":"2026-06-30T18:39:29.614741+08:00"},{"id":"af76fcd4277eeb577f573e21de923bbf","path":"backend/src/config/env.js","line_range":"1-13","gmt_create":"2026-06-30T18:39:29.614989+08:00","gmt_modified":"2026-06-30T18:39:29.614989+08:00"},{"id":"b8c21c93e526039c96f1df526ebdcafe","path":"backend/src/services/otaStorage.js","line_range":"1-113","gmt_create":"2026-06-30T18:39:29.615206+08:00","gmt_modified":"2026-06-30T18:39:29.615206+08:00"},{"id":"424dfd038ca84be6195b08d7032a1235","path":"backend/src/routes/ota.js","line_range":"68-102","gmt_create":"2026-06-30T18:39:29.61565+08:00","gmt_modified":"2026-06-30T18:39:29.61565+08:00"},{"id":"2fc67d9140f7c12759a5188eb6f9b204","path":"frontend/src/views/ota/index.vue","line_range":"305-338","gmt_create":"2026-06-30T18:39:29.615816+08:00","gmt_modified":"2026-06-30T18:39:29.615816+08:00"},{"id":"e3a6003c52bf8b8487bb1b8709da6b4b","path":"backend/src/utils/response.js","line_range":"1-25","gmt_create":"2026-06-30T18:39:29.615973+08:00","gmt_modified":"2026-06-30T18:39:29.615973+08:00"},{"id":"cabe1728acba4dab25a86b5788412e46","path":"backend/src/routes/ota.js","line_range":"25-66","gmt_create":"2026-06-30T18:39:29.616135+08:00","gmt_modified":"2026-06-30T18:39:29.616135+08:00"},{"id":"45f0756fae3928b75883500a5006f7f0","path":"frontend/src/views/ota/index.vue","line_range":"645-734","gmt_create":"2026-06-30T18:39:29.616292+08:00","gmt_modified":"2026-06-30T18:39:29.616292+08:00"},{"id":"f2e521eddcaa25c62a309d5b0af997fa","path":"backend/src/routes/blacklist.js","line_range":"96-204","gmt_create":"2026-06-30T18:39:29.616595+08:00","gmt_modified":"2026-06-30T18:39:29.616595+08:00"},{"id":"6b7ea701575cf98b6ee3431f68ad5649","path":"frontend/src/views/ota/index.vue","line_range":"736-817","gmt_create":"2026-06-30T18:39:29.61672+08:00","gmt_modified":"2026-06-30T18:39:29.61672+08:00"},{"id":"506ecfb839ed7fb3f4199ade7e4b6a64","path":"backend/src/routes/otaTargetDevice.js","line_range":"96-208","gmt_create":"2026-06-30T18:39:29.617009+08:00","gmt_modified":"2026-06-30T18:39:29.617009+08:00"},{"id":"7a5ae98472bdc4806472d50e6b88c997","path":"frontend/src/utils/request.js","line_range":"1-72","gmt_create":"2026-06-30T18:39:29.617154+08:00","gmt_modified":"2026-06-30T18:39:29.617154+08:00"},{"id":"69c930f997042246d4e17369ede6f826","path":"frontend/src/router/index.js","line_range":"1-91","gmt_create":"2026-06-30T18:39:29.617278+08:00","gmt_modified":"2026-06-30T18:39:29.617278+08:00"},{"id":"6b61c60063d41432a3cc1ac4d1699181","path":"frontend/src/utils/request.js","line_range":"44-69","gmt_create":"2026-06-30T18:39:29.619097+08:00","gmt_modified":"2026-06-30T18:39:29.619097+08:00"},{"id":"752be7590bb954b39e5a8f41ce8811eb","path":"backend/src/routes/blacklist.js","line_range":"159-183","gmt_create":"2026-06-30T18:39:29.619239+08:00","gmt_modified":"2026-06-30T18:39:29.619239+08:00"},{"id":"4daa6ac2900ccb8c9fd7142d0ecdd298","path":"backend/src/routes/otaTargetDevice.js","line_range":"142-208","gmt_create":"2026-06-30T18:39:29.619362+08:00","gmt_modified":"2026-06-30T18:39:29.619362+08:00"},{"id":"e22545d86c6efa26c57aea0e355a57f6","path":"DEPLOY.md","line_range":"226-256","gmt_create":"2026-06-30T18:39:29.619502+08:00","gmt_modified":"2026-06-30T18:39:29.619502+08:00"},{"id":"05900505c40339d0cc93870281600479","path":"backend/src/models/BlackList.js","line_range":"1-37","gmt_create":"2026-06-30T18:39:56.520893+08:00","gmt_modified":"2026-06-30T18:39:56.520893+08:00"},{"id":"921d509d2d71df1e2bace1390640482a","path":"backend/src/models/OtaTargetDevice.js","line_range":"1-38","gmt_create":"2026-06-30T18:39:56.521018+08:00","gmt_modified":"2026-06-30T18:39:56.521018+08:00"},{"id":"149a41cdd5807ad4f666e9eb2463fa68","path":"frontend/src/views/ota/index.vue","line_range":"1-628","gmt_create":"2026-06-30T18:39:56.521152+08:00","gmt_modified":"2026-06-30T18:39:56.521152+08:00"},{"id":"771e33c2a04ba5eb1a504cf7aa1e9c36","path":"frontend/src/views/blacklist/index.vue","line_range":"1-381","gmt_create":"2026-06-30T18:39:56.521272+08:00","gmt_modified":"2026-06-30T18:39:56.521272+08:00"},{"id":"f23242497ee4dc9ed490a1d09d0d3d91","path":"frontend/src/views/ota-target-device/index.vue","line_range":"1-386","gmt_create":"2026-06-30T18:39:56.521399+08:00","gmt_modified":"2026-06-30T18:39:56.521399+08:00"},{"id":"0c0ca507fcaf2164af19adf77eaf72e8","path":"backend/src/validators/ota.js","line_range":"1-36","gmt_create":"2026-06-30T18:39:56.523127+08:00","gmt_modified":"2026-06-30T18:39:56.523127+08:00"},{"id":"420851439a300cff8b7fa324589ce87a","path":"backend/src/validators/blacklist.js","line_range":"1-14","gmt_create":"2026-06-30T18:39:56.52326+08:00","gmt_modified":"2026-06-30T18:39:56.52326+08:00"},{"id":"e92ce9787ed66ea4dd0821e0c8f28d8a","path":"backend/src/validators/otaTargetDevice.js","line_range":"1-14","gmt_create":"2026-06-30T18:39:56.523384+08:00","gmt_modified":"2026-06-30T18:39:56.523384+08:00"},{"id":"0696a947e8ffd03fd403809f77673c55","path":"backend/src/routes/ota.js","line_range":"24-66","gmt_create":"2026-06-30T18:39:56.523678+08:00","gmt_modified":"2026-06-30T18:39:56.523678+08:00"},{"id":"0f5328f2be7159ab2f533662f8992b10","path":"frontend/src/views/ota/index.vue","line_range":"384-412","gmt_create":"2026-06-30T18:39:56.524074+08:00","gmt_modified":"2026-06-30T18:39:56.524075+08:00"},{"id":"b6918b1988464553531aec983ea27b7d","path":"backend/src/models/BlackList.js","line_range":"5-32","gmt_create":"2026-06-30T18:39:56.524325+08:00","gmt_modified":"2026-06-30T18:39:56.524326+08:00"},{"id":"59e0c0eb304ea8fbb7145bc038c8fdf6","path":"backend/src/models/OtaTargetDevice.js","line_range":"5-33","gmt_create":"2026-06-30T18:39:56.524448+08:00","gmt_modified":"2026-06-30T18:39:56.524448+08:00"},{"id":"0991eb53c8fe806cf46decab5e748f75","path":"backend/src/services/otaStorage.js","line_range":"72-103","gmt_create":"2026-06-30T18:39:56.525119+08:00","gmt_modified":"2026-06-30T18:39:56.525119+08:00"},{"id":"a826e77f133d3db11e600f30b88f4e9a","path":"backend/src/validators/ota.js","line_range":"3-35","gmt_create":"2026-06-30T18:39:56.525629+08:00","gmt_modified":"2026-06-30T18:39:56.525629+08:00"},{"id":"4a33d32c1578fd612d900aa17246d8c2","path":"backend/src/validators/blacklist.js","line_range":"3-11","gmt_create":"2026-06-30T18:39:56.525734+08:00","gmt_modified":"2026-06-30T18:39:56.525734+08:00"},{"id":"4660c7ce6daeb3f765d39856dcf95f6f","path":"backend/src/validators/otaTargetDevice.js","line_range":"3-11","gmt_create":"2026-06-30T18:39:56.525836+08:00","gmt_modified":"2026-06-30T18:39:56.525836+08:00"},{"id":"7467dc2e2d22c93c63fa6342b2e08541","path":"frontend/src/views/ota/index.vue","line_range":"420-579","gmt_create":"2026-06-30T18:39:56.526564+08:00","gmt_modified":"2026-06-30T18:39:56.526564+08:00"},{"id":"4b5baf2b8dcd8468722cd31868c794b2","path":"frontend/src/views/ota/index.vue","line_range":"645-683","gmt_create":"2026-06-30T18:39:56.526669+08:00","gmt_modified":"2026-06-30T18:39:56.526669+08:00"},{"id":"20e79ab592f63eb9d23c0d563d5f5202","path":"backend/src/routes/blacklist.js","line_range":"16-71","gmt_create":"2026-06-30T18:39:56.527902+08:00","gmt_modified":"2026-06-30T18:39:56.527902+08:00"},{"id":"07afcaa71195b3d86386dcde14973a8d","path":"backend/src/routes/blacklist.js","line_range":"96-131","gmt_create":"2026-06-30T18:39:56.527997+08:00","gmt_modified":"2026-06-30T18:39:56.527997+08:00"},{"id":"2a5364613dbf0723f2e2a64affabb065","path":"frontend/src/views/blacklist/index.vue","line_range":"144-346","gmt_create":"2026-06-30T18:39:56.528097+08:00","gmt_modified":"2026-06-30T18:39:56.528097+08:00"},{"id":"12ad7a8b54f39c0717843220f341d59e","path":"backend/src/routes/otaTargetDevice.js","line_range":"16-71","gmt_create":"2026-06-30T18:39:56.528805+08:00","gmt_modified":"2026-06-30T18:39:56.528805+08:00"},{"id":"585261a6626a815d8f5f83b91a086eb9","path":"frontend/src/views/ota-target-device/index.vue","line_range":"144-351","gmt_create":"2026-06-30T18:39:56.529026+08:00","gmt_modified":"2026-06-30T18:39:56.529026+08:00"},{"id":"2a0437737a8daf4655f00caae7549a06","path":"backend/package.json","line_range":"11-24","gmt_create":"2026-06-30T18:39:56.529846+08:00","gmt_modified":"2026-06-30T18:39:56.529846+08:00"},{"id":"f0cfbce84fd69ea625e215367d5da707","path":"backend/package.json","line_range":"1-29","gmt_create":"2026-06-30T18:39:56.529954+08:00","gmt_modified":"2026-06-30T18:39:56.529954+08:00"},{"id":"fad5c52b0517044faace96133c6e570c","path":"backend/src/routes/ota.js","line_range":"174-181","gmt_create":"2026-06-30T18:39:56.530168+08:00","gmt_modified":"2026-06-30T18:39:56.530168+08:00"},{"id":"f62834891fb8675fbb1dcb6654b186e9","path":"backend/src/services/otaStorage.js","line_range":"95-98","gmt_create":"2026-06-30T18:39:56.530261+08:00","gmt_modified":"2026-06-30T18:39:56.530261+08:00"},{"id":"0c387969b601239a31cb0c672ef3c116","path":"backend/src/routes/blacklist.js","line_range":"108-112","gmt_create":"2026-06-30T18:39:56.530365+08:00","gmt_modified":"2026-06-30T18:39:56.530365+08:00"},{"id":"406e308cbdb4112d67f61a82a8118e9f","path":"backend/src/routes/otaTargetDevice.js","line_range":"108-112","gmt_create":"2026-06-30T18:39:56.530464+08:00","gmt_modified":"2026-06-30T18:39:56.530464+08:00"},{"id":"5d1069f11e2153ac8cd75f26c10256a2","path":"backend/src/routes/models.js","line_range":"1-659","gmt_create":"2026-07-01T17:22:10.342072+08:00","gmt_modified":"2026-07-01T17:22:10.342072+08:00"},{"id":"024c49b177309c95a9a6487c0c70ff28","path":"backend/src/models/Model.js","line_range":"1-53","gmt_create":"2026-07-01T17:22:10.342533+08:00","gmt_modified":"2026-07-01T17:22:10.342533+08:00"},{"id":"ed0beaf535b1c935f72da53c93cefd99","path":"backend/src/validators/model.js","line_range":"1-22","gmt_create":"2026-07-01T17:22:10.342848+08:00","gmt_modified":"2026-07-01T17:22:10.342848+08:00"},{"id":"b4d5cb8d79f05ea0bc1f56f20380f226","path":"backend/src/middleware/auth.js","line_range":"1-36","gmt_create":"2026-07-01T17:22:10.343354+08:00","gmt_modified":"2026-07-01T17:22:10.343354+08:00"},{"id":"d71cf669f581f1e2e6b7956768cf07e5","path":"frontend/src/api/model.js","line_range":"1-165","gmt_create":"2026-07-01T17:22:10.343696+08:00","gmt_modified":"2026-07-01T17:22:10.343696+08:00"},{"id":"2f44ab11354520681821b18c70b28ea5","path":"backend/src/services/squiglink.js","line_range":"1-322","gmt_create":"2026-07-01T17:22:10.344219+08:00","gmt_modified":"2026-07-01T17:22:10.344219+08:00"},{"id":"dfde97c120aa759be08496d7a1217bb5","path":"frontend/src/views/model/components/ModelFormDialog.vue","line_range":"1-555","gmt_create":"2026-07-01T17:22:10.344388+08:00","gmt_modified":"2026-07-01T17:22:10.344388+08:00"},{"id":"8ff91c81b391966d61e25fb150388eda","path":"backend/src/routes/models.js","line_range":"133-181","gmt_create":"2026-07-01T17:22:10.34633+08:00","gmt_modified":"2026-07-01T17:22:10.34633+08:00"},{"id":"f84073b86f81ac8811492a2bdf880f16","path":"backend/src/models/Model.js","line_range":"4-50","gmt_create":"2026-07-01T17:22:10.346534+08:00","gmt_modified":"2026-07-01T17:22:10.346534+08:00"},{"id":"9e84158ca8a0ddb6b5e5b73eb1bbe846","path":"backend/src/validators/model.js","line_range":"3-19","gmt_create":"2026-07-01T17:22:10.346772+08:00","gmt_modified":"2026-07-01T17:22:10.346772+08:00"},{"id":"5a517afeab7c85f15e321f8de509c92e","path":"backend/src/middleware/auth.js","line_range":"3-26","gmt_create":"2026-07-01T17:22:10.34715+08:00","gmt_modified":"2026-07-01T17:22:10.34715+08:00"},{"id":"61cdcff725a5d9f851c84d3976b11ad9","path":"frontend/src/api/model.js","line_range":"13-165","gmt_create":"2026-07-01T17:22:10.347537+08:00","gmt_modified":"2026-07-01T17:22:10.347537+08:00"},{"id":"242fa36bc833a990fae50c7bb09ed4e1","path":"frontend/src/views/model/components/ModelFormDialog.vue","line_range":"158-464","gmt_create":"2026-07-01T17:22:10.347891+08:00","gmt_modified":"2026-07-01T17:22:10.347891+08:00"},{"id":"198c9bc987125a8c495d5f4f4c719320","path":"backend/src/routes/models.js","line_range":"307-369","gmt_create":"2026-07-01T17:22:10.348046+08:00","gmt_modified":"2026-07-01T17:22:10.348046+08:00"},{"id":"00a6cc74394f2292cdbdb135e0050bfd","path":"backend/src/services/squiglink.js","line_range":"261-310","gmt_create":"2026-07-01T17:22:10.348542+08:00","gmt_modified":"2026-07-01T17:22:10.348542+08:00"},{"id":"cbc5a1c920943391c4b4c7dbb4969e02","path":"backend/src/routes/models.js","line_range":"280-304","gmt_create":"2026-07-01T17:22:10.350467+08:00","gmt_modified":"2026-07-01T17:22:10.350467+08:00"},{"id":"0e96d580b4b0d85ad3a0856f9ced77c5","path":"backend/src/routes/models.js","line_range":"371-437","gmt_create":"2026-07-01T17:22:10.351067+08:00","gmt_modified":"2026-07-01T17:22:10.351067+08:00"},{"id":"64d9a6b9e0dbb15b4433b936b9d9b682","path":"backend/src/validators/model.js","line_range":"3-10","gmt_create":"2026-07-01T17:22:10.351242+08:00","gmt_modified":"2026-07-01T17:22:10.351242+08:00"},{"id":"534ccf5ed9895fd2357c6072d2c32641","path":"backend/src/routes/models.js","line_range":"439-526","gmt_create":"2026-07-01T17:22:10.351714+08:00","gmt_modified":"2026-07-01T17:22:10.351714+08:00"},{"id":"1403db1a8eb57f752df3491c038670b7","path":"backend/src/validators/model.js","line_range":"12-19","gmt_create":"2026-07-01T17:22:10.351852+08:00","gmt_modified":"2026-07-01T17:22:10.351852+08:00"},{"id":"e19c5be696ebceb651e9886682335c3f","path":"backend/src/routes/models.js","line_range":"528-554","gmt_create":"2026-07-01T17:22:10.352321+08:00","gmt_modified":"2026-07-01T17:22:10.352321+08:00"},{"id":"fd1c352115895c20befbd57b21dafffd","path":"backend/src/routes/models.js","line_range":"136-157","gmt_create":"2026-07-01T17:22:10.352801+08:00","gmt_modified":"2026-07-01T17:22:10.352801+08:00"},{"id":"a4a868fe5625e468464edb2a81e0ed65","path":"backend/src/models/Ota.js","line_range":"44-48","gmt_create":"2026-07-01T17:22:10.353108+08:00","gmt_modified":"2026-07-01T17:22:10.353108+08:00"},{"id":"9bfda1a77caaecb96fe646e1a5c4e657","path":"backend/src/routes/models.js","line_range":"556-656","gmt_create":"2026-07-01T17:22:10.353419+08:00","gmt_modified":"2026-07-01T17:22:10.353419+08:00"},{"id":"d204119d78e9a20507f2e6eb59c81b14","path":"backend/src/routes/models.js","line_range":"246-278","gmt_create":"2026-07-01T17:22:10.353724+08:00","gmt_modified":"2026-07-01T17:22:10.353724+08:00"},{"id":"6e56ed4dbe173e0e7ce80c50d006cb83","path":"backend/src/routes/models.js","line_range":"183-244","gmt_create":"2026-07-01T17:22:10.353858+08:00","gmt_modified":"2026-07-01T17:22:10.353858+08:00"},{"id":"12f724b0903cc7296821075f94c9dea7","path":"backend/src/routes/models.js","line_range":"314-317","gmt_create":"2026-07-01T17:22:10.355774+08:00","gmt_modified":"2026-07-01T17:22:10.355774+08:00"},{"id":"07839d356726d441504dc3560722db44","path":"backend/src/routes/models.js","line_range":"322-325","gmt_create":"2026-07-01T17:22:10.356108+08:00","gmt_modified":"2026-07-01T17:22:10.356109+08:00"},{"id":"0dbf7e568890732ca55dfc5752a318a6","path":"backend/src/routes/models.js","line_range":"450-455","gmt_create":"2026-07-01T17:22:10.356297+08:00","gmt_modified":"2026-07-01T17:22:10.356297+08:00"},{"id":"81ee91090f768174f1659cd02a399b89","path":"backend/src/services/squiglink.js","line_range":"33-47","gmt_create":"2026-07-01T17:22:10.356502+08:00","gmt_modified":"2026-07-01T17:22:10.356502+08:00"},{"id":"09fd0e7623c9b52e7f95307aba3cdebf","path":"frontend/src/views/model/index.vue","line_range":"1-533","gmt_create":"2026-07-01T17:22:40.376442+08:00","gmt_modified":"2026-07-01T17:22:40.376442+08:00"},{"id":"b336306edfffe78cac04ddcd9b87bee3","path":"frontend/src/views/model/composables/useModelList.js","line_range":"1-191","gmt_create":"2026-07-01T17:22:40.376544+08:00","gmt_modified":"2026-07-01T17:22:40.376545+08:00"},{"id":"bd284e26c3e22bbca32421b5f77648ef","path":"frontend/src/views/model/components/CsvViewerDialog.vue","line_range":"1-50","gmt_create":"2026-07-01T17:22:40.376769+08:00","gmt_modified":"2026-07-01T17:22:40.376769+08:00"},{"id":"2046b9f43ac9963df7a7ca533f925569","path":"frontend/src/views/model/components/EqCacheDialog.vue","line_range":"1-306","gmt_create":"2026-07-01T17:22:40.376869+08:00","gmt_modified":"2026-07-01T17:22:40.376869+08:00"},{"id":"779a4d88246e9e5a241ae01c15f899ab","path":"frontend/src/views/model/components/PushProgressDialog.vue","line_range":"1-303","gmt_create":"2026-07-01T17:22:40.376999+08:00","gmt_modified":"2026-07-01T17:22:40.376999+08:00"},{"id":"bbf439d580ed3a878deb4fd7de944a94","path":"frontend/src/views/model/components/PushViewDialog.vue","line_range":"1-60","gmt_create":"2026-07-01T17:22:40.377097+08:00","gmt_modified":"2026-07-01T17:22:40.377097+08:00"},{"id":"fc4fba8eb72f3b41fef570b38f6dfefe","path":"frontend/src/views/model/index.vue","line_range":"227-434","gmt_create":"2026-07-01T17:22:40.37845+08:00","gmt_modified":"2026-07-01T17:22:40.37845+08:00"},{"id":"c0a672fcaa00c517fd9ea3d997173397","path":"frontend/src/views/model/composables/useModelList.js","line_range":"31-191","gmt_create":"2026-07-01T17:22:40.378563+08:00","gmt_modified":"2026-07-01T17:22:40.378563+08:00"},{"id":"d16b984e320d42203d368669cfe2382b","path":"frontend/src/api/model.js","line_range":"157-165","gmt_create":"2026-07-01T17:22:40.378803+08:00","gmt_modified":"2026-07-01T17:22:40.378803+08:00"},{"id":"c6701de4962c3a2734181c3f0e1b78f6","path":"backend/src/routes/models.js","line_range":"307-499","gmt_create":"2026-07-01T17:22:40.379698+08:00","gmt_modified":"2026-07-01T17:22:40.379698+08:00"},{"id":"47737e52532225879b5095908c4b0039","path":"frontend/src/views/model/components/ModelFormDialog.vue","line_range":"196-214","gmt_create":"2026-07-01T17:22:40.380708+08:00","gmt_modified":"2026-07-01T17:22:40.380708+08:00"},{"id":"1a50c2ac7c5e4e096904af2e683b5ec7","path":"backend/src/models/Brand.js","line_range":"1-23","gmt_create":"2026-07-01T17:22:40.380815+08:00","gmt_modified":"2026-07-01T17:22:40.380815+08:00"},{"id":"ae9b4c727fe0313173a4bcea57fef546","path":"backend/src/routes/brands.js","line_range":"1-147","gmt_create":"2026-07-01T17:22:40.38095+08:00","gmt_modified":"2026-07-01T17:22:40.38095+08:00"},{"id":"35d43a834ee00c7ae341f64ea7306dcd","path":"frontend/src/views/model/composables/useModelList.js","line_range":"18-27","gmt_create":"2026-07-01T17:22:40.381054+08:00","gmt_modified":"2026-07-01T17:22:40.381054+08:00"},{"id":"bab25856d9ae1e6dcc3c9df2c6461ca5","path":"frontend/src/views/model/composables/useModelList.js","line_range":"87-111","gmt_create":"2026-07-01T17:22:40.381163+08:00","gmt_modified":"2026-07-01T17:22:40.381163+08:00"},{"id":"7fdad247ff48969f27ee8d30e3ba5b65","path":"frontend/src/views/model/index.vue","line_range":"402-428","gmt_create":"2026-07-01T17:22:40.381395+08:00","gmt_modified":"2026-07-01T17:22:40.381395+08:00"},{"id":"80992fa9ba0696155e1f48200125fba9","path":"frontend/src/views/model/components/PushProgressDialog.vue","line_range":"117-195","gmt_create":"2026-07-01T17:22:40.381504+08:00","gmt_modified":"2026-07-01T17:22:40.381504+08:00"},{"id":"c72d4a5b5b663d05ac8229b5b4c69991","path":"frontend/src/api/model.js","line_range":"128-150","gmt_create":"2026-07-01T17:22:40.381611+08:00","gmt_modified":"2026-07-01T17:22:40.381612+08:00"},{"id":"84d41a039a6a9937d7d02c54a5e72751","path":"backend/src/routes/models.js","line_range":"466-566","gmt_create":"2026-07-01T17:22:40.381721+08:00","gmt_modified":"2026-07-01T17:22:40.381721+08:00"},{"id":"ddaccee59b978ba3a64b134b57255142","path":"backend/src/routes/models.js","line_range":"59-68","gmt_create":"2026-07-01T17:22:40.382223+08:00","gmt_modified":"2026-07-01T17:22:40.382223+08:00"},{"id":"ddabd54034f5691c635f64015008129b","path":"backend/src/services/measurementStorage.js","line_range":"48-108","gmt_create":"2026-07-01T17:22:40.382335+08:00","gmt_modified":"2026-07-01T17:22:40.382335+08:00"},{"id":"dfbdd0655d2d61b5105701e421492cb1","path":"backend/src/services/eqCacheStorage.js","line_range":"24-66","gmt_create":"2026-07-01T17:22:40.382567+08:00","gmt_modified":"2026-07-01T17:22:40.382567+08:00"},{"id":"f80a45c0052388537b0d6844b2c9e8e3","path":"frontend/src/views/model/components/ModelFormDialog.vue","line_range":"233-265","gmt_create":"2026-07-01T17:22:40.382803+08:00","gmt_modified":"2026-07-01T17:22:40.382803+08:00"},{"id":"4f76bc7594c6e53c87d2b21c18e1593a","path":"backend/src/services/squiglink.js","line_range":"33-48","gmt_create":"2026-07-01T17:22:40.384083+08:00","gmt_modified":"2026-07-01T17:22:40.384083+08:00"},{"id":"dc3af50d3fc111fa0921b37470c23966","path":"frontend/src/utils/request.js","line_range":"27-69","gmt_create":"2026-07-01T17:22:40.384193+08:00","gmt_modified":"2026-07-01T17:22:40.384193+08:00"},{"id":"ee7461b868a07b5f3e3636d8001b1089","path":"backend/src/routes/brands.js","line_range":"59-81","gmt_create":"2026-07-01T17:22:40.384296+08:00","gmt_modified":"2026-07-01T17:22:40.384296+08:00"},{"id":"5913b9dcd61bbee07d5a150062d40315","path":"backend/src/routes/models.js","line_range":"371-499","gmt_create":"2026-07-01T17:22:40.3844+08:00","gmt_modified":"2026-07-01T17:22:40.3844+08:00"},{"id":"d620d05fda07f9cbe1556d0f76a8153f","path":"backend/src/services/measurementStorage.js","line_range":"87-108","gmt_create":"2026-07-01T17:22:40.384504+08:00","gmt_modified":"2026-07-01T17:22:40.384504+08:00"},{"id":"f1abdfd8be7fea194c1ce39bf66c78e3","path":"backend/src/services/eqCacheStorage.js","line_range":"47-66","gmt_create":"2026-07-01T17:22:40.38461+08:00","gmt_modified":"2026-07-01T17:22:40.38461+08:00"},{"id":"e87b014e53bbb73ea5bbd7b6fedb1ee0","path":"frontend/src/api/brand.js","line_range":"1-66","gmt_create":"2026-07-01T17:22:40.384977+08:00","gmt_modified":"2026-07-01T17:22:40.384977+08:00"},{"id":"6568412fa665c4b795868c6e9875778f","path":"backend/src/routes/models.js","line_range":"133-659","gmt_create":"2026-07-01T17:22:40.385185+08:00","gmt_modified":"2026-07-01T17:22:40.385185+08:00"},{"id":"8012c36338dce0daecc34c940e5fc443","path":"backend/src/routes/brands.js","line_range":"14-147","gmt_create":"2026-07-01T17:22:40.385291+08:00","gmt_modified":"2026-07-01T17:22:40.385291+08:00"},{"id":"941d6ec9925d0313ebdac30637d5e7de","path":"frontend/src/views/model/index.vue","line_range":"1-1226","gmt_create":"2026-07-01T17:22:44.384106+08:00","gmt_modified":"2026-07-01T17:22:44.384106+08:00"},{"id":"186655fbb53a1180e274c0a224e447ec","path":"backend/src/services/measurementStorage.js","line_range":"1-115","gmt_create":"2026-07-01T17:22:44.38516+08:00","gmt_modified":"2026-07-01T17:22:44.38516+08:00"},{"id":"7098281c5dbbd726581ec631c48cb7ff","path":"backend/src/services/eqCacheStorage.js","line_range":"1-73","gmt_create":"2026-07-01T17:22:44.385385+08:00","gmt_modified":"2026-07-01T17:22:44.385385+08:00"},{"id":"ff3c31b3cf3083faac2e9d22bd1046dc","path":"backend/src/services/curveClient.js","line_range":"1-147","gmt_create":"2026-07-01T17:22:44.385554+08:00","gmt_modified":"2026-07-01T17:22:44.385554+08:00"},{"id":"3ea5cb6fe4688701d6312a31ea523b18","path":"backend/src/services/measurementStorage.js","line_range":"61-108","gmt_create":"2026-07-01T17:22:44.389823+08:00","gmt_modified":"2026-07-01T17:22:44.389823+08:00"},{"id":"c777cf18a4b1f608a14488db3258817d","path":"backend/src/services/curveClient.js","line_range":"81-138","gmt_create":"2026-07-01T17:22:44.390218+08:00","gmt_modified":"2026-07-01T17:22:44.390219+08:00"},{"id":"4169091aeab80fcee72321116328a8b2","path":"frontend/src/views/model/index.vue","line_range":"714-1063","gmt_create":"2026-07-01T17:22:44.39038+08:00","gmt_modified":"2026-07-01T17:22:44.39038+08:00"},{"id":"6eacbd3b5ec60fff27a96a9101159648","path":"frontend/src/views/model/index.vue","line_range":"226-250","gmt_create":"2026-07-01T17:22:44.391757+08:00","gmt_modified":"2026-07-01T17:22:44.391757+08:00"},{"id":"56d7be38c99608e1cf9141127c60a1bd","path":"backend/src/routes/models.js","line_range":"307-335","gmt_create":"2026-07-01T17:22:44.392035+08:00","gmt_modified":"2026-07-01T17:22:44.392035+08:00"},{"id":"c571c3ca3eb98348a89378f8d58ffa5c","path":"backend/src/services/measurementStorage.js","line_range":"48-79","gmt_create":"2026-07-01T17:22:44.392163+08:00","gmt_modified":"2026-07-01T17:22:44.392163+08:00"},{"id":"6d9ac3485459b97d549f73fa18ea4efe","path":"backend/src/routes/models.js","line_range":"183-278","gmt_create":"2026-07-01T17:22:44.392771+08:00","gmt_modified":"2026-07-01T17:22:44.392772+08:00"},{"id":"e1a454e430f59ec87fc68cffc768037a","path":"backend/src/routes/models.js","line_range":"466-514","gmt_create":"2026-07-01T17:22:44.393206+08:00","gmt_modified":"2026-07-01T17:22:44.393206+08:00"},{"id":"907380346a61a6c644cdaefa5165c9bd","path":"backend/src/routes/models.js","line_range":"516-566","gmt_create":"2026-07-01T17:22:44.393329+08:00","gmt_modified":"2026-07-01T17:22:44.393329+08:00"},{"id":"17a4406c6c25ec6cdfd2d8ffe0b73e9c","path":"frontend/src/views/model/index.vue","line_range":"1117-1220","gmt_create":"2026-07-01T17:22:44.393603+08:00","gmt_modified":"2026-07-01T17:22:44.393603+08:00"},{"id":"726a6f97e2aeafee47b271e07e8bab86","path":"backend/src/services/squiglink.js","line_range":"148-207","gmt_create":"2026-07-01T17:22:44.40202+08:00","gmt_modified":"2026-07-01T17:22:44.40202+08:00"},{"id":"7257d8ea1f17cf7e6ffde19988e437dc","path":"backend/src/services/squiglink.js","line_range":"216-247","gmt_create":"2026-07-01T17:22:44.402185+08:00","gmt_modified":"2026-07-01T17:22:44.402185+08:00"},{"id":"c27046a2ebb06326e9d6b99eed8a9d94","path":"frontend/src/views/model/components/ModelFormDialog.vue","line_range":"16-46","gmt_create":"2026-07-01T17:22:44.40259+08:00","gmt_modified":"2026-07-01T17:22:44.40259+08:00"},{"id":"e83b1d21fe3ccb7ac2f4d82bb148bc78","path":"frontend/src/views/model/components/ModelFormDialog.vue","line_range":"289-332","gmt_create":"2026-07-01T17:22:44.402715+08:00","gmt_modified":"2026-07-01T17:22:44.402715+08:00"},{"id":"e8dde18df2307dc1b7b00c3e9546ed83","path":"frontend/src/api/model.js","line_range":"152-165","gmt_create":"2026-07-01T17:22:44.402831+08:00","gmt_modified":"2026-07-01T17:22:44.402831+08:00"},{"id":"d18e23566fd59e80c9f7eec016ef89ab","path":"backend/src/routes/models.js","line_range":"312-317","gmt_create":"2026-07-01T17:22:44.406038+08:00","gmt_modified":"2026-07-01T17:22:44.406038+08:00"},{"id":"bc3c55f1edd18bca0da26fb9aa065f87","path":"backend/src/routes/models.js","line_range":"320-325","gmt_create":"2026-07-01T17:22:44.406138+08:00","gmt_modified":"2026-07-01T17:22:44.406138+08:00"},{"id":"e358b7cff088dfd34df41cc908c799c8","path":"backend/src/routes/models.js","line_range":"255-258","gmt_create":"2026-07-01T17:22:44.406249+08:00","gmt_modified":"2026-07-01T17:22:44.40625+08:00"}],"knowledge_relations":[{"id":2781,"source_id":"2b5fd78d-2407-4ccc-8807-9bb05c0a687e","target_id":"6b28e060-0be3-411e-8a94-3777d165d10e","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 2b5fd78d-2407-4ccc-8807-9bb05c0a687e -\u003e 6b28e060-0be3-411e-8a94-3777d165d10e","gmt_create":"2026-06-30T14:40:47.271887+08:00","gmt_modified":"2026-06-30T14:40:47.271887+08:00"},{"id":2782,"source_id":"2b5fd78d-2407-4ccc-8807-9bb05c0a687e","target_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 2b5fd78d-2407-4ccc-8807-9bb05c0a687e -\u003e 941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","gmt_create":"2026-06-30T14:40:47.272516+08:00","gmt_modified":"2026-06-30T14:40:47.272516+08:00"},{"id":2783,"source_id":"2b5fd78d-2407-4ccc-8807-9bb05c0a687e","target_id":"c6f2cb24-ff10-4ae7-87c2-b23b9bbee033","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 2b5fd78d-2407-4ccc-8807-9bb05c0a687e -\u003e c6f2cb24-ff10-4ae7-87c2-b23b9bbee033","gmt_create":"2026-06-30T14:40:47.272798+08:00","gmt_modified":"2026-06-30T14:40:47.272798+08:00"},{"id":2784,"source_id":"2b5fd78d-2407-4ccc-8807-9bb05c0a687e","target_id":"4619dc3e-419f-435b-ba7c-e600e188743a","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 2b5fd78d-2407-4ccc-8807-9bb05c0a687e -\u003e 4619dc3e-419f-435b-ba7c-e600e188743a","gmt_create":"2026-06-30T14:40:47.272953+08:00","gmt_modified":"2026-06-30T14:40:47.272953+08:00"},{"id":2785,"source_id":"1f4b6f57-25c5-444e-a943-d162d896dc21","target_id":"7f894188-cf72-40a2-af95-f13ef3dd1f6e","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 1f4b6f57-25c5-444e-a943-d162d896dc21 -\u003e 7f894188-cf72-40a2-af95-f13ef3dd1f6e","gmt_create":"2026-06-30T14:40:47.273394+08:00","gmt_modified":"2026-06-30T14:40:47.273394+08:00"},{"id":2786,"source_id":"1f4b6f57-25c5-444e-a943-d162d896dc21","target_id":"b66da3f2-6889-45dc-a824-2591d2f5f0f3","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 1f4b6f57-25c5-444e-a943-d162d896dc21 -\u003e b66da3f2-6889-45dc-a824-2591d2f5f0f3","gmt_create":"2026-06-30T14:40:47.273688+08:00","gmt_modified":"2026-06-30T14:40:47.273688+08:00"},{"id":2788,"source_id":"1f4b6f57-25c5-444e-a943-d162d896dc21","target_id":"be7e1733-8c9e-4849-99b0-bab40fdf271e","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 1f4b6f57-25c5-444e-a943-d162d896dc21 -\u003e be7e1733-8c9e-4849-99b0-bab40fdf271e","gmt_create":"2026-06-30T14:40:47.274328+08:00","gmt_modified":"2026-06-30T14:40:47.274328+08:00"},{"id":2789,"source_id":"1f4b6f57-25c5-444e-a943-d162d896dc21","target_id":"8f464fc9-6537-45fa-a0dd-eacdf742b5a1","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 1f4b6f57-25c5-444e-a943-d162d896dc21 -\u003e 8f464fc9-6537-45fa-a0dd-eacdf742b5a1","gmt_create":"2026-06-30T14:40:47.274458+08:00","gmt_modified":"2026-06-30T14:40:47.274458+08:00"},{"id":2790,"source_id":"1f4b6f57-25c5-444e-a943-d162d896dc21","target_id":"77bc73e0-8709-4209-96e0-5522f9356b06","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 1f4b6f57-25c5-444e-a943-d162d896dc21 -\u003e 77bc73e0-8709-4209-96e0-5522f9356b06","gmt_create":"2026-06-30T14:40:47.274632+08:00","gmt_modified":"2026-06-30T14:40:47.274632+08:00"},{"id":2791,"source_id":"1f4b6f57-25c5-444e-a943-d162d896dc21","target_id":"799ec9fc-088e-456c-8f93-72516adac3ac","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 1f4b6f57-25c5-444e-a943-d162d896dc21 -\u003e 799ec9fc-088e-456c-8f93-72516adac3ac","gmt_create":"2026-06-30T14:40:47.274784+08:00","gmt_modified":"2026-06-30T14:40:47.274784+08:00"},{"id":2792,"source_id":"4553d9a4-e0e6-4bc3-b285-ecc6df9dc822","target_id":"0efcac71-9db4-49c9-a660-690dcb97cd54","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 4553d9a4-e0e6-4bc3-b285-ecc6df9dc822 -\u003e 0efcac71-9db4-49c9-a660-690dcb97cd54","gmt_create":"2026-06-30T14:40:47.275136+08:00","gmt_modified":"2026-06-30T14:40:47.275136+08:00"},{"id":2793,"source_id":"4553d9a4-e0e6-4bc3-b285-ecc6df9dc822","target_id":"ef11f60f-47aa-41bf-8884-6d51bc9ae8ef","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 4553d9a4-e0e6-4bc3-b285-ecc6df9dc822 -\u003e ef11f60f-47aa-41bf-8884-6d51bc9ae8ef","gmt_create":"2026-06-30T14:40:47.275339+08:00","gmt_modified":"2026-06-30T14:40:47.275339+08:00"},{"id":2794,"source_id":"4553d9a4-e0e6-4bc3-b285-ecc6df9dc822","target_id":"edd1d813-70d4-49de-9f9e-e3ebf7a68678","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 4553d9a4-e0e6-4bc3-b285-ecc6df9dc822 -\u003e edd1d813-70d4-49de-9f9e-e3ebf7a68678","gmt_create":"2026-06-30T14:40:47.27546+08:00","gmt_modified":"2026-06-30T14:40:47.27546+08:00"},{"id":2795,"source_id":"4553d9a4-e0e6-4bc3-b285-ecc6df9dc822","target_id":"b2376dbd-002b-4469-8e6e-71748e46e7c2","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 4553d9a4-e0e6-4bc3-b285-ecc6df9dc822 -\u003e b2376dbd-002b-4469-8e6e-71748e46e7c2","gmt_create":"2026-06-30T14:40:47.275789+08:00","gmt_modified":"2026-06-30T14:40:47.275789+08:00"},{"id":2796,"source_id":"4553d9a4-e0e6-4bc3-b285-ecc6df9dc822","target_id":"b5718a44-f452-496d-83c3-4e89b844c709","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 4553d9a4-e0e6-4bc3-b285-ecc6df9dc822 -\u003e b5718a44-f452-496d-83c3-4e89b844c709","gmt_create":"2026-06-30T14:40:47.276097+08:00","gmt_modified":"2026-06-30T14:40:47.276097+08:00"},{"id":2797,"source_id":"4553d9a4-e0e6-4bc3-b285-ecc6df9dc822","target_id":"539729a8-aa4b-40c6-bf3b-ec9f467f7717","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 4553d9a4-e0e6-4bc3-b285-ecc6df9dc822 -\u003e 539729a8-aa4b-40c6-bf3b-ec9f467f7717","gmt_create":"2026-06-30T14:40:47.276606+08:00","gmt_modified":"2026-06-30T14:40:47.276606+08:00"},{"id":2798,"source_id":"ed153077-3827-4586-8838-812707189c14","target_id":"b6857b45-a960-4168-92dd-1edcf6567e47","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: ed153077-3827-4586-8838-812707189c14 -\u003e b6857b45-a960-4168-92dd-1edcf6567e47","gmt_create":"2026-06-30T14:40:47.277101+08:00","gmt_modified":"2026-06-30T14:40:47.277101+08:00"},{"id":2799,"source_id":"ed153077-3827-4586-8838-812707189c14","target_id":"2971fa4f-335a-4294-9668-0967b9047d66","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: ed153077-3827-4586-8838-812707189c14 -\u003e 2971fa4f-335a-4294-9668-0967b9047d66","gmt_create":"2026-06-30T14:40:47.277268+08:00","gmt_modified":"2026-06-30T14:40:47.277268+08:00"},{"id":2800,"source_id":"ed153077-3827-4586-8838-812707189c14","target_id":"f0978b42-6f98-470e-922f-22dec2fac24d","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: ed153077-3827-4586-8838-812707189c14 -\u003e f0978b42-6f98-470e-922f-22dec2fac24d","gmt_create":"2026-06-30T14:40:47.277627+08:00","gmt_modified":"2026-06-30T14:40:47.277627+08:00"},{"id":2801,"source_id":"c45b2f5f-49f8-4c8d-b489-44b4c6800e99","target_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: c45b2f5f-49f8-4c8d-b489-44b4c6800e99 -\u003e 5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","gmt_create":"2026-06-30T14:40:47.277787+08:00","gmt_modified":"2026-06-30T14:40:47.277787+08:00"},{"id":2802,"source_id":"c45b2f5f-49f8-4c8d-b489-44b4c6800e99","target_id":"62bcda0f-7c78-4109-9649-58bbf9fd68ae","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: c45b2f5f-49f8-4c8d-b489-44b4c6800e99 -\u003e 62bcda0f-7c78-4109-9649-58bbf9fd68ae","gmt_create":"2026-06-30T14:40:47.27822+08:00","gmt_modified":"2026-06-30T14:40:47.27822+08:00"},{"id":2803,"source_id":"c45b2f5f-49f8-4c8d-b489-44b4c6800e99","target_id":"86f882d7-9e64-4c38-85e7-4782fd55fed2","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: c45b2f5f-49f8-4c8d-b489-44b4c6800e99 -\u003e 86f882d7-9e64-4c38-85e7-4782fd55fed2","gmt_create":"2026-06-30T14:40:47.278376+08:00","gmt_modified":"2026-06-30T14:40:47.278376+08:00"},{"id":2804,"source_id":"c45b2f5f-49f8-4c8d-b489-44b4c6800e99","target_id":"ff04bd0e-99c4-481c-ac8c-3c1a6cae1fb5","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: c45b2f5f-49f8-4c8d-b489-44b4c6800e99 -\u003e ff04bd0e-99c4-481c-ac8c-3c1a6cae1fb5","gmt_create":"2026-06-30T14:40:47.278503+08:00","gmt_modified":"2026-06-30T14:40:47.278503+08:00"},{"id":2805,"source_id":"d4cb0c3c-97e9-449f-8918-f1c01e7e3561","target_id":"772c69b5-886e-48f6-bd11-faf8ca2155e8","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: d4cb0c3c-97e9-449f-8918-f1c01e7e3561 -\u003e 772c69b5-886e-48f6-bd11-faf8ca2155e8","gmt_create":"2026-06-30T14:40:47.278654+08:00","gmt_modified":"2026-06-30T14:40:47.278654+08:00"},{"id":2806,"source_id":"d4cb0c3c-97e9-449f-8918-f1c01e7e3561","target_id":"babe3ec0-01cb-43c3-93db-7e59cdccce68","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: d4cb0c3c-97e9-449f-8918-f1c01e7e3561 -\u003e babe3ec0-01cb-43c3-93db-7e59cdccce68","gmt_create":"2026-06-30T14:40:47.278828+08:00","gmt_modified":"2026-06-30T14:40:47.278828+08:00"},{"id":2809,"source_id":"d4cb0c3c-97e9-449f-8918-f1c01e7e3561","target_id":"100cbee2-f7a5-4cc9-83a3-900a4aacac7e","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: d4cb0c3c-97e9-449f-8918-f1c01e7e3561 -\u003e 100cbee2-f7a5-4cc9-83a3-900a4aacac7e","gmt_create":"2026-06-30T14:40:47.279419+08:00","gmt_modified":"2026-06-30T14:40:47.279419+08:00"},{"id":2810,"source_id":"d4cb0c3c-97e9-449f-8918-f1c01e7e3561","target_id":"cf1f3ceb-e3b1-4d5c-8353-f0ea4345414c","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: d4cb0c3c-97e9-449f-8918-f1c01e7e3561 -\u003e cf1f3ceb-e3b1-4d5c-8353-f0ea4345414c","gmt_create":"2026-06-30T14:40:47.279584+08:00","gmt_modified":"2026-06-30T14:40:47.279584+08:00"},{"id":2811,"source_id":"2971fa4f-335a-4294-9668-0967b9047d66","target_id":"0e003133-7d1a-4708-8599-fc71707070d6","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 2971fa4f-335a-4294-9668-0967b9047d66 -\u003e 0e003133-7d1a-4708-8599-fc71707070d6","gmt_create":"2026-06-30T14:40:47.280345+08:00","gmt_modified":"2026-06-30T14:40:47.280346+08:00"},{"id":2812,"source_id":"2971fa4f-335a-4294-9668-0967b9047d66","target_id":"4b6d6abc-bfd2-48a5-9c5e-de89f278f887","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 2971fa4f-335a-4294-9668-0967b9047d66 -\u003e 4b6d6abc-bfd2-48a5-9c5e-de89f278f887","gmt_create":"2026-06-30T14:40:47.280628+08:00","gmt_modified":"2026-06-30T14:40:47.280628+08:00"},{"id":2813,"source_id":"2971fa4f-335a-4294-9668-0967b9047d66","target_id":"5b84c784-85d8-46e0-8972-e7816f6bd687","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 2971fa4f-335a-4294-9668-0967b9047d66 -\u003e 5b84c784-85d8-46e0-8972-e7816f6bd687","gmt_create":"2026-06-30T14:40:47.280745+08:00","gmt_modified":"2026-06-30T14:40:47.280745+08:00"},{"id":2814,"source_id":"f0978b42-6f98-470e-922f-22dec2fac24d","target_id":"ad988472-7d0b-4076-86c8-f14661c5923d","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: f0978b42-6f98-470e-922f-22dec2fac24d -\u003e ad988472-7d0b-4076-86c8-f14661c5923d","gmt_create":"2026-06-30T14:40:47.281057+08:00","gmt_modified":"2026-06-30T14:40:47.281057+08:00"},{"id":2815,"source_id":"f0978b42-6f98-470e-922f-22dec2fac24d","target_id":"7eee30c6-7725-456b-8b43-35b5e4df7e99","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: f0978b42-6f98-470e-922f-22dec2fac24d -\u003e 7eee30c6-7725-456b-8b43-35b5e4df7e99","gmt_create":"2026-06-30T14:40:47.281191+08:00","gmt_modified":"2026-06-30T14:40:47.281191+08:00"},{"id":2816,"source_id":"f0978b42-6f98-470e-922f-22dec2fac24d","target_id":"791c01a2-dea1-407b-948d-3e2da8cbebed","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: f0978b42-6f98-470e-922f-22dec2fac24d -\u003e 791c01a2-dea1-407b-948d-3e2da8cbebed","gmt_create":"2026-06-30T14:40:47.281365+08:00","gmt_modified":"2026-06-30T14:40:47.281365+08:00"},{"id":2818,"source_id":"f0978b42-6f98-470e-922f-22dec2fac24d","target_id":"6003d293-f2aa-4c49-817a-c7fa652890ed","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: f0978b42-6f98-470e-922f-22dec2fac24d -\u003e 6003d293-f2aa-4c49-817a-c7fa652890ed","gmt_create":"2026-06-30T14:40:47.28164+08:00","gmt_modified":"2026-06-30T14:40:47.28164+08:00"},{"id":2820,"source_id":"f0978b42-6f98-470e-922f-22dec2fac24d","target_id":"73336201-a22f-4329-afc6-40fb5f00f4f1","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: f0978b42-6f98-470e-922f-22dec2fac24d -\u003e 73336201-a22f-4329-afc6-40fb5f00f4f1","gmt_create":"2026-06-30T14:40:47.281894+08:00","gmt_modified":"2026-06-30T14:40:47.281894+08:00"},{"id":3274,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"fc2d0cc85e5f2565c3105cbe0584903a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/models/Ota.js","gmt_create":"2026-06-30T18:39:29.619553+08:00","gmt_modified":"2026-06-30T18:39:29.619553+08:00"},{"id":3275,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"ba84445ce5118798ce7d0da4ecb4d5e2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/routes/ota.js","gmt_create":"2026-06-30T18:39:29.62003+08:00","gmt_modified":"2026-06-30T18:39:29.62003+08:00"},{"id":3276,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"a15b46bcf0be7bfbc82e57adca5be630","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/services/otaStorage.js","gmt_create":"2026-06-30T18:39:29.620188+08:00","gmt_modified":"2026-06-30T18:39:29.620188+08:00"},{"id":3277,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"4bb9a8c7ac3763db0746ff90788525b6","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/views/ota/index.vue","gmt_create":"2026-06-30T18:39:29.620355+08:00","gmt_modified":"2026-06-30T18:39:29.620355+08:00"},{"id":3278,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"29e96dbf4d3d8f6e116ec620bbf504ad","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/api/ota.js","gmt_create":"2026-06-30T18:39:29.620492+08:00","gmt_modified":"2026-06-30T18:39:29.620492+08:00"},{"id":3279,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"5ceb781f55bf90055f3005880d06ee2a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/api/blacklist.js","gmt_create":"2026-06-30T18:39:29.620631+08:00","gmt_modified":"2026-06-30T18:39:29.620631+08:00"},{"id":3280,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"5973b5959029669ade01898821960785","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/api/otaTargetDevice.js","gmt_create":"2026-06-30T18:39:29.62078+08:00","gmt_modified":"2026-06-30T18:39:29.62078+08:00"},{"id":3281,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"a84967d9d3088fba02de385738e7ca27","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/models/BlackList.js","gmt_create":"2026-06-30T18:39:29.620917+08:00","gmt_modified":"2026-06-30T18:39:29.620918+08:00"},{"id":3282,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"4ca379f147f6f1da710371999e08dc24","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/models/OtaTargetDevice.js","gmt_create":"2026-06-30T18:39:29.621051+08:00","gmt_modified":"2026-06-30T18:39:29.621051+08:00"},{"id":3283,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"71a563f23b46da0255a6400402bbfa05","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/routes/blacklist.js","gmt_create":"2026-06-30T18:39:29.62129+08:00","gmt_modified":"2026-06-30T18:39:29.62129+08:00"},{"id":3284,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"ea6e178b2f0bdcefe2ae8800166453d5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/routes/otaTargetDevice.js","gmt_create":"2026-06-30T18:39:29.621469+08:00","gmt_modified":"2026-06-30T18:39:29.621469+08:00"},{"id":3285,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"30f836e18a6bf9cbcf650e5884375a93","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/utils/response.js","gmt_create":"2026-06-30T18:39:29.621631+08:00","gmt_modified":"2026-06-30T18:39:29.621631+08:00"},{"id":3286,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"2a04b070bd67fc5059bb504232687d64","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/config/env.js","gmt_create":"2026-06-30T18:39:29.621776+08:00","gmt_modified":"2026-06-30T18:39:29.621776+08:00"},{"id":3287,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"34fcf7aeb55a9c0224c554fc48545063","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/utils/request.js","gmt_create":"2026-06-30T18:39:29.621971+08:00","gmt_modified":"2026-06-30T18:39:29.621971+08:00"},{"id":3288,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"08b8d17e3c09b326687a7bca6789507a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/router/index.js","gmt_create":"2026-06-30T18:39:29.622133+08:00","gmt_modified":"2026-06-30T18:39:29.622133+08:00"},{"id":3289,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"0c25a991664c34b2b36ce3aeed80f4da","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: DEPLOY.md","gmt_create":"2026-06-30T18:39:29.622343+08:00","gmt_modified":"2026-06-30T18:39:29.622343+08:00"},{"id":3290,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"2ba6ee170718db40d0a0c1e0e271ab8c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/ota/index.vue#1-1003","gmt_create":"2026-06-30T18:39:29.622527+08:00","gmt_modified":"2026-06-30T18:39:29.622528+08:00"},{"id":3291,"source_id":"4bb9a8c7ac3763db0746ff90788525b6","target_id":"2ba6ee170718db40d0a0c1e0e271ab8c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-1003","gmt_create":"2026-06-30T18:39:29.622724+08:00","gmt_modified":"2026-06-30T18:39:29.622724+08:00"},{"id":3292,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"3e935f654a28968186e9260f2c5035c7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/ota.js#1-68","gmt_create":"2026-06-30T18:39:29.622902+08:00","gmt_modified":"2026-06-30T18:39:29.622902+08:00"},{"id":3293,"source_id":"29e96dbf4d3d8f6e116ec620bbf504ad","target_id":"3e935f654a28968186e9260f2c5035c7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-68","gmt_create":"2026-06-30T18:39:29.623031+08:00","gmt_modified":"2026-06-30T18:39:29.623031+08:00"},{"id":3294,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"edbb69e747bbcd76dd1bc3a361ebf7c0","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/blacklist.js#1-57","gmt_create":"2026-06-30T18:39:29.623251+08:00","gmt_modified":"2026-06-30T18:39:29.623251+08:00"},{"id":3295,"source_id":"5ceb781f55bf90055f3005880d06ee2a","target_id":"edbb69e747bbcd76dd1bc3a361ebf7c0","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-57","gmt_create":"2026-06-30T18:39:29.623384+08:00","gmt_modified":"2026-06-30T18:39:29.623384+08:00"},{"id":3296,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"4e817a7f3bd90bb9e57c6a2e9009380f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/otaTargetDevice.js#1-57","gmt_create":"2026-06-30T18:39:29.623559+08:00","gmt_modified":"2026-06-30T18:39:29.623559+08:00"},{"id":3297,"source_id":"5973b5959029669ade01898821960785","target_id":"4e817a7f3bd90bb9e57c6a2e9009380f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-57","gmt_create":"2026-06-30T18:39:29.623688+08:00","gmt_modified":"2026-06-30T18:39:29.623688+08:00"},{"id":3298,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"72de55f3f022487777e9ad301c9d942b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/blacklist.js#1-223","gmt_create":"2026-06-30T18:39:29.623918+08:00","gmt_modified":"2026-06-30T18:39:29.623918+08:00"},{"id":3299,"source_id":"71a563f23b46da0255a6400402bbfa05","target_id":"72de55f3f022487777e9ad301c9d942b","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-223","gmt_create":"2026-06-30T18:39:29.624048+08:00","gmt_modified":"2026-06-30T18:39:29.624048+08:00"},{"id":3300,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"ba9810388706ac5ffb0156f74ada8b88","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/otaTargetDevice.js#1-248","gmt_create":"2026-06-30T18:39:29.624221+08:00","gmt_modified":"2026-06-30T18:39:29.624221+08:00"},{"id":3301,"source_id":"ea6e178b2f0bdcefe2ae8800166453d5","target_id":"ba9810388706ac5ffb0156f74ada8b88","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-248","gmt_create":"2026-06-30T18:39:29.62434+08:00","gmt_modified":"2026-06-30T18:39:29.62434+08:00"},{"id":3302,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"f3b38dfd34a76e0d2e62a863fca301a8","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/ota/index.vue#420-831","gmt_create":"2026-06-30T18:39:29.625105+08:00","gmt_modified":"2026-06-30T18:39:29.625105+08:00"},{"id":3303,"source_id":"4bb9a8c7ac3763db0746ff90788525b6","target_id":"f3b38dfd34a76e0d2e62a863fca301a8","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 420-831","gmt_create":"2026-06-30T18:39:29.625218+08:00","gmt_modified":"2026-06-30T18:39:29.625218+08:00"},{"id":3304,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"ae7ce676a4f649c15d0490bbb2954cfe","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/ota.js#13-67","gmt_create":"2026-06-30T18:39:29.625427+08:00","gmt_modified":"2026-06-30T18:39:29.625427+08:00"},{"id":3305,"source_id":"29e96dbf4d3d8f6e116ec620bbf504ad","target_id":"ae7ce676a4f649c15d0490bbb2954cfe","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 13-67","gmt_create":"2026-06-30T18:39:29.625541+08:00","gmt_modified":"2026-06-30T18:39:29.625541+08:00"},{"id":3306,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"859ba4011a4720ad0ad431545e144986","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/blacklist.js#12-56","gmt_create":"2026-06-30T18:39:29.625693+08:00","gmt_modified":"2026-06-30T18:39:29.625693+08:00"},{"id":3307,"source_id":"5ceb781f55bf90055f3005880d06ee2a","target_id":"859ba4011a4720ad0ad431545e144986","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 12-56","gmt_create":"2026-06-30T18:39:29.625828+08:00","gmt_modified":"2026-06-30T18:39:29.625828+08:00"},{"id":3308,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"c910f65a89648ecf30c84b77b136ad70","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/otaTargetDevice.js#12-55","gmt_create":"2026-06-30T18:39:29.625982+08:00","gmt_modified":"2026-06-30T18:39:29.625982+08:00"},{"id":3309,"source_id":"5973b5959029669ade01898821960785","target_id":"c910f65a89648ecf30c84b77b136ad70","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 12-55","gmt_create":"2026-06-30T18:39:29.626098+08:00","gmt_modified":"2026-06-30T18:39:29.626098+08:00"},{"id":3310,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"c042223cf0aa5b2e59be1747923b4baf","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/ota.js#13-49","gmt_create":"2026-06-30T18:39:29.626374+08:00","gmt_modified":"2026-06-30T18:39:29.626374+08:00"},{"id":3311,"source_id":"29e96dbf4d3d8f6e116ec620bbf504ad","target_id":"c042223cf0aa5b2e59be1747923b4baf","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 13-49","gmt_create":"2026-06-30T18:39:29.626551+08:00","gmt_modified":"2026-06-30T18:39:29.626551+08:00"},{"id":3312,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"b1e9d90908a2a5e3d545ca0cf2c86769","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/ota.js#24-268","gmt_create":"2026-06-30T18:39:29.626904+08:00","gmt_modified":"2026-06-30T18:39:29.626904+08:00"},{"id":3313,"source_id":"ba84445ce5118798ce7d0da4ecb4d5e2","target_id":"b1e9d90908a2a5e3d545ca0cf2c86769","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 24-268","gmt_create":"2026-06-30T18:39:29.627017+08:00","gmt_modified":"2026-06-30T18:39:29.627017+08:00"},{"id":3314,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"aae8712924efab58e019d0c963576781","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/blacklist.js#96-139","gmt_create":"2026-06-30T18:39:29.627222+08:00","gmt_modified":"2026-06-30T18:39:29.627222+08:00"},{"id":3315,"source_id":"71a563f23b46da0255a6400402bbfa05","target_id":"aae8712924efab58e019d0c963576781","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 96-139","gmt_create":"2026-06-30T18:39:29.627488+08:00","gmt_modified":"2026-06-30T18:39:29.627488+08:00"},{"id":3316,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"fb9daf52780951bc4b93f14b1fcfa8f1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/otaTargetDevice.js#96-139","gmt_create":"2026-06-30T18:39:29.627693+08:00","gmt_modified":"2026-06-30T18:39:29.627693+08:00"},{"id":3317,"source_id":"ea6e178b2f0bdcefe2ae8800166453d5","target_id":"fb9daf52780951bc4b93f14b1fcfa8f1","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 96-139","gmt_create":"2026-06-30T18:39:29.627822+08:00","gmt_modified":"2026-06-30T18:39:29.627822+08:00"},{"id":3318,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"23aa29b61d1387fca0530a0a1e57e27f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/ota.js#1-292","gmt_create":"2026-06-30T18:39:29.628032+08:00","gmt_modified":"2026-06-30T18:39:29.628032+08:00"},{"id":3319,"source_id":"ba84445ce5118798ce7d0da4ecb4d5e2","target_id":"23aa29b61d1387fca0530a0a1e57e27f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-292","gmt_create":"2026-06-30T18:39:29.628183+08:00","gmt_modified":"2026-06-30T18:39:29.628183+08:00"},{"id":3320,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"e6f541a0af8390b3610d1e380a8d3236","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/Ota.js#4-94","gmt_create":"2026-06-30T18:39:29.628646+08:00","gmt_modified":"2026-06-30T18:39:29.628646+08:00"},{"id":3321,"source_id":"fc2d0cc85e5f2565c3105cbe0584903a","target_id":"e6f541a0af8390b3610d1e380a8d3236","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 4-94","gmt_create":"2026-06-30T18:39:29.628773+08:00","gmt_modified":"2026-06-30T18:39:29.628773+08:00"},{"id":3322,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"4aad83e3e76ccc16e5b91d801ab1b278","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/BlackList.js#5-36","gmt_create":"2026-06-30T18:39:29.628938+08:00","gmt_modified":"2026-06-30T18:39:29.628938+08:00"},{"id":3323,"source_id":"a84967d9d3088fba02de385738e7ca27","target_id":"4aad83e3e76ccc16e5b91d801ab1b278","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 5-36","gmt_create":"2026-06-30T18:39:29.629078+08:00","gmt_modified":"2026-06-30T18:39:29.629078+08:00"},{"id":3324,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"54c99704b8bcabdfe63adda9c4392452","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/OtaTargetDevice.js#5-37","gmt_create":"2026-06-30T18:39:29.62924+08:00","gmt_modified":"2026-06-30T18:39:29.62924+08:00"},{"id":3325,"source_id":"4ca379f147f6f1da710371999e08dc24","target_id":"54c99704b8bcabdfe63adda9c4392452","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 5-37","gmt_create":"2026-06-30T18:39:29.629354+08:00","gmt_modified":"2026-06-30T18:39:29.629354+08:00"},{"id":3326,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"b7c66d1bc7887a6132dc3acbf6421a5d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/Ota.js#1-97","gmt_create":"2026-06-30T18:39:29.629506+08:00","gmt_modified":"2026-06-30T18:39:29.629506+08:00"},{"id":3327,"source_id":"fc2d0cc85e5f2565c3105cbe0584903a","target_id":"b7c66d1bc7887a6132dc3acbf6421a5d","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-97","gmt_create":"2026-06-30T18:39:29.629647+08:00","gmt_modified":"2026-06-30T18:39:29.629647+08:00"},{"id":3328,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"058bc5c3e018c854b5cf42905abd45d7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/BlackList.js#1-36","gmt_create":"2026-06-30T18:39:29.629815+08:00","gmt_modified":"2026-06-30T18:39:29.629815+08:00"},{"id":3329,"source_id":"a84967d9d3088fba02de385738e7ca27","target_id":"058bc5c3e018c854b5cf42905abd45d7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-36","gmt_create":"2026-06-30T18:39:29.629939+08:00","gmt_modified":"2026-06-30T18:39:29.629939+08:00"},{"id":3330,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"3830639d0b7444aa8a1cf3c80d4eef7e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/OtaTargetDevice.js#1-37","gmt_create":"2026-06-30T18:39:29.630118+08:00","gmt_modified":"2026-06-30T18:39:29.630118+08:00"},{"id":3331,"source_id":"4ca379f147f6f1da710371999e08dc24","target_id":"3830639d0b7444aa8a1cf3c80d4eef7e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-37","gmt_create":"2026-06-30T18:39:29.633252+08:00","gmt_modified":"2026-06-30T18:39:29.633252+08:00"},{"id":3332,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"be497152bcedca75299e4c2521c11859","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/otaStorage.js#46-103","gmt_create":"2026-06-30T18:39:29.633431+08:00","gmt_modified":"2026-06-30T18:39:29.633431+08:00"},{"id":3333,"source_id":"a15b46bcf0be7bfbc82e57adca5be630","target_id":"be497152bcedca75299e4c2521c11859","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 46-103","gmt_create":"2026-06-30T18:39:29.633531+08:00","gmt_modified":"2026-06-30T18:39:29.633531+08:00"},{"id":3334,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"af76fcd4277eeb577f573e21de923bbf","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/config/env.js#1-13","gmt_create":"2026-06-30T18:39:29.633724+08:00","gmt_modified":"2026-06-30T18:39:29.633724+08:00"},{"id":3335,"source_id":"2a04b070bd67fc5059bb504232687d64","target_id":"af76fcd4277eeb577f573e21de923bbf","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-13","gmt_create":"2026-06-30T18:39:29.633843+08:00","gmt_modified":"2026-06-30T18:39:29.633843+08:00"},{"id":3336,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"b8c21c93e526039c96f1df526ebdcafe","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/otaStorage.js#1-113","gmt_create":"2026-06-30T18:39:29.633998+08:00","gmt_modified":"2026-06-30T18:39:29.633998+08:00"},{"id":3337,"source_id":"a15b46bcf0be7bfbc82e57adca5be630","target_id":"b8c21c93e526039c96f1df526ebdcafe","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-113","gmt_create":"2026-06-30T18:39:29.634119+08:00","gmt_modified":"2026-06-30T18:39:29.634119+08:00"},{"id":3338,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"424dfd038ca84be6195b08d7032a1235","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/ota.js#68-102","gmt_create":"2026-06-30T18:39:29.634371+08:00","gmt_modified":"2026-06-30T18:39:29.634371+08:00"},{"id":3339,"source_id":"ba84445ce5118798ce7d0da4ecb4d5e2","target_id":"424dfd038ca84be6195b08d7032a1235","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 68-102","gmt_create":"2026-06-30T18:39:29.63449+08:00","gmt_modified":"2026-06-30T18:39:29.63449+08:00"},{"id":3340,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"2fc67d9140f7c12759a5188eb6f9b204","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/ota/index.vue#305-338","gmt_create":"2026-06-30T18:39:29.634627+08:00","gmt_modified":"2026-06-30T18:39:29.634627+08:00"},{"id":3341,"source_id":"4bb9a8c7ac3763db0746ff90788525b6","target_id":"2fc67d9140f7c12759a5188eb6f9b204","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 305-338","gmt_create":"2026-06-30T18:39:29.634747+08:00","gmt_modified":"2026-06-30T18:39:29.634747+08:00"},{"id":3342,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"e3a6003c52bf8b8487bb1b8709da6b4b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/utils/response.js#1-25","gmt_create":"2026-06-30T18:39:29.63491+08:00","gmt_modified":"2026-06-30T18:39:29.63491+08:00"},{"id":3343,"source_id":"30f836e18a6bf9cbcf650e5884375a93","target_id":"e3a6003c52bf8b8487bb1b8709da6b4b","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-25","gmt_create":"2026-06-30T18:39:29.635031+08:00","gmt_modified":"2026-06-30T18:39:29.635031+08:00"},{"id":3344,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"cabe1728acba4dab25a86b5788412e46","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/ota.js#25-66","gmt_create":"2026-06-30T18:39:29.635187+08:00","gmt_modified":"2026-06-30T18:39:29.635187+08:00"},{"id":3345,"source_id":"ba84445ce5118798ce7d0da4ecb4d5e2","target_id":"cabe1728acba4dab25a86b5788412e46","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 25-66","gmt_create":"2026-06-30T18:39:29.635325+08:00","gmt_modified":"2026-06-30T18:39:29.635325+08:00"},{"id":3346,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"45f0756fae3928b75883500a5006f7f0","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/ota/index.vue#645-734","gmt_create":"2026-06-30T18:39:29.635489+08:00","gmt_modified":"2026-06-30T18:39:29.635489+08:00"},{"id":3347,"source_id":"4bb9a8c7ac3763db0746ff90788525b6","target_id":"45f0756fae3928b75883500a5006f7f0","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 645-734","gmt_create":"2026-06-30T18:39:29.635587+08:00","gmt_modified":"2026-06-30T18:39:29.635587+08:00"},{"id":3348,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"f2e521eddcaa25c62a309d5b0af997fa","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/blacklist.js#96-204","gmt_create":"2026-06-30T18:39:29.635812+08:00","gmt_modified":"2026-06-30T18:39:29.635812+08:00"},{"id":3349,"source_id":"71a563f23b46da0255a6400402bbfa05","target_id":"f2e521eddcaa25c62a309d5b0af997fa","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 96-204","gmt_create":"2026-06-30T18:39:29.635929+08:00","gmt_modified":"2026-06-30T18:39:29.635929+08:00"},{"id":3350,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"6b7ea701575cf98b6ee3431f68ad5649","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/ota/index.vue#736-817","gmt_create":"2026-06-30T18:39:29.636087+08:00","gmt_modified":"2026-06-30T18:39:29.636087+08:00"},{"id":3351,"source_id":"4bb9a8c7ac3763db0746ff90788525b6","target_id":"6b7ea701575cf98b6ee3431f68ad5649","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 736-817","gmt_create":"2026-06-30T18:39:29.636205+08:00","gmt_modified":"2026-06-30T18:39:29.636205+08:00"},{"id":3352,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"506ecfb839ed7fb3f4199ade7e4b6a64","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/otaTargetDevice.js#96-208","gmt_create":"2026-06-30T18:39:29.636418+08:00","gmt_modified":"2026-06-30T18:39:29.636418+08:00"},{"id":3353,"source_id":"ea6e178b2f0bdcefe2ae8800166453d5","target_id":"506ecfb839ed7fb3f4199ade7e4b6a64","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 96-208","gmt_create":"2026-06-30T18:39:29.636531+08:00","gmt_modified":"2026-06-30T18:39:29.636531+08:00"},{"id":3354,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"7a5ae98472bdc4806472d50e6b88c997","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/utils/request.js#1-72","gmt_create":"2026-06-30T18:39:29.636691+08:00","gmt_modified":"2026-06-30T18:39:29.636691+08:00"},{"id":3355,"source_id":"34fcf7aeb55a9c0224c554fc48545063","target_id":"7a5ae98472bdc4806472d50e6b88c997","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-72","gmt_create":"2026-06-30T18:39:29.636799+08:00","gmt_modified":"2026-06-30T18:39:29.6368+08:00"},{"id":3356,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"69c930f997042246d4e17369ede6f826","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/router/index.js#1-91","gmt_create":"2026-06-30T18:39:29.636927+08:00","gmt_modified":"2026-06-30T18:39:29.636927+08:00"},{"id":3357,"source_id":"08b8d17e3c09b326687a7bca6789507a","target_id":"69c930f997042246d4e17369ede6f826","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-91","gmt_create":"2026-06-30T18:39:29.637036+08:00","gmt_modified":"2026-06-30T18:39:29.637036+08:00"},{"id":3358,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"6b61c60063d41432a3cc1ac4d1699181","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/utils/request.js#44-69","gmt_create":"2026-06-30T18:39:29.638051+08:00","gmt_modified":"2026-06-30T18:39:29.638051+08:00"},{"id":3359,"source_id":"34fcf7aeb55a9c0224c554fc48545063","target_id":"6b61c60063d41432a3cc1ac4d1699181","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 44-69","gmt_create":"2026-06-30T18:39:29.638209+08:00","gmt_modified":"2026-06-30T18:39:29.638209+08:00"},{"id":3360,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"752be7590bb954b39e5a8f41ce8811eb","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/blacklist.js#159-183","gmt_create":"2026-06-30T18:39:29.638353+08:00","gmt_modified":"2026-06-30T18:39:29.638353+08:00"},{"id":3361,"source_id":"71a563f23b46da0255a6400402bbfa05","target_id":"752be7590bb954b39e5a8f41ce8811eb","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 159-183","gmt_create":"2026-06-30T18:39:29.638443+08:00","gmt_modified":"2026-06-30T18:39:29.638443+08:00"},{"id":3362,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"4daa6ac2900ccb8c9fd7142d0ecdd298","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/otaTargetDevice.js#142-208","gmt_create":"2026-06-30T18:39:29.638592+08:00","gmt_modified":"2026-06-30T18:39:29.638592+08:00"},{"id":3363,"source_id":"ea6e178b2f0bdcefe2ae8800166453d5","target_id":"4daa6ac2900ccb8c9fd7142d0ecdd298","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 142-208","gmt_create":"2026-06-30T18:39:29.638702+08:00","gmt_modified":"2026-06-30T18:39:29.638702+08:00"},{"id":3364,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"e22545d86c6efa26c57aea0e355a57f6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: DEPLOY.md#226-256","gmt_create":"2026-06-30T18:39:29.638841+08:00","gmt_modified":"2026-06-30T18:39:29.638841+08:00"},{"id":3365,"source_id":"0c25a991664c34b2b36ce3aeed80f4da","target_id":"e22545d86c6efa26c57aea0e355a57f6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 226-256","gmt_create":"2026-06-30T18:39:29.638935+08:00","gmt_modified":"2026-06-30T18:39:29.638935+08:00"},{"id":3366,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"fc2d0cc85e5f2565c3105cbe0584903a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/models/Ota.js","gmt_create":"2026-06-30T18:39:56.530513+08:00","gmt_modified":"2026-06-30T18:39:56.530513+08:00"},{"id":3367,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"a84967d9d3088fba02de385738e7ca27","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/models/BlackList.js","gmt_create":"2026-06-30T18:39:56.530752+08:00","gmt_modified":"2026-06-30T18:39:56.530752+08:00"},{"id":3368,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"4ca379f147f6f1da710371999e08dc24","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/models/OtaTargetDevice.js","gmt_create":"2026-06-30T18:39:56.530901+08:00","gmt_modified":"2026-06-30T18:39:56.530901+08:00"},{"id":3369,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"ba84445ce5118798ce7d0da4ecb4d5e2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/routes/ota.js","gmt_create":"2026-06-30T18:39:56.531051+08:00","gmt_modified":"2026-06-30T18:39:56.531051+08:00"},{"id":3370,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"71a563f23b46da0255a6400402bbfa05","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/routes/blacklist.js","gmt_create":"2026-06-30T18:39:56.531158+08:00","gmt_modified":"2026-06-30T18:39:56.531158+08:00"},{"id":3371,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"ea6e178b2f0bdcefe2ae8800166453d5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/routes/otaTargetDevice.js","gmt_create":"2026-06-30T18:39:56.531315+08:00","gmt_modified":"2026-06-30T18:39:56.531315+08:00"},{"id":3372,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"a15b46bcf0be7bfbc82e57adca5be630","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/services/otaStorage.js","gmt_create":"2026-06-30T18:39:56.531436+08:00","gmt_modified":"2026-06-30T18:39:56.531436+08:00"},{"id":3373,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"99aa92df5b8c8412119e9b3cb015f8c4","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/validators/ota.js","gmt_create":"2026-06-30T18:39:56.531564+08:00","gmt_modified":"2026-06-30T18:39:56.531564+08:00"},{"id":3374,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"0d26d3961441eb708b69c96f1ed1f7b7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/validators/blacklist.js","gmt_create":"2026-06-30T18:39:56.531677+08:00","gmt_modified":"2026-06-30T18:39:56.531677+08:00"},{"id":3375,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"8a4e619bfb6be9c463274f96a2dcb5a0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/validators/otaTargetDevice.js","gmt_create":"2026-06-30T18:39:56.531828+08:00","gmt_modified":"2026-06-30T18:39:56.531828+08:00"},{"id":3376,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"30f836e18a6bf9cbcf650e5884375a93","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/utils/response.js","gmt_create":"2026-06-30T18:39:56.531932+08:00","gmt_modified":"2026-06-30T18:39:56.531932+08:00"},{"id":3377,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"2a04b070bd67fc5059bb504232687d64","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/config/env.js","gmt_create":"2026-06-30T18:39:56.53205+08:00","gmt_modified":"2026-06-30T18:39:56.53205+08:00"},{"id":3378,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"cb4575c8c79b7b9f6ffdac43c2369b95","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/config/database.js","gmt_create":"2026-06-30T18:39:56.532162+08:00","gmt_modified":"2026-06-30T18:39:56.532162+08:00"},{"id":3379,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"4bb9a8c7ac3763db0746ff90788525b6","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/views/ota/index.vue","gmt_create":"2026-06-30T18:39:56.532265+08:00","gmt_modified":"2026-06-30T18:39:56.532265+08:00"},{"id":3380,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"0eb021ef791f4679788fe98caea23e31","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/views/blacklist/index.vue","gmt_create":"2026-06-30T18:39:56.532386+08:00","gmt_modified":"2026-06-30T18:39:56.532386+08:00"},{"id":3381,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"cc4227daf4f2b37377be96fcc492e509","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/views/ota-target-device/index.vue","gmt_create":"2026-06-30T18:39:56.532524+08:00","gmt_modified":"2026-06-30T18:39:56.532524+08:00"},{"id":3382,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"29e96dbf4d3d8f6e116ec620bbf504ad","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/api/ota.js","gmt_create":"2026-06-30T18:39:56.53265+08:00","gmt_modified":"2026-06-30T18:39:56.53265+08:00"},{"id":3383,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"5ceb781f55bf90055f3005880d06ee2a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/api/blacklist.js","gmt_create":"2026-06-30T18:39:56.532804+08:00","gmt_modified":"2026-06-30T18:39:56.532804+08:00"},{"id":3384,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"5973b5959029669ade01898821960785","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/api/otaTargetDevice.js","gmt_create":"2026-06-30T18:39:56.532906+08:00","gmt_modified":"2026-06-30T18:39:56.532906+08:00"},{"id":3385,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"23aa29b61d1387fca0530a0a1e57e27f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/ota.js#1-292","gmt_create":"2026-06-30T18:39:56.53307+08:00","gmt_modified":"2026-06-30T18:39:56.53307+08:00"},{"id":3386,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"72de55f3f022487777e9ad301c9d942b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/blacklist.js#1-223","gmt_create":"2026-06-30T18:39:56.533275+08:00","gmt_modified":"2026-06-30T18:39:56.533275+08:00"},{"id":3387,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"ba9810388706ac5ffb0156f74ada8b88","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/otaTargetDevice.js#1-248","gmt_create":"2026-06-30T18:39:56.533479+08:00","gmt_modified":"2026-06-30T18:39:56.533479+08:00"},{"id":3388,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"b7c66d1bc7887a6132dc3acbf6421a5d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/Ota.js#1-97","gmt_create":"2026-06-30T18:39:56.533642+08:00","gmt_modified":"2026-06-30T18:39:56.533642+08:00"},{"id":3389,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"05900505c40339d0cc93870281600479","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/BlackList.js#1-37","gmt_create":"2026-06-30T18:39:56.533836+08:00","gmt_modified":"2026-06-30T18:39:56.533836+08:00"},{"id":3390,"source_id":"a84967d9d3088fba02de385738e7ca27","target_id":"05900505c40339d0cc93870281600479","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-37","gmt_create":"2026-06-30T18:39:56.533939+08:00","gmt_modified":"2026-06-30T18:39:56.533939+08:00"},{"id":3391,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"921d509d2d71df1e2bace1390640482a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/OtaTargetDevice.js#1-38","gmt_create":"2026-06-30T18:39:56.534096+08:00","gmt_modified":"2026-06-30T18:39:56.534096+08:00"},{"id":3392,"source_id":"4ca379f147f6f1da710371999e08dc24","target_id":"921d509d2d71df1e2bace1390640482a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-38","gmt_create":"2026-06-30T18:39:56.534213+08:00","gmt_modified":"2026-06-30T18:39:56.534213+08:00"},{"id":3393,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"149a41cdd5807ad4f666e9eb2463fa68","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/ota/index.vue#1-628","gmt_create":"2026-06-30T18:39:56.534352+08:00","gmt_modified":"2026-06-30T18:39:56.534352+08:00"},{"id":3394,"source_id":"4bb9a8c7ac3763db0746ff90788525b6","target_id":"149a41cdd5807ad4f666e9eb2463fa68","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-628","gmt_create":"2026-06-30T18:39:56.534456+08:00","gmt_modified":"2026-06-30T18:39:56.534456+08:00"},{"id":3395,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"771e33c2a04ba5eb1a504cf7aa1e9c36","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/blacklist/index.vue#1-381","gmt_create":"2026-06-30T18:39:56.53458+08:00","gmt_modified":"2026-06-30T18:39:56.53458+08:00"},{"id":3396,"source_id":"0eb021ef791f4679788fe98caea23e31","target_id":"771e33c2a04ba5eb1a504cf7aa1e9c36","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-381","gmt_create":"2026-06-30T18:39:56.534732+08:00","gmt_modified":"2026-06-30T18:39:56.534732+08:00"},{"id":3397,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"f23242497ee4dc9ed490a1d09d0d3d91","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/ota-target-device/index.vue#1-386","gmt_create":"2026-06-30T18:39:56.534886+08:00","gmt_modified":"2026-06-30T18:39:56.534886+08:00"},{"id":3398,"source_id":"cc4227daf4f2b37377be96fcc492e509","target_id":"f23242497ee4dc9ed490a1d09d0d3d91","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-386","gmt_create":"2026-06-30T18:39:56.535014+08:00","gmt_modified":"2026-06-30T18:39:56.535014+08:00"},{"id":3399,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"b8c21c93e526039c96f1df526ebdcafe","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/otaStorage.js#1-113","gmt_create":"2026-06-30T18:39:56.535896+08:00","gmt_modified":"2026-06-30T18:39:56.535896+08:00"},{"id":3400,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"0c0ca507fcaf2164af19adf77eaf72e8","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/validators/ota.js#1-36","gmt_create":"2026-06-30T18:39:56.53607+08:00","gmt_modified":"2026-06-30T18:39:56.53607+08:00"},{"id":3401,"source_id":"99aa92df5b8c8412119e9b3cb015f8c4","target_id":"0c0ca507fcaf2164af19adf77eaf72e8","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-36","gmt_create":"2026-06-30T18:39:56.536174+08:00","gmt_modified":"2026-06-30T18:39:56.536174+08:00"},{"id":3402,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"420851439a300cff8b7fa324589ce87a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/validators/blacklist.js#1-14","gmt_create":"2026-06-30T18:39:56.536294+08:00","gmt_modified":"2026-06-30T18:39:56.536294+08:00"},{"id":3403,"source_id":"0d26d3961441eb708b69c96f1ed1f7b7","target_id":"420851439a300cff8b7fa324589ce87a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-14","gmt_create":"2026-06-30T18:39:56.536388+08:00","gmt_modified":"2026-06-30T18:39:56.536388+08:00"},{"id":3404,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"e92ce9787ed66ea4dd0821e0c8f28d8a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/validators/otaTargetDevice.js#1-14","gmt_create":"2026-06-30T18:39:56.536524+08:00","gmt_modified":"2026-06-30T18:39:56.536524+08:00"},{"id":3405,"source_id":"8a4e619bfb6be9c463274f96a2dcb5a0","target_id":"e92ce9787ed66ea4dd0821e0c8f28d8a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-14","gmt_create":"2026-06-30T18:39:56.536607+08:00","gmt_modified":"2026-06-30T18:39:56.536607+08:00"},{"id":3406,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"0696a947e8ffd03fd403809f77673c55","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/ota.js#24-66","gmt_create":"2026-06-30T18:39:56.536822+08:00","gmt_modified":"2026-06-30T18:39:56.536822+08:00"},{"id":3407,"source_id":"ba84445ce5118798ce7d0da4ecb4d5e2","target_id":"0696a947e8ffd03fd403809f77673c55","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 24-66","gmt_create":"2026-06-30T18:39:56.536933+08:00","gmt_modified":"2026-06-30T18:39:56.536933+08:00"},{"id":3408,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"424dfd038ca84be6195b08d7032a1235","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/ota.js#68-102","gmt_create":"2026-06-30T18:39:56.537069+08:00","gmt_modified":"2026-06-30T18:39:56.53707+08:00"},{"id":3409,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"be497152bcedca75299e4c2521c11859","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/otaStorage.js#46-103","gmt_create":"2026-06-30T18:39:56.537221+08:00","gmt_modified":"2026-06-30T18:39:56.537221+08:00"},{"id":3410,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"0f5328f2be7159ab2f533662f8992b10","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/ota/index.vue#384-412","gmt_create":"2026-06-30T18:39:56.537364+08:00","gmt_modified":"2026-06-30T18:39:56.537364+08:00"},{"id":3411,"source_id":"4bb9a8c7ac3763db0746ff90788525b6","target_id":"0f5328f2be7159ab2f533662f8992b10","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 384-412","gmt_create":"2026-06-30T18:39:56.537465+08:00","gmt_modified":"2026-06-30T18:39:56.537465+08:00"},{"id":3412,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"e6f541a0af8390b3610d1e380a8d3236","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/Ota.js#4-94","gmt_create":"2026-06-30T18:39:56.537604+08:00","gmt_modified":"2026-06-30T18:39:56.537604+08:00"},{"id":3413,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"b6918b1988464553531aec983ea27b7d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/BlackList.js#5-32","gmt_create":"2026-06-30T18:39:56.537774+08:00","gmt_modified":"2026-06-30T18:39:56.537774+08:00"},{"id":3414,"source_id":"a84967d9d3088fba02de385738e7ca27","target_id":"b6918b1988464553531aec983ea27b7d","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 5-32","gmt_create":"2026-06-30T18:39:56.537912+08:00","gmt_modified":"2026-06-30T18:39:56.537912+08:00"},{"id":3415,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"59e0c0eb304ea8fbb7145bc038c8fdf6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/OtaTargetDevice.js#5-33","gmt_create":"2026-06-30T18:39:56.538023+08:00","gmt_modified":"2026-06-30T18:39:56.538023+08:00"},{"id":3416,"source_id":"4ca379f147f6f1da710371999e08dc24","target_id":"59e0c0eb304ea8fbb7145bc038c8fdf6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 5-33","gmt_create":"2026-06-30T18:39:56.538117+08:00","gmt_modified":"2026-06-30T18:39:56.538117+08:00"},{"id":3417,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"0991eb53c8fe806cf46decab5e748f75","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/otaStorage.js#72-103","gmt_create":"2026-06-30T18:39:56.538566+08:00","gmt_modified":"2026-06-30T18:39:56.538566+08:00"},{"id":3418,"source_id":"a15b46bcf0be7bfbc82e57adca5be630","target_id":"0991eb53c8fe806cf46decab5e748f75","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 72-103","gmt_create":"2026-06-30T18:39:56.538694+08:00","gmt_modified":"2026-06-30T18:39:56.538694+08:00"},{"id":3419,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"a826e77f133d3db11e600f30b88f4e9a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/validators/ota.js#3-35","gmt_create":"2026-06-30T18:39:56.539109+08:00","gmt_modified":"2026-06-30T18:39:56.539109+08:00"},{"id":3420,"source_id":"99aa92df5b8c8412119e9b3cb015f8c4","target_id":"a826e77f133d3db11e600f30b88f4e9a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 3-35","gmt_create":"2026-06-30T18:39:56.53922+08:00","gmt_modified":"2026-06-30T18:39:56.53922+08:00"},{"id":3421,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"4a33d32c1578fd612d900aa17246d8c2","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/validators/blacklist.js#3-11","gmt_create":"2026-06-30T18:39:56.539329+08:00","gmt_modified":"2026-06-30T18:39:56.539329+08:00"},{"id":3422,"source_id":"0d26d3961441eb708b69c96f1ed1f7b7","target_id":"4a33d32c1578fd612d900aa17246d8c2","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 3-11","gmt_create":"2026-06-30T18:39:56.539438+08:00","gmt_modified":"2026-06-30T18:39:56.539438+08:00"},{"id":3423,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"4660c7ce6daeb3f765d39856dcf95f6f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/validators/otaTargetDevice.js#3-11","gmt_create":"2026-06-30T18:39:56.539551+08:00","gmt_modified":"2026-06-30T18:39:56.539551+08:00"},{"id":3424,"source_id":"8a4e619bfb6be9c463274f96a2dcb5a0","target_id":"4660c7ce6daeb3f765d39856dcf95f6f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 3-11","gmt_create":"2026-06-30T18:39:56.53963+08:00","gmt_modified":"2026-06-30T18:39:56.53963+08:00"},{"id":3425,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"e3a6003c52bf8b8487bb1b8709da6b4b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/utils/response.js#1-25","gmt_create":"2026-06-30T18:39:56.539736+08:00","gmt_modified":"2026-06-30T18:39:56.539736+08:00"},{"id":3426,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"7467dc2e2d22c93c63fa6342b2e08541","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/ota/index.vue#420-579","gmt_create":"2026-06-30T18:39:56.540181+08:00","gmt_modified":"2026-06-30T18:39:56.540181+08:00"},{"id":3427,"source_id":"4bb9a8c7ac3763db0746ff90788525b6","target_id":"7467dc2e2d22c93c63fa6342b2e08541","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 420-579","gmt_create":"2026-06-30T18:39:56.540259+08:00","gmt_modified":"2026-06-30T18:39:56.540259+08:00"},{"id":3428,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"4b5baf2b8dcd8468722cd31868c794b2","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/ota/index.vue#645-683","gmt_create":"2026-06-30T18:39:56.540384+08:00","gmt_modified":"2026-06-30T18:39:56.540384+08:00"},{"id":3429,"source_id":"4bb9a8c7ac3763db0746ff90788525b6","target_id":"4b5baf2b8dcd8468722cd31868c794b2","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 645-683","gmt_create":"2026-06-30T18:39:56.540462+08:00","gmt_modified":"2026-06-30T18:39:56.540462+08:00"},{"id":3430,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"3e935f654a28968186e9260f2c5035c7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/ota.js#1-68","gmt_create":"2026-06-30T18:39:56.540837+08:00","gmt_modified":"2026-06-30T18:39:56.540837+08:00"},{"id":3431,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"edbb69e747bbcd76dd1bc3a361ebf7c0","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/blacklist.js#1-57","gmt_create":"2026-06-30T18:39:56.540981+08:00","gmt_modified":"2026-06-30T18:39:56.540981+08:00"},{"id":3432,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"4e817a7f3bd90bb9e57c6a2e9009380f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/otaTargetDevice.js#1-57","gmt_create":"2026-06-30T18:39:56.541105+08:00","gmt_modified":"2026-06-30T18:39:56.541105+08:00"},{"id":3433,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"20e79ab592f63eb9d23c0d563d5f5202","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/blacklist.js#16-71","gmt_create":"2026-06-30T18:39:56.541459+08:00","gmt_modified":"2026-06-30T18:39:56.541459+08:00"},{"id":3434,"source_id":"71a563f23b46da0255a6400402bbfa05","target_id":"20e79ab592f63eb9d23c0d563d5f5202","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 16-71","gmt_create":"2026-06-30T18:39:56.541542+08:00","gmt_modified":"2026-06-30T18:39:56.541542+08:00"},{"id":3435,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"07afcaa71195b3d86386dcde14973a8d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/blacklist.js#96-131","gmt_create":"2026-06-30T18:39:56.541674+08:00","gmt_modified":"2026-06-30T18:39:56.541674+08:00"},{"id":3436,"source_id":"71a563f23b46da0255a6400402bbfa05","target_id":"07afcaa71195b3d86386dcde14973a8d","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 96-131","gmt_create":"2026-06-30T18:39:56.541757+08:00","gmt_modified":"2026-06-30T18:39:56.541757+08:00"},{"id":3437,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"2a5364613dbf0723f2e2a64affabb065","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/blacklist/index.vue#144-346","gmt_create":"2026-06-30T18:39:56.543701+08:00","gmt_modified":"2026-06-30T18:39:56.543701+08:00"},{"id":3438,"source_id":"0eb021ef791f4679788fe98caea23e31","target_id":"2a5364613dbf0723f2e2a64affabb065","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 144-346","gmt_create":"2026-06-30T18:39:56.54385+08:00","gmt_modified":"2026-06-30T18:39:56.54385+08:00"},{"id":3439,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"12ad7a8b54f39c0717843220f341d59e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/otaTargetDevice.js#16-71","gmt_create":"2026-06-30T18:39:56.544322+08:00","gmt_modified":"2026-06-30T18:39:56.544322+08:00"},{"id":3440,"source_id":"ea6e178b2f0bdcefe2ae8800166453d5","target_id":"12ad7a8b54f39c0717843220f341d59e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 16-71","gmt_create":"2026-06-30T18:39:56.544408+08:00","gmt_modified":"2026-06-30T18:39:56.544408+08:00"},{"id":3441,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"fb9daf52780951bc4b93f14b1fcfa8f1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/otaTargetDevice.js#96-139","gmt_create":"2026-06-30T18:39:56.544514+08:00","gmt_modified":"2026-06-30T18:39:56.544514+08:00"},{"id":3442,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"585261a6626a815d8f5f83b91a086eb9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/ota-target-device/index.vue#144-351","gmt_create":"2026-06-30T18:39:56.544644+08:00","gmt_modified":"2026-06-30T18:39:56.544644+08:00"},{"id":3443,"source_id":"cc4227daf4f2b37377be96fcc492e509","target_id":"585261a6626a815d8f5f83b91a086eb9","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 144-351","gmt_create":"2026-06-30T18:39:56.54475+08:00","gmt_modified":"2026-06-30T18:39:56.54475+08:00"},{"id":3444,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"e6564dcd4fbbe8e0f9673967ec4ce3a7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/package.json","gmt_create":"2026-06-30T18:39:56.545256+08:00","gmt_modified":"2026-06-30T18:39:56.545256+08:00"},{"id":3445,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"2a0437737a8daf4655f00caae7549a06","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/package.json#11-24","gmt_create":"2026-06-30T18:39:56.545352+08:00","gmt_modified":"2026-06-30T18:39:56.545352+08:00"},{"id":3446,"source_id":"e6564dcd4fbbe8e0f9673967ec4ce3a7","target_id":"2a0437737a8daf4655f00caae7549a06","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 11-24","gmt_create":"2026-06-30T18:39:56.545472+08:00","gmt_modified":"2026-06-30T18:39:56.545472+08:00"},{"id":3447,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"f0cfbce84fd69ea625e215367d5da707","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/package.json#1-29","gmt_create":"2026-06-30T18:39:56.545601+08:00","gmt_modified":"2026-06-30T18:39:56.545601+08:00"},{"id":3448,"source_id":"e6564dcd4fbbe8e0f9673967ec4ce3a7","target_id":"f0cfbce84fd69ea625e215367d5da707","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-29","gmt_create":"2026-06-30T18:39:56.545688+08:00","gmt_modified":"2026-06-30T18:39:56.545688+08:00"},{"id":3449,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"af76fcd4277eeb577f573e21de923bbf","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/config/env.js#1-13","gmt_create":"2026-06-30T18:39:56.545882+08:00","gmt_modified":"2026-06-30T18:39:56.545882+08:00"},{"id":3450,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"fad5c52b0517044faace96133c6e570c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/ota.js#174-181","gmt_create":"2026-06-30T18:39:56.546044+08:00","gmt_modified":"2026-06-30T18:39:56.546044+08:00"},{"id":3451,"source_id":"ba84445ce5118798ce7d0da4ecb4d5e2","target_id":"fad5c52b0517044faace96133c6e570c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 174-181","gmt_create":"2026-06-30T18:39:56.546129+08:00","gmt_modified":"2026-06-30T18:39:56.546129+08:00"},{"id":3452,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"f62834891fb8675fbb1dcb6654b186e9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/otaStorage.js#95-98","gmt_create":"2026-06-30T18:39:56.546273+08:00","gmt_modified":"2026-06-30T18:39:56.546273+08:00"},{"id":3453,"source_id":"a15b46bcf0be7bfbc82e57adca5be630","target_id":"f62834891fb8675fbb1dcb6654b186e9","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 95-98","gmt_create":"2026-06-30T18:39:56.546352+08:00","gmt_modified":"2026-06-30T18:39:56.546353+08:00"},{"id":3454,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"0c387969b601239a31cb0c672ef3c116","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/blacklist.js#108-112","gmt_create":"2026-06-30T18:39:56.546458+08:00","gmt_modified":"2026-06-30T18:39:56.546458+08:00"},{"id":3455,"source_id":"71a563f23b46da0255a6400402bbfa05","target_id":"0c387969b601239a31cb0c672ef3c116","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 108-112","gmt_create":"2026-06-30T18:39:56.546538+08:00","gmt_modified":"2026-06-30T18:39:56.546538+08:00"},{"id":3456,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"406e308cbdb4112d67f61a82a8118e9f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/otaTargetDevice.js#108-112","gmt_create":"2026-06-30T18:39:56.546662+08:00","gmt_modified":"2026-06-30T18:39:56.546662+08:00"},{"id":3457,"source_id":"ea6e178b2f0bdcefe2ae8800166453d5","target_id":"406e308cbdb4112d67f61a82a8118e9f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 108-112","gmt_create":"2026-06-30T18:39:56.546751+08:00","gmt_modified":"2026-06-30T18:39:56.546751+08:00"},{"id":3458,"source_id":"d4cb0c3c-97e9-449f-8918-f1c01e7e3561","target_id":"da7627b0-17b7-42c7-a029-e357bc889416","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: d4cb0c3c-97e9-449f-8918-f1c01e7e3561 -\u003e da7627b0-17b7-42c7-a029-e357bc889416","gmt_create":"2026-06-30T18:39:57.127914+08:00","gmt_modified":"2026-06-30T18:39:57.127915+08:00"},{"id":3459,"source_id":"f0978b42-6f98-470e-922f-22dec2fac24d","target_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: f0978b42-6f98-470e-922f-22dec2fac24d -\u003e 7d8f2ef6-290d-4952-b59c-a1d95af0d438","gmt_create":"2026-06-30T18:39:57.129556+08:00","gmt_modified":"2026-06-30T18:39:57.129556+08:00"},{"id":3460,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"de74851040d304248e26c1db406458af","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/routes/models.js","gmt_create":"2026-07-01T17:22:10.356569+08:00","gmt_modified":"2026-07-01T17:22:10.356569+08:00"},{"id":3461,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"387b55f69fa15c066ce97e930d49fca8","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/models/Model.js","gmt_create":"2026-07-01T17:22:10.357791+08:00","gmt_modified":"2026-07-01T17:22:10.357791+08:00"},{"id":3462,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"d82c987a9b76c3f9e87e628925cae2d7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/validators/model.js","gmt_create":"2026-07-01T17:22:10.358273+08:00","gmt_modified":"2026-07-01T17:22:10.358273+08:00"},{"id":3463,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"30f836e18a6bf9cbcf650e5884375a93","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/utils/response.js","gmt_create":"2026-07-01T17:22:10.358447+08:00","gmt_modified":"2026-07-01T17:22:10.358447+08:00"},{"id":3464,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"c22be0eccf069bf7f87f09ef49070f8d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/middleware/auth.js","gmt_create":"2026-07-01T17:22:10.35865+08:00","gmt_modified":"2026-07-01T17:22:10.35865+08:00"},{"id":3465,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"2d86c0a8ef372bffb82991d44412c989","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/api/model.js","gmt_create":"2026-07-01T17:22:10.358974+08:00","gmt_modified":"2026-07-01T17:22:10.358974+08:00"},{"id":3466,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"fc2d0cc85e5f2565c3105cbe0584903a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/models/Ota.js","gmt_create":"2026-07-01T17:22:10.359263+08:00","gmt_modified":"2026-07-01T17:22:10.359263+08:00"},{"id":3467,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"ba84445ce5118798ce7d0da4ecb4d5e2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/routes/ota.js","gmt_create":"2026-07-01T17:22:10.359529+08:00","gmt_modified":"2026-07-01T17:22:10.359529+08:00"},{"id":3468,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"d5e6b65d89b66c08d62b4c6fc5812f22","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/services/squiglink.js","gmt_create":"2026-07-01T17:22:10.359671+08:00","gmt_modified":"2026-07-01T17:22:10.359671+08:00"},{"id":3469,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"0d51eea570b0976e572f9c35721fa5e6","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/views/model/components/ModelFormDialog.vue","gmt_create":"2026-07-01T17:22:10.3599+08:00","gmt_modified":"2026-07-01T17:22:10.3599+08:00"},{"id":3470,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"5d1069f11e2153ac8cd75f26c10256a2","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#1-659","gmt_create":"2026-07-01T17:22:10.360738+08:00","gmt_modified":"2026-07-01T17:22:10.360738+08:00"},{"id":3471,"source_id":"de74851040d304248e26c1db406458af","target_id":"5d1069f11e2153ac8cd75f26c10256a2","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-659","gmt_create":"2026-07-01T17:22:10.360873+08:00","gmt_modified":"2026-07-01T17:22:10.360873+08:00"},{"id":3472,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"024c49b177309c95a9a6487c0c70ff28","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/Model.js#1-53","gmt_create":"2026-07-01T17:22:10.361471+08:00","gmt_modified":"2026-07-01T17:22:10.361471+08:00"},{"id":3473,"source_id":"387b55f69fa15c066ce97e930d49fca8","target_id":"024c49b177309c95a9a6487c0c70ff28","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-53","gmt_create":"2026-07-01T17:22:10.361729+08:00","gmt_modified":"2026-07-01T17:22:10.361729+08:00"},{"id":3474,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"ed0beaf535b1c935f72da53c93cefd99","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/validators/model.js#1-22","gmt_create":"2026-07-01T17:22:10.362028+08:00","gmt_modified":"2026-07-01T17:22:10.362028+08:00"},{"id":3475,"source_id":"d82c987a9b76c3f9e87e628925cae2d7","target_id":"ed0beaf535b1c935f72da53c93cefd99","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-22","gmt_create":"2026-07-01T17:22:10.362339+08:00","gmt_modified":"2026-07-01T17:22:10.362339+08:00"},{"id":3476,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"e3a6003c52bf8b8487bb1b8709da6b4b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/utils/response.js#1-25","gmt_create":"2026-07-01T17:22:10.362969+08:00","gmt_modified":"2026-07-01T17:22:10.362969+08:00"},{"id":3477,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"b4d5cb8d79f05ea0bc1f56f20380f226","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/middleware/auth.js#1-36","gmt_create":"2026-07-01T17:22:10.363176+08:00","gmt_modified":"2026-07-01T17:22:10.363176+08:00"},{"id":3478,"source_id":"c22be0eccf069bf7f87f09ef49070f8d","target_id":"b4d5cb8d79f05ea0bc1f56f20380f226","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-36","gmt_create":"2026-07-01T17:22:10.363485+08:00","gmt_modified":"2026-07-01T17:22:10.363485+08:00"},{"id":3479,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"d71cf669f581f1e2e6b7956768cf07e5","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/model.js#1-165","gmt_create":"2026-07-01T17:22:10.363773+08:00","gmt_modified":"2026-07-01T17:22:10.363773+08:00"},{"id":3480,"source_id":"2d86c0a8ef372bffb82991d44412c989","target_id":"d71cf669f581f1e2e6b7956768cf07e5","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-165","gmt_create":"2026-07-01T17:22:10.363919+08:00","gmt_modified":"2026-07-01T17:22:10.363919+08:00"},{"id":3481,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"b7c66d1bc7887a6132dc3acbf6421a5d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/Ota.js#1-97","gmt_create":"2026-07-01T17:22:10.364292+08:00","gmt_modified":"2026-07-01T17:22:10.364292+08:00"},{"id":3482,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"2f44ab11354520681821b18c70b28ea5","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/squiglink.js#1-322","gmt_create":"2026-07-01T17:22:10.364488+08:00","gmt_modified":"2026-07-01T17:22:10.364488+08:00"},{"id":3483,"source_id":"d5e6b65d89b66c08d62b4c6fc5812f22","target_id":"2f44ab11354520681821b18c70b28ea5","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-322","gmt_create":"2026-07-01T17:22:10.364603+08:00","gmt_modified":"2026-07-01T17:22:10.364603+08:00"},{"id":3484,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"dfde97c120aa759be08496d7a1217bb5","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/components/ModelFormDialog.vue#1-555","gmt_create":"2026-07-01T17:22:10.364775+08:00","gmt_modified":"2026-07-01T17:22:10.364775+08:00"},{"id":3485,"source_id":"0d51eea570b0976e572f9c35721fa5e6","target_id":"dfde97c120aa759be08496d7a1217bb5","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-555","gmt_create":"2026-07-01T17:22:10.364915+08:00","gmt_modified":"2026-07-01T17:22:10.364915+08:00"},{"id":3486,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"8ff91c81b391966d61e25fb150388eda","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#133-181","gmt_create":"2026-07-01T17:22:10.366249+08:00","gmt_modified":"2026-07-01T17:22:10.366249+08:00"},{"id":3487,"source_id":"de74851040d304248e26c1db406458af","target_id":"8ff91c81b391966d61e25fb150388eda","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 133-181","gmt_create":"2026-07-01T17:22:10.366406+08:00","gmt_modified":"2026-07-01T17:22:10.366406+08:00"},{"id":3488,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"f84073b86f81ac8811492a2bdf880f16","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/Model.js#4-50","gmt_create":"2026-07-01T17:22:10.366583+08:00","gmt_modified":"2026-07-01T17:22:10.366583+08:00"},{"id":3489,"source_id":"387b55f69fa15c066ce97e930d49fca8","target_id":"f84073b86f81ac8811492a2bdf880f16","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 4-50","gmt_create":"2026-07-01T17:22:10.3667+08:00","gmt_modified":"2026-07-01T17:22:10.3667+08:00"},{"id":3490,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"9e84158ca8a0ddb6b5e5b73eb1bbe846","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/validators/model.js#3-19","gmt_create":"2026-07-01T17:22:10.366902+08:00","gmt_modified":"2026-07-01T17:22:10.366902+08:00"},{"id":3491,"source_id":"d82c987a9b76c3f9e87e628925cae2d7","target_id":"9e84158ca8a0ddb6b5e5b73eb1bbe846","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 3-19","gmt_create":"2026-07-01T17:22:10.367214+08:00","gmt_modified":"2026-07-01T17:22:10.367214+08:00"},{"id":3492,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"5a517afeab7c85f15e321f8de509c92e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/middleware/auth.js#3-26","gmt_create":"2026-07-01T17:22:10.367472+08:00","gmt_modified":"2026-07-01T17:22:10.367472+08:00"},{"id":3493,"source_id":"c22be0eccf069bf7f87f09ef49070f8d","target_id":"5a517afeab7c85f15e321f8de509c92e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 3-26","gmt_create":"2026-07-01T17:22:10.367609+08:00","gmt_modified":"2026-07-01T17:22:10.367609+08:00"},{"id":3494,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"61cdcff725a5d9f851c84d3976b11ad9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/model.js#13-165","gmt_create":"2026-07-01T17:22:10.367902+08:00","gmt_modified":"2026-07-01T17:22:10.367902+08:00"},{"id":3495,"source_id":"2d86c0a8ef372bffb82991d44412c989","target_id":"61cdcff725a5d9f851c84d3976b11ad9","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 13-165","gmt_create":"2026-07-01T17:22:10.368179+08:00","gmt_modified":"2026-07-01T17:22:10.368179+08:00"},{"id":3496,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"242fa36bc833a990fae50c7bb09ed4e1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/components/ModelFormDialog.vue#158-464","gmt_create":"2026-07-01T17:22:10.368329+08:00","gmt_modified":"2026-07-01T17:22:10.368329+08:00"},{"id":3497,"source_id":"0d51eea570b0976e572f9c35721fa5e6","target_id":"242fa36bc833a990fae50c7bb09ed4e1","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 158-464","gmt_create":"2026-07-01T17:22:10.368465+08:00","gmt_modified":"2026-07-01T17:22:10.368465+08:00"},{"id":3498,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"198c9bc987125a8c495d5f4f4c719320","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#307-369","gmt_create":"2026-07-01T17:22:10.368628+08:00","gmt_modified":"2026-07-01T17:22:10.368628+08:00"},{"id":3499,"source_id":"de74851040d304248e26c1db406458af","target_id":"198c9bc987125a8c495d5f4f4c719320","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 307-369","gmt_create":"2026-07-01T17:22:10.368924+08:00","gmt_modified":"2026-07-01T17:22:10.368924+08:00"},{"id":3500,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"00a6cc74394f2292cdbdb135e0050bfd","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/squiglink.js#261-310","gmt_create":"2026-07-01T17:22:10.369249+08:00","gmt_modified":"2026-07-01T17:22:10.369249+08:00"},{"id":3501,"source_id":"d5e6b65d89b66c08d62b4c6fc5812f22","target_id":"00a6cc74394f2292cdbdb135e0050bfd","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 261-310","gmt_create":"2026-07-01T17:22:10.369407+08:00","gmt_modified":"2026-07-01T17:22:10.369407+08:00"},{"id":3502,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"cbc5a1c920943391c4b4c7dbb4969e02","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#280-304","gmt_create":"2026-07-01T17:22:10.370662+08:00","gmt_modified":"2026-07-01T17:22:10.370662+08:00"},{"id":3503,"source_id":"de74851040d304248e26c1db406458af","target_id":"cbc5a1c920943391c4b4c7dbb4969e02","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 280-304","gmt_create":"2026-07-01T17:22:10.370832+08:00","gmt_modified":"2026-07-01T17:22:10.370832+08:00"},{"id":3504,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"0e96d580b4b0d85ad3a0856f9ced77c5","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#371-437","gmt_create":"2026-07-01T17:22:10.371205+08:00","gmt_modified":"2026-07-01T17:22:10.371205+08:00"},{"id":3505,"source_id":"de74851040d304248e26c1db406458af","target_id":"0e96d580b4b0d85ad3a0856f9ced77c5","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 371-437","gmt_create":"2026-07-01T17:22:10.371375+08:00","gmt_modified":"2026-07-01T17:22:10.371375+08:00"},{"id":3506,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"64d9a6b9e0dbb15b4433b936b9d9b682","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/validators/model.js#3-10","gmt_create":"2026-07-01T17:22:10.371516+08:00","gmt_modified":"2026-07-01T17:22:10.371516+08:00"},{"id":3507,"source_id":"d82c987a9b76c3f9e87e628925cae2d7","target_id":"64d9a6b9e0dbb15b4433b936b9d9b682","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 3-10","gmt_create":"2026-07-01T17:22:10.371643+08:00","gmt_modified":"2026-07-01T17:22:10.371643+08:00"},{"id":3508,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"534ccf5ed9895fd2357c6072d2c32641","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#439-526","gmt_create":"2026-07-01T17:22:10.372013+08:00","gmt_modified":"2026-07-01T17:22:10.372013+08:00"},{"id":3509,"source_id":"de74851040d304248e26c1db406458af","target_id":"534ccf5ed9895fd2357c6072d2c32641","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 439-526","gmt_create":"2026-07-01T17:22:10.37231+08:00","gmt_modified":"2026-07-01T17:22:10.37231+08:00"},{"id":3510,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"1403db1a8eb57f752df3491c038670b7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/validators/model.js#12-19","gmt_create":"2026-07-01T17:22:10.372589+08:00","gmt_modified":"2026-07-01T17:22:10.372589+08:00"},{"id":3511,"source_id":"d82c987a9b76c3f9e87e628925cae2d7","target_id":"1403db1a8eb57f752df3491c038670b7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 12-19","gmt_create":"2026-07-01T17:22:10.37272+08:00","gmt_modified":"2026-07-01T17:22:10.37272+08:00"},{"id":3512,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"e19c5be696ebceb651e9886682335c3f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#528-554","gmt_create":"2026-07-01T17:22:10.373047+08:00","gmt_modified":"2026-07-01T17:22:10.373048+08:00"},{"id":3513,"source_id":"de74851040d304248e26c1db406458af","target_id":"e19c5be696ebceb651e9886682335c3f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 528-554","gmt_create":"2026-07-01T17:22:10.373219+08:00","gmt_modified":"2026-07-01T17:22:10.373219+08:00"},{"id":3514,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"fd1c352115895c20befbd57b21dafffd","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#136-157","gmt_create":"2026-07-01T17:22:10.37353+08:00","gmt_modified":"2026-07-01T17:22:10.37353+08:00"},{"id":3515,"source_id":"de74851040d304248e26c1db406458af","target_id":"fd1c352115895c20befbd57b21dafffd","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 136-157","gmt_create":"2026-07-01T17:22:10.373649+08:00","gmt_modified":"2026-07-01T17:22:10.373649+08:00"},{"id":3516,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"a4a868fe5625e468464edb2a81e0ed65","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/Ota.js#44-48","gmt_create":"2026-07-01T17:22:10.373847+08:00","gmt_modified":"2026-07-01T17:22:10.373847+08:00"},{"id":3517,"source_id":"fc2d0cc85e5f2565c3105cbe0584903a","target_id":"a4a868fe5625e468464edb2a81e0ed65","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 44-48","gmt_create":"2026-07-01T17:22:10.373943+08:00","gmt_modified":"2026-07-01T17:22:10.373943+08:00"},{"id":3518,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"9bfda1a77caaecb96fe646e1a5c4e657","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#556-656","gmt_create":"2026-07-01T17:22:10.374341+08:00","gmt_modified":"2026-07-01T17:22:10.374341+08:00"},{"id":3519,"source_id":"de74851040d304248e26c1db406458af","target_id":"9bfda1a77caaecb96fe646e1a5c4e657","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 556-656","gmt_create":"2026-07-01T17:22:10.374511+08:00","gmt_modified":"2026-07-01T17:22:10.374511+08:00"},{"id":3520,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"d204119d78e9a20507f2e6eb59c81b14","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#246-278","gmt_create":"2026-07-01T17:22:10.374726+08:00","gmt_modified":"2026-07-01T17:22:10.374726+08:00"},{"id":3521,"source_id":"de74851040d304248e26c1db406458af","target_id":"d204119d78e9a20507f2e6eb59c81b14","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 246-278","gmt_create":"2026-07-01T17:22:10.374817+08:00","gmt_modified":"2026-07-01T17:22:10.374817+08:00"},{"id":3522,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"6e56ed4dbe173e0e7ce80c50d006cb83","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#183-244","gmt_create":"2026-07-01T17:22:10.374964+08:00","gmt_modified":"2026-07-01T17:22:10.374964+08:00"},{"id":3523,"source_id":"de74851040d304248e26c1db406458af","target_id":"6e56ed4dbe173e0e7ce80c50d006cb83","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 183-244","gmt_create":"2026-07-01T17:22:10.375214+08:00","gmt_modified":"2026-07-01T17:22:10.375214+08:00"},{"id":3524,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"12f724b0903cc7296821075f94c9dea7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#314-317","gmt_create":"2026-07-01T17:22:10.376298+08:00","gmt_modified":"2026-07-01T17:22:10.376298+08:00"},{"id":3525,"source_id":"de74851040d304248e26c1db406458af","target_id":"12f724b0903cc7296821075f94c9dea7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 314-317","gmt_create":"2026-07-01T17:22:10.376414+08:00","gmt_modified":"2026-07-01T17:22:10.376414+08:00"},{"id":3526,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"07839d356726d441504dc3560722db44","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#322-325","gmt_create":"2026-07-01T17:22:10.376564+08:00","gmt_modified":"2026-07-01T17:22:10.376564+08:00"},{"id":3527,"source_id":"de74851040d304248e26c1db406458af","target_id":"07839d356726d441504dc3560722db44","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 322-325","gmt_create":"2026-07-01T17:22:10.376762+08:00","gmt_modified":"2026-07-01T17:22:10.376762+08:00"},{"id":3528,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"0dbf7e568890732ca55dfc5752a318a6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#450-455","gmt_create":"2026-07-01T17:22:10.376912+08:00","gmt_modified":"2026-07-01T17:22:10.376912+08:00"},{"id":3529,"source_id":"de74851040d304248e26c1db406458af","target_id":"0dbf7e568890732ca55dfc5752a318a6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 450-455","gmt_create":"2026-07-01T17:22:10.377006+08:00","gmt_modified":"2026-07-01T17:22:10.377006+08:00"},{"id":3530,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"81ee91090f768174f1659cd02a399b89","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/squiglink.js#33-47","gmt_create":"2026-07-01T17:22:10.388128+08:00","gmt_modified":"2026-07-01T17:22:10.388128+08:00"},{"id":3531,"source_id":"d5e6b65d89b66c08d62b4c6fc5812f22","target_id":"81ee91090f768174f1659cd02a399b89","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 33-47","gmt_create":"2026-07-01T17:22:10.388552+08:00","gmt_modified":"2026-07-01T17:22:10.388552+08:00"},{"id":3532,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"d2ea644c6ce017e7fa5719f8dc3b2162","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/views/model/index.vue","gmt_create":"2026-07-01T17:22:40.385335+08:00","gmt_modified":"2026-07-01T17:22:40.385335+08:00"},{"id":3533,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"d1931152858f662828e1f616637bf7c1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/views/model/composables/useModelList.js","gmt_create":"2026-07-01T17:22:40.385759+08:00","gmt_modified":"2026-07-01T17:22:40.385759+08:00"},{"id":3534,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"0d51eea570b0976e572f9c35721fa5e6","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/views/model/components/ModelFormDialog.vue","gmt_create":"2026-07-01T17:22:40.385927+08:00","gmt_modified":"2026-07-01T17:22:40.385927+08:00"},{"id":3535,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"3a38f5cb99e9c74ac72f7fdb85a68c44","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/views/model/components/CsvViewerDialog.vue","gmt_create":"2026-07-01T17:22:40.386094+08:00","gmt_modified":"2026-07-01T17:22:40.386094+08:00"},{"id":3536,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"e7043a827f136d1ac2e5dbd1d328712c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/views/model/components/EqCacheDialog.vue","gmt_create":"2026-07-01T17:22:40.386223+08:00","gmt_modified":"2026-07-01T17:22:40.386223+08:00"},{"id":3537,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"f05f0f2d2810725d79b63a122d02f104","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/views/model/components/PushProgressDialog.vue","gmt_create":"2026-07-01T17:22:40.386425+08:00","gmt_modified":"2026-07-01T17:22:40.386425+08:00"},{"id":3538,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"8d94303e4c3a8e363f3ac76cf489cd33","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/views/model/components/PushViewDialog.vue","gmt_create":"2026-07-01T17:22:40.386539+08:00","gmt_modified":"2026-07-01T17:22:40.386539+08:00"},{"id":3539,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"2d86c0a8ef372bffb82991d44412c989","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/api/model.js","gmt_create":"2026-07-01T17:22:40.386974+08:00","gmt_modified":"2026-07-01T17:22:40.386974+08:00"},{"id":3540,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"de74851040d304248e26c1db406458af","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/routes/models.js","gmt_create":"2026-07-01T17:22:40.38752+08:00","gmt_modified":"2026-07-01T17:22:40.387521+08:00"},{"id":3541,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"387b55f69fa15c066ce97e930d49fca8","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/models/Model.js","gmt_create":"2026-07-01T17:22:40.387747+08:00","gmt_modified":"2026-07-01T17:22:40.387747+08:00"},{"id":3542,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"d82c987a9b76c3f9e87e628925cae2d7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/validators/model.js","gmt_create":"2026-07-01T17:22:40.387861+08:00","gmt_modified":"2026-07-01T17:22:40.387861+08:00"},{"id":3543,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"3c92914c0d677b2f5ce5e244c4057020","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/api/brand.js","gmt_create":"2026-07-01T17:22:40.387963+08:00","gmt_modified":"2026-07-01T17:22:40.387963+08:00"},{"id":3544,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"8888802098bf9d46f77f4bb95811e62a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/models/Brand.js","gmt_create":"2026-07-01T17:22:40.388066+08:00","gmt_modified":"2026-07-01T17:22:40.388066+08:00"},{"id":3545,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"8d10949b317a4f03e8624b7f4ce46d77","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/routes/brands.js","gmt_create":"2026-07-01T17:22:40.388205+08:00","gmt_modified":"2026-07-01T17:22:40.388205+08:00"},{"id":3546,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"16acd73277fffb69b4ee4eee82fe6b9e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/services/measurementStorage.js","gmt_create":"2026-07-01T17:22:40.388548+08:00","gmt_modified":"2026-07-01T17:22:40.388548+08:00"},{"id":3547,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"27717884cd8566480cffa4947e7fa6c5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/services/eqCacheStorage.js","gmt_create":"2026-07-01T17:22:40.388785+08:00","gmt_modified":"2026-07-01T17:22:40.388785+08:00"},{"id":3548,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"d5e6b65d89b66c08d62b4c6fc5812f22","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/services/squiglink.js","gmt_create":"2026-07-01T17:22:40.389298+08:00","gmt_modified":"2026-07-01T17:22:40.389298+08:00"},{"id":3549,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"34fcf7aeb55a9c0224c554fc48545063","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/utils/request.js","gmt_create":"2026-07-01T17:22:40.389544+08:00","gmt_modified":"2026-07-01T17:22:40.389544+08:00"},{"id":3550,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"08b8d17e3c09b326687a7bca6789507a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/router/index.js","gmt_create":"2026-07-01T17:22:40.389645+08:00","gmt_modified":"2026-07-01T17:22:40.389645+08:00"},{"id":3551,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"09fd0e7623c9b52e7f95307aba3cdebf","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/index.vue#1-533","gmt_create":"2026-07-01T17:22:40.389778+08:00","gmt_modified":"2026-07-01T17:22:40.389778+08:00"},{"id":3552,"source_id":"d2ea644c6ce017e7fa5719f8dc3b2162","target_id":"09fd0e7623c9b52e7f95307aba3cdebf","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-533","gmt_create":"2026-07-01T17:22:40.389914+08:00","gmt_modified":"2026-07-01T17:22:40.389914+08:00"},{"id":3553,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"b336306edfffe78cac04ddcd9b87bee3","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/composables/useModelList.js#1-191","gmt_create":"2026-07-01T17:22:40.390089+08:00","gmt_modified":"2026-07-01T17:22:40.390089+08:00"},{"id":3554,"source_id":"d1931152858f662828e1f616637bf7c1","target_id":"b336306edfffe78cac04ddcd9b87bee3","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-191","gmt_create":"2026-07-01T17:22:40.390417+08:00","gmt_modified":"2026-07-01T17:22:40.390417+08:00"},{"id":3555,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"dfde97c120aa759be08496d7a1217bb5","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/components/ModelFormDialog.vue#1-555","gmt_create":"2026-07-01T17:22:40.390765+08:00","gmt_modified":"2026-07-01T17:22:40.390765+08:00"},{"id":3556,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"bd284e26c3e22bbca32421b5f77648ef","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/components/CsvViewerDialog.vue#1-50","gmt_create":"2026-07-01T17:22:40.391298+08:00","gmt_modified":"2026-07-01T17:22:40.391298+08:00"},{"id":3557,"source_id":"3a38f5cb99e9c74ac72f7fdb85a68c44","target_id":"bd284e26c3e22bbca32421b5f77648ef","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-50","gmt_create":"2026-07-01T17:22:40.391417+08:00","gmt_modified":"2026-07-01T17:22:40.391417+08:00"},{"id":3558,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"2046b9f43ac9963df7a7ca533f925569","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/components/EqCacheDialog.vue#1-306","gmt_create":"2026-07-01T17:22:40.391729+08:00","gmt_modified":"2026-07-01T17:22:40.391729+08:00"},{"id":3559,"source_id":"e7043a827f136d1ac2e5dbd1d328712c","target_id":"2046b9f43ac9963df7a7ca533f925569","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-306","gmt_create":"2026-07-01T17:22:40.391979+08:00","gmt_modified":"2026-07-01T17:22:40.391979+08:00"},{"id":3560,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"779a4d88246e9e5a241ae01c15f899ab","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/components/PushProgressDialog.vue#1-303","gmt_create":"2026-07-01T17:22:40.392263+08:00","gmt_modified":"2026-07-01T17:22:40.392263+08:00"},{"id":3561,"source_id":"f05f0f2d2810725d79b63a122d02f104","target_id":"779a4d88246e9e5a241ae01c15f899ab","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-303","gmt_create":"2026-07-01T17:22:40.392369+08:00","gmt_modified":"2026-07-01T17:22:40.392369+08:00"},{"id":3562,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"bbf439d580ed3a878deb4fd7de944a94","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/components/PushViewDialog.vue#1-60","gmt_create":"2026-07-01T17:22:40.392841+08:00","gmt_modified":"2026-07-01T17:22:40.392841+08:00"},{"id":3563,"source_id":"8d94303e4c3a8e363f3ac76cf489cd33","target_id":"bbf439d580ed3a878deb4fd7de944a94","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-60","gmt_create":"2026-07-01T17:22:40.393141+08:00","gmt_modified":"2026-07-01T17:22:40.393141+08:00"},{"id":3564,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"5d1069f11e2153ac8cd75f26c10256a2","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#1-659","gmt_create":"2026-07-01T17:22:40.393992+08:00","gmt_modified":"2026-07-01T17:22:40.393992+08:00"},{"id":3565,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"d71cf669f581f1e2e6b7956768cf07e5","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/model.js#1-165","gmt_create":"2026-07-01T17:22:40.394888+08:00","gmt_modified":"2026-07-01T17:22:40.394888+08:00"},{"id":3566,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"fc4fba8eb72f3b41fef570b38f6dfefe","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/index.vue#227-434","gmt_create":"2026-07-01T17:22:40.395297+08:00","gmt_modified":"2026-07-01T17:22:40.395297+08:00"},{"id":3567,"source_id":"d2ea644c6ce017e7fa5719f8dc3b2162","target_id":"fc4fba8eb72f3b41fef570b38f6dfefe","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 227-434","gmt_create":"2026-07-01T17:22:40.395672+08:00","gmt_modified":"2026-07-01T17:22:40.395672+08:00"},{"id":3568,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"c0a672fcaa00c517fd9ea3d997173397","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/composables/useModelList.js#31-191","gmt_create":"2026-07-01T17:22:40.395794+08:00","gmt_modified":"2026-07-01T17:22:40.395794+08:00"},{"id":3569,"source_id":"d1931152858f662828e1f616637bf7c1","target_id":"c0a672fcaa00c517fd9ea3d997173397","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 31-191","gmt_create":"2026-07-01T17:22:40.39607+08:00","gmt_modified":"2026-07-01T17:22:40.39607+08:00"},{"id":3570,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"242fa36bc833a990fae50c7bb09ed4e1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/components/ModelFormDialog.vue#158-464","gmt_create":"2026-07-01T17:22:40.396418+08:00","gmt_modified":"2026-07-01T17:22:40.396418+08:00"},{"id":3571,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"d16b984e320d42203d368669cfe2382b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/model.js#157-165","gmt_create":"2026-07-01T17:22:40.396679+08:00","gmt_modified":"2026-07-01T17:22:40.396679+08:00"},{"id":3572,"source_id":"2d86c0a8ef372bffb82991d44412c989","target_id":"d16b984e320d42203d368669cfe2382b","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 157-165","gmt_create":"2026-07-01T17:22:40.396783+08:00","gmt_modified":"2026-07-01T17:22:40.396783+08:00"},{"id":3573,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"198c9bc987125a8c495d5f4f4c719320","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#307-369","gmt_create":"2026-07-01T17:22:40.397452+08:00","gmt_modified":"2026-07-01T17:22:40.397452+08:00"},{"id":3574,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"00a6cc74394f2292cdbdb135e0050bfd","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/squiglink.js#261-310","gmt_create":"2026-07-01T17:22:40.39795+08:00","gmt_modified":"2026-07-01T17:22:40.39795+08:00"},{"id":3575,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"c6701de4962c3a2734181c3f0e1b78f6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#307-499","gmt_create":"2026-07-01T17:22:40.398776+08:00","gmt_modified":"2026-07-01T17:22:40.398776+08:00"},{"id":3576,"source_id":"de74851040d304248e26c1db406458af","target_id":"c6701de4962c3a2734181c3f0e1b78f6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 307-499","gmt_create":"2026-07-01T17:22:40.399152+08:00","gmt_modified":"2026-07-01T17:22:40.399152+08:00"},{"id":3577,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"024c49b177309c95a9a6487c0c70ff28","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/Model.js#1-53","gmt_create":"2026-07-01T17:22:40.399981+08:00","gmt_modified":"2026-07-01T17:22:40.399981+08:00"},{"id":3578,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"ed0beaf535b1c935f72da53c93cefd99","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/validators/model.js#1-22","gmt_create":"2026-07-01T17:22:40.40069+08:00","gmt_modified":"2026-07-01T17:22:40.40069+08:00"},{"id":3579,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"47737e52532225879b5095908c4b0039","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/components/ModelFormDialog.vue#196-214","gmt_create":"2026-07-01T17:22:40.401185+08:00","gmt_modified":"2026-07-01T17:22:40.401185+08:00"},{"id":3580,"source_id":"0d51eea570b0976e572f9c35721fa5e6","target_id":"47737e52532225879b5095908c4b0039","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 196-214","gmt_create":"2026-07-01T17:22:40.401371+08:00","gmt_modified":"2026-07-01T17:22:40.401371+08:00"},{"id":3581,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"1a50c2ac7c5e4e096904af2e683b5ec7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/Brand.js#1-23","gmt_create":"2026-07-01T17:22:40.401956+08:00","gmt_modified":"2026-07-01T17:22:40.401956+08:00"},{"id":3582,"source_id":"8888802098bf9d46f77f4bb95811e62a","target_id":"1a50c2ac7c5e4e096904af2e683b5ec7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-23","gmt_create":"2026-07-01T17:22:40.40216+08:00","gmt_modified":"2026-07-01T17:22:40.40216+08:00"},{"id":3583,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"ae9b4c727fe0313173a4bcea57fef546","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/brands.js#1-147","gmt_create":"2026-07-01T17:22:40.402501+08:00","gmt_modified":"2026-07-01T17:22:40.402501+08:00"},{"id":3584,"source_id":"8d10949b317a4f03e8624b7f4ce46d77","target_id":"ae9b4c727fe0313173a4bcea57fef546","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-147","gmt_create":"2026-07-01T17:22:40.402827+08:00","gmt_modified":"2026-07-01T17:22:40.402827+08:00"},{"id":3585,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"35d43a834ee00c7ae341f64ea7306dcd","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/composables/useModelList.js#18-27","gmt_create":"2026-07-01T17:22:40.403197+08:00","gmt_modified":"2026-07-01T17:22:40.403197+08:00"},{"id":3586,"source_id":"d1931152858f662828e1f616637bf7c1","target_id":"35d43a834ee00c7ae341f64ea7306dcd","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 18-27","gmt_create":"2026-07-01T17:22:40.403296+08:00","gmt_modified":"2026-07-01T17:22:40.403296+08:00"},{"id":3587,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"bab25856d9ae1e6dcc3c9df2c6461ca5","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/composables/useModelList.js#87-111","gmt_create":"2026-07-01T17:22:40.403504+08:00","gmt_modified":"2026-07-01T17:22:40.403504+08:00"},{"id":3588,"source_id":"d1931152858f662828e1f616637bf7c1","target_id":"bab25856d9ae1e6dcc3c9df2c6461ca5","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 87-111","gmt_create":"2026-07-01T17:22:40.403829+08:00","gmt_modified":"2026-07-01T17:22:40.403829+08:00"},{"id":3589,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"8ff91c81b391966d61e25fb150388eda","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#133-181","gmt_create":"2026-07-01T17:22:40.404323+08:00","gmt_modified":"2026-07-01T17:22:40.404323+08:00"},{"id":3590,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"7fdad247ff48969f27ee8d30e3ba5b65","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/index.vue#402-428","gmt_create":"2026-07-01T17:22:40.404857+08:00","gmt_modified":"2026-07-01T17:22:40.404857+08:00"},{"id":3591,"source_id":"d2ea644c6ce017e7fa5719f8dc3b2162","target_id":"7fdad247ff48969f27ee8d30e3ba5b65","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 402-428","gmt_create":"2026-07-01T17:22:40.405211+08:00","gmt_modified":"2026-07-01T17:22:40.405211+08:00"},{"id":3592,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"80992fa9ba0696155e1f48200125fba9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/components/PushProgressDialog.vue#117-195","gmt_create":"2026-07-01T17:22:40.405541+08:00","gmt_modified":"2026-07-01T17:22:40.405541+08:00"},{"id":3593,"source_id":"f05f0f2d2810725d79b63a122d02f104","target_id":"80992fa9ba0696155e1f48200125fba9","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 117-195","gmt_create":"2026-07-01T17:22:40.405642+08:00","gmt_modified":"2026-07-01T17:22:40.405642+08:00"},{"id":3594,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"c72d4a5b5b663d05ac8229b5b4c69991","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/model.js#128-150","gmt_create":"2026-07-01T17:22:40.405988+08:00","gmt_modified":"2026-07-01T17:22:40.405988+08:00"},{"id":3595,"source_id":"2d86c0a8ef372bffb82991d44412c989","target_id":"c72d4a5b5b663d05ac8229b5b4c69991","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 128-150","gmt_create":"2026-07-01T17:22:40.406417+08:00","gmt_modified":"2026-07-01T17:22:40.406417+08:00"},{"id":3596,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"84d41a039a6a9937d7d02c54a5e72751","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#466-566","gmt_create":"2026-07-01T17:22:40.40679+08:00","gmt_modified":"2026-07-01T17:22:40.40679+08:00"},{"id":3597,"source_id":"de74851040d304248e26c1db406458af","target_id":"84d41a039a6a9937d7d02c54a5e72751","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 466-566","gmt_create":"2026-07-01T17:22:40.40701+08:00","gmt_modified":"2026-07-01T17:22:40.40701+08:00"},{"id":3598,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"ddaccee59b978ba3a64b134b57255142","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#59-68","gmt_create":"2026-07-01T17:22:40.407555+08:00","gmt_modified":"2026-07-01T17:22:40.407555+08:00"},{"id":3599,"source_id":"de74851040d304248e26c1db406458af","target_id":"ddaccee59b978ba3a64b134b57255142","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 59-68","gmt_create":"2026-07-01T17:22:40.407904+08:00","gmt_modified":"2026-07-01T17:22:40.407904+08:00"},{"id":3600,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"ddabd54034f5691c635f64015008129b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/measurementStorage.js#48-108","gmt_create":"2026-07-01T17:22:40.408268+08:00","gmt_modified":"2026-07-01T17:22:40.408268+08:00"},{"id":3601,"source_id":"16acd73277fffb69b4ee4eee82fe6b9e","target_id":"ddabd54034f5691c635f64015008129b","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 48-108","gmt_create":"2026-07-01T17:22:40.408456+08:00","gmt_modified":"2026-07-01T17:22:40.408456+08:00"},{"id":3602,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"dfbdd0655d2d61b5105701e421492cb1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/eqCacheStorage.js#24-66","gmt_create":"2026-07-01T17:22:40.408966+08:00","gmt_modified":"2026-07-01T17:22:40.408966+08:00"},{"id":3603,"source_id":"27717884cd8566480cffa4947e7fa6c5","target_id":"dfbdd0655d2d61b5105701e421492cb1","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 24-66","gmt_create":"2026-07-01T17:22:40.40927+08:00","gmt_modified":"2026-07-01T17:22:40.40927+08:00"},{"id":3604,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"f80a45c0052388537b0d6844b2c9e8e3","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/components/ModelFormDialog.vue#233-265","gmt_create":"2026-07-01T17:22:40.40979+08:00","gmt_modified":"2026-07-01T17:22:40.40979+08:00"},{"id":3605,"source_id":"0d51eea570b0976e572f9c35721fa5e6","target_id":"f80a45c0052388537b0d6844b2c9e8e3","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 233-265","gmt_create":"2026-07-01T17:22:40.409975+08:00","gmt_modified":"2026-07-01T17:22:40.409975+08:00"},{"id":3606,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"69c930f997042246d4e17369ede6f826","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/router/index.js#1-91","gmt_create":"2026-07-01T17:22:40.411142+08:00","gmt_modified":"2026-07-01T17:22:40.411142+08:00"},{"id":3607,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"7a5ae98472bdc4806472d50e6b88c997","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/utils/request.js#1-72","gmt_create":"2026-07-01T17:22:40.411424+08:00","gmt_modified":"2026-07-01T17:22:40.411424+08:00"},{"id":3608,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"4f76bc7594c6e53c87d2b21c18e1593a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/squiglink.js#33-48","gmt_create":"2026-07-01T17:22:40.411769+08:00","gmt_modified":"2026-07-01T17:22:40.411769+08:00"},{"id":3609,"source_id":"d5e6b65d89b66c08d62b4c6fc5812f22","target_id":"4f76bc7594c6e53c87d2b21c18e1593a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 33-48","gmt_create":"2026-07-01T17:22:40.412097+08:00","gmt_modified":"2026-07-01T17:22:40.412098+08:00"},{"id":3610,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"dc3af50d3fc111fa0921b37470c23966","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/utils/request.js#27-69","gmt_create":"2026-07-01T17:22:40.412206+08:00","gmt_modified":"2026-07-01T17:22:40.412206+08:00"},{"id":3611,"source_id":"34fcf7aeb55a9c0224c554fc48545063","target_id":"dc3af50d3fc111fa0921b37470c23966","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 27-69","gmt_create":"2026-07-01T17:22:40.412655+08:00","gmt_modified":"2026-07-01T17:22:40.412655+08:00"},{"id":3612,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"ee7461b868a07b5f3e3636d8001b1089","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/brands.js#59-81","gmt_create":"2026-07-01T17:22:40.413041+08:00","gmt_modified":"2026-07-01T17:22:40.413041+08:00"},{"id":3613,"source_id":"8d10949b317a4f03e8624b7f4ce46d77","target_id":"ee7461b868a07b5f3e3636d8001b1089","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 59-81","gmt_create":"2026-07-01T17:22:40.413318+08:00","gmt_modified":"2026-07-01T17:22:40.413318+08:00"},{"id":3614,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"5913b9dcd61bbee07d5a150062d40315","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#371-499","gmt_create":"2026-07-01T17:22:40.413506+08:00","gmt_modified":"2026-07-01T17:22:40.413506+08:00"},{"id":3615,"source_id":"de74851040d304248e26c1db406458af","target_id":"5913b9dcd61bbee07d5a150062d40315","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 371-499","gmt_create":"2026-07-01T17:22:40.413811+08:00","gmt_modified":"2026-07-01T17:22:40.413811+08:00"},{"id":3616,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"d620d05fda07f9cbe1556d0f76a8153f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/measurementStorage.js#87-108","gmt_create":"2026-07-01T17:22:40.413929+08:00","gmt_modified":"2026-07-01T17:22:40.413929+08:00"},{"id":3617,"source_id":"16acd73277fffb69b4ee4eee82fe6b9e","target_id":"d620d05fda07f9cbe1556d0f76a8153f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 87-108","gmt_create":"2026-07-01T17:22:40.414103+08:00","gmt_modified":"2026-07-01T17:22:40.414103+08:00"},{"id":3618,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"f1abdfd8be7fea194c1ce39bf66c78e3","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/eqCacheStorage.js#47-66","gmt_create":"2026-07-01T17:22:40.414385+08:00","gmt_modified":"2026-07-01T17:22:40.414385+08:00"},{"id":3619,"source_id":"27717884cd8566480cffa4947e7fa6c5","target_id":"f1abdfd8be7fea194c1ce39bf66c78e3","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 47-66","gmt_create":"2026-07-01T17:22:40.414561+08:00","gmt_modified":"2026-07-01T17:22:40.414561+08:00"},{"id":3620,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"e87b014e53bbb73ea5bbd7b6fedb1ee0","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/brand.js#1-66","gmt_create":"2026-07-01T17:22:40.414861+08:00","gmt_modified":"2026-07-01T17:22:40.414861+08:00"},{"id":3621,"source_id":"3c92914c0d677b2f5ce5e244c4057020","target_id":"e87b014e53bbb73ea5bbd7b6fedb1ee0","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-66","gmt_create":"2026-07-01T17:22:40.415314+08:00","gmt_modified":"2026-07-01T17:22:40.415314+08:00"},{"id":3622,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"6568412fa665c4b795868c6e9875778f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#133-659","gmt_create":"2026-07-01T17:22:40.415616+08:00","gmt_modified":"2026-07-01T17:22:40.415616+08:00"},{"id":3623,"source_id":"de74851040d304248e26c1db406458af","target_id":"6568412fa665c4b795868c6e9875778f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 133-659","gmt_create":"2026-07-01T17:22:40.415841+08:00","gmt_modified":"2026-07-01T17:22:40.415841+08:00"},{"id":3624,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"8012c36338dce0daecc34c940e5fc443","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/brands.js#14-147","gmt_create":"2026-07-01T17:22:40.416042+08:00","gmt_modified":"2026-07-01T17:22:40.416042+08:00"},{"id":3625,"source_id":"8d10949b317a4f03e8624b7f4ce46d77","target_id":"8012c36338dce0daecc34c940e5fc443","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 14-147","gmt_create":"2026-07-01T17:22:40.416211+08:00","gmt_modified":"2026-07-01T17:22:40.416211+08:00"},{"id":3626,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"387b55f69fa15c066ce97e930d49fca8","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/models/Model.js","gmt_create":"2026-07-01T17:22:44.407266+08:00","gmt_modified":"2026-07-01T17:22:44.407266+08:00"},{"id":3627,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"8888802098bf9d46f77f4bb95811e62a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/models/Brand.js","gmt_create":"2026-07-01T17:22:44.407474+08:00","gmt_modified":"2026-07-01T17:22:44.407474+08:00"},{"id":3628,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"d82c987a9b76c3f9e87e628925cae2d7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/validators/model.js","gmt_create":"2026-07-01T17:22:44.407626+08:00","gmt_modified":"2026-07-01T17:22:44.407626+08:00"},{"id":3629,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"de74851040d304248e26c1db406458af","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/routes/models.js","gmt_create":"2026-07-01T17:22:44.407743+08:00","gmt_modified":"2026-07-01T17:22:44.407743+08:00"},{"id":3630,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"d5e6b65d89b66c08d62b4c6fc5812f22","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/services/squiglink.js","gmt_create":"2026-07-01T17:22:44.40785+08:00","gmt_modified":"2026-07-01T17:22:44.40785+08:00"},{"id":3631,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"16acd73277fffb69b4ee4eee82fe6b9e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/services/measurementStorage.js","gmt_create":"2026-07-01T17:22:44.407955+08:00","gmt_modified":"2026-07-01T17:22:44.407955+08:00"},{"id":3632,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"27717884cd8566480cffa4947e7fa6c5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/services/eqCacheStorage.js","gmt_create":"2026-07-01T17:22:44.408101+08:00","gmt_modified":"2026-07-01T17:22:44.408101+08:00"},{"id":3633,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"65741f66e633d4e5aedac59d5f27af4e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/services/curveClient.js","gmt_create":"2026-07-01T17:22:44.408209+08:00","gmt_modified":"2026-07-01T17:22:44.408209+08:00"},{"id":3634,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"d2ea644c6ce017e7fa5719f8dc3b2162","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/views/model/index.vue","gmt_create":"2026-07-01T17:22:44.408321+08:00","gmt_modified":"2026-07-01T17:22:44.408321+08:00"},{"id":3635,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"0d51eea570b0976e572f9c35721fa5e6","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/views/model/components/ModelFormDialog.vue","gmt_create":"2026-07-01T17:22:44.408444+08:00","gmt_modified":"2026-07-01T17:22:44.408444+08:00"},{"id":3636,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"2d86c0a8ef372bffb82991d44412c989","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/api/model.js","gmt_create":"2026-07-01T17:22:44.408547+08:00","gmt_modified":"2026-07-01T17:22:44.408547+08:00"},{"id":3637,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"941d6ec9925d0313ebdac30637d5e7de","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/index.vue#1-1226","gmt_create":"2026-07-01T17:22:44.408704+08:00","gmt_modified":"2026-07-01T17:22:44.408704+08:00"},{"id":3638,"source_id":"d2ea644c6ce017e7fa5719f8dc3b2162","target_id":"941d6ec9925d0313ebdac30637d5e7de","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-1226","gmt_create":"2026-07-01T17:22:44.408825+08:00","gmt_modified":"2026-07-01T17:22:44.408825+08:00"},{"id":3639,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"d71cf669f581f1e2e6b7956768cf07e5","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/model.js#1-165","gmt_create":"2026-07-01T17:22:44.409046+08:00","gmt_modified":"2026-07-01T17:22:44.409046+08:00"},{"id":3640,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"5d1069f11e2153ac8cd75f26c10256a2","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#1-659","gmt_create":"2026-07-01T17:22:44.409232+08:00","gmt_modified":"2026-07-01T17:22:44.409232+08:00"},{"id":3641,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"024c49b177309c95a9a6487c0c70ff28","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/Model.js#1-53","gmt_create":"2026-07-01T17:22:44.409438+08:00","gmt_modified":"2026-07-01T17:22:44.409438+08:00"},{"id":3642,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"ed0beaf535b1c935f72da53c93cefd99","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/validators/model.js#1-22","gmt_create":"2026-07-01T17:22:44.409604+08:00","gmt_modified":"2026-07-01T17:22:44.409604+08:00"},{"id":3643,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"186655fbb53a1180e274c0a224e447ec","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/measurementStorage.js#1-115","gmt_create":"2026-07-01T17:22:44.409771+08:00","gmt_modified":"2026-07-01T17:22:44.409771+08:00"},{"id":3644,"source_id":"16acd73277fffb69b4ee4eee82fe6b9e","target_id":"186655fbb53a1180e274c0a224e447ec","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-115","gmt_create":"2026-07-01T17:22:44.40987+08:00","gmt_modified":"2026-07-01T17:22:44.40987+08:00"},{"id":3645,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"7098281c5dbbd726581ec631c48cb7ff","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/eqCacheStorage.js#1-73","gmt_create":"2026-07-01T17:22:44.410006+08:00","gmt_modified":"2026-07-01T17:22:44.410006+08:00"},{"id":3646,"source_id":"27717884cd8566480cffa4947e7fa6c5","target_id":"7098281c5dbbd726581ec631c48cb7ff","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-73","gmt_create":"2026-07-01T17:22:44.410107+08:00","gmt_modified":"2026-07-01T17:22:44.410107+08:00"},{"id":3647,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"ff3c31b3cf3083faac2e9d22bd1046dc","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/curveClient.js#1-147","gmt_create":"2026-07-01T17:22:44.410236+08:00","gmt_modified":"2026-07-01T17:22:44.410236+08:00"},{"id":3648,"source_id":"65741f66e633d4e5aedac59d5f27af4e","target_id":"ff3c31b3cf3083faac2e9d22bd1046dc","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-147","gmt_create":"2026-07-01T17:22:44.410346+08:00","gmt_modified":"2026-07-01T17:22:44.410346+08:00"},{"id":3649,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"2f44ab11354520681821b18c70b28ea5","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/squiglink.js#1-322","gmt_create":"2026-07-01T17:22:44.410494+08:00","gmt_modified":"2026-07-01T17:22:44.410494+08:00"},{"id":3650,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"1a50c2ac7c5e4e096904af2e683b5ec7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/Brand.js#1-23","gmt_create":"2026-07-01T17:22:44.410693+08:00","gmt_modified":"2026-07-01T17:22:44.410693+08:00"},{"id":3651,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"6568412fa665c4b795868c6e9875778f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#133-659","gmt_create":"2026-07-01T17:22:44.411955+08:00","gmt_modified":"2026-07-01T17:22:44.411955+08:00"},{"id":3652,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"00a6cc74394f2292cdbdb135e0050bfd","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/squiglink.js#261-310","gmt_create":"2026-07-01T17:22:44.412644+08:00","gmt_modified":"2026-07-01T17:22:44.412644+08:00"},{"id":3653,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"3ea5cb6fe4688701d6312a31ea523b18","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/measurementStorage.js#61-108","gmt_create":"2026-07-01T17:22:44.412822+08:00","gmt_modified":"2026-07-01T17:22:44.412822+08:00"},{"id":3654,"source_id":"16acd73277fffb69b4ee4eee82fe6b9e","target_id":"3ea5cb6fe4688701d6312a31ea523b18","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 61-108","gmt_create":"2026-07-01T17:22:44.412923+08:00","gmt_modified":"2026-07-01T17:22:44.412923+08:00"},{"id":3655,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"dfbdd0655d2d61b5105701e421492cb1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/eqCacheStorage.js#24-66","gmt_create":"2026-07-01T17:22:44.413092+08:00","gmt_modified":"2026-07-01T17:22:44.413092+08:00"},{"id":3656,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"c777cf18a4b1f608a14488db3258817d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/curveClient.js#81-138","gmt_create":"2026-07-01T17:22:44.413259+08:00","gmt_modified":"2026-07-01T17:22:44.413259+08:00"},{"id":3657,"source_id":"65741f66e633d4e5aedac59d5f27af4e","target_id":"c777cf18a4b1f608a14488db3258817d","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 81-138","gmt_create":"2026-07-01T17:22:44.413403+08:00","gmt_modified":"2026-07-01T17:22:44.413403+08:00"},{"id":3658,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"4169091aeab80fcee72321116328a8b2","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/index.vue#714-1063","gmt_create":"2026-07-01T17:22:44.41352+08:00","gmt_modified":"2026-07-01T17:22:44.41352+08:00"},{"id":3659,"source_id":"d2ea644c6ce017e7fa5719f8dc3b2162","target_id":"4169091aeab80fcee72321116328a8b2","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 714-1063","gmt_create":"2026-07-01T17:22:44.413605+08:00","gmt_modified":"2026-07-01T17:22:44.413605+08:00"},{"id":3660,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"61cdcff725a5d9f851c84d3976b11ad9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/model.js#13-165","gmt_create":"2026-07-01T17:22:44.413749+08:00","gmt_modified":"2026-07-01T17:22:44.413749+08:00"},{"id":3661,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"6eacbd3b5ec60fff27a96a9101159648","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/index.vue#226-250","gmt_create":"2026-07-01T17:22:44.414449+08:00","gmt_modified":"2026-07-01T17:22:44.414449+08:00"},{"id":3662,"source_id":"d2ea644c6ce017e7fa5719f8dc3b2162","target_id":"6eacbd3b5ec60fff27a96a9101159648","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 226-250","gmt_create":"2026-07-01T17:22:44.414544+08:00","gmt_modified":"2026-07-01T17:22:44.414544+08:00"},{"id":3663,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"ddaccee59b978ba3a64b134b57255142","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#59-68","gmt_create":"2026-07-01T17:22:44.414657+08:00","gmt_modified":"2026-07-01T17:22:44.414657+08:00"},{"id":3664,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"56d7be38c99608e1cf9141127c60a1bd","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#307-335","gmt_create":"2026-07-01T17:22:44.414796+08:00","gmt_modified":"2026-07-01T17:22:44.414796+08:00"},{"id":3665,"source_id":"de74851040d304248e26c1db406458af","target_id":"56d7be38c99608e1cf9141127c60a1bd","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 307-335","gmt_create":"2026-07-01T17:22:44.414975+08:00","gmt_modified":"2026-07-01T17:22:44.414975+08:00"},{"id":3666,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"c571c3ca3eb98348a89378f8d58ffa5c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/measurementStorage.js#48-79","gmt_create":"2026-07-01T17:22:44.415094+08:00","gmt_modified":"2026-07-01T17:22:44.415094+08:00"},{"id":3667,"source_id":"16acd73277fffb69b4ee4eee82fe6b9e","target_id":"c571c3ca3eb98348a89378f8d58ffa5c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 48-79","gmt_create":"2026-07-01T17:22:44.415199+08:00","gmt_modified":"2026-07-01T17:22:44.415199+08:00"},{"id":3668,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"6d9ac3485459b97d549f73fa18ea4efe","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#183-278","gmt_create":"2026-07-01T17:22:44.41557+08:00","gmt_modified":"2026-07-01T17:22:44.41557+08:00"},{"id":3669,"source_id":"de74851040d304248e26c1db406458af","target_id":"6d9ac3485459b97d549f73fa18ea4efe","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 183-278","gmt_create":"2026-07-01T17:22:44.415697+08:00","gmt_modified":"2026-07-01T17:22:44.415697+08:00"},{"id":3670,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"d620d05fda07f9cbe1556d0f76a8153f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/measurementStorage.js#87-108","gmt_create":"2026-07-01T17:22:44.415896+08:00","gmt_modified":"2026-07-01T17:22:44.415896+08:00"},{"id":3671,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"e1a454e430f59ec87fc68cffc768037a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#466-514","gmt_create":"2026-07-01T17:22:44.416235+08:00","gmt_modified":"2026-07-01T17:22:44.416235+08:00"},{"id":3672,"source_id":"de74851040d304248e26c1db406458af","target_id":"e1a454e430f59ec87fc68cffc768037a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 466-514","gmt_create":"2026-07-01T17:22:44.416321+08:00","gmt_modified":"2026-07-01T17:22:44.416321+08:00"},{"id":3673,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"907380346a61a6c644cdaefa5165c9bd","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#516-566","gmt_create":"2026-07-01T17:22:44.416442+08:00","gmt_modified":"2026-07-01T17:22:44.416443+08:00"},{"id":3674,"source_id":"de74851040d304248e26c1db406458af","target_id":"907380346a61a6c644cdaefa5165c9bd","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 516-566","gmt_create":"2026-07-01T17:22:44.41653+08:00","gmt_modified":"2026-07-01T17:22:44.41653+08:00"},{"id":3675,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"17a4406c6c25ec6cdfd2d8ffe0b73e9c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/index.vue#1117-1220","gmt_create":"2026-07-01T17:22:44.416733+08:00","gmt_modified":"2026-07-01T17:22:44.416733+08:00"},{"id":3676,"source_id":"d2ea644c6ce017e7fa5719f8dc3b2162","target_id":"17a4406c6c25ec6cdfd2d8ffe0b73e9c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1117-1220","gmt_create":"2026-07-01T17:22:44.41683+08:00","gmt_modified":"2026-07-01T17:22:44.41683+08:00"},{"id":3677,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"726a6f97e2aeafee47b271e07e8bab86","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/squiglink.js#148-207","gmt_create":"2026-07-01T17:22:44.417407+08:00","gmt_modified":"2026-07-01T17:22:44.417407+08:00"},{"id":3678,"source_id":"d5e6b65d89b66c08d62b4c6fc5812f22","target_id":"726a6f97e2aeafee47b271e07e8bab86","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 148-207","gmt_create":"2026-07-01T17:22:44.417521+08:00","gmt_modified":"2026-07-01T17:22:44.417521+08:00"},{"id":3679,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"7257d8ea1f17cf7e6ffde19988e437dc","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/squiglink.js#216-247","gmt_create":"2026-07-01T17:22:44.417739+08:00","gmt_modified":"2026-07-01T17:22:44.417739+08:00"},{"id":3680,"source_id":"d5e6b65d89b66c08d62b4c6fc5812f22","target_id":"7257d8ea1f17cf7e6ffde19988e437dc","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 216-247","gmt_create":"2026-07-01T17:22:44.417865+08:00","gmt_modified":"2026-07-01T17:22:44.417865+08:00"},{"id":3681,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"198c9bc987125a8c495d5f4f4c719320","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#307-369","gmt_create":"2026-07-01T17:22:44.41809+08:00","gmt_modified":"2026-07-01T17:22:44.41809+08:00"},{"id":3682,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"c27046a2ebb06326e9d6b99eed8a9d94","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/components/ModelFormDialog.vue#16-46","gmt_create":"2026-07-01T17:22:44.418246+08:00","gmt_modified":"2026-07-01T17:22:44.418246+08:00"},{"id":3683,"source_id":"0d51eea570b0976e572f9c35721fa5e6","target_id":"c27046a2ebb06326e9d6b99eed8a9d94","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 16-46","gmt_create":"2026-07-01T17:22:44.418351+08:00","gmt_modified":"2026-07-01T17:22:44.418351+08:00"},{"id":3684,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"e83b1d21fe3ccb7ac2f4d82bb148bc78","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/components/ModelFormDialog.vue#289-332","gmt_create":"2026-07-01T17:22:44.418496+08:00","gmt_modified":"2026-07-01T17:22:44.418497+08:00"},{"id":3685,"source_id":"0d51eea570b0976e572f9c35721fa5e6","target_id":"e83b1d21fe3ccb7ac2f4d82bb148bc78","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 289-332","gmt_create":"2026-07-01T17:22:44.418602+08:00","gmt_modified":"2026-07-01T17:22:44.418603+08:00"},{"id":3686,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"e8dde18df2307dc1b7b00c3e9546ed83","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/model.js#152-165","gmt_create":"2026-07-01T17:22:44.418748+08:00","gmt_modified":"2026-07-01T17:22:44.418748+08:00"},{"id":3687,"source_id":"2d86c0a8ef372bffb82991d44412c989","target_id":"e8dde18df2307dc1b7b00c3e9546ed83","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 152-165","gmt_create":"2026-07-01T17:22:44.418852+08:00","gmt_modified":"2026-07-01T17:22:44.418852+08:00"},{"id":3688,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"dfde97c120aa759be08496d7a1217bb5","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/components/ModelFormDialog.vue#1-555","gmt_create":"2026-07-01T17:22:44.419046+08:00","gmt_modified":"2026-07-01T17:22:44.419046+08:00"},{"id":3689,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"9e84158ca8a0ddb6b5e5b73eb1bbe846","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/validators/model.js#3-19","gmt_create":"2026-07-01T17:22:44.420649+08:00","gmt_modified":"2026-07-01T17:22:44.420649+08:00"},{"id":3690,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"d18e23566fd59e80c9f7eec016ef89ab","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#312-317","gmt_create":"2026-07-01T17:22:44.420836+08:00","gmt_modified":"2026-07-01T17:22:44.420836+08:00"},{"id":3691,"source_id":"de74851040d304248e26c1db406458af","target_id":"d18e23566fd59e80c9f7eec016ef89ab","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 312-317","gmt_create":"2026-07-01T17:22:44.420917+08:00","gmt_modified":"2026-07-01T17:22:44.420917+08:00"},{"id":3692,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"bc3c55f1edd18bca0da26fb9aa065f87","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#320-325","gmt_create":"2026-07-01T17:22:44.421028+08:00","gmt_modified":"2026-07-01T17:22:44.421028+08:00"},{"id":3693,"source_id":"de74851040d304248e26c1db406458af","target_id":"bc3c55f1edd18bca0da26fb9aa065f87","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 320-325","gmt_create":"2026-07-01T17:22:44.421129+08:00","gmt_modified":"2026-07-01T17:22:44.421129+08:00"},{"id":3694,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"e358b7cff088dfd34df41cc908c799c8","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#255-258","gmt_create":"2026-07-01T17:22:44.421238+08:00","gmt_modified":"2026-07-01T17:22:44.421238+08:00"},{"id":3695,"source_id":"de74851040d304248e26c1db406458af","target_id":"e358b7cff088dfd34df41cc908c799c8","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 255-258","gmt_create":"2026-07-01T17:22:44.421334+08:00","gmt_modified":"2026-07-01T17:22:44.421334+08:00"},{"id":3696,"source_id":"1f4b6f57-25c5-444e-a943-d162d896dc21","target_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 1f4b6f57-25c5-444e-a943-d162d896dc21 -\u003e 799e02d2-8358-41a1-9f8e-114f8ac00eae","gmt_create":"2026-07-01T17:22:44.990632+08:00","gmt_modified":"2026-07-01T17:22:44.990632+08:00"},{"id":3697,"source_id":"d4cb0c3c-97e9-449f-8918-f1c01e7e3561","target_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: d4cb0c3c-97e9-449f-8918-f1c01e7e3561 -\u003e 8d4422fd-bd93-431d-a97c-70b75f370f82","gmt_create":"2026-07-01T17:22:44.991762+08:00","gmt_modified":"2026-07-01T17:22:44.991762+08:00"},{"id":3698,"source_id":"f0978b42-6f98-470e-922f-22dec2fac24d","target_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: f0978b42-6f98-470e-922f-22dec2fac24d -\u003e 9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","gmt_create":"2026-07-01T17:22:44.993138+08:00","gmt_modified":"2026-07-01T17:22:44.993138+08:00"}],"source_files":[{"id":"fc2d0cc85e5f2565c3105cbe0584903a","path":"backend/src/models/Ota.js","filename":"Ota.js","gmt_create":"2026-06-30T18:39:29.607957+08:00","gmt_modified":"2026-06-30T18:39:29.607957+08:00"},{"id":"ba84445ce5118798ce7d0da4ecb4d5e2","path":"backend/src/routes/ota.js","filename":"ota.js","gmt_create":"2026-06-30T18:39:29.608112+08:00","gmt_modified":"2026-06-30T18:39:29.608112+08:00"},{"id":"a15b46bcf0be7bfbc82e57adca5be630","path":"backend/src/services/otaStorage.js","filename":"otaStorage.js","gmt_create":"2026-06-30T18:39:29.608175+08:00","gmt_modified":"2026-06-30T18:39:29.608175+08:00"},{"id":"4bb9a8c7ac3763db0746ff90788525b6","path":"frontend/src/views/ota/index.vue","filename":"index.vue","gmt_create":"2026-06-30T18:39:29.608241+08:00","gmt_modified":"2026-06-30T18:39:29.608241+08:00"},{"id":"29e96dbf4d3d8f6e116ec620bbf504ad","path":"frontend/src/api/ota.js","filename":"ota.js","gmt_create":"2026-06-30T18:39:29.608321+08:00","gmt_modified":"2026-06-30T18:39:29.608321+08:00"},{"id":"5ceb781f55bf90055f3005880d06ee2a","path":"frontend/src/api/blacklist.js","filename":"blacklist.js","gmt_create":"2026-06-30T18:39:29.608385+08:00","gmt_modified":"2026-06-30T18:39:29.608385+08:00"},{"id":"5973b5959029669ade01898821960785","path":"frontend/src/api/otaTargetDevice.js","filename":"otaTargetDevice.js","gmt_create":"2026-06-30T18:39:29.608452+08:00","gmt_modified":"2026-06-30T18:39:29.608452+08:00"},{"id":"a84967d9d3088fba02de385738e7ca27","path":"backend/src/models/BlackList.js","filename":"BlackList.js","gmt_create":"2026-06-30T18:39:29.60851+08:00","gmt_modified":"2026-06-30T18:39:29.60851+08:00"},{"id":"4ca379f147f6f1da710371999e08dc24","path":"backend/src/models/OtaTargetDevice.js","filename":"OtaTargetDevice.js","gmt_create":"2026-06-30T18:39:29.608568+08:00","gmt_modified":"2026-06-30T18:39:29.608568+08:00"},{"id":"71a563f23b46da0255a6400402bbfa05","path":"backend/src/routes/blacklist.js","filename":"blacklist.js","gmt_create":"2026-06-30T18:39:29.608628+08:00","gmt_modified":"2026-06-30T18:39:29.608628+08:00"},{"id":"ea6e178b2f0bdcefe2ae8800166453d5","path":"backend/src/routes/otaTargetDevice.js","filename":"otaTargetDevice.js","gmt_create":"2026-06-30T18:39:29.608683+08:00","gmt_modified":"2026-06-30T18:39:29.608683+08:00"},{"id":"30f836e18a6bf9cbcf650e5884375a93","path":"backend/src/utils/response.js","filename":"response.js","gmt_create":"2026-06-30T18:39:29.60874+08:00","gmt_modified":"2026-06-30T18:39:29.608741+08:00"},{"id":"2a04b070bd67fc5059bb504232687d64","path":"backend/src/config/env.js","filename":"env.js","gmt_create":"2026-06-30T18:39:29.60883+08:00","gmt_modified":"2026-06-30T18:39:29.60883+08:00"},{"id":"34fcf7aeb55a9c0224c554fc48545063","path":"frontend/src/utils/request.js","filename":"request.js","gmt_create":"2026-06-30T18:39:29.608908+08:00","gmt_modified":"2026-06-30T18:39:29.608908+08:00"},{"id":"08b8d17e3c09b326687a7bca6789507a","path":"frontend/src/router/index.js","filename":"index.js","gmt_create":"2026-06-30T18:39:29.608963+08:00","gmt_modified":"2026-06-30T18:39:29.608963+08:00"},{"id":"0c25a991664c34b2b36ce3aeed80f4da","path":"DEPLOY.md","filename":"DEPLOY.md","gmt_create":"2026-06-30T18:39:29.60902+08:00","gmt_modified":"2026-06-30T18:39:29.60902+08:00"},{"id":"99aa92df5b8c8412119e9b3cb015f8c4","path":"backend/src/validators/ota.js","filename":"ota.js","gmt_create":"2026-06-30T18:39:56.519241+08:00","gmt_modified":"2026-06-30T18:39:56.519241+08:00"},{"id":"0d26d3961441eb708b69c96f1ed1f7b7","path":"backend/src/validators/blacklist.js","filename":"blacklist.js","gmt_create":"2026-06-30T18:39:56.519295+08:00","gmt_modified":"2026-06-30T18:39:56.519295+08:00"},{"id":"8a4e619bfb6be9c463274f96a2dcb5a0","path":"backend/src/validators/otaTargetDevice.js","filename":"otaTargetDevice.js","gmt_create":"2026-06-30T18:39:56.519437+08:00","gmt_modified":"2026-06-30T18:39:56.519437+08:00"},{"id":"cb4575c8c79b7b9f6ffdac43c2369b95","path":"backend/src/config/database.js","filename":"database.js","gmt_create":"2026-06-30T18:39:56.519757+08:00","gmt_modified":"2026-06-30T18:39:56.519757+08:00"},{"id":"0eb021ef791f4679788fe98caea23e31","path":"frontend/src/views/blacklist/index.vue","filename":"index.vue","gmt_create":"2026-06-30T18:39:56.519888+08:00","gmt_modified":"2026-06-30T18:39:56.519889+08:00"},{"id":"cc4227daf4f2b37377be96fcc492e509","path":"frontend/src/views/ota-target-device/index.vue","filename":"index.vue","gmt_create":"2026-06-30T18:39:56.519934+08:00","gmt_modified":"2026-06-30T18:39:56.519934+08:00"},{"id":"e6564dcd4fbbe8e0f9673967ec4ce3a7","path":"backend/package.json","filename":"package.json","gmt_create":"2026-06-30T18:39:56.529813+08:00","gmt_modified":"2026-06-30T18:39:56.529813+08:00"},{"id":"de74851040d304248e26c1db406458af","path":"backend/src/routes/models.js","filename":"models.js","gmt_create":"2026-07-01T17:22:10.340556+08:00","gmt_modified":"2026-07-01T17:22:10.340556+08:00"},{"id":"387b55f69fa15c066ce97e930d49fca8","path":"backend/src/models/Model.js","filename":"Model.js","gmt_create":"2026-07-01T17:22:10.341127+08:00","gmt_modified":"2026-07-01T17:22:10.341127+08:00"},{"id":"d82c987a9b76c3f9e87e628925cae2d7","path":"backend/src/validators/model.js","filename":"model.js","gmt_create":"2026-07-01T17:22:10.341223+08:00","gmt_modified":"2026-07-01T17:22:10.341223+08:00"},{"id":"c22be0eccf069bf7f87f09ef49070f8d","path":"backend/src/middleware/auth.js","filename":"auth.js","gmt_create":"2026-07-01T17:22:10.341486+08:00","gmt_modified":"2026-07-01T17:22:10.341486+08:00"},{"id":"2d86c0a8ef372bffb82991d44412c989","path":"frontend/src/api/model.js","filename":"model.js","gmt_create":"2026-07-01T17:22:10.341564+08:00","gmt_modified":"2026-07-01T17:22:10.341564+08:00"},{"id":"d5e6b65d89b66c08d62b4c6fc5812f22","path":"backend/src/services/squiglink.js","filename":"squiglink.js","gmt_create":"2026-07-01T17:22:10.341849+08:00","gmt_modified":"2026-07-01T17:22:10.341849+08:00"},{"id":"0d51eea570b0976e572f9c35721fa5e6","path":"frontend/src/views/model/components/ModelFormDialog.vue","filename":"ModelFormDialog.vue","gmt_create":"2026-07-01T17:22:10.341909+08:00","gmt_modified":"2026-07-01T17:22:10.34191+08:00"},{"id":"d2ea644c6ce017e7fa5719f8dc3b2162","path":"frontend/src/views/model/index.vue","filename":"index.vue","gmt_create":"2026-07-01T17:22:40.374761+08:00","gmt_modified":"2026-07-01T17:22:40.374761+08:00"},{"id":"d1931152858f662828e1f616637bf7c1","path":"frontend/src/views/model/composables/useModelList.js","filename":"useModelList.js","gmt_create":"2026-07-01T17:22:40.374835+08:00","gmt_modified":"2026-07-01T17:22:40.374835+08:00"},{"id":"3a38f5cb99e9c74ac72f7fdb85a68c44","path":"frontend/src/views/model/components/CsvViewerDialog.vue","filename":"CsvViewerDialog.vue","gmt_create":"2026-07-01T17:22:40.374977+08:00","gmt_modified":"2026-07-01T17:22:40.374977+08:00"},{"id":"e7043a827f136d1ac2e5dbd1d328712c","path":"frontend/src/views/model/components/EqCacheDialog.vue","filename":"EqCacheDialog.vue","gmt_create":"2026-07-01T17:22:40.375017+08:00","gmt_modified":"2026-07-01T17:22:40.375017+08:00"},{"id":"f05f0f2d2810725d79b63a122d02f104","path":"frontend/src/views/model/components/PushProgressDialog.vue","filename":"PushProgressDialog.vue","gmt_create":"2026-07-01T17:22:40.375054+08:00","gmt_modified":"2026-07-01T17:22:40.375055+08:00"},{"id":"8d94303e4c3a8e363f3ac76cf489cd33","path":"frontend/src/views/model/components/PushViewDialog.vue","filename":"PushViewDialog.vue","gmt_create":"2026-07-01T17:22:40.37534+08:00","gmt_modified":"2026-07-01T17:22:40.37534+08:00"},{"id":"3c92914c0d677b2f5ce5e244c4057020","path":"frontend/src/api/brand.js","filename":"brand.js","gmt_create":"2026-07-01T17:22:40.375633+08:00","gmt_modified":"2026-07-01T17:22:40.375633+08:00"},{"id":"8888802098bf9d46f77f4bb95811e62a","path":"backend/src/models/Brand.js","filename":"Brand.js","gmt_create":"2026-07-01T17:22:40.375862+08:00","gmt_modified":"2026-07-01T17:22:40.375862+08:00"},{"id":"8d10949b317a4f03e8624b7f4ce46d77","path":"backend/src/routes/brands.js","filename":"brands.js","gmt_create":"2026-07-01T17:22:40.37608+08:00","gmt_modified":"2026-07-01T17:22:40.37608+08:00"},{"id":"16acd73277fffb69b4ee4eee82fe6b9e","path":"backend/src/services/measurementStorage.js","filename":"measurementStorage.js","gmt_create":"2026-07-01T17:22:40.376118+08:00","gmt_modified":"2026-07-01T17:22:40.376118+08:00"},{"id":"27717884cd8566480cffa4947e7fa6c5","path":"backend/src/services/eqCacheStorage.js","filename":"eqCacheStorage.js","gmt_create":"2026-07-01T17:22:40.376158+08:00","gmt_modified":"2026-07-01T17:22:40.376158+08:00"},{"id":"65741f66e633d4e5aedac59d5f27af4e","path":"backend/src/services/curveClient.js","filename":"curveClient.js","gmt_create":"2026-07-01T17:22:44.383305+08:00","gmt_modified":"2026-07-01T17:22:44.383305+08:00"}],"wiki_catalogs":[{"id":"dd61923f-65f8-4e98-85f4-0e0a0a649a27","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"项目概述","description":"project-overview","prompt":"为耳机品牌与型号管理平台创建全面的项目概述内容。详细介绍项目的目标、核心功能和技术架构。解释系统的主要用途:品牌管理、型号配置、OTA固件升级、用户权限管理和分享码日志追踪。描述前后端分离架构,包括Vue 3前端和Express后端的技术组合。说明项目的业务价值和应用场景。提供快速开始指南,包括系统要求、安装步骤和基本使用方法。使用与代码库一致的术语,为初学者提供概念性概述,同时为有经验的开发者提供技术细节。","progress_status":"completed","dependent_files":"README.md,DEPLOY.md,docker-compose.yml","gmt_create":"2026-06-30T14:04:20.633103+08:00","gmt_modified":"2026-06-30T14:09:11.174236+08:00","raw_data":"WikiEncrypted:0MI1/XkBoMl0lTbK6t0Cn/+8FdvqrJ62ianMLvZj02elJtBUgH0Ns0veIx1WPtM9wwkxI+/XAqHLxJLlHB8wV7ojrH0+b4JMz5OewwhBN1ELEwwkQElYbXolx+YIQM0o2FbBtwH/qJtog2gIHchdNwll6Nf1h+JmY9opyg7JsQs/7cTSSrfUmluAQwFCDAvmu/tGmL3XeCzrrmkOI88h7pvsgL2niGJR0xRh4Lglcxbrr0NK4gOQ45RwQchyzpGTB8IiO3XRTcNftONnEzDiJzVODyKOjZe52ws6XblEwu77xu3aef4IAzXLIbyoTb10Z/ue/QVjfqwkoEB9u5ciW4cJImri5dT+xVeLMwEADbmq8MbYy3QkUi4lCv+02P52HSrp5PmR0p110l5NRD3wnUyJ4H3excBt4DYq/WkTlWRnu7SL4FLbChfDRXox0FZjbrSrmstSyjrqOQs0i+3DWG1cAoapA34zEKMkiP2oxZKPn+7VEJ/X8+B7JhsqroKmAs/NykYkyA78uoY/rRIZzhCoDGERQV+E21xUWuvlE/M6M9LjVSnEkBww9yRnijToD6+usihE9d0zbv3MzXNqNqaye4++Ko+2iPoV2eV7lIQXwMto7c2DhmZGyJ5OEE45X826wBdjL/sO1X1QPuglr4HEFXnds8hBA4bPAqVmgptC8bfkf03XDZOL4nlmljZN+Kip5CAYgR9K5mKRD8ZS9gGT6ieJ0jbcHoo6kysaXa+jBICwzeAEQzmvxq2JqEukLdcKXOrZ0CgeeU8SADva7E+gvKzvS/4Zrbv5UEM8NkYcqeX4k9ERuVUjy5J96C0S2GCNR5OPStfW2tKkrorTKngImbE1l0f1/FI2ZhI5sSjUkzAZIKFeXBJpA1hZSNME+E+UIJ+RvcsprmVx62wG1PlwMBeEhu/9cGBj+i+qI6uAlGdhybWAqGSSxsLwdqCiwQEcylelO7fNlSrnz7amb1JuqBfUynCEzpnlNkv6l9jioHXV/fnJIOihiNh7v6/AMwtMvmSnr/j1oUAuJQuDAW149PMRpTre8XUtulayHzPj4ZY7R+4VpHR5kmYcTNmUnCf7Q26XVU6NLlv9Qu/gvQ2TPuGOKCs579fz3jbJC6rn+mQXlkz+vQFu2x4MrUvomEqqCVV9lv7ORQqVPJuJCH5onWcX84PFxIMq38bqGCQ="},{"id":"bcc45977-c058-4033-b0b1-9fd4cd7f4443","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"前端架构","description":"frontend-architecture","prompt":"创建前端架构文档,详细说明Vue 3单页应用的整体架构设计。解释Composition API的使用模式、组件层次结构、路由配置和状态管理策略。文档化Vite构建工具的配置和优化方案。说明前端与后端API的交互模式、错误处理机制和性能优化策略。包含组件通信模式、依赖管理和打包部署流程。提供前端开发环境配置和调试指南。","parent_id":"70ba09ee-60a3-41f9-bdda-3cb904cb26de","progress_status":"completed","dependent_files":"frontend/src/main.js,frontend/src/App.vue,frontend/src/router/index.js,frontend/vite.config.js","gmt_create":"2026-06-30T14:04:44.763098+08:00","gmt_modified":"2026-06-30T14:14:52.87794+08:00","raw_data":"WikiEncrypted:rJ/rIw0gVau8jPGqKFBAsMR2XDSFypkKHZQ6YBOgiEB18etPNKW/AKXxDO5P260N8cfR8zM/FPLMKEziA2ENAEHVfReiRH5pH+fgWYT+2jYTA7RQlp0TufhpU942Hkc/ujxUhYq+V3QzFALbuwWzvx0UL8Xl+TN5xmZ1UNdZO71Qogp53zx2hXdFdKaPDrr4z+LIar4k3xztnrU6feh8nqiV6INc8alIAN875sC2qpjIyq5wlayKyIdU0M+5DXjHjuV+3QmKO4f+JccdKivcFYhs66YKXadO78U+Sx6jpT0RqNqSmB5SNJLPpp6YbwEYtig2YvqVxHgh+FtviAJo+3aiePQw/TkCYVV02sx3HchcKY17yohkf/cGQMfHWKjBC7ZyuuD2WOHobXyyVuIuHVDKntJ2SjXdR7GaQPDZaxSWpeHYcn0+Z1hICSDDP4TfjuXCKtOx01urOs4lYqZsN2SPy3LljUhl9H5uWpEV3VH/LPqTWQ6MdLG8aye4mMcCsw57e+goYu3oRkRf7qvVOAVztMhQTkCgcUPkiPfB+YdqPMMp430Bqr55/AYFsFD2GmYltN+8OgBqLdislp5mudOEF8uE6Awfn0xbNJNePcUD1+Esx+V+RGIXYVMeRXcagKyoftiqtJy7zjwWBmr/oTG428St7QGB+Yha7dSK7y6WiOZjdDUs5Jm354mpkojurMNDW9Pw3s7Rt24W3JHN+Z8iSUq9+Cr2kaQyNT4G8XaqIe0s8pFYoGeAeYcZvyolp+0ZZ6pAH3tyuVe8hrE+3+/x/dOKV5WsDc7Jul/RY0qtkjt39mvXPzbxtMbwGhahGz0xRVYJMlhMkcN/dqJI4Jj0QtNULaonjkU/joC8aUC2Vfa8MFrpfwSTVytGIrfPAvxbxMYgPvqi8KSjqjV5lpDGUcYA+DMgqLOv7mPVrPBosl5m0J5Fitt9KmR1j2OOr77AyteAWJcBvK/idJN48LdNVtAYqErjTGb16luVO1yW9sDX8VXCKzUPBQ8boXaJ","layer_level":1},{"id":"d34906db-4455-4481-9512-b29115655378","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"认证系统API","description":"auth-api","prompt":"为认证系统API创建详细的RESTful API文档。记录用户登录、登出、密码修改等认证相关接口的HTTP方法、URL模式、请求/响应模式和认证方法。包含JWT令牌生成、验证和刷新机制的详细说明。提供认证中间件的使用示例和错误处理策略。文档化密码加密、令牌过期处理和安全最佳实践。包含常见的认证场景、客户端实现指南和调试技巧。","parent_id":"7e9246a0-207e-47e8-bc26-b9d36ae6f2f8","progress_status":"completed","dependent_files":"backend/src/routes/auth.js,backend/src/middleware/auth.js,backend/src/utils/jwt.js,backend/src/utils/password.js","gmt_create":"2026-06-30T14:04:55.151403+08:00","gmt_modified":"2026-06-30T14:15:47.981318+08:00","raw_data":"WikiEncrypted:I6KYYMxpAemyHFwJy5bny+FhLrJAxcHi9isgLCIR7jKgk+RtRRSImYeiedSZDcwnIMYAtWgsiGag9xYiTBcpIby59MhEIf69Ge8Ey272sEwv4rLKoaCbet71KAMUN4denOOfuaKbrwbXK0Y6FbehkE+pCWtq6ubo7or5Tl+PIwwX3Vha0M9C0aYlIBIXgML+2LymHuPdeYf/f+yy7ivDCl4nIRTcM9C82jpKialSDtNyDOeJKcvnuY7WboeTuADzL6A5fX/baERJkVBnSdbIynmMfReneVt5JAopJ+2NyT22CaFtr2L3C+DKZ74FDaU6iC/85eg42OZ2JgeBZXiffstckEhj2B8H2dLfxGDmQUebrfF6cqty5biCE3zW8cU1QI3+bPdfGaoUhj5xFzd437cjGI+IAkNffhuBei52tU9+6Uyp/Ym7bEGnUpxwS1OOijeLKUstO9d9z5MAs5Ip5+HVcliUeAVujyIwd76cvmbhnuaspCX23T55qAvLoTJKWmDBZaKzPE6hCpNAHPfq9b7tOLID4W0tvfFPZnzGWsZK4LhJHC3i/qAGdXsXDc/JijZ7xvhJMYqJMxcoZ4hdtAdv1YjL98AOd++9n9H0hDplAqDf638QwPeaKC6ogkEw5LCWjJFC3FbT+FvpZTxN7RRHFPVNndBrtwSEJR/6/EfA6+9lpuWMXHNhL2Hl4GsMybpXzg4+AihB6Xy9GPv5kkG1enLqgCaaQJ1blr2eb9rUYLvCkQMW+DRqPPQxfniLGGB5WuUkzxn/NzDZ++XhFvmvW6s0+TPiCNMxhx55Jd+O1ta0CeYAptKYmjSJmlT2XDRO/aqedoSZyzYc3L9gtYD4V6FRBsTtOKLyB22oei614ORfyRcALpx0q5/EeyLHYVN0UM2Xsh5n08o9+mCzjkPjSVfG9NIIBhGUTEj1i4dKxB4vM4hLk3x9i8HdfoZ6f4+3iHGqQtHSFId685Izyli748sL55omKo8e0lizEKTrYd5W2vZUviHInfD/D2cIfwRtRBEksNW/6ycVp+dc33cqX6BIN1uwL7uMBhCJyrLl9TbEaEDKPHaGmi4jx9W+","layer_level":1},{"id":"0f657e8b-77cb-4604-81cd-d3e921d28e21","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"布局组件","description":"layout-components","prompt":"创建布局组件的详细文档,重点描述主布局组件的设计架构和实现细节。详细说明布局组件如何组织页面结构,包括侧边栏、头部导航、内容区域的布局方式。记录布局组件的props配置、插槽使用和响应式设计实现。提供布局切换、主题适配和移动端适配的具体示例。解释布局组件与其他页面组件的集成方式和数据流向。包含布局定制化选项和样式覆盖方法。","parent_id":"aa2583bf-2c6e-4792-b794-1563db547d08","progress_status":"completed","dependent_files":"frontend/src/layout/index.vue","gmt_create":"2026-06-30T14:05:00.056535+08:00","gmt_modified":"2026-06-30T14:15:24.296404+08:00","raw_data":"WikiEncrypted:x3LcpLCzT0KOPxd1xeYY3c7iq48qz+WPAPm3x7MWgVl9Ka0y39BYIpkYIXIwXtcEkjLNRqcKoI34Ay7VLfvIoeNd0L9KiPW38nGEktOH2kdRoWStqgftHHDZZMeM3wTiHozP2mtq/BrgXkFbslneMaOqL0jcIeyYsEzK3XOf2IWybFopdsfudEA64erTFyD7rwb4i8M4/OQlv/7phzTi6ud+DXkigQ4QxPbXoU8Pb60EBp1eZghvTXVMFb5rlp+3kbG8uerYS+ciu/fjCScjFieZOug+uuHKkFaFYBj8Za7rmsWg02byP4r8E5yKIzSPDy+NZcyXTRKFGHYtNCtj4aueEWW2oLGYR0/nYHoeMgwdpaKxBg9Ye0gbrAr9gQvUxrzpwdRrUEUmPdp4oTmO1+y7PWruf0IGT+IA7KRfCxZ03rVNE1s6b72zwuUdEps8hXGWIMTqoYJYcYh57cVQj9l1O153yZRu3x4+GhgBW3fblpCW+bEz14xJrftnR/Qve4y83EkfHuQurRD/YlwaAXS6/Wd0aG06MsRzr2xJPgKjLVxTtAsdz5BI8ksED+Rpxs+vKy/CDOvvIUhAx1A0xnzRxDB+ZCR+u/EilCFFyqqqZyWB90BOY5jlYG9Ci2wONLki4Vjgwz6irpTnjyAwev4wTO/8aLJVBupWUqU5MB6mAreomYWt8GYTQqybbkozb5cbV5rNhZTZql0EV7u9+K4mxe4913Os4q+mI5AbzsqzM16xKoV94kRhPaiubGHpXhh9bVmMFx1DyDRVXPlu1zbbRnGMgbH1bIp5FdYRH38HFuxpXMeHfBmyWq2CIVOuMgJQZ+WFbqZPfHN+LjcAOYmhW/MnaBS3TKjqR/3lHriai1eaX6gHyHcqjUCh/6/IwJ311KB5KiG74iE+EWk1a16r+k5oTkTOUMNGX7YnwoVLs+kVHv1fnD14Rwf3OBrXEKFkNyWE9mPL5SV18Yedhg==","layer_level":1},{"id":"7f36202b-af69-4fc0-b62b-a57e415deb69","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"部署指南","description":"deployment-guide","prompt":"创建详细的部署指南文档,涵盖首次部署、本地构建上传、更新部署等完整流程。详细说明服务器准备工作、目录结构创建、环境变量配置步骤。包含Docker Compose配置说明、服务端口映射和网络设置。提供上传脚本使用方法、手动rsync上传方式和构建启动命令。文档化健康检查、服务验证和常见部署问题解决方案。包含生产环境安全配置建议和最佳实践。","parent_id":"a3ddc4e4-116f-4781-ba9f-17c85c85396e","progress_status":"completed","dependent_files":"DEPLOY.md,docker-compose.yml,scripts/upload.sh","gmt_create":"2026-06-30T14:05:12.310696+08:00","gmt_modified":"2026-06-30T14:16:33.828055+08:00","raw_data":"WikiEncrypted:0IKfLNOWe9mZfG1jVts3wxq1Ie83+Lf6EMuycQSN7s3NFV5ooa3Scq2B9C67gTKq2J61WmIo8uwzopEI3o+rxz7q0fBEeW1pmj3Z5yCZzfN7Q3gteOOQtgoQ9YkE4gpYcO2aDGkpGrIWWNjjQ7GyOJYn8FGR2f/tSJ7yy/HcDn5d2NMrcqrwu4CX5Gvyd5xJmIYcuVjpKRByATlNCS1zM5hEwvlL73AQR2eSztdK0b5QNmGctlhqTgf/bfJABgos38mVZQzbH7O9ocFFyJUbFu6uhqIefp9TJkdsbvU1uMF0d4ZiOsIuQb0iFW9suvsoVwvoTRh4P2mAHkIgDv1aQoO66lJ5hTpWGKjuTRoBV+UETV62ofFoNftmlPOqxy+OikSbYqZh3VfJHAM/gj/ehoEfHSCQXl+YPs6HmF0O72rArAXK0t95ls3PNrQO9l0dAP9L1/TwQrroJcZP2FGM7uiesHanN3jdTNXwgBD3l9gUOzOGl/15A7bXkqFfom4mPjqe6+/6cyxTQzxI7oAwU5654D+GtFcAXw7zvEMq0cOeDIeMUocxBNVpRf8SIpWDCB5fuZth/RVBCE29a0lazqZfhtrvKoROmw9go1mbNtfu0GYtrWHuz3BkMaVCGKKYV2TENB8j91AHzomcbKh1sWaWOVzi2XZUHTcZNhOW7Ob8mCxLNxbYWc+goUyiGyu6fI8rJcq69+Eq6MdAlDb8H23H7TSYkPWwvoiI4SRihEX+kEcVRlZgcxYloixMRqcfAirLSbzDrUxdyL+A636HqHK5wbrXT01hUSqhqmuXcDl1jUYIcSZaaS2GdN5sPNr/tfAEvV/QuZx8OV18PJa1uc0WRgGiX/0qbXAJL9l9rZEPkjjNf1X4S/9PNYbQ7y4YCSa1ug33vS9PYtl3eNOvb8aXrgcYnFnrkCIa/XOtmTrizRBLEyjVMUkRb20GAfpUamYhWVOkVmvOU+OtWeD85PtY9aYy61msYID323pMp14=","layer_level":1},{"id":"dbe5d77f-6f4d-476c-88cf-797b80a11a11","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"实体关系设计","description":"entity-relationships","prompt":"创建详细的实体关系设计文档,说明Brand、Model、Ota之间的关联关系和映射策略。文档化一对一、一对多关系的实现方式,包括外键约束、级联操作和数据完整性保证。解释ORM模型间的关联定义,包括hasMany、belongsTo、hasOne等关系映射。提供实体关系图和实际的数据流向示例。说明关系查询的最佳实践和性能优化策略。","parent_id":"0bb34dac-0e1a-4cce-b41d-0194eda77f79","progress_status":"completed","dependent_files":"backend/src/models/index.js,backend/src/models/Brand.js,backend/src/models/Model.js,backend/src/models/Ota.js","gmt_create":"2026-06-30T14:05:22.620322+08:00","gmt_modified":"2026-06-30T14:18:01.587347+08:00","raw_data":"WikiEncrypted:WnER6MhWFG6N6U3R1m3zi9/PE7USWRBJSA4m5rdVd0roBuaFoWjKznz76Q8kOGO4tNwaCSIDcUIRQho0AHAeCEii3WPT3hVXrhQQYjEzvKo6SYnxMHFyoqyC8KkItViNO7QMqwUXCOqIqkKYJbtN9Sajekq73kPvPqvY8BHSNnqfwmaK1orPvHIjh8Q37172/jp+exIQ+FflmU+mfYsQJ0KuorznohYsQIf3qlfg8KiwSW0u0L8K99eblOKDbNN7MYtC9qf0iFzdGSOSwR4u5r4gtdCB7SAZCvwuy+HaSOgXF4oQDX+STWKFSq2xGuZf3y54WkpwBnQtNhvzIQLDsBrIlz9tHbHjMaQwU3a8HTu8JTO3mYJ3BTiKKC+jsgxGTxRRRTQ9PhQo1waFlJnCSVsR+m30u2zHgq9G3gwORjBImo9vcEDistxC+xSWMBsfJzWlXUhx5EjJYrZ1oHpgxmUGyLoTlfCJvJoNqs+vQLDuVZ6jd6juOPkJ7sanKd4TlWRy4lLmetztJb8ZAKPP6R4RV0YcU4IV3Lr/Tm0KzcHdb84aWPsI0EgbfUkJAWjCOieqWTHBE3qfwchsJYJqR3RrOuH+/OgRl1A6P/5XR2tG4/LwC5N356o2YR38E4icxdWGirKniBpii3TVWrqGEkWMsUbRenNq6PCyT/kcGEb1Mn+/c4b1Rb80dNweaNWDSOLmHQFMvwtgxh48I7NXGBAprbcEP+kwn8U6cf+oo+LDgHKyTDMssoP+fUOnruX6Eq9vx3pklQUfost9b2918rL+L5N9/tKoCpCmXHMgjuEE94T77bU7dXpcCRjh6dza/rLHJfo9rcOESul7Y0UthoahAetOF8CRzabuRNfSA3+/EgpkViiYcAqUOfJO9prMaKspC6udBaqAb8GX20oPvVBnGdehFhjW6ZNUKwhOOyBRpudc+qhvrCn14VSOV60QyhfWkkOtqy6adpmbqDfDn/boGiahg8EgnrKUin0NLy9vZH/v3RdDSgNXAhCHJng3as9wGB02Lo7l/LIlX0/+Pw==","layer_level":1},{"id":"1af0f0e8-0c53-41d7-a894-47d9cc19d4f9","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"用户认证系统","description":"authentication-system","prompt":"为用户认证系统创建详细内容,深入解释JWT认证机制、密码加密解密、中间件验证流程的实现细节。包含来自实际代码库的具体示例,展示用户登录、令牌生成、权限验证、超级管理员权限检查等功能。文档化认证中间件的配置选项、参数和返回值。解释与路由系统、前端认证状态管理的关系。解决常见的认证问题如令牌过期、权限不足等场景。使内容对初学者易于理解,同时为有经验的开发者提供足够的技术深度。","parent_id":"08dd4c40-3fd3-476c-bcca-4c8687a8d863","progress_status":"completed","dependent_files":"backend/src/middleware/auth.js,backend/src/utils/jwt.js,backend/src/utils/password.js,backend/src/routes/auth.js,frontend/src/views/login/index.vue,frontend/src/utils/auth.js","gmt_create":"2026-06-30T14:05:25.89264+08:00","gmt_modified":"2026-06-30T14:17:38.563207+08:00","raw_data":"WikiEncrypted:uxAckj1IXK2TQH//kEdeBLXlO/kfAAqZjShpoDF/LwxjObF9jWClg1BjbeyHIZSgS1kW1/rwYWDBEsAU51nyKaMjqaYMMCeAu0tGWpZIc0izGBmzwh6bfOUHboVu8bTGN57x7Ig4dNdDghiUoJkJKQX4Ys9KTK8TqI3fswjZz8hglaQGl4NeRcIcMv/X6D2PrvWe1qVFdZ0SPTExOhFw3RHcXIB6SwncZI+aMeqX09v6wHL4Cp5stm7AWL+txJygRSaQYujDcE62s9wfDJweKf/BQ/zTEigEdc5GbzkMnf5NFxmbi8jVDO7wUEofR5O+0G7fH1Wf3oAZBMkevD8TNGju735s+O957j0f4XKsnnX9lsLIvYZtW3hwTKNBeBoujNYJuApW03clJesocX3Wf8ww8m1IO2jArAjxNy5Kz5feFkFhHiCG8MEacgHT8kg3E7ZzxyNGQ9qNkHcWapTIQs0bhq055rPjXYps6gxDBnOgFKy8B8vJf6NOsu03pfZ3uD3dNNqpYwGSW0z6lGvHkDJd2fJxAFHPmnmL4angdyPotlYsK94FpYGrRt1S9x1phZ9rGSahcTUMsqDcT9Yf+KRzNIDRSVSA32KNeKkIlJ7KkS/Wm0jraxDEOETgabNiprZu9IQc2rO+qgL11sXS2ztPP5P+se2fpoWR4kk1uiZ47ZmEOozxu4PiysCNnQaMA8ANHI+wEeZnkX2tQbrDymKi+ns1ZC695WMnYfGVqqzW7ztwv6hcCxyg1h0cCTV85FVN56EYr/FayPkYHDGEZZVV5ZUDvhVDpwyR3SbeAFQjsbJ0kKXLG89LTiuNzGgRwI4aA6bxge2JglaT1f+mtyXbZSnfdajBzphQGhsXB18VE2IXqwfYJigbP5F/u+e6mB7sN63cqVRQ1ydNmvawS0ojJpoUdPJp746BGGnKgHcDOaskuD4puwZFDNJVLFQql+zdoIL74vkQKXIqKhlm4hvnkOFZ06ODxcJWJqQNMT4gzixw0eo6Edc3t7Gz3J/XGJn+Lm4JoYBdAk0PmDWtQqqAjKqm9ftEqhlBb/nAlZxetLWvyg1railkNORM+louiBsqTKmMqeuxFGvIMxTWvlU0z1uFTBuzUgVEKqUJRQL7XYgPhEQngiJN01Bm3XHt2zKUINah98fqoWiyyAHyX0v/dIbaMiyXnzSIZLIBWZDZL/N1ypvWw8ffozNBXfZhGhoE0OUp+tItqNmnVsYGvwtU1dFJK3ZuLGGkiqACmSRg+oIqURaokDzn4B10iFNXdloxmOHr7bgSoCjlSjyXfECCg+t9GlrWtFGusJSHzWiRdg6rJ9Rd1iTeSafPGd1AD2mZ1bTOdXmS6IT2utJkj4CIc2gIkIpnlTql1NbuOfDA4NTL+t/649wrNxdl/tfq2+8LlsB48ND80XGMdAuipGWEYynvogLDZguqmDXtxMo=","layer_level":1},{"id":"8f0760f5-ef8b-43ef-8fd0-7c6d1f693193","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"侧边栏Logo组件","description":"sidebar-logo-component","prompt":"创建侧边栏Logo组件的详细文档。深入解释SVG图形设计的实现原理,包括渐变色定义、阴影效果和动画过渡。详细说明collapsed属性的作用机制和响应式布局适配。记录组件的CSS样式体系,包括Flex布局、动画过渡和响应式断点。提供在不同侧边栏状态下的使用示例,包括展开和折叠两种模式的视觉差异。解释无障碍访问设计,如aria-hidden属性的使用。包含性能优化建议和自定义样式的扩展方法。","parent_id":"eb78ed75-b786-4b43-ba43-58a5ea8a23a6","progress_status":"completed","dependent_files":"frontend/src/components/SidebarLogo.vue","gmt_create":"2026-06-30T14:05:28.622668+08:00","gmt_modified":"2026-06-30T14:34:09.996181+08:00","raw_data":"WikiEncrypted:fV4HuQ/J1++1YCiBadzlA/Ad9WGt57Xw0P0O4e1aWBZ8j7ewAMLGa30PoRyFOz3WPxWhYzFV771iPkiUIngbYLg/7p5O4HeDzmBW51nlwAWF6h03zUwo1BVzYo/fjr3K/vHHffvWiWcvf6+/Pi/zO1p95ifW1RHBzkGDc4cbtCFnI4TExB7L8RgFPd4xt6LWCmL98hBAGxxSmeVmm2WQY1xGJjqXhRpxokLo77b3Ez1EWub03MklHAlEi4JLgZCXeG0AZMzGl2EApA0orVb+k1nPHohU/sYPxOP1g77oqTo0L6eRrJYqLVzXM4dPj6cJPfoiL1VO/2KqEXmJqEEcvA8tI8Vv7fNcUxexyGaVLP6NrOdFw7GfunFw5t/QC4hNv3P7MI8EUJYJ/PidrenCXzv2FJL9zWw9IsaJbDglurckMqQQka4/AwPlhiPqUP3v9KzvsSqKogDiv94Gx6K87tIpDsodProyn5dx5GKnJIQRuNQYX1lpPTVqMQ2OlAD5KvAnp1VHGyVMPixJgwRLl/SX/Y/mmbAA3QAZC3s3LJSW/Hh6OogBVuThelQoKNB2/rPZ/yEgXcFUj+H9At4yNojzuBdqqMakOsrfs/1WsYmEsUXZ/HgLkCJR2T6jL0BiRhXisXcj5fbzxADw26kbKBhW/suo/JwIzITcMgr+B+vwdmIYlROk2zRWQTcSVdtpdouiZLy50KNTRIQYgqiiE7nEL/p885dM13alTVH7cRjdXV993ONl6tRfBQnS9o2VAa9B/IoHSXQjblj73awUecvCir7Ougv3SPoE8GPBJakIDBiVOGlcooQQjVelDtXjn5zyuz6cLPIZF9rqakHJT7KHTZrM2+Wi+TKoGF4IR0mEcinmwEe+JNRIkItConCqwWx3Ekz+kabb7E1CpVm1yA8794xHHJtDSak71A7IL0KO7cUUC0tFTuy+c5W/vuZfoZX4oiO0lX2SvlQGYkguIQWABQjuuCjerUkGgiScVohUoSA1vJVnraaSNsC3edoxL+W4+juGOZytBN0HGZS0U6a1asEka7fODrK/yhDNJ2XKz7+pcu4DwgRtUHUM26FEG84uR2EBgZRiuI2c7YA9Ag==","layer_level":2},{"id":"105cfe1d-aeeb-44c1-ac3b-6550f2c7a307","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"首页仪表板","description":"home-page","prompt":"创建首页仪表板页面的详细文档。全面介绍首页的功能布局和数据展示机制,包括欢迎信息显示、快捷入口卡片、今日新增统计等核心组件。详细说明首页的数据获取流程,包括getTodayStats API调用、数据格式解析和状态管理。记录首页的响应式布局设计、样式定制和用户体验优化。解释快捷入口的配置方式、路由跳转机制和用户交互行为。提供首页组件的生命周期管理、错误处理和性能优化的最佳实践。","parent_id":"f00798b7-c49f-4260-b9c1-d1ee413b030a","progress_status":"completed","dependent_files":"frontend/src/views/home/index.vue,frontend/src/api/dashboard.js","gmt_create":"2026-06-30T14:05:55.602204+08:00","gmt_modified":"2026-06-30T14:35:15.434226+08:00","raw_data":"WikiEncrypted:l84AvQDvM6QBXs3c27I7iRN2eqIKPqqnLN0fpl6W1NXbpSYLO1ugdN9q3vfdxcOimx9t9/zu6SUc26bwQ+elEbS+I0PRYDRL4shhpb72Ma/Ng8alFtrqEXILpNlDWRs9AoWzQ2KDmoixk2jOewMEH3JllHtJ8DUYUZNp06dby1l7BRtvY2mOkugkoAohYAjj4QyuCm4GXiALmsr7NFR3LC3O0kqbZE21xaDZXflITmtjSkBHJVQtkVH23ciBJVtJx7Co85atOo33DVRVlrOhEJtgP3suOSOLawlRAo6EcizG7y3pDIU5ypo7B8YRrtllA0l35kDhk3pyDTN1sj7bajT9y2fIinJVq2T/AOLyueKRKMFNLrzr1chgaXuxLhiVRpeHk7C325h3AGYYJ9+6Xtr9kmA5H4Ebjk+2sk2YLVBogzJelsdYQqCiBDGzCxN0BAVpEtw7J50eZ+XDVbOY7JUC16j0oiXukJycIku1pthhJUplqc3HiyebwYVuxfxWdM+2IV0+/ic+3NzpGhu19jpGFUZnSD4NLtTW6QCHZMn4FcScTwzn3/5byoDiy6M6RaM3JFXc1XjuZySnsFKAO/Bo/PgZMmoaNUj+gHQTBOhFflMX2DlPEpj+q5NpHNyY11SKV61o7RWYW8r4F9r22VlfvDnLPI2PEvkX4bjKEBeR3vYrx7FpVdNWkqK9JpVWewynEwDS7csRjVfkc43fe6xYto8zEDV1/AjQdPOhSQHP3UOztX3pS7sBLJq/2N8sWJqG+YrGE6N8mVAmjm4/i1jR1vP9HaW3cqoo4fYDacBXqFkEIyqDicgLUVe2+pCWp5Lek0ENTV1TmLovw2a8dsooOU6GQMozpayiXhtI+WzwZxtXAFHTaVyHFJiWYMOOH1xDFV/IfD54CHmfO9/W/bjOZnxKeS/jSJygbW1/5U3jX84UX1n/gqGOsSnO4SKJDEQbdK6PB4+9ounpuIITKPmk7KMn27m//tj8HPjx3W9lenipUy68iqVbiEUqz+/Ty0SFO87eWJGkvXE/HqepzBh5V7XvutH4Y3F0V+GKn9MYQrquYT8PrsUhfk8cZdXdsq28aDUYUl+B4Q35nG0gew==","layer_level":2},{"id":"de69fb0c-330e-4831-813d-94fb958688da","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"快速开始","description":"getting-started","prompt":"创建详细的快速开始指南,帮助开发者快速搭建和运行项目。包含完整的环境要求说明(Node.js、MySQL、Redis等)、依赖安装步骤、数据库初始化过程、环境变量配置和启动命令。提供Docker容器化部署的完整流程,包括镜像构建和容器启动。包含常见安装问题的解决方案和故障排除提示。提供基本的使用示例,展示如何添加第一个品牌、创建型号和进行OTA更新。确保内容对初学者友好,同时提供足够的技术细节。","order":1,"progress_status":"completed","dependent_files":"backend/package.json,frontend/package.json,backend/start.sh,frontend/install.bat,docker-compose.yml","gmt_create":"2026-06-30T14:04:20.637065+08:00","gmt_modified":"2026-06-30T14:07:37.615397+08:00","raw_data":"WikiEncrypted:qfgbutC7oyxR6nMxrwk1ODnNMBEQ3/sG78fQT1yXWju83LC7H/jAM8CEAvWT8huE5OClmQiIfNYNxHQ9s7RRS4I2JpxuOJTz8eCWMUZ1Uyzl3ct5rsyIFu8fuwdbAeggGoVlXxfRcT82rVraC1rlaQRGO5kgcNTJgIeZDa7KIJzJReW1AF2gOcg85NxmyD2QBPU20jUQG8tQZgyOekDGEvFa7bKU1UDQLDNO4yVWuGIsKgfV/whNAizKl0ZZaZ+9iWM2XXBDA9sLrXZQD7fyzUl3elNmWx830Y5ju+KudGoo33Kt/Zp5fVC96xUUwKGcGwH9ptvzXwJy6/w/sF3x8vbGuLrEvc3DHTShxmj7sNOi9NQlkBUDWrQbl44wQC9NfLJYbEHG5mWaT3bFotTFxn/bxdbAce7P9osAkl9SDqVly0X70YjXY4Axe0EdO80cCfQwynIN+uONKc2K+DcTIjJYXIK+dE5l1LUWXxSAWbsgxjnTgTeRqS/RJ7U/LwV6x3M+O42mw7d57H8byAPhaALheFipMQM2Xxemr8LmrCaU/OyB1Zt7NSjO9icOjS7ce0KBJMehTWPQn27B6NBZIwT5MvbL+9Y57TJzYRoPUaywWNeNl20CsE3D7BPdkNz7cT3NEYSTghAfeU0vF120Z/28Pq15ZxBRmIDF6obYSk8NJLSGbOIxYm6QWdJ5c/NnktUQ5V+LKFEgPFSF3HFzIEpolqTpuA30n3Ok0tdZgrCKqqreZOg8uMZPai73OsMcEfntY83IyMpmxd6KNmaZW06B/uk7VOvC6T0wpPksXFRSXonlh0fgnFt4o3fusophHFTQTcpWeBSacU8y2fSx8X6q2zYQj4H/czf/7ijEyOhGFRdm08Eir3Y7kYYFI8hQBfVdDOZ6gFQ5HkQME0ktc5JOWoaqNYrVpVidXpLQ5YMhsh4lHao/nOxWraq/zC3qxrIikrUW0zchTI/h3Jd0fDHMhC2t+Lkbztk3oZ2oCcejCqLBcLrv9ZfkdOxCD+Z4bOao7gjk7dTngaflTdhV8wLJ2RV5IeB0U5YTPVdBfo2VZ3Z5lwdr2Uul/0kxsFfvLfAHgvs+X4oxWle5XW5cu8PoSaCj/pLYjR+/CZ7mtEZLCWj4gas0xmYzqylOaFjIk5cGaAQiW9aRrb4nL6YWK0IH8tum/o61yMkXp4rm6cC3lDsToPthqlHlAoziWtZLPsvc9z6zXUwW38sIA9pz1Q=="},{"id":"5a3639b1-98bc-4bc7-a346-91ed56edd2af","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"后端架构","description":"backend-architecture","prompt":"创建后端架构文档,详细说明Express应用的架构设计和实现。解释MVC模式的具体实现、中间件体系和路由组织结构。文档化数据库连接管理、Redis缓存策略和日志系统配置。说明认证授权机制、错误处理和请求限制策略。包含API版本管理、安全防护和性能优化方案。提供后端服务的启动流程、健康检查和监控配置。","parent_id":"70ba09ee-60a3-41f9-bdda-3cb904cb26de","order":1,"progress_status":"completed","dependent_files":"backend/src/app.js,backend/src/config/database.js,backend/src/config/redis.js,backend/src/middleware/auth.js","gmt_create":"2026-06-30T14:04:44.765806+08:00","gmt_modified":"2026-06-30T14:19:05.642968+08:00","raw_data":"WikiEncrypted:N3UbzwGjCC3xD6BrTM0cq8Y9ccVoDb9n1FwE8c3MNy31fwp7itn1eN/9SBNHQuzqn4Z/E95mV5akFaXhbd+x3Hbeb8Lp+QkTMOKfZNQyKojFvMb3nIaA+mV48tDXDWEqxrlhh4JpRydgTIGrd8n1WR3CjiMs1OtPA6kBQSdqoDuuhqzpLQF8idz+njTnv94/o/48fQBsI6bG1frzakIYWOtViLMUk+plRMY5j0337M+sVWAzgVAFVqgiBfjrTGY6V5DqUqCh8xE5q7CAvBRDT1Jmo2M8F60+ejp31MVUAg6xRp6POj/W3ik2qnAYOVweqNiTiYyns3uz+8l5xceif6+1JZOepuVFsY2Temglybru9Gz2+d+3AJpuvKT5LjJnJ+BMF0P3sGW2ATh6rsJJIu6u7uWn4yr6rsZZYNqdEQW+qWwkT97SWLMa1xtsuNiR3+QKu13kqysVkXG4H/394AJwDoljAoFMTzOsbUlUkY6QrOsx6LagWGbhXIqFrRfDWnSMkE81wWy3pcgFETEzQIaN+xAjV/skriEvn2clKJ6c4DNKTiS/iLu+5T3UPOXO2kbKzPwVqlxhU0xGZ1Pq2RodxcdD2f0abxDz3g0Wx97q+SQUyHL/KmFznoAq7YvBwKc0bWAQXkc1FvmZ6XGHyxoO2JyrbzZOMumcj3gZ6Zxc4nUPXKPoKXDL7unysWj4JDOcJhSB+hGDKjckKvvLLeDFShiGN/JjptjQMBiU39yfOom3FOP/vM/S9QSF3WNTopdDHkSmlh7dZWtHUE/z4TL3fYmzT3iFsTj4yjeoP3+Yx51P+Hz/3jrBPpT92jRo66eNc3GuySe1DeaXPT1YWdIr7S3r5T1r/ojXI4tcYdNj/LkmB+pLLsIvvosu/ETHXLP4L+Brr+mJWjJGSSz7IzsH4UlQFwh0nY8tbkO6UsTnmZY7PQhOHvuLVCOQ3qaLfKU2LxfMTm8oDj/lbOxS9/1KKy/W99UmrkMvhardyA1Y8SqsnkPCXZqFkn7POOgOaIY2vWUs+L4PKd829ZApvZMyukooOwm4NhCvWOp33xo=","layer_level":1},{"id":"779d6806-96dc-4c97-8cfb-15a3d7855bd1","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"品牌管理API","description":"brands-api","prompt":"为品牌管理API创建完整的RESTful API文档。记录品牌CRUD操作的HTTP方法、URL模式、请求/响应模式和数据验证规则。包含品牌列表查询、单个品牌获取、品牌创建、更新和删除接口的详细说明。提供Zod验证器的使用示例和自定义验证规则。文档化品牌与型号的一对一关联关系和数据完整性约束。包含批量操作、分页查询和排序选项的实现指南。","parent_id":"7e9246a0-207e-47e8-bc26-b9d36ae6f2f8","order":1,"progress_status":"completed","dependent_files":"backend/src/routes/brands.js,backend/src/validators/brand.js,backend/src/models/Brand.js","gmt_create":"2026-06-30T14:04:55.154207+08:00","gmt_modified":"2026-06-30T14:19:07.600812+08:00","raw_data":"WikiEncrypted:hJ5e919a6La3vBIeYsDd9H+qoMODEBAlmCzG+cWkGRu78NaFDIi9qITlXW3zUicltUTnty1k0aVuLDmUbWYsq2DQkP84kMUHXEpA6OcQtQQW2b0L3hPiCNJb4ZQrqvo1LXEBjkme7wbSkleJI63o/kaE8846oeYE4AMgjWxEbV54Z95lxWs7OlwO2sCsNbqRc5wR/o7amP61MJ/lKWn8nNLrexqAUu50qeYGngpuqV3zogarV6D9+HK54itBZ/ncQ/+9a/lhzLkb54iR5IcRDOqaVetAPcB7FKWOIWyMYRgn/APHz0vu/Ow/jvrk2IP5VdQBYSzAFPe3odHJBhc53XJToyo3J/RoBJdKTAdLlVolDpTzg9VKOFbCd0ua1syW8RDmRR8CDnzPdnm2/KJn2+vYfnnvQvdbENcsjaVhdZ5GPJSf43fyJOJLXx8L2QjtqQdv69AtBDyTBsnmFqRUG6WKDHnA3WtZJZQ796EgvORbPOAecIhV0hLlvUyUJBOrM4v2ZMmc5RZ+ukl5ruR2PxQRNJRVk5f8BDNoylYtTWow9gb4r9ii7/TP7NjRI37TxCOkatlA10cnKD/24jXu6MRyocnYPVbHAT72NR7srRVXBcqMwlwiK2LCPVG71hlvmt7NiIB+pNCWB8s+qWHNpfV4kmmg9+458bGJdycQgVa4Mb42lqASsqANfZRC0xMGO4JM+Gns7T3vtPmAqjDJB8tZrkZ2p0dnvSBGpkYiLm68HLUpIXD2YldMCbY9ymtkJB6gBWWBUutBXeTQ++SyBn+qRICWqKCnVWYK0rfrYWa76HfOU0xfjpR9sVWFqXvhtkMBd67yy00PkaTUrvIFUq769fpn6KWDb99I8cHWnLIj556iiITHC7TpEqPSdbdkvssbuU0oj7RqG+UAFQWmP5fu2c2dBkaPoaqTfzdrJ4EufHQc+W2V0jZLzdrztAbbrXMIlcSdnIVZcM/yV5kGv89D64a9AfWx3h+b4uVFgMRhqFlACt0/36RwQeI2ZJTp","layer_level":1},{"id":"eb78ed75-b786-4b43-ba43-58a5ea8a23a6","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"业务组件","description":"business-components","prompt":"创建业务组件的综合文档,详细说明通用业务组件的设计理念和实现方式。重点介绍侧边栏Logo组件的品牌展示功能、标签页视图组件的页面导航能力、密码修改对话框的安全交互设计。记录每个组件的props接口、事件回调、插槽配置和样式定制选项。提供组件在不同场景下的使用示例和最佳实践。解释组件间的协作关系和状态管理。包含组件的可访问性设计和性能优化建议。","parent_id":"aa2583bf-2c6e-4792-b794-1563db547d08","order":1,"progress_status":"completed","dependent_files":"frontend/src/components/SidebarLogo.vue,frontend/src/components/TabsView.vue,frontend/src/components/ChangePasswordDialog.vue","gmt_create":"2026-06-30T14:05:00.059997+08:00","gmt_modified":"2026-06-30T14:19:27.855603+08:00","raw_data":"WikiEncrypted:mHLzoBKW/ak+KVdbda4A2f7qh44idx3e5sYOKq4y/WJWBVlKxvfsgrfR5kwEoK+5YZtxFpGvHzwX4IOH+DawEmhTwQMjQgMBCcPS53RmGaHOSgU0nKq03Su0/WZVgYDJfX5EkUz6h2rTPEOvq5PXUInOMgSH6UvRdohktfTAFkzFd7S1FTK58sVzdGQozq7wI1koDtSWO/SNpO4Ee8fMt6DTqQ90rTnMbEPKLcOrCDgBxPksoF4AwVmDiOWy6KkShCEKg5p6r82/HoJV2qfYNRVng+LVbIRQN/zKlyM4YEjleh+mVPfQG9melNixR3cJRG3orSswQpSogfZRK8Bo+TO29dCbmXI9Mg5k9sGaNAq2jbK1UKrydX+oZeXgh1B5BSCmOo6BWUzJqDsP9IX3WZ4YYVL08TTVYxPFyLEuNn34DiKMnez9L3SfJSnMIoqN7ClMC6kQ9CccZ6/1deguTXM4M/nzN1SSJuOFkMC4DjWRStbyZPfqHkfhcEG+DW7eaIurD4brX7qVwpAIDEp+HrF4YB/rpvFHpbpqob5nWRmQN6HzhmXSIBVTDNlvO7PuFOz5bARPKE7RKFrgOc2cFBVLCny0niJuaZXDcspCDEjkKMe/W6KijLPgVdFJ319wQi6WwIpUYQEwwRICmXrDU8UXRluSrnbmkI46ju45vwGnf4ZkUgPQhrtrxxqbDjr3wHgQtU9m0G4JzNonUKrVsTmom54Hx2VWzLxdXVlK1T8uszT0ZI2wtEAFmM+maRys0ZM/v6yzw7S4lK6LI76u9HmAWuPDpalJjO66kRoPPqFHGP12HnREYBCpiyzVDOsMKLP+nC9RJxVJyDqINcMIEQ/cvMqQYtNOCoV8uC4xqdOLLw69jWdiOw30qNnb3DwC64POHfTIjLTuZLWorchvBthVfmMzwqrolaR3VHUVgR/m5h9XEGlzXTqA6znkpkA1TjOTmf6YAAGAQ+Zt0IuWfA18ulyPt6eyriUUPdL4oJqBk5XXy45O8tb73hyaJ09bw6OBSdGlDdIsNotjVXwyfFkMEutcpmMT0v9MKTugGcSfEHSUwMnJkFKSB/PL+vn4zUky0vkjG6dUA1kerjwmjSaNZ7vkhCbbP8OFylL15gHQfCdOMb0AOCZTdEob06yof4MSnaXqMF6dufxLdbwOuqCfJUkhi2qwT7TxlBIB+CQ=","layer_level":1},{"id":"f96081f7-f508-41e2-bd45-a5b36a1ea114","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"环境配置","description":"environment-config","prompt":"创建环境配置文档,详细说明所有环境变量的作用和配置方法。包含数据库连接配置、JWT认证配置、Redis缓存配置、S3存储配置、Meilisearch搜索引擎配置等。提供不同环境(开发、测试、生产)的配置差异说明。文档化敏感信息的安全存储方式、配置文件的版本控制策略。包含配置验证方法、常见配置错误和解决办法。提供配置模板和示例文件说明。","parent_id":"a3ddc4e4-116f-4781-ba9f-17c85c85396e","order":1,"progress_status":"completed","dependent_files":"backend/src/config/env.js,backend/src/config/loadEnv.js,.env.example","gmt_create":"2026-06-30T14:05:12.313659+08:00","gmt_modified":"2026-06-30T14:21:11.825296+08:00","raw_data":"WikiEncrypted:mJFb0eo+82adP8NAeq7d4IIa0ji7BfhWd+tPu7r6OpR4X+XfqeclnD20MHCexQtgFzeY+udCFgwSLYPDydN5R8BNpcJBbveVhePMQWOVKGSx4DICe20Yr3Mg9nlLB9FGlGjUc9Y2pTff0xrwHFSfFG9wRb0k2bAg/j1gbq1g3pZxabmYCBYxTPF026U732n/Ksmolpy1y/q6x9P2vurlaRpr34CvTfVkEYogh6YTLfmAhzHfbr4sP+eShuvQDEHYmhRjzMwhYz18NBjgpMKUbE/pndwBftVShR24efIAv/BElGFzh4ocX9Ye4v5tKSBg10FekOLemFoJ8pOCG+BGhsRKs9n51fBFLOmmhXaTFC3SHhG9AITLshuN0sb92me0NMFI7NrhNuNKzc2UHDUgDyF4Vafg9YZgHju8PxlEwOs1BaPCOk0xYsp3DW0oVsG+AwBQvlvriYibLy7tghBmipp4c6l/pSiJCmGjW0JwUul9lVwbeyMAjsVBJp2ZXwzI9IKB/NXvEH/JyDft3X6uxO5VqdujNwKyJ8t8zvrApsSX4vMXO5+2SnxXAGudlLDTLmP6ozej4/197Za0ickFHWFjLPGNZDXv3dGVJfV+YiyL6wDXurvpHfhX09eVn4DP5NLwrzRsggp5XJR9ojLxzMggtxIbLdbx4xTBkRXRiJflCuRSm12Jrt6+U42gs8umQx0/uQSOJX44A0jxVep0MZK5QMIH7oq4jDqBV685QyNKxM4+IDM/E7zWDh9V8U92lhe3mOm4mqolgFJPfEzZaFsi9hOqp+9ZaAPAlXj3DJCXdSDfa8hNtfgjKJ4UgqP/2ESnAZhrUisYaQnfAMUBQKau+qwn+CnUsXOKcJkQNSoaXdvyBbAr18gNn3wK7A0viPPO1OCMf9E0Za9ghsyaTQ0q5kZuNukjWX1iQbG9QZ3TTkxZOzgSpuC9sndRmv6DY9AWL3TaupI10Ec52w4hOZe9TAcM1iN38mHBSSAf8r1qp1rGeo4bV3v8ONIokVkJP/lLXskyXy8PWwyNyN6yE1CfFAh5xxnrjnHNHYgYz9c=","layer_level":1},{"id":"92f94141-482e-499c-bbc3-6101e70206ff","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"品牌模型","description":"brand-model","prompt":"创建Brand模型的详细文档,包括字段定义、数据类型、验证规则和业务含义。说明品牌名称、描述、创建时间等字段的设计考虑。文档化品牌数据的增删改查操作和相关业务逻辑。提供品牌数据的示例和使用场景。解释品牌模型在系统中的作用和与其他模型的关系。","parent_id":"0bb34dac-0e1a-4cce-b41d-0194eda77f79","order":1,"progress_status":"completed","dependent_files":"backend/src/models/Brand.js","gmt_create":"2026-06-30T14:05:22.62391+08:00","gmt_modified":"2026-06-30T14:21:29.097262+08:00","raw_data":"WikiEncrypted:MpYke5d2PXdqtxI+drCrLlbJ7FPFod4dQS4C2jIEy1Vi+RWBmbRp3cvvlClyElpjY248hN/8uxj/oZc1cBilbx0tRCgx4EXGhbWT0bKPV9CClQk3EyAIvWkjw2qBl1GwoIZaoQbh/lDf7iSv+CjumSc5MqVDv7FeDuoB4BYvqSFuX6/sw/v3wTqRwaKX6wLQyS1j8HSrt/0T9Q28vNhc5WBAPNUs3PzlHBfFfWZpG8H8gVCRsqX5tOhfgNie/doVHGT9Gl74pC4sOjSrm4gseL4GAP1i/34P2j8wpFWOK0PHIrEDdLFB/nl4AmiN3z3GOflyzR8heQlB3L74kyUKX3oVFyL8nei3KJoV9pUbYJJztTdKAUC4USkpOWF2LYTf166CAIIyLuvpGUJmRkxZ9T6fpTbIZ0tWkizC09RvdiaDW1+cjDQhj6Ij23KebNfpMuYYTUkiKJPqASQ9/+A7uNZ43ntzVnopgTzXzDun3QBC7j4m+iF5DLSWdqS3XyRpanF50CvdYz5Px9oLvusDbKohVWQ6zxGf+ZZTXOL5+eTO/qQ3TKNuJA3mkzSqU/zzIodqLG3oFObroU6JLMHgFwXp2OggflULj5njivqDgj90U47CQExGFS8JnCl0dPuxiblN18wZf2ANfUg0IvnU5rAmQ/gz+dtummkOEouqZxCglWdsNKdTIkRWEkDBecIe9oGWuMX8RiWHLnL/Y3EvgSPRu8DkD/n6hbQQPpIrGV7Jf7CIPfqWg8/6VZose+vNR+n9JFdOEU7Q6X9OK8lAsw==","layer_level":1},{"id":"1e3d40bc-a833-4f35-891c-9dd96f09a1a3","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"品牌管理","description":"brand-management","prompt":"为品牌管理功能创建详细内容,深入解释品牌CRUD操作、数据验证规则、缓存策略的实现细节。包含来自实际代码库的具体示例,展示品牌列表查询、新增编辑、删除操作等功能。文档化品牌验证器的配置选项、参数和返回值。解释与型号模型的关联关系、缓存存储的使用场景。解决常见的品牌管理问题如重复品牌、关联删除等。使内容对初学者易于理解,同时为有经验的开发者提供足够的技术深度。","parent_id":"08dd4c40-3fd3-476c-bcca-4c8687a8d863","order":1,"progress_status":"completed","dependent_files":"backend/src/routes/brands.js,backend/src/validators/brand.js,backend/src/models/Brand.js,frontend/src/views/brand/index.vue,backend/src/services/eqCacheStorage.js","gmt_create":"2026-06-30T14:05:25.896897+08:00","gmt_modified":"2026-06-30T14:21:25.623188+08:00","raw_data":"WikiEncrypted:MpYke5d2PXdqtxI+drCrLid0YsRsuFzxrKFl1UH2EDILD+4NmryAJ+q2oYZ42eaiz44GIk6X8OFlUAZ3K10FBvMN69Ne06Y6iVCy+4xZdAsUGmydXuI9LOupHeDUaC3pvkOjqp3EZ4xOBXToKexD3sJwOHDJUYBWddck1pKB+BpUmpIGWGulvtKNd7rUuuNXGGexSoT2k/+fD8cfS96290Who+jupUypdef/VVLQ+SMm9fS7HoCYxsUJ9tvcR9HLpcihb2gc09v40WXl2RSPF2VOKqtBB6T3R/UTcCJV4p8ISn8geesslxEYyvMaCyHxZrZvjir3/r7oVAAh3KAOE+Nx4JTX1AQd1M8iUlzVaup2ZB8XvjcIj9/TKMdIL3PhNerpdIgsAQ8lwCNMPriXoMoZx0MzlaX5d0D7vEbujs1W/0zu4BgcnCjJtUdvCB+34DyEDjZVd5vEPpMDJyN4KZq0V2zz6XEIXr/SWlY7yRweOhgMAw/2UmV15PZmnHQQIsspcBtED/4LZY8sngC1o50KUM+1PQNQamViqAlGCHXBAR7Cj3E+QvjOBSfAVtc7OPeHToJFTO7XdM8xdMMjkRCdrmB8zJ6XSDish3MLo+tv5fNdSlOF8ZFqklGbV+DaphtWW1k3t13oFWP+IjkbW3xwsA8akuLoG+cXEctO4Uq0VFfoiwI8sfioOV/hJo6y06miVzTDvjdjk2vZ50V8j2qsw3eXt2N4bX4b2I/BjLZzItZdmHID3ExYBmo+VjPOmBXQGuZdhG3wTGSRtD7Phhsd0G6umdHsRVF74ih8xOWkjG4+8dj9F6mnmWm7nn84+bv+Es0fsCjoeqagYkgvIU63p9y/FEcjSTEEdHqZ/0qKXA8S1xyEHzPMmW4LjN8jwyNryVJPl2LOI75aXNvdeoMbfPs9qH5u6SeX8rw6TvD6XwAb28N8ehKfUVwJFEY7PkCn3ROnsjFquwaBd+DjPpH3CY7TdpGqGBuP5a+0z72JVUfnjXKn2oKTR35QRVAhdnXk/st1N3eu8SXBHgx2XHzEB4JAnu1nWqNOr0d5Mn9OVFDqOJ6GD37xh0oQvgefNcxCxgURt08010ZPDFx0TvUMLh2g+plGTyUqDgekPLtY93lC9TEtV4x92OjUub4JRNaGBlHVTUaC/pi2JUS/QYcfOPvjYMa7TgyxylESgrt7jf4+lZOJzAOmJSKScT22E+S1o0omg1Imd7YyAt5QFJwBS8Zm25xjGROuORqURPWRYfToJMKQYjB905rLMlW7JS8VHBVaqUp6R+S4827muvsDVj/opXiMkSLPllSH2AwfVfT8AASFSzz66kvjkmYy","layer_level":1},{"id":"727c25ac-db22-4b34-9486-6fd6946f64f3","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"标签页视图组件","description":"tabs-view-component","prompt":"创建标签页视图组件的综合文档。详细说明标签页的状态管理机制,包括激活状态、关闭操作和重新加载功能。解释标签页的数据结构设计,包括标题、路由信息和缓存策略。记录组件的事件处理系统,包括标签点击、右键菜单和拖拽重排序功能。提供标签页的生命周期管理,包括组件缓存、内存优化和性能监控。包含标签页主题定制、图标配置和动态内容渲染的最佳实践。解释与路由系统的集成方式和状态同步机制。","parent_id":"eb78ed75-b786-4b43-ba43-58a5ea8a23a6","order":1,"progress_status":"completed","dependent_files":"frontend/src/components/TabsView.vue","gmt_create":"2026-06-30T14:05:28.623089+08:00","gmt_modified":"2026-06-30T14:35:27.886573+08:00","raw_data":"WikiEncrypted:IBinykhefIyOgdnJDAiniV5kOUee0Xx6UXvrXwmKcQxxhEd32Oxf4/sXerzkozjdwLiRd78FiQyVCsTFnq2ZoJjCPvvphk/28Fyp6jERf6Sd62RGVBf+T/ddf1qyYMGlXTIT63FLUN8lGKH7HE33fo//zcEAInyKuCfcAnUKtGhK/6GYF5OQOK8iu3hTREMVLLGnL+nviHGzi/OieF9xzRK6Q7v1xKhCFPVw7G7pKGvEqIAXkIuI+gtduk+6amkK8DTLEeFc7kADsRYiiGxbnbCwDskX4qqKASfyrXfwkcH6erxtW03zOc0xXxRooa98xza6bb0a8AuGRLxpr39QpjXFHHSkoQOfBajABJjr8Dc2g4/Owp/iz3w2DmuHDD3n/B/iWYgr6mvt3RyCN7WugYmLcAHydpYFY03KrqgMoG6Z++VclV/+iLE/hhCWVXZwOvZExFa1/Nm3L/kQ+lvH/Ok4DwK2s2mjZIJfjmMEbvvPBDip57GwOAh/DEUOz8xDHSc/z3kHBhO8c2gfI+QxQTDodO1T3sDQNvDzNXnOsiGHEa8MFXwnRqOOJdjXpI/V0SeRqH+VF2QLUL0H0zkIRmUfKDToJpYdryAc+g8C/437bvmIINo0hk9dNxyk6OJDyil3WbGVKZty2trCmX+SSkvThP1sjhsXb3A4lCaln+NxaFM2pwSzOI2FrAI/3udagiuCFzkHXVAbL3kW/sByyca+mxh2x0XmZnIacn1rN3mzAbZQw0GomBv3D9BdLhokGDFcRbw0wBF8/CKZIQ2LXwJSliiHSUIxZBPFwOlfuDQLwPZwafFjFgx/iVezVLOrtprdilrMg1icikSwQ2uomd5k/4o4X2RhtHBwVEBnng/I2OnKpp7hx9jW6qnRgl73qL/weon9zfXHb5cIhwqTENIhOakxfLNkPuVZUK+yV5j8hhnf4TSFJur40kvfWrFH8ooRZjxZLVRGEqph6t49E53tpiLKAnc7PCkGqlVdBstHvud1Mi9WyXlP8CHOoDFinYsPol2IYws0Wz58mTUZesjH7Ovtl/r7VUGNRE+V5VOhW3H2ws00vNLRzrCQfstfuwZt7dDBHlJziXNvdgav+pfU3tAHaonl7W+6IJAygI7B1LZ7oTRxEV4fl7vl2G8suLJXZO7UsiezZ0gxqvkzvWkebI3amABggi6vI+xrlr0=","layer_level":2},{"id":"c8151791-2f8d-4e1e-8139-b0cf921ef002","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"登录页面","description":"login-page","prompt":"创建登录页面的详细文档。全面介绍用户身份验证的实现机制,包括登录表单设计、字段验证、提交处理和响应处理。详细说明JWT令牌的获取、存储和刷新机制,以及登录状态的持久化管理。记录登录页面的安全措施,包括密码加密传输、防暴力破解和会话管理。解释登录成功后的路由跳转、权限检查和用户信息初始化流程。提供登录页面的错误处理、用户体验优化和移动端适配的实现细节。","parent_id":"f00798b7-c49f-4260-b9c1-d1ee413b030a","order":1,"progress_status":"completed","dependent_files":"frontend/src/views/login/index.vue,frontend/src/api/auth.js,frontend/src/utils/auth.js","gmt_create":"2026-06-30T14:05:55.602587+08:00","gmt_modified":"2026-06-30T14:36:20.147272+08:00","raw_data":"WikiEncrypted:gVtFIob7WtU/DhLIhhPauHe+OU+v+Wmk6re9yMmllcXpiZ1pp7hfIQRNzw2djMi3kdxg1YOiyCoxBtvZze4FF6edaCgUjs2MTu+j6AA0Iy0cXORNHgcTdEiY29qq3iIiQbohHFi2yVwhY/RbmzBe7lwJOZe9tZJo+9aBXmZXSPQue+eGhVi8nfNwLBVZ8kr2w+IM0Le/0DzLcsNPWWHKW9gEnqOL9qJ2uRnJOeBfYIQm/RFJj6Arc9HTRD2rHKpLgeXT0/7uDlcrcVOeMQgI0MN4e5IsSMOS4i0V8i0QeaOnTMFe1e4ITmzsKBkTM3HbZ1l9Tud2Kc9vwBSxc71qfQSzN6PU2Lg3Aey6Hyu91q0cx/QlQLD9hjPLUl+/LeHHG0eHqrgL7KtiH7e32lisXRG1TYhCgOaOHWCL/heEb3WzujrCLosb3D7MsF/wENRWQGAQTgULpo9tmTHO5PQYppvv0bzI29cZtI53vlNiklobVJr7tvhTy/Ogd57XQ8bYMtnir8CxJnzDZcTSiyutWBKqV1X1lZOAyG+kC+aaRW/C7OYV4ek9b4dwf0XRsWvwr9GNgjIKC4IvOT+MYq8f+lbUllzOJdecNYg/6EvBmc3lESxNAVHxcKCYkpsfwV1pkQKTA8mk0s+6LysznP0NCo0/Wkd7s6eyrR5hNxhX1dI/D3SFOxC18N7Jb1XQTy2olb3oNn3HdurobkjeMAngSA7nxtsFpdVcdX3SqxyouWIMYKCNmLQjxKTUrx7OWx4ylXm4zZnlvaCsuj7hDBp/zdcCNQpVDN0sTMyI3rzj3Xnd9ULyRuTFS7dJzarbaHqSuN4ZVx3pRYSNWmOrrCKKAy2lG2ee8ojCkWtwcykJh9uC6Isdq+OzIY86g6fwtww3sF0b0tl7sLw81MfyakQfpqI09OHCiDHPtmwU1xVSJzriX6latrVG0pN2XqZ5MRWQy7nrzoCg8M6UHar+01QHp7FtE1F8IB7RTjIWNmVxfhgG5GBHk0+X39/mt+u9MCzS/DFWBVoXj2BXOJaos4NKYh8BDbTHC+HrYNlkD0wHs/yly/mlHyPrzMrv6n19GedMYDqebhvi0p2vS83tSPxoFf9tVJ3/0yZN3JuwAPQdGls=","layer_level":2},{"id":"70ba09ee-60a3-41f9-bdda-3cb904cb26de","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"系统架构","description":"architecture-design","prompt":"创建系统架构文档,描述高层设计和架构模式。详细说明前后端分离架构、MVC设计模式的应用、分层架构的实现。解释组件交互关系、数据流向和集成模式。文档化技术决策、权衡考虑和约束条件。包含基础设施需求、可扩展性考虑和部署拓扑。提供系统上下文图和组件分解图。解决横切关注点如安全性、监控和灾难恢复。记录技术栈、第三方依赖和版本兼容性。说明架构演进路线图和未来规划。","order":2,"progress_status":"completed","dependent_files":"backend/src/app.js,frontend/src/main.js,frontend/src/App.vue,backend/src/config/database.js,backend/src/config/redis.js","gmt_create":"2026-06-30T14:04:20.637577+08:00","gmt_modified":"2026-06-30T14:08:09.130141+08:00","raw_data":"WikiEncrypted:EPw1VhZSv2AMLpYzHbCG5QXmatSKh1iukhkKRz99kcWlEvnOwuqXvA4ZgQ6tN+ytovQp8yiqJicl84VZMQ0QFUpSuhdDKqqegwHVHT8m5Qe+hOlpJtwBJv6Gyfd5UzsnMpeYFRNXR8wbkeFBADir/QMuE5xA4w5GwYNyc4GbpnELQTPwTHgWWbWNxlgq3I5D9TCdlGhsRmZA6sOK//txRwki0pH+W5zMNr6nOdulmNq6y7jVc1uB2cnWdogeOMuaAeFHEES4nLloLAu6fZBcuZViwy6PppTyAmckkNr4DBsfUDF8AWA7Tc7/u9k2CUPbxxXn6EzWZLxfzJ8g2+MS5AGoHvdi1/l6Obw5LKcFw4fMrrziZ69qX8Y00Nb4OGTY7Ba9x8nTUpZR+ZQr8C2+b3ian2p5M/jX68T2veatBUXJdORnAdwyu+gsMTlFms2BIWpmJja/SPELEIIsiw02D+YpsgCBoWJwJytlJH/lNURd5C7p6eNTpZ8Ueot4a9kE3/6KkmeteZgfTGCtJVjgtLW3hCuAyhA5zfsNbKDGxNKwkAHaDmWR8R4jKKhAC0JCdk6GSYSbiXLYZG0yPMpDooJP8w3qo5IHgaintV0p4Y+wYwdLe0UJ74U9gCWnfTrlo2R93/rrWiZqe7Wwovt7bAEMnTmtbaWINVb+tXkN3kLfbyjbTHDxjIOc2AAOnFVRGIJpMt50+QEi5TYhA684wr1/vQOBZas07D/sUPjcvl/msZ4kjlgE+YwYMbKPSf9j302dqERpSJODBX9TN2I+B3pRvT8ziUFXF/xr6AsE4DXdyvCy/cCKvmIEp6gyrY78oSE+YwHefC0Cx0ltAwzDpm12AcAoA3YD0TwNDY8zH4cwXHu79zttcgTjZQaebPwhD8L8PbozbJ0lQWo8Tl5Onvbp8hOw6U57Z1U2W/ge1JupnAJt0tMnHek6EpKqkt0z/J2d4/Z5B1JNppZlK1nG+pnKNEfNY4h2m0ydoCRJCad5ccnFJYXhF9XP9vsx0RtqQoedeyfH7X8//4Iv3nVza2b7PZ184/TnYNqUmxItz3yos0ir0gAc+54SDzg0aJlzBs86JFQ9fSep6OJ44sUHkauivK0vBs8Wij0TSI8wUf43PFgjey+c54DZcvXNfsD1hh3PNHe0CRN/oMidSjGTPv6WOJIzp0KnAOn8GXb0kkhk7bpk8eYfe/8luyjlDyaA8QOxpZLfUtQWXtGv9+W4bxOtq8JG3gDpTI/PJ9UxhamLc3zHEgUg2FD0maAM+FBCVu51P66sXPu+fY+bIxalyw=="},{"id":"b47d7f83-5401-4a63-ade2-f087a2f61987","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"数据流设计","description":"data-flow-design","prompt":"创建数据流设计文档,详细说明系统中数据的流转过程和处理机制。解释从前端用户交互到后端数据持久化的完整数据路径。文档化API请求响应模式、数据验证流程和错误传播机制。说明缓存策略、数据同步和一致性保证方案。包含数据安全传输、加密存储和隐私保护措施。提供数据流监控、性能分析和故障排查指南。","parent_id":"70ba09ee-60a3-41f9-bdda-3cb904cb26de","order":2,"progress_status":"completed","dependent_files":"backend/src/models/index.js,frontend/src/api/auth.js,backend/src/services/measurementStorage.js","gmt_create":"2026-06-30T14:04:44.766251+08:00","gmt_modified":"2026-06-30T14:23:25.133463+08:00","raw_data":"WikiEncrypted:PGdHQOrMWxh6s6galmzx6wcoMdYGcfWJlB+MVcSBUNBNKtizTGYmn04CYqWTHq18bpIkVhxruGAwYTOr3jZ71eCHIhmHK7mDbe3H2F258BwPHLGOZJH4+7MFqH3W33roxV3A0mBu2oaH8IeI2N8avzXHaJJypIkSAx9hq3JuRVRCDIeKY3X4NKu/U9NptL74JQm6A7p7Li2mkZiBFKle+4PW/yzuWaITp6kplQfvEI/KpRhmnMRsG3jGv9iyUUFWAGQatGlcpMa3GH4QFw3sBvBajjhTtLtzUczf5Spz1O9WdUbgYOPCpDQ77+Bihsdcy9JfQp4lINGc9Qyfb5uB4DQlnqYiPlbr9a3dDGb/dU073dMLOTbly0p8fq9pG4W7N4v/Qh8PKhHj3MylSLdIGBJUnAVMl5qxvwzxjojm6CXeNAkwfimh+yqf454XGxOTZIAU9k2R2h8YV42MLqjA33Hx50dU7ywv/LpeoPO+YkHYLdJWVag51oeU0dV76GEofIYoyk36dpcxNf9tYMnzovlJz1d32pHkZiEtsRL0hfFpnpiBClN9Eb2M7eXf3h8covZFJVsAMVZ9mruy2FWZoE+Vy70yUrtgKhd+OG9WissVZfI/yqj0Yt2Wsrr1loH4IN2vTs2O8PRfGR+udMBY1TGPS+H1IyXIEa9Q8MGdAQ6PdO/m+9Mecxv3VDjgAPF0c6iiLgP6TWteu3Z/Q9X08FkR307C0YSiy1/W+edhxIveTqz9IG72msKc9KnHpMPW+i/DnIp8sMz0xDt1HKJeWnmP8rVDjGddCRuMdlYI1JTCfO4D+UnLhjf5mrmxD4Oto9HiMMdaM7vcYGorb90OikVE7+bXXS7QBK1eDyLElOaFNMH+fXRZY7dX05PCWloKC0wLxKcyNwDyheNdKuQfCQW/N9u3S+jQqInJWi+fLqqQk1kZ9a8UaYcnCudScV6lmAOswt3fe/4VQQn6BPnOBma0DHTIh046TrqUeM+vxlM=","layer_level":1},{"id":"94ec54d4-0aa0-4e58-8e63-5ad6ddb6edbe","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"型号管理API","description":"models-api","prompt":"为型号管理API创建详细的RESTful API文档。记录型号CRUD操作的HTTP方法、URL模式、请求/响应模式和数据验证规则。包含型号列表查询、型号详情获取、型号创建、更新和删除接口的详细说明。提供型号参数配置的数据结构和验证规则。文档化型号与OTA固件的一对多关联关系和级联操作。包含型号搜索、过滤和排序功能的实现指南。","parent_id":"7e9246a0-207e-47e8-bc26-b9d36ae6f2f8","order":2,"progress_status":"completed","dependent_files":"backend/src/routes/models.js,backend/src/services/squiglink.js,frontend/src/api/model.js,backend/src/validators/model.js,backend/src/models/Model.js","gmt_create":"2026-06-30T14:04:55.155975+08:00","gmt_modified":"2026-07-01T17:22:10.388756+08:00","raw_data":"WikiEncrypted:hinoA9w2BNFayyHNiFt8gmTbUVUOzWUcXGR6R9te2oFvkH8c6kQ5iIFbAKknf/qo79rliTtO2QawiRHdi0gm/CRBXlJ0YYHfSJN+MrPK3gboTbepraUKOBH5bHq1pjWQLd58TMneV9nLD8qM0wi8KxeEYqjkIRyg7lg/2aNZVGDVTPfsEj9spm1d5wlYTn64in5t8zBHPHtFbh3EQksh3ywQTYOLH/qtKL0p4P1Rik+t908XW1TqxoQa7zveHKBkFvcw8h06giaCLAcjlEyaAkpZJPvaqfVi7rSe1PxnYMg9LcRrNryzmnHONt7EM3TStOa6uuTCNpwagQlGD0FYz1vF3cfPYIazFJKwGsgylrI/C0dVGf7C0YIKsBjJ91jwzPmacR/F2cJ+MPpdqwsSy1Zi7Pk4qzJ+HIjgtzPt4Q+jdKjQh8R48m/m/kPBjmMFGfI/TqtBG/QCr9HO4DkvLOXm04VFs6Qh2XVoq+pol7VA/gMoUJfjp7d5TGH9hPyqa0mw/7FM20x5veWvuAgR49CaEvOxKgZ5YbXz8fd8C3Zi90FlQD22ntkFCbngm9rXMgdlQqLDcpzH/dxPGGSwfmzaFFY2p9MtN26GUQMdywzRwb5c1kLPYvDp+JNFFwN6QLH22hEU1X1scU48lcKtlKEoOLtJhB6IMacAVojkx30mkAXyLxAd7x6MtAuF8pEMbKTdrvN9JLkTVNGmC6U3Hv4bkaQ6qkvRa71+Ua5r9A9P4rdtb81BlOMvTLTh2zpy4HsnEiCDZt2pfesKF3jxKRbypYQPcOfSR+pkoYcpJUHddhDLKhNmLbvrDPqO7ojol5tT7FouHCBA/8GCf3ccwJsMG1iM84R7MF7jWrzHse1z6I2K+OK3yVGrkH4tvScKKM4LkcZEZqvMGTbh7Nx1wF/T+NSWeUfOP1AEcLflsn1E6JOIyuzB5gX16TT6hWIOIikzlh5E3c8E99uUViVI2ZiikeypLzfgrM7MEDIdq6eF8riFzf9QRLXZ/1A/NmhknKTdqRIu5HAdiWGnRAzIxHEvyofCtiUpEGTCjebP9EWscm0S1vW+AEAc4KU+akVypAKt1ypF7atKS3in9odTSw==","layer_level":1},{"id":"f00798b7-c49f-4260-b9c1-d1ee413b030a","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"页面组件","description":"page-components","prompt":"创建页面组件的详细文档,全面介绍各个功能页面的设计和实现。详细说明首页仪表板的数据展示、登录页面的身份验证、品牌管理页面的数据维护、型号管理页面的技术配置、OTA固件页面的版本控制、系统用户页面的权限管理、分享码日志页面的数据追踪等功能页面。记录每个页面的路由配置、数据获取方式、表单验证和用户交互流程。提供页面组件的状态管理、错误处理和加载状态的实现示例。解释页面间的导航关系和数据传递机制。","parent_id":"aa2583bf-2c6e-4792-b794-1563db547d08","order":2,"progress_status":"completed","dependent_files":"frontend/src/views/home/index.vue,frontend/src/views/login/index.vue,frontend/src/views/brand/index.vue,frontend/src/views/model/index.vue,frontend/src/views/ota/index.vue,frontend/src/views/system/users/index.vue,frontend/src/views/share-code/log.vue","gmt_create":"2026-06-30T14:05:00.060248+08:00","gmt_modified":"2026-06-30T14:24:27.142952+08:00","raw_data":"WikiEncrypted:olK3r0l78uP98ua79qDx7UWSmXb2E1v0sVKrAVzGYuIJHPAueEFJ7X5N2BSDrAuja5b8BTuELO8ubSNrSkgP/Z6rORQB8Z8doMfIZES0MEg18aBljdAOxOLzrDB089hOQpIseNeWKR8TXhStfC7+I83ha5LZRaJMoo3SuuqIzp3RkRQ7Do5v9wPCFg1iCbQYxnjwxm6zBRiSnHN3K9VmnziSCPrAqvYi0G80OkTVJZxFtRGsHzRduLx92WHhDfqsUqydlWWiPmv8K5I43pyYLMEgtXwCTysGp1UWrivekxLpUEkNAc506Rv8F3ZlL0VFyZUPT7bbz9ya0HADXvlAL2I0bLkJFkjPSUFTni2S4GtLHqH4cWROJC9y1Q9blmamNoYY1jJmJyU/NTSMC98Zqe86Efc6uTBDtHxQQX7u47icPzu9gG2J8JodxRFiQ+sVBNhbDm9gZUjKy+a9zXMBxeUGEi/CKi1o9KLgT7+q0gYw+vPb4NHgptzD95TSruRKHAi54z7oxcpJxKyvK170w75cV1bNR1nPVFvWJRzAVB/KKwlo3aLH5aXe4a27+tlLxjJ+pJyZxAv3WxfYqBc7yQQ1sROcMgpuAY+idES+OB+qeRzI2tSm39VjWsmEaq8xxLzlTEgOr7lyZnZ7jpasuYj/ZreCaq6541xuVsJoho8ADkSi8GB7Q/aWZl+UxNj0y4S/8MV8O68/sTSPREEN/QU6DMQsEYODNvz/U0qrzaIU+PBXXbfCJnxqAxYmvhELHwuy9/CUrSSaKC8ZciV+gtAlaV3Yvkfwx+855UxirdWJnEuk4lGX49tVCQG7VYE71gimwTKSsYviOMgmsyzZpUe+UN7UVNjGdW7ttWNYVtnaYua5cmOjtLBUGOrMwvlSeoxkJ5KRXf5Oa/COdfpa4d0fW0dVAtp1T0dTZWSbOk/lswh1YQUqgXj6DDw2qvpyIj2M3OzlFScFjbYizbh3JWD1vz9XxoQZ4C/G3nyi4PLVynnzu8hJrbBYcCb3Vsug5907YxaxmHr6zx+B2O+KaeiBw3vRa+EuQO4lJBH/diEjB1IKlCxZu8j3jcHMP+NLdTEKoAHodIpqhq9SOBjnvrWxzScLZDoU38ngtUQ2H7mSOif6BesJIxuGgMu8L/FRZr3+dLA6odcCvQLRAMXJAtmqmMPVEwJMQufl6WYvE4ZiIZ9sHvMxRAU7vS5cchHtzFte9/luCpsFv3X4xHw5hOmicjsJXCXIH2gXRoD32ZFbnorAo6WQ78LcrZU7jezn9PshnFoSmHH9FkYpd0Udn5J+uubjgRFNeF7inWmeH559LGe5OPLj1eZuQAcbWOy5WCMfC4GshplBJBu06rqv4nfGiMgtpER1L0lXIkxO06qqYWbcHRP4vaOSvprxHyh9iSL99YknTBb32b+dngtSCQ4Y+uxBZ2BOgLbu7KtS2wrf+611BYlSy3j9p7bpPZOxoZYQkvn4roAPOBpPa++5ezB6xMugHAWqPH2kkxrL+fc=","layer_level":1},{"id":"00a9d595-dc79-4ca4-8264-1c3f4a200a28","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"监控运维","description":"monitoring-operations","prompt":"创建监控运维文档,说明系统监控指标、日志管理和性能调优方法。包含Docker容器监控、服务健康检查、日志轮转配置和日志分析方法。提供性能监控指标定义、资源使用情况跟踪和异常告警设置。文档化服务重启、停止和重新部署的操作流程。包含备份策略、数据恢复方案和灾难恢复计划。提供运维脚本使用说明和自动化运维工具配置。","parent_id":"a3ddc4e4-116f-4781-ba9f-17c85c85396e","order":2,"progress_status":"completed","dependent_files":"backend/src/config/logger.js,backend/restart.sh,backend/stop.sh","gmt_create":"2026-06-30T14:05:12.313816+08:00","gmt_modified":"2026-06-30T14:25:08.613907+08:00","raw_data":"WikiEncrypted:HL3VqGjXq8A3aGeLxAjVPqmSWC8Q8z+JISjcpFTl3Rl0A9XVAWpupiaS7EM/Upd2tazZmC4eQGSkervuf1jbMC7w061CAmhFQqOU+czssHD24JzzCW/dzhPQh4OdveHL1lgCBXcR5/EbIuduJDuUmEwJx8aPYEp49Cq2bRpWZ2xXxQ9geEW929vQ0xrspQFu0M2MJkvVnbxR/C1ZA/D+1XfRFtbxiW0x31u8IH0d8nAhLDViHT9HOYnEHPGBjRiTyLhwVlOqUTDNsooW+CtVaXaVamj+Zsvm1Qzfw2XF6Iwkggg0GMA3YkqEB9DFwhzkplZ9FS408azxIS7d4fS0fFXf5diJya6pNlSuA8Iq6y7g4uAB2AiIZJvG94W2dwa7z5qIY979LwHB4DepnmSDztn7ZiE5nt52n+/HGNVea+cOJHee4MvbrnaM3omg7CWLoZG/dawr+mNCxykZ1vRzxrqBbNIvQRMJ+HpOfKUKEho5u+FPTs3ukPlfGiElxzlSrtsP1WAcQFFsET8OsCEk5x6IUkuh1g4u0mqPQxFDojZEl0/RjIoOigi3cHQ14MLApz44bkfadHqnpAuoznkln9hllqFREbHcGqNbIgHnQHRzz4Be2IM/7wIIJIiGbHebHoTXQV+aHxHOWNV8sCBn9aUZRBa8BvZ3UNFtcqEZD+wrKlf8XoKsc1fvfavpnUQ5viCSMfPMK7jwDTGIrqLhf6PL3ibkfDqDFVvIx/FNNdYFfkX/8Cxs8zF79FyeiYx98Yx3rItEZJit0mVmV0SQziiDqTyirtN07F7kZBFSUjWFi/WfFDBGMw+60Qn5WjMW9AipX0KdrVuf85oZIeT3udpIrRencXCwvchZRJU+NJpAqr/6K675EVQ7ybxH7XNUGXCYyCdxqP3nqDQkRqxHZxWsWginc3n4kvhE+zpfTUOp6m5HsO64XllZ+wohWPyjrqJSkEw26JhJIH+eAL29MliX6XBYjvlgT/Vl+dlQMn69VEgVXBBA3BXTV7KzWDUKEtEOMqP6WNKauLQTYqHt53vRnAZvBL+x4IQlA2rXWIk=","layer_level":1},{"id":"72a24a80-f221-49da-88a8-83c0f49f4e9d","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"型号模型","description":"model-model","prompt":"创建Model模型的详细文档,包括型号基本信息、技术规格、参数配置等字段定义。说明型号与品牌的关联关系和数据验证规则。文档化型号的完整生命周期管理,包括创建、更新、删除操作。提供型号数据结构示例和实际应用场景。解释型号模型在OTA升级和固件管理中的作用。","parent_id":"0bb34dac-0e1a-4cce-b41d-0194eda77f79","order":2,"progress_status":"completed","dependent_files":"backend/src/models/Model.js","gmt_create":"2026-06-30T14:05:22.624097+08:00","gmt_modified":"2026-06-30T14:24:50.789071+08:00","raw_data":"WikiEncrypted:o5cr6Bo4m333A3G+lRdTTxRACU8j2qQjGF3ZvWCBRJVg4ygFbHKJwjRB8JHwTktUDQXcECHhFbmE4gRs0t+1cAwN3sdIm9MktHpIRSSYNyl8It7CS8c7Kbko+KOWDiia/4OYzPp1+Ghybtt7VK0zyBQN81qZaR1/UW5X18q6Nd78fsI04PQzw6oOqgto+wxHPnrvKDggDY8SsvvZmncwmrzbsOP2VtJJcNhQMXg1u+soPYJPOBoZxHDWrDPjf0okt1vMMWF5R0WFQv+iUbzBJ8PErbw3ZK+lbHsFncbKAvyI5B3bNirWYLw+0rZkmGJFY1RqV8iitjYAx76OS6oCAYwl4rX538I0xqWuH1+rXHMZIE5YXahUiRCB/5a1f4dUO4hJj4DEeogkMGOhOjR9xYWKVFWpSaTMS5Yu2gt/9XRhRwTypJiHS8yXXsr18QOa+8Z3GlwtXVkca7zVxoDQBL+zxQqUvgAwmCfI/W4+30Diu6dAy8DD1t9TipBisUO/u/LCDNc8k7jxtqnktibaTrSNLQ5aCiRVMFO3S9qwK2gARGh/+/G4ja0DMwD92UpaDcbdghx95nsPmFLkYUNLQCPdANbyN9Em639BakRdlQ4BSEJ5hNgAv246ePTEWXdfRdqUyT0m3gSZWa5Mq32ZA7AH9Go029LdBNBnzy4uJ5sSSoCfIRhPWpD2NHqQrjZEv3tfeWG5i/sx676ZFqNKV2NW2upQSmBHwYVyYDDDoQLCcYEH4WmrHvFqb7nXYmv5zeJu9YvYEf1kdEAmrfV2yg==","layer_level":1},{"id":"93c96675-6099-4ed5-8f40-6a47b3050712","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"型号管理","description":"model-management","prompt":"为型号管理功能创建详细内容,深入解释型号CRUD操作、技术规格管理、测量数据存储的实现细节。包含来自实际代码库的具体示例,展示型号列表查询、详情查看、参数配置等功能。文档化型号验证器的配置选项、参数和返回值。解释与品牌模型的一对一关联、测量存储的使用场景。解决常见的型号管理问题如参数验证、数据一致性等。使内容对初学者易于理解,同时为有经验的开发者提供足够的技术深度。","parent_id":"08dd4c40-3fd3-476c-bcca-4c8687a8d863","order":2,"progress_status":"completed","dependent_files":"backend/src/services/squiglink.js,backend/src/routes/models.js,frontend/src/views/model/components/CsvViewerDialog.vue,frontend/src/views/model/components/ModelFormDialog.vue,backend/src/validators/model.js,backend/src/models/Model.js,frontend/src/views/model/index.vue,backend/src/services/measurementStorage.js","gmt_create":"2026-06-30T14:05:25.897162+08:00","gmt_modified":"2026-07-01T17:22:44.422061+08:00","raw_data":"WikiEncrypted:hinoA9w2BNFayyHNiFt8gsNnGgVQtSSaVbeN1bzqvc4tbra1QEj8CSWfOVVgrIjCfl+rrXPfoyahNVQ8N2A/R9KL3g9TYMVRZZSS0TXcWyEdAHEcVYq3VEGpN1EMCQvUAKhB9cQXBwiIAYz7p5UXkXd/5BDTgIlMqetV6UxG3bvW2msb02YqCXn1CJpp8h53GAZMQMhtOWMmcHzUEzZMNa0Z7oq4Whiv6DGVi+eIRnMosZDQPDqcjVHu4ulL8OIgcNQfZNT83NcSO4g96lqa4rPo+KXJawWt/P7qCQLE/TVhUFjhsD4UGfVTBCFUUTPZniELgoFRrSuo1t0+uYG3l5CoFBMOww9m8AFz4b1mt9uCdgmiyp3mAhfDAPH0cKZ3n9fS4NraUHBRI1/U4FV4FOg060EIpneUrLHZ/bt4+iVpjQEeObtfRWjja0iGrVGvZT7Qi0mSUlONGrQzqdh1O5SYcEVKOY34WF9s7MBTMFRXP4luWngk0KLf2q2mgrCWulnLHebyiPUh1gQc/pi8wrDmV9+E/TLRiAyPLlkbFiFJLmbwazNFYCD+8+fyxbythOFYjAPN0miNA4X2RluXoaXP7sIRsAZ8yPlLeTiwOpgRJb7YZ9ZFVIZSlMMxylBrgeYWgVnH5Y3ZUKqGCh8DUrQ4jwBnreYwVmlV8cu+QgIuPCzc7dR9MQsKpF+gpQqy7unnu5O8RxfZvJ8wOwXgYIiuF+ERSLyuyyqHL/MEvw5S30bXceRNnbp5GHgkoTUDrDOFGN4Zr7e+huqGoH3nei/1p9KNbXyJiW3Y3TsNrKbqCnCuGh8w+6pqFtYllmY18RuWzRVpwsC6+GowZIk+c82/c3U5wZdWHthv2Ev0/p0GZLf/nsXHD8NecVDKW176txDSVjj0H3lkPx84+hOboVIprBpOHQC421zzR3+vCVOOkUbi3kALsOWtXc8+6ooVRH98h7UJ4xlaBnFGtb71EsgmKsVZVMw8+m+7On885syB5JDPAe7njtM5oZ0Itxe32AyeQBpNWA2X+u/zvPgYR62iQwVaRyKUveCHNDs9Mc6awFPX+M7KCR7SUleY/0K0dTd5fdaqycqZc+XY3rwKtpMHADDh9U8skECDKxV1fL0GBYnfiTqww9aZcaZZqYquPaxS0gR59nnljEwng7HabZk+EPvvCwbIYb62Uqn/Ghkywok12jp5Kxjs6aICsiTse4JgzD2zE4rOleyUE2aurVLzC6NA/0D9gD3IGQJpN7KXIZThByfp6Pqd6KtobaPuR9H/AfAvecOBDbQkyw8jDM7PLX5Sz1AuPCGlI+Npxgu0pkPa+P7FTBcjaLKM1vJ2l5juXWdw5KAn+rw15HOKC6f4egoICLBuGddC8hmhelDpQiY6zm80pfCMytFqJynIQJ44dC48svYL8J3tvPfG8XVGYsQVAyIlwcRN0mrX8NCbR/rkQ/wnk695GxkLVGvOKIkEayBufu2IgiluoXlxCM7hzJ2IhnMQWXNuaX+ZUFy+vVt7gwPGpCSwLvYaz2ddgmeKhHoi2waU10CWCfphEAr87b0+7etzytuWP9ugJ7s7fTFf4xFAH21VvLtFLa7kR/jPN5gspIg5y2bIeF68ng==","layer_level":1},{"id":"32dbace3-24e6-4a2d-9f87-83f2ec825b71","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"密码修改对话框","description":"change-password-dialog","prompt":"创建密码修改对话框的安全交互文档。详细说明密码强度验证规则,包括长度要求、字符类型和复杂度检查。解释表单验证流程,包括实时验证、错误提示和提交状态管理。记录密码修改的API调用流程,包括旧密码验证、新密码设置和错误处理机制。提供安全最佳实践,包括密码加密传输、防重放攻击和会话管理。包含用户体验优化,如密码可见性切换、自动完成和键盘导航支持。解释与认证系统的集成方式和权限验证机制。","parent_id":"eb78ed75-b786-4b43-ba43-58a5ea8a23a6","order":2,"progress_status":"completed","dependent_files":"frontend/src/components/ChangePasswordDialog.vue","gmt_create":"2026-06-30T14:05:28.623391+08:00","gmt_modified":"2026-06-30T14:36:50.062236+08:00","raw_data":"WikiEncrypted:MTGOV8yMPpR4TI1lgrJ8xG2DJaIBmdXRwPCl7oRCvXmCW21g6Vjoc2Fgt6nmmENvVQk6mZ+b48v5x7n1+0vaA7CHuGOaSKT1JpGPpRS/S04l+JJRC+zDXrImACBhSN+bAa09cBwSvWPWb3abEYtmKZTzRsib/uzjiZZSf1sPa82YEOr2t72Zm1OMMiqS8XA+qsZEzYiwLmiPLYFL+guO/3HaXe46Do0MMkKmltG7SdeWQpg0oka5yh6krSsT/W287f9JlYbkuaKE1DuvTnJQP+AnABLGN4UgZkrNvRu7pkJDAaUqmT59pSsjsT36NdrgsH/M1TPaMUk7joUnZc1IdIj085VEilPnS5PxTJEGHREbxVqxKR30C/5r6GnnzdXr/jrRhHs+UhBMOTdxtXGexuVx3aVzvCeBi3sRmGGNEzB7g7VsMJhc2HjCLYbeoIc2RP4XbivYLI4jkL908EQple4la3X3ggTZmmIRB8tzgdn2H/zDbaJ2ZCuI5cpzFamtwC2X6eLW2I90WLydSARo13ACzls4tu24apN25mQi0O/72z+V7bdoohJxqP+HlYsJ7MW2YFHCc18sKduLVLZsdqma8YQsXwV5EgYIhKAl3Mn0jCJvMHHA1q54m4MpedfXtyxUaV3Z/QbzKZiNGylMaUcTqeSxrwmB2Us4VdoHw89a2hUjp9fpAneq1lii4WlWygpjsZ/xGZPeEZNS2sLZLu2iV9btxVdJtjr14fDw8t817dq71safFgmrfgWmIwy4tBuQt+sUoYEHPBA/8RNuqyzxybwdhwFDxW8nUeyILFVyC0NFnS+jYQiYM4ffGs10mGWaO4Hw5gQWNFE0V2rXXTfx6xSF0eq/KXLoMuB8Pvey/AELPNiW8oveBlR903q+smsgrLd96oVR4kol5YN914XfzjM3kZBz/muAYVbsDBMKbEbczayPubwLm5zMFOuShES9MqJH/Jbzr9kcOugPx6sl3T8EMJGTuzlEnCi0Fc3Xukfm0wRx6j1iRYvbuyk51s+osNojspt1+OlIMIZDXtjf9XdL0wfoUql5ZRzDh3jNfbGv8VRxV6cKWIrlEiYphQre0T838CYjw4UVA3KOwWuvhCXU/fl0llYLZCCmfsyliuUVex+HGMwN4Djvkus4COjxzp4f2DByyquV0del9JCQZJ7XM1H0vW81c70BJuxUZjpLeZK0B46qiiAu1d+7","layer_level":2},{"id":"af7f747a-9be6-41c3-b091-4ee5901d8cc7","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"品牌管理页面","description":"brand-management","prompt":"创建品牌管理页面的详细文档。全面介绍品牌数据的增删改查功能实现,包括品牌列表展示、搜索过滤、分页处理和批量操作。详细说明品牌表单的验证规则、数据绑定和提交流程,以及图片上传和预览功能。记录品牌管理的权限控制、数据同步和缓存策略。解释品牌关联数据的处理方式、级联删除和数据完整性保证。提供品牌管理页面的性能优化、用户体验改进和错误处理的最佳实践。","parent_id":"f00798b7-c49f-4260-b9c1-d1ee413b030a","order":2,"progress_status":"completed","dependent_files":"frontend/src/views/brand/index.vue,frontend/src/api/brand.js","gmt_create":"2026-06-30T14:05:55.602772+08:00","gmt_modified":"2026-06-30T14:37:33.764923+08:00","raw_data":"WikiEncrypted:MpYke5d2PXdqtxI+drCrLid0YsRsuFzxrKFl1UH2EDILD+4NmryAJ+q2oYZ42eaiuwvs0ff3fJrcmeJphvg6shRr3y/1Z6QIqf0SdVu8YJToiL52I9yI/YQ9QmrCLTmSJK1Xn0gikJy/Ur1L6mQ4487hhJQ5ETrEyG74ClVaJFLbUcjoZnico/zSQru9m462u4XEGzLdVl3wBitgKCowMgtQp8iOkg6zYEOvq+vQd5ZMUpRGtPDuGd5LGl/sCyJboNraB5fpHqavDpi5YE7ArXMWdq74EgB0tuJXFndniw/KReaPlNuLs4cZb5MnMb/Zk/FpXzVwYB4qeCuD7TTz94PbPh5lQUUSV1nN7I2Nl7KrP7WCumRo51Bsp0EgDTJ6Lv1FBBouTAIk6SOJy7c7pHKI2bVjdbYhok8sqJoO1zP8R0kKkzlWVqR1eqx3c7vZlMT4qGOrIZltbmw3MS0LlfxkOwLOAeA1wiOuMsyxRh0rW05bslECO6N6C5nvuooj2pIx4UaPhTHmavcOt1kHG9pMEPh2Fb6VZOpYFKDG2zyCIfnU3fVAoD7n68yLyuJHSMnM+EsWqLHsaBCFBaVOUW1k8eMzltfozTQzFUlpASncW1hCZDkH9eAByXunfMzj3cRR5ij6yv+rlMx6Kc8OJtIHMXfY5Uug4RoC41bw1Q5ApjCy7rRFRC3MXbXBQKnufuVAvtk6ldQ64s34dZG6Fs7AuX3T1VWSDjReGTa3JKhARtr2k1xtruRq5ugRY0wrRTCkAiW7nE3grXMt4101VFK4QE1jqRxjkRPVCz8B5lL5TUqxK8KFltj2NZEC24YU36Zz74rntRYqZwbl/pRQk6uP5TGiH3pw7xActW1I6ySnBBrJsUONt01juQ4Tqr7+S/JJbR/vkryj65Kc00zCRsbkeH0dXxmKUKB59e915AlLc0aQRlXRhTlfKUr7/IMAd0n9HGSSaKcRr69ijbll3opHfyRpZF/uF0kmh03HjEredmCzrYx9fGQUTANJX2HqoONB4ms4Qm0j2am+UjAvbBHU++SpwlZBkP1aR9KuMN4uKpX4tUjL8tDJRGW7ZU7W","layer_level":2},{"id":"0bb34dac-0e1a-4cce-b41d-0194eda77f79","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"数据库设计","description":"database-schema","prompt":"创建全面的数据模型文档,详细说明实体关系、字段定义和数据类型。文档化主键/外键、索引和约束条件。解释数据验证规则和业务规则。包含数据库模式图和示例数据。文档化数据访问模式、缓存策略和性能考虑。指定数据生命周期、保留策略和归档规则。包含数据迁移路径和版本管理。解决数据安全、隐私要求和访问控制。详细说明Brand、Model、Ota、DashboardUser、ShareCodeLog等核心实体的设计理念和关系映射。","order":3,"progress_status":"completed","dependent_files":"backend/src/models/index.js,backend/src/models/Brand.js,backend/src/models/Model.js,backend/src/models/Ota.js,backend/src/models/DashboardUser.js,backend/src/models/ShareCodeLog.js","gmt_create":"2026-06-30T14:04:20.637975+08:00","gmt_modified":"2026-06-30T14:10:45.950286+08:00","raw_data":"WikiEncrypted:veTYwq2y4io5qXerCTrkkKY19u2QVJ1rg3+MIy4jIV1T7LGtk0NNZTeyhAbQ+Kw6nKL19/84a+4Ky8TPQGUBAMv+/6dJGLjO+JY3ZnbVJix+JXTUe92A0fyeezyoI6zxn0BCAAx7GKkFkl72yB7LDQCZmuLQu265aq1IM9ARxC5hoRrKFrUfmial9RptFqCk8tXMOwlttvntP9DLL0Toiim2N8rxuTj3PZ3Sfi2OoqyGs9QmcT5sZkFv2MzdkRWxlRj+lggrQgwwCEi7PAKwJUu8fAL6D0HFdfQ/zGBjnr5HmJCLcdnczST1lLXFTpVqg2yA7ejV2oYI07mzPC8wxSIMZ3razM55hNHeD7TIu0h+AASYH/fMFx+BavsWSWVibAj0+GY3nVB1XGEdf8tKUxCt2tLkzmNC0ONaFrb1sH+u3/NACyBWp1XT485tAbYK8nfQIKYCsxMN3A/5DrVsuo/qHfopngN0j9+Ezecg/k9Tpmt1WNL6Q3XGKE+SH88eF9LePghhx2s0Cyeh8dtxlqwb3KvkFwy/T8YuSy4I5txe2e3KV4B+65RBbbnRPp9CU+X/MAW0EEPjUDUcpVTF1RrZp3uD2ugvmRoN4WNDuXqn+O+o02Vm53g6xy0ZAjX2BiUHbtGhP08k5nBf+6vc6Qw11ko3WnqZtpqJrpu2/pJm40NX/r3Gxcwc0lhxO3Q3EgDEQUNhM6kykwBc5roxz1NZn9gecFJ/vOtO/a9ekqeknKCjw+PYmE7nimMApPoaSzADSa7ZF41I10SWY3CWWqNFfZ8fs1kpjew0mcbEAcyHSEB6Lkt1zJclVbuowc/XC5n6bv4fqkK2/qfT4i/h1zQwLReqBxHagDNUFMA/qXsFwWWSsqOnBtOJV0SnMYqryPf8/tcUVYavxmkBnmXvABNj45AhkJX7xs9fc4CPoEHcxa3AyPkvXSy9v+LTqOitEoO4BOyQ+5o9KELKxVwWW6rA6wTuJK0VnDMTCO+sJoy15gNLfTN1KZORVVwPly7IRW7yO+mCCazqFfoXR477Kif4qeBnWPClMQFLaFJ+pEgvIJWYRUNfKcw4vc/EkyYYeA+Hd1FFr+O5DC0HXhUctk8lYt9MKtZH31RCBZFL95fvmg6+hlxpcnqGgPyYX3RhgESPLtQRADQH9MeBW9GkS7EJElfVnVsfTOAdmSos2AMVYslDP3x1z69CIk+639BSGgJNNyprE87PTRKUxY4eHCuVmALZYeo53/n0ryOP+Pm0RrLO2OoEdwDukBlzJqujjYntHapPf+BV9MDdrQJhuaaDPw+aEW6SkitZwp5cGi5x743nW5gBNH/3CtrEysupQXlFxxgAhYXnXVB7ruWNWK7EuH+8oIfmNMJ4080SwxT6REnUV87E1DChQd20pT7L"},{"id":"6cd96b12-bb94-4748-94a8-9ef9bf21aee0","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"集成模式","description":"integration-patterns","prompt":"创建集成模式文档,详细说明系统与外部服务和组件的集成策略。解释日志系统集成、文件上传服务和第三方API调用模式。文档化微服务间的通信协议、消息队列和事件驱动架构。说明缓存层集成、数据库连接池和资源管理策略。包含集成测试、监控告警和故障转移机制。提供集成点的配置管理、版本兼容性和升级策略。","parent_id":"70ba09ee-60a3-41f9-bdda-3cb904cb26de","order":3,"progress_status":"completed","dependent_files":"backend/src/config/logger.js,backend/src/services/curveClient.js,scripts/upload.sh","gmt_create":"2026-06-30T14:04:44.766596+08:00","gmt_modified":"2026-06-30T14:27:35.809057+08:00","raw_data":"WikiEncrypted:0j4RRfWJQdenLQLpT+DwLY9h0ctWLZwu8+2HoqcoTgcS/p644+VTtfXH7/YdC+18sAix7E/U+9fJqjMUaBv3jH3dXtuWslLxziQhE0mAM6KzXiDK+XHdsDX+pH5TGGreF1MypynKLMokPfyvDKXXvDb/K/htq5rDIK7wn4efMGrpYrHlk26HkWjVSHgXWa8mSvCzhzivdxiPFSzM+bFHKmAil3znEHtkwMtneqShT9/7CHzIwjUUkq4PtBv4zoyd87sLPzIHBxV584WgWr+H9HiHl/rgXIpGmmyxvut6aE6Mc2v5WhKYnBXayO803+sO3YHI6rRIuv/B17E6Q0lLwA+1x9YcSWrwXv0cmDijT/4f8uMl7RC7jSivX0mlv6dFtsZu7V/TF5vyEVrzfMMxsr4VQjceTo4zW+y7QufDdnvlGRr+S0DFgAlt8IpDnp49wmm2oomoTmIRf3OkwdMZEIGJxUmtNR0zcvCIdBh1KA4TQxHOKFZFOt0qaC9wAFXB2mUD/v6im0DNwlC9lxd0YSEHf0ZvG7AFzBTCSu0s4BrXMKjBlQmvbYHIztwKEe+eQLwn+egVBK3fWzCesFrLhQolEWHZge33dHIVt/jl/VAu8cuAjZerwX5ma+nYjVDSkJpDBLFeII5+/XG1QGVnFeHRw8iHrmbFjioXBvDGm3JGK35cJYmKDpCNswcTS4czKP4q6iapCga0KZHCA25UqbmW7fFBBJBnLXJSnap5wZL2/cXVzzrMHq0DwVin4TCmhatx25HzI6WSkier3jGKtRxCBPDJy1i6AaUNVTQNQmf5WXG/3+KTgWXojmRlUQcRPCxOO+jVRiuENVql2W2CFOHb4PNkmO2ybwjNkuLawNXMRTVnDlyGmKOj6/8+1qv7NkG2VU3x7q5QRh4EOn1Xx5OL8wK3ZIo6YDtZQMJ6fAt1a/Q1V1P+xtU7nXtJrP94p+lh+S8as938vJI0ks+Th12f9lM8x2O0q3crMtXpfTiY5KECIAVrHQBXIgP9mDzicaW90vw0PhTRJL3zNVMp1g==","layer_level":1},{"id":"41e8823b-fa7a-4a80-809d-cf21088bdba2","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"OTA固件API","description":"ota-api","prompt":"为OTA固件管理API创建完整的RESTful API文档。记录固件版本管理的HTTP方法、URL模式、请求/响应模式和文件上传处理。包含固件版本列表查询、固件详情获取、固件上传、更新和删除接口的详细说明。提供文件存储服务的配置和使用示例。文档化固件版本比较、强制更新策略和兼容性检查机制。包含固件下载、版本升级通知和错误处理的实现指南。","parent_id":"7e9246a0-207e-47e8-bc26-b9d36ae6f2f8","order":3,"progress_status":"completed","dependent_files":"backend/src/routes/ota.js,backend/src/validators/ota.js,backend/src/services/otaStorage.js","gmt_create":"2026-06-30T14:04:55.156101+08:00","gmt_modified":"2026-06-30T14:26:52.749254+08:00","raw_data":"WikiEncrypted:E/YLj/vjaxHA5L3+/DbcM/RrsyTj+zs2iY0gxO9VwkrctdJ181Ln0L3ooRB4LTne4VfMGKZQ6wlTj5N/X2kXcEukZ9Fut02Bs5XkjPHI+2fVI4RjZN0XzwIQaHtBgl8tPykchP+BDkn7x21JPxM4faRabHD4SQ8f5w6ZTPuozmHMS8B+EHb2T7KjC4DoC1RunkTRgUzQ00ZOlbAQ417Nl5iSzdfmRxQ4xxXxBHxg7QRNmHyXXkYgUat/sYwewRJ7vWadFGMWhqvlypgVFw2ueYVxtwoTgfWRW3xSbHeuJMn7RF/FWundtS5a3WwlcFzvmkpGXhXanm6EBmi/g1nlkr1I62+iPGsBnn/mYzTCs9N0yzg8pjYlkjWLhoYnWzFCcwNjWuOis5TkACe4F3Enn5/lHPaUacKkjRUmCsmyIV+YCfcShFNlf15kqHmAJzFnwpzDTA7n2GDkXwAcTZVUsDiGIo9HcXj42Nj+gmNBocNtwCrq1apaus8+xrRBA1usRtf2XK+beNgVY8HakOY03Q88Yn6RceXtZURlft7w094WixUJXMU2VtwSJLIC/MnKfNzse1s3D/QatR22ivu1UxhLoQwKTdXiOCyrSysBf5CmHP+PJmWexDMBbgw2op1BNhxGV8ENxuFPoq/jJ6AciXYGnhe0HLsQZu3DGhtOKX6bhA/ylWSAqpKAn9MxTvI3s8M/gDD7dKZnrafvi3SyEI58q46R6EEAayRfg7w8pX3mpdDt+O0t2eN96w52Fhh3VFn9jdhnWBnEVhm8E4C2cUIrmVa1SYlBUaC+2Fuf171p3d2LjtzevaIzC3KDVOtX8VCAJVzeLbpOrxd7bo2He6Tj1qG1ElYp329PfO5BbMt+FDxZXT89pJQbxxz6faNUwaVjAWzvfB2RGDuugJFagSKpW/HMZJWgQwWRdG1GJnqI2xu7KnVfTb+VK+QPbH+TOkLtxvZ34sq+Fe9xRTH6ffAgL3GVhFx17Byd1mIyFtAcAr8SadVmB18dr4jmgbxbP2EptnohyUwoYMfihQqTaA==","layer_level":1},{"id":"02f97459-8352-4fff-9216-8fcabb128d77","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"故障排除","description":"troubleshooting-faq","prompt":"创建故障排除和FAQ文档,收集和整理常见问题及其解决方案。包含前端页面空白、API请求失败、后端构建失败等典型问题的诊断步骤和修复方法。提供Docker相关问题、网络连接问题、数据库连接问题的排查指南。文档化日志分析方法、错误代码含义和调试技巧。包含性能问题诊断、内存泄漏检测和系统瓶颈分析。提供紧急情况下的快速恢复流程和回滚策略。","parent_id":"a3ddc4e4-116f-4781-ba9f-17c85c85396e","order":3,"progress_status":"completed","dependent_files":"DEPLOY.md,backend/src/config/logger.js","gmt_create":"2026-06-30T14:05:12.313976+08:00","gmt_modified":"2026-06-30T14:28:16.989136+08:00","raw_data":"WikiEncrypted:CaKOW8OSSWs4aEYk06Hu0tuZET5JxbVXxA/4vFailoRiq8l6SCRMdp2PbHfZPheZsOCEHlBpUkVcsULRxIpKUNxtyrd+LvcQjieQsOib7J2aYZb0jdq6DIsuIi9OwAqdeUo2sZ7WFYO0MjrDHQbEi0Fshph1GHL9lpk4FW6QGVpOX6LlZSlzzcg12dQ/7lfGLDNbZmC+kujhPKYB8y+Qg9DI/RBQ2izmG4m7XYoA9vhnY3btZQDjWIgS571TStZN+2zXE5D5wxyq1xW8sfVZ5aoLYIpOUkLMXsZXRuxThU9QEIsRrWxkIjNZ+DYovCzw6LfTUmjulPUu6g1fGUvjvcoT/wPnkWfZ3G6dkEdl2FNK4YiCrP5dIB4B3Ce5xXB04QOtueqxEA0ky3S10aN1HSYiNKLbR870IYZ5PIh7MQS6IVZ/xNU59dvYs1yYgWQzaTkW6h/wP9Qn9DJK6QJ5DVvqn7nn7UX9cmZTZdcT+EZvg3leLG3nUxl+rMg5moRbt3A+XJT1dR13DsgLjPbPKZ4+nDWJghDjUIQZ99/91AZrw0kPKbFba8YYIeLw3/nhshLooOLS8HHpn1RIwSI5C4biKcdxCPRgDq7LZn0X1aDqrw96+lKqgEm6PjrwBIpvhmWlr49hWd9rom2ohJAa1vkvUioWyGjsohChizidHzag+5Yf0ktjenGomBjPQc0ENMHZVtWmb0PwqR/Aj9IYfdLU9XmIH5NXLlNKtnDGFvqJOmCkUY2CjoQ1zLqXwcQc5CIXmeV/dew+CZh+lzcp19HqYDyuRJJeUuBxtHHC1E2fNZWXAgpNogDVGUEEGAFCS75/yAGV+eZWApwi7P8EYbT8bEi+lkDzWOMRG3R7uHZ012uwytQCgcEAx89CPTQRdvwzuHQCehVV5of8lW29MsJcCKWqYEUbKm9xGdGHMMcALiJh3Iijn108J7RBXVDNLIpQWWYIP3jAufqY8lz7wi06ibX8LgPQdR69b+ZWDEJ9b7RGOf9xsem9kNHlcHExDfpPlIUeYCTnQ+UAvW3BnA==","layer_level":1},{"id":"92ff3472-40b9-4adf-82b2-faf5a4d4b158","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"OTA固件模型","description":"ota-model","prompt":"创建Ota模型的详细文档,包括固件版本号、文件路径、强制更新标志、发布状态等关键字段。说明OTA升级的版本管理和发布策略。文档化固件文件的存储和访问机制。解释强制更新、可选更新等不同升级类型的实现方式。提供OTA升级流程的示例和错误处理机制。","parent_id":"0bb34dac-0e1a-4cce-b41d-0194eda77f79","order":3,"progress_status":"completed","dependent_files":"backend/src/models/Ota.js","gmt_create":"2026-06-30T14:05:22.6246+08:00","gmt_modified":"2026-06-30T14:28:22.050373+08:00","raw_data":"WikiEncrypted:M3g6T5zNL2wYgwI+v2g1k9TI04v1ugoF7zKt9xQvyuZqaGjJRFmBqKV8Wmwm/3SJ9Qv4rq4MrNZm9Mosti7r0obMj+m4wfrTq8co2+WGKMrYflsRbFhqYh3bwnRVAtBUG+oE0xiunIHCkbP/vnG9SBSl9YG0F5IlWVZTiJo4o240+pE9i40J+V8UwXtMXUWVIsQrA45pmgpTn3LfGupDTWIZ32ZD7WlYT4iTdOOe4azDCok4I1Yvh5kjTJYmR6+IggUUDFRxpFqxUyRHUCPAOM+CBB2O8JGPXOsn3M+0GhQ745lCytF2fTMIBwfB95CvsjNL+uIdYn68JkatRsH7lCOQBVWlNM3zJLvpllaYyA0NAYmiDZ9v48O25B6goFiZqSRDq+5ZFHPYhtmEGQvhr6vG3K6UKm1/8MM+Vhj2ys55M2serDCbPBieNvEsFp96ehe/Hg11TRDvaRr+b/cBcNmtD9NulFxM9jS5RmzGOpHtlF0RiurSmlao+eaveVPhKnTINLe0tTYSBtsYc4K2uriWVijJ8XYIvSE/5W9k7yhooovbDmKhWzS1eY1LMTR6uVCGXR6QPj60pNUVRKuuLQYtR5Kir4n5gJLT4VyoOPy5ZfSx2zGEKDHVGxrqdHKxP17z6R3L4wh/TNCj0rYBxmsjekn63MFHY9+xRbzKwuqYjsBjp7MogvotIrInX1awMAsoaZ56ODV1c6oNA+DtlKfy4CHExNfu0v5zbz2siffwiRcjzPcLH03x81xKluRNRjtmC7uzOo6qUnRwlYOHLg==","layer_level":1},{"id":"6dc54635-13f8-4ae3-b3a7-54c65dea2997","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"OTA固件管理","description":"ota-firmware-management","prompt":"为OTA固件管理功能创建详细内容,深入解释固件版本管理、文件上传下载、强制更新配置的实现细节。包含来自实际代码库的具体示例,展示固件版本列表、上传新版本、配置更新策略等功能。文档化OTA验证器的配置选项、参数和返回值。解释与型号模型的一对多关联、文件存储的使用场景。解决常见的OTA管理问题如版本冲突、文件完整性验证等。使内容对初学者易于理解,同时为有经验的开发者提供足够的技术深度。","parent_id":"08dd4c40-3fd3-476c-bcca-4c8687a8d863","order":3,"progress_status":"completed","dependent_files":"backend/src/models/BlackList.js,backend/src/routes/blacklist.js,frontend/src/views/blacklist/index.vue,backend/src/models/OtaTargetDevice.js,backend/src/routes/otaTargetDevice.js,frontend/src/views/ota-target-device/index.vue,frontend/src/views/ota/index.vue,backend/src/routes/ota.js,backend/src/validators/ota.js,backend/src/models/Ota.js,backend/src/services/otaStorage.js","gmt_create":"2026-06-30T14:05:25.897556+08:00","gmt_modified":"2026-06-30T18:39:56.546904+08:00","raw_data":"WikiEncrypted:xd9L+Z9CK+rU9nPZV+aXHWAC+ITudx4Vmx0ZKTalqXJh9lrnWNCrJ6gjfeCs+3xXwLzs23BTL7qcVvNIUwEHxkOC+w2ZMrQ1yevYg2/xv43z1QKbxDHD+DfzVy2ip3HR1VE9OTicG8Y/HrwMuTMoN01llNhSTwVedKRFFHYLaQputwV4j1HV3mE2NM0kpMMJn1mGpOGgHYkTKOf6tqPWkfrJftkYGx1L9B8VAvh2tDHYxfKVUf+kxMc+AJ6e8nWV0nJsF8w6NDE4XPlsgB8PrDcXB4ASY0z1XuH6EW9nukhO2d54uVAXQBHVvqMC52nn5dvSjoOBVkoPIfIQZPBNcjWk+QLBqGgywdvJ9GvCILSorIgIUwe7Ty7UysVETKO+/91YlQ8g3OsTfZrRfCBCzwFPOOevT8PB1+s7rRgEcoOXVJDID2u/DO0CxO8TwhloI164hCOS7Bh4vPIob5fjB7W8huW9amUvUHXZ/6WgYtLUCzryhX3j16thLsy1HpDNrrEsxvCsPF540QoEZOFeroPtzI+GmlQKrSXS3ZnK8JbSCDmIZXNldzQiCRKRrnTg6+H/CyxpFCwNE44a7aBwSEryvtFRCCkAu690Xxc41bR+0IdguhXyL2yKS05K/VaocMmau3zZdsEv9Trwv+7BiQsxDp+RYxV4krfwGfcMwovPo1wRrQx+e/CTjhudQ36biNfUOSLnANYK5dJX+lIojP8LoBeGchUcYSM0wC8WvzRyJ8LbsFdaMJpRJ++Eam+wCC4IlpEGGVD4zn26u+OgfVBG1us2bm3RtlXYiAgi1b147VL1clma7bxzYt+GggXoZ9uZ3acqLztxrQWMFbK5NHpavUjTA2IbEQnxiAnvarLySz7A5g7ZnvaGqScK0PXek5ReiM8Brhpl9VcOLbuPHdqdpOI2JRyKb4u5dvw3iFYey7NdMBbuoLCLn5kZ3RiOz0xPZhazE/nE0YYVGlLU/igXken5QeqmfFIeE5PsudWa4GmfsIyuDCj9uOsJd3dY8Dg6sdSc9bhGkO5HHtM+fuFI0mWS6jCPQBCcFbnHp/uRwOL+6HFcpDYLmSzPKRFbVqAIVLuk2dezAieYDmZEo51vbYm+IqAeA9I261+3vpU9mg76oCMnWHwHlW9tSWweGNXaYU6IIA8N6Ad7Enpw+tz9BKC491F/JmJMROXqeetf0Yvhj9MtizDZ2vxfMthqEFmqDh9qgCrzlx5bIWa5gWbzhOG3B9kUf0GuXPbPraZ0cAk1oS4dihI+/TIFsdVjG6QQE4q7qgi9I+y+TV0HFkbe1MDk1k6mV7KDnUCgDXqjlQqcW2XncgtpSDIlOgXoCP4aghJql8zJmkDf4JcaXJmvrcT5S0ZJw9awJbVtc9d/JraydK/GH1FbkzQ+cP3hDtu4AIQ1/CqUwGVLRfFuGAM6G7lb79gGQ5mGYPVUAsDu4Iz7A3l87Ed6u5WGgkryavn2WdkdqKC6Di06NnbvZ1MvGPjLQmR7Af/gfcsx1ggxM/fjEeeTcevJLcvJeI1VC8Bgz6qitzCpBuwZITivl19J8MdjQNcVNKdhnmhOph1ZKvh1NC0tc2dDH5hVwtR6XrHM3GG1bZqOsofFj202PPff2oIiyh2xhk1Xxttm97WNoHFfPQquJTLNnNutWO+weSGUezVbSAIHc15G2bGpUkBUZwILvadH67980GOkpZim35NFITgGV1Iu3/oAb4lV","layer_level":1},{"id":"748c8db9-9197-4c3b-ae1d-a6e51d058342","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"型号管理页面","description":"型号管理页面","prompt":"创建型号管理页面的详细文档。全面介绍耳机型号的技术参数管理功能,包括型号列表、详细信息展示、参数配置和品牌关联。详细说明型号表单的数据结构、字段验证和复杂表单处理。记录型号与品牌的关联关系、级联数据管理和外键约束处理。解释型号参数的动态配置、数据格式验证和存储优化。提供型号管理页面的搜索过滤、排序功能和批量操作的实现方案。","parent_id":"f00798b7-c49f-4260-b9c1-d1ee413b030a","order":3,"progress_status":"completed","dependent_files":"frontend/src/views/model/index.vue,frontend/src/views/model/components/CsvViewerDialog.vue,frontend/src/views/model/components/EqCacheDialog.vue,frontend/src/views/model/components/ModelFormDialog.vue,frontend/src/views/model/components/PushProgressDialog.vue,frontend/src/views/model/components/PushViewDialog.vue,frontend/src/views/model/composables/useModelList.js,frontend/src/api/model.js","gmt_create":"2026-06-30T14:05:55.602966+08:00","gmt_modified":"2026-07-01T17:22:40.416508+08:00","raw_data":"WikiEncrypted:hinoA9w2BNFayyHNiFt8ggSfSPmTP6/fXMKhmsk+tmF1NfJ/H9kFDbThrIYMnkiz2GNsBvNyZwgk+XAMnBFnd9X1BgPKtXUsnbhbDwITwXNeRP0EKjJ9nbXgmMAYeM3VRtJxxWhE0RbcOFt3SCIBQ6jcdhWJc0jxZqgzHh/9BbhXbbFE87VnsMKYDgOiXckXxgM4RZthxXjlcCTv34quZRyP7/JIgew5WTIAcAVU7/oxdTtgTXpDSTBi3YlxGP2P8kr4MdIIUtXDdOrv6k+AXF09CAL/RdJ1SKgzL/CAs0/T6PXeIgzlrfZyncAoTl+N/lpatZg0ZqhuNOK+HuVYzzcH/kL+LZLXfY3jTQuW1drx5nU3yfxNPmB7xb/dKdNzEeITmytp9lTldmuQvYx9JqOU73z/+XvAnp4EK6JD5fpDL0Z2WchHoERAEQENOUpko73scQqeB13q0/DP5P6lsulD6nN+v3sD3156L8D9kiCcNRTb6y+Bgi4+ghN/cZAicKRk/qZM37YcTfSS3DI1jY90y3XKa601dWFskywNH6iXPHo7OVrMo+LzC38354PJ6dDJ7EzV8cjUcvS08bIG+cfYXGILMWedU4K36XY1trx+S3mVyIk/m7IKoDZCCEptVPOqv/xAQ0oaGt+ddu2mYSeL+kOA708Ot5B/Gb+qvUy8KwvRb8x8azbdUPvVPfonxgco9Gwn8iHtp4n8b5kXZM1IBvhQYtpbCt8KlNy4+KfoovSp/8r7Nq6XwwoE7nYIIZlcUwjkCCF5pZGDN7/dD980IFiZ6A73Q9P15tThAe1sUTgUnBv+/ALtlx3UVq3EC/sN1E9cvo/r0zxqRW7foboyIBociExx1KhXUrXnemmnxVdFcgE2dDxUcRsJqaG5sujXtamLAflH8/+rGY8rwwGIptU7g9p0BxXULUBkLjUl7xDTE6/9IB4wzGrwWNaf/ibjpxUWUjAHZlCUpwjCH9oQNE1F2BKvtx1CY+ffkUjS4V/JJuyz6Q32uJF1OIqw1RFHtDMhlv2BetwIWUKp8EXDkBmRCYAc/tKImrkeBelKe6Xt25CxMXyesKVrJXDRgbwwGdA5a7JvXttMwr6xYSzPZJldoYn6gI5GC3Ex8tW0oQBla86XWqC/aETjTWNs989QooSxgwvyAt9oWx7HA38fw28oYhvekA/niPysdB5861Cx/sPi8svRLo8eGFV9nVeYZI46o5uTOfwBW2lWVNdBxAM3ZvBRD6ZInFoieoGnbcnIxDcDUTvW/CmCTt0xiKuLF1f0ZBqHMCwf954B9uLg18NX1PZrR/jIBwJ3sgYTt099Q+bMm37lGPu5jeZM927iZ4+QC0UJLd7nIrLUlskoZ5FVZ/5NX5v5m8S5fpGyYrqxWmT8rKidjs1FKz3dAkfkqYQmFZnE9NTnjw8cqvkq+Bwo0GIbBJKz/OsoFKpehDL2TFWuX91XWKoNNLZ+suFl8Q94sbFQqrIzczjmQA==","layer_level":2},{"id":"7e9246a0-207e-47e8-bc26-b9d36ae6f2f8","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"后端API文档","description":"backend-api","prompt":"为RESTful API创建完整的API文档。对于每个API端点,记录HTTP方法、URL模式、请求/响应模式和认证方法。包含认证系统API、品牌管理API、型号管理API、OTA固件API、用户管理API和分享码日志API的详细说明。提供协议特定示例、错误处理策略、安全考虑、速率限制和版本信息。文档化常见用例、客户端实现指南和性能优化技巧。包含API调用示例、参数说明和返回值格式。提供调试工具和监控方法。包含已弃用功能的迁移指南和向后兼容性说明。","order":4,"progress_status":"completed","dependent_files":"backend/src/routes/index.js,backend/src/routes/auth.js,backend/src/routes/brands.js,backend/src/routes/models.js,backend/src/routes/ota.js,backend/src/routes/users.js,backend/src/routes/shareCodeLogs.js","gmt_create":"2026-06-30T14:04:20.638264+08:00","gmt_modified":"2026-06-30T14:10:41.230618+08:00","raw_data":"WikiEncrypted:N3UbzwGjCC3xD6BrTM0cq1j04iiCHEqviOrAoLLUfGDtCxYctzqR2At1GtmCrwAkNRcHgUzXC/oU+pquLUAJyJG4QbY4uH8HShHwsSaBVDFWOUg5Yt9aKSem2W6e8/XsvBH+yP21CSU0WyXIunvAbMDWN2E2tdW6Wzy85z2Q/R5uQyWZgy2mpBkGdGtFA8tnpiTWGrll3lHHu51hSPp8fubLI6JOYB7Pcw5m81DnxNYl30Rt/HNSOzY2hn6YlxZZe6LYmbGYTHJFaQ+1mi9pLEDLwyAsd2NXDHCvcH5PyODvHQQiWusTZ2CJRbKqnQ29hlTXhH7vxfD6JA4CJLUr1IQO4O+sNaKIJM2yqvq9AtsVFlDiSbBbx0hHeupPxyxoyJrkbQ0YEnJYE8vcEVwUMFYBaA73AgBMVIgg7EIO6aoO1qtVQOCj8O6WC/bpRRG0VsKJKCG0cWJF2x1R0da2454d/mYk0E3sNIdLAYefmKn5znpcSVxPYUmIasm7sRHIngjfBQy3oRnj8iMwUo4jJVzUnK7+SXmAFMGJnkGsPff2MYZK1ziPEV2jaUxxsuLG+ZJVOkkPArausPuO+h0DzRYrD5rtNlQHj/M+VdBjK/fZjUHU1VYdsOAE1Owe/XiTW736BtdVxEahqzEy4KjCuHnbdYOecFSzuuJBu8+IlaAIS12uC5MPrhIyhcgnimmvjDGib+IlTsmikIQS8yj/M1+iuWVwDonBYGcgL/M4fnP9tsUdLa0iICT02XF5rsFc0k3qg8BcCd1qTG1LzSDn0OGKkrowiNxsp7if26Sm14qjk/kMrLV35NzhCrv6AE1YQGMD/Dw9P+dhQT+6f+GNG7vvKDnkf14/8gSVoiZsVqvGFSRbn+uscXceS5KZOfRVqzG+beWC5lBGoBu9NDft5xzAlWLF3xkgw3v7JBOOs53KoXfRuWlF4MjpF/L9Pi0K8Zdy4N1kOcHDKfzZTX19J7qHEHGfaKEhLP+EJzuy2zgGMtSYa9GSR8ku/SMuX6kyUbmmBRECqXb4ohzFJZVKEysRjplQzr9b6kLmHq3DOFdeYpQjJVFbehRbFgziE66TVVVeSbE7EuqOl3E7mVe0w7GgLODvHmOCTJFVMvcc3Ci5Fe9jWyomiNykvjfxv5+iLlDrwAGoXHYeu0dvl32TPy2yen6q+hOAxVtrIQh2efNFU7L9NmApvpdARKuQC9oYmvDtTYb3ifOXMRtdWJNUVz8DQCf8jo9QF/5mlamAcnhWOR/muhUCtnB+WZbireNw26SGG5yt5NZLrMJRjNxWgM/mQ/K47LoKgPimdSfBDApR6MRTXyI/wKP5Lxg+UYUGLapLKqHrfamPFlWtyAMER1HR+wzMaIU/5E66GbWmR2s9oQgJpWfELjIUlODtmHh8trWp1yzOUXksZH/Kooshmmse4XmZ9upGxeADqhi9sY2ReO9DJZcGZzy04R570EuL/pWLoXP7E9b406rBlQ+pGAtw/Lj+/nK1LkZFclvYsH4="},{"id":"b4054b83-f0cb-4b7e-9b3d-effc904a5686","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"用户管理API","description":"users-api","prompt":"为系统用户管理API创建详细的RESTful API文档。记录用户CRUD操作的HTTP方法、URL模式、请求/响应模式和权限控制机制。包含用户列表查询、用户详情获取、用户创建、更新和删除接口的详细说明。提供用户权限验证、角色管理和状态控制的实现指南。文档化用户密码重置、账户激活和权限分配的功能。包含批量用户操作和导入导出的实现示例。","parent_id":"7e9246a0-207e-47e8-bc26-b9d36ae6f2f8","order":4,"progress_status":"completed","dependent_files":"backend/src/routes/users.js,backend/src/models/DashboardUser.js,backend/src/services/userBootstrap.js","gmt_create":"2026-06-30T14:04:55.156387+08:00","gmt_modified":"2026-06-30T14:30:22.110712+08:00","raw_data":"WikiEncrypted:pOan1y/G3TzMEng6wi54Vc5wz1mwLua9oaQGTUm9cssalr5g1toTPIfYljFY5WaWYpIfvMfcOIPjVC5YrZe6T0ZeXnIn6qFUeNFA9VkQiOd+eP8PI9TknxwVIlnH8jIbIwUHH+P6UkkSNKkoEQ1Dgy4tQyZQ/BwhCdLqQABUIXBPU5meJ+X6w0MX1tiAe3bz/ckrWZcMva22ulspZnMMC1Wk3aVoZim2mC/orMFko2LdLZbXjVX8uNiFeB8UyaHHY0eGKN3MEHmSchfVJBXzLJAuJlUXl365b+bzfvnnzO1j6LwNYJMluGW/Bm8YNNXxv/nIBbzYwvWGjn/7eXoSDSP8c2D1QpN1Vtejf68ju2Xll64t71U4ToaQ6nUYw5uqsUgZDj9zsGfOjV52J2RWSeXnUQ7cUo+WLL/4N/5+3+KBlnUUuc5rvgZ/SdfIBzoYoyeDi+IU/K8j1B2CXPKNjSY7YV929LeSJGbcYxEdA7eH0c0zY7gNqyy/28oMx0Drkn/jYuCiMnKuQHF05L3581zmgFITJkAamXJV087BZCHex0iiYzrB2yS3QXrUCRMa5YfiO3mhv7u6C5A1bzqtY1b2pX30yhhKw71FwAuA172/tw63XUnOXjQ3M38mTt5hhxI+Z27ySXPk7jZs6OQosySBxga+SW59BdQWICrvO0/Jr8CqbIQ4usht8J3plxZpAOasjahz4ung4eJEzGEngpdQmNouctQvHBWOSXzbubhIGXplonmBfLNDPRk81plmJsV/vS9cNjIOPCmHJxQAXdEExTKuqASOCeD02Q7iDS3H8lUuIkNaF2mqaGwJXYsGwglkH2PtJIPpV7OLPmu7BT1QM3Vx/EK6EgWK4AkX8njheLaiGDxuJ1ZboRwInEgTcPY7PBX/x6jg4JI0TnG7jozxFYvNGlQR8xCJZ4SXSGF5mUM2MerylFlNh4SvGysXSDbMoo9tzYOFrwN7HD8ao7wuyTqK5EauHRjJiy7DQ1xhkAR+8xbFglSPmyzymu4KVhXnBy+ad2/UhT1vc3j5G2I+My/soGEHQUDr4q6/0Jk=","layer_level":1},{"id":"7a728623-5bd2-48eb-80d9-0f253bc74123","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"用户模型","description":"user-model","prompt":"创建DashboardUser模型的详细文档,包括用户名、密码哈希、角色权限、状态管理等字段定义。说明用户认证和授权机制的实现。文档化密码加密、JWT令牌管理和会话控制。解释超级管理员和普通用户的权限差异。提供用户管理的完整操作流程和安全考虑。","parent_id":"0bb34dac-0e1a-4cce-b41d-0194eda77f79","order":4,"progress_status":"completed","dependent_files":"backend/src/models/DashboardUser.js","gmt_create":"2026-06-30T14:05:22.624965+08:00","gmt_modified":"2026-06-30T14:30:58.467643+08:00","raw_data":"WikiEncrypted:piKNT601qxwAxFbFc+bbNzJoKRWjVA24DZgSuXUMKeYDI+Vpob6SIDpceCgG+l/ARXk22LQbqNrJSpxaw3lYcwfCs/ysy8OCLL5SJdUHJVrbRwBO9VCr7EM1ykzkC72RNFstSYAcnBFNhGMXw+lvldpEXlEqZE9WwOHqS96NXNWqbxrN5aNChpOr2Rclp1ATRSAz2nUS+IeeSx64uQOVL3aSyP9BxlRPnARz3KagI4h5xFbrFRmGOu+2fHjVv4mfGuyBi2m7BOAvsQRAReO4aLFcrb4Q4d/YoU05hkkDJCsF+uw1h2wLNYqLbKVPnnQ+vXJsPReY5PN1qLbXnK4SYp2DGFm9mcWTWJYYzE3plH87IhZQUyYfFFWSWzNA+oWacGaaij336n0rQ1emfUynmp20c5H12gaAdeJnKNtilwuveESCgjV+cpQeQFNPuSBymzN2EYIYg9aAesv2HK1H3PBo1BRPR8jsYXLLErgqgfSevZLVZGasl1cVMkdzhHd3jXywieDpMk0OiXw2TzVbfD/R59mDLQ/8RFFCxIY4Seg7wwXx+w9Nk4zHDmIGcT2ciMFdmomMHsiK9TT5/bl0pCM8PpQi8V/abMOyhNZqK2NO8mgxpys8XDLzN2vunY5DWeD1FwI9Do09XWWByBmvOhSAQnZp5IvO+Yc1FEzRSo4NHjxKOXDmFE6f4WRlmoKnttDNUMGRnE0MXXnbj33ztpBqhSkH2IHqEDWAYGb03f12CEM2q4RcTHO1fbB3ZAECoyGOC3pmIqTyin9JECRtDQ==","layer_level":1},{"id":"4d08f4ca-84f9-4f9c-8d9a-0983f78a7005","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"用户权限管理","description":"user-permission-management","prompt":"为用户权限管理功能创建详细内容,深入解释系统用户管理、权限分配、状态控制的实现细节。包含来自实际代码库的具体示例,展示用户列表管理、权限分配、用户状态控制等功能。文档化用户模型的配置选项、参数和返回值。解释超级管理员权限验证、用户引导初始化的使用场景。解决常见的权限管理问题如权限继承、状态同步等。使内容对初学者易于理解,同时为有经验的开发者提供足够的技术深度。","parent_id":"08dd4c40-3fd3-476c-bcca-4c8687a8d863","order":4,"progress_status":"completed","dependent_files":"backend/src/routes/users.js,backend/src/models/DashboardUser.js,backend/src/services/userBootstrap.js,frontend/src/views/system/users/index.vue","gmt_create":"2026-06-30T14:05:25.898001+08:00","gmt_modified":"2026-06-30T14:30:59.497744+08:00","raw_data":"WikiEncrypted:A2q6dsB1G5KaNgPAwP2ZpD/NNAqdMxLD500dNl3wstxRlsTO1UAX3pxjxaiFL3z0As1vXXbkbHu4vNUGPLAL5aQdvyDy/rpc97235R5NBNTdhWQsZBMstzLADK9pZc2FHGxl73wo/dEkASQtxoZ8c/HAPRkbzM7NeoD9dIYUm8IACZdB7XsWNk9eYgM1s+F7EamxXZeo9LRcbb/Y/YFKbxweyfSjWzXvXjvoJz8YZ3tGNPnZgwl5qgSc7Iqd/zEcwe9suFPVJyoHFnfJNUH/kaeWu8f/cHWsyJGasZNAaAwZBBs3yTizjbbGBQE3c3I9OoTx3e45q++1SKXw87o4e/05qmBvNeVZolDT9qztewrGf8fDjB1GqNNK4z78df0HVIaQFZhhhIFgSY47aR+4kMu5z6cAMD04SbGH/sGtdnmsA6r40hK+TgrjJ7YJEn5YDMV6ULhMS2AGgCAgoOoOaQAYdtp00rHL6DqxWP7Ayw/PrS1EGjonvJDwqy2YY4Wu06Ti9Sv/p3stKU6l6v600sAU/HYdfnDB8XXCaiCnr1aOXNMMzow2YRdFlIzdIuCnb20FmdM6scyabPlKwJ+Q0bqI1kP3t1AzsMWzBOu/hSduzKJtqJdugcKam/IQ9dK5dNWVHOLXVwDMONyaqpurXeP0qrftDRCgr7tfAe7T1F17lX6F8vAAFXSSGlwuyU3jsLTxYLSnIBOiSsa8RpX4QosLNkYfmULBdd3rabnHteIWLCeywBzzAZwJL9/1WtaxYZ6upIjMsLu6LvNaXz7d7tfg2XqQT5SckfhVnsfs7251aj+Xj1CmFmER0EUEKiMtS1VlphUcRYaWP3cwRjPgIItB7hTHnDqlj4l8pW6pQm9DFy4luQ83CJlsw/FEjW6lloK8XYhGAiGN0PR8dTYL0LzjOi7h9MbZ3uCqrW4Sus9kHxcVPN1Ubt6Pl3KOadbrS5pfUae8rpFVss4Dx4K00tLXLycXKmVHa5Ctl1Z5EhAHn6/G+a2oo9L9ymOTVHWuMrH7peksW83s4aykHZ+cX5kVMOf4+wmVmLlrnYNHZ/erqFhdMHJjX3WoWzfJ9JbFm6j3AL0Rr/+/gY0h2U5dGO/ioG+M11sSM0TnmIHFSvQ5BMA7LQKYm734RsnlDaNiR5GUtVCC4ZGa0Z8ijU4iHI2N9XnTa3R1UEQAqMMGE8eAg7Mhy+eieZyElZFJTkhPbbPE/T/rMkbtaGNqMan3KohQvlP8qX0Mtb4UOYnI8fd0RwahU3KVQYEEtwhMvf7LRH6zLOVlQjtT56TgSAPCkla0Co4fMEDZpLDuSPD972VDq5r4NnMIk0ZaPfNHWcTgD+pAIL7IDmO04KLJV0h9lEguVWpMWskakEkbQsD28FQ=","layer_level":1},{"id":"f23cd2ae-fcf4-445f-b8e9-b3382f277ae0","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"OTA固件管理页面","description":"ota-management","prompt":"创建OTA固件管理页面的详细文档。全面介绍固件版本管理功能,包括固件上传、版本控制、强制更新配置和发布状态管理。详细说明固件文件的上传流程、格式验证、大小限制和存储策略。记录OTA版本的兼容性检查、更新策略配置和用户通知机制。解释固件下载统计、版本历史和回滚功能的实现。提供OTA管理页面的进度监控、错误处理和用户体验优化方案。","parent_id":"f00798b7-c49f-4260-b9c1-d1ee413b030a","order":4,"progress_status":"completed","dependent_files":"frontend/src/views/ota/index.vue,frontend/src/api/blacklist.js,frontend/src/api/otaTargetDevice.js,frontend/src/api/ota.js","gmt_create":"2026-06-30T14:05:55.603184+08:00","gmt_modified":"2026-06-30T18:39:29.639151+08:00","raw_data":"WikiEncrypted:xd9L+Z9CK+rU9nPZV+aXHWN/UvyEHGWdvdi/wL/SLAtsxjcusIK0geuW0ev94vFm/+ZZNy+ieVfnAfHGqmL17rwVengK5U+HuyndLcsd+vU8WWUYAcbMeIuhajT2ueakLuWMAOBjC7Qjnk00go13X96EUYEuiWmkoDFEuFYCUNlYB8K85tvNFMpVCY2Qqrx9nomuigjf1WFHD0TrRVrhs1NHGRazgaJy8rA9ZCQXZkYfZ1sQWyMvR2zhRCZmZQ1P+Ay/sZmld3IJZ1uHwC0AOC62fyj0Y1CRG00+FjGRJYmzRiiT1ovJN0FMKEQ4+ReupsiHFpHZwkDERurHDlQ13YRkt4OKVRbYHan2yeZ/pF8DmJl3lk4ibWGBVa/AktLpQH/cUYiwk1NNG954l10fIGdxJOmE9R5Pi8JImO5MVH/3QHkAqJa/MCaS9oCtKu7kTXs2P9M0FSG30V8RfUHetYe3HaVCRL4FaCWm8r4erR9/3gp/e6yyuYA0CbY7j3tlp+/1/Qvqix1yzELc5MNkA4qG9J8EJ9SuSeN/9+R8qgOGZGbVnV2pC2dDbJZPfqMV1V/gcaZi/XRILpuz+Wo4BeKwxqmOTBX1yXOjLGxipXmUgGC0BOGAhldPX6VRTqlAqgl69qQ6tDSa0NgINVjg4K/h87ey+LGxhLZd7rbOMhCivmOOOvoJQAIsUIqVDWOfr19PDz/w89QxoGa1I2HaQacuwqfN+/eZ9b6ipHhWRy8Z0HpwlxllW2H+GUfdUewZEsd9hxIcilDCkSqwTRsdHRksuOEht3C6AoEO6az767HSveBe9SkKa+U3nf2mOcXCYjN6ISB5WE1ClRdOJd0a39T4zLVebVbEAGGzWtGHNr5Zc0GN7UftAiggZrjBJtDnIDCqSnwlc9Oq8jUS+4jZVkVz264OhepVcchT8JSgeeQ/2KDCw34q3sZ6q1TAfhZRhL6vKdM3gz+/IABj7p7OUv8iC1Im5i7hS4CXHlicAxg9tl8507psv1ePxbDNRCoS6+OM2+od+U3ma8RFAWzdBsvaXF2GWl6SxLmvRUvfavdwCmxUBmqxscgH8Kim1FZfW4EARHkIl5QYIm19a4Y2B7iKW3iDH7pBzbJ3uyozZUk=","layer_level":2},{"id":"aa2583bf-2c6e-4792-b794-1563db547d08","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"前端组件","description":"frontend-components","prompt":"创建详细的UI组件文档,描述组件的视觉外观、行为和用户交互模式。记录props/属性、事件、插槽和自定义选项。包含使用示例和代码片段。提供响应式设计和无障碍访问合规性指南。记录组件状态、动画和过渡效果。包含样式自定义选项和主题支持。解决跨浏览器兼容性和性能优化。记录组件组合模式和与其他UI元素的集成。详细说明侧边栏Logo、标签页视图、布局组件和各个功能页面组件的设计和实现。","order":5,"progress_status":"completed","dependent_files":"frontend/src/components/SidebarLogo.vue,frontend/src/components/TabsView.vue,frontend/src/layout/index.vue,frontend/src/views/home/index.vue,frontend/src/views/login/index.vue,frontend/src/views/brand/index.vue,frontend/src/views/model/index.vue,frontend/src/views/ota/index.vue,frontend/src/views/system/users/index.vue,frontend/src/views/share-code/log.vue","gmt_create":"2026-06-30T14:04:20.638638+08:00","gmt_modified":"2026-06-30T14:11:17.430176+08:00","raw_data":"WikiEncrypted:rJ/rIw0gVau8jPGqKFBAsBQkxmdK9VEWEB6rlQ8V+1n3+8ehC1YI3uvDR9AKl6JkUxV+3U9CRiifnSLpQnnLCcDHafY0ujJqoG3mrKKLwcRefLIG97HCvpjj9xp4OJcObEYBvlH2pirjv5kfcD3coj+uej2+6It4OTgW2/0oKQer4Q7Jd3Xj3CROmzgzm1LeW9oHFyhqH7niUp8ounxYBAbQB6XdHwIaefNnUgBxo1FjRY5CB1LpLxEjRSkY9CBNS2Dfpl69BuhxVtiLlOBNsl22N9tUH0iPTEXk6TAQLd4Vb7QtJ8CCyPAtkpYnKU5QcfIO0Bcvp3MjVk52MPrRkpqhDzgLNq/58gj0RreavkJSyaecu5m5ingaM2ajsfwmWctlEFTbw7A7cpt15Z1RrVcJLo5T/4M0EFp2moBm1frk6hoO/SHg+ZmmZaSeN0CvbCvOu4VnNuh25cYO5dfRb5bD7aInrtFDRIEFVioUhtHbToaLmNbDxgYKC8jX0WO/lCgsNRyAqBMOVG9YywTcUyCao4ULaOYmT7bGHur1f7MHzT3Hcx7v+f5YDgtl7gIF3c37iMffA16fAhftd84iZA7DCWaR+x6ijSk6EVit7zN4bWFerdddsjBKgaNBH8WGTtsw4GmTfKcQ4lOr6kHuWwzvyJNbUAxVswCW7Kl7ofivxTaQwWtkjD8l6roq19h8uSRl7hqI2NFmLS/Mxuw5m9PNBlo3vptugDd5TAmLgLPkXnnPAHW5GBqe29HdNyEhU1vWTlQJu6TWrfVmeJrgLD7o4ciYSWBNzEJ0CMY19O60jiToNgpa2eBMrM6zgdhA9AdCdyk0sCCEGrNB18vMHFvtY96o/H+sVIVQsAsOoTx5sxOH0A2SJQX0NWZ270aO/huXZgV1r6rJV+iSPSpCAC4cXQ0EfI2bDDSzzWOSWezC2pwi8hfePFC64jC55cf1K03jW/4TH/MRixvP7PzBgDJ9WFTF5wLqV0IL6Rs/SDHnWnsbJ3+k2MGhSaMOncA89PGFNupdNbrk4x5luggzyTcc84zOUmn60WPhUrJZMAZfkkE4tKS1XRLUkHoxR/1WwL+VDZlaseEEFKZLWyNFBuGAscN09RzwicXS0WVW8CGZaAxZ8oMaydUMrZSqZMjVh7rFciLtXlbV2udQvIWE9dLuZVEGazVv+8BwkERKAXlPfl7VKo4Jpave0m0QS3JnRoK9RpQwsDXspauvY7XhvO4HvSwxXI1MFGjZBaqWEJCoEDzioluPgZ59mP+Zcf5AOw8qx+xLBLYVuJimxSmpplLeIcpRAD6GXIgXIpAQ0ZW629iB40UUtegO6jlZZMjEBNfW2h+7tArd5TmsR1GjBW04FHckaxFGn2sd8WOF1DbTN5g0lAkAKy/cGNjvEE1ZWKAKCGgv4IkAnme5huEBC2w9jqVDA6/cxoVNI1PqCHuZXtfmBqsygXhLj977b7lhgSMLm+ZyOl0F6tiopYxNMXhWjy1wCRXMPU7hHtqjeBok3Sb25XahZAuSPqzZ3MYjV4+PJHTejHONP9ch60/4uTU1ZmPSbYxlP3W91KjEOUHl4J79bUda7/K9+Fa84mMZvhiy1EOrsjAANGlQFE4+GAMHNdiLb69Zhc/CH0q2EaU="},{"id":"a6304333-66ad-4b0c-834f-a6a514069e3f","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"分享码日志API","description":"share-code-logs-api","prompt":"为分享码日志API创建完整的RESTful API文档。记录分享码使用记录查询的HTTP方法、URL模式、请求/响应模式和数据统计功能。包含日志列表查询、日志详情获取、日志筛选和统计分析接口的详细说明。提供时间范围查询、用户筛选和设备类型的过滤条件。文档化日志数据的存储格式、查询优化和大数据量处理方案。包含日志导出、报表生成和趋势分析的实现指南。","parent_id":"7e9246a0-207e-47e8-bc26-b9d36ae6f2f8","order":5,"progress_status":"completed","dependent_files":"backend/src/routes/shareCodeLogs.js,backend/src/models/ShareCodeLog.js","gmt_create":"2026-06-30T14:04:55.156497+08:00","gmt_modified":"2026-06-30T14:32:04.002947+08:00","raw_data":"WikiEncrypted:Vv0H16AayoBzPxX7ZlaOUGyGBdIMK4cf0QP9R1E4ivY78WzOdR/wvtMHeKsZOPO0asW2W/MvDKc2jNyZQ+LHngb47F7NF4YJSkCgZxByRVJgj10T4wWac0DckADW5AH88CZpVx4BBCtuW5KRlakkySQXJ0Vhm+mv0KwUrtthQTb+hq/5FeNYbS+kOr5euCqYQ6wwEmLbt10MSZp1WKWdfCf7X9KcgY2Io011J6+JnBsJnbbWDcnhkvMDFUdGk4GwKyEMiedTBkgb+39rNaRYcnJAsprHfzqiWCLqNoVAWgXLhDwpQo+Rj9Bju4u0x7yWdcWAVxIhjtS1HTrpnn7SF1fT+zQ9CwvBC1jdBr6zPv2EEfd9aDeDmF9fusxmxrz6O9t8G8p8DZU+16l6SzrO24RGp0ljE2hnue5SjY7K50OQ+9U35K/w+G/qOjEOt/Xm9AhDSALYcylw0X+3TFn0Dw17GvH6f/i4Rkt7qMYvBGYUby2TfoOMz8t6dGm1c9yflUtfXDVmMEwmVvMHLCRtuD5TyA5dQ/ZMntXUjliHSeS+A6CWlqs3JxRZ1RzMhrWSMPoLaP7KkI0jtFbNfasJ0Og/s0lvoq5QfTYeaB3SPAVOrEJCTUAk1WJBefCXaJLQJWM5BL41nZaNCLL5xFdD7vrcFofJoqf8rJdD76QntawCuPNY82NOq776fFPBqp80R5e0OAsB0SDbQ8ij7hs892TDLCAZD/uQpah7kDXRz3wpPMv5Fvw1Vx5dqBUU1Ft8O6oV36Svb9q7kzHN4uEsXSGmQqxigR/bDvMFj9wUMlwgWUOgeKVG3mvewBOFOO553ePEGez98IygIUSyEQH9u0EEnfXlX8Ctc1L/advVhMuLFfDBj9GSPmfqkcpEekoG2IhmUo15MFwKOmoR6YpBqaOeGU3M+ulhTXCdC/XVY/mQ+Tbruxlx4wSxvEVLqggywoVkMab3NqXnh2yrndnibentA5ka4iDfLNAT2NAPvzDWenmrtjYrZNRTiDoH4ZjahTBysR+ESqmTOnYPQcmU9ilGcP7Kf8y8xEndb3tWlBE=","layer_level":1},{"id":"e1d1f354-edc2-4c91-8d91-63d256dced21","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"分享码日志模型","description":"share-code-log-model","prompt":"创建ShareCodeLog模型的详细文档,包括分享码生成、使用记录、时间戳、用户信息等字段设计。说明分享码的生成算法和唯一性保证。文档化日志记录的完整流程和数据追踪机制。解释分享码的生命周期管理和过期策略。提供日志查询和统计分析的功能说明。","parent_id":"0bb34dac-0e1a-4cce-b41d-0194eda77f79","order":5,"progress_status":"completed","dependent_files":"backend/src/models/ShareCodeLog.js","gmt_create":"2026-06-30T14:05:22.625325+08:00","gmt_modified":"2026-06-30T14:32:46.410606+08:00","raw_data":"WikiEncrypted:Vv0H16AayoBzPxX7ZlaOUGlhYbZc4czqT8CWfnD/TT0eAt7tg/OAA6mgsocPcmsvG2PVtH5KfyjJ18P9rTMPxOEyjU1Gec605uXe0T2Yc9Mio8lwWTXlLiR9CHDgdmESC5j1t2aKR8fRd/OqASPFvLiR0grE99PCeoM7ob/y5BtcgxZWjzfCnfZNCwnjfkkosGhR45PqgoCyAC2Bvm0kMJCqP4lVPKf04wOTjSbr4eSl32wo9TqavhtHLUKJhoU1BhZbZ6uV7Gmzaq1mQWqsX71L36aDcvYYmopGt7DE2LJksbYCFrrNBgRhFv+N43uZbN5WL7wVhpvK8O4TVwd0FOwp+aZ7iAbUL7tgjCR8xtXJS5q57NTemsro4PJNWVbllR6P5VHcrSDBmtHsa6L1bXDOBei3zTdzkwRq37T3c3mujEECBZ/+Mz/9ujMM0yIhcbbPT/YGEGDAiU/BRLBAOMuV3WWC2MQhqRkoipHvCj8loLpu05az/NRT/cd/X5gfi0y7vJvNz1FLlIiiUEZfQro7D7k5gwTCP6/FBmDYgfPSOCN8xZdyb7gHNanf1+Cqj69JaEgpM8cJM/v7a47fURXAUR+wy+lsKH+YapUusdACBBPvzGrGTJGzBX9gZVLFdPZFt35TATN0bywZa5At1ySd8SIj2B3St+GopTloe/mXlC4w6a5oi4MsUi1aQNJUFynSnhmsvMHTFxp20vLRYRzH2gO2ReFyg+ErSFjXFKLsd7zrW/lMF0PFW90/eb7fGWQwoQT/GJ8bv50VRjO84z4xEz6cvM/y2o4LjMcbv2elQDtp6lJ6TC2Z9jG61tVu","layer_level":1},{"id":"c6207e0a-6059-40f8-a27d-367356363cbf","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"分享码日志管理","description":"share-code-log-management","prompt":"为分享码日志管理功能创建详细内容,深入解释分享码使用记录追踪、日志查询统计的实现细节。包含来自实际代码库的具体示例,展示日志列表查询、统计分析等功能。文档化分享码日志模型的配置选项、参数和返回值。解释日志记录的触发条件、查询过滤的使用场景。解决常见的日志管理问题如性能优化、数据清理等。使内容对初学者易于理解,同时为有经验的开发者提供足够的技术深度。","parent_id":"08dd4c40-3fd3-476c-bcca-4c8687a8d863","order":5,"progress_status":"completed","dependent_files":"backend/src/routes/shareCodeLogs.js,backend/src/models/ShareCodeLog.js,frontend/src/views/share-code/log.vue","gmt_create":"2026-06-30T14:05:25.898159+08:00","gmt_modified":"2026-06-30T14:33:14.029388+08:00","raw_data":"WikiEncrypted:Vv0H16AayoBzPxX7ZlaOULG3Baig8xCTbO2Ahhfn4705w5gj8ZRYmh46RDQMtCZDcT2ci8E8rsm8C/ie07Z01SjriTUMDr+8A42/BBZb/vivf/I1Ur0WP4FZh/48LAYVnwRQ0GNifiKYZ6r/iL/jguQ3fWxzUE0M/+R6HIELC8yJAbp7rcQIITL2AxtPIlU2pCBK/DCcqQD+ZybcLujwZWxLN3sOZv7I9hqca2d8RAp0ZUgYqh+tSW9DGD0yS9XHY1QrXl7hsXfIgSTvVprJ8RT5HOeKTMeBxcM288vxkz1ghLqaMTAik+OQN0BzR56crsJmaCilWkrOAX9R2xm8hLfGTGTwdwv0P6fYaXu6VwOHBRDHoIHfGrImp4IIqNl/qAQnBVEIF90ZUdARF/K4lVsKi5QByQzHd4xlLllAAhTWwK9S7HsZZ7T9HP6og6LjL0bhFAv7f4lX1gq2+EcdF4EC/sLc6w4D+SdCSFgVU0xdT56IyK2HCqk+Oa3x3yOT6iwe5gfFarTyyXSrSV3RDHIGxTQjw5ZLgrseB4w/uQSPLjoDkZLP8d/jXwMcNr4bqp8w9PxWyrUNViTfQB/UvF0DUtxSE2j6+nUvqGdl8Ix1VA62otvJvJFAikk9gVFtOHg+3qSjX3bq++/RQqakUc0NNE5MChQJYL/ZUX+MsmET7zMf7f8n+x8AWQTkhv433TAIPxZDEO7EVVshX752wWI5rwX+6dwESN5VijNJl/emYmtP7TslKL6O12aJ/nVMD0zmRsBl2iHy0RZkN9eLWDa/pklLR/Oqz4Pm2r2Dd1lh8gU5sHdMMVYjz/g/hdk4KVkvOKz7kAFP0wHLPPzNiplQ18EUANo91+uz1Y5VdeODz9dktzaFqMjD1octmfT4pX5YAT/zhIQc9MsKjbHTAueD6bqZxj3x0qiZ9gh05gFbrskmk5q2ogQ/HzE3E4lrM6f2tYMv8KzXjP7yKEHcMOBJpO9dQZd5i7it8/RiUAHSb7Vti8AKU8Vw+TOV55DcDhFbK5P9y2qvuxqUldoMQK17B9wEx2nncwPjOJP5wXEELVSCNDm9Z29WK5LjvNExjGy7E61ilKE+rLRV8OMZoA5ighPPFXalAtu7mLH9y8P8lhjNfSKFoGWqPz0GeSGHgYiYIJ2uAMIsp8PabUEf93feQ4gaKPupXFYXWZQFV+XZOLHbet0vp6KH5TBD2X2fQHG4FVe4IHTI4T5kGOpx+ZDv3WPjRDrHHl+CCVCwlkaovZU1dGMSoUsss8uXaSH63mv5fUu9tAM01OquwkJLbg==","layer_level":1},{"id":"ff078afb-bb04-4600-b51d-5af48a6a6f06","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"系统用户管理页面","description":"system-users","prompt":"创建系统用户管理页面的详细文档。全面介绍用户权限管理功能,包括用户列表展示、角色分配、权限控制和状态管理。详细说明用户的增删改查操作、密码重置和权限验证机制。记录用户角色的定义、权限矩阵和访问控制策略。解释用户登录日志、活动监控和安全审计功能。提供用户管理页面的批量操作、搜索过滤和数据导出的实现方案。","parent_id":"f00798b7-c49f-4260-b9c1-d1ee413b030a","order":5,"progress_status":"completed","dependent_files":"frontend/src/views/system/users/index.vue,frontend/src/api/user.js","gmt_create":"2026-06-30T14:05:55.603342+08:00","gmt_modified":"2026-06-30T14:39:03.429018+08:00","raw_data":"WikiEncrypted:gWB8HBj+8+/15rQhXgtMjBvJUaTQCtYwqrk1rWKWMXJ2ByhuPeDEe4J4aaVwd0GgkvyTIoPxLy0LzUPY8r27d/l3kXaZv/WIKLhXGNj4yqu/L9TGNhQd7PzwpK1IySbUybplyf6amFlUaZuCaMERjNdevMyzFYtpxg6ayafgmP7QZecNCYUUM3UDhFO+jU77Y3eONzUMc7vXH/eCT/Dc8cixl5LBJezboIymPfUKgJeIdetGX7IbiD8pL9tqiP3VV20ENuC361bvx5BHKgEgEz8r0ZRf+9GIa42eaVqFk9oS/OowsTalFP/WZp8IvsoQDgbxWtLfVja9CdwkAVvNFFoL92QsKVmMWwH4lC52GOFGmDtwWsWbsAQ7SC3FGCM9JqnaqrBk9L4OpLg7pbEGasp9n9YM4uL0i51ofbrskfLA7c5Ic8YWcfSq+YpP2Jfq2SfzWhkv6/69JsVm+ZeGECDYz/0BGLtJxuOHkE/X64/lMwm31m7RCbzrAT8s4fv70FYcrJ/e8ZTbBJJZ3nT1xOeu7NNolSYaUNRMKjj1f5XkM/bMio6syjKv3/sgDYeom2Z7KNC6qSiTtHSnUhR42TA/gepnPqFc654KQYnEbgtAxassS1rRCPSzZImnQue+Fm/xTdC7aQoeH7W9EGQhx9d/VKgE3DtmwgFfod4b9BL2E8Y+tjinaohB3LFSs0ywB30qKQeXZ0P5O00PShkYvMrnbrMgSYl9v1ikd2ca0x7UQMeS/9tanT+Nifwq7peDxs+vuwD8itOpOhe9lmEGyaunK3mOmMNU2qUP/IsFh7AG+0RI+ia2YOGLXRp/DAbZQOeiJotMpzzCetWsU2C7tkh4up/34yJu+PlIernbNrohRmq012Vk43bJsJuE/ozXHeWh2abw++XRn0rdJUXv4oHuxv/x/ou4BNRGgqxxLsK2sH44gu1qYF38dnjvjwos07VT3aeLuJQHfsrl3acgM+AniQul0Xzht3gFgcf88x++sScG3dMcqdCzRdr2YrFR","layer_level":2},{"id":"08dd4c40-3fd3-476c-bcca-4c8687a8d863","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"核心功能模块","description":"core-features","prompt":"为核心功能模块创建详细内容,深入解释实现细节、调用关系、接口、领域模型和使用模式。包含来自实际代码库的具体示例。文档化配置选项、参数和返回值。解释与其他组件的关系。解决常见问题及其解决方案。使内容对初学者易于理解,同时为有经验的开发者提供足够的技术深度。详细说明用户认证系统、品牌管理、型号管理、OTA固件管理、用户权限管理和分享码日志管理等核心功能的实现原理和使用方法。","order":6,"progress_status":"completed","dependent_files":"backend/src/middleware/auth.js,backend/src/services/userBootstrap.js,backend/src/validators/brand.js,backend/src/validators/model.js,backend/src/validators/ota.js,backend/src/utils/jwt.js,backend/src/utils/password.js","gmt_create":"2026-06-30T14:04:20.638906+08:00","gmt_modified":"2026-06-30T14:13:04.758812+08:00","raw_data":"WikiEncrypted:luoNp8LvFa7zGThvIT9T4gfD6KbzJyTAydbcRfVv0b71O04CYqWd+mhwOAKx5JsjRdElm0elYpXWbl1GcuBvfF0k/N/rYqIOGrNDyuFsYrr3vrPVHqwKfwIO8ii5FyJ9G2/CDKYKxfMvL5/eI5LLiI4dLJtQQ/EdXK+jGK6/3zTIZqdWj6UWzEW0mzY+65TLZKIQZsNDvuMmW4V+typo30j85XSOUpwUwj+/2P69d0p3/7KOTGhpxkQJpKwSS+Ou5oR7kyDTwjuBkFTeJYqyV4VYROOqBypa7dwYKe6Knr1LT+azHmTqixb1zXUPJQ6p979figgTjll32+b/GM+0T95z9Ds7J33B5KOsO0LOJ2cNLWiB+C528YQV0AHDkFf1mTE6bKTBGolo1fT4KVvufyT4JAn0aYmpJDe7tiniUE6tbKy3fen2CQn9ieLIOKFMeUBmDsDefoy1030Wnd5JzFcKgRtb87NRHcsiF5I+V+X2E2TlZUoJoBh2+PIAZYkxWcpXMD8Zpcfv17FAZo34dTydLS3wYxVC1tKcqor5qPs+woQNYAnvSCdaK3H0Hd9zIb2V13Yw4TRtaGR93SOAPzmuaylTjsqmJkhkPpPdL9RfBPI0NWsglIj0e7zkEcku4zGa6Hs0rFAUnvrmhf0fWTCe2cSQGsKT/x/At4Bbv1VXx/iJB5IG9L92sH9auvd3zPQzrXgvmZtIf5veeHTENNsFXlRqyHIlznBprPM1GVkTnIUQw7mmC+4Q/6jSl1Fv7xI6EG/1udBu/KeaPO67Hp8A1YNTf1ZspoQoSGsV4deaNlmJgBEN8AIyClPwel1TmRAOmWv+F7NI9qVhpN4XyaOA5Z3wLMRdd1TAxRzRXgbQWvO74iEk524UaIecqPr3oFFsE3HHj52svrYNQ4mHfD37w2y52cOqC/kcS+4oPBgecVMRLNK8zQe6TeyZZHyFxLrnPE3yPqPlVq908l/SlqwcGa2igXYfFHCVeaXwT6cPl+MscEbagyBiX4x1QnH/S6eX2dvxx0XY+44nhTYGW1tTBXetozbFeMqqAtV0XePJizOGsP3Lj2vFRJAHZ0N4cgNkiQhJ3KlyCoakiATQXJ/Ff/3M4frqDjOKNgpcGoZJVi8mS1gxHRzr2RdQoq+7KSMhmyGjVSrCbNN1TYIcbahutqBg+nR3vJ99qFoP53jpWwT8PrBP9LqIgRxcpoRf37MTX5j/d86fQw49ZGESGNenE5At8gBSjU2xnAIjZ+F33NfP8+Gz0UQ55JvwG8CjDXbe2noRsLFhkX2mEpZZURkUCUwgViZJht+EkhmoJGdb20nl7nQcUCRyeyH6+kS2RDlqP0MbMuZC3N8E2Cb6QEXiCy8cJTjg8OWpIOvFGO7W1FPwPDXlYJsM09Oo/VhFPx5ImU84OMMy2ku3T1pdBwi8FjXr1WPwwNmRTK4aqj4wrLgLiW5u7UXyrUQBDbS8o3sc5W2z0P8oFWcBaUYRtKmdryx/ogHWLuINkyfSUHAgkWx/keTw6SlEAPYdQGXbal3G4vO3aEnA4oCPhflkrg=="},{"id":"7272429b-c7fb-4bd8-9bd1-0093025d68b4","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"仪表板API","description":"dashboard-api","prompt":"为仪表板API创建详细的RESTful API文档。记录系统统计数据查询的HTTP方法、URL模式、请求/响应模式和数据聚合功能。包含品牌数量统计、型号分布情况、OTA更新状态和用户活跃度等指标的查询接口。提供数据聚合查询、时间序列分析和图表数据格式的实现指南。文档化缓存策略、性能优化和实时数据更新机制。包含自定义统计维度和数据导出功能的使用示例。","parent_id":"7e9246a0-207e-47e8-bc26-b9d36ae6f2f8","order":6,"progress_status":"completed","dependent_files":"backend/src/routes/dashboard.js","gmt_create":"2026-06-30T14:04:55.156596+08:00","gmt_modified":"2026-06-30T14:34:26.686007+08:00","raw_data":"WikiEncrypted:rL6JaAWnwczCsZW+uBgt2MaU2Sf5hn65RLINj/MhHZqs/HaL1M/vKzdpRke4FGDeaqlgIkX0Vsq6pgMDhS1PLtsNQBQbbup3R7hfDCWHR7czvQfTQrqQOghuXOCS5RshiZIhSV5UutgR3IhtdYwYuC1cGrxnqubBTLaiNlwSkSCBwNnKv5wnHnP/kSTtGschyyeMxsR0xgLm93y19LUJxzQ35x+o+JHgNt7L1clDn1f2Q/ndGER8N5G6D30Ca4ktQc/XzBkD73s6Y6ATaZU4fF9lJjkb7Xouo6VBeWM/AWnZDx7lOLLIfGHZwEixsbqfV3DPFQnQ5ouP8ITf9zPIvOLqXdiBK/eE4w9o+KnoarDckNX5GdOib9xHogvsjnppRV6HPQAkLwj79jVPVWMDFLLrOA7s4nnSkQ2unS6yWJOH41xes7IM36ZsyWIWGoF/ZfncMR2vb1d6KRd6jKE7U1rWCkhwBMRCtJWteXsXljdFTmntEBDtsnylR8gDBvxw3yX85/iRQE3fgUnx1bzG1Csq7hyeTpYLzKCJGgsoGmXQcuPQy3kvG53RM8x3PLEYSYlDCNn77yDInY9vGLH3AEhP8HfRR/ZpbZtEbTEenKBq3Lpp9JNVMypx8WTiGDNr7Uox6UrnQJn77vaDePXLU9RL2zqzb/ft4ghSWgWkGdxcVZuueg+R6jh5VidCS/2lM4RB6CLZx8B4fjDo0lPC5qjbZfKjw3oBNOXus90NdOMlDs9sK5B5bdAy+xI12Ku3TaX9pvbhun/UkHYHxw/izxoU5pEPmr5H4iOsOOjz723tH+aqaoOA3SfDR3E9vWvd1I8qWQrmf409xaZfuoDpga88y+qC2speLpfqP5XDm76K0m5hvzZI5F54vflZN5TXb6GFYN7/9nNbsPZ4oBgYfPy3GhtEe/eoit9VkApe/PFsqnJ/5EEdU8SvT1wjGsczIvpTY4dSR5q8YpQL6lNH2Q==","layer_level":1},{"id":"830433a7-7370-479c-aa05-c21ff47b059e","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"分享码日志页面","description":"share-code-log","prompt":"创建分享码日志页面的详细文档。全面介绍分享码使用记录的查询和分析功能,包括日志列表展示、时间筛选、用户搜索和统计分析。详细说明日志数据的格式化显示、分页加载和实时更新机制。记录分享码的生成规则、有效期管理和使用状态跟踪。解释日志查询的高级功能,包括条件筛选、数据导出和报表生成。提供分享码日志页面的性能优化、数据可视化和用户体验改进方案。","parent_id":"f00798b7-c49f-4260-b9c1-d1ee413b030a","order":6,"progress_status":"completed","dependent_files":"frontend/src/views/share-code/log.vue,frontend/src/api/shareCodeLog.js","gmt_create":"2026-06-30T14:05:55.603485+08:00","gmt_modified":"2026-06-30T14:40:47.220384+08:00","raw_data":"WikiEncrypted:Vv0H16AayoBzPxX7ZlaOUKj5ui7aJNjWR2KaITM+ncU6ladAgr1aX4O1zoYG4BKYxYSLSuvZ2LqnWBJ2QqydzLeyBat1iN9bTXVMqMkgeJtkcSlNEEEBOpwdoKxUJii0pBbTaTPljEgvGCJAdvtM6yaGorC0QzbypPecbpVh3DAjgPtWtUIfgnh/GYXu7HMfEOLjMMyQuJypBLnNAvdE2xXmS/QoHf10Z8jKuZHUEbhw3ognUK++ZjIED7IEMXsM2HoDIWWy2lZE539AcsA9nkIOFMRa34TlykOLVIWGhN+H7uZGRqff0XX8Lwt5hNvL1a/3ZPm/zZJtFJRzY1PmfxyaUjEbF7KQMiGdKNAX1ycQenLZ/ynZX1xiEakxuX4S5qxospfzPGG27gDX8bJKL+3QoqYMxU/6AdnQ3DIox9pP4fapR3p3RYlpJRtSqqFEeeU0AUWmUNHPyBCPgHccE+XNZpISolk2Hln2oVX4yMeI9psNaMz1DpxYj4xlswa92pmvtFEAcryIpMdytbdeAPC2p6O1fyHRkNXdSzu513mdblf+dxvTQs9AEKnzH5IISdpT3oqa0TxsQIonzIXjfyPDQ23xC74ZjI+olJBdCnklVb77alqfTKijeVHqhz8E/oBRslPIuRrBTmbr4MUfnnGv4ABxmqo/MJdG1aSWK+VLXi2S9P5Yi5E/Wwu8H8cYl86z0TdwDM5Hl0l+X0abPVyDJOcHyVvz80tpUlxcC6G9Xz4/vjCq0xfqYtDV4NM2ClDyMsuxq67I9S6UOCBAZbHH5N3WOzgPrZNyfbeFUpydMKmMOgBh5GjkQ3Pz2D+83z+wBDSk8PV0mzk0Re6AqwtuTJtZLBFtavN7E0GJp1Bq+B9fOhkW73CxJvwqIx6freEb2JUkKP8CUVULlLyar8uKaRA6QH9uFiT1SJZkH1fc9CMBH3H/RzAhtB21FP4KFAVk/ha2CsflO9bdZVM3OkChSKQ3qPNzib6+R66ZevkbT7skK19HcLJO3Rr1NOP9tTy0Hy9THr5msllCLl7NDMQi1yiK5GSaztoHJr7ZWuX4FV7iAHww5fyqzLeaVFXK","layer_level":2},{"id":"a3ddc4e4-116f-4781-ba9f-17c85c85396e","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"部署与运维","description":"deployment-operations","prompt":"创建部署与运维文档,详细说明Docker容器化部署、环境配置和生产部署流程。包含容器编排配置、服务依赖关系和网络设置。提供部署脚本的使用说明和自动化部署流程。文档化环境变量配置、数据库连接设置和缓存配置。包含监控指标、日志管理和性能调优建议。提供故障排除指南、备份恢复策略和灾难恢复计划。说明CI/CD流程、版本发布和回滚策略。包含安全配置、防火墙设置和访问控制。","order":7,"progress_status":"completed","dependent_files":"backend/Dockerfile,frontend/Dockerfile,scripts/upload.sh,backend/restart.sh,backend/stop.sh,DEPLOY.md","gmt_create":"2026-06-30T14:04:20.639263+08:00","gmt_modified":"2026-06-30T14:12:37.808551+08:00","raw_data":"WikiEncrypted:0IKfLNOWe9mZfG1jVts3w2XbjO+yyEmY3ONOjrL5GjA8+3c0QEcD9OcCVHu+1BW/N5NkoQV86wegqQ9ShX8iSQ2xYIaslcmoc/Kv5OAnUwWV3nuAw37SIDSnlfEVjxgdWIfKDpMe9ANqqSg43yyyS0j6a1ZNPv/lWSKJTBIXQlfQxEh97cKf/j/LT7ms4fDbTvmHrdkW/jEQefQD7MAtQ00jFlMbUkoCaGNftGOahpB8DxiKjvXF2XHkIBSB+ljy8IAN480duozYW3EHkn9BG5DRSK26AvZUAJe48qfnGYdQfTAGEglE/1Hn6EV/Nm/Lb8UvgmdnuBaKTUiZRNooEwAeDN9FVwpQ7worjnl8Wzo8Ngbl2o07Zf9fN+KcjkIURxsPmfGu9sD6V9l1RLWZ6dtbz4WoDiQPm5pDkI0VaVo0KZrYJVqQnyYHiGLgYtwhQ7nukY+LoRhX7Hvp89YdV9IhrLTE1jsDAeCRw579FnnAzgvBLN6zixDwRCyr3c/VerMICukg17xUZBvIhgXPW2oB8aKCvEWd1DoVOOwTTeSRGaBc3YL768bwg/fgb5nMcpkKKEG8oFTiD0WQgV1WrAWmdgqLUic6njl7DH/nPwtU4kvstO6ylEWrBJh8WjjnuFdwsNYNFOXm0yLRUDPlwltGbjmmrB5+TUJes5jh7PSvyD1XFtM0grPtQpYdIM5GZtNYa172rLsqEbW9ZLMORo0XYf0lxg0pNCmBI7/OgcsUnosbnfqoLleFwHsBwIR6IWox1cSj2a8ZP2DdIF1EkS1STU4kcntPhJg/MU6IAHZByl9NaNnPAT9fbjHNYrjgvAocunW1h/GGjsi8yIsr/MYBKQRMHt0Ebx6FyjCoTdVyEZBmj1Ln8n53VqlQUaTLOTlY/+PLW72ayeVV1dbw6nODIElixkXST6BfiyyzGX4NcPjHvrMEj0x7iuPn5XqyNW9cCnIYaLK1POgQXVHvC78pjRvPdQcV2ofQwNXhiUd3OqejjZKYOiXsozbPI2ZmCy/R1XmqKiDotFyd9coZZagRFDm+CP5hAAYjGnqmUIWlnx031QhinbQ19YgTQyPe91UfMnBMYE4piy3j0ar6hKLZHqUrpDdEZc5IhsPiIpVEuUWChMcy/y5JR+jvcKVuXqaFmjA9MVUhyp8t4AslTb+B3O4g1WLlMBmUN1HYwc9S1io68uObIzwvIOg0IF1WiR4jj+F6m4Pqw+Zd+Bvs8HEJ0br7bBtr39YNX1ya0Us="},{"id":"0545bd33-f65c-4e1f-b2cb-04bea825925d","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"开发指南","description":"development-guide","prompt":"创建开发指南,提供代码规范、开发流程和测试策略。包含项目结构说明、命名约定和编码标准。文档化开发环境配置、调试技巧和性能优化方法。提供Git工作流程、分支策略和代码审查指南。包含单元测试、集成测试和端到端测试的实施方法。说明依赖管理、版本控制和发布流程。提供常见开发问题的解决方案和最佳实践。包含团队协作规范和文档维护指南。","order":8,"progress_status":"completed","dependent_files":"frontend/vite.config.js,backend/src/config/env.js,backend/src/config/loadEnv.js,.gitignore,frontend/package.json,backend/package.json","gmt_create":"2026-06-30T14:04:20.639515+08:00","gmt_modified":"2026-06-30T14:13:05.375027+08:00","raw_data":"WikiEncrypted:F3QgleoEfoy16cQggYe9C/ucQxiwh0okVA48AmODs5RKNS8ZgNngqmnHSFcG/1UaJxx+3dUn+EkMTpYUsOg40oH68Nx1IqebKqiC8fCVx8Z5dT3AgUInNoQcVloeb4yQhs1Oufr9wTZo7fZfd2EizXXbLOV05/YLO/Bja3sQV4rbFZH21TOR2bzMC4+Bvh1azFozPC/ma5QkwfbGmawutVaO402XGO+5xnrsGCsVAQr2M8O409R1wh77/5lzca6ZD0OFo1iagqoMSEXyVx6XsW38aoy3TPa93+p8MSYGEXZKUGuo0U8H/GetcXMJ21wi60fPOQhiVg9ePRXxG8wnT9Q0YxxUIb7JWiGkDgtE0n5qcCo7xcA3FzYOZ2CH4OR+2LjRjmTWUU2SbXJ9jXKWnXP8HREN4oERnOXLRcGVAA7zHN3BIkCz7pscIxGQ+sNh+xZdhrgSBP4BqoZEnRQQlyDrqA29kJpJXZs60se4zqy3SRe8xpB8DiB6puJqsECj+osTyJFPENV14Gb/ixpNzHho1UY3Ohpt+Eabp6RG572PwSRkBaegUf5Y5MXeueFRfD4XghD+p9yS8u6aohyV378+hS80kvZnTWd2eiveVL7Q90v5DiOSQLApGbIV2G44IxEw2uIKsuWvffHT8JHO2RxJkitMMfOC+OSLMwph76bCPS+0hYM8kFgEl4xFyTGggt/JE3njsBxW49xeYZfnUYUDndPRxIWDFVT2WqUKup7aZQ4gUFcycaEH97G5lD1JgGQVGN5jGL2XjksL8EL2WrkZkj7Mkwlo03MFQYETI/wPTEqUdcsgFdXOCGMw34z5Pz2VlnNXn3faJcb/EmO700V9FtLl4sedrhQFfq8oyBIwwycQNtQGBdx2pfCJhjeLMKSeQ+BYoUxddVIpPoBdo0d4G4rrlK2BREXPCuyeH4dmB3rCPyTcWheDZtVLdid/MJwCujHV9jJVj3W5UTW5+pwkcBenKNyb/A0yYUqFDaylhA4Ff6dgxMUqeZiNfxGXORFKuNgQwd/4941XXqA/U0pX1uyPm8Z+ydGBmtScMw2cLtmWLFtUYA04OsqUWVaaX63Dvyr0OuohK8gSIX2m89KrHPV5hcCaH32WycKCi3zgSG+RfFLX9+I+LG0YQ2dcyRU5VVK4h1mkv4MRIqphyEjifJBweXHgmS8nP8kbRuPQfeM++y+1VPvUYwiTlHK48YW/H0Q/FLkXfQA6l3gVZA2jHJ5zPTJcbfY+3fRJr2g="}],"wiki_items":[{"catalog_id":"de69fb0c-330e-4831-813d-94fb958688da","title":"快速开始","description":"getting-started","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"817d80e4-81ba-4f8a-b0e2-85e99d8a73ef","gmt_create":"2026-06-30T14:07:37.609842+08:00","gmt_modified":"2026-06-30T14:07:37.615532+08:00"},{"catalog_id":"70ba09ee-60a3-41f9-bdda-3cb904cb26de","title":"系统架构","description":"architecture-design","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"2b5fd78d-2407-4ccc-8807-9bb05c0a687e","gmt_create":"2026-06-30T14:08:09.125669+08:00","gmt_modified":"2026-06-30T14:08:09.130252+08:00"},{"catalog_id":"dd61923f-65f8-4e98-85f4-0e0a0a649a27","title":"项目概述","description":"project-overview","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"190d3cad-a28e-4cf2-a8c7-64d953415cca","gmt_create":"2026-06-30T14:09:11.170718+08:00","gmt_modified":"2026-06-30T14:09:11.17433+08:00"},{"catalog_id":"7e9246a0-207e-47e8-bc26-b9d36ae6f2f8","title":"后端API文档","description":"backend-api","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"1f4b6f57-25c5-444e-a943-d162d896dc21","gmt_create":"2026-06-30T14:10:41.226897+08:00","gmt_modified":"2026-06-30T14:10:41.230722+08:00"},{"catalog_id":"0bb34dac-0e1a-4cce-b41d-0194eda77f79","title":"数据库设计","description":"database-schema","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"4553d9a4-e0e6-4bc3-b285-ecc6df9dc822","gmt_create":"2026-06-30T14:10:45.945099+08:00","gmt_modified":"2026-06-30T14:10:45.95039+08:00"},{"catalog_id":"aa2583bf-2c6e-4792-b794-1563db547d08","title":"前端组件","description":"frontend-components","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"ed153077-3827-4586-8838-812707189c14","gmt_create":"2026-06-30T14:11:17.426266+08:00","gmt_modified":"2026-06-30T14:11:17.430273+08:00"},{"catalog_id":"a3ddc4e4-116f-4781-ba9f-17c85c85396e","title":"部署与运维","description":"deployment-operations","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"c45b2f5f-49f8-4c8d-b489-44b4c6800e99","gmt_create":"2026-06-30T14:12:37.804986+08:00","gmt_modified":"2026-06-30T14:12:37.808728+08:00"},{"catalog_id":"08dd4c40-3fd3-476c-bcca-4c8687a8d863","title":"核心功能模块","description":"core-features","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"d4cb0c3c-97e9-449f-8918-f1c01e7e3561","gmt_create":"2026-06-30T14:13:04.754131+08:00","gmt_modified":"2026-06-30T14:13:04.758965+08:00"},{"catalog_id":"0545bd33-f65c-4e1f-b2cb-04bea825925d","title":"开发指南","description":"development-guide","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"d7d400d2-aa83-47a2-b61a-55a62369b426","gmt_create":"2026-06-30T14:13:05.373036+08:00","gmt_modified":"2026-06-30T14:13:05.375096+08:00"},{"catalog_id":"bcc45977-c058-4033-b0b1-9fd4cd7f4443","title":"前端架构","description":"frontend-architecture","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"6b28e060-0be3-411e-8a94-3777d165d10e","gmt_create":"2026-06-30T14:14:52.873609+08:00","gmt_modified":"2026-06-30T14:14:52.878043+08:00"},{"catalog_id":"0f657e8b-77cb-4604-81cd-d3e921d28e21","title":"布局组件","description":"layout-components","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"b6857b45-a960-4168-92dd-1edcf6567e47","gmt_create":"2026-06-30T14:15:24.293181+08:00","gmt_modified":"2026-06-30T14:15:24.2965+08:00"},{"catalog_id":"d34906db-4455-4481-9512-b29115655378","title":"认证系统API","description":"auth-api","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"7f894188-cf72-40a2-af95-f13ef3dd1f6e","gmt_create":"2026-06-30T14:15:47.975759+08:00","gmt_modified":"2026-06-30T14:15:47.98224+08:00"},{"catalog_id":"7f36202b-af69-4fc0-b62b-a57e415deb69","title":"部署指南","description":"deployment-guide","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","gmt_create":"2026-06-30T14:16:33.823992+08:00","gmt_modified":"2026-06-30T14:16:33.828188+08:00"},{"catalog_id":"1af0f0e8-0c53-41d7-a894-47d9cc19d4f9","title":"用户认证系统","description":"authentication-system","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"772c69b5-886e-48f6-bd11-faf8ca2155e8","gmt_create":"2026-06-30T14:17:38.562007+08:00","gmt_modified":"2026-06-30T14:17:38.563255+08:00"},{"catalog_id":"dbe5d77f-6f4d-476c-88cf-797b80a11a11","title":"实体关系设计","description":"entity-relationships","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"0efcac71-9db4-49c9-a660-690dcb97cd54","gmt_create":"2026-06-30T14:18:01.58459+08:00","gmt_modified":"2026-06-30T14:18:01.58743+08:00"},{"catalog_id":"5a3639b1-98bc-4bc7-a346-91ed56edd2af","title":"后端架构","description":"backend-architecture","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","gmt_create":"2026-06-30T14:19:05.640846+08:00","gmt_modified":"2026-06-30T14:19:05.643035+08:00"},{"catalog_id":"779d6806-96dc-4c97-8cfb-15a3d7855bd1","title":"品牌管理API","description":"brands-api","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"b66da3f2-6889-45dc-a824-2591d2f5f0f3","gmt_create":"2026-06-30T14:19:07.598117+08:00","gmt_modified":"2026-06-30T14:19:07.600914+08:00"},{"catalog_id":"eb78ed75-b786-4b43-ba43-58a5ea8a23a6","title":"业务组件","description":"business-components","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"2971fa4f-335a-4294-9668-0967b9047d66","gmt_create":"2026-06-30T14:19:27.851755+08:00","gmt_modified":"2026-06-30T14:19:27.855695+08:00"},{"catalog_id":"f96081f7-f508-41e2-bd45-a5b36a1ea114","title":"环境配置","description":"environment-config","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"62bcda0f-7c78-4109-9649-58bbf9fd68ae","gmt_create":"2026-06-30T14:21:11.821343+08:00","gmt_modified":"2026-06-30T14:21:11.825384+08:00"},{"catalog_id":"1e3d40bc-a833-4f35-891c-9dd96f09a1a3","title":"品牌管理","description":"brand-management","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"babe3ec0-01cb-43c3-93db-7e59cdccce68","gmt_create":"2026-06-30T14:21:25.618321+08:00","gmt_modified":"2026-06-30T14:21:25.623289+08:00"},{"catalog_id":"92f94141-482e-499c-bbc3-6101e70206ff","title":"品牌模型","description":"brand-model","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"ef11f60f-47aa-41bf-8884-6d51bc9ae8ef","gmt_create":"2026-06-30T14:21:29.093976+08:00","gmt_modified":"2026-06-30T14:21:29.097382+08:00"},{"catalog_id":"94ec54d4-0aa0-4e58-8e63-5ad6ddb6edbe","title":"型号管理API","description":"models-api","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","gmt_create":"2026-06-30T14:23:05.595716+08:00","gmt_modified":"2026-07-01T17:22:10.388812+08:00"},{"catalog_id":"b47d7f83-5401-4a63-ade2-f087a2f61987","title":"数据流设计","description":"data-flow-design","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"c6f2cb24-ff10-4ae7-87c2-b23b9bbee033","gmt_create":"2026-06-30T14:23:25.129255+08:00","gmt_modified":"2026-06-30T14:23:25.133578+08:00"},{"catalog_id":"f00798b7-c49f-4260-b9c1-d1ee413b030a","title":"页面组件","description":"page-components","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"f0978b42-6f98-470e-922f-22dec2fac24d","gmt_create":"2026-06-30T14:24:27.13852+08:00","gmt_modified":"2026-06-30T14:24:27.143035+08:00"},{"catalog_id":"72a24a80-f221-49da-88a8-83c0f49f4e9d","title":"型号模型","description":"model-model","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"edd1d813-70d4-49de-9f9e-e3ebf7a68678","gmt_create":"2026-06-30T14:24:50.785915+08:00","gmt_modified":"2026-06-30T14:24:50.78921+08:00"},{"catalog_id":"00a9d595-dc79-4ca4-8264-1c3f4a200a28","title":"监控运维","description":"monitoring-operations","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"86f882d7-9e64-4c38-85e7-4782fd55fed2","gmt_create":"2026-06-30T14:25:08.609638+08:00","gmt_modified":"2026-06-30T14:25:08.61406+08:00"},{"catalog_id":"93c96675-6099-4ed5-8f40-6a47b3050712","title":"型号管理","description":"model-management","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"8d4422fd-bd93-431d-a97c-70b75f370f82","gmt_create":"2026-06-30T14:26:44.041445+08:00","gmt_modified":"2026-07-01T17:22:44.422114+08:00"},{"catalog_id":"41e8823b-fa7a-4a80-809d-cf21088bdba2","title":"OTA固件API","description":"ota-api","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"be7e1733-8c9e-4849-99b0-bab40fdf271e","gmt_create":"2026-06-30T14:26:52.74545+08:00","gmt_modified":"2026-06-30T14:26:52.749367+08:00"},{"catalog_id":"6cd96b12-bb94-4748-94a8-9ef9bf21aee0","title":"集成模式","description":"integration-patterns","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"4619dc3e-419f-435b-ba7c-e600e188743a","gmt_create":"2026-06-30T14:27:35.804293+08:00","gmt_modified":"2026-06-30T14:27:35.809224+08:00"},{"catalog_id":"02f97459-8352-4fff-9216-8fcabb128d77","title":"故障排除","description":"troubleshooting-faq","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"ff04bd0e-99c4-481c-ac8c-3c1a6cae1fb5","gmt_create":"2026-06-30T14:28:16.984682+08:00","gmt_modified":"2026-06-30T14:28:16.989286+08:00"},{"catalog_id":"92ff3472-40b9-4adf-82b2-faf5a4d4b158","title":"OTA固件模型","description":"ota-model","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"b2376dbd-002b-4469-8e6e-71748e46e7c2","gmt_create":"2026-06-30T14:28:22.047078+08:00","gmt_modified":"2026-06-30T14:28:22.050489+08:00"},{"catalog_id":"6dc54635-13f8-4ae3-b3a7-54c65dea2997","title":"OTA固件管理","description":"ota-firmware-management","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"da7627b0-17b7-42c7-a029-e357bc889416","gmt_create":"2026-06-30T14:29:32.814324+08:00","gmt_modified":"2026-06-30T18:39:56.546951+08:00"},{"catalog_id":"b4054b83-f0cb-4b7e-9b3d-effc904a5686","title":"用户管理API","description":"users-api","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"8f464fc9-6537-45fa-a0dd-eacdf742b5a1","gmt_create":"2026-06-30T14:30:22.103174+08:00","gmt_modified":"2026-06-30T14:30:22.110852+08:00"},{"catalog_id":"7a728623-5bd2-48eb-80d9-0f253bc74123","title":"用户模型","description":"user-model","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"b5718a44-f452-496d-83c3-4e89b844c709","gmt_create":"2026-06-30T14:30:58.462691+08:00","gmt_modified":"2026-06-30T14:30:58.467737+08:00"},{"catalog_id":"4d08f4ca-84f9-4f9c-8d9a-0983f78a7005","title":"用户权限管理","description":"user-permission-management","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"100cbee2-f7a5-4cc9-83a3-900a4aacac7e","gmt_create":"2026-06-30T14:30:59.491588+08:00","gmt_modified":"2026-06-30T14:30:59.497862+08:00"},{"catalog_id":"a6304333-66ad-4b0c-834f-a6a514069e3f","title":"分享码日志API","description":"share-code-logs-api","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"77bc73e0-8709-4209-96e0-5522f9356b06","gmt_create":"2026-06-30T14:32:03.999307+08:00","gmt_modified":"2026-06-30T14:32:04.003175+08:00"},{"catalog_id":"e1d1f354-edc2-4c91-8d91-63d256dced21","title":"分享码日志模型","description":"share-code-log-model","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"539729a8-aa4b-40c6-bf3b-ec9f467f7717","gmt_create":"2026-06-30T14:32:46.405942+08:00","gmt_modified":"2026-06-30T14:32:46.410705+08:00"},{"catalog_id":"c6207e0a-6059-40f8-a27d-367356363cbf","title":"分享码日志管理","description":"share-code-log-management","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"cf1f3ceb-e3b1-4d5c-8353-f0ea4345414c","gmt_create":"2026-06-30T14:33:14.023031+08:00","gmt_modified":"2026-06-30T14:33:14.02952+08:00"},{"catalog_id":"8f0760f5-ef8b-43ef-8fd0-7c6d1f693193","title":"侧边栏Logo组件","description":"sidebar-logo-component","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"0e003133-7d1a-4708-8599-fc71707070d6","gmt_create":"2026-06-30T14:34:09.992825+08:00","gmt_modified":"2026-06-30T14:34:09.99631+08:00"},{"catalog_id":"7272429b-c7fb-4bd8-9bd1-0093025d68b4","title":"仪表板API","description":"dashboard-api","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"799ec9fc-088e-456c-8f93-72516adac3ac","gmt_create":"2026-06-30T14:34:26.68183+08:00","gmt_modified":"2026-06-30T14:34:26.686097+08:00"},{"catalog_id":"105cfe1d-aeeb-44c1-ac3b-6550f2c7a307","title":"首页仪表板","description":"home-page","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"ad988472-7d0b-4076-86c8-f14661c5923d","gmt_create":"2026-06-30T14:35:15.427082+08:00","gmt_modified":"2026-06-30T14:35:15.43438+08:00"},{"catalog_id":"727c25ac-db22-4b34-9486-6fd6946f64f3","title":"标签页视图组件","description":"tabs-view-component","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"4b6d6abc-bfd2-48a5-9c5e-de89f278f887","gmt_create":"2026-06-30T14:35:27.880644+08:00","gmt_modified":"2026-06-30T14:35:27.886677+08:00"},{"catalog_id":"c8151791-2f8d-4e1e-8139-b0cf921ef002","title":"登录页面","description":"login-page","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"7eee30c6-7725-456b-8b43-35b5e4df7e99","gmt_create":"2026-06-30T14:36:20.14068+08:00","gmt_modified":"2026-06-30T14:36:20.14737+08:00"},{"catalog_id":"32dbace3-24e6-4a2d-9f87-83f2ec825b71","title":"密码修改对话框","description":"change-password-dialog","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"5b84c784-85d8-46e0-8972-e7816f6bd687","gmt_create":"2026-06-30T14:36:50.047707+08:00","gmt_modified":"2026-06-30T14:36:50.062351+08:00"},{"catalog_id":"af7f747a-9be6-41c3-b091-4ee5901d8cc7","title":"品牌管理页面","description":"brand-management","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"791c01a2-dea1-407b-948d-3e2da8cbebed","gmt_create":"2026-06-30T14:37:33.758372+08:00","gmt_modified":"2026-06-30T14:37:33.76504+08:00"},{"catalog_id":"748c8db9-9197-4c3b-ae1d-a6e51d058342","title":"型号管理页面","description":"model-management","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","gmt_create":"2026-06-30T14:38:54.071337+08:00","gmt_modified":"2026-07-01T17:22:40.416555+08:00"},{"catalog_id":"ff078afb-bb04-4600-b51d-5af48a6a6f06","title":"系统用户管理页面","description":"system-users","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"6003d293-f2aa-4c49-817a-c7fa652890ed","gmt_create":"2026-06-30T14:39:03.424765+08:00","gmt_modified":"2026-06-30T14:39:03.42914+08:00"},{"catalog_id":"f23cd2ae-fcf4-445f-b8e9-b3382f277ae0","title":"OTA固件管理页面","description":"ota-management","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","gmt_create":"2026-06-30T14:40:01.702004+08:00","gmt_modified":"2026-06-30T18:39:29.639208+08:00"},{"catalog_id":"830433a7-7370-479c-aa05-c21ff47b059e","title":"分享码日志页面","description":"share-code-log","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"73336201-a22f-4329-afc6-40fb5f00f4f1","gmt_create":"2026-06-30T14:40:47.216934+08:00","gmt_modified":"2026-06-30T14:40:47.220483+08:00"}],"wiki_overview":{"content":"\u003cblog\u003e\n\n# 耳机品牌与型号管理平台项目概述\n\n## 1. 项目介绍\n\n### 项目目的\n这是一个基于Vue 3 + Express的耳机品牌与型号管理平台,旨在为音频设备制造商和经销商提供完整的品牌、型号、OTA固件更新以及用户权限管理功能。\n\n### 核心目标\n- 提供统一的品牌和型号数据管理界面\n- 支持OTA固件升级管理和版本控制\n- 实现多用户权限体系和访问控制\n- 提供分享码日志追踪功能\n- 构建现代化的前后端分离架构\n\n### 目标用户\n- 音频设备厂商管理员\n- 技术支持人员\n- 系统维护人员\n\n## 2. 技术架构\n\n### 整体架构设计\n\n```mermaid\ngraph TB\n subgraph \"前端层 (Frontend)\"\n FE_Vue[Vue 3 应用]\n FE_Router[Vue Router]\n FE_API[API 请求封装]\n FE_Components[组件库]\n end\n \n subgraph \"后端层 (Backend)\"\n BE_Express[Express 框架]\n BE_Routes[路由模块]\n BE_Middleware[中间件]\n BE_Services[业务服务]\n end\n \n subgraph \"数据层 (Data Layer)\"\n DB_MySQL[MySQL 数据库]\n DB_Sequelize[Sequelize ORM]\n Cache_Redis[Redis 缓存]\n end\n \n subgraph \"基础设施\"\n Docker[Docker 容器化]\n Nginx[Nginx 反向代理]\n Env[环境配置]\n end\n \n FE_Vue --\u003e FE_Router\n FE_Vue --\u003e FE_API\n FE_API --\u003e BE_Express\n BE_Express --\u003e BE_Routes\n BE_Express --\u003e BE_Middleware\n BE_Routes --\u003e BE_Services\n BE_Services --\u003e DB_Sequelize\n DB_Sequelize --\u003e DB_MySQL\n BE_Services --\u003e Cache_Redis\n BE_Express --\u003e Nginx\n Nginx --\u003e FE_Vue\n Docker --\u003e BE_Express\n Docker --\u003e FE_Vue\n```\n\n### 核心设计模式\n- **MVC架构**: 后端采用经典的模型-视图-控制器模式\n- **分层架构**: 清晰的业务逻辑分层,便于维护和扩展\n- **中间件模式**: 统一的请求处理流程\n- **依赖注入**: 通过模块化设计实现松耦合\n\n## 3. 关键实现\n\n### 主要入口点\n\n#### 后端入口\n- **入口文件**: `backend/src/app.js` - 应用程序主入口,配置中间件、路由和数据库连接\n- **配置文件**: `backend/src/config/database.js` - 数据库连接配置,支持环境变量\n- **路由聚合**: `backend/src/routes/index.js` - 所有路由模块的统一导入和导出\n\n#### 前端入口 \n- **应用入口**: `frontend/src/main.js` - Vue应用初始化,配置Element Plus和路由\n- **应用根组件**: `frontend/src/App.vue` - 根组件模板\n- **路由配置**: `frontend/src/router/index.js` - 路由定义和导航守卫\n\n### 核心模块\n\n#### 数据模型 (Models)\n```mermaid\nerDiagram\n BRAND ||--o{ MODEL : \"包含\"\n MODEL ||--o{ OTA : \"支持\"\n BRAND ||--|| DASHBOARD_USER : \"管理\"\n \n BRAND {\n int id PK\n string name\n }\n \n MODEL {\n int id PK\n int brand_id FK\n string name\n string description\n }\n \n OTA {\n int id PK\n int model_id FK\n string version\n string file_path\n datetime create_time\n }\n \n DASHBOARD_USER {\n int id PK\n string username\n string password_hash\n boolean is_super_admin\n int status\n }\n```\n\n#### API 路由结构\n```mermaid\ngraph TD\n Auth[认证路由] --\u003e Login[用户登录]\n Auth --\u003e Profile[用户信息]\n Auth --\u003e Password[修改密码]\n \n Brands[品牌路由] --\u003e BrandList[品牌列表]\n Brands --\u003e BrandCRUD[品牌增删改查]\n \n Models[型号路由] --\u003e ModelList[型号列表]\n Models --\u003e ModelCRUD[型号增删改查]\n \n OTA[OTA路由] --\u003e OTAList[OTA列表]\n OTA --\u003e OTACRUD[OTA增删改查]\n \n Users[用户路由] --\u003e UserList[用户列表]\n Users --\u003e UserCRUD[用户增删改查]\n \n Dashboard[仪表板路由] --\u003e Stats[统计信息]\n Dashboard --\u003e Reports[报表生成]\n```\n\n### 配置管理\n\n#### 环境配置\n- **Docker Compose**: `docker-compose.yml` - 容器化部署配置,包含前后端服务和网络设置\n- **开发配置**: `frontend/vite.config.js` - Vite构建工具配置,支持代理和别名\n- **包管理**: 使用pnpm作为包管理器,支持工作空间\n\n#### 数据库配置\n- **ORM配置**: `backend/src/config/database.js` - Sequelize ORM配置\n- **Redis缓存**: `backend/src/config/redis.js` - Redis连接配置\n- **日志系统**: `backend/src/config/logger.js` - Winston日志配置\n\n### 外部依赖\n\n#### 后端依赖\n```mermaid\ngraph LR\n Express[Express 4.21] --\u003e Middleware[中间件生态]\n Sequelize[Sequelize 6.37] --\u003e MySQL[MySQL2 3.11]\n JWT[jsonwebtoken 9.0] --\u003e Auth[认证系统]\n Axios[Axios 1.7] --\u003e HTTP[HTTP客户端]\n Zod[3.23] --\u003e Validation[数据验证]\n AWS[aws-sdk 3.650] --\u003e S3[对象存储]\n Redis[ioredis 5.6] --\u003e Cache[缓存系统]\n```\n\n#### 前端依赖\n```mermaid\ngraph LR\n Vue[Vu3 3.3.4] --\u003e Composition[组合式API]\n Router[Vue Router 4.2.4] --\u003e Navigation[路由导航]\n ElementPlus[Element Plus 2.3.14] --\u003e UI[UI组件库]\n Axios[Axios 1.5.0] --\u003e HTTP[HTTP通信]\n Icons[图标库] --\u003e Components[图标组件]\n```\n\n### 集成点\n\n#### API 接口设计\n```mermaid\nsequenceDiagram\n participant Client as 前端客户端\n participant Auth as 认证接口\n participant User as 用户接口\n participant Data as 数据接口\n \n Client-\u003e\u003e+Auth: POST /api/auth/login\n Auth--\u003e\u003e-Client: 返回JWT令牌\n \n Client-\u003e\u003e+User: GET /api/auth/me\n User--\u003e\u003e-Client: 返回用户信息\n \n Client-\u003e\u003e+Data: GET /api/brands\n Data--\u003e\u003e-Client: 返回品牌数据\n \n Client-\u003e\u003e+Data: POST /api/models\n Data--\u003e\u003e-Client: 返回创建结果\n```\n\n## 4. 核心功能\n\n### 功能概览\n\n#### 用户认证系统\n- **登录认证**: 基于JWT的无状态认证\n- **权限控制**: 支持超级管理员和普通用户的权限区分\n- **密码安全**: 密码哈希存储和验证\n\n#### 品牌管理系统\n- **品牌维护**: 品牌的增删改查操作\n- **品牌关联**: 与型号的多对一关系管理\n- **数据验证**: 基于Zod的输入验证\n\n#### 型号管理功能\n- **型号列表**: 支持分页和搜索\n- **型号详情**: 包含详细的技术规格\n- **OTA关联**: 与固件更新的关联管理\n\n#### OTA固件管理\n- **版本控制**: 固件版本管理和发布\n- **文件上传**: 支持固件文件的上传和存储\n- **更新推送**: 向设备推送固件更新\n\n### 功能架构图\n\n```mermaid\nstateDiagram-v2\n [*] --\u003e 未登录\n 未登录 --\u003e 登录中: 用户输入凭据\n 登录中 --\u003e 已登录: 认证成功\n 登录中 --\u003e 未登录: 认证失败\n \n 已登录 --\u003e 品牌管理: 管理员权限\n 已登录 --\u003e 型号管理: 普通用户权限\n 已登录 --\u003e OTA管理: 技术支持权限\n \n 品牌管理 --\u003e 数据库操作: CRUD操作\n 型号管理 --\u003e 数据库操作: CRUD操作\n OTA管理 --\u003e 文件上传: 固件上传\n \n 已登录 --\u003e 修改密码: 用户操作\n 修改密码 --\u003e 已登录: 更新成功\n \n 已登录 --\u003e 退出登录: 用户操作\n 退出登录 --\u003e 未登录: 清除会话\n```\n\n### 实现亮点\n\n#### 响应式设计\n- **组件化开发**: 基于Vue 3 Composition API的组件化架构\n- **状态管理**: 结合Vue Router实现的单页应用体验\n- **主题系统**: 支持暗色主题切换\n\n#### 开发体验\n- **热重载**: Vite提供的快速开发服务器\n- **TypeScript支持**: 良好的类型安全保障\n- **代码分割**: 按需加载优化性能\n\n#### 生产部署\n- **容器化**: Docker支持一键部署\n- **反向代理**: Nginx配置优化静态资源服务\n- **环境隔离**: 支持开发、测试、生产多环境配置\n\n## 5. 总结与建议\n\n### 项目优势\n1. **架构清晰**: 前后端分离,职责明确\n2. **技术栈现代**: Vue 3 + Express + MySQL的成熟技术组合\n3. **可扩展性强**: 模块化设计便于功能扩展\n4. **部署友好**: Docker化部署简化运维\n\n### 改进建议\n1. **增加单元测试**: 补充前端和后端的测试覆盖率\n2. **完善文档**: 添加详细的API文档和开发指南\n3. **监控告警**: 集成应用性能监控和错误追踪\n4. **安全加固**: 增强CSRF防护和API限流机制\n\n### 下一步计划\n1. 实现完整的用户权限管理\n2. 添加数据导入导出功能\n3. 优化移动端适配\n4. 集成自动化测试和CI/CD流水线\n\n---\n\n**Sources:**\n- [README.md](README.md)\n- [backend/package.json](backend/package.json)\n- [frontend/package.json](frontend/package.json)\n- [backend/src/app.js](backend/src/app.js)\n- [backend/src/config/database.js](backend/src/config/database.js)\n- [backend/src/models/index.js](backend/src/models/index.js)\n- [backend/src/routes/index.js](backend/src/routes/index.js)\n- [frontend/src/main.js](frontend/src/main.js)\n- [frontend/src/App.vue](frontend/src/App.vue)\n- [docker-compose.yml](docker-compose.yml)\n- [frontend/vite.config.js](frontend/vite.config.js)\n- [backend/src/models/Brand.js](backend/src/models/Brand.js)\n- [backend/src/routes/auth.js](backend/src/routes/auth.js)\n- [frontend/src/router/index.js](frontend/src/router/index.js)\n- [frontend/src/api/auth.js](frontend/src/api/auth.js)\n\n\u003c/blog\u003e","gmt_create":"2026-06-30T14:01:22.420851+08:00","gmt_modified":"2026-06-30T14:01:22.420851+08:00","id":"f0295b72-1b14-4146-868c-8a0c307045c3","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414"},"wiki_readme":{"content":"No readme file","gmt_create":"2026-06-30T13:59:47.635503+08:00","gmt_modified":"2026-06-30T13:59:47.635503+08:00","id":"60f4194d-74f4-49d9-ae65-220e9f5829cc","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414"},"wiki_repo":{"id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"dashboard","progress_status":"completed","wiki_present_status":"COMPLETED","optimized_catalog":"\".\\n├── .pnpm-store/v11/\\n│ ├── files/\\n│ │ ├── 00/\\n│ │ ├── 01/\\n│ │ ├── 02/\\n│ │ ├── 03/\\n│ │ ├── 04/\\n│ │ ├── 05/\\n│ │ ├── 06/\\n│ │ ├── 07/\\n│ │ ├── 08/\\n│ │ ├── 09/\\n│ │ ├── 0a/\\n│ │ ├── 0b/\\n│ │ ├── 0c/\\n│ │ ├── 0d/\\n│ │ ├── 0e/\\n│ │ ├── 0f/\\n│ │ ├── 10/\\n│ │ ├── 11/\\n│ │ ├── 12/\\n│ │ ├── 13/\\n│ │ ├── 14/\\n│ │ ├── 15/\\n│ │ ├── 16/\\n│ │ ├── 17/\\n│ │ ├── 18/\\n│ │ ├── 19/\\n│ │ ├── 1a/\\n│ │ ├── 1b/\\n│ │ ├── 1c/\\n│ │ ├── 1d/\\n│ │ ├── 1e/\\n│ │ ├── 1f/\\n│ │ ├── 20/\\n│ │ ├── 21/\\n│ │ ├── 22/\\n│ │ ├── 23/\\n│ │ ├── 24/\\n│ │ ├── 25/\\n│ │ ├── 26/\\n│ │ ├── 27/\\n│ │ ├── 28/\\n│ │ ├── 29/\\n│ │ ├── 2a/\\n│ │ ├── 2b/\\n│ │ ├── 2c/\\n│ │ ├── 2d/\\n│ │ ├── 2e/\\n│ │ ├── 2f/\\n│ │ ├── 30/\\n│ │ ├── 31/\\n│ │ ├── 32/\\n│ │ ├── 33/\\n│ │ ├── 34/\\n│ │ ├── 35/\\n│ │ ├── 36/\\n│ │ ├── 37/\\n│ │ ├── 38/\\n│ │ ├── 39/\\n│ │ ├── 3a/\\n│ │ ├── 3b/\\n│ │ ├── 3c/\\n│ │ ├── 3d/\\n│ │ ├── 3e/\\n│ │ ├── 3f/\\n│ │ ├── 40/\\n│ │ ├── 41/\\n│ │ ├── 42/\\n│ │ ├── 43/\\n│ │ ├── 44/\\n│ │ ├── 45/\\n│ │ ├── 46/\\n│ │ ├── 47/\\n│ │ ├── 48/\\n│ │ ├── 49/\\n│ │ ├── 4a/\\n│ │ ├── 4b/\\n│ │ ├── 4c/\\n│ │ ├── 4d/\\n│ │ ├── 4e/\\n│ │ ├── 4f/\\n│ │ ├── 50/\\n│ │ ├── 51/\\n│ │ ├── 52/\\n│ │ ├── 53/\\n│ │ ├── 54/\\n│ │ ├── 55/\\n│ │ ├── 56/\\n│ │ ├── 57/\\n│ │ ├── 58/\\n│ │ ├── 59/\\n│ │ ├── 5a/\\n│ │ ├── 5b/\\n│ │ ├── 5c/\\n│ │ ├── 5d/\\n│ │ ├── 5e/\\n│ │ ├── 5f/\\n│ │ ├── 60/\\n│ │ ├── 61/\\n│ │ ├── 62/\\n│ │ ├── 63/\\n│ │ ├── 64/\\n│ │ ├── 65/\\n│ │ ├── 66/\\n│ │ ├── 67/\\n│ │ ├── 68/\\n│ │ ├── 69/\\n│ │ ├── 6a/\\n│ │ ├── 6b/\\n│ │ ├── 6c/\\n│ │ ├── 6d/\\n│ │ ├── 6e/\\n│ │ ├── 6f/\\n│ │ ├── 70/\\n│ │ ├── 71/\\n│ │ ├── 72/\\n│ │ ├── 73/\\n│ │ ├── 74/\\n│ │ ├── 75/\\n│ │ ├── 76/\\n│ │ ├── 77/\\n│ │ ├── 78/\\n│ │ ├── 79/\\n│ │ ├── 7a/\\n│ │ ├── 7b/\\n│ │ ├── 7c/\\n│ │ ├── 7d/\\n│ │ ├── 7e/\\n│ │ ├── 7f/\\n│ │ ├── 80/\\n│ │ ├── 81/\\n│ │ ├── 82/\\n│ │ ├── 83/\\n│ │ ├── 84/\\n│ │ ├── 85/\\n│ │ ├── 86/\\n│ │ ├── 87/\\n│ │ ├── 88/\\n│ │ ├── 89/\\n│ │ ├── 8a/\\n│ │ ├── 8b/\\n│ │ ├── 8c/\\n│ │ ├── 8d/\\n│ │ ├── 8e/\\n│ │ ├── 8f/\\n│ │ ├── 90/\\n│ │ ├── 91/\\n│ │ ├── 92/\\n│ │ ├── 93/\\n│ │ ├── 94/\\n│ │ ├── 95/\\n│ │ ├── 96/\\n│ │ ├── 97/\\n│ │ ├── 98/\\n│ │ ├── 99/\\n│ │ ├── 9a/\\n│ │ ├── 9b/\\n│ │ ├── 9c/\\n│ │ ├── 9d/\\n│ │ ├── 9e/\\n│ │ ├── 9f/\\n│ │ ├── a0/\\n│ │ ├── a1/\\n│ │ ├── a2/\\n│ │ ├── a3/\\n│ │ ├── a4/\\n│ │ ├── a5/\\n│ │ ├── a6/\\n│ │ ├── a7/\\n│ │ ├── a8/\\n│ │ ├── a9/\\n│ │ ├── aa/\\n│ │ ├── ab/\\n│ │ ├── ac/\\n│ │ ├── ad/\\n│ │ ├── ae/\\n│ │ ├── af/\\n│ │ ├── b0/\\n│ │ ├── b1/\\n│ │ ├── b2/\\n│ │ ├── b3/\\n│ │ ├── b4/\\n│ │ ├── b5/\\n│ │ ├── b6/\\n│ │ ├── b7/\\n│ │ ├── b8/\\n│ │ ├── b9/\\n│ │ ├── ba/\\n│ │ ├── bb/\\n│ │ ├── bc/\\n│ │ ├── bd/\\n│ │ ├── be/\\n│ │ ├── bf/\\n│ │ ├── c0/\\n│ │ ├── c1/\\n│ │ ├── c2/\\n│ │ ├── c3/\\n│ │ ├── c4/\\n│ │ ├── c5/\\n│ │ ├── c6/\\n│ │ ├── c7/\\n│ │ ├── c8/\\n│ │ ├── c9/\\n│ │ ├── ca/\\n│ │ ├── cb/\\n│ │ ├── cc/\\n│ │ ├── cd/\\n│ │ ├── ce/\\n│ │ ├── cf/\\n│ │ ├── d0/\\n│ │ ├── d1/\\n│ │ ├── d2/\\n│ │ ├── d3/\\n│ │ ├── d4/\\n│ │ ├── d5/\\n│ │ ├── d6/\\n│ │ ├── d7/\\n│ │ ├── d8/\\n│ │ ├── d9/\\n│ │ ├── da/\\n│ │ ├── db/\\n│ │ ├── dc/\\n│ │ ├── dd/\\n│ │ ├── de/\\n│ │ ├── df/\\n│ │ ├── e0/\\n│ │ ├── e1/\\n│ │ ├── e2/\\n│ │ ├── e3/\\n│ │ ├── e4/\\n│ │ ├── e5/\\n│ │ ├── e6/\\n│ │ ├── e7/\\n│ │ ├── e8/\\n│ │ ├── e9/\\n│ │ ├── ea/\\n│ │ ├── eb/\\n│ │ ├── ec/\\n│ │ ├── ed/\\n│ │ ├── ee/\\n│ │ ├── ef/\\n│ │ ├── f0/\\n│ │ ├── f1/\\n│ │ ├── f2/\\n│ │ ├── f3/\\n│ │ ├── f4/\\n│ │ ├── f5/\\n│ │ ├── f6/\\n│ │ ├── f7/\\n│ │ ├── f8/\\n│ │ ├── f9/\\n│ │ ├── fa/\\n│ │ ├── fb/\\n│ │ ├── fc/\\n│ │ ├── fd/\\n│ │ ├── fe/\\n│ │ └── ff/\\n│ └── projects/7abbab685605e7ae627cb6fc4a2315b1/\\n│ └── package.json\\n├── backend/\\n│ ├── src/\\n│ │ ├── config/\\n│ │ │ ├── database.js\\n│ │ │ ├── env.js\\n│ │ │ ├── loadEnv.js\\n│ │ │ ├── logger.js\\n│ │ │ └── redis.js\\n│ │ ├── middleware/\\n│ │ │ ├── auth.js\\n│ │ │ └── bodyLimit.js\\n│ │ ├── models/\\n│ │ │ ├── Brand.js\\n│ │ │ ├── DashboardUser.js\\n│ │ │ ├── Model.js\\n│ │ │ ├── Ota.js\\n│ │ │ ├── ShareCodeLog.js\\n│ │ │ └── index.js\\n│ │ ├── routes/\\n│ │ │ ├── auth.js\\n│ │ │ ├── brands.js\\n│ │ │ ├── dashboard.js\\n│ │ │ ├── index.js\\n│ │ │ ├── models.js\\n│ │ │ ├── ota.js\\n│ │ │ ├── shareCodeLogs.js\\n│ │ │ └── users.js\\n│ │ ├── services/\\n│ │ │ ├── curveClient.js\\n│ │ │ ├── eqCacheStorage.js\\n│ │ │ ├── measurementStorage.js\\n│ │ │ ├── otaStorage.js\\n│ │ │ └── userBootstrap.js\\n│ │ ├── utils/\\n│ │ │ ├── jwt.js\\n│ │ │ ├── password.js\\n│ │ │ └── response.js\\n│ │ ├── validators/\\n│ │ │ ├── brand.js\\n│ │ │ ├── model.js\\n│ │ │ └── ota.js\\n│ │ └── app.js\\n│ ├── .gitignore\\n│ ├── Dockerfile\\n│ ├── README.md\\n│ ├── package.json\\n│ ├── pnpm-lock.yaml\\n│ ├── restart.sh\\n│ ├── start.sh\\n│ └── stop.sh\\n├── frontend/\\n│ ├── public/\\n│ ├── src/\\n│ │ ├── api/\\n│ │ │ ├── auth.js\\n│ │ │ ├── brand.js\\n│ │ │ ├── dashboard.js\\n│ │ │ ├── model.js\\n│ │ │ ├── ota.js\\n│ │ │ ├── shareCodeLog.js\\n│ │ │ └── user.js\\n│ │ ├── components/\\n│ │ │ ├── ChangePasswordDialog.vue\\n│ │ │ ├── SidebarLogo.vue\\n│ │ │ └── TabsView.vue\\n│ │ ├── layout/\\n│ │ │ └── index.vue\\n│ │ ├── router/\\n│ │ │ └── index.js\\n│ │ ├── styles/\\n│ │ │ └── lux-theme.css\\n│ │ ├── utils/\\n│ │ │ ├── auth.js\\n│ │ │ ├── request.js\\n│ │ │ └── tabs.js\\n│ │ ├── views/\\n│ │ │ ├── brand/\\n│ │ │ │ └── index.vue\\n│ │ │ ├── home/\\n│ │ │ │ └── index.vue\\n│ │ │ ├── login/\\n│ │ │ │ └── index.vue\\n│ │ │ ├── model/\\n│ │ │ │ └── index.vue\\n│ │ │ ├── ota/\\n│ │ │ │ └── index.vue\\n│ │ │ ├── share-code/\\n│ │ │ │ └── log.vue\\n│ │ │ └── system/users/\\n│ │ │ └── index.vue\\n│ │ ├── App.vue\\n│ │ └── main.js\\n│ ├── .gitignore\\n│ ├── Dockerfile\\n│ ├── README.md\\n│ ├── build-and-deploy.bat\\n│ ├── index.html\\n│ ├── install.bat\\n│ ├── nginx.conf\\n│ ├── package-lock.json\\n│ ├── package.json\\n│ ├── pnpm-lock.yaml\\n│ ├── pnpm-workspace.yaml\\n│ ├── start.bat\\n│ └── vite.config.js\\n├── scripts/\\n│ └── upload.sh\\n├── .gitignore\\n├── DEPLOY.md\\n├── README.md\\n└── docker-compose.yml\\n\"","current_document_structure":"WikiEncrypted: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","catalogue_think_content":"WikiEncrypted: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","recovery_checkpoint":"wiki_generation_completed","last_commit_id":"e2577ff6619512d1dbf8263467060650b0182fcd","last_commit_update":"2026-07-01T17:22:44.998712+08:00","gmt_create":"2026-06-02T14:43:54.575428+08:00","gmt_modified":"2026-07-01T17:22:44.998712+08:00","extend_info":"{\"language\":\"zh\",\"active\":true,\"branch\":\"main\",\"shareStatus\":\"\",\"server_error_code\":\"\",\"cosy_version\":\"1.4.0\"}"}} \ No newline at end of file +{"code_snippets":[{"id":"2ba6ee170718db40d0a0c1e0e271ab8c","path":"frontend/src/views/ota/index.vue","line_range":"1-1003","gmt_create":"2026-06-30T18:39:29.609311+08:00","gmt_modified":"2026-06-30T18:39:29.609311+08:00"},{"id":"3e935f654a28968186e9260f2c5035c7","path":"frontend/src/api/ota.js","line_range":"1-68","gmt_create":"2026-06-30T18:39:29.609615+08:00","gmt_modified":"2026-06-30T18:39:29.609615+08:00"},{"id":"edbb69e747bbcd76dd1bc3a361ebf7c0","path":"frontend/src/api/blacklist.js","line_range":"1-57","gmt_create":"2026-06-30T18:39:29.609775+08:00","gmt_modified":"2026-06-30T18:39:29.609775+08:00"},{"id":"4e817a7f3bd90bb9e57c6a2e9009380f","path":"frontend/src/api/otaTargetDevice.js","line_range":"1-57","gmt_create":"2026-06-30T18:39:29.609938+08:00","gmt_modified":"2026-06-30T18:39:29.609938+08:00"},{"id":"72de55f3f022487777e9ad301c9d942b","path":"backend/src/routes/blacklist.js","line_range":"1-223","gmt_create":"2026-06-30T18:39:29.610091+08:00","gmt_modified":"2026-06-30T18:39:29.610091+08:00"},{"id":"ba9810388706ac5ffb0156f74ada8b88","path":"backend/src/routes/otaTargetDevice.js","line_range":"1-248","gmt_create":"2026-06-30T18:39:29.610237+08:00","gmt_modified":"2026-06-30T18:39:29.610237+08:00"},{"id":"f3b38dfd34a76e0d2e62a863fca301a8","path":"frontend/src/views/ota/index.vue","line_range":"420-831","gmt_create":"2026-06-30T18:39:29.611431+08:00","gmt_modified":"2026-06-30T18:39:29.611431+08:00"},{"id":"ae7ce676a4f649c15d0490bbb2954cfe","path":"frontend/src/api/ota.js","line_range":"13-67","gmt_create":"2026-06-30T18:39:29.611582+08:00","gmt_modified":"2026-06-30T18:39:29.611583+08:00"},{"id":"859ba4011a4720ad0ad431545e144986","path":"frontend/src/api/blacklist.js","line_range":"12-56","gmt_create":"2026-06-30T18:39:29.611724+08:00","gmt_modified":"2026-06-30T18:39:29.611724+08:00"},{"id":"c910f65a89648ecf30c84b77b136ad70","path":"frontend/src/api/otaTargetDevice.js","line_range":"12-55","gmt_create":"2026-06-30T18:39:29.611869+08:00","gmt_modified":"2026-06-30T18:39:29.611869+08:00"},{"id":"c042223cf0aa5b2e59be1747923b4baf","path":"frontend/src/api/ota.js","line_range":"13-49","gmt_create":"2026-06-30T18:39:29.612183+08:00","gmt_modified":"2026-06-30T18:39:29.612183+08:00"},{"id":"b1e9d90908a2a5e3d545ca0cf2c86769","path":"backend/src/routes/ota.js","line_range":"24-268","gmt_create":"2026-06-30T18:39:29.612679+08:00","gmt_modified":"2026-06-30T18:39:29.612679+08:00"},{"id":"aae8712924efab58e019d0c963576781","path":"backend/src/routes/blacklist.js","line_range":"96-139","gmt_create":"2026-06-30T18:39:29.612821+08:00","gmt_modified":"2026-06-30T18:39:29.612821+08:00"},{"id":"fb9daf52780951bc4b93f14b1fcfa8f1","path":"backend/src/routes/otaTargetDevice.js","line_range":"96-139","gmt_create":"2026-06-30T18:39:29.612979+08:00","gmt_modified":"2026-06-30T18:39:29.612979+08:00"},{"id":"23aa29b61d1387fca0530a0a1e57e27f","path":"backend/src/routes/ota.js","line_range":"1-292","gmt_create":"2026-06-30T18:39:29.613104+08:00","gmt_modified":"2026-06-30T18:39:29.613104+08:00"},{"id":"e6f541a0af8390b3610d1e380a8d3236","path":"backend/src/models/Ota.js","line_range":"4-94","gmt_create":"2026-06-30T18:39:29.61355+08:00","gmt_modified":"2026-06-30T18:39:29.61355+08:00"},{"id":"4aad83e3e76ccc16e5b91d801ab1b278","path":"backend/src/models/BlackList.js","line_range":"5-36","gmt_create":"2026-06-30T18:39:29.613684+08:00","gmt_modified":"2026-06-30T18:39:29.613684+08:00"},{"id":"54c99704b8bcabdfe63adda9c4392452","path":"backend/src/models/OtaTargetDevice.js","line_range":"5-37","gmt_create":"2026-06-30T18:39:29.613824+08:00","gmt_modified":"2026-06-30T18:39:29.613824+08:00"},{"id":"b7c66d1bc7887a6132dc3acbf6421a5d","path":"backend/src/models/Ota.js","line_range":"1-97","gmt_create":"2026-06-30T18:39:29.613982+08:00","gmt_modified":"2026-06-30T18:39:29.613982+08:00"},{"id":"058bc5c3e018c854b5cf42905abd45d7","path":"backend/src/models/BlackList.js","line_range":"1-36","gmt_create":"2026-06-30T18:39:29.614129+08:00","gmt_modified":"2026-06-30T18:39:29.614129+08:00"},{"id":"3830639d0b7444aa8a1cf3c80d4eef7e","path":"backend/src/models/OtaTargetDevice.js","line_range":"1-37","gmt_create":"2026-06-30T18:39:29.614371+08:00","gmt_modified":"2026-06-30T18:39:29.614371+08:00"},{"id":"be497152bcedca75299e4c2521c11859","path":"backend/src/services/otaStorage.js","line_range":"46-103","gmt_create":"2026-06-30T18:39:29.614741+08:00","gmt_modified":"2026-06-30T18:39:29.614741+08:00"},{"id":"af76fcd4277eeb577f573e21de923bbf","path":"backend/src/config/env.js","line_range":"1-13","gmt_create":"2026-06-30T18:39:29.614989+08:00","gmt_modified":"2026-06-30T18:39:29.614989+08:00"},{"id":"b8c21c93e526039c96f1df526ebdcafe","path":"backend/src/services/otaStorage.js","line_range":"1-113","gmt_create":"2026-06-30T18:39:29.615206+08:00","gmt_modified":"2026-06-30T18:39:29.615206+08:00"},{"id":"424dfd038ca84be6195b08d7032a1235","path":"backend/src/routes/ota.js","line_range":"68-102","gmt_create":"2026-06-30T18:39:29.61565+08:00","gmt_modified":"2026-06-30T18:39:29.61565+08:00"},{"id":"2fc67d9140f7c12759a5188eb6f9b204","path":"frontend/src/views/ota/index.vue","line_range":"305-338","gmt_create":"2026-06-30T18:39:29.615816+08:00","gmt_modified":"2026-06-30T18:39:29.615816+08:00"},{"id":"e3a6003c52bf8b8487bb1b8709da6b4b","path":"backend/src/utils/response.js","line_range":"1-25","gmt_create":"2026-06-30T18:39:29.615973+08:00","gmt_modified":"2026-06-30T18:39:29.615973+08:00"},{"id":"cabe1728acba4dab25a86b5788412e46","path":"backend/src/routes/ota.js","line_range":"25-66","gmt_create":"2026-06-30T18:39:29.616135+08:00","gmt_modified":"2026-06-30T18:39:29.616135+08:00"},{"id":"45f0756fae3928b75883500a5006f7f0","path":"frontend/src/views/ota/index.vue","line_range":"645-734","gmt_create":"2026-06-30T18:39:29.616292+08:00","gmt_modified":"2026-06-30T18:39:29.616292+08:00"},{"id":"f2e521eddcaa25c62a309d5b0af997fa","path":"backend/src/routes/blacklist.js","line_range":"96-204","gmt_create":"2026-06-30T18:39:29.616595+08:00","gmt_modified":"2026-06-30T18:39:29.616595+08:00"},{"id":"6b7ea701575cf98b6ee3431f68ad5649","path":"frontend/src/views/ota/index.vue","line_range":"736-817","gmt_create":"2026-06-30T18:39:29.61672+08:00","gmt_modified":"2026-06-30T18:39:29.61672+08:00"},{"id":"506ecfb839ed7fb3f4199ade7e4b6a64","path":"backend/src/routes/otaTargetDevice.js","line_range":"96-208","gmt_create":"2026-06-30T18:39:29.617009+08:00","gmt_modified":"2026-06-30T18:39:29.617009+08:00"},{"id":"7a5ae98472bdc4806472d50e6b88c997","path":"frontend/src/utils/request.js","line_range":"1-72","gmt_create":"2026-06-30T18:39:29.617154+08:00","gmt_modified":"2026-06-30T18:39:29.617154+08:00"},{"id":"69c930f997042246d4e17369ede6f826","path":"frontend/src/router/index.js","line_range":"1-91","gmt_create":"2026-06-30T18:39:29.617278+08:00","gmt_modified":"2026-06-30T18:39:29.617278+08:00"},{"id":"6b61c60063d41432a3cc1ac4d1699181","path":"frontend/src/utils/request.js","line_range":"44-69","gmt_create":"2026-06-30T18:39:29.619097+08:00","gmt_modified":"2026-06-30T18:39:29.619097+08:00"},{"id":"752be7590bb954b39e5a8f41ce8811eb","path":"backend/src/routes/blacklist.js","line_range":"159-183","gmt_create":"2026-06-30T18:39:29.619239+08:00","gmt_modified":"2026-06-30T18:39:29.619239+08:00"},{"id":"4daa6ac2900ccb8c9fd7142d0ecdd298","path":"backend/src/routes/otaTargetDevice.js","line_range":"142-208","gmt_create":"2026-06-30T18:39:29.619362+08:00","gmt_modified":"2026-06-30T18:39:29.619362+08:00"},{"id":"e22545d86c6efa26c57aea0e355a57f6","path":"DEPLOY.md","line_range":"226-256","gmt_create":"2026-06-30T18:39:29.619502+08:00","gmt_modified":"2026-06-30T18:39:29.619502+08:00"},{"id":"05900505c40339d0cc93870281600479","path":"backend/src/models/BlackList.js","line_range":"1-37","gmt_create":"2026-06-30T18:39:56.520893+08:00","gmt_modified":"2026-06-30T18:39:56.520893+08:00"},{"id":"921d509d2d71df1e2bace1390640482a","path":"backend/src/models/OtaTargetDevice.js","line_range":"1-38","gmt_create":"2026-06-30T18:39:56.521018+08:00","gmt_modified":"2026-06-30T18:39:56.521018+08:00"},{"id":"149a41cdd5807ad4f666e9eb2463fa68","path":"frontend/src/views/ota/index.vue","line_range":"1-628","gmt_create":"2026-06-30T18:39:56.521152+08:00","gmt_modified":"2026-06-30T18:39:56.521152+08:00"},{"id":"771e33c2a04ba5eb1a504cf7aa1e9c36","path":"frontend/src/views/blacklist/index.vue","line_range":"1-381","gmt_create":"2026-06-30T18:39:56.521272+08:00","gmt_modified":"2026-06-30T18:39:56.521272+08:00"},{"id":"f23242497ee4dc9ed490a1d09d0d3d91","path":"frontend/src/views/ota-target-device/index.vue","line_range":"1-386","gmt_create":"2026-06-30T18:39:56.521399+08:00","gmt_modified":"2026-06-30T18:39:56.521399+08:00"},{"id":"0c0ca507fcaf2164af19adf77eaf72e8","path":"backend/src/validators/ota.js","line_range":"1-36","gmt_create":"2026-06-30T18:39:56.523127+08:00","gmt_modified":"2026-06-30T18:39:56.523127+08:00"},{"id":"420851439a300cff8b7fa324589ce87a","path":"backend/src/validators/blacklist.js","line_range":"1-14","gmt_create":"2026-06-30T18:39:56.52326+08:00","gmt_modified":"2026-06-30T18:39:56.52326+08:00"},{"id":"e92ce9787ed66ea4dd0821e0c8f28d8a","path":"backend/src/validators/otaTargetDevice.js","line_range":"1-14","gmt_create":"2026-06-30T18:39:56.523384+08:00","gmt_modified":"2026-06-30T18:39:56.523384+08:00"},{"id":"0696a947e8ffd03fd403809f77673c55","path":"backend/src/routes/ota.js","line_range":"24-66","gmt_create":"2026-06-30T18:39:56.523678+08:00","gmt_modified":"2026-06-30T18:39:56.523678+08:00"},{"id":"0f5328f2be7159ab2f533662f8992b10","path":"frontend/src/views/ota/index.vue","line_range":"384-412","gmt_create":"2026-06-30T18:39:56.524074+08:00","gmt_modified":"2026-06-30T18:39:56.524075+08:00"},{"id":"b6918b1988464553531aec983ea27b7d","path":"backend/src/models/BlackList.js","line_range":"5-32","gmt_create":"2026-06-30T18:39:56.524325+08:00","gmt_modified":"2026-06-30T18:39:56.524326+08:00"},{"id":"59e0c0eb304ea8fbb7145bc038c8fdf6","path":"backend/src/models/OtaTargetDevice.js","line_range":"5-33","gmt_create":"2026-06-30T18:39:56.524448+08:00","gmt_modified":"2026-06-30T18:39:56.524448+08:00"},{"id":"0991eb53c8fe806cf46decab5e748f75","path":"backend/src/services/otaStorage.js","line_range":"72-103","gmt_create":"2026-06-30T18:39:56.525119+08:00","gmt_modified":"2026-06-30T18:39:56.525119+08:00"},{"id":"a826e77f133d3db11e600f30b88f4e9a","path":"backend/src/validators/ota.js","line_range":"3-35","gmt_create":"2026-06-30T18:39:56.525629+08:00","gmt_modified":"2026-06-30T18:39:56.525629+08:00"},{"id":"4a33d32c1578fd612d900aa17246d8c2","path":"backend/src/validators/blacklist.js","line_range":"3-11","gmt_create":"2026-06-30T18:39:56.525734+08:00","gmt_modified":"2026-06-30T18:39:56.525734+08:00"},{"id":"4660c7ce6daeb3f765d39856dcf95f6f","path":"backend/src/validators/otaTargetDevice.js","line_range":"3-11","gmt_create":"2026-06-30T18:39:56.525836+08:00","gmt_modified":"2026-06-30T18:39:56.525836+08:00"},{"id":"7467dc2e2d22c93c63fa6342b2e08541","path":"frontend/src/views/ota/index.vue","line_range":"420-579","gmt_create":"2026-06-30T18:39:56.526564+08:00","gmt_modified":"2026-06-30T18:39:56.526564+08:00"},{"id":"4b5baf2b8dcd8468722cd31868c794b2","path":"frontend/src/views/ota/index.vue","line_range":"645-683","gmt_create":"2026-06-30T18:39:56.526669+08:00","gmt_modified":"2026-06-30T18:39:56.526669+08:00"},{"id":"20e79ab592f63eb9d23c0d563d5f5202","path":"backend/src/routes/blacklist.js","line_range":"16-71","gmt_create":"2026-06-30T18:39:56.527902+08:00","gmt_modified":"2026-06-30T18:39:56.527902+08:00"},{"id":"07afcaa71195b3d86386dcde14973a8d","path":"backend/src/routes/blacklist.js","line_range":"96-131","gmt_create":"2026-06-30T18:39:56.527997+08:00","gmt_modified":"2026-06-30T18:39:56.527997+08:00"},{"id":"2a5364613dbf0723f2e2a64affabb065","path":"frontend/src/views/blacklist/index.vue","line_range":"144-346","gmt_create":"2026-06-30T18:39:56.528097+08:00","gmt_modified":"2026-06-30T18:39:56.528097+08:00"},{"id":"12ad7a8b54f39c0717843220f341d59e","path":"backend/src/routes/otaTargetDevice.js","line_range":"16-71","gmt_create":"2026-06-30T18:39:56.528805+08:00","gmt_modified":"2026-06-30T18:39:56.528805+08:00"},{"id":"585261a6626a815d8f5f83b91a086eb9","path":"frontend/src/views/ota-target-device/index.vue","line_range":"144-351","gmt_create":"2026-06-30T18:39:56.529026+08:00","gmt_modified":"2026-06-30T18:39:56.529026+08:00"},{"id":"2a0437737a8daf4655f00caae7549a06","path":"backend/package.json","line_range":"11-24","gmt_create":"2026-06-30T18:39:56.529846+08:00","gmt_modified":"2026-06-30T18:39:56.529846+08:00"},{"id":"f0cfbce84fd69ea625e215367d5da707","path":"backend/package.json","line_range":"1-29","gmt_create":"2026-06-30T18:39:56.529954+08:00","gmt_modified":"2026-06-30T18:39:56.529954+08:00"},{"id":"fad5c52b0517044faace96133c6e570c","path":"backend/src/routes/ota.js","line_range":"174-181","gmt_create":"2026-06-30T18:39:56.530168+08:00","gmt_modified":"2026-06-30T18:39:56.530168+08:00"},{"id":"f62834891fb8675fbb1dcb6654b186e9","path":"backend/src/services/otaStorage.js","line_range":"95-98","gmt_create":"2026-06-30T18:39:56.530261+08:00","gmt_modified":"2026-06-30T18:39:56.530261+08:00"},{"id":"0c387969b601239a31cb0c672ef3c116","path":"backend/src/routes/blacklist.js","line_range":"108-112","gmt_create":"2026-06-30T18:39:56.530365+08:00","gmt_modified":"2026-06-30T18:39:56.530365+08:00"},{"id":"406e308cbdb4112d67f61a82a8118e9f","path":"backend/src/routes/otaTargetDevice.js","line_range":"108-112","gmt_create":"2026-06-30T18:39:56.530464+08:00","gmt_modified":"2026-06-30T18:39:56.530464+08:00"},{"id":"5d1069f11e2153ac8cd75f26c10256a2","path":"backend/src/routes/models.js","line_range":"1-659","gmt_create":"2026-07-01T17:22:10.342072+08:00","gmt_modified":"2026-07-01T17:22:10.342072+08:00"},{"id":"024c49b177309c95a9a6487c0c70ff28","path":"backend/src/models/Model.js","line_range":"1-53","gmt_create":"2026-07-01T17:22:10.342533+08:00","gmt_modified":"2026-07-01T17:22:10.342533+08:00"},{"id":"ed0beaf535b1c935f72da53c93cefd99","path":"backend/src/validators/model.js","line_range":"1-22","gmt_create":"2026-07-01T17:22:10.342848+08:00","gmt_modified":"2026-07-01T17:22:10.342848+08:00"},{"id":"b4d5cb8d79f05ea0bc1f56f20380f226","path":"backend/src/middleware/auth.js","line_range":"1-36","gmt_create":"2026-07-01T17:22:10.343354+08:00","gmt_modified":"2026-07-01T17:22:10.343354+08:00"},{"id":"d71cf669f581f1e2e6b7956768cf07e5","path":"frontend/src/api/model.js","line_range":"1-165","gmt_create":"2026-07-01T17:22:10.343696+08:00","gmt_modified":"2026-07-01T17:22:10.343696+08:00"},{"id":"2f44ab11354520681821b18c70b28ea5","path":"backend/src/services/squiglink.js","line_range":"1-322","gmt_create":"2026-07-01T17:22:10.344219+08:00","gmt_modified":"2026-07-01T17:22:10.344219+08:00"},{"id":"dfde97c120aa759be08496d7a1217bb5","path":"frontend/src/views/model/components/ModelFormDialog.vue","line_range":"1-555","gmt_create":"2026-07-01T17:22:10.344388+08:00","gmt_modified":"2026-07-01T17:22:10.344388+08:00"},{"id":"8ff91c81b391966d61e25fb150388eda","path":"backend/src/routes/models.js","line_range":"133-181","gmt_create":"2026-07-01T17:22:10.34633+08:00","gmt_modified":"2026-07-01T17:22:10.34633+08:00"},{"id":"f84073b86f81ac8811492a2bdf880f16","path":"backend/src/models/Model.js","line_range":"4-50","gmt_create":"2026-07-01T17:22:10.346534+08:00","gmt_modified":"2026-07-01T17:22:10.346534+08:00"},{"id":"9e84158ca8a0ddb6b5e5b73eb1bbe846","path":"backend/src/validators/model.js","line_range":"3-19","gmt_create":"2026-07-01T17:22:10.346772+08:00","gmt_modified":"2026-07-01T17:22:10.346772+08:00"},{"id":"5a517afeab7c85f15e321f8de509c92e","path":"backend/src/middleware/auth.js","line_range":"3-26","gmt_create":"2026-07-01T17:22:10.34715+08:00","gmt_modified":"2026-07-01T17:22:10.34715+08:00"},{"id":"61cdcff725a5d9f851c84d3976b11ad9","path":"frontend/src/api/model.js","line_range":"13-165","gmt_create":"2026-07-01T17:22:10.347537+08:00","gmt_modified":"2026-07-01T17:22:10.347537+08:00"},{"id":"242fa36bc833a990fae50c7bb09ed4e1","path":"frontend/src/views/model/components/ModelFormDialog.vue","line_range":"158-464","gmt_create":"2026-07-01T17:22:10.347891+08:00","gmt_modified":"2026-07-01T17:22:10.347891+08:00"},{"id":"198c9bc987125a8c495d5f4f4c719320","path":"backend/src/routes/models.js","line_range":"307-369","gmt_create":"2026-07-01T17:22:10.348046+08:00","gmt_modified":"2026-07-01T17:22:10.348046+08:00"},{"id":"00a6cc74394f2292cdbdb135e0050bfd","path":"backend/src/services/squiglink.js","line_range":"261-310","gmt_create":"2026-07-01T17:22:10.348542+08:00","gmt_modified":"2026-07-01T17:22:10.348542+08:00"},{"id":"cbc5a1c920943391c4b4c7dbb4969e02","path":"backend/src/routes/models.js","line_range":"280-304","gmt_create":"2026-07-01T17:22:10.350467+08:00","gmt_modified":"2026-07-01T17:22:10.350467+08:00"},{"id":"0e96d580b4b0d85ad3a0856f9ced77c5","path":"backend/src/routes/models.js","line_range":"371-437","gmt_create":"2026-07-01T17:22:10.351067+08:00","gmt_modified":"2026-07-01T17:22:10.351067+08:00"},{"id":"64d9a6b9e0dbb15b4433b936b9d9b682","path":"backend/src/validators/model.js","line_range":"3-10","gmt_create":"2026-07-01T17:22:10.351242+08:00","gmt_modified":"2026-07-01T17:22:10.351242+08:00"},{"id":"534ccf5ed9895fd2357c6072d2c32641","path":"backend/src/routes/models.js","line_range":"439-526","gmt_create":"2026-07-01T17:22:10.351714+08:00","gmt_modified":"2026-07-01T17:22:10.351714+08:00"},{"id":"1403db1a8eb57f752df3491c038670b7","path":"backend/src/validators/model.js","line_range":"12-19","gmt_create":"2026-07-01T17:22:10.351852+08:00","gmt_modified":"2026-07-01T17:22:10.351852+08:00"},{"id":"e19c5be696ebceb651e9886682335c3f","path":"backend/src/routes/models.js","line_range":"528-554","gmt_create":"2026-07-01T17:22:10.352321+08:00","gmt_modified":"2026-07-01T17:22:10.352321+08:00"},{"id":"fd1c352115895c20befbd57b21dafffd","path":"backend/src/routes/models.js","line_range":"136-157","gmt_create":"2026-07-01T17:22:10.352801+08:00","gmt_modified":"2026-07-01T17:22:10.352801+08:00"},{"id":"a4a868fe5625e468464edb2a81e0ed65","path":"backend/src/models/Ota.js","line_range":"44-48","gmt_create":"2026-07-01T17:22:10.353108+08:00","gmt_modified":"2026-07-01T17:22:10.353108+08:00"},{"id":"9bfda1a77caaecb96fe646e1a5c4e657","path":"backend/src/routes/models.js","line_range":"556-656","gmt_create":"2026-07-01T17:22:10.353419+08:00","gmt_modified":"2026-07-01T17:22:10.353419+08:00"},{"id":"d204119d78e9a20507f2e6eb59c81b14","path":"backend/src/routes/models.js","line_range":"246-278","gmt_create":"2026-07-01T17:22:10.353724+08:00","gmt_modified":"2026-07-01T17:22:10.353724+08:00"},{"id":"6e56ed4dbe173e0e7ce80c50d006cb83","path":"backend/src/routes/models.js","line_range":"183-244","gmt_create":"2026-07-01T17:22:10.353858+08:00","gmt_modified":"2026-07-01T17:22:10.353858+08:00"},{"id":"12f724b0903cc7296821075f94c9dea7","path":"backend/src/routes/models.js","line_range":"314-317","gmt_create":"2026-07-01T17:22:10.355774+08:00","gmt_modified":"2026-07-01T17:22:10.355774+08:00"},{"id":"07839d356726d441504dc3560722db44","path":"backend/src/routes/models.js","line_range":"322-325","gmt_create":"2026-07-01T17:22:10.356108+08:00","gmt_modified":"2026-07-01T17:22:10.356109+08:00"},{"id":"0dbf7e568890732ca55dfc5752a318a6","path":"backend/src/routes/models.js","line_range":"450-455","gmt_create":"2026-07-01T17:22:10.356297+08:00","gmt_modified":"2026-07-01T17:22:10.356297+08:00"},{"id":"81ee91090f768174f1659cd02a399b89","path":"backend/src/services/squiglink.js","line_range":"33-47","gmt_create":"2026-07-01T17:22:10.356502+08:00","gmt_modified":"2026-07-01T17:22:10.356502+08:00"},{"id":"09fd0e7623c9b52e7f95307aba3cdebf","path":"frontend/src/views/model/index.vue","line_range":"1-533","gmt_create":"2026-07-01T17:22:40.376442+08:00","gmt_modified":"2026-07-01T17:22:40.376442+08:00"},{"id":"b336306edfffe78cac04ddcd9b87bee3","path":"frontend/src/views/model/composables/useModelList.js","line_range":"1-191","gmt_create":"2026-07-01T17:22:40.376544+08:00","gmt_modified":"2026-07-01T17:22:40.376545+08:00"},{"id":"bd284e26c3e22bbca32421b5f77648ef","path":"frontend/src/views/model/components/CsvViewerDialog.vue","line_range":"1-50","gmt_create":"2026-07-01T17:22:40.376769+08:00","gmt_modified":"2026-07-01T17:22:40.376769+08:00"},{"id":"2046b9f43ac9963df7a7ca533f925569","path":"frontend/src/views/model/components/EqCacheDialog.vue","line_range":"1-306","gmt_create":"2026-07-01T17:22:40.376869+08:00","gmt_modified":"2026-07-01T17:22:40.376869+08:00"},{"id":"779a4d88246e9e5a241ae01c15f899ab","path":"frontend/src/views/model/components/PushProgressDialog.vue","line_range":"1-303","gmt_create":"2026-07-01T17:22:40.376999+08:00","gmt_modified":"2026-07-01T17:22:40.376999+08:00"},{"id":"bbf439d580ed3a878deb4fd7de944a94","path":"frontend/src/views/model/components/PushViewDialog.vue","line_range":"1-60","gmt_create":"2026-07-01T17:22:40.377097+08:00","gmt_modified":"2026-07-01T17:22:40.377097+08:00"},{"id":"fc4fba8eb72f3b41fef570b38f6dfefe","path":"frontend/src/views/model/index.vue","line_range":"227-434","gmt_create":"2026-07-01T17:22:40.37845+08:00","gmt_modified":"2026-07-01T17:22:40.37845+08:00"},{"id":"c0a672fcaa00c517fd9ea3d997173397","path":"frontend/src/views/model/composables/useModelList.js","line_range":"31-191","gmt_create":"2026-07-01T17:22:40.378563+08:00","gmt_modified":"2026-07-01T17:22:40.378563+08:00"},{"id":"d16b984e320d42203d368669cfe2382b","path":"frontend/src/api/model.js","line_range":"157-165","gmt_create":"2026-07-01T17:22:40.378803+08:00","gmt_modified":"2026-07-01T17:22:40.378803+08:00"},{"id":"c6701de4962c3a2734181c3f0e1b78f6","path":"backend/src/routes/models.js","line_range":"307-499","gmt_create":"2026-07-01T17:22:40.379698+08:00","gmt_modified":"2026-07-01T17:22:40.379698+08:00"},{"id":"47737e52532225879b5095908c4b0039","path":"frontend/src/views/model/components/ModelFormDialog.vue","line_range":"196-214","gmt_create":"2026-07-01T17:22:40.380708+08:00","gmt_modified":"2026-07-01T17:22:40.380708+08:00"},{"id":"1a50c2ac7c5e4e096904af2e683b5ec7","path":"backend/src/models/Brand.js","line_range":"1-23","gmt_create":"2026-07-01T17:22:40.380815+08:00","gmt_modified":"2026-07-01T17:22:40.380815+08:00"},{"id":"ae9b4c727fe0313173a4bcea57fef546","path":"backend/src/routes/brands.js","line_range":"1-147","gmt_create":"2026-07-01T17:22:40.38095+08:00","gmt_modified":"2026-07-01T17:22:40.38095+08:00"},{"id":"35d43a834ee00c7ae341f64ea7306dcd","path":"frontend/src/views/model/composables/useModelList.js","line_range":"18-27","gmt_create":"2026-07-01T17:22:40.381054+08:00","gmt_modified":"2026-07-01T17:22:40.381054+08:00"},{"id":"bab25856d9ae1e6dcc3c9df2c6461ca5","path":"frontend/src/views/model/composables/useModelList.js","line_range":"87-111","gmt_create":"2026-07-01T17:22:40.381163+08:00","gmt_modified":"2026-07-01T17:22:40.381163+08:00"},{"id":"7fdad247ff48969f27ee8d30e3ba5b65","path":"frontend/src/views/model/index.vue","line_range":"402-428","gmt_create":"2026-07-01T17:22:40.381395+08:00","gmt_modified":"2026-07-01T17:22:40.381395+08:00"},{"id":"80992fa9ba0696155e1f48200125fba9","path":"frontend/src/views/model/components/PushProgressDialog.vue","line_range":"117-195","gmt_create":"2026-07-01T17:22:40.381504+08:00","gmt_modified":"2026-07-01T17:22:40.381504+08:00"},{"id":"c72d4a5b5b663d05ac8229b5b4c69991","path":"frontend/src/api/model.js","line_range":"128-150","gmt_create":"2026-07-01T17:22:40.381611+08:00","gmt_modified":"2026-07-01T17:22:40.381612+08:00"},{"id":"84d41a039a6a9937d7d02c54a5e72751","path":"backend/src/routes/models.js","line_range":"466-566","gmt_create":"2026-07-01T17:22:40.381721+08:00","gmt_modified":"2026-07-01T17:22:40.381721+08:00"},{"id":"ddaccee59b978ba3a64b134b57255142","path":"backend/src/routes/models.js","line_range":"59-68","gmt_create":"2026-07-01T17:22:40.382223+08:00","gmt_modified":"2026-07-01T17:22:40.382223+08:00"},{"id":"ddabd54034f5691c635f64015008129b","path":"backend/src/services/measurementStorage.js","line_range":"48-108","gmt_create":"2026-07-01T17:22:40.382335+08:00","gmt_modified":"2026-07-01T17:22:40.382335+08:00"},{"id":"dfbdd0655d2d61b5105701e421492cb1","path":"backend/src/services/eqCacheStorage.js","line_range":"24-66","gmt_create":"2026-07-01T17:22:40.382567+08:00","gmt_modified":"2026-07-01T17:22:40.382567+08:00"},{"id":"f80a45c0052388537b0d6844b2c9e8e3","path":"frontend/src/views/model/components/ModelFormDialog.vue","line_range":"233-265","gmt_create":"2026-07-01T17:22:40.382803+08:00","gmt_modified":"2026-07-01T17:22:40.382803+08:00"},{"id":"4f76bc7594c6e53c87d2b21c18e1593a","path":"backend/src/services/squiglink.js","line_range":"33-48","gmt_create":"2026-07-01T17:22:40.384083+08:00","gmt_modified":"2026-07-01T17:22:40.384083+08:00"},{"id":"dc3af50d3fc111fa0921b37470c23966","path":"frontend/src/utils/request.js","line_range":"27-69","gmt_create":"2026-07-01T17:22:40.384193+08:00","gmt_modified":"2026-07-01T17:22:40.384193+08:00"},{"id":"ee7461b868a07b5f3e3636d8001b1089","path":"backend/src/routes/brands.js","line_range":"59-81","gmt_create":"2026-07-01T17:22:40.384296+08:00","gmt_modified":"2026-07-01T17:22:40.384296+08:00"},{"id":"5913b9dcd61bbee07d5a150062d40315","path":"backend/src/routes/models.js","line_range":"371-499","gmt_create":"2026-07-01T17:22:40.3844+08:00","gmt_modified":"2026-07-01T17:22:40.3844+08:00"},{"id":"d620d05fda07f9cbe1556d0f76a8153f","path":"backend/src/services/measurementStorage.js","line_range":"87-108","gmt_create":"2026-07-01T17:22:40.384504+08:00","gmt_modified":"2026-07-01T17:22:40.384504+08:00"},{"id":"f1abdfd8be7fea194c1ce39bf66c78e3","path":"backend/src/services/eqCacheStorage.js","line_range":"47-66","gmt_create":"2026-07-01T17:22:40.38461+08:00","gmt_modified":"2026-07-01T17:22:40.38461+08:00"},{"id":"e87b014e53bbb73ea5bbd7b6fedb1ee0","path":"frontend/src/api/brand.js","line_range":"1-66","gmt_create":"2026-07-01T17:22:40.384977+08:00","gmt_modified":"2026-07-01T17:22:40.384977+08:00"},{"id":"6568412fa665c4b795868c6e9875778f","path":"backend/src/routes/models.js","line_range":"133-659","gmt_create":"2026-07-01T17:22:40.385185+08:00","gmt_modified":"2026-07-01T17:22:40.385185+08:00"},{"id":"8012c36338dce0daecc34c940e5fc443","path":"backend/src/routes/brands.js","line_range":"14-147","gmt_create":"2026-07-01T17:22:40.385291+08:00","gmt_modified":"2026-07-01T17:22:40.385291+08:00"},{"id":"941d6ec9925d0313ebdac30637d5e7de","path":"frontend/src/views/model/index.vue","line_range":"1-1226","gmt_create":"2026-07-01T17:22:44.384106+08:00","gmt_modified":"2026-07-01T17:22:44.384106+08:00"},{"id":"186655fbb53a1180e274c0a224e447ec","path":"backend/src/services/measurementStorage.js","line_range":"1-115","gmt_create":"2026-07-01T17:22:44.38516+08:00","gmt_modified":"2026-07-01T17:22:44.38516+08:00"},{"id":"7098281c5dbbd726581ec631c48cb7ff","path":"backend/src/services/eqCacheStorage.js","line_range":"1-73","gmt_create":"2026-07-01T17:22:44.385385+08:00","gmt_modified":"2026-07-01T17:22:44.385385+08:00"},{"id":"ff3c31b3cf3083faac2e9d22bd1046dc","path":"backend/src/services/curveClient.js","line_range":"1-147","gmt_create":"2026-07-01T17:22:44.385554+08:00","gmt_modified":"2026-07-01T17:22:44.385554+08:00"},{"id":"3ea5cb6fe4688701d6312a31ea523b18","path":"backend/src/services/measurementStorage.js","line_range":"61-108","gmt_create":"2026-07-01T17:22:44.389823+08:00","gmt_modified":"2026-07-01T17:22:44.389823+08:00"},{"id":"c777cf18a4b1f608a14488db3258817d","path":"backend/src/services/curveClient.js","line_range":"81-138","gmt_create":"2026-07-01T17:22:44.390218+08:00","gmt_modified":"2026-07-01T17:22:44.390219+08:00"},{"id":"4169091aeab80fcee72321116328a8b2","path":"frontend/src/views/model/index.vue","line_range":"714-1063","gmt_create":"2026-07-01T17:22:44.39038+08:00","gmt_modified":"2026-07-01T17:22:44.39038+08:00"},{"id":"6eacbd3b5ec60fff27a96a9101159648","path":"frontend/src/views/model/index.vue","line_range":"226-250","gmt_create":"2026-07-01T17:22:44.391757+08:00","gmt_modified":"2026-07-01T17:22:44.391757+08:00"},{"id":"56d7be38c99608e1cf9141127c60a1bd","path":"backend/src/routes/models.js","line_range":"307-335","gmt_create":"2026-07-01T17:22:44.392035+08:00","gmt_modified":"2026-07-01T17:22:44.392035+08:00"},{"id":"c571c3ca3eb98348a89378f8d58ffa5c","path":"backend/src/services/measurementStorage.js","line_range":"48-79","gmt_create":"2026-07-01T17:22:44.392163+08:00","gmt_modified":"2026-07-01T17:22:44.392163+08:00"},{"id":"6d9ac3485459b97d549f73fa18ea4efe","path":"backend/src/routes/models.js","line_range":"183-278","gmt_create":"2026-07-01T17:22:44.392771+08:00","gmt_modified":"2026-07-01T17:22:44.392772+08:00"},{"id":"e1a454e430f59ec87fc68cffc768037a","path":"backend/src/routes/models.js","line_range":"466-514","gmt_create":"2026-07-01T17:22:44.393206+08:00","gmt_modified":"2026-07-01T17:22:44.393206+08:00"},{"id":"907380346a61a6c644cdaefa5165c9bd","path":"backend/src/routes/models.js","line_range":"516-566","gmt_create":"2026-07-01T17:22:44.393329+08:00","gmt_modified":"2026-07-01T17:22:44.393329+08:00"},{"id":"17a4406c6c25ec6cdfd2d8ffe0b73e9c","path":"frontend/src/views/model/index.vue","line_range":"1117-1220","gmt_create":"2026-07-01T17:22:44.393603+08:00","gmt_modified":"2026-07-01T17:22:44.393603+08:00"},{"id":"726a6f97e2aeafee47b271e07e8bab86","path":"backend/src/services/squiglink.js","line_range":"148-207","gmt_create":"2026-07-01T17:22:44.40202+08:00","gmt_modified":"2026-07-01T17:22:44.40202+08:00"},{"id":"7257d8ea1f17cf7e6ffde19988e437dc","path":"backend/src/services/squiglink.js","line_range":"216-247","gmt_create":"2026-07-01T17:22:44.402185+08:00","gmt_modified":"2026-07-01T17:22:44.402185+08:00"},{"id":"c27046a2ebb06326e9d6b99eed8a9d94","path":"frontend/src/views/model/components/ModelFormDialog.vue","line_range":"16-46","gmt_create":"2026-07-01T17:22:44.40259+08:00","gmt_modified":"2026-07-01T17:22:44.40259+08:00"},{"id":"e83b1d21fe3ccb7ac2f4d82bb148bc78","path":"frontend/src/views/model/components/ModelFormDialog.vue","line_range":"289-332","gmt_create":"2026-07-01T17:22:44.402715+08:00","gmt_modified":"2026-07-01T17:22:44.402715+08:00"},{"id":"e8dde18df2307dc1b7b00c3e9546ed83","path":"frontend/src/api/model.js","line_range":"152-165","gmt_create":"2026-07-01T17:22:44.402831+08:00","gmt_modified":"2026-07-01T17:22:44.402831+08:00"},{"id":"d18e23566fd59e80c9f7eec016ef89ab","path":"backend/src/routes/models.js","line_range":"312-317","gmt_create":"2026-07-01T17:22:44.406038+08:00","gmt_modified":"2026-07-01T17:22:44.406038+08:00"},{"id":"bc3c55f1edd18bca0da26fb9aa065f87","path":"backend/src/routes/models.js","line_range":"320-325","gmt_create":"2026-07-01T17:22:44.406138+08:00","gmt_modified":"2026-07-01T17:22:44.406138+08:00"},{"id":"e358b7cff088dfd34df41cc908c799c8","path":"backend/src/routes/models.js","line_range":"255-258","gmt_create":"2026-07-01T17:22:44.406249+08:00","gmt_modified":"2026-07-01T17:22:44.40625+08:00"},{"id":"92b0e2fda81d2ce253e7f4ad46b6d538","path":"docker-compose.yml","line_range":"7-46","gmt_create":"2026-07-09T10:38:57.821908+08:00","gmt_modified":"2026-07-09T10:38:57.821908+08:00"},{"id":"889ce5c667273b5a62589149372aab81","path":"frontend/nginx.conf","line_range":"11-21","gmt_create":"2026-07-09T10:38:57.827191+08:00","gmt_modified":"2026-07-09T10:38:57.827191+08:00"},{"id":"140be3684e1d4e56a926950c93c2136e","path":"docker-compose.yml","line_range":"1-48","gmt_create":"2026-07-09T10:38:57.827719+08:00","gmt_modified":"2026-07-09T10:38:57.827719+08:00"},{"id":"732dd79ec5eeb3c735532d74caa58fe6","path":"DEPLOY.md","line_range":"1-16","gmt_create":"2026-07-09T10:38:57.828335+08:00","gmt_modified":"2026-07-09T10:38:57.828335+08:00"},{"id":"4a9da41d21881cd67144f2305da29489","path":"backend/Dockerfile","line_range":"1-20","gmt_create":"2026-07-09T10:38:57.82871+08:00","gmt_modified":"2026-07-09T10:38:57.82871+08:00"},{"id":"93328830d8992fc5ff02e2ed0357b88d","path":"frontend/Dockerfile","line_range":"1-32","gmt_create":"2026-07-09T10:38:57.829037+08:00","gmt_modified":"2026-07-09T10:38:57.829037+08:00"},{"id":"f013b471ed832a1ebafb09cc77e21a58","path":"scripts/upload.sh","line_range":"1-191","gmt_create":"2026-07-09T10:38:57.829261+08:00","gmt_modified":"2026-07-09T10:38:57.829261+08:00"},{"id":"2bb93fa4b9b077889c94bb31a1496c8d","path":"frontend/nginx.conf","line_range":"1-34","gmt_create":"2026-07-09T10:38:57.829412+08:00","gmt_modified":"2026-07-09T10:38:57.829412+08:00"},{"id":"674059608e84c759dcd02cc04676827e","path":"backend/src/config/loadEnv.js","line_range":"1-14","gmt_create":"2026-07-09T10:38:57.830054+08:00","gmt_modified":"2026-07-09T10:38:57.830054+08:00"},{"id":"d9192155f37488a652d7ea90f82c4fb6","path":"backend/src/utils/jwt.js","line_range":"1-27","gmt_create":"2026-07-09T10:38:57.830251+08:00","gmt_modified":"2026-07-09T10:38:57.830251+08:00"},{"id":"835bac3464a81c18f86db090f80b803a","path":"DEPLOY.md","line_range":"5-16","gmt_create":"2026-07-09T10:38:57.830959+08:00","gmt_modified":"2026-07-09T10:38:57.830959+08:00"},{"id":"a4a23331a65c824bc0a3127fa825932f","path":"DEPLOY.md","line_range":"18-46","gmt_create":"2026-07-09T10:38:57.831268+08:00","gmt_modified":"2026-07-09T10:38:57.831268+08:00"},{"id":"77649e0cf96a6387d7372dd1107927dc","path":"DEPLOY.md","line_range":"49-120","gmt_create":"2026-07-09T10:38:57.831414+08:00","gmt_modified":"2026-07-09T10:38:57.831414+08:00"},{"id":"78a7b11b9d58b56041071344fc3bceb9","path":"scripts/upload.sh","line_range":"39-75","gmt_create":"2026-07-09T10:38:57.831558+08:00","gmt_modified":"2026-07-09T10:38:57.831558+08:00"},{"id":"721af5f743e349cacd1cccb6b80f1fa9","path":"scripts/upload.sh","line_range":"142-187","gmt_create":"2026-07-09T10:38:57.83171+08:00","gmt_modified":"2026-07-09T10:38:57.83171+08:00"},{"id":"6e652c4aac5427884de188d64e4e1d9a","path":"DEPLOY.md","line_range":"122-154","gmt_create":"2026-07-09T10:38:57.831847+08:00","gmt_modified":"2026-07-09T10:38:57.831847+08:00"},{"id":"97e84d6f8482a34fb585d5de9627de15","path":"DEPLOY.md","line_range":"157-171","gmt_create":"2026-07-09T10:38:57.83215+08:00","gmt_modified":"2026-07-09T10:38:57.83215+08:00"},{"id":"6ad553deb3df9fb48b58c7b6d55e10a4","path":"DEPLOY.md","line_range":"174-187","gmt_create":"2026-07-09T10:38:57.832275+08:00","gmt_modified":"2026-07-09T10:38:57.832275+08:00"},{"id":"51c3924729251f9dc2608b1daca76f08","path":"DEPLOY.md","line_range":"190-203","gmt_create":"2026-07-09T10:38:57.832421+08:00","gmt_modified":"2026-07-09T10:38:57.832421+08:00"},{"id":"fd390735bca8d2f533b9e41050221765","path":"DEPLOY.md","line_range":"206-223","gmt_create":"2026-07-09T10:38:57.832558+08:00","gmt_modified":"2026-07-09T10:38:57.832558+08:00"},{"id":"c478032372d4890590fb08018ff5b86b","path":"DEPLOY.md","line_range":"77-91","gmt_create":"2026-07-09T10:38:57.833048+08:00","gmt_modified":"2026-07-09T10:38:57.833048+08:00"},{"id":"698b053aad8542714142f437b6ce5bc1","path":"DEPLOY.md","line_range":"92-103","gmt_create":"2026-07-09T10:38:57.833371+08:00","gmt_modified":"2026-07-09T10:38:57.833371+08:00"},{"id":"3f5b860ef85c3869c1ebfaacb484ebd1","path":"DEPLOY.md","line_range":"251-256","gmt_create":"2026-07-09T10:38:57.833525+08:00","gmt_modified":"2026-07-09T10:38:57.833525+08:00"},{"id":"e8d639f52b34d67545f4ac9c446f2d17","path":"DEPLOY.md","line_range":"104-119","gmt_create":"2026-07-09T10:38:57.833659+08:00","gmt_modified":"2026-07-09T10:38:57.833659+08:00"},{"id":"99beb36f9b6a7af6bb633f3430226c78","path":"backend/start.sh","line_range":"1-5","gmt_create":"2026-07-09T10:38:57.833812+08:00","gmt_modified":"2026-07-09T10:38:57.833812+08:00"},{"id":"6f145c0757539cef42b6b99033bfd808","path":"backend/restart.sh","line_range":"1-43","gmt_create":"2026-07-09T10:38:57.833951+08:00","gmt_modified":"2026-07-09T10:38:57.833951+08:00"},{"id":"f033e1b9f169a62a557013eb45fceb15","path":"backend/stop.sh","line_range":"1-14","gmt_create":"2026-07-09T10:38:57.834151+08:00","gmt_modified":"2026-07-09T10:38:57.834151+08:00"},{"id":"949e5e7cf339aa20456ee680ed2b0ba0","path":"frontend/vite.config.js","line_range":"17-25","gmt_create":"2026-07-09T10:38:57.834293+08:00","gmt_modified":"2026-07-09T10:38:57.834293+08:00"},{"id":"b69119d10dffe1103145877074ae23db","path":"frontend/package.json","line_range":"1-24","gmt_create":"2026-07-09T10:38:57.835126+08:00","gmt_modified":"2026-07-09T10:38:57.835126+08:00"},{"id":"365980dea72f61f841d013d7f96f64b7","path":"docker-compose.yml","line_range":"1-5","gmt_create":"2026-07-09T10:38:57.835273+08:00","gmt_modified":"2026-07-09T10:38:57.835273+08:00"},{"id":"0e267c17e65c31b7921d19410a6a669a","path":"frontend/nginx.conf","line_range":"7-32","gmt_create":"2026-07-09T10:38:57.835412+08:00","gmt_modified":"2026-07-09T10:38:57.835412+08:00"},{"id":"6785dd382584e15bfb7af1b0921bbc25","path":"DEPLOY.md","line_range":"36-42","gmt_create":"2026-07-09T10:38:57.835756+08:00","gmt_modified":"2026-07-09T10:38:57.835756+08:00"},{"id":"248df2189f51b39a5c1c7c72f6d9e05f","path":"backend/src/app.js","line_range":"1-60","gmt_create":"2026-07-09T10:40:13.081096+08:00","gmt_modified":"2026-07-09T10:40:13.081096+08:00"},{"id":"9766577cfe733c229896c1a7fb2a3657","path":"backend/src/config/database.js","line_range":"1-24","gmt_create":"2026-07-09T10:40:13.081426+08:00","gmt_modified":"2026-07-09T10:40:13.081426+08:00"},{"id":"a4355925ed6bec25b1de9249be7e01dc","path":"backend/src/config/redis.js","line_range":"1-32","gmt_create":"2026-07-09T10:40:13.081591+08:00","gmt_modified":"2026-07-09T10:40:13.081592+08:00"},{"id":"d25e0434ec91bd979786a4edb517b706","path":"backend/src/config/logger.js","line_range":"1-29","gmt_create":"2026-07-09T10:40:13.081762+08:00","gmt_modified":"2026-07-09T10:40:13.081762+08:00"},{"id":"d01795570183159e8ff6fbd172311f33","path":"backend/src/routes/index.js","line_range":"1-13","gmt_create":"2026-07-09T10:40:13.081939+08:00","gmt_modified":"2026-07-09T10:40:13.081939+08:00"},{"id":"25a72c2412b12f63f5e989a355625a9e","path":"backend/src/middleware/bodyLimit.js","line_range":"1-12","gmt_create":"2026-07-09T10:40:13.082316+08:00","gmt_modified":"2026-07-09T10:40:13.082316+08:00"},{"id":"9ef666f18a55b6f0966d3f3b77825993","path":"backend/src/utils/jwt.js","line_range":"1-28","gmt_create":"2026-07-09T10:40:13.08246+08:00","gmt_modified":"2026-07-09T10:40:13.08246+08:00"},{"id":"5fa9a5129de84d75fdeecdd2d269ca8c","path":"backend/src/routes/auth.js","line_range":"1-112","gmt_create":"2026-07-09T10:40:13.082787+08:00","gmt_modified":"2026-07-09T10:40:13.082787+08:00"},{"id":"e6c7093be2caf72ef4766f8e5a2e6f16","path":"backend/src/services/userBootstrap.js","line_range":"1-28","gmt_create":"2026-07-09T10:40:13.082932+08:00","gmt_modified":"2026-07-09T10:40:13.082932+08:00"},{"id":"fcd9df78728cdbe7c91e9fba6236943d","path":"backend/src/models/DashboardUser.js","line_range":"1-58","gmt_create":"2026-07-09T10:40:13.083071+08:00","gmt_modified":"2026-07-09T10:40:13.083071+08:00"},{"id":"1a2e801e2d286b40f1ca8b00e1e03b98","path":"backend/src/models/index.js","line_range":"1-8","gmt_create":"2026-07-09T10:40:13.083219+08:00","gmt_modified":"2026-07-09T10:40:13.083219+08:00"},{"id":"d2b086dd8008c3f2d501338f98f929d6","path":"backend/src/app.js","line_range":"14-59","gmt_create":"2026-07-09T10:40:13.084235+08:00","gmt_modified":"2026-07-09T10:40:13.084235+08:00"},{"id":"b6bb3d785556e32e7d6a7bb51a347e64","path":"backend/src/app.js","line_range":"16-37","gmt_create":"2026-07-09T10:40:13.085204+08:00","gmt_modified":"2026-07-09T10:40:13.085204+08:00"},{"id":"018eb7805cf7534c681b6ce3d54044f7","path":"backend/src/routes/auth.js","line_range":"24-64","gmt_create":"2026-07-09T10:40:13.087699+08:00","gmt_modified":"2026-07-09T10:40:13.087699+08:00"},{"id":"82762a8b3fbc46dac0a00d40ea7b579c","path":"backend/src/app.js","line_range":"42-56","gmt_create":"2026-07-09T10:40:13.088836+08:00","gmt_modified":"2026-07-09T10:40:13.088836+08:00"},{"id":"a86053bdb5be909793bdf3ec022f11a8","path":"backend/src/config/redis.js","line_range":"11-29","gmt_create":"2026-07-09T10:40:13.090003+08:00","gmt_modified":"2026-07-09T10:40:13.090003+08:00"},{"id":"4c80adc29e59b0b2648bc1060593840e","path":"backend/src/routes/auth.js","line_range":"60-64","gmt_create":"2026-07-09T10:40:13.091665+08:00","gmt_modified":"2026-07-09T10:40:13.091665+08:00"},{"id":"43089a76edc8fe6543de3167f99e0386","path":"backend/src/services/measurementStorage.js","line_range":"76-108","gmt_create":"2026-07-09T10:40:13.091809+08:00","gmt_modified":"2026-07-09T10:40:13.091809+08:00"},{"id":"9538d87048b508ac2f8c4c2f8d61db9b","path":"backend/src/services/curveClient.js","line_range":"94-138","gmt_create":"2026-07-09T10:40:13.091948+08:00","gmt_modified":"2026-07-09T10:40:13.091948+08:00"},{"id":"fd29270ac88376d5fd036d672f01a5ad","path":"backend/src/app.js","line_range":"17-20","gmt_create":"2026-07-09T10:40:13.092246+08:00","gmt_modified":"2026-07-09T10:40:13.092246+08:00"},{"id":"d6ef85113df95cbba3b3107ba4c4f2f8","path":"backend/src/routes/auth.js","line_range":"24-77","gmt_create":"2026-07-09T10:40:13.092383+08:00","gmt_modified":"2026-07-09T10:40:13.092384+08:00"},{"id":"29b412660e6ebd0a7e9120ad5d799db9","path":"backend/src/app.js","line_range":"17-18","gmt_create":"2026-07-09T10:40:13.092512+08:00","gmt_modified":"2026-07-09T10:40:13.092512+08:00"},{"id":"195cd8e53ecc3405b70ca2d072a081bf","path":"backend/src/config/database.js","line_range":"15-15","gmt_create":"2026-07-09T10:40:13.093132+08:00","gmt_modified":"2026-07-09T10:40:13.093132+08:00"},{"id":"13c0720ee4d59b4cd7f50a96fee64c21","path":"backend/src/services/eqCacheStorage.js","line_range":"24-42","gmt_create":"2026-07-09T10:40:13.093336+08:00","gmt_modified":"2026-07-09T10:40:13.093336+08:00"},{"id":"69850e52d0478b177c0b3cdc11a4400a","path":"backend/src/services/measurementStorage.js","line_range":"18-27","gmt_create":"2026-07-09T10:40:13.0935+08:00","gmt_modified":"2026-07-09T10:40:13.0935+08:00"},{"id":"c0fc635551b86ede699e82e863fbdc7a","path":"backend/src/services/curveClient.js","line_range":"94-100","gmt_create":"2026-07-09T10:40:13.093652+08:00","gmt_modified":"2026-07-09T10:40:13.093652+08:00"},{"id":"5ffbcfe60b90a249c780e9612c0062a8","path":"backend/src/config/logger.js","line_range":"19-26","gmt_create":"2026-07-09T10:40:13.093785+08:00","gmt_modified":"2026-07-09T10:40:13.093786+08:00"},{"id":"ed2ad91f5cf4199164f0c639379e66b8","path":"backend/src/app.js","line_range":"42-59","gmt_create":"2026-07-09T10:40:13.093914+08:00","gmt_modified":"2026-07-09T10:40:13.093914+08:00"},{"id":"2bdc6f33566ade8b54dfd6b79a33b5bc","path":"backend/src/app.js","line_range":"22-34","gmt_create":"2026-07-09T10:40:13.094557+08:00","gmt_modified":"2026-07-09T10:40:13.094557+08:00"},{"id":"821d4b2c32783bced864c912f79ea0c5","path":"backend/src/config/logger.js","line_range":"10-26","gmt_create":"2026-07-09T10:40:13.095009+08:00","gmt_modified":"2026-07-09T10:40:13.095009+08:00"},{"id":"313b021507aa8c696237c7b9a55205e0","path":"backend/package.json","line_range":"11-27","gmt_create":"2026-07-09T10:40:13.095458+08:00","gmt_modified":"2026-07-09T10:40:13.095458+08:00"},{"id":"dae18e930291c4dfde6de9267ef85102","path":"backend/src/app.js","line_range":"1-14","gmt_create":"2026-07-09T10:40:13.095593+08:00","gmt_modified":"2026-07-09T10:40:13.095593+08:00"},{"id":"b1b5b2acc0fc69d741f0c7beee1605df","path":"backend/src/app.js","line_range":"48-51","gmt_create":"2026-07-09T10:40:13.096189+08:00","gmt_modified":"2026-07-09T10:40:13.096189+08:00"},{"id":"4ffd577b0e2bce69a1ec0f48f7b12dff","path":"backend/src/config/redis.js","line_range":"24-26","gmt_create":"2026-07-09T10:40:13.096321+08:00","gmt_modified":"2026-07-09T10:40:13.096321+08:00"},{"id":"af31c4b065f62c2a0bcd0575d9d930ab","path":"backend/src/services/measurementStorage.js","line_range":"102-107","gmt_create":"2026-07-09T10:40:13.09648+08:00","gmt_modified":"2026-07-09T10:40:13.09648+08:00"},{"id":"27987ae2afef14b8a880af5db468e1e4","path":"backend/src/services/curveClient.js","line_range":"92-116","gmt_create":"2026-07-09T10:40:13.096628+08:00","gmt_modified":"2026-07-09T10:40:13.096628+08:00"},{"id":"6e4a8a3e6825b46b262f81aed57f9bd4","path":"backend/src/config/database.js","line_range":"4-11","gmt_create":"2026-07-09T10:40:13.096946+08:00","gmt_modified":"2026-07-09T10:40:13.096946+08:00"},{"id":"9206d20f411d381e9d163f1fb2322f98","path":"backend/src/config/redis.js","line_range":"4-7","gmt_create":"2026-07-09T10:40:13.09708+08:00","gmt_modified":"2026-07-09T10:40:13.097081+08:00"},{"id":"eb533ec652ab24ba6f647f40aa5787b8","path":"backend/src/utils/jwt.js","line_range":"3-4","gmt_create":"2026-07-09T10:40:13.097195+08:00","gmt_modified":"2026-07-09T10:40:13.097195+08:00"},{"id":"51d7387411a92786854c4a62c617b6a5","path":"backend/src/services/userBootstrap.js","line_range":"9-10","gmt_create":"2026-07-09T10:40:13.097323+08:00","gmt_modified":"2026-07-09T10:40:13.097323+08:00"},{"id":"f20852f2d7cf38d742212362a039f699","path":"backend/src/services/measurementStorage.js","line_range":"9-12","gmt_create":"2026-07-09T10:40:13.097433+08:00","gmt_modified":"2026-07-09T10:40:13.097433+08:00"},{"id":"a8aac30147325f1c7f4691fb72e71064","path":"backend/src/services/curveClient.js","line_range":"8","gmt_create":"2026-07-09T10:40:13.097831+08:00","gmt_modified":"2026-07-09T10:40:13.097831+08:00"}],"knowledge_relations":[{"id":2781,"source_id":"2b5fd78d-2407-4ccc-8807-9bb05c0a687e","target_id":"6b28e060-0be3-411e-8a94-3777d165d10e","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 2b5fd78d-2407-4ccc-8807-9bb05c0a687e -\u003e 6b28e060-0be3-411e-8a94-3777d165d10e","gmt_create":"2026-06-30T14:40:47.271887+08:00","gmt_modified":"2026-06-30T14:40:47.271887+08:00"},{"id":2783,"source_id":"2b5fd78d-2407-4ccc-8807-9bb05c0a687e","target_id":"c6f2cb24-ff10-4ae7-87c2-b23b9bbee033","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 2b5fd78d-2407-4ccc-8807-9bb05c0a687e -\u003e c6f2cb24-ff10-4ae7-87c2-b23b9bbee033","gmt_create":"2026-06-30T14:40:47.272798+08:00","gmt_modified":"2026-06-30T14:40:47.272798+08:00"},{"id":2784,"source_id":"2b5fd78d-2407-4ccc-8807-9bb05c0a687e","target_id":"4619dc3e-419f-435b-ba7c-e600e188743a","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 2b5fd78d-2407-4ccc-8807-9bb05c0a687e -\u003e 4619dc3e-419f-435b-ba7c-e600e188743a","gmt_create":"2026-06-30T14:40:47.272953+08:00","gmt_modified":"2026-06-30T14:40:47.272953+08:00"},{"id":2785,"source_id":"1f4b6f57-25c5-444e-a943-d162d896dc21","target_id":"7f894188-cf72-40a2-af95-f13ef3dd1f6e","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 1f4b6f57-25c5-444e-a943-d162d896dc21 -\u003e 7f894188-cf72-40a2-af95-f13ef3dd1f6e","gmt_create":"2026-06-30T14:40:47.273394+08:00","gmt_modified":"2026-06-30T14:40:47.273394+08:00"},{"id":2786,"source_id":"1f4b6f57-25c5-444e-a943-d162d896dc21","target_id":"b66da3f2-6889-45dc-a824-2591d2f5f0f3","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 1f4b6f57-25c5-444e-a943-d162d896dc21 -\u003e b66da3f2-6889-45dc-a824-2591d2f5f0f3","gmt_create":"2026-06-30T14:40:47.273688+08:00","gmt_modified":"2026-06-30T14:40:47.273688+08:00"},{"id":2788,"source_id":"1f4b6f57-25c5-444e-a943-d162d896dc21","target_id":"be7e1733-8c9e-4849-99b0-bab40fdf271e","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 1f4b6f57-25c5-444e-a943-d162d896dc21 -\u003e be7e1733-8c9e-4849-99b0-bab40fdf271e","gmt_create":"2026-06-30T14:40:47.274328+08:00","gmt_modified":"2026-06-30T14:40:47.274328+08:00"},{"id":2789,"source_id":"1f4b6f57-25c5-444e-a943-d162d896dc21","target_id":"8f464fc9-6537-45fa-a0dd-eacdf742b5a1","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 1f4b6f57-25c5-444e-a943-d162d896dc21 -\u003e 8f464fc9-6537-45fa-a0dd-eacdf742b5a1","gmt_create":"2026-06-30T14:40:47.274458+08:00","gmt_modified":"2026-06-30T14:40:47.274458+08:00"},{"id":2790,"source_id":"1f4b6f57-25c5-444e-a943-d162d896dc21","target_id":"77bc73e0-8709-4209-96e0-5522f9356b06","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 1f4b6f57-25c5-444e-a943-d162d896dc21 -\u003e 77bc73e0-8709-4209-96e0-5522f9356b06","gmt_create":"2026-06-30T14:40:47.274632+08:00","gmt_modified":"2026-06-30T14:40:47.274632+08:00"},{"id":2791,"source_id":"1f4b6f57-25c5-444e-a943-d162d896dc21","target_id":"799ec9fc-088e-456c-8f93-72516adac3ac","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 1f4b6f57-25c5-444e-a943-d162d896dc21 -\u003e 799ec9fc-088e-456c-8f93-72516adac3ac","gmt_create":"2026-06-30T14:40:47.274784+08:00","gmt_modified":"2026-06-30T14:40:47.274784+08:00"},{"id":2792,"source_id":"4553d9a4-e0e6-4bc3-b285-ecc6df9dc822","target_id":"0efcac71-9db4-49c9-a660-690dcb97cd54","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 4553d9a4-e0e6-4bc3-b285-ecc6df9dc822 -\u003e 0efcac71-9db4-49c9-a660-690dcb97cd54","gmt_create":"2026-06-30T14:40:47.275136+08:00","gmt_modified":"2026-06-30T14:40:47.275136+08:00"},{"id":2793,"source_id":"4553d9a4-e0e6-4bc3-b285-ecc6df9dc822","target_id":"ef11f60f-47aa-41bf-8884-6d51bc9ae8ef","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 4553d9a4-e0e6-4bc3-b285-ecc6df9dc822 -\u003e ef11f60f-47aa-41bf-8884-6d51bc9ae8ef","gmt_create":"2026-06-30T14:40:47.275339+08:00","gmt_modified":"2026-06-30T14:40:47.275339+08:00"},{"id":2794,"source_id":"4553d9a4-e0e6-4bc3-b285-ecc6df9dc822","target_id":"edd1d813-70d4-49de-9f9e-e3ebf7a68678","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 4553d9a4-e0e6-4bc3-b285-ecc6df9dc822 -\u003e edd1d813-70d4-49de-9f9e-e3ebf7a68678","gmt_create":"2026-06-30T14:40:47.27546+08:00","gmt_modified":"2026-06-30T14:40:47.27546+08:00"},{"id":2795,"source_id":"4553d9a4-e0e6-4bc3-b285-ecc6df9dc822","target_id":"b2376dbd-002b-4469-8e6e-71748e46e7c2","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 4553d9a4-e0e6-4bc3-b285-ecc6df9dc822 -\u003e b2376dbd-002b-4469-8e6e-71748e46e7c2","gmt_create":"2026-06-30T14:40:47.275789+08:00","gmt_modified":"2026-06-30T14:40:47.275789+08:00"},{"id":2796,"source_id":"4553d9a4-e0e6-4bc3-b285-ecc6df9dc822","target_id":"b5718a44-f452-496d-83c3-4e89b844c709","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 4553d9a4-e0e6-4bc3-b285-ecc6df9dc822 -\u003e b5718a44-f452-496d-83c3-4e89b844c709","gmt_create":"2026-06-30T14:40:47.276097+08:00","gmt_modified":"2026-06-30T14:40:47.276097+08:00"},{"id":2797,"source_id":"4553d9a4-e0e6-4bc3-b285-ecc6df9dc822","target_id":"539729a8-aa4b-40c6-bf3b-ec9f467f7717","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 4553d9a4-e0e6-4bc3-b285-ecc6df9dc822 -\u003e 539729a8-aa4b-40c6-bf3b-ec9f467f7717","gmt_create":"2026-06-30T14:40:47.276606+08:00","gmt_modified":"2026-06-30T14:40:47.276606+08:00"},{"id":2798,"source_id":"ed153077-3827-4586-8838-812707189c14","target_id":"b6857b45-a960-4168-92dd-1edcf6567e47","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: ed153077-3827-4586-8838-812707189c14 -\u003e b6857b45-a960-4168-92dd-1edcf6567e47","gmt_create":"2026-06-30T14:40:47.277101+08:00","gmt_modified":"2026-06-30T14:40:47.277101+08:00"},{"id":2799,"source_id":"ed153077-3827-4586-8838-812707189c14","target_id":"2971fa4f-335a-4294-9668-0967b9047d66","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: ed153077-3827-4586-8838-812707189c14 -\u003e 2971fa4f-335a-4294-9668-0967b9047d66","gmt_create":"2026-06-30T14:40:47.277268+08:00","gmt_modified":"2026-06-30T14:40:47.277268+08:00"},{"id":2800,"source_id":"ed153077-3827-4586-8838-812707189c14","target_id":"f0978b42-6f98-470e-922f-22dec2fac24d","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: ed153077-3827-4586-8838-812707189c14 -\u003e f0978b42-6f98-470e-922f-22dec2fac24d","gmt_create":"2026-06-30T14:40:47.277627+08:00","gmt_modified":"2026-06-30T14:40:47.277627+08:00"},{"id":2802,"source_id":"c45b2f5f-49f8-4c8d-b489-44b4c6800e99","target_id":"62bcda0f-7c78-4109-9649-58bbf9fd68ae","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: c45b2f5f-49f8-4c8d-b489-44b4c6800e99 -\u003e 62bcda0f-7c78-4109-9649-58bbf9fd68ae","gmt_create":"2026-06-30T14:40:47.27822+08:00","gmt_modified":"2026-06-30T14:40:47.27822+08:00"},{"id":2803,"source_id":"c45b2f5f-49f8-4c8d-b489-44b4c6800e99","target_id":"86f882d7-9e64-4c38-85e7-4782fd55fed2","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: c45b2f5f-49f8-4c8d-b489-44b4c6800e99 -\u003e 86f882d7-9e64-4c38-85e7-4782fd55fed2","gmt_create":"2026-06-30T14:40:47.278376+08:00","gmt_modified":"2026-06-30T14:40:47.278376+08:00"},{"id":2804,"source_id":"c45b2f5f-49f8-4c8d-b489-44b4c6800e99","target_id":"ff04bd0e-99c4-481c-ac8c-3c1a6cae1fb5","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: c45b2f5f-49f8-4c8d-b489-44b4c6800e99 -\u003e ff04bd0e-99c4-481c-ac8c-3c1a6cae1fb5","gmt_create":"2026-06-30T14:40:47.278503+08:00","gmt_modified":"2026-06-30T14:40:47.278503+08:00"},{"id":2805,"source_id":"d4cb0c3c-97e9-449f-8918-f1c01e7e3561","target_id":"772c69b5-886e-48f6-bd11-faf8ca2155e8","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: d4cb0c3c-97e9-449f-8918-f1c01e7e3561 -\u003e 772c69b5-886e-48f6-bd11-faf8ca2155e8","gmt_create":"2026-06-30T14:40:47.278654+08:00","gmt_modified":"2026-06-30T14:40:47.278654+08:00"},{"id":2806,"source_id":"d4cb0c3c-97e9-449f-8918-f1c01e7e3561","target_id":"babe3ec0-01cb-43c3-93db-7e59cdccce68","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: d4cb0c3c-97e9-449f-8918-f1c01e7e3561 -\u003e babe3ec0-01cb-43c3-93db-7e59cdccce68","gmt_create":"2026-06-30T14:40:47.278828+08:00","gmt_modified":"2026-06-30T14:40:47.278828+08:00"},{"id":2809,"source_id":"d4cb0c3c-97e9-449f-8918-f1c01e7e3561","target_id":"100cbee2-f7a5-4cc9-83a3-900a4aacac7e","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: d4cb0c3c-97e9-449f-8918-f1c01e7e3561 -\u003e 100cbee2-f7a5-4cc9-83a3-900a4aacac7e","gmt_create":"2026-06-30T14:40:47.279419+08:00","gmt_modified":"2026-06-30T14:40:47.279419+08:00"},{"id":2810,"source_id":"d4cb0c3c-97e9-449f-8918-f1c01e7e3561","target_id":"cf1f3ceb-e3b1-4d5c-8353-f0ea4345414c","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: d4cb0c3c-97e9-449f-8918-f1c01e7e3561 -\u003e cf1f3ceb-e3b1-4d5c-8353-f0ea4345414c","gmt_create":"2026-06-30T14:40:47.279584+08:00","gmt_modified":"2026-06-30T14:40:47.279584+08:00"},{"id":2811,"source_id":"2971fa4f-335a-4294-9668-0967b9047d66","target_id":"0e003133-7d1a-4708-8599-fc71707070d6","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 2971fa4f-335a-4294-9668-0967b9047d66 -\u003e 0e003133-7d1a-4708-8599-fc71707070d6","gmt_create":"2026-06-30T14:40:47.280345+08:00","gmt_modified":"2026-06-30T14:40:47.280346+08:00"},{"id":2812,"source_id":"2971fa4f-335a-4294-9668-0967b9047d66","target_id":"4b6d6abc-bfd2-48a5-9c5e-de89f278f887","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 2971fa4f-335a-4294-9668-0967b9047d66 -\u003e 4b6d6abc-bfd2-48a5-9c5e-de89f278f887","gmt_create":"2026-06-30T14:40:47.280628+08:00","gmt_modified":"2026-06-30T14:40:47.280628+08:00"},{"id":2813,"source_id":"2971fa4f-335a-4294-9668-0967b9047d66","target_id":"5b84c784-85d8-46e0-8972-e7816f6bd687","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 2971fa4f-335a-4294-9668-0967b9047d66 -\u003e 5b84c784-85d8-46e0-8972-e7816f6bd687","gmt_create":"2026-06-30T14:40:47.280745+08:00","gmt_modified":"2026-06-30T14:40:47.280745+08:00"},{"id":2814,"source_id":"f0978b42-6f98-470e-922f-22dec2fac24d","target_id":"ad988472-7d0b-4076-86c8-f14661c5923d","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: f0978b42-6f98-470e-922f-22dec2fac24d -\u003e ad988472-7d0b-4076-86c8-f14661c5923d","gmt_create":"2026-06-30T14:40:47.281057+08:00","gmt_modified":"2026-06-30T14:40:47.281057+08:00"},{"id":2815,"source_id":"f0978b42-6f98-470e-922f-22dec2fac24d","target_id":"7eee30c6-7725-456b-8b43-35b5e4df7e99","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: f0978b42-6f98-470e-922f-22dec2fac24d -\u003e 7eee30c6-7725-456b-8b43-35b5e4df7e99","gmt_create":"2026-06-30T14:40:47.281191+08:00","gmt_modified":"2026-06-30T14:40:47.281191+08:00"},{"id":2816,"source_id":"f0978b42-6f98-470e-922f-22dec2fac24d","target_id":"791c01a2-dea1-407b-948d-3e2da8cbebed","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: f0978b42-6f98-470e-922f-22dec2fac24d -\u003e 791c01a2-dea1-407b-948d-3e2da8cbebed","gmt_create":"2026-06-30T14:40:47.281365+08:00","gmt_modified":"2026-06-30T14:40:47.281365+08:00"},{"id":2818,"source_id":"f0978b42-6f98-470e-922f-22dec2fac24d","target_id":"6003d293-f2aa-4c49-817a-c7fa652890ed","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: f0978b42-6f98-470e-922f-22dec2fac24d -\u003e 6003d293-f2aa-4c49-817a-c7fa652890ed","gmt_create":"2026-06-30T14:40:47.28164+08:00","gmt_modified":"2026-06-30T14:40:47.28164+08:00"},{"id":2820,"source_id":"f0978b42-6f98-470e-922f-22dec2fac24d","target_id":"73336201-a22f-4329-afc6-40fb5f00f4f1","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: f0978b42-6f98-470e-922f-22dec2fac24d -\u003e 73336201-a22f-4329-afc6-40fb5f00f4f1","gmt_create":"2026-06-30T14:40:47.281894+08:00","gmt_modified":"2026-06-30T14:40:47.281894+08:00"},{"id":3274,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"fc2d0cc85e5f2565c3105cbe0584903a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/models/Ota.js","gmt_create":"2026-06-30T18:39:29.619553+08:00","gmt_modified":"2026-06-30T18:39:29.619553+08:00"},{"id":3275,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"ba84445ce5118798ce7d0da4ecb4d5e2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/routes/ota.js","gmt_create":"2026-06-30T18:39:29.62003+08:00","gmt_modified":"2026-06-30T18:39:29.62003+08:00"},{"id":3276,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"a15b46bcf0be7bfbc82e57adca5be630","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/services/otaStorage.js","gmt_create":"2026-06-30T18:39:29.620188+08:00","gmt_modified":"2026-06-30T18:39:29.620188+08:00"},{"id":3277,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"4bb9a8c7ac3763db0746ff90788525b6","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/views/ota/index.vue","gmt_create":"2026-06-30T18:39:29.620355+08:00","gmt_modified":"2026-06-30T18:39:29.620355+08:00"},{"id":3278,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"29e96dbf4d3d8f6e116ec620bbf504ad","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/api/ota.js","gmt_create":"2026-06-30T18:39:29.620492+08:00","gmt_modified":"2026-06-30T18:39:29.620492+08:00"},{"id":3279,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"5ceb781f55bf90055f3005880d06ee2a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/api/blacklist.js","gmt_create":"2026-06-30T18:39:29.620631+08:00","gmt_modified":"2026-06-30T18:39:29.620631+08:00"},{"id":3280,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"5973b5959029669ade01898821960785","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/api/otaTargetDevice.js","gmt_create":"2026-06-30T18:39:29.62078+08:00","gmt_modified":"2026-06-30T18:39:29.62078+08:00"},{"id":3281,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"a84967d9d3088fba02de385738e7ca27","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/models/BlackList.js","gmt_create":"2026-06-30T18:39:29.620917+08:00","gmt_modified":"2026-06-30T18:39:29.620918+08:00"},{"id":3282,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"4ca379f147f6f1da710371999e08dc24","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/models/OtaTargetDevice.js","gmt_create":"2026-06-30T18:39:29.621051+08:00","gmt_modified":"2026-06-30T18:39:29.621051+08:00"},{"id":3283,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"71a563f23b46da0255a6400402bbfa05","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/routes/blacklist.js","gmt_create":"2026-06-30T18:39:29.62129+08:00","gmt_modified":"2026-06-30T18:39:29.62129+08:00"},{"id":3284,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"ea6e178b2f0bdcefe2ae8800166453d5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/routes/otaTargetDevice.js","gmt_create":"2026-06-30T18:39:29.621469+08:00","gmt_modified":"2026-06-30T18:39:29.621469+08:00"},{"id":3285,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"30f836e18a6bf9cbcf650e5884375a93","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/utils/response.js","gmt_create":"2026-06-30T18:39:29.621631+08:00","gmt_modified":"2026-06-30T18:39:29.621631+08:00"},{"id":3286,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"2a04b070bd67fc5059bb504232687d64","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/config/env.js","gmt_create":"2026-06-30T18:39:29.621776+08:00","gmt_modified":"2026-06-30T18:39:29.621776+08:00"},{"id":3287,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"34fcf7aeb55a9c0224c554fc48545063","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/utils/request.js","gmt_create":"2026-06-30T18:39:29.621971+08:00","gmt_modified":"2026-06-30T18:39:29.621971+08:00"},{"id":3288,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"08b8d17e3c09b326687a7bca6789507a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/router/index.js","gmt_create":"2026-06-30T18:39:29.622133+08:00","gmt_modified":"2026-06-30T18:39:29.622133+08:00"},{"id":3289,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"0c25a991664c34b2b36ce3aeed80f4da","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: DEPLOY.md","gmt_create":"2026-06-30T18:39:29.622343+08:00","gmt_modified":"2026-06-30T18:39:29.622343+08:00"},{"id":3290,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"2ba6ee170718db40d0a0c1e0e271ab8c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/ota/index.vue#1-1003","gmt_create":"2026-06-30T18:39:29.622527+08:00","gmt_modified":"2026-06-30T18:39:29.622528+08:00"},{"id":3291,"source_id":"4bb9a8c7ac3763db0746ff90788525b6","target_id":"2ba6ee170718db40d0a0c1e0e271ab8c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-1003","gmt_create":"2026-06-30T18:39:29.622724+08:00","gmt_modified":"2026-06-30T18:39:29.622724+08:00"},{"id":3292,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"3e935f654a28968186e9260f2c5035c7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/ota.js#1-68","gmt_create":"2026-06-30T18:39:29.622902+08:00","gmt_modified":"2026-06-30T18:39:29.622902+08:00"},{"id":3293,"source_id":"29e96dbf4d3d8f6e116ec620bbf504ad","target_id":"3e935f654a28968186e9260f2c5035c7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-68","gmt_create":"2026-06-30T18:39:29.623031+08:00","gmt_modified":"2026-06-30T18:39:29.623031+08:00"},{"id":3294,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"edbb69e747bbcd76dd1bc3a361ebf7c0","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/blacklist.js#1-57","gmt_create":"2026-06-30T18:39:29.623251+08:00","gmt_modified":"2026-06-30T18:39:29.623251+08:00"},{"id":3295,"source_id":"5ceb781f55bf90055f3005880d06ee2a","target_id":"edbb69e747bbcd76dd1bc3a361ebf7c0","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-57","gmt_create":"2026-06-30T18:39:29.623384+08:00","gmt_modified":"2026-06-30T18:39:29.623384+08:00"},{"id":3296,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"4e817a7f3bd90bb9e57c6a2e9009380f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/otaTargetDevice.js#1-57","gmt_create":"2026-06-30T18:39:29.623559+08:00","gmt_modified":"2026-06-30T18:39:29.623559+08:00"},{"id":3297,"source_id":"5973b5959029669ade01898821960785","target_id":"4e817a7f3bd90bb9e57c6a2e9009380f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-57","gmt_create":"2026-06-30T18:39:29.623688+08:00","gmt_modified":"2026-06-30T18:39:29.623688+08:00"},{"id":3298,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"72de55f3f022487777e9ad301c9d942b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/blacklist.js#1-223","gmt_create":"2026-06-30T18:39:29.623918+08:00","gmt_modified":"2026-06-30T18:39:29.623918+08:00"},{"id":3299,"source_id":"71a563f23b46da0255a6400402bbfa05","target_id":"72de55f3f022487777e9ad301c9d942b","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-223","gmt_create":"2026-06-30T18:39:29.624048+08:00","gmt_modified":"2026-06-30T18:39:29.624048+08:00"},{"id":3300,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"ba9810388706ac5ffb0156f74ada8b88","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/otaTargetDevice.js#1-248","gmt_create":"2026-06-30T18:39:29.624221+08:00","gmt_modified":"2026-06-30T18:39:29.624221+08:00"},{"id":3301,"source_id":"ea6e178b2f0bdcefe2ae8800166453d5","target_id":"ba9810388706ac5ffb0156f74ada8b88","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-248","gmt_create":"2026-06-30T18:39:29.62434+08:00","gmt_modified":"2026-06-30T18:39:29.62434+08:00"},{"id":3302,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"f3b38dfd34a76e0d2e62a863fca301a8","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/ota/index.vue#420-831","gmt_create":"2026-06-30T18:39:29.625105+08:00","gmt_modified":"2026-06-30T18:39:29.625105+08:00"},{"id":3303,"source_id":"4bb9a8c7ac3763db0746ff90788525b6","target_id":"f3b38dfd34a76e0d2e62a863fca301a8","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 420-831","gmt_create":"2026-06-30T18:39:29.625218+08:00","gmt_modified":"2026-06-30T18:39:29.625218+08:00"},{"id":3304,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"ae7ce676a4f649c15d0490bbb2954cfe","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/ota.js#13-67","gmt_create":"2026-06-30T18:39:29.625427+08:00","gmt_modified":"2026-06-30T18:39:29.625427+08:00"},{"id":3305,"source_id":"29e96dbf4d3d8f6e116ec620bbf504ad","target_id":"ae7ce676a4f649c15d0490bbb2954cfe","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 13-67","gmt_create":"2026-06-30T18:39:29.625541+08:00","gmt_modified":"2026-06-30T18:39:29.625541+08:00"},{"id":3306,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"859ba4011a4720ad0ad431545e144986","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/blacklist.js#12-56","gmt_create":"2026-06-30T18:39:29.625693+08:00","gmt_modified":"2026-06-30T18:39:29.625693+08:00"},{"id":3307,"source_id":"5ceb781f55bf90055f3005880d06ee2a","target_id":"859ba4011a4720ad0ad431545e144986","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 12-56","gmt_create":"2026-06-30T18:39:29.625828+08:00","gmt_modified":"2026-06-30T18:39:29.625828+08:00"},{"id":3308,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"c910f65a89648ecf30c84b77b136ad70","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/otaTargetDevice.js#12-55","gmt_create":"2026-06-30T18:39:29.625982+08:00","gmt_modified":"2026-06-30T18:39:29.625982+08:00"},{"id":3309,"source_id":"5973b5959029669ade01898821960785","target_id":"c910f65a89648ecf30c84b77b136ad70","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 12-55","gmt_create":"2026-06-30T18:39:29.626098+08:00","gmt_modified":"2026-06-30T18:39:29.626098+08:00"},{"id":3310,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"c042223cf0aa5b2e59be1747923b4baf","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/ota.js#13-49","gmt_create":"2026-06-30T18:39:29.626374+08:00","gmt_modified":"2026-06-30T18:39:29.626374+08:00"},{"id":3311,"source_id":"29e96dbf4d3d8f6e116ec620bbf504ad","target_id":"c042223cf0aa5b2e59be1747923b4baf","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 13-49","gmt_create":"2026-06-30T18:39:29.626551+08:00","gmt_modified":"2026-06-30T18:39:29.626551+08:00"},{"id":3312,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"b1e9d90908a2a5e3d545ca0cf2c86769","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/ota.js#24-268","gmt_create":"2026-06-30T18:39:29.626904+08:00","gmt_modified":"2026-06-30T18:39:29.626904+08:00"},{"id":3313,"source_id":"ba84445ce5118798ce7d0da4ecb4d5e2","target_id":"b1e9d90908a2a5e3d545ca0cf2c86769","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 24-268","gmt_create":"2026-06-30T18:39:29.627017+08:00","gmt_modified":"2026-06-30T18:39:29.627017+08:00"},{"id":3314,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"aae8712924efab58e019d0c963576781","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/blacklist.js#96-139","gmt_create":"2026-06-30T18:39:29.627222+08:00","gmt_modified":"2026-06-30T18:39:29.627222+08:00"},{"id":3315,"source_id":"71a563f23b46da0255a6400402bbfa05","target_id":"aae8712924efab58e019d0c963576781","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 96-139","gmt_create":"2026-06-30T18:39:29.627488+08:00","gmt_modified":"2026-06-30T18:39:29.627488+08:00"},{"id":3316,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"fb9daf52780951bc4b93f14b1fcfa8f1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/otaTargetDevice.js#96-139","gmt_create":"2026-06-30T18:39:29.627693+08:00","gmt_modified":"2026-06-30T18:39:29.627693+08:00"},{"id":3317,"source_id":"ea6e178b2f0bdcefe2ae8800166453d5","target_id":"fb9daf52780951bc4b93f14b1fcfa8f1","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 96-139","gmt_create":"2026-06-30T18:39:29.627822+08:00","gmt_modified":"2026-06-30T18:39:29.627822+08:00"},{"id":3318,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"23aa29b61d1387fca0530a0a1e57e27f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/ota.js#1-292","gmt_create":"2026-06-30T18:39:29.628032+08:00","gmt_modified":"2026-06-30T18:39:29.628032+08:00"},{"id":3319,"source_id":"ba84445ce5118798ce7d0da4ecb4d5e2","target_id":"23aa29b61d1387fca0530a0a1e57e27f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-292","gmt_create":"2026-06-30T18:39:29.628183+08:00","gmt_modified":"2026-06-30T18:39:29.628183+08:00"},{"id":3320,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"e6f541a0af8390b3610d1e380a8d3236","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/Ota.js#4-94","gmt_create":"2026-06-30T18:39:29.628646+08:00","gmt_modified":"2026-06-30T18:39:29.628646+08:00"},{"id":3321,"source_id":"fc2d0cc85e5f2565c3105cbe0584903a","target_id":"e6f541a0af8390b3610d1e380a8d3236","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 4-94","gmt_create":"2026-06-30T18:39:29.628773+08:00","gmt_modified":"2026-06-30T18:39:29.628773+08:00"},{"id":3322,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"4aad83e3e76ccc16e5b91d801ab1b278","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/BlackList.js#5-36","gmt_create":"2026-06-30T18:39:29.628938+08:00","gmt_modified":"2026-06-30T18:39:29.628938+08:00"},{"id":3323,"source_id":"a84967d9d3088fba02de385738e7ca27","target_id":"4aad83e3e76ccc16e5b91d801ab1b278","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 5-36","gmt_create":"2026-06-30T18:39:29.629078+08:00","gmt_modified":"2026-06-30T18:39:29.629078+08:00"},{"id":3324,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"54c99704b8bcabdfe63adda9c4392452","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/OtaTargetDevice.js#5-37","gmt_create":"2026-06-30T18:39:29.62924+08:00","gmt_modified":"2026-06-30T18:39:29.62924+08:00"},{"id":3325,"source_id":"4ca379f147f6f1da710371999e08dc24","target_id":"54c99704b8bcabdfe63adda9c4392452","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 5-37","gmt_create":"2026-06-30T18:39:29.629354+08:00","gmt_modified":"2026-06-30T18:39:29.629354+08:00"},{"id":3326,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"b7c66d1bc7887a6132dc3acbf6421a5d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/Ota.js#1-97","gmt_create":"2026-06-30T18:39:29.629506+08:00","gmt_modified":"2026-06-30T18:39:29.629506+08:00"},{"id":3327,"source_id":"fc2d0cc85e5f2565c3105cbe0584903a","target_id":"b7c66d1bc7887a6132dc3acbf6421a5d","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-97","gmt_create":"2026-06-30T18:39:29.629647+08:00","gmt_modified":"2026-06-30T18:39:29.629647+08:00"},{"id":3328,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"058bc5c3e018c854b5cf42905abd45d7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/BlackList.js#1-36","gmt_create":"2026-06-30T18:39:29.629815+08:00","gmt_modified":"2026-06-30T18:39:29.629815+08:00"},{"id":3329,"source_id":"a84967d9d3088fba02de385738e7ca27","target_id":"058bc5c3e018c854b5cf42905abd45d7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-36","gmt_create":"2026-06-30T18:39:29.629939+08:00","gmt_modified":"2026-06-30T18:39:29.629939+08:00"},{"id":3330,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"3830639d0b7444aa8a1cf3c80d4eef7e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/OtaTargetDevice.js#1-37","gmt_create":"2026-06-30T18:39:29.630118+08:00","gmt_modified":"2026-06-30T18:39:29.630118+08:00"},{"id":3331,"source_id":"4ca379f147f6f1da710371999e08dc24","target_id":"3830639d0b7444aa8a1cf3c80d4eef7e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-37","gmt_create":"2026-06-30T18:39:29.633252+08:00","gmt_modified":"2026-06-30T18:39:29.633252+08:00"},{"id":3332,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"be497152bcedca75299e4c2521c11859","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/otaStorage.js#46-103","gmt_create":"2026-06-30T18:39:29.633431+08:00","gmt_modified":"2026-06-30T18:39:29.633431+08:00"},{"id":3333,"source_id":"a15b46bcf0be7bfbc82e57adca5be630","target_id":"be497152bcedca75299e4c2521c11859","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 46-103","gmt_create":"2026-06-30T18:39:29.633531+08:00","gmt_modified":"2026-06-30T18:39:29.633531+08:00"},{"id":3334,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"af76fcd4277eeb577f573e21de923bbf","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/config/env.js#1-13","gmt_create":"2026-06-30T18:39:29.633724+08:00","gmt_modified":"2026-06-30T18:39:29.633724+08:00"},{"id":3335,"source_id":"2a04b070bd67fc5059bb504232687d64","target_id":"af76fcd4277eeb577f573e21de923bbf","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-13","gmt_create":"2026-06-30T18:39:29.633843+08:00","gmt_modified":"2026-06-30T18:39:29.633843+08:00"},{"id":3336,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"b8c21c93e526039c96f1df526ebdcafe","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/otaStorage.js#1-113","gmt_create":"2026-06-30T18:39:29.633998+08:00","gmt_modified":"2026-06-30T18:39:29.633998+08:00"},{"id":3337,"source_id":"a15b46bcf0be7bfbc82e57adca5be630","target_id":"b8c21c93e526039c96f1df526ebdcafe","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-113","gmt_create":"2026-06-30T18:39:29.634119+08:00","gmt_modified":"2026-06-30T18:39:29.634119+08:00"},{"id":3338,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"424dfd038ca84be6195b08d7032a1235","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/ota.js#68-102","gmt_create":"2026-06-30T18:39:29.634371+08:00","gmt_modified":"2026-06-30T18:39:29.634371+08:00"},{"id":3339,"source_id":"ba84445ce5118798ce7d0da4ecb4d5e2","target_id":"424dfd038ca84be6195b08d7032a1235","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 68-102","gmt_create":"2026-06-30T18:39:29.63449+08:00","gmt_modified":"2026-06-30T18:39:29.63449+08:00"},{"id":3340,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"2fc67d9140f7c12759a5188eb6f9b204","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/ota/index.vue#305-338","gmt_create":"2026-06-30T18:39:29.634627+08:00","gmt_modified":"2026-06-30T18:39:29.634627+08:00"},{"id":3341,"source_id":"4bb9a8c7ac3763db0746ff90788525b6","target_id":"2fc67d9140f7c12759a5188eb6f9b204","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 305-338","gmt_create":"2026-06-30T18:39:29.634747+08:00","gmt_modified":"2026-06-30T18:39:29.634747+08:00"},{"id":3342,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"e3a6003c52bf8b8487bb1b8709da6b4b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/utils/response.js#1-25","gmt_create":"2026-06-30T18:39:29.63491+08:00","gmt_modified":"2026-06-30T18:39:29.63491+08:00"},{"id":3343,"source_id":"30f836e18a6bf9cbcf650e5884375a93","target_id":"e3a6003c52bf8b8487bb1b8709da6b4b","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-25","gmt_create":"2026-06-30T18:39:29.635031+08:00","gmt_modified":"2026-06-30T18:39:29.635031+08:00"},{"id":3344,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"cabe1728acba4dab25a86b5788412e46","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/ota.js#25-66","gmt_create":"2026-06-30T18:39:29.635187+08:00","gmt_modified":"2026-06-30T18:39:29.635187+08:00"},{"id":3345,"source_id":"ba84445ce5118798ce7d0da4ecb4d5e2","target_id":"cabe1728acba4dab25a86b5788412e46","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 25-66","gmt_create":"2026-06-30T18:39:29.635325+08:00","gmt_modified":"2026-06-30T18:39:29.635325+08:00"},{"id":3346,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"45f0756fae3928b75883500a5006f7f0","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/ota/index.vue#645-734","gmt_create":"2026-06-30T18:39:29.635489+08:00","gmt_modified":"2026-06-30T18:39:29.635489+08:00"},{"id":3347,"source_id":"4bb9a8c7ac3763db0746ff90788525b6","target_id":"45f0756fae3928b75883500a5006f7f0","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 645-734","gmt_create":"2026-06-30T18:39:29.635587+08:00","gmt_modified":"2026-06-30T18:39:29.635587+08:00"},{"id":3348,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"f2e521eddcaa25c62a309d5b0af997fa","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/blacklist.js#96-204","gmt_create":"2026-06-30T18:39:29.635812+08:00","gmt_modified":"2026-06-30T18:39:29.635812+08:00"},{"id":3349,"source_id":"71a563f23b46da0255a6400402bbfa05","target_id":"f2e521eddcaa25c62a309d5b0af997fa","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 96-204","gmt_create":"2026-06-30T18:39:29.635929+08:00","gmt_modified":"2026-06-30T18:39:29.635929+08:00"},{"id":3350,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"6b7ea701575cf98b6ee3431f68ad5649","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/ota/index.vue#736-817","gmt_create":"2026-06-30T18:39:29.636087+08:00","gmt_modified":"2026-06-30T18:39:29.636087+08:00"},{"id":3351,"source_id":"4bb9a8c7ac3763db0746ff90788525b6","target_id":"6b7ea701575cf98b6ee3431f68ad5649","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 736-817","gmt_create":"2026-06-30T18:39:29.636205+08:00","gmt_modified":"2026-06-30T18:39:29.636205+08:00"},{"id":3352,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"506ecfb839ed7fb3f4199ade7e4b6a64","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/otaTargetDevice.js#96-208","gmt_create":"2026-06-30T18:39:29.636418+08:00","gmt_modified":"2026-06-30T18:39:29.636418+08:00"},{"id":3353,"source_id":"ea6e178b2f0bdcefe2ae8800166453d5","target_id":"506ecfb839ed7fb3f4199ade7e4b6a64","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 96-208","gmt_create":"2026-06-30T18:39:29.636531+08:00","gmt_modified":"2026-06-30T18:39:29.636531+08:00"},{"id":3354,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"7a5ae98472bdc4806472d50e6b88c997","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/utils/request.js#1-72","gmt_create":"2026-06-30T18:39:29.636691+08:00","gmt_modified":"2026-06-30T18:39:29.636691+08:00"},{"id":3355,"source_id":"34fcf7aeb55a9c0224c554fc48545063","target_id":"7a5ae98472bdc4806472d50e6b88c997","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-72","gmt_create":"2026-06-30T18:39:29.636799+08:00","gmt_modified":"2026-06-30T18:39:29.6368+08:00"},{"id":3356,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"69c930f997042246d4e17369ede6f826","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/router/index.js#1-91","gmt_create":"2026-06-30T18:39:29.636927+08:00","gmt_modified":"2026-06-30T18:39:29.636927+08:00"},{"id":3357,"source_id":"08b8d17e3c09b326687a7bca6789507a","target_id":"69c930f997042246d4e17369ede6f826","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-91","gmt_create":"2026-06-30T18:39:29.637036+08:00","gmt_modified":"2026-06-30T18:39:29.637036+08:00"},{"id":3358,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"6b61c60063d41432a3cc1ac4d1699181","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/utils/request.js#44-69","gmt_create":"2026-06-30T18:39:29.638051+08:00","gmt_modified":"2026-06-30T18:39:29.638051+08:00"},{"id":3359,"source_id":"34fcf7aeb55a9c0224c554fc48545063","target_id":"6b61c60063d41432a3cc1ac4d1699181","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 44-69","gmt_create":"2026-06-30T18:39:29.638209+08:00","gmt_modified":"2026-06-30T18:39:29.638209+08:00"},{"id":3360,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"752be7590bb954b39e5a8f41ce8811eb","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/blacklist.js#159-183","gmt_create":"2026-06-30T18:39:29.638353+08:00","gmt_modified":"2026-06-30T18:39:29.638353+08:00"},{"id":3361,"source_id":"71a563f23b46da0255a6400402bbfa05","target_id":"752be7590bb954b39e5a8f41ce8811eb","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 159-183","gmt_create":"2026-06-30T18:39:29.638443+08:00","gmt_modified":"2026-06-30T18:39:29.638443+08:00"},{"id":3362,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"4daa6ac2900ccb8c9fd7142d0ecdd298","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/otaTargetDevice.js#142-208","gmt_create":"2026-06-30T18:39:29.638592+08:00","gmt_modified":"2026-06-30T18:39:29.638592+08:00"},{"id":3363,"source_id":"ea6e178b2f0bdcefe2ae8800166453d5","target_id":"4daa6ac2900ccb8c9fd7142d0ecdd298","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 142-208","gmt_create":"2026-06-30T18:39:29.638702+08:00","gmt_modified":"2026-06-30T18:39:29.638702+08:00"},{"id":3364,"source_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","target_id":"e22545d86c6efa26c57aea0e355a57f6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: DEPLOY.md#226-256","gmt_create":"2026-06-30T18:39:29.638841+08:00","gmt_modified":"2026-06-30T18:39:29.638841+08:00"},{"id":3365,"source_id":"0c25a991664c34b2b36ce3aeed80f4da","target_id":"e22545d86c6efa26c57aea0e355a57f6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 226-256","gmt_create":"2026-06-30T18:39:29.638935+08:00","gmt_modified":"2026-06-30T18:39:29.638935+08:00"},{"id":3366,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"fc2d0cc85e5f2565c3105cbe0584903a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/models/Ota.js","gmt_create":"2026-06-30T18:39:56.530513+08:00","gmt_modified":"2026-06-30T18:39:56.530513+08:00"},{"id":3367,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"a84967d9d3088fba02de385738e7ca27","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/models/BlackList.js","gmt_create":"2026-06-30T18:39:56.530752+08:00","gmt_modified":"2026-06-30T18:39:56.530752+08:00"},{"id":3368,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"4ca379f147f6f1da710371999e08dc24","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/models/OtaTargetDevice.js","gmt_create":"2026-06-30T18:39:56.530901+08:00","gmt_modified":"2026-06-30T18:39:56.530901+08:00"},{"id":3369,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"ba84445ce5118798ce7d0da4ecb4d5e2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/routes/ota.js","gmt_create":"2026-06-30T18:39:56.531051+08:00","gmt_modified":"2026-06-30T18:39:56.531051+08:00"},{"id":3370,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"71a563f23b46da0255a6400402bbfa05","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/routes/blacklist.js","gmt_create":"2026-06-30T18:39:56.531158+08:00","gmt_modified":"2026-06-30T18:39:56.531158+08:00"},{"id":3371,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"ea6e178b2f0bdcefe2ae8800166453d5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/routes/otaTargetDevice.js","gmt_create":"2026-06-30T18:39:56.531315+08:00","gmt_modified":"2026-06-30T18:39:56.531315+08:00"},{"id":3372,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"a15b46bcf0be7bfbc82e57adca5be630","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/services/otaStorage.js","gmt_create":"2026-06-30T18:39:56.531436+08:00","gmt_modified":"2026-06-30T18:39:56.531436+08:00"},{"id":3373,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"99aa92df5b8c8412119e9b3cb015f8c4","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/validators/ota.js","gmt_create":"2026-06-30T18:39:56.531564+08:00","gmt_modified":"2026-06-30T18:39:56.531564+08:00"},{"id":3374,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"0d26d3961441eb708b69c96f1ed1f7b7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/validators/blacklist.js","gmt_create":"2026-06-30T18:39:56.531677+08:00","gmt_modified":"2026-06-30T18:39:56.531677+08:00"},{"id":3375,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"8a4e619bfb6be9c463274f96a2dcb5a0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/validators/otaTargetDevice.js","gmt_create":"2026-06-30T18:39:56.531828+08:00","gmt_modified":"2026-06-30T18:39:56.531828+08:00"},{"id":3376,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"30f836e18a6bf9cbcf650e5884375a93","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/utils/response.js","gmt_create":"2026-06-30T18:39:56.531932+08:00","gmt_modified":"2026-06-30T18:39:56.531932+08:00"},{"id":3377,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"2a04b070bd67fc5059bb504232687d64","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/config/env.js","gmt_create":"2026-06-30T18:39:56.53205+08:00","gmt_modified":"2026-06-30T18:39:56.53205+08:00"},{"id":3378,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"cb4575c8c79b7b9f6ffdac43c2369b95","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/config/database.js","gmt_create":"2026-06-30T18:39:56.532162+08:00","gmt_modified":"2026-06-30T18:39:56.532162+08:00"},{"id":3379,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"4bb9a8c7ac3763db0746ff90788525b6","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/views/ota/index.vue","gmt_create":"2026-06-30T18:39:56.532265+08:00","gmt_modified":"2026-06-30T18:39:56.532265+08:00"},{"id":3380,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"0eb021ef791f4679788fe98caea23e31","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/views/blacklist/index.vue","gmt_create":"2026-06-30T18:39:56.532386+08:00","gmt_modified":"2026-06-30T18:39:56.532386+08:00"},{"id":3381,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"cc4227daf4f2b37377be96fcc492e509","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/views/ota-target-device/index.vue","gmt_create":"2026-06-30T18:39:56.532524+08:00","gmt_modified":"2026-06-30T18:39:56.532524+08:00"},{"id":3382,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"29e96dbf4d3d8f6e116ec620bbf504ad","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/api/ota.js","gmt_create":"2026-06-30T18:39:56.53265+08:00","gmt_modified":"2026-06-30T18:39:56.53265+08:00"},{"id":3383,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"5ceb781f55bf90055f3005880d06ee2a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/api/blacklist.js","gmt_create":"2026-06-30T18:39:56.532804+08:00","gmt_modified":"2026-06-30T18:39:56.532804+08:00"},{"id":3384,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"5973b5959029669ade01898821960785","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/api/otaTargetDevice.js","gmt_create":"2026-06-30T18:39:56.532906+08:00","gmt_modified":"2026-06-30T18:39:56.532906+08:00"},{"id":3385,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"23aa29b61d1387fca0530a0a1e57e27f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/ota.js#1-292","gmt_create":"2026-06-30T18:39:56.53307+08:00","gmt_modified":"2026-06-30T18:39:56.53307+08:00"},{"id":3386,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"72de55f3f022487777e9ad301c9d942b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/blacklist.js#1-223","gmt_create":"2026-06-30T18:39:56.533275+08:00","gmt_modified":"2026-06-30T18:39:56.533275+08:00"},{"id":3387,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"ba9810388706ac5ffb0156f74ada8b88","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/otaTargetDevice.js#1-248","gmt_create":"2026-06-30T18:39:56.533479+08:00","gmt_modified":"2026-06-30T18:39:56.533479+08:00"},{"id":3388,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"b7c66d1bc7887a6132dc3acbf6421a5d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/Ota.js#1-97","gmt_create":"2026-06-30T18:39:56.533642+08:00","gmt_modified":"2026-06-30T18:39:56.533642+08:00"},{"id":3389,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"05900505c40339d0cc93870281600479","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/BlackList.js#1-37","gmt_create":"2026-06-30T18:39:56.533836+08:00","gmt_modified":"2026-06-30T18:39:56.533836+08:00"},{"id":3390,"source_id":"a84967d9d3088fba02de385738e7ca27","target_id":"05900505c40339d0cc93870281600479","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-37","gmt_create":"2026-06-30T18:39:56.533939+08:00","gmt_modified":"2026-06-30T18:39:56.533939+08:00"},{"id":3391,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"921d509d2d71df1e2bace1390640482a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/OtaTargetDevice.js#1-38","gmt_create":"2026-06-30T18:39:56.534096+08:00","gmt_modified":"2026-06-30T18:39:56.534096+08:00"},{"id":3392,"source_id":"4ca379f147f6f1da710371999e08dc24","target_id":"921d509d2d71df1e2bace1390640482a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-38","gmt_create":"2026-06-30T18:39:56.534213+08:00","gmt_modified":"2026-06-30T18:39:56.534213+08:00"},{"id":3393,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"149a41cdd5807ad4f666e9eb2463fa68","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/ota/index.vue#1-628","gmt_create":"2026-06-30T18:39:56.534352+08:00","gmt_modified":"2026-06-30T18:39:56.534352+08:00"},{"id":3394,"source_id":"4bb9a8c7ac3763db0746ff90788525b6","target_id":"149a41cdd5807ad4f666e9eb2463fa68","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-628","gmt_create":"2026-06-30T18:39:56.534456+08:00","gmt_modified":"2026-06-30T18:39:56.534456+08:00"},{"id":3395,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"771e33c2a04ba5eb1a504cf7aa1e9c36","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/blacklist/index.vue#1-381","gmt_create":"2026-06-30T18:39:56.53458+08:00","gmt_modified":"2026-06-30T18:39:56.53458+08:00"},{"id":3396,"source_id":"0eb021ef791f4679788fe98caea23e31","target_id":"771e33c2a04ba5eb1a504cf7aa1e9c36","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-381","gmt_create":"2026-06-30T18:39:56.534732+08:00","gmt_modified":"2026-06-30T18:39:56.534732+08:00"},{"id":3397,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"f23242497ee4dc9ed490a1d09d0d3d91","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/ota-target-device/index.vue#1-386","gmt_create":"2026-06-30T18:39:56.534886+08:00","gmt_modified":"2026-06-30T18:39:56.534886+08:00"},{"id":3398,"source_id":"cc4227daf4f2b37377be96fcc492e509","target_id":"f23242497ee4dc9ed490a1d09d0d3d91","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-386","gmt_create":"2026-06-30T18:39:56.535014+08:00","gmt_modified":"2026-06-30T18:39:56.535014+08:00"},{"id":3399,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"b8c21c93e526039c96f1df526ebdcafe","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/otaStorage.js#1-113","gmt_create":"2026-06-30T18:39:56.535896+08:00","gmt_modified":"2026-06-30T18:39:56.535896+08:00"},{"id":3400,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"0c0ca507fcaf2164af19adf77eaf72e8","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/validators/ota.js#1-36","gmt_create":"2026-06-30T18:39:56.53607+08:00","gmt_modified":"2026-06-30T18:39:56.53607+08:00"},{"id":3401,"source_id":"99aa92df5b8c8412119e9b3cb015f8c4","target_id":"0c0ca507fcaf2164af19adf77eaf72e8","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-36","gmt_create":"2026-06-30T18:39:56.536174+08:00","gmt_modified":"2026-06-30T18:39:56.536174+08:00"},{"id":3402,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"420851439a300cff8b7fa324589ce87a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/validators/blacklist.js#1-14","gmt_create":"2026-06-30T18:39:56.536294+08:00","gmt_modified":"2026-06-30T18:39:56.536294+08:00"},{"id":3403,"source_id":"0d26d3961441eb708b69c96f1ed1f7b7","target_id":"420851439a300cff8b7fa324589ce87a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-14","gmt_create":"2026-06-30T18:39:56.536388+08:00","gmt_modified":"2026-06-30T18:39:56.536388+08:00"},{"id":3404,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"e92ce9787ed66ea4dd0821e0c8f28d8a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/validators/otaTargetDevice.js#1-14","gmt_create":"2026-06-30T18:39:56.536524+08:00","gmt_modified":"2026-06-30T18:39:56.536524+08:00"},{"id":3405,"source_id":"8a4e619bfb6be9c463274f96a2dcb5a0","target_id":"e92ce9787ed66ea4dd0821e0c8f28d8a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-14","gmt_create":"2026-06-30T18:39:56.536607+08:00","gmt_modified":"2026-06-30T18:39:56.536607+08:00"},{"id":3406,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"0696a947e8ffd03fd403809f77673c55","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/ota.js#24-66","gmt_create":"2026-06-30T18:39:56.536822+08:00","gmt_modified":"2026-06-30T18:39:56.536822+08:00"},{"id":3407,"source_id":"ba84445ce5118798ce7d0da4ecb4d5e2","target_id":"0696a947e8ffd03fd403809f77673c55","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 24-66","gmt_create":"2026-06-30T18:39:56.536933+08:00","gmt_modified":"2026-06-30T18:39:56.536933+08:00"},{"id":3408,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"424dfd038ca84be6195b08d7032a1235","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/ota.js#68-102","gmt_create":"2026-06-30T18:39:56.537069+08:00","gmt_modified":"2026-06-30T18:39:56.53707+08:00"},{"id":3409,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"be497152bcedca75299e4c2521c11859","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/otaStorage.js#46-103","gmt_create":"2026-06-30T18:39:56.537221+08:00","gmt_modified":"2026-06-30T18:39:56.537221+08:00"},{"id":3410,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"0f5328f2be7159ab2f533662f8992b10","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/ota/index.vue#384-412","gmt_create":"2026-06-30T18:39:56.537364+08:00","gmt_modified":"2026-06-30T18:39:56.537364+08:00"},{"id":3411,"source_id":"4bb9a8c7ac3763db0746ff90788525b6","target_id":"0f5328f2be7159ab2f533662f8992b10","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 384-412","gmt_create":"2026-06-30T18:39:56.537465+08:00","gmt_modified":"2026-06-30T18:39:56.537465+08:00"},{"id":3412,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"e6f541a0af8390b3610d1e380a8d3236","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/Ota.js#4-94","gmt_create":"2026-06-30T18:39:56.537604+08:00","gmt_modified":"2026-06-30T18:39:56.537604+08:00"},{"id":3413,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"b6918b1988464553531aec983ea27b7d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/BlackList.js#5-32","gmt_create":"2026-06-30T18:39:56.537774+08:00","gmt_modified":"2026-06-30T18:39:56.537774+08:00"},{"id":3414,"source_id":"a84967d9d3088fba02de385738e7ca27","target_id":"b6918b1988464553531aec983ea27b7d","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 5-32","gmt_create":"2026-06-30T18:39:56.537912+08:00","gmt_modified":"2026-06-30T18:39:56.537912+08:00"},{"id":3415,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"59e0c0eb304ea8fbb7145bc038c8fdf6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/OtaTargetDevice.js#5-33","gmt_create":"2026-06-30T18:39:56.538023+08:00","gmt_modified":"2026-06-30T18:39:56.538023+08:00"},{"id":3416,"source_id":"4ca379f147f6f1da710371999e08dc24","target_id":"59e0c0eb304ea8fbb7145bc038c8fdf6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 5-33","gmt_create":"2026-06-30T18:39:56.538117+08:00","gmt_modified":"2026-06-30T18:39:56.538117+08:00"},{"id":3417,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"0991eb53c8fe806cf46decab5e748f75","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/otaStorage.js#72-103","gmt_create":"2026-06-30T18:39:56.538566+08:00","gmt_modified":"2026-06-30T18:39:56.538566+08:00"},{"id":3418,"source_id":"a15b46bcf0be7bfbc82e57adca5be630","target_id":"0991eb53c8fe806cf46decab5e748f75","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 72-103","gmt_create":"2026-06-30T18:39:56.538694+08:00","gmt_modified":"2026-06-30T18:39:56.538694+08:00"},{"id":3419,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"a826e77f133d3db11e600f30b88f4e9a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/validators/ota.js#3-35","gmt_create":"2026-06-30T18:39:56.539109+08:00","gmt_modified":"2026-06-30T18:39:56.539109+08:00"},{"id":3420,"source_id":"99aa92df5b8c8412119e9b3cb015f8c4","target_id":"a826e77f133d3db11e600f30b88f4e9a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 3-35","gmt_create":"2026-06-30T18:39:56.53922+08:00","gmt_modified":"2026-06-30T18:39:56.53922+08:00"},{"id":3421,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"4a33d32c1578fd612d900aa17246d8c2","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/validators/blacklist.js#3-11","gmt_create":"2026-06-30T18:39:56.539329+08:00","gmt_modified":"2026-06-30T18:39:56.539329+08:00"},{"id":3422,"source_id":"0d26d3961441eb708b69c96f1ed1f7b7","target_id":"4a33d32c1578fd612d900aa17246d8c2","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 3-11","gmt_create":"2026-06-30T18:39:56.539438+08:00","gmt_modified":"2026-06-30T18:39:56.539438+08:00"},{"id":3423,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"4660c7ce6daeb3f765d39856dcf95f6f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/validators/otaTargetDevice.js#3-11","gmt_create":"2026-06-30T18:39:56.539551+08:00","gmt_modified":"2026-06-30T18:39:56.539551+08:00"},{"id":3424,"source_id":"8a4e619bfb6be9c463274f96a2dcb5a0","target_id":"4660c7ce6daeb3f765d39856dcf95f6f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 3-11","gmt_create":"2026-06-30T18:39:56.53963+08:00","gmt_modified":"2026-06-30T18:39:56.53963+08:00"},{"id":3425,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"e3a6003c52bf8b8487bb1b8709da6b4b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/utils/response.js#1-25","gmt_create":"2026-06-30T18:39:56.539736+08:00","gmt_modified":"2026-06-30T18:39:56.539736+08:00"},{"id":3426,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"7467dc2e2d22c93c63fa6342b2e08541","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/ota/index.vue#420-579","gmt_create":"2026-06-30T18:39:56.540181+08:00","gmt_modified":"2026-06-30T18:39:56.540181+08:00"},{"id":3427,"source_id":"4bb9a8c7ac3763db0746ff90788525b6","target_id":"7467dc2e2d22c93c63fa6342b2e08541","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 420-579","gmt_create":"2026-06-30T18:39:56.540259+08:00","gmt_modified":"2026-06-30T18:39:56.540259+08:00"},{"id":3428,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"4b5baf2b8dcd8468722cd31868c794b2","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/ota/index.vue#645-683","gmt_create":"2026-06-30T18:39:56.540384+08:00","gmt_modified":"2026-06-30T18:39:56.540384+08:00"},{"id":3429,"source_id":"4bb9a8c7ac3763db0746ff90788525b6","target_id":"4b5baf2b8dcd8468722cd31868c794b2","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 645-683","gmt_create":"2026-06-30T18:39:56.540462+08:00","gmt_modified":"2026-06-30T18:39:56.540462+08:00"},{"id":3430,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"3e935f654a28968186e9260f2c5035c7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/ota.js#1-68","gmt_create":"2026-06-30T18:39:56.540837+08:00","gmt_modified":"2026-06-30T18:39:56.540837+08:00"},{"id":3431,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"edbb69e747bbcd76dd1bc3a361ebf7c0","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/blacklist.js#1-57","gmt_create":"2026-06-30T18:39:56.540981+08:00","gmt_modified":"2026-06-30T18:39:56.540981+08:00"},{"id":3432,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"4e817a7f3bd90bb9e57c6a2e9009380f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/otaTargetDevice.js#1-57","gmt_create":"2026-06-30T18:39:56.541105+08:00","gmt_modified":"2026-06-30T18:39:56.541105+08:00"},{"id":3433,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"20e79ab592f63eb9d23c0d563d5f5202","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/blacklist.js#16-71","gmt_create":"2026-06-30T18:39:56.541459+08:00","gmt_modified":"2026-06-30T18:39:56.541459+08:00"},{"id":3434,"source_id":"71a563f23b46da0255a6400402bbfa05","target_id":"20e79ab592f63eb9d23c0d563d5f5202","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 16-71","gmt_create":"2026-06-30T18:39:56.541542+08:00","gmt_modified":"2026-06-30T18:39:56.541542+08:00"},{"id":3435,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"07afcaa71195b3d86386dcde14973a8d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/blacklist.js#96-131","gmt_create":"2026-06-30T18:39:56.541674+08:00","gmt_modified":"2026-06-30T18:39:56.541674+08:00"},{"id":3436,"source_id":"71a563f23b46da0255a6400402bbfa05","target_id":"07afcaa71195b3d86386dcde14973a8d","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 96-131","gmt_create":"2026-06-30T18:39:56.541757+08:00","gmt_modified":"2026-06-30T18:39:56.541757+08:00"},{"id":3437,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"2a5364613dbf0723f2e2a64affabb065","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/blacklist/index.vue#144-346","gmt_create":"2026-06-30T18:39:56.543701+08:00","gmt_modified":"2026-06-30T18:39:56.543701+08:00"},{"id":3438,"source_id":"0eb021ef791f4679788fe98caea23e31","target_id":"2a5364613dbf0723f2e2a64affabb065","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 144-346","gmt_create":"2026-06-30T18:39:56.54385+08:00","gmt_modified":"2026-06-30T18:39:56.54385+08:00"},{"id":3439,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"12ad7a8b54f39c0717843220f341d59e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/otaTargetDevice.js#16-71","gmt_create":"2026-06-30T18:39:56.544322+08:00","gmt_modified":"2026-06-30T18:39:56.544322+08:00"},{"id":3440,"source_id":"ea6e178b2f0bdcefe2ae8800166453d5","target_id":"12ad7a8b54f39c0717843220f341d59e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 16-71","gmt_create":"2026-06-30T18:39:56.544408+08:00","gmt_modified":"2026-06-30T18:39:56.544408+08:00"},{"id":3441,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"fb9daf52780951bc4b93f14b1fcfa8f1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/otaTargetDevice.js#96-139","gmt_create":"2026-06-30T18:39:56.544514+08:00","gmt_modified":"2026-06-30T18:39:56.544514+08:00"},{"id":3442,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"585261a6626a815d8f5f83b91a086eb9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/ota-target-device/index.vue#144-351","gmt_create":"2026-06-30T18:39:56.544644+08:00","gmt_modified":"2026-06-30T18:39:56.544644+08:00"},{"id":3443,"source_id":"cc4227daf4f2b37377be96fcc492e509","target_id":"585261a6626a815d8f5f83b91a086eb9","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 144-351","gmt_create":"2026-06-30T18:39:56.54475+08:00","gmt_modified":"2026-06-30T18:39:56.54475+08:00"},{"id":3444,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"e6564dcd4fbbe8e0f9673967ec4ce3a7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/package.json","gmt_create":"2026-06-30T18:39:56.545256+08:00","gmt_modified":"2026-06-30T18:39:56.545256+08:00"},{"id":3445,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"2a0437737a8daf4655f00caae7549a06","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/package.json#11-24","gmt_create":"2026-06-30T18:39:56.545352+08:00","gmt_modified":"2026-06-30T18:39:56.545352+08:00"},{"id":3446,"source_id":"e6564dcd4fbbe8e0f9673967ec4ce3a7","target_id":"2a0437737a8daf4655f00caae7549a06","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 11-24","gmt_create":"2026-06-30T18:39:56.545472+08:00","gmt_modified":"2026-06-30T18:39:56.545472+08:00"},{"id":3447,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"f0cfbce84fd69ea625e215367d5da707","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/package.json#1-29","gmt_create":"2026-06-30T18:39:56.545601+08:00","gmt_modified":"2026-06-30T18:39:56.545601+08:00"},{"id":3448,"source_id":"e6564dcd4fbbe8e0f9673967ec4ce3a7","target_id":"f0cfbce84fd69ea625e215367d5da707","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-29","gmt_create":"2026-06-30T18:39:56.545688+08:00","gmt_modified":"2026-06-30T18:39:56.545688+08:00"},{"id":3449,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"af76fcd4277eeb577f573e21de923bbf","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/config/env.js#1-13","gmt_create":"2026-06-30T18:39:56.545882+08:00","gmt_modified":"2026-06-30T18:39:56.545882+08:00"},{"id":3450,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"fad5c52b0517044faace96133c6e570c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/ota.js#174-181","gmt_create":"2026-06-30T18:39:56.546044+08:00","gmt_modified":"2026-06-30T18:39:56.546044+08:00"},{"id":3451,"source_id":"ba84445ce5118798ce7d0da4ecb4d5e2","target_id":"fad5c52b0517044faace96133c6e570c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 174-181","gmt_create":"2026-06-30T18:39:56.546129+08:00","gmt_modified":"2026-06-30T18:39:56.546129+08:00"},{"id":3452,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"f62834891fb8675fbb1dcb6654b186e9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/otaStorage.js#95-98","gmt_create":"2026-06-30T18:39:56.546273+08:00","gmt_modified":"2026-06-30T18:39:56.546273+08:00"},{"id":3453,"source_id":"a15b46bcf0be7bfbc82e57adca5be630","target_id":"f62834891fb8675fbb1dcb6654b186e9","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 95-98","gmt_create":"2026-06-30T18:39:56.546352+08:00","gmt_modified":"2026-06-30T18:39:56.546353+08:00"},{"id":3454,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"0c387969b601239a31cb0c672ef3c116","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/blacklist.js#108-112","gmt_create":"2026-06-30T18:39:56.546458+08:00","gmt_modified":"2026-06-30T18:39:56.546458+08:00"},{"id":3455,"source_id":"71a563f23b46da0255a6400402bbfa05","target_id":"0c387969b601239a31cb0c672ef3c116","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 108-112","gmt_create":"2026-06-30T18:39:56.546538+08:00","gmt_modified":"2026-06-30T18:39:56.546538+08:00"},{"id":3456,"source_id":"da7627b0-17b7-42c7-a029-e357bc889416","target_id":"406e308cbdb4112d67f61a82a8118e9f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/otaTargetDevice.js#108-112","gmt_create":"2026-06-30T18:39:56.546662+08:00","gmt_modified":"2026-06-30T18:39:56.546662+08:00"},{"id":3457,"source_id":"ea6e178b2f0bdcefe2ae8800166453d5","target_id":"406e308cbdb4112d67f61a82a8118e9f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 108-112","gmt_create":"2026-06-30T18:39:56.546751+08:00","gmt_modified":"2026-06-30T18:39:56.546751+08:00"},{"id":3458,"source_id":"d4cb0c3c-97e9-449f-8918-f1c01e7e3561","target_id":"da7627b0-17b7-42c7-a029-e357bc889416","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: d4cb0c3c-97e9-449f-8918-f1c01e7e3561 -\u003e da7627b0-17b7-42c7-a029-e357bc889416","gmt_create":"2026-06-30T18:39:57.127914+08:00","gmt_modified":"2026-06-30T18:39:57.127915+08:00"},{"id":3459,"source_id":"f0978b42-6f98-470e-922f-22dec2fac24d","target_id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: f0978b42-6f98-470e-922f-22dec2fac24d -\u003e 7d8f2ef6-290d-4952-b59c-a1d95af0d438","gmt_create":"2026-06-30T18:39:57.129556+08:00","gmt_modified":"2026-06-30T18:39:57.129556+08:00"},{"id":3460,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"de74851040d304248e26c1db406458af","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/routes/models.js","gmt_create":"2026-07-01T17:22:10.356569+08:00","gmt_modified":"2026-07-01T17:22:10.356569+08:00"},{"id":3461,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"387b55f69fa15c066ce97e930d49fca8","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/models/Model.js","gmt_create":"2026-07-01T17:22:10.357791+08:00","gmt_modified":"2026-07-01T17:22:10.357791+08:00"},{"id":3462,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"d82c987a9b76c3f9e87e628925cae2d7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/validators/model.js","gmt_create":"2026-07-01T17:22:10.358273+08:00","gmt_modified":"2026-07-01T17:22:10.358273+08:00"},{"id":3463,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"30f836e18a6bf9cbcf650e5884375a93","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/utils/response.js","gmt_create":"2026-07-01T17:22:10.358447+08:00","gmt_modified":"2026-07-01T17:22:10.358447+08:00"},{"id":3464,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"c22be0eccf069bf7f87f09ef49070f8d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/middleware/auth.js","gmt_create":"2026-07-01T17:22:10.35865+08:00","gmt_modified":"2026-07-01T17:22:10.35865+08:00"},{"id":3465,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"2d86c0a8ef372bffb82991d44412c989","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/api/model.js","gmt_create":"2026-07-01T17:22:10.358974+08:00","gmt_modified":"2026-07-01T17:22:10.358974+08:00"},{"id":3466,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"fc2d0cc85e5f2565c3105cbe0584903a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/models/Ota.js","gmt_create":"2026-07-01T17:22:10.359263+08:00","gmt_modified":"2026-07-01T17:22:10.359263+08:00"},{"id":3467,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"ba84445ce5118798ce7d0da4ecb4d5e2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/routes/ota.js","gmt_create":"2026-07-01T17:22:10.359529+08:00","gmt_modified":"2026-07-01T17:22:10.359529+08:00"},{"id":3468,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"d5e6b65d89b66c08d62b4c6fc5812f22","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/services/squiglink.js","gmt_create":"2026-07-01T17:22:10.359671+08:00","gmt_modified":"2026-07-01T17:22:10.359671+08:00"},{"id":3469,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"0d51eea570b0976e572f9c35721fa5e6","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/views/model/components/ModelFormDialog.vue","gmt_create":"2026-07-01T17:22:10.3599+08:00","gmt_modified":"2026-07-01T17:22:10.3599+08:00"},{"id":3470,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"5d1069f11e2153ac8cd75f26c10256a2","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#1-659","gmt_create":"2026-07-01T17:22:10.360738+08:00","gmt_modified":"2026-07-01T17:22:10.360738+08:00"},{"id":3471,"source_id":"de74851040d304248e26c1db406458af","target_id":"5d1069f11e2153ac8cd75f26c10256a2","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-659","gmt_create":"2026-07-01T17:22:10.360873+08:00","gmt_modified":"2026-07-01T17:22:10.360873+08:00"},{"id":3472,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"024c49b177309c95a9a6487c0c70ff28","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/Model.js#1-53","gmt_create":"2026-07-01T17:22:10.361471+08:00","gmt_modified":"2026-07-01T17:22:10.361471+08:00"},{"id":3473,"source_id":"387b55f69fa15c066ce97e930d49fca8","target_id":"024c49b177309c95a9a6487c0c70ff28","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-53","gmt_create":"2026-07-01T17:22:10.361729+08:00","gmt_modified":"2026-07-01T17:22:10.361729+08:00"},{"id":3474,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"ed0beaf535b1c935f72da53c93cefd99","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/validators/model.js#1-22","gmt_create":"2026-07-01T17:22:10.362028+08:00","gmt_modified":"2026-07-01T17:22:10.362028+08:00"},{"id":3475,"source_id":"d82c987a9b76c3f9e87e628925cae2d7","target_id":"ed0beaf535b1c935f72da53c93cefd99","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-22","gmt_create":"2026-07-01T17:22:10.362339+08:00","gmt_modified":"2026-07-01T17:22:10.362339+08:00"},{"id":3476,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"e3a6003c52bf8b8487bb1b8709da6b4b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/utils/response.js#1-25","gmt_create":"2026-07-01T17:22:10.362969+08:00","gmt_modified":"2026-07-01T17:22:10.362969+08:00"},{"id":3477,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"b4d5cb8d79f05ea0bc1f56f20380f226","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/middleware/auth.js#1-36","gmt_create":"2026-07-01T17:22:10.363176+08:00","gmt_modified":"2026-07-01T17:22:10.363176+08:00"},{"id":3478,"source_id":"c22be0eccf069bf7f87f09ef49070f8d","target_id":"b4d5cb8d79f05ea0bc1f56f20380f226","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-36","gmt_create":"2026-07-01T17:22:10.363485+08:00","gmt_modified":"2026-07-01T17:22:10.363485+08:00"},{"id":3479,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"d71cf669f581f1e2e6b7956768cf07e5","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/model.js#1-165","gmt_create":"2026-07-01T17:22:10.363773+08:00","gmt_modified":"2026-07-01T17:22:10.363773+08:00"},{"id":3480,"source_id":"2d86c0a8ef372bffb82991d44412c989","target_id":"d71cf669f581f1e2e6b7956768cf07e5","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-165","gmt_create":"2026-07-01T17:22:10.363919+08:00","gmt_modified":"2026-07-01T17:22:10.363919+08:00"},{"id":3481,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"b7c66d1bc7887a6132dc3acbf6421a5d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/Ota.js#1-97","gmt_create":"2026-07-01T17:22:10.364292+08:00","gmt_modified":"2026-07-01T17:22:10.364292+08:00"},{"id":3482,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"2f44ab11354520681821b18c70b28ea5","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/squiglink.js#1-322","gmt_create":"2026-07-01T17:22:10.364488+08:00","gmt_modified":"2026-07-01T17:22:10.364488+08:00"},{"id":3483,"source_id":"d5e6b65d89b66c08d62b4c6fc5812f22","target_id":"2f44ab11354520681821b18c70b28ea5","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-322","gmt_create":"2026-07-01T17:22:10.364603+08:00","gmt_modified":"2026-07-01T17:22:10.364603+08:00"},{"id":3484,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"dfde97c120aa759be08496d7a1217bb5","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/components/ModelFormDialog.vue#1-555","gmt_create":"2026-07-01T17:22:10.364775+08:00","gmt_modified":"2026-07-01T17:22:10.364775+08:00"},{"id":3485,"source_id":"0d51eea570b0976e572f9c35721fa5e6","target_id":"dfde97c120aa759be08496d7a1217bb5","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-555","gmt_create":"2026-07-01T17:22:10.364915+08:00","gmt_modified":"2026-07-01T17:22:10.364915+08:00"},{"id":3486,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"8ff91c81b391966d61e25fb150388eda","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#133-181","gmt_create":"2026-07-01T17:22:10.366249+08:00","gmt_modified":"2026-07-01T17:22:10.366249+08:00"},{"id":3487,"source_id":"de74851040d304248e26c1db406458af","target_id":"8ff91c81b391966d61e25fb150388eda","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 133-181","gmt_create":"2026-07-01T17:22:10.366406+08:00","gmt_modified":"2026-07-01T17:22:10.366406+08:00"},{"id":3488,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"f84073b86f81ac8811492a2bdf880f16","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/Model.js#4-50","gmt_create":"2026-07-01T17:22:10.366583+08:00","gmt_modified":"2026-07-01T17:22:10.366583+08:00"},{"id":3489,"source_id":"387b55f69fa15c066ce97e930d49fca8","target_id":"f84073b86f81ac8811492a2bdf880f16","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 4-50","gmt_create":"2026-07-01T17:22:10.3667+08:00","gmt_modified":"2026-07-01T17:22:10.3667+08:00"},{"id":3490,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"9e84158ca8a0ddb6b5e5b73eb1bbe846","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/validators/model.js#3-19","gmt_create":"2026-07-01T17:22:10.366902+08:00","gmt_modified":"2026-07-01T17:22:10.366902+08:00"},{"id":3491,"source_id":"d82c987a9b76c3f9e87e628925cae2d7","target_id":"9e84158ca8a0ddb6b5e5b73eb1bbe846","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 3-19","gmt_create":"2026-07-01T17:22:10.367214+08:00","gmt_modified":"2026-07-01T17:22:10.367214+08:00"},{"id":3492,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"5a517afeab7c85f15e321f8de509c92e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/middleware/auth.js#3-26","gmt_create":"2026-07-01T17:22:10.367472+08:00","gmt_modified":"2026-07-01T17:22:10.367472+08:00"},{"id":3493,"source_id":"c22be0eccf069bf7f87f09ef49070f8d","target_id":"5a517afeab7c85f15e321f8de509c92e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 3-26","gmt_create":"2026-07-01T17:22:10.367609+08:00","gmt_modified":"2026-07-01T17:22:10.367609+08:00"},{"id":3494,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"61cdcff725a5d9f851c84d3976b11ad9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/model.js#13-165","gmt_create":"2026-07-01T17:22:10.367902+08:00","gmt_modified":"2026-07-01T17:22:10.367902+08:00"},{"id":3495,"source_id":"2d86c0a8ef372bffb82991d44412c989","target_id":"61cdcff725a5d9f851c84d3976b11ad9","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 13-165","gmt_create":"2026-07-01T17:22:10.368179+08:00","gmt_modified":"2026-07-01T17:22:10.368179+08:00"},{"id":3496,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"242fa36bc833a990fae50c7bb09ed4e1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/components/ModelFormDialog.vue#158-464","gmt_create":"2026-07-01T17:22:10.368329+08:00","gmt_modified":"2026-07-01T17:22:10.368329+08:00"},{"id":3497,"source_id":"0d51eea570b0976e572f9c35721fa5e6","target_id":"242fa36bc833a990fae50c7bb09ed4e1","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 158-464","gmt_create":"2026-07-01T17:22:10.368465+08:00","gmt_modified":"2026-07-01T17:22:10.368465+08:00"},{"id":3498,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"198c9bc987125a8c495d5f4f4c719320","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#307-369","gmt_create":"2026-07-01T17:22:10.368628+08:00","gmt_modified":"2026-07-01T17:22:10.368628+08:00"},{"id":3499,"source_id":"de74851040d304248e26c1db406458af","target_id":"198c9bc987125a8c495d5f4f4c719320","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 307-369","gmt_create":"2026-07-01T17:22:10.368924+08:00","gmt_modified":"2026-07-01T17:22:10.368924+08:00"},{"id":3500,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"00a6cc74394f2292cdbdb135e0050bfd","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/squiglink.js#261-310","gmt_create":"2026-07-01T17:22:10.369249+08:00","gmt_modified":"2026-07-01T17:22:10.369249+08:00"},{"id":3501,"source_id":"d5e6b65d89b66c08d62b4c6fc5812f22","target_id":"00a6cc74394f2292cdbdb135e0050bfd","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 261-310","gmt_create":"2026-07-01T17:22:10.369407+08:00","gmt_modified":"2026-07-01T17:22:10.369407+08:00"},{"id":3502,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"cbc5a1c920943391c4b4c7dbb4969e02","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#280-304","gmt_create":"2026-07-01T17:22:10.370662+08:00","gmt_modified":"2026-07-01T17:22:10.370662+08:00"},{"id":3503,"source_id":"de74851040d304248e26c1db406458af","target_id":"cbc5a1c920943391c4b4c7dbb4969e02","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 280-304","gmt_create":"2026-07-01T17:22:10.370832+08:00","gmt_modified":"2026-07-01T17:22:10.370832+08:00"},{"id":3504,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"0e96d580b4b0d85ad3a0856f9ced77c5","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#371-437","gmt_create":"2026-07-01T17:22:10.371205+08:00","gmt_modified":"2026-07-01T17:22:10.371205+08:00"},{"id":3505,"source_id":"de74851040d304248e26c1db406458af","target_id":"0e96d580b4b0d85ad3a0856f9ced77c5","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 371-437","gmt_create":"2026-07-01T17:22:10.371375+08:00","gmt_modified":"2026-07-01T17:22:10.371375+08:00"},{"id":3506,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"64d9a6b9e0dbb15b4433b936b9d9b682","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/validators/model.js#3-10","gmt_create":"2026-07-01T17:22:10.371516+08:00","gmt_modified":"2026-07-01T17:22:10.371516+08:00"},{"id":3507,"source_id":"d82c987a9b76c3f9e87e628925cae2d7","target_id":"64d9a6b9e0dbb15b4433b936b9d9b682","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 3-10","gmt_create":"2026-07-01T17:22:10.371643+08:00","gmt_modified":"2026-07-01T17:22:10.371643+08:00"},{"id":3508,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"534ccf5ed9895fd2357c6072d2c32641","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#439-526","gmt_create":"2026-07-01T17:22:10.372013+08:00","gmt_modified":"2026-07-01T17:22:10.372013+08:00"},{"id":3509,"source_id":"de74851040d304248e26c1db406458af","target_id":"534ccf5ed9895fd2357c6072d2c32641","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 439-526","gmt_create":"2026-07-01T17:22:10.37231+08:00","gmt_modified":"2026-07-01T17:22:10.37231+08:00"},{"id":3510,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"1403db1a8eb57f752df3491c038670b7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/validators/model.js#12-19","gmt_create":"2026-07-01T17:22:10.372589+08:00","gmt_modified":"2026-07-01T17:22:10.372589+08:00"},{"id":3511,"source_id":"d82c987a9b76c3f9e87e628925cae2d7","target_id":"1403db1a8eb57f752df3491c038670b7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 12-19","gmt_create":"2026-07-01T17:22:10.37272+08:00","gmt_modified":"2026-07-01T17:22:10.37272+08:00"},{"id":3512,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"e19c5be696ebceb651e9886682335c3f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#528-554","gmt_create":"2026-07-01T17:22:10.373047+08:00","gmt_modified":"2026-07-01T17:22:10.373048+08:00"},{"id":3513,"source_id":"de74851040d304248e26c1db406458af","target_id":"e19c5be696ebceb651e9886682335c3f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 528-554","gmt_create":"2026-07-01T17:22:10.373219+08:00","gmt_modified":"2026-07-01T17:22:10.373219+08:00"},{"id":3514,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"fd1c352115895c20befbd57b21dafffd","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#136-157","gmt_create":"2026-07-01T17:22:10.37353+08:00","gmt_modified":"2026-07-01T17:22:10.37353+08:00"},{"id":3515,"source_id":"de74851040d304248e26c1db406458af","target_id":"fd1c352115895c20befbd57b21dafffd","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 136-157","gmt_create":"2026-07-01T17:22:10.373649+08:00","gmt_modified":"2026-07-01T17:22:10.373649+08:00"},{"id":3516,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"a4a868fe5625e468464edb2a81e0ed65","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/Ota.js#44-48","gmt_create":"2026-07-01T17:22:10.373847+08:00","gmt_modified":"2026-07-01T17:22:10.373847+08:00"},{"id":3517,"source_id":"fc2d0cc85e5f2565c3105cbe0584903a","target_id":"a4a868fe5625e468464edb2a81e0ed65","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 44-48","gmt_create":"2026-07-01T17:22:10.373943+08:00","gmt_modified":"2026-07-01T17:22:10.373943+08:00"},{"id":3518,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"9bfda1a77caaecb96fe646e1a5c4e657","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#556-656","gmt_create":"2026-07-01T17:22:10.374341+08:00","gmt_modified":"2026-07-01T17:22:10.374341+08:00"},{"id":3519,"source_id":"de74851040d304248e26c1db406458af","target_id":"9bfda1a77caaecb96fe646e1a5c4e657","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 556-656","gmt_create":"2026-07-01T17:22:10.374511+08:00","gmt_modified":"2026-07-01T17:22:10.374511+08:00"},{"id":3520,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"d204119d78e9a20507f2e6eb59c81b14","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#246-278","gmt_create":"2026-07-01T17:22:10.374726+08:00","gmt_modified":"2026-07-01T17:22:10.374726+08:00"},{"id":3521,"source_id":"de74851040d304248e26c1db406458af","target_id":"d204119d78e9a20507f2e6eb59c81b14","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 246-278","gmt_create":"2026-07-01T17:22:10.374817+08:00","gmt_modified":"2026-07-01T17:22:10.374817+08:00"},{"id":3522,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"6e56ed4dbe173e0e7ce80c50d006cb83","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#183-244","gmt_create":"2026-07-01T17:22:10.374964+08:00","gmt_modified":"2026-07-01T17:22:10.374964+08:00"},{"id":3523,"source_id":"de74851040d304248e26c1db406458af","target_id":"6e56ed4dbe173e0e7ce80c50d006cb83","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 183-244","gmt_create":"2026-07-01T17:22:10.375214+08:00","gmt_modified":"2026-07-01T17:22:10.375214+08:00"},{"id":3524,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"12f724b0903cc7296821075f94c9dea7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#314-317","gmt_create":"2026-07-01T17:22:10.376298+08:00","gmt_modified":"2026-07-01T17:22:10.376298+08:00"},{"id":3525,"source_id":"de74851040d304248e26c1db406458af","target_id":"12f724b0903cc7296821075f94c9dea7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 314-317","gmt_create":"2026-07-01T17:22:10.376414+08:00","gmt_modified":"2026-07-01T17:22:10.376414+08:00"},{"id":3526,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"07839d356726d441504dc3560722db44","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#322-325","gmt_create":"2026-07-01T17:22:10.376564+08:00","gmt_modified":"2026-07-01T17:22:10.376564+08:00"},{"id":3527,"source_id":"de74851040d304248e26c1db406458af","target_id":"07839d356726d441504dc3560722db44","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 322-325","gmt_create":"2026-07-01T17:22:10.376762+08:00","gmt_modified":"2026-07-01T17:22:10.376762+08:00"},{"id":3528,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"0dbf7e568890732ca55dfc5752a318a6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#450-455","gmt_create":"2026-07-01T17:22:10.376912+08:00","gmt_modified":"2026-07-01T17:22:10.376912+08:00"},{"id":3529,"source_id":"de74851040d304248e26c1db406458af","target_id":"0dbf7e568890732ca55dfc5752a318a6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 450-455","gmt_create":"2026-07-01T17:22:10.377006+08:00","gmt_modified":"2026-07-01T17:22:10.377006+08:00"},{"id":3530,"source_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","target_id":"81ee91090f768174f1659cd02a399b89","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/squiglink.js#33-47","gmt_create":"2026-07-01T17:22:10.388128+08:00","gmt_modified":"2026-07-01T17:22:10.388128+08:00"},{"id":3531,"source_id":"d5e6b65d89b66c08d62b4c6fc5812f22","target_id":"81ee91090f768174f1659cd02a399b89","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 33-47","gmt_create":"2026-07-01T17:22:10.388552+08:00","gmt_modified":"2026-07-01T17:22:10.388552+08:00"},{"id":3532,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"d2ea644c6ce017e7fa5719f8dc3b2162","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/views/model/index.vue","gmt_create":"2026-07-01T17:22:40.385335+08:00","gmt_modified":"2026-07-01T17:22:40.385335+08:00"},{"id":3533,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"d1931152858f662828e1f616637bf7c1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/views/model/composables/useModelList.js","gmt_create":"2026-07-01T17:22:40.385759+08:00","gmt_modified":"2026-07-01T17:22:40.385759+08:00"},{"id":3534,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"0d51eea570b0976e572f9c35721fa5e6","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/views/model/components/ModelFormDialog.vue","gmt_create":"2026-07-01T17:22:40.385927+08:00","gmt_modified":"2026-07-01T17:22:40.385927+08:00"},{"id":3535,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"3a38f5cb99e9c74ac72f7fdb85a68c44","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/views/model/components/CsvViewerDialog.vue","gmt_create":"2026-07-01T17:22:40.386094+08:00","gmt_modified":"2026-07-01T17:22:40.386094+08:00"},{"id":3536,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"e7043a827f136d1ac2e5dbd1d328712c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/views/model/components/EqCacheDialog.vue","gmt_create":"2026-07-01T17:22:40.386223+08:00","gmt_modified":"2026-07-01T17:22:40.386223+08:00"},{"id":3537,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"f05f0f2d2810725d79b63a122d02f104","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/views/model/components/PushProgressDialog.vue","gmt_create":"2026-07-01T17:22:40.386425+08:00","gmt_modified":"2026-07-01T17:22:40.386425+08:00"},{"id":3538,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"8d94303e4c3a8e363f3ac76cf489cd33","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/views/model/components/PushViewDialog.vue","gmt_create":"2026-07-01T17:22:40.386539+08:00","gmt_modified":"2026-07-01T17:22:40.386539+08:00"},{"id":3539,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"2d86c0a8ef372bffb82991d44412c989","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/api/model.js","gmt_create":"2026-07-01T17:22:40.386974+08:00","gmt_modified":"2026-07-01T17:22:40.386974+08:00"},{"id":3540,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"de74851040d304248e26c1db406458af","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/routes/models.js","gmt_create":"2026-07-01T17:22:40.38752+08:00","gmt_modified":"2026-07-01T17:22:40.387521+08:00"},{"id":3541,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"387b55f69fa15c066ce97e930d49fca8","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/models/Model.js","gmt_create":"2026-07-01T17:22:40.387747+08:00","gmt_modified":"2026-07-01T17:22:40.387747+08:00"},{"id":3542,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"d82c987a9b76c3f9e87e628925cae2d7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/validators/model.js","gmt_create":"2026-07-01T17:22:40.387861+08:00","gmt_modified":"2026-07-01T17:22:40.387861+08:00"},{"id":3543,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"3c92914c0d677b2f5ce5e244c4057020","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/api/brand.js","gmt_create":"2026-07-01T17:22:40.387963+08:00","gmt_modified":"2026-07-01T17:22:40.387963+08:00"},{"id":3544,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"8888802098bf9d46f77f4bb95811e62a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/models/Brand.js","gmt_create":"2026-07-01T17:22:40.388066+08:00","gmt_modified":"2026-07-01T17:22:40.388066+08:00"},{"id":3545,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"8d10949b317a4f03e8624b7f4ce46d77","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/routes/brands.js","gmt_create":"2026-07-01T17:22:40.388205+08:00","gmt_modified":"2026-07-01T17:22:40.388205+08:00"},{"id":3546,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"16acd73277fffb69b4ee4eee82fe6b9e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/services/measurementStorage.js","gmt_create":"2026-07-01T17:22:40.388548+08:00","gmt_modified":"2026-07-01T17:22:40.388548+08:00"},{"id":3547,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"27717884cd8566480cffa4947e7fa6c5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/services/eqCacheStorage.js","gmt_create":"2026-07-01T17:22:40.388785+08:00","gmt_modified":"2026-07-01T17:22:40.388785+08:00"},{"id":3548,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"d5e6b65d89b66c08d62b4c6fc5812f22","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/services/squiglink.js","gmt_create":"2026-07-01T17:22:40.389298+08:00","gmt_modified":"2026-07-01T17:22:40.389298+08:00"},{"id":3549,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"34fcf7aeb55a9c0224c554fc48545063","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/utils/request.js","gmt_create":"2026-07-01T17:22:40.389544+08:00","gmt_modified":"2026-07-01T17:22:40.389544+08:00"},{"id":3550,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"08b8d17e3c09b326687a7bca6789507a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/router/index.js","gmt_create":"2026-07-01T17:22:40.389645+08:00","gmt_modified":"2026-07-01T17:22:40.389645+08:00"},{"id":3551,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"09fd0e7623c9b52e7f95307aba3cdebf","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/index.vue#1-533","gmt_create":"2026-07-01T17:22:40.389778+08:00","gmt_modified":"2026-07-01T17:22:40.389778+08:00"},{"id":3552,"source_id":"d2ea644c6ce017e7fa5719f8dc3b2162","target_id":"09fd0e7623c9b52e7f95307aba3cdebf","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-533","gmt_create":"2026-07-01T17:22:40.389914+08:00","gmt_modified":"2026-07-01T17:22:40.389914+08:00"},{"id":3553,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"b336306edfffe78cac04ddcd9b87bee3","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/composables/useModelList.js#1-191","gmt_create":"2026-07-01T17:22:40.390089+08:00","gmt_modified":"2026-07-01T17:22:40.390089+08:00"},{"id":3554,"source_id":"d1931152858f662828e1f616637bf7c1","target_id":"b336306edfffe78cac04ddcd9b87bee3","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-191","gmt_create":"2026-07-01T17:22:40.390417+08:00","gmt_modified":"2026-07-01T17:22:40.390417+08:00"},{"id":3555,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"dfde97c120aa759be08496d7a1217bb5","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/components/ModelFormDialog.vue#1-555","gmt_create":"2026-07-01T17:22:40.390765+08:00","gmt_modified":"2026-07-01T17:22:40.390765+08:00"},{"id":3556,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"bd284e26c3e22bbca32421b5f77648ef","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/components/CsvViewerDialog.vue#1-50","gmt_create":"2026-07-01T17:22:40.391298+08:00","gmt_modified":"2026-07-01T17:22:40.391298+08:00"},{"id":3557,"source_id":"3a38f5cb99e9c74ac72f7fdb85a68c44","target_id":"bd284e26c3e22bbca32421b5f77648ef","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-50","gmt_create":"2026-07-01T17:22:40.391417+08:00","gmt_modified":"2026-07-01T17:22:40.391417+08:00"},{"id":3558,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"2046b9f43ac9963df7a7ca533f925569","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/components/EqCacheDialog.vue#1-306","gmt_create":"2026-07-01T17:22:40.391729+08:00","gmt_modified":"2026-07-01T17:22:40.391729+08:00"},{"id":3559,"source_id":"e7043a827f136d1ac2e5dbd1d328712c","target_id":"2046b9f43ac9963df7a7ca533f925569","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-306","gmt_create":"2026-07-01T17:22:40.391979+08:00","gmt_modified":"2026-07-01T17:22:40.391979+08:00"},{"id":3560,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"779a4d88246e9e5a241ae01c15f899ab","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/components/PushProgressDialog.vue#1-303","gmt_create":"2026-07-01T17:22:40.392263+08:00","gmt_modified":"2026-07-01T17:22:40.392263+08:00"},{"id":3561,"source_id":"f05f0f2d2810725d79b63a122d02f104","target_id":"779a4d88246e9e5a241ae01c15f899ab","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-303","gmt_create":"2026-07-01T17:22:40.392369+08:00","gmt_modified":"2026-07-01T17:22:40.392369+08:00"},{"id":3562,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"bbf439d580ed3a878deb4fd7de944a94","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/components/PushViewDialog.vue#1-60","gmt_create":"2026-07-01T17:22:40.392841+08:00","gmt_modified":"2026-07-01T17:22:40.392841+08:00"},{"id":3563,"source_id":"8d94303e4c3a8e363f3ac76cf489cd33","target_id":"bbf439d580ed3a878deb4fd7de944a94","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-60","gmt_create":"2026-07-01T17:22:40.393141+08:00","gmt_modified":"2026-07-01T17:22:40.393141+08:00"},{"id":3564,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"5d1069f11e2153ac8cd75f26c10256a2","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#1-659","gmt_create":"2026-07-01T17:22:40.393992+08:00","gmt_modified":"2026-07-01T17:22:40.393992+08:00"},{"id":3565,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"d71cf669f581f1e2e6b7956768cf07e5","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/model.js#1-165","gmt_create":"2026-07-01T17:22:40.394888+08:00","gmt_modified":"2026-07-01T17:22:40.394888+08:00"},{"id":3566,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"fc4fba8eb72f3b41fef570b38f6dfefe","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/index.vue#227-434","gmt_create":"2026-07-01T17:22:40.395297+08:00","gmt_modified":"2026-07-01T17:22:40.395297+08:00"},{"id":3567,"source_id":"d2ea644c6ce017e7fa5719f8dc3b2162","target_id":"fc4fba8eb72f3b41fef570b38f6dfefe","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 227-434","gmt_create":"2026-07-01T17:22:40.395672+08:00","gmt_modified":"2026-07-01T17:22:40.395672+08:00"},{"id":3568,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"c0a672fcaa00c517fd9ea3d997173397","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/composables/useModelList.js#31-191","gmt_create":"2026-07-01T17:22:40.395794+08:00","gmt_modified":"2026-07-01T17:22:40.395794+08:00"},{"id":3569,"source_id":"d1931152858f662828e1f616637bf7c1","target_id":"c0a672fcaa00c517fd9ea3d997173397","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 31-191","gmt_create":"2026-07-01T17:22:40.39607+08:00","gmt_modified":"2026-07-01T17:22:40.39607+08:00"},{"id":3570,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"242fa36bc833a990fae50c7bb09ed4e1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/components/ModelFormDialog.vue#158-464","gmt_create":"2026-07-01T17:22:40.396418+08:00","gmt_modified":"2026-07-01T17:22:40.396418+08:00"},{"id":3571,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"d16b984e320d42203d368669cfe2382b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/model.js#157-165","gmt_create":"2026-07-01T17:22:40.396679+08:00","gmt_modified":"2026-07-01T17:22:40.396679+08:00"},{"id":3572,"source_id":"2d86c0a8ef372bffb82991d44412c989","target_id":"d16b984e320d42203d368669cfe2382b","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 157-165","gmt_create":"2026-07-01T17:22:40.396783+08:00","gmt_modified":"2026-07-01T17:22:40.396783+08:00"},{"id":3573,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"198c9bc987125a8c495d5f4f4c719320","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#307-369","gmt_create":"2026-07-01T17:22:40.397452+08:00","gmt_modified":"2026-07-01T17:22:40.397452+08:00"},{"id":3574,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"00a6cc74394f2292cdbdb135e0050bfd","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/squiglink.js#261-310","gmt_create":"2026-07-01T17:22:40.39795+08:00","gmt_modified":"2026-07-01T17:22:40.39795+08:00"},{"id":3575,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"c6701de4962c3a2734181c3f0e1b78f6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#307-499","gmt_create":"2026-07-01T17:22:40.398776+08:00","gmt_modified":"2026-07-01T17:22:40.398776+08:00"},{"id":3576,"source_id":"de74851040d304248e26c1db406458af","target_id":"c6701de4962c3a2734181c3f0e1b78f6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 307-499","gmt_create":"2026-07-01T17:22:40.399152+08:00","gmt_modified":"2026-07-01T17:22:40.399152+08:00"},{"id":3577,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"024c49b177309c95a9a6487c0c70ff28","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/Model.js#1-53","gmt_create":"2026-07-01T17:22:40.399981+08:00","gmt_modified":"2026-07-01T17:22:40.399981+08:00"},{"id":3578,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"ed0beaf535b1c935f72da53c93cefd99","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/validators/model.js#1-22","gmt_create":"2026-07-01T17:22:40.40069+08:00","gmt_modified":"2026-07-01T17:22:40.40069+08:00"},{"id":3579,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"47737e52532225879b5095908c4b0039","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/components/ModelFormDialog.vue#196-214","gmt_create":"2026-07-01T17:22:40.401185+08:00","gmt_modified":"2026-07-01T17:22:40.401185+08:00"},{"id":3580,"source_id":"0d51eea570b0976e572f9c35721fa5e6","target_id":"47737e52532225879b5095908c4b0039","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 196-214","gmt_create":"2026-07-01T17:22:40.401371+08:00","gmt_modified":"2026-07-01T17:22:40.401371+08:00"},{"id":3581,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"1a50c2ac7c5e4e096904af2e683b5ec7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/Brand.js#1-23","gmt_create":"2026-07-01T17:22:40.401956+08:00","gmt_modified":"2026-07-01T17:22:40.401956+08:00"},{"id":3582,"source_id":"8888802098bf9d46f77f4bb95811e62a","target_id":"1a50c2ac7c5e4e096904af2e683b5ec7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-23","gmt_create":"2026-07-01T17:22:40.40216+08:00","gmt_modified":"2026-07-01T17:22:40.40216+08:00"},{"id":3583,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"ae9b4c727fe0313173a4bcea57fef546","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/brands.js#1-147","gmt_create":"2026-07-01T17:22:40.402501+08:00","gmt_modified":"2026-07-01T17:22:40.402501+08:00"},{"id":3584,"source_id":"8d10949b317a4f03e8624b7f4ce46d77","target_id":"ae9b4c727fe0313173a4bcea57fef546","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-147","gmt_create":"2026-07-01T17:22:40.402827+08:00","gmt_modified":"2026-07-01T17:22:40.402827+08:00"},{"id":3585,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"35d43a834ee00c7ae341f64ea7306dcd","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/composables/useModelList.js#18-27","gmt_create":"2026-07-01T17:22:40.403197+08:00","gmt_modified":"2026-07-01T17:22:40.403197+08:00"},{"id":3586,"source_id":"d1931152858f662828e1f616637bf7c1","target_id":"35d43a834ee00c7ae341f64ea7306dcd","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 18-27","gmt_create":"2026-07-01T17:22:40.403296+08:00","gmt_modified":"2026-07-01T17:22:40.403296+08:00"},{"id":3587,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"bab25856d9ae1e6dcc3c9df2c6461ca5","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/composables/useModelList.js#87-111","gmt_create":"2026-07-01T17:22:40.403504+08:00","gmt_modified":"2026-07-01T17:22:40.403504+08:00"},{"id":3588,"source_id":"d1931152858f662828e1f616637bf7c1","target_id":"bab25856d9ae1e6dcc3c9df2c6461ca5","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 87-111","gmt_create":"2026-07-01T17:22:40.403829+08:00","gmt_modified":"2026-07-01T17:22:40.403829+08:00"},{"id":3589,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"8ff91c81b391966d61e25fb150388eda","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#133-181","gmt_create":"2026-07-01T17:22:40.404323+08:00","gmt_modified":"2026-07-01T17:22:40.404323+08:00"},{"id":3590,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"7fdad247ff48969f27ee8d30e3ba5b65","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/index.vue#402-428","gmt_create":"2026-07-01T17:22:40.404857+08:00","gmt_modified":"2026-07-01T17:22:40.404857+08:00"},{"id":3591,"source_id":"d2ea644c6ce017e7fa5719f8dc3b2162","target_id":"7fdad247ff48969f27ee8d30e3ba5b65","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 402-428","gmt_create":"2026-07-01T17:22:40.405211+08:00","gmt_modified":"2026-07-01T17:22:40.405211+08:00"},{"id":3592,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"80992fa9ba0696155e1f48200125fba9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/components/PushProgressDialog.vue#117-195","gmt_create":"2026-07-01T17:22:40.405541+08:00","gmt_modified":"2026-07-01T17:22:40.405541+08:00"},{"id":3593,"source_id":"f05f0f2d2810725d79b63a122d02f104","target_id":"80992fa9ba0696155e1f48200125fba9","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 117-195","gmt_create":"2026-07-01T17:22:40.405642+08:00","gmt_modified":"2026-07-01T17:22:40.405642+08:00"},{"id":3594,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"c72d4a5b5b663d05ac8229b5b4c69991","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/model.js#128-150","gmt_create":"2026-07-01T17:22:40.405988+08:00","gmt_modified":"2026-07-01T17:22:40.405988+08:00"},{"id":3595,"source_id":"2d86c0a8ef372bffb82991d44412c989","target_id":"c72d4a5b5b663d05ac8229b5b4c69991","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 128-150","gmt_create":"2026-07-01T17:22:40.406417+08:00","gmt_modified":"2026-07-01T17:22:40.406417+08:00"},{"id":3596,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"84d41a039a6a9937d7d02c54a5e72751","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#466-566","gmt_create":"2026-07-01T17:22:40.40679+08:00","gmt_modified":"2026-07-01T17:22:40.40679+08:00"},{"id":3597,"source_id":"de74851040d304248e26c1db406458af","target_id":"84d41a039a6a9937d7d02c54a5e72751","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 466-566","gmt_create":"2026-07-01T17:22:40.40701+08:00","gmt_modified":"2026-07-01T17:22:40.40701+08:00"},{"id":3598,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"ddaccee59b978ba3a64b134b57255142","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#59-68","gmt_create":"2026-07-01T17:22:40.407555+08:00","gmt_modified":"2026-07-01T17:22:40.407555+08:00"},{"id":3599,"source_id":"de74851040d304248e26c1db406458af","target_id":"ddaccee59b978ba3a64b134b57255142","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 59-68","gmt_create":"2026-07-01T17:22:40.407904+08:00","gmt_modified":"2026-07-01T17:22:40.407904+08:00"},{"id":3600,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"ddabd54034f5691c635f64015008129b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/measurementStorage.js#48-108","gmt_create":"2026-07-01T17:22:40.408268+08:00","gmt_modified":"2026-07-01T17:22:40.408268+08:00"},{"id":3601,"source_id":"16acd73277fffb69b4ee4eee82fe6b9e","target_id":"ddabd54034f5691c635f64015008129b","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 48-108","gmt_create":"2026-07-01T17:22:40.408456+08:00","gmt_modified":"2026-07-01T17:22:40.408456+08:00"},{"id":3602,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"dfbdd0655d2d61b5105701e421492cb1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/eqCacheStorage.js#24-66","gmt_create":"2026-07-01T17:22:40.408966+08:00","gmt_modified":"2026-07-01T17:22:40.408966+08:00"},{"id":3603,"source_id":"27717884cd8566480cffa4947e7fa6c5","target_id":"dfbdd0655d2d61b5105701e421492cb1","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 24-66","gmt_create":"2026-07-01T17:22:40.40927+08:00","gmt_modified":"2026-07-01T17:22:40.40927+08:00"},{"id":3604,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"f80a45c0052388537b0d6844b2c9e8e3","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/components/ModelFormDialog.vue#233-265","gmt_create":"2026-07-01T17:22:40.40979+08:00","gmt_modified":"2026-07-01T17:22:40.40979+08:00"},{"id":3605,"source_id":"0d51eea570b0976e572f9c35721fa5e6","target_id":"f80a45c0052388537b0d6844b2c9e8e3","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 233-265","gmt_create":"2026-07-01T17:22:40.409975+08:00","gmt_modified":"2026-07-01T17:22:40.409975+08:00"},{"id":3606,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"69c930f997042246d4e17369ede6f826","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/router/index.js#1-91","gmt_create":"2026-07-01T17:22:40.411142+08:00","gmt_modified":"2026-07-01T17:22:40.411142+08:00"},{"id":3607,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"7a5ae98472bdc4806472d50e6b88c997","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/utils/request.js#1-72","gmt_create":"2026-07-01T17:22:40.411424+08:00","gmt_modified":"2026-07-01T17:22:40.411424+08:00"},{"id":3608,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"4f76bc7594c6e53c87d2b21c18e1593a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/squiglink.js#33-48","gmt_create":"2026-07-01T17:22:40.411769+08:00","gmt_modified":"2026-07-01T17:22:40.411769+08:00"},{"id":3609,"source_id":"d5e6b65d89b66c08d62b4c6fc5812f22","target_id":"4f76bc7594c6e53c87d2b21c18e1593a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 33-48","gmt_create":"2026-07-01T17:22:40.412097+08:00","gmt_modified":"2026-07-01T17:22:40.412098+08:00"},{"id":3610,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"dc3af50d3fc111fa0921b37470c23966","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/utils/request.js#27-69","gmt_create":"2026-07-01T17:22:40.412206+08:00","gmt_modified":"2026-07-01T17:22:40.412206+08:00"},{"id":3611,"source_id":"34fcf7aeb55a9c0224c554fc48545063","target_id":"dc3af50d3fc111fa0921b37470c23966","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 27-69","gmt_create":"2026-07-01T17:22:40.412655+08:00","gmt_modified":"2026-07-01T17:22:40.412655+08:00"},{"id":3612,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"ee7461b868a07b5f3e3636d8001b1089","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/brands.js#59-81","gmt_create":"2026-07-01T17:22:40.413041+08:00","gmt_modified":"2026-07-01T17:22:40.413041+08:00"},{"id":3613,"source_id":"8d10949b317a4f03e8624b7f4ce46d77","target_id":"ee7461b868a07b5f3e3636d8001b1089","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 59-81","gmt_create":"2026-07-01T17:22:40.413318+08:00","gmt_modified":"2026-07-01T17:22:40.413318+08:00"},{"id":3614,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"5913b9dcd61bbee07d5a150062d40315","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#371-499","gmt_create":"2026-07-01T17:22:40.413506+08:00","gmt_modified":"2026-07-01T17:22:40.413506+08:00"},{"id":3615,"source_id":"de74851040d304248e26c1db406458af","target_id":"5913b9dcd61bbee07d5a150062d40315","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 371-499","gmt_create":"2026-07-01T17:22:40.413811+08:00","gmt_modified":"2026-07-01T17:22:40.413811+08:00"},{"id":3616,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"d620d05fda07f9cbe1556d0f76a8153f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/measurementStorage.js#87-108","gmt_create":"2026-07-01T17:22:40.413929+08:00","gmt_modified":"2026-07-01T17:22:40.413929+08:00"},{"id":3617,"source_id":"16acd73277fffb69b4ee4eee82fe6b9e","target_id":"d620d05fda07f9cbe1556d0f76a8153f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 87-108","gmt_create":"2026-07-01T17:22:40.414103+08:00","gmt_modified":"2026-07-01T17:22:40.414103+08:00"},{"id":3618,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"f1abdfd8be7fea194c1ce39bf66c78e3","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/eqCacheStorage.js#47-66","gmt_create":"2026-07-01T17:22:40.414385+08:00","gmt_modified":"2026-07-01T17:22:40.414385+08:00"},{"id":3619,"source_id":"27717884cd8566480cffa4947e7fa6c5","target_id":"f1abdfd8be7fea194c1ce39bf66c78e3","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 47-66","gmt_create":"2026-07-01T17:22:40.414561+08:00","gmt_modified":"2026-07-01T17:22:40.414561+08:00"},{"id":3620,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"e87b014e53bbb73ea5bbd7b6fedb1ee0","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/brand.js#1-66","gmt_create":"2026-07-01T17:22:40.414861+08:00","gmt_modified":"2026-07-01T17:22:40.414861+08:00"},{"id":3621,"source_id":"3c92914c0d677b2f5ce5e244c4057020","target_id":"e87b014e53bbb73ea5bbd7b6fedb1ee0","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-66","gmt_create":"2026-07-01T17:22:40.415314+08:00","gmt_modified":"2026-07-01T17:22:40.415314+08:00"},{"id":3622,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"6568412fa665c4b795868c6e9875778f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#133-659","gmt_create":"2026-07-01T17:22:40.415616+08:00","gmt_modified":"2026-07-01T17:22:40.415616+08:00"},{"id":3623,"source_id":"de74851040d304248e26c1db406458af","target_id":"6568412fa665c4b795868c6e9875778f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 133-659","gmt_create":"2026-07-01T17:22:40.415841+08:00","gmt_modified":"2026-07-01T17:22:40.415841+08:00"},{"id":3624,"source_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","target_id":"8012c36338dce0daecc34c940e5fc443","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/brands.js#14-147","gmt_create":"2026-07-01T17:22:40.416042+08:00","gmt_modified":"2026-07-01T17:22:40.416042+08:00"},{"id":3625,"source_id":"8d10949b317a4f03e8624b7f4ce46d77","target_id":"8012c36338dce0daecc34c940e5fc443","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 14-147","gmt_create":"2026-07-01T17:22:40.416211+08:00","gmt_modified":"2026-07-01T17:22:40.416211+08:00"},{"id":3626,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"387b55f69fa15c066ce97e930d49fca8","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/models/Model.js","gmt_create":"2026-07-01T17:22:44.407266+08:00","gmt_modified":"2026-07-01T17:22:44.407266+08:00"},{"id":3627,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"8888802098bf9d46f77f4bb95811e62a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/models/Brand.js","gmt_create":"2026-07-01T17:22:44.407474+08:00","gmt_modified":"2026-07-01T17:22:44.407474+08:00"},{"id":3628,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"d82c987a9b76c3f9e87e628925cae2d7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/validators/model.js","gmt_create":"2026-07-01T17:22:44.407626+08:00","gmt_modified":"2026-07-01T17:22:44.407626+08:00"},{"id":3629,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"de74851040d304248e26c1db406458af","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/routes/models.js","gmt_create":"2026-07-01T17:22:44.407743+08:00","gmt_modified":"2026-07-01T17:22:44.407743+08:00"},{"id":3630,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"d5e6b65d89b66c08d62b4c6fc5812f22","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/services/squiglink.js","gmt_create":"2026-07-01T17:22:44.40785+08:00","gmt_modified":"2026-07-01T17:22:44.40785+08:00"},{"id":3631,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"16acd73277fffb69b4ee4eee82fe6b9e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/services/measurementStorage.js","gmt_create":"2026-07-01T17:22:44.407955+08:00","gmt_modified":"2026-07-01T17:22:44.407955+08:00"},{"id":3632,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"27717884cd8566480cffa4947e7fa6c5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/services/eqCacheStorage.js","gmt_create":"2026-07-01T17:22:44.408101+08:00","gmt_modified":"2026-07-01T17:22:44.408101+08:00"},{"id":3633,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"65741f66e633d4e5aedac59d5f27af4e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/services/curveClient.js","gmt_create":"2026-07-01T17:22:44.408209+08:00","gmt_modified":"2026-07-01T17:22:44.408209+08:00"},{"id":3634,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"d2ea644c6ce017e7fa5719f8dc3b2162","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/views/model/index.vue","gmt_create":"2026-07-01T17:22:44.408321+08:00","gmt_modified":"2026-07-01T17:22:44.408321+08:00"},{"id":3635,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"0d51eea570b0976e572f9c35721fa5e6","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/views/model/components/ModelFormDialog.vue","gmt_create":"2026-07-01T17:22:44.408444+08:00","gmt_modified":"2026-07-01T17:22:44.408444+08:00"},{"id":3636,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"2d86c0a8ef372bffb82991d44412c989","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/src/api/model.js","gmt_create":"2026-07-01T17:22:44.408547+08:00","gmt_modified":"2026-07-01T17:22:44.408547+08:00"},{"id":3637,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"941d6ec9925d0313ebdac30637d5e7de","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/index.vue#1-1226","gmt_create":"2026-07-01T17:22:44.408704+08:00","gmt_modified":"2026-07-01T17:22:44.408704+08:00"},{"id":3638,"source_id":"d2ea644c6ce017e7fa5719f8dc3b2162","target_id":"941d6ec9925d0313ebdac30637d5e7de","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-1226","gmt_create":"2026-07-01T17:22:44.408825+08:00","gmt_modified":"2026-07-01T17:22:44.408825+08:00"},{"id":3639,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"d71cf669f581f1e2e6b7956768cf07e5","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/model.js#1-165","gmt_create":"2026-07-01T17:22:44.409046+08:00","gmt_modified":"2026-07-01T17:22:44.409046+08:00"},{"id":3640,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"5d1069f11e2153ac8cd75f26c10256a2","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#1-659","gmt_create":"2026-07-01T17:22:44.409232+08:00","gmt_modified":"2026-07-01T17:22:44.409232+08:00"},{"id":3641,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"024c49b177309c95a9a6487c0c70ff28","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/Model.js#1-53","gmt_create":"2026-07-01T17:22:44.409438+08:00","gmt_modified":"2026-07-01T17:22:44.409438+08:00"},{"id":3642,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"ed0beaf535b1c935f72da53c93cefd99","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/validators/model.js#1-22","gmt_create":"2026-07-01T17:22:44.409604+08:00","gmt_modified":"2026-07-01T17:22:44.409604+08:00"},{"id":3643,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"186655fbb53a1180e274c0a224e447ec","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/measurementStorage.js#1-115","gmt_create":"2026-07-01T17:22:44.409771+08:00","gmt_modified":"2026-07-01T17:22:44.409771+08:00"},{"id":3644,"source_id":"16acd73277fffb69b4ee4eee82fe6b9e","target_id":"186655fbb53a1180e274c0a224e447ec","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-115","gmt_create":"2026-07-01T17:22:44.40987+08:00","gmt_modified":"2026-07-01T17:22:44.40987+08:00"},{"id":3645,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"7098281c5dbbd726581ec631c48cb7ff","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/eqCacheStorage.js#1-73","gmt_create":"2026-07-01T17:22:44.410006+08:00","gmt_modified":"2026-07-01T17:22:44.410006+08:00"},{"id":3646,"source_id":"27717884cd8566480cffa4947e7fa6c5","target_id":"7098281c5dbbd726581ec631c48cb7ff","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-73","gmt_create":"2026-07-01T17:22:44.410107+08:00","gmt_modified":"2026-07-01T17:22:44.410107+08:00"},{"id":3647,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"ff3c31b3cf3083faac2e9d22bd1046dc","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/curveClient.js#1-147","gmt_create":"2026-07-01T17:22:44.410236+08:00","gmt_modified":"2026-07-01T17:22:44.410236+08:00"},{"id":3648,"source_id":"65741f66e633d4e5aedac59d5f27af4e","target_id":"ff3c31b3cf3083faac2e9d22bd1046dc","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-147","gmt_create":"2026-07-01T17:22:44.410346+08:00","gmt_modified":"2026-07-01T17:22:44.410346+08:00"},{"id":3649,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"2f44ab11354520681821b18c70b28ea5","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/squiglink.js#1-322","gmt_create":"2026-07-01T17:22:44.410494+08:00","gmt_modified":"2026-07-01T17:22:44.410494+08:00"},{"id":3650,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"1a50c2ac7c5e4e096904af2e683b5ec7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/Brand.js#1-23","gmt_create":"2026-07-01T17:22:44.410693+08:00","gmt_modified":"2026-07-01T17:22:44.410693+08:00"},{"id":3651,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"6568412fa665c4b795868c6e9875778f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#133-659","gmt_create":"2026-07-01T17:22:44.411955+08:00","gmt_modified":"2026-07-01T17:22:44.411955+08:00"},{"id":3652,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"00a6cc74394f2292cdbdb135e0050bfd","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/squiglink.js#261-310","gmt_create":"2026-07-01T17:22:44.412644+08:00","gmt_modified":"2026-07-01T17:22:44.412644+08:00"},{"id":3653,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"3ea5cb6fe4688701d6312a31ea523b18","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/measurementStorage.js#61-108","gmt_create":"2026-07-01T17:22:44.412822+08:00","gmt_modified":"2026-07-01T17:22:44.412822+08:00"},{"id":3654,"source_id":"16acd73277fffb69b4ee4eee82fe6b9e","target_id":"3ea5cb6fe4688701d6312a31ea523b18","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 61-108","gmt_create":"2026-07-01T17:22:44.412923+08:00","gmt_modified":"2026-07-01T17:22:44.412923+08:00"},{"id":3655,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"dfbdd0655d2d61b5105701e421492cb1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/eqCacheStorage.js#24-66","gmt_create":"2026-07-01T17:22:44.413092+08:00","gmt_modified":"2026-07-01T17:22:44.413092+08:00"},{"id":3656,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"c777cf18a4b1f608a14488db3258817d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/curveClient.js#81-138","gmt_create":"2026-07-01T17:22:44.413259+08:00","gmt_modified":"2026-07-01T17:22:44.413259+08:00"},{"id":3657,"source_id":"65741f66e633d4e5aedac59d5f27af4e","target_id":"c777cf18a4b1f608a14488db3258817d","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 81-138","gmt_create":"2026-07-01T17:22:44.413403+08:00","gmt_modified":"2026-07-01T17:22:44.413403+08:00"},{"id":3658,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"4169091aeab80fcee72321116328a8b2","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/index.vue#714-1063","gmt_create":"2026-07-01T17:22:44.41352+08:00","gmt_modified":"2026-07-01T17:22:44.41352+08:00"},{"id":3659,"source_id":"d2ea644c6ce017e7fa5719f8dc3b2162","target_id":"4169091aeab80fcee72321116328a8b2","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 714-1063","gmt_create":"2026-07-01T17:22:44.413605+08:00","gmt_modified":"2026-07-01T17:22:44.413605+08:00"},{"id":3660,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"61cdcff725a5d9f851c84d3976b11ad9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/model.js#13-165","gmt_create":"2026-07-01T17:22:44.413749+08:00","gmt_modified":"2026-07-01T17:22:44.413749+08:00"},{"id":3661,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"6eacbd3b5ec60fff27a96a9101159648","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/index.vue#226-250","gmt_create":"2026-07-01T17:22:44.414449+08:00","gmt_modified":"2026-07-01T17:22:44.414449+08:00"},{"id":3662,"source_id":"d2ea644c6ce017e7fa5719f8dc3b2162","target_id":"6eacbd3b5ec60fff27a96a9101159648","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 226-250","gmt_create":"2026-07-01T17:22:44.414544+08:00","gmt_modified":"2026-07-01T17:22:44.414544+08:00"},{"id":3663,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"ddaccee59b978ba3a64b134b57255142","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#59-68","gmt_create":"2026-07-01T17:22:44.414657+08:00","gmt_modified":"2026-07-01T17:22:44.414657+08:00"},{"id":3664,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"56d7be38c99608e1cf9141127c60a1bd","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#307-335","gmt_create":"2026-07-01T17:22:44.414796+08:00","gmt_modified":"2026-07-01T17:22:44.414796+08:00"},{"id":3665,"source_id":"de74851040d304248e26c1db406458af","target_id":"56d7be38c99608e1cf9141127c60a1bd","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 307-335","gmt_create":"2026-07-01T17:22:44.414975+08:00","gmt_modified":"2026-07-01T17:22:44.414975+08:00"},{"id":3666,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"c571c3ca3eb98348a89378f8d58ffa5c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/measurementStorage.js#48-79","gmt_create":"2026-07-01T17:22:44.415094+08:00","gmt_modified":"2026-07-01T17:22:44.415094+08:00"},{"id":3667,"source_id":"16acd73277fffb69b4ee4eee82fe6b9e","target_id":"c571c3ca3eb98348a89378f8d58ffa5c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 48-79","gmt_create":"2026-07-01T17:22:44.415199+08:00","gmt_modified":"2026-07-01T17:22:44.415199+08:00"},{"id":3668,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"6d9ac3485459b97d549f73fa18ea4efe","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#183-278","gmt_create":"2026-07-01T17:22:44.41557+08:00","gmt_modified":"2026-07-01T17:22:44.41557+08:00"},{"id":3669,"source_id":"de74851040d304248e26c1db406458af","target_id":"6d9ac3485459b97d549f73fa18ea4efe","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 183-278","gmt_create":"2026-07-01T17:22:44.415697+08:00","gmt_modified":"2026-07-01T17:22:44.415697+08:00"},{"id":3670,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"d620d05fda07f9cbe1556d0f76a8153f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/measurementStorage.js#87-108","gmt_create":"2026-07-01T17:22:44.415896+08:00","gmt_modified":"2026-07-01T17:22:44.415896+08:00"},{"id":3671,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"e1a454e430f59ec87fc68cffc768037a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#466-514","gmt_create":"2026-07-01T17:22:44.416235+08:00","gmt_modified":"2026-07-01T17:22:44.416235+08:00"},{"id":3672,"source_id":"de74851040d304248e26c1db406458af","target_id":"e1a454e430f59ec87fc68cffc768037a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 466-514","gmt_create":"2026-07-01T17:22:44.416321+08:00","gmt_modified":"2026-07-01T17:22:44.416321+08:00"},{"id":3673,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"907380346a61a6c644cdaefa5165c9bd","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#516-566","gmt_create":"2026-07-01T17:22:44.416442+08:00","gmt_modified":"2026-07-01T17:22:44.416443+08:00"},{"id":3674,"source_id":"de74851040d304248e26c1db406458af","target_id":"907380346a61a6c644cdaefa5165c9bd","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 516-566","gmt_create":"2026-07-01T17:22:44.41653+08:00","gmt_modified":"2026-07-01T17:22:44.41653+08:00"},{"id":3675,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"17a4406c6c25ec6cdfd2d8ffe0b73e9c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/index.vue#1117-1220","gmt_create":"2026-07-01T17:22:44.416733+08:00","gmt_modified":"2026-07-01T17:22:44.416733+08:00"},{"id":3676,"source_id":"d2ea644c6ce017e7fa5719f8dc3b2162","target_id":"17a4406c6c25ec6cdfd2d8ffe0b73e9c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1117-1220","gmt_create":"2026-07-01T17:22:44.41683+08:00","gmt_modified":"2026-07-01T17:22:44.41683+08:00"},{"id":3677,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"726a6f97e2aeafee47b271e07e8bab86","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/squiglink.js#148-207","gmt_create":"2026-07-01T17:22:44.417407+08:00","gmt_modified":"2026-07-01T17:22:44.417407+08:00"},{"id":3678,"source_id":"d5e6b65d89b66c08d62b4c6fc5812f22","target_id":"726a6f97e2aeafee47b271e07e8bab86","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 148-207","gmt_create":"2026-07-01T17:22:44.417521+08:00","gmt_modified":"2026-07-01T17:22:44.417521+08:00"},{"id":3679,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"7257d8ea1f17cf7e6ffde19988e437dc","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/squiglink.js#216-247","gmt_create":"2026-07-01T17:22:44.417739+08:00","gmt_modified":"2026-07-01T17:22:44.417739+08:00"},{"id":3680,"source_id":"d5e6b65d89b66c08d62b4c6fc5812f22","target_id":"7257d8ea1f17cf7e6ffde19988e437dc","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 216-247","gmt_create":"2026-07-01T17:22:44.417865+08:00","gmt_modified":"2026-07-01T17:22:44.417865+08:00"},{"id":3681,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"198c9bc987125a8c495d5f4f4c719320","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#307-369","gmt_create":"2026-07-01T17:22:44.41809+08:00","gmt_modified":"2026-07-01T17:22:44.41809+08:00"},{"id":3682,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"c27046a2ebb06326e9d6b99eed8a9d94","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/components/ModelFormDialog.vue#16-46","gmt_create":"2026-07-01T17:22:44.418246+08:00","gmt_modified":"2026-07-01T17:22:44.418246+08:00"},{"id":3683,"source_id":"0d51eea570b0976e572f9c35721fa5e6","target_id":"c27046a2ebb06326e9d6b99eed8a9d94","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 16-46","gmt_create":"2026-07-01T17:22:44.418351+08:00","gmt_modified":"2026-07-01T17:22:44.418351+08:00"},{"id":3684,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"e83b1d21fe3ccb7ac2f4d82bb148bc78","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/components/ModelFormDialog.vue#289-332","gmt_create":"2026-07-01T17:22:44.418496+08:00","gmt_modified":"2026-07-01T17:22:44.418497+08:00"},{"id":3685,"source_id":"0d51eea570b0976e572f9c35721fa5e6","target_id":"e83b1d21fe3ccb7ac2f4d82bb148bc78","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 289-332","gmt_create":"2026-07-01T17:22:44.418602+08:00","gmt_modified":"2026-07-01T17:22:44.418603+08:00"},{"id":3686,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"e8dde18df2307dc1b7b00c3e9546ed83","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/api/model.js#152-165","gmt_create":"2026-07-01T17:22:44.418748+08:00","gmt_modified":"2026-07-01T17:22:44.418748+08:00"},{"id":3687,"source_id":"2d86c0a8ef372bffb82991d44412c989","target_id":"e8dde18df2307dc1b7b00c3e9546ed83","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 152-165","gmt_create":"2026-07-01T17:22:44.418852+08:00","gmt_modified":"2026-07-01T17:22:44.418852+08:00"},{"id":3688,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"dfde97c120aa759be08496d7a1217bb5","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/src/views/model/components/ModelFormDialog.vue#1-555","gmt_create":"2026-07-01T17:22:44.419046+08:00","gmt_modified":"2026-07-01T17:22:44.419046+08:00"},{"id":3689,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"9e84158ca8a0ddb6b5e5b73eb1bbe846","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/validators/model.js#3-19","gmt_create":"2026-07-01T17:22:44.420649+08:00","gmt_modified":"2026-07-01T17:22:44.420649+08:00"},{"id":3690,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"d18e23566fd59e80c9f7eec016ef89ab","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#312-317","gmt_create":"2026-07-01T17:22:44.420836+08:00","gmt_modified":"2026-07-01T17:22:44.420836+08:00"},{"id":3691,"source_id":"de74851040d304248e26c1db406458af","target_id":"d18e23566fd59e80c9f7eec016ef89ab","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 312-317","gmt_create":"2026-07-01T17:22:44.420917+08:00","gmt_modified":"2026-07-01T17:22:44.420917+08:00"},{"id":3692,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"bc3c55f1edd18bca0da26fb9aa065f87","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#320-325","gmt_create":"2026-07-01T17:22:44.421028+08:00","gmt_modified":"2026-07-01T17:22:44.421028+08:00"},{"id":3693,"source_id":"de74851040d304248e26c1db406458af","target_id":"bc3c55f1edd18bca0da26fb9aa065f87","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 320-325","gmt_create":"2026-07-01T17:22:44.421129+08:00","gmt_modified":"2026-07-01T17:22:44.421129+08:00"},{"id":3694,"source_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","target_id":"e358b7cff088dfd34df41cc908c799c8","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/models.js#255-258","gmt_create":"2026-07-01T17:22:44.421238+08:00","gmt_modified":"2026-07-01T17:22:44.421238+08:00"},{"id":3695,"source_id":"de74851040d304248e26c1db406458af","target_id":"e358b7cff088dfd34df41cc908c799c8","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 255-258","gmt_create":"2026-07-01T17:22:44.421334+08:00","gmt_modified":"2026-07-01T17:22:44.421334+08:00"},{"id":3696,"source_id":"1f4b6f57-25c5-444e-a943-d162d896dc21","target_id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 1f4b6f57-25c5-444e-a943-d162d896dc21 -\u003e 799e02d2-8358-41a1-9f8e-114f8ac00eae","gmt_create":"2026-07-01T17:22:44.990632+08:00","gmt_modified":"2026-07-01T17:22:44.990632+08:00"},{"id":3697,"source_id":"d4cb0c3c-97e9-449f-8918-f1c01e7e3561","target_id":"8d4422fd-bd93-431d-a97c-70b75f370f82","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: d4cb0c3c-97e9-449f-8918-f1c01e7e3561 -\u003e 8d4422fd-bd93-431d-a97c-70b75f370f82","gmt_create":"2026-07-01T17:22:44.991762+08:00","gmt_modified":"2026-07-01T17:22:44.991762+08:00"},{"id":3698,"source_id":"f0978b42-6f98-470e-922f-22dec2fac24d","target_id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: f0978b42-6f98-470e-922f-22dec2fac24d -\u003e 9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","gmt_create":"2026-07-01T17:22:44.993138+08:00","gmt_modified":"2026-07-01T17:22:44.993138+08:00"},{"id":4591,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"c2fb718733250824159ce8cf12afd505","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: docker-compose.yml","gmt_create":"2026-07-09T10:38:57.836145+08:00","gmt_modified":"2026-07-09T10:38:57.836145+08:00"},{"id":4592,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"0c25a991664c34b2b36ce3aeed80f4da","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: DEPLOY.md","gmt_create":"2026-07-09T10:38:57.836957+08:00","gmt_modified":"2026-07-09T10:38:57.836957+08:00"},{"id":4593,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"cc9ec3f93f58399d7b151909f2ec339a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/Dockerfile","gmt_create":"2026-07-09T10:38:57.837237+08:00","gmt_modified":"2026-07-09T10:38:57.837237+08:00"},{"id":4594,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"33b165658d59648b4948434f6fbfb5a1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/Dockerfile","gmt_create":"2026-07-09T10:38:57.837496+08:00","gmt_modified":"2026-07-09T10:38:57.837497+08:00"},{"id":4595,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"8e1ffd245729c5890eaf9ba413624479","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: scripts/upload.sh","gmt_create":"2026-07-09T10:38:57.837842+08:00","gmt_modified":"2026-07-09T10:38:57.837843+08:00"},{"id":4596,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"3e4b16d004afe7ec92f11740f4670cf4","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/nginx.conf","gmt_create":"2026-07-09T10:38:57.838137+08:00","gmt_modified":"2026-07-09T10:38:57.838137+08:00"},{"id":4597,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"e0a5c618f9dd8b21f44efd8b20afe8fc","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/start.sh","gmt_create":"2026-07-09T10:38:57.838302+08:00","gmt_modified":"2026-07-09T10:38:57.838302+08:00"},{"id":4598,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"dda8d3140e7c6b27ef704a18ce65f764","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/restart.sh","gmt_create":"2026-07-09T10:38:57.838731+08:00","gmt_modified":"2026-07-09T10:38:57.838731+08:00"},{"id":4599,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"104fc82e13cc8710958534746cc1a548","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/stop.sh","gmt_create":"2026-07-09T10:38:57.838897+08:00","gmt_modified":"2026-07-09T10:38:57.838897+08:00"},{"id":4600,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"2a04b070bd67fc5059bb504232687d64","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/config/env.js","gmt_create":"2026-07-09T10:38:57.839204+08:00","gmt_modified":"2026-07-09T10:38:57.839204+08:00"},{"id":4601,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"67a9bd52e59c942bdcba82424dfad693","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/config/loadEnv.js","gmt_create":"2026-07-09T10:38:57.839355+08:00","gmt_modified":"2026-07-09T10:38:57.839355+08:00"},{"id":4602,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"b00d4299053e146a68e3c62d12971e02","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/utils/jwt.js","gmt_create":"2026-07-09T10:38:57.839581+08:00","gmt_modified":"2026-07-09T10:38:57.839581+08:00"},{"id":4603,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"de795dd4b60b0e5d7f1c9debf546f443","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/config/logger.js","gmt_create":"2026-07-09T10:38:57.839868+08:00","gmt_modified":"2026-07-09T10:38:57.839868+08:00"},{"id":4604,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"e6564dcd4fbbe8e0f9673967ec4ce3a7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/package.json","gmt_create":"2026-07-09T10:38:57.840046+08:00","gmt_modified":"2026-07-09T10:38:57.840046+08:00"},{"id":4605,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"f26235e5c56be8023300d786bc1e4656","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/package.json","gmt_create":"2026-07-09T10:38:57.840168+08:00","gmt_modified":"2026-07-09T10:38:57.840168+08:00"},{"id":4606,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"57383432d4947aef7e94d2e1da956513","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: frontend/vite.config.js","gmt_create":"2026-07-09T10:38:57.840301+08:00","gmt_modified":"2026-07-09T10:38:57.840301+08:00"},{"id":4607,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"92b0e2fda81d2ce253e7f4ad46b6d538","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: docker-compose.yml#7-46","gmt_create":"2026-07-09T10:38:57.840645+08:00","gmt_modified":"2026-07-09T10:38:57.840645+08:00"},{"id":4608,"source_id":"c2fb718733250824159ce8cf12afd505","target_id":"92b0e2fda81d2ce253e7f4ad46b6d538","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 7-46","gmt_create":"2026-07-09T10:38:57.840765+08:00","gmt_modified":"2026-07-09T10:38:57.840765+08:00"},{"id":4609,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"889ce5c667273b5a62589149372aab81","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/nginx.conf#11-21","gmt_create":"2026-07-09T10:38:57.840972+08:00","gmt_modified":"2026-07-09T10:38:57.840972+08:00"},{"id":4610,"source_id":"3e4b16d004afe7ec92f11740f4670cf4","target_id":"889ce5c667273b5a62589149372aab81","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 11-21","gmt_create":"2026-07-09T10:38:57.84112+08:00","gmt_modified":"2026-07-09T10:38:57.84112+08:00"},{"id":4611,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"140be3684e1d4e56a926950c93c2136e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: docker-compose.yml#1-48","gmt_create":"2026-07-09T10:38:57.841529+08:00","gmt_modified":"2026-07-09T10:38:57.841529+08:00"},{"id":4612,"source_id":"c2fb718733250824159ce8cf12afd505","target_id":"140be3684e1d4e56a926950c93c2136e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-48","gmt_create":"2026-07-09T10:38:57.841802+08:00","gmt_modified":"2026-07-09T10:38:57.841802+08:00"},{"id":4613,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"732dd79ec5eeb3c735532d74caa58fe6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: DEPLOY.md#1-16","gmt_create":"2026-07-09T10:38:57.841973+08:00","gmt_modified":"2026-07-09T10:38:57.841973+08:00"},{"id":4614,"source_id":"0c25a991664c34b2b36ce3aeed80f4da","target_id":"732dd79ec5eeb3c735532d74caa58fe6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-16","gmt_create":"2026-07-09T10:38:57.842087+08:00","gmt_modified":"2026-07-09T10:38:57.842087+08:00"},{"id":4615,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"4a9da41d21881cd67144f2305da29489","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/Dockerfile#1-20","gmt_create":"2026-07-09T10:38:57.84242+08:00","gmt_modified":"2026-07-09T10:38:57.84242+08:00"},{"id":4616,"source_id":"cc9ec3f93f58399d7b151909f2ec339a","target_id":"4a9da41d21881cd67144f2305da29489","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-20","gmt_create":"2026-07-09T10:38:57.842762+08:00","gmt_modified":"2026-07-09T10:38:57.842763+08:00"},{"id":4617,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"93328830d8992fc5ff02e2ed0357b88d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/Dockerfile#1-32","gmt_create":"2026-07-09T10:38:57.842922+08:00","gmt_modified":"2026-07-09T10:38:57.842922+08:00"},{"id":4618,"source_id":"33b165658d59648b4948434f6fbfb5a1","target_id":"93328830d8992fc5ff02e2ed0357b88d","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-32","gmt_create":"2026-07-09T10:38:57.843043+08:00","gmt_modified":"2026-07-09T10:38:57.843043+08:00"},{"id":4619,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"f013b471ed832a1ebafb09cc77e21a58","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: scripts/upload.sh#1-191","gmt_create":"2026-07-09T10:38:57.843191+08:00","gmt_modified":"2026-07-09T10:38:57.843191+08:00"},{"id":4620,"source_id":"8e1ffd245729c5890eaf9ba413624479","target_id":"f013b471ed832a1ebafb09cc77e21a58","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-191","gmt_create":"2026-07-09T10:38:57.843577+08:00","gmt_modified":"2026-07-09T10:38:57.843577+08:00"},{"id":4621,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"2bb93fa4b9b077889c94bb31a1496c8d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/nginx.conf#1-34","gmt_create":"2026-07-09T10:38:57.843754+08:00","gmt_modified":"2026-07-09T10:38:57.843754+08:00"},{"id":4622,"source_id":"3e4b16d004afe7ec92f11740f4670cf4","target_id":"2bb93fa4b9b077889c94bb31a1496c8d","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-34","gmt_create":"2026-07-09T10:38:57.844074+08:00","gmt_modified":"2026-07-09T10:38:57.844074+08:00"},{"id":4623,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"af76fcd4277eeb577f573e21de923bbf","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/config/env.js#1-13","gmt_create":"2026-07-09T10:38:57.84429+08:00","gmt_modified":"2026-07-09T10:38:57.84429+08:00"},{"id":4624,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"674059608e84c759dcd02cc04676827e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/config/loadEnv.js#1-14","gmt_create":"2026-07-09T10:38:57.844459+08:00","gmt_modified":"2026-07-09T10:38:57.844459+08:00"},{"id":4625,"source_id":"67a9bd52e59c942bdcba82424dfad693","target_id":"674059608e84c759dcd02cc04676827e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-14","gmt_create":"2026-07-09T10:38:57.844573+08:00","gmt_modified":"2026-07-09T10:38:57.844573+08:00"},{"id":4626,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"d9192155f37488a652d7ea90f82c4fb6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/utils/jwt.js#1-27","gmt_create":"2026-07-09T10:38:57.844822+08:00","gmt_modified":"2026-07-09T10:38:57.844822+08:00"},{"id":4627,"source_id":"b00d4299053e146a68e3c62d12971e02","target_id":"d9192155f37488a652d7ea90f82c4fb6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-27","gmt_create":"2026-07-09T10:38:57.845009+08:00","gmt_modified":"2026-07-09T10:38:57.845009+08:00"},{"id":4628,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"835bac3464a81c18f86db090f80b803a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: DEPLOY.md#5-16","gmt_create":"2026-07-09T10:38:57.84539+08:00","gmt_modified":"2026-07-09T10:38:57.84539+08:00"},{"id":4629,"source_id":"0c25a991664c34b2b36ce3aeed80f4da","target_id":"835bac3464a81c18f86db090f80b803a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 5-16","gmt_create":"2026-07-09T10:38:57.845545+08:00","gmt_modified":"2026-07-09T10:38:57.845545+08:00"},{"id":4630,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"a4a23331a65c824bc0a3127fa825932f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: DEPLOY.md#18-46","gmt_create":"2026-07-09T10:38:57.845928+08:00","gmt_modified":"2026-07-09T10:38:57.845928+08:00"},{"id":4631,"source_id":"0c25a991664c34b2b36ce3aeed80f4da","target_id":"a4a23331a65c824bc0a3127fa825932f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 18-46","gmt_create":"2026-07-09T10:38:57.846053+08:00","gmt_modified":"2026-07-09T10:38:57.846053+08:00"},{"id":4632,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"77649e0cf96a6387d7372dd1107927dc","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: DEPLOY.md#49-120","gmt_create":"2026-07-09T10:38:57.846217+08:00","gmt_modified":"2026-07-09T10:38:57.846217+08:00"},{"id":4633,"source_id":"0c25a991664c34b2b36ce3aeed80f4da","target_id":"77649e0cf96a6387d7372dd1107927dc","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 49-120","gmt_create":"2026-07-09T10:38:57.846398+08:00","gmt_modified":"2026-07-09T10:38:57.846398+08:00"},{"id":4634,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"78a7b11b9d58b56041071344fc3bceb9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: scripts/upload.sh#39-75","gmt_create":"2026-07-09T10:38:57.846559+08:00","gmt_modified":"2026-07-09T10:38:57.846559+08:00"},{"id":4635,"source_id":"8e1ffd245729c5890eaf9ba413624479","target_id":"78a7b11b9d58b56041071344fc3bceb9","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 39-75","gmt_create":"2026-07-09T10:38:57.846669+08:00","gmt_modified":"2026-07-09T10:38:57.84667+08:00"},{"id":4636,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"721af5f743e349cacd1cccb6b80f1fa9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: scripts/upload.sh#142-187","gmt_create":"2026-07-09T10:38:57.846904+08:00","gmt_modified":"2026-07-09T10:38:57.846904+08:00"},{"id":4637,"source_id":"8e1ffd245729c5890eaf9ba413624479","target_id":"721af5f743e349cacd1cccb6b80f1fa9","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 142-187","gmt_create":"2026-07-09T10:38:57.847019+08:00","gmt_modified":"2026-07-09T10:38:57.847019+08:00"},{"id":4638,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"6e652c4aac5427884de188d64e4e1d9a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: DEPLOY.md#122-154","gmt_create":"2026-07-09T10:38:57.847263+08:00","gmt_modified":"2026-07-09T10:38:57.847263+08:00"},{"id":4639,"source_id":"0c25a991664c34b2b36ce3aeed80f4da","target_id":"6e652c4aac5427884de188d64e4e1d9a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 122-154","gmt_create":"2026-07-09T10:38:57.847388+08:00","gmt_modified":"2026-07-09T10:38:57.847388+08:00"},{"id":4640,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"97e84d6f8482a34fb585d5de9627de15","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: DEPLOY.md#157-171","gmt_create":"2026-07-09T10:38:57.847649+08:00","gmt_modified":"2026-07-09T10:38:57.847649+08:00"},{"id":4641,"source_id":"0c25a991664c34b2b36ce3aeed80f4da","target_id":"97e84d6f8482a34fb585d5de9627de15","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 157-171","gmt_create":"2026-07-09T10:38:57.848029+08:00","gmt_modified":"2026-07-09T10:38:57.848029+08:00"},{"id":4642,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"6ad553deb3df9fb48b58c7b6d55e10a4","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: DEPLOY.md#174-187","gmt_create":"2026-07-09T10:38:57.848364+08:00","gmt_modified":"2026-07-09T10:38:57.848364+08:00"},{"id":4643,"source_id":"0c25a991664c34b2b36ce3aeed80f4da","target_id":"6ad553deb3df9fb48b58c7b6d55e10a4","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 174-187","gmt_create":"2026-07-09T10:38:57.848497+08:00","gmt_modified":"2026-07-09T10:38:57.848497+08:00"},{"id":4644,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"51c3924729251f9dc2608b1daca76f08","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: DEPLOY.md#190-203","gmt_create":"2026-07-09T10:38:57.848638+08:00","gmt_modified":"2026-07-09T10:38:57.848638+08:00"},{"id":4645,"source_id":"0c25a991664c34b2b36ce3aeed80f4da","target_id":"51c3924729251f9dc2608b1daca76f08","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 190-203","gmt_create":"2026-07-09T10:38:57.848812+08:00","gmt_modified":"2026-07-09T10:38:57.848812+08:00"},{"id":4646,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"fd390735bca8d2f533b9e41050221765","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: DEPLOY.md#206-223","gmt_create":"2026-07-09T10:38:57.848954+08:00","gmt_modified":"2026-07-09T10:38:57.848954+08:00"},{"id":4647,"source_id":"0c25a991664c34b2b36ce3aeed80f4da","target_id":"fd390735bca8d2f533b9e41050221765","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 206-223","gmt_create":"2026-07-09T10:38:57.849063+08:00","gmt_modified":"2026-07-09T10:38:57.849063+08:00"},{"id":4648,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"c478032372d4890590fb08018ff5b86b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: DEPLOY.md#77-91","gmt_create":"2026-07-09T10:38:57.84938+08:00","gmt_modified":"2026-07-09T10:38:57.84938+08:00"},{"id":4649,"source_id":"0c25a991664c34b2b36ce3aeed80f4da","target_id":"c478032372d4890590fb08018ff5b86b","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 77-91","gmt_create":"2026-07-09T10:38:57.84947+08:00","gmt_modified":"2026-07-09T10:38:57.84947+08:00"},{"id":4650,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"698b053aad8542714142f437b6ce5bc1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: DEPLOY.md#92-103","gmt_create":"2026-07-09T10:38:57.849594+08:00","gmt_modified":"2026-07-09T10:38:57.849594+08:00"},{"id":4651,"source_id":"0c25a991664c34b2b36ce3aeed80f4da","target_id":"698b053aad8542714142f437b6ce5bc1","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 92-103","gmt_create":"2026-07-09T10:38:57.849708+08:00","gmt_modified":"2026-07-09T10:38:57.849708+08:00"},{"id":4652,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"3f5b860ef85c3869c1ebfaacb484ebd1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: DEPLOY.md#251-256","gmt_create":"2026-07-09T10:38:57.850081+08:00","gmt_modified":"2026-07-09T10:38:57.850081+08:00"},{"id":4653,"source_id":"0c25a991664c34b2b36ce3aeed80f4da","target_id":"3f5b860ef85c3869c1ebfaacb484ebd1","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 251-256","gmt_create":"2026-07-09T10:38:57.850174+08:00","gmt_modified":"2026-07-09T10:38:57.850174+08:00"},{"id":4654,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"e8d639f52b34d67545f4ac9c446f2d17","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: DEPLOY.md#104-119","gmt_create":"2026-07-09T10:38:57.850303+08:00","gmt_modified":"2026-07-09T10:38:57.850303+08:00"},{"id":4655,"source_id":"0c25a991664c34b2b36ce3aeed80f4da","target_id":"e8d639f52b34d67545f4ac9c446f2d17","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 104-119","gmt_create":"2026-07-09T10:38:57.8504+08:00","gmt_modified":"2026-07-09T10:38:57.8504+08:00"},{"id":4656,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"99beb36f9b6a7af6bb633f3430226c78","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/start.sh#1-5","gmt_create":"2026-07-09T10:38:57.850521+08:00","gmt_modified":"2026-07-09T10:38:57.850521+08:00"},{"id":4657,"source_id":"e0a5c618f9dd8b21f44efd8b20afe8fc","target_id":"99beb36f9b6a7af6bb633f3430226c78","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-5","gmt_create":"2026-07-09T10:38:57.850639+08:00","gmt_modified":"2026-07-09T10:38:57.850639+08:00"},{"id":4658,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"6f145c0757539cef42b6b99033bfd808","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/restart.sh#1-43","gmt_create":"2026-07-09T10:38:57.850771+08:00","gmt_modified":"2026-07-09T10:38:57.850771+08:00"},{"id":4659,"source_id":"dda8d3140e7c6b27ef704a18ce65f764","target_id":"6f145c0757539cef42b6b99033bfd808","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-43","gmt_create":"2026-07-09T10:38:57.850887+08:00","gmt_modified":"2026-07-09T10:38:57.850887+08:00"},{"id":4660,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"f033e1b9f169a62a557013eb45fceb15","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/stop.sh#1-14","gmt_create":"2026-07-09T10:38:57.851216+08:00","gmt_modified":"2026-07-09T10:38:57.851216+08:00"},{"id":4661,"source_id":"104fc82e13cc8710958534746cc1a548","target_id":"f033e1b9f169a62a557013eb45fceb15","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-14","gmt_create":"2026-07-09T10:38:57.85132+08:00","gmt_modified":"2026-07-09T10:38:57.85132+08:00"},{"id":4662,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"949e5e7cf339aa20456ee680ed2b0ba0","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/vite.config.js#17-25","gmt_create":"2026-07-09T10:38:57.851449+08:00","gmt_modified":"2026-07-09T10:38:57.851449+08:00"},{"id":4663,"source_id":"57383432d4947aef7e94d2e1da956513","target_id":"949e5e7cf339aa20456ee680ed2b0ba0","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 17-25","gmt_create":"2026-07-09T10:38:57.85158+08:00","gmt_modified":"2026-07-09T10:38:57.85158+08:00"},{"id":4664,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"f0cfbce84fd69ea625e215367d5da707","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/package.json#1-29","gmt_create":"2026-07-09T10:38:57.851982+08:00","gmt_modified":"2026-07-09T10:38:57.851982+08:00"},{"id":4665,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"b69119d10dffe1103145877074ae23db","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/package.json#1-24","gmt_create":"2026-07-09T10:38:57.85214+08:00","gmt_modified":"2026-07-09T10:38:57.85214+08:00"},{"id":4666,"source_id":"f26235e5c56be8023300d786bc1e4656","target_id":"b69119d10dffe1103145877074ae23db","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-24","gmt_create":"2026-07-09T10:38:57.852412+08:00","gmt_modified":"2026-07-09T10:38:57.852412+08:00"},{"id":4667,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"365980dea72f61f841d013d7f96f64b7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: docker-compose.yml#1-5","gmt_create":"2026-07-09T10:38:57.852579+08:00","gmt_modified":"2026-07-09T10:38:57.852579+08:00"},{"id":4668,"source_id":"c2fb718733250824159ce8cf12afd505","target_id":"365980dea72f61f841d013d7f96f64b7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-5","gmt_create":"2026-07-09T10:38:57.85267+08:00","gmt_modified":"2026-07-09T10:38:57.85267+08:00"},{"id":4669,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"0e267c17e65c31b7921d19410a6a669a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: frontend/nginx.conf#7-32","gmt_create":"2026-07-09T10:38:57.852851+08:00","gmt_modified":"2026-07-09T10:38:57.852851+08:00"},{"id":4670,"source_id":"3e4b16d004afe7ec92f11740f4670cf4","target_id":"0e267c17e65c31b7921d19410a6a669a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 7-32","gmt_create":"2026-07-09T10:38:57.852947+08:00","gmt_modified":"2026-07-09T10:38:57.852947+08:00"},{"id":4671,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"e22545d86c6efa26c57aea0e355a57f6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: DEPLOY.md#226-256","gmt_create":"2026-07-09T10:38:57.85308+08:00","gmt_modified":"2026-07-09T10:38:57.85308+08:00"},{"id":4672,"source_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","target_id":"6785dd382584e15bfb7af1b0921bbc25","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: DEPLOY.md#36-42","gmt_create":"2026-07-09T10:38:57.853247+08:00","gmt_modified":"2026-07-09T10:38:57.853247+08:00"},{"id":4673,"source_id":"0c25a991664c34b2b36ce3aeed80f4da","target_id":"6785dd382584e15bfb7af1b0921bbc25","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 36-42","gmt_create":"2026-07-09T10:38:57.853341+08:00","gmt_modified":"2026-07-09T10:38:57.853341+08:00"},{"id":4674,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"d1a881152b5b5a7b44849b8f263921e6","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/app.js","gmt_create":"2026-07-09T10:40:13.097879+08:00","gmt_modified":"2026-07-09T10:40:13.097879+08:00"},{"id":4675,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"e6564dcd4fbbe8e0f9673967ec4ce3a7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/package.json","gmt_create":"2026-07-09T10:40:13.100312+08:00","gmt_modified":"2026-07-09T10:40:13.100312+08:00"},{"id":4676,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"2a04b070bd67fc5059bb504232687d64","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/config/env.js","gmt_create":"2026-07-09T10:40:13.102032+08:00","gmt_modified":"2026-07-09T10:40:13.102032+08:00"},{"id":4677,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"cb4575c8c79b7b9f6ffdac43c2369b95","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/config/database.js","gmt_create":"2026-07-09T10:40:13.102193+08:00","gmt_modified":"2026-07-09T10:40:13.102193+08:00"},{"id":4678,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"0e3236e18534c268515eaaf86a8720e8","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/config/redis.js","gmt_create":"2026-07-09T10:40:13.102402+08:00","gmt_modified":"2026-07-09T10:40:13.102402+08:00"},{"id":4679,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"de795dd4b60b0e5d7f1c9debf546f443","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/config/logger.js","gmt_create":"2026-07-09T10:40:13.102753+08:00","gmt_modified":"2026-07-09T10:40:13.102753+08:00"},{"id":4680,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"c966b08c46eddb517165d22b1fddeb43","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/routes/index.js","gmt_create":"2026-07-09T10:40:13.102883+08:00","gmt_modified":"2026-07-09T10:40:13.102883+08:00"},{"id":4681,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"c22be0eccf069bf7f87f09ef49070f8d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/middleware/auth.js","gmt_create":"2026-07-09T10:40:13.103036+08:00","gmt_modified":"2026-07-09T10:40:13.103036+08:00"},{"id":4682,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"116e0c968fd0a8e76c35b5f460896759","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/middleware/bodyLimit.js","gmt_create":"2026-07-09T10:40:13.103365+08:00","gmt_modified":"2026-07-09T10:40:13.103365+08:00"},{"id":4683,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"b00d4299053e146a68e3c62d12971e02","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/utils/jwt.js","gmt_create":"2026-07-09T10:40:13.103495+08:00","gmt_modified":"2026-07-09T10:40:13.103495+08:00"},{"id":4684,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"30f836e18a6bf9cbcf650e5884375a93","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/utils/response.js","gmt_create":"2026-07-09T10:40:13.10394+08:00","gmt_modified":"2026-07-09T10:40:13.10394+08:00"},{"id":4685,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"a8eb0b5dc159c884a13f0c9496a4d930","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/routes/auth.js","gmt_create":"2026-07-09T10:40:13.104045+08:00","gmt_modified":"2026-07-09T10:40:13.104045+08:00"},{"id":4686,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"b452aa03aefde5a8f545f178f4ad3119","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/services/userBootstrap.js","gmt_create":"2026-07-09T10:40:13.104151+08:00","gmt_modified":"2026-07-09T10:40:13.104151+08:00"},{"id":4687,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"e241758e72afcc402a5c35f2d0c631b7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/models/DashboardUser.js","gmt_create":"2026-07-09T10:40:13.104276+08:00","gmt_modified":"2026-07-09T10:40:13.104276+08:00"},{"id":4688,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"cbc5c3e499ca921f7fe31857f4e0033d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/models/index.js","gmt_create":"2026-07-09T10:40:13.104405+08:00","gmt_modified":"2026-07-09T10:40:13.104405+08:00"},{"id":4689,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"65741f66e633d4e5aedac59d5f27af4e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/services/curveClient.js","gmt_create":"2026-07-09T10:40:13.111521+08:00","gmt_modified":"2026-07-09T10:40:13.111521+08:00"},{"id":4690,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"27717884cd8566480cffa4947e7fa6c5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/services/eqCacheStorage.js","gmt_create":"2026-07-09T10:40:13.111673+08:00","gmt_modified":"2026-07-09T10:40:13.111673+08:00"},{"id":4691,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"16acd73277fffb69b4ee4eee82fe6b9e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: backend/src/services/measurementStorage.js","gmt_create":"2026-07-09T10:40:13.111814+08:00","gmt_modified":"2026-07-09T10:40:13.111814+08:00"},{"id":4692,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"248df2189f51b39a5c1c7c72f6d9e05f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/app.js#1-60","gmt_create":"2026-07-09T10:40:13.111964+08:00","gmt_modified":"2026-07-09T10:40:13.111965+08:00"},{"id":4693,"source_id":"d1a881152b5b5a7b44849b8f263921e6","target_id":"248df2189f51b39a5c1c7c72f6d9e05f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-60","gmt_create":"2026-07-09T10:40:13.112075+08:00","gmt_modified":"2026-07-09T10:40:13.112075+08:00"},{"id":4694,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"af76fcd4277eeb577f573e21de923bbf","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/config/env.js#1-13","gmt_create":"2026-07-09T10:40:13.112204+08:00","gmt_modified":"2026-07-09T10:40:13.112204+08:00"},{"id":4695,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"9766577cfe733c229896c1a7fb2a3657","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/config/database.js#1-24","gmt_create":"2026-07-09T10:40:13.112373+08:00","gmt_modified":"2026-07-09T10:40:13.112373+08:00"},{"id":4696,"source_id":"cb4575c8c79b7b9f6ffdac43c2369b95","target_id":"9766577cfe733c229896c1a7fb2a3657","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-24","gmt_create":"2026-07-09T10:40:13.112483+08:00","gmt_modified":"2026-07-09T10:40:13.112483+08:00"},{"id":4697,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"a4355925ed6bec25b1de9249be7e01dc","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/config/redis.js#1-32","gmt_create":"2026-07-09T10:40:13.112621+08:00","gmt_modified":"2026-07-09T10:40:13.112621+08:00"},{"id":4698,"source_id":"0e3236e18534c268515eaaf86a8720e8","target_id":"a4355925ed6bec25b1de9249be7e01dc","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-32","gmt_create":"2026-07-09T10:40:13.112772+08:00","gmt_modified":"2026-07-09T10:40:13.112772+08:00"},{"id":4699,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"d25e0434ec91bd979786a4edb517b706","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/config/logger.js#1-29","gmt_create":"2026-07-09T10:40:13.112894+08:00","gmt_modified":"2026-07-09T10:40:13.112894+08:00"},{"id":4700,"source_id":"de795dd4b60b0e5d7f1c9debf546f443","target_id":"d25e0434ec91bd979786a4edb517b706","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-29","gmt_create":"2026-07-09T10:40:13.113008+08:00","gmt_modified":"2026-07-09T10:40:13.113008+08:00"},{"id":4701,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"d01795570183159e8ff6fbd172311f33","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/index.js#1-13","gmt_create":"2026-07-09T10:40:13.11316+08:00","gmt_modified":"2026-07-09T10:40:13.11316+08:00"},{"id":4702,"source_id":"c966b08c46eddb517165d22b1fddeb43","target_id":"d01795570183159e8ff6fbd172311f33","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-13","gmt_create":"2026-07-09T10:40:13.113289+08:00","gmt_modified":"2026-07-09T10:40:13.113289+08:00"},{"id":4703,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"b4d5cb8d79f05ea0bc1f56f20380f226","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/middleware/auth.js#1-36","gmt_create":"2026-07-09T10:40:13.113409+08:00","gmt_modified":"2026-07-09T10:40:13.11341+08:00"},{"id":4704,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"25a72c2412b12f63f5e989a355625a9e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/middleware/bodyLimit.js#1-12","gmt_create":"2026-07-09T10:40:13.113863+08:00","gmt_modified":"2026-07-09T10:40:13.113863+08:00"},{"id":4705,"source_id":"116e0c968fd0a8e76c35b5f460896759","target_id":"25a72c2412b12f63f5e989a355625a9e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-12","gmt_create":"2026-07-09T10:40:13.113969+08:00","gmt_modified":"2026-07-09T10:40:13.113969+08:00"},{"id":4706,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"9ef666f18a55b6f0966d3f3b77825993","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/utils/jwt.js#1-28","gmt_create":"2026-07-09T10:40:13.114109+08:00","gmt_modified":"2026-07-09T10:40:13.114109+08:00"},{"id":4707,"source_id":"b00d4299053e146a68e3c62d12971e02","target_id":"9ef666f18a55b6f0966d3f3b77825993","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-28","gmt_create":"2026-07-09T10:40:13.114251+08:00","gmt_modified":"2026-07-09T10:40:13.114251+08:00"},{"id":4708,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"e3a6003c52bf8b8487bb1b8709da6b4b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/utils/response.js#1-25","gmt_create":"2026-07-09T10:40:13.114394+08:00","gmt_modified":"2026-07-09T10:40:13.114394+08:00"},{"id":4709,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"5fa9a5129de84d75fdeecdd2d269ca8c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/auth.js#1-112","gmt_create":"2026-07-09T10:40:13.114579+08:00","gmt_modified":"2026-07-09T10:40:13.114579+08:00"},{"id":4710,"source_id":"a8eb0b5dc159c884a13f0c9496a4d930","target_id":"5fa9a5129de84d75fdeecdd2d269ca8c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-112","gmt_create":"2026-07-09T10:40:13.114862+08:00","gmt_modified":"2026-07-09T10:40:13.114862+08:00"},{"id":4711,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"e6c7093be2caf72ef4766f8e5a2e6f16","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/userBootstrap.js#1-28","gmt_create":"2026-07-09T10:40:13.115344+08:00","gmt_modified":"2026-07-09T10:40:13.115344+08:00"},{"id":4712,"source_id":"b452aa03aefde5a8f545f178f4ad3119","target_id":"e6c7093be2caf72ef4766f8e5a2e6f16","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-28","gmt_create":"2026-07-09T10:40:13.115495+08:00","gmt_modified":"2026-07-09T10:40:13.115495+08:00"},{"id":4713,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"fcd9df78728cdbe7c91e9fba6236943d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/DashboardUser.js#1-58","gmt_create":"2026-07-09T10:40:13.115877+08:00","gmt_modified":"2026-07-09T10:40:13.115877+08:00"},{"id":4714,"source_id":"e241758e72afcc402a5c35f2d0c631b7","target_id":"fcd9df78728cdbe7c91e9fba6236943d","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-58","gmt_create":"2026-07-09T10:40:13.11599+08:00","gmt_modified":"2026-07-09T10:40:13.11599+08:00"},{"id":4715,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"1a2e801e2d286b40f1ca8b00e1e03b98","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/models/index.js#1-8","gmt_create":"2026-07-09T10:40:13.116133+08:00","gmt_modified":"2026-07-09T10:40:13.116133+08:00"},{"id":4716,"source_id":"cbc5c3e499ca921f7fe31857f4e0033d","target_id":"1a2e801e2d286b40f1ca8b00e1e03b98","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-8","gmt_create":"2026-07-09T10:40:13.116241+08:00","gmt_modified":"2026-07-09T10:40:13.116241+08:00"},{"id":4717,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"ff3c31b3cf3083faac2e9d22bd1046dc","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/curveClient.js#1-147","gmt_create":"2026-07-09T10:40:13.116406+08:00","gmt_modified":"2026-07-09T10:40:13.116406+08:00"},{"id":4718,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"7098281c5dbbd726581ec631c48cb7ff","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/eqCacheStorage.js#1-73","gmt_create":"2026-07-09T10:40:13.116563+08:00","gmt_modified":"2026-07-09T10:40:13.116564+08:00"},{"id":4719,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"186655fbb53a1180e274c0a224e447ec","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/measurementStorage.js#1-115","gmt_create":"2026-07-09T10:40:13.116935+08:00","gmt_modified":"2026-07-09T10:40:13.116935+08:00"},{"id":4720,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"d2b086dd8008c3f2d501338f98f929d6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/app.js#14-59","gmt_create":"2026-07-09T10:40:13.117249+08:00","gmt_modified":"2026-07-09T10:40:13.117249+08:00"},{"id":4721,"source_id":"d1a881152b5b5a7b44849b8f263921e6","target_id":"d2b086dd8008c3f2d501338f98f929d6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 14-59","gmt_create":"2026-07-09T10:40:13.117371+08:00","gmt_modified":"2026-07-09T10:40:13.117371+08:00"},{"id":4722,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"b6bb3d785556e32e7d6a7bb51a347e64","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/app.js#16-37","gmt_create":"2026-07-09T10:40:13.117902+08:00","gmt_modified":"2026-07-09T10:40:13.117902+08:00"},{"id":4723,"source_id":"d1a881152b5b5a7b44849b8f263921e6","target_id":"b6bb3d785556e32e7d6a7bb51a347e64","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 16-37","gmt_create":"2026-07-09T10:40:13.117984+08:00","gmt_modified":"2026-07-09T10:40:13.117984+08:00"},{"id":4724,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"018eb7805cf7534c681b6ce3d54044f7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/auth.js#24-64","gmt_create":"2026-07-09T10:40:13.119098+08:00","gmt_modified":"2026-07-09T10:40:13.119098+08:00"},{"id":4725,"source_id":"a8eb0b5dc159c884a13f0c9496a4d930","target_id":"018eb7805cf7534c681b6ce3d54044f7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 24-64","gmt_create":"2026-07-09T10:40:13.119218+08:00","gmt_modified":"2026-07-09T10:40:13.119218+08:00"},{"id":4726,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"82762a8b3fbc46dac0a00d40ea7b579c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/app.js#42-56","gmt_create":"2026-07-09T10:40:13.119639+08:00","gmt_modified":"2026-07-09T10:40:13.119639+08:00"},{"id":4727,"source_id":"d1a881152b5b5a7b44849b8f263921e6","target_id":"82762a8b3fbc46dac0a00d40ea7b579c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 42-56","gmt_create":"2026-07-09T10:40:13.119749+08:00","gmt_modified":"2026-07-09T10:40:13.119749+08:00"},{"id":4728,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"dfbdd0655d2d61b5105701e421492cb1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/eqCacheStorage.js#24-66","gmt_create":"2026-07-09T10:40:13.120357+08:00","gmt_modified":"2026-07-09T10:40:13.120357+08:00"},{"id":4729,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"a86053bdb5be909793bdf3ec022f11a8","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/config/redis.js#11-29","gmt_create":"2026-07-09T10:40:13.120568+08:00","gmt_modified":"2026-07-09T10:40:13.120568+08:00"},{"id":4730,"source_id":"0e3236e18534c268515eaaf86a8720e8","target_id":"a86053bdb5be909793bdf3ec022f11a8","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 11-29","gmt_create":"2026-07-09T10:40:13.120695+08:00","gmt_modified":"2026-07-09T10:40:13.120695+08:00"},{"id":4731,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"4c80adc29e59b0b2648bc1060593840e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/auth.js#60-64","gmt_create":"2026-07-09T10:40:13.121495+08:00","gmt_modified":"2026-07-09T10:40:13.121495+08:00"},{"id":4732,"source_id":"a8eb0b5dc159c884a13f0c9496a4d930","target_id":"4c80adc29e59b0b2648bc1060593840e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 60-64","gmt_create":"2026-07-09T10:40:13.121592+08:00","gmt_modified":"2026-07-09T10:40:13.121592+08:00"},{"id":4733,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"43089a76edc8fe6543de3167f99e0386","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/measurementStorage.js#76-108","gmt_create":"2026-07-09T10:40:13.121801+08:00","gmt_modified":"2026-07-09T10:40:13.121801+08:00"},{"id":4734,"source_id":"16acd73277fffb69b4ee4eee82fe6b9e","target_id":"43089a76edc8fe6543de3167f99e0386","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 76-108","gmt_create":"2026-07-09T10:40:13.121898+08:00","gmt_modified":"2026-07-09T10:40:13.121898+08:00"},{"id":4735,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"9538d87048b508ac2f8c4c2f8d61db9b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/curveClient.js#94-138","gmt_create":"2026-07-09T10:40:13.122013+08:00","gmt_modified":"2026-07-09T10:40:13.122013+08:00"},{"id":4736,"source_id":"65741f66e633d4e5aedac59d5f27af4e","target_id":"9538d87048b508ac2f8c4c2f8d61db9b","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 94-138","gmt_create":"2026-07-09T10:40:13.122097+08:00","gmt_modified":"2026-07-09T10:40:13.122097+08:00"},{"id":4737,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"fd29270ac88376d5fd036d672f01a5ad","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/app.js#17-20","gmt_create":"2026-07-09T10:40:13.12228+08:00","gmt_modified":"2026-07-09T10:40:13.12228+08:00"},{"id":4738,"source_id":"d1a881152b5b5a7b44849b8f263921e6","target_id":"fd29270ac88376d5fd036d672f01a5ad","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 17-20","gmt_create":"2026-07-09T10:40:13.122362+08:00","gmt_modified":"2026-07-09T10:40:13.122362+08:00"},{"id":4739,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"d6ef85113df95cbba3b3107ba4c4f2f8","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/routes/auth.js#24-77","gmt_create":"2026-07-09T10:40:13.122532+08:00","gmt_modified":"2026-07-09T10:40:13.122532+08:00"},{"id":4740,"source_id":"a8eb0b5dc159c884a13f0c9496a4d930","target_id":"d6ef85113df95cbba3b3107ba4c4f2f8","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 24-77","gmt_create":"2026-07-09T10:40:13.12264+08:00","gmt_modified":"2026-07-09T10:40:13.12264+08:00"},{"id":4741,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"29b412660e6ebd0a7e9120ad5d799db9","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/app.js#17-18","gmt_create":"2026-07-09T10:40:13.122753+08:00","gmt_modified":"2026-07-09T10:40:13.122753+08:00"},{"id":4742,"source_id":"d1a881152b5b5a7b44849b8f263921e6","target_id":"29b412660e6ebd0a7e9120ad5d799db9","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 17-18","gmt_create":"2026-07-09T10:40:13.122833+08:00","gmt_modified":"2026-07-09T10:40:13.122833+08:00"},{"id":4743,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"195cd8e53ecc3405b70ca2d072a081bf","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/config/database.js#15-15","gmt_create":"2026-07-09T10:40:13.123073+08:00","gmt_modified":"2026-07-09T10:40:13.123073+08:00"},{"id":4744,"source_id":"cb4575c8c79b7b9f6ffdac43c2369b95","target_id":"195cd8e53ecc3405b70ca2d072a081bf","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 15-15","gmt_create":"2026-07-09T10:40:13.123178+08:00","gmt_modified":"2026-07-09T10:40:13.123178+08:00"},{"id":4745,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"13c0720ee4d59b4cd7f50a96fee64c21","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/eqCacheStorage.js#24-42","gmt_create":"2026-07-09T10:40:13.123293+08:00","gmt_modified":"2026-07-09T10:40:13.123293+08:00"},{"id":4746,"source_id":"27717884cd8566480cffa4947e7fa6c5","target_id":"13c0720ee4d59b4cd7f50a96fee64c21","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 24-42","gmt_create":"2026-07-09T10:40:13.123381+08:00","gmt_modified":"2026-07-09T10:40:13.123381+08:00"},{"id":4747,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"69850e52d0478b177c0b3cdc11a4400a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/measurementStorage.js#18-27","gmt_create":"2026-07-09T10:40:13.123499+08:00","gmt_modified":"2026-07-09T10:40:13.123499+08:00"},{"id":4748,"source_id":"16acd73277fffb69b4ee4eee82fe6b9e","target_id":"69850e52d0478b177c0b3cdc11a4400a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 18-27","gmt_create":"2026-07-09T10:40:13.123572+08:00","gmt_modified":"2026-07-09T10:40:13.123573+08:00"},{"id":4749,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"c0fc635551b86ede699e82e863fbdc7a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/curveClient.js#94-100","gmt_create":"2026-07-09T10:40:13.1237+08:00","gmt_modified":"2026-07-09T10:40:13.1237+08:00"},{"id":4750,"source_id":"65741f66e633d4e5aedac59d5f27af4e","target_id":"c0fc635551b86ede699e82e863fbdc7a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 94-100","gmt_create":"2026-07-09T10:40:13.12377+08:00","gmt_modified":"2026-07-09T10:40:13.12377+08:00"},{"id":4751,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"5ffbcfe60b90a249c780e9612c0062a8","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/config/logger.js#19-26","gmt_create":"2026-07-09T10:40:13.123875+08:00","gmt_modified":"2026-07-09T10:40:13.123875+08:00"},{"id":4752,"source_id":"de795dd4b60b0e5d7f1c9debf546f443","target_id":"5ffbcfe60b90a249c780e9612c0062a8","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 19-26","gmt_create":"2026-07-09T10:40:13.12398+08:00","gmt_modified":"2026-07-09T10:40:13.12398+08:00"},{"id":4753,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"ed2ad91f5cf4199164f0c639379e66b8","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/app.js#42-59","gmt_create":"2026-07-09T10:40:13.124078+08:00","gmt_modified":"2026-07-09T10:40:13.124078+08:00"},{"id":4754,"source_id":"d1a881152b5b5a7b44849b8f263921e6","target_id":"ed2ad91f5cf4199164f0c639379e66b8","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 42-59","gmt_create":"2026-07-09T10:40:13.124149+08:00","gmt_modified":"2026-07-09T10:40:13.124149+08:00"},{"id":4755,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"2bdc6f33566ade8b54dfd6b79a33b5bc","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/app.js#22-34","gmt_create":"2026-07-09T10:40:13.12448+08:00","gmt_modified":"2026-07-09T10:40:13.12448+08:00"},{"id":4756,"source_id":"d1a881152b5b5a7b44849b8f263921e6","target_id":"2bdc6f33566ade8b54dfd6b79a33b5bc","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 22-34","gmt_create":"2026-07-09T10:40:13.124552+08:00","gmt_modified":"2026-07-09T10:40:13.124552+08:00"},{"id":4757,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"c777cf18a4b1f608a14488db3258817d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/curveClient.js#81-138","gmt_create":"2026-07-09T10:40:13.124727+08:00","gmt_modified":"2026-07-09T10:40:13.124727+08:00"},{"id":4758,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"821d4b2c32783bced864c912f79ea0c5","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/config/logger.js#10-26","gmt_create":"2026-07-09T10:40:13.124851+08:00","gmt_modified":"2026-07-09T10:40:13.124851+08:00"},{"id":4759,"source_id":"de795dd4b60b0e5d7f1c9debf546f443","target_id":"821d4b2c32783bced864c912f79ea0c5","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 10-26","gmt_create":"2026-07-09T10:40:13.124938+08:00","gmt_modified":"2026-07-09T10:40:13.124938+08:00"},{"id":4760,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"313b021507aa8c696237c7b9a55205e0","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/package.json#11-27","gmt_create":"2026-07-09T10:40:13.125211+08:00","gmt_modified":"2026-07-09T10:40:13.125211+08:00"},{"id":4761,"source_id":"e6564dcd4fbbe8e0f9673967ec4ce3a7","target_id":"313b021507aa8c696237c7b9a55205e0","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 11-27","gmt_create":"2026-07-09T10:40:13.125303+08:00","gmt_modified":"2026-07-09T10:40:13.125303+08:00"},{"id":4762,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"dae18e930291c4dfde6de9267ef85102","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/app.js#1-14","gmt_create":"2026-07-09T10:40:13.125404+08:00","gmt_modified":"2026-07-09T10:40:13.125404+08:00"},{"id":4763,"source_id":"d1a881152b5b5a7b44849b8f263921e6","target_id":"dae18e930291c4dfde6de9267ef85102","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-14","gmt_create":"2026-07-09T10:40:13.125475+08:00","gmt_modified":"2026-07-09T10:40:13.125475+08:00"},{"id":4764,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"f0cfbce84fd69ea625e215367d5da707","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/package.json#1-29","gmt_create":"2026-07-09T10:40:13.125593+08:00","gmt_modified":"2026-07-09T10:40:13.125593+08:00"},{"id":4765,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"b1b5b2acc0fc69d741f0c7beee1605df","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/app.js#48-51","gmt_create":"2026-07-09T10:40:13.12585+08:00","gmt_modified":"2026-07-09T10:40:13.12585+08:00"},{"id":4766,"source_id":"d1a881152b5b5a7b44849b8f263921e6","target_id":"b1b5b2acc0fc69d741f0c7beee1605df","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 48-51","gmt_create":"2026-07-09T10:40:13.125989+08:00","gmt_modified":"2026-07-09T10:40:13.125989+08:00"},{"id":4767,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"4ffd577b0e2bce69a1ec0f48f7b12dff","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/config/redis.js#24-26","gmt_create":"2026-07-09T10:40:13.126157+08:00","gmt_modified":"2026-07-09T10:40:13.126157+08:00"},{"id":4768,"source_id":"0e3236e18534c268515eaaf86a8720e8","target_id":"4ffd577b0e2bce69a1ec0f48f7b12dff","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 24-26","gmt_create":"2026-07-09T10:40:13.126276+08:00","gmt_modified":"2026-07-09T10:40:13.126276+08:00"},{"id":4769,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"af31c4b065f62c2a0bcd0575d9d930ab","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/measurementStorage.js#102-107","gmt_create":"2026-07-09T10:40:13.126401+08:00","gmt_modified":"2026-07-09T10:40:13.126401+08:00"},{"id":4770,"source_id":"16acd73277fffb69b4ee4eee82fe6b9e","target_id":"af31c4b065f62c2a0bcd0575d9d930ab","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 102-107","gmt_create":"2026-07-09T10:40:13.12648+08:00","gmt_modified":"2026-07-09T10:40:13.12648+08:00"},{"id":4771,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"27987ae2afef14b8a880af5db468e1e4","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/curveClient.js#92-116","gmt_create":"2026-07-09T10:40:13.126638+08:00","gmt_modified":"2026-07-09T10:40:13.126638+08:00"},{"id":4772,"source_id":"65741f66e633d4e5aedac59d5f27af4e","target_id":"27987ae2afef14b8a880af5db468e1e4","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 92-116","gmt_create":"2026-07-09T10:40:13.126738+08:00","gmt_modified":"2026-07-09T10:40:13.126738+08:00"},{"id":4773,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"6e4a8a3e6825b46b262f81aed57f9bd4","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/config/database.js#4-11","gmt_create":"2026-07-09T10:40:13.126951+08:00","gmt_modified":"2026-07-09T10:40:13.126951+08:00"},{"id":4774,"source_id":"cb4575c8c79b7b9f6ffdac43c2369b95","target_id":"6e4a8a3e6825b46b262f81aed57f9bd4","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 4-11","gmt_create":"2026-07-09T10:40:13.127026+08:00","gmt_modified":"2026-07-09T10:40:13.127027+08:00"},{"id":4775,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"9206d20f411d381e9d163f1fb2322f98","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/config/redis.js#4-7","gmt_create":"2026-07-09T10:40:13.127133+08:00","gmt_modified":"2026-07-09T10:40:13.127133+08:00"},{"id":4776,"source_id":"0e3236e18534c268515eaaf86a8720e8","target_id":"9206d20f411d381e9d163f1fb2322f98","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 4-7","gmt_create":"2026-07-09T10:40:13.127257+08:00","gmt_modified":"2026-07-09T10:40:13.127257+08:00"},{"id":4777,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"eb533ec652ab24ba6f647f40aa5787b8","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/utils/jwt.js#3-4","gmt_create":"2026-07-09T10:40:13.127354+08:00","gmt_modified":"2026-07-09T10:40:13.127354+08:00"},{"id":4778,"source_id":"b00d4299053e146a68e3c62d12971e02","target_id":"eb533ec652ab24ba6f647f40aa5787b8","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 3-4","gmt_create":"2026-07-09T10:40:13.127426+08:00","gmt_modified":"2026-07-09T10:40:13.127426+08:00"},{"id":4779,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"51d7387411a92786854c4a62c617b6a5","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/userBootstrap.js#9-10","gmt_create":"2026-07-09T10:40:13.127529+08:00","gmt_modified":"2026-07-09T10:40:13.127529+08:00"},{"id":4780,"source_id":"b452aa03aefde5a8f545f178f4ad3119","target_id":"51d7387411a92786854c4a62c617b6a5","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 9-10","gmt_create":"2026-07-09T10:40:13.127604+08:00","gmt_modified":"2026-07-09T10:40:13.127604+08:00"},{"id":4781,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"f20852f2d7cf38d742212362a039f699","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/measurementStorage.js#9-12","gmt_create":"2026-07-09T10:40:13.127722+08:00","gmt_modified":"2026-07-09T10:40:13.127722+08:00"},{"id":4782,"source_id":"16acd73277fffb69b4ee4eee82fe6b9e","target_id":"f20852f2d7cf38d742212362a039f699","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 9-12","gmt_create":"2026-07-09T10:40:13.127798+08:00","gmt_modified":"2026-07-09T10:40:13.127798+08:00"},{"id":4783,"source_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","target_id":"a8aac30147325f1c7f4691fb72e71064","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: backend/src/services/curveClient.js#8","gmt_create":"2026-07-09T10:40:13.128049+08:00","gmt_modified":"2026-07-09T10:40:13.128049+08:00"},{"id":4784,"source_id":"65741f66e633d4e5aedac59d5f27af4e","target_id":"a8aac30147325f1c7f4691fb72e71064","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 8","gmt_create":"2026-07-09T10:40:13.128137+08:00","gmt_modified":"2026-07-09T10:40:13.128137+08:00"},{"id":4785,"source_id":"2b5fd78d-2407-4ccc-8807-9bb05c0a687e","target_id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 2b5fd78d-2407-4ccc-8807-9bb05c0a687e -\u003e 941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","gmt_create":"2026-07-09T10:41:32.425536+08:00","gmt_modified":"2026-07-09T10:41:32.425537+08:00"},{"id":4786,"source_id":"c45b2f5f-49f8-4c8d-b489-44b4c6800e99","target_id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: c45b2f5f-49f8-4c8d-b489-44b4c6800e99 -\u003e 5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","gmt_create":"2026-07-09T10:41:32.426825+08:00","gmt_modified":"2026-07-09T10:41:32.426826+08:00"},{"id":4787,"source_id":"d7d400d2-aa83-47a2-b61a-55a62369b426","target_id":"33ff67a9-685a-4bc2-8d0a-1ff7bfd0de1e","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: d7d400d2-aa83-47a2-b61a-55a62369b426 -\u003e 33ff67a9-685a-4bc2-8d0a-1ff7bfd0de1e","gmt_create":"2026-07-09T10:41:32.427468+08:00","gmt_modified":"2026-07-09T10:41:32.427468+08:00"}],"source_files":[{"id":"fc2d0cc85e5f2565c3105cbe0584903a","path":"backend/src/models/Ota.js","filename":"Ota.js","gmt_create":"2026-06-30T18:39:29.607957+08:00","gmt_modified":"2026-06-30T18:39:29.607957+08:00"},{"id":"ba84445ce5118798ce7d0da4ecb4d5e2","path":"backend/src/routes/ota.js","filename":"ota.js","gmt_create":"2026-06-30T18:39:29.608112+08:00","gmt_modified":"2026-06-30T18:39:29.608112+08:00"},{"id":"a15b46bcf0be7bfbc82e57adca5be630","path":"backend/src/services/otaStorage.js","filename":"otaStorage.js","gmt_create":"2026-06-30T18:39:29.608175+08:00","gmt_modified":"2026-06-30T18:39:29.608175+08:00"},{"id":"4bb9a8c7ac3763db0746ff90788525b6","path":"frontend/src/views/ota/index.vue","filename":"index.vue","gmt_create":"2026-06-30T18:39:29.608241+08:00","gmt_modified":"2026-06-30T18:39:29.608241+08:00"},{"id":"29e96dbf4d3d8f6e116ec620bbf504ad","path":"frontend/src/api/ota.js","filename":"ota.js","gmt_create":"2026-06-30T18:39:29.608321+08:00","gmt_modified":"2026-06-30T18:39:29.608321+08:00"},{"id":"5ceb781f55bf90055f3005880d06ee2a","path":"frontend/src/api/blacklist.js","filename":"blacklist.js","gmt_create":"2026-06-30T18:39:29.608385+08:00","gmt_modified":"2026-06-30T18:39:29.608385+08:00"},{"id":"5973b5959029669ade01898821960785","path":"frontend/src/api/otaTargetDevice.js","filename":"otaTargetDevice.js","gmt_create":"2026-06-30T18:39:29.608452+08:00","gmt_modified":"2026-06-30T18:39:29.608452+08:00"},{"id":"a84967d9d3088fba02de385738e7ca27","path":"backend/src/models/BlackList.js","filename":"BlackList.js","gmt_create":"2026-06-30T18:39:29.60851+08:00","gmt_modified":"2026-06-30T18:39:29.60851+08:00"},{"id":"4ca379f147f6f1da710371999e08dc24","path":"backend/src/models/OtaTargetDevice.js","filename":"OtaTargetDevice.js","gmt_create":"2026-06-30T18:39:29.608568+08:00","gmt_modified":"2026-06-30T18:39:29.608568+08:00"},{"id":"71a563f23b46da0255a6400402bbfa05","path":"backend/src/routes/blacklist.js","filename":"blacklist.js","gmt_create":"2026-06-30T18:39:29.608628+08:00","gmt_modified":"2026-06-30T18:39:29.608628+08:00"},{"id":"ea6e178b2f0bdcefe2ae8800166453d5","path":"backend/src/routes/otaTargetDevice.js","filename":"otaTargetDevice.js","gmt_create":"2026-06-30T18:39:29.608683+08:00","gmt_modified":"2026-06-30T18:39:29.608683+08:00"},{"id":"30f836e18a6bf9cbcf650e5884375a93","path":"backend/src/utils/response.js","filename":"response.js","gmt_create":"2026-06-30T18:39:29.60874+08:00","gmt_modified":"2026-06-30T18:39:29.608741+08:00"},{"id":"2a04b070bd67fc5059bb504232687d64","path":"backend/src/config/env.js","filename":"env.js","gmt_create":"2026-06-30T18:39:29.60883+08:00","gmt_modified":"2026-06-30T18:39:29.60883+08:00"},{"id":"34fcf7aeb55a9c0224c554fc48545063","path":"frontend/src/utils/request.js","filename":"request.js","gmt_create":"2026-06-30T18:39:29.608908+08:00","gmt_modified":"2026-06-30T18:39:29.608908+08:00"},{"id":"08b8d17e3c09b326687a7bca6789507a","path":"frontend/src/router/index.js","filename":"index.js","gmt_create":"2026-06-30T18:39:29.608963+08:00","gmt_modified":"2026-06-30T18:39:29.608963+08:00"},{"id":"0c25a991664c34b2b36ce3aeed80f4da","path":"DEPLOY.md","filename":"DEPLOY.md","gmt_create":"2026-06-30T18:39:29.60902+08:00","gmt_modified":"2026-06-30T18:39:29.60902+08:00"},{"id":"99aa92df5b8c8412119e9b3cb015f8c4","path":"backend/src/validators/ota.js","filename":"ota.js","gmt_create":"2026-06-30T18:39:56.519241+08:00","gmt_modified":"2026-06-30T18:39:56.519241+08:00"},{"id":"0d26d3961441eb708b69c96f1ed1f7b7","path":"backend/src/validators/blacklist.js","filename":"blacklist.js","gmt_create":"2026-06-30T18:39:56.519295+08:00","gmt_modified":"2026-06-30T18:39:56.519295+08:00"},{"id":"8a4e619bfb6be9c463274f96a2dcb5a0","path":"backend/src/validators/otaTargetDevice.js","filename":"otaTargetDevice.js","gmt_create":"2026-06-30T18:39:56.519437+08:00","gmt_modified":"2026-06-30T18:39:56.519437+08:00"},{"id":"cb4575c8c79b7b9f6ffdac43c2369b95","path":"backend/src/config/database.js","filename":"database.js","gmt_create":"2026-06-30T18:39:56.519757+08:00","gmt_modified":"2026-06-30T18:39:56.519757+08:00"},{"id":"0eb021ef791f4679788fe98caea23e31","path":"frontend/src/views/blacklist/index.vue","filename":"index.vue","gmt_create":"2026-06-30T18:39:56.519888+08:00","gmt_modified":"2026-06-30T18:39:56.519889+08:00"},{"id":"cc4227daf4f2b37377be96fcc492e509","path":"frontend/src/views/ota-target-device/index.vue","filename":"index.vue","gmt_create":"2026-06-30T18:39:56.519934+08:00","gmt_modified":"2026-06-30T18:39:56.519934+08:00"},{"id":"e6564dcd4fbbe8e0f9673967ec4ce3a7","path":"backend/package.json","filename":"package.json","gmt_create":"2026-06-30T18:39:56.529813+08:00","gmt_modified":"2026-06-30T18:39:56.529813+08:00"},{"id":"de74851040d304248e26c1db406458af","path":"backend/src/routes/models.js","filename":"models.js","gmt_create":"2026-07-01T17:22:10.340556+08:00","gmt_modified":"2026-07-01T17:22:10.340556+08:00"},{"id":"387b55f69fa15c066ce97e930d49fca8","path":"backend/src/models/Model.js","filename":"Model.js","gmt_create":"2026-07-01T17:22:10.341127+08:00","gmt_modified":"2026-07-01T17:22:10.341127+08:00"},{"id":"d82c987a9b76c3f9e87e628925cae2d7","path":"backend/src/validators/model.js","filename":"model.js","gmt_create":"2026-07-01T17:22:10.341223+08:00","gmt_modified":"2026-07-01T17:22:10.341223+08:00"},{"id":"c22be0eccf069bf7f87f09ef49070f8d","path":"backend/src/middleware/auth.js","filename":"auth.js","gmt_create":"2026-07-01T17:22:10.341486+08:00","gmt_modified":"2026-07-01T17:22:10.341486+08:00"},{"id":"2d86c0a8ef372bffb82991d44412c989","path":"frontend/src/api/model.js","filename":"model.js","gmt_create":"2026-07-01T17:22:10.341564+08:00","gmt_modified":"2026-07-01T17:22:10.341564+08:00"},{"id":"d5e6b65d89b66c08d62b4c6fc5812f22","path":"backend/src/services/squiglink.js","filename":"squiglink.js","gmt_create":"2026-07-01T17:22:10.341849+08:00","gmt_modified":"2026-07-01T17:22:10.341849+08:00"},{"id":"0d51eea570b0976e572f9c35721fa5e6","path":"frontend/src/views/model/components/ModelFormDialog.vue","filename":"ModelFormDialog.vue","gmt_create":"2026-07-01T17:22:10.341909+08:00","gmt_modified":"2026-07-01T17:22:10.34191+08:00"},{"id":"d2ea644c6ce017e7fa5719f8dc3b2162","path":"frontend/src/views/model/index.vue","filename":"index.vue","gmt_create":"2026-07-01T17:22:40.374761+08:00","gmt_modified":"2026-07-01T17:22:40.374761+08:00"},{"id":"d1931152858f662828e1f616637bf7c1","path":"frontend/src/views/model/composables/useModelList.js","filename":"useModelList.js","gmt_create":"2026-07-01T17:22:40.374835+08:00","gmt_modified":"2026-07-01T17:22:40.374835+08:00"},{"id":"3a38f5cb99e9c74ac72f7fdb85a68c44","path":"frontend/src/views/model/components/CsvViewerDialog.vue","filename":"CsvViewerDialog.vue","gmt_create":"2026-07-01T17:22:40.374977+08:00","gmt_modified":"2026-07-01T17:22:40.374977+08:00"},{"id":"e7043a827f136d1ac2e5dbd1d328712c","path":"frontend/src/views/model/components/EqCacheDialog.vue","filename":"EqCacheDialog.vue","gmt_create":"2026-07-01T17:22:40.375017+08:00","gmt_modified":"2026-07-01T17:22:40.375017+08:00"},{"id":"f05f0f2d2810725d79b63a122d02f104","path":"frontend/src/views/model/components/PushProgressDialog.vue","filename":"PushProgressDialog.vue","gmt_create":"2026-07-01T17:22:40.375054+08:00","gmt_modified":"2026-07-01T17:22:40.375055+08:00"},{"id":"8d94303e4c3a8e363f3ac76cf489cd33","path":"frontend/src/views/model/components/PushViewDialog.vue","filename":"PushViewDialog.vue","gmt_create":"2026-07-01T17:22:40.37534+08:00","gmt_modified":"2026-07-01T17:22:40.37534+08:00"},{"id":"3c92914c0d677b2f5ce5e244c4057020","path":"frontend/src/api/brand.js","filename":"brand.js","gmt_create":"2026-07-01T17:22:40.375633+08:00","gmt_modified":"2026-07-01T17:22:40.375633+08:00"},{"id":"8888802098bf9d46f77f4bb95811e62a","path":"backend/src/models/Brand.js","filename":"Brand.js","gmt_create":"2026-07-01T17:22:40.375862+08:00","gmt_modified":"2026-07-01T17:22:40.375862+08:00"},{"id":"8d10949b317a4f03e8624b7f4ce46d77","path":"backend/src/routes/brands.js","filename":"brands.js","gmt_create":"2026-07-01T17:22:40.37608+08:00","gmt_modified":"2026-07-01T17:22:40.37608+08:00"},{"id":"16acd73277fffb69b4ee4eee82fe6b9e","path":"backend/src/services/measurementStorage.js","filename":"measurementStorage.js","gmt_create":"2026-07-01T17:22:40.376118+08:00","gmt_modified":"2026-07-01T17:22:40.376118+08:00"},{"id":"27717884cd8566480cffa4947e7fa6c5","path":"backend/src/services/eqCacheStorage.js","filename":"eqCacheStorage.js","gmt_create":"2026-07-01T17:22:40.376158+08:00","gmt_modified":"2026-07-01T17:22:40.376158+08:00"},{"id":"65741f66e633d4e5aedac59d5f27af4e","path":"backend/src/services/curveClient.js","filename":"curveClient.js","gmt_create":"2026-07-01T17:22:44.383305+08:00","gmt_modified":"2026-07-01T17:22:44.383305+08:00"},{"id":"c2fb718733250824159ce8cf12afd505","path":"docker-compose.yml","filename":"docker-compose.yml","gmt_create":"2026-07-09T10:38:57.816701+08:00","gmt_modified":"2026-07-09T10:38:57.816701+08:00"},{"id":"cc9ec3f93f58399d7b151909f2ec339a","path":"backend/Dockerfile","filename":"Dockerfile","gmt_create":"2026-07-09T10:38:57.820609+08:00","gmt_modified":"2026-07-09T10:38:57.820609+08:00"},{"id":"33b165658d59648b4948434f6fbfb5a1","path":"frontend/Dockerfile","filename":"Dockerfile","gmt_create":"2026-07-09T10:38:57.820702+08:00","gmt_modified":"2026-07-09T10:38:57.820703+08:00"},{"id":"8e1ffd245729c5890eaf9ba413624479","path":"scripts/upload.sh","filename":"upload.sh","gmt_create":"2026-07-09T10:38:57.820773+08:00","gmt_modified":"2026-07-09T10:38:57.820773+08:00"},{"id":"3e4b16d004afe7ec92f11740f4670cf4","path":"frontend/nginx.conf","filename":"nginx.conf","gmt_create":"2026-07-09T10:38:57.82086+08:00","gmt_modified":"2026-07-09T10:38:57.82086+08:00"},{"id":"e0a5c618f9dd8b21f44efd8b20afe8fc","path":"backend/start.sh","filename":"start.sh","gmt_create":"2026-07-09T10:38:57.820936+08:00","gmt_modified":"2026-07-09T10:38:57.820936+08:00"},{"id":"dda8d3140e7c6b27ef704a18ce65f764","path":"backend/restart.sh","filename":"restart.sh","gmt_create":"2026-07-09T10:38:57.821005+08:00","gmt_modified":"2026-07-09T10:38:57.821005+08:00"},{"id":"104fc82e13cc8710958534746cc1a548","path":"backend/stop.sh","filename":"stop.sh","gmt_create":"2026-07-09T10:38:57.821074+08:00","gmt_modified":"2026-07-09T10:38:57.821074+08:00"},{"id":"67a9bd52e59c942bdcba82424dfad693","path":"backend/src/config/loadEnv.js","filename":"loadEnv.js","gmt_create":"2026-07-09T10:38:57.82129+08:00","gmt_modified":"2026-07-09T10:38:57.82129+08:00"},{"id":"b00d4299053e146a68e3c62d12971e02","path":"backend/src/utils/jwt.js","filename":"jwt.js","gmt_create":"2026-07-09T10:38:57.821365+08:00","gmt_modified":"2026-07-09T10:38:57.821365+08:00"},{"id":"de795dd4b60b0e5d7f1c9debf546f443","path":"backend/src/config/logger.js","filename":"logger.js","gmt_create":"2026-07-09T10:38:57.821432+08:00","gmt_modified":"2026-07-09T10:38:57.821432+08:00"},{"id":"f26235e5c56be8023300d786bc1e4656","path":"frontend/package.json","filename":"package.json","gmt_create":"2026-07-09T10:38:57.821626+08:00","gmt_modified":"2026-07-09T10:38:57.821626+08:00"},{"id":"57383432d4947aef7e94d2e1da956513","path":"frontend/vite.config.js","filename":"vite.config.js","gmt_create":"2026-07-09T10:38:57.821692+08:00","gmt_modified":"2026-07-09T10:38:57.821692+08:00"},{"id":"d1a881152b5b5a7b44849b8f263921e6","path":"backend/src/app.js","filename":"app.js","gmt_create":"2026-07-09T10:40:13.079549+08:00","gmt_modified":"2026-07-09T10:40:13.079549+08:00"},{"id":"0e3236e18534c268515eaaf86a8720e8","path":"backend/src/config/redis.js","filename":"redis.js","gmt_create":"2026-07-09T10:40:13.079967+08:00","gmt_modified":"2026-07-09T10:40:13.079967+08:00"},{"id":"c966b08c46eddb517165d22b1fddeb43","path":"backend/src/routes/index.js","filename":"index.js","gmt_create":"2026-07-09T10:40:13.080131+08:00","gmt_modified":"2026-07-09T10:40:13.080131+08:00"},{"id":"116e0c968fd0a8e76c35b5f460896759","path":"backend/src/middleware/bodyLimit.js","filename":"bodyLimit.js","gmt_create":"2026-07-09T10:40:13.080276+08:00","gmt_modified":"2026-07-09T10:40:13.080276+08:00"},{"id":"a8eb0b5dc159c884a13f0c9496a4d930","path":"backend/src/routes/auth.js","filename":"auth.js","gmt_create":"2026-07-09T10:40:13.080502+08:00","gmt_modified":"2026-07-09T10:40:13.080502+08:00"},{"id":"b452aa03aefde5a8f545f178f4ad3119","path":"backend/src/services/userBootstrap.js","filename":"userBootstrap.js","gmt_create":"2026-07-09T10:40:13.080585+08:00","gmt_modified":"2026-07-09T10:40:13.080585+08:00"},{"id":"e241758e72afcc402a5c35f2d0c631b7","path":"backend/src/models/DashboardUser.js","filename":"DashboardUser.js","gmt_create":"2026-07-09T10:40:13.080638+08:00","gmt_modified":"2026-07-09T10:40:13.080638+08:00"},{"id":"cbc5c3e499ca921f7fe31857f4e0033d","path":"backend/src/models/index.js","filename":"index.js","gmt_create":"2026-07-09T10:40:13.080694+08:00","gmt_modified":"2026-07-09T10:40:13.080694+08:00"}],"wiki_catalogs":[{"id":"dd61923f-65f8-4e98-85f4-0e0a0a649a27","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"项目概述","description":"project-overview","prompt":"为耳机品牌与型号管理平台创建全面的项目概述内容。详细介绍项目的目标、核心功能和技术架构。解释系统的主要用途:品牌管理、型号配置、OTA固件升级、用户权限管理和分享码日志追踪。描述前后端分离架构,包括Vue 3前端和Express后端的技术组合。说明项目的业务价值和应用场景。提供快速开始指南,包括系统要求、安装步骤和基本使用方法。使用与代码库一致的术语,为初学者提供概念性概述,同时为有经验的开发者提供技术细节。","progress_status":"completed","dependent_files":"README.md,DEPLOY.md,docker-compose.yml","gmt_create":"2026-06-30T14:04:20.633103+08:00","gmt_modified":"2026-06-30T14:09:11.174236+08:00","raw_data":"WikiEncrypted:0MI1/XkBoMl0lTbK6t0Cn/+8FdvqrJ62ianMLvZj02elJtBUgH0Ns0veIx1WPtM9wwkxI+/XAqHLxJLlHB8wV7ojrH0+b4JMz5OewwhBN1ELEwwkQElYbXolx+YIQM0o2FbBtwH/qJtog2gIHchdNwll6Nf1h+JmY9opyg7JsQs/7cTSSrfUmluAQwFCDAvmu/tGmL3XeCzrrmkOI88h7pvsgL2niGJR0xRh4Lglcxbrr0NK4gOQ45RwQchyzpGTB8IiO3XRTcNftONnEzDiJzVODyKOjZe52ws6XblEwu77xu3aef4IAzXLIbyoTb10Z/ue/QVjfqwkoEB9u5ciW4cJImri5dT+xVeLMwEADbmq8MbYy3QkUi4lCv+02P52HSrp5PmR0p110l5NRD3wnUyJ4H3excBt4DYq/WkTlWRnu7SL4FLbChfDRXox0FZjbrSrmstSyjrqOQs0i+3DWG1cAoapA34zEKMkiP2oxZKPn+7VEJ/X8+B7JhsqroKmAs/NykYkyA78uoY/rRIZzhCoDGERQV+E21xUWuvlE/M6M9LjVSnEkBww9yRnijToD6+usihE9d0zbv3MzXNqNqaye4++Ko+2iPoV2eV7lIQXwMto7c2DhmZGyJ5OEE45X826wBdjL/sO1X1QPuglr4HEFXnds8hBA4bPAqVmgptC8bfkf03XDZOL4nlmljZN+Kip5CAYgR9K5mKRD8ZS9gGT6ieJ0jbcHoo6kysaXa+jBICwzeAEQzmvxq2JqEukLdcKXOrZ0CgeeU8SADva7E+gvKzvS/4Zrbv5UEM8NkYcqeX4k9ERuVUjy5J96C0S2GCNR5OPStfW2tKkrorTKngImbE1l0f1/FI2ZhI5sSjUkzAZIKFeXBJpA1hZSNME+E+UIJ+RvcsprmVx62wG1PlwMBeEhu/9cGBj+i+qI6uAlGdhybWAqGSSxsLwdqCiwQEcylelO7fNlSrnz7amb1JuqBfUynCEzpnlNkv6l9jioHXV/fnJIOihiNh7v6/AMwtMvmSnr/j1oUAuJQuDAW149PMRpTre8XUtulayHzPj4ZY7R+4VpHR5kmYcTNmUnCf7Q26XVU6NLlv9Qu/gvQ2TPuGOKCs579fz3jbJC6rn+mQXlkz+vQFu2x4MrUvomEqqCVV9lv7ORQqVPJuJCH5onWcX84PFxIMq38bqGCQ="},{"id":"bcc45977-c058-4033-b0b1-9fd4cd7f4443","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"前端架构","description":"frontend-architecture","prompt":"创建前端架构文档,详细说明Vue 3单页应用的整体架构设计。解释Composition API的使用模式、组件层次结构、路由配置和状态管理策略。文档化Vite构建工具的配置和优化方案。说明前端与后端API的交互模式、错误处理机制和性能优化策略。包含组件通信模式、依赖管理和打包部署流程。提供前端开发环境配置和调试指南。","parent_id":"70ba09ee-60a3-41f9-bdda-3cb904cb26de","progress_status":"completed","dependent_files":"frontend/src/main.js,frontend/src/App.vue,frontend/src/router/index.js,frontend/vite.config.js","gmt_create":"2026-06-30T14:04:44.763098+08:00","gmt_modified":"2026-06-30T14:14:52.87794+08:00","raw_data":"WikiEncrypted:rJ/rIw0gVau8jPGqKFBAsMR2XDSFypkKHZQ6YBOgiEB18etPNKW/AKXxDO5P260N8cfR8zM/FPLMKEziA2ENAEHVfReiRH5pH+fgWYT+2jYTA7RQlp0TufhpU942Hkc/ujxUhYq+V3QzFALbuwWzvx0UL8Xl+TN5xmZ1UNdZO71Qogp53zx2hXdFdKaPDrr4z+LIar4k3xztnrU6feh8nqiV6INc8alIAN875sC2qpjIyq5wlayKyIdU0M+5DXjHjuV+3QmKO4f+JccdKivcFYhs66YKXadO78U+Sx6jpT0RqNqSmB5SNJLPpp6YbwEYtig2YvqVxHgh+FtviAJo+3aiePQw/TkCYVV02sx3HchcKY17yohkf/cGQMfHWKjBC7ZyuuD2WOHobXyyVuIuHVDKntJ2SjXdR7GaQPDZaxSWpeHYcn0+Z1hICSDDP4TfjuXCKtOx01urOs4lYqZsN2SPy3LljUhl9H5uWpEV3VH/LPqTWQ6MdLG8aye4mMcCsw57e+goYu3oRkRf7qvVOAVztMhQTkCgcUPkiPfB+YdqPMMp430Bqr55/AYFsFD2GmYltN+8OgBqLdislp5mudOEF8uE6Awfn0xbNJNePcUD1+Esx+V+RGIXYVMeRXcagKyoftiqtJy7zjwWBmr/oTG428St7QGB+Yha7dSK7y6WiOZjdDUs5Jm354mpkojurMNDW9Pw3s7Rt24W3JHN+Z8iSUq9+Cr2kaQyNT4G8XaqIe0s8pFYoGeAeYcZvyolp+0ZZ6pAH3tyuVe8hrE+3+/x/dOKV5WsDc7Jul/RY0qtkjt39mvXPzbxtMbwGhahGz0xRVYJMlhMkcN/dqJI4Jj0QtNULaonjkU/joC8aUC2Vfa8MFrpfwSTVytGIrfPAvxbxMYgPvqi8KSjqjV5lpDGUcYA+DMgqLOv7mPVrPBosl5m0J5Fitt9KmR1j2OOr77AyteAWJcBvK/idJN48LdNVtAYqErjTGb16luVO1yW9sDX8VXCKzUPBQ8boXaJ","layer_level":1},{"id":"d34906db-4455-4481-9512-b29115655378","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"认证系统API","description":"auth-api","prompt":"为认证系统API创建详细的RESTful API文档。记录用户登录、登出、密码修改等认证相关接口的HTTP方法、URL模式、请求/响应模式和认证方法。包含JWT令牌生成、验证和刷新机制的详细说明。提供认证中间件的使用示例和错误处理策略。文档化密码加密、令牌过期处理和安全最佳实践。包含常见的认证场景、客户端实现指南和调试技巧。","parent_id":"7e9246a0-207e-47e8-bc26-b9d36ae6f2f8","progress_status":"completed","dependent_files":"backend/src/routes/auth.js,backend/src/middleware/auth.js,backend/src/utils/jwt.js,backend/src/utils/password.js","gmt_create":"2026-06-30T14:04:55.151403+08:00","gmt_modified":"2026-06-30T14:15:47.981318+08:00","raw_data":"WikiEncrypted:I6KYYMxpAemyHFwJy5bny+FhLrJAxcHi9isgLCIR7jKgk+RtRRSImYeiedSZDcwnIMYAtWgsiGag9xYiTBcpIby59MhEIf69Ge8Ey272sEwv4rLKoaCbet71KAMUN4denOOfuaKbrwbXK0Y6FbehkE+pCWtq6ubo7or5Tl+PIwwX3Vha0M9C0aYlIBIXgML+2LymHuPdeYf/f+yy7ivDCl4nIRTcM9C82jpKialSDtNyDOeJKcvnuY7WboeTuADzL6A5fX/baERJkVBnSdbIynmMfReneVt5JAopJ+2NyT22CaFtr2L3C+DKZ74FDaU6iC/85eg42OZ2JgeBZXiffstckEhj2B8H2dLfxGDmQUebrfF6cqty5biCE3zW8cU1QI3+bPdfGaoUhj5xFzd437cjGI+IAkNffhuBei52tU9+6Uyp/Ym7bEGnUpxwS1OOijeLKUstO9d9z5MAs5Ip5+HVcliUeAVujyIwd76cvmbhnuaspCX23T55qAvLoTJKWmDBZaKzPE6hCpNAHPfq9b7tOLID4W0tvfFPZnzGWsZK4LhJHC3i/qAGdXsXDc/JijZ7xvhJMYqJMxcoZ4hdtAdv1YjL98AOd++9n9H0hDplAqDf638QwPeaKC6ogkEw5LCWjJFC3FbT+FvpZTxN7RRHFPVNndBrtwSEJR/6/EfA6+9lpuWMXHNhL2Hl4GsMybpXzg4+AihB6Xy9GPv5kkG1enLqgCaaQJ1blr2eb9rUYLvCkQMW+DRqPPQxfniLGGB5WuUkzxn/NzDZ++XhFvmvW6s0+TPiCNMxhx55Jd+O1ta0CeYAptKYmjSJmlT2XDRO/aqedoSZyzYc3L9gtYD4V6FRBsTtOKLyB22oei614ORfyRcALpx0q5/EeyLHYVN0UM2Xsh5n08o9+mCzjkPjSVfG9NIIBhGUTEj1i4dKxB4vM4hLk3x9i8HdfoZ6f4+3iHGqQtHSFId685Izyli748sL55omKo8e0lizEKTrYd5W2vZUviHInfD/D2cIfwRtRBEksNW/6ycVp+dc33cqX6BIN1uwL7uMBhCJyrLl9TbEaEDKPHaGmi4jx9W+","layer_level":1},{"id":"0f657e8b-77cb-4604-81cd-d3e921d28e21","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"布局组件","description":"layout-components","prompt":"创建布局组件的详细文档,重点描述主布局组件的设计架构和实现细节。详细说明布局组件如何组织页面结构,包括侧边栏、头部导航、内容区域的布局方式。记录布局组件的props配置、插槽使用和响应式设计实现。提供布局切换、主题适配和移动端适配的具体示例。解释布局组件与其他页面组件的集成方式和数据流向。包含布局定制化选项和样式覆盖方法。","parent_id":"aa2583bf-2c6e-4792-b794-1563db547d08","progress_status":"completed","dependent_files":"frontend/src/layout/index.vue","gmt_create":"2026-06-30T14:05:00.056535+08:00","gmt_modified":"2026-06-30T14:15:24.296404+08:00","raw_data":"WikiEncrypted:x3LcpLCzT0KOPxd1xeYY3c7iq48qz+WPAPm3x7MWgVl9Ka0y39BYIpkYIXIwXtcEkjLNRqcKoI34Ay7VLfvIoeNd0L9KiPW38nGEktOH2kdRoWStqgftHHDZZMeM3wTiHozP2mtq/BrgXkFbslneMaOqL0jcIeyYsEzK3XOf2IWybFopdsfudEA64erTFyD7rwb4i8M4/OQlv/7phzTi6ud+DXkigQ4QxPbXoU8Pb60EBp1eZghvTXVMFb5rlp+3kbG8uerYS+ciu/fjCScjFieZOug+uuHKkFaFYBj8Za7rmsWg02byP4r8E5yKIzSPDy+NZcyXTRKFGHYtNCtj4aueEWW2oLGYR0/nYHoeMgwdpaKxBg9Ye0gbrAr9gQvUxrzpwdRrUEUmPdp4oTmO1+y7PWruf0IGT+IA7KRfCxZ03rVNE1s6b72zwuUdEps8hXGWIMTqoYJYcYh57cVQj9l1O153yZRu3x4+GhgBW3fblpCW+bEz14xJrftnR/Qve4y83EkfHuQurRD/YlwaAXS6/Wd0aG06MsRzr2xJPgKjLVxTtAsdz5BI8ksED+Rpxs+vKy/CDOvvIUhAx1A0xnzRxDB+ZCR+u/EilCFFyqqqZyWB90BOY5jlYG9Ci2wONLki4Vjgwz6irpTnjyAwev4wTO/8aLJVBupWUqU5MB6mAreomYWt8GYTQqybbkozb5cbV5rNhZTZql0EV7u9+K4mxe4913Os4q+mI5AbzsqzM16xKoV94kRhPaiubGHpXhh9bVmMFx1DyDRVXPlu1zbbRnGMgbH1bIp5FdYRH38HFuxpXMeHfBmyWq2CIVOuMgJQZ+WFbqZPfHN+LjcAOYmhW/MnaBS3TKjqR/3lHriai1eaX6gHyHcqjUCh/6/IwJ311KB5KiG74iE+EWk1a16r+k5oTkTOUMNGX7YnwoVLs+kVHv1fnD14Rwf3OBrXEKFkNyWE9mPL5SV18Yedhg==","layer_level":1},{"id":"7f36202b-af69-4fc0-b62b-a57e415deb69","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"部署指南","description":"deployment-guide","prompt":"创建详细的部署指南文档,涵盖首次部署、本地构建上传、更新部署等完整流程。详细说明服务器准备工作、目录结构创建、环境变量配置步骤。包含Docker Compose配置说明、服务端口映射和网络设置。提供上传脚本使用方法、手动rsync上传方式和构建启动命令。文档化健康检查、服务验证和常见部署问题解决方案。包含生产环境安全配置建议和最佳实践。","parent_id":"a3ddc4e4-116f-4781-ba9f-17c85c85396e","progress_status":"completed","dependent_files":"docker-compose.yml,DEPLOY.md,scripts/upload.sh","gmt_create":"2026-06-30T14:05:12.310696+08:00","gmt_modified":"2026-07-09T10:38:57.853758+08:00","raw_data":"WikiEncrypted:XJiAh4Py4zdOGBbpygpFvD9tFWRXhE8ByO2bese1C7/hiSyDP63Hi4lNolBptuDi0rkufCwmSEKqlDrvAKJJ0CHJKSQu65F2ZJGTHS5+0aquQYqbIX1jTur1EEy1bLqJwMY6+/P2MxZY7G5CeenUGTPKiu41iexQdSV3HBMyaJaX9j+VPZ8aMJ52RIzjAuUvmqIpIVSdRD4RA3/feZPATJAI0VororNal2igvtXESzemBT1YHCKSLvgwHKVYunYdXqmh/kF+QiwWTbxNdEdf34p9mjvgcd+GcJkcke258QK2t11aShimarSMnBOerDls8Css3Wz3P1HZc0nSA/ZXWDRUEw3f6yVtft8JAQNFiGn0mFkGUSYd+/MYkxEJBqKaRuF9Pfk1hQU/MkVEnb+bnPdM3DJ38/6hfiUxrBR7yWVd7P119EuNOBVSMj9amzHD0eveVyM9gSjrsfn4cGY6LlNC4IqJg+TxSuhMDhMBwVr9tE9QqFc7Upb5NGNYWy1z3yl14Zbd7la4Og1AkQ+7yi4Pd3hggwJp7acT+fMVCgnggiAofm7UK9HZL20djPhzIklr3ShaDx7IwC9iuaI6OMuLkV2Uvs3N52XxUnD7WzRTY5Y39hRiOpBzOUM0TXlyULEx9OpMhFkEnC/TtImyJ4ddYgmYfFklb3DmIbWuMpEXwi9Ftms0/uvarMhRPLBTV+VfuaohAXNpeV5sVfyzCRoeBYM/XyxHGqt8MaajP+WUSSL4LpXTxio4vrA5+i42uX+HrQ++CWqXHkJGe4leQrdf7P9jL4UENoQQkJHXKVsmCm055M2AedV3aBOI9XhaxCP5/JjheQ59E/GQhR8/wPihofEhQw24e++2FqezRu+YsK80H3STrrBu0h3dVbFl6+7Up/VQ2xg/hy6Dr0gkThC/JyYfXjWM6QO6x/XVGQzp+aw37DmQhSsLBh8scaaQmXkTm5YpVDb56JT3i5d9TL3VOIqREjJcML20NOTyM7g=","layer_level":1},{"id":"dbe5d77f-6f4d-476c-88cf-797b80a11a11","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"实体关系设计","description":"entity-relationships","prompt":"创建详细的实体关系设计文档,说明Brand、Model、Ota之间的关联关系和映射策略。文档化一对一、一对多关系的实现方式,包括外键约束、级联操作和数据完整性保证。解释ORM模型间的关联定义,包括hasMany、belongsTo、hasOne等关系映射。提供实体关系图和实际的数据流向示例。说明关系查询的最佳实践和性能优化策略。","parent_id":"0bb34dac-0e1a-4cce-b41d-0194eda77f79","progress_status":"completed","dependent_files":"backend/src/models/index.js,backend/src/models/Brand.js,backend/src/models/Model.js,backend/src/models/Ota.js","gmt_create":"2026-06-30T14:05:22.620322+08:00","gmt_modified":"2026-06-30T14:18:01.587347+08:00","raw_data":"WikiEncrypted:WnER6MhWFG6N6U3R1m3zi9/PE7USWRBJSA4m5rdVd0roBuaFoWjKznz76Q8kOGO4tNwaCSIDcUIRQho0AHAeCEii3WPT3hVXrhQQYjEzvKo6SYnxMHFyoqyC8KkItViNO7QMqwUXCOqIqkKYJbtN9Sajekq73kPvPqvY8BHSNnqfwmaK1orPvHIjh8Q37172/jp+exIQ+FflmU+mfYsQJ0KuorznohYsQIf3qlfg8KiwSW0u0L8K99eblOKDbNN7MYtC9qf0iFzdGSOSwR4u5r4gtdCB7SAZCvwuy+HaSOgXF4oQDX+STWKFSq2xGuZf3y54WkpwBnQtNhvzIQLDsBrIlz9tHbHjMaQwU3a8HTu8JTO3mYJ3BTiKKC+jsgxGTxRRRTQ9PhQo1waFlJnCSVsR+m30u2zHgq9G3gwORjBImo9vcEDistxC+xSWMBsfJzWlXUhx5EjJYrZ1oHpgxmUGyLoTlfCJvJoNqs+vQLDuVZ6jd6juOPkJ7sanKd4TlWRy4lLmetztJb8ZAKPP6R4RV0YcU4IV3Lr/Tm0KzcHdb84aWPsI0EgbfUkJAWjCOieqWTHBE3qfwchsJYJqR3RrOuH+/OgRl1A6P/5XR2tG4/LwC5N356o2YR38E4icxdWGirKniBpii3TVWrqGEkWMsUbRenNq6PCyT/kcGEb1Mn+/c4b1Rb80dNweaNWDSOLmHQFMvwtgxh48I7NXGBAprbcEP+kwn8U6cf+oo+LDgHKyTDMssoP+fUOnruX6Eq9vx3pklQUfost9b2918rL+L5N9/tKoCpCmXHMgjuEE94T77bU7dXpcCRjh6dza/rLHJfo9rcOESul7Y0UthoahAetOF8CRzabuRNfSA3+/EgpkViiYcAqUOfJO9prMaKspC6udBaqAb8GX20oPvVBnGdehFhjW6ZNUKwhOOyBRpudc+qhvrCn14VSOV60QyhfWkkOtqy6adpmbqDfDn/boGiahg8EgnrKUin0NLy9vZH/v3RdDSgNXAhCHJng3as9wGB02Lo7l/LIlX0/+Pw==","layer_level":1},{"id":"1af0f0e8-0c53-41d7-a894-47d9cc19d4f9","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"用户认证系统","description":"authentication-system","prompt":"为用户认证系统创建详细内容,深入解释JWT认证机制、密码加密解密、中间件验证流程的实现细节。包含来自实际代码库的具体示例,展示用户登录、令牌生成、权限验证、超级管理员权限检查等功能。文档化认证中间件的配置选项、参数和返回值。解释与路由系统、前端认证状态管理的关系。解决常见的认证问题如令牌过期、权限不足等场景。使内容对初学者易于理解,同时为有经验的开发者提供足够的技术深度。","parent_id":"08dd4c40-3fd3-476c-bcca-4c8687a8d863","progress_status":"completed","dependent_files":"backend/src/middleware/auth.js,backend/src/utils/jwt.js,backend/src/utils/password.js,backend/src/routes/auth.js,frontend/src/views/login/index.vue,frontend/src/utils/auth.js","gmt_create":"2026-06-30T14:05:25.89264+08:00","gmt_modified":"2026-06-30T14:17:38.563207+08:00","raw_data":"WikiEncrypted:uxAckj1IXK2TQH//kEdeBLXlO/kfAAqZjShpoDF/LwxjObF9jWClg1BjbeyHIZSgS1kW1/rwYWDBEsAU51nyKaMjqaYMMCeAu0tGWpZIc0izGBmzwh6bfOUHboVu8bTGN57x7Ig4dNdDghiUoJkJKQX4Ys9KTK8TqI3fswjZz8hglaQGl4NeRcIcMv/X6D2PrvWe1qVFdZ0SPTExOhFw3RHcXIB6SwncZI+aMeqX09v6wHL4Cp5stm7AWL+txJygRSaQYujDcE62s9wfDJweKf/BQ/zTEigEdc5GbzkMnf5NFxmbi8jVDO7wUEofR5O+0G7fH1Wf3oAZBMkevD8TNGju735s+O957j0f4XKsnnX9lsLIvYZtW3hwTKNBeBoujNYJuApW03clJesocX3Wf8ww8m1IO2jArAjxNy5Kz5feFkFhHiCG8MEacgHT8kg3E7ZzxyNGQ9qNkHcWapTIQs0bhq055rPjXYps6gxDBnOgFKy8B8vJf6NOsu03pfZ3uD3dNNqpYwGSW0z6lGvHkDJd2fJxAFHPmnmL4angdyPotlYsK94FpYGrRt1S9x1phZ9rGSahcTUMsqDcT9Yf+KRzNIDRSVSA32KNeKkIlJ7KkS/Wm0jraxDEOETgabNiprZu9IQc2rO+qgL11sXS2ztPP5P+se2fpoWR4kk1uiZ47ZmEOozxu4PiysCNnQaMA8ANHI+wEeZnkX2tQbrDymKi+ns1ZC695WMnYfGVqqzW7ztwv6hcCxyg1h0cCTV85FVN56EYr/FayPkYHDGEZZVV5ZUDvhVDpwyR3SbeAFQjsbJ0kKXLG89LTiuNzGgRwI4aA6bxge2JglaT1f+mtyXbZSnfdajBzphQGhsXB18VE2IXqwfYJigbP5F/u+e6mB7sN63cqVRQ1ydNmvawS0ojJpoUdPJp746BGGnKgHcDOaskuD4puwZFDNJVLFQql+zdoIL74vkQKXIqKhlm4hvnkOFZ06ODxcJWJqQNMT4gzixw0eo6Edc3t7Gz3J/XGJn+Lm4JoYBdAk0PmDWtQqqAjKqm9ftEqhlBb/nAlZxetLWvyg1railkNORM+louiBsqTKmMqeuxFGvIMxTWvlU0z1uFTBuzUgVEKqUJRQL7XYgPhEQngiJN01Bm3XHt2zKUINah98fqoWiyyAHyX0v/dIbaMiyXnzSIZLIBWZDZL/N1ypvWw8ffozNBXfZhGhoE0OUp+tItqNmnVsYGvwtU1dFJK3ZuLGGkiqACmSRg+oIqURaokDzn4B10iFNXdloxmOHr7bgSoCjlSjyXfECCg+t9GlrWtFGusJSHzWiRdg6rJ9Rd1iTeSafPGd1AD2mZ1bTOdXmS6IT2utJkj4CIc2gIkIpnlTql1NbuOfDA4NTL+t/649wrNxdl/tfq2+8LlsB48ND80XGMdAuipGWEYynvogLDZguqmDXtxMo=","layer_level":1},{"id":"8f0760f5-ef8b-43ef-8fd0-7c6d1f693193","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"侧边栏Logo组件","description":"sidebar-logo-component","prompt":"创建侧边栏Logo组件的详细文档。深入解释SVG图形设计的实现原理,包括渐变色定义、阴影效果和动画过渡。详细说明collapsed属性的作用机制和响应式布局适配。记录组件的CSS样式体系,包括Flex布局、动画过渡和响应式断点。提供在不同侧边栏状态下的使用示例,包括展开和折叠两种模式的视觉差异。解释无障碍访问设计,如aria-hidden属性的使用。包含性能优化建议和自定义样式的扩展方法。","parent_id":"eb78ed75-b786-4b43-ba43-58a5ea8a23a6","progress_status":"completed","dependent_files":"frontend/src/components/SidebarLogo.vue","gmt_create":"2026-06-30T14:05:28.622668+08:00","gmt_modified":"2026-06-30T14:34:09.996181+08:00","raw_data":"WikiEncrypted:fV4HuQ/J1++1YCiBadzlA/Ad9WGt57Xw0P0O4e1aWBZ8j7ewAMLGa30PoRyFOz3WPxWhYzFV771iPkiUIngbYLg/7p5O4HeDzmBW51nlwAWF6h03zUwo1BVzYo/fjr3K/vHHffvWiWcvf6+/Pi/zO1p95ifW1RHBzkGDc4cbtCFnI4TExB7L8RgFPd4xt6LWCmL98hBAGxxSmeVmm2WQY1xGJjqXhRpxokLo77b3Ez1EWub03MklHAlEi4JLgZCXeG0AZMzGl2EApA0orVb+k1nPHohU/sYPxOP1g77oqTo0L6eRrJYqLVzXM4dPj6cJPfoiL1VO/2KqEXmJqEEcvA8tI8Vv7fNcUxexyGaVLP6NrOdFw7GfunFw5t/QC4hNv3P7MI8EUJYJ/PidrenCXzv2FJL9zWw9IsaJbDglurckMqQQka4/AwPlhiPqUP3v9KzvsSqKogDiv94Gx6K87tIpDsodProyn5dx5GKnJIQRuNQYX1lpPTVqMQ2OlAD5KvAnp1VHGyVMPixJgwRLl/SX/Y/mmbAA3QAZC3s3LJSW/Hh6OogBVuThelQoKNB2/rPZ/yEgXcFUj+H9At4yNojzuBdqqMakOsrfs/1WsYmEsUXZ/HgLkCJR2T6jL0BiRhXisXcj5fbzxADw26kbKBhW/suo/JwIzITcMgr+B+vwdmIYlROk2zRWQTcSVdtpdouiZLy50KNTRIQYgqiiE7nEL/p885dM13alTVH7cRjdXV993ONl6tRfBQnS9o2VAa9B/IoHSXQjblj73awUecvCir7Ougv3SPoE8GPBJakIDBiVOGlcooQQjVelDtXjn5zyuz6cLPIZF9rqakHJT7KHTZrM2+Wi+TKoGF4IR0mEcinmwEe+JNRIkItConCqwWx3Ekz+kabb7E1CpVm1yA8794xHHJtDSak71A7IL0KO7cUUC0tFTuy+c5W/vuZfoZX4oiO0lX2SvlQGYkguIQWABQjuuCjerUkGgiScVohUoSA1vJVnraaSNsC3edoxL+W4+juGOZytBN0HGZS0U6a1asEka7fODrK/yhDNJ2XKz7+pcu4DwgRtUHUM26FEG84uR2EBgZRiuI2c7YA9Ag==","layer_level":2},{"id":"105cfe1d-aeeb-44c1-ac3b-6550f2c7a307","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"首页仪表板","description":"home-page","prompt":"创建首页仪表板页面的详细文档。全面介绍首页的功能布局和数据展示机制,包括欢迎信息显示、快捷入口卡片、今日新增统计等核心组件。详细说明首页的数据获取流程,包括getTodayStats API调用、数据格式解析和状态管理。记录首页的响应式布局设计、样式定制和用户体验优化。解释快捷入口的配置方式、路由跳转机制和用户交互行为。提供首页组件的生命周期管理、错误处理和性能优化的最佳实践。","parent_id":"f00798b7-c49f-4260-b9c1-d1ee413b030a","progress_status":"completed","dependent_files":"frontend/src/views/home/index.vue,frontend/src/api/dashboard.js","gmt_create":"2026-06-30T14:05:55.602204+08:00","gmt_modified":"2026-06-30T14:35:15.434226+08:00","raw_data":"WikiEncrypted:l84AvQDvM6QBXs3c27I7iRN2eqIKPqqnLN0fpl6W1NXbpSYLO1ugdN9q3vfdxcOimx9t9/zu6SUc26bwQ+elEbS+I0PRYDRL4shhpb72Ma/Ng8alFtrqEXILpNlDWRs9AoWzQ2KDmoixk2jOewMEH3JllHtJ8DUYUZNp06dby1l7BRtvY2mOkugkoAohYAjj4QyuCm4GXiALmsr7NFR3LC3O0kqbZE21xaDZXflITmtjSkBHJVQtkVH23ciBJVtJx7Co85atOo33DVRVlrOhEJtgP3suOSOLawlRAo6EcizG7y3pDIU5ypo7B8YRrtllA0l35kDhk3pyDTN1sj7bajT9y2fIinJVq2T/AOLyueKRKMFNLrzr1chgaXuxLhiVRpeHk7C325h3AGYYJ9+6Xtr9kmA5H4Ebjk+2sk2YLVBogzJelsdYQqCiBDGzCxN0BAVpEtw7J50eZ+XDVbOY7JUC16j0oiXukJycIku1pthhJUplqc3HiyebwYVuxfxWdM+2IV0+/ic+3NzpGhu19jpGFUZnSD4NLtTW6QCHZMn4FcScTwzn3/5byoDiy6M6RaM3JFXc1XjuZySnsFKAO/Bo/PgZMmoaNUj+gHQTBOhFflMX2DlPEpj+q5NpHNyY11SKV61o7RWYW8r4F9r22VlfvDnLPI2PEvkX4bjKEBeR3vYrx7FpVdNWkqK9JpVWewynEwDS7csRjVfkc43fe6xYto8zEDV1/AjQdPOhSQHP3UOztX3pS7sBLJq/2N8sWJqG+YrGE6N8mVAmjm4/i1jR1vP9HaW3cqoo4fYDacBXqFkEIyqDicgLUVe2+pCWp5Lek0ENTV1TmLovw2a8dsooOU6GQMozpayiXhtI+WzwZxtXAFHTaVyHFJiWYMOOH1xDFV/IfD54CHmfO9/W/bjOZnxKeS/jSJygbW1/5U3jX84UX1n/gqGOsSnO4SKJDEQbdK6PB4+9ounpuIITKPmk7KMn27m//tj8HPjx3W9lenipUy68iqVbiEUqz+/Ty0SFO87eWJGkvXE/HqepzBh5V7XvutH4Y3F0V+GKn9MYQrquYT8PrsUhfk8cZdXdsq28aDUYUl+B4Q35nG0gew==","layer_level":2},{"id":"de69fb0c-330e-4831-813d-94fb958688da","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"快速开始","description":"getting-started","prompt":"创建详细的快速开始指南,帮助开发者快速搭建和运行项目。包含完整的环境要求说明(Node.js、MySQL、Redis等)、依赖安装步骤、数据库初始化过程、环境变量配置和启动命令。提供Docker容器化部署的完整流程,包括镜像构建和容器启动。包含常见安装问题的解决方案和故障排除提示。提供基本的使用示例,展示如何添加第一个品牌、创建型号和进行OTA更新。确保内容对初学者友好,同时提供足够的技术细节。","order":1,"progress_status":"completed","dependent_files":"backend/package.json,frontend/package.json,backend/start.sh,frontend/install.bat,docker-compose.yml","gmt_create":"2026-06-30T14:04:20.637065+08:00","gmt_modified":"2026-06-30T14:07:37.615397+08:00","raw_data":"WikiEncrypted:qfgbutC7oyxR6nMxrwk1ODnNMBEQ3/sG78fQT1yXWju83LC7H/jAM8CEAvWT8huE5OClmQiIfNYNxHQ9s7RRS4I2JpxuOJTz8eCWMUZ1Uyzl3ct5rsyIFu8fuwdbAeggGoVlXxfRcT82rVraC1rlaQRGO5kgcNTJgIeZDa7KIJzJReW1AF2gOcg85NxmyD2QBPU20jUQG8tQZgyOekDGEvFa7bKU1UDQLDNO4yVWuGIsKgfV/whNAizKl0ZZaZ+9iWM2XXBDA9sLrXZQD7fyzUl3elNmWx830Y5ju+KudGoo33Kt/Zp5fVC96xUUwKGcGwH9ptvzXwJy6/w/sF3x8vbGuLrEvc3DHTShxmj7sNOi9NQlkBUDWrQbl44wQC9NfLJYbEHG5mWaT3bFotTFxn/bxdbAce7P9osAkl9SDqVly0X70YjXY4Axe0EdO80cCfQwynIN+uONKc2K+DcTIjJYXIK+dE5l1LUWXxSAWbsgxjnTgTeRqS/RJ7U/LwV6x3M+O42mw7d57H8byAPhaALheFipMQM2Xxemr8LmrCaU/OyB1Zt7NSjO9icOjS7ce0KBJMehTWPQn27B6NBZIwT5MvbL+9Y57TJzYRoPUaywWNeNl20CsE3D7BPdkNz7cT3NEYSTghAfeU0vF120Z/28Pq15ZxBRmIDF6obYSk8NJLSGbOIxYm6QWdJ5c/NnktUQ5V+LKFEgPFSF3HFzIEpolqTpuA30n3Ok0tdZgrCKqqreZOg8uMZPai73OsMcEfntY83IyMpmxd6KNmaZW06B/uk7VOvC6T0wpPksXFRSXonlh0fgnFt4o3fusophHFTQTcpWeBSacU8y2fSx8X6q2zYQj4H/czf/7ijEyOhGFRdm08Eir3Y7kYYFI8hQBfVdDOZ6gFQ5HkQME0ktc5JOWoaqNYrVpVidXpLQ5YMhsh4lHao/nOxWraq/zC3qxrIikrUW0zchTI/h3Jd0fDHMhC2t+Lkbztk3oZ2oCcejCqLBcLrv9ZfkdOxCD+Z4bOao7gjk7dTngaflTdhV8wLJ2RV5IeB0U5YTPVdBfo2VZ3Z5lwdr2Uul/0kxsFfvLfAHgvs+X4oxWle5XW5cu8PoSaCj/pLYjR+/CZ7mtEZLCWj4gas0xmYzqylOaFjIk5cGaAQiW9aRrb4nL6YWK0IH8tum/o61yMkXp4rm6cC3lDsToPthqlHlAoziWtZLPsvc9z6zXUwW38sIA9pz1Q=="},{"id":"5a3639b1-98bc-4bc7-a346-91ed56edd2af","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"后端架构","description":"backend-architecture","prompt":"创建后端架构文档,详细说明Express应用的架构设计和实现。解释MVC模式的具体实现、中间件体系和路由组织结构。文档化数据库连接管理、Redis缓存策略和日志系统配置。说明认证授权机制、错误处理和请求限制策略。包含API版本管理、安全防护和性能优化方案。提供后端服务的启动流程、健康检查和监控配置。","parent_id":"70ba09ee-60a3-41f9-bdda-3cb904cb26de","order":1,"progress_status":"completed","dependent_files":"backend/src/services/curveClient.js,backend/src/app.js,backend/src/config/database.js,backend/src/config/redis.js,backend/src/middleware/auth.js","gmt_create":"2026-06-30T14:04:44.765806+08:00","gmt_modified":"2026-07-09T10:40:13.128282+08:00","raw_data":"WikiEncrypted:7Nn1MUEMCjrO9aPSED6FHcOVyUTTciz8oEvjRE/M84mWZOQMWxh9XsKHwF/qws+vbLVXIo+Zi02S9rS7Ln8M6dhHGQKaM2o3J/W6cjRyBzI+DngG/qGKLMBgHOoLo25Mn0lNE90CkHVOzl7Ty2/Lv3O8AHgF4dM/twOAt5Az5Rurbwj7jYw2NfrIFhSv7nUc8lmY18VKbcfNVdMMXqExe15DDxk/oOw/i7CRPEhaI0Fog9CKQh4qAXvQR/olgeRDfBfNVTPB06uORdIFose6piob8NmaqNMYQa6CHvrp8XDHrq2/fdGvcEmzpQ5qutk1m/v5NJVA72Kodvue0h/tsf39vehWdqDPszaPT3S+JJbCnMCzIZLmtiaQSfUYI8Iclu2CjeNty2B5sBkcN2eohBPKYLH7KFBD2DMjMajIEBj9K60X7tsd3/J9xt1ipL+p+NxU6pW7TtlreMlQxFTtqBCjR+uAZDSaLqhxv8hCGb7I1Een5DjvHFGXs8bchtI320OOwiVr8ZyGA3DgAwvW9e5Xuu/p4duRyTAGML4hNZTSgCCf6sxleMiRKVckQxQaYxuoLhDI7riiDZFr8CmXL8wbTUnqUCTd6MYgN9uZznHssZyRFTxABMPdjhU6rMv4m7FVVk4sz7vLuOxV5CX+2YVkeZhhDFn+WcBAGUNb0djJmTlltKudv0ueJr6qhej+wuOtMemGzWYZNN+3ND82G1uJCgu1bnrr92OJ506JTBGJFzq/r5ui2jd3HivnUstyVmRMVcL3B2wWcl7xCu2iQEr3q2i7uhivkeJqgY9lfBf7I2b6Kw+JKtuyqEgEZv/GTBc3Y8taNmGkAQY8vFjtUtUm0mY91XHTgo0INfcACyVhUFRib0xd45q3Q/QuMXsSgTujujQFPUuZJZ/FSgOVp4FOcWkFfeTQ2anccIm0+ZHKu+PLMNJMCiGiCAOtoDivUbq1sIh/iyc5gi+0FWaZFjXVXX4M2JP5w1YzV/MHqcj9YpyIjn5gwcZnIi2mMoXcWymweE7V8wCcbFbsYpa7ibYP5L/CRrYhW9nFp2ljX68JjM2i5rqKX5GM6ygm5NCGHaHi+tybB0CuzREs2jg9bQ==","layer_level":1},{"id":"779d6806-96dc-4c97-8cfb-15a3d7855bd1","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"品牌管理API","description":"brands-api","prompt":"为品牌管理API创建完整的RESTful API文档。记录品牌CRUD操作的HTTP方法、URL模式、请求/响应模式和数据验证规则。包含品牌列表查询、单个品牌获取、品牌创建、更新和删除接口的详细说明。提供Zod验证器的使用示例和自定义验证规则。文档化品牌与型号的一对一关联关系和数据完整性约束。包含批量操作、分页查询和排序选项的实现指南。","parent_id":"7e9246a0-207e-47e8-bc26-b9d36ae6f2f8","order":1,"progress_status":"completed","dependent_files":"backend/src/routes/brands.js,backend/src/validators/brand.js,backend/src/models/Brand.js","gmt_create":"2026-06-30T14:04:55.154207+08:00","gmt_modified":"2026-06-30T14:19:07.600812+08:00","raw_data":"WikiEncrypted:hJ5e919a6La3vBIeYsDd9H+qoMODEBAlmCzG+cWkGRu78NaFDIi9qITlXW3zUicltUTnty1k0aVuLDmUbWYsq2DQkP84kMUHXEpA6OcQtQQW2b0L3hPiCNJb4ZQrqvo1LXEBjkme7wbSkleJI63o/kaE8846oeYE4AMgjWxEbV54Z95lxWs7OlwO2sCsNbqRc5wR/o7amP61MJ/lKWn8nNLrexqAUu50qeYGngpuqV3zogarV6D9+HK54itBZ/ncQ/+9a/lhzLkb54iR5IcRDOqaVetAPcB7FKWOIWyMYRgn/APHz0vu/Ow/jvrk2IP5VdQBYSzAFPe3odHJBhc53XJToyo3J/RoBJdKTAdLlVolDpTzg9VKOFbCd0ua1syW8RDmRR8CDnzPdnm2/KJn2+vYfnnvQvdbENcsjaVhdZ5GPJSf43fyJOJLXx8L2QjtqQdv69AtBDyTBsnmFqRUG6WKDHnA3WtZJZQ796EgvORbPOAecIhV0hLlvUyUJBOrM4v2ZMmc5RZ+ukl5ruR2PxQRNJRVk5f8BDNoylYtTWow9gb4r9ii7/TP7NjRI37TxCOkatlA10cnKD/24jXu6MRyocnYPVbHAT72NR7srRVXBcqMwlwiK2LCPVG71hlvmt7NiIB+pNCWB8s+qWHNpfV4kmmg9+458bGJdycQgVa4Mb42lqASsqANfZRC0xMGO4JM+Gns7T3vtPmAqjDJB8tZrkZ2p0dnvSBGpkYiLm68HLUpIXD2YldMCbY9ymtkJB6gBWWBUutBXeTQ++SyBn+qRICWqKCnVWYK0rfrYWa76HfOU0xfjpR9sVWFqXvhtkMBd67yy00PkaTUrvIFUq769fpn6KWDb99I8cHWnLIj556iiITHC7TpEqPSdbdkvssbuU0oj7RqG+UAFQWmP5fu2c2dBkaPoaqTfzdrJ4EufHQc+W2V0jZLzdrztAbbrXMIlcSdnIVZcM/yV5kGv89D64a9AfWx3h+b4uVFgMRhqFlACt0/36RwQeI2ZJTp","layer_level":1},{"id":"eb78ed75-b786-4b43-ba43-58a5ea8a23a6","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"业务组件","description":"business-components","prompt":"创建业务组件的综合文档,详细说明通用业务组件的设计理念和实现方式。重点介绍侧边栏Logo组件的品牌展示功能、标签页视图组件的页面导航能力、密码修改对话框的安全交互设计。记录每个组件的props接口、事件回调、插槽配置和样式定制选项。提供组件在不同场景下的使用示例和最佳实践。解释组件间的协作关系和状态管理。包含组件的可访问性设计和性能优化建议。","parent_id":"aa2583bf-2c6e-4792-b794-1563db547d08","order":1,"progress_status":"completed","dependent_files":"frontend/src/components/SidebarLogo.vue,frontend/src/components/TabsView.vue,frontend/src/components/ChangePasswordDialog.vue","gmt_create":"2026-06-30T14:05:00.059997+08:00","gmt_modified":"2026-06-30T14:19:27.855603+08:00","raw_data":"WikiEncrypted:mHLzoBKW/ak+KVdbda4A2f7qh44idx3e5sYOKq4y/WJWBVlKxvfsgrfR5kwEoK+5YZtxFpGvHzwX4IOH+DawEmhTwQMjQgMBCcPS53RmGaHOSgU0nKq03Su0/WZVgYDJfX5EkUz6h2rTPEOvq5PXUInOMgSH6UvRdohktfTAFkzFd7S1FTK58sVzdGQozq7wI1koDtSWO/SNpO4Ee8fMt6DTqQ90rTnMbEPKLcOrCDgBxPksoF4AwVmDiOWy6KkShCEKg5p6r82/HoJV2qfYNRVng+LVbIRQN/zKlyM4YEjleh+mVPfQG9melNixR3cJRG3orSswQpSogfZRK8Bo+TO29dCbmXI9Mg5k9sGaNAq2jbK1UKrydX+oZeXgh1B5BSCmOo6BWUzJqDsP9IX3WZ4YYVL08TTVYxPFyLEuNn34DiKMnez9L3SfJSnMIoqN7ClMC6kQ9CccZ6/1deguTXM4M/nzN1SSJuOFkMC4DjWRStbyZPfqHkfhcEG+DW7eaIurD4brX7qVwpAIDEp+HrF4YB/rpvFHpbpqob5nWRmQN6HzhmXSIBVTDNlvO7PuFOz5bARPKE7RKFrgOc2cFBVLCny0niJuaZXDcspCDEjkKMe/W6KijLPgVdFJ319wQi6WwIpUYQEwwRICmXrDU8UXRluSrnbmkI46ju45vwGnf4ZkUgPQhrtrxxqbDjr3wHgQtU9m0G4JzNonUKrVsTmom54Hx2VWzLxdXVlK1T8uszT0ZI2wtEAFmM+maRys0ZM/v6yzw7S4lK6LI76u9HmAWuPDpalJjO66kRoPPqFHGP12HnREYBCpiyzVDOsMKLP+nC9RJxVJyDqINcMIEQ/cvMqQYtNOCoV8uC4xqdOLLw69jWdiOw30qNnb3DwC64POHfTIjLTuZLWorchvBthVfmMzwqrolaR3VHUVgR/m5h9XEGlzXTqA6znkpkA1TjOTmf6YAAGAQ+Zt0IuWfA18ulyPt6eyriUUPdL4oJqBk5XXy45O8tb73hyaJ09bw6OBSdGlDdIsNotjVXwyfFkMEutcpmMT0v9MKTugGcSfEHSUwMnJkFKSB/PL+vn4zUky0vkjG6dUA1kerjwmjSaNZ7vkhCbbP8OFylL15gHQfCdOMb0AOCZTdEob06yof4MSnaXqMF6dufxLdbwOuqCfJUkhi2qwT7TxlBIB+CQ=","layer_level":1},{"id":"f96081f7-f508-41e2-bd45-a5b36a1ea114","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"环境配置","description":"environment-config","prompt":"创建环境配置文档,详细说明所有环境变量的作用和配置方法。包含数据库连接配置、JWT认证配置、Redis缓存配置、S3存储配置、Meilisearch搜索引擎配置等。提供不同环境(开发、测试、生产)的配置差异说明。文档化敏感信息的安全存储方式、配置文件的版本控制策略。包含配置验证方法、常见配置错误和解决办法。提供配置模板和示例文件说明。","parent_id":"a3ddc4e4-116f-4781-ba9f-17c85c85396e","order":1,"progress_status":"completed","dependent_files":"backend/src/config/env.js,backend/src/config/loadEnv.js,.env.example","gmt_create":"2026-06-30T14:05:12.313659+08:00","gmt_modified":"2026-06-30T14:21:11.825296+08:00","raw_data":"WikiEncrypted:mJFb0eo+82adP8NAeq7d4IIa0ji7BfhWd+tPu7r6OpR4X+XfqeclnD20MHCexQtgFzeY+udCFgwSLYPDydN5R8BNpcJBbveVhePMQWOVKGSx4DICe20Yr3Mg9nlLB9FGlGjUc9Y2pTff0xrwHFSfFG9wRb0k2bAg/j1gbq1g3pZxabmYCBYxTPF026U732n/Ksmolpy1y/q6x9P2vurlaRpr34CvTfVkEYogh6YTLfmAhzHfbr4sP+eShuvQDEHYmhRjzMwhYz18NBjgpMKUbE/pndwBftVShR24efIAv/BElGFzh4ocX9Ye4v5tKSBg10FekOLemFoJ8pOCG+BGhsRKs9n51fBFLOmmhXaTFC3SHhG9AITLshuN0sb92me0NMFI7NrhNuNKzc2UHDUgDyF4Vafg9YZgHju8PxlEwOs1BaPCOk0xYsp3DW0oVsG+AwBQvlvriYibLy7tghBmipp4c6l/pSiJCmGjW0JwUul9lVwbeyMAjsVBJp2ZXwzI9IKB/NXvEH/JyDft3X6uxO5VqdujNwKyJ8t8zvrApsSX4vMXO5+2SnxXAGudlLDTLmP6ozej4/197Za0ickFHWFjLPGNZDXv3dGVJfV+YiyL6wDXurvpHfhX09eVn4DP5NLwrzRsggp5XJR9ojLxzMggtxIbLdbx4xTBkRXRiJflCuRSm12Jrt6+U42gs8umQx0/uQSOJX44A0jxVep0MZK5QMIH7oq4jDqBV685QyNKxM4+IDM/E7zWDh9V8U92lhe3mOm4mqolgFJPfEzZaFsi9hOqp+9ZaAPAlXj3DJCXdSDfa8hNtfgjKJ4UgqP/2ESnAZhrUisYaQnfAMUBQKau+qwn+CnUsXOKcJkQNSoaXdvyBbAr18gNn3wK7A0viPPO1OCMf9E0Za9ghsyaTQ0q5kZuNukjWX1iQbG9QZ3TTkxZOzgSpuC9sndRmv6DY9AWL3TaupI10Ec52w4hOZe9TAcM1iN38mHBSSAf8r1qp1rGeo4bV3v8ONIokVkJP/lLXskyXy8PWwyNyN6yE1CfFAh5xxnrjnHNHYgYz9c=","layer_level":1},{"id":"92f94141-482e-499c-bbc3-6101e70206ff","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"品牌模型","description":"brand-model","prompt":"创建Brand模型的详细文档,包括字段定义、数据类型、验证规则和业务含义。说明品牌名称、描述、创建时间等字段的设计考虑。文档化品牌数据的增删改查操作和相关业务逻辑。提供品牌数据的示例和使用场景。解释品牌模型在系统中的作用和与其他模型的关系。","parent_id":"0bb34dac-0e1a-4cce-b41d-0194eda77f79","order":1,"progress_status":"completed","dependent_files":"backend/src/models/Brand.js","gmt_create":"2026-06-30T14:05:22.62391+08:00","gmt_modified":"2026-06-30T14:21:29.097262+08:00","raw_data":"WikiEncrypted:MpYke5d2PXdqtxI+drCrLlbJ7FPFod4dQS4C2jIEy1Vi+RWBmbRp3cvvlClyElpjY248hN/8uxj/oZc1cBilbx0tRCgx4EXGhbWT0bKPV9CClQk3EyAIvWkjw2qBl1GwoIZaoQbh/lDf7iSv+CjumSc5MqVDv7FeDuoB4BYvqSFuX6/sw/v3wTqRwaKX6wLQyS1j8HSrt/0T9Q28vNhc5WBAPNUs3PzlHBfFfWZpG8H8gVCRsqX5tOhfgNie/doVHGT9Gl74pC4sOjSrm4gseL4GAP1i/34P2j8wpFWOK0PHIrEDdLFB/nl4AmiN3z3GOflyzR8heQlB3L74kyUKX3oVFyL8nei3KJoV9pUbYJJztTdKAUC4USkpOWF2LYTf166CAIIyLuvpGUJmRkxZ9T6fpTbIZ0tWkizC09RvdiaDW1+cjDQhj6Ij23KebNfpMuYYTUkiKJPqASQ9/+A7uNZ43ntzVnopgTzXzDun3QBC7j4m+iF5DLSWdqS3XyRpanF50CvdYz5Px9oLvusDbKohVWQ6zxGf+ZZTXOL5+eTO/qQ3TKNuJA3mkzSqU/zzIodqLG3oFObroU6JLMHgFwXp2OggflULj5njivqDgj90U47CQExGFS8JnCl0dPuxiblN18wZf2ANfUg0IvnU5rAmQ/gz+dtummkOEouqZxCglWdsNKdTIkRWEkDBecIe9oGWuMX8RiWHLnL/Y3EvgSPRu8DkD/n6hbQQPpIrGV7Jf7CIPfqWg8/6VZose+vNR+n9JFdOEU7Q6X9OK8lAsw==","layer_level":1},{"id":"1e3d40bc-a833-4f35-891c-9dd96f09a1a3","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"品牌管理","description":"brand-management","prompt":"为品牌管理功能创建详细内容,深入解释品牌CRUD操作、数据验证规则、缓存策略的实现细节。包含来自实际代码库的具体示例,展示品牌列表查询、新增编辑、删除操作等功能。文档化品牌验证器的配置选项、参数和返回值。解释与型号模型的关联关系、缓存存储的使用场景。解决常见的品牌管理问题如重复品牌、关联删除等。使内容对初学者易于理解,同时为有经验的开发者提供足够的技术深度。","parent_id":"08dd4c40-3fd3-476c-bcca-4c8687a8d863","order":1,"progress_status":"completed","dependent_files":"backend/src/routes/brands.js,backend/src/validators/brand.js,backend/src/models/Brand.js,frontend/src/views/brand/index.vue,backend/src/services/eqCacheStorage.js","gmt_create":"2026-06-30T14:05:25.896897+08:00","gmt_modified":"2026-06-30T14:21:25.623188+08:00","raw_data":"WikiEncrypted:MpYke5d2PXdqtxI+drCrLid0YsRsuFzxrKFl1UH2EDILD+4NmryAJ+q2oYZ42eaiz44GIk6X8OFlUAZ3K10FBvMN69Ne06Y6iVCy+4xZdAsUGmydXuI9LOupHeDUaC3pvkOjqp3EZ4xOBXToKexD3sJwOHDJUYBWddck1pKB+BpUmpIGWGulvtKNd7rUuuNXGGexSoT2k/+fD8cfS96290Who+jupUypdef/VVLQ+SMm9fS7HoCYxsUJ9tvcR9HLpcihb2gc09v40WXl2RSPF2VOKqtBB6T3R/UTcCJV4p8ISn8geesslxEYyvMaCyHxZrZvjir3/r7oVAAh3KAOE+Nx4JTX1AQd1M8iUlzVaup2ZB8XvjcIj9/TKMdIL3PhNerpdIgsAQ8lwCNMPriXoMoZx0MzlaX5d0D7vEbujs1W/0zu4BgcnCjJtUdvCB+34DyEDjZVd5vEPpMDJyN4KZq0V2zz6XEIXr/SWlY7yRweOhgMAw/2UmV15PZmnHQQIsspcBtED/4LZY8sngC1o50KUM+1PQNQamViqAlGCHXBAR7Cj3E+QvjOBSfAVtc7OPeHToJFTO7XdM8xdMMjkRCdrmB8zJ6XSDish3MLo+tv5fNdSlOF8ZFqklGbV+DaphtWW1k3t13oFWP+IjkbW3xwsA8akuLoG+cXEctO4Uq0VFfoiwI8sfioOV/hJo6y06miVzTDvjdjk2vZ50V8j2qsw3eXt2N4bX4b2I/BjLZzItZdmHID3ExYBmo+VjPOmBXQGuZdhG3wTGSRtD7Phhsd0G6umdHsRVF74ih8xOWkjG4+8dj9F6mnmWm7nn84+bv+Es0fsCjoeqagYkgvIU63p9y/FEcjSTEEdHqZ/0qKXA8S1xyEHzPMmW4LjN8jwyNryVJPl2LOI75aXNvdeoMbfPs9qH5u6SeX8rw6TvD6XwAb28N8ehKfUVwJFEY7PkCn3ROnsjFquwaBd+DjPpH3CY7TdpGqGBuP5a+0z72JVUfnjXKn2oKTR35QRVAhdnXk/st1N3eu8SXBHgx2XHzEB4JAnu1nWqNOr0d5Mn9OVFDqOJ6GD37xh0oQvgefNcxCxgURt08010ZPDFx0TvUMLh2g+plGTyUqDgekPLtY93lC9TEtV4x92OjUub4JRNaGBlHVTUaC/pi2JUS/QYcfOPvjYMa7TgyxylESgrt7jf4+lZOJzAOmJSKScT22E+S1o0omg1Imd7YyAt5QFJwBS8Zm25xjGROuORqURPWRYfToJMKQYjB905rLMlW7JS8VHBVaqUp6R+S4827muvsDVj/opXiMkSLPllSH2AwfVfT8AASFSzz66kvjkmYy","layer_level":1},{"id":"727c25ac-db22-4b34-9486-6fd6946f64f3","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"标签页视图组件","description":"tabs-view-component","prompt":"创建标签页视图组件的综合文档。详细说明标签页的状态管理机制,包括激活状态、关闭操作和重新加载功能。解释标签页的数据结构设计,包括标题、路由信息和缓存策略。记录组件的事件处理系统,包括标签点击、右键菜单和拖拽重排序功能。提供标签页的生命周期管理,包括组件缓存、内存优化和性能监控。包含标签页主题定制、图标配置和动态内容渲染的最佳实践。解释与路由系统的集成方式和状态同步机制。","parent_id":"eb78ed75-b786-4b43-ba43-58a5ea8a23a6","order":1,"progress_status":"completed","dependent_files":"frontend/src/components/TabsView.vue","gmt_create":"2026-06-30T14:05:28.623089+08:00","gmt_modified":"2026-06-30T14:35:27.886573+08:00","raw_data":"WikiEncrypted:IBinykhefIyOgdnJDAiniV5kOUee0Xx6UXvrXwmKcQxxhEd32Oxf4/sXerzkozjdwLiRd78FiQyVCsTFnq2ZoJjCPvvphk/28Fyp6jERf6Sd62RGVBf+T/ddf1qyYMGlXTIT63FLUN8lGKH7HE33fo//zcEAInyKuCfcAnUKtGhK/6GYF5OQOK8iu3hTREMVLLGnL+nviHGzi/OieF9xzRK6Q7v1xKhCFPVw7G7pKGvEqIAXkIuI+gtduk+6amkK8DTLEeFc7kADsRYiiGxbnbCwDskX4qqKASfyrXfwkcH6erxtW03zOc0xXxRooa98xza6bb0a8AuGRLxpr39QpjXFHHSkoQOfBajABJjr8Dc2g4/Owp/iz3w2DmuHDD3n/B/iWYgr6mvt3RyCN7WugYmLcAHydpYFY03KrqgMoG6Z++VclV/+iLE/hhCWVXZwOvZExFa1/Nm3L/kQ+lvH/Ok4DwK2s2mjZIJfjmMEbvvPBDip57GwOAh/DEUOz8xDHSc/z3kHBhO8c2gfI+QxQTDodO1T3sDQNvDzNXnOsiGHEa8MFXwnRqOOJdjXpI/V0SeRqH+VF2QLUL0H0zkIRmUfKDToJpYdryAc+g8C/437bvmIINo0hk9dNxyk6OJDyil3WbGVKZty2trCmX+SSkvThP1sjhsXb3A4lCaln+NxaFM2pwSzOI2FrAI/3udagiuCFzkHXVAbL3kW/sByyca+mxh2x0XmZnIacn1rN3mzAbZQw0GomBv3D9BdLhokGDFcRbw0wBF8/CKZIQ2LXwJSliiHSUIxZBPFwOlfuDQLwPZwafFjFgx/iVezVLOrtprdilrMg1icikSwQ2uomd5k/4o4X2RhtHBwVEBnng/I2OnKpp7hx9jW6qnRgl73qL/weon9zfXHb5cIhwqTENIhOakxfLNkPuVZUK+yV5j8hhnf4TSFJur40kvfWrFH8ooRZjxZLVRGEqph6t49E53tpiLKAnc7PCkGqlVdBstHvud1Mi9WyXlP8CHOoDFinYsPol2IYws0Wz58mTUZesjH7Ovtl/r7VUGNRE+V5VOhW3H2ws00vNLRzrCQfstfuwZt7dDBHlJziXNvdgav+pfU3tAHaonl7W+6IJAygI7B1LZ7oTRxEV4fl7vl2G8suLJXZO7UsiezZ0gxqvkzvWkebI3amABggi6vI+xrlr0=","layer_level":2},{"id":"c8151791-2f8d-4e1e-8139-b0cf921ef002","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"登录页面","description":"login-page","prompt":"创建登录页面的详细文档。全面介绍用户身份验证的实现机制,包括登录表单设计、字段验证、提交处理和响应处理。详细说明JWT令牌的获取、存储和刷新机制,以及登录状态的持久化管理。记录登录页面的安全措施,包括密码加密传输、防暴力破解和会话管理。解释登录成功后的路由跳转、权限检查和用户信息初始化流程。提供登录页面的错误处理、用户体验优化和移动端适配的实现细节。","parent_id":"f00798b7-c49f-4260-b9c1-d1ee413b030a","order":1,"progress_status":"completed","dependent_files":"frontend/src/views/login/index.vue,frontend/src/api/auth.js,frontend/src/utils/auth.js","gmt_create":"2026-06-30T14:05:55.602587+08:00","gmt_modified":"2026-06-30T14:36:20.147272+08:00","raw_data":"WikiEncrypted:gVtFIob7WtU/DhLIhhPauHe+OU+v+Wmk6re9yMmllcXpiZ1pp7hfIQRNzw2djMi3kdxg1YOiyCoxBtvZze4FF6edaCgUjs2MTu+j6AA0Iy0cXORNHgcTdEiY29qq3iIiQbohHFi2yVwhY/RbmzBe7lwJOZe9tZJo+9aBXmZXSPQue+eGhVi8nfNwLBVZ8kr2w+IM0Le/0DzLcsNPWWHKW9gEnqOL9qJ2uRnJOeBfYIQm/RFJj6Arc9HTRD2rHKpLgeXT0/7uDlcrcVOeMQgI0MN4e5IsSMOS4i0V8i0QeaOnTMFe1e4ITmzsKBkTM3HbZ1l9Tud2Kc9vwBSxc71qfQSzN6PU2Lg3Aey6Hyu91q0cx/QlQLD9hjPLUl+/LeHHG0eHqrgL7KtiH7e32lisXRG1TYhCgOaOHWCL/heEb3WzujrCLosb3D7MsF/wENRWQGAQTgULpo9tmTHO5PQYppvv0bzI29cZtI53vlNiklobVJr7tvhTy/Ogd57XQ8bYMtnir8CxJnzDZcTSiyutWBKqV1X1lZOAyG+kC+aaRW/C7OYV4ek9b4dwf0XRsWvwr9GNgjIKC4IvOT+MYq8f+lbUllzOJdecNYg/6EvBmc3lESxNAVHxcKCYkpsfwV1pkQKTA8mk0s+6LysznP0NCo0/Wkd7s6eyrR5hNxhX1dI/D3SFOxC18N7Jb1XQTy2olb3oNn3HdurobkjeMAngSA7nxtsFpdVcdX3SqxyouWIMYKCNmLQjxKTUrx7OWx4ylXm4zZnlvaCsuj7hDBp/zdcCNQpVDN0sTMyI3rzj3Xnd9ULyRuTFS7dJzarbaHqSuN4ZVx3pRYSNWmOrrCKKAy2lG2ee8ojCkWtwcykJh9uC6Isdq+OzIY86g6fwtww3sF0b0tl7sLw81MfyakQfpqI09OHCiDHPtmwU1xVSJzriX6latrVG0pN2XqZ5MRWQy7nrzoCg8M6UHar+01QHp7FtE1F8IB7RTjIWNmVxfhgG5GBHk0+X39/mt+u9MCzS/DFWBVoXj2BXOJaos4NKYh8BDbTHC+HrYNlkD0wHs/yly/mlHyPrzMrv6n19GedMYDqebhvi0p2vS83tSPxoFf9tVJ3/0yZN3JuwAPQdGls=","layer_level":2},{"id":"fca1e729-87eb-44e0-8c5a-cdbfb20d1a5d","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"设计系统","description":"design-system","parent_id":"0545bd33-f65c-4e1f-b2cb-04bea825925d","order":1,"progress_status":"completed","dependent_files":"DESIGN.md","gmt_create":"2026-07-09T10:40:13.689504+08:00","gmt_modified":"2026-07-09T10:41:31.846547+08:00","raw_data":"WikiEncrypted:uEh4FcO4CcT1e8zyqhaFIKRwChc4IHkhMjEIwTaPePxpkhgTgYPsT2A2zZU0L4HNSk83yX2/7GMBRx0GpQYMpyV35UMoM+3/4OPI0//TWk+1HYVVb8eLs6NU0dJIJK1glWlt8iJvmeyNbXtg/0MQgNrZ1xDtPatoC4Z1r5ldSSNqpv+eYE8NxDLQ5AcGgelG","layer_level":1},{"id":"70ba09ee-60a3-41f9-bdda-3cb904cb26de","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"系统架构","description":"architecture-design","prompt":"创建系统架构文档,描述高层设计和架构模式。详细说明前后端分离架构、MVC设计模式的应用、分层架构的实现。解释组件交互关系、数据流向和集成模式。文档化技术决策、权衡考虑和约束条件。包含基础设施需求、可扩展性考虑和部署拓扑。提供系统上下文图和组件分解图。解决横切关注点如安全性、监控和灾难恢复。记录技术栈、第三方依赖和版本兼容性。说明架构演进路线图和未来规划。","order":2,"progress_status":"completed","dependent_files":"backend/src/app.js,frontend/src/main.js,frontend/src/App.vue,backend/src/config/database.js,backend/src/config/redis.js","gmt_create":"2026-06-30T14:04:20.637577+08:00","gmt_modified":"2026-06-30T14:08:09.130141+08:00","raw_data":"WikiEncrypted:EPw1VhZSv2AMLpYzHbCG5QXmatSKh1iukhkKRz99kcWlEvnOwuqXvA4ZgQ6tN+ytovQp8yiqJicl84VZMQ0QFUpSuhdDKqqegwHVHT8m5Qe+hOlpJtwBJv6Gyfd5UzsnMpeYFRNXR8wbkeFBADir/QMuE5xA4w5GwYNyc4GbpnELQTPwTHgWWbWNxlgq3I5D9TCdlGhsRmZA6sOK//txRwki0pH+W5zMNr6nOdulmNq6y7jVc1uB2cnWdogeOMuaAeFHEES4nLloLAu6fZBcuZViwy6PppTyAmckkNr4DBsfUDF8AWA7Tc7/u9k2CUPbxxXn6EzWZLxfzJ8g2+MS5AGoHvdi1/l6Obw5LKcFw4fMrrziZ69qX8Y00Nb4OGTY7Ba9x8nTUpZR+ZQr8C2+b3ian2p5M/jX68T2veatBUXJdORnAdwyu+gsMTlFms2BIWpmJja/SPELEIIsiw02D+YpsgCBoWJwJytlJH/lNURd5C7p6eNTpZ8Ueot4a9kE3/6KkmeteZgfTGCtJVjgtLW3hCuAyhA5zfsNbKDGxNKwkAHaDmWR8R4jKKhAC0JCdk6GSYSbiXLYZG0yPMpDooJP8w3qo5IHgaintV0p4Y+wYwdLe0UJ74U9gCWnfTrlo2R93/rrWiZqe7Wwovt7bAEMnTmtbaWINVb+tXkN3kLfbyjbTHDxjIOc2AAOnFVRGIJpMt50+QEi5TYhA684wr1/vQOBZas07D/sUPjcvl/msZ4kjlgE+YwYMbKPSf9j302dqERpSJODBX9TN2I+B3pRvT8ziUFXF/xr6AsE4DXdyvCy/cCKvmIEp6gyrY78oSE+YwHefC0Cx0ltAwzDpm12AcAoA3YD0TwNDY8zH4cwXHu79zttcgTjZQaebPwhD8L8PbozbJ0lQWo8Tl5Onvbp8hOw6U57Z1U2W/ge1JupnAJt0tMnHek6EpKqkt0z/J2d4/Z5B1JNppZlK1nG+pnKNEfNY4h2m0ydoCRJCad5ccnFJYXhF9XP9vsx0RtqQoedeyfH7X8//4Iv3nVza2b7PZ184/TnYNqUmxItz3yos0ir0gAc+54SDzg0aJlzBs86JFQ9fSep6OJ44sUHkauivK0vBs8Wij0TSI8wUf43PFgjey+c54DZcvXNfsD1hh3PNHe0CRN/oMidSjGTPv6WOJIzp0KnAOn8GXb0kkhk7bpk8eYfe/8luyjlDyaA8QOxpZLfUtQWXtGv9+W4bxOtq8JG3gDpTI/PJ9UxhamLc3zHEgUg2FD0maAM+FBCVu51P66sXPu+fY+bIxalyw=="},{"id":"b47d7f83-5401-4a63-ade2-f087a2f61987","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"数据流设计","description":"data-flow-design","prompt":"创建数据流设计文档,详细说明系统中数据的流转过程和处理机制。解释从前端用户交互到后端数据持久化的完整数据路径。文档化API请求响应模式、数据验证流程和错误传播机制。说明缓存策略、数据同步和一致性保证方案。包含数据安全传输、加密存储和隐私保护措施。提供数据流监控、性能分析和故障排查指南。","parent_id":"70ba09ee-60a3-41f9-bdda-3cb904cb26de","order":2,"progress_status":"completed","dependent_files":"backend/src/models/index.js,frontend/src/api/auth.js,backend/src/services/measurementStorage.js","gmt_create":"2026-06-30T14:04:44.766251+08:00","gmt_modified":"2026-06-30T14:23:25.133463+08:00","raw_data":"WikiEncrypted:PGdHQOrMWxh6s6galmzx6wcoMdYGcfWJlB+MVcSBUNBNKtizTGYmn04CYqWTHq18bpIkVhxruGAwYTOr3jZ71eCHIhmHK7mDbe3H2F258BwPHLGOZJH4+7MFqH3W33roxV3A0mBu2oaH8IeI2N8avzXHaJJypIkSAx9hq3JuRVRCDIeKY3X4NKu/U9NptL74JQm6A7p7Li2mkZiBFKle+4PW/yzuWaITp6kplQfvEI/KpRhmnMRsG3jGv9iyUUFWAGQatGlcpMa3GH4QFw3sBvBajjhTtLtzUczf5Spz1O9WdUbgYOPCpDQ77+Bihsdcy9JfQp4lINGc9Qyfb5uB4DQlnqYiPlbr9a3dDGb/dU073dMLOTbly0p8fq9pG4W7N4v/Qh8PKhHj3MylSLdIGBJUnAVMl5qxvwzxjojm6CXeNAkwfimh+yqf454XGxOTZIAU9k2R2h8YV42MLqjA33Hx50dU7ywv/LpeoPO+YkHYLdJWVag51oeU0dV76GEofIYoyk36dpcxNf9tYMnzovlJz1d32pHkZiEtsRL0hfFpnpiBClN9Eb2M7eXf3h8covZFJVsAMVZ9mruy2FWZoE+Vy70yUrtgKhd+OG9WissVZfI/yqj0Yt2Wsrr1loH4IN2vTs2O8PRfGR+udMBY1TGPS+H1IyXIEa9Q8MGdAQ6PdO/m+9Mecxv3VDjgAPF0c6iiLgP6TWteu3Z/Q9X08FkR307C0YSiy1/W+edhxIveTqz9IG72msKc9KnHpMPW+i/DnIp8sMz0xDt1HKJeWnmP8rVDjGddCRuMdlYI1JTCfO4D+UnLhjf5mrmxD4Oto9HiMMdaM7vcYGorb90OikVE7+bXXS7QBK1eDyLElOaFNMH+fXRZY7dX05PCWloKC0wLxKcyNwDyheNdKuQfCQW/N9u3S+jQqInJWi+fLqqQk1kZ9a8UaYcnCudScV6lmAOswt3fe/4VQQn6BPnOBma0DHTIh046TrqUeM+vxlM=","layer_level":1},{"id":"94ec54d4-0aa0-4e58-8e63-5ad6ddb6edbe","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"型号管理API","description":"models-api","prompt":"为型号管理API创建详细的RESTful API文档。记录型号CRUD操作的HTTP方法、URL模式、请求/响应模式和数据验证规则。包含型号列表查询、型号详情获取、型号创建、更新和删除接口的详细说明。提供型号参数配置的数据结构和验证规则。文档化型号与OTA固件的一对多关联关系和级联操作。包含型号搜索、过滤和排序功能的实现指南。","parent_id":"7e9246a0-207e-47e8-bc26-b9d36ae6f2f8","order":2,"progress_status":"completed","dependent_files":"backend/src/routes/models.js,backend/src/services/squiglink.js,frontend/src/api/model.js,backend/src/validators/model.js,backend/src/models/Model.js","gmt_create":"2026-06-30T14:04:55.155975+08:00","gmt_modified":"2026-07-01T17:22:10.388756+08:00","raw_data":"WikiEncrypted:hinoA9w2BNFayyHNiFt8gmTbUVUOzWUcXGR6R9te2oFvkH8c6kQ5iIFbAKknf/qo79rliTtO2QawiRHdi0gm/CRBXlJ0YYHfSJN+MrPK3gboTbepraUKOBH5bHq1pjWQLd58TMneV9nLD8qM0wi8KxeEYqjkIRyg7lg/2aNZVGDVTPfsEj9spm1d5wlYTn64in5t8zBHPHtFbh3EQksh3ywQTYOLH/qtKL0p4P1Rik+t908XW1TqxoQa7zveHKBkFvcw8h06giaCLAcjlEyaAkpZJPvaqfVi7rSe1PxnYMg9LcRrNryzmnHONt7EM3TStOa6uuTCNpwagQlGD0FYz1vF3cfPYIazFJKwGsgylrI/C0dVGf7C0YIKsBjJ91jwzPmacR/F2cJ+MPpdqwsSy1Zi7Pk4qzJ+HIjgtzPt4Q+jdKjQh8R48m/m/kPBjmMFGfI/TqtBG/QCr9HO4DkvLOXm04VFs6Qh2XVoq+pol7VA/gMoUJfjp7d5TGH9hPyqa0mw/7FM20x5veWvuAgR49CaEvOxKgZ5YbXz8fd8C3Zi90FlQD22ntkFCbngm9rXMgdlQqLDcpzH/dxPGGSwfmzaFFY2p9MtN26GUQMdywzRwb5c1kLPYvDp+JNFFwN6QLH22hEU1X1scU48lcKtlKEoOLtJhB6IMacAVojkx30mkAXyLxAd7x6MtAuF8pEMbKTdrvN9JLkTVNGmC6U3Hv4bkaQ6qkvRa71+Ua5r9A9P4rdtb81BlOMvTLTh2zpy4HsnEiCDZt2pfesKF3jxKRbypYQPcOfSR+pkoYcpJUHddhDLKhNmLbvrDPqO7ojol5tT7FouHCBA/8GCf3ccwJsMG1iM84R7MF7jWrzHse1z6I2K+OK3yVGrkH4tvScKKM4LkcZEZqvMGTbh7Nx1wF/T+NSWeUfOP1AEcLflsn1E6JOIyuzB5gX16TT6hWIOIikzlh5E3c8E99uUViVI2ZiikeypLzfgrM7MEDIdq6eF8riFzf9QRLXZ/1A/NmhknKTdqRIu5HAdiWGnRAzIxHEvyofCtiUpEGTCjebP9EWscm0S1vW+AEAc4KU+akVypAKt1ypF7atKS3in9odTSw==","layer_level":1},{"id":"f00798b7-c49f-4260-b9c1-d1ee413b030a","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"页面组件","description":"page-components","prompt":"创建页面组件的详细文档,全面介绍各个功能页面的设计和实现。详细说明首页仪表板的数据展示、登录页面的身份验证、品牌管理页面的数据维护、型号管理页面的技术配置、OTA固件页面的版本控制、系统用户页面的权限管理、分享码日志页面的数据追踪等功能页面。记录每个页面的路由配置、数据获取方式、表单验证和用户交互流程。提供页面组件的状态管理、错误处理和加载状态的实现示例。解释页面间的导航关系和数据传递机制。","parent_id":"aa2583bf-2c6e-4792-b794-1563db547d08","order":2,"progress_status":"completed","dependent_files":"frontend/src/views/home/index.vue,frontend/src/views/login/index.vue,frontend/src/views/brand/index.vue,frontend/src/views/model/index.vue,frontend/src/views/ota/index.vue,frontend/src/views/system/users/index.vue,frontend/src/views/share-code/log.vue","gmt_create":"2026-06-30T14:05:00.060248+08:00","gmt_modified":"2026-06-30T14:24:27.142952+08:00","raw_data":"WikiEncrypted:olK3r0l78uP98ua79qDx7UWSmXb2E1v0sVKrAVzGYuIJHPAueEFJ7X5N2BSDrAuja5b8BTuELO8ubSNrSkgP/Z6rORQB8Z8doMfIZES0MEg18aBljdAOxOLzrDB089hOQpIseNeWKR8TXhStfC7+I83ha5LZRaJMoo3SuuqIzp3RkRQ7Do5v9wPCFg1iCbQYxnjwxm6zBRiSnHN3K9VmnziSCPrAqvYi0G80OkTVJZxFtRGsHzRduLx92WHhDfqsUqydlWWiPmv8K5I43pyYLMEgtXwCTysGp1UWrivekxLpUEkNAc506Rv8F3ZlL0VFyZUPT7bbz9ya0HADXvlAL2I0bLkJFkjPSUFTni2S4GtLHqH4cWROJC9y1Q9blmamNoYY1jJmJyU/NTSMC98Zqe86Efc6uTBDtHxQQX7u47icPzu9gG2J8JodxRFiQ+sVBNhbDm9gZUjKy+a9zXMBxeUGEi/CKi1o9KLgT7+q0gYw+vPb4NHgptzD95TSruRKHAi54z7oxcpJxKyvK170w75cV1bNR1nPVFvWJRzAVB/KKwlo3aLH5aXe4a27+tlLxjJ+pJyZxAv3WxfYqBc7yQQ1sROcMgpuAY+idES+OB+qeRzI2tSm39VjWsmEaq8xxLzlTEgOr7lyZnZ7jpasuYj/ZreCaq6541xuVsJoho8ADkSi8GB7Q/aWZl+UxNj0y4S/8MV8O68/sTSPREEN/QU6DMQsEYODNvz/U0qrzaIU+PBXXbfCJnxqAxYmvhELHwuy9/CUrSSaKC8ZciV+gtAlaV3Yvkfwx+855UxirdWJnEuk4lGX49tVCQG7VYE71gimwTKSsYviOMgmsyzZpUe+UN7UVNjGdW7ttWNYVtnaYua5cmOjtLBUGOrMwvlSeoxkJ5KRXf5Oa/COdfpa4d0fW0dVAtp1T0dTZWSbOk/lswh1YQUqgXj6DDw2qvpyIj2M3OzlFScFjbYizbh3JWD1vz9XxoQZ4C/G3nyi4PLVynnzu8hJrbBYcCb3Vsug5907YxaxmHr6zx+B2O+KaeiBw3vRa+EuQO4lJBH/diEjB1IKlCxZu8j3jcHMP+NLdTEKoAHodIpqhq9SOBjnvrWxzScLZDoU38ngtUQ2H7mSOif6BesJIxuGgMu8L/FRZr3+dLA6odcCvQLRAMXJAtmqmMPVEwJMQufl6WYvE4ZiIZ9sHvMxRAU7vS5cchHtzFte9/luCpsFv3X4xHw5hOmicjsJXCXIH2gXRoD32ZFbnorAo6WQ78LcrZU7jezn9PshnFoSmHH9FkYpd0Udn5J+uubjgRFNeF7inWmeH559LGe5OPLj1eZuQAcbWOy5WCMfC4GshplBJBu06rqv4nfGiMgtpER1L0lXIkxO06qqYWbcHRP4vaOSvprxHyh9iSL99YknTBb32b+dngtSCQ4Y+uxBZ2BOgLbu7KtS2wrf+611BYlSy3j9p7bpPZOxoZYQkvn4roAPOBpPa++5ezB6xMugHAWqPH2kkxrL+fc=","layer_level":1},{"id":"00a9d595-dc79-4ca4-8264-1c3f4a200a28","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"监控运维","description":"monitoring-operations","prompt":"创建监控运维文档,说明系统监控指标、日志管理和性能调优方法。包含Docker容器监控、服务健康检查、日志轮转配置和日志分析方法。提供性能监控指标定义、资源使用情况跟踪和异常告警设置。文档化服务重启、停止和重新部署的操作流程。包含备份策略、数据恢复方案和灾难恢复计划。提供运维脚本使用说明和自动化运维工具配置。","parent_id":"a3ddc4e4-116f-4781-ba9f-17c85c85396e","order":2,"progress_status":"completed","dependent_files":"backend/src/config/logger.js,backend/restart.sh,backend/stop.sh","gmt_create":"2026-06-30T14:05:12.313816+08:00","gmt_modified":"2026-06-30T14:25:08.613907+08:00","raw_data":"WikiEncrypted:HL3VqGjXq8A3aGeLxAjVPqmSWC8Q8z+JISjcpFTl3Rl0A9XVAWpupiaS7EM/Upd2tazZmC4eQGSkervuf1jbMC7w061CAmhFQqOU+czssHD24JzzCW/dzhPQh4OdveHL1lgCBXcR5/EbIuduJDuUmEwJx8aPYEp49Cq2bRpWZ2xXxQ9geEW929vQ0xrspQFu0M2MJkvVnbxR/C1ZA/D+1XfRFtbxiW0x31u8IH0d8nAhLDViHT9HOYnEHPGBjRiTyLhwVlOqUTDNsooW+CtVaXaVamj+Zsvm1Qzfw2XF6Iwkggg0GMA3YkqEB9DFwhzkplZ9FS408azxIS7d4fS0fFXf5diJya6pNlSuA8Iq6y7g4uAB2AiIZJvG94W2dwa7z5qIY979LwHB4DepnmSDztn7ZiE5nt52n+/HGNVea+cOJHee4MvbrnaM3omg7CWLoZG/dawr+mNCxykZ1vRzxrqBbNIvQRMJ+HpOfKUKEho5u+FPTs3ukPlfGiElxzlSrtsP1WAcQFFsET8OsCEk5x6IUkuh1g4u0mqPQxFDojZEl0/RjIoOigi3cHQ14MLApz44bkfadHqnpAuoznkln9hllqFREbHcGqNbIgHnQHRzz4Be2IM/7wIIJIiGbHebHoTXQV+aHxHOWNV8sCBn9aUZRBa8BvZ3UNFtcqEZD+wrKlf8XoKsc1fvfavpnUQ5viCSMfPMK7jwDTGIrqLhf6PL3ibkfDqDFVvIx/FNNdYFfkX/8Cxs8zF79FyeiYx98Yx3rItEZJit0mVmV0SQziiDqTyirtN07F7kZBFSUjWFi/WfFDBGMw+60Qn5WjMW9AipX0KdrVuf85oZIeT3udpIrRencXCwvchZRJU+NJpAqr/6K675EVQ7ybxH7XNUGXCYyCdxqP3nqDQkRqxHZxWsWginc3n4kvhE+zpfTUOp6m5HsO64XllZ+wohWPyjrqJSkEw26JhJIH+eAL29MliX6XBYjvlgT/Vl+dlQMn69VEgVXBBA3BXTV7KzWDUKEtEOMqP6WNKauLQTYqHt53vRnAZvBL+x4IQlA2rXWIk=","layer_level":1},{"id":"72a24a80-f221-49da-88a8-83c0f49f4e9d","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"型号模型","description":"model-model","prompt":"创建Model模型的详细文档,包括型号基本信息、技术规格、参数配置等字段定义。说明型号与品牌的关联关系和数据验证规则。文档化型号的完整生命周期管理,包括创建、更新、删除操作。提供型号数据结构示例和实际应用场景。解释型号模型在OTA升级和固件管理中的作用。","parent_id":"0bb34dac-0e1a-4cce-b41d-0194eda77f79","order":2,"progress_status":"completed","dependent_files":"backend/src/models/Model.js","gmt_create":"2026-06-30T14:05:22.624097+08:00","gmt_modified":"2026-06-30T14:24:50.789071+08:00","raw_data":"WikiEncrypted:o5cr6Bo4m333A3G+lRdTTxRACU8j2qQjGF3ZvWCBRJVg4ygFbHKJwjRB8JHwTktUDQXcECHhFbmE4gRs0t+1cAwN3sdIm9MktHpIRSSYNyl8It7CS8c7Kbko+KOWDiia/4OYzPp1+Ghybtt7VK0zyBQN81qZaR1/UW5X18q6Nd78fsI04PQzw6oOqgto+wxHPnrvKDggDY8SsvvZmncwmrzbsOP2VtJJcNhQMXg1u+soPYJPOBoZxHDWrDPjf0okt1vMMWF5R0WFQv+iUbzBJ8PErbw3ZK+lbHsFncbKAvyI5B3bNirWYLw+0rZkmGJFY1RqV8iitjYAx76OS6oCAYwl4rX538I0xqWuH1+rXHMZIE5YXahUiRCB/5a1f4dUO4hJj4DEeogkMGOhOjR9xYWKVFWpSaTMS5Yu2gt/9XRhRwTypJiHS8yXXsr18QOa+8Z3GlwtXVkca7zVxoDQBL+zxQqUvgAwmCfI/W4+30Diu6dAy8DD1t9TipBisUO/u/LCDNc8k7jxtqnktibaTrSNLQ5aCiRVMFO3S9qwK2gARGh/+/G4ja0DMwD92UpaDcbdghx95nsPmFLkYUNLQCPdANbyN9Em639BakRdlQ4BSEJ5hNgAv246ePTEWXdfRdqUyT0m3gSZWa5Mq32ZA7AH9Go029LdBNBnzy4uJ5sSSoCfIRhPWpD2NHqQrjZEv3tfeWG5i/sx676ZFqNKV2NW2upQSmBHwYVyYDDDoQLCcYEH4WmrHvFqb7nXYmv5zeJu9YvYEf1kdEAmrfV2yg==","layer_level":1},{"id":"93c96675-6099-4ed5-8f40-6a47b3050712","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"型号管理","description":"model-management","prompt":"为型号管理功能创建详细内容,深入解释型号CRUD操作、技术规格管理、测量数据存储的实现细节。包含来自实际代码库的具体示例,展示型号列表查询、详情查看、参数配置等功能。文档化型号验证器的配置选项、参数和返回值。解释与品牌模型的一对一关联、测量存储的使用场景。解决常见的型号管理问题如参数验证、数据一致性等。使内容对初学者易于理解,同时为有经验的开发者提供足够的技术深度。","parent_id":"08dd4c40-3fd3-476c-bcca-4c8687a8d863","order":2,"progress_status":"completed","dependent_files":"backend/src/services/squiglink.js,backend/src/routes/models.js,frontend/src/views/model/components/CsvViewerDialog.vue,frontend/src/views/model/components/ModelFormDialog.vue,backend/src/validators/model.js,backend/src/models/Model.js,frontend/src/views/model/index.vue,backend/src/services/measurementStorage.js","gmt_create":"2026-06-30T14:05:25.897162+08:00","gmt_modified":"2026-07-01T17:22:44.422061+08:00","raw_data":"WikiEncrypted:hinoA9w2BNFayyHNiFt8gsNnGgVQtSSaVbeN1bzqvc4tbra1QEj8CSWfOVVgrIjCfl+rrXPfoyahNVQ8N2A/R9KL3g9TYMVRZZSS0TXcWyEdAHEcVYq3VEGpN1EMCQvUAKhB9cQXBwiIAYz7p5UXkXd/5BDTgIlMqetV6UxG3bvW2msb02YqCXn1CJpp8h53GAZMQMhtOWMmcHzUEzZMNa0Z7oq4Whiv6DGVi+eIRnMosZDQPDqcjVHu4ulL8OIgcNQfZNT83NcSO4g96lqa4rPo+KXJawWt/P7qCQLE/TVhUFjhsD4UGfVTBCFUUTPZniELgoFRrSuo1t0+uYG3l5CoFBMOww9m8AFz4b1mt9uCdgmiyp3mAhfDAPH0cKZ3n9fS4NraUHBRI1/U4FV4FOg060EIpneUrLHZ/bt4+iVpjQEeObtfRWjja0iGrVGvZT7Qi0mSUlONGrQzqdh1O5SYcEVKOY34WF9s7MBTMFRXP4luWngk0KLf2q2mgrCWulnLHebyiPUh1gQc/pi8wrDmV9+E/TLRiAyPLlkbFiFJLmbwazNFYCD+8+fyxbythOFYjAPN0miNA4X2RluXoaXP7sIRsAZ8yPlLeTiwOpgRJb7YZ9ZFVIZSlMMxylBrgeYWgVnH5Y3ZUKqGCh8DUrQ4jwBnreYwVmlV8cu+QgIuPCzc7dR9MQsKpF+gpQqy7unnu5O8RxfZvJ8wOwXgYIiuF+ERSLyuyyqHL/MEvw5S30bXceRNnbp5GHgkoTUDrDOFGN4Zr7e+huqGoH3nei/1p9KNbXyJiW3Y3TsNrKbqCnCuGh8w+6pqFtYllmY18RuWzRVpwsC6+GowZIk+c82/c3U5wZdWHthv2Ev0/p0GZLf/nsXHD8NecVDKW176txDSVjj0H3lkPx84+hOboVIprBpOHQC421zzR3+vCVOOkUbi3kALsOWtXc8+6ooVRH98h7UJ4xlaBnFGtb71EsgmKsVZVMw8+m+7On885syB5JDPAe7njtM5oZ0Itxe32AyeQBpNWA2X+u/zvPgYR62iQwVaRyKUveCHNDs9Mc6awFPX+M7KCR7SUleY/0K0dTd5fdaqycqZc+XY3rwKtpMHADDh9U8skECDKxV1fL0GBYnfiTqww9aZcaZZqYquPaxS0gR59nnljEwng7HabZk+EPvvCwbIYb62Uqn/Ghkywok12jp5Kxjs6aICsiTse4JgzD2zE4rOleyUE2aurVLzC6NA/0D9gD3IGQJpN7KXIZThByfp6Pqd6KtobaPuR9H/AfAvecOBDbQkyw8jDM7PLX5Sz1AuPCGlI+Npxgu0pkPa+P7FTBcjaLKM1vJ2l5juXWdw5KAn+rw15HOKC6f4egoICLBuGddC8hmhelDpQiY6zm80pfCMytFqJynIQJ44dC48svYL8J3tvPfG8XVGYsQVAyIlwcRN0mrX8NCbR/rkQ/wnk695GxkLVGvOKIkEayBufu2IgiluoXlxCM7hzJ2IhnMQWXNuaX+ZUFy+vVt7gwPGpCSwLvYaz2ddgmeKhHoi2waU10CWCfphEAr87b0+7etzytuWP9ugJ7s7fTFf4xFAH21VvLtFLa7kR/jPN5gspIg5y2bIeF68ng==","layer_level":1},{"id":"32dbace3-24e6-4a2d-9f87-83f2ec825b71","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"密码修改对话框","description":"change-password-dialog","prompt":"创建密码修改对话框的安全交互文档。详细说明密码强度验证规则,包括长度要求、字符类型和复杂度检查。解释表单验证流程,包括实时验证、错误提示和提交状态管理。记录密码修改的API调用流程,包括旧密码验证、新密码设置和错误处理机制。提供安全最佳实践,包括密码加密传输、防重放攻击和会话管理。包含用户体验优化,如密码可见性切换、自动完成和键盘导航支持。解释与认证系统的集成方式和权限验证机制。","parent_id":"eb78ed75-b786-4b43-ba43-58a5ea8a23a6","order":2,"progress_status":"completed","dependent_files":"frontend/src/components/ChangePasswordDialog.vue","gmt_create":"2026-06-30T14:05:28.623391+08:00","gmt_modified":"2026-06-30T14:36:50.062236+08:00","raw_data":"WikiEncrypted:MTGOV8yMPpR4TI1lgrJ8xG2DJaIBmdXRwPCl7oRCvXmCW21g6Vjoc2Fgt6nmmENvVQk6mZ+b48v5x7n1+0vaA7CHuGOaSKT1JpGPpRS/S04l+JJRC+zDXrImACBhSN+bAa09cBwSvWPWb3abEYtmKZTzRsib/uzjiZZSf1sPa82YEOr2t72Zm1OMMiqS8XA+qsZEzYiwLmiPLYFL+guO/3HaXe46Do0MMkKmltG7SdeWQpg0oka5yh6krSsT/W287f9JlYbkuaKE1DuvTnJQP+AnABLGN4UgZkrNvRu7pkJDAaUqmT59pSsjsT36NdrgsH/M1TPaMUk7joUnZc1IdIj085VEilPnS5PxTJEGHREbxVqxKR30C/5r6GnnzdXr/jrRhHs+UhBMOTdxtXGexuVx3aVzvCeBi3sRmGGNEzB7g7VsMJhc2HjCLYbeoIc2RP4XbivYLI4jkL908EQple4la3X3ggTZmmIRB8tzgdn2H/zDbaJ2ZCuI5cpzFamtwC2X6eLW2I90WLydSARo13ACzls4tu24apN25mQi0O/72z+V7bdoohJxqP+HlYsJ7MW2YFHCc18sKduLVLZsdqma8YQsXwV5EgYIhKAl3Mn0jCJvMHHA1q54m4MpedfXtyxUaV3Z/QbzKZiNGylMaUcTqeSxrwmB2Us4VdoHw89a2hUjp9fpAneq1lii4WlWygpjsZ/xGZPeEZNS2sLZLu2iV9btxVdJtjr14fDw8t817dq71safFgmrfgWmIwy4tBuQt+sUoYEHPBA/8RNuqyzxybwdhwFDxW8nUeyILFVyC0NFnS+jYQiYM4ffGs10mGWaO4Hw5gQWNFE0V2rXXTfx6xSF0eq/KXLoMuB8Pvey/AELPNiW8oveBlR903q+smsgrLd96oVR4kol5YN914XfzjM3kZBz/muAYVbsDBMKbEbczayPubwLm5zMFOuShES9MqJH/Jbzr9kcOugPx6sl3T8EMJGTuzlEnCi0Fc3Xukfm0wRx6j1iRYvbuyk51s+osNojspt1+OlIMIZDXtjf9XdL0wfoUql5ZRzDh3jNfbGv8VRxV6cKWIrlEiYphQre0T838CYjw4UVA3KOwWuvhCXU/fl0llYLZCCmfsyliuUVex+HGMwN4Djvkus4COjxzp4f2DByyquV0del9JCQZJ7XM1H0vW81c70BJuxUZjpLeZK0B46qiiAu1d+7","layer_level":2},{"id":"af7f747a-9be6-41c3-b091-4ee5901d8cc7","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"品牌管理页面","description":"brand-management","prompt":"创建品牌管理页面的详细文档。全面介绍品牌数据的增删改查功能实现,包括品牌列表展示、搜索过滤、分页处理和批量操作。详细说明品牌表单的验证规则、数据绑定和提交流程,以及图片上传和预览功能。记录品牌管理的权限控制、数据同步和缓存策略。解释品牌关联数据的处理方式、级联删除和数据完整性保证。提供品牌管理页面的性能优化、用户体验改进和错误处理的最佳实践。","parent_id":"f00798b7-c49f-4260-b9c1-d1ee413b030a","order":2,"progress_status":"completed","dependent_files":"frontend/src/views/brand/index.vue,frontend/src/api/brand.js","gmt_create":"2026-06-30T14:05:55.602772+08:00","gmt_modified":"2026-06-30T14:37:33.764923+08:00","raw_data":"WikiEncrypted:MpYke5d2PXdqtxI+drCrLid0YsRsuFzxrKFl1UH2EDILD+4NmryAJ+q2oYZ42eaiuwvs0ff3fJrcmeJphvg6shRr3y/1Z6QIqf0SdVu8YJToiL52I9yI/YQ9QmrCLTmSJK1Xn0gikJy/Ur1L6mQ4487hhJQ5ETrEyG74ClVaJFLbUcjoZnico/zSQru9m462u4XEGzLdVl3wBitgKCowMgtQp8iOkg6zYEOvq+vQd5ZMUpRGtPDuGd5LGl/sCyJboNraB5fpHqavDpi5YE7ArXMWdq74EgB0tuJXFndniw/KReaPlNuLs4cZb5MnMb/Zk/FpXzVwYB4qeCuD7TTz94PbPh5lQUUSV1nN7I2Nl7KrP7WCumRo51Bsp0EgDTJ6Lv1FBBouTAIk6SOJy7c7pHKI2bVjdbYhok8sqJoO1zP8R0kKkzlWVqR1eqx3c7vZlMT4qGOrIZltbmw3MS0LlfxkOwLOAeA1wiOuMsyxRh0rW05bslECO6N6C5nvuooj2pIx4UaPhTHmavcOt1kHG9pMEPh2Fb6VZOpYFKDG2zyCIfnU3fVAoD7n68yLyuJHSMnM+EsWqLHsaBCFBaVOUW1k8eMzltfozTQzFUlpASncW1hCZDkH9eAByXunfMzj3cRR5ij6yv+rlMx6Kc8OJtIHMXfY5Uug4RoC41bw1Q5ApjCy7rRFRC3MXbXBQKnufuVAvtk6ldQ64s34dZG6Fs7AuX3T1VWSDjReGTa3JKhARtr2k1xtruRq5ugRY0wrRTCkAiW7nE3grXMt4101VFK4QE1jqRxjkRPVCz8B5lL5TUqxK8KFltj2NZEC24YU36Zz74rntRYqZwbl/pRQk6uP5TGiH3pw7xActW1I6ySnBBrJsUONt01juQ4Tqr7+S/JJbR/vkryj65Kc00zCRsbkeH0dXxmKUKB59e915AlLc0aQRlXRhTlfKUr7/IMAd0n9HGSSaKcRr69ijbll3opHfyRpZF/uF0kmh03HjEredmCzrYx9fGQUTANJX2HqoONB4ms4Qm0j2am+UjAvbBHU++SpwlZBkP1aR9KuMN4uKpX4tUjL8tDJRGW7ZU7W","layer_level":2},{"id":"0bb34dac-0e1a-4cce-b41d-0194eda77f79","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"数据库设计","description":"database-schema","prompt":"创建全面的数据模型文档,详细说明实体关系、字段定义和数据类型。文档化主键/外键、索引和约束条件。解释数据验证规则和业务规则。包含数据库模式图和示例数据。文档化数据访问模式、缓存策略和性能考虑。指定数据生命周期、保留策略和归档规则。包含数据迁移路径和版本管理。解决数据安全、隐私要求和访问控制。详细说明Brand、Model、Ota、DashboardUser、ShareCodeLog等核心实体的设计理念和关系映射。","order":3,"progress_status":"completed","dependent_files":"backend/src/models/index.js,backend/src/models/Brand.js,backend/src/models/Model.js,backend/src/models/Ota.js,backend/src/models/DashboardUser.js,backend/src/models/ShareCodeLog.js","gmt_create":"2026-06-30T14:04:20.637975+08:00","gmt_modified":"2026-06-30T14:10:45.950286+08:00","raw_data":"WikiEncrypted:veTYwq2y4io5qXerCTrkkKY19u2QVJ1rg3+MIy4jIV1T7LGtk0NNZTeyhAbQ+Kw6nKL19/84a+4Ky8TPQGUBAMv+/6dJGLjO+JY3ZnbVJix+JXTUe92A0fyeezyoI6zxn0BCAAx7GKkFkl72yB7LDQCZmuLQu265aq1IM9ARxC5hoRrKFrUfmial9RptFqCk8tXMOwlttvntP9DLL0Toiim2N8rxuTj3PZ3Sfi2OoqyGs9QmcT5sZkFv2MzdkRWxlRj+lggrQgwwCEi7PAKwJUu8fAL6D0HFdfQ/zGBjnr5HmJCLcdnczST1lLXFTpVqg2yA7ejV2oYI07mzPC8wxSIMZ3razM55hNHeD7TIu0h+AASYH/fMFx+BavsWSWVibAj0+GY3nVB1XGEdf8tKUxCt2tLkzmNC0ONaFrb1sH+u3/NACyBWp1XT485tAbYK8nfQIKYCsxMN3A/5DrVsuo/qHfopngN0j9+Ezecg/k9Tpmt1WNL6Q3XGKE+SH88eF9LePghhx2s0Cyeh8dtxlqwb3KvkFwy/T8YuSy4I5txe2e3KV4B+65RBbbnRPp9CU+X/MAW0EEPjUDUcpVTF1RrZp3uD2ugvmRoN4WNDuXqn+O+o02Vm53g6xy0ZAjX2BiUHbtGhP08k5nBf+6vc6Qw11ko3WnqZtpqJrpu2/pJm40NX/r3Gxcwc0lhxO3Q3EgDEQUNhM6kykwBc5roxz1NZn9gecFJ/vOtO/a9ekqeknKCjw+PYmE7nimMApPoaSzADSa7ZF41I10SWY3CWWqNFfZ8fs1kpjew0mcbEAcyHSEB6Lkt1zJclVbuowc/XC5n6bv4fqkK2/qfT4i/h1zQwLReqBxHagDNUFMA/qXsFwWWSsqOnBtOJV0SnMYqryPf8/tcUVYavxmkBnmXvABNj45AhkJX7xs9fc4CPoEHcxa3AyPkvXSy9v+LTqOitEoO4BOyQ+5o9KELKxVwWW6rA6wTuJK0VnDMTCO+sJoy15gNLfTN1KZORVVwPly7IRW7yO+mCCazqFfoXR477Kif4qeBnWPClMQFLaFJ+pEgvIJWYRUNfKcw4vc/EkyYYeA+Hd1FFr+O5DC0HXhUctk8lYt9MKtZH31RCBZFL95fvmg6+hlxpcnqGgPyYX3RhgESPLtQRADQH9MeBW9GkS7EJElfVnVsfTOAdmSos2AMVYslDP3x1z69CIk+639BSGgJNNyprE87PTRKUxY4eHCuVmALZYeo53/n0ryOP+Pm0RrLO2OoEdwDukBlzJqujjYntHapPf+BV9MDdrQJhuaaDPw+aEW6SkitZwp5cGi5x743nW5gBNH/3CtrEysupQXlFxxgAhYXnXVB7ruWNWK7EuH+8oIfmNMJ4080SwxT6REnUV87E1DChQd20pT7L"},{"id":"6cd96b12-bb94-4748-94a8-9ef9bf21aee0","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"集成模式","description":"integration-patterns","prompt":"创建集成模式文档,详细说明系统与外部服务和组件的集成策略。解释日志系统集成、文件上传服务和第三方API调用模式。文档化微服务间的通信协议、消息队列和事件驱动架构。说明缓存层集成、数据库连接池和资源管理策略。包含集成测试、监控告警和故障转移机制。提供集成点的配置管理、版本兼容性和升级策略。","parent_id":"70ba09ee-60a3-41f9-bdda-3cb904cb26de","order":3,"progress_status":"completed","dependent_files":"backend/src/config/logger.js,backend/src/services/curveClient.js,scripts/upload.sh","gmt_create":"2026-06-30T14:04:44.766596+08:00","gmt_modified":"2026-06-30T14:27:35.809057+08:00","raw_data":"WikiEncrypted:0j4RRfWJQdenLQLpT+DwLY9h0ctWLZwu8+2HoqcoTgcS/p644+VTtfXH7/YdC+18sAix7E/U+9fJqjMUaBv3jH3dXtuWslLxziQhE0mAM6KzXiDK+XHdsDX+pH5TGGreF1MypynKLMokPfyvDKXXvDb/K/htq5rDIK7wn4efMGrpYrHlk26HkWjVSHgXWa8mSvCzhzivdxiPFSzM+bFHKmAil3znEHtkwMtneqShT9/7CHzIwjUUkq4PtBv4zoyd87sLPzIHBxV584WgWr+H9HiHl/rgXIpGmmyxvut6aE6Mc2v5WhKYnBXayO803+sO3YHI6rRIuv/B17E6Q0lLwA+1x9YcSWrwXv0cmDijT/4f8uMl7RC7jSivX0mlv6dFtsZu7V/TF5vyEVrzfMMxsr4VQjceTo4zW+y7QufDdnvlGRr+S0DFgAlt8IpDnp49wmm2oomoTmIRf3OkwdMZEIGJxUmtNR0zcvCIdBh1KA4TQxHOKFZFOt0qaC9wAFXB2mUD/v6im0DNwlC9lxd0YSEHf0ZvG7AFzBTCSu0s4BrXMKjBlQmvbYHIztwKEe+eQLwn+egVBK3fWzCesFrLhQolEWHZge33dHIVt/jl/VAu8cuAjZerwX5ma+nYjVDSkJpDBLFeII5+/XG1QGVnFeHRw8iHrmbFjioXBvDGm3JGK35cJYmKDpCNswcTS4czKP4q6iapCga0KZHCA25UqbmW7fFBBJBnLXJSnap5wZL2/cXVzzrMHq0DwVin4TCmhatx25HzI6WSkier3jGKtRxCBPDJy1i6AaUNVTQNQmf5WXG/3+KTgWXojmRlUQcRPCxOO+jVRiuENVql2W2CFOHb4PNkmO2ybwjNkuLawNXMRTVnDlyGmKOj6/8+1qv7NkG2VU3x7q5QRh4EOn1Xx5OL8wK3ZIo6YDtZQMJ6fAt1a/Q1V1P+xtU7nXtJrP94p+lh+S8as938vJI0ks+Th12f9lM8x2O0q3crMtXpfTiY5KECIAVrHQBXIgP9mDzicaW90vw0PhTRJL3zNVMp1g==","layer_level":1},{"id":"41e8823b-fa7a-4a80-809d-cf21088bdba2","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"OTA固件API","description":"ota-api","prompt":"为OTA固件管理API创建完整的RESTful API文档。记录固件版本管理的HTTP方法、URL模式、请求/响应模式和文件上传处理。包含固件版本列表查询、固件详情获取、固件上传、更新和删除接口的详细说明。提供文件存储服务的配置和使用示例。文档化固件版本比较、强制更新策略和兼容性检查机制。包含固件下载、版本升级通知和错误处理的实现指南。","parent_id":"7e9246a0-207e-47e8-bc26-b9d36ae6f2f8","order":3,"progress_status":"completed","dependent_files":"backend/src/routes/ota.js,backend/src/validators/ota.js,backend/src/services/otaStorage.js","gmt_create":"2026-06-30T14:04:55.156101+08:00","gmt_modified":"2026-06-30T14:26:52.749254+08:00","raw_data":"WikiEncrypted:E/YLj/vjaxHA5L3+/DbcM/RrsyTj+zs2iY0gxO9VwkrctdJ181Ln0L3ooRB4LTne4VfMGKZQ6wlTj5N/X2kXcEukZ9Fut02Bs5XkjPHI+2fVI4RjZN0XzwIQaHtBgl8tPykchP+BDkn7x21JPxM4faRabHD4SQ8f5w6ZTPuozmHMS8B+EHb2T7KjC4DoC1RunkTRgUzQ00ZOlbAQ417Nl5iSzdfmRxQ4xxXxBHxg7QRNmHyXXkYgUat/sYwewRJ7vWadFGMWhqvlypgVFw2ueYVxtwoTgfWRW3xSbHeuJMn7RF/FWundtS5a3WwlcFzvmkpGXhXanm6EBmi/g1nlkr1I62+iPGsBnn/mYzTCs9N0yzg8pjYlkjWLhoYnWzFCcwNjWuOis5TkACe4F3Enn5/lHPaUacKkjRUmCsmyIV+YCfcShFNlf15kqHmAJzFnwpzDTA7n2GDkXwAcTZVUsDiGIo9HcXj42Nj+gmNBocNtwCrq1apaus8+xrRBA1usRtf2XK+beNgVY8HakOY03Q88Yn6RceXtZURlft7w094WixUJXMU2VtwSJLIC/MnKfNzse1s3D/QatR22ivu1UxhLoQwKTdXiOCyrSysBf5CmHP+PJmWexDMBbgw2op1BNhxGV8ENxuFPoq/jJ6AciXYGnhe0HLsQZu3DGhtOKX6bhA/ylWSAqpKAn9MxTvI3s8M/gDD7dKZnrafvi3SyEI58q46R6EEAayRfg7w8pX3mpdDt+O0t2eN96w52Fhh3VFn9jdhnWBnEVhm8E4C2cUIrmVa1SYlBUaC+2Fuf171p3d2LjtzevaIzC3KDVOtX8VCAJVzeLbpOrxd7bo2He6Tj1qG1ElYp329PfO5BbMt+FDxZXT89pJQbxxz6faNUwaVjAWzvfB2RGDuugJFagSKpW/HMZJWgQwWRdG1GJnqI2xu7KnVfTb+VK+QPbH+TOkLtxvZ34sq+Fe9xRTH6ffAgL3GVhFx17Byd1mIyFtAcAr8SadVmB18dr4jmgbxbP2EptnohyUwoYMfihQqTaA==","layer_level":1},{"id":"02f97459-8352-4fff-9216-8fcabb128d77","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"故障排除","description":"troubleshooting-faq","prompt":"创建故障排除和FAQ文档,收集和整理常见问题及其解决方案。包含前端页面空白、API请求失败、后端构建失败等典型问题的诊断步骤和修复方法。提供Docker相关问题、网络连接问题、数据库连接问题的排查指南。文档化日志分析方法、错误代码含义和调试技巧。包含性能问题诊断、内存泄漏检测和系统瓶颈分析。提供紧急情况下的快速恢复流程和回滚策略。","parent_id":"a3ddc4e4-116f-4781-ba9f-17c85c85396e","order":3,"progress_status":"completed","dependent_files":"DEPLOY.md,backend/src/config/logger.js","gmt_create":"2026-06-30T14:05:12.313976+08:00","gmt_modified":"2026-06-30T14:28:16.989136+08:00","raw_data":"WikiEncrypted:CaKOW8OSSWs4aEYk06Hu0tuZET5JxbVXxA/4vFailoRiq8l6SCRMdp2PbHfZPheZsOCEHlBpUkVcsULRxIpKUNxtyrd+LvcQjieQsOib7J2aYZb0jdq6DIsuIi9OwAqdeUo2sZ7WFYO0MjrDHQbEi0Fshph1GHL9lpk4FW6QGVpOX6LlZSlzzcg12dQ/7lfGLDNbZmC+kujhPKYB8y+Qg9DI/RBQ2izmG4m7XYoA9vhnY3btZQDjWIgS571TStZN+2zXE5D5wxyq1xW8sfVZ5aoLYIpOUkLMXsZXRuxThU9QEIsRrWxkIjNZ+DYovCzw6LfTUmjulPUu6g1fGUvjvcoT/wPnkWfZ3G6dkEdl2FNK4YiCrP5dIB4B3Ce5xXB04QOtueqxEA0ky3S10aN1HSYiNKLbR870IYZ5PIh7MQS6IVZ/xNU59dvYs1yYgWQzaTkW6h/wP9Qn9DJK6QJ5DVvqn7nn7UX9cmZTZdcT+EZvg3leLG3nUxl+rMg5moRbt3A+XJT1dR13DsgLjPbPKZ4+nDWJghDjUIQZ99/91AZrw0kPKbFba8YYIeLw3/nhshLooOLS8HHpn1RIwSI5C4biKcdxCPRgDq7LZn0X1aDqrw96+lKqgEm6PjrwBIpvhmWlr49hWd9rom2ohJAa1vkvUioWyGjsohChizidHzag+5Yf0ktjenGomBjPQc0ENMHZVtWmb0PwqR/Aj9IYfdLU9XmIH5NXLlNKtnDGFvqJOmCkUY2CjoQ1zLqXwcQc5CIXmeV/dew+CZh+lzcp19HqYDyuRJJeUuBxtHHC1E2fNZWXAgpNogDVGUEEGAFCS75/yAGV+eZWApwi7P8EYbT8bEi+lkDzWOMRG3R7uHZ012uwytQCgcEAx89CPTQRdvwzuHQCehVV5of8lW29MsJcCKWqYEUbKm9xGdGHMMcALiJh3Iijn108J7RBXVDNLIpQWWYIP3jAufqY8lz7wi06ibX8LgPQdR69b+ZWDEJ9b7RGOf9xsem9kNHlcHExDfpPlIUeYCTnQ+UAvW3BnA==","layer_level":1},{"id":"92ff3472-40b9-4adf-82b2-faf5a4d4b158","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"OTA固件模型","description":"ota-model","prompt":"创建Ota模型的详细文档,包括固件版本号、文件路径、强制更新标志、发布状态等关键字段。说明OTA升级的版本管理和发布策略。文档化固件文件的存储和访问机制。解释强制更新、可选更新等不同升级类型的实现方式。提供OTA升级流程的示例和错误处理机制。","parent_id":"0bb34dac-0e1a-4cce-b41d-0194eda77f79","order":3,"progress_status":"completed","dependent_files":"backend/src/models/Ota.js","gmt_create":"2026-06-30T14:05:22.6246+08:00","gmt_modified":"2026-06-30T14:28:22.050373+08:00","raw_data":"WikiEncrypted:M3g6T5zNL2wYgwI+v2g1k9TI04v1ugoF7zKt9xQvyuZqaGjJRFmBqKV8Wmwm/3SJ9Qv4rq4MrNZm9Mosti7r0obMj+m4wfrTq8co2+WGKMrYflsRbFhqYh3bwnRVAtBUG+oE0xiunIHCkbP/vnG9SBSl9YG0F5IlWVZTiJo4o240+pE9i40J+V8UwXtMXUWVIsQrA45pmgpTn3LfGupDTWIZ32ZD7WlYT4iTdOOe4azDCok4I1Yvh5kjTJYmR6+IggUUDFRxpFqxUyRHUCPAOM+CBB2O8JGPXOsn3M+0GhQ745lCytF2fTMIBwfB95CvsjNL+uIdYn68JkatRsH7lCOQBVWlNM3zJLvpllaYyA0NAYmiDZ9v48O25B6goFiZqSRDq+5ZFHPYhtmEGQvhr6vG3K6UKm1/8MM+Vhj2ys55M2serDCbPBieNvEsFp96ehe/Hg11TRDvaRr+b/cBcNmtD9NulFxM9jS5RmzGOpHtlF0RiurSmlao+eaveVPhKnTINLe0tTYSBtsYc4K2uriWVijJ8XYIvSE/5W9k7yhooovbDmKhWzS1eY1LMTR6uVCGXR6QPj60pNUVRKuuLQYtR5Kir4n5gJLT4VyoOPy5ZfSx2zGEKDHVGxrqdHKxP17z6R3L4wh/TNCj0rYBxmsjekn63MFHY9+xRbzKwuqYjsBjp7MogvotIrInX1awMAsoaZ56ODV1c6oNA+DtlKfy4CHExNfu0v5zbz2siffwiRcjzPcLH03x81xKluRNRjtmC7uzOo6qUnRwlYOHLg==","layer_level":1},{"id":"6dc54635-13f8-4ae3-b3a7-54c65dea2997","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"OTA固件管理","description":"ota-firmware-management","prompt":"为OTA固件管理功能创建详细内容,深入解释固件版本管理、文件上传下载、强制更新配置的实现细节。包含来自实际代码库的具体示例,展示固件版本列表、上传新版本、配置更新策略等功能。文档化OTA验证器的配置选项、参数和返回值。解释与型号模型的一对多关联、文件存储的使用场景。解决常见的OTA管理问题如版本冲突、文件完整性验证等。使内容对初学者易于理解,同时为有经验的开发者提供足够的技术深度。","parent_id":"08dd4c40-3fd3-476c-bcca-4c8687a8d863","order":3,"progress_status":"completed","dependent_files":"backend/src/models/BlackList.js,backend/src/routes/blacklist.js,frontend/src/views/blacklist/index.vue,backend/src/models/OtaTargetDevice.js,backend/src/routes/otaTargetDevice.js,frontend/src/views/ota-target-device/index.vue,frontend/src/views/ota/index.vue,backend/src/routes/ota.js,backend/src/validators/ota.js,backend/src/models/Ota.js,backend/src/services/otaStorage.js","gmt_create":"2026-06-30T14:05:25.897556+08:00","gmt_modified":"2026-06-30T18:39:56.546904+08:00","raw_data":"WikiEncrypted:xd9L+Z9CK+rU9nPZV+aXHWAC+ITudx4Vmx0ZKTalqXJh9lrnWNCrJ6gjfeCs+3xXwLzs23BTL7qcVvNIUwEHxkOC+w2ZMrQ1yevYg2/xv43z1QKbxDHD+DfzVy2ip3HR1VE9OTicG8Y/HrwMuTMoN01llNhSTwVedKRFFHYLaQputwV4j1HV3mE2NM0kpMMJn1mGpOGgHYkTKOf6tqPWkfrJftkYGx1L9B8VAvh2tDHYxfKVUf+kxMc+AJ6e8nWV0nJsF8w6NDE4XPlsgB8PrDcXB4ASY0z1XuH6EW9nukhO2d54uVAXQBHVvqMC52nn5dvSjoOBVkoPIfIQZPBNcjWk+QLBqGgywdvJ9GvCILSorIgIUwe7Ty7UysVETKO+/91YlQ8g3OsTfZrRfCBCzwFPOOevT8PB1+s7rRgEcoOXVJDID2u/DO0CxO8TwhloI164hCOS7Bh4vPIob5fjB7W8huW9amUvUHXZ/6WgYtLUCzryhX3j16thLsy1HpDNrrEsxvCsPF540QoEZOFeroPtzI+GmlQKrSXS3ZnK8JbSCDmIZXNldzQiCRKRrnTg6+H/CyxpFCwNE44a7aBwSEryvtFRCCkAu690Xxc41bR+0IdguhXyL2yKS05K/VaocMmau3zZdsEv9Trwv+7BiQsxDp+RYxV4krfwGfcMwovPo1wRrQx+e/CTjhudQ36biNfUOSLnANYK5dJX+lIojP8LoBeGchUcYSM0wC8WvzRyJ8LbsFdaMJpRJ++Eam+wCC4IlpEGGVD4zn26u+OgfVBG1us2bm3RtlXYiAgi1b147VL1clma7bxzYt+GggXoZ9uZ3acqLztxrQWMFbK5NHpavUjTA2IbEQnxiAnvarLySz7A5g7ZnvaGqScK0PXek5ReiM8Brhpl9VcOLbuPHdqdpOI2JRyKb4u5dvw3iFYey7NdMBbuoLCLn5kZ3RiOz0xPZhazE/nE0YYVGlLU/igXken5QeqmfFIeE5PsudWa4GmfsIyuDCj9uOsJd3dY8Dg6sdSc9bhGkO5HHtM+fuFI0mWS6jCPQBCcFbnHp/uRwOL+6HFcpDYLmSzPKRFbVqAIVLuk2dezAieYDmZEo51vbYm+IqAeA9I261+3vpU9mg76oCMnWHwHlW9tSWweGNXaYU6IIA8N6Ad7Enpw+tz9BKC491F/JmJMROXqeetf0Yvhj9MtizDZ2vxfMthqEFmqDh9qgCrzlx5bIWa5gWbzhOG3B9kUf0GuXPbPraZ0cAk1oS4dihI+/TIFsdVjG6QQE4q7qgi9I+y+TV0HFkbe1MDk1k6mV7KDnUCgDXqjlQqcW2XncgtpSDIlOgXoCP4aghJql8zJmkDf4JcaXJmvrcT5S0ZJw9awJbVtc9d/JraydK/GH1FbkzQ+cP3hDtu4AIQ1/CqUwGVLRfFuGAM6G7lb79gGQ5mGYPVUAsDu4Iz7A3l87Ed6u5WGgkryavn2WdkdqKC6Di06NnbvZ1MvGPjLQmR7Af/gfcsx1ggxM/fjEeeTcevJLcvJeI1VC8Bgz6qitzCpBuwZITivl19J8MdjQNcVNKdhnmhOph1ZKvh1NC0tc2dDH5hVwtR6XrHM3GG1bZqOsofFj202PPff2oIiyh2xhk1Xxttm97WNoHFfPQquJTLNnNutWO+weSGUezVbSAIHc15G2bGpUkBUZwILvadH67980GOkpZim35NFITgGV1Iu3/oAb4lV","layer_level":1},{"id":"748c8db9-9197-4c3b-ae1d-a6e51d058342","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"型号管理页面","description":"型号管理页面","prompt":"创建型号管理页面的详细文档。全面介绍耳机型号的技术参数管理功能,包括型号列表、详细信息展示、参数配置和品牌关联。详细说明型号表单的数据结构、字段验证和复杂表单处理。记录型号与品牌的关联关系、级联数据管理和外键约束处理。解释型号参数的动态配置、数据格式验证和存储优化。提供型号管理页面的搜索过滤、排序功能和批量操作的实现方案。","parent_id":"f00798b7-c49f-4260-b9c1-d1ee413b030a","order":3,"progress_status":"completed","dependent_files":"frontend/src/views/model/index.vue,frontend/src/views/model/components/CsvViewerDialog.vue,frontend/src/views/model/components/EqCacheDialog.vue,frontend/src/views/model/components/ModelFormDialog.vue,frontend/src/views/model/components/PushProgressDialog.vue,frontend/src/views/model/components/PushViewDialog.vue,frontend/src/views/model/composables/useModelList.js,frontend/src/api/model.js","gmt_create":"2026-06-30T14:05:55.602966+08:00","gmt_modified":"2026-07-01T17:22:40.416508+08:00","raw_data":"WikiEncrypted:hinoA9w2BNFayyHNiFt8ggSfSPmTP6/fXMKhmsk+tmF1NfJ/H9kFDbThrIYMnkiz2GNsBvNyZwgk+XAMnBFnd9X1BgPKtXUsnbhbDwITwXNeRP0EKjJ9nbXgmMAYeM3VRtJxxWhE0RbcOFt3SCIBQ6jcdhWJc0jxZqgzHh/9BbhXbbFE87VnsMKYDgOiXckXxgM4RZthxXjlcCTv34quZRyP7/JIgew5WTIAcAVU7/oxdTtgTXpDSTBi3YlxGP2P8kr4MdIIUtXDdOrv6k+AXF09CAL/RdJ1SKgzL/CAs0/T6PXeIgzlrfZyncAoTl+N/lpatZg0ZqhuNOK+HuVYzzcH/kL+LZLXfY3jTQuW1drx5nU3yfxNPmB7xb/dKdNzEeITmytp9lTldmuQvYx9JqOU73z/+XvAnp4EK6JD5fpDL0Z2WchHoERAEQENOUpko73scQqeB13q0/DP5P6lsulD6nN+v3sD3156L8D9kiCcNRTb6y+Bgi4+ghN/cZAicKRk/qZM37YcTfSS3DI1jY90y3XKa601dWFskywNH6iXPHo7OVrMo+LzC38354PJ6dDJ7EzV8cjUcvS08bIG+cfYXGILMWedU4K36XY1trx+S3mVyIk/m7IKoDZCCEptVPOqv/xAQ0oaGt+ddu2mYSeL+kOA708Ot5B/Gb+qvUy8KwvRb8x8azbdUPvVPfonxgco9Gwn8iHtp4n8b5kXZM1IBvhQYtpbCt8KlNy4+KfoovSp/8r7Nq6XwwoE7nYIIZlcUwjkCCF5pZGDN7/dD980IFiZ6A73Q9P15tThAe1sUTgUnBv+/ALtlx3UVq3EC/sN1E9cvo/r0zxqRW7foboyIBociExx1KhXUrXnemmnxVdFcgE2dDxUcRsJqaG5sujXtamLAflH8/+rGY8rwwGIptU7g9p0BxXULUBkLjUl7xDTE6/9IB4wzGrwWNaf/ibjpxUWUjAHZlCUpwjCH9oQNE1F2BKvtx1CY+ffkUjS4V/JJuyz6Q32uJF1OIqw1RFHtDMhlv2BetwIWUKp8EXDkBmRCYAc/tKImrkeBelKe6Xt25CxMXyesKVrJXDRgbwwGdA5a7JvXttMwr6xYSzPZJldoYn6gI5GC3Ex8tW0oQBla86XWqC/aETjTWNs989QooSxgwvyAt9oWx7HA38fw28oYhvekA/niPysdB5861Cx/sPi8svRLo8eGFV9nVeYZI46o5uTOfwBW2lWVNdBxAM3ZvBRD6ZInFoieoGnbcnIxDcDUTvW/CmCTt0xiKuLF1f0ZBqHMCwf954B9uLg18NX1PZrR/jIBwJ3sgYTt099Q+bMm37lGPu5jeZM927iZ4+QC0UJLd7nIrLUlskoZ5FVZ/5NX5v5m8S5fpGyYrqxWmT8rKidjs1FKz3dAkfkqYQmFZnE9NTnjw8cqvkq+Bwo0GIbBJKz/OsoFKpehDL2TFWuX91XWKoNNLZ+suFl8Q94sbFQqrIzczjmQA==","layer_level":2},{"id":"7e9246a0-207e-47e8-bc26-b9d36ae6f2f8","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"后端API文档","description":"backend-api","prompt":"为RESTful API创建完整的API文档。对于每个API端点,记录HTTP方法、URL模式、请求/响应模式和认证方法。包含认证系统API、品牌管理API、型号管理API、OTA固件API、用户管理API和分享码日志API的详细说明。提供协议特定示例、错误处理策略、安全考虑、速率限制和版本信息。文档化常见用例、客户端实现指南和性能优化技巧。包含API调用示例、参数说明和返回值格式。提供调试工具和监控方法。包含已弃用功能的迁移指南和向后兼容性说明。","order":4,"progress_status":"completed","dependent_files":"backend/src/routes/index.js,backend/src/routes/auth.js,backend/src/routes/brands.js,backend/src/routes/models.js,backend/src/routes/ota.js,backend/src/routes/users.js,backend/src/routes/shareCodeLogs.js","gmt_create":"2026-06-30T14:04:20.638264+08:00","gmt_modified":"2026-06-30T14:10:41.230618+08:00","raw_data":"WikiEncrypted:N3UbzwGjCC3xD6BrTM0cq1j04iiCHEqviOrAoLLUfGDtCxYctzqR2At1GtmCrwAkNRcHgUzXC/oU+pquLUAJyJG4QbY4uH8HShHwsSaBVDFWOUg5Yt9aKSem2W6e8/XsvBH+yP21CSU0WyXIunvAbMDWN2E2tdW6Wzy85z2Q/R5uQyWZgy2mpBkGdGtFA8tnpiTWGrll3lHHu51hSPp8fubLI6JOYB7Pcw5m81DnxNYl30Rt/HNSOzY2hn6YlxZZe6LYmbGYTHJFaQ+1mi9pLEDLwyAsd2NXDHCvcH5PyODvHQQiWusTZ2CJRbKqnQ29hlTXhH7vxfD6JA4CJLUr1IQO4O+sNaKIJM2yqvq9AtsVFlDiSbBbx0hHeupPxyxoyJrkbQ0YEnJYE8vcEVwUMFYBaA73AgBMVIgg7EIO6aoO1qtVQOCj8O6WC/bpRRG0VsKJKCG0cWJF2x1R0da2454d/mYk0E3sNIdLAYefmKn5znpcSVxPYUmIasm7sRHIngjfBQy3oRnj8iMwUo4jJVzUnK7+SXmAFMGJnkGsPff2MYZK1ziPEV2jaUxxsuLG+ZJVOkkPArausPuO+h0DzRYrD5rtNlQHj/M+VdBjK/fZjUHU1VYdsOAE1Owe/XiTW736BtdVxEahqzEy4KjCuHnbdYOecFSzuuJBu8+IlaAIS12uC5MPrhIyhcgnimmvjDGib+IlTsmikIQS8yj/M1+iuWVwDonBYGcgL/M4fnP9tsUdLa0iICT02XF5rsFc0k3qg8BcCd1qTG1LzSDn0OGKkrowiNxsp7if26Sm14qjk/kMrLV35NzhCrv6AE1YQGMD/Dw9P+dhQT+6f+GNG7vvKDnkf14/8gSVoiZsVqvGFSRbn+uscXceS5KZOfRVqzG+beWC5lBGoBu9NDft5xzAlWLF3xkgw3v7JBOOs53KoXfRuWlF4MjpF/L9Pi0K8Zdy4N1kOcHDKfzZTX19J7qHEHGfaKEhLP+EJzuy2zgGMtSYa9GSR8ku/SMuX6kyUbmmBRECqXb4ohzFJZVKEysRjplQzr9b6kLmHq3DOFdeYpQjJVFbehRbFgziE66TVVVeSbE7EuqOl3E7mVe0w7GgLODvHmOCTJFVMvcc3Ci5Fe9jWyomiNykvjfxv5+iLlDrwAGoXHYeu0dvl32TPy2yen6q+hOAxVtrIQh2efNFU7L9NmApvpdARKuQC9oYmvDtTYb3ifOXMRtdWJNUVz8DQCf8jo9QF/5mlamAcnhWOR/muhUCtnB+WZbireNw26SGG5yt5NZLrMJRjNxWgM/mQ/K47LoKgPimdSfBDApR6MRTXyI/wKP5Lxg+UYUGLapLKqHrfamPFlWtyAMER1HR+wzMaIU/5E66GbWmR2s9oQgJpWfELjIUlODtmHh8trWp1yzOUXksZH/Kooshmmse4XmZ9upGxeADqhi9sY2ReO9DJZcGZzy04R570EuL/pWLoXP7E9b406rBlQ+pGAtw/Lj+/nK1LkZFclvYsH4="},{"id":"b4054b83-f0cb-4b7e-9b3d-effc904a5686","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"用户管理API","description":"users-api","prompt":"为系统用户管理API创建详细的RESTful API文档。记录用户CRUD操作的HTTP方法、URL模式、请求/响应模式和权限控制机制。包含用户列表查询、用户详情获取、用户创建、更新和删除接口的详细说明。提供用户权限验证、角色管理和状态控制的实现指南。文档化用户密码重置、账户激活和权限分配的功能。包含批量用户操作和导入导出的实现示例。","parent_id":"7e9246a0-207e-47e8-bc26-b9d36ae6f2f8","order":4,"progress_status":"completed","dependent_files":"backend/src/routes/users.js,backend/src/models/DashboardUser.js,backend/src/services/userBootstrap.js","gmt_create":"2026-06-30T14:04:55.156387+08:00","gmt_modified":"2026-06-30T14:30:22.110712+08:00","raw_data":"WikiEncrypted:pOan1y/G3TzMEng6wi54Vc5wz1mwLua9oaQGTUm9cssalr5g1toTPIfYljFY5WaWYpIfvMfcOIPjVC5YrZe6T0ZeXnIn6qFUeNFA9VkQiOd+eP8PI9TknxwVIlnH8jIbIwUHH+P6UkkSNKkoEQ1Dgy4tQyZQ/BwhCdLqQABUIXBPU5meJ+X6w0MX1tiAe3bz/ckrWZcMva22ulspZnMMC1Wk3aVoZim2mC/orMFko2LdLZbXjVX8uNiFeB8UyaHHY0eGKN3MEHmSchfVJBXzLJAuJlUXl365b+bzfvnnzO1j6LwNYJMluGW/Bm8YNNXxv/nIBbzYwvWGjn/7eXoSDSP8c2D1QpN1Vtejf68ju2Xll64t71U4ToaQ6nUYw5uqsUgZDj9zsGfOjV52J2RWSeXnUQ7cUo+WLL/4N/5+3+KBlnUUuc5rvgZ/SdfIBzoYoyeDi+IU/K8j1B2CXPKNjSY7YV929LeSJGbcYxEdA7eH0c0zY7gNqyy/28oMx0Drkn/jYuCiMnKuQHF05L3581zmgFITJkAamXJV087BZCHex0iiYzrB2yS3QXrUCRMa5YfiO3mhv7u6C5A1bzqtY1b2pX30yhhKw71FwAuA172/tw63XUnOXjQ3M38mTt5hhxI+Z27ySXPk7jZs6OQosySBxga+SW59BdQWICrvO0/Jr8CqbIQ4usht8J3plxZpAOasjahz4ung4eJEzGEngpdQmNouctQvHBWOSXzbubhIGXplonmBfLNDPRk81plmJsV/vS9cNjIOPCmHJxQAXdEExTKuqASOCeD02Q7iDS3H8lUuIkNaF2mqaGwJXYsGwglkH2PtJIPpV7OLPmu7BT1QM3Vx/EK6EgWK4AkX8njheLaiGDxuJ1ZboRwInEgTcPY7PBX/x6jg4JI0TnG7jozxFYvNGlQR8xCJZ4SXSGF5mUM2MerylFlNh4SvGysXSDbMoo9tzYOFrwN7HD8ao7wuyTqK5EauHRjJiy7DQ1xhkAR+8xbFglSPmyzymu4KVhXnBy+ad2/UhT1vc3j5G2I+My/soGEHQUDr4q6/0Jk=","layer_level":1},{"id":"7a728623-5bd2-48eb-80d9-0f253bc74123","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"用户模型","description":"user-model","prompt":"创建DashboardUser模型的详细文档,包括用户名、密码哈希、角色权限、状态管理等字段定义。说明用户认证和授权机制的实现。文档化密码加密、JWT令牌管理和会话控制。解释超级管理员和普通用户的权限差异。提供用户管理的完整操作流程和安全考虑。","parent_id":"0bb34dac-0e1a-4cce-b41d-0194eda77f79","order":4,"progress_status":"completed","dependent_files":"backend/src/models/DashboardUser.js","gmt_create":"2026-06-30T14:05:22.624965+08:00","gmt_modified":"2026-06-30T14:30:58.467643+08:00","raw_data":"WikiEncrypted:piKNT601qxwAxFbFc+bbNzJoKRWjVA24DZgSuXUMKeYDI+Vpob6SIDpceCgG+l/ARXk22LQbqNrJSpxaw3lYcwfCs/ysy8OCLL5SJdUHJVrbRwBO9VCr7EM1ykzkC72RNFstSYAcnBFNhGMXw+lvldpEXlEqZE9WwOHqS96NXNWqbxrN5aNChpOr2Rclp1ATRSAz2nUS+IeeSx64uQOVL3aSyP9BxlRPnARz3KagI4h5xFbrFRmGOu+2fHjVv4mfGuyBi2m7BOAvsQRAReO4aLFcrb4Q4d/YoU05hkkDJCsF+uw1h2wLNYqLbKVPnnQ+vXJsPReY5PN1qLbXnK4SYp2DGFm9mcWTWJYYzE3plH87IhZQUyYfFFWSWzNA+oWacGaaij336n0rQ1emfUynmp20c5H12gaAdeJnKNtilwuveESCgjV+cpQeQFNPuSBymzN2EYIYg9aAesv2HK1H3PBo1BRPR8jsYXLLErgqgfSevZLVZGasl1cVMkdzhHd3jXywieDpMk0OiXw2TzVbfD/R59mDLQ/8RFFCxIY4Seg7wwXx+w9Nk4zHDmIGcT2ciMFdmomMHsiK9TT5/bl0pCM8PpQi8V/abMOyhNZqK2NO8mgxpys8XDLzN2vunY5DWeD1FwI9Do09XWWByBmvOhSAQnZp5IvO+Yc1FEzRSo4NHjxKOXDmFE6f4WRlmoKnttDNUMGRnE0MXXnbj33ztpBqhSkH2IHqEDWAYGb03f12CEM2q4RcTHO1fbB3ZAECoyGOC3pmIqTyin9JECRtDQ==","layer_level":1},{"id":"4d08f4ca-84f9-4f9c-8d9a-0983f78a7005","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"用户权限管理","description":"user-permission-management","prompt":"为用户权限管理功能创建详细内容,深入解释系统用户管理、权限分配、状态控制的实现细节。包含来自实际代码库的具体示例,展示用户列表管理、权限分配、用户状态控制等功能。文档化用户模型的配置选项、参数和返回值。解释超级管理员权限验证、用户引导初始化的使用场景。解决常见的权限管理问题如权限继承、状态同步等。使内容对初学者易于理解,同时为有经验的开发者提供足够的技术深度。","parent_id":"08dd4c40-3fd3-476c-bcca-4c8687a8d863","order":4,"progress_status":"completed","dependent_files":"backend/src/routes/users.js,backend/src/models/DashboardUser.js,backend/src/services/userBootstrap.js,frontend/src/views/system/users/index.vue","gmt_create":"2026-06-30T14:05:25.898001+08:00","gmt_modified":"2026-06-30T14:30:59.497744+08:00","raw_data":"WikiEncrypted:A2q6dsB1G5KaNgPAwP2ZpD/NNAqdMxLD500dNl3wstxRlsTO1UAX3pxjxaiFL3z0As1vXXbkbHu4vNUGPLAL5aQdvyDy/rpc97235R5NBNTdhWQsZBMstzLADK9pZc2FHGxl73wo/dEkASQtxoZ8c/HAPRkbzM7NeoD9dIYUm8IACZdB7XsWNk9eYgM1s+F7EamxXZeo9LRcbb/Y/YFKbxweyfSjWzXvXjvoJz8YZ3tGNPnZgwl5qgSc7Iqd/zEcwe9suFPVJyoHFnfJNUH/kaeWu8f/cHWsyJGasZNAaAwZBBs3yTizjbbGBQE3c3I9OoTx3e45q++1SKXw87o4e/05qmBvNeVZolDT9qztewrGf8fDjB1GqNNK4z78df0HVIaQFZhhhIFgSY47aR+4kMu5z6cAMD04SbGH/sGtdnmsA6r40hK+TgrjJ7YJEn5YDMV6ULhMS2AGgCAgoOoOaQAYdtp00rHL6DqxWP7Ayw/PrS1EGjonvJDwqy2YY4Wu06Ti9Sv/p3stKU6l6v600sAU/HYdfnDB8XXCaiCnr1aOXNMMzow2YRdFlIzdIuCnb20FmdM6scyabPlKwJ+Q0bqI1kP3t1AzsMWzBOu/hSduzKJtqJdugcKam/IQ9dK5dNWVHOLXVwDMONyaqpurXeP0qrftDRCgr7tfAe7T1F17lX6F8vAAFXSSGlwuyU3jsLTxYLSnIBOiSsa8RpX4QosLNkYfmULBdd3rabnHteIWLCeywBzzAZwJL9/1WtaxYZ6upIjMsLu6LvNaXz7d7tfg2XqQT5SckfhVnsfs7251aj+Xj1CmFmER0EUEKiMtS1VlphUcRYaWP3cwRjPgIItB7hTHnDqlj4l8pW6pQm9DFy4luQ83CJlsw/FEjW6lloK8XYhGAiGN0PR8dTYL0LzjOi7h9MbZ3uCqrW4Sus9kHxcVPN1Ubt6Pl3KOadbrS5pfUae8rpFVss4Dx4K00tLXLycXKmVHa5Ctl1Z5EhAHn6/G+a2oo9L9ymOTVHWuMrH7peksW83s4aykHZ+cX5kVMOf4+wmVmLlrnYNHZ/erqFhdMHJjX3WoWzfJ9JbFm6j3AL0Rr/+/gY0h2U5dGO/ioG+M11sSM0TnmIHFSvQ5BMA7LQKYm734RsnlDaNiR5GUtVCC4ZGa0Z8ijU4iHI2N9XnTa3R1UEQAqMMGE8eAg7Mhy+eieZyElZFJTkhPbbPE/T/rMkbtaGNqMan3KohQvlP8qX0Mtb4UOYnI8fd0RwahU3KVQYEEtwhMvf7LRH6zLOVlQjtT56TgSAPCkla0Co4fMEDZpLDuSPD972VDq5r4NnMIk0ZaPfNHWcTgD+pAIL7IDmO04KLJV0h9lEguVWpMWskakEkbQsD28FQ=","layer_level":1},{"id":"f23cd2ae-fcf4-445f-b8e9-b3382f277ae0","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"OTA固件管理页面","description":"ota-management","prompt":"创建OTA固件管理页面的详细文档。全面介绍固件版本管理功能,包括固件上传、版本控制、强制更新配置和发布状态管理。详细说明固件文件的上传流程、格式验证、大小限制和存储策略。记录OTA版本的兼容性检查、更新策略配置和用户通知机制。解释固件下载统计、版本历史和回滚功能的实现。提供OTA管理页面的进度监控、错误处理和用户体验优化方案。","parent_id":"f00798b7-c49f-4260-b9c1-d1ee413b030a","order":4,"progress_status":"completed","dependent_files":"frontend/src/views/ota/index.vue,frontend/src/api/blacklist.js,frontend/src/api/otaTargetDevice.js,frontend/src/api/ota.js","gmt_create":"2026-06-30T14:05:55.603184+08:00","gmt_modified":"2026-06-30T18:39:29.639151+08:00","raw_data":"WikiEncrypted:xd9L+Z9CK+rU9nPZV+aXHWN/UvyEHGWdvdi/wL/SLAtsxjcusIK0geuW0ev94vFm/+ZZNy+ieVfnAfHGqmL17rwVengK5U+HuyndLcsd+vU8WWUYAcbMeIuhajT2ueakLuWMAOBjC7Qjnk00go13X96EUYEuiWmkoDFEuFYCUNlYB8K85tvNFMpVCY2Qqrx9nomuigjf1WFHD0TrRVrhs1NHGRazgaJy8rA9ZCQXZkYfZ1sQWyMvR2zhRCZmZQ1P+Ay/sZmld3IJZ1uHwC0AOC62fyj0Y1CRG00+FjGRJYmzRiiT1ovJN0FMKEQ4+ReupsiHFpHZwkDERurHDlQ13YRkt4OKVRbYHan2yeZ/pF8DmJl3lk4ibWGBVa/AktLpQH/cUYiwk1NNG954l10fIGdxJOmE9R5Pi8JImO5MVH/3QHkAqJa/MCaS9oCtKu7kTXs2P9M0FSG30V8RfUHetYe3HaVCRL4FaCWm8r4erR9/3gp/e6yyuYA0CbY7j3tlp+/1/Qvqix1yzELc5MNkA4qG9J8EJ9SuSeN/9+R8qgOGZGbVnV2pC2dDbJZPfqMV1V/gcaZi/XRILpuz+Wo4BeKwxqmOTBX1yXOjLGxipXmUgGC0BOGAhldPX6VRTqlAqgl69qQ6tDSa0NgINVjg4K/h87ey+LGxhLZd7rbOMhCivmOOOvoJQAIsUIqVDWOfr19PDz/w89QxoGa1I2HaQacuwqfN+/eZ9b6ipHhWRy8Z0HpwlxllW2H+GUfdUewZEsd9hxIcilDCkSqwTRsdHRksuOEht3C6AoEO6az767HSveBe9SkKa+U3nf2mOcXCYjN6ISB5WE1ClRdOJd0a39T4zLVebVbEAGGzWtGHNr5Zc0GN7UftAiggZrjBJtDnIDCqSnwlc9Oq8jUS+4jZVkVz264OhepVcchT8JSgeeQ/2KDCw34q3sZ6q1TAfhZRhL6vKdM3gz+/IABj7p7OUv8iC1Im5i7hS4CXHlicAxg9tl8507psv1ePxbDNRCoS6+OM2+od+U3ma8RFAWzdBsvaXF2GWl6SxLmvRUvfavdwCmxUBmqxscgH8Kim1FZfW4EARHkIl5QYIm19a4Y2B7iKW3iDH7pBzbJ3uyozZUk=","layer_level":2},{"id":"aa2583bf-2c6e-4792-b794-1563db547d08","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"前端组件","description":"frontend-components","prompt":"创建详细的UI组件文档,描述组件的视觉外观、行为和用户交互模式。记录props/属性、事件、插槽和自定义选项。包含使用示例和代码片段。提供响应式设计和无障碍访问合规性指南。记录组件状态、动画和过渡效果。包含样式自定义选项和主题支持。解决跨浏览器兼容性和性能优化。记录组件组合模式和与其他UI元素的集成。详细说明侧边栏Logo、标签页视图、布局组件和各个功能页面组件的设计和实现。","order":5,"progress_status":"completed","dependent_files":"frontend/src/components/SidebarLogo.vue,frontend/src/components/TabsView.vue,frontend/src/layout/index.vue,frontend/src/views/home/index.vue,frontend/src/views/login/index.vue,frontend/src/views/brand/index.vue,frontend/src/views/model/index.vue,frontend/src/views/ota/index.vue,frontend/src/views/system/users/index.vue,frontend/src/views/share-code/log.vue","gmt_create":"2026-06-30T14:04:20.638638+08:00","gmt_modified":"2026-06-30T14:11:17.430176+08:00","raw_data":"WikiEncrypted:rJ/rIw0gVau8jPGqKFBAsBQkxmdK9VEWEB6rlQ8V+1n3+8ehC1YI3uvDR9AKl6JkUxV+3U9CRiifnSLpQnnLCcDHafY0ujJqoG3mrKKLwcRefLIG97HCvpjj9xp4OJcObEYBvlH2pirjv5kfcD3coj+uej2+6It4OTgW2/0oKQer4Q7Jd3Xj3CROmzgzm1LeW9oHFyhqH7niUp8ounxYBAbQB6XdHwIaefNnUgBxo1FjRY5CB1LpLxEjRSkY9CBNS2Dfpl69BuhxVtiLlOBNsl22N9tUH0iPTEXk6TAQLd4Vb7QtJ8CCyPAtkpYnKU5QcfIO0Bcvp3MjVk52MPrRkpqhDzgLNq/58gj0RreavkJSyaecu5m5ingaM2ajsfwmWctlEFTbw7A7cpt15Z1RrVcJLo5T/4M0EFp2moBm1frk6hoO/SHg+ZmmZaSeN0CvbCvOu4VnNuh25cYO5dfRb5bD7aInrtFDRIEFVioUhtHbToaLmNbDxgYKC8jX0WO/lCgsNRyAqBMOVG9YywTcUyCao4ULaOYmT7bGHur1f7MHzT3Hcx7v+f5YDgtl7gIF3c37iMffA16fAhftd84iZA7DCWaR+x6ijSk6EVit7zN4bWFerdddsjBKgaNBH8WGTtsw4GmTfKcQ4lOr6kHuWwzvyJNbUAxVswCW7Kl7ofivxTaQwWtkjD8l6roq19h8uSRl7hqI2NFmLS/Mxuw5m9PNBlo3vptugDd5TAmLgLPkXnnPAHW5GBqe29HdNyEhU1vWTlQJu6TWrfVmeJrgLD7o4ciYSWBNzEJ0CMY19O60jiToNgpa2eBMrM6zgdhA9AdCdyk0sCCEGrNB18vMHFvtY96o/H+sVIVQsAsOoTx5sxOH0A2SJQX0NWZ270aO/huXZgV1r6rJV+iSPSpCAC4cXQ0EfI2bDDSzzWOSWezC2pwi8hfePFC64jC55cf1K03jW/4TH/MRixvP7PzBgDJ9WFTF5wLqV0IL6Rs/SDHnWnsbJ3+k2MGhSaMOncA89PGFNupdNbrk4x5luggzyTcc84zOUmn60WPhUrJZMAZfkkE4tKS1XRLUkHoxR/1WwL+VDZlaseEEFKZLWyNFBuGAscN09RzwicXS0WVW8CGZaAxZ8oMaydUMrZSqZMjVh7rFciLtXlbV2udQvIWE9dLuZVEGazVv+8BwkERKAXlPfl7VKo4Jpave0m0QS3JnRoK9RpQwsDXspauvY7XhvO4HvSwxXI1MFGjZBaqWEJCoEDzioluPgZ59mP+Zcf5AOw8qx+xLBLYVuJimxSmpplLeIcpRAD6GXIgXIpAQ0ZW629iB40UUtegO6jlZZMjEBNfW2h+7tArd5TmsR1GjBW04FHckaxFGn2sd8WOF1DbTN5g0lAkAKy/cGNjvEE1ZWKAKCGgv4IkAnme5huEBC2w9jqVDA6/cxoVNI1PqCHuZXtfmBqsygXhLj977b7lhgSMLm+ZyOl0F6tiopYxNMXhWjy1wCRXMPU7hHtqjeBok3Sb25XahZAuSPqzZ3MYjV4+PJHTejHONP9ch60/4uTU1ZmPSbYxlP3W91KjEOUHl4J79bUda7/K9+Fa84mMZvhiy1EOrsjAANGlQFE4+GAMHNdiLb69Zhc/CH0q2EaU="},{"id":"a6304333-66ad-4b0c-834f-a6a514069e3f","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"分享码日志API","description":"share-code-logs-api","prompt":"为分享码日志API创建完整的RESTful API文档。记录分享码使用记录查询的HTTP方法、URL模式、请求/响应模式和数据统计功能。包含日志列表查询、日志详情获取、日志筛选和统计分析接口的详细说明。提供时间范围查询、用户筛选和设备类型的过滤条件。文档化日志数据的存储格式、查询优化和大数据量处理方案。包含日志导出、报表生成和趋势分析的实现指南。","parent_id":"7e9246a0-207e-47e8-bc26-b9d36ae6f2f8","order":5,"progress_status":"completed","dependent_files":"backend/src/routes/shareCodeLogs.js,backend/src/models/ShareCodeLog.js","gmt_create":"2026-06-30T14:04:55.156497+08:00","gmt_modified":"2026-06-30T14:32:04.002947+08:00","raw_data":"WikiEncrypted:Vv0H16AayoBzPxX7ZlaOUGyGBdIMK4cf0QP9R1E4ivY78WzOdR/wvtMHeKsZOPO0asW2W/MvDKc2jNyZQ+LHngb47F7NF4YJSkCgZxByRVJgj10T4wWac0DckADW5AH88CZpVx4BBCtuW5KRlakkySQXJ0Vhm+mv0KwUrtthQTb+hq/5FeNYbS+kOr5euCqYQ6wwEmLbt10MSZp1WKWdfCf7X9KcgY2Io011J6+JnBsJnbbWDcnhkvMDFUdGk4GwKyEMiedTBkgb+39rNaRYcnJAsprHfzqiWCLqNoVAWgXLhDwpQo+Rj9Bju4u0x7yWdcWAVxIhjtS1HTrpnn7SF1fT+zQ9CwvBC1jdBr6zPv2EEfd9aDeDmF9fusxmxrz6O9t8G8p8DZU+16l6SzrO24RGp0ljE2hnue5SjY7K50OQ+9U35K/w+G/qOjEOt/Xm9AhDSALYcylw0X+3TFn0Dw17GvH6f/i4Rkt7qMYvBGYUby2TfoOMz8t6dGm1c9yflUtfXDVmMEwmVvMHLCRtuD5TyA5dQ/ZMntXUjliHSeS+A6CWlqs3JxRZ1RzMhrWSMPoLaP7KkI0jtFbNfasJ0Og/s0lvoq5QfTYeaB3SPAVOrEJCTUAk1WJBefCXaJLQJWM5BL41nZaNCLL5xFdD7vrcFofJoqf8rJdD76QntawCuPNY82NOq776fFPBqp80R5e0OAsB0SDbQ8ij7hs892TDLCAZD/uQpah7kDXRz3wpPMv5Fvw1Vx5dqBUU1Ft8O6oV36Svb9q7kzHN4uEsXSGmQqxigR/bDvMFj9wUMlwgWUOgeKVG3mvewBOFOO553ePEGez98IygIUSyEQH9u0EEnfXlX8Ctc1L/advVhMuLFfDBj9GSPmfqkcpEekoG2IhmUo15MFwKOmoR6YpBqaOeGU3M+ulhTXCdC/XVY/mQ+Tbruxlx4wSxvEVLqggywoVkMab3NqXnh2yrndnibentA5ka4iDfLNAT2NAPvzDWenmrtjYrZNRTiDoH4ZjahTBysR+ESqmTOnYPQcmU9ilGcP7Kf8y8xEndb3tWlBE=","layer_level":1},{"id":"e1d1f354-edc2-4c91-8d91-63d256dced21","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"分享码日志模型","description":"share-code-log-model","prompt":"创建ShareCodeLog模型的详细文档,包括分享码生成、使用记录、时间戳、用户信息等字段设计。说明分享码的生成算法和唯一性保证。文档化日志记录的完整流程和数据追踪机制。解释分享码的生命周期管理和过期策略。提供日志查询和统计分析的功能说明。","parent_id":"0bb34dac-0e1a-4cce-b41d-0194eda77f79","order":5,"progress_status":"completed","dependent_files":"backend/src/models/ShareCodeLog.js","gmt_create":"2026-06-30T14:05:22.625325+08:00","gmt_modified":"2026-06-30T14:32:46.410606+08:00","raw_data":"WikiEncrypted:Vv0H16AayoBzPxX7ZlaOUGlhYbZc4czqT8CWfnD/TT0eAt7tg/OAA6mgsocPcmsvG2PVtH5KfyjJ18P9rTMPxOEyjU1Gec605uXe0T2Yc9Mio8lwWTXlLiR9CHDgdmESC5j1t2aKR8fRd/OqASPFvLiR0grE99PCeoM7ob/y5BtcgxZWjzfCnfZNCwnjfkkosGhR45PqgoCyAC2Bvm0kMJCqP4lVPKf04wOTjSbr4eSl32wo9TqavhtHLUKJhoU1BhZbZ6uV7Gmzaq1mQWqsX71L36aDcvYYmopGt7DE2LJksbYCFrrNBgRhFv+N43uZbN5WL7wVhpvK8O4TVwd0FOwp+aZ7iAbUL7tgjCR8xtXJS5q57NTemsro4PJNWVbllR6P5VHcrSDBmtHsa6L1bXDOBei3zTdzkwRq37T3c3mujEECBZ/+Mz/9ujMM0yIhcbbPT/YGEGDAiU/BRLBAOMuV3WWC2MQhqRkoipHvCj8loLpu05az/NRT/cd/X5gfi0y7vJvNz1FLlIiiUEZfQro7D7k5gwTCP6/FBmDYgfPSOCN8xZdyb7gHNanf1+Cqj69JaEgpM8cJM/v7a47fURXAUR+wy+lsKH+YapUusdACBBPvzGrGTJGzBX9gZVLFdPZFt35TATN0bywZa5At1ySd8SIj2B3St+GopTloe/mXlC4w6a5oi4MsUi1aQNJUFynSnhmsvMHTFxp20vLRYRzH2gO2ReFyg+ErSFjXFKLsd7zrW/lMF0PFW90/eb7fGWQwoQT/GJ8bv50VRjO84z4xEz6cvM/y2o4LjMcbv2elQDtp6lJ6TC2Z9jG61tVu","layer_level":1},{"id":"c6207e0a-6059-40f8-a27d-367356363cbf","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"分享码日志管理","description":"share-code-log-management","prompt":"为分享码日志管理功能创建详细内容,深入解释分享码使用记录追踪、日志查询统计的实现细节。包含来自实际代码库的具体示例,展示日志列表查询、统计分析等功能。文档化分享码日志模型的配置选项、参数和返回值。解释日志记录的触发条件、查询过滤的使用场景。解决常见的日志管理问题如性能优化、数据清理等。使内容对初学者易于理解,同时为有经验的开发者提供足够的技术深度。","parent_id":"08dd4c40-3fd3-476c-bcca-4c8687a8d863","order":5,"progress_status":"completed","dependent_files":"backend/src/routes/shareCodeLogs.js,backend/src/models/ShareCodeLog.js,frontend/src/views/share-code/log.vue","gmt_create":"2026-06-30T14:05:25.898159+08:00","gmt_modified":"2026-06-30T14:33:14.029388+08:00","raw_data":"WikiEncrypted:Vv0H16AayoBzPxX7ZlaOULG3Baig8xCTbO2Ahhfn4705w5gj8ZRYmh46RDQMtCZDcT2ci8E8rsm8C/ie07Z01SjriTUMDr+8A42/BBZb/vivf/I1Ur0WP4FZh/48LAYVnwRQ0GNifiKYZ6r/iL/jguQ3fWxzUE0M/+R6HIELC8yJAbp7rcQIITL2AxtPIlU2pCBK/DCcqQD+ZybcLujwZWxLN3sOZv7I9hqca2d8RAp0ZUgYqh+tSW9DGD0yS9XHY1QrXl7hsXfIgSTvVprJ8RT5HOeKTMeBxcM288vxkz1ghLqaMTAik+OQN0BzR56crsJmaCilWkrOAX9R2xm8hLfGTGTwdwv0P6fYaXu6VwOHBRDHoIHfGrImp4IIqNl/qAQnBVEIF90ZUdARF/K4lVsKi5QByQzHd4xlLllAAhTWwK9S7HsZZ7T9HP6og6LjL0bhFAv7f4lX1gq2+EcdF4EC/sLc6w4D+SdCSFgVU0xdT56IyK2HCqk+Oa3x3yOT6iwe5gfFarTyyXSrSV3RDHIGxTQjw5ZLgrseB4w/uQSPLjoDkZLP8d/jXwMcNr4bqp8w9PxWyrUNViTfQB/UvF0DUtxSE2j6+nUvqGdl8Ix1VA62otvJvJFAikk9gVFtOHg+3qSjX3bq++/RQqakUc0NNE5MChQJYL/ZUX+MsmET7zMf7f8n+x8AWQTkhv433TAIPxZDEO7EVVshX752wWI5rwX+6dwESN5VijNJl/emYmtP7TslKL6O12aJ/nVMD0zmRsBl2iHy0RZkN9eLWDa/pklLR/Oqz4Pm2r2Dd1lh8gU5sHdMMVYjz/g/hdk4KVkvOKz7kAFP0wHLPPzNiplQ18EUANo91+uz1Y5VdeODz9dktzaFqMjD1octmfT4pX5YAT/zhIQc9MsKjbHTAueD6bqZxj3x0qiZ9gh05gFbrskmk5q2ogQ/HzE3E4lrM6f2tYMv8KzXjP7yKEHcMOBJpO9dQZd5i7it8/RiUAHSb7Vti8AKU8Vw+TOV55DcDhFbK5P9y2qvuxqUldoMQK17B9wEx2nncwPjOJP5wXEELVSCNDm9Z29WK5LjvNExjGy7E61ilKE+rLRV8OMZoA5ighPPFXalAtu7mLH9y8P8lhjNfSKFoGWqPz0GeSGHgYiYIJ2uAMIsp8PabUEf93feQ4gaKPupXFYXWZQFV+XZOLHbet0vp6KH5TBD2X2fQHG4FVe4IHTI4T5kGOpx+ZDv3WPjRDrHHl+CCVCwlkaovZU1dGMSoUsss8uXaSH63mv5fUu9tAM01OquwkJLbg==","layer_level":1},{"id":"ff078afb-bb04-4600-b51d-5af48a6a6f06","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"系统用户管理页面","description":"system-users","prompt":"创建系统用户管理页面的详细文档。全面介绍用户权限管理功能,包括用户列表展示、角色分配、权限控制和状态管理。详细说明用户的增删改查操作、密码重置和权限验证机制。记录用户角色的定义、权限矩阵和访问控制策略。解释用户登录日志、活动监控和安全审计功能。提供用户管理页面的批量操作、搜索过滤和数据导出的实现方案。","parent_id":"f00798b7-c49f-4260-b9c1-d1ee413b030a","order":5,"progress_status":"completed","dependent_files":"frontend/src/views/system/users/index.vue,frontend/src/api/user.js","gmt_create":"2026-06-30T14:05:55.603342+08:00","gmt_modified":"2026-06-30T14:39:03.429018+08:00","raw_data":"WikiEncrypted:gWB8HBj+8+/15rQhXgtMjBvJUaTQCtYwqrk1rWKWMXJ2ByhuPeDEe4J4aaVwd0GgkvyTIoPxLy0LzUPY8r27d/l3kXaZv/WIKLhXGNj4yqu/L9TGNhQd7PzwpK1IySbUybplyf6amFlUaZuCaMERjNdevMyzFYtpxg6ayafgmP7QZecNCYUUM3UDhFO+jU77Y3eONzUMc7vXH/eCT/Dc8cixl5LBJezboIymPfUKgJeIdetGX7IbiD8pL9tqiP3VV20ENuC361bvx5BHKgEgEz8r0ZRf+9GIa42eaVqFk9oS/OowsTalFP/WZp8IvsoQDgbxWtLfVja9CdwkAVvNFFoL92QsKVmMWwH4lC52GOFGmDtwWsWbsAQ7SC3FGCM9JqnaqrBk9L4OpLg7pbEGasp9n9YM4uL0i51ofbrskfLA7c5Ic8YWcfSq+YpP2Jfq2SfzWhkv6/69JsVm+ZeGECDYz/0BGLtJxuOHkE/X64/lMwm31m7RCbzrAT8s4fv70FYcrJ/e8ZTbBJJZ3nT1xOeu7NNolSYaUNRMKjj1f5XkM/bMio6syjKv3/sgDYeom2Z7KNC6qSiTtHSnUhR42TA/gepnPqFc654KQYnEbgtAxassS1rRCPSzZImnQue+Fm/xTdC7aQoeH7W9EGQhx9d/VKgE3DtmwgFfod4b9BL2E8Y+tjinaohB3LFSs0ywB30qKQeXZ0P5O00PShkYvMrnbrMgSYl9v1ikd2ca0x7UQMeS/9tanT+Nifwq7peDxs+vuwD8itOpOhe9lmEGyaunK3mOmMNU2qUP/IsFh7AG+0RI+ia2YOGLXRp/DAbZQOeiJotMpzzCetWsU2C7tkh4up/34yJu+PlIernbNrohRmq012Vk43bJsJuE/ozXHeWh2abw++XRn0rdJUXv4oHuxv/x/ou4BNRGgqxxLsK2sH44gu1qYF38dnjvjwos07VT3aeLuJQHfsrl3acgM+AniQul0Xzht3gFgcf88x++sScG3dMcqdCzRdr2YrFR","layer_level":2},{"id":"08dd4c40-3fd3-476c-bcca-4c8687a8d863","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"核心功能模块","description":"core-features","prompt":"为核心功能模块创建详细内容,深入解释实现细节、调用关系、接口、领域模型和使用模式。包含来自实际代码库的具体示例。文档化配置选项、参数和返回值。解释与其他组件的关系。解决常见问题及其解决方案。使内容对初学者易于理解,同时为有经验的开发者提供足够的技术深度。详细说明用户认证系统、品牌管理、型号管理、OTA固件管理、用户权限管理和分享码日志管理等核心功能的实现原理和使用方法。","order":6,"progress_status":"completed","dependent_files":"backend/src/middleware/auth.js,backend/src/services/userBootstrap.js,backend/src/validators/brand.js,backend/src/validators/model.js,backend/src/validators/ota.js,backend/src/utils/jwt.js,backend/src/utils/password.js","gmt_create":"2026-06-30T14:04:20.638906+08:00","gmt_modified":"2026-06-30T14:13:04.758812+08:00","raw_data":"WikiEncrypted:luoNp8LvFa7zGThvIT9T4gfD6KbzJyTAydbcRfVv0b71O04CYqWd+mhwOAKx5JsjRdElm0elYpXWbl1GcuBvfF0k/N/rYqIOGrNDyuFsYrr3vrPVHqwKfwIO8ii5FyJ9G2/CDKYKxfMvL5/eI5LLiI4dLJtQQ/EdXK+jGK6/3zTIZqdWj6UWzEW0mzY+65TLZKIQZsNDvuMmW4V+typo30j85XSOUpwUwj+/2P69d0p3/7KOTGhpxkQJpKwSS+Ou5oR7kyDTwjuBkFTeJYqyV4VYROOqBypa7dwYKe6Knr1LT+azHmTqixb1zXUPJQ6p979figgTjll32+b/GM+0T95z9Ds7J33B5KOsO0LOJ2cNLWiB+C528YQV0AHDkFf1mTE6bKTBGolo1fT4KVvufyT4JAn0aYmpJDe7tiniUE6tbKy3fen2CQn9ieLIOKFMeUBmDsDefoy1030Wnd5JzFcKgRtb87NRHcsiF5I+V+X2E2TlZUoJoBh2+PIAZYkxWcpXMD8Zpcfv17FAZo34dTydLS3wYxVC1tKcqor5qPs+woQNYAnvSCdaK3H0Hd9zIb2V13Yw4TRtaGR93SOAPzmuaylTjsqmJkhkPpPdL9RfBPI0NWsglIj0e7zkEcku4zGa6Hs0rFAUnvrmhf0fWTCe2cSQGsKT/x/At4Bbv1VXx/iJB5IG9L92sH9auvd3zPQzrXgvmZtIf5veeHTENNsFXlRqyHIlznBprPM1GVkTnIUQw7mmC+4Q/6jSl1Fv7xI6EG/1udBu/KeaPO67Hp8A1YNTf1ZspoQoSGsV4deaNlmJgBEN8AIyClPwel1TmRAOmWv+F7NI9qVhpN4XyaOA5Z3wLMRdd1TAxRzRXgbQWvO74iEk524UaIecqPr3oFFsE3HHj52svrYNQ4mHfD37w2y52cOqC/kcS+4oPBgecVMRLNK8zQe6TeyZZHyFxLrnPE3yPqPlVq908l/SlqwcGa2igXYfFHCVeaXwT6cPl+MscEbagyBiX4x1QnH/S6eX2dvxx0XY+44nhTYGW1tTBXetozbFeMqqAtV0XePJizOGsP3Lj2vFRJAHZ0N4cgNkiQhJ3KlyCoakiATQXJ/Ff/3M4frqDjOKNgpcGoZJVi8mS1gxHRzr2RdQoq+7KSMhmyGjVSrCbNN1TYIcbahutqBg+nR3vJ99qFoP53jpWwT8PrBP9LqIgRxcpoRf37MTX5j/d86fQw49ZGESGNenE5At8gBSjU2xnAIjZ+F33NfP8+Gz0UQ55JvwG8CjDXbe2noRsLFhkX2mEpZZURkUCUwgViZJht+EkhmoJGdb20nl7nQcUCRyeyH6+kS2RDlqP0MbMuZC3N8E2Cb6QEXiCy8cJTjg8OWpIOvFGO7W1FPwPDXlYJsM09Oo/VhFPx5ImU84OMMy2ku3T1pdBwi8FjXr1WPwwNmRTK4aqj4wrLgLiW5u7UXyrUQBDbS8o3sc5W2z0P8oFWcBaUYRtKmdryx/ogHWLuINkyfSUHAgkWx/keTw6SlEAPYdQGXbal3G4vO3aEnA4oCPhflkrg=="},{"id":"7272429b-c7fb-4bd8-9bd1-0093025d68b4","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"仪表板API","description":"dashboard-api","prompt":"为仪表板API创建详细的RESTful API文档。记录系统统计数据查询的HTTP方法、URL模式、请求/响应模式和数据聚合功能。包含品牌数量统计、型号分布情况、OTA更新状态和用户活跃度等指标的查询接口。提供数据聚合查询、时间序列分析和图表数据格式的实现指南。文档化缓存策略、性能优化和实时数据更新机制。包含自定义统计维度和数据导出功能的使用示例。","parent_id":"7e9246a0-207e-47e8-bc26-b9d36ae6f2f8","order":6,"progress_status":"completed","dependent_files":"backend/src/routes/dashboard.js","gmt_create":"2026-06-30T14:04:55.156596+08:00","gmt_modified":"2026-06-30T14:34:26.686007+08:00","raw_data":"WikiEncrypted:rL6JaAWnwczCsZW+uBgt2MaU2Sf5hn65RLINj/MhHZqs/HaL1M/vKzdpRke4FGDeaqlgIkX0Vsq6pgMDhS1PLtsNQBQbbup3R7hfDCWHR7czvQfTQrqQOghuXOCS5RshiZIhSV5UutgR3IhtdYwYuC1cGrxnqubBTLaiNlwSkSCBwNnKv5wnHnP/kSTtGschyyeMxsR0xgLm93y19LUJxzQ35x+o+JHgNt7L1clDn1f2Q/ndGER8N5G6D30Ca4ktQc/XzBkD73s6Y6ATaZU4fF9lJjkb7Xouo6VBeWM/AWnZDx7lOLLIfGHZwEixsbqfV3DPFQnQ5ouP8ITf9zPIvOLqXdiBK/eE4w9o+KnoarDckNX5GdOib9xHogvsjnppRV6HPQAkLwj79jVPVWMDFLLrOA7s4nnSkQ2unS6yWJOH41xes7IM36ZsyWIWGoF/ZfncMR2vb1d6KRd6jKE7U1rWCkhwBMRCtJWteXsXljdFTmntEBDtsnylR8gDBvxw3yX85/iRQE3fgUnx1bzG1Csq7hyeTpYLzKCJGgsoGmXQcuPQy3kvG53RM8x3PLEYSYlDCNn77yDInY9vGLH3AEhP8HfRR/ZpbZtEbTEenKBq3Lpp9JNVMypx8WTiGDNr7Uox6UrnQJn77vaDePXLU9RL2zqzb/ft4ghSWgWkGdxcVZuueg+R6jh5VidCS/2lM4RB6CLZx8B4fjDo0lPC5qjbZfKjw3oBNOXus90NdOMlDs9sK5B5bdAy+xI12Ku3TaX9pvbhun/UkHYHxw/izxoU5pEPmr5H4iOsOOjz723tH+aqaoOA3SfDR3E9vWvd1I8qWQrmf409xaZfuoDpga88y+qC2speLpfqP5XDm76K0m5hvzZI5F54vflZN5TXb6GFYN7/9nNbsPZ4oBgYfPy3GhtEe/eoit9VkApe/PFsqnJ/5EEdU8SvT1wjGsczIvpTY4dSR5q8YpQL6lNH2Q==","layer_level":1},{"id":"830433a7-7370-479c-aa05-c21ff47b059e","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"分享码日志页面","description":"share-code-log","prompt":"创建分享码日志页面的详细文档。全面介绍分享码使用记录的查询和分析功能,包括日志列表展示、时间筛选、用户搜索和统计分析。详细说明日志数据的格式化显示、分页加载和实时更新机制。记录分享码的生成规则、有效期管理和使用状态跟踪。解释日志查询的高级功能,包括条件筛选、数据导出和报表生成。提供分享码日志页面的性能优化、数据可视化和用户体验改进方案。","parent_id":"f00798b7-c49f-4260-b9c1-d1ee413b030a","order":6,"progress_status":"completed","dependent_files":"frontend/src/views/share-code/log.vue,frontend/src/api/shareCodeLog.js","gmt_create":"2026-06-30T14:05:55.603485+08:00","gmt_modified":"2026-06-30T14:40:47.220384+08:00","raw_data":"WikiEncrypted:Vv0H16AayoBzPxX7ZlaOUKj5ui7aJNjWR2KaITM+ncU6ladAgr1aX4O1zoYG4BKYxYSLSuvZ2LqnWBJ2QqydzLeyBat1iN9bTXVMqMkgeJtkcSlNEEEBOpwdoKxUJii0pBbTaTPljEgvGCJAdvtM6yaGorC0QzbypPecbpVh3DAjgPtWtUIfgnh/GYXu7HMfEOLjMMyQuJypBLnNAvdE2xXmS/QoHf10Z8jKuZHUEbhw3ognUK++ZjIED7IEMXsM2HoDIWWy2lZE539AcsA9nkIOFMRa34TlykOLVIWGhN+H7uZGRqff0XX8Lwt5hNvL1a/3ZPm/zZJtFJRzY1PmfxyaUjEbF7KQMiGdKNAX1ycQenLZ/ynZX1xiEakxuX4S5qxospfzPGG27gDX8bJKL+3QoqYMxU/6AdnQ3DIox9pP4fapR3p3RYlpJRtSqqFEeeU0AUWmUNHPyBCPgHccE+XNZpISolk2Hln2oVX4yMeI9psNaMz1DpxYj4xlswa92pmvtFEAcryIpMdytbdeAPC2p6O1fyHRkNXdSzu513mdblf+dxvTQs9AEKnzH5IISdpT3oqa0TxsQIonzIXjfyPDQ23xC74ZjI+olJBdCnklVb77alqfTKijeVHqhz8E/oBRslPIuRrBTmbr4MUfnnGv4ABxmqo/MJdG1aSWK+VLXi2S9P5Yi5E/Wwu8H8cYl86z0TdwDM5Hl0l+X0abPVyDJOcHyVvz80tpUlxcC6G9Xz4/vjCq0xfqYtDV4NM2ClDyMsuxq67I9S6UOCBAZbHH5N3WOzgPrZNyfbeFUpydMKmMOgBh5GjkQ3Pz2D+83z+wBDSk8PV0mzk0Re6AqwtuTJtZLBFtavN7E0GJp1Bq+B9fOhkW73CxJvwqIx6freEb2JUkKP8CUVULlLyar8uKaRA6QH9uFiT1SJZkH1fc9CMBH3H/RzAhtB21FP4KFAVk/ha2CsflO9bdZVM3OkChSKQ3qPNzib6+R66ZevkbT7skK19HcLJO3Rr1NOP9tTy0Hy9THr5msllCLl7NDMQi1yiK5GSaztoHJr7ZWuX4FV7iAHww5fyqzLeaVFXK","layer_level":2},{"id":"a3ddc4e4-116f-4781-ba9f-17c85c85396e","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"部署与运维","description":"deployment-operations","prompt":"创建部署与运维文档,详细说明Docker容器化部署、环境配置和生产部署流程。包含容器编排配置、服务依赖关系和网络设置。提供部署脚本的使用说明和自动化部署流程。文档化环境变量配置、数据库连接设置和缓存配置。包含监控指标、日志管理和性能调优建议。提供故障排除指南、备份恢复策略和灾难恢复计划。说明CI/CD流程、版本发布和回滚策略。包含安全配置、防火墙设置和访问控制。","order":7,"progress_status":"completed","dependent_files":"backend/Dockerfile,frontend/Dockerfile,scripts/upload.sh,backend/restart.sh,backend/stop.sh,DEPLOY.md","gmt_create":"2026-06-30T14:04:20.639263+08:00","gmt_modified":"2026-06-30T14:12:37.808551+08:00","raw_data":"WikiEncrypted:0IKfLNOWe9mZfG1jVts3w2XbjO+yyEmY3ONOjrL5GjA8+3c0QEcD9OcCVHu+1BW/N5NkoQV86wegqQ9ShX8iSQ2xYIaslcmoc/Kv5OAnUwWV3nuAw37SIDSnlfEVjxgdWIfKDpMe9ANqqSg43yyyS0j6a1ZNPv/lWSKJTBIXQlfQxEh97cKf/j/LT7ms4fDbTvmHrdkW/jEQefQD7MAtQ00jFlMbUkoCaGNftGOahpB8DxiKjvXF2XHkIBSB+ljy8IAN480duozYW3EHkn9BG5DRSK26AvZUAJe48qfnGYdQfTAGEglE/1Hn6EV/Nm/Lb8UvgmdnuBaKTUiZRNooEwAeDN9FVwpQ7worjnl8Wzo8Ngbl2o07Zf9fN+KcjkIURxsPmfGu9sD6V9l1RLWZ6dtbz4WoDiQPm5pDkI0VaVo0KZrYJVqQnyYHiGLgYtwhQ7nukY+LoRhX7Hvp89YdV9IhrLTE1jsDAeCRw579FnnAzgvBLN6zixDwRCyr3c/VerMICukg17xUZBvIhgXPW2oB8aKCvEWd1DoVOOwTTeSRGaBc3YL768bwg/fgb5nMcpkKKEG8oFTiD0WQgV1WrAWmdgqLUic6njl7DH/nPwtU4kvstO6ylEWrBJh8WjjnuFdwsNYNFOXm0yLRUDPlwltGbjmmrB5+TUJes5jh7PSvyD1XFtM0grPtQpYdIM5GZtNYa172rLsqEbW9ZLMORo0XYf0lxg0pNCmBI7/OgcsUnosbnfqoLleFwHsBwIR6IWox1cSj2a8ZP2DdIF1EkS1STU4kcntPhJg/MU6IAHZByl9NaNnPAT9fbjHNYrjgvAocunW1h/GGjsi8yIsr/MYBKQRMHt0Ebx6FyjCoTdVyEZBmj1Ln8n53VqlQUaTLOTlY/+PLW72ayeVV1dbw6nODIElixkXST6BfiyyzGX4NcPjHvrMEj0x7iuPn5XqyNW9cCnIYaLK1POgQXVHvC78pjRvPdQcV2ofQwNXhiUd3OqejjZKYOiXsozbPI2ZmCy/R1XmqKiDotFyd9coZZagRFDm+CP5hAAYjGnqmUIWlnx031QhinbQ19YgTQyPe91UfMnBMYE4piy3j0ar6hKLZHqUrpDdEZc5IhsPiIpVEuUWChMcy/y5JR+jvcKVuXqaFmjA9MVUhyp8t4AslTb+B3O4g1WLlMBmUN1HYwc9S1io68uObIzwvIOg0IF1WiR4jj+F6m4Pqw+Zd+Bvs8HEJ0br7bBtr39YNX1ya0Us="},{"id":"0545bd33-f65c-4e1f-b2cb-04bea825925d","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"开发指南","description":"development-guide","prompt":"创建开发指南,提供代码规范、开发流程和测试策略。包含项目结构说明、命名约定和编码标准。文档化开发环境配置、调试技巧和性能优化方法。提供Git工作流程、分支策略和代码审查指南。包含单元测试、集成测试和端到端测试的实施方法。说明依赖管理、版本控制和发布流程。提供常见开发问题的解决方案和最佳实践。包含团队协作规范和文档维护指南。","order":8,"progress_status":"completed","dependent_files":"frontend/vite.config.js,backend/src/config/env.js,backend/src/config/loadEnv.js,.gitignore,frontend/package.json,backend/package.json","gmt_create":"2026-06-30T14:04:20.639515+08:00","gmt_modified":"2026-06-30T14:13:05.375027+08:00","raw_data":"WikiEncrypted:F3QgleoEfoy16cQggYe9C/ucQxiwh0okVA48AmODs5RKNS8ZgNngqmnHSFcG/1UaJxx+3dUn+EkMTpYUsOg40oH68Nx1IqebKqiC8fCVx8Z5dT3AgUInNoQcVloeb4yQhs1Oufr9wTZo7fZfd2EizXXbLOV05/YLO/Bja3sQV4rbFZH21TOR2bzMC4+Bvh1azFozPC/ma5QkwfbGmawutVaO402XGO+5xnrsGCsVAQr2M8O409R1wh77/5lzca6ZD0OFo1iagqoMSEXyVx6XsW38aoy3TPa93+p8MSYGEXZKUGuo0U8H/GetcXMJ21wi60fPOQhiVg9ePRXxG8wnT9Q0YxxUIb7JWiGkDgtE0n5qcCo7xcA3FzYOZ2CH4OR+2LjRjmTWUU2SbXJ9jXKWnXP8HREN4oERnOXLRcGVAA7zHN3BIkCz7pscIxGQ+sNh+xZdhrgSBP4BqoZEnRQQlyDrqA29kJpJXZs60se4zqy3SRe8xpB8DiB6puJqsECj+osTyJFPENV14Gb/ixpNzHho1UY3Ohpt+Eabp6RG572PwSRkBaegUf5Y5MXeueFRfD4XghD+p9yS8u6aohyV378+hS80kvZnTWd2eiveVL7Q90v5DiOSQLApGbIV2G44IxEw2uIKsuWvffHT8JHO2RxJkitMMfOC+OSLMwph76bCPS+0hYM8kFgEl4xFyTGggt/JE3njsBxW49xeYZfnUYUDndPRxIWDFVT2WqUKup7aZQ4gUFcycaEH97G5lD1JgGQVGN5jGL2XjksL8EL2WrkZkj7Mkwlo03MFQYETI/wPTEqUdcsgFdXOCGMw34z5Pz2VlnNXn3faJcb/EmO700V9FtLl4sedrhQFfq8oyBIwwycQNtQGBdx2pfCJhjeLMKSeQ+BYoUxddVIpPoBdo0d4G4rrlK2BREXPCuyeH4dmB3rCPyTcWheDZtVLdid/MJwCujHV9jJVj3W5UTW5+pwkcBenKNyb/A0yYUqFDaylhA4Ff6dgxMUqeZiNfxGXORFKuNgQwd/4941XXqA/U0pX1uyPm8Z+ydGBmtScMw2cLtmWLFtUYA04OsqUWVaaX63Dvyr0OuohK8gSIX2m89KrHPV5hcCaH32WycKCi3zgSG+RfFLX9+I+LG0YQ2dcyRU5VVK4h1mkv4MRIqphyEjifJBweXHgmS8nP8kbRuPQfeM++y+1VPvUYwiTlHK48YW/H0Q/FLkXfQA6l3gVZA2jHJ5zPTJcbfY+3fRJr2g="}],"wiki_items":[{"catalog_id":"de69fb0c-330e-4831-813d-94fb958688da","title":"快速开始","description":"getting-started","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"817d80e4-81ba-4f8a-b0e2-85e99d8a73ef","gmt_create":"2026-06-30T14:07:37.609842+08:00","gmt_modified":"2026-06-30T14:07:37.615532+08:00"},{"catalog_id":"70ba09ee-60a3-41f9-bdda-3cb904cb26de","title":"系统架构","description":"architecture-design","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"2b5fd78d-2407-4ccc-8807-9bb05c0a687e","gmt_create":"2026-06-30T14:08:09.125669+08:00","gmt_modified":"2026-06-30T14:08:09.130252+08:00"},{"catalog_id":"dd61923f-65f8-4e98-85f4-0e0a0a649a27","title":"项目概述","description":"project-overview","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"190d3cad-a28e-4cf2-a8c7-64d953415cca","gmt_create":"2026-06-30T14:09:11.170718+08:00","gmt_modified":"2026-06-30T14:09:11.17433+08:00"},{"catalog_id":"7e9246a0-207e-47e8-bc26-b9d36ae6f2f8","title":"后端API文档","description":"backend-api","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"1f4b6f57-25c5-444e-a943-d162d896dc21","gmt_create":"2026-06-30T14:10:41.226897+08:00","gmt_modified":"2026-06-30T14:10:41.230722+08:00"},{"catalog_id":"0bb34dac-0e1a-4cce-b41d-0194eda77f79","title":"数据库设计","description":"database-schema","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"4553d9a4-e0e6-4bc3-b285-ecc6df9dc822","gmt_create":"2026-06-30T14:10:45.945099+08:00","gmt_modified":"2026-06-30T14:10:45.95039+08:00"},{"catalog_id":"aa2583bf-2c6e-4792-b794-1563db547d08","title":"前端组件","description":"frontend-components","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"ed153077-3827-4586-8838-812707189c14","gmt_create":"2026-06-30T14:11:17.426266+08:00","gmt_modified":"2026-06-30T14:11:17.430273+08:00"},{"catalog_id":"a3ddc4e4-116f-4781-ba9f-17c85c85396e","title":"部署与运维","description":"deployment-operations","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"c45b2f5f-49f8-4c8d-b489-44b4c6800e99","gmt_create":"2026-06-30T14:12:37.804986+08:00","gmt_modified":"2026-06-30T14:12:37.808728+08:00"},{"catalog_id":"08dd4c40-3fd3-476c-bcca-4c8687a8d863","title":"核心功能模块","description":"core-features","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"d4cb0c3c-97e9-449f-8918-f1c01e7e3561","gmt_create":"2026-06-30T14:13:04.754131+08:00","gmt_modified":"2026-06-30T14:13:04.758965+08:00"},{"catalog_id":"0545bd33-f65c-4e1f-b2cb-04bea825925d","title":"开发指南","description":"development-guide","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"d7d400d2-aa83-47a2-b61a-55a62369b426","gmt_create":"2026-06-30T14:13:05.373036+08:00","gmt_modified":"2026-06-30T14:13:05.375096+08:00"},{"catalog_id":"bcc45977-c058-4033-b0b1-9fd4cd7f4443","title":"前端架构","description":"frontend-architecture","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"6b28e060-0be3-411e-8a94-3777d165d10e","gmt_create":"2026-06-30T14:14:52.873609+08:00","gmt_modified":"2026-06-30T14:14:52.878043+08:00"},{"catalog_id":"0f657e8b-77cb-4604-81cd-d3e921d28e21","title":"布局组件","description":"layout-components","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"b6857b45-a960-4168-92dd-1edcf6567e47","gmt_create":"2026-06-30T14:15:24.293181+08:00","gmt_modified":"2026-06-30T14:15:24.2965+08:00"},{"catalog_id":"d34906db-4455-4481-9512-b29115655378","title":"认证系统API","description":"auth-api","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"7f894188-cf72-40a2-af95-f13ef3dd1f6e","gmt_create":"2026-06-30T14:15:47.975759+08:00","gmt_modified":"2026-06-30T14:15:47.98224+08:00"},{"catalog_id":"7f36202b-af69-4fc0-b62b-a57e415deb69","title":"部署指南","description":"deployment-guide","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"5ab55e3b-04bc-4e92-93f7-52bec7ad8dde","gmt_create":"2026-06-30T14:16:33.823992+08:00","gmt_modified":"2026-07-09T10:38:57.853835+08:00"},{"catalog_id":"1af0f0e8-0c53-41d7-a894-47d9cc19d4f9","title":"用户认证系统","description":"authentication-system","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"772c69b5-886e-48f6-bd11-faf8ca2155e8","gmt_create":"2026-06-30T14:17:38.562007+08:00","gmt_modified":"2026-06-30T14:17:38.563255+08:00"},{"catalog_id":"dbe5d77f-6f4d-476c-88cf-797b80a11a11","title":"实体关系设计","description":"entity-relationships","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"0efcac71-9db4-49c9-a660-690dcb97cd54","gmt_create":"2026-06-30T14:18:01.58459+08:00","gmt_modified":"2026-06-30T14:18:01.58743+08:00"},{"catalog_id":"5a3639b1-98bc-4bc7-a346-91ed56edd2af","title":"后端架构","description":"backend-architecture","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"941d72b1-8daa-4c53-bfeb-9a0b2aa0f43c","gmt_create":"2026-06-30T14:19:05.640846+08:00","gmt_modified":"2026-07-09T10:40:13.128321+08:00"},{"catalog_id":"779d6806-96dc-4c97-8cfb-15a3d7855bd1","title":"品牌管理API","description":"brands-api","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"b66da3f2-6889-45dc-a824-2591d2f5f0f3","gmt_create":"2026-06-30T14:19:07.598117+08:00","gmt_modified":"2026-06-30T14:19:07.600914+08:00"},{"catalog_id":"eb78ed75-b786-4b43-ba43-58a5ea8a23a6","title":"业务组件","description":"business-components","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"2971fa4f-335a-4294-9668-0967b9047d66","gmt_create":"2026-06-30T14:19:27.851755+08:00","gmt_modified":"2026-06-30T14:19:27.855695+08:00"},{"catalog_id":"f96081f7-f508-41e2-bd45-a5b36a1ea114","title":"环境配置","description":"environment-config","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"62bcda0f-7c78-4109-9649-58bbf9fd68ae","gmt_create":"2026-06-30T14:21:11.821343+08:00","gmt_modified":"2026-06-30T14:21:11.825384+08:00"},{"catalog_id":"1e3d40bc-a833-4f35-891c-9dd96f09a1a3","title":"品牌管理","description":"brand-management","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"babe3ec0-01cb-43c3-93db-7e59cdccce68","gmt_create":"2026-06-30T14:21:25.618321+08:00","gmt_modified":"2026-06-30T14:21:25.623289+08:00"},{"catalog_id":"92f94141-482e-499c-bbc3-6101e70206ff","title":"品牌模型","description":"brand-model","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"ef11f60f-47aa-41bf-8884-6d51bc9ae8ef","gmt_create":"2026-06-30T14:21:29.093976+08:00","gmt_modified":"2026-06-30T14:21:29.097382+08:00"},{"catalog_id":"94ec54d4-0aa0-4e58-8e63-5ad6ddb6edbe","title":"型号管理API","description":"models-api","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"799e02d2-8358-41a1-9f8e-114f8ac00eae","gmt_create":"2026-06-30T14:23:05.595716+08:00","gmt_modified":"2026-07-01T17:22:10.388812+08:00"},{"catalog_id":"b47d7f83-5401-4a63-ade2-f087a2f61987","title":"数据流设计","description":"data-flow-design","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"c6f2cb24-ff10-4ae7-87c2-b23b9bbee033","gmt_create":"2026-06-30T14:23:25.129255+08:00","gmt_modified":"2026-06-30T14:23:25.133578+08:00"},{"catalog_id":"f00798b7-c49f-4260-b9c1-d1ee413b030a","title":"页面组件","description":"page-components","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"f0978b42-6f98-470e-922f-22dec2fac24d","gmt_create":"2026-06-30T14:24:27.13852+08:00","gmt_modified":"2026-06-30T14:24:27.143035+08:00"},{"catalog_id":"72a24a80-f221-49da-88a8-83c0f49f4e9d","title":"型号模型","description":"model-model","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"edd1d813-70d4-49de-9f9e-e3ebf7a68678","gmt_create":"2026-06-30T14:24:50.785915+08:00","gmt_modified":"2026-06-30T14:24:50.78921+08:00"},{"catalog_id":"00a9d595-dc79-4ca4-8264-1c3f4a200a28","title":"监控运维","description":"monitoring-operations","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"86f882d7-9e64-4c38-85e7-4782fd55fed2","gmt_create":"2026-06-30T14:25:08.609638+08:00","gmt_modified":"2026-06-30T14:25:08.61406+08:00"},{"catalog_id":"93c96675-6099-4ed5-8f40-6a47b3050712","title":"型号管理","description":"model-management","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"8d4422fd-bd93-431d-a97c-70b75f370f82","gmt_create":"2026-06-30T14:26:44.041445+08:00","gmt_modified":"2026-07-01T17:22:44.422114+08:00"},{"catalog_id":"41e8823b-fa7a-4a80-809d-cf21088bdba2","title":"OTA固件API","description":"ota-api","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"be7e1733-8c9e-4849-99b0-bab40fdf271e","gmt_create":"2026-06-30T14:26:52.74545+08:00","gmt_modified":"2026-06-30T14:26:52.749367+08:00"},{"catalog_id":"6cd96b12-bb94-4748-94a8-9ef9bf21aee0","title":"集成模式","description":"integration-patterns","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"4619dc3e-419f-435b-ba7c-e600e188743a","gmt_create":"2026-06-30T14:27:35.804293+08:00","gmt_modified":"2026-06-30T14:27:35.809224+08:00"},{"catalog_id":"02f97459-8352-4fff-9216-8fcabb128d77","title":"故障排除","description":"troubleshooting-faq","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"ff04bd0e-99c4-481c-ac8c-3c1a6cae1fb5","gmt_create":"2026-06-30T14:28:16.984682+08:00","gmt_modified":"2026-06-30T14:28:16.989286+08:00"},{"catalog_id":"92ff3472-40b9-4adf-82b2-faf5a4d4b158","title":"OTA固件模型","description":"ota-model","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"b2376dbd-002b-4469-8e6e-71748e46e7c2","gmt_create":"2026-06-30T14:28:22.047078+08:00","gmt_modified":"2026-06-30T14:28:22.050489+08:00"},{"catalog_id":"6dc54635-13f8-4ae3-b3a7-54c65dea2997","title":"OTA固件管理","description":"ota-firmware-management","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"da7627b0-17b7-42c7-a029-e357bc889416","gmt_create":"2026-06-30T14:29:32.814324+08:00","gmt_modified":"2026-06-30T18:39:56.546951+08:00"},{"catalog_id":"b4054b83-f0cb-4b7e-9b3d-effc904a5686","title":"用户管理API","description":"users-api","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"8f464fc9-6537-45fa-a0dd-eacdf742b5a1","gmt_create":"2026-06-30T14:30:22.103174+08:00","gmt_modified":"2026-06-30T14:30:22.110852+08:00"},{"catalog_id":"7a728623-5bd2-48eb-80d9-0f253bc74123","title":"用户模型","description":"user-model","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"b5718a44-f452-496d-83c3-4e89b844c709","gmt_create":"2026-06-30T14:30:58.462691+08:00","gmt_modified":"2026-06-30T14:30:58.467737+08:00"},{"catalog_id":"4d08f4ca-84f9-4f9c-8d9a-0983f78a7005","title":"用户权限管理","description":"user-permission-management","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"100cbee2-f7a5-4cc9-83a3-900a4aacac7e","gmt_create":"2026-06-30T14:30:59.491588+08:00","gmt_modified":"2026-06-30T14:30:59.497862+08:00"},{"catalog_id":"a6304333-66ad-4b0c-834f-a6a514069e3f","title":"分享码日志API","description":"share-code-logs-api","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"77bc73e0-8709-4209-96e0-5522f9356b06","gmt_create":"2026-06-30T14:32:03.999307+08:00","gmt_modified":"2026-06-30T14:32:04.003175+08:00"},{"catalog_id":"e1d1f354-edc2-4c91-8d91-63d256dced21","title":"分享码日志模型","description":"share-code-log-model","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"539729a8-aa4b-40c6-bf3b-ec9f467f7717","gmt_create":"2026-06-30T14:32:46.405942+08:00","gmt_modified":"2026-06-30T14:32:46.410705+08:00"},{"catalog_id":"c6207e0a-6059-40f8-a27d-367356363cbf","title":"分享码日志管理","description":"share-code-log-management","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"cf1f3ceb-e3b1-4d5c-8353-f0ea4345414c","gmt_create":"2026-06-30T14:33:14.023031+08:00","gmt_modified":"2026-06-30T14:33:14.02952+08:00"},{"catalog_id":"8f0760f5-ef8b-43ef-8fd0-7c6d1f693193","title":"侧边栏Logo组件","description":"sidebar-logo-component","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"0e003133-7d1a-4708-8599-fc71707070d6","gmt_create":"2026-06-30T14:34:09.992825+08:00","gmt_modified":"2026-06-30T14:34:09.99631+08:00"},{"catalog_id":"7272429b-c7fb-4bd8-9bd1-0093025d68b4","title":"仪表板API","description":"dashboard-api","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"799ec9fc-088e-456c-8f93-72516adac3ac","gmt_create":"2026-06-30T14:34:26.68183+08:00","gmt_modified":"2026-06-30T14:34:26.686097+08:00"},{"catalog_id":"105cfe1d-aeeb-44c1-ac3b-6550f2c7a307","title":"首页仪表板","description":"home-page","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"ad988472-7d0b-4076-86c8-f14661c5923d","gmt_create":"2026-06-30T14:35:15.427082+08:00","gmt_modified":"2026-06-30T14:35:15.43438+08:00"},{"catalog_id":"727c25ac-db22-4b34-9486-6fd6946f64f3","title":"标签页视图组件","description":"tabs-view-component","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"4b6d6abc-bfd2-48a5-9c5e-de89f278f887","gmt_create":"2026-06-30T14:35:27.880644+08:00","gmt_modified":"2026-06-30T14:35:27.886677+08:00"},{"catalog_id":"c8151791-2f8d-4e1e-8139-b0cf921ef002","title":"登录页面","description":"login-page","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"7eee30c6-7725-456b-8b43-35b5e4df7e99","gmt_create":"2026-06-30T14:36:20.14068+08:00","gmt_modified":"2026-06-30T14:36:20.14737+08:00"},{"catalog_id":"32dbace3-24e6-4a2d-9f87-83f2ec825b71","title":"密码修改对话框","description":"change-password-dialog","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"5b84c784-85d8-46e0-8972-e7816f6bd687","gmt_create":"2026-06-30T14:36:50.047707+08:00","gmt_modified":"2026-06-30T14:36:50.062351+08:00"},{"catalog_id":"af7f747a-9be6-41c3-b091-4ee5901d8cc7","title":"品牌管理页面","description":"brand-management","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"791c01a2-dea1-407b-948d-3e2da8cbebed","gmt_create":"2026-06-30T14:37:33.758372+08:00","gmt_modified":"2026-06-30T14:37:33.76504+08:00"},{"catalog_id":"748c8db9-9197-4c3b-ae1d-a6e51d058342","title":"型号管理页面","description":"model-management","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"9f2c6c14-12ae-48cc-a1ee-fe703cd12a1a","gmt_create":"2026-06-30T14:38:54.071337+08:00","gmt_modified":"2026-07-01T17:22:40.416555+08:00"},{"catalog_id":"ff078afb-bb04-4600-b51d-5af48a6a6f06","title":"系统用户管理页面","description":"system-users","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"6003d293-f2aa-4c49-817a-c7fa652890ed","gmt_create":"2026-06-30T14:39:03.424765+08:00","gmt_modified":"2026-06-30T14:39:03.42914+08:00"},{"catalog_id":"f23cd2ae-fcf4-445f-b8e9-b3382f277ae0","title":"OTA固件管理页面","description":"ota-management","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"7d8f2ef6-290d-4952-b59c-a1d95af0d438","gmt_create":"2026-06-30T14:40:01.702004+08:00","gmt_modified":"2026-06-30T18:39:29.639208+08:00"},{"catalog_id":"830433a7-7370-479c-aa05-c21ff47b059e","title":"分享码日志页面","description":"share-code-log","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"73336201-a22f-4329-afc6-40fb5f00f4f1","gmt_create":"2026-06-30T14:40:47.216934+08:00","gmt_modified":"2026-06-30T14:40:47.220483+08:00"},{"catalog_id":"fca1e729-87eb-44e0-8c5a-cdbfb20d1a5d","title":"设计系统","description":"design-system","extend":"{}","progress_status":"completed","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","reference_count":0,"id":"33ff67a9-685a-4bc2-8d0a-1ff7bfd0de1e","gmt_create":"2026-07-09T10:41:31.845114+08:00","gmt_modified":"2026-07-09T10:41:31.846645+08:00"}],"wiki_overview":{"content":"\u003cblog\u003e\n\n# 耳机品牌与型号管理平台项目概述\n\n## 1. 项目介绍\n\n### 项目目的\n这是一个基于Vue 3 + Express的耳机品牌与型号管理平台,旨在为音频设备制造商和经销商提供完整的品牌、型号、OTA固件更新以及用户权限管理功能。\n\n### 核心目标\n- 提供统一的品牌和型号数据管理界面\n- 支持OTA固件升级管理和版本控制\n- 实现多用户权限体系和访问控制\n- 提供分享码日志追踪功能\n- 构建现代化的前后端分离架构\n\n### 目标用户\n- 音频设备厂商管理员\n- 技术支持人员\n- 系统维护人员\n\n## 2. 技术架构\n\n### 整体架构设计\n\n```mermaid\ngraph TB\n subgraph \"前端层 (Frontend)\"\n FE_Vue[Vue 3 应用]\n FE_Router[Vue Router]\n FE_API[API 请求封装]\n FE_Components[组件库]\n end\n \n subgraph \"后端层 (Backend)\"\n BE_Express[Express 框架]\n BE_Routes[路由模块]\n BE_Middleware[中间件]\n BE_Services[业务服务]\n end\n \n subgraph \"数据层 (Data Layer)\"\n DB_MySQL[MySQL 数据库]\n DB_Sequelize[Sequelize ORM]\n Cache_Redis[Redis 缓存]\n end\n \n subgraph \"基础设施\"\n Docker[Docker 容器化]\n Nginx[Nginx 反向代理]\n Env[环境配置]\n end\n \n FE_Vue --\u003e FE_Router\n FE_Vue --\u003e FE_API\n FE_API --\u003e BE_Express\n BE_Express --\u003e BE_Routes\n BE_Express --\u003e BE_Middleware\n BE_Routes --\u003e BE_Services\n BE_Services --\u003e DB_Sequelize\n DB_Sequelize --\u003e DB_MySQL\n BE_Services --\u003e Cache_Redis\n BE_Express --\u003e Nginx\n Nginx --\u003e FE_Vue\n Docker --\u003e BE_Express\n Docker --\u003e FE_Vue\n```\n\n### 核心设计模式\n- **MVC架构**: 后端采用经典的模型-视图-控制器模式\n- **分层架构**: 清晰的业务逻辑分层,便于维护和扩展\n- **中间件模式**: 统一的请求处理流程\n- **依赖注入**: 通过模块化设计实现松耦合\n\n## 3. 关键实现\n\n### 主要入口点\n\n#### 后端入口\n- **入口文件**: `backend/src/app.js` - 应用程序主入口,配置中间件、路由和数据库连接\n- **配置文件**: `backend/src/config/database.js` - 数据库连接配置,支持环境变量\n- **路由聚合**: `backend/src/routes/index.js` - 所有路由模块的统一导入和导出\n\n#### 前端入口 \n- **应用入口**: `frontend/src/main.js` - Vue应用初始化,配置Element Plus和路由\n- **应用根组件**: `frontend/src/App.vue` - 根组件模板\n- **路由配置**: `frontend/src/router/index.js` - 路由定义和导航守卫\n\n### 核心模块\n\n#### 数据模型 (Models)\n```mermaid\nerDiagram\n BRAND ||--o{ MODEL : \"包含\"\n MODEL ||--o{ OTA : \"支持\"\n BRAND ||--|| DASHBOARD_USER : \"管理\"\n \n BRAND {\n int id PK\n string name\n }\n \n MODEL {\n int id PK\n int brand_id FK\n string name\n string description\n }\n \n OTA {\n int id PK\n int model_id FK\n string version\n string file_path\n datetime create_time\n }\n \n DASHBOARD_USER {\n int id PK\n string username\n string password_hash\n boolean is_super_admin\n int status\n }\n```\n\n#### API 路由结构\n```mermaid\ngraph TD\n Auth[认证路由] --\u003e Login[用户登录]\n Auth --\u003e Profile[用户信息]\n Auth --\u003e Password[修改密码]\n \n Brands[品牌路由] --\u003e BrandList[品牌列表]\n Brands --\u003e BrandCRUD[品牌增删改查]\n \n Models[型号路由] --\u003e ModelList[型号列表]\n Models --\u003e ModelCRUD[型号增删改查]\n \n OTA[OTA路由] --\u003e OTAList[OTA列表]\n OTA --\u003e OTACRUD[OTA增删改查]\n \n Users[用户路由] --\u003e UserList[用户列表]\n Users --\u003e UserCRUD[用户增删改查]\n \n Dashboard[仪表板路由] --\u003e Stats[统计信息]\n Dashboard --\u003e Reports[报表生成]\n```\n\n### 配置管理\n\n#### 环境配置\n- **Docker Compose**: `docker-compose.yml` - 容器化部署配置,包含前后端服务和网络设置\n- **开发配置**: `frontend/vite.config.js` - Vite构建工具配置,支持代理和别名\n- **包管理**: 使用pnpm作为包管理器,支持工作空间\n\n#### 数据库配置\n- **ORM配置**: `backend/src/config/database.js` - Sequelize ORM配置\n- **Redis缓存**: `backend/src/config/redis.js` - Redis连接配置\n- **日志系统**: `backend/src/config/logger.js` - Winston日志配置\n\n### 外部依赖\n\n#### 后端依赖\n```mermaid\ngraph LR\n Express[Express 4.21] --\u003e Middleware[中间件生态]\n Sequelize[Sequelize 6.37] --\u003e MySQL[MySQL2 3.11]\n JWT[jsonwebtoken 9.0] --\u003e Auth[认证系统]\n Axios[Axios 1.7] --\u003e HTTP[HTTP客户端]\n Zod[3.23] --\u003e Validation[数据验证]\n AWS[aws-sdk 3.650] --\u003e S3[对象存储]\n Redis[ioredis 5.6] --\u003e Cache[缓存系统]\n```\n\n#### 前端依赖\n```mermaid\ngraph LR\n Vue[Vu3 3.3.4] --\u003e Composition[组合式API]\n Router[Vue Router 4.2.4] --\u003e Navigation[路由导航]\n ElementPlus[Element Plus 2.3.14] --\u003e UI[UI组件库]\n Axios[Axios 1.5.0] --\u003e HTTP[HTTP通信]\n Icons[图标库] --\u003e Components[图标组件]\n```\n\n### 集成点\n\n#### API 接口设计\n```mermaid\nsequenceDiagram\n participant Client as 前端客户端\n participant Auth as 认证接口\n participant User as 用户接口\n participant Data as 数据接口\n \n Client-\u003e\u003e+Auth: POST /api/auth/login\n Auth--\u003e\u003e-Client: 返回JWT令牌\n \n Client-\u003e\u003e+User: GET /api/auth/me\n User--\u003e\u003e-Client: 返回用户信息\n \n Client-\u003e\u003e+Data: GET /api/brands\n Data--\u003e\u003e-Client: 返回品牌数据\n \n Client-\u003e\u003e+Data: POST /api/models\n Data--\u003e\u003e-Client: 返回创建结果\n```\n\n## 4. 核心功能\n\n### 功能概览\n\n#### 用户认证系统\n- **登录认证**: 基于JWT的无状态认证\n- **权限控制**: 支持超级管理员和普通用户的权限区分\n- **密码安全**: 密码哈希存储和验证\n\n#### 品牌管理系统\n- **品牌维护**: 品牌的增删改查操作\n- **品牌关联**: 与型号的多对一关系管理\n- **数据验证**: 基于Zod的输入验证\n\n#### 型号管理功能\n- **型号列表**: 支持分页和搜索\n- **型号详情**: 包含详细的技术规格\n- **OTA关联**: 与固件更新的关联管理\n\n#### OTA固件管理\n- **版本控制**: 固件版本管理和发布\n- **文件上传**: 支持固件文件的上传和存储\n- **更新推送**: 向设备推送固件更新\n\n### 功能架构图\n\n```mermaid\nstateDiagram-v2\n [*] --\u003e 未登录\n 未登录 --\u003e 登录中: 用户输入凭据\n 登录中 --\u003e 已登录: 认证成功\n 登录中 --\u003e 未登录: 认证失败\n \n 已登录 --\u003e 品牌管理: 管理员权限\n 已登录 --\u003e 型号管理: 普通用户权限\n 已登录 --\u003e OTA管理: 技术支持权限\n \n 品牌管理 --\u003e 数据库操作: CRUD操作\n 型号管理 --\u003e 数据库操作: CRUD操作\n OTA管理 --\u003e 文件上传: 固件上传\n \n 已登录 --\u003e 修改密码: 用户操作\n 修改密码 --\u003e 已登录: 更新成功\n \n 已登录 --\u003e 退出登录: 用户操作\n 退出登录 --\u003e 未登录: 清除会话\n```\n\n### 实现亮点\n\n#### 响应式设计\n- **组件化开发**: 基于Vue 3 Composition API的组件化架构\n- **状态管理**: 结合Vue Router实现的单页应用体验\n- **主题系统**: 支持暗色主题切换\n\n#### 开发体验\n- **热重载**: Vite提供的快速开发服务器\n- **TypeScript支持**: 良好的类型安全保障\n- **代码分割**: 按需加载优化性能\n\n#### 生产部署\n- **容器化**: Docker支持一键部署\n- **反向代理**: Nginx配置优化静态资源服务\n- **环境隔离**: 支持开发、测试、生产多环境配置\n\n## 5. 总结与建议\n\n### 项目优势\n1. **架构清晰**: 前后端分离,职责明确\n2. **技术栈现代**: Vue 3 + Express + MySQL的成熟技术组合\n3. **可扩展性强**: 模块化设计便于功能扩展\n4. **部署友好**: Docker化部署简化运维\n\n### 改进建议\n1. **增加单元测试**: 补充前端和后端的测试覆盖率\n2. **完善文档**: 添加详细的API文档和开发指南\n3. **监控告警**: 集成应用性能监控和错误追踪\n4. **安全加固**: 增强CSRF防护和API限流机制\n\n### 下一步计划\n1. 实现完整的用户权限管理\n2. 添加数据导入导出功能\n3. 优化移动端适配\n4. 集成自动化测试和CI/CD流水线\n\n---\n\n**Sources:**\n- [README.md](README.md)\n- [backend/package.json](backend/package.json)\n- [frontend/package.json](frontend/package.json)\n- [backend/src/app.js](backend/src/app.js)\n- [backend/src/config/database.js](backend/src/config/database.js)\n- [backend/src/models/index.js](backend/src/models/index.js)\n- [backend/src/routes/index.js](backend/src/routes/index.js)\n- [frontend/src/main.js](frontend/src/main.js)\n- [frontend/src/App.vue](frontend/src/App.vue)\n- [docker-compose.yml](docker-compose.yml)\n- [frontend/vite.config.js](frontend/vite.config.js)\n- [backend/src/models/Brand.js](backend/src/models/Brand.js)\n- [backend/src/routes/auth.js](backend/src/routes/auth.js)\n- [frontend/src/router/index.js](frontend/src/router/index.js)\n- [frontend/src/api/auth.js](frontend/src/api/auth.js)\n\n\u003c/blog\u003e","gmt_create":"2026-06-30T14:01:22.420851+08:00","gmt_modified":"2026-06-30T14:01:22.420851+08:00","id":"f0295b72-1b14-4146-868c-8a0c307045c3","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414"},"wiki_readme":{"content":"No readme file","gmt_create":"2026-06-30T13:59:47.635503+08:00","gmt_modified":"2026-06-30T13:59:47.635503+08:00","id":"60f4194d-74f4-49d9-ae65-220e9f5829cc","repo_id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414"},"wiki_repo":{"id":"8836b2d0-e4ff-4f3c-b5c9-e5b0659fd414","name":"dashboard","progress_status":"completed","wiki_present_status":"COMPLETED","optimized_catalog":"\".\\n├── .pnpm-store/v11/\\n│ ├── files/\\n│ │ ├── 00/\\n│ │ ├── 01/\\n│ │ ├── 02/\\n│ │ ├── 03/\\n│ │ ├── 04/\\n│ │ ├── 05/\\n│ │ ├── 06/\\n│ │ ├── 07/\\n│ │ ├── 08/\\n│ │ ├── 09/\\n│ │ ├── 0a/\\n│ │ ├── 0b/\\n│ │ ├── 0c/\\n│ │ ├── 0d/\\n│ │ ├── 0e/\\n│ │ ├── 0f/\\n│ │ ├── 10/\\n│ │ ├── 11/\\n│ │ ├── 12/\\n│ │ ├── 13/\\n│ │ ├── 14/\\n│ │ ├── 15/\\n│ │ ├── 16/\\n│ │ ├── 17/\\n│ │ ├── 18/\\n│ │ ├── 19/\\n│ │ ├── 1a/\\n│ │ ├── 1b/\\n│ │ ├── 1c/\\n│ │ ├── 1d/\\n│ │ ├── 1e/\\n│ │ ├── 1f/\\n│ │ ├── 20/\\n│ │ ├── 21/\\n│ │ ├── 22/\\n│ │ ├── 23/\\n│ │ ├── 24/\\n│ │ ├── 25/\\n│ │ ├── 26/\\n│ │ ├── 27/\\n│ │ ├── 28/\\n│ │ ├── 29/\\n│ │ ├── 2a/\\n│ │ ├── 2b/\\n│ │ ├── 2c/\\n│ │ ├── 2d/\\n│ │ ├── 2e/\\n│ │ ├── 2f/\\n│ │ ├── 30/\\n│ │ ├── 31/\\n│ │ ├── 32/\\n│ │ ├── 33/\\n│ │ ├── 34/\\n│ │ ├── 35/\\n│ │ ├── 36/\\n│ │ ├── 37/\\n│ │ ├── 38/\\n│ │ ├── 39/\\n│ │ ├── 3a/\\n│ │ ├── 3b/\\n│ │ ├── 3c/\\n│ │ ├── 3d/\\n│ │ ├── 3e/\\n│ │ ├── 3f/\\n│ │ ├── 40/\\n│ │ ├── 41/\\n│ │ ├── 42/\\n│ │ ├── 43/\\n│ │ ├── 44/\\n│ │ ├── 45/\\n│ │ ├── 46/\\n│ │ ├── 47/\\n│ │ ├── 48/\\n│ │ ├── 49/\\n│ │ ├── 4a/\\n│ │ ├── 4b/\\n│ │ ├── 4c/\\n│ │ ├── 4d/\\n│ │ ├── 4e/\\n│ │ ├── 4f/\\n│ │ ├── 50/\\n│ │ ├── 51/\\n│ │ ├── 52/\\n│ │ ├── 53/\\n│ │ ├── 54/\\n│ │ ├── 55/\\n│ │ ├── 56/\\n│ │ ├── 57/\\n│ │ ├── 58/\\n│ │ ├── 59/\\n│ │ ├── 5a/\\n│ │ ├── 5b/\\n│ │ ├── 5c/\\n│ │ ├── 5d/\\n│ │ ├── 5e/\\n│ │ ├── 5f/\\n│ │ ├── 60/\\n│ │ ├── 61/\\n│ │ ├── 62/\\n│ │ ├── 63/\\n│ │ ├── 64/\\n│ │ ├── 65/\\n│ │ ├── 66/\\n│ │ ├── 67/\\n│ │ ├── 68/\\n│ │ ├── 69/\\n│ │ ├── 6a/\\n│ │ ├── 6b/\\n│ │ ├── 6c/\\n│ │ ├── 6d/\\n│ │ ├── 6e/\\n│ │ ├── 6f/\\n│ │ ├── 70/\\n│ │ ├── 71/\\n│ │ ├── 72/\\n│ │ ├── 73/\\n│ │ ├── 74/\\n│ │ ├── 75/\\n│ │ ├── 76/\\n│ │ ├── 77/\\n│ │ ├── 78/\\n│ │ ├── 79/\\n│ │ ├── 7a/\\n│ │ ├── 7b/\\n│ │ ├── 7c/\\n│ │ ├── 7d/\\n│ │ ├── 7e/\\n│ │ ├── 7f/\\n│ │ ├── 80/\\n│ │ ├── 81/\\n│ │ ├── 82/\\n│ │ ├── 83/\\n│ │ ├── 84/\\n│ │ ├── 85/\\n│ │ ├── 86/\\n│ │ ├── 87/\\n│ │ ├── 88/\\n│ │ ├── 89/\\n│ │ ├── 8a/\\n│ │ ├── 8b/\\n│ │ ├── 8c/\\n│ │ ├── 8d/\\n│ │ ├── 8e/\\n│ │ ├── 8f/\\n│ │ ├── 90/\\n│ │ ├── 91/\\n│ │ ├── 92/\\n│ │ ├── 93/\\n│ │ ├── 94/\\n│ │ ├── 95/\\n│ │ ├── 96/\\n│ │ ├── 97/\\n│ │ ├── 98/\\n│ │ ├── 99/\\n│ │ ├── 9a/\\n│ │ ├── 9b/\\n│ │ ├── 9c/\\n│ │ ├── 9d/\\n│ │ ├── 9e/\\n│ │ ├── 9f/\\n│ │ ├── a0/\\n│ │ ├── a1/\\n│ │ ├── a2/\\n│ │ ├── a3/\\n│ │ ├── a4/\\n│ │ ├── a5/\\n│ │ ├── a6/\\n│ │ ├── a7/\\n│ │ ├── a8/\\n│ │ ├── a9/\\n│ │ ├── aa/\\n│ │ ├── ab/\\n│ │ ├── ac/\\n│ │ ├── ad/\\n│ │ ├── ae/\\n│ │ ├── af/\\n│ │ ├── b0/\\n│ │ ├── b1/\\n│ │ ├── b2/\\n│ │ ├── b3/\\n│ │ ├── b4/\\n│ │ ├── b5/\\n│ │ ├── b6/\\n│ │ ├── b7/\\n│ │ ├── b8/\\n│ │ ├── b9/\\n│ │ ├── ba/\\n│ │ ├── bb/\\n│ │ ├── bc/\\n│ │ ├── bd/\\n│ │ ├── be/\\n│ │ ├── bf/\\n│ │ ├── c0/\\n│ │ ├── c1/\\n│ │ ├── c2/\\n│ │ ├── c3/\\n│ │ ├── c4/\\n│ │ ├── c5/\\n│ │ ├── c6/\\n│ │ ├── c7/\\n│ │ ├── c8/\\n│ │ ├── c9/\\n│ │ ├── ca/\\n│ │ ├── cb/\\n│ │ ├── cc/\\n│ │ ├── cd/\\n│ │ ├── ce/\\n│ │ ├── cf/\\n│ │ ├── d0/\\n│ │ ├── d1/\\n│ │ ├── d2/\\n│ │ ├── d3/\\n│ │ ├── d4/\\n│ │ ├── d5/\\n│ │ ├── d6/\\n│ │ ├── d7/\\n│ │ ├── d8/\\n│ │ ├── d9/\\n│ │ ├── da/\\n│ │ ├── db/\\n│ │ ├── dc/\\n│ │ ├── dd/\\n│ │ ├── de/\\n│ │ ├── df/\\n│ │ ├── e0/\\n│ │ ├── e1/\\n│ │ ├── e2/\\n│ │ ├── e3/\\n│ │ ├── e4/\\n│ │ ├── e5/\\n│ │ ├── e6/\\n│ │ ├── e7/\\n│ │ ├── e8/\\n│ │ ├── e9/\\n│ │ ├── ea/\\n│ │ ├── eb/\\n│ │ ├── ec/\\n│ │ ├── ed/\\n│ │ ├── ee/\\n│ │ ├── ef/\\n│ │ ├── f0/\\n│ │ ├── f1/\\n│ │ ├── f2/\\n│ │ ├── f3/\\n│ │ ├── f4/\\n│ │ ├── f5/\\n│ │ ├── f6/\\n│ │ ├── f7/\\n│ │ ├── f8/\\n│ │ ├── f9/\\n│ │ ├── fa/\\n│ │ ├── fb/\\n│ │ ├── fc/\\n│ │ ├── fd/\\n│ │ ├── fe/\\n│ │ └── ff/\\n│ └── projects/7abbab685605e7ae627cb6fc4a2315b1/\\n│ └── package.json\\n├── backend/\\n│ ├── src/\\n│ │ ├── config/\\n│ │ │ ├── database.js\\n│ │ │ ├── env.js\\n│ │ │ ├── loadEnv.js\\n│ │ │ ├── logger.js\\n│ │ │ └── redis.js\\n│ │ ├── middleware/\\n│ │ │ ├── auth.js\\n│ │ │ └── bodyLimit.js\\n│ │ ├── models/\\n│ │ │ ├── Brand.js\\n│ │ │ ├── DashboardUser.js\\n│ │ │ ├── Model.js\\n│ │ │ ├── Ota.js\\n│ │ │ ├── ShareCodeLog.js\\n│ │ │ └── index.js\\n│ │ ├── routes/\\n│ │ │ ├── auth.js\\n│ │ │ ├── brands.js\\n│ │ │ ├── dashboard.js\\n│ │ │ ├── index.js\\n│ │ │ ├── models.js\\n│ │ │ ├── ota.js\\n│ │ │ ├── shareCodeLogs.js\\n│ │ │ └── users.js\\n│ │ ├── services/\\n│ │ │ ├── curveClient.js\\n│ │ │ ├── eqCacheStorage.js\\n│ │ │ ├── measurementStorage.js\\n│ │ │ ├── otaStorage.js\\n│ │ │ └── userBootstrap.js\\n│ │ ├── utils/\\n│ │ │ ├── jwt.js\\n│ │ │ ├── password.js\\n│ │ │ └── response.js\\n│ │ ├── validators/\\n│ │ │ ├── brand.js\\n│ │ │ ├── model.js\\n│ │ │ └── ota.js\\n│ │ └── app.js\\n│ ├── .gitignore\\n│ ├── Dockerfile\\n│ ├── README.md\\n│ ├── package.json\\n│ ├── pnpm-lock.yaml\\n│ ├── restart.sh\\n│ ├── start.sh\\n│ └── stop.sh\\n├── frontend/\\n│ ├── public/\\n│ ├── src/\\n│ │ ├── api/\\n│ │ │ ├── auth.js\\n│ │ │ ├── brand.js\\n│ │ │ ├── dashboard.js\\n│ │ │ ├── model.js\\n│ │ │ ├── ota.js\\n│ │ │ ├── shareCodeLog.js\\n│ │ │ └── user.js\\n│ │ ├── components/\\n│ │ │ ├── ChangePasswordDialog.vue\\n│ │ │ ├── SidebarLogo.vue\\n│ │ │ └── TabsView.vue\\n│ │ ├── layout/\\n│ │ │ └── index.vue\\n│ │ ├── router/\\n│ │ │ └── index.js\\n│ │ ├── styles/\\n│ │ │ └── lux-theme.css\\n│ │ ├── utils/\\n│ │ │ ├── auth.js\\n│ │ │ ├── request.js\\n│ │ │ └── tabs.js\\n│ │ ├── views/\\n│ │ │ ├── brand/\\n│ │ │ │ └── index.vue\\n│ │ │ ├── home/\\n│ │ │ │ └── index.vue\\n│ │ │ ├── login/\\n│ │ │ │ └── index.vue\\n│ │ │ ├── model/\\n│ │ │ │ └── index.vue\\n│ │ │ ├── ota/\\n│ │ │ │ └── index.vue\\n│ │ │ ├── share-code/\\n│ │ │ │ └── log.vue\\n│ │ │ └── system/users/\\n│ │ │ └── index.vue\\n│ │ ├── App.vue\\n│ │ └── main.js\\n│ ├── .gitignore\\n│ ├── Dockerfile\\n│ ├── README.md\\n│ ├── build-and-deploy.bat\\n│ ├── index.html\\n│ ├── install.bat\\n│ ├── nginx.conf\\n│ ├── package-lock.json\\n│ ├── package.json\\n│ ├── pnpm-lock.yaml\\n│ ├── pnpm-workspace.yaml\\n│ ├── start.bat\\n│ └── vite.config.js\\n├── scripts/\\n│ └── upload.sh\\n├── .gitignore\\n├── DEPLOY.md\\n├── README.md\\n└── docker-compose.yml\\n\"","current_document_structure":"WikiEncrypted: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","catalogue_think_content":"WikiEncrypted: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","recovery_checkpoint":"wiki_generation_completed","last_commit_id":"b4926ba14841d1c677875b010005ca4fd09e9d2f","last_commit_update":"2026-07-09T10:41:32.434782+08:00","gmt_create":"2026-06-02T14:43:54.575428+08:00","gmt_modified":"2026-07-09T10:41:32.434782+08:00","extend_info":"{\"language\":\"zh\",\"active\":true,\"branch\":\"main\",\"shareStatus\":\"\",\"server_error_code\":\"\",\"cosy_version\":\"1.4.0\"}"}} \ No newline at end of file