hldy_app_mini/pages/NursingNew/component/equipment.vue

2526 lines
61 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 ||openrizhi"
@click="closeall()">
<view class="rizhi-box" @click.stop v-if="openrizhi">
<view class="rizhi-title">
<view class="rizhi-father" v-if="typeNow==1">
<view class="rizhi-card" :class="{ buttontarget: ruletarget===index }"
:style="item.type==rizhivalue.type?{color:`#008FF5`}:{}" v-for="(item,index) in dianrizhi"
:key="index" @click="changetype(item.type,index)">
<image class="rizhi-card-img"
:src="item.type==rizhivalue.type? item.targeturl : item.url" />
<view class="rizhi-card-font">
{{ item.name }}
</view>
</view>
</view>
<view class="rizhi-father" v-if="typeNow==2">
<view class="rizhi-card" :class="{ buttontarget: ruletarget===index }"
:style="item.type==rizhivalue.type?{color:`#008FF5`}:{}" v-for="(item,index) in shuirizhi"
:key="index" @click="changetype(item.type,index)">
<image class="rizhi-card-img"
:src="item.type==rizhivalue.type? item.targeturl : item.url" />
<view class="rizhi-card-font">
{{ item.name }}
</view>
</view>
</view>
<view class="rizhi-father" v-if="typeNow==3">
<view class="rizhi-card" :class="{ buttontarget: ruletarget===index }"
:style="item.type==rizhivalue.type?{color:`#008FF5`}:{}" v-for="(item,index) in wenrizhi"
:key="index" @click="changetype(item.type,index)">
<image class="rizhi-card-img"
:src="item.type==rizhivalue.type? item.targeturl : item.url" />
<view class="rizhi-card-font">
{{ item.name }}
</view>
</view>
</view>
<view class="rizhi-father" v-if="typeNow!=3">
<view class="rizhi-card-right" :class="{ buttontarget: ruletarget===index+dianrizhi.length }"
v-for="(item,index) in updown" :key="index" @click="nextpage(index)">
<image class="rizhi-card-img" :src="item.url" />
</view>
</view>
<view class="rizhi-father" v-else>
<view class="rizhi-card-right" :class="{ buttontarget: ruletarget===index+2 }"
v-for="(item,index) in updown" :key="index" @click="nextpage(index)">
<image class="rizhi-card-img" :src="item.url" />
</view>
</view>
</view>
<!-- 别封装了,越封可读性越差,纯折磨自己,参数和名字都不一致 -->
<view class="rizhi-rule" v-show="!ruletype">
<view class="rizhi-rule-title">
<view class="rizhi-rule-title-kuai" style="width: 23%;">
SN
</view>
<view class="rizhi-rule-title-kuai" style="width: 23%;">
操作时间
</view>
<view class="rizhi-rule-title-kuai" style="width: 23%;">
{{ typeNow==1?`上次电表值`:`上次水表值` }}
</view>
<view class="rizhi-rule-title-kuai" style="width: 15%;">
{{ typeNow==1?`电表值`:`水表值` }}
</view>
<view class="rizhi-rule-title-kuai" style="width: 15%;">
状态
</view>
</view>
<view class="rizhi-rule-kuai" v-for="(item,index) in relrule" :key="index">
<view class="rizhi-rule-title-kuai" style="width: 23%;">
{{ item.address }}
</view>
<view class="rizhi-rule-title-kuai" style="width: 23%;">
{{ item.requestTime }}
</view>
<view class="rizhi-rule-title-kuai" style="width: 23%;">
{{ Number(item.requestValue).toFixed(2) }}
</view>
<view class="rizhi-rule-title-kuai" style="width: 15%;">
{{ Number(item.resolveValue).toFixed(2) }}
</view>
<view class="rizhi-rule-title-kuai" style="width: 15%;">
{{ item.resolveStatus }}
</view>
</view>
<view class="nomessage" v-if="!relrule.length">
<image class="nomessage-img" src="/static/nomessage.png" />
<view class="">
暂无信息
</view>
</view>
</view>
<view class="rizhi-rule" v-show="ruletype==1">
<view class="rizhi-rule-title">
<view class="rizhi-rule-title-kuai" style="width: 33%;">
SN
</view>
<view class="rizhi-rule-title-kuai" style="width: 33%;">
操作时间
</view>
<view class="rizhi-rule-title-kuai" style="width: 33%;">
状态
</view>
</view>
<view class="rizhi-rule-kuai" v-for="(item,index) in relrule" :key="index">
<view class="rizhi-rule-title-kuai" style="width: 33%;">
{{ item.address }}
</view>
<view class="rizhi-rule-title-kuai" style="width: 33%;">
{{ item.requestTime }}
</view>
<view class="rizhi-rule-title-kuai" style="width: 33%;">
{{ item.resolveStatus }}
</view>
</view>
<view class="nomessage" v-if="!relrule.length">
<image class="nomessage-img" src="/static/nomessage.png" />
<view class="">
暂无信息
</view>
</view>
</view>
<view class="rizhi-rule" v-show="ruletype==3">
<view class="rizhi-rule-title">
<view class="rizhi-rule-title-kuai" style="width: 23%;">
sn
</view>
<view class="rizhi-rule-title-kuai" style="width: 23%;">
{{ rizhivalue.type == '0'? `抄表时间` : `告警时间` }}
</view>
<view class="rizhi-rule-title-kuai" style="width: 15%;">
{{ rizhivalue.type == '0'? `温度` : `告警内容` }}
</view>
<view class="rizhi-rule-title-kuai" style="width: 15%;">
{{ rizhivalue.type == '0'? `湿度` : `告警值` }}
</view>
<view class="rizhi-rule-title-kuai" style="width: 23%;">
{{ rizhivalue.type == '0'? `状态` : `消除告警时间` }}
</view>
</view>
<view class="rizhi-rule-kuai" v-for="(item,index) in relrule" :key="index">
<view class="rizhi-rule-title-kuai" style="width: 23%;">
{{ item.sn }}
</view>
<view class="rizhi-rule-title-kuai" style="width: 23%;">
{{ rizhivalue.type == '0'? item.optTime : item.wrDate }}
</view>
<view class="rizhi-rule-title-kuai" style="width: 15%;">
{{ rizhivalue.type == '0'? item.temperature : item.wrContent }}
</view>
<view class="rizhi-rule-title-kuai" style="width: 15%;">
{{ rizhivalue.type == '0'? item.humidity : item.wrData }}
</view>
<view class="rizhi-rule-title-kuai" style="width: 23%;">
{{ rizhivalue.type == '0'? (item.status=='0'?`抄表成功`:`抄表失败`) : item.clearDate }}
</view>
</view>
<view class="nomessage" v-if="!relrule.length">
<image class="nomessage-img" src="/static/nomessage.png" />
<view class="">
暂无信息
</view>
</view>
</view>
</view>
<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" :style="{ top:typeNow==3?`560rpx`:`650rpx` }" @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" :style="{ top:typeNow==3?`560rpx`:`650rpx` }" @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">{{ (uni.getStorageSync('NUall').humidDeviceList && uni.getStorageSync('NUall').humidDeviceList[0])? uni.getStorageSync('NUall').humidDeviceList[0].temperature: '-' }}°C</text>
<image class="right-container-tem-img" src="/static/index/newindex/wendu/1.png" />
<text class="right-container-tem-text">{{ (uni.getStorageSync('NUall').humidDeviceList && uni.getStorageSync('NUall').humidDeviceList[0])? uni.getStorageSync('NUall').humidDeviceList[0].humidity: '-' }}%</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: 1800rpx;height: 100%;" :scroll-left="scrollLeft">
<view style="display: flex;align-items: center;">
<view style="width: 100rpx;"></view>
<view v-for="(item,index) in allArray" :key="index"
:class="{zerotarget: movetype===0 && zeroIndex===index}" class="menu"
:style="{backgroundColor: movetype===0 && zeroIndex===index?`#ddf0ff`:``}"
@click="typeNowtarget=index;zeroIndex=index;clean();movetype=0;changeallmessage()">
<donghua :links="item.donghuapian" width="55rpx" height="55rpx" :playing="typeNowtarget===index" />
<text class="menu-font" :class="{ zoom: typeNowtarget===index }"
:style="typeNowtarget===index?{color:`#008FF5`}:{}">
{{item.lookName}}
</text>
</view>
<view style="width: 100rpx;">
</view>
</view>
</scroll-view>
</view>
<view class="index-father" v-show="typeNow===0">
<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="weight-time" style="font-size: 55rpx;">
NUID{{rightmessage.nuId?rightmessage.nuId:''}}
</view>
<view class="gray-bgc">
{{rightmessage.nuName?rightmessage.nuName:''}}
</view>
<image class="big-img-shexiang" :src="`/static/index/newindex/wendu/6.png`" />
<view class="bottom-father">
<view class="status-button">
{{rightmessage.deviceStatus=='1'?'在线':'离线'}}
</view>
<view class="status-font">
SN{{rightmessage.sn}}
</view>
<view class="status-time">
设备名称:{{rightmessage.deviceName?rightmessage.deviceName:''}}
</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`:``}">
<image v-show="!index" style="width: 50rpx;height: 50rpx;"
src="/static/index/newindex/wendu/yulan.png" />
<donghua v-show="index" :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;">
{{ shexiangbuttonName[index] }}
</view>
</view>
</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="font-top">
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 && !openrizhi}"
:style="{backgroundColor: movetype===1 && zeroIndex===index && !openrizhi?`#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="font-top">
</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 && !openrizhi}"
:style="{backgroundColor: movetype===1 && zeroIndex===index && !openrizhi?`#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 class="index-father" v-show="typeNow===3">
<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="wendu-juzhong">
<view class="wendu-top">
<view class="wendu-top-left">
{{ randomValue?splitParts(randomValue).intPart:'-' }}
</view>
<view class="wendu-top-right">
<view class="">
</view>
<view class="">
.{{ randomValue?splitParts(randomValue).fracDigits:'-' }}
</view>
</view>
</view>
<view class="wendu-heng"></view>
<view class="wendu-bottom">
{{tempmessage.humidity?tempmessage.humidity:'-'}} %
</view>
</view>
<view class="weight-time">
{{tempmessage.temperature?tempmessage.temperature:'-'}}
<view class="big-font-right">
<view class="font-top">
</view>
<view class="right-kuai">
温度
</view>
</view>
<view class="zhongjian-shu"></view>
{{tempmessage.humidity?tempmessage.humidity:'-'}}
<view class="big-font-right">
<view class="font-top">
%
</view>
<view class="right-kuai">
湿度
</view>
</view>
</view>
<image class="big-img" :src="`/static/index/newindex/wendu/5.png`" />
<view class="bottom-father">
<view class="status-button">
{{ tempmessage.maintainStatus == 0 ? '正常' : tempmessage.maintainStatus == 1 ? '维修中' : tempmessage.maintainStatus == 2 ? '报废' : '' }}
</view>
<view class="status-font">
SN{{tempmessage.sn}}
</view>
<view class="status-time">
上次抄表时间:{{tempmessage.reportingTime?tempmessage.reportingTime:'未抄表'}}
</view>
</view>
</view>
<view class="left-menu">
<view v-for="(item,index) in wenduleftArray" :key="index" class="buttons-father"
@click="clickLeftMenu(index)">
<view class="left-ball" :class="{firsttarget: movetype===1 && zeroIndex===index && !openrizhi}"
:style="{backgroundColor: movetype===1 && zeroIndex===index && !openrizhi?`#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="">
{{ wendubuttonName[index] }}
</view>
</view>
</view>
<view class="right-menu">
<view v-for="(item,index) in wendurightArray" :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 ? wendubuttonName[1] : wendubuttonName[2]}}
<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, watch, onUnmounted } from 'vue';
import {
electricityMeterlist, electricityMetereleReset, electricityMetereleControl, electricityMeterbaoxiu, electricityMeteleRead,
waterwaterReset, waterwaterControl, waterbaoxiu, waterwaterRead, humidDevicebaoxiu, updateDeviceRealTime, cameraInfobaoxiu,
electricityMeterListArray, requestLogList, humidDevicejgList, humidDevicejgwarn
} from "./api.js"
import { movedirection, queryPadPageList } from '@/pages/watch/api/lunpan.js'
import joysticknew from '@/component/public/newgame/joysticknew.vue';
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
])
const updown = ref([
{
url: '/static/index/newindex/leftmenu/up.png'
},
{
url: '/static/index/newindex/leftmenu/down.png'
},
])
const dianrizhi = ref([
{
name: "抄表",
type: "3",
url: "/static/index/newindex/leftmenu/read1.png",
targeturl: "/static/index/newindex/leftmenu/read8.png"
},
{
name: "清零",
type: "9",
url: "/static/index/newindex/leftmenu/bezero.png",
targeturl: "/static/index/newindex/leftmenu/bezerotarget.png",
},
{
name: "电表拉闸",
type: "10",
url: "/static/index/newindex/rightmenu/closes0.png",
targeturl: "/static/index/newindex/rightmenu/closes11.png"
},
{
name: "电表合闸",
type: "11",
url: "/static/index/newindex/rightmenu/switch0.png",
targeturl: "/static/index/newindex/rightmenu/switch6.png"
},
])
const shuirizhi = ref([
{
name: "抄表",
type: "42",
url: "/static/index/newindex/leftmenu/read1.png",
targeturl: "/static/index/newindex/leftmenu/read8.png"
},
{
name: "清零",
type: "49",
url: "/static/index/newindex/leftmenu/bezero.png",
targeturl: "/static/index/newindex/leftmenu/bezerotarget.png",
},
{
name: "开阀",
type: "43",
url: "/static/index/newindex/rightmenu/closes0.png",
targeturl: "/static/index/newindex/rightmenu/closes11.png"
},
{
name: "关阀",
type: "53",
url: "/static/index/newindex/rightmenu/switch0.png",
targeturl: "/static/index/newindex/rightmenu/switch6.png"
},
])
const wenrizhi = ref([
{
name: "抄表",
type: "0",
url: "/static/index/newindex/leftmenu/read1.png",
targeturl: "/static/index/newindex/leftmenu/read8.png"
},
{
name: "告警",
type: "1",
url: "/static/index/newindex/rightmenu/service0.png",
targeturl: "/static/index/newindex/rightmenu/service4.png",
},
])
// 绑定到 scroll-view 的 scroll-left
const scrollLeft = ref(0)
// 监听 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;
typeNowtarget.value = zeroIndex.value;
changeallmessage()
} else if (oldVal === false && newVal === true) {
movetype.value = -1
zeroIndex.value = -1
typeNowtarget.value = 0;
changeallmessage()
}
// console.log("?????",typeNowtarget.value)
}
)
const zeroIndex = ref(-1)
const emit = defineEmits(['back', 'cleanmain', `canback`])
const savetopindex = ref(0)
const removeTimers = new Map<number, ReturnType<typeof setTimeout>>();
onBeforeUnmount(() => {
for (const t of removeTimers.values()) {
clearTimeout(t)
}
removeTimers.clear()
})
watch(
() => props.propsmove,
() => {
if (movetype.value != -1) {
if (openrizhi.value) {
switch (props.propsmove) {
case 0:
break;
case 1:
if (typeNow.value == 3) {
if (ruletarget.value < 4) {
ruletarget.value++
}
} else {
if (ruletarget.value < 6) {
ruletarget.value++
}
}
break;
case 2:
break;
case 3:
if (ruletarget.value) {
ruletarget.value--
}
break;
case 4:
if (typeNow.value == 1) {
if (ruletarget.value < 4) {
changetype(dianrizhi.value[ruletarget.value].type, ruletarget.value)
} else {
nextpage(ruletarget.value - dianrizhi.value.length)
}
} else if (typeNow.value == 2) {
if (ruletarget.value < 4) {
changetype(shuirizhi.value[ruletarget.value].type, ruletarget.value)
} else {
nextpage(ruletarget.value - shuirizhi.value.length)
}
}else if (typeNow.value == 3) {
if (ruletarget.value < 2) {
changetype(wenrizhi.value[ruletarget.value].type, ruletarget.value)
} else {
nextpage(ruletarget.value - wenrizhi.value.length)
}
}
break;
case 5:
closeall()
default:
}
return
}
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 < allArray.value.length - 1) {
zeroIndex.value++
typeNowtarget.value = zeroIndex.value;
scrollLeft.value = zeroIndex.value * 130
changeallmessage()
}
break;
case 2:
if (typeNow.value) {
savetopindex.value = zeroIndex.value;
movetype.value = 1
zeroIndex.value = 0
} else {
savetopindex.value = zeroIndex.value;
movetype.value = 2
zeroIndex.value = 0
}
break;
case 3:
if (zeroIndex.value) {
zeroIndex.value--
typeNowtarget.value = zeroIndex.value;
scrollLeft.value = zeroIndex.value * 130
changeallmessage()
} else {
movetype.value = -1
zeroIndex.value = -1
emit("back")
}
break;
case 4:
typeNowtarget.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
typeNowtarget.value = savetopindex.value;
}
break;
case 1:
zeroIndex.value = 0
movetype.value = 2
break;
case 2:
if (typeNow.value != 3) {
if (zeroIndex.value < 2) {
zeroIndex.value++
}
} else {
if (zeroIndex.value < 1) {
zeroIndex.value++
}
}
break;
case 3:
// movetype.value = -1
// zeroIndex.value = -1
// emit("back")
break;
case 4:
if (typeNow.value != 3) {
if (!zeroIndex.value) {
openqingling.value = true;
emit("canback", true)
} else if (zeroIndex.value == 1) {
openchaobiao.value = true
emit("canback", true)
} else {
getrulevalue()
emit("canback", true)
}
} else {
if (!zeroIndex.value) {
openchaobiao.value = true;
emit("canback", true)
} else if (zeroIndex.value == 1) {
getrulevalue()
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
typeNowtarget.value = savetopindex.value;
}
break;
case 1:
break;
case 2:
if (typeNow.value != 3) {
if (zeroIndex.value < 1) {
zeroIndex.value++
}
} else {
}
break;
case 3:
if (typeNow.value) {
zeroIndex.value = 0
movetype.value = 1
}
break;
case 4:
if (typeNow.value != 3) {
if (!typeNow.value && !zeroIndex.value) {
uni.navigateTo({
url: "/pages/watch/full"
})
return
}
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)
}
}
else {
openbaoxiu.value = true;
emit("canback", true)
}
break;
default:
}
break;
}
}
}
)
const typeNow = ref(-1);
const typeNowtarget = 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 openrizhi = ref(false);
const rizhivalue = ref({
pageNo: 1,
pageSize: 8,
cid: 0,
type: "",
sn: ""
})
const relrule = ref([]);
const getrulevalue = () => {
rizhivalue.value.pageNo = 1;
relrule.value = []
ruletarget.value = 0;
ruletype.value = 0;
if (typeNow.value == 1) {
rizhivalue.value.cid = indexmessage.value.cid;
rizhivalue.value.type = dianrizhi.value[0].type;
electricityMeterListArray(rizhivalue.value).then((element : any) => {
if (element.code == 200) {
relrule.value = element.result.records;
// console.log("????",relrule.value)
openrizhi.value = true
}
})
}
if (typeNow.value == 2) {
rizhivalue.value.cid = watermessage.value.cid;
rizhivalue.value.type = shuirizhi.value[0].type;
electricityMeterListArray(rizhivalue.value).then((element : any) => {
if (element.code == 200) {
relrule.value = element.result.records;
// console.log("????111",relrule.value)
openrizhi.value = true
}
})
}
if (typeNow.value == 3) {
rizhivalue.value.sn = tempmessage.value.sn;
rizhivalue.value.type = '0';
ruletype.value = 3
humidDevicejgList(rizhivalue.value).then((element : any) => {
if (element.code == 200) {
relrule.value = element.result.records
// console.log("aaaa",relrule.value)
openrizhi.value = true
}
})
}
}
const ruletarget = ref(0);
const ruletype = ref(0);
const changetype = (type : string, index : number) => {
if (rizhivalue.value.type != type) {
if (typeNow.value == 3) {
ruletarget.value = index
rizhivalue.value.pageNo = 1;
relrule.value = [];
rizhivalue.value.type = type;
if (type == '0') {
humidDevicejgList(rizhivalue.value).then((element : any) => {
if (element.code == 200) {
relrule.value = element.result.records
}
})
} else {
humidDevicejgwarn(rizhivalue.value).then((element : any) => {
if (element.code == 200) {
relrule.value = element.result.records
console.log("aaaa", relrule.value)
}
})
}
return
}
if (index > 1) {
ruletype.value = 1
} else {
ruletype.value = 0
}
ruletarget.value = index
rizhivalue.value.pageNo = 1;
relrule.value = [];
rizhivalue.value.type = type;
electricityMeterListArray(rizhivalue.value).then((element : any) => {
if (element.code == 200) {
relrule.value = element.result.records
}
})
}
}
const nextpage = (index : number) => {
if (typeNow.value == 3) {
ruletarget.value = index + 2;
if (index) {
if (relrule.value.length == 8) {
rizhivalue.value.pageNo++
if (rizhivalue.value.type == '0') {
humidDevicejgList(rizhivalue.value).then((element : any) => {
if (element.code == 200) {
relrule.value = element.result.records
}
})
} else {
humidDevicejgwarn(rizhivalue.value).then((element : any) => {
if (element.code == 200) {
relrule.value = element.result.records
console.log("aaaa", relrule.value)
}
})
}
}
} else {
if (rizhivalue.value.pageNo > 1) {
rizhivalue.value.pageNo--
relrule.value = []
if (rizhivalue.value.type == '0') {
humidDevicejgList(rizhivalue.value).then((element : any) => {
if (element.code == 200) {
relrule.value = element.result.records
}
})
} else {
humidDevicejgwarn(rizhivalue.value).then((element : any) => {
if (element.code == 200) {
relrule.value = element.result.records
}
})
}
}
}
return
}
ruletarget.value = index + dianrizhi.value.length
if (index) {
if (relrule.value.length == 8) {
rizhivalue.value.pageNo++
electricityMeterListArray(rizhivalue.value).then((element : any) => {
if (element.code == 200) {
relrule.value = element.result.records
}
})
}
} else {
if (rizhivalue.value.pageNo > 1) {
rizhivalue.value.pageNo--
relrule.value = []
electricityMeterListArray(rizhivalue.value).then((element : any) => {
if (element.code == 200) {
relrule.value = element.result.records
}
})
}
}
}
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)
})
} else if (typeNow.value == 3) {
updateDeviceRealTime(tempmessage.value.sn).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)
})
} else if (typeNow.value == 3) {
humidDevicebaoxiu(tempmessage.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 == 0) {
cameraInfobaoxiu(tempmessage.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;
openrizhi.value = false;
buttonposition.value = false;
emit("canback", false)
}
const clickLeftMenu = (index : number) => {
zeroIndex.value = index;
clean();
movetype.value = 1;
if (typeNow.value != 3) {
if (movetype.value === 1 && !index) {
openqingling.value = true;
emit("canback", true)
} else if (index == 1) {
openchaobiao.value = true;
emit("canback", true)
} else if (index == 2) {
// openrizhi.value = true;
getrulevalue()
emit("canback", true)
}
} else {
if (!index) {
openchaobiao.value = true;
emit("canback", true)
} else if (index == 1) {
// openrizhi.value = true;
getrulevalue()
emit("canback", true)
}
}
}
const clickRightMenu = (index : number) => {
if (!typeNow.value && !index) {
uni.navigateTo({
url: "/pages/watch/full"
})
return
}
zeroIndex.value = index;
clean();
movetype.value = 2;
if (typeNow.value != 3) {
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)
}
} 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 wenduleftArray = ref([
genPaths(
'/static/index/newindex/leftmenu',
'read',
8, // 张数
'png',
1, // 起始索引
false // 不补零
),
genPaths(
'/static/index/newindex/leftmenu',
'Log',
10, // 张数
'png',
0, // 起始索引
false // 不补零
)],
)
const wendurightArray = ref([
genPaths(
'/static/index/newindex/rightmenu',
'service',
5, // 张数
'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 shexiangbuttonName = ref(["预览", "报修"])
const waterbuttonName = ref(['清零', "抄表", "日志", "开阀", "关阀", "报修"])
const wendubuttonName = 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);
//取小数点前后
function splitParts(num) {
const s = String(num);
if (!s.includes('.')) return { intPart: s, fracDigits: '' }; // 没有小数点
const [intPart, fracDigits] = s.split('.');
return { intPart, fracDigits };
}
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 startValue = 0
let targetValue = 0
let startTime = 0
let duration = 300
let animating = false
// 兼容处理performance.now() 不存在时用 Date.now()
function nowTime() {
return (typeof performance !== 'undefined' && performance.now)
? performance.now()
: Date.now()
}
function rollTo(target) {
animating = false // 立即停止上一个动画
startValue = randomValue.value
targetValue = target
startTime = nowTime()
duration = 300
animating = true
requestAnimationFrameCompat(animate)
}
function animate() {
if (!animating) return
const now = nowTime()
const elapsed = now - startTime
let progress = elapsed / duration
if (progress > 1) progress = 1
// 缓动函数 easeOutCubic
const eased = 1 - Math.pow(1 - progress, 3)
randomValue.value = Number((startValue + (targetValue - startValue) * eased).toFixed(2))
if (progress < 1) {
requestAnimationFrameCompat(animate)
} else {
animating = false
}
}
// 通用 requestAnimationFrame 兼容
function requestAnimationFrameCompat(cb) {
if (typeof requestAnimationFrame !== 'undefined') {
requestAnimationFrame(cb)
} else {
// UniApp 里一般没有 raf用 setTimeout 模拟
setTimeout(cb, 16) // 约 60fps
}
}
const indexmessage = ref({
eleValue: "",
address: "",
readTime: "",
relayState: `0`,
cid: 0,
id: 0,
})
const watermessage = ref({
waterValue: "",
address: "",
readTime: "",
relayState: `0`,
cid: 0,
id: 0,
})
const tempmessage = ref({
temperature: "",
humidity: "",
maintainStatus: "",
sn: "",
reportingTime: "",
id: 0,
})
onMounted(() => {
name.value = uni.getStorageSync('realname')
typeNow.value = 0;
photoplay.value = true;
init();
yulan();
})
const changeallmessage = () => {
uni.$emit('smallmonitor:isshow', false)
typeNow.value = allArray.value[typeNowtarget.value].typeNumber;
if (typeNow.value === 1) {
indexmessage.value = allArray.value[typeNowtarget.value]
const firstTarget = indexmessage.value.eleValue;
if (indexmessage.value.relayState === '1') {
rightArray.value = [mobanrightArray.value[1], mobanrightArray.value[2]]
} else {
rightArray.value = [mobanrightArray.value[0], mobanrightArray.value[2]]
}
rollTo(Number(firstTarget))
} else if (typeNow.value === 2) {
watermessage.value = allArray.value[typeNowtarget.value]
const secondTarget = watermessage.value.waterValue
if (watermessage.value.relayState === '1') {
waterrightArray.value = [mobanrightArray.value[1], mobanrightArray.value[2]]
} else {
waterrightArray.value = [mobanrightArray.value[0], mobanrightArray.value[2]]
}
rollTo(Number(secondTarget))
} else if (typeNow.value === 3) {
tempmessage.value = allArray.value[typeNowtarget.value]
const thirdTarget = tempmessage.value.temperature
rollTo(Number(thirdTarget))
}
else if (!typeNow.value) {
rightmessage.value = allArray.value[typeNowtarget.value]
rightArray.value = [mobanrightArray.value[0], mobanrightArray.value[2]]
}
}
const rightmessage = ref({
deviceName: "",
deviceStatus: "1",
nuId: "",
nuName: "",
sn: "",
reportingTime: "",
id: 0,
// maintainStatus: "",
});
const allArray = ref([]);
const yulan = () => {
// console.log("?????")
setTimeout(() => {
typeNowtarget.value = 0
changeallmessage()
}, 500)
}
const init = () => {
allArray.value = [];
// console.log("????", uni.getStorageSync('serverUrl'), uni.getStorageSync('nuId'))
electricityMeterlist().then((res : any) => {
// console.log("!!!", res.result)
if (res.result.cameraInfoEntityList.length && res.result.cameraInfoEntityList != null) {
res.result.cameraInfoEntityList.forEach((element : any, index : number) => {
element.typeNumber = 0
element.lookName = "摄像头" + (index+1) ;
element.donghuapian = typeArray.value[0].url
allArray.value.push(element)
})
}
if (res.result.electricityMeterEntityList.length && res.result.electricityMeterEntityList != null) {
res.result.electricityMeterEntityList.forEach((element : any, index : number) => {
element.typeNumber = 1
element.lookName = "电表" + (index+1)
element.donghuapian = typeArray.value[1].url
allArray.value.push(element)
})
}
if (res.result.waterMeterEntityList.length && res.result.waterMeterEntityList != null) {
res.result.waterMeterEntityList.forEach((element : any, index : number) => {
element.typeNumber = 2
element.lookName = "水表" + (index+1)
element.donghuapian = typeArray.value[2].url
allArray.value.push(element)
})
}
if (res.result.humidDeviceEntityList.length && res.result.humidDeviceEntityList != null) {
res.result.humidDeviceEntityList.forEach((element : any, index : number) => {
element.typeNumber = 3
element.lookName = "温度计" + (index+1)
element.donghuapian = typeArray.value[3].url
allArray.value.push(element)
})
}
// 重新刷新动画
let donghua = typeNowtarget.value;
typeNowtarget.value = -1;
setTimeout(()=>{
typeNowtarget.value = donghua
},500)
// rightmessage.value = res.result.cameraInfoEntityList[0]
// //温度计
// tempmessage.value = res.result.humidDeviceEntityList[0];
// // 这个是电表
// indexmessage.value = res.result.electricityMeterEntityList[0]
// // 这个是水表
// watermessage.value = res.result.waterMeterEntityList[0]
})
}
const lanjie = ref(false);
const clean = () => {
if (movetype.value == -1) {
lanjie.value = true;
emit("cleanmain")
}
}
</script>
<style scoped lang="less">
.index-content-other {
width: calc(100% - 260rpx);
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: 5rpx;
font-size: 25rpx;
margin-left: 5rpx;
}
}
}
.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: flex-start;
.font-top {
margin-left: 5rpx;
}
.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: 500rpx;
height: 500rpx;
margin: 50rpx 0;
}
.big-img-shexiang {
width: 500rpx;
height: 550rpx;
margin-bottom: 35.5rpx;
}
.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;
}
.status-button {
color: #fff;
width: 120rpx;
height: 50rpx;
border-radius: 30rpx;
display: flex;
justify-content: center;
align-items: center;
background-color: #47ADF5;
}
.bottom-father {
width: 100%;
padding-left: 160rpx;
padding-top: 20rpx;
.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: 250rpx;
z-index: 3;
font-size: 35rpx;
font-weight: 600;
}
.water-donghua-number {
position: absolute;
right: 960rpx;
top: 265rpx;
z-index: 3;
font-size: 32rpx;
font-weight: 600;
}
.rizhi-box {
position: absolute;
left: 66%;
top: 65%;
transform: translate(-66%, -65%);
width: 1350rpx;
height: 900rpx;
border-radius: 30rpx;
background-color: #fff;
display: flex;
flex-direction: column;
// justify-content: space-between;
align-items: space-between;
z-index: 1;
// padding: 0 10%;
padding: 50rpx;
z-index: 999;
}
/* 拟态框 固定尺寸 + 阴影样式 + 相对定位于 wrapper */
.neuro-box {
position: absolute;
left: 550rpx;
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: 550rpx;
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;
}
.zhongjian-shu {
background-color: #E1E4E6;
width: 3rpx;
height: 70%;
margin: auto 70rpx;
}
.wendu-juzhong {
position: absolute;
top: 255rpx;
right: 875rpx;
width: 270rpx;
height: 270rpx;
z-index: 1;
display: flex;
align-items: flex-end;
flex-direction: column;
.wendu-top {
display: flex;
align-items: center;
justify-content: flex-end;
height: 140rpx;
// background-color: red;
width: 100%;
.wendu-top-left {
font-size: 110rpx;
font-weight: 600;
}
.wendu-top-right {
font-size: 45rpx;
font-weight: 600;
// height: 100%;
width: 80rpx;
}
}
.wendu-heng {
width: 80%;
height: 2rpx;
margin: 10rpx auto;
margin-top: 0;
background-color: #333333;
}
.wendu-bottom {
width: 100%;
font-size: 45rpx;
font-weight: 600;
padding-right: 50rpx;
display: flex;
justify-content: flex-end;
}
}
.gray-bgc {
background-color: #E8E9ED;
padding: 10rpx 30rpx;
font-size: 30rpx;
border-radius: 15rpx;
margin-top: 15rpx;
}
.rizhi-father {
height: 80rpx;
display: flex;
.rizhi-card {
display: flex;
justify-content: center;
align-items: center;
// padding: 0 10rpx;
border-radius: 40rpx;
background-color: #F5F5F6;
margin-right: 20rpx;
padding: 0 30rpx;
height: 70rpx;
.rizhi-card-font {
font-size: 27rpx;
margin-left: 5rpx;
}
.rizhi-card-img {
width: 38rpx;
height: 38rpx;
}
}
.rizhi-card-right {
display: flex;
justify-content: center;
align-items: center;
// padding: 0 10rpx;
border-radius: 50%;
background-color: #F5F5F6;
margin-right: 20rpx;
// padding: 0 30rpx;
height: 70rpx;
width: 70rpx;
.rizhi-card-img {
width: 38rpx;
height: 38rpx;
}
}
}
.rizhi-title {
width: 100%;
display: flex;
justify-content: space-between;
}
.rizhi-rule {
width: 100%;
height: 700rpx;
margin-top: 30rpx;
background-color: #F5F5F6;
border-radius: 30rpx;
.rizhi-rule-title {
width: 100%;
height: 90rpx;
display: flex;
align-items: center;
font-weight: 600;
.rizhi-rule-title-kuai {
height: 120rpx;
display: flex;
justify-content: center;
align-items: center;
}
}
.rizhi-rule-kuai {
width: 100%;
height: 73.5rpx;
display: flex;
align-items: center;
.rizhi-rule-title-kuai {
height: 72.5rpx;
display: flex;
justify-content: center;
align-items: center;
}
}
}
.nomessage{
width: 100%;
height: 600rpx;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
.nomessage-img{
height: 400rpx;
width: 400rpx;
margin-top: -100rpx;
margin-bottom: -50rpx;
}
}
</style>