diff --git a/assets/css/routes/user-center.css b/assets/css/routes/user-center.css index efb24aa9..1a687e10 100644 --- a/assets/css/routes/user-center.css +++ b/assets/css/routes/user-center.css @@ -5,5 +5,5 @@ @import url("user-center/settings.css"); @import url("revenue.css"); @import url("user-center/revenue.css"); -@import url("user-center/promotion.css"); +@import url("user-center/revenue-earnings.css"); @import url("user-center/responsive.css"); diff --git a/assets/css/routes/user-center/promotion.css b/assets/css/routes/user-center/revenue-earnings.css similarity index 50% rename from assets/css/routes/user-center/promotion.css rename to assets/css/routes/user-center/revenue-earnings.css index d35723a4..f66f51bc 100644 --- a/assets/css/routes/user-center/promotion.css +++ b/assets/css/routes/user-center/revenue-earnings.css @@ -1,76 +1,76 @@ /** - * User Center — 推广中心 (promotion / invite) standalone tab. + * User Center — revenue standalone tab. * * Hosts the [data-aksrt-invite] card moved out of the revenue tab. Priority * order: 成果概览 → 分享操作 → 奖励说明 → 邀请记录. Status/feedback are text * (data-invite-status / data-invite-copy-feedback), never colour-only. */ -/* Standalone panel: the uc-promotion-panel is the only card, so flatten the +/* Standalone panel: the uc-revenue-panel is the only card, so flatten the * generic dashboard-panel chrome (mirrors #panel-revenue / #panel-vip). */ -.uc-content #panel-promotion.dashboard-panel { padding: 0; border: 0; border-radius: 0; background: transparent; box-shadow: none; } -.uc-content .uc-promotion-page { padding: 4px 0; } +.uc-content #panel-revenue.dashboard-panel { padding: 0; border: 0; border-radius: 0; background: transparent; box-shadow: none; } +.uc-content .uc-revenue-page { padding: 4px 0; } -.uc-content .uc-promotion-panel { display: grid; gap: 18px; padding: 22px; border: 1px solid var(--color-line-soft, rgba(0,0,0,.06)); border-radius: 14px; background: var(--surface-1); } -.uc-content .uc-promotion-card { margin: 0; } -.uc-content .uc-promotion-panel__header { display: flex; align-items: center; gap: 12px; } -.uc-content .uc-promotion-panel__icon { display: grid; width: 44px; height: 44px; place-items: center; border-radius: 12px; color: #fff; background: linear-gradient(135deg, #db2777, #f472b6); } -.uc-content .uc-promotion-panel__eyebrow { margin: 0 0 2px; color: #b8377d; font-size: 12px; font-weight: 700; } -.uc-content .uc-promotion-panel__header h3 { margin: 0; font-size: 19px; } -.uc-content .uc-promotion-panel__intro, -.uc-content .uc-promotion-section__header p { margin: 0; color: var(--color-ink-4); font-size: 13px; line-height: 1.65; } -.uc-content .uc-promotion-panel__status { margin: 0; padding: 10px 12px; border-radius: 8px; color: var(--color-ink-3); background: var(--surface-2); font-size: 13px; } -.uc-content .uc-promotion-panel__status.is-error, -.uc-content .uc-promotion-copy-feedback.is-error { color: var(--color-error, #dc2626); } -.uc-content .uc-promotion-section { padding-top: 2px; } -.uc-content .uc-promotion-section h4 { margin: 0 0 4px; font-size: 15px; } +.uc-content .uc-revenue-panel { display: grid; gap: 18px; padding: 22px; border: 1px solid var(--color-line-soft, rgba(0,0,0,.06)); border-radius: 14px; background: var(--surface-1); } +.uc-content .uc-revenue-card { margin: 0; } +.uc-content .uc-revenue-panel__header { display: flex; align-items: center; gap: 12px; } +.uc-content .uc-revenue-panel__icon { display: grid; width: 44px; height: 44px; place-items: center; border-radius: 12px; color: #fff; background: linear-gradient(135deg, #db2777, #f472b6); } +.uc-content .uc-revenue-panel__eyebrow { margin: 0 0 2px; color: #b8377d; font-size: 12px; font-weight: 700; } +.uc-content .uc-revenue-panel__header h3 { margin: 0; font-size: 19px; } +.uc-content .uc-revenue-panel__intro, +.uc-content .uc-revenue-section__header p { margin: 0; color: var(--color-ink-4); font-size: 13px; line-height: 1.65; } +.uc-content .uc-revenue-panel__status { margin: 0; padding: 10px 12px; border-radius: 8px; color: var(--color-ink-3); background: var(--surface-2); font-size: 13px; } +.uc-content .uc-revenue-panel__status.is-error, +.uc-content .uc-revenue-copy-feedback.is-error { color: var(--color-error, #dc2626); } +.uc-content .uc-revenue-section { padding-top: 2px; } +.uc-content .uc-revenue-section h4 { margin: 0 0 4px; font-size: 15px; } /* 成果概览 — the hero metric row. */ -.uc-content .uc-promotion-stats { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); margin-top: 12px; border: 1px solid var(--color-line-soft, rgba(0,0,0,.06)); border-radius: 12px; overflow: hidden; } -.uc-content .uc-promotion-stat { display: grid; gap: 4px; padding: 16px; border-right: 1px solid var(--color-line-soft, rgba(0,0,0,.06)); } -.uc-content .uc-promotion-stat:last-child { border-right: 0; } -.uc-content .uc-promotion-stat span, -.uc-content .uc-promotion-stat small { color: var(--color-ink-4); font-size: 12px; } -.uc-content .uc-promotion-stat strong { color: #b8377d; font-size: 28px; font-variant-numeric: tabular-nums; line-height: 1.1; } +.uc-content .uc-revenue-stats { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); margin-top: 12px; border: 1px solid var(--color-line-soft, rgba(0,0,0,.06)); border-radius: 12px; overflow: hidden; } +.uc-content .uc-revenue-stat { display: grid; gap: 4px; padding: 16px; border-right: 1px solid var(--color-line-soft, rgba(0,0,0,.06)); } +.uc-content .uc-revenue-stat:last-child { border-right: 0; } +.uc-content .uc-revenue-stat span, +.uc-content .uc-revenue-stat small { color: var(--color-ink-4); font-size: 12px; } +.uc-content .uc-revenue-stat strong { color: #b8377d; font-size: 28px; font-variant-numeric: tabular-nums; line-height: 1.1; } /* 分享操作 — code + copyable link + primary button. */ -.uc-content .uc-promotion-share { display: grid; gap: 10px; margin-top: 12px; } -.uc-content .uc-promotion-code { display: flex; align-items: baseline; gap: 10px; color: var(--color-ink-4); font-size: 13px; } -.uc-content .uc-promotion-code strong { color: var(--color-ink); font-size: 19px; letter-spacing: .08em; } -.uc-content .uc-promotion-link-row { display: flex; gap: 10px; } -.uc-content .uc-promotion-link { flex: 1; min-width: 0; height: 42px; padding: 0 11px; border: 1px solid var(--color-line-soft, rgba(0,0,0,.1)); border-radius: 8px; background: var(--surface-2); } -.uc-content .uc-promotion-copy { min-width: 108px; } -.uc-content .uc-promotion-copy-feedback { min-height: 18px; margin: 0; color: var(--color-ink-4); font-size: 12px; } +.uc-content .uc-revenue-share { display: grid; gap: 10px; margin-top: 12px; } +.uc-content .uc-revenue-code { display: flex; align-items: baseline; gap: 10px; color: var(--color-ink-4); font-size: 13px; } +.uc-content .uc-revenue-code strong { color: var(--color-ink); font-size: 19px; letter-spacing: .08em; } +.uc-content .uc-revenue-link-row { display: flex; gap: 10px; } +.uc-content .uc-revenue-link { flex: 1; min-width: 0; height: 42px; padding: 0 11px; border: 1px solid var(--color-line-soft, rgba(0,0,0,.1)); border-radius: 8px; background: var(--surface-2); } +.uc-content .uc-revenue-copy { min-width: 108px; } +.uc-content .uc-revenue-copy-feedback { min-height: 18px; margin: 0; color: var(--color-ink-4); font-size: 12px; } /* 邀请记录 — list with per-row status badge + text. */ -.uc-content .uc-promotion-records__header { display: flex; justify-content: space-between; gap: 12px; } -.uc-content .uc-promotion-record-list { display: grid; margin-top: 12px; } -.uc-content .uc-promotion-record { display: flex; align-items: center; gap: 12px; padding: 12px 0; border-top: 1px solid var(--color-line-soft, rgba(0,0,0,.06)); } -.uc-content .uc-promotion-record__avatar { display: grid; width: 40px; height: 40px; flex: 0 0 40px; place-items: center; overflow: hidden; border-radius: 50%; background: var(--surface-2); } -.uc-content .uc-promotion-record__avatar img { width: 100%; height: 100%; object-fit: cover; } -.uc-content .uc-promotion-record__main { display: grid; flex: 1; min-width: 0; gap: 3px; } -.uc-content .uc-promotion-record__main span, -.uc-content .uc-promotion-record__status small { color: var(--color-ink-4); font-size: 12px; } -.uc-content .uc-promotion-record__status { display: grid; justify-items: end; gap: 4px; } -.uc-content .uc-promotion-badge { padding: 3px 8px; border-radius: 999px; font-size: 12px; font-weight: 700; } -.uc-content .uc-promotion-badge.is-registered { color: #2563eb; background: rgba(37,99,235,.1); } -.uc-content .uc-promotion-badge.is-verified { color: #7c3aed; background: rgba(124,58,237,.1); } -.uc-content .uc-promotion-badge.is-rewarded { color: #16a34a; background: rgba(22,163,74,.1); } -.uc-content .uc-promotion-record-empty { padding: 22px; border-top: 1px solid var(--color-line-soft, rgba(0,0,0,.06)); color: var(--color-ink-4); font-size: 13px; text-align: center; } +.uc-content .uc-revenue-records__header { display: flex; justify-content: space-between; gap: 12px; } +.uc-content .uc-revenue-record-list { display: grid; margin-top: 12px; } +.uc-content .uc-revenue-record { display: flex; align-items: center; gap: 12px; padding: 12px 0; border-top: 1px solid var(--color-line-soft, rgba(0,0,0,.06)); } +.uc-content .uc-revenue-record__avatar { display: grid; width: 40px; height: 40px; flex: 0 0 40px; place-items: center; overflow: hidden; border-radius: 50%; background: var(--surface-2); } +.uc-content .uc-revenue-record__avatar img { width: 100%; height: 100%; object-fit: cover; } +.uc-content .uc-revenue-record__main { display: grid; flex: 1; min-width: 0; gap: 3px; } +.uc-content .uc-revenue-record__main span, +.uc-content .uc-revenue-record__status small { color: var(--color-ink-4); font-size: 12px; } +.uc-content .uc-revenue-record__status { display: grid; justify-items: end; gap: 4px; } +.uc-content .uc-revenue-badge { padding: 3px 8px; border-radius: 999px; font-size: 12px; font-weight: 700; } +.uc-content .uc-revenue-badge.is-registered { color: #2563eb; background: rgba(37,99,235,.1); } +.uc-content .uc-revenue-badge.is-verified { color: #7c3aed; background: rgba(124,58,237,.1); } +.uc-content .uc-revenue-badge.is-rewarded { color: #16a34a; background: rgba(22,163,74,.1); } +.uc-content .uc-revenue-record-empty { padding: 22px; border-top: 1px solid var(--color-line-soft, rgba(0,0,0,.06)); color: var(--color-ink-4); font-size: 13px; text-align: center; } /* 键盘可聚焦:复制按钮与链接输入的可见焦点。 */ -.uc-content .uc-promotion-copy:focus-visible, -.uc-content .uc-promotion-link:focus-visible { outline: 2px solid var(--color-primary); outline-offset: 2px; } +.uc-content .uc-revenue-copy:focus-visible, +.uc-content .uc-revenue-link:focus-visible { outline: 2px solid var(--color-primary); outline-offset: 2px; } /* 移动端:单列、无横向溢出、复制按钮整行可点击。 */ @media (max-width: 640px) { - .uc-content .uc-promotion-panel { padding: 18px; } - .uc-content .uc-promotion-stats { grid-template-columns: 1fr; } - .uc-content .uc-promotion-stat { border-right: 0; border-bottom: 1px solid var(--color-line-soft, rgba(0,0,0,.06)); } - .uc-content .uc-promotion-stat:last-child { border-bottom: 0; } - .uc-content .uc-promotion-link-row { flex-direction: column; } - .uc-content .uc-promotion-copy { width: 100%; } - .uc-content .uc-promotion-record { align-items: flex-start; } + .uc-content .uc-revenue-panel { padding: 18px; } + .uc-content .uc-revenue-stats { grid-template-columns: 1fr; } + .uc-content .uc-revenue-stat { border-right: 0; border-bottom: 1px solid var(--color-line-soft, rgba(0,0,0,.06)); } + .uc-content .uc-revenue-stat:last-child { border-bottom: 0; } + .uc-content .uc-revenue-link-row { flex-direction: column; } + .uc-content .uc-revenue-copy { width: 100%; } + .uc-content .uc-revenue-record { align-items: flex-start; } } /* New affiliate contract cards. */ @@ -183,31 +183,31 @@ .uc-content .uc-reward-tabs a { position: relative; padding: 0 0 12px; color: var(--color-ink-4); font-size: 14px; text-decoration: none; } .uc-content .uc-reward-tabs a.is-active { color: var(--color-primary); font-weight: 700; } .uc-content .uc-reward-tabs a.is-active::after { position: absolute; right: 0; bottom: -1px; left: 0; height: 2px; border-radius: 99px; background: var(--color-primary); content: ""; } -.uc-content .uc-promotion-summary-list { display: grid; gap: 0; max-width: 920px; } +.uc-content .uc-revenue-summary-list { display: grid; gap: 0; max-width: 920px; } .uc-content .uc-reward-pane--detail { grid-template-columns: minmax(0, 1fr); width: 100%; } -.uc-content .uc-reward-pane--detail .uc-promotion-summary-list { width: 100%; max-width: none; } -.uc-content .uc-promotion-summary-row { display: grid; grid-template-columns: 112px minmax(0, 1fr) auto; align-items: center; gap: 12px; min-height: 54px; padding: 8px 0; border-bottom: 1px solid var(--color-line-soft, rgba(15, 23, 42, .07)); } -.uc-content .uc-promotion-summary-row > span { color: var(--color-ink-3); font-size: 14px; } -.uc-content .uc-promotion-summary-row > strong { color: var(--color-ink); font-size: 16px; } -.uc-content .uc-promotion-summary-row > em { color: var(--color-ink-4); font-style: normal; } -.uc-content .uc-promotion-count { display: flex; align-items: baseline; gap: 2px; } -.uc-content .uc-promotion-count strong { color: var(--color-ink); font-size: 16px; } -.uc-content .uc-promotion-count em { color: var(--color-ink-4); font-style: normal; } -.uc-content .uc-promotion-summary-row--link input { width: auto; max-width: 100%; min-width: 28ch; height: 38px; padding: 0 10px; border: 1px solid var(--color-line-soft, rgba(15, 23, 42, .12)); border-radius: 7px; color: var(--color-primary); background: var(--surface-2, #f8fafc); } -.uc-content .uc-promotion-summary-row--link button { min-width: 64px; height: 38px; padding: 0 12px; border-radius: 7px; } -.uc-content .uc-promotion-summary-row--link small { grid-column: 2 / -1; min-height: 16px; color: var(--color-success, #16a34a); font-size: 12px; } -.uc-content .uc-promotion-summary-row--link small.is-error { color: var(--color-error, #dc2626); } -.uc-content .uc-promotion-summary-row--total > div { display: flex; flex-wrap: wrap; gap: 12px; } -.uc-content .uc-promotion-summary-row--total strong { padding: 7px 11px; border-radius: 7px; color: var(--color-primary); background: var(--surface-2, #f8fafc); font-size: 14px; } -.uc-content .uc-promotion-summary-row--explain { align-items: start; padding-top: 16px; border-bottom: 0; } -.uc-content .uc-promotion-summary-row--explain .uc-reward-richtext { grid-column: 2 / -1; color: var(--color-ink-3); font-size: 14px; line-height: 1.75; } -.uc-content .uc-promotion-summary-row--explain .uc-reward-richtext p { margin: 0; } -.uc-content .uc-promotion-user-list { display: grid; } -.uc-content .uc-promotion-user-row { display: flex; align-items: center; gap: 12px; padding: 13px 0; border-bottom: 1px solid var(--color-line-soft, rgba(15, 23, 42, .07)); } -.uc-content .uc-promotion-user-row img { width: 38px; height: 38px; border-radius: 50%; object-fit: cover; background: var(--surface-2); } -.uc-content .uc-promotion-user-row > div { display: grid; flex: 1; gap: 3px; min-width: 0; } -.uc-content .uc-promotion-user-row small { color: var(--color-ink-4); font-size: 12px; } -.uc-content .uc-promotion-user-row > span { color: var(--color-success, #16a34a); font-size: 12px; } +.uc-content .uc-reward-pane--detail .uc-revenue-summary-list { width: 100%; max-width: none; } +.uc-content .uc-revenue-summary-row { display: grid; grid-template-columns: 112px minmax(0, 1fr) auto; align-items: center; gap: 12px; min-height: 54px; padding: 8px 0; border-bottom: 1px solid var(--color-line-soft, rgba(15, 23, 42, .07)); } +.uc-content .uc-revenue-summary-row > span { color: var(--color-ink-3); font-size: 14px; } +.uc-content .uc-revenue-summary-row > strong { color: var(--color-ink); font-size: 16px; } +.uc-content .uc-revenue-summary-row > em { color: var(--color-ink-4); font-style: normal; } +.uc-content .uc-revenue-count { display: flex; align-items: baseline; gap: 2px; } +.uc-content .uc-revenue-count strong { color: var(--color-ink); font-size: 16px; } +.uc-content .uc-revenue-count em { color: var(--color-ink-4); font-style: normal; } +.uc-content .uc-revenue-summary-row--link input { width: auto; max-width: 100%; min-width: 28ch; height: 38px; padding: 0 10px; border: 1px solid var(--color-line-soft, rgba(15, 23, 42, .12)); border-radius: 7px; color: var(--color-primary); background: var(--surface-2, #f8fafc); } +.uc-content .uc-revenue-summary-row--link button { min-width: 64px; height: 38px; padding: 0 12px; border-radius: 7px; } +.uc-content .uc-revenue-summary-row--link small { grid-column: 2 / -1; min-height: 16px; color: var(--color-success, #16a34a); font-size: 12px; } +.uc-content .uc-revenue-summary-row--link small.is-error { color: var(--color-error, #dc2626); } +.uc-content .uc-revenue-summary-row--total > div { display: flex; flex-wrap: wrap; gap: 12px; } +.uc-content .uc-revenue-summary-row--total strong { padding: 7px 11px; border-radius: 7px; color: var(--color-primary); background: var(--surface-2, #f8fafc); font-size: 14px; } +.uc-content .uc-revenue-summary-row--explain { align-items: start; padding-top: 16px; border-bottom: 0; } +.uc-content .uc-revenue-summary-row--explain .uc-reward-richtext { grid-column: 2 / -1; color: var(--color-ink-3); font-size: 14px; line-height: 1.75; } +.uc-content .uc-revenue-summary-row--explain .uc-reward-richtext p { margin: 0; } +.uc-content .uc-revenue-user-list { display: grid; } +.uc-content .uc-revenue-user-row { display: flex; align-items: center; gap: 12px; padding: 13px 0; border-bottom: 1px solid var(--color-line-soft, rgba(15, 23, 42, .07)); } +.uc-content .uc-revenue-user-row img { width: 38px; height: 38px; border-radius: 50%; object-fit: cover; background: var(--surface-2); } +.uc-content .uc-revenue-user-row > div { display: grid; flex: 1; gap: 3px; min-width: 0; } +.uc-content .uc-revenue-user-row small { color: var(--color-ink-4); font-size: 12px; } +.uc-content .uc-revenue-user-row > span { color: var(--color-success, #16a34a); font-size: 12px; } .uc-content .uc-commission-card__action:hover { background: rgba(255, 255, 255, .24); @@ -360,11 +360,11 @@ .uc-content .uc-reward-area { padding: 20px 16px 24px; } .uc-content .uc-reward-area__heading { display: grid; gap: 4px; } .uc-content .uc-reward-tabs { gap: 16px; overflow-x: auto; } - .uc-content .uc-promotion-summary-row { grid-template-columns: 92px minmax(0, 1fr) auto; gap: 8px; } - .uc-content .uc-promotion-summary-row--link { grid-template-columns: minmax(0, 1fr) auto; } - .uc-content .uc-promotion-summary-row--link input { width: 100% !important; min-width: 0; } - .uc-content .uc-promotion-summary-row--link > span { grid-column: 1 / -1; } - .uc-content .uc-promotion-summary-row--link small { grid-column: 1 / -1; } - .uc-content .uc-promotion-summary-row--explain { grid-template-columns: 1fr; } - .uc-content .uc-promotion-summary-row--explain .uc-reward-richtext { grid-column: 1; } + .uc-content .uc-revenue-summary-row { grid-template-columns: 92px minmax(0, 1fr) auto; gap: 8px; } + .uc-content .uc-revenue-summary-row--link { grid-template-columns: minmax(0, 1fr) auto; } + .uc-content .uc-revenue-summary-row--link input { width: 100% !important; min-width: 0; } + .uc-content .uc-revenue-summary-row--link > span { grid-column: 1 / -1; } + .uc-content .uc-revenue-summary-row--link small { grid-column: 1 / -1; } + .uc-content .uc-revenue-summary-row--explain { grid-template-columns: 1fr; } + .uc-content .uc-revenue-summary-row--explain .uc-reward-richtext { grid-column: 1; } } diff --git a/assets/css/routes/user-center/revenue.css b/assets/css/routes/user-center/revenue.css index 76a18f84..b7f10473 100644 --- a/assets/css/routes/user-center/revenue.css +++ b/assets/css/routes/user-center/revenue.css @@ -1,5 +1,5 @@ /** - * User Center - commission and promotion rewards. + * User Center - commission and revenue rewards. */ .uc-content #panel-revenue.dashboard-panel { diff --git a/assets/css/routes/user-center/shell.css b/assets/css/routes/user-center/shell.css index 58d24da3..c17db312 100644 --- a/assets/css/routes/user-center/shell.css +++ b/assets/css/routes/user-center/shell.css @@ -736,7 +736,7 @@ body.aksrt-user-center .uc-content, .uc-service-grid__item--cart .uc-service-grid__icon { color: #dd6941; background: rgba(238, 109, 61, 0.12); } .uc-service-grid__item--level .uc-service-grid__icon { color: #9b6b0a; background: rgba(234, 179, 8, 0.13); } -.uc-service-grid__item--promotion .uc-service-grid__icon { color: #b8377d; background: rgba(219, 39, 119, 0.12); } +.uc-service-grid__item--revenue .uc-service-grid__icon { color: #b8377d; background: rgba(219, 39, 119, 0.12); } .uc-service-grid__item--auth .uc-service-grid__icon { color: #287bc4; background: rgba(14, 165, 233, 0.12); } .uc-service-grid__item--orders .uc-service-grid__icon { color: #c05621; background: rgba(234, 88, 12, 0.12); } .uc-service-grid__item--notice .uc-service-grid__icon { color: #d04b65; background: rgba(244, 63, 94, 0.11); } diff --git a/assets/js/credits.js b/assets/js/credits.js index 9131b06a..ef6148c9 100644 --- a/assets/js/credits.js +++ b/assets/js/credits.js @@ -3,7 +3,7 @@ * * 功能: * - 签到 panel:拉取 /signin/today,按钮触发 POST /signin - * - 邀请 panel:拉取 /invite/me,复制邀请链接 + * - revenue panel:拉取 /revenue/me,复制推广链接 * * 仅在 page-profile 页面 + 启用积分时加载。 */ @@ -189,210 +189,16 @@ }); } - // ===== 邀请 ===== - function initInvite() { - var root = document.querySelector('[data-aksrt-invite]'); - if (!root) return; - var linkInput = root.querySelector('[data-invite-link]'); - var copyBtn = root.querySelector('[data-invite-copy]'); - var stats = root.querySelector('[data-invite-stats]'); - var codeEl = root.querySelector('[data-invite-code]'); - var listEl = root.querySelector('[data-invite-list]'); - var totalEl = root.querySelector('[data-invite-total]'); - var statusEl = root.querySelector('[data-invite-status]'); - var copyFeedback = root.querySelector('[data-invite-copy-feedback]'); - - function setStatus(text, isError) { - if (!statusEl) return; - statusEl.textContent = text; - statusEl.classList.toggle('is-error', !!isError); - } - - function setCopyFeedback(text, isError) { - if (!copyFeedback) return; - copyFeedback.textContent = text; - copyFeedback.classList.toggle('is-error', !!isError); - } - - function escapeHtml(value) { - return String(value == null ? '' : value) - .replace(/&/g, '&') - .replace(//g, '>') - .replace(/"/g, '"') - .replace(/'/g, '''); - } - - function formatDate(value) { - if (!value || value === '0000-00-00 00:00:00') return ''; - var date = new Date(String(value).replace(' ', 'T') + 'Z'); - if (isNaN(date.getTime())) return String(value).slice(0, 16); - function pad(n) { return n < 10 ? '0' + n : String(n); } - return date.getFullYear() + '-' + pad(date.getMonth() + 1) + '-' + pad(date.getDate()) + ' ' + pad(date.getHours()) + ':' + pad(date.getMinutes()); - } - - function statusMeta(status) { - if (status === 'rewarded') { - return { label: '已奖励', text: '奖励已发放', className: 'is-rewarded' }; - } - if (status === 'verified') { - return { label: '已验证', text: '等待奖励发放', className: 'is-verified' }; - } - return { label: '已注册', text: '等待完成验证', className: 'is-registered' }; - } - - function setCopyText(text) { - if (!copyBtn) return; - var label = copyBtn.querySelector('span'); - if (label) label.textContent = text; - else copyBtn.textContent = text; - } - - function renderInviteList(items, total) { - if (!listEl) return; - listEl.classList.remove('is-loading'); - if (totalEl) { - if (total > items.length) totalEl.textContent = '最近 ' + items.length + ' 条 / 共 ' + total + ' 条'; - else totalEl.textContent = total ? '共 ' + total + ' 条' : '暂无记录'; - } - if (!items.length) { - listEl.innerHTML = '
分享链接后,邀请记录会显示在这里。
'; - return; - } - listEl.innerHTML = items.map(function (item) { - var name = item.invitee_name || (item.invitee_id ? '用户 #' + item.invitee_id : '受邀用户'); - var avatar = item.invitee_avatar ? '邀请记录加载失败,请稍后重试。
'; - return; - } - renderList(result.json || {}, invitePage); - }).catch(function () { - listEl.classList.remove('is-loading'); - listEl.innerHTML = '邀请记录加载失败,请稍后重试。
'; - }); - } - - if (copyBtn && linkInput) { - copyBtn.addEventListener('click', function () { - if (!linkInput.value) return; - var done = function () { - if (feedbackEl) feedbackEl.textContent = '推广链接已复制'; - copyBtn.disabled = false; - }; - if (navigator.clipboard && navigator.clipboard.writeText) { - navigator.clipboard.writeText(linkInput.value).then(done).catch(function () { linkInput.select(); document.execCommand('copy'); done(); }); - } else { - linkInput.select(); - document.execCommand('copy'); - done(); - } - }); - } - function reloadRevenuePanel() { - var current = document.querySelector('[data-aksrt-revenue-page]'); - if (!current) return Promise.resolve(); - var panelUrl = rest + '/user-center/panel/promotion'; - var query = new URL(window.location.href).searchParams; - query.delete('tab'); - panelUrl += '?' + query.toString(); - return fetch(panelUrl, { - credentials: 'same-origin', - headers: { 'X-WP-Nonce': data.restNonce || data.nonce || '' } - }).then(function (response) { - return response.json().then(function (payload) { - if (!response.ok || !payload.success || !payload.data || !payload.data.html) throw new Error('revenue-refresh-failed'); - var wrapper = document.createElement('div'); - wrapper.innerHTML = payload.data.html; - var next = wrapper.firstElementChild; - if (!next) throw new Error('revenue-html-empty'); - current.replaceWith(next); - window.AKSRTRevenueCenterInit(next); - }); - }); - } - } - - function initRewardNavigation(root, rest, data) { - var rewardTabs = root.querySelectorAll('.uc-reward-tabs a, .uc-reward-pagination a'); - rewardTabs.forEach(function (link) { - link.addEventListener('click', function (event) { - event.preventDefault(); - var targetUrl = new URL(link.href, window.location.href); - var panelUrl = rest + '/user-center/panel/promotion?' + targetUrl.searchParams.toString(); - fetch(panelUrl, { - credentials: 'same-origin', - headers: { 'X-WP-Nonce': data.restNonce || data.nonce || '' } - }).then(function (response) { - return response.json().then(function (payload) { - if (!response.ok || !payload.success || !payload.data || !payload.data.html) throw new Error('revenue-load-failed'); - var current = document.querySelector('[data-aksrt-revenue-page]'); - if (!current) return; - var wrapper = document.createElement('div'); - wrapper.innerHTML = payload.data.html; - var next = wrapper.firstElementChild; - if (!next) throw new Error('revenue-html-empty'); - current.replaceWith(next); - window.history.pushState({}, '', targetUrl); - window.AKSRTRevenueCenterInit(next); - if (typeof window.AKSRTAffiliatePromotionInit === 'function') window.AKSRTAffiliatePromotionInit(); - if (typeof window.AKSRTWithdrawInit === 'function') window.AKSRTWithdrawInit(); - }); - }).catch(function () { - if (typeof showToast === 'function') showToast('加载失败,请重试'); - }); - }); - }); - } - - window.AKSRTRevenueCenterInit = function (root) { - init(root); - var data = window.aksrtData || {}; - var rest = data.restUrl || data.apiUrl || ''; - if (root && rest) initRewardNavigation(root, rest.replace(/\/$/, ''), data); - }; - window.AKSRTRevenueCenterInit(document.querySelector('[data-aksrt-revenue-page]')); -})(); diff --git a/assets/js/routes/user-center.js b/assets/js/routes/user-center.js index cabf5d67..dfb78197 100644 --- a/assets/js/routes/user-center.js +++ b/assets/js/routes/user-center.js @@ -82,10 +82,10 @@ } target.classList.add('is-loading'); var url = restUrl.replace(/\/$/, '') + '/user-center/panel/' + encodeURIComponent(name); - if (name === 'creator' || name === 'promotion' || name === 'posts' || name === 'follow') { + if (name === 'creator' || name === 'revenue' || name === 'posts' || name === 'follow') { var params = queryParams || new URLSearchParams(window.location.search); var allowedParams = name === 'creator' ? ['income_page'] : - (name === 'promotion' ? ['reward_tab', 'commission_page', 'user_page'] : + (name === 'revenue' ? ['reward_tab', 'commission_page', 'user_page'] : (name === 'posts' ? ['post_status', 'posts_page'] : ['follow_list', 'follow_page'])); allowedParams.forEach(function(key) { if (params.get(key)) url += (url.indexOf('?') === -1 ? '?' : '&') + key + '=' + encodeURIComponent(params.get(key)); @@ -120,8 +120,9 @@ return loadPanel(name, forceLoad, queryParams).then(function() { switchTo(name); if (updateHistory) updateUrl(name); - if (name === 'promotion' && typeof window.AKSRTRevenueCenterInit === 'function') window.AKSRTRevenueCenterInit(panels[name].panel); - if (name === 'promotion' && typeof window.AKSRTAffiliatePromotionInit === 'function') window.AKSRTAffiliatePromotionInit(); + if (name === 'revenue' && typeof window.AKSRTRevenueCenterInit === 'function') window.AKSRTRevenueCenterInit(panels[name].panel); + if (name === 'revenue' && typeof window.AKSRTAffiliateRevenueInit === 'function') window.AKSRTAffiliateRevenueInit(); + if (name === 'revenue' && typeof window.AKSRTWithdrawInit === 'function') window.AKSRTWithdrawInit(); }).catch(function() { if (typeof showToast === 'function') showToast(i18n.networkError || '加载失败,请重试'); }); @@ -139,7 +140,7 @@ if (!window.history.replaceState) return; var pathTab = name === 'credits' ? 'balance' : name; var u = new URL('/user/' + pathTab + '/', window.location.origin); - if (sourceUrl) { + if (sourceUrl && name !== 'revenue') { var source = new URL(sourceUrl, window.location.href); source.searchParams.forEach(function(value, key) { u.searchParams.set(key, value); }); } diff --git a/functions.php b/functions.php index f66d67bb..18230e9d 100644 --- a/functions.php +++ b/functions.php @@ -189,16 +189,13 @@ if (class_exists('\AKSRT\Core\DBMigrator')) { \AKSRT\Core\DBMigrator::init(); } -// 积分获取入口(注册赠送 / 评论奖励 / 签到 / 邀请) +// 积分获取入口(注册赠送 / 评论奖励 / 签到) if (class_exists('\AKSRT\Credits\Earn')) { \AKSRT\Credits\Earn::get_instance()->init(); } if (class_exists('\AKSRT\Credits\Signin')) { \AKSRT\Credits\Signin::get_instance()->init(); } -if (class_exists('\AKSRT\Credits\Invite')) { - \AKSRT\Credits\Invite::get_instance()->init(); -} if (class_exists('AKSRT\\Payment\\CreatorRevenue')) { \AKSRT\Payment\CreatorRevenue::get_instance()->init(); } diff --git a/inc/helpers/aksrt-user-center.php b/inc/helpers/aksrt-user-center.php index 643a2c21..128ad00e 100644 --- a/inc/helpers/aksrt-user-center.php +++ b/inc/helpers/aksrt-user-center.php @@ -133,11 +133,6 @@ if (!function_exists('aksrt_get_user_center_tab_url')) { */ function aksrt_get_user_center_tab_url(string $tab): string { $tab = sanitize_key($tab); - if ('invite' === $tab) { - $tab = 'promotion'; - } elseif ('revenue' === $tab) { - $tab = 'promotion'; - } return aksrt_get_user_center_url($tab); } } @@ -182,7 +177,7 @@ if (!function_exists('aksrt_capture_user_center_view')) { 'vip' => 'vip', 'orders' => 'orders', 'auth' => 'auth', - 'promotion' => 'promotion', + 'revenue' => 'revenue', 'settings' => 'settings', 'header' => 'header', 'sidebar' => 'sidebar', @@ -207,7 +202,7 @@ if (!function_exists('aksrt_capture_user_center_panel')) { * Capture a built-in or registered user-center panel body. */ function aksrt_capture_user_center_panel(string $tab_key, array $tab, array $context): string { - $built_in_tabs = ['profile', 'level', 'creator', 'posts', 'follow', 'comments', 'favorites', 'credits', 'vip', 'orders', 'auth', 'promotion', 'settings']; + $built_in_tabs = ['profile', 'level', 'creator', 'posts', 'follow', 'comments', 'favorites', 'credits', 'vip', 'orders', 'auth', 'revenue', 'settings']; if (in_array($tab_key, $built_in_tabs, true)) { return aksrt_capture_user_center_view($tab_key, $context); } @@ -316,10 +311,6 @@ if (!function_exists('aksrt_user_center_resolve_tabs')) { } if ('signin' === $active || 'assets' === $active) { $active = 'credits'; - } elseif ('invite' === $active) { - $active = 'promotion'; - } elseif ('revenue' === $active) { - $active = 'promotion'; } elseif ('vip' === $active) { // Prefer dedicated vip tab when registered; else credits (VIP shop). $active = in_array('vip', $keys, true) ? 'vip' : 'credits'; @@ -358,8 +349,7 @@ if (!function_exists('aksrt_user_center_runtime_config')) { 'activeTab' => $active_tab, 'tabAliases' => [ 'signin' => 'credits', - 'invite' => 'promotion', - 'revenue' => 'promotion', + 'revenue' => 'revenue', 'assets' => 'credits', // vip → vip when panel exists; SPA may still map missing keys via server resolve. 'vip' => 'vip', diff --git a/inc/helpers/user-center-renderers/profile-invite.php b/inc/helpers/user-center-renderers/profile-invite.php deleted file mode 100644 index 085e1453..00000000 --- a/inc/helpers/user-center-renderers/profile-invite.php +++ /dev/null @@ -1,27 +0,0 @@ - -