(function (global) { 'use strict'; /** * 资源面板(壳侧):枚举在 Agent,仅订阅可见时刷新。 * @constructor */ function AssetsPanel() { this.el = null; this._bridge = null; this._rows = []; this._bundles = []; this._bundleFilter = ''; this._typeFilter = ''; this._query = ''; this._sort = 'mem'; this._selected = null; } AssetsPanel.prototype.setBridge = function (bridge) { this._bridge = bridge; }; AssetsPanel.prototype.mount = function () { var self = this; var root = document.createElement('div'); root.className = 'pw-panel-inner'; root.style.height = '100%'; root.style.display = 'flex'; root.style.flexDirection = 'column'; root.innerHTML = '
' + '资源' + '
' + '' + '' + '' + '' + '' + '
' + '
' + '
' + '
' + '
' + '
' + '' + '
名称类型分包内存引用
' + '
预览
' + '
'; this.el = root; root.querySelector('#pw-asset-bundle').addEventListener('change', function (ev) { self._bundleFilter = ev.target.value; self.renderList(); }); root.querySelector('#pw-asset-type').addEventListener('change', function (ev) { self._typeFilter = ev.target.value; self.renderList(); }); root.querySelector('#pw-asset-q').addEventListener('input', function (ev) { self._query = (ev.target.value || '').toLowerCase(); self.renderList(); }); root.querySelector('#pw-asset-sort').addEventListener('change', function (ev) { self._sort = ev.target.value; self.renderList(); }); root.querySelector('#pw-asset-refresh').addEventListener('click', function () { if (!self._bridge) return; self._bridge.call('assets.list').then(function (d) { self.applyData(d); }); }); return root; }; AssetsPanel.prototype.applyData = function (data) { this._rows = (data && data.rows) || []; this._bundles = (data && data.bundles) || []; var sel = this.el && this.el.querySelector('#pw-asset-bundle'); if (sel) { var cur = this._bundleFilter; var html = ''; for (var i = 0; i < this._bundles.length; i++) { var b = this._bundles[i]; if (!b) continue; html += ''; } sel.innerHTML = html; } this.renderList(); }; AssetsPanel.prototype.renderList = function () { if (!this.el) return; var rows = this._rows.slice(); var q = this._query; var bf = this._bundleFilter; var tf = this._typeFilter; rows = rows.filter(function (r) { if (bf && r.bundle !== bf) return false; if (tf && tf !== 'Other' && r.type !== tf) return false; if (tf === 'Other' && /Texture2D|SpriteFrame|Prefab|SkeletonData|AudioClip|JsonAsset/.test(r.type)) return false; if (q && String(r.name).toLowerCase().indexOf(q) < 0 && String(r.type).toLowerCase().indexOf(q) < 0) return false; return true; }); var sort = this._sort; rows.sort(function (a, b) { if (sort === 'name') return String(a.name).localeCompare(String(b.name)); if (sort === 'type') return String(a.type).localeCompare(String(b.type)); if (sort === 'ref') return (b.ref || 0) - (a.ref || 0); return (b.mem || 0) - (a.mem || 0); }); var memTotal = 0; for (var i = 0; i < this._rows.length; i++) memTotal += this._rows[i].mem || 0; var sum = this.el.querySelector('#pw-asset-summary'); if (sum) { sum.innerHTML = '共 ' + this._rows.length + ' 资源筛选 ' + rows.length + '估算纹理 ' + (Math.round(memTotal * 100) / 100) + ' MB'; } var bundlesEl = this.el.querySelector('#pw-asset-bundles'); if (bundlesEl) bundlesEl.textContent = this._bundles.length ? ('分包:' + this._bundles.join(', ')) : ''; var tbody = this.el.querySelector('#pw-asset-table tbody'); if (!tbody) return; var html = ''; for (var j = 0; j < Math.min(rows.length, 500); j++) { var r = rows[j]; html += '' + escapeHtml(r.name) + '' + escapeHtml(r.type) + '' + escapeHtml(r.bundle || '-') + '' + (r.mem ? r.mem.toFixed(2) + 'MB' : 'n/a') + '' + (r.ref || 0) + ''; } tbody.innerHTML = html || '无'; }; function escapeHtml(s) { return String(s).replace(/&/g, '&').replace(//g, '>'); } function escapeAttr(s) { return escapeHtml(s).replace(/"/g, '"'); } global.PWAssetsPanel = AssetsPanel; })(window);