数字孪生Web 后台dt( digital twin)2.0版本 统一命名格式
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.
 
 
 
 
 

291 lines
7.5 KiB

<!--
今日值班人员
目录位置执勤管理 -> 今日值班人员
功能概述查看当日值班人员信息
-->
<template>
<div class="dutyBox" id="dutyBox">
<div class="title">
当日值班人员
<div class="fullscreenBox" @click="screen">
<a-icon :type="isFullScren ? 'fullscreen-exit' : 'fullscreen'" />
</div>
</div>
<div style="height: 380px; margin-top: 230px" v-show="!dataList.length">
<a-empty />
</div>
<a-carousel arrows>
<div slot="prevArrow" slot-scope="props" class="custom-slick-arrow" style="left: 10px; zindex: 1">
<a-icon type="left-circle" />
</div>
<div slot="nextArrow" slot-scope="props" class="custom-slick-arrow" style="right: 10px">
<a-icon type="right-circle" />
</div>
<div class="listBox" v-for="item in dataList">
<div class="time">
{{ item.beginTime }}~{{ item.endTime.split(' ')[1] }}
<div class="theLine">【{{ item.lineName }}】</div>
</div>
<div class="picBox">
<div class="picTitle">
<strong>带班领导</strong>
</div>
<div class="picList">
<div class="picItem" v-for="leader in getLeaderList(item.msDutyUserInfoList)">
<!-- <img :src="getImgView(item.img)">-->
<img :src="getImg(leader.avatar)" />
<div class="name">{{ leader.dutyStaffName }}</div>
<div class="name">联系方式:{{ leader.phone }}</div>
</div>
</div>
</div>
<div class="picBox">
<div class="picTitle">
<strong>执勤人员</strong>
</div>
<div class="picList">
<div class="picItem" v-for="staff in getStaffList(item.msDutyUserInfoList)">
<!-- <img :src="getImgView(item.img)">-->
<img :src="getImg(staff.avatar)" />
<div class="name">{{ staff.dutyStaffName }}</div>
<div class="name">联系方式:{{ staff.phone }}</div>
</div>
</div>
</div>
</div>
</a-carousel>
</div>
</template>
<script lang="ts">
import { computed, defineComponent, onMounted, ref } from 'vue';
import { defHttp } from '/@/utils/http/axios';
export default defineComponent({
name: 'Duty',
props: {},
setup(props, ctx) {
const dataList: any = ref([]);
const url = ref('/military/msDutyTask/qryPersonOnDutyByDate');
const isFullScren = ref(false);
const getTime = computed(() => {
var timeData = new Date();
let year = timeData.getFullYear();
let month = timeData.getMonth() + 1;
let date = timeData.getDate();
var time = year + '年' + month + '月' + date + '日';
return time;
});
onMounted(() => {
getPersonList();
{
//由于vue全屏时监听不到esc事件,所以页面初始化渲染完成后,绑定fullscreenchange的全屏改变监听事件,这样按esc退出全屏时也会触发
document.addEventListener('fullscreenchange', () => {
isFullScren.value = !isFullScren.value;
});
document.addEventListener('mozfullscreenchange', () => {
isFullScren.value = !isFullScren.value;
});
document.addEventListener('webkitfullscreenchange', () => {
isFullScren.value = !isFullScren.value;
});
document.addEventListener('msfullscreenchange', () => {
isFullScren.value = !isFullScren.value;
});
}
});
function screen() {
let element: any = document.getElementById('dutyBox');
if (this.isFullScren) {
if (document.exitFullscreen) {
document.exitFullscreen();
} else if (document.webkitCancelFullScreen) {
document.webkitCancelFullScreen();
} else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen();
} else if (document.msExitFullscreen) {
document.msExitFullscreen();
}
} else {
if (element.requestFullscreen) {
element.requestFullscreen();
} else if (element.webkitRequestFullScreen) {
element.webkitRequestFullScreen();
} else if (element.mozRequestFullScreen) {
element.mozRequestFullScreen();
} else if (element.msRequestFullscreen) {
// IE11
element.msRequestFullscreen();
}
}
}
function getPersonList() {
// let Gurl = url.value
let time = new Date();
let year = time.getFullYear();
let month: any = time.getMonth() + 1;
let date: any = time.getDate();
if (month < 10) {
month = '0' + month;
}
if (date < 10) {
date = '0' + date;
}
let today = year + '-' + month + '-' + date;
defHttp
.get(
{
url: url.value,
params: { date: today },
},
{ isTransformResponse: false }
)
// getAction(Gurl, {
// 'date': today
// })
.then((res) => {
if (res.success) {
dataList.value = res.result;
}
});
}
function getStaffList(arr) {
let list: any = [];
for (const item of arr) {
if (item.dutyStaffType == 2) {
list.push(item);
}
}
return list;
}
function getLeaderList(arr) {
let list: any = [];
for (const item of arr) {
if (item.dutyStaffType == 1) {
list.push(item);
}
}
return list;
}
function getImg(a) {
let adivce;
adivce = window._CONFIG['staticDomainURL'] + '/' + a;
return adivce;
}
return {
dataList,
url,
isFullScren,
getTime,
screen,
getPersonList,
getStaffList,
getLeaderList,
getImg,
};
},
});
</script>
<style scoped>
.dutyBox {
background: #fff;
}
.title {
position: relative;
height: 105px;
line-height: 105px;
font-size: 46px;
color: #fff;
background: #22f;
text-align: center;
}
.fullscreenBox {
height: 30px;
width: 30px;
line-height: 27px;
position: absolute;
top: 50%;
right: 2%;
transform: translate(-50%, -50%);
font-size: 24px;
color: rgb(255, 255, 255);
border-radius: 5px;
cursor: pointer;
}
.fullscreenBox:hover {
border: 1px rgb(255, 255, 255) solid;
}
.time {
position: relative;
font-size: 35px;
text-align: center;
color: #00db00;
}
.theLine {
position: absolute;
left: 15px;
top: 0;
}
.picTitle {
text-align: center;
}
.picTitle strong {
font-size: 45px;
color: #000;
}
.picList {
text-align: center;
}
.picItem {
display: inline-block;
padding: 0 35px 15px;
}
.picItem img {
margin: 0 auto;
width: 100px;
height: 140px;
}
.name {
padding: 3px 0;
font-size: 25px;
}
.ant-carousel >>> .slick-slide {
text-align: center;
overflow: hidden;
}
.ant-carousel >>> .custom-slick-arrow {
width: 25px;
height: 25px;
font-size: 25px;
color: #999;
opacity: 0.3;
}
.ant-carousel >>> .custom-slick-arrow:before {
display: none;
}
.ant-carousel >>> .custom-slick-arrow:hover {
opacity: 0.5;
}
.ant-carousel >>> .slick-slide h3 {
color: #fff;
}
</style>