更新:ajax 载入动图更新

This commit is contained in:
杨水淼
2025-07-19 10:01:53 +08:00
parent de11c31f0b
commit bd4f92d465
5 changed files with 108 additions and 15 deletions
+1 -1
View File
@@ -6,7 +6,7 @@
<script type="text/javascript" src="lib/jquery.min.js?version=3.6.0"></script> <script type="text/javascript" src="lib/jquery.min.js?version=3.6.0"></script>
<script type="text/javascript" src="/lib/echarts/5.4.2/echarts.js"></script> <script type="text/javascript" src="/lib/echarts/5.4.2/echarts.js"></script>
<script type="text/javascript" src="/lib/DataTables-2/datatables.min.js"></script> <script type="text/javascript" src="/lib/DataTables-2/datatables.min.js"></script>
<script type="text/javascript" src="/js/pubfunc.js?version=0.7"></script> <script type="text/javascript" src="/js/pubfunc.js?version=0.10"></script>
<link href="css/style.css?version=0.7" rel="stylesheet" type="text/css"> <link href="css/style.css?version=0.7" rel="stylesheet" type="text/css">
<link href="/lib/DataTables-2/datatables.min.css" rel="stylesheet" type="text/css"> <link href="/lib/DataTables-2/datatables.min.css" rel="stylesheet" type="text/css">
<title><?=$title?></title> <title><?=$title?></title>
+2 -1
View File
@@ -1,4 +1,4 @@
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"> <!DOCTYPE html>
<html> <html>
<head> <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -18,6 +18,7 @@ $_REQUEST['ts_code']=$_REQUEST['ts_code']?$_REQUEST['ts_code']:'600000';
<div style="clear:both;position: relative; float:left; text-align:center; margin: 0 auto;width:400px;height: 400px; "> <div style="clear:both;position: relative; float:left; text-align:center; margin: 0 auto;width:400px;height: 400px; ">
<div class="div_block">个股:股票代码: <input type='text' name='ts_code' id='ts_code' size="12" value='<?=$_REQUEST['ts_code']?>' ></div> <div class="div_block">个股:股票代码: <input type='text' name='ts_code' id='ts_code' size="12" value='<?=$_REQUEST['ts_code']?>' ></div>
<div class="div_block">个股:<a href="#" onclick="openurl('https://echart.doorcome.cn/stock_trend.php');">股价VS PE/PB/PS 趋势</a></div> <div class="div_block">个股:<a href="#" onclick="openurl('https://echart.doorcome.cn/stock_trend.php');">股价VS PE/PB/PS 趋势</a></div>
<div class="div_block">个股:<a href="#" onclick="openurl('https://echart.doorcome.cn/stockep.php');">股价VS EP</a></div>
<div class="div_block">个股:<a href="#" onclick="openurl('https://echart.doorcome.cn/stockmargin.php');">股价VS 融资融券余额</a></div> <div class="div_block">个股:<a href="#" onclick="openurl('https://echart.doorcome.cn/stockmargin.php');">股价VS 融资融券余额</a></div>
<div class="div_block">个股:<a href="#" onclick="openurl('https://echart.doorcome.cn/hkholdbycode.php');">股价VS 北向资金持股</a></div> <div class="div_block">个股:<a href="#" onclick="openurl('https://echart.doorcome.cn/hkholdbycode.php');">股价VS 北向资金持股</a></div>
<div class='div_block'>个股:<a href="#" onclick="openurl('https://echart.doorcome.cn/stock_ih.php');">股价VS 机构持仓趋势</a></div> <div class='div_block'>个股:<a href="#" onclick="openurl('https://echart.doorcome.cn/stock_ih.php');">股价VS 机构持仓趋势</a></div>
+8 -8
View File
@@ -2,7 +2,7 @@
* @Author: 杨水淼 yangshuimiao@jsjd.cc * @Author: 杨水淼 yangshuimiao@jsjd.cc
* @Date: 2025-03-21 11:58:51 * @Date: 2025-03-21 11:58:51
* @LastEditors: 杨水淼 yangshuimiao@jsjd.cc * @LastEditors: 杨水淼 yangshuimiao@jsjd.cc
* @LastEditTime: 2025-07-09 12:28:30 * @LastEditTime: 2025-07-16 16:15:16
* @FilePath: \echarts\js\pubfunc.js * @FilePath: \echarts\js\pubfunc.js
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/ */
@@ -87,18 +87,18 @@ function formatDateToYYYYMMDD(dateStr) {
return dateStr.replace(/-/g, ''); return dateStr.replace(/-/g, '');
} }
function pickData(data, dateKey, valueKey) { function pickData(data, dateKey, valueKey,fixed=2) {
data.sort((a, b) => a[dateKey] - b[dateKey]); data.sort((a, b) => a[dateKey] - b[dateKey]);
return data.map(item => ({ return data.map(item => ({
value: [ value: [
item[dateKey].slice(0, 4) + '-' + item[dateKey].slice(4, 6) + '-' + item[dateKey].slice(6, 8), // 格式化日期 yyyymmdd 转为 yyyy-mm-dd item[dateKey].slice(0, 4) + '-' + item[dateKey].slice(4, 6) + '-' + item[dateKey].slice(6, 8), // 格式化日期 yyyymmdd 转为 yyyy-mm-dd
item[valueKey].toFixed(2) // 保留两位小数 item[valueKey].toFixed(fixed) // 保留两位小数
] ]
})); }));
} }
/* 将上述pickData函数返回的结果,value计算返回最大值,最小值,均值,以及最后一个值 */ /* 将上述pickData函数返回的结果,value计算返回最大值,最小值,均值,以及最后一个值 */
function calculateStats(data) { function calculateStats(data,fixed=2) {
if (data.length === 0) { if (data.length === 0) {
return { return {
max: null, max: null,
@@ -129,9 +129,9 @@ function calculateStats(data) {
const avg = sum / data.length; const avg = sum / data.length;
return { return {
max: max.toFixed(2), max: max.toFixed(fixed),
min: min.toFixed(2), min: min.toFixed(fixed),
avg: avg.toFixed(2), avg: avg.toFixed(fixed),
last: last.toFixed(2) last: last.toFixed(fixed)
}; };
} }
-5
View File
@@ -26,8 +26,6 @@ include_once "html/head.php";
<div class="spinner"></div> <div class="spinner"></div>
<p style="font-size:18px; color:#2c3e50;">正在加载数据,请稍候...</p> <p style="font-size:18px; color:#2c3e50;">正在加载数据,请稍候...</p>
</div> </div>
</div>
<div id="pe_ttm" style="width: 1000px; height:400px; margin: 0 auto 20px;"></div> <div id="pe_ttm" style="width: 1000px; height:400px; margin: 0 auto 20px;"></div>
<div id="pb" style="width: 1000px; height:400px; margin: 0 auto 20px;"></div> <div id="pb" style="width: 1000px; height:400px; margin: 0 auto 20px;"></div>
<div id="ps" style="width: 1000px; height:400px; margin: 0 auto 20px;"></div> <div id="ps" style="width: 1000px; height:400px; margin: 0 auto 20px;"></div>
@@ -38,9 +36,6 @@ include_once "html/head.php";
<script> <script>
// 页面加载时初始化图表 // 页面加载时初始化图表
$(document).ready(function() { $(document).ready(function() {
// 设置默认值
$('#code').val('<?= $_REQUEST['code'] ?>');
$('#se').val('<?= $_REQUEST['se'] ?>');
// 加载初始数据 // 加载初始数据
loadChartData(); loadChartData();
+97
View File
@@ -0,0 +1,97 @@
<?php
/*
* @Author: 杨水淼 yangshuimiao@jsjd.cc
* @Date: 2025-07-16 14:34:25
* @LastEditors: 杨水淼 yangshuimiao@jsjd.cc
* @LastEditTime: 2025-07-17 10:45:36
* @FilePath: \echarts\stockep.php
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
$_REQUEST['ts_code']=$_REQUEST['ts_code']?$_REQUEST['ts_code']:'000001';
$_REQUEST['t_start']=$_REQUEST['t_start']?$_REQUEST['t_start']:'2022-01-01';
$_REQUEST['t_end']=$_REQUEST['t_end']?$_REQUEST['t_end']:date('Y-m-d');
$title="股价VS EP趋势:".$ts_name.'('.$_REQUEST['ts_code'].')';
include_once "html/head.php";
?>
<script src="js/renderCharts.js"></script>
<form name="main" id="main" method="get"> <div style="width:100%;text-align:center">
股票代码: <input type='text' name='ts_code' id='ts_code' width="30px" value='<?=$_REQUEST['ts_code']?>' >
开始时间: <input type='date' name='t_start' id='t_start' width='30px' value='<?=$_REQUEST['t_start']?>' >
结束时间: <input type='date' name='t_end' id='t_end' width='30px' value='<?=$_REQUEST['t_end']?>' >
<button id="submitBtn" class="btn-submit"><span>查询数据</span></button>
<div >&nbsp;</div>
</div> </form>
<div style="margin:0 auto;clear:both;left:100px;width:1000px;height:30px;text-align:left"><span style="color:grey">EP=100*TTM每股收益/股价。如:EP=5表示每股收益率5%</span></div>
<!-- 图表容器 -->
<div id="container" style="width: 1000px;height:400px; margin: 0 auto 20px;">
<div class="loading-overlay" id="loadingOverlay">
<div class="spinner"></div>
<p style="font-size:18px; color:#2c3e50;">正在加载数据,请稍候...</p>
</div>
</div>
</div>
<script>
// 页面加载时初始化图表
$(document).ready(function() {
// 加载初始数据
loadChartData();
// 绑定按钮点击事件
$('#submitBtn').click(function(e) {
//e.preventDefault(); // 阻止表单提交刷新页面
$('#loadingOverlay').addClass('active');
loadChartData();
$('#loadingOverlay').removeClass('active');
});
});
// 加载图表数据的函数
function loadChartData() {
// 显示加载动画
$('#loadingOverlay').addClass('active');
let t_start = $('#t_start').val();
let t_end = $('#t_end').val();
let ts_code = $("#ts_code").val();
url = "https://api.doorcome.cn/api/stockep/?tscode="+ts_code;
url += "&start_date="+t_start+"&end_date="+t_end;
url2 = "https://api.doorcome.cn/api/stockinfo/?tscode="+ts_code;
Promise.all([
fetch(url),
fetch(url2)
])
.then(responses => Promise.all(responses.map(r => r.json())))
.then(([parsedData,stockInfo]) => {
// 图表配置:pe_ttm
let codeName = stockInfo[0].name;
var params = {};
params.chartid='container';
params.legend = [codeName,'EP'];
params.text = params.legend[0]+' V.S '+params.legend[1];
params.data1 = pickData(parsedData, 'trade_date', 'close');
params.data2 = pickData(parsedData, 'trade_date', 'basic_ep_ttm');
dataCal = calculateStats(params.data2);
params.sub_text = "TTM EP Max:"+dataCal['max'];
params.sub_text += ", Min:"+dataCal['min'];
params.sub_text += ", Average:"+dataCal['avg'];
params.sub_text += ", Recent:"+dataCal['last'];
doubleLineChart(params);
})
.catch(error => console.error('数据加载失败:', error))
.finally(() => {
// 隐藏加载动画
$('#loadingOverlay').removeClass('active');
});
}
</script>
</div>
<?php include_once "html/footer.php"; ?>