feat: 完成首台率改版

main
shengwen.chen 4 months ago
parent 2726b8773e
commit b114d29cd6

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 98 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 6.1 KiB

After

Width:  |  Height:  |  Size: 9.1 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 7.1 KiB

@ -1,107 +0,0 @@
<template>
<div class="h-[32.4vh] mt-[2.77vh] bgLeftBottomBox pt-[3.24vh]">
<div class="w-[43.79vh] h-[26.85vh] mx-auto" ref="echartsContainer"></div>
</div>
</template>
<script>
import * as echarts from 'echarts';
import { GetMonitorFirstOperationMonth } from '@/api/operation';
let chart = null;
export default {
data() {
return {
chartOptions: {
grid: {
top: '13%',
left: '13%',
right: '10%',
bottom: '13%',
},
xAxis: {
type: 'category',
boundaryGap: false,
data: ['3月', '4月', '5月', '6月', '7月', '8月'],
axisLabel: {
color: '#fff',
fontFamily: 'DIN-Bold,Microsoft YaHei',
},
},
yAxis: {
type: 'value',
axisLabel: {
formatter: '{value}%',
color: '#fff',
fontFamily: 'DIN-Bold,Microsoft YaHei',
},
splitLine: {
lineStyle: {
color: 'rgba(0,142,114,0.3)',
width: 0.5,
},
},
},
series: [
{
data: [95, 97, 96, 98, 99, 96],
type: 'line',
itemStyle: {
color: '#30FDFF',
},
areaStyle: {
color: {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [
{
offset: 0,
color: 'rgba(0, 128, 255, 0.7)', //
},
{
offset: 1,
color: 'rgba(200, 254, 255, 0)', //
},
],
},
},
},
],
},
isLoading: true,
};
},
methods: {
onGetPageData() {
GetMonitorFirstOperationMonth().then(res => {
this.chartOptions['xAxis']['data'] = [];
this.chartOptions['series'][0]['data'] = [];
res['data'].forEach(item => {
this.chartOptions['xAxis']['data'].push(item['monthName']);
this.chartOptions['series'][0]['data'].push(item['firstPunctualityRate'].slice(0, -1));
});
chart.setOption(this.chartOptions);
this.isLoading = false;
});
},
},
mounted() {
chart = echarts.init(this.$refs.echartsContainer);
this.onGetPageData();
setInterval(() => {
this.onGetPageData();
}, this.$store.getters.intervalTime);
},
};
</script>
<style>
.bgLeftBottomBox {
background-image: url('@/assets/svg/Operation/LeftBottom/Box.svg');
background-size: contain;
background-position: center;
background-repeat: no-repeat;
}
</style>

