lists([ 'page' => 1, 'page_size' => 24, ]); if (!empty($resp['success']) && !empty($resp['data']['list'])) { $items = $resp['data']['list']; } else { $errMsg = $resp['message'] ?? '暂无插件'; } } else { // 中心站:直接读本地市场库(appmall_addon_list) $catalog = \addon\appmall\service\MarketService::instance()->catalog(); $items = $catalog['list'] ?? []; $categories = $catalog['categories'] ?? []; } } catch (\Throwable $e) { $errMsg = '市场列表加载失败:' . $e->getMessage(); } $plugins = []; foreach ($items as $it) { $price = (float) ($it['price'] ?? 0); $plugins[] = [ 'id' => $it['id'] ?? 0, 'name' => $it['name'] ?? '', 'title' => $it['title'] ?? ($it['name'] ?? ''), 'desc' => $it['intro'] ?? '', 'version' => $it['version'] ?? '', 'author' => $it['author'] ?? '', 'logo' => $it['logo'] ?? '', 'price' => $price, 'price_text' => $price > 0 ? '¥' . number_format($price, 2) : '免费', 'rating' => (float) ($it['rating'] ?? 0), 'downloads' => (int) ($it['download_count'] ?? 0), 'category' => $it['category'] ?? '', 'type' => $it['type'] ?? 'addon', ]; } return view('plugin/index', [ 'title' => '插件市场', 'controller' => 'Plugin', 'plugins' => $plugins, 'categories' => $categories, 'err_msg' => $errMsg, 'hooks' => [], ]); } }