卡口登记

This commit is contained in:
liuye
2022-09-23 17:55:35 +08:00
parent 16940be175
commit 6ff0095553
15 changed files with 1429 additions and 448 deletions

View File

@@ -3,44 +3,58 @@
<AiTopFixed>
<div class="header">
<div class="tab-item">
<h2 style="color:#5AAD6A;">{{totalInfo.today}}</h2>
<h2 style="color:#5AAD6A;">{{totalInfo['今日登记']}}</h2>
<p>今日返乡</p>
</div>
<div class="tab-item">
<h2 style="color:#F5A319;">{{totalInfo.todayUnusual}}</h2>
<h2 style="color:#F5A319;">{{totalInfo['今日风险']}}</h2>
<p>今日风险</p>
</div>
<div class="tab-item">
<h2 style="color:#CD413A;border-right:0;">{{totalInfo.release}}</h2>
<h2 style="color:#CD413A;border-right:0;">{{totalInfo['风险处理']}}</h2>
<p>风险处理</p>
</div>
</div>
<div class="search">
<div class="left">
<AiAreaPicker v-model="areaId" :areaId="user.areaId" @select="areaSelect" :name.sync="areaName" style="color: #666" selectRoot>
<u-icon name="map-fill" color="#3192F4" size="20px" style="vertical-align: text-bottom"></u-icon>
<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>
<u-search v-model="name" :clearabled="true" placeholder="请输入姓名" :show-action="false" bg-color="#F5F5F5" search-icon-color="#999" color="#999" height="58" @search="getListInit" @clear="name='',getListInit"></u-search>
</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">
<span @click="showGateSelect=true">{{gatewayName || '卡口选择'}}</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">
<h2 class="name">{{item.name}}<span class="status" v-if="item.status == 0">有异常</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>
<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>
@@ -57,24 +71,70 @@ export default {
tabIndex: 0,
current: 1,
list: [],
name: '',
totalInfo: {}
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.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 = '卡口登记'
this.getList()
this.getTotal()
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}&startAreaId=${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
}
})
},
areaSelect(e) {
this.areaId =e
this.$nextTick(() => {
@@ -86,36 +146,14 @@ export default {
this.tabIndex = index
this.getListInit()
},
getListInit() {
this.current = 1
this.list = []
this.getList()
},
getList() {
var status = ''
if(this.tabIndex == 1) {
status = 0
}
this.$http.post(`/app/appepidemicbackhomerecord/list?current=${this.current}&size=10&status=${status}&name=${this.name}&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/appepidemicbackhomerecord/statistic?areaId=${this.areaId}`).then((res) => {
if (res.code == 0) {
this.totalInfo = res.data
}
})
gatewayconfirm(e) {
this.gatewayName = e[0].label
this.gatewayId = e[0].value
this.getListInit()
},
toUser(row) {
uni.navigateTo({url: `./UserInfo?id=${row.id}`})
}
},
},
onReachBottom() {
this.current ++
@@ -196,47 +234,106 @@ export default {
}
}
}
.user-list{
background-color: #f5f5f5;
.item{
padding: 32px 64px 24px;
background-color: #fff;
margin-bottom: 8px;
.name{
font-size: 36px;
font-family: PingFangSC-Medium, PingFang SC;
.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;
color: #333;
line-height: 50px;
margin-bottom: 8px;
.status{
float: right;
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: #FF4466;
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;
}
}
p{
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;
.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;
}
}
.start-name{
display: inline-block;
width: calc(100% - 50px);
}
.color-999{
margin-bottom: 24px;
color: #999;
}
}
}

View File

@@ -1,272 +0,0 @@
<template>
<div class="ErrorInfo">
<div class="header">
<div class="name">{{info.name}}<span @click="callPhone(info.phone)">{{info.phone}}</span><img :src="$cdn + 'common/phone.png'" alt="" @click="callPhone(info.phone)" class="phone-icon" /></div>
<p>身份证号</p>
<p class="mar-b8" style="color: #333">{{info.idNumber}}</p>
<p>异常情况</p>
<p style="color: #ff4466">
<span>{{info.unusual}}</span>
</p>
</div>
<div class="info" v-if="list.length">
<div class="title">异常情况记录</div>
<div class="error-list">
<div class="item" v-for="(item, index) in list" :key="index">
<p>{{item.content}}</p>
<div>{{item.createTime}}
<span>{{item.createUserName}}</span>
</div>
</div>
</div>
</div>
<div class="bg-line"></div>
<div class="footer">
<div class="add" @click="show = true">新增记录</div>
<div class="confirm" @click="cancel()">解除异常</div>
</div>
<u-popup v-model="show" mode="bottom">
<div class="textarea">
<u-input v-model="value" type="textarea" :height="120" :auto-height="true" placeholder="异常情况记录" :clearable="false" maxlength="1000" />
<p>字数{{value.length}}/1000</p>
</div>
<div class="btn">
<span @click="value=''">清空内容</span>
<span class="confirm" @click="confirm">保存</span>
</div>
</u-popup>
</div>
</template>
<script>
import { mapState } from 'vuex'
export default {
components: {},
props: {},
data() {
return {
show: false,
value: '',
id: '',
list: [],
info: {}
}
},
computed: {
...mapState(['user']),
},
onShow() {
document.title = '异常情况处理'
},
onLoad(option) {
this.id = option.id
this.$dict.load('epidemicRecentHealth').then(() => {
this.getDetail()
})
this.getList()
},
methods: {
getList() {
this.$http.post(`/app/appepidemicunusuallog/list?recordId=${this.id}`).then((res) => {
if (res.code == 0) {
this.list = res.data.records
}
})
},
getDetail() {
this.$http.post(`/app/appepidemicbackhomerecord/queryDetailById?id=${this.id}`).then((res) => {
if (res.code == 0) {
res.data.idNumber = res.data.idNumber.replace(/(.{6}).*(.{4})/,"$1********$2")
this.info = res.data
this.info.health = this.info.health.split(',')
}
})
},
cancel() {
this.$confirm(`是否解除该条异常信息?`).then(() => {
this.$http.post("/app/appepidemicbackhomerecord/release", {id: this.id}).then(res => {
if (res.code == 0) {
this.$u.toast("解除成功!")
uni.$emit('updateDetail')
uni.$emit('updateList')
setTimeout(() => {
uni.navigateBack()
}, 600);
}
})
})
},
confirm() {
if(!this.value) {
return this.$u.toast('请输入异常情况')
}
var params = {
"content": this.value,
"createUserId": this.user.id,
"createUserName": this.user.name,
"recordId": this.id
}
this.$http.post("/app/appepidemicunusuallog/addOrUpdate", params).then(res => {
if (res.code == 0) {
this.$u.toast("新增成功!")
this.show = false
this.value = ''
this.getList()
}
})
},
callPhone(phone) {
uni.makePhoneCall({phoneNumber: phone})
},
},
}
</script>
<style scoped lang="scss">
.ErrorInfo {
height: 100%;
.header {
padding: 32px 48px;
box-sizing: border-box;
background-color: #fff;
margin-bottom: 24px;
.name {
font-size: 36px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #333;
line-height: 50px;
margin-bottom: 16px;
span {
font-size: 32px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #4181ff;
line-height: 44px;
margin: 0 20px 0 32px;
}
img {
width: 32px;
height: 32px;
vertical-align: middle;
}
}
p {
font-size: 30px;
font-family: PingFangSC-Regular, PingFang SC;
color: #999;
line-height: 42px;
color: #999;
}
.mar-b8 {
margin-bottom: 8px;
}
}
.info {
padding: 0 32px 32px;
background-color: #fff;
.title {
font-size: 38px;
font-family: PingFangSC-Semibold, PingFang SC;
font-weight: 600;
color: #333;
line-height: 116px;
}
.error-list {
.item {
width: 100%;
background: #f4f7fe;
border-radius: 8px;
padding: 24px 24px 18px 24px;
box-sizing: border-box;
margin-bottom: 16px;
p {
font-size: 28px;
font-family: PingFangSC-Regular, PingFang SC;
color: #343d65;
line-height: 40px;
word-break: break-all;
margin-bottom: 12px;
}
div {
font-size: 24px;
font-family: PingFangSC-Regular, PingFang SC;
color: #666;
line-height: 34px;
span {
display: inline-block;
margin-left: 32px;
}
}
}
}
}
.footer {
position: fixed;
bottom: 0;
left: 0;
width: 100%;
height: 112px;
line-height: 112px;
background: #fff;
display: flex;
font-size: 36px;
font-family: PingFangSC-Regular, PingFang SC;
.add {
flex: 1;
color: #333;
}
.confirm {
flex: 2;
color: #fff;
background: #1365dd;
}
div {
text-align: center;
}
}
.bg-line {
width: 100%;
height: 130px;
}
.textarea {
margin: 32px 32px 24px;
width: calc(100% - 64px);
padding: 16px;
box-sizing: border-box;
background: #f7f7f7;
border-radius: 8px;
p {
font-size: 26px;
font-family: PingFangSC-Regular, PingFang SC;
color: #999;
line-height: 36px;
text-align: right;
}
}
.btn {
padding: 0 32px 24px;
height: 64px;
display: flex;
justify-content: space-between;
span {
display: inline-block;
line-height: 64px;
font-size: 26px;
font-family: PingFangSC-Regular, PingFang SC;
color: #666;
}
.confirm {
width: 144px;
text-align: center;
background: #1365dd;
border-radius: 32px;
font-size: 28px;
font-family: PingFangSC-Regular, PingFang SC;
color: #fff;
}
}
}
</style>

