- 新增 charts/news_reports.php 报告查询导航页(列表+详情一体,fetch API 渲染) - 新增 js/newsReports.js:AI 摘要/新闻联播/财经新闻/公告调研/数据总览固定模块,stats 归一化兼容多种格式 - index-2.php 研究报告卡片改为导航链接,移除 PHP 目录下拉框 - 更新 AGENTS.md/CLAUDE.md(路径、页面清单、数据模式等核实修正) - 同步服务器拉取的文档:quant 使用手册、podcast-docs - 生成 continuation.md 会话检查点
104 lines
6.5 KiB
Markdown
104 lines
6.5 KiB
Markdown
# AGENTS.md
|
||
|
||
本文件为 AI 编码助手提供在本仓库中工作的指引与约定。
|
||
|
||
## 项目背景
|
||
|
||
这是一个 A 股基本面数据可视化和宁波房地产数据分析平台,面向个人投资者使用。项目没有框架,是原生 PHP 写的传统 Web 应用。
|
||
|
||
## 技术约束
|
||
|
||
- **不要引入框架或构建工具** —— 项目是纯 PHP + jQuery + ECharts,没有 webpack、vite、composer autoload 之外的依赖管理。新增功能沿用现有模式即可。
|
||
- **不要动 `inc/config.php`** —— 该文件含**明文**数据库凭据和 `TUSHARE_API_TOKEN`,是敏感文件;手工修改可能破坏连接逻辑。也**不要提交到公开仓库**。
|
||
- **PHP 版本** —— 代码兼容 PHP 7.x/8.x(本地为 PHP 8.4),使用了 `mysqli`、cURL、Composer autoload。不要使用 PHP 8.1+ 独有的特性(如枚举、readonly 等)。
|
||
- **所有用户输入走 `$_REQUEST`** —— GET 和 POST 统一处理,不需要区分。
|
||
- **图表数据传递** —— 当前活跃页面有三种模式(见下),新页面优先复用现有模式,不要自创第四种。
|
||
|
||
### 三种数据传递模式(实测现状)
|
||
|
||
1. **模式 B(fetch 外部 API)**:页面 JS 用 `fetch()` 调 `https://api.doorcome.cn/api/*`(如 `stockparam`、`indexDatas`、`stockinfo`、`getdiv`、`stockep`、`stockmargin`、`stockbasic`)。代表页面:`stock_trend.php`、`stockdiv.php`、`stockep.php`、`stockmargin.php`、`hkholdbycode.php`、`index_trend.php`、`index_mv_all.php`、`index_margin.php`。
|
||
2. **模式 C(AJAX → `inc/ajax.inc.php`)**:页面 JS 用 `$.ajax` 调 `../inc/ajax.inc.php`,通过 `$_REQUEST['t']` 路由(if 链,不是 switch/case)。`t` 取值:`stockList`、`financeData`、`esfTBD`、`esfListDaily`、`newTBD`、`moneyflowData`、`estateData`。代表页面:`moneyflow.php`、`realestate.php`、`estateTradeDaily.php`、`estateListDaily.php`、`estateNewTradeDaily.php`、`stockkeydata.php`、`stockTradeRecord.php`。
|
||
3. **模式 A(服务端注入)**:PHP 查询后 `json_encode()` 注入 `<script>` 标签中的 JS 变量。`window.chartConfig` 全局变量**仅剩 `deprecated/` 在用**;活跃页面 `charts/chartStDetail.php` 是变体(注入命名变量 `data1`…`data5`、`legend` 等)。
|
||
|
||
## 代码风格约定
|
||
|
||
- 缩进:使用 Tab 缩进(现有代码风格)。
|
||
- SQL 查询:使用 heredoc 语法,保持可读性。
|
||
- PHP 标签:使用 `<?=` 和 `<?php` 短标签。
|
||
- 注释:中文注释,简洁为主,解释业务逻辑而非代码本身(如指数的 ts_code 映射、机构类型 LX 含义等)。
|
||
- 不需要加 docblock —— 现有代码基本没有,新代码也不加。
|
||
|
||
## 新增页面流程
|
||
|
||
如果要新增一个数据可视化页面,按以下步骤:
|
||
|
||
1. 在 `inc/` 中写数据获取函数(如果数据源有复用价值),或在页面内直接写查询
|
||
2. 在 `charts/` 创建 `newpage.php`,include 需要的 `inc/*.php`
|
||
3. 通过 `$_REQUEST` 接收参数(如 `ts_code`、`t_start`、`t_end`)
|
||
4. 数据获取:优先走模式 B(fetch `api.doorcome.cn`)或模式 C(`ajax.inc.php` 加一个 `t=` 分支)
|
||
5. 图表 JS 放 `js/` 目录,新式页面复用 `js/renderCharts.js`(`doubleLineChart()` 等)和 `js/pubfunc.js`(`getRows()`、`hideSwitch()` 等)
|
||
6. 公共库统一从 `/lib/js/` 引用:`jquery-3.6.0.min.js`、`echarts-5.4.2.js`、`tailwindcss-3.4.17.js`(注意是连字符、在 `lib/js/` 下,不是 `js/`)
|
||
7. 对于样式较新的页面,使用 `/lib/js/tailwindcss-3.4.17.js` 并参考 `index-2.php` 的布局风格
|
||
8. 在 `index-2.php` 中添加导航入口
|
||
|
||
## 常用代码片段
|
||
|
||
### 获取数据库连接
|
||
```php
|
||
include_once __DIR__."/inc/config.php";
|
||
$mysqli = get_mysqli_connection();
|
||
```
|
||
|
||
### 标准查询返回 echarts 数据格式
|
||
```php
|
||
$tDate = $idx = $data = array();
|
||
while ($row = $result->fetch_assoc()) {
|
||
array_push($tDate, $row['trade_date']);
|
||
array_push($idx, $row['close']);
|
||
array_push($data, array("value" => array($row['trade_date'], round($row['close'], 2))));
|
||
}
|
||
$result->free();
|
||
$mysqli->close();
|
||
return array('tDate' => $tDate, 'idx' => $idx, 'data' => $data);
|
||
```
|
||
|
||
### 调用 TuShare API
|
||
```php
|
||
include_once __DIR__."/inc/functions.inc.php";
|
||
$data = callTushareApi('daily_basic', $params);
|
||
```
|
||
|
||
### 前端 AJAX 调用模式
|
||
```php
|
||
// 请求参数中必须包含 t 字段,用于 ajax.inc.php 路由
|
||
$_REQUEST['t'] = 'stockList';
|
||
```
|
||
|
||
## 数据库表名约定
|
||
|
||
完整清单见 `DB_REFERENCE.md`(16 张表、在用/未用/已被 API 替代状态一目了然)。要点:
|
||
|
||
- **已被 API 替代、代码不再直接引用**:`index_hist_pro`(指数行情)、`stock_his_pro`(个股行情)、`stock_all_pro`(代码↔名称)——对应数据走 `api.doorcome.cn` 的 `indexDatas` / `stockbasic` / `stockinfo` 等端点。
|
||
- **在用**:`moneyflow_hsgt_pro`(沪深港通原始值)、`moneyflow_hsgt_pro_ext`(累积值)、`estate_json` / `estate_json_ext` / `estate_listing`(房地产)、`trade_record` / `trade_record_cj`(方正/长江证券交易记录)、`mac_report`(宏观研究,quant/ 用)、`pv_log` / `pv_counter`(访问日志)。
|
||
- **机构持仓在 `ih_by_ts_code_ext`**,但消费它的页面(`chartSix.php`、`chartThree.php`、`stock_ih.php`、`index_ih.php`)已全部移入 `deprecated/`,当前无活跃调用者;`getIhData()` / `getIhDataByStock()` 保留在 `inc/getData.inc.php`。
|
||
|
||
## 注意事项
|
||
|
||
- **TuShare API token 硬编码在 `inc/config.php` 中** —— 不要提交到公开仓库。
|
||
- **没有鉴权机制** —— 这是内网或个人使用的系统,不需要添加登录/权限功能。
|
||
- **`deprecated/` 目录** —— 存放已废弃的旧版页面(`chartOne`~`chartSix`、`stock_ih`、`index_ih`、旧版 `stock_trend`/`index_trend` 等,部分仍用 `window.chartConfig` 模式),直接忽略,不要修改或引用。
|
||
- **`class/basic_info.class.php`** —— 独立的小类,未被核心流程引用。
|
||
- **`news/` 和 `research/`** —— 独立的子模块,有自己的 JS/CSS 和设计文档,修改前先看对应的 `design.md` 和 `outline.md`。
|
||
|
||
## Checkpoint
|
||
|
||
当用户说 "checkpoint" 时,在项目根目录生成 `continuation.md`,包含:
|
||
|
||
- **当前状态**:刚刚完成了什么、改了哪些文件、结果如何
|
||
- **后续步骤**:具体的、有序的下一步行动
|
||
- **待解决问题**:未解决的疑问、已知限制或需要决策的事项
|
||
|
||
## Notes
|
||
|
||
(待补充:部署 `sync-echart` 命令细节见 CLAUDE.md;PHP 语法检查 `php -l` 修改后必做。)
|