You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
143 lines
4.0 KiB
143 lines
4.0 KiB
var util = {}
|
|
util.data = {}
|
|
util.data.base_url = 'https://hwjb.homilychart.com/testApi'
|
|
// util.data.base_url = 'https://dbqb.nfdxy.net/prodApi'
|
|
|
|
// AJAX 请求方法
|
|
util.request = (url, callback, data = {}, failCallback) => {
|
|
url = util.data.base_url + url
|
|
console.log('请求该接口->', url, '请求参数为->', data);
|
|
uni.request({
|
|
url: url, //仅为示例,并非真实接口地址。
|
|
data,
|
|
method: 'post',
|
|
header: {
|
|
'content-type': 'application/json',
|
|
'version': uni.getSystemInfoSync().appVersion,
|
|
'client': uni.getSystemInfoSync().platform == 'ios' ? 'ios' : 'android',
|
|
'token': uni.getStorageSync('token'),
|
|
'deviceId': uni.getSystemInfoSync().deviceId
|
|
},
|
|
sslVerify: false,
|
|
success: callback,
|
|
fail: failCallback
|
|
});
|
|
}
|
|
|
|
export default util
|
|
|
|
// 画图需要用到的方法
|
|
export const utils = {
|
|
// 格式化价格
|
|
formatPrice(price) {
|
|
return price.toFixed(2);
|
|
},
|
|
// 计算数据范围
|
|
calculateDataRange(data, key) {
|
|
if (!data || data.length === 0) {
|
|
return {
|
|
min: 0,
|
|
max: 0,
|
|
};
|
|
}
|
|
const values = data.map((item) => item[key]);
|
|
return {
|
|
min: Math.min(...values),
|
|
max: Math.max(...values),
|
|
};
|
|
},
|
|
// 计算标签
|
|
calculateLabel(data, type = 2, preClosePrice = 0, key, num) {
|
|
let label = [];
|
|
if (key === "price") {
|
|
// 分时价格区间
|
|
if (type == 1) {
|
|
const priceRange = utils.calculateDataRange(data, "price");
|
|
const theMost = Math.max(priceRange.max - preClosePrice, preClosePrice - priceRange.min);
|
|
const mid = (num - 1) / 2;
|
|
// 计算分时价格标签
|
|
label[mid] = {
|
|
value: utils.formatPrice(preClosePrice),
|
|
ratio: utils.formatPrice(0) + "%",
|
|
};
|
|
for (let i = 0; i < mid; i++) {
|
|
label[i] = {
|
|
value: utils.formatPrice(preClosePrice + (theMost * (mid - i)) / mid),
|
|
ratio: utils.formatPrice((100 * (theMost * (mid - i))) / mid / preClosePrice) + "%",
|
|
};
|
|
|
|
label[num - 1 - i] = {
|
|
value: utils.formatPrice(preClosePrice - (theMost * (mid - i)) / mid),
|
|
ratio: utils.formatPrice((-1 * 100 * (theMost * (mid - i))) / mid / preClosePrice) +
|
|
"%",
|
|
};
|
|
}
|
|
timeChartObject.value.max = preClosePrice + theMost;
|
|
timeChartObject.value.min = preClosePrice - theMost;
|
|
return label;
|
|
} else {
|
|
const highPriceRange = utils.calculateDataRange(data, "high");
|
|
const lowPriceRange = utils.calculateDataRange(data, "low");
|
|
const priceDiff = highPriceRange.max * 1.01 - lowPriceRange.min * 0.99;
|
|
for (let i = 0; i < num; ++i) {
|
|
label[i] = {
|
|
value: utils.formatPrice(highPriceRange.max - (i * priceDiff) / num),
|
|
};
|
|
}
|
|
return label;
|
|
}
|
|
} else if (key === "volume") {
|
|
const volumeRange = utils.calculateDataRange(data, "volume");
|
|
label[0] = {
|
|
value: utils.formatPrice(volumeRange.max),
|
|
};
|
|
label[1] = {
|
|
value: utils.formatPrice(0),
|
|
};
|
|
return label;
|
|
}
|
|
return null;
|
|
},
|
|
// 线性插值
|
|
lerp(start, end, factor) {
|
|
return start + (end - start) * factor;
|
|
},
|
|
// 股市数值格式化方法
|
|
formatStockNumber(value, decimalPlaces = 2) {
|
|
const num = Number(value);
|
|
if (isNaN(num)) return "0";
|
|
|
|
const absNum = Math.abs(num);
|
|
const sign = num < 0 ? "-" : "";
|
|
|
|
if (absNum >= 1000000000000) {
|
|
// 万亿级别
|
|
return sign + (absNum / 1000000000000).toFixed(decimalPlaces) + "万亿";
|
|
} else if (absNum >= 100000000) {
|
|
// 亿级别
|
|
return sign + (absNum / 100000000).toFixed(decimalPlaces) + "亿";
|
|
} else if (absNum >= 10000) {
|
|
// 万级别
|
|
return sign + (absNum / 10000).toFixed(decimalPlaces) + "万";
|
|
} else {
|
|
// 小于万的直接显示
|
|
return sign + absNum.toFixed(decimalPlaces);
|
|
}
|
|
},
|
|
};
|
|
|
|
// 防抖函数
|
|
export const throttle = (fn, delay = 1000) => {
|
|
//距离上一次的执行时间
|
|
let lastTime = 0;
|
|
return function() {
|
|
let _this = this;
|
|
let _arguments = arguments;
|
|
let now = new Date().getTime();
|
|
//如果距离上一次执行超过了delay才能再次执行
|
|
if (now - lastTime > delay) {
|
|
fn.apply(_this, _arguments);
|
|
lastTime = now;
|
|
}
|
|
};
|
|
};
|