View File

@@ -0,0 +1,368 @@
<template>
<div class="ManagementContent">
<div class="info mar-b16">
<div class="item">
<div class="label">
<span class="tips">*</span>处置意见
</div>
</div>
<div class="type-select" v-if="haveHomeQuarantineBtn">
<div class="type-item" :class="form.handleType == index ? 'active' : ''" v-for="(item, index) in handlerTypeList" :key="index" @click="handleTypeClick(index)" v-if="index > 0">{{item.dictName}}</div>
</div>
<div class="type-select" v-else>
<div class="type-item" :class="form.handleType == index ? 'active' : ''" v-for="(item, index) in handlerTypeList" :key="index" @click="handleTypeClick(index)" v-if="index != 0 && index != 3 && index != 4">{{item.dictName}}</div>
</div>
</div>
<div class="info mar-b16" v-if="form.handleType == 2">
<div class="item solid">
<div class="label">
<span class="tips">*</span>隔离地点
</div>
<div class="value" @click="dictSelectClick('EP_quarantineAddress', 'quarantineAddress')">
<span :class="form.quarantineAddress === '' ? 'color-999' : ''">{{ $dict.getLabel('EP_quarantineAddress', form.quarantineAddress) || '请选择'}}</span>
<u-icon name="arrow-right" color="#999" size="16" style="margin-left: 4px" />
</div>
</div>
<div class="item solid">
<div class="label">
<span class="tips">*</span>隔离时间
</div>
<div class="value" @click="showDateSelect=true">
<span class="color-999" v-if="!form.quarantineBeginTime">请选择</span>
<span v-else>{{form.quarantineBeginTime}}{{form.quarantineEndTime}}</span>
<u-icon name="arrow-right" color="#999" size="16" style="margin-left: 4px" />
</div>
</div>
<div class="item solid">
<div class="label">
<span class="tips">*</span>隔离策略
</div>
<div class="value" @click="dictSelectClick('EP_quarantineStrategy', 'quarantineStrategy')">
<span :class="form.quarantineStrategy === '' ? 'color-999' : ''">{{ $dict.getLabel('EP_quarantineStrategy', form.quarantineStrategy) || '请选择'}}</span>
<u-icon name="arrow-right" color="#999" size="16" style="margin-left: 4px" />
</div>
</div>
</div>
<div class="info mar-b16" v-if="form.handleType == 3">
<div class="item solid">
<div class="label">
<span class="tips">*</span>居家状态
</div>
<div class="value" @click="dictSelectClick('EP_homeStatus', 'homeStatus')">
<span :class="form.homeStatus === '' ? 'color-999' : ''">{{ $dict.getLabel('EP_homeStatus', form.homeStatus) || '请选择'}}</span>
<u-icon name="arrow-right" color="#999" size="16" style="margin-left: 4px" />
</div>
</div>
<div class="item solid">
<div class="label">
<span class="tips">*</span>隔离时间
</div>
<div class="value" @click="showDateSelect=true">
<span class="color-999" v-if="!form.quarantineBeginTime">请选择</span>
<span v-else>{{form.quarantineBeginTime}}{{form.quarantineEndTime}}</span>
<u-icon name="arrow-right" color="#999" size="16" style="margin-left: 4px" />
</div>
</div>
<div class="item solid">
<div class="label">
<span class="tips">*</span>隔离策略
</div>
<div class="value" @click="dictSelectClick('EP_quarantineStrategy', 'quarantineStrategy')">
<span :class="form.quarantineStrategy === '' ? 'color-999' : ''">{{ $dict.getLabel('EP_quarantineStrategy', form.quarantineStrategy) || '请选择'}}</span>
<u-icon name="arrow-right" color="#999" size="16" style="margin-left: 4px" />
</div>
</div>
<div class="item solid">
<div class="label">
<span class="tips">*</span>管控方式
</div>
<div class="value" @click="dictSelectClick('EP_controlMethod', 'controlMethod')">
<span :class="form.controlMethod === '' ? 'color-999' : ''">{{ $dict.getLabel('EP_controlMethod', form.controlMethod) || '请选择'}}</span>
<u-icon name="arrow-right" color="#999" size="16" style="margin-left: 4px" />
</div>
</div>
<div class="item">
<div class="label">
<span class="tips"></span>备注
</div>
</div>
<textarea placeholder="请输入备注" v-model="form.remarks" maxlength="500"></textarea>
</div>
<div class="info mar-b16" v-if="form.handleType == 6">
<div class="item solid">
<div class="label">
<span class="tips">*</span>移交对象
</div>
<div class="value" @click="dictSelectClick('EP_handoverObject', 'handoverObject')">
<span :class="form.handoverObject === '' ? 'color-999' : ''">{{ $dict.getLabel('EP_handoverObject', form.handoverObject) || '请选择'}}</span>
<u-icon name="arrow-right" color="#999" size="16" style="margin-left: 4px" />
</div>
</div>
<div class="item solid">
<div class="label">
<span class="tips">*</span>移交方式
</div>
<div class="value" @click="dictSelectClick('EP_handoverMethod', 'handoverMethod')">
<span :class="form.handoverMethod === '' ? 'color-999' : ''">{{ $dict.getLabel('EP_handoverMethod', form.handoverMethod) || '请选择'}}</span>
<u-icon name="arrow-right" color="#999" size="16" style="margin-left: 4px" />
</div>
</div>
<div class="item solid">
<div class="label">
<span class="tips">*</span>交接人姓名
</div>
<div class="value">
<u-input placeholder="请输入" input-align="right" height="32" maxlength="6" v-model="form.handoverPersonName" />
</div>
</div>
<div class="item solid">
<div class="label">
<span class="tips"></span>手机号码
</div>
<div class="value">
<u-input placeholder="请输入" type="number" input-align="right" height="32" maxlength="11" v-model="form.handoverPersonPhone" />
</div>
</div>
<div class="item">
<div class="label">
<span class="tips">*</span>交接图片
</div>
</div>
<div style="padding-bottom: 24px;">
<AiUploader :def.sync="form.fileList" multiple placeholder="上传图片" :limit="9" action="/admin/file/add2"></AiUploader>
</div>
</div>
<div class="btn-height"></div>
<div class="footer" @click="submit">提交</div>
<u-calendar v-model="showDateSelect" mode="range" min-year="2020" max-date="2050-12-31" @change="dateConfirm"></u-calendar>
<u-select v-model="showDictSelect" :list="$dict.getDict(selectDictName)" label-name="dictName" value-name="dictValue" @confirm="dictConfirm"></u-select>
</div>
</template>
<script>
import { mapState } from 'vuex'
export default {
data() {
return {
handlerTypeList: [],
form: {
registerId: '',
registerIdNumber: '',
handleType: '',
quarantineAddress: '',
quarantineBeginTime: '',
quarantineEndTime: '',
quarantineStrategy: '',
homeStatus: '',
controlMethod: '',
remarks: '',
handoverObject: '',
handoverMethod: '',
handoverPersonName: '',
handoverPersonPhone: '',
fileList: []
},
showDateSelect: false,
showDictSelect: false,
selectDictName: '',
selectFormName: '',
haveHomeQuarantineBtn: true
}
},
computed: {
...mapState(['user']),
},
onLoad(option) {
this.form.registerId = option.id
this.form.registerIdNumber = option.idNumber
this.haveHomeQuarantineBtn = option.haveHomeQuarantineBtn
this.$dict.load('EP_handleType', 'EP_quarantineAddress', 'EP_quarantineStrategy', 'EP_homeStatus', 'EP_controlMethod', 'EP_handoverObject', 'EP_handoverMethod').then(() => {
this.handlerTypeList = this.$dict.getDict('EP_handleType')
})
},
onShow() {
document.title = '风险处置'
},
methods: {
submit() {
if(!this.form.handleType) {
return this.$u.toast('请选择处置意见')
}
//handleType 2集中隔离 3居家隔离 6转交人员
if(this.form.handleType == 2 && this.form.quarantineAddress === '') {
return this.$u.toast('请选择地点')
}
if([2, 3].includes(this.form.handleType) && !this.form.quarantineBeginTime) {
return this.$u.toast('请选择隔离时间')
}
if([2, 3].includes(this.form.handleType) && this.form.quarantineStrategy === '') {
return this.$u.toast('请选择隔离策略')
}
if(this.form.handleType == 3 && this.form.controlMethod === '') {
return this.$u.toast('请选择管控方式')
}
if(this.form.handleType == 6 && this.form.handoverObject === '') {
return this.$u.toast('请选择移交对象')
}
if(this.form.handleType == 6 && this.form.handoverMethod === '') {
return this.$u.toast('请选择移交方式')
}
if(this.form.handleType == 6 && !this.form.handoverPersonName) {
return this.$u.toast('请输入交接人姓名')
}
// if(this.form.handleType == 6 && this.form.handoverPersonPhone && !/^1[0-9]{10,10}$/.test(this.form.handoverPersonPhone)) {
// return this.$u.toast("请输入正确的手机号码");
// }
if(this.form.handleType == 6 && !this.form.fileList.length) {
return this.$u.toast('请上传交接图片')
}
if(this.form.handleType == 1 || this.form.handleType == 4 || this.form.handleType == 5) {
this.$http.post(`/app/appepidemicpreventionregisterinfo/riskDisposal`, this.form).then((res) => {
if (res.code == 0) {
this.$u.toast('提交成功')
uni.$emit('updateDetail')
uni.$emit('updateList')
uni.navigateBack()
}
})
}else {
uni.setStorageSync('checkPointContent', this.form)
uni.navigateTo({ url: `./ManagementHistory?id=${this.form.registerId}` })
}
},
handleTypeClick(index) {
if(index == this.form.handleType) return
for(var i in this.form) {
if(i != 'registerId' && i != 'registerIdNumber') {
this.form[i] = ''
}
}
this.form.handleType = index
this.form.fileList = []
},
dateConfirm(e) {
this.form.quarantineBeginTime = e.startDate
this.form.quarantineEndTime = e.endDate
},
dictSelectClick(dictName, formName) {
this.selectDictName = dictName
this.selectFormName = formName
this.showDictSelect = true
},
dictConfirm(e) {
this.form[this.selectFormName] = e[0].value
}
},
}
</script>
<style scoped lang="scss">
.ManagementContent {
background-color: #F3F6F9;
padding-top: 16px;
.type-select {
.type-item {
display: inline-block;
width: 218px;
height: 80px;
line-height: 80px;
text-align: center;
background: #FFF;
border: 1px solid #CCC;
border-radius: 16px;
font-family: PingFangSC-Regular;
font-size: 28px;
color: #333;
margin: 0 16px 16px 0;
}
.type-item:nth-of-type(3n) {
margin-right: 0;
}
.active {
background: #4181FF;
border: none;
color: #fff;
}
}
.item {
background-color: #fff;
display: flex;
padding: 40px 0 40px 32px;
.label {
width: 220px;
line-height: 48px;
font-family: PingFangSC-Medium;
font-weight: 500;
font-size: 34px;
color: #666;
.tips {
display: inline-block;
font-family: PingFangSC-Medium;
font-weight: 700;
font-size: 34px;
color: #F46;
margin-right: 8px;
vertical-align: text-top;
}
}
.value {
width: calc(100% - 220px);
padding-right: 32px;
text-align: right;
font-family: PingFangSC-Regular;
font-size: 34px;
color: #333;
.color-999 {
color: #999;
font-size: 30px;
}
}
textarea {
width: 100%;
}
}
::v-deep uni-textarea{
width: calc(100% - 32px);
}
.info {
padding-left: 32px;
background-color: #fff;
.item {
padding-left: 0;
}
.solid {
border-bottom: 1px solid #ddd;
box-sizing: border-box;
}
}
.mar-b16 {
margin-bottom: 16px;
}
.btn-height{
height: 130px;
}
.footer{
width: 100%;
height: 112px;
line-height: 112px;
background: #1365DD;
box-shadow: inset 0px 1px 0px 0px #EEEEEE;
font-size: 32px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #FFF;
text-align: center;
position: fixed;
bottom: 0;
left: 0;
}
}
</style>

