hldy_app/pages/NursingNew/component/index.vue

773 lines
16 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>
<view class="index-content-other" :style="transition?{opacity: `1`}:{opacity: `0`}">
<view class="right-container-title-nav">
<text style="margin-left: 30rpx;">
NUID2508000001
</text>
<text class="new-weight">
护理单元01
</text>
<view class="right-icons">
<view class="right-container-tem">
<image class="right-container-tem-img" src="/static/index/newindex/wendu/0.png" />
<text class="right-container-tem-text">23°C</text>
<image class="right-container-tem-img" src="/static/index/newindex/wendu/1.png" />
<text class="right-container-tem-text">39%</text>
</view>
<image class="right-icons-img" :src="`/static/index/undericons/man.png`" />
<view>{{name}}</view>
</view>
</view>
<view class="scroll-vi">
<view class="zhezhao-left"></view>
<view class="zhezhao-right"></view>
<scroll-view scroll-x="true" style="width: 100%;height: 100%;">
<view style="display: flex;align-items: center;">
<view style="width: 100rpx;">
</view>
<view v-for="(item,index) in typeArray" :key="index" class="menu" @click="typeNow=index;">
<donghua :links="item.url" :playing="typeNow===index" />
<text class="menu-font" :class="{ zoom: typeNow===index }"
:style="typeNow===index?{color:`#008FF5`}:{}">
{{item.name}}
</text>
</view>
<view style="width: 100rpx;">
</view>
</view>
</scroll-view>
</view>
<view class="photo-father">
<view class="juzhong" style="margin-left: -50rpx;">
<donghua :width="`1500rpx`" :height="`1000rpx`" :links="blueArray" :playing="photoplay" :loop="true"
:interval="120" />
</view>
<view class="juzhong" style="z-index: 2;margin-top: 120rpx;">
<donghua :width="`800rpx`" :height="`500rpx`" :links="bluesmallArray" :playing="photoplay" :loop="true"
:interval="120" />
</view>
<view class="weight-time">
10:00 - 10:10
<view class="pao-father">
<image class="pao-img" :src="`/static/index/newindex/states/pao.png`" />
<view style="z-index: 1;">
待执行
</view>
</view>
</view>
<image class="big-img" :src="`/static/index/newindex/wendu/2.png`" />
<view style="display: flex;align-items: center;margin-top: 5rpx;">
<view class="server-name">
一级压疮防护
</view>
<!-- <view class="server-bgc">
<image class="bgc-img" :src="`/static/index/newindex/wendu/bgc.png`" />
<view class="bgc-font">
日常防护
</view>
</view> -->
</view>
<view style="display: flex;align-items: center;margin-top: 40rpx;">
<image class="down-img" :src="`/static/index/newindex/states/left.png`" />
<view v-for="(item,index) in downStates" :key="index" class="states-father">
<image class="icon-img" :src="item.url" />
<view style="margin-top: 15rpx;margin-left: 10rpx;">
{{item.name}}
</view>
</view>
<image class="down-img" :src="`/static/index/newindex/states/right.png`" />
</view>
<view style="display: flex;margin-top: 60rpx;">
<view class="start-button">
开始服务
</view>
<view class="end-button">
结束服务
</view>
</view>
</view>
<!-- <view class="abs-time">
<view class="big-time">
{{currentTime}}
</view>
<view class="date">
<view class="">
{{fullDate}}
</view>
<view class="">
{{weekDay}}
</view>
</view>
<view class="right-container-tem">
<image class="right-container-tem-img" src="/static/index/newindex/wendu/0.png" />
<text class="right-container-tem-text">23°C</text>
<image class="right-container-tem-img" src="/static/index/newindex/wendu/1.png" />
<text class="right-container-tem-text">39%</text>
</view>
</view> -->
<view class="left-menu">
<view v-for="(item,index) in leftArray" :key="index" class="left-ball">
<image class="left-menu-img" :src="item" />
</view>
</view>
<view class="right-menu">
<view class="zhezhao-top" @click="scrollTop -= 115"></view>
<view class="zhezhao-bottom" @click="scrollTop += 115"></view>
<image class="top-img" :src="`/static/index/newindex/rightmenu/top.png`" @click="scrollTop>0? scrollTop -= 115:scrollTop=0" />
<scroll-view scroll-y="true" class="right-scroll" :scroll-top="scrollTop" @scroll="onScroll">
<view style="height: 30rpx;">
</view>
<view v-for="(item,index) in rightMenu" class="white-circle">
<image class="right-menu-img" :src="item.url" />
<view class="right-menu-name">
{{ item.name }}
</view>
</view>
<view style="height: 30rpx;">
</view>
</scroll-view>
<image class="top-img" :src="`/static/index/newindex/rightmenu/bottom.png`" @click="scrollTop > (55* rightMenu.length) ? scrollTop = (55* rightMenu.length) : scrollTop += 115 "/>
</view>
<!-- 轮盘 -->
</view>
</template>
<script setup lang="ts">
import { ref, onMounted, onBeforeUnmount, computed, nextTick, defineProps, watch } from 'vue';
const props = defineProps({
isShow: {
type: Boolean,
required: true,
},
});
const typeNow = ref(-1);
const photoplay = ref(false)
const downArray = ref()
const scrollTop = ref(0);
function onScroll(e) {
// e.detail.scrollTop 就是当前滚动距离
scrollTop.value = e.detail.scrollTop
}
// 通用的生成函数
function genPaths(base, prefix, count, ext = 'png', startIndex = 0, pad = false) {
return Array.from({ length: count }, (_, i) => {
const idx = pad
? String(i + startIndex).padStart(2, '0')
: i + startIndex
return `${base}/${prefix}${idx}.${ext}`
})
}
const rightMenu = ref([
{
url: "/static/index/newindex/rightmenu/0.png",
name: '重点追踪'
},
{
url: "/static/index/newindex/rightmenu/1.png",
name: '转单执行'
},
{
url: "/static/index/newindex/rightmenu/2.png",
name: '协助执行'
},
// {
// url: "/static/index/newindex/rightmenu/0.png",
// name: '重点追踪'
// },
// {
// url: "/static/index/newindex/rightmenu/1.png",
// name: '转单执行'
// },
// {
// url: "/static/index/newindex/rightmenu/2.png",
// name: '协助执行'
// },
])
const downStates = ref([
{
url: "/static/index/newindex/states/0.png",
name: '狂躁'
},
{
url: "/static/index/newindex/states/1.png",
name: '易怒'
},
{
url: "/static/index/newindex/states/2.png",
name: '大体重'
},
{
url: "/static/index/newindex/states/3.png",
name: '四肢'
},
])
const leftArray = ref(genPaths(
'/static/index/newindex/leftmenu',
'',
3, // 张数
'png',
0, // 起始索引
false // 不补零
))
const huliArray = ref(genPaths(
'/static/index/newindex/huli',
'care',
9, // 张数
'png',
0, // 起始索引
false // 不补零
))
const base = genPaths(
'/static/index/newindex/curve',
'curve_',
9,
'png',
1,
false
)
const blueArray = ref([
...base,
...[...base].reverse() // 先拷贝一份再反转,避免修改原 base
])
const basesmall = genPaths(
'/static/index/newindex/curve',
'breathe_',
9,
'png',
1,
false
)
const bluesmallArray = ref([
...basesmall,
...[...basesmall].reverse() // 先拷贝一份再反转,避免修改原 base
])
const typeArray = ref([
{
url: genPaths(
'/static/index/newindex/huli',
'care',
8, // 张数
'png',
0, // 起始索引为 1
false // 不补零
), name: '护理类'
},
{
url: genPaths(
'/static/index/newindex/yiliao',
'health_',
9, // 张数
'png',
1, // 起始索引为 1
false // 不补零
), name: '医疗类'
},
{
url: genPaths(
'/static/index/newindex/kufang',
'storeroom_',
11, // 张数
'png',
1, // 起始索引为 1
false // 不补零
), name: '库房类'
},
{
url: genPaths(
'/static/index/newindex/baojie',
'clean_',
12, // 张数
'png',
1, // 起始索引为 1
false // 不补零
), name: '保洁类'
},
{
url: genPaths(
'/static/index/newindex/xiaoxi',
'wash_',
14, // 张数
'png',
1, // 起始索引为 1
false // 不补零
), name: '消洗类'
},
{
url: genPaths(
'/static/index/newindex/kangfu',
'recovery_',
6, // 张数
'png',
1, // 起始索引为 1
false // 不补零
), name: '康复类'
},
])
// 使用watch监听isShow变化
const transition = ref(false);
watch(
() => props.isShow,
(newVal, oldVal) => {
// 当旧值为false新值为true时延迟0.2秒调用方法
if (!oldVal && newVal) {
transition.value = false;
// console.log("????",transition.value)
setTimeout(() => {
transition.value = true;
}, 50)
} else {
transition.value = false;
}
}
)
const name = ref("");
// 定义响应式数据现在时间
// const currentTime = ref('');
// const fullDate = ref('');
// const weekDay = ref('');
// let timerId = null;
// // 更新时间、日期和星期的方法
// const updateTime = () => {
// const now = new Date();
// // 获取当前时间的时分
// const hours = now.getHours().toString().padStart(2, '0');
// const minutes = now.getMinutes().toString().padStart(2, '0');
// currentTime.value = `${hours}:${minutes}`;
// // 获取完整的日期(年/月/日)
// const year = now.getFullYear();
// const month = (now.getMonth() + 1).toString().padStart(2, '0');
// const day = now.getDate().toString().padStart(2, '0');
// fullDate.value = `${month}-${day}`;
// // 获取星期几
// const weekDays = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
// const week = weekDays[now.getDay()];
// weekDay.value = week;
// };
onMounted(() => {
name.value = uni.getStorageSync('realname')
typeNow.value = 0;
// timerId = updateTime();
// // 每秒更新一次时间
// setInterval(updateTime, 1000);
photoplay.value = true;
})
</script>
<style scoped lang="less">
.index-content-other {
width: calc(100% - 330rpx);
height: 100%;
transition: opacity 1s ease;
position: relative;
.abs-time {
position: absolute;
right: 20rpx;
top: 150rpx;
// width: 300rpx;
.big-time {
font-size: 90rpx;
font-weight: 600;
width: 100%;
justify-content: center;
// padding: 0 40rpx;
}
}
}
.right-container-title-nav {
margin-top: 60rpx;
display: flex;
align-items: center;
height: 60rpx;
position: relative;
font-size: 28rpx;
.new-weight {
margin-left: 30rpx;
font-weight: 600;
}
.right-icons {
position: absolute;
right: 30rpx;
top: 0;
// transform: translateY(-50%);
display: flex;
align-items: center;
height: 60rpx;
}
.right-icons-img {
width: 60rpx;
height: 60rpx;
margin-left: 20rpx;
margin-right: 20rpx;
}
}
.scroll-vi {
height: 100rpx;
width: 95%;
margin-left: 20rpx;
margin-top: 30rpx;
position: relative;
margin-bottom: 80rpx;
.menu {
flex: 0 0 auto; // 👈 关键点
height: 90rpx;
width: 240rpx;
border-radius: 50rpx;
// margin: 45rpx auto;
margin-right: 20rpx;
background-color: #fff;
display: flex;
justify-content: center;
align-items: center;
padding-top: 9rpx;
.menu-img {
width: 55rpx;
height: 55rpx;
margin-right: 15rpx;
}
.menu-font {
margin-top: 18rpx;
font-size: 25rpx;
}
}
}
.date {
display: flex;
justify-content: space-around;
margin-top: 10rpx;
}
.right-container-tem {
display: flex;
.right-container-tem-text {
font-size: 30rpx;
margin-right: 20rpx;
}
.right-container-tem-img {
width: 38rpx;
height: 38rpx;
}
}
.photo-father {
width:100%;
height: 1200rpx;
display: flex;
flex-direction: column;
align-items: center;
position: relative;
margin-top: 0rpx;
}
.juzhong {
position: absolute;
top: 0%;
left: 50%;
transform: translate(-50%, -10%);
}
.weight-time {
font-weight: 800;
font-size: 100rpx;
margin-bottom: 0rpx;
position: relative;
margin-left: -50rpx;
// z-index: 3;
}
.big-img {
width: 1000rpx;
height: 700rpx;
}
.server-name {
font-size: 45rpx;
margin-right: 10rpx;
font-weight: 600;
}
.server-bgc {
width: 160rpx;
height: 50rpx;
display: flex;
justify-content: center;
align-items: center;
position: relative;
}
.bgc-img {
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
}
.bgc-font {
color: #fff;
z-index: 1;
}
.down-img {
width: 35rpx;
height: 35rpx;
}
.states-father {
display: flex;
margin: 0 20rpx;
}
.icon-img {
width: 55rpx;
height: 55rpx;
}
.start-button {
width: 240rpx;
height: 90rpx;
background: linear-gradient(to bottom, #009DEF, #0076FF);
display: flex;
justify-content: center;
align-items: center;
border-radius: 40rpx;
color: #fff;
font-size: 30rpx;
margin-right: 40rpx;
}
.end-button {
width: 240rpx;
height: 90rpx;
background: linear-gradient(to bottom, #FFFFFF, #C8D0D9);
display: flex;
justify-content: center;
align-items: center;
border-radius: 40rpx;
// color: #fff;
font-size: 30rpx;
}
.pao-father {
position: absolute;
top: 25rpx;
right: -110rpx;
font-size: 22rpx;
width: 100rpx;
height: 50rpx;
display: flex;
justify-content: center;
align-items: center;
color: #FFFFFF;
.pao-img {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
}
.left-menu {
position: absolute;
top: 50%;
left: 150rpx;
transform: translateY(-50%);
}
.zoom {
transform: scale(1.2);
transform-origin: bottom left;
transition: transform 1s ease;
}
.left-ball {
width: 100rpx;
height: 100rpx;
border-radius: 50%;
display: flex;
justify-content: center;
align-items: center;
margin: 30rpx 0;
background-color: #fff;
.left-menu-img {
width: 50rpx;
height: 50rpx;
}
}
.right-menu {
position: absolute;
top: 50%;
right: 150rpx;
transform: translateY(-50%);
display: flex;
flex-direction: column;
align-items: center;
width: 140rpx;
.top-img {
width: 140rpx;
height: 110rpx;
padding: 0 50rpx;
}
// .top-img ::before {
// content: "";
// position: absolute;
// top: 0;
// left: 0;
// width: 100%;
// height: 100%;
// background: linear-gradient(to bottom, rgba(255, 255, 255, 0.8) 0%, rgba(255, 255, 255, 0) 100%);
// filter: blur(10px);
// /* 模糊强度 */
// z-index: 1;
// }
.right-scroll {
width: 100%;
height: 750rpx;
// background-color: red;
}
.white-circle {
width: 80%;
height: 200rpx;
margin: 20rpx auto;
border-radius: 60rpx;
background-color: #fff;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
text-align: center;
.right-menu-img {
width: 80rpx;
height: 80rpx;
}
.right-menu-name {
width: 80rpx;
}
}
}
.zhezhao-top {
position: absolute;
top: 105rpx;
left: 0%;
width: 120%;
height: 120rpx;
background: linear-gradient(to bottom,
rgba(239, 240, 244, 1) 0%,
/* #eff0f4 全不透明 */
rgba(239, 240, 244, 0) 100%
/* #eff0f4 完全透明 */
);
z-index: 4;
}
.zhezhao-bottom {
position: absolute;
bottom: 105rpx;
left: 0%;
width: 120%;
height: 120rpx;
background: linear-gradient(to top,
rgba(239, 240, 244, 1) 0%,
/* #eff0f4 全不透明 */
rgba(239, 240, 244, 0) 100%
/* #eff0f4 完全透明 */
);
z-index: 4;
}
.zhezhao-left{
position: absolute;
top: 0rpx;
left: 0%;
height: 100%;
width: 120rpx;
background: linear-gradient(to right,
rgba(239, 240, 244, 1) 0%,
/* #eff0f4 全不透明 */
rgba(239, 240, 244, 0) 100%
/* #eff0f4 完全透明 */
);
z-index: 4;
}
.zhezhao-right{
position: absolute;
top: 0rpx;
right: 0%;
height: 100%;
width: 120rpx;
background: linear-gradient(to left,
rgba(239, 240, 244, 1) 0%,
/* #eff0f4 全不透明 */
rgba(239, 240, 244, 0) 100%
/* #eff0f4 完全透明 */
);
z-index: 4;
}
</style>