feat(admin-frontend): 补齐活跃筛选与支付快照能力

新增用户管理“活跃状态”高级筛选,并在后端支持
activity_status 复合规则,支持按活跃与非活跃筛选用户。

补齐订单支付成功快照落库与后台展示,保存支付渠道、
支付方法、实付金额和支付 IP,并在订单详情中优先展示。

同时增强节点页在线/离线筛选与批量删除、仪表盘快捷入口,
并修复已关闭工单再次回复后自动重开的统一语义。

附带同步测试、迁移、CI 工作流命名及知识库记录
This commit is contained in:
yinjianm
2026-04-25 00:59:08 +08:00
parent 2218457237
commit c64badfc23
55 changed files with 2023 additions and 71 deletions
@@ -40,6 +40,7 @@ type UploadError = Parameters<UploadRequestOptions['onError']>[0]
const statusMeta = computed(() => detail.value ? getTicketStatusMeta(detail.value) : null)
const levelMeta = computed(() => detail.value ? getTicketLevelMeta(detail.value.level) : null)
const willReopenClosedTicket = computed(() => detail.value?.status === 1)
async function loadSidebarTickets() {
if (!props.visible) {
@@ -312,6 +313,9 @@ watch(
</div>
<footer class="reply-box">
<p v-if="willReopenClosedTicket" class="reply-box__hint">
当前工单已关闭发送新回复后会自动重新开启
</p>
<ElInput
v-model="replyMessage"
type="textarea"
@@ -335,10 +339,9 @@ watch(
type="primary"
:icon="ChatLineRound"
:loading="replying"
:disabled="detail.status === 1"
@click="handleReply"
>
发送
{{ willReopenClosedTicket ? '发送并重开' : '发送' }}
</ElButton>
</div>
</footer>
@@ -561,6 +564,12 @@ watch(
background: rgba(255, 255, 255, 0.92);
}
.reply-box__hint {
color: var(--xboard-text-muted);
font-size: 13px;
line-height: 1.5;
}
.reply-box__actions {
display: flex;
justify-content: flex-end;