View File

@@ -0,0 +1,295 @@
<template>
<div class="ManagementHistory">
<div class="title">最近处置历史</div>
<div v-for="(item, index) in info.riskDisposalHistoryList" :key="index">
<div class="info">
<div class="item-flex">
<div class="label">处置意见</div>
<div class="value">{{info.name}}</div>
</div>
<div class="item-flex">
<div class="label">集中隔离地</div>
<div class="value">{{info.idNumber}}</div>
</div>
<div class="item-flex">
<div class="label">隔离时间</div>
<div class="value">{{info.idNumber}}</div>
</div>
<div class="item-flex">
<div class="label">隔离策略</div>
<div class="value">{{info.idNumber}}</div>
</div>
</div>
<div class="info">
<div class="item-flex">
<div class="label">处置意见</div>
<div class="value">{{info.name}}</div>
</div>
<div class="item-flex">
<div class="label">集中隔离地</div>
<div class="value">{{info.idNumber}}</div>
</div>
<div class="item-flex">
<div class="label">隔离时间</div>
<div class="value">{{info.idNumber}}</div>
</div>
<div class="item-flex">
<div class="label">隔离策略</div>
<div class="value">{{info.idNumber}}</div>
</div>
<div class="item-flex">
<div class="label">管控方式</div>
<div class="value">{{info.idNumber}}</div>
</div>
<div class="item-flex border-none">
<div style="color:#999;">附件</div>
</div>
<div class="img-list">
<!-- <img :src="item.url" alt="" v-for="(item, index) in info.checkPhoto" :key="index" @click="previewImage(info.checkPhoto, item.url)"> -->
</div>
</div>
<div class="info">
<div class="item-flex">
<div class="label">处置意见</div>
<div class="value">{{info.name}}</div>
</div>
<div class="item-flex">
<div class="label">移交对象</div>
<div class="value">{{info.name}}</div>
</div>
<div class="item-flex">
<div class="label">移交方式</div>
<div class="value">{{info.name}}</div>
</div>
<div class="item-flex">
<div class="label">交接人姓名</div>
<div class="value">{{info.name}}</div>
</div>
<div class="item-flex">
<div class="label">手机号</div>
<div class="value" style="color:#4181FF;" @click="callPhone(info.phone)">
<img :src="$cdn + 'common/phone.png'" alt="" class="phone-icon" >
{{info.phone}}</div>
</div>
<div class="item-flex border-none">
<div style="color:#999;">交接图片</div>
</div>
<div class="img-list">
<!-- <img :src="item.url" alt="" v-for="(item, index) in info.checkPhoto" :key="index" @click="previewImage(info.checkPhoto, item.url)"> -->
</div>
</div>
</div>
<AiEmpty v-if="!info.riskDisposalHistoryList.length"></AiEmpty>
<div class="btn-height"></div>
<div class="footer" v-if="this.form.handleType == 3">
<div @click="submit(1)">放行居家隔离</div>
<div @click="submit(0)">通知社区核实</div>
</div>
<div class="footer-btn" v-else @click="submit('')">提交</div>
</div>
</template>
<script>
import { mapState } from 'vuex'
export default {
data() {
return {
id: '',
info: {},
form: {},
}
},
computed: { ...mapState(['user']) },
onShow() {
document.title = '居家隔离确认'
},
onLoad(option) {
this.form = uni.getStorageSync('checkPointContent')
this.$dict.load('EP_handleType', 'EP_quarantineStrategy', 'EP_homeStatus', 'EP_controlMethod', 'EP_handoverObject', 'EP_handoverMethod').then(() => {
this.id = option.id
this.getDetail()
})
},
methods: {
submit(status) {
this.form.homeQuarantineOperation = status
this.$http.post(`/app/appepidemicpreventionregisterinfo/riskDisposal`, this.form).then((res) => {
if (res.code == 0) {
this.$u.toast('提交成功')
uni.$emit('updateDetail')
uni.$emit('updateList')
uni.navigateBack({ delta: 2 })
}
})
},
getDetail() {
this.$http.post(`/app/appepidemicpreventionregisterinfo/queryDetailById?id=${this.id}`).then((res) => {
if (res.code == 0) {
this.info = res.data
}
})
},
callPhone(phone) {
uni.makePhoneCall({phoneNumber: phone})
},
previewImage(images, img) {
uni.previewImage({
urls: images.map(v => v.url),
current: img
})
},
},
}
</script>
<style lang="scss" scoped>
.ManagementHistory {
.title{
padding-left: 32px;
line-height: 116px;
background: #FFF;
font-size: 38px;
font-family: PingFangSC-Semibold, PingFang SC;
font-weight: 600;
color: #333;
}
.info{
background-color: #fff;
padding: 0 32px;
.item-flex{
padding: 34px 0;
border-bottom: 1px solid #ddd;
display: flex;
justify-content: space-between;
line-height: 44px;
font-size: 32px;
font-family: PingFangSC-Regular, PingFang SC;
.label{
width: 206px;
color: #999;
}
.value{
width: calc(100% - 206px);
word-break: break-all;
color: #333;
text-align: right;
.phone-icon{
width: 40px;
height: 40px;
vertical-align: middle;
margin-right: 8px;
}
}
.color-0{
color: #42D784;
}
.color-1{
color: #f46;
}
.color-2{
color: #1365DD;
}
}
.img-list{
padding-bottom: 32px;
img{
width: 320px;
height: 320px;
}
}
.item-flex:nth-last-of-type(1){
border-bottom: 0;
}
.error-list {
.item {
width: 100%;
background: #f4f7fe;
border-radius: 8px;
padding: 24px 24px 18px 24px;
box-sizing: border-box;
margin-bottom: 16px;
p {
font-size: 28px;
font-family: PingFangSC-Regular, PingFang SC;
color: #343d65;
line-height: 40px;
word-break: break-all;
margin-bottom: 12px;
}
div {
font-size: 24px;
font-family: PingFangSC-Regular, PingFang SC;
color: #666;
line-height: 34px;
span {
display: inline-block;
margin-left: 32px;
}
}
}
}
.text-p{
line-height: 44px;
color: #333;
padding-bottom: 16px;
}
}
.line-bg{
width: 100%;
height: 24px;
background-color: #F3F6F9;
}
.btn-height{
height: 160px;
background-color: #F3F6F9;
}
.footer {
width: 100%;
height: 128px;
background: #FFF;
box-shadow: inset 0 0 0 0 #D4D4D4;
padding: 24px 32px;
box-sizing: border-box;
display: flex;
position: fixed;
bottom: 0;
div {
flex: 1;
height: 80px;
line-height: 80px;
background: #FFF;
border-radius: 8px;
font-family: PingFangSC-Regular;
font-size: 32px;
text-align: center;
background-color: #1365DD;
color: #fff;
}
div:nth-of-type(1) {
margin-right: 32px;
}
}
.border-none{
border-bottom: 0!important;
}
.footer-btn{
width: 100%;
height: 112px;
line-height: 112px;
background: #1365DD;
box-shadow: inset 0px 1px 0px 0px #EEEEEE;
font-size: 32px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #FFF;
text-align: center;
position: fixed;
bottom: 0;
left: 0;
}
}
</style>

