hldy_app/pages/NursingNew/component/equipment.vue

1424 lines
32 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="zhezhao" v-show="openqingling || openlahzha || openbaoxiu || openhehzha || openchaobiao"
@click="closeall()">
<view class="neuro-box" @click.stop v-if="openqingling">
<view class="button-father">
<view :class="!buttonposition?`buttontarget button`:`button-white` " @click="openqingling=false">
取消</view>
<view :class="buttonposition?`buttontarget button`:`button-white` " @click="qingling()">确定</view>
</view>
<view class="card-font">
确定要清零吗
</view>
</view>
<view class="neuro-box-chaobiao" @click.stop v-if="openchaobiao">
<view class="button-father">
<view :class="!buttonposition?`buttontarget button`:`button-white` " @click="openchaobiao=false">
取消</view>
<view :class="buttonposition?`buttontarget button`:`button-white` " @click="chaobiao()">确定</view>
</view>
<view class="card-font">
确定要抄表吗
</view>
</view>
<view class="neuro-box-lazha" @click.stop v-if="openlahzha">
<view class="button-father">
<view :class="!buttonposition?`buttontarget button`:`button-white` " @click="openlahzha=false">取消
</view>
<view :class="buttonposition?`buttontarget button`:`button-white` " @click="kongzha(`10`)">确定</view>
</view>
<view class="card-font">
确定要{{ typeNow===1?'拉闸' : typeNow===2?'开阀' :"" }}吗
</view>
</view>
<view class="neuro-box-baoxiu" @click.stop v-if="openbaoxiu">
<view class="button-father">
<view :class="!buttonposition?`buttontarget button`:`button-white` " @click="openbaoxiu=false">取消
</view>
<view :class="buttonposition?`buttontarget button`:`button-white` " @click="baoxiu()">确定</view>
</view>
<view class="card-font">
确定要报修吗
</view>
</view>
<view class="neuro-box-lazha" @click.stop v-if="openhehzha">
<view class="button-father">
<view :class="!buttonposition?`buttontarget button`:`button-white` " @click="openhehzha=false">取消
</view>
<view :class="buttonposition?`buttontarget button`:`button-white` " @click="kongzha(`11`)">确定</view>
</view>
<view class="card-font">
确定要{{ typeNow===1?'合闸' : typeNow===2?'关阀' :"" }}吗
</view>
</view>
</view>
<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;changeallmessage()">
<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="index-father" v-show="typeNow===1">
<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="donghua-number">
{{ randomValue }}
</view>
<view class="weight-time">
{{indexmessage.eleValue?indexmessage.eleValue:'0.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">
{{indexmessage.relayState=='1'?'合闸':'拉闸'}}
</view>
<view class="status-font">
SN{{indexmessage.address}}
</view>
<view class="status-time">
上次抄表时间:{{indexmessage.readTime?indexmessage.readTime:'未抄表'}}
</view>
</view>
</view>
<view class="left-menu">
<view v-for="(item,index) in leftArray" :key="index" class="buttons-father"
@click="clickLeftMenu(index)">
<view class="left-ball" :class="{firsttarget: movetype===1 && zeroIndex===index}"
:style="{backgroundColor: movetype===1 && zeroIndex===index?`#ddf0ff`:``}">
<donghua :width="`50rpx`" :height="`50rpx`" :links="item" style="width: 50rpx;height: 50rpx;"
:playing="movetype===1 && zeroIndex===index" :loop="false" :interval="120" />
</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="clickRightMenu(index)">
<view class="left-ball" :class="{firsttarget: movetype===2 && zeroIndex===index}"
:style="{backgroundColor: movetype===2 && zeroIndex===index?`#ddf0ff`:``}">
<donghua :width="`50rpx`" :height="`50rpx`" :links="item" style="width: 50rpx;height: 50rpx;"
:playing="movetype===2 && zeroIndex===index" :loop="false" :interval="120" />
</view>
<view style="position: relative;">
{{ index==1 ? buttonName[5] : indexmessage.relayState === '1'? buttonName[3] : buttonName[4]}}
<image v-if="!index" class="biga-img" src="/static/index/newindex/leftmenu/biga.png" />
</view>
</view>
</view>
</view>
<view class="index-father" v-show="typeNow===2">
<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="water-donghua-number">
{{ randomValue }}
</view>
<view class="weight-time">
{{watermessage.waterValue?watermessage.waterValue:'0.00'}}
<view class="big-font-right">
<view class="">
</view>
<view class="right-kuai">
用水量
</view>
</view>
</view>
<image class="big-img" :src="`/static/index/newindex/wendu/4.png`" />
<view class="bottom-father">
<view class="status-button">
{{watermessage.relayState=='1'?'关阀':'开阀'}}
</view>
<view class="status-font">
SN{{watermessage.address}}
</view>
<view class="status-time">
上次抄表时间:{{watermessage.readTime?watermessage.readTime:'未抄表'}}
</view>
</view>
</view>
<view class="left-menu">
<view v-for="(item,index) in leftArray" :key="index" class="buttons-father"
@click="clickLeftMenu(index)">
<view class="left-ball" :class="{firsttarget: movetype===1 && zeroIndex===index}"
:style="{backgroundColor: movetype===1 && zeroIndex===index?`#ddf0ff`:``}">
<donghua :width="`50rpx`" :height="`50rpx`" :links="item" style="width: 50rpx;height: 50rpx;"
:playing="movetype===1 && zeroIndex===index" :loop="false" :interval="120" />
</view>
<view class="">
{{ waterbuttonName[index] }}
</view>
</view>
</view>
<view class="right-menu">
<view v-for="(item,index) in rightArray" :key="index" class="buttons-father"
@click="clickRightMenu(index)">
<view class="left-ball" :class="{firsttarget: movetype===2 && zeroIndex===index}"
:style="{backgroundColor: movetype===2 && zeroIndex===index?`#ddf0ff`:``}">
<donghua :width="`50rpx`" :height="`50rpx`" :links="item" style="width: 50rpx;height: 50rpx;"
:playing="movetype===2 && zeroIndex===index" :loop="false" :interval="120" />
</view>
<view style="position: relative;">
{{ index==1 ? waterbuttonName[5] : watermessage.relayState === '1'? waterbuttonName[3] : waterbuttonName[4]}}
<image v-if="!index" class="biga-img" src="/static/index/newindex/leftmenu/biga.png" />
</view>
</view>
</view>
</view>
</view>
</template>
<script setup lang="ts">
import { ref, onMounted, onBeforeUnmount, computed, nextTick, defineProps, watch, onUnmounted } from 'vue';
import {
electricityMeterlist, electricityMetereleReset, electricityMetereleControl, electricityMeterbaoxiu, electricityMeteleRead,
waterwaterReset, waterwaterControl, waterbaoxiu, waterwaterRead
} from "./api.js"
const props = defineProps({
isShow: {
type: Boolean,
required: true,
},
propsmove: {
type: Number
},
isMain: {
type: Boolean
}
});
const movetype = ref(-1);
const buttonposition = ref(false);
const base = genPaths(
'/static/index/newindex/curve',
'curve_',
9,
'png',
1,
false
)
const blueArray = ref([
...base,
...[...base].reverse() // 先拷贝一份再反转,避免修改原 base
])
// 监听 isMain 的变化,但只在 isShow 为 true 时响应
watch(
() => props.isMain,
(newVal, oldVal) => {
// 如果不是从一个明确的布尔值变到另一个(例如首次 undefined -> 布尔),可以按需忽略
if (typeof oldVal !== 'boolean') return
if (!props.isShow) return
if (lanjie.value) {
lanjie.value = false
return
}
if (oldVal === true && newVal === false) {
movetype.value = 0;
zeroIndex.value = 0;
typeNow.value = zeroIndex.value;
} else if (oldVal === false && newVal === true) {
movetype.value = -1
zeroIndex.value = -1
typeNow.value = 0
}
}
)
const zeroIndex = ref(-1)
const emit = defineEmits(['back', 'cleanmain', `canback`])
const savetopindex = ref(0)
watch(
() => props.propsmove,
() => {
if (movetype.value != -1) {
if (openqingling.value || openlahzha.value || openbaoxiu.value || openhehzha.value || openchaobiao.value) {
switch (props.propsmove) {
case 0:
break;
case 1:
buttonposition.value = !buttonposition.value
break;
case 2:
break;
case 3:
buttonposition.value = !buttonposition.value
break;
case 4:
if (buttonposition.value) {
if (openqingling.value) {
qingling()
}
if (openlahzha.value) {
kongzha(`10`)
}
if (openbaoxiu.value) {
baoxiu()
}
if (openhehzha.value) {
kongzha(`11`)
}
if (openchaobiao.value) {
chaobiao()
}
} else {
closeall()
}
break;
case 5:
closeall()
default:
}
return
}
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:
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++
}
break;
case 3:
movetype.value = -1
zeroIndex.value = -1
emit("back")
break;
case 4:
if (!zeroIndex.value) {
openqingling.value = true;
emit("canback", true)
} else if (zeroIndex.value == 1) {
openchaobiao.value = true
emit("canback", true)
}
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:
break;
case 2:
if (zeroIndex.value < 2) {
zeroIndex.value++
}
break;
case 3:
zeroIndex.value = 0
movetype.value = 1
break;
case 4:
if (!zeroIndex.value) {
if (indexmessage.value.relayState === '1') {
openlahzha.value = true
emit("canback", true)
} else {
openhehzha.value = true
emit("canback", true)
}
} else {
openbaoxiu.value = true;
emit("canback", true)
}
break;
default:
}
break;
}
}
}
)
const typeNow = ref(-1);
const photoplay = ref(false)
const downArray = ref()
const scrollTop = ref(0);
const openqingling = ref(false);
const openlahzha = ref(false);
const openhehzha = ref(false);
const openbaoxiu = ref(false);
const openchaobiao = ref(false);
const qingling = () => {
closeall()
if (typeNow.value == 1) {
electricityMetereleReset(indexmessage.value.cid, indexmessage.value.address).then((res : any) => {
uni.showToast({
title: res.message,
icon: 'none', // 'success' | 'none' (小程序还有 'loading'
duration: 1500,
mask: false
})
setTimeout(() => {
init()
}, 4000)
})
} else if (typeNow.value == 2) {
waterwaterReset(watermessage.value.cid, watermessage.value.address).then((res : any) => {
uni.showToast({
title: res.message,
icon: 'none', // 'success' | 'none' (小程序还有 'loading'
duration: 1500,
mask: false
})
setTimeout(() => {
init()
}, 4000)
})
}
}
const kongzha = (type : string) => {
closeall()
if (typeNow.value == 1) {
electricityMetereleControl(indexmessage.value.cid, indexmessage.value.address, type).then((res : any) => {
uni.showToast({
title: res.message,
icon: 'none', // 'success' | 'none' (小程序还有 'loading'
duration: 1500,
mask: false
})
setTimeout(() => {
init()
}, 4000)
})
} else if (typeNow.value == 2) {
if (type == '10') {
type = '43'
} else {
type = '53'
}
waterwaterControl(watermessage.value.cid, watermessage.value.address, type).then((res : any) => {
uni.showToast({
title: res.message,
icon: 'none', // 'success' | 'none' (小程序还有 'loading'
duration: 1500,
mask: false
})
setTimeout(() => {
init()
}, 4000)
})
}
}
const chaobiao = () => {
closeall()
if (typeNow.value == 1) {
electricityMeteleRead(indexmessage.value.cid, indexmessage.value.address).then((res : any) => {
uni.showToast({
title: res.message,
icon: 'none', // 'success' | 'none' (小程序还有 'loading'
duration: 1500,
mask: false
})
setTimeout(() => {
init()
}, 4000)
})
} else if (typeNow.value == 2) {
waterwaterRead(watermessage.value.cid, watermessage.value.address).then((res : any) => {
uni.showToast({
title: res.message,
icon: 'none', // 'success' | 'none' (小程序还有 'loading'
duration: 1500,
mask: false
})
setTimeout(() => {
init()
}, 4000)
})
}
}
const baoxiu = () => {
closeall()
if (typeNow.value == 1) {
electricityMeterbaoxiu(indexmessage.value.id).then((res : any) => {
uni.showToast({
title: res.message,
icon: 'none', // 'success' | 'none' (小程序还有 'loading'
duration: 1500,
mask: false
})
console.log("!1", res)
setTimeout(() => {
init()
}, 4000)
})
} else if (typeNow.value == 2) {
waterbaoxiu(watermessage.value.id).then((res : any) => {
uni.showToast({
title: res.message,
icon: 'none', // 'success' | 'none' (小程序还有 'loading'
duration: 1500,
mask: false
})
console.log("!1", res)
setTimeout(() => {
init()
}, 4000)
})
}
}
const closeall = () => {
openqingling.value = false;
openlahzha.value = false;
openbaoxiu.value = false;
openhehzha.value = false;
openchaobiao.value = false;
buttonposition.value = false;
emit("canback", false)
}
const clickLeftMenu = (index : number) => {
zeroIndex.value = index;
clean();
movetype.value = 1;
if (movetype.value === 1 && !index) {
openqingling.value = true;
emit("canback", true)
} else if (index == 1) {
openchaobiao.value = true;
emit("canback", true)
}
}
const clickRightMenu = (index : number) => {
zeroIndex.value = index;
clean();
movetype.value = 2;
if (!index) {
if (indexmessage.value.relayState === '1') {
openlahzha.value = true
emit("canback", true)
} else {
openhehzha.value = true
emit("canback", true)
}
} else {
openbaoxiu.value = true;
emit("canback", true)
}
}
function onScroll(e) {
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 leftArray = ref([genPaths(
'/static/index/newindex/leftmenu',
'zero',
11, // 张数
'png',
0, // 起始索引
false // 不补零
),
genPaths(
'/static/index/newindex/leftmenu',
'read',
8, // 张数
'png',
1, // 起始索引
false // 不补零
),
genPaths(
'/static/index/newindex/leftmenu',
'Log',
10, // 张数
'png',
0, // 起始索引
false // 不补零
)],
)
const rightArray = ref([])
const waterrightArray = ref([])
const mobanrightArray = ref([genPaths(
'/static/index/newindex/rightmenu',
'closes',
12, // 张数
'png',
0, // 起始索引
false // 不补零
),
genPaths(
'/static/index/newindex/rightmenu',
'switch',
7, // 张数
'png',
0, // 起始索引
false // 不补零
),
genPaths(
'/static/index/newindex/rightmenu',
'service',
5, // 张数
'png',
0, // 起始索引
false // 不补零
)],
)
const buttonName = ref(['清零', "抄表", "日志", "拉闸", "合闸", "报修"])
const waterbuttonName = ref(['清零', "抄表", "日志", "开阀", "关阀", "报修"])
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: '温湿度计'
},
])
// 使用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 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)
}
const indexmessage = ref({
eleValue: "",
address: "",
readTime: "",
relayState: `0`,
cid: 0,
id: 0,
})
const watermessage = ref({
waterValue: "",
address: "",
readTime: "",
relayState: `0`,
cid: 0,
id: 0,
})
onMounted(() => {
name.value = uni.getStorageSync('realname')
typeNow.value = 0;
photoplay.value = true;
init();
})
const changeallmessage = () => {
if (typeNow.value === 1) {
const firstTarget = indexmessage.value.eleValue
rollTo(Number(firstTarget))
} else if (typeNow.value === 2) {
const secondTarget = watermessage.value.waterValue
rollTo(Number(secondTarget))
}
}
const init = () => {
console.log("????", uni.getStorageSync('serverUrl'), uni.getStorageSync('nuId'))
electricityMeterlist().then((res : any) => {
console.log("!!!", res.result.waterMeterEntityList[0])
// 这个是电表
indexmessage.value = res.result.electricityMeterEntityList[0]
if (indexmessage.value.relayState === '1') {
rightArray.value = [mobanrightArray.value[1], mobanrightArray.value[2]]
} else {
rightArray.value = [mobanrightArray.value[0], mobanrightArray.value[2]]
}
// 这个是水表
watermessage.value = res.result.waterMeterEntityList[0]
if (watermessage.value.relayState === '1') {
waterrightArray.value = [mobanrightArray.value[1], mobanrightArray.value[2]]
} else {
waterrightArray.value = [mobanrightArray.value[0], mobanrightArray.value[2]]
}
})
}
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;
.index-father {
width: 100%;
height: 1100rpx;
}
.abs-time {
position: absolute;
right: 20rpx;
top: 150rpx;
.big-time {
font-size: 90rpx;
font-weight: 600;
width: 100%;
justify-content: center;
}
}
}
.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;
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-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;
}
.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;
}
.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: 15rpx;
}
.right-menu {
position: absolute;
top: 50%;
right: 150rpx;
transform: translateY(-50%);
.right-scroll {
width: 100%;
height: 750rpx;
}
.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-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;
}
.buttontarget {
--color: #99C9FD;
--thick: 2px;
--radius: 30rpx;
--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;
position: relative;
}
.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;
}
.water-donghua-number {
position: absolute;
right: 980rpx;
top: 285rpx;
z-index: 3;
font-size: 32rpx;
font-weight: 600;
}
/* 拟态框 固定尺寸 + 阴影样式 + 相对定位于 wrapper */
.neuro-box {
position: absolute;
left: 700rpx;
top: 500rpx;
width: 400rpx;
height: 270rpx;
border-radius: 30rpx;
background-color: #fff;
display: flex;
flex-direction: column;
align-items: center;
z-index: 1;
padding: 0 10%;
z-index: 999;
}
.neuro-box-chaobiao {
position: absolute;
left: 700rpx;
top: 680rpx;
width: 400rpx;
height: 270rpx;
border-radius: 30rpx;
background-color: #fff;
display: flex;
flex-direction: column;
align-items: center;
z-index: 1;
padding: 0 10%;
z-index: 999;
}
.neuro-box-lazha {
position: absolute;
right: 300rpx;
top: 600rpx;
width: 400rpx;
height: 270rpx;
border-radius: 30rpx;
background-color: #fff;
display: flex;
flex-direction: column;
align-items: center;
z-index: 1;
padding: 0 10%;
z-index: 999;
}
.neuro-box-baoxiu {
position: absolute;
right: 300rpx;
top: 770rpx;
width: 400rpx;
height: 270rpx;
border-radius: 30rpx;
background-color: #fff;
display: flex;
flex-direction: column;
align-items: center;
z-index: 1;
padding: 0 10%;
z-index: 999;
}
.button {
width: 40%;
background-color: #ddf0ff;
display: flex;
justify-content: center;
align-items: center;
color: #007CFF;
border: 1rpx solid #007CFF;
font-size: 25rpx;
border-radius: 30rpx;
}
.card-font {
margin-top: 70rpx;
width: 600rpx;
justify-content: center;
display: flex;
}
.button-white {
width: 40%;
border: 2rpx solid #c3cacd;
background: linear-gradient(to bottom, #f3f3f5, #dee4e9);
display: flex;
justify-content: center;
align-items: center;
font-size: 25rpx;
border-radius: 30rpx;
}
.button-father {
position: absolute;
bottom: 60rpx;
left: 50%;
transform: translateX(-50%);
width: 100%;
height: 60rpx;
display: flex;
justify-content: space-around;
padding: 0 50rpx;
}
.zhezhao {
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
z-index: 5;
}
</style>