bonus-Certificate-app/pages/certificateManage/certificateInfo/certificateDetail.vue

441 lines
17 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>
<page-meta :page-font-size="fontValue+'px'" :root-font-size="fontValue+'px'"></page-meta>
<view class="certificate-list">
<Navbar :title="certificateTypeName" :backGround="false" :isBack="true" />
<view style="width: 100%;height: 86vh;margin-top: 4vh;">
<view class="certificate-box">
<!-- 2临期 3 超期 -->
<image v-if="certificate.dateState==2" style="width: 120rpx;height: 120rpx;position: absolute;top:30%;right: 5%;" src="/static/images/system/dataStatus1.png"></image>
<image v-if="certificate.dateState==3" style="width: 120rpx;height: 120rpx;position: absolute;top:30%;right: 5%;" src="/static/images/system/dataStatus2.png"></image>
<view class="certificate-view1" v-if="certificate.certificateType==1">
<view style="display: flex;align-items: center;margin-bottom: 10rpx;">
<view style="font-size: 28rpx;color: #2A2B2F;font-weight: 600;">{{certificate.certificateTypeName}}</view>
<view style="color:#64686E;margin-left: 10px;font-size: 26rpx;">{{certificate.certificateNo}}</view>
<view class="status-view" style="margin-left: 10px;">{{certificate.stateName}}</view>
</view>
<view style="width: 100%;margin: 10rpx 0;display: flex;align-items: center;">
<view style="width: 50%;">
<view class="text-view" style="color: #979B9F;">有效期</view>
<view class="text-view" style="color: #2A2B2F;">{{ certificate.issueDay }} 至 {{ certificate.issueLifespan }}</view>
</view>
<view style="width: 50%;">
<view class="text-view" style="color: #979B9F;">姓名 </view>
<view class="text-view" style="color: #2A2B2F;">{{certificate.name}}</view>
</view>
</view>
<view style="width: 100%;margin: 10rpx 0;display: flex;align-items: center;">
<view style="width: 50%;">
<view class="text-view" style="color: #979B9F;">证件柜</view>
<view class="text-view" style="color: #2A2B2F;">{{certificate.deviceName||'无'}}</view>
</view>
<view style="width: 50%;">
<view class="text-view" style="color: #979B9F;">槽位 </view>
<view class="text-view" style="color: #2A2B2F;">{{certificate.slotNo||'无'}}</view>
</view>
</view>
<view class="text-view" style="color: #979B9F;">位置</view>
<view class="text-view" style="color: #2A2B2F;">{{certificate.deviceAddr||'无'}}</view>
</view>
<view class="certificate-view2" v-if="certificate.certificateType==2">
<view style="display: flex;align-items: center;margin-bottom: 10rpx;">
<view style="font-size: 28rpx;color: #2A2B2F;font-weight: 600;">{{certificate.certificateTypeName}}</view>
<view style="color:#64686E;margin-left: 10px;font-size: 26rpx;">{{certificate.certificateNo}}</view>
<view class="status-view" style="margin-left: 10px;">{{certificate.stateName}}</view>
</view>
<view style="width: 100%;margin: 10rpx 0;display: flex;align-items: center;">
<view style="width: 50%;">
<view class="text-view" style="color: #979B9F;">有效期</view>
<view class="text-view" style="color: #2A2B2F;">{{ certificate.issueDay }} 至 {{ certificate.issueLifespan }}</view>
</view>
<view style="width: 50%;">
<view class="text-view" style="color: #979B9F;">姓名 </view>
<view class="text-view" style="color: #2A2B2F;">{{certificate.name}}</view>
</view>
</view>
<view style="width: 100%;margin: 10rpx 0;display: flex;align-items: center;">
<view style="width: 50%;">
<view class="text-view" style="color: #979B9F;">证件柜</view>
<view class="text-view" style="color: #2A2B2F;">{{certificate.deviceName||'无'}}</view>
</view>
<view style="width: 50%;">
<view class="text-view" style="color: #979B9F;">槽位 </view>
<view class="text-view" style="color: #2A2B2F;">{{certificate.slotNo||'无'}}</view>
</view>
</view>
<view class="text-view" style="color: #979B9F;">位置</view>
<view class="text-view" style="color: #2A2B2F;">{{certificate.deviceAddr||'无'}}</view>
</view>
<view class="certificate-view3" v-if="certificate.certificateType==3">
<view style="display: flex;align-items: center;margin-bottom: 10rpx;">
<view style="font-size: 28rpx;color: #2A2B2F;font-weight: 600;">{{certificate.certificateTypeName}}</view>
<view style="color:#64686E;margin-left: 10px;font-size: 26rpx;">{{certificate.certificateNo}}</view>
<view class="status-view" style="margin-left: 10px;">{{certificate.stateName}}</view>
</view>
<view style="width: 100%;margin: 10rpx 0;display: flex;align-items: center;">
<view style="width: 50%;">
<view class="text-view" style="color: #979B9F;">有效期</view>
<view class="text-view" style="color: #2A2B2F;">{{ certificate.issueDay }} 至 {{ certificate.issueLifespan }}</view>
</view>
<view style="width: 50%;">
<view class="text-view" style="color: #979B9F;">姓名 </view>
<view class="text-view" style="color: #2A2B2F;">{{certificate.name}}</view>
</view>
</view>
<view style="width: 100%;margin: 10rpx 0;display: flex;align-items: center;">
<view style="width: 50%;">
<view class="text-view" style="color: #979B9F;">证件柜</view>
<view class="text-view" style="color: #2A2B2F;">{{certificate.deviceName||'无'}}</view>
</view>
<view style="width: 50%;">
<view class="text-view" style="color: #979B9F;">槽位 </view>
<view class="text-view" style="color: #2A2B2F;">{{certificate.slotNo||'无'}}</view>
</view>
</view>
<view class="text-view" style="color: #979B9F;">位置</view>
<view class="text-view" style="color: #2A2B2F;">{{certificate.deviceAddr||'无'}}</view>
</view>
<view class="tag-view">
<view class="tag-view-item" @click="tagIndex=1" :class="tagIndex==1?'active tag-view-item':'tag-view-item'">存取证</view>
<view class="tag-view-item" @click="tagIndex=2" :class="tagIndex==2?'active tag-view-item':'tag-view-item'">申请</view>
<view class="tag-view-item" @click="tagIndex=3" :class="tagIndex==3?'active tag-view-item':'tag-view-item'">核验</view>
<view class="tag-view-item" @click="tagIndex=4" :class="tagIndex==4?'active tag-view-item':'tag-view-item'">出入境</view>
</view>
</view>
<!-- 存取证记录 -->
<scroll-view @scrolltolower="onScrollTolower1" scroll-y="true" v-if="tagIndex==1" style="width: 100%;height: 56vh;background: #F5F5F5;" >
<view class="scroll-item" v-for="(item, index) in tabList1" :key="index">
<view style="width: 100%;display: flex;margin-bottom: 10rpx;">
<view style="color: #2A2B2F;font-size: 32rpx;margin-right: 20rpx;font-weight: 600;">证件{{item.taskTypeName}}</view>
<view class="status-view">{{item.typeName}}</view>
</view>
<view class="info-text">存证人:{{item.name}}</view>
<view class="info-text">身份证号码:{{item.idNumber}}</view>
<view class="info-text">存证时间:{{item.createTime}}</view>
<view class="info-text">证件柜:{{item.deviceName}}</view>
<view class="info-text">槽位:{{item.slotNo||'无'}}</view>
<view class="info-text">位置:{{item.deviceAddr}}</view>
</view>
</scroll-view>
<!-- 存取证申请 -->
<scroll-view @scrolltolower="onScrollTolower2" scroll-y="true" v-if="tagIndex==2" style="width: 100%;height: 56vh;background: #F5F5F5;" >
<view class="scroll-item" v-for="(item, index) in tabList2" :key="index">
<view style="width: 100%;display: flex;margin-bottom: 10rpx;">
<view style="color: #2A2B2F;font-size: 32rpx;margin-right: 20rpx;font-weight: 600;">{{item.name}}提交的申请</view>
<view class="status-view">取证</view>
</view>
<view class="info-text">证件类型:{{item.certificateTypeName}}</view>
<view class="info-text">证件用途:{{item.applyReasonName}}</view>
<view class="info-text">证件编号:{{item.certificateNo}}</view>
<view class="info-text">申请时间:{{item.createTime}}</view>
<image v-if="item.applyState==-1" style="width: 120rpx;height: 120rpx;position: absolute;top:30%;right: 5%;" src="/static/images/system/examIcon.png"></image>
<image v-if="item.applyState==0||item.applyState==1" style="width: 120rpx;height: 120rpx;position: absolute;top:30%;right: 5%;" src="/static/images/system/examIcon1.png"></image>
<image v-if="item.applyState==2||item.applyState==4" style="width: 120rpx;height: 120rpx;position: absolute;top:30%;right: 5%;" src="/static/images/system/examIcon2.png"></image>
<image v-if="item.applyState==3" style="width: 120rpx;height: 120rpx;position: absolute;top:30%;right: 5%;" src="/static/images/system/examIcon3.png"></image>
</view>
</scroll-view>
<!-- 远程核验 -->
<scroll-view @scrolltolower="onScrollTolower3" scroll-y="true" v-if="tagIndex==3" style="width: 100%;height: 56vh;background: #F5F5F5;" >
<view class="scroll-item" v-for="(item, index) in tabList3" :key="index">
<view style="width: 100%;display: flex;margin-bottom: 10rpx;">
<view style="color: #2A2B2F;font-size: 32rpx;margin-right: 20rpx;font-weight: 600;">{{item.verifyTitle}}</view>
<view class="status-view" v-if="item.verifyState">
<text v-if="item.verifyState==0">待核验</text>
<text v-if="item.verifyState==1">已验证</text>
</view>
</view>
<view class="info-text">任务类型
<text v-if="item.verifyType==1">有无证件核验</text>
<text v-else-if="item.verifyType==2">一人多证核验</text>
<text v-else-if="item.verifyType==3">出入境时间核验</text>
<text v-else></text>
</view>
<view class="info-text">截止日期{{item.endTime}}</view>
<view class="info-text">发起时间{{item.startTime}}</view>
<image v-if="item.verifyState==0" style="width: 120rpx;height: 120rpx;position: absolute;top:30%;right: 5%;" src="/static/images/system/statusIcon2.png"></image>
<image v-if="item.verifyResult==1" style="width: 120rpx;height: 120rpx;position: absolute;top:30%;right: 5%;" src="/static/images/system/statusIcon3.png"></image>
<image v-if="item.verifyResult==0" style="width: 120rpx;height: 120rpx;position: absolute;top:30%;right: 5%;" src="/static/images/system/statusIcon4.png"></image>
</view>
</scroll-view>
<!-- 出入境 -->
<scroll-view @scrolltolower="onScrollTolower" scroll-y="true" v-if="tagIndex==4" style="width: 100%;height: 56vh;background: #F5F5F5;" >
<view class="scroll-item" style="display: flex;align-items: center;">
<view style="width: 30%;height: 6vh;display: flex;align-items: center;">
<image style="width: 60rpx;height: 60rpx;" src="/static/images/system/flyOut.png"></image>
<view style="color: #E60044;font-size: 32rpx;font-weight: 600;margin-left: 20rpx;">出境</view>
</view>
<view style="width: 70%;">
<view class="info-text">出境时间:{{tabData4.exitTime || "暂无"}}</view>
<!-- <view class="info-text">出境口岸:暂无</view> -->
</view>
</view>
<view class="scroll-item" style="display: flex;align-items: center;">
<view style="width: 30%;height: 6vh;display: flex;align-items: center;">
<image style="width: 60rpx;height: 60rpx;" src="/static/images/system/flyIn.png"></image>
<view style="color: #00CC44;font-size: 32rpx;font-weight: 600;margin-left: 20rpx;">入境</view>
</view>
<view style="width: 70%;">
<view class="info-text">入境时间:{{tabData4.entryTime || "暂无"}}</view>
<!-- <view class="info-text">入境口岸暂无</view> -->
</view>
</view>
</scroll-view>
</view>
</view>
</template>
<script>
import { certificateTaskListApi,certificateApplyListApi,certificateVerifyDetailListApi } from '@/api/certificateReturnManage/index.js';
import { getExitEntryApi } from '@/api/certificateManage/index.js';
export default {
data() {
return {
fontValue:uni.getStorageSync('fontSize') || 8,
certificateTypeName:"普通护照",
certificate:{},
tagIndex:1,
tabList: [
{name:"张三",idNumber:'23000020302030230230',time:'2025-10-09 16:23',status:1},
{name:"张四",idNumber:'23000020302030230230',time:'2025-10-09 16:23',status:2},
{name:"张五",idNumber:'23000020302030230230',time:'2025-10-09 16:23',status:3},
],
pageNum1: 1,
pageSize1: 10,
total1: 0,
tabList1: [],
pageNum2: 1,
pageSize2: 10,
total2: 0,
tabList2: [],
pageNum3: 1,
pageSize3: 10,
total3: 0,
tabList3: [],
tabData4: {},
}
},
onLoad(options) {
this.certificate = JSON.parse(options.pageParmas)
this.certificateTypeName = this.certificate.certificateTypeName;
this.tagIndex=1
console.log(this.certificate)
},
onShow(){
this.tagIndex=1
this.getList1()
this.getList2()
this.getList3()
this.getList4()
},
methods: {
// 翻页
onScrollTolower1(){
console.log(this.tabList1.length)
if(this.total1>this.tabList1.length){
this.pageNum1++
this.getList1()
}
},
//获取列表
async getList1() {
console.log('获取列表')
const params = {
pageNum: this.pageNum1,
pageSize: this.pageSize1,
certificateNo:this.certificate.certificateNo
}
try {
const res = await certificateTaskListApi(params)
console.log('?? ~ getList1 ~ res:', res)
this.total1 = res.total;
if(this.pageNum1==1){
this.tabList1 = res.rows
}else{
this.tabList1.push(...res.rows)
}
} catch (error) {
console.log(error)
}
},
// 翻页
onScrollTolower2(){
console.log(this.tabList2.length)
if(this.total2>this.tabList2.length){
this.pageNum2++
this.getList2()
}
},
//获取列表
async getList2() {
console.log('获取列表')
const params = {
pageNum: this.pageNum2,
pageSize: this.pageSize2,
certificateNo:this.certificate.certificateNo
}
try {
const res = await certificateApplyListApi(params)
console.log('?? ~ getList2 ~ res:', res)
this.total2 = res.total;
if(this.pageNum2==1){
this.tabList2 = res.rows
}else{
this.tabList2.push(...res.rows)
}
} catch (error) {
console.log(error)
}
},
// 翻页
onScrollTolower3(){
console.log(this.tabList3.length)
if(this.total3>this.tabList3.length){
this.pageNum3++
this.getList3()
}
},
//获取列表
async getList3() {
console.log('获取列表')
const params = {
pageNum: this.pageNum3,
pageSize: this.pageSize3,
certificateNo:this.certificate.certificateNo
}
try {
const res = await certificateVerifyDetailListApi(params)
console.log('?? ~ getList3 ~ res:', res)
this.total3 = res.total;
if(this.pageNum3==1){
this.tabList3 = res.rows
}else{
this.tabList3.push(...res.rows)
}
} catch (error) {
console.log(error)
}
},
//获取列表
async getList4() {
const params = {
certificateNo:this.certificate.certificateNo
}
try {
const res = await getExitEntryApi(params)
console.log('?? ~ getList3 ~ res:', res)
// this.total3 = res.total;
// if(this.pageNum3==1){
this.tabData4 = res.data[0]
// }else{
// this.tabList3.push(...res.rows)
// }
} catch (error) {
console.log(error)
}
},
handleEdit(certificate) {
uni.navigateTo({
url: `/pages/certificateManage/certificateInfo/editCertificate?certificate=${JSON.stringify(certificate)}`
})
},
addInfo() {
uni.navigateTo({
url: `/pages/certificateManage/certificateInfo/editCertificate`
})
},
}
}
</script>
<style lang="scss" scoped>
.certificate-list {
height: 100vh;
background-image: url('@/static/images/system/pageBg.png');
background-size: 100% 100%;
// padding: 30rpx;
}
.certificate-box{
width: 100%;
// height: 30vh;
margin: 0 auto;
// background: #fff;
padding: 20rpx;
position: relative;
}
.certificate-view1{
width: 100%;
height: 80%;
padding: 20rpx;
background-image: url('@/static/images/system/certificate1.png');
background-size: 100% 100%;
margin-bottom: 20rpx;
}
.certificate-view2{
width: 100%;
height: 80%;
padding: 20rpx;
background-image: url('@/static/images/system/certificate2.png');
background-size: 100% 100%;
margin-bottom: 20rpx;
}
.certificate-view3{
width: 100%;
height: 80%;
padding: 20rpx;
background-image: url('@/static/images/system/certificate3.png');
background-size: 100% 100%;
margin-bottom: 20rpx;
}
.status-view{
padding: 5rpx 10rpx;
background: #BEDAFF;
color: #1F72EA;
font-size: 24rpx;
border-radius: 8rpx;
}
.text-view{
margin-bottom: 10rpx;font-size: 28rpx;
}
.tag-view{
width: 100%;
height: 20%;
display: flex;
align-items: self-end;
}
.tag-view-item{
width: auto;
height: auto;
color: #64686E;
font-size: 28rpx;
font-weight: 600;
margin-right: 60rpx;
}
.active{
border-bottom: 4px solid #3888FF;
font-size: 32rpx;
color: #2A2B2F;
}
.scroll-item{
width: 100%;
height: auto;
margin:20rpx 0;
background: #fff;
padding: 20rpx 40rpx;
position: relative;
}
.info-text{
font-size: 28rpx;
color: #64686E;
margin-bottom: 10rpx;
}
.textMore{
width: 78%;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
</style>