- 新增 charts/news_reports.php 报告查询导航页(列表+详情一体,fetch API 渲染) - 新增 js/newsReports.js:AI 摘要/新闻联播/财经新闻/公告调研/数据总览固定模块,stats 归一化兼容多种格式 - index-2.php 研究报告卡片改为导航链接,移除 PHP 目录下拉框 - 更新 AGENTS.md/CLAUDE.md(路径、页面清单、数据模式等核实修正) - 同步服务器拉取的文档:quant 使用手册、podcast-docs - 生成 continuation.md 会话检查点
6.5 KiB
6.5 KiB
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 统一处理,不需要区分。 - 图表数据传递 —— 当前活跃页面有三种模式(见下),新页面优先复用现有模式,不要自创第四种。
三种数据传递模式(实测现状)
- 模式 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。 - 模式 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。 - 模式 A(服务端注入):PHP 查询后
json_encode()注入<script>标签中的 JS 变量。window.chartConfig全局变量仅剩deprecated/在用;活跃页面charts/chartStDetail.php是变体(注入命名变量data1…data5、legend等)。
代码风格约定
- 缩进:使用 Tab 缩进(现有代码风格)。
- SQL 查询:使用 heredoc 语法,保持可读性。
- PHP 标签:使用
<?=和<?php短标签。 - 注释:中文注释,简洁为主,解释业务逻辑而非代码本身(如指数的 ts_code 映射、机构类型 LX 含义等)。
- 不需要加 docblock —— 现有代码基本没有,新代码也不加。
新增页面流程
如果要新增一个数据可视化页面,按以下步骤:
- 在
inc/中写数据获取函数(如果数据源有复用价值),或在页面内直接写查询 - 在
charts/创建newpage.php,include 需要的inc/*.php - 通过
$_REQUEST接收参数(如ts_code、t_start、t_end) - 数据获取:优先走模式 B(fetch
api.doorcome.cn)或模式 C(ajax.inc.php加一个t=分支) - 图表 JS 放
js/目录,新式页面复用js/renderCharts.js(doubleLineChart()等)和js/pubfunc.js(getRows()、hideSwitch()等) - 公共库统一从
/lib/js/引用:jquery-3.6.0.min.js、echarts-5.4.2.js、tailwindcss-3.4.17.js(注意是连字符、在lib/js/下,不是js/) - 对于样式较新的页面,使用
/lib/js/tailwindcss-3.4.17.js并参考index-2.php的布局风格 - 在
index-2.php中添加导航入口
常用代码片段
获取数据库连接
include_once __DIR__."/inc/config.php";
$mysqli = get_mysqli_connection();
标准查询返回 echarts 数据格式
$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
include_once __DIR__."/inc/functions.inc.php";
$data = callTushareApi('daily_basic', $params);
前端 AJAX 调用模式
// 请求参数中必须包含 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 修改后必做。)