View File

@@ -0,0 +1,489 @@
<template>
<div class="RiskContent">
<div class="user-info">
<div class="user-list">
<div class="item">
<h2 class="name">{{info.name}}的返乡登记信息</h2>
<p><img src="./components/img/org-icon.png" alt=""><span class="start-name">{{info.startAreaName}}</span></p>
<p><img src="./components/img/blue-icon.png" alt=""><span class="start-name">{{info.arriveAreaName}}</span></p>
<p><img src="./components/img/time-icon.png" alt="">{{info.arriveTime}}</p>
<p><img src="./components/img/point-icon.png" alt="">{{info.gatewayName}}</p>
</div>
</div>
<div class="info">
<div class="title">基本信息</div>
<div class="item-flex">
<div class="label">姓名</div>
<div class="value">{{info.name}}</div>
</div>
<div class="item-flex">
<div class="label">身份证号</div>
<div class="value">{{info.idNumberText}}</div>
</div>
<div class="item-flex">
<div class="label">联系方式</div>
<div class="value" style="color:#4181FF;" @click="callPhone(info.phone)">
<img :src="$cdn + 'common/phone.png'" alt="" class="phone-icon" >
{{info.phone}}</div>
</div>
<div class="item-flex">
<div class="label">人员类别</div>
<div class="value">{{$dict.getLabel('EP_registerPersonType', info.type)}}</div>
</div>
</div>
<div class="line-bg"></div>
<div class="info">
<div class="title">行程信息</div>
<div class="item-flex">
<div class="label">出行方式</div>
<div class="value">
<span v-for="(item, index) in info.travelTypeList" :key="index"><span v-if="index>0">;</span>{{$dict.getLabel('EP_travelType',item)}}</span>
</div>
</div>
<div class="item-flex border-none" v-if="info.trainNo">
<div style="color:#999;">火车车次/航班号/汽车出发地</div>
</div>
<p class="line-text" v-if="info.trainNo">{{info.trainNo}}</p>
<div class="item-flex">
<div class="label">出发时间</div>
<!-- <div class="value">{{info.startTime.substring(0, 16)}}</div> -->
</div>
<div class="item-flex">
<div class="label">出发地区</div>
<div class="value" :style="{color: info.riskLevel == 2 ? '#FF4466' : '#333'}">{{info.startAreaName}}</div>
</div>
<div class="item-flex">
<div class="label">出发地址</div>
<div class="value">{{info.startAddress}}</div>
</div>
<div class="item-flex">
<div class="label">行程描述</div>
<div class="value">{{info.description}}</div>
</div>
<div class="item-flex">
<div class="label">抵达时间</div>
<!-- <div class="value">{{info.arriveTime.substring(0, 16)}}</div> -->
</div>
<div class="item-flex">
<div class="label">返乡地区</div>
<div class="value">{{info.arriveAreaName}}</div>
</div>
<div class="item-flex">
<div class="label">返乡地址</div>
<div class="value">{{info.arriveAddress}}</div>
</div>
</div>
<div class="line-bg"></div>
<div class="info">
<div class="title">健康状况</div>
<div class="item-flex">
<div class="label">是否有风险旅居史</div>
<div class="value" :style="info.fromHighRiskArea == 1 ? 'color:#f46;' : ''">{{$dict.getLabel('yesOrNo', info.fromHighRiskArea)}}</div>
</div>
<div class="item-flex">
<div class="label" style="width:360px;">7天内是否接触新冠确诊或疑似患者</div>
<div class="value" :style="info.contactPatients == 1 ? 'color:#f46;' : ''">{{$dict.getLabel('yesOrNo', info.contactPatients)}}</div>
</div>
<div class="item-flex">
<div class="label">当前健康状况</div>
<div class="value" >
<span v-if="info.abnormalHealth != 1">没有异常</span>
<span v-else style="color:#FF4466;">{{$dict.getLabel('EP_abnormalType', info.abnormalType)}}</span>
</div>
</div>
</div>
<div class="line-bg"></div>
<div class="info" v-if="info.companionList && info.companionList.length">
<div class="title">同行情况<span>{{info.companionCount}}人同行</span></div>
<div class="table-content">
<div class="item table-header">
<div>姓名</div>
<div>手机号码</div>
</div>
<div class="item" v-for="(item, index) in info.companionList" :key="index">
<div>{{item.name}}</div>
<div>{{item.phone}}</div>
</div>
</div>
</div>
</div>
<div class="form-info">
<div class="info mar-b16">
<div class="item">
<div class="label">
<span class="tips">*</span>处置意见
</div>
</div>
<div class="type-select">
<div class="type-item active">原路劝返</div>
<div class="type-item">原路劝返</div>
<div class="type-item">原路劝返</div>
</div>
</div>
<div class="info mar-b16">
<div class="item solid">
<div class="label">
<span class="tips">*</span>居家状态
</div>
<div class="value">
<span class="color-999">请选择</span>
<u-icon name="arrow-right" color="#999" size="16" style="margin-left: 4px" />
</div>
</div>
<div class="item solid">
<div class="label">
<span class="tips">*</span>隔离时间
</div>
<div class="value">
<span class="color-999">请选择</span>
<u-icon name="arrow-right" color="#999" size="16" style="margin-left: 4px" />
</div>
</div>
<div class="item solid">
<div class="label">
<span class="tips">*</span>隔离策略
</div>
<div class="value">
<span class="color-999">请选择</span>
<u-icon name="arrow-right" color="#999" size="16" style="margin-left: 4px" />
</div>
</div>
<div class="item">
<div class="label">
<span class="tips">*</span>附件上传
</div>
</div>
<div style="padding-bottom: 24px;" class="solid">
<AiUploader :def.sync="files" multiple placeholder="上传图片" :limit="9" action="/admin/file/add2"></AiUploader>
</div>
<div class="item">
<div class="label">
<span class="tips">*</span>备注
</div>
</div>
<textarea placeholder="请输入备注"></textarea>
</div>
</div>
<div class="btn-height"></div>
<div class="footer">提交</div>
</div>
</template>
<script>
import { mapState } from 'vuex'
export default {
data() {
return {
areaId: '',
areaName: '',
files: [],
info: {}
}
},
computed: {
...mapState(['user']),
},
onLoad() {
this.areaId = this.user.areaId
this.areaName = this.user.areaName
},
onShow() {
document.title = '风险处置'
},
methods: {
areaSelect(e) {
this.areaId = e
},
},
}
</script>
<style scoped lang="scss">
.RiskContent {
background-color: #F3F6F9;
padding-top: 16px;
.user-info {
.user-list{
margin-bottom: 24px;
.item{
padding: 32px 32px 24px;
background-color: #fff;
.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;
color: #FF4466;
line-height: 40px;
}
}
p{
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;
}
}
.color-999{
margin-bottom: 24px;
color: #999;
}
.start-name{
display: inline-block;
width: calc(100% - 50px);
}
}
}
.info{
background-color: #fff;
padding: 0 32px;
.title{
line-height: 116px;
background: #FFF;
font-size: 38px;
font-family: PingFangSC-Semibold, PingFang SC;
font-weight: 600;
color: #333;
overflow: hidden;
span {
float: right;
font-family: PingFangSC-Regular;
font-size: 32px;
color: #999;
font-weight: 400;
}
}
.item-flex{
padding: 34px 0;
border-bottom: 1px solid #ddd;
display: flex;
justify-content: space-between;
line-height: 44px;
font-size: 32px;
font-family: PingFangSC-Regular, PingFang SC;
.label{
width: 206px;
color: #999;
}
.value{
width: calc(100% - 206px);
word-break: break-all;
color: #333;
text-align: right;
.phone-icon{
width: 40px;
height: 40px;
vertical-align: middle;
margin-right: 8px;
}
}
.color-0{
color: #42D784;
}
.color-1{
color: #f46;
}
.color-2{
color: #1365DD;
}
}
.img-list{
padding-bottom: 32px;
img{
width: 320px;
height: 320px;
}
}
.item-flex:nth-last-of-type(1){
border-bottom: 0;
}
.error-list {
.item {
width: 100%;
background: #f4f7fe;
border-radius: 8px;
padding: 24px 24px 18px 24px;
box-sizing: border-box;
margin-bottom: 16px;
p {
font-size: 28px;
font-family: PingFangSC-Regular, PingFang SC;
color: #343d65;
line-height: 40px;
word-break: break-all;
margin-bottom: 12px;
}
div {
font-size: 24px;
font-family: PingFangSC-Regular, PingFang SC;
color: #666;
line-height: 34px;
span {
display: inline-block;
margin-left: 32px;
}
}
}
}
.text-p{
line-height: 44px;
color: #333;
padding-bottom: 16px;
}
}
.table-content {
padding: 32px 0 48px 0;
.item {
width: 100%;
display: flex;
border-bottom: 1px solid #ccc;
border-right: 1px solid #ccc;
box-sizing: border-box;
div {
flex: 1;
padding: 16px 48px;
line-height: 40px;
font-family: PingFangSC-Regular;
font-size: 28px;
color: #333;
border-left: 1px solid #ccc;
box-sizing: border-box;
}
}
.table-header {
background: #F7F7F7;
border: 1px solid #ccc;
border-left: none;
}
}
.line-bg{
width: 100%;
height: 24px;
background-color: #F3F6F9;
}
.border-none{
border-bottom: 0!important;
}
.line-text {
line-height: 80px;
border-bottom: 1px solid #ddd;
font-family: PingFangSC-Regular;
font-size: 32px;
color: #333;
}
}
.type-select {
display: flex;
.type-item {
width: 218px;
height: 80px;
line-height: 80px;
text-align: center;
background: #FFF;
border: 1px solid #CCC;
border-radius: 16px;
font-family: PingFangSC-Regular;
font-size: 28px;
color: #333;
margin: 0 16px 16px 0;
}
.type-item:nth-of-type(3n) {
margin-right: 0;
}
.active {
background: #4181FF;
border: none;
color: #fff;
}
}
::v-deep uni-textarea{
width: calc(100% - 32px);
}
.form-info {
.info {
padding-left: 32px;
background-color: #fff;
.item {
padding-left: 0;
}
.solid {
border-bottom: 1px solid #ddd;
box-sizing: border-box;
}
}
.item {
background-color: #fff;
display: flex;
padding: 40px 0 40px 32px;
.label {
width: 220px;
line-height: 48px;
font-family: PingFangSC-Medium;
font-weight: 500;
font-size: 34px;
color: #666;
.tips {
display: inline-block;
font-family: PingFangSC-Medium;
font-weight: 700;
font-size: 34px;
color: #F46;
margin-right: 8px;
vertical-align: text-top;
}
}
.value {
width: calc(100% - 220px);
padding-right: 32px;
text-align: right;
font-family: PingFangSC-Regular;
font-size: 34px;
color: #333;
.color-999 {
color: #999;
font-size: 30px;
}
}
textarea {
width: 100%;
}
}
}
.mar-b16 {
margin-bottom: 16px;
}
.btn-height{
height: 130px;
}
.footer{
width: 100%;
height: 112px;
line-height: 112px;
background: #1365DD;
box-shadow: inset 0px 1px 0px 0px #EEEEEE;
font-size: 32px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #FFF;
text-align: center;
position: fixed;
bottom: 0;
left: 0;
}
}
</style>

