From 3ea3f101000df9828bd4338618caad706afe42e1 Mon Sep 17 00:00:00 2001
From: AskaEth
Date: Mon, 27 Jul 2026 10:14:14 +0800
Subject: [PATCH] fix: replace _upload with publish modal (file picker + local
list)
---
static/js/pages/market.js | 66 ++++++++++++++++++++++++++++++---------
1 file changed, 51 insertions(+), 15 deletions(-)
diff --git a/static/js/pages/market.js b/static/js/pages/market.js
index c5fd8d4..334b837 100644
--- a/static/js/pages/market.js
+++ b/static/js/pages/market.js
@@ -220,22 +220,58 @@ const PageMarket = {
},
_upload() {
- const input = document.createElement('input'); input.type = 'file'; input.accept = this._tab === 'scenes' ? '.tss' : '.tsd';
- const endpoint = this._tab === 'scenes' ? '/api/market/scenes/upload' : '/api/market/upload';
- input.onchange = async (e) => {
- const file = e.target.files[0]; if (!file) return;
- const fd = new FormData(); fd.append('file', file);
- fd.append('name', file.name.replace('.tsd',''));
- fd.append('category', 'community');
- fd.append('author', 'TurboSu User');
- fd.append('token', this._marketToken);
- try {
- const res = await fetch('/api/market/upload', { method: 'POST', body: fd });
+ if (!this._marketToken) { Toast.show('请先登录', 'error'); return; }
+ const overlay = document.createElement('div'); overlay.className = 'modal-overlay';
+ overlay.innerHTML = ' 选择要发布的仪表盘或场景发布作品
没有可发布的内容
'; + list.querySelectorAll('.pub-dash-btn').forEach(btn => btn.addEventListener('click', async () => { + const r = await fetch('/api/market/publish-local', {method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({id:btn.dataset.id,type:'dashboard',token:this._marketToken})}); + const d = await r.json(); + Toast.show(d.error?'失败:'+d.error:'发布成功',d.error?'error':'success'); + if(!d.error){overlay.remove();this._loadItems();} + })); + list.querySelectorAll('.pub-scene-btn').forEach(btn => btn.addEventListener('click', async () => { + const r = await fetch('/api/market/publish-local', {method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({id:btn.dataset.id,type:'scene',token:this._marketToken})}); + const d = await r.json(); + Toast.show(d.error?'失败:'+d.error:'发布成功',d.error?'error':'success'); + if(!d.error){overlay.remove();this._loadItems();} + })); + } catch(e) { list.innerHTML = '加载失败
'; } }, _showLogin() {