phase1-final
CI / gate (push) Has been cancelled

This commit is contained in:
QihuAI Design committed 2026-07-27 22:27:56 +08:00
1 parent 52f1770515
commit 96be3fdeb3
6 files changed
+429 -46

No files matched your search

@@ -60,6 +60,7 @@ const iconPaths: Record<string, JSX.Element> = {
const FrontLayout: React.FC = () => {
const { user, logout } = useAuth();
const { balance } = useBalance();
const navigate = useNavigate();
const [collapsed, setCollapsed] = useState(false);
@@ -97,6 +98,12 @@ const FrontLayout: React.FC = () => {
{/* Navigation */}
<nav className="sidebar-nav">
{!collapsed && balance !== null && (
<div className="nav-item balance-item">
<span className="nav-icon">&#36;</span>
<span className="nav-label">余额: &#36; {balance.toFixed(2)}</span>
</div>
)}
<NavLink to="/" className={({ isActive }) => `nav-item nav-home-link`} end>
<span className="nav-item-icon">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><polyline points="9 22 9 12 15 12 15 22"/></svg>
+38
View File
@@ -484,6 +484,44 @@ const AppDetailModal: React.FC<AppDetailModalProps> = ({ app, onClose, onAppChan
</div>
{/* Reviews */}
{/* SKILL.md Structured Info */}
{app.skillInfo && (
<div className="modal-skill-params">
<h4>技能参数</h4>
{app.skillInfo.inputs && app.skillInfo.inputs.length > 0 && (
<div className="skill-param-group">
<span className="skill-param-label">输入:</span>
{app.skillInfo.inputs.map((inp, i) => (
<span key={i} className="skill-param-tag" title={inp.description}>{inp.name} ({inp.type})</span>
))}
</div>
)}
{app.skillInfo.outputs && app.skillInfo.outputs.length > 0 && (
<div className="skill-param-group">
<span className="skill-param-label">输出:</span>
{app.skillInfo.outputs.map((out, i) => (
<span key={i} className="skill-param-tag" title={out.description}>{out.name} ({out.type})</span>
))}
</div>
)}
{app.skillInfo.pricing && (
<div className="skill-param-group">
<span className="skill-param-label">定价:</span>
<span className="skill-param-tag">{app.skillInfo.pricing.free_tier || '免费使用'}</span>
</div>
)}
{app.skillInfo.dependencies && app.skillInfo.dependencies.length > 0 && (
<div className="skill-param-group">
<span className="skill-param-label">依赖:</span>
{app.skillInfo.dependencies.map((d, i) => (
<span key={i} className="skill-param-tag">{d}</span>
))}
</div>
)}
</div>
)}
{reviews.length > 0 && (
<div className="modal-reviews">
<h4>用户评价 ({reviews.length})</h4>