View File

@@ -1,11 +1,12 @@
<template>
<div class="BackUserList">
<div class="UserInfo">
<div class="user-list">
<div class="item">
<h2 class="name">{{info.name}}的返乡登记信息</h2>
<p><img src="./components/img/org-icon.png" alt=""><span class="start-name">{{info.startAreaName}}</span></p>
<p><img src="./components/img/blue-icon.png" alt=""><span class="start-name">{{info.arriveAreaName}}</span></p>
<p><img src="./components/img/time-icon.png" alt="">{{info.arriveTime}}</p>
<p><img src="./components/img/point-icon.png" alt="">{{info.gatewayName}}</p>
</div>
</div>
<div class="info">
@@ -16,7 +17,7 @@
</div>
<div class="item-flex">
<div class="label">身份证号</div>
<div class="value">{{info.idNumber}}</div>
<div class="value">{{info.idNumberText}}</div>
</div>
<div class="item-flex">
<div class="label">联系方式</div>
@@ -26,7 +27,7 @@
</div>
<div class="item-flex">
<div class="label">人员类别</div>
<div class="value" :style="(info.type == 0 || info.type == 3 || info.type == 9) ? 'color:#42D784;' : 'color:#f46;'">{{$dict.getLabel('epidemicRecentPersonType', info.type)}}</div>
<div class="value">{{$dict.getLabel('EP_registerPersonType', info.type)}}</div>
</div>
</div>
<div class="line-bg"></div>
@@ -34,22 +35,32 @@
<div class="title">行程信息</div>
<div class="item-flex">
<div class="label">出行方式</div>
<div class="value">{{$dict.getLabel('epidemicRecentTravel', info.travelType)}}</div>
<div class="value">
<span v-for="(item, index) in info.travelTypeList" :key="index"><span v-if="index>0">;</span>{{$dict.getLabel('EP_travelType',item)}}</span>
</div>
</div>
<div class="item-flex border-none" v-if="info.trainNo">
<div style="color:#999;">火车车次/航班号/汽车出发地</div>
</div>
<p class="line-text" v-if="info.trainNo">{{info.trainNo}}</p>
<div class="item-flex">
<div class="label">出发时间</div>
<div class="value">{{info.startTime.substring(0, 16)}}</div>
</div>
<div class="item-flex">
<div class="label">出发地区</div>
<div class="value" :style="{color: info.denger == 1 ? '#FF4466' : '#333'}">{{info.startAreaName}}</div>
<div class="value" :style="{color: info.riskLevel == 2 ? '#FF4466' : '#333'}">{{info.startAreaName}}</div>
</div>
<div class="item-flex">
<div class="label">出发地址</div>
<div class="value">{{info.startAddress}}</div>
</div>
<div class="item-flex">
<div class="label">到达时间</div>
<div class="label">行程描述</div>
<div class="value">{{info.description}}</div>
</div>
<div class="item-flex">
<div class="label">抵达时间</div>
<div class="value">{{info.arriveTime.substring(0, 16)}}</div>
</div>
<div class="item-flex">
@@ -60,70 +71,42 @@
<div class="label">返乡地址</div>
<div class="value">{{info.arriveAddress}}</div>
</div>
<div class="item-flex">
<div class="label">行程描述</div>
<div class="value">{{info.description}}</div>
</div>
</div>
<div class="line-bg"></div>
<div class="info">
<div class="title">核酸检测信息</div>
<div class="item-flex">
<div class="label">核酸检测日期</div>
<div class="value">{{info.checkTime}}</div>
</div>
<div class="item-flex">
<div class="label">核酸检测结果</div>
<div class="value" :style="info.checkResult == 1 ? 'color:#f46;' : 'color:#42D784;'">{{$dict.getLabel('epidemicRecentTestResult', info.checkResult)}}</div>
</div>
<div class="item-flex border-none">
<div style="color:#999;">本人健康码截图或核酸检测报告</div>
</div>
<div class="img-list">
<img :src="item.url" alt="" v-for="(item, index) in info.checkPhoto" :key="index" @click="previewImage(info.checkPhoto, item.url)">
</div>
</div>
<div class="line-bg"></div>
<div class="info">
<div class="title">健康状况</div>
<div class="item-flex">
<div class="label">当前体温</div>
<div class="value" :style="info.temperature >= 37.3 ? 'color:#f46;' : ''">{{info.temperature}}</div>
<div class="label">是否有风险旅居史</div>
<div class="value" :style="info.fromHighRiskArea == 1 ? 'color:#f46;' : ''">{{$dict.getLabel('yesOrNo', info.fromHighRiskArea)}}</div>
</div>
<div class="item-flex">
<div class="label" style="width:360px;">14天内是否接触新冠确诊或疑似患者</div>
<div class="value" :class="'color-'+info.touchInFourteen">{{$dict.getLabel('epidemicTouchInFourteen', info.touchInFourteen)}}</div>
<div class="label" style="width:360px;">7天内是否接触新冠确诊或疑似患者</div>
<div class="value" :style="info.contactPatients == 1 ? 'color:#f46;' : ''">{{$dict.getLabel('yesOrNo', info.contactPatients)}}</div>
</div>
<div class="item-flex">
<div class="label">当前健康状况</div>
<div class="value" >
<span v-for="(item, index) in info.health" :key="index" :style="item != 0 ? 'color:#FF4466;' : ''"><span v-if="index>0">;</span>{{$dict.getLabel('epidemicRecentHealth', item)}}</span>
<span v-if="info.abnormalHealth != 1">没有异常</span>
<span v-else style="color:#FF4466;">{{$dict.getLabel('EP_abnormalType', info.abnormalType)}}</span>
</div>
</div>
</div>
<div class="line-bg"></div>
<div class="info">
<div class="title">异常处理情况</div>
<div class="error-list" v-if="list.length">
<div class="item" v-for="(item, index) in list" :key="index">
<p>{{item.content}}</p>
<div>{{item.createTime}}
<span>{{item.createUserName}}</span>
</div>
<div class="info" v-if="info.companionList && info.companionList.length">
<div class="title">同行情况<span>{{info.companionCount}}人同行</span></div>
<div class="table-content">
<div class="item table-header">
<div>姓名</div>
<div>手机号码</div>
</div>
<div class="item" v-for="(item, index) in info.companionList" :key="index">
<div>{{item.name}}</div>
<div>{{item.phone}}</div>
</div>
</div>
<div class="item-flex" v-if="info.releaseName">
<div class="label">异常解除人</div>
<div class="value">{{info.releaseName}}</div>
</div>
<div class="item-flex" v-if="info.releaseName">
<div class="label">异常解除时间</div>
<div class="value">{{info.releaseTime}}</div>
</div>
</div>
<div class="line-bg" style="padding-bottom: 56px;"></div>
<div class="footer" @click="toError" v-if="info.status != 1">异常情况处理</div>
<div class="footer" v-if="info.handleType == 0" @click="toContent">风险处置</div>
</div>
</template>
@@ -135,42 +118,31 @@ export default {
return {
id: '',
info: {},
list: []
}
},
computed: { ...mapState(['user']) },
onShow() {
document.title = '返乡人员信息'
document.title = '卡口登记详情'
},
onLoad(option) {
this.$dict.load('epidemicRecentPersonType', 'epidemicRecentTravel', 'epidemicTouchInFourteen', 'epidemicRecentTestResult', 'epidemicRecentHealth').then(() => {
this.$dict.load('yesOrNo', 'EP_registerPersonType', 'EP_travelType', 'EP_abnormalType').then(() => {
this.id = option.id
this.getDetail()
this.getList()
})
uni.$on('updateDetail', () => {
this.getList()
this.getDetail()
})
},
methods: {
getList() {
this.$http.post(`/app/appepidemicunusuallog/list?recordId=${this.id}`).then((res) => {
if (res.code == 0) {
this.list = res.data.records
}
})
},
getDetail() {
this.$http.post(`/app/appepidemicbackhomerecord/queryDetailById?id=${this.id}`).then((res) => {
this.$http.post(`/app/appepidemicpreventionregisterinfo/queryDetailById?id=${this.id}`).then((res) => {
if (res.code == 0) {
if(res.data.checkTime) {
res.data.checkTime = res.data.checkTime.substring(0, 10)
}
this.info = res.data
this.info.checkPhoto = JSON.parse(this.info.checkPhoto)
this.info.health = this.info.health.split(',')
this.info.idNumber = res.data.idNumber.replace(/(.{6}).*(.{4})/,"$1********$2")
this.info.travelTypeList = this.info.travelType.split(',')
this.info.idNumberText = res.data.idNumber.replace(/(.{6}).*(.{4})/,"$1********$2")
}
})
},
@@ -183,19 +155,19 @@ export default {
current: img
})
},
toError() {
uni.navigateTo({url: `./ErrorInfo?id=${this.id}`})
toContent() {
uni.navigateTo({url: `./ManagementContent?id=${this.id}&idNumber=${this.info.idNumber}&haveHomeQuarantineBtn=${this.info.haveHomeQuarantineBtn}`})
}
},
}
</script>
<style lang="scss" scoped>
.BackUserList {
.UserInfo {
.user-list{
margin-bottom: 24px;
.item{
padding: 32px 64px 24px;
padding: 32px 32px 24px;
background-color: #fff;
.name{
font-size: 36px;
@@ -245,6 +217,14 @@ export default {
font-family: PingFangSC-Semibold, PingFang SC;
font-weight: 600;
color: #333;
overflow: hidden;
span {
float: right;
font-family: PingFangSC-Regular;
font-size: 32px;
color: #999;
font-weight: 400;
}
}
.item-flex{
padding: 34px 0;
@@ -324,6 +304,31 @@ export default {
padding-bottom: 16px;
}
}
.table-content {
padding: 32px 0 48px 0;
.item {
width: 100%;
display: flex;
border-bottom: 1px solid #ccc;
border-right: 1px solid #ccc;
box-sizing: border-box;
div {
flex: 1;
padding: 16px 48px;
line-height: 40px;
font-family: PingFangSC-Regular;
font-size: 28px;
color: #333;
border-left: 1px solid #ccc;
box-sizing: border-box;
}
}
.table-header {
background: #F7F7F7;
border: 1px solid #ccc;
border-left: none;
}
}
.line-bg{
width: 100%;
height: 24px;
@@ -347,5 +352,12 @@ export default {
.border-none{
border-bottom: 0!important;
}
.line-text {
line-height: 80px;
border-bottom: 1px solid #ddd;
font-family: PingFangSC-Regular;
font-size: 32px;
color: #333;
}
}
</style>

Binary file not shown.

After

Width:  |  Height:  |  Size: 263 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View File

@@ -5,8 +5,8 @@
inactive-color="#A1C1E8" :bar-style="barStyle" :active-item-style="activeStyle" active-color="#ffffff " @change="change">
</u-tabs>
<div class="top-search">
<u-search v-model="keyword" :clearabled="true" placeholder="请输入名称、类型或电话" :show-action="false" bg-color="#F5F5F5"
search-icon-color="#999" color="#999" height="58" @search="handerSearch" @clear="handerClear">
<u-search v-model="keyword" :clearabled="true" placeholder="请输入名" :show-action="false" bg-color="#F5F5F5"
search-icon-color="#999" color="#999" height="58" @search="getListInit" @clear="getListInit">
</u-search>
</div>
<div class="top-select">
@@ -54,6 +54,7 @@ export default {
appName: '社区管理',
data() {
return {
current: 1,
keyword: '',
currentTabs: 0,
tabList: [
@@ -90,17 +91,20 @@ export default {
document.title = '社区管理'
},
methods: {
getListInit() {
this.current = 1
this.data = []
this.getList()
},
getList() {
this.$http.post('/app/appepidemicreportmember/list', null, {
params: { size: this.size, current: this.current, status: this.currentTabs == 1 ? '0' : '', areaId: this.areaId, name: this.keyword },
this.$http.post('/app/appepidemicpreventioncommunitymanagement/list', null, {
params: { size: 10, current: this.current, status: this.currentTabs, areaId: this.areaId, name: this.keyword },
}).then((res) => {
if (res.code == 0) {
this.data = this.current > 1 ? [...this.data, ...res.data.records] : res.data.records
}
})
},
toAdd() {
uni.navigateTo({url: './Add'})
},
@@ -110,19 +114,7 @@ export default {
},
areaSelect(e) {
this.areaId = e
this.getList()
},
handerSearch(e) {
this.keyword = e
this.current = 1
this.getList()
},
handerClear() {
this.keyword = ''
this.current = 1
this.getList()
this.getListInit()
},
},
onReachBottom() {