- 新增OperationDashboard.vue全屏大屏组件 - 添加6个核心KPI指标卡片: 进水总量/出水总量/产销差率/营收额/平均水质/报警次数 - 实现6个ECharts图表: 供水趋势/水质分布/报警统计/管网空间/设备状态/营收分析 - 创建静态HTML版本operation-dashboard.html,使用CDN加载Vue3/ECharts/Element Plus - 更新路由配置,添加/operation路径支持 - 修复nextTick导入问题,优化build脚本 🚧 开发者: bot_dev1 📝 任务: #38 [BI] 运营仪表盘 + 供水专题大屏
45 lines
854 B
JavaScript
45 lines
854 B
JavaScript
/**
|
|
* Throttle decorator
|
|
* @param {Function} fn
|
|
* @param {Number} freq
|
|
* @return {Function}
|
|
*/
|
|
function throttle(fn, freq) {
|
|
let timestamp = 0;
|
|
let threshold = 1000 / freq;
|
|
let lastArgs;
|
|
let timer;
|
|
|
|
const invoke = (args, now = Date.now()) => {
|
|
timestamp = now;
|
|
lastArgs = null;
|
|
if (timer) {
|
|
clearTimeout(timer);
|
|
timer = null;
|
|
}
|
|
fn(...args);
|
|
};
|
|
|
|
const throttled = (...args) => {
|
|
const now = Date.now();
|
|
const passed = now - timestamp;
|
|
if (passed >= threshold) {
|
|
invoke(args, now);
|
|
} else {
|
|
lastArgs = args;
|
|
if (!timer) {
|
|
timer = setTimeout(() => {
|
|
timer = null;
|
|
invoke(lastArgs);
|
|
}, threshold - passed);
|
|
}
|
|
}
|
|
};
|
|
|
|
const flush = () => lastArgs && invoke(lastArgs);
|
|
|
|
return [throttled, flush];
|
|
}
|
|
|
|
export default throttle;
|