1、开发业务标识管理、业务脚本管理、业务下发管理 2、联调业务脚本管理 3、首页top5图表数据补齐

This commit is contained in:
康冉冉
2025-10-13 18:42:27 +08:00
parent d192a03f75
commit 59e0b5774e
12 changed files with 1089 additions and 26 deletions

View File

@@ -237,14 +237,88 @@ export default {
countDeviceNumTop5().then(res => {
let lineXData = [];
let dataList = [];
res && res.data.forEach(item => {
lineXData.push(item.businessName);
dataList.push(item.total);
});
this.lineDataParams['lineXData'] = lineXData;
this.lineDataParams['data'] = dataList;
if (res && res.data) {
let newArr = res.data;
if (res.data && res.data.length < 5) {
newArr = this.sortedNum(res.data);
}
newArr.forEach(item => {
lineXData.push(item.businessName);
dataList.push(item.total);
});
this.lineDataParams['lineXData'] = lineXData;
this.lineDataParams['data'] = dataList;
}
});
},
sortedNum(data){
// 提取value并转换为数字同时保存name映射
const valueMap = new Map(); // 存储 {value: name}
const values = [];
for (const item of data) {
const value = parseInt(item.total, 10);
// 校验value有效性
if (isNaN(value) || value <= 0) {
return "错误所有value必须是大于0的数字";
}
// 校验重复value
if (valueMap.has(value)) {
return "错误输入数组不能包含重复的value";
}
valueMap.set(value, item.businessName);
values.push(value);
}
// 对输入value排序降序
const sortedInputs = [...values].sort((a, b) => b - a);
// 生成目标value序列包含所有输入值的5个递减正数
let targetValues = [];
let start = sortedInputs[0];
while (true) {
const candidate = new Set();
// 先加入所有输入值
sortedInputs.forEach(v => candidate.add(v));
// 从start开始向下补充直到有5个值
let current = start;
while (candidate.size < 5) {
if (current <= 0) break;
candidate.add(current);
current--;
}
// 转换为数组并排序(降序)
const arr = [...candidate].sort((a, b) => b - a);
if (arr.length === 5 && arr.every(v => v > 0)) {
targetValues = arr;
break;
}
start++; // 若当前start无法生成有效序列增大start重试
}
// 生成每个value对应的name
const result = [];
for (const val of targetValues) {
if (valueMap.has(val)) {
// 已有value使用原name
result.push({ businessName: valueMap.get(val), total: val.toString() });
} else {
// 补充的value寻找对应的name前缀
// 找到小于当前val的最大输入value
const closestSmaller = sortedInputs.find(v => v < val);
if (closestSmaller !== undefined) {
const prefix = valueMap.get(closestSmaller);
result.push({ businessName: `${prefix}${val}`, total: val.toString() });
} else {
// 若所有输入值都大于当前val极端情况用最大输入值的name
const maxInput = sortedInputs[0];
const prefix = valueMap.get(maxInput);
result.push({ businessName: `${prefix}${val}`, total: val.toString() });
}
}
}
return result;
},
serverTableList() {
listBandWidth(this.serQueryParams).then(response => {
this.serTableList = response.rows;