Full-project rename. `git grep -i aksrt` is now empty apart from the
DBMigrator 3.3.0 changelog note that documents the rename itself.
Code identifiers
- PHP namespace AKSRT\ -> Jio\ (composer PSR-4 + 378 declarations)
- global constants AKSRT_* -> JIO_* (VERSION/DIR/URI, PAY_TYPE_*, CAPTCHA_*)
- procedural functions, hooks, options, meta keys, table names,
cookies, query vars, ajax actions and nonces: aksrt_ -> jio_
- text domain aksrt -> jio; Theme Name -> Jio
- JS globals: aksrtData/aksrtAdminData/... -> jioData/jioAdminData/...,
window.AKSRTCaptcha & friends -> window.JioCaptcha, Aksrt* -> Jio*
- Vue components Aks*.vue -> Jio*.vue (15 files renamed + imports)
- CSS classes/data-attrs/custom properties: aksrt- -> jio-
- REST namespace aksrt/v1 -> jio/v1 (incl. payment gateway callbacks)
Storage layer
- DB tables {prefix}aksrt_* -> {prefix}jio_*; SCHEMA_VERSION 3.2.0 -> 3.3.0
so dbDelta creates the new names on install
- widget id_base aksrt_widget_* -> jio_widget_*
- uninstall.php drop list rebuilt from the actual migrator tables
(dropped 3 stale entries, added the 17 missing ones)
Removed
- hardcoded https://api.aksrt.com/version.json default update endpoint;
get_endpoint() now reads the 「更新端点」 setting and do_check() no-ops
when it is empty
Files renamed: inc/helpers/aksrt-*.php -> jio-*.php (54),
assets/admin/src/components/form/Aks*.vue -> Jio*.vue (15).
Build artifacts regenerated: assets/css/build, assets/js/runtime,
assets/admin/build.
Verified: audit-psr4-paths errors=0, audit-admin-contracts errors=0
(warnings=56, unchanged baseline), 813/813 widget-system tests,
44/44 phpunit, php -l clean across all PHP.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
189 lines
6.5 KiB
CSS
189 lines
6.5 KiB
CSS
/*
|
||
* 用户会员后台页(users.php?page=jio_user_vip)专属样式:列表细节 + 调整弹窗。
|
||
* 依赖 native-ui.css 的 --an-* 令牌;标记由 src/Admin/Native/UsersMenusVipView.php 输出。
|
||
*/
|
||
|
||
/* ---------- 筛选 ---------- */
|
||
.jio-vip .jio-vip-filters .small-text { width: 96px; }
|
||
.jio-vip .jio-vip-filters label > span[aria-hidden] { color: var(--an-muted); }
|
||
|
||
/* ---------- 列表 ---------- */
|
||
.jio-vip .jio-native-card__actions .button,
|
||
.jio-vip .column-actions .button {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
gap: 4px;
|
||
}
|
||
.jio-vip .jio-native-card__actions .button .dashicons,
|
||
.jio-vip .column-actions .button .dashicons {
|
||
width: 16px;
|
||
height: 16px;
|
||
margin: 0;
|
||
font-size: 16px;
|
||
line-height: 1;
|
||
vertical-align: middle;
|
||
}
|
||
.jio-vip .column-actions .button-small .dashicons { width: 14px; height: 14px; font-size: 14px; }
|
||
.jio-vip-selection {
|
||
padding: 2px 10px;
|
||
color: var(--an-primary);
|
||
font-size: 12px;
|
||
background: var(--an-primary-soft);
|
||
border-radius: 999px;
|
||
}
|
||
.jio-vip-table .column-user { width: 32%; }
|
||
.jio-vip-table .column-actions { width: 96px; text-align: right; }
|
||
.jio-vip-login,
|
||
.jio-vip-note,
|
||
.jio-vip-remaining { display: block; margin-top: 4px; font-size: 12px; }
|
||
.jio-vip-expiry { font-variant-numeric: tabular-nums; }
|
||
.jio-vip-sort {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 6px;
|
||
color: inherit;
|
||
text-decoration: none;
|
||
}
|
||
.jio-vip-sort:hover,
|
||
.jio-vip-sort.is-asc,
|
||
.jio-vip-sort.is-desc { color: var(--an-primary); }
|
||
/* 上下两个 CSS 三角,当前方向高亮;不依赖图标字形的朝向。 */
|
||
.jio-vip-sort__icon { display: inline-flex; flex-direction: column; gap: 2px; }
|
||
.jio-vip-sort__icon i {
|
||
display: block;
|
||
width: 0;
|
||
height: 0;
|
||
border-right: 4px solid transparent;
|
||
border-left: 4px solid transparent;
|
||
color: #c9cdd4;
|
||
}
|
||
.jio-vip-sort__icon i:first-child { border-bottom: 5px solid currentColor; }
|
||
.jio-vip-sort__icon i:last-child { border-top: 5px solid currentColor; }
|
||
.jio-vip-sort.is-asc .jio-vip-sort__icon i:first-child,
|
||
.jio-vip-sort.is-desc .jio-vip-sort__icon i:last-child { color: var(--an-primary); }
|
||
.jio-vip-history .column-time { width: 140px; }
|
||
.jio-vip-history .column-user { width: 22%; }
|
||
.jio-vip-history .column-reason { width: 26%; word-break: break-word; }
|
||
|
||
/* ---------- 弹窗 ---------- */
|
||
.jio-vip-dialog {
|
||
width: min(560px, calc(100vw - 32px));
|
||
max-height: calc(100vh - 64px);
|
||
padding: 0;
|
||
color: var(--an-text-2);
|
||
background: var(--an-card);
|
||
border: 0;
|
||
border-radius: var(--an-radius);
|
||
box-shadow: 0 12px 48px rgba(15, 23, 42, .18);
|
||
}
|
||
.jio-vip-dialog::backdrop { background: rgba(15, 23, 42, .45); }
|
||
.jio-vip-dialog__form { display: flex; flex-direction: column; max-height: inherit; margin: 0; }
|
||
.jio-vip-dialog__head {
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
gap: 12px;
|
||
padding: 16px 20px;
|
||
border-bottom: 1px solid var(--an-border-soft);
|
||
}
|
||
.jio-vip-dialog .jio-vip-dialog__title { margin: 0; color: var(--an-text); font-size: 16px; font-weight: 600; line-height: 1.4; }
|
||
.jio-vip-dialog__close {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
width: 32px;
|
||
height: 32px;
|
||
padding: 0;
|
||
color: var(--an-muted);
|
||
background: transparent;
|
||
border: 0;
|
||
border-radius: var(--an-radius-sm);
|
||
cursor: pointer;
|
||
}
|
||
.jio-vip-dialog__close:hover,
|
||
.jio-vip-dialog__close:focus-visible { color: var(--an-text); background: var(--an-bg-soft); }
|
||
.jio-vip-dialog__body { display: flex; flex-direction: column; gap: 16px; padding: 18px 20px; overflow-y: auto; }
|
||
.jio-vip-dialog__body > * { margin: 0; }
|
||
.jio-vip-dialog__target {
|
||
padding: 10px 12px;
|
||
color: var(--an-text);
|
||
background: var(--an-bg-soft);
|
||
border-radius: var(--an-radius-sm);
|
||
word-break: break-word;
|
||
}
|
||
.jio-vip-dialog__foot {
|
||
display: flex;
|
||
justify-content: flex-end;
|
||
gap: 8px;
|
||
padding: 14px 20px;
|
||
border-top: 1px solid var(--an-border-soft);
|
||
}
|
||
.jio-vip-dialog .button.is-danger { color: #fff; background: var(--an-danger); border-color: var(--an-danger); }
|
||
.jio-vip-dialog .button.is-danger:hover,
|
||
.jio-vip-dialog .button.is-danger:focus { color: #fff; background: #b02a45; border-color: #b02a45; }
|
||
|
||
/* 操作分段选择 */
|
||
.jio-vip-ops {
|
||
display: grid;
|
||
grid-template-columns: repeat(4, minmax(0, 1fr));
|
||
gap: 8px;
|
||
margin: 0;
|
||
padding: 0;
|
||
border: 0;
|
||
}
|
||
.jio-vip-ops legend { margin-bottom: 8px; padding: 0; }
|
||
.jio-vip-op { position: relative; display: block; cursor: pointer; }
|
||
/* 单选框只承载状态,视觉由卡片表现。WP forms.css 会给 radio 画圆点(:checked::before)并给 :disabled 设 opacity,
|
||
故用裁剪彻底隐藏,而不是只靠 opacity。 */
|
||
.jio-vip-dialog .jio-vip-op input[type="radio"] {
|
||
position: absolute;
|
||
width: 1px;
|
||
height: 1px;
|
||
min-width: 0;
|
||
margin: -1px;
|
||
padding: 0;
|
||
overflow: hidden;
|
||
clip-path: inset(50%);
|
||
border: 0;
|
||
opacity: 0;
|
||
appearance: none;
|
||
pointer-events: none;
|
||
}
|
||
.jio-vip-op > span {
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
gap: 4px;
|
||
padding: 10px 6px;
|
||
color: var(--an-text-2);
|
||
font-size: 13px;
|
||
text-align: center;
|
||
border: 1px solid var(--an-border);
|
||
border-radius: var(--an-radius-sm);
|
||
transition: border-color .15s, color .15s, background .15s;
|
||
}
|
||
.jio-vip-op .dashicons { width: 20px; height: 20px; font-size: 20px; }
|
||
.jio-vip-op:hover > span { border-color: var(--an-primary); }
|
||
.jio-vip-op input:checked + span { color: var(--an-primary); background: var(--an-primary-soft); border-color: var(--an-primary); font-weight: 600; }
|
||
.jio-vip-op input:focus-visible + span { outline: 2px solid color-mix(in srgb, var(--an-primary) 40%, transparent); outline-offset: 1px; }
|
||
.jio-vip-op.is-danger:hover > span { border-color: var(--an-danger); }
|
||
.jio-vip-op.is-danger input:checked + span { color: var(--an-danger); background: #fdf0f2; border-color: var(--an-danger); }
|
||
.jio-vip-op.is-disabled { cursor: not-allowed; }
|
||
.jio-vip-op.is-disabled > span,
|
||
.jio-vip-op.is-disabled:hover > span { color: #c9cdd4; background: var(--an-bg-soft); border-color: var(--an-border-soft); }
|
||
.jio-vip-op-hint { font-size: 12px; }
|
||
|
||
.jio-vip-pane[hidden] { display: none; }
|
||
.jio-vip-dialog .jio-native-callout { margin: 0; }
|
||
.jio-vip-switch { display: inline-flex; align-items: center; gap: 6px; color: var(--an-text); grid-column: 1 / -1; }
|
||
.jio-vip-duration { display: flex; gap: 8px; }
|
||
.jio-vip-duration input { flex: 1 1 auto; }
|
||
.jio-vip-duration select { flex: 0 0 96px; }
|
||
.jio-vip-bulk-note { font-size: 12px; }
|
||
|
||
@media (max-width: 600px) {
|
||
.jio-vip-ops { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
||
.jio-vip-table .column-user { width: auto; }
|
||
}
|