- B2视图:峰峰值/频率/距离/速度 趋势折线图,三Y轴 - B4视图:工作频率/距离/速度 趋势折线图,三Y轴 - dataZoom时间范围缩放,图例可切换系列显隐 - 新增 /api/test-data/chart 接口返回全量数据
81 lines
2.7 KiB
Python
81 lines
2.7 KiB
Python
"""测试信息 API"""
|
|
|
|
import csv
|
|
import io
|
|
from flask import Blueprint, jsonify, render_template, request, Response
|
|
from flask_login import login_required
|
|
from app.models import get_test_data, get_all_test_data_for_export
|
|
|
|
bp = Blueprint("test_data", __name__)
|
|
|
|
|
|
@bp.route("/test-data")
|
|
def test_data_page():
|
|
"""测试信息页"""
|
|
return render_template("test_data.html")
|
|
|
|
|
|
@bp.route("/api/test-data")
|
|
def api_test_data():
|
|
"""分页查询测试数据"""
|
|
page = request.args.get("page", 1, type=int)
|
|
per_page = request.args.get("per_page", 20, type=int)
|
|
serial = request.args.get("serial", "", type=str)
|
|
date_from = request.args.get("date_from", "", type=str)
|
|
date_to = request.args.get("date_to", "", type=str)
|
|
test_mode = request.args.get("test_mode", "", type=str)
|
|
data_source = request.args.get("data_source", "", type=str)
|
|
|
|
records, total = get_test_data(page, per_page, serial, date_from, date_to,
|
|
test_mode, data_source)
|
|
return jsonify({
|
|
"records": records,
|
|
"total": total,
|
|
"page": page,
|
|
"per_page": per_page,
|
|
"pages": (total + per_page - 1) // per_page if total > 0 else 1,
|
|
})
|
|
|
|
|
|
@bp.route("/api/test-data/chart")
|
|
def api_chart_data():
|
|
"""返回图表所需全部数据(不分页)"""
|
|
serial = request.args.get("serial", "", type=str)
|
|
date_from = request.args.get("date_from", "", type=str)
|
|
date_to = request.args.get("date_to", "", type=str)
|
|
test_mode = request.args.get("test_mode", "", type=str)
|
|
data_source = request.args.get("data_source", "", type=str)
|
|
|
|
records = get_all_test_data_for_export(serial, date_from, date_to,
|
|
test_mode, data_source)
|
|
return jsonify({"records": records, "total": len(records)})
|
|
|
|
@bp.route("/api/test-data/export")
|
|
def api_export():
|
|
"""导出测试数据为 CSV"""
|
|
serial = request.args.get("serial", "", type=str)
|
|
date_from = request.args.get("date_from", "", type=str)
|
|
date_to = request.args.get("date_to", "", type=str)
|
|
test_mode = request.args.get("test_mode", "", type=str)
|
|
data_source = request.args.get("data_source", "", type=str)
|
|
|
|
records = get_all_test_data_for_export(serial, date_from, date_to,
|
|
test_mode, data_source)
|
|
|
|
output = io.StringIO()
|
|
writer = csv.writer(output)
|
|
|
|
# 表头
|
|
if records:
|
|
headers = [k for k in records[0].keys()]
|
|
writer.writerow(headers)
|
|
for r in records:
|
|
writer.writerow(r.values())
|
|
|
|
output.seek(0)
|
|
return Response(
|
|
output.getvalue(),
|
|
mimetype="text/csv",
|
|
headers={"Content-Disposition": "attachment; filename=test_data.csv"},
|
|
)
|