diff --git a/.githooks/pre-commit b/.githooks/pre-commit
new file mode 100644
index 0000000..9632ac1
--- /dev/null
+++ b/.githooks/pre-commit
@@ -0,0 +1,22 @@
+#!/usr/bin/env bash
+# 仅当本次提交涉及 admin 源代码或配置时,运行 admin 构建(含 vue-tsc 类型检查)
+# 通过检查暂存区是否有 zhican/admin/ 下的相关文件来决定
+
+set -e
+
+CHANGED=$(git diff --cached --name-only --diff-filter=ACMR \
+ | grep -E '^zhican/admin/(src/|.*\.(json|ts|html))' || true)
+
+if [ -z "$CHANGED" ]; then
+ exit 0
+fi
+
+echo "→ pre-commit: 检测到 admin 变更,运行 pnpm run build..."
+cd "$(git rev-parse --show-toplevel)/zhican/admin"
+
+if ! command -v pnpm >/dev/null 2>&1; then
+ echo "pre-commit: 未找到 pnpm,跳过构建检查(请手动运行 pnpm run build 验证)" >&2
+ exit 0
+fi
+
+pnpm run build
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..c83a437
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,23 @@
+# ============ OS / 系统垃圾 ============
+.DS_Store
+Thumbs.db
+desktop.ini
+
+# ============ 编辑器 / IDE ============
+.vscode/
+.idea/
+*.swp
+*.swo
+*~
+
+# ============ 工具本地数据 ============
+# Claude Code 个人设置(共享设置可放 .claude/settings.json)
+.claude/settings.local.json
+# Serena MCP 工具数据
+.serena/
+
+# ============ 临时/备份 ============
+*.bak
+*.orig
+*.tmp
+*.log
diff --git a/.teamcity/pipeline.yaml b/.teamcity/pipeline.yaml
new file mode 100644
index 0000000..4113f54
--- /dev/null
+++ b/.teamcity/pipeline.yaml
@@ -0,0 +1,18 @@
+# VCS 触发器(只触发 main 分支)在 TeamCity UI / 项目 Kotlin DSL 中配置,
+# YAML 格式仅描述 jobs 与 steps 结构。
+
+jobs:
+ BuildAndDeploy:
+ name: 构建并部署 Admin
+ steps:
+ - type: script
+ name: Docker Build
+ script-content: |
+ docker build \
+ -f deploy/Dockerfile \
+ -t zhican-admin:latest \
+ .
+ - type: script
+ name: Compose Up
+ script-content: |
+ docker compose -f deploy/compose.yaml up -d
diff --git a/CLAUDE.md b/CLAUDE.md
new file mode 100644
index 0000000..bedd90c
--- /dev/null
+++ b/CLAUDE.md
@@ -0,0 +1,132 @@
+# CLAUDE.md
+
+This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
+
+## 仓库结构
+
+这是一个**多端单仓**项目,git 根目录下包含:
+
+- `tcm-diagnosis.html` — 独立的中医诊断单页 HTML(与下面项目无依赖关系)
+- `zhican/` — 智能餐养系统主项目,使用 npm workspaces 管理
+ - `admin/` — Vue 3 + Vite + TypeScript 后台管理端(workspace 成员)
+ - `miniprogram/` — 原生微信小程序(无构建步骤,由微信开发者工具直接打开 `project.config.json`)
+
+注意:执行 npm 脚本前必须先 `cd zhican/`,根目录没有 `package.json`。
+
+## 常用命令
+
+**包管理器统一使用 pnpm**。`package-lock.json` 已被 `.gitignore`,禁止提交 npm/yarn 锁文件。仓库追踪的锁文件是 `zhican/admin/pnpm-lock.yaml`。
+
+进入 `zhican/admin/` 目录执行(推荐):
+
+```bash
+pnpm install # 安装依赖
+pnpm run dev # 启动开发服务器(vite,端口 3000)
+pnpm run build # 类型检查 + 构建(vue-tsc --noEmit && vite build),产物在 dist/
+pnpm run preview # 本地预览构建产物
+```
+
+也可在 `zhican/` 根目录用 workspace 命令 `pnpm run admin:dev` / `admin:build`。
+
+> 由于 `zhican/package.json` 用的是 npm workspaces 字段而非 `pnpm-workspace.yaml`,跨 workspace 命令的稳定性不如直接进 admin 子目录。一般操作建议进 `zhican/admin/`。
+
+小程序端无构建步骤,使用微信开发者工具导入 `zhican/miniprogram/` 目录调试。
+
+## 部署形态(H5 构建能力)
+
+- **admin**:标准 Vite 项目,`npm run admin:build` 输出 `admin/dist/`(`index.html` + 静态 chunk),可直接部署到任意静态服务器/Nginx/对象存储
+- **miniprogram**:**原生微信小程序,无法直接构建为 H5**。它使用 `.wxml` / `.wxss` / `wx.*` API 和 `app.json` tabBar,运行时绑定在微信宿主上。要得到浏览器可访问的 H5 版本必须迁移到 uni-app / Taro 等跨端框架重写,不是"加个构建脚本"就能完成
+- **`tcm-diagnosis.html`**:单文件 HTML,无构建,直接打开或托管即可
+
+## admin 后台架构
+
+技术栈:Vue 3 (`
diff --git a/zhican/admin/src/views/nutrition-dining/ingredient-benefit/index.vue b/zhican/admin/src/views/nutrition-dining/ingredient-benefit/index.vue
index a6d66e8..4a36401 100644
--- a/zhican/admin/src/views/nutrition-dining/ingredient-benefit/index.vue
+++ b/zhican/admin/src/views/nutrition-dining/ingredient-benefit/index.vue
@@ -57,7 +57,7 @@