1242 lines
26 KiB
Vue
1242 lines
26 KiB
Vue
<template>
|
||
<view class="index-content-other" :style="transition?{opacity: `1`}:{opacity: `0`}">
|
||
<view class="right-container-title-nav">
|
||
<text style="margin-left: 30rpx;">
|
||
NUID:{{ uni.getStorageSync('nuId')}}
|
||
</text>
|
||
<text class="new-weight">
|
||
{{ uni.getStorageSync('nuName')}}
|
||
</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="{zerotarget: movetype===0 && zeroIndex===index}" class="menu"
|
||
:style="{backgroundColor: movetype===0 && zeroIndex===index?`#ddf0ff`:``}"
|
||
@click="typeNow=index;zeroIndex=index;clean();movetype=0;">
|
||
|
||
<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="donghua-number">
|
||
{{ randomValue }}
|
||
</view>
|
||
<view class="weight-time">
|
||
289.00
|
||
<view class="big-font-right">
|
||
<view class="">
|
||
KWH
|
||
</view>
|
||
|
||
<view class="right-kuai">
|
||
用电量
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<image class="big-img" :src="`/static/index/newindex/wendu/3.png`" />
|
||
<view class="bottom-father">
|
||
<view class="status-button">
|
||
在线
|
||
</view>
|
||
<view class="status-font">
|
||
SN:250425201185
|
||
</view>
|
||
<view class="status-time">
|
||
上次抄表时间:2025-06-27 20:18:06
|
||
</view>
|
||
</view>
|
||
<!-- <view style="display: flex;align-items: center;margin-top: 5rpx;">
|
||
|
||
<view class="server-name">
|
||
一级压疮防护
|
||
</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="{thirdtarget: movetype===3 && zeroIndex===0}"
|
||
style="width: 240rpx;height: 90rpx;margin-right: 40rpx;">
|
||
<view class="start-button">
|
||
开始服务
|
||
</view>
|
||
</view>
|
||
<view :class="{thirdtarget: movetype===3 && zeroIndex===1}" style="width: 240rpx;height: 90rpx;">
|
||
<view class="end-button">
|
||
结束服务
|
||
</view>
|
||
</view>
|
||
|
||
</view> -->
|
||
</view>
|
||
<view class="left-menu">
|
||
<view v-for="(item,index) in leftArray" :key="index" class="buttons-father"
|
||
@click="zeroIndex=index;clean();movetype=1;">
|
||
<view class="left-ball" :class="{firsttarget: movetype===1 && zeroIndex===index}"
|
||
:style="{backgroundColor: movetype===1 && zeroIndex===index?`#ddf0ff`:``}">
|
||
<image class="left-menu-img" :src="item" />
|
||
</view>
|
||
<view class="">
|
||
{{ buttonName[index] }}
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<view class="right-menu">
|
||
<view v-for="(item,index) in rightArray" :key="index" class="buttons-father"
|
||
@click="zeroIndex=index;clean();movetype=2;">
|
||
<view class="left-ball" :class="{firsttarget: movetype===2 && zeroIndex===index}"
|
||
:style="{backgroundColor: movetype===2 && zeroIndex===index?`#ddf0ff`:``}">
|
||
<image class="left-menu-img" :src="item" />
|
||
</view>
|
||
<view style="position: relative;">
|
||
{{ buttonName[index+3] }}
|
||
<image v-if="index<2" class="biga-img" src="/static/index/newindex/leftmenu/biga.png" />
|
||
</view>
|
||
</view>
|
||
<!-- <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="{secondtarget: movetype===2 && zeroIndex===index}"
|
||
style="margin: 20rpx auto;width: 110rpx;">
|
||
<view class="white-circle" :style="{backgroundColor: movetype===2 && zeroIndex===index?`#ddf0ff`:``}">
|
||
<image class="right-menu-img" :src="item.url" />
|
||
<view class="right-menu-name">
|
||
{{ item.name }}
|
||
</view>
|
||
</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, onUnmounted } from 'vue';
|
||
|
||
|
||
const props = defineProps({
|
||
isShow: {
|
||
type: Boolean,
|
||
required: true,
|
||
},
|
||
propsmove: {
|
||
type: Number
|
||
},
|
||
isMain: {
|
||
type: Boolean
|
||
}
|
||
});
|
||
const movetype = ref(-1);
|
||
|
||
// 监听 isMain 的变化,但只在 isShow 为 true 时响应
|
||
watch(
|
||
() => props.isMain,
|
||
(newVal, oldVal) => {
|
||
// 如果不是从一个明确的布尔值变到另一个(例如首次 undefined -> 布尔),可以按需忽略
|
||
if (typeof oldVal !== 'boolean') return
|
||
// 仅在 isShow 为 true 时生效
|
||
if (!props.isShow) return
|
||
if (lanjie.value) {
|
||
lanjie.value = false
|
||
console.log("!!!!!!!", movetype.value,
|
||
zeroIndex.value,
|
||
typeNow.value)
|
||
return
|
||
}
|
||
|
||
if (oldVal === true && newVal === false) {
|
||
movetype.value = 0;
|
||
zeroIndex.value = 0;
|
||
typeNow.value = zeroIndex.value;
|
||
// console.log("isActive?")
|
||
} else if (oldVal === false && newVal === true) {
|
||
movetype.value = -1
|
||
zeroIndex.value = -1
|
||
typeNow.value = 0
|
||
}
|
||
}
|
||
)
|
||
const zeroIndex = ref(-1)
|
||
const emit = defineEmits(['back', 'cleanmain'])
|
||
const savetopindex = ref(0)
|
||
watch(
|
||
() => props.propsmove,
|
||
() => {
|
||
if (movetype.value != -1) {
|
||
switch (movetype.value) {
|
||
case 0:
|
||
switch (props.propsmove) {
|
||
case 0:
|
||
movetype.value = -1
|
||
zeroIndex.value = -1
|
||
|
||
emit("back")
|
||
|
||
break;
|
||
case 1:
|
||
|
||
if (zeroIndex.value < typeArray.value.length - 1) {
|
||
zeroIndex.value++
|
||
typeNow.value = zeroIndex.value;
|
||
}
|
||
|
||
break;
|
||
case 2:
|
||
console.log("!!!!", zeroIndex.value)
|
||
savetopindex.value = zeroIndex.value;
|
||
movetype.value = 1
|
||
zeroIndex.value = 0
|
||
|
||
break;
|
||
|
||
case 3:
|
||
if (zeroIndex.value) {
|
||
zeroIndex.value--
|
||
typeNow.value = zeroIndex.value;
|
||
} else {
|
||
movetype.value = -1
|
||
zeroIndex.value = -1
|
||
emit("back")
|
||
}
|
||
|
||
break;
|
||
case 4:
|
||
typeNow.value = zeroIndex.value;
|
||
|
||
break;
|
||
default:
|
||
}
|
||
|
||
|
||
break;
|
||
case 1:
|
||
|
||
switch (props.propsmove) {
|
||
case 0:
|
||
if (zeroIndex.value) {
|
||
zeroIndex.value--
|
||
} else {
|
||
movetype.value = 0
|
||
zeroIndex.value = savetopindex.value
|
||
typeNow.value = savetopindex.value;
|
||
|
||
}
|
||
|
||
break;
|
||
case 1:
|
||
zeroIndex.value = 0
|
||
movetype.value = 2
|
||
|
||
break;
|
||
case 2:
|
||
if (zeroIndex.value < 2) {
|
||
zeroIndex.value++
|
||
} else {
|
||
// zeroIndex.value = 0
|
||
// movetype.value = 3
|
||
}
|
||
break;
|
||
|
||
case 3:
|
||
movetype.value = -1
|
||
zeroIndex.value = -1
|
||
emit("back")
|
||
|
||
break;
|
||
default:
|
||
}
|
||
break;
|
||
case 2:
|
||
switch (props.propsmove) {
|
||
case 0:
|
||
if (zeroIndex.value) {
|
||
zeroIndex.value--
|
||
} else {
|
||
movetype.value = 0
|
||
zeroIndex.value = savetopindex.value
|
||
typeNow.value = savetopindex.value;
|
||
}
|
||
|
||
break;
|
||
case 1:
|
||
// zeroIndex.value = 0
|
||
// movetype.value = 2
|
||
|
||
break;
|
||
case 2:
|
||
if (zeroIndex.value < 2) {
|
||
zeroIndex.value++
|
||
} else {
|
||
// zeroIndex.value = 0
|
||
// movetype.value = 3
|
||
}
|
||
break;
|
||
|
||
case 3:
|
||
// movetype.value = -1
|
||
// zeroIndex.value = -1
|
||
// emit("back")
|
||
zeroIndex.value = 0
|
||
movetype.value = 1
|
||
break;
|
||
default:
|
||
}
|
||
break;
|
||
// switch (props.propsmove) {
|
||
// case 0:
|
||
// if (zeroIndex.value) {
|
||
// zeroIndex.value--
|
||
// } else {
|
||
// movetype.value = 0
|
||
// zeroIndex.value = 0
|
||
// typeNow.value = zeroIndex.value;
|
||
// }
|
||
|
||
// break;
|
||
// case 1:
|
||
// zeroIndex.value = 0
|
||
// movetype.value = 3
|
||
|
||
// break;
|
||
// case 2:
|
||
// if (zeroIndex.value < 2) {
|
||
// zeroIndex.value++
|
||
// } else {
|
||
// zeroIndex.value = 0
|
||
// movetype.value = 3
|
||
// }
|
||
// break;
|
||
|
||
// case 3:
|
||
// zeroIndex.value = 0
|
||
// movetype.value = 1
|
||
|
||
// break;
|
||
// default:
|
||
// }
|
||
// break;
|
||
// case 3:
|
||
|
||
// switch (props.propsmove) {
|
||
// case 0:
|
||
// zeroIndex.value = 0
|
||
// movetype.value = 1
|
||
|
||
// break;
|
||
// case 1:
|
||
|
||
// if (zeroIndex.value === 0) {
|
||
// zeroIndex.value++
|
||
// } else {
|
||
// zeroIndex.value = 2
|
||
// movetype.value = 2
|
||
// }
|
||
// break;
|
||
// case 2:
|
||
|
||
// break;
|
||
|
||
// case 3:
|
||
// if (zeroIndex.value === 1) {
|
||
// zeroIndex.value--
|
||
// } else {
|
||
// zeroIndex.value = 2
|
||
// movetype.value = 1
|
||
// }
|
||
|
||
// break;
|
||
// default:
|
||
// }
|
||
// break;
|
||
// default:
|
||
}
|
||
}
|
||
|
||
}
|
||
)
|
||
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',
|
||
3, // 起始索引
|
||
false // 不补零
|
||
))
|
||
const rightArray = ref(genPaths(
|
||
'/static/index/newindex/leftmenu',
|
||
'',
|
||
3, // 张数
|
||
'png',
|
||
6, // 起始索引
|
||
false // 不补零
|
||
))
|
||
const buttonName = ref(['清零', "抄表", "日志", "拉闸", "合闸", "报修"])
|
||
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/shebei',
|
||
'Camera',
|
||
9, // 张数
|
||
'png',
|
||
0, // 起始索引为 1
|
||
false // 不补零
|
||
), name: '摄像头'
|
||
},
|
||
{
|
||
|
||
url: genPaths(
|
||
'/static/index/newindex/shebei',
|
||
'cable',
|
||
10, // 张数
|
||
'png',
|
||
0, // 起始索引为 1
|
||
false // 不补零
|
||
), name: '智能电表'
|
||
|
||
},
|
||
{
|
||
|
||
url: genPaths(
|
||
'/static/index/newindex/shebei',
|
||
'river',
|
||
13, // 张数
|
||
'png',
|
||
0, // 起始索引为 1
|
||
false // 不补零
|
||
), name: '智能水表'
|
||
|
||
},
|
||
{
|
||
|
||
url: genPaths(
|
||
'/static/index/newindex/shebei',
|
||
'humiture',
|
||
9, // 张数
|
||
'png',
|
||
0, // 起始索引为 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;
|
||
// };
|
||
//随机数
|
||
const randomValue = ref(0)
|
||
let timer = null
|
||
|
||
function getRandomNumber() {
|
||
return Number((Math.random() * 100000).toFixed(2))
|
||
}
|
||
function rollTo(target) {
|
||
let current = 0
|
||
const duration = 500 // 滚动总时长:1秒
|
||
const steps = 60 // 每秒大约 60 帧
|
||
const interval = duration / steps
|
||
const step = target / steps
|
||
|
||
clearInterval(timer) // 防止上一个定时器干扰
|
||
timer = setInterval(() => {
|
||
current += step
|
||
if (current >= target) {
|
||
current = target
|
||
clearInterval(timer)
|
||
}
|
||
randomValue.value = Number(current.toFixed(2))
|
||
}, interval)
|
||
}
|
||
|
||
onMounted(() => {
|
||
name.value = uni.getStorageSync('realname')
|
||
typeNow.value = 0;
|
||
|
||
photoplay.value = true;
|
||
|
||
// 初始化滚动
|
||
const firstTarget = getRandomNumber()
|
||
rollTo(firstTarget)
|
||
|
||
// 每5秒随机一个新目标,滚动过去
|
||
setInterval(() => {
|
||
const target = getRandomNumber()
|
||
rollTo(target)
|
||
}, 5000)
|
||
})
|
||
const lanjie = ref(false);
|
||
const clean = () => {
|
||
if (movetype.value == -1) {
|
||
lanjie.value = true;
|
||
emit("cleanmain")
|
||
}
|
||
|
||
}
|
||
onUnmounted(() => {
|
||
clearInterval(timer)
|
||
})
|
||
</script>
|
||
|
||
<style scoped lang="less">
|
||
.index-content-other {
|
||
width: calc(100% - 407rpx);
|
||
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: 120rpx;
|
||
width: 95%;
|
||
margin-left: 20rpx;
|
||
margin-top: 20rpx;
|
||
position: relative;
|
||
margin-bottom: 80rpx;
|
||
|
||
.menu {
|
||
margin-top: 15rpx;
|
||
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: 1100rpx;
|
||
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;
|
||
margin-left: -50rpx;
|
||
display: flex;
|
||
align-items: center;
|
||
|
||
.big-font-right {
|
||
font-size: 35rpx;
|
||
font-weight: 500;
|
||
color: black;
|
||
margin-left: 30rpx;
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
|
||
.right-kuai {
|
||
display: flex;
|
||
justify-content: center;
|
||
align-items: center;
|
||
background-color: #42A5F6;
|
||
color: #fff;
|
||
width: 110rpx;
|
||
height: 50rpx;
|
||
border-radius: 15rpx;
|
||
font-size: 25rpx;
|
||
}
|
||
}
|
||
}
|
||
|
||
.big-img {
|
||
width: 600rpx;
|
||
height: 600rpx;
|
||
// margin-top: 100rpx;
|
||
margin: 50rpx 0;
|
||
}
|
||
|
||
.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: 100%;
|
||
height: 100%;
|
||
background: linear-gradient(to bottom, #009DEF, #0076FF);
|
||
display: flex;
|
||
justify-content: center;
|
||
align-items: center;
|
||
border-radius: 40rpx;
|
||
color: #fff;
|
||
font-size: 30rpx;
|
||
|
||
}
|
||
|
||
.end-button {
|
||
width: 100%;
|
||
height: 100%;
|
||
background: linear-gradient(to bottom, #FFFFFF, #C8D0D9);
|
||
display: flex;
|
||
justify-content: center;
|
||
align-items: center;
|
||
border-radius: 40rpx;
|
||
// color: #fff;
|
||
font-size: 30rpx;
|
||
}
|
||
|
||
.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;
|
||
|
||
background-color: #fff;
|
||
margin-bottom: 10rpx;
|
||
|
||
.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 {
|
||
|
||
height: 200rpx;
|
||
|
||
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;
|
||
}
|
||
|
||
.zerotarget {
|
||
--color: #99C9FD;
|
||
--thick: 2px;
|
||
--radius: 50rpx;
|
||
--outline-offset: 0rpx;
|
||
/* 外扩多少 */
|
||
/* 内层虚线(你现在用的) */
|
||
border-radius: var(--radius);
|
||
background-color: white;
|
||
/* 内部背景 */
|
||
animation: scalePulse 360ms cubic-bezier(.2, .8, .2, 1);
|
||
/* 外层虚线:放在 outline(不会影响元素尺寸) */
|
||
outline: var(--thick) dashed var(--color);
|
||
outline-offset: var(--outline-offset);
|
||
|
||
/* 保证文本 / 子元素在最上层 */
|
||
position: relative;
|
||
z-index: 0;
|
||
}
|
||
|
||
.firsttarget {
|
||
--color: #99C9FD;
|
||
--thick: 2px;
|
||
--radius: 50%;
|
||
--outline-offset: 0rpx;
|
||
/* 外扩多少 */
|
||
|
||
/* 内层虚线(你现在用的) */
|
||
border-radius: var(--radius);
|
||
background-color: white;
|
||
/* 内部背景 */
|
||
animation: scalePulse 360ms cubic-bezier(.2, .8, .2, 1);
|
||
/* 外层虚线:放在 outline(不会影响元素尺寸) */
|
||
outline: var(--thick) dashed var(--color);
|
||
outline-offset: var(--outline-offset);
|
||
|
||
/* 保证文本 / 子元素在最上层 */
|
||
position: relative;
|
||
z-index: 0;
|
||
}
|
||
|
||
.secondtarget {
|
||
--color: #99C9FD;
|
||
--thick: 2px;
|
||
--radius: 60rpx;
|
||
--outline-offset: 0rpx;
|
||
/* 外扩多少 */
|
||
|
||
/* 内层虚线(你现在用的) */
|
||
border-radius: var(--radius);
|
||
background-color: white;
|
||
/* 内部背景 */
|
||
animation: scalePulse 360ms cubic-bezier(.2, .8, .2, 1);
|
||
/* 外层虚线:放在 outline(不会影响元素尺寸) */
|
||
outline: var(--thick) dashed var(--color);
|
||
outline-offset: var(--outline-offset);
|
||
|
||
/* 保证文本 / 子元素在最上层 */
|
||
position: relative;
|
||
z-index: 0;
|
||
}
|
||
|
||
.thirdtarget {
|
||
--color: #99C9FD;
|
||
--thick: 2px;
|
||
--radius: 40rpx;
|
||
--outline-offset: 0rpx;
|
||
/* 外扩多少 */
|
||
|
||
/* 内层虚线(你现在用的) */
|
||
border-radius: var(--radius);
|
||
background-color: white;
|
||
/* 内部背景 */
|
||
animation: scalePulse 360ms cubic-bezier(.2, .8, .2, 1);
|
||
/* 外层虚线:放在 outline(不会影响元素尺寸) */
|
||
outline: var(--thick) dashed var(--color);
|
||
outline-offset: var(--outline-offset);
|
||
|
||
/* 保证文本 / 子元素在最上层 */
|
||
position: relative;
|
||
z-index: 0;
|
||
}
|
||
|
||
@keyframes scalePulse {
|
||
0% {
|
||
transform: scale(1);
|
||
}
|
||
|
||
25% {
|
||
/* 先收缩一点点 */
|
||
transform: scale(0.94);
|
||
}
|
||
|
||
65% {
|
||
/* 再放大到略超出的感觉 */
|
||
transform: scale(1.08);
|
||
}
|
||
|
||
100% {
|
||
transform: scale(1);
|
||
}
|
||
}
|
||
|
||
.buttons-father {
|
||
margin: 30rpx 0;
|
||
text-align: center;
|
||
}
|
||
|
||
.biga-img {
|
||
position: absolute;
|
||
right: -15rpx;
|
||
top: 50%;
|
||
transform: translateY(-50%);
|
||
width: 28rpx;
|
||
height: 28rpx;
|
||
}
|
||
|
||
.bottom-father {
|
||
width: 100%;
|
||
padding-left: 160rpx;
|
||
padding-top: 50rpx;
|
||
|
||
.status-button {
|
||
color: #fff;
|
||
width: 120rpx;
|
||
height: 50rpx;
|
||
border-radius: 30rpx;
|
||
display: flex;
|
||
justify-content: center;
|
||
align-items: center;
|
||
background-color: #47ADF5;
|
||
}
|
||
|
||
.status-font {
|
||
font-weight: 600;
|
||
font-size: 38rpx;
|
||
margin-top: 20rpx;
|
||
}
|
||
|
||
.status-time {
|
||
color: #666666;
|
||
margin-top: 20rpx;
|
||
}
|
||
}
|
||
|
||
.donghua-number {
|
||
position: absolute;
|
||
right: 1010rpx;
|
||
top: 265rpx;
|
||
z-index: 3;
|
||
font-size: 35rpx;
|
||
font-weight: 600;
|
||
}
|
||
</style> |