feat: HSAP platform v2 — modular navigation, quality review, audit log, world model simulation
Major changes: - New frontend (platform/web/): Vite + React 18 + TypeScript + Tailwind - 4-module navigation: 数据送标 / 模型管理 / 车队管理 / 系统管理 - Data catalog with charts (DMS/ADAS/Lane 3-tab view) - Quality review workflow (标注质检): Good/Fine/Bad scoring with auto-advance - Audit enhancements: batch operations, rejection categories, Feishu notifications - Operation audit log (操作日志) - World model simulation studio (仿真工坊) - Dataset version management with snapshots and diff - ADAS 7-class dataset integration (138K images organized + compressed) - User management with Feishu integration and pagination - CRUD/search/filter on all pages, card layout redesign - PIL-optimized image overlay rendering - Auto-snapshot on build, in_review workflow stage - Removed embedded algorithm code (now in workspace)
This commit is contained in:
51
platform/web/node_modules/run-parallel/index.js
generated
vendored
Normal file
51
platform/web/node_modules/run-parallel/index.js
generated
vendored
Normal file
@@ -0,0 +1,51 @@
|
||||
/*! run-parallel. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */
|
||||
module.exports = runParallel
|
||||
|
||||
const queueMicrotask = require('queue-microtask')
|
||||
|
||||
function runParallel (tasks, cb) {
|
||||
let results, pending, keys
|
||||
let isSync = true
|
||||
|
||||
if (Array.isArray(tasks)) {
|
||||
results = []
|
||||
pending = tasks.length
|
||||
} else {
|
||||
keys = Object.keys(tasks)
|
||||
results = {}
|
||||
pending = keys.length
|
||||
}
|
||||
|
||||
function done (err) {
|
||||
function end () {
|
||||
if (cb) cb(err, results)
|
||||
cb = null
|
||||
}
|
||||
if (isSync) queueMicrotask(end)
|
||||
else end()
|
||||
}
|
||||
|
||||
function each (i, err, result) {
|
||||
results[i] = result
|
||||
if (--pending === 0 || err) {
|
||||
done(err)
|
||||
}
|
||||
}
|
||||
|
||||
if (!pending) {
|
||||
// empty
|
||||
done(null)
|
||||
} else if (keys) {
|
||||
// object
|
||||
keys.forEach(function (key) {
|
||||
tasks[key](function (err, result) { each(key, err, result) })
|
||||
})
|
||||
} else {
|
||||
// array
|
||||
tasks.forEach(function (task, i) {
|
||||
task(function (err, result) { each(i, err, result) })
|
||||
})
|
||||
}
|
||||
|
||||
isSync = false
|
||||
}
|
||||
Reference in New Issue
Block a user