You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

293 lines
8.0 KiB

<template>
<tabs :options="tabOptions" v-model="query.status" v-if="!searchFlag && taskStatus === 'todo'" />
<view class="flex search">
<view class="search-item flex justify-center" :search="searchFlag">
<view class="search-item-conent">
<uni-easyinput prefixIcon="search" type="text" v-model="query.queryTxt" placeholder="搜索" :inputBorder="false" @focus="searchFlag = true" />
</view>
</view>
<view class="search-item flex justify-center" v-if="!searchFlag" @tap="showPopup">
<view :class="filterFlag ? 'search-item-conent active': 'search-item-conent'">
<uni-icons customPrefix="customicons" type="filter" size="20" color="#666" />
<view>筛选</view>
</view>
</view>
<view v-else>
<view class="cancel-btn" @tap="searchFlag = false">取消</view>
</view>
</view>
<view class="people-container">
<view class="flex gap-16 card" v-for="item in peoples" @tap="open(item)">
<view class="people-img">
<net-image :filepath="item.avatarUrl" v-if="item.avatarUrl" />
<image src="/static/police.png" v-else></image>
</view>
<view style="width: calc(100% - 84px)">
<view>
<view class="row">
<view class="col col-12">
<view class="label">姓名:</view>
<view class="content">{{ item.name }}</view>
</view>
<view class="col col-12">
<view class="label">警号:</view>
<view class="content">{{ item.empNo }}</view>
</view>
<view class="col col-12">
<view class="label">所属单位:</view>
<view class="content">{{ item.departName }}</view>
</view>
<view class="col col-12">
<view class="label">职位:</view>
<view class="content">{{ item.position }}</view>
</view>
<view class="col col-24">
<view class="label">联系电话:</view>
<view class="content">
<view v-if="item.mobile" @tap.stop="callPhone(item.mobile)">{{ item.mobile }}</view>
<view v-else>/</view>
</view>
</view>
<template v-if="item.status === 'done'">
<view class="col col-24">
<view class="label">测酒时间:</view>
<view class="content">{{ item.testingTime }}</view>
</view>
<view class="col col-24">
<view class="label">
<view style="padding-right: 18rpx;">
<uni-tag :text="item.testingResult" type="primary" size="mini" v-if="item.testingResult === '已检测'" />
<uni-tag :text="item.testingResult" type="error" size="mini" v-else />
</view>
</view>
<view class="content">
<text v-if="item.drinkResult === '未饮酒'">{{ item.drinkResult }}</text>
<text v-else style="color: red">{{ item.drinkResult }}</text>
<text style="color: #ff5722">{{ item.unTestingDesc }}</text>
</view>
</view>
<view class="col col-24" v-if="item.isIllegalBanquet">
<view>是否违规宴请:{{ item.isIllegalBanquet }}</view>
</view>
</template>
</view>
</view>
<view style="color: #FF0000;" v-if="item.status === 'todo'">待检测</view>
</view>
</view>
<empty v-if="peoples.length === 0" />
</view>
<uni-popup ref="filterPopupRef" type="top">
<view class="popup-container">
<view class="popup-header">
<view>全部筛选</view>
<uni-icons type="closeempty" class="close-btn" @tap="closePopup"></uni-icons>
</view>
<view class="popup-body">
<view class="filter-container">
<view class="filter-label">职位</view>
<filter-radio :data="positions" v-model="query.position" @change="search" />
<view v-if="query.status === 'done'">
<view class="filter-label">检测情况</view>
<filter-radio :data="testingResults" v-model="query.testingResult" @change="search" />
</view>
<view v-if="query.status === 'done'">
<view class="filter-label">饮酒结果</view>
<filter-radio :data="drinkResults" v-model="query.drinkResult" @change="search" />
</view>
</view>
</view>
<view class="footer col-24 flex gap-8">
<button class="col-12" @tap="reset">重置</button>
<button type="primary" @tap="handleSearch" class="col-12">完成</button>
</view>
</view>
</uni-popup>
</template>
<script>
import store from '@/store'
import { listTestingAlcoholPeople, countTestingAlcoholPeople } from '@/api/testingAlcohol'
import { submitTask } from '@/api/task'
let oldPeoples;
let _this;
export default {
inheritAttrs: false,
data() {
return {
BASE_PATH: store.state.fileRequestUrl,
tabOptions: [
{
text: '待测人员(0)',
value: 'todo'
},
{
text: '已测人员(0)',
value: 'done'
}
],
searchFlag: false,
peoples: [],
query: {
size: 100,
current: 1,
status: this.$page.options.taskStatus
},
taskStatus: this.$page.options.taskStatus,
filterFlag: false,
positions: [
{
text: '正职',
value: '正职'
},
{
text: '副职',
value: '副职'
},
],
testingResults: [
{
text: '已检测',
value: '已检测'
},
{
text: '未检测',
value: '未检测'
},
],
drinkResults: [
{
text: '饮酒',
value: '饮酒'
},
{
text: '未饮酒',
value: '未饮酒'
},
]
}
},
watch: {
searchFlag(val) {
if (val) {
oldPeoples = this.peoples;
this.peoples = []
} else {
this.peoples = oldPeoples
}
},
'query.queryTxt': function(val) {
if (_this.searchFlag) {
if (val) {
_this.getPeoples()
} else {
this.peoples = []
}
}
},
'query.status': function(val) {
if (val === 'todo') {
this.query.testingResult = ''
this.query.drinkResult = ''
}
this.getPeoples()
}
},
onLoad() {
_this = this;
},
onShow() {
console.log('onShow')
this.getPeoples()
},
methods: {
open(item) {
if (item.status === 'todo') {
uni.navigateTo({
url: '/pages/task/testingAlcohol/add?people=' + JSON.stringify(item)
});
}
if (item.status === 'done') {
uni.navigateTo({
url: '/pages/task/testingAlcohol/info?people=' + JSON.stringify(item)
});
}
},
getPeoples() {
listTestingAlcoholPeople(this.$page.options.taskId, this.query).then(data => {
this.peoples = data.records
});
countTestingAlcoholPeople(this.$page.options.taskId).then(data => {
this.tabOptions[0].text = `待测人员(${data.todoCount})`
this.tabOptions[1].text = `已测人员(${data.doneCount})`
if (data.todoCount === 0 && this.query.status === 'todo' && this.taskStatus === 'todo') {
uni.showModal({
content: `本次检测人数${data.doneCount},\n请确认是否提交本次检测结果并结束任务`,
confirmText: '提交',
success: function (res) {
if (res.confirm) {
console.log('用户点击确定');
submitTask(_this.$page.options.taskId).then(data => {
uni.navigateTo({
url: '/pages/task/index?taskStatus=todo'
});
})
}
}
});
}
})
},
showPopup() {
this.$refs.filterPopupRef.open()
},
closePopup() {
this.$refs.filterPopupRef.close()
},
search() {
this.filterFlag = !!this.query.position || !!this.query.testingResult || !!this.query.drinkResult
console.log(this.filterFlag)
this.getPeoples()
},
handleSearch() {
this.search()
this.closePopup()
},
reset() {
this.filterFlag = false
let taskStatus = this.query.taskStatus;
this.query = {
size: 10,
current: 1,
taskStatus
}
this.getPeoples()
},
callPhone(phoneNumber) {
uni.makePhoneCall({phoneNumber})
}
}
}
</script>
<style lang="scss">
.people-container {
max-height: calc(100vh - 96px);
/* #ifdef H5 */
max-height: calc(100vh - 140px);
/* #endif */
overflow: auto;
}
.people-img {
width: 136rpx;
height: 205rpx;
image {
width: 100%;
height: 100%;
}
}
</style>