page.toggleProductEnabled(item, event.target.checked)}
/>
);
}
function ProductActions({ item, page }) {
const deleting = page.loadingAction === `delete:${item.productId}`;
return (
{page.abilities.canUpdateProduct ? (
page.openEdit(item)}
>
) : null}
{page.abilities.canDeleteProduct ? (
page.removeProduct(item)}
>
) : null}
);
}
function Stack({ primary, secondary }) {
return (
{primary || "-"}
{secondary || "-"}
);
}
function platformLabel(value) {
if (value === "web") {
return "Web";
}
if (value === "android") {
return "Android";
}
if (value === "ios") {
return "iOS";
}
return value || "-";
}
function audienceLabel(value) {
if (value === "coin_seller") {
return "币商";
}
if (value === "normal") {
return "普通用户";
}
return value || "普通用户";
}
function regionLabelMap(options) {
return options.reduce((labels, option) => {
labels[String(option.value)] = option.name || option.label;
return labels;
}, {});
}
function regionListLabel(labels, regionIds = []) {
if (!regionIds.length) {
return "-";
}
return regionIds.map((regionId) => labels[String(regionId)] || `区域 ${regionId}`).join("、");
}
function formatNumber(value) {
const numberValue = Number(value || 0);
return Number.isFinite(numberValue) ? numberValue.toLocaleString() : "-";
}
function formatMicroAmount(value) {
const numberValue = Number(value || 0);
if (!Number.isFinite(numberValue) || numberValue <= 0) {
return "0";
}
return String(numberValue / 1_000_000).replace(/\.?0+$/, "");
}