2025-06-14 14:08:44 +08:00

278 lines
6.1 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.

<template>
<view class="detail-container">
<view class="content-wrapper">
<!-- 评分标准 -->
<view class="form-section">
<view class="section-title">评分标准</view>
<view class="standard-text">
1.一二年级考核语文数学两个学科平行班教学质量评价差距均在2分内的按一...
</view>
</view>
<!-- 考核评价 -->
<view class="detail-item">
<text class="detail-label">考核评价</text>
<text class="detail-value">{{ detailData.evaluationType }}</text>
</view>
<!-- 积分类型 -->
<view class="detail-item">
<text class="detail-label">积分类型</text>
<text class="detail-value">{{ detailData.scoreType }}</text>
</view>
<!-- 积分分值 -->
<view class="detail-item">
<text class="detail-label">积分分值</text>
<text class="detail-value">{{ detailData.scoreValue }}</text>
</view>
<!-- 考核处室 -->
<view class="detail-item">
<text class="detail-label">考核处室</text>
<text class="detail-value">{{ detailData.department }}</text>
</view>
<!-- 考核时间 -->
<view class="detail-item">
<text class="detail-label">考核时间</text>
<text class="detail-value">{{ detailData.evaluationDate }}</text>
</view>
<!-- 考核打分 -->
<view class="detail-item">
<text class="detail-label">考核打分</text>
<text class="detail-value">{{ detailData.score }}</text>
</view>
<!-- 证明材料 -->
<view class="detail-item file-section" v-if="detailData.files.length > 0">
<text class="detail-label">证明材料</text>
<view class="file-list">
<view
class="file-item"
v-for="(file, index) in detailData.files"
:key="index"
@click="previewFile(file)"
>
<uni-icons type="paperplane" size="16" color="#409eff" />
<text class="file-name">{{ file.name }}</text>
</view>
</view>
</view>
<!-- 转手机端按钮 -->
<view class="bottom-actions">
<button class="mobile-btn" @click="goBack">返回</button>
</view>
</view>
</view>
</template>
<script lang="ts" setup>
import { ref, onMounted } from "vue";
interface DetailData {
evaluationType: string;
scoreType: string;
scoreValue: number | string;
department: string;
evaluationDate: string;
score: number | string;
files: Array<{ name: string; url: string }>;
}
// 详情数据
const detailData = ref<DetailData>({
evaluationType: "考核评价",
scoreType: "加分",
scoreValue: 1,
department: "教科处",
evaluationDate: "2025-06-08",
score: 90,
files: [
{ name: "教学成果证明.pdf", url: "/files/certificate.pdf" },
{ name: "获奖证书.jpg", url: "/files/award.jpg" },
],
});
// 返回上一页
const goBack = () => {
uni.navigateBack();
};
// 预览文件
const previewFile = (file: { name: string; url: string }) => {
// 根据文件类型进行预览
const ext = file.name.split(".").pop()?.toLowerCase();
if (["jpg", "jpeg", "png", "gif"].includes(ext || "")) {
// 图片预览
uni.previewImage({
urls: [file.url],
current: file.url,
});
} else {
// 其他文件类型提示下载
uni.showModal({
title: "提示",
content: `是否下载文件: ${file.name}?`,
success: (res) => {
if (res.confirm) {
// TODO: 实现文件下载逻辑
uni.showToast({
title: "开始下载",
icon: "success",
});
}
},
});
}
};
// 转手机端
const transferToMobile = () => {
uni.showModal({
title: "提示",
content: "确定要转到手机端处理吗?",
success: (res) => {
if (res.confirm) {
// TODO: 实现转手机端逻辑
uni.showToast({
title: "已转至手机端",
icon: "success",
});
}
},
});
};
onMounted(() => {
// 页面加载时可以获取详情数据
console.log("页面加载完成");
});
</script>
<style scoped lang="scss">
.detail-container {
min-height: 100vh;
background-color: #f5f5f5;
}
.content-wrapper {
padding: 30rpx 30rpx 40rpx;
}
.form-section {
background-color: #ffffff;
border-radius: 16rpx;
padding: 30rpx;
margin-bottom: 20rpx;
.section-title {
font-size: 32rpx;
font-weight: bold;
color: #333;
margin-bottom: 20rpx;
}
.standard-text {
font-size: 28rpx;
color: #666;
line-height: 1.6;
}
}
.detail-item {
display: flex;
align-items: center;
background-color: #ffffff;
border-radius: 16rpx;
padding: 30rpx;
margin-bottom: 20rpx;
.detail-label {
font-size: 28rpx;
color: #333;
width: 160rpx;
flex-shrink: 0;
}
.detail-value {
flex: 1;
font-size: 28rpx;
color: #333;
text-align: right;
}
}
.file-section {
flex-direction: column;
align-items: flex-start;
.detail-label {
margin-bottom: 20rpx;
}
.file-list {
width: 100%;
.file-item {
display: flex;
align-items: center;
padding: 15rpx 20rpx;
background-color: #f5f5f5;
border-radius: 8rpx;
margin-bottom: 10rpx;
cursor: pointer;
&:hover {
background-color: #e6f7ff;
}
uni-icons {
margin-right: 10rpx;
}
.file-name {
font-size: 26rpx;
color: #333;
flex: 1;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
}
}
.bottom-actions {
position: fixed;
bottom: 0;
left: 0;
right: 0;
padding: 20rpx 30rpx;
padding-bottom: calc(20rpx + env(safe-area-inset-bottom));
background-color: #ffffff;
border-top: 1rpx solid #eee;
.mobile-btn {
width: 100%;
height: 88rpx;
background-color: #ff4757;
color: #ffffff;
font-size: 32rpx;
font-weight: bold;
border-radius: 44rpx;
border: none;
display: flex;
align-items: center;
justify-content: center;
&:active {
background-color: #ff3742;
}
}
}
</style>