hldy_app/pages/NursingNew/component/index.vue

773 lines
16 KiB
Vue
Raw Normal View History

2025-07-31 17:26:06 +08:00
<template>
2025-08-13 17:19:40 +08:00
<view class="index-content-other" :style="transition?{opacity: `1`}:{opacity: `0`}">
2025-07-31 17:26:06 +08:00
<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>
2025-08-13 17:19:40 +08:00
<!-- 轮盘 -->
2025-07-31 17:26:06 +08:00
</view>
</template>
<script setup lang="ts">
import { ref, onMounted, onBeforeUnmount, computed, nextTick, defineProps, watch } from 'vue';
2025-08-13 17:19:40 +08:00
2025-07-31 17:26:06 +08:00
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变化
2025-08-13 17:19:40 +08:00
const transition = ref(false);
2025-07-31 17:26:06 +08:00
watch(
() => props.isShow,
(newVal, oldVal) => {
// 当旧值为false新值为true时延迟0.2秒调用方法
if (!oldVal && newVal) {
transition.value = false;
2025-08-13 17:19:40 +08:00
// console.log("????",transition.value)
2025-07-31 17:26:06 +08:00
setTimeout(() => {
transition.value = true;
}, 50)
} else {
2025-08-13 17:19:40 +08:00
transition.value = false;
2025-07-31 17:26:06 +08:00
}
2025-08-13 17:19:40 +08:00
2025-07-31 17:26:06 +08:00
}
)
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 {
2025-08-13 17:19:40 +08:00
width: calc(100% - 330rpx);
2025-07-31 17:26:06 +08:00
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;
2025-08-13 17:19:40 +08:00
right: 30rpx;
2025-07-31 17:26:06 +08:00
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; // 👈 关键点
2025-08-13 17:19:40 +08:00
height: 90rpx;
width: 240rpx;
2025-07-31 17:26:06 +08:00
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>