677 lines
23 KiB
HTML
677 lines
23 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<title>Title</title>
|
|
</head>
|
|
<body>
|
|
<script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
|
|
<script>
|
|
|
|
var access_token = "TmEzb3VKekEzRnpFVm1ySGovaVU1ZlJ3WjB0TlloM0I0RmpkaGp0MDRSbz0=";
|
|
|
|
|
|
const color_arr = {
|
|
0:'#000000',// 默认颜色
|
|
1:'绿色',// 绿色
|
|
2:'黄色',// 黄色
|
|
3:'红色',// 红色
|
|
}
|
|
|
|
/*************************************************************************************************************
|
|
* ***********************************************************************************************************
|
|
* ***********************************************************************************************************
|
|
* ***********************************************************************************************************
|
|
* ***********************************************************************************************************
|
|
* ******************************** 最新数据和历史数据 ************************************
|
|
* ***********************************************************************************************************
|
|
* ***********************************************************************************************************
|
|
* ***********************************************************************************************************
|
|
* ***********************************************************************************************************
|
|
* ***********************************************************************************************************
|
|
*/
|
|
$.ajax({
|
|
url:"http://sms.com/api/center/latest-data?access_token="+access_token+"&type=v1",
|
|
headers:{'x-csrf':'ag7x1Afy1r0q8j4y05vk3s4118hx7124'},
|
|
crossDomain: true,
|
|
success:function(res){
|
|
let data = analysis(res.data.data_info)
|
|
let temp_data = dataToAvg(data['res_data'])
|
|
// 计算出能力值为1的数据
|
|
let res_data = [];
|
|
console.log('data:',data)
|
|
console.log('temp_data:',temp_data)
|
|
data.field_data.reverse() // 需要倒序
|
|
res_data = getType1(data.field_data,temp_data.data)
|
|
console.log('能力数据:',res_data)
|
|
res_data = getType2(data.field_data,temp_data.data)
|
|
console.log('初始数据:',res_data)
|
|
res_data = getType3(data.field_data,temp_data.data)
|
|
console.log('转速数据:',res_data)
|
|
res_data = getType4(data.field_data,temp_data.data)
|
|
console.log('结果数据:',res_data)
|
|
res_data = getType5(data.field_data,temp_data.data)
|
|
console.log('升降数据:',res_data)
|
|
res_data = getType6(data.field_data,temp_data.data)
|
|
console.log('路径数据:',res_data)
|
|
res_data = getType7(data.field_data,temp_data.data)
|
|
console.log('齿轮数据:',res_data)
|
|
res_data = getType8(data.field_data,temp_data.data)
|
|
console.log('几何数据:',res_data)
|
|
res_data = getType9(data.field_data,temp_data.data)
|
|
console.log('偏离数据:',res_data)
|
|
return false
|
|
}
|
|
})
|
|
|
|
|
|
// 解析数据,划分每根球杆的击球数据
|
|
function analysis(data){
|
|
let field_data = [];
|
|
let res_data = {};
|
|
for(let i = 0;i<data.length;i++){
|
|
let temp_key = "";
|
|
let pole_type = "";
|
|
let pole_class = "";
|
|
pole_class = (data[i].pop()).value;
|
|
pole_type = (data[i].pop()).value;
|
|
temp_key = pole_type +"_"+ pole_class;
|
|
temp_key = md5(temp_key);
|
|
if(res_data[temp_key] == undefined && data[i].length != 0){
|
|
field_data.push({
|
|
'pole_type':pole_type, // 球杆类型
|
|
'pole_class':pole_class, // 球杆品种
|
|
'search_index':temp_key,// 搜索主键,使用这个键去查找最终击球数据的每根球杆数据
|
|
})
|
|
res_data[temp_key] = [];
|
|
}
|
|
res_data[temp_key].push(data[i]);
|
|
}
|
|
return {
|
|
'field_data':field_data,
|
|
'res_data':res_data,
|
|
}
|
|
}
|
|
|
|
// 每根球杆的击球数据转成平均值
|
|
function dataToAvg(data){
|
|
let avg_data = [];
|
|
let click_avg_show = {};
|
|
for(let key in data){
|
|
// key -- 球杆
|
|
// i -- 击球次数
|
|
// k -- 击球数据详细
|
|
avg_data[key] = {}
|
|
for(let i=0;i<data[key].length;i++){
|
|
for(let k=0;k<data[key][i].length;k++){
|
|
if(data[key][i][k] == undefined){
|
|
continue
|
|
}
|
|
if(avg_data[key][data[key][i][k].title] == undefined){
|
|
avg_data[key][data[key][i][k].title] = []
|
|
}
|
|
avg_data[key][data[key][i][k].title].push(data[key][i][k].value)
|
|
if(click_avg_show[md5(key+'_'+data[key][i][k].title)] == undefined){
|
|
click_avg_show[md5(key+'_'+data[key][i][k].title)] = [];
|
|
}
|
|
click_avg_show[md5(key+'_'+data[key][i][k].title)].push(data[key][i][k].value)
|
|
}
|
|
}
|
|
}
|
|
|
|
let res = {};
|
|
for(let k in avg_data){
|
|
res[k] = []
|
|
for(let k1 in avg_data[k]){
|
|
res[k].push({
|
|
'title':k1,
|
|
'value':(sum(avg_data[k][k1])/avg_data[k][k1].length).toFixed(2),
|
|
'show_index':md5(k+'_'+k1),
|
|
})
|
|
}
|
|
}
|
|
return {
|
|
'data':res,
|
|
'click_avg_show':click_avg_show,
|
|
};
|
|
}
|
|
|
|
// 获取字段数据
|
|
function getFieldValue(avg_temp,field=[]){
|
|
let temp_data = {};
|
|
let temp_field = {};
|
|
for(let i=0;i<field.length;i++){
|
|
temp_data[i] = 0;
|
|
temp_field[field[i]] = i;
|
|
}
|
|
for(let k=0;k<avg_temp.length;k++){
|
|
if(temp_field[avg_temp[k].title] !== undefined){
|
|
temp_data[temp_field[avg_temp[k].title]] = {data:parseFloat(avg_temp[k].value),color:color_arr[0]};
|
|
}
|
|
}
|
|
return temp_data
|
|
}
|
|
|
|
// 获取类型1的数据 -- 能力数据
|
|
const getType1 = function(field_data,avg_data){
|
|
let res = {
|
|
0:[],// 挥速
|
|
1:[],// 球速
|
|
2:[],// 效能
|
|
}
|
|
let length = field_data.length;
|
|
let field_ = [];
|
|
for (let i=0;i<length;i++){
|
|
// 获取平均值数值
|
|
let avg_temp = avg_data[field_data[i].search_index];
|
|
field_.push(field_data[i].pole_class);
|
|
let temp_data = getFieldValue(avg_temp,['Club Speed','Ball Speed']);
|
|
if(temp_data[1] !== 0){
|
|
temp_data[2] = {data:(temp_data[1].data/temp_data[0].data).toFixed(2),color:color_arr[0]};;
|
|
}
|
|
res[0].push(temp_data[0]);
|
|
res[1].push(temp_data[1]);
|
|
res[2].push(temp_data[2]);
|
|
}
|
|
for (let i=0;i<length;i++){
|
|
if(i+1 >= length){
|
|
break;
|
|
}
|
|
let num = res[2][i].data;
|
|
let num_ = res[2][i+1].data;
|
|
if(num > num_){
|
|
// 绿色
|
|
res[2][i].color = color_arr[1];
|
|
continue;
|
|
}
|
|
if(num === num_){
|
|
// 黄色
|
|
res[2][i].color = color_arr[2];
|
|
continue;
|
|
}
|
|
if(num < num_){
|
|
// 红色
|
|
res[2][i].color = color_arr[3];
|
|
}
|
|
}
|
|
return {
|
|
'data':res,
|
|
'title':field_,
|
|
'name':['挥速','球速','效能'],
|
|
}
|
|
}
|
|
|
|
// 获取类型2的数据 -- 初始数据
|
|
const getType2 = function(field_data,avg_data){
|
|
let res = {
|
|
0:[],// 初始角
|
|
1:[],// 起飞角
|
|
}
|
|
let length = field_data.length;
|
|
let field_ = [];
|
|
for (let i=0;i<length;i++){
|
|
// 获取平均值数值
|
|
let avg_temp = avg_data[field_data[i].search_index];
|
|
field_.push(field_data[i].pole_class);
|
|
let temp_data = getFieldValue(avg_temp,['Launch Direction','Launch Angle']);
|
|
res[0].push(temp_data[0]);
|
|
res[1].push(temp_data[1]);
|
|
}
|
|
for (let i=0;i<length;i++){
|
|
if(i+1 >= length){
|
|
break;
|
|
}
|
|
let num = res[1][i].data;
|
|
let num_ = res[1][i+1].data;
|
|
if(i<1){
|
|
continue;
|
|
}
|
|
if(num < num_){
|
|
// 绿色
|
|
res[1][i+1].color = color_arr[1];
|
|
continue;
|
|
}
|
|
if(num === num_){
|
|
// 黄色
|
|
res[1][i+1].color = color_arr[2];
|
|
continue;
|
|
}
|
|
if(num > num_){
|
|
// 红色
|
|
res[1][i+1].color = color_arr[3];
|
|
}
|
|
}
|
|
for (let i=0;i<length;i++){
|
|
let num = res[0][i].data;
|
|
if(num <= 2 && num >= -2){
|
|
// 绿色
|
|
res[0][i].color = color_arr[1];
|
|
continue;
|
|
}
|
|
if(num <= 3 && num >= -3){
|
|
// 黄色
|
|
res[0][i].color = color_arr[2];
|
|
continue;
|
|
}
|
|
// 红色
|
|
res[0][i].color = color_arr[3];
|
|
}
|
|
return {
|
|
'data':res,
|
|
'title':field_,
|
|
'name':['初始角','起飞角'],
|
|
}
|
|
}
|
|
|
|
// 获取类型3的数据 -- 旋转数据
|
|
const getType3 = function(field_data,avg_data){
|
|
let res = {
|
|
0:[],// 侧旋
|
|
1:[],// 后旋
|
|
}
|
|
let length = field_data.length;
|
|
let field_ = [];
|
|
for (let i=0;i<length;i++){
|
|
// 获取平均值数值
|
|
let avg_temp = avg_data[field_data[i].search_index];
|
|
field_.push(field_data[i].pole_class);
|
|
let temp_data = getFieldValue(avg_temp,['Side Spin','Back Spin']);
|
|
res[0].push(temp_data[0]);
|
|
res[1].push(temp_data[1]);
|
|
}
|
|
for (let i=0;i<length;i++){
|
|
if(i+1 >= length){
|
|
break;
|
|
}
|
|
if(i<1){
|
|
if(i === 0){
|
|
// 第一根杆子
|
|
let num = res[1][i].data;
|
|
if(num < 2400){
|
|
// 绿色
|
|
res[1][i].color = color_arr[1];
|
|
continue;
|
|
}
|
|
if(num < 2800){
|
|
// 黄色
|
|
res[1][i].color = color_arr[2];
|
|
continue;
|
|
}
|
|
// 红色
|
|
res[1][i].color = color_arr[3];
|
|
|
|
}
|
|
continue;
|
|
}
|
|
let num = res[1][i].data;
|
|
let num_ = res[1][i+1].data;
|
|
if(num < num_){
|
|
// 绿色
|
|
res[1][i+1].color = color_arr[1];
|
|
continue;
|
|
}
|
|
if(num === num_){
|
|
// 黄色
|
|
res[1][i+1].color = color_arr[2];
|
|
continue;
|
|
}
|
|
// 红色
|
|
res[1][i+1].color = color_arr[3];
|
|
}
|
|
for (let i=0;i<length;i++){
|
|
let num = res[0][i].data;
|
|
if(num < 200 && num > -200){
|
|
// 绿色
|
|
res[0][i].color = color_arr[1];
|
|
continue;
|
|
}
|
|
if(num <= 400 && num >= -400){
|
|
// 黄色
|
|
res[0][i].color = color_arr[2];
|
|
continue;
|
|
}
|
|
// 红色
|
|
res[0][i].color = color_arr[3];
|
|
}
|
|
return {
|
|
'data':res,
|
|
'title':field_,
|
|
'name':['侧旋','后旋'],
|
|
}
|
|
}
|
|
|
|
// 获取类型4的数据 -- 结果数据
|
|
const getType4 = function(field_data,avg_data){
|
|
let res = {
|
|
0:[],// 落点
|
|
1:[],// 总距离
|
|
}
|
|
let length = field_data.length;
|
|
let field_ = [];
|
|
for (let i=0;i<length;i++){
|
|
// 获取平均值数值
|
|
let avg_temp = avg_data[field_data[i].search_index];
|
|
field_.push(field_data[i].pole_class);
|
|
let temp_data = getFieldValue(avg_temp,['Carry','Total']);
|
|
res[0].push(temp_data[0]);
|
|
res[1].push(temp_data[1]);
|
|
}
|
|
for (let i=0;i<length;i++){
|
|
if(i+1 >= length){
|
|
break;
|
|
}
|
|
let num = res[0][i].data;
|
|
let num_ = res[0][i+1].data;
|
|
let res_num = num - num_;
|
|
if(res_num >= 10 && res_num <= 15){
|
|
// 绿色
|
|
res[0][i].color = color_arr[1];
|
|
continue;
|
|
}
|
|
if(res_num >= 5 && res_num <= 9){
|
|
// 黄色
|
|
res[0][i].color = color_arr[2];
|
|
continue;
|
|
}
|
|
// 红色
|
|
res[0][i].color = color_arr[3];
|
|
}
|
|
return {
|
|
'data':res,
|
|
'title':field_,
|
|
'name':['落点','总距离'],
|
|
}
|
|
}
|
|
|
|
// 获取类型5的数据 -- 升降数据
|
|
const getType5 = function(field_data,avg_data){
|
|
let res = {
|
|
0:[],// 攻击角
|
|
1:[],// 高度
|
|
2:[],// 下降角
|
|
}
|
|
let length = field_data.length;
|
|
let field_ = [];
|
|
for (let i=0;i<length;i++){
|
|
// 获取平均值数值
|
|
let avg_temp = avg_data[field_data[i].search_index];
|
|
field_.push(field_data[i].pole_class);
|
|
let temp_data = getFieldValue(avg_temp,['Angle of Attack','Peak Height','Descent Angle']);
|
|
res[0].push(temp_data[0]);
|
|
res[1].push(temp_data[1]);
|
|
res[2].push(temp_data[2]);
|
|
}
|
|
for (let i=0;i<length;i++){
|
|
if(i+1 >= length){
|
|
break;
|
|
}
|
|
if(i<1){
|
|
if(i === 0){
|
|
// 计算第一根杆子
|
|
let num = res[0][i].data;
|
|
if(num >= -3 && num <= 3){
|
|
// 绿色
|
|
res[0][i].color = color_arr[1];
|
|
continue;
|
|
}
|
|
if(num >= -5 && num <= 5){
|
|
// 黄色
|
|
res[0][i].color = color_arr[2];
|
|
continue;
|
|
}
|
|
// 红色
|
|
res[0][i].color = color_arr[3];
|
|
}
|
|
continue;
|
|
}
|
|
let num = res[0][i].data;
|
|
let num_ = res[0][i+1].data;
|
|
if(num_ < num){
|
|
// 绿色
|
|
res[0][i+1].color = color_arr[1];
|
|
continue;
|
|
}
|
|
if(num === num_){
|
|
// 黄色
|
|
res[0][i+1].color = color_arr[2];
|
|
continue;
|
|
}
|
|
if(num_ > num){
|
|
// 红色
|
|
res[0][i+1] = {data:num_,color:color_arr[3]};
|
|
}
|
|
}
|
|
return {
|
|
'data':res,
|
|
'title':field_,
|
|
'name':['攻击角','高度','下降角'],
|
|
}
|
|
}
|
|
|
|
// 获取类型6的数据 -- 路径数据
|
|
const getType6 = function(field_data,avg_data){
|
|
let res = {
|
|
0:[],// 路径
|
|
1:[],// 杆面路径
|
|
2:[],// 杆面目标
|
|
}
|
|
let length = field_data.length;
|
|
let field_ = [];
|
|
for (let i=0;i<length;i++){
|
|
// 获取平均值数值
|
|
let avg_temp = avg_data[field_data[i].search_index];
|
|
field_.push(field_data[i].pole_class);
|
|
let temp_data = getFieldValue(avg_temp,['Club Path','Face To Path','Face To Target']);
|
|
res[0].push(temp_data[0]);
|
|
res[1].push(temp_data[1]);
|
|
res[2].push(temp_data[2]);
|
|
};
|
|
for (let i=0;i<length;i++){
|
|
let num_1 = res[1][i].data;
|
|
let num_2 = res[2][i].data;
|
|
if(num_1 >= 0){
|
|
num_1 = true
|
|
}else{
|
|
num_1 = false
|
|
}
|
|
if(num_2 >= 0){
|
|
num_2 = true
|
|
}else{
|
|
num_2 = false
|
|
}
|
|
if(num_1 === num_2){
|
|
// 绿色
|
|
res[1][i].color = color_arr[1];
|
|
res[2][i].color = color_arr[1];
|
|
}else{
|
|
// 黄色
|
|
res[1][i].color = color_arr[2];
|
|
res[2][i].color = color_arr[2];
|
|
}
|
|
|
|
let num = res[0][i].data;
|
|
if(num < 3 && num > -3){
|
|
// 绿色
|
|
res[0][i].color = color_arr[1];
|
|
continue;
|
|
}
|
|
if(num <= 5 && num >= -5){
|
|
// 黄色
|
|
res[0][i].color = color_arr[2];
|
|
continue;
|
|
}
|
|
// 红色
|
|
res[0][i].color = color_arr[3];
|
|
|
|
}
|
|
return {
|
|
'data':res,
|
|
'title':field_,
|
|
'name':['路径','杆面路径','杆面目标'],
|
|
}
|
|
}
|
|
|
|
// 获取类型7的数据 -- 齿轮数据
|
|
const getType7 = function(field_data,avg_data){
|
|
let res = {
|
|
0:[],// 水平点
|
|
1:[],// 垂直点
|
|
}
|
|
let length = field_data.length;
|
|
let field_ = [];
|
|
for (let i=0;i<length;i++){
|
|
// 获取平均值数值
|
|
let avg_temp = avg_data[field_data[i].search_index];
|
|
field_.push(field_data[i].pole_class);
|
|
let temp_data = getFieldValue(avg_temp,['Horizontal Impact','Vertical Impact']);
|
|
res[0].push(temp_data[0]);
|
|
res[1].push(temp_data[1]);
|
|
}
|
|
let num_fun = function(num){ // 计算范围
|
|
if(num < 7 && num > -7){
|
|
// 绿色
|
|
return color_arr[1];
|
|
}
|
|
if(num <= 12 && num >= -12){
|
|
// 黄色
|
|
return color_arr[2];
|
|
}
|
|
// 红色
|
|
return color_arr[3];
|
|
};
|
|
for (let i=0;i<length;i++){
|
|
let num_1 = res[1][i].data;
|
|
let num = res[0][i].data;
|
|
res[0][i].color = num_fun(num);
|
|
res[1][i].color = num_fun(num_1);
|
|
}
|
|
return {
|
|
'data':res,
|
|
'title':field_,
|
|
'name':['水平点','垂直点'],
|
|
}
|
|
}
|
|
|
|
// 获取类型8的数据 -- 几何数据
|
|
const getType8 = function(field_data,avg_data){
|
|
let res = {
|
|
0:[],// 面倾角
|
|
1:[],// 水平角
|
|
2:[],// 杆面角
|
|
}
|
|
let length = field_data.length;
|
|
let field_ = [];
|
|
for (let i=0;i<length;i++){
|
|
// 获取平均值数值
|
|
let avg_temp = avg_data[field_data[i].search_index];
|
|
field_.push(field_data[i].pole_class);
|
|
let temp_data = getFieldValue(avg_temp,['Dynamic Loft','Lie Angle','F-Axis']);
|
|
res[0].push(temp_data[0]);
|
|
res[1].push(temp_data[1]);
|
|
res[2].push(temp_data[2]);
|
|
}
|
|
let num_fun_1 = function(num){ // 计算范围
|
|
if(num < 3 && num > -3){
|
|
// 绿色
|
|
return color_arr[1];
|
|
}
|
|
if(num <= 6 && num >= -6){
|
|
// 黄色
|
|
return color_arr[2];
|
|
}
|
|
// 红色
|
|
return color_arr[3];
|
|
};
|
|
let num_fun_2 = function(num){ // 计算范围
|
|
if(num < 5 && num > -5){
|
|
// 绿色
|
|
return color_arr[1];
|
|
}
|
|
if(num <= 10 && num >= -10){
|
|
// 黄色
|
|
return color_arr[2];
|
|
}
|
|
// 红色
|
|
return color_arr[3];
|
|
};
|
|
for (let i=0;i<length;i++){
|
|
let num_2 = res[2][i].data;
|
|
let num_1 = res[1][i].data;
|
|
res[2][i].color = num_fun_2(num_2);
|
|
res[1][i].color = num_fun_1(num_1);
|
|
}
|
|
return {
|
|
'data':res,
|
|
'title':field_,
|
|
'name':['面倾角','水平角','杆面角'],
|
|
}
|
|
}
|
|
|
|
// 获取类型9的数据 -- 偏离数据
|
|
const getType9 = function(field_data,avg_data){
|
|
let res = {
|
|
0:[],// 目标差
|
|
1:[],// 偏离
|
|
}
|
|
let length = field_data.length;
|
|
let field_ = [];
|
|
for (let i=0;i<length;i++){
|
|
// 获取平均值数值
|
|
let avg_temp = avg_data[field_data[i].search_index];
|
|
field_.push(field_data[i].pole_class);
|
|
let temp_data = getFieldValue(avg_temp,['Offline','Lie Angle']);
|
|
res[0].push(temp_data[0]);
|
|
res[1].push(temp_data[1]);
|
|
}
|
|
let num_fun_1 = function(num){ // 计算范围
|
|
if(num < 3 && num > -3){
|
|
// 绿色
|
|
return color_arr[1];
|
|
}
|
|
if(num <= 7 && num >= -7){
|
|
// 黄色
|
|
return color_arr[2];
|
|
}
|
|
// 红色
|
|
return color_arr[3];
|
|
};
|
|
for (let i=0;i<length;i++){
|
|
let num_1 = res[1][i].data;
|
|
res[1][i].color = num_fun_1(num_1);
|
|
}
|
|
return {
|
|
'data':res,
|
|
'title':field_,
|
|
'name':['目标差','偏离'],
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////// 公共方法 ////////////////////////////////////////////////
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
// 求和
|
|
function sum(arr){
|
|
let sum = 0
|
|
for(let i=0;i<arr.length;i++){
|
|
if(arr[i] == '-'){
|
|
continue;
|
|
}
|
|
sum += arr[i]
|
|
}
|
|
return sum
|
|
}
|
|
|
|
// 符合现有的代码
|
|
function md5(str){
|
|
return btoa(str)
|
|
}
|
|
|
|
</script>
|
|
|
|
</body>
|
|
</html> |