Files
dvcp_v2_wxcp_app/src/project/pingchang/AppCheckpointRegistration/AppCheckpointRegistration.vue
2022-09-27 16:57:38 +08:00

364 lines
9.9 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>
<div class="AppCheckpointRegistration">
<AiTopFixed>
<div class="header">
<div class="tab-item">
<h2 style="color:#5AAD6A;">{{totalInfo['今日登记']}}</h2>
<p>今日返乡</p>
</div>
<div class="tab-item">
<h2 style="color:#F5A319;">{{totalInfo['今日风险']}}</h2>
<p>今日风险</p>
</div>
<div class="tab-item">
<h2 style="color:#CD413A;border-right:0;">{{totalInfo['风险处理']}}</h2>
<p>风险处理</p>
</div>
</div>
<div class="tab-select">
<div class="item" :class="!tabIndex ? 'active' : ''" @click="tabClick(0)">返乡人员<span></span></div>
<div class="item" :class="tabIndex ? 'active' : ''" @click="tabClick(1)">异常人员<span></span></div>
</div>
<div class="top-search">
<u-search v-model="keyword" :clearabled="true" placeholder="请输入姓名/手机号/身份证号" :show-action="false" bg-color="#F5F5F5"
search-icon-color="#999" color="#333" height="58" @search="getListInit" @clear="getListInit">
</u-search>
</div>
<div class="top-select">
<div class="item">
<AiAreaPicker v-model="areaId" :areaId="user.areaId" @select="areaSelect" :name.sync="areaName" style="color: #666" selectRoot>
<span style="margin-left: 4px" v-if="areaName">{{ areaName }}</span>
<span v-else>地区选择</span>
<u-icon name="arrow-down" color="#666" size="28" style="margin-left: 4px" />
</AiAreaPicker>
</div>
<div class="item" @click="showGateSelect=true">
<span v-if="gatewayId">{{gatewayName || '卡口选择'}}</span>
<span v-else>卡口选择</span>
<u-icon name="arrow-down" color="#666" size="28" style="margin-left: 4px" />
</div>
</div>
</AiTopFixed>
<div class="user-list">
<div class="item" @click="toUser(item)" v-for="(item,index) in list" :key="index">
<div class="top">
<h2 class="name">{{item.name}}<span class="status" :class="'status'+item.riskLevel">{{ $dict.getLabel('EP_riskLevel', item.riskLevel) }}</span></h2>
<p class="color-999">{{item.idNumber}}</p>
<p><img src="./components/img/org-icon.png" alt=""><span class="start-name">{{item.startAreaName}}</span></p>
<p><img src="./components/img/blue-icon.png" alt=""><span class="start-name">{{item.arriveAreaName}}</span></p>
<p><img src="./components/img/time-icon.png" alt="">{{item.arriveTime}}</p>
<img :src="statusImgList[item.handleType]" alt="" class="status-img">
</div>
<div class="bottom" v-if="item.handleType>0">
<div class="text">处置人<span>{{item.handleUserName}}</span></div>
</div>
</div>
</div>
<AiEmpty v-if="!list.length"></AiEmpty>
<u-select v-model="showGateSelect" :list="gateList" label-name="name" value-name="id" @confirm="gatewayconfirm"></u-select>
</div>
</template>
<script>
import { mapState } from 'vuex'
export default {
name: 'AppCheckpointRegistration',
appName: '卡口登记',
data() {
return {
areaId: '',
areaName: '',
tabIndex: 0,
current: 1,
list: [],
totalInfo: {},
keyword: '',
gatewayId: '',
gatewayName: '',
showGateSelect: false,
gateList: [],
statusImgList: [
require('./components/img/status0.png'),
require('./components/img/status1.png'),
require('./components/img/status2.png'),
require('./components/img/status3.png'),
require('./components/img/status4.png'),
require('./components/img/status5.png'),
require('./components/img/status6.png'),
]
}
},
computed: { ...mapState(['user']) },
created() {
// this.areaId = this.user.areaId
// this.areaName = this.user.areaName
this.getGatewayList()
this.$dict.load(['EP_handleType', 'EP_riskLevel']).then(() => {
this.getList()
this.getTotal()
})
},
onShow() {
document.title = '卡口登记'
uni.$on('updateList', () => {
this.getListInit()
})
},
methods: {
getListInit() {
this.current = 1
this.list = []
this.getList()
},
getList() {
this.$http.post(`/app/appepidemicpreventionregisterinfo/list?infoType=0&current=${this.current}&size=10&listType=${this.tabIndex}&gatewayId=${this.gatewayId}&name=${this.keyword}&arriveAreaId=${this.areaId}`)
.then((res) => {
if (res.code == 0) {
res.data.records.map((item) => {
item.idNumber = item.idNumber.replace(/(.{6}).*(.{4})/,"$1********$2")
})
this.list = this.current > 1 ? [...this.list, ...res.data.records] : res.data.records
}
})
},
getTotal() {
this.$http.post(`/app/appepidemicpreventionregisterinfo/listStatistics?areaId=${this.areaId}`).then((res) => {
if (res.code == 0) {
this.totalInfo = res.data
}
})
},
getGatewayList() {
this.$http.post(`/app/appepidemicpreventiongateway/list?size=300&status=0`).then((res) => {
if (res.code == 0) {
this.gateList = res.data.records
this.gateList.unshift({name: '全部', id: ''})
}
})
},
areaSelect(e) {
this.areaId =e
this.$nextTick(() => {
this.getListInit()
})
this.getTotal()
},
tabClick(index) {
this.tabIndex = index
this.getListInit()
},
gatewayconfirm(e) {
this.gatewayName = e[0].label
this.gatewayId = e[0].value
this.getListInit()
},
toUser(row) {
uni.navigateTo({url: `./UserInfo?id=${row.id}`})
},
clearGateway() {
this.gatewayName = ''
this.gatewayId = ''
this.getListInit()
}
},
onReachBottom() {
this.current ++
this.getList()
}
}
</script>
<style lang="scss" scoped>
.AppCheckpointRegistration {
.header{
padding: 54px 32px 48px 32px;
display: flex;
background-color: #fff;
margin-bottom: 4px;
.tab-item{
flex: 1;
text-align: center;
h2{
font-size: 52px;
font-family: DINAlternate-Bold, DINAlternate;
font-weight: bold;
height: 80px;
margin-bottom: 8px;
letter-spacing: -4px;
border-right: 1px solid #ddd;
line-height: 44px;
}
p{
font-size: 28px;
font-family: PingFangSC-Regular, PingFang SC;
color: #999;
line-height: 40px;
margin-top: -22px;
}
}
.tab-item:nth-last-of-type(1) {
border-right: 0;
}
}
.search{
width: 100%;
height: 112px;
padding: 32px;
box-sizing: border-box;
background: #FFF;
display: flex;
margin-bottom: 8px;
.left{
width: calc(100% - 402px);
}
}
.tab-select{
width: 100%;
height: 96px;
background: #FFF;
display: flex;
margin-bottom: 4px;
.item{
flex: 1;
font-size: 32px;
line-height: 96px;
font-family: PingFangSC-Regular, PingFang SC;
color: #333;
text-align: center;
}
.active{
color: #135AB8;
position: relative;
span{
position: absolute;
bottom: 0;
left: 50%;
width: 192px;
margin-left: -96px;
border-bottom: 4px solid #135AB8;
}
}
}
.top-search {
padding: 20px 32px;
background-color: #fff;
}
.top-select {
display: flex;
padding: 28px 0;
background-color: #fff;
.item {
flex: 1;
padding: 0 8px;
text-align: center;
span {
display: inline-block;
font-family: PingFangSC-Medium;
font-weight: 500;
font-size: 28px;
color: #666;
line-height: 40px;
}
}
}
.user-list{
background-color: #F3F6F9;
padding: 32px 32px 0;
.item{
background-color: #fff;
margin-bottom: 24px;
border-radius: 16px;
.top {
padding: 32px 32px 24px;
position: relative;
.status-img{
width: 200px;
height: 200px;
position: absolute;
bottom: 0;
right: 0;
}
.name{
font-size: 36px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #333;
line-height: 50px;
margin-bottom: 8px;
.status{
float: right;
font-size: 28px;
font-family: PingFangSC-Regular, PingFang SC;
line-height: 40px;
}
.status0 {
color: #00D25D;
}
.status1 {
color: #FF6300;
}
.status2 {
color: #f46;
}
}
p{
width: calc(100% - 200px);
font-size: 28px;
font-family: PingFangSC-Regular, PingFang SC;
color: #333;
line-height: 40px;
margin-bottom: 8px;
img{
width: 32px;
height: 32px;
margin-right: 18px;
vertical-align: top;
}
}
.start-name{
display: inline-block;
width: calc(100% - 50px);
}
.color-999{
margin-bottom: 24px;
color: #999;
}
}
.bottom {
border-top: 2px solid #D8DDE6;
padding: 32px;
.text {
line-height: 40px;
font-family: PingFangSC-Regular;
font-size: 28px;
color: #666;
letter-spacing: 0.58px;
}
span {
display: inline-block;
color: #3975C6;
margin-right: 32px;
}
}
}
}
::v-deep .AiTopFixed {
.placeholder {
.content {
padding: 0 !important;
}
}
.fixed {
margin: 0 !important;
background-color: #f5f5f5!important;
.content {
padding: 0 !important;
}
}
}
}
</style>