优化服务器端分页
This commit is contained in:
@@ -23,6 +23,11 @@ const selected = ref<any | null>(null)
|
||||
const reviewApproved = ref(true)
|
||||
const applyForm = reactive({ type: '', reason: '' })
|
||||
const reviewForm = reactive({ comment: '' })
|
||||
const page = ref(1)
|
||||
const total = ref(0)
|
||||
const actionableTotal = ref(0)
|
||||
const finishedTotal = ref(0)
|
||||
const pageSize = 20
|
||||
|
||||
const typeLabels: Record<string, string> = {
|
||||
Suspension: '休学',
|
||||
@@ -48,10 +53,6 @@ const steps = [
|
||||
{ label: '学院审核', state: 'CounselorApproved' },
|
||||
{ label: '校级审批', state: 'CollegeApproved' },
|
||||
]
|
||||
const currentQueue = computed(() => changes.value.filter(canReview))
|
||||
const finishedCount = computed(() =>
|
||||
changes.value.filter((x) => ['Approved', 'Rejected', 'Cancelled'].includes(x.state)).length)
|
||||
|
||||
function dateText(value?: string) {
|
||||
if (!value) return '—'
|
||||
return new Intl.DateTimeFormat('zh-CN', {
|
||||
@@ -90,14 +91,24 @@ function stateTagType(state: ChangeState) {
|
||||
return 'warning'
|
||||
}
|
||||
|
||||
async function load() {
|
||||
async function load(resetPage = false) {
|
||||
if (resetPage) page.value = 1
|
||||
loading.value = true
|
||||
try {
|
||||
const requests = [http.get('/student-status-changes')]
|
||||
const requests = [http.get('/student-status-changes', {
|
||||
params: { page: page.value, pageSize },
|
||||
})]
|
||||
if (isStudent.value) requests.push(http.get('/student-status-changes/options'))
|
||||
const [changeResponse, optionResponse] = await Promise.all(requests)
|
||||
changes.value = changeResponse.data
|
||||
changes.value = changeResponse.data.items
|
||||
total.value = changeResponse.data.total
|
||||
actionableTotal.value = changeResponse.data.actionableTotal
|
||||
finishedTotal.value = changeResponse.data.finishedTotal
|
||||
if (optionResponse) options.value = optionResponse.data
|
||||
if (changes.value.length === 0 && page.value > 1) {
|
||||
page.value--
|
||||
await load()
|
||||
}
|
||||
} catch (error) {
|
||||
ElMessage.error(apiErrorMessage(error))
|
||||
} finally {
|
||||
@@ -118,7 +129,7 @@ async function submitApply() {
|
||||
await http.post('/student-status-changes', applyForm)
|
||||
applyDialog.value = false
|
||||
ElMessage.success('申请已提交,等待辅导员审核。')
|
||||
await load()
|
||||
await load(true)
|
||||
} catch (error) {
|
||||
ElMessage.error(apiErrorMessage(error))
|
||||
}
|
||||
@@ -177,7 +188,7 @@ onMounted(load)
|
||||
:disabled="options?.hasPending || !options?.types?.length"
|
||||
@click="openApply"
|
||||
>发起申请</el-button>
|
||||
<el-button v-else :icon="RefreshRight" @click="load">刷新队列</el-button>
|
||||
<el-button v-else :icon="RefreshRight" @click="() => load()">刷新队列</el-button>
|
||||
</section>
|
||||
|
||||
<section v-if="isStudent && options" class="status-identity">
|
||||
@@ -194,9 +205,9 @@ onMounted(load)
|
||||
</section>
|
||||
|
||||
<section v-if="!isStudent" class="status-review-summary">
|
||||
<div><span>当前待我审核</span><b>{{ currentQueue.length }}</b><small>件</small></div>
|
||||
<div><span>辖区申请总数</span><b>{{ changes.length }}</b><small>件</small></div>
|
||||
<div><span>已结束</span><b>{{ finishedCount }}</b><small>件</small></div>
|
||||
<div><span>当前待我审核</span><b>{{ actionableTotal }}</b><small>件</small></div>
|
||||
<div><span>辖区申请总数</span><b>{{ total }}</b><small>件</small></div>
|
||||
<div><span>已结束</span><b>{{ finishedTotal }}</b><small>件</small></div>
|
||||
<p>系统仅开放当前审核层级的操作,所有越级请求都会由服务端拒绝。</p>
|
||||
</section>
|
||||
|
||||
@@ -243,6 +254,15 @@ onMounted(load)
|
||||
</footer>
|
||||
</article>
|
||||
<el-empty v-if="!changes.length && !loading" :description="isStudent ? '尚未提交学籍异动申请' : '当前辖区暂无学籍异动申请'" />
|
||||
<el-pagination
|
||||
v-if="total > pageSize"
|
||||
v-model:current-page="page"
|
||||
:page-size="pageSize"
|
||||
:total="total"
|
||||
layout="total, prev, pager, next"
|
||||
class="table-pagination"
|
||||
@current-change="() => load()"
|
||||
/>
|
||||
</section>
|
||||
|
||||
<el-dialog v-model="applyDialog" title="发起学籍异动申请" width="620px">
|
||||
|
||||
Reference in New Issue
Block a user