Files
jiapuapp/pages/genealogy/g10-application-review.vue
T

129 lines
3.8 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!-- 页面编号G-10用途读取当前家谱待审核的加入申请 -->
<template>
<view class="review-page">
<GenealogyPageBackground />
<view class="page-header"
><PageHeader title="申请审核" custom-back @back="returnToGenealogies"
/></view>
<view class="page-content">
<view v-if="!valid" class="state-card"
><text>申请审核入口无效</text
><AppButton block label="返回我的家谱" @click="returnToGenealogies"
/></view>
<view v-else-if="state === 'loading'" class="state-card"
><AppLoading text="正在读取待审核申请"
/></view>
<view v-else-if="state === 'error'" class="state-card"
><text>暂时无法读取待审核申请</text
><AppButton
block
type="secondary"
label="重新加载"
@click="loadApplications"
/></view>
<view v-else-if="state === 'empty'" class="state-card"
><text>暂无待审核申请</text><text>待审核记录会直接从服务端读取</text
><AppButton block label="返回我的家谱" @click="returnToGenealogies"
/></view>
<view v-else class="state-card"
><text>已读取 {{ applications.length }} 条待审核申请</text
><text
>审核详情接口尚未开放当前不会用本地数据补造申请内容或审核结果</text
><AppButton block label="返回我的家谱" @click="returnToGenealogies"
/></view>
</view>
</view>
</template>
<script setup>
import { computed, ref } from "vue";
import { onLoad, onShow, onUnload } from "@dcloudio/uni-app";
import AppButton from "@/components/AppButton.vue";
import AppLoading from "@/components/AppLoading.vue";
import GenealogyPageBackground from "@/components/GenealogyPageBackground.vue";
import PageHeader from "@/components/PageHeader.vue";
import {
appApi,
createRequestController,
isRequestCancelled,
} from "@/utils/api.js";
import { returnTo } from "@/utils/navigation.js";
const genealogyId = ref("");
const applications = ref([]);
const state = ref("loading");
const controller = createRequestController();
let active = true;
const valid = computed(() => /^[1-9]\d*$/.test(genealogyId.value));
const loadApplications = async () => {
if (!valid.value) return;
controller.abort();
state.value = "loading";
try {
applications.value = await appApi.getPendingApplications(
genealogyId.value,
{ requestController: controller },
);
if (!active) return;
state.value = applications.value.length ? "ready" : "empty";
} catch (error) {
if (!active || isRequestCancelled(error)) return;
state.value = "error";
}
};
const returnToGenealogies = () => returnTo("G01");
onLoad((query) => {
genealogyId.value = String(query?.genealogyId || "");
if (valid.value) loadApplications();
});
onShow(() => {
if (valid.value && state.value !== "loading") loadApplications();
});
onUnload(() => {
active = false;
controller.abort();
});
</script>
<style scoped lang="scss">
@import "../../styles/adaptive-frame-profiles.scss";
.review-page {
display: flex;
min-height: 100vh;
flex-direction: column;
background: $paper;
}
.page-header,
.page-content {
z-index: 1;
}
.page-content {
padding: 18rpx 24rpx 72rpx;
}
.state-card {
box-sizing: border-box;
min-height: 340rpx;
padding: 78rpx 52rpx 50rpx;
text-align: center;
@include adaptive-genealogy-state-panel;
}
.state-card text {
display: block;
}
.state-card text:first-child {
color: $ink;
font-family: STKaiti, KaiTi, serif;
font-size: clamp(19px, 35rpx, 24px);
font-weight: 700;
}
.state-card text:nth-child(2) {
margin-top: 18rpx;
color: $ink-muted;
font-size: clamp(15px, 24rpx, 18px);
line-height: 1.65;
}
.state-card .app-button {
margin-top: 28rpx;
}
</style>