@ -1,6 +1,6 @@
<template>
<div class="h-[32.4vh] mt-[2.77vh] bgLeftBottomBox pt-[3.24vh]">
<div class="w-[43.79vh] h-[26.85vh] mx-auto" ref="echartsContainer"></div>
<div class="bgLeftBottomBox">
<div class="h-full" ref="echartsContainer"></div>
</div>
</template>
@ -21,32 +21,36 @@ export default {
xAxis: {
type: 'category',
boundaryGap: false,
data: ['3月', '4月', '5月', '6月', '7月', '8月'],
data: [],
axisLabel: {
color: '#fff',
fontFamily: 'DIN-Bold,Microsoft YaHei',
fontSize: '16px',
color: '#5D49AF',
fontFamily: 'panmen',
},
},
yAxis: {
type: 'value',
axisLabel: {
formatter: '{value}%',
color: '#fff',
fontFamily: 'DIN-Bold,Microsoft YaHei',
fontSize: '16px',
color: '#5D49AF',
fontFamily: 'panmen',
opacity: 0.6
},
splitLine: {
lineStyle: {
color: 'rgba(0,142,114,0.3)',
width: 0.5,
color: '#624D96',
width: 0.1,
},
},
},
series: [
{
data: [95, 97, 96, 98, 99, 96],
data: [],
type: 'line',
smooth: true,
itemStyle: {
color: '#30FDFF',
color: '#7052E8',
},
areaStyle: {
color: {
@ -58,11 +62,11 @@ export default {
colorStops: [
{
offset: 0,
color: 'rgba(0, 128, 255, 0.7)', //
color: 'rgba(156, 132, 255, 0.6)',
},
{
offset: 1,
color: 'rgba(200, 254, 255, 0)', //
color: 'rgba(186, 169, 255, 0.15)',
},
],
},
@ -97,10 +101,13 @@ export default {
};
</script>
<style>
<style lang="scss" scoped>
.bgLeftBottomBox {
margin-top: vh(20);
width: vw(560);
height: vh(358);
background-image: url('@/assets/svg/Operation/LeftBottom/Box.svg');
background-size: contain;
background-size: auto;
background-position: center;
background-repeat: no-repeat;
}

@ -1,128 +0,0 @@
<template>
<div class="w-[116.94vh] h-[85.8vh] bgRightMidBox">
<div class="w-[112.96vh] h-[77.03vh] mx-auto mt-[2.96vh]">
<div class="h-[4.44vh] leading-[4.44vh] text-center bg-[#322369]">
<div class="inline-block">
<div class="inline-block w-[5.11vh] text-[#AAAAAA] text-[1.48vh]">手术间</div>
<div class="inline-block w-[11.11vh] text-[#AAAAAA] text-[1.48vh]">人员</div>
<div class="inline-block w-[16.51vh] text-[#AAAAAA] text-[1.48vh]">手术名称</div>
<div class="inline-block w-[13.11vh] text-[#AAAAAA] text-[1.48vh]">申请类型</div>
<div class="inline-block w-[16.66vh] text-[#AAAAAA] text-[1.48vh]">入手术室时间</div>
<div class="inline-block w-[16.66vh] text-[#AAAAAA] text-[1.48vh]">麻醉开始时间</div>
<div class="inline-block w-[16.66vh] text-[#AAAAAA] text-[1.48vh]">手术开始时间</div>
<div class="inline-block w-[11.11vh] text-[#AAAAAA] text-[1.48vh]">是否准点</div>
</div>
</div>
<div class="h-[72.58vh]">
<el-carousel direction="vertical" :autoplay="true" :interval="15000" indicatorPosition="none">
<el-carousel-item v-for="(item, index) in scheduList" :key="index">
<template v-for="(subItem, index) in item">
<div class="h-[4.44vh] leading-[4.44vh] mt-[0.74vh] text-center itemStyle" :key="index">
<div class="inline-block">
<div class="inline-block align-top w-[5.11vh] text-[1.48vh] panmen">
{{ subItem['roomName'] }}
</div>
<div class="inline-block align-top w-[11.11vh] text-[1.48vh]">
{{ subItem['patientName'] }}
</div>
<div class="inline-block align-top w-[16.51vh] text-[1.48vh] px-1">
<marquee scrollamount="2">{{ subItem['operationName'] }}</marquee>
</div>
<div class="inline-block align-middle w-[13.11vh] text-[1.48vh]">
<img class="mx-auto" src="@/assets/svg/Operation/RightMid/Emergency.svg" v-if="subItem['OperationType']" />
<img class="mx-auto" src="@/assets/svg/Operation/RightMid/Other.svg" v-else />
</div>
<div class="inline-block align-top w-[16.66vh] text-[1.48vh]">
{{ formatData(subItem['inDateTime']) }}
</div>
<div class="inline-block align-top w-[16.66vh] text-[1.48vh]">
{{ formatData(subItem['anesStartTime']) }}
</div>
<div class="inline-block align-top w-[16.66vh] text-[1.48vh]">
{{ formatData(subItem['operStartTime']) }}
</div>
<div class="inline-block align-top w-[11.11vh] text-[1.48vh]" :class="subItem['IsFirstOnTime'] ? 'text-[#349AFC]' : 'text-[#A53FAF]'">
{{ subItem['IsFirstOnTime'] ? '准点' : '不准点' }}
</div>
</div>
</div>
</template>
</el-carousel-item>
</el-carousel>
</div>
</div>
</div>
</template>
<script>
import { Carousel, CarouselItem } from 'element-ui';
import { GetMonitorOperationCount } from '@/api/operation';
import dayjs from 'dayjs';
export default {
data() {
return {
scheduList: [],
isLoading: true,
};
},
methods: {
onGetPageData() {
let nowDay = dayjs().format('YYYY-MM-DD');
if (this.$store.getters.isMock) {
nowDay = '2024-06-06';
}
GetMonitorOperationCount(nowDay).then(res => {
this.scheduList = [];
let group = 0;
for (let i = 0; i < res['data']['length']; i++) {
group = parseInt(i / 14);
if (this.scheduList[group]) {
this.scheduList[group].push(res['data'][i]);
} else {
this.scheduList[group] = [res['data'][i]];
}
}
this.isLoading = false;
});
},
formatData(date) {
let txt = '';
if (date) {
txt = dayjs(date).format('YYYY-MM-DD HH:mm:ss');
}
return txt;
},
},
mounted() {
this.onGetPageData();
setInterval(() => {
this.onGetPageData();
}, this.$store.getters.intervalTime);
},
components: {
'el-carousel': Carousel,
'el-carousel-item': CarouselItem,
},
};
</script>
<style lang="scss" scoped>
.bgRightMidBox {
background-image: url('@/assets/svg/Operation/RightMid/Box.svg');
background-size: contain;
background-position: center;
background-repeat: no-repeat;
}
.itemStyle {
background: rgba(74, 78, 103, 0.15);
box-sizing: border-box;
border: 1px solid rgba(87, 151, 181, 0.4);
}
:deep(.el-carousel) {
height: 100%;
.el-carousel__item,
.el-carousel__container {
height: 100%;
}
}
</style>

@ -0,0 +1,113 @@
.bgRightMidBox {
width: vw(1270);
height: vh(904);
background-image: url('@/assets/svg/Operation/RightMid/Box.svg');
background-size: auto;
background-position: center;
background-repeat: no-repeat;
>section {
box-sizing: border-box;
padding-top: vh(32);
height: 100%;
width: vw(1206);
margin: 0 auto;
header {
height: vh(48);
line-height: vh(48);
text-align: center;
background-color: #E5E6FF;
>div {
display: inline-block;
>div {
font-size: vw(16);
color: #5D49AF;
font-weight: 700;
display: inline-block;
}
}
}
main {
height: vh(784);
box-sizing: border-box;
padding-top: vh(8);
:deep(.el-carousel) {
height: 100%;
.el-carousel__item,
.el-carousel__container {
height: 100%;
.rowBox {
height: vh(48);
text-align: center;
&:nth-child(2n+1) {
background: #F3F3F9;
}
&:nth-child(2n) {
background: #F0F0FC;
}
>div {
display: inline-block;
>div {
font-size: vw(16);
color: #5D49AF;
display: inline-block;
marquee {
font-size: vw(16);
color: #5D49AF;
}
}
}
}
}
}
}
.col1 {
width: vw(55);
}
.col2 {
width: vw(120);
}
.col3 {
width: vw(178);
}
.col4 {
width: vw(142);
}
.col5 {
width: vw(180);
}
.col6 {
width: vw(180);
}
.col7 {
width: vw(180);
}
.col8 {
width: vw(120);
}
}
}

@ -1,47 +1,48 @@
<template>
<div class="w-[116.94vh] h-[85.8vh] bgRightMidBox">
<div class="w-[112.96vh] h-[77.03vh] mx-auto mt-[2.96vh]">
<div class="h-[4.44vh] leading-[4.44vh] text-center bg-[#322369]">
<div class="inline-block">
<div class="inline-block w-[5.11vh] text-[#AAAAAA] text-[1.48vh]">手术间</div>
<div class="inline-block w-[11.11vh] text-[#AAAAAA] text-[1.48vh]">人员</div>
<div class="inline-block w-[16.51vh] text-[#AAAAAA] text-[1.48vh]">手术名称</div>
<div class="inline-block w-[13.11vh] text-[#AAAAAA] text-[1.48vh]">申请类型</div>
<div class="inline-block w-[16.66vh] text-[#AAAAAA] text-[1.48vh]">入手术室时间</div>
<div class="inline-block w-[16.66vh] text-[#AAAAAA] text-[1.48vh]">麻醉开始时间</div>
<div class="inline-block w-[16.66vh] text-[#AAAAAA] text-[1.48vh]">手术开始时间</div>
<div class="inline-block w-[11.11vh] text-[#AAAAAA] text-[1.48vh]">是否准点</div>
<div class="bgRightMidBox">
<section>
<header>
<div>
<div class="col1">手术间</div>
<div class="col2">人员</div>
<div class="col3">手术名称</div>
<div class="col4">申请类型</div>
<div class="col5">入手术室时间</div>
<div class="col6">麻醉开始时间</div>
<div class="col7">手术开始时间</div>
<div class="col8">是否准点</div>
</div>
</div>
<div class="h-[72.58vh]">
</header>
<main>
<el-carousel direction="vertical" :autoplay="true" :interval="15000" indicatorPosition="none">
<el-carousel-item v-for="(item, index) in scheduList" :key="index">
<template v-for="(subItem, index) in item">
<div class="h-[4.44vh] leading-[4.44vh] mt-[0.74vh] text-center itemStyle" :key="index">
<div class="inline-block">
<div class="inline-block align-top w-[5.11vh] text-[1.48vh] panmen">
<div class="rowBox" :key="index">
<div>
<div class="col1 panmen">
{{ subItem['roomName'] }}
</div>
<div class="inline-block align-top w-[11.11vh] text-[1.48vh]">
<div class="col2">
{{ subItem['patientName'] }}
</div>
<div class="inline-block align-top w-[16.51vh] text-[1.48vh] px-1">
<div class="col3">
<marquee scrollamount="2">{{ subItem['operationName'] }}</marquee>
</div>
<div class="inline-block align-middle w-[13.11vh] text-[1.48vh]">
<img class="mx-auto" src="@/assets/svg/Operation/RightMid/Emergency.svg" v-if="subItem['OperationType']" />
<div class="col4">
<img class="mx-auto" src="@/assets/svg/Operation/RightMid/Emergency.svg"
v-if="subItem['OperationType']" />
<img class="mx-auto" src="@/assets/svg/Operation/RightMid/Other.svg" v-else />
</div>
<div class="inline-block align-top w-[16.66vh] text-[1.48vh]">
<div class="col5">
{{ formatData(subItem['inDateTime']) }}
</div>
<div class="inline-block align-top w-[16.66vh] text-[1.48vh]">
<div class="col6">
{{ formatData(subItem['anesStartTime']) }}
</div>
<div class="inline-block align-top w-[16.66vh] text-[1.48vh]">
<div class="col7">
{{ formatData(subItem['operStartTime']) }}
</div>
<div class="inline-block align-top w-[11.11vh] text-[1.48vh]" :class="subItem['IsFirstOnTime'] ? 'text-[#349AFC]' : 'text-[#A53FAF]'">
<div class="col8" :class="subItem['IsFirstOnTime'] ? '!text-[#2BB699]' : '!text-[#ED7783]'">
{{ subItem['IsFirstOnTime'] ? '准点' : '不准点' }}
</div>
</div>
@ -49,8 +50,8 @@
</template>
</el-carousel-item>
</el-carousel>
</div>
</div>
</main>
</section>
</div>
</template>
@ -107,22 +108,5 @@ export default {
</script>
<style lang="scss" scoped>
.bgRightMidBox {
background-image: url('@/assets/svg/Operation/RightMid/Box.svg');
background-size: contain;
background-position: center;
background-repeat: no-repeat;
}
.itemStyle {
background: rgba(74, 78, 103, 0.15);
box-sizing: border-box;
border: 1px solid rgba(87, 151, 181, 0.4);
}
:deep(.el-carousel) {
height: 100%;
.el-carousel__item,
.el-carousel__container {
height: 100%;
}
}
@import "./index.scss";
</style>

@ -7,7 +7,7 @@
<p class="panmen">护理人员: {{ nurseCount }}</p>
</div>
<section>
<el-carousel direction="vertical" :autoplay="false" :interval="5000" indicatorPosition="none">
<el-carousel direction="vertical" :autoplay="true" :interval="5000" indicatorPosition="none">
<el-carousel-item v-for="item in schedulingList" :key="item['roomName']">
<section class="carouselItemBox">
<template v-for="(subItem, index) in item">

@ -30,7 +30,7 @@
</div>
<div :style="carouselWrap" class="border border-[#9A82FF] border-t-0" v-loading="isLoading">
<template v-if="patientList['length']">
<el-carousel direction="vertical" :autoplay="false" indicatorPosition="none" ref="carousel"
<el-carousel direction="vertical" :autoplay="true" indicatorPosition="none" ref="carousel"
@change="onCarouselChange">
<el-carousel-item v-for="(item, index) in patientList" :key="index">
<section class="carouselItemBox">
@ -137,7 +137,7 @@ export default {
.then(res => {
this.patientList = [];
console.log(res['Data']['Data']);
if (res['Data']['Data']['length']) {
if (this.groupIndex >= 0) {
if (this.roomNameList[this.groupIndex]) {

@ -30,7 +30,7 @@
</div>
<div :style="carouselWrap" class="border border-[#9A82FF] border-t-0" v-loading="isLoading">
<template v-if="patientList['length']">
<el-carousel direction="vertical" :autoplay="false" indicatorPosition="none" ref="carousel"
<el-carousel direction="vertical" :autoplay="true" indicatorPosition="none" ref="carousel"
@change="onCarouselChange">
<el-carousel-item v-for="(item, index) in patientList" :key="index">
<section class="carouselItemBox">

Loading…
Cancel
Save