Files
echart/AGENTS.md
T
simon 2855cb51ca feat(news_reports): 事件支持多新闻源 sources + 页面底部访问计数器
- /api/news/events/ 事件行: sources 字段非空时显示多个新闻源, 为空回退 source 单源 (兼容数组/对象/JSON 字符串)
- footer 参考 index-2.php 深色样式, 增加 page_counter 访问计数
- 文档: AGENTS.md/CLAUDE.md 更新表数量 16->18 张, 补充 news_report/news_event 说明
2026-08-12 15:08:00 +08:00

6.9 KiB
Raw Blame History

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、news/reports、news/events)。代表页面:stock_trend.php、stockdiv.php、stockep.php、stockmargin.php、hkholdbycode.php、index_trend.php、index_mv_all.php、index_margin.php、news_reports.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 中添加导航入口

常用代码片段

获取数据库连接

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(18 张表、在用/未用/已被 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(访问日志)、news_report / news_event(投资资讯日报,由独立的 djapi 后端写入,本仓库前端 charts/news_reports.php 仅经 /api/news/reports/、/api/news/events/ 只读消费)。
  • 机构持仓在 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/ —— 独立子模块(新闻抓取/分析,面向 CCTV 新闻联播),有自己的 JS/CSS,修改前先看 design.md 和 outline.md。
  • research/ —— 股票/行业研究报告产物目录(HTML/PDF),修改前看 intl_news_README.md。

Checkpoint

当用户说 "checkpoint" 时,在项目根目录生成 continuation.md,包含:

  • 当前状态:刚刚完成了什么、改了哪些文件、结果如何
  • 后续步骤:具体的、有序的下一步行动
  • 待解决问题:未解决的疑问、已知限制或需要决策的事项

Notes

(待补充:部署 sync-echart 命令细节见 CLAUDE.md;PHP 语法检查 php -l 修改后必做。)