feat(M08-B): 补运营待处理入口

This commit is contained in:
Codex
2026-07-05 14:43:04 +08:00
parent 9f6e267d43
commit 2fa1f079df
7 changed files with 119 additions and 11 deletions
+43
View File
@@ -69,6 +69,29 @@
</div>
</section>
<section class="action-board" aria-label="运营待处理">
<button class="action-tile" type="button" @click="jumpToTaskStatus('SUBMITTED')">
<ClipboardCheck :size="20" />
<span>待验收任务</span>
<strong>{{ statistics.summary.pendingReview }}</strong>
</button>
<button class="action-tile" type="button" @click="jumpToTaskStatus('REJECTED')">
<RotateCcw :size="20" />
<span>驳回补做</span>
<strong>{{ statistics.summary.rejected }}</strong>
</button>
<button class="action-tile" type="button" @click="jumpToSettlementStatus('DRAFT')">
<ListTodo :size="20" />
<span>待确认结算</span>
<strong>{{ draftSettlementTotal }}</strong>
</button>
<button class="action-tile" type="button" @click="jumpToSettlementStatus('CONFIRMED')">
<Send :size="20" />
<span>待发放金额</span>
<strong>{{ money(statistics.summary.confirmedSettlementCents) }}</strong>
</button>
</section>
<el-alert
v-if="lastError"
class="alert-line"
@@ -174,8 +197,12 @@
import { computed, onMounted, reactive, ref } from 'vue';
import { ElMessage } from 'element-plus';
import {
ClipboardCheck,
ListTodo,
RadioTower,
RotateCcw,
Save,
Send,
Sparkles,
Store,
WalletCards
@@ -255,6 +282,8 @@ const statistics = reactive<CleaningStatistics>({
members: [],
trend: []
});
const draftSettlementTotal = computed(() => statistics.settlements
.find((item) => item.status === 'DRAFT')?.total || 0);
function saveToken() {
localStorage.setItem('qipai.admin.token', tokenDraft.value.trim());
@@ -350,6 +379,13 @@ function changeTaskStatus(status: TaskStatus | '') {
void loadTasks();
}
function jumpToTaskStatus(status: TaskStatus) {
activeTab.value = 'tasks';
taskStatus.value = status;
tasks.page = 1;
void loadTasks();
}
function changeTaskFilters(input: { storeId: string; cleanerUserId: string }) {
Object.assign(taskFilters, input);
tasks.page = 1;
@@ -362,6 +398,13 @@ function changeSettlementStatus(status: SettlementStatus | '') {
void loadSettlements();
}
function jumpToSettlementStatus(status: SettlementStatus) {
activeTab.value = 'settlements';
settlementStatus.value = status;
settlements.page = 1;
void loadSettlements();
}
function changeSettlementFilters(input: { storeId: string; cleanerUserId: string }) {
Object.assign(settlementFilters, input);
settlements.page = 1;
+48
View File
@@ -168,6 +168,46 @@ textarea {
font-size: 26px;
}
.action-board {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 10px;
margin: 0 0 14px;
}
.action-tile {
display: grid;
grid-template-columns: 24px minmax(0, 1fr) auto;
gap: 10px;
align-items: center;
min-height: 48px;
padding: 10px 12px;
color: #1f3656;
text-align: left;
border: 1px solid #d8e0ea;
border-radius: 8px;
background: #ffffff;
cursor: pointer;
}
.action-tile:hover {
border-color: #8cb5ec;
background: #f6faff;
}
.action-tile span {
overflow: hidden;
color: #536781;
font-size: 13px;
text-overflow: ellipsis;
white-space: nowrap;
}
.action-tile strong {
color: #18212f;
font-size: 18px;
}
.alert-line {
margin-bottom: 10px;
}
@@ -532,6 +572,10 @@ textarea {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.action-board {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.trend-row {
grid-template-columns: 92px minmax(80px, 1fr);
}
@@ -551,6 +595,10 @@ textarea {
grid-template-columns: 1fr;
}
.action-board {
grid-template-columns: 1fr;
}
.panel-toolbar {
align-items: stretch;
flex-direction: column;