diff --git a/assets/css/routes/orders.css b/assets/css/routes/orders.css index aed30de8..0c9784ec 100644 --- a/assets/css/routes/orders.css +++ b/assets/css/routes/orders.css @@ -82,7 +82,6 @@ .aksrt-orders-page__card-value span { color: var(--orders-muted); font-size: 11px; } .aksrt-orders-page__card-actions { display: flex; gap: 7px; align-items: center; justify-content: flex-end; padding: 9px 14px; border-top: 1px solid var(--orders-line); } .aksrt-orders-page__countdown { margin-right: auto; color: var(--color-warning, #c87819); font-size: 11px; font-variant-numeric: tabular-nums; } -.aksrt-orders-page__card-actions .is-entitlement { background: var(--color-success, #168560); } .aksrt-orders-page__pagination { display: flex; justify-content: center; gap: 6px; margin-top: 20px; } .aksrt-orders-page__page-chip { display: grid; width: 31px; height: 31px; place-items: center; border: 1px solid var(--orders-line); border-radius: 8px; color: var(--orders-muted); font-size: 12px; text-decoration: none; } diff --git a/assets/js/order-center.js b/assets/js/order-center.js index 53bf2eb2..f3e4a0ee 100644 --- a/assets/js/order-center.js +++ b/assets/js/order-center.js @@ -98,7 +98,6 @@ html += ''; if (allowedActions.can_cancel) html += ''; if (allowedActions.can_pay) html += ''; - if (allowedActions.can_open && order.permalink) html += '' + escapeHtml(order.entitlement_label || "打开已购内容") + ""; html += ""; session.content.innerHTML = html; } @@ -174,7 +173,6 @@ var html = ''; if (allowedActions.can_cancel) html += ''; if (allowedActions.can_pay) html += ''; - if (allowedActions.can_open && order.permalink) html += '' + escapeHtml(order.entitlement_label || "打开已购内容") + ""; return html; } diff --git a/inc/helpers/user-center-renderers/profile-orders.php b/inc/helpers/user-center-renderers/profile-orders.php index 15fbf0b1..b584705c 100644 --- a/inc/helpers/user-center-renderers/profile-orders.php +++ b/inc/helpers/user-center-renderers/profile-orders.php @@ -140,7 +140,6 @@ $status_options = [ - diff --git a/src/Payment/UserOrders.php b/src/Payment/UserOrders.php index f0f4b738..9debc361 100644 --- a/src/Payment/UserOrders.php +++ b/src/Payment/UserOrders.php @@ -21,9 +21,6 @@ class UserOrders { /** @var array */ private array $post_image_cache = []; - /** @var array */ - private array $post_permalink_cache = []; - /** @var array */ private array $type_labels_cache = []; @@ -187,12 +184,10 @@ class UserOrders { $type_label = $this->type_labels_cache[$product_type] ?? __('订单', 'aksrt'); $title = $this->resolve_title($meta, $product_type, $product_id, $type_label); $image = $this->resolve_image($meta, $product_id); - $permalink = $this->resolve_entitlement_url($product_type, $product_id, $meta); $group = $this->status_group($status); $payment_method = sanitize_key((string) ($order['payment_method'] ?? '')); $can_pay = $group === OrderCenterQuery::STATUS_PENDING && $payment_method !== 'manual_review'; $can_cancel = $group === OrderCenterQuery::STATUS_PENDING; - $can_open = $group === OrderCenterQuery::STATUS_PAID && $permalink !== ''; $order_number = (string) ($order['order_number'] ?? ''); $updated_at = $this->resolve_updated_at($order); @@ -213,7 +208,6 @@ class UserOrders { 'product_id' => $product_id, 'product_name' => $title, 'image' => $image, - 'permalink' => $permalink, 'created_at' => (string) ($order['created_at'] ?? ''), 'payment_method' => [ 'value' => $payment_method, @@ -222,10 +216,8 @@ class UserOrders { 'allowed_actions' => [ 'can_pay' => $can_pay, 'can_cancel' => $can_cancel, - 'can_open' => $can_open, ], 'time_left' => $this->get_order_countdown((string) ($order['expires_at'] ?? ''), $status), - 'entitlement_label' => $this->entitlement_label($product_type), 'updated_at' => $updated_at, 'status_version' => $this->resolve_status_version($order, $updated_at), 'invalidation_tags' => array_values(array_filter([ @@ -338,35 +330,6 @@ class UserOrders { return ''; } - /** @param array $meta */ - private function resolve_entitlement_url(string $type, int $product_id, array $meta): string { - $post_id = $product_id ?: (int) ($meta['post_id'] ?? 0); - $cache_key = $type . ':' . $post_id; - if (array_key_exists($cache_key, $this->post_permalink_cache)) { - return $this->post_permalink_cache[$cache_key]; - } - - if ($type === DomainModel::ORDER_PRODUCT_VIP) { - $url = function_exists('aksrt_get_user_center_tab_url') ? aksrt_get_user_center_tab_url('vip') : ''; - } elseif (in_array($type, [DomainModel::ORDER_PRODUCT_RECHARGE, DomainModel::ORDER_PRODUCT_POINTS], true)) { - $url = function_exists('aksrt_get_user_center_tab_url') ? aksrt_get_user_center_tab_url('credits') : ''; - } else { - $url = $post_id > 0 ? get_permalink($post_id) : ''; - } - - $this->post_permalink_cache[$cache_key] = is_string($url) ? $url : ''; - return $this->post_permalink_cache[$cache_key]; - } - - private function entitlement_label(string $type): string { - return match ($type) { - DomainModel::ORDER_PRODUCT_VIP => __('查看会员权益', 'aksrt'), - DomainModel::ORDER_PRODUCT_RECHARGE => __('查看余额', 'aksrt'), - DomainModel::ORDER_PRODUCT_POINTS => __('查看积分', 'aksrt'), - default => __('打开已购内容', 'aksrt'), - }; - } - private function payment_method_label(string $method): string { $labels = [ 'balance' => __('站内余额', 'aksrt'), diff --git a/tests/widget-system/asset-ledger-contract.test.cjs b/tests/widget-system/asset-ledger-contract.test.cjs index dc82d532..f420ff72 100644 --- a/tests/widget-system/asset-ledger-contract.test.cjs +++ b/tests/widget-system/asset-ledger-contract.test.cjs @@ -220,6 +220,7 @@ test('asset purchases share the order center and refresh every wallet surface', CLOSED: [], }) assert.match(userOrders, /return isset\(DomainModel::order_status_labels\(\)\[\$status\]\) \? \$status : ''/) + assert.doesNotMatch(userOrders, /can_open|entitlement_label|resolve_entitlement_url|post_permalink_cache/) assert.match(repository, /SUM\(CASE WHEN status = %s THEN 1 ELSE 0 END\) AS paid/) assert.doesNotMatch(repository, /\$completed_statuses|\$completed_placeholders/) assert.match(adminRepository, /\$valid_statuses = array_keys\(\\AKSRT\\Core\\DomainModel::order_status_labels\(\)\)/) diff --git a/tests/widget-system/post-visual-contract.test.cjs b/tests/widget-system/post-visual-contract.test.cjs index fc424b65..7b094947 100644 --- a/tests/widget-system/post-visual-contract.test.cjs +++ b/tests/widget-system/post-visual-contract.test.cjs @@ -371,6 +371,9 @@ test('profile routes load versioned leaf styles and keep dialogs hidden initiall assert.match(ordersCss, /\.aksrt-orders-page__status-filters, \.aksrt-orders-page__type-filters/); assert.doesNotMatch(ordersCss, /\.aksrt-orders-page__tabs|\.aksrt-orders-page__tab(?:\s|\.|:|\{)/); assert.match(orderCenterJs, /if \(panel\) panel\.hidden = expanded;/); + assert.doesNotMatch(profileOrders, /can_open|entitlement_label|is-entitlement/); + assert.doesNotMatch(orderCenterJs, /can_open|entitlement_label|is-entitlement/); + assert.doesNotMatch(ordersCss, /is-entitlement/); assert.match(userCenterJs, /name === 'follow' \|\| name === 'orders'/); assert.match(userCenterJs, /\['order_status', 'order_type', 'order_number', 'order_page'\]/); });