278 lines
6.1 KiB
Vue
Raw Normal View History

2025-06-14 14:08:44 +08:00
<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>