Files
echart/CLAUDE.md
T
simonandClaude Code 7e57cae242 refactor: 全面代码重构与项目结构整理
安全性:
- 所有SQL查询改用参数化查询(db_query),防止SQL注入
- TUSHARE_API_TOKEN集中到config.php常量,移除硬编码和多份拷贝
- getBasic.inc.php中$_REQUEST输出到JS时添加htmlspecialchars转义

代码组织:
- 21个页面文件移至charts/子目录,根目录仅保留入口文件
- ajax.inc.php拆分:esfTradeDaily/esfListDaily迁至getEstate.inc.php
- getBasic.inc.php拆分:HTML组件函数迁至新建的widgets.inc.php
- 前端依赖去重:移除lib/echarts.min.js、libai/3.4.16.js、research/js/3.4.16.js

规范化:
- AJAX响应格式统一为jsonResponse()标准封装
- 前端全局变量统一为window.chartConfig对象模式
- 修复PHP 8.4 Deprecated警告(getEstateData、getStockHistoryDataByTS参数顺序)
- html/head.php中jQuery/CSS路径改为绝对路径,修复charts/子目录加载问题

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-05-26 08:20:33 +08:00

142 lines
7.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# CLAUDE.md
本文件为 Claude Codeclaude.ai/code)在本仓库中工作提供指引。
## 项目概览
基于 PHP 的 A 股金融数据可视化和宁波房地产数据分析平台。使用 ECharts 生成交互式图表,后端为 MySQL 数据库和 TuShare API。
## 技术栈
- **后端**: PHP(无框架),Composer 管理依赖(`phpoffice/phpspreadsheet``monolog/monolog`
- **前端**: ECharts 4.x、jQuery、Tailwind CSS 3.4CDN 引入)、DataTables、Font Awesome
- **数据库**: MySQL,通过 `mysqli` 连接——统一使用 `inc/config.php` 中的 `get_mysqli_connection()` 获取连接
- **外部 API**: TuShare`api.tushare.pro``api.waditu.com`),用于获取财务数据
- **调试**: XDebug,端口 9000(配置见 `.vscode/launch.json`
## 无构建步骤
传统 PHP 应用,没有构建/检查/测试流水线。文件直接部署到 Web 服务器。运行于 `echart.doorcome.cn`。每个 `.php` 文件是独立的入口点,没有路由机制。
## 架构
### 核心 includes`inc/`
- `config.php` — 数据库连接工厂(`get_mysqli_connection()`),所有 DB 操作统一走此函数。另含 `db_query()` 参数化查询函数和 `jsonResponse()` 统一 JSON 响应函数。
- `getData.inc.php` — 指数数据、机构持仓(IH)、资金流向(沪深港通南北向)、个股历史查询。
- `getBasic.inc.php` — PE/PB/PS 历史、股价历史、市值数据、TuShare API 封装、日期工具、数据查询函数。HTML 渲染函数已拆分至 `widgets.inc.php`
- `widgets.inc.php` — HTML 组件函数:`tradeStocksList()``vendorList()``yearList()``yearToname()`
- `functions.inc.php` — 共享表单组件(districtList、indexList、seList、byDM)和 `callTushareApi()` 辅助函数。
- `ajax.inc.php` — 所有 AJAX 端点,通过 `$_REQUEST['t']` 分发:股票列表、财务数据(调用 `getFinanceData.class.php`)、房地产成交/挂牌查询。业务函数(`esfTradeDaily``esfListDaily`)已迁移至 `getEstate.inc.php`
- `getFinanceData.class.php``getFinance` 类,调用 TuShare API 获取财务报表数据。
- `tradeRec.inc.php` — 交易记录查询(`trade_record` / `trade_record_cj` 表)。
- `excelOperate.inc.php` — 通过 PhpSpreadsheet 读取 Excel/CSV 文件。
- `postJson.inc.php` — 使用 cURL 发送 JSON HTTP POST 请求。
- `getEstate.inc.php` — 房地产相关数据查询(`estate_listing` 表)及二手房成交/挂牌数据函数。
### 页面结构
根目录及 `charts/` 下的每个 `.php` 文件渲染一个独立的数据视图,遵循统一模式:
1. 引入所需的 `inc/*.php`
2. 通过 `$_REQUEST` 接收查询参数
3. 查询数据库,将结果通过 `json_encode()` 注入 `<script>` 标签
4. 加载对应的 `js/*.js`,由 JS 调用 `echarts.init()` 渲染图表
5. 引入 `html/head.php``html/footer.php` 组成页面布局
### 页面目录
根目录保留入口文件(`index.php``index-2.php``phpinfo.php`),其余页面文件均位于 `charts/` 子目录。
| 文件 | 用途 |
|------|------|
| `index.php` | 原导航页,重定向至 `index-2.php` |
| `index-2.php` | 主导航门户(Tailwind 风格) |
| `charts/stock_trend.php` | 股价 VS PE/PB/PS 趋势 |
| `charts/stockep.php` | 股价 VS 盈利能力 |
| `charts/stockdiv.php` | 股价 VS 股息率 |
| `charts/stockmargin.php` | 股价 VS 融资融券余额 |
| `charts/hkholdbycode.php` | 股价 VS 北向资金持股 |
| `charts/stock_ih.php` | 股价 VS 机构持仓趋势 |
| `charts/stockkeydata.php` | 个股基本面数据 |
| `charts/index_trend.php` | 指数 VS PE/PB/PS/市值 |
| `charts/index_ih.php` | 指数 VS 机构持仓趋势 |
| `charts/index_mv_all.php` | 指数 VS 两市总市值 |
| `charts/index_margin.php` | 指数 VS 融资余额 |
| `charts/moneyflow.php` | 指数 VS 沪深港通资金流向 |
| `charts/realestate.php` | 房地产挂牌数量趋势(宁波) |
| `charts/estateNewTradeDaily.php` | 新房每日成交量(宁波) |
| `charts/estateTradeDaily.php` | 二手房每日成交量(宁波) |
| `charts/estateListDaily.php` | 二手房每日挂牌量(宁波) |
| `charts/stockTradeRecord.php` | 个人股票交易记录 |
| `charts/chartStDetail.php` | 个股详细图表 |
### JavaScript 约定
每个页面加载 `js/` 中对应的 JS 文件(如 `chartStDetail.js``renderCharts.js``estate.js`)。新版页面通过 `window.chartConfig` 对象传递数据,旧版页面正逐步迁移至此模式。ECharts 库统一使用 `lib/echarts/5.4.2/echarts.js`v5)。
### 子模块
- `news/` — 独立的新闻抓取/分析模块,面向 CCTV 新闻联播。包含自己的 PHP、JS 和设计文档。
- `research/` — 股票研究报告(HTML 和 PDF)、行业分析,含 AI 生成的研究内容。
- `deprecated/` — 已废弃的旧版页面和脚本,仅供参考。
### 前端库位置
- `lib/` — jQuery、DataTables、ECharts 5.4.2
- `libai/` — Chart.js、anime.js、shader-park-coreAI/研究页面使用)
- `js/` — 页面专属图表逻辑、Tailwind CSS 3.4.17、ECharts GL、ecStat
- `css/` — 自定义样式(`style.css``css2.css`)、Font Awesome
## 服务器与部署
应用运行于 `echart.doorcome.cn`。所有用户输入通过 `$_REQUEST` 读取——GET 和 POST 统一处理。无认证或 CSRF 防护。数据库凭据在 `inc/config.php` 中。
TuShare API Token 统一定义在 `inc/config.php``TUSHARE_API_TOKEN` 常量中。
部署到远程服务器使用 `sync-echart` 命令(定义在 `~/.bashrc` 中),自动排除 `.git``.vscode``.claude``.files`
```bash
sync-echart -n # 先预览
sync-echart # 执行部署
```
服务器路径:`simon@www.doorcome.cn:/var/www/html/echart/`
## 多文件修改规范
修改多个文件前,先输出:
- **涉及文件** — 列出所有将被修改的文件
- **修改原因** — 每个文件为什么需要改
- **潜在影响** — 可能破坏什么,哪些消费者会受影响
修改完成后,输出:
- **已完成列表** — 每个文件的具体变更内容
- **验证步骤** — 确认正确性的步骤(语法检查、页面访问测试等)
## 风险意识
- 本项目**没有自动化测试**,所有变更需手动验证。
- 跨层修改(如 AJAX 响应格式、JS 全局变量、PHP 引入路径)属于**高风险操作**——修改前必须追踪所有消费者,并明确说明风险后再动手。
- 修改 AJAX 响应格式时,需同时检查 PHP 端消费者(服务端数据组装)和 JS 端消费者(`$.ajax` success 回调、`getRows()` 调用、DataTables 配置)。
- 修改 JS 全局变量名时,需检查所有引用这些变量的 `.js` 文件,而非仅检查注入变量的 PHP 页面。
- `deprecated/` 目录的文件可更新路径以保持一致性,除此之外不要改动。
## 批量脚本注意事项
用 Python/sed 对大量文件做机械性修改(路径前缀替换、变量重命名)可以接受,但需:
- 运行脚本前先列出将要影响的文件清单
- 脚本运行后,用 grep 搜索旧模式确认无遗漏
- 对每个修改过的 PHP 文件执行 `php -l` 语法检查
## Checkpoint
当用户说 "checkpoint" 时,在项目根目录生成 `continuation.md`,包含:
- **当前状态**:刚刚完成了什么、改了哪些文件、结果如何
- **后续步骤**:具体有序的下一步行动
- **待解决问题**:未解决的疑问、已知限制或需要决策的事项