diff --git a/openless-all/app/src/pages/Marketplace.tsx b/openless-all/app/src/pages/Marketplace.tsx index 82b68674..39954b02 100644 --- a/openless-all/app/src/pages/Marketplace.tsx +++ b/openless-all/app/src/pages/Marketplace.tsx @@ -76,6 +76,8 @@ export function Marketplace() { const [uploadOriginPackId, setUploadOriginPackId] = useState(null); const [uploadTargetName, setUploadTargetName] = useState(null); const [localPacks, setLocalPacks] = useState([]); + // 上传选包器选中态:点 pack 卡片选中(不立刻上传),底部「确定上传」才真正提交。 + const [selectedUploadPackId, setSelectedUploadPackId] = useState(null); const [myPacks, setMyPacks] = useState([]); // 「我的发布」改为弹框形态:showMyPacks 控制开关,myPacksQuery 是弹框内独立搜索词 // (不与外层 marketplace 搜索 query 互相干扰)。 @@ -290,6 +292,11 @@ export function Marketplace() { return a.name.localeCompare(b.name); }); setLocalPacks(editable); + // 更新流程下预选「建议更新」的本地包(同名),用户多数情况下一键确认。 + const recommended = target.length > 0 + ? editable.find(p => p.name.trim().toLowerCase() === target) + : undefined; + setSelectedUploadPackId(recommended?.id ?? null); setShowUpload(true); } catch (error) { setActionMsg({ kind: 'err', text: t('marketplace.errors.loadLocal', { err: errorMessage(error) }) }); @@ -377,6 +384,7 @@ export function Marketplace() { setShowUpload(false); setUploadOriginPackId(null); setUploadTargetName(null); + setSelectedUploadPackId(null); // 后续 polling 用服务端真实数据校准(审核状态可能 pending→approved/rejected)。 window.setTimeout(() => { void refresh(); void refreshMyPacks(); }, 1500); window.setTimeout(() => { void refresh(); void refreshMyPacks(); }, 5000); @@ -772,14 +780,22 @@ export function Marketplace() { )} - {/* 上传选包器 */} + {/* 上传选包器 —— zIndex 60 让它叠在「我的发布」(zIndex 50) 之上 */} {showUpload && ( - { setShowUpload(false); setUploadOriginPackId(null); setUploadTargetName(null); }}> + { + setShowUpload(false); + setUploadOriginPackId(null); + setUploadTargetName(null); + setSelectedUploadPackId(null); + }} + >

{uploadOriginPackId ? `更新「${uploadTargetName ?? '风格包'}」` : t('marketplace.uploadTitle')}

- {uploadOriginPackId ? '请选择本地对应的新版本风格包;同名本地包会排在最上面。' : t('marketplace.uploadHint', { login: prefs?.marketplaceDevLogin ?? '' })} + {uploadOriginPackId ? '选中要上传的本地新版本风格包,下方点「确定上传」。同名包默认预选。' : t('marketplace.uploadHint', { login: prefs?.marketplaceDevLogin ?? '' })}
{localPacks.length === 0 ? ( @@ -789,35 +805,68 @@ export function Marketplace() { ) : ( localPacks.map(p => { const recommended = !!uploadTargetName && p.name.trim().toLowerCase() === uploadTargetName.trim().toLowerCase(); + const selected = selectedUploadPackId === p.id; return ( ); }) )}
-
- { setShowUpload(false); setUploadOriginPackId(null); setUploadTargetName(null); }}> + {/* 底部:取消 / 确定上传(未选中时 disabled)*/} +
+ { + setShowUpload(false); + setUploadOriginPackId(null); + setUploadTargetName(null); + setSelectedUploadPackId(null); + }}> {t('common.cancel')} + { if (selectedUploadPackId) void onUpload(selectedUploadPackId); }} + > + 确定上传 +
)} @@ -1107,7 +1156,16 @@ export function Marketplace() { ); } -function Modal({ children, onClose }: { children: React.ReactNode; onClose: () => void }) { +function Modal({ + children, + onClose, + zIndex = 50, +}: { + children: React.ReactNode; + onClose: () => void; + /** 默认 50;多层叠加时(如上传 picker 在「我的发布」之上)传更大的值。*/ + zIndex?: number; +}) { return (