11111
|
|
@ -1,16 +1,26 @@
|
||||||
<template>
|
<template>
|
||||||
<view class="index-content-other" v-show="isShow" :style="transition?{opacity: `1`}:{opacity: `0`}">
|
<view class="index-content-other" v-show="isShow" :style="transition?{opacity: `1`}:{opacity: `0`}">
|
||||||
<view class="index-content-right">
|
<view class="index-content-right">
|
||||||
<view style="display: flex;">
|
<view style="display: flex;position: relative;margin-left: -30rpx;">
|
||||||
<view v-for="(item,index) in tabsArray" :key="index" class="tab" @click="clicktab(index)">
|
<view v-for="(item,index) in tabsArray" :key="index" class="tab" @click="clicktab(index)">
|
||||||
<view :style="tabnumber===index?{fontWeight:800}:{}" style="z-index: 1;">
|
<view :style="tabnumber===index?{fontWeight:800}:{}" style="z-index: 1;">
|
||||||
{{item}}
|
{{item}}
|
||||||
</view>
|
</view>
|
||||||
<view class="tab-heng" v-show="tabnumber===index"></view>
|
<view class="tab-heng" v-show="tabnumber===index"></view>
|
||||||
</view>
|
</view>
|
||||||
|
<view class="right-title-father">
|
||||||
|
<view style="margin-right: 20rpx;">
|
||||||
|
长春市朝阳区久泰开运养老服务有限公司
|
||||||
|
</view>
|
||||||
|
<!-- <view class="index-title-left-font">
|
||||||
|
{{name}}
|
||||||
|
</view>
|
||||||
|
<image class="index-title-left-img" src="/static/index/customer.png" /> -->
|
||||||
|
|
||||||
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<scroll-view scroll-y style="height: calc(100% - 105rpx);" :show-scrollbar="false">
|
<scroll-view scroll-y style="height: calc(100% - 10rpx);" :show-scrollbar="false">
|
||||||
<view class="scroll-box">
|
<view class="scroll-box">
|
||||||
<view v-for="(item0,index0) in changearray" :key="index0">
|
<view v-for="(item0,index0) in changearray" :key="index0">
|
||||||
<view class="card" v-if="!item0.cardtype"
|
<view class="card" v-if="!item0.cardtype"
|
||||||
|
|
@ -25,9 +35,12 @@
|
||||||
<view class="line-margin">
|
<view class="line-margin">
|
||||||
女
|
女
|
||||||
</view>
|
</view>
|
||||||
<view class="">
|
<view>
|
||||||
80岁
|
80岁
|
||||||
</view>
|
</view>
|
||||||
|
<view style="margin-left: 20rpx;">
|
||||||
|
2025.01.01
|
||||||
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="top-font-line">
|
<view class="top-font-line">
|
||||||
<view class="font-gray">
|
<view class="font-gray">
|
||||||
|
|
@ -35,37 +48,42 @@
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="right-spec">
|
<view class="right-spec">
|
||||||
<view class="blue-button">
|
|
||||||
服务指令
|
护理单元
|
||||||
</view>
|
|
||||||
<view class="font-gray-right">
|
|
||||||
2025.01.01
|
|
||||||
</view>
|
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="bottom-balls">
|
<view class="bottom-balls">
|
||||||
|
|
||||||
<view v-for="(item1,index1) in bottomballarray" :key="index1"
|
<view v-for="(item1,index1) in bottomballarray" :key="index1"
|
||||||
class="one-ball-father">
|
class="one-ball-father">
|
||||||
<image class="one-ball" :src="item1" />
|
{{item1}}
|
||||||
|
<!-- <image class="one-ball" :src="item1" /> -->
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
<view class="topright-ball">
|
||||||
|
|
||||||
|
<image class="ball-righttop"
|
||||||
|
:src="`/static/index/video/videobottom/${item0.states===1?1:0}.png`" />
|
||||||
|
</view>
|
||||||
<view class="right-balls">
|
<view class="right-balls">
|
||||||
<view v-for="(item1,index1) in righttoparray" :key="index1"
|
<view v-for="(item1,index1) in righttoparray" :key="index1" class="blue-ball-father"
|
||||||
:class="cardarray[index0]?.buttontarget[index1]?`blue-ball-father-target`:`blue-ball-father`"
|
|
||||||
@click="cardarray[index0].buttontarget[index1] = !cardarray[index0].buttontarget[index1]">
|
@click="cardarray[index0].buttontarget[index1] = !cardarray[index0].buttontarget[index1]">
|
||||||
<image class="blue-ball"
|
<image class="blue-ball"
|
||||||
:src="cardarray[index0]?.buttontarget[index1]? item1.targeturl : item1.url" />
|
:src="cardarray[index0]?.buttontarget[index1]? item1.targeturl : item1.url" />
|
||||||
|
<image v-show="cardarray[index0]?.buttontarget[index1]"
|
||||||
|
style="position: absolute;bottom: 0;left: 50%;transform: translateX(-50%);width: 100%;height: 80%;"
|
||||||
|
src="/static/index/video/videoright/guang.png" />
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<image class="video-img" src="/static/index/bed.png" />
|
<image class="video-img" src="/static/index/bed.png" />
|
||||||
<view class="video-bottom">
|
<view class="video-bottom">
|
||||||
<view class="font-bottom-weight">
|
<view class="blue-button">
|
||||||
护理单元
|
服务指令
|
||||||
</view>
|
</view>
|
||||||
<view class="bottom-shu">|</view>
|
|
||||||
<view class="">
|
<view class="">
|
||||||
NUID:2506000001
|
NUID:2506000001
|
||||||
</view>
|
</view>
|
||||||
|
|
@ -76,11 +94,13 @@
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="card-right">
|
<view class="card-right">
|
||||||
|
<view class="split-line-white-sec"></view>
|
||||||
<view class="right-title">
|
<view class="right-title">
|
||||||
|
|
||||||
<image style="width: 100%;height: 100%;"
|
<!-- <image style="width: 100%;height: 100%;"
|
||||||
:src="`/static/index/video/videotopright/${item0.states}${item0.states}.png`" />
|
:src="`/static/index/video/videotopright/${item0.states}${item0.states}.png`" /> -->
|
||||||
<view class="right-other">
|
<view class="right-other"
|
||||||
|
:style="`background: ${rightballarray[item0.states].bgc};`">
|
||||||
<image class="other-class" :src="rightballarray[item0.states].url" />
|
<image class="other-class" :src="rightballarray[item0.states].url" />
|
||||||
<view class="other-font">
|
<view class="other-font">
|
||||||
{{rightballarray[item0.states].name}}
|
{{rightballarray[item0.states].name}}
|
||||||
|
|
@ -89,7 +109,7 @@
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view v-if="item0.states==1 || !item0.states" style="width: 100%;position: relative;">
|
<view v-if="item0.states==1 || !item0.states" style="width: 100%;position: relative;">
|
||||||
<view class="right-time">
|
<!-- <view class="right-time">
|
||||||
<view class="right-laba">
|
<view class="right-laba">
|
||||||
<image class="laba-img" src="/static/index/video/laba.png" />
|
<image class="laba-img" src="/static/index/video/laba.png" />
|
||||||
</view>
|
</view>
|
||||||
|
|
@ -99,23 +119,42 @@
|
||||||
<view class="right-laba">
|
<view class="right-laba">
|
||||||
<image class="laba-img" src="/static/index/video/txt.png" />
|
<image class="laba-img" src="/static/index/video/txt.png" />
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view> -->
|
||||||
<view class="time">
|
<view class="time">
|
||||||
<view class="time-left">
|
<view class="time-left">
|
||||||
<view style="width: 100%;display: flex;justify-content: flex-end;">
|
|
||||||
|
<view class="">
|
||||||
|
10:00~10:10
|
||||||
|
</view>
|
||||||
|
<!-- <view style="width: 100%;display: flex;justify-content: flex-end;">
|
||||||
<view class="time-right">
|
<view class="time-right">
|
||||||
待执行
|
待执行
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view> -->
|
||||||
<view class="">
|
|
||||||
10:00-10:10
|
|
||||||
</view>
|
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<image class="time-img" src="/static/index/teeth.png" @click="jumptodanyuan" />
|
<view
|
||||||
<view class="time-weight">
|
style="width: 100%;display: flex;align-items: center;flex-direction: column;position: relative;">
|
||||||
准备洁具(口腔)
|
<view class="time-right">
|
||||||
|
待执行
|
||||||
|
</view>
|
||||||
|
<image class="time-img" src="/static/index/teeth.png" @click="jumptodanyuan" />
|
||||||
|
<view class="small-button">
|
||||||
|
<view class="gray-ball">
|
||||||
|
<image class="laba-img" src="/static/index/video/laba.png" />
|
||||||
|
</view>
|
||||||
|
<view class="gray-ball">
|
||||||
|
<image class="laba-img" src="/static/index/video/video.png" />
|
||||||
|
</view>
|
||||||
|
<view class="gray-ball">
|
||||||
|
<image class="laba-img" src="/static/index/video/txt.png" />
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="time-weight">
|
||||||
|
准备洁具(口腔)
|
||||||
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view class="time-people-two" style="margin-top: 20rpx;">
|
<view class="time-people-two" style="margin-top: 20rpx;">
|
||||||
<image class="time-people-img" src="/static/index/cardicons/zhixing.png" />
|
<image class="time-people-img" src="/static/index/cardicons/zhixing.png" />
|
||||||
<text class="time-people-font">
|
<text class="time-people-font">
|
||||||
|
|
@ -155,7 +194,9 @@
|
||||||
style="width: 70rpx;height: 80rpx;" />
|
style="width: 70rpx;height: 80rpx;" />
|
||||||
<view style="margin-left: 10rpx;width: 150rpx;">
|
<view style="margin-left: 10rpx;width: 150rpx;">
|
||||||
<!-- <view class=""> -->
|
<!-- <view class=""> -->
|
||||||
<view style="font-size: 35rpx;font-weight: 600;margin-top:20rpx;margin-left: 10rpx;">欧阳三四</view>
|
<view
|
||||||
|
style="font-size: 35rpx;font-weight: 600;margin-top:20rpx;margin-left: 10rpx;">
|
||||||
|
欧阳三四</view>
|
||||||
<!-- </view> -->
|
<!-- </view> -->
|
||||||
<!-- <view class="top-font-line">
|
<!-- <view class="top-font-line">
|
||||||
<view class="font-gray">
|
<view class="font-gray">
|
||||||
|
|
@ -163,14 +204,15 @@
|
||||||
</view>
|
</view>
|
||||||
</view> -->
|
</view> -->
|
||||||
</view>
|
</view>
|
||||||
<view style="display: flex;align-items: center;margin-top: -10rpx;">
|
<view
|
||||||
|
style="display: flex;align-items: center;position: absolute;top: 50%;transform: translateY(-50%);right: 0;">
|
||||||
<view
|
<view
|
||||||
style="margin-left: 20rpx;display: flex;flex-direction: column;align-items: center;position: relative;"
|
style="margin:0 15rpx;display: flex;flex-direction: column;align-items: center;position: relative;"
|
||||||
v-for="(item,index2) in kufangarray" :key="index2">
|
v-for="(item,index2) in kufangarray" :key="index2">
|
||||||
<image class="kufang-img"
|
<image class="kufang-img"
|
||||||
:src="item0.movestates===index2 ? item.targeturl : item.url" />
|
:src="item0.movestates===index2 ? item.targeturl : item.url" />
|
||||||
<view style="font-size: 25rpx;"
|
<view style="font-size: 20rpx;"
|
||||||
:style="item0.movestates===index2 ? {color:`#00B4FF`} :{} ">
|
:style="item0.movestates===index2 ? {color:`#0096ff`} :{} ">
|
||||||
{{ item.name }}
|
{{ item.name }}
|
||||||
</view>
|
</view>
|
||||||
<!-- <view class="tab-heng" v-show="item0.movestates===index2"></view> -->
|
<!-- <view class="tab-heng" v-show="item0.movestates===index2"></view> -->
|
||||||
|
|
@ -183,16 +225,24 @@
|
||||||
<view class="bottom-balls">
|
<view class="bottom-balls">
|
||||||
<view v-for="(item1,index1) in bottomballarray" :key="index1"
|
<view v-for="(item1,index1) in bottomballarray" :key="index1"
|
||||||
class="one-ball-father">
|
class="one-ball-father">
|
||||||
<image class="one-ball" :src="item1" />
|
<!-- <image class="one-ball" :src="item1" /> -->
|
||||||
|
{{item1}}
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
<view class="topright-ball">
|
||||||
|
|
||||||
|
<image class="ball-righttop"
|
||||||
|
:src="`/static/index/video/videobottom/${item0.states===1?1:0}.png`" />
|
||||||
|
</view>
|
||||||
<view class="right-balls">
|
<view class="right-balls">
|
||||||
<view v-for="(item1,index1) in righttoparray" :key="index1"
|
<view v-for="(item1,index1) in righttoparray" :key="index1"
|
||||||
:class="cardarray[index0]?.buttontarget[index1]?`blue-ball-father-target`:`blue-ball-father`"
|
:class="cardarray[index0]?.buttontarget[index1]?`blue-ball-father-target`:`blue-ball-father`"
|
||||||
@click="cardarray[index0].buttontarget[index1] = !cardarray[index0].buttontarget[index1]">
|
@click="cardarray[index0].buttontarget[index1] = !cardarray[index0].buttontarget[index1]">
|
||||||
<image class="blue-ball"
|
<image class="blue-ball"
|
||||||
:src="cardarray[index0]?.buttontarget[index1]? item1.targeturl : item1.url" />
|
:src="cardarray[index0]?.buttontarget[index1]? item1.targeturl : item1.url" />
|
||||||
|
<image v-show="cardarray[index0]?.buttontarget[index1]"
|
||||||
|
style="position: absolute;bottom: 0;left: 50%;transform: translateX(-50%);width: 100%;height: 80%;"
|
||||||
|
src="/static/index/video/videoright/guang.png" />
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<image class="video-img" src="/static/index/bed.png" />
|
<image class="video-img" src="/static/index/bed.png" />
|
||||||
|
|
@ -211,19 +261,28 @@
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="card-right">
|
<view class="card-right">
|
||||||
|
<view class="split-line-white-sec"></view>
|
||||||
<view class="right-title">
|
<view class="right-title">
|
||||||
<image style="width: 100%;height: 100%;"
|
<!-- <image style="width: 100%;height: 100%;"
|
||||||
:src="`/static/index/video/videotopright/${item0.states + 4}${item0.states + 4}.png`" />
|
:src="`/static/index/video/videotopright/${item0.states + 4}${item0.states + 4}.png`" />
|
||||||
<view class="right-other">
|
<view class="right-other">
|
||||||
<image class="other-class" :src="rightballarrayspec[item0.states].url" />
|
<image class="other-class" :src="rightballarrayspec[item0.states].url" />
|
||||||
<view class="other-font">
|
<view class="other-font">
|
||||||
{{rightballarrayspec[item0.states].name}}
|
{{rightballarrayspec[item0.states].name}}
|
||||||
</view>
|
</view>
|
||||||
|
</view> -->
|
||||||
|
<view class="right-other"
|
||||||
|
:style="`background: ${rightballarrayspec[item0.states].bgc};`">
|
||||||
|
<image class="other-class" :src="rightballarrayspec[item0.states].url" />
|
||||||
|
<view class="other-font">
|
||||||
|
{{rightballarrayspec[item0.states].name}}
|
||||||
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view v-if=" !item0.states" style="width: 100%;position: relative;">
|
<view v-if=" !item0.states" style="width: 100%;position: relative;">
|
||||||
<view class="right-time">
|
|
||||||
|
<!-- <view class="right-time">
|
||||||
<view class="right-laba">
|
<view class="right-laba">
|
||||||
<image class="laba-img" src="/static/index/video/laba.png" />
|
<image class="laba-img" src="/static/index/video/laba.png" />
|
||||||
</view>
|
</view>
|
||||||
|
|
@ -233,22 +292,39 @@
|
||||||
<view class="right-laba">
|
<view class="right-laba">
|
||||||
<image class="laba-img" src="/static/index/video/txt.png" />
|
<image class="laba-img" src="/static/index/video/txt.png" />
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view> -->
|
||||||
<view class="time">
|
<view class="time">
|
||||||
<view class="time-left">
|
<view class="time-left">
|
||||||
<view style="width: 100%;display: flex;justify-content: flex-end;">
|
<!-- <view style="width: 100%;display: flex;justify-content: flex-end;">
|
||||||
<view class="time-right">
|
<view class="time-right">
|
||||||
待执行
|
待执行
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view> -->
|
||||||
<view class="">
|
<view class="">
|
||||||
10:00-10:10
|
10:00~10:10
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<image class="time-img" src="/static/index/teeth.png" @click="jumptokufang" />
|
<view
|
||||||
<view class="time-weight">
|
style="width: 100%;display: flex;align-items: center;flex-direction: column;position: relative;">
|
||||||
准备洁具(口腔)
|
<view class="time-right">
|
||||||
|
待执行
|
||||||
|
</view>
|
||||||
|
<image class="time-img" src="/static/index/teeth.png" @click="jumptokufang" />
|
||||||
|
<view class="small-button">
|
||||||
|
<view class="gray-ball">
|
||||||
|
<image class="laba-img" src="/static/index/video/laba.png" />
|
||||||
|
</view>
|
||||||
|
<view class="gray-ball">
|
||||||
|
<image class="laba-img" src="/static/index/video/video.png" />
|
||||||
|
</view>
|
||||||
|
<view class="gray-ball">
|
||||||
|
<image class="laba-img" src="/static/index/video/txt.png" />
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="time-weight">
|
||||||
|
准备洁具(口腔)
|
||||||
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="time-people-two" style="margin-top: 20rpx;">
|
<view class="time-people-two" style="margin-top: 20rpx;">
|
||||||
<image class="time-people-img" src="/static/index/cardicons/zhixing.png" />
|
<image class="time-people-img" src="/static/index/cardicons/zhixing.png" />
|
||||||
|
|
@ -296,29 +372,36 @@
|
||||||
const props = defineProps({ isShow: { type: Boolean, required: true } })
|
const props = defineProps({ isShow: { type: Boolean, required: true } })
|
||||||
|
|
||||||
const bottomballarray = ref([
|
const bottomballarray = ref([
|
||||||
"/static/index/video/videobottom/0.png",
|
`清晰度`,
|
||||||
"/static/index/video/videobottom/1.png",
|
`分屏`,
|
||||||
"/static/index/video/videobottom/2.png",
|
`画面旋转`
|
||||||
"/static/index/video/videobottom/3.png",
|
// "/static/index/video/videobottom/0.png",
|
||||||
"/static/index/video/videobottom/4.png"
|
// "/static/index/video/videobottom/1.png",
|
||||||
|
// "/static/index/video/videobottom/2.png",
|
||||||
|
// "/static/index/video/videobottom/3.png",
|
||||||
|
// "/static/index/video/videobottom/4.png"
|
||||||
])
|
])
|
||||||
|
|
||||||
const rightballarray = ref([
|
const rightballarray = ref([
|
||||||
{
|
{
|
||||||
url: `/static/index/video/videotopright/0.png`,
|
url: `/static/index/video/videotopright/0.png`,
|
||||||
name: `入住`
|
name: `入住`,
|
||||||
|
bgc: `linear-gradient(to right,#008AFF,#01BCFF)`
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: `/static/index/video/videotopright/1.png`,
|
url: `/static/index/video/videotopright/1.png`,
|
||||||
name: `预警`
|
name: `预警`,
|
||||||
|
bgc: `linear-gradient(to right,#FF585D ,#FF4F52)`
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: `/static/index/video/videotopright/2.png`,
|
url: `/static/index/video/videotopright/2.png`,
|
||||||
name: `外出`
|
name: `外出`,
|
||||||
|
bgc: `linear-gradient(to right,#709EE2 ,#A0BFEC )`
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: `/static/index/video/videotopright/3.png`,
|
url: `/static/index/video/videotopright/3.png`,
|
||||||
name: `空闲`
|
name: `空闲`,
|
||||||
|
bgc: `linear-gradient(to right,#B7BCD0,#B7BCD0)`
|
||||||
},
|
},
|
||||||
|
|
||||||
])
|
])
|
||||||
|
|
@ -353,11 +436,13 @@
|
||||||
const rightballarrayspec = ref([
|
const rightballarrayspec = ref([
|
||||||
{
|
{
|
||||||
url: `/static/index/video/videotopright/4.png`,
|
url: `/static/index/video/videotopright/4.png`,
|
||||||
name: `启用`
|
name: `启用`,
|
||||||
|
bgc: `linear-gradient(to right,#008AFF,#01BCFF)`
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: `/static/index/video/videotopright/5.png`,
|
url: `/static/index/video/videotopright/5.png`,
|
||||||
name: `停用`
|
name: `停用`,
|
||||||
|
bgc: `linear-gradient(to right,#B7BCD0,#B7BCD0)`
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -462,8 +547,9 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
const name = ref("");
|
||||||
onLoad(() => {
|
onLoad(() => {
|
||||||
// tabnumber.value = 0
|
name.value = uni.getStorageSync('realname')
|
||||||
changearray.value = JSON.parse(JSON.stringify(cardarray.value))
|
changearray.value = JSON.parse(JSON.stringify(cardarray.value))
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
@ -538,30 +624,12 @@
|
||||||
|
|
||||||
.index-content-right {
|
.index-content-right {
|
||||||
height: calc(100% - 30rpx);
|
height: calc(100% - 30rpx);
|
||||||
width: calc(100% - 60rpx);
|
width: 100%;
|
||||||
background-color: rgba(255, 255, 255, 0.4);
|
|
||||||
background-image: url('/static/index/leida/bgc.png');
|
|
||||||
background-position: 30% 70%;
|
|
||||||
border-radius: 50rpx;
|
|
||||||
border: 1rpx solid #fff;
|
|
||||||
// box-shadow: 4rpx 8rpx 16rpx 4rpx rgba(0, 0, 0, 0.3);
|
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
.blue-button {
|
|
||||||
margin-left: 30rpx;
|
|
||||||
width: 170rpx;
|
|
||||||
height: 90rpx;
|
|
||||||
border-radius: 30rpx;
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
color: #fff;
|
|
||||||
font-size: 30rpx;
|
|
||||||
background: linear-gradient(to bottom, #00C9FF, #0076FF);
|
|
||||||
}
|
|
||||||
|
|
||||||
.big-ball {
|
.big-ball {
|
||||||
width: 200rpx;
|
width: 200rpx;
|
||||||
|
|
@ -587,7 +655,7 @@
|
||||||
|
|
||||||
.tab {
|
.tab {
|
||||||
width: 200rpx;
|
width: 200rpx;
|
||||||
height: 100rpx;
|
height: 120rpx;
|
||||||
font-size: 32rpx;
|
font-size: 32rpx;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
|
|
@ -597,7 +665,7 @@
|
||||||
.tab-heng {
|
.tab-heng {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
left: 50%;
|
left: 50%;
|
||||||
bottom: 28rpx;
|
bottom: 35rpx;
|
||||||
transform: translateX(-50%);
|
transform: translateX(-50%);
|
||||||
width: 50rpx;
|
width: 50rpx;
|
||||||
height: 12rpx;
|
height: 12rpx;
|
||||||
|
|
@ -612,15 +680,15 @@
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
|
|
||||||
.card {
|
.card {
|
||||||
margin-left: 30rpx;
|
margin-right: 30rpx;
|
||||||
// margin-top: 5rpx;
|
|
||||||
margin-bottom: 30rpx;
|
margin-bottom: 30rpx;
|
||||||
border: 2rpx solid #fff;
|
border: 2rpx solid #fff;
|
||||||
background: url("/static/index/newpink.png") center/cover, rgba(255, 255, 255, 0.5);
|
background-image: url('/static/index/mountain.png');
|
||||||
background-position: 30% 70%;
|
background-color: rgba(255, 255, 255, 0.6);
|
||||||
width: 1003rpx;
|
background-position: 60% 50%;
|
||||||
height: 590rpx;
|
width: 1045rpx;
|
||||||
border-radius: 20rpx;
|
height: 650rpx;
|
||||||
|
border-radius: 50rpx;
|
||||||
// box-shadow: 2rpx 4rpx 8rpx 2rpx rgba(0, 0, 0, 0.3);
|
// box-shadow: 2rpx 4rpx 8rpx 2rpx rgba(0, 0, 0, 0.3);
|
||||||
display: flex;
|
display: flex;
|
||||||
border-top-right-radius: 40rpx;
|
border-top-right-radius: 40rpx;
|
||||||
|
|
@ -628,7 +696,7 @@
|
||||||
|
|
||||||
.card-left {
|
.card-left {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
width: 65%;
|
width: 68%;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
||||||
.card-left-title {
|
.card-left-title {
|
||||||
|
|
@ -641,10 +709,13 @@
|
||||||
|
|
||||||
.left-view {
|
.left-view {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
margin-top: 20rpx;
|
||||||
|
position: relative;
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
.left-view-img {
|
.left-view-img {
|
||||||
width: 100rpx;
|
width: 85rpx;
|
||||||
height: 100rpx;
|
height: 85rpx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -652,12 +723,13 @@
|
||||||
|
|
||||||
.card-right {
|
.card-right {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
width: 35%;
|
width: 32%;
|
||||||
background-color: rgba(205, 222, 246, 0.6);
|
background-color: rgba(244, 235, 249, 0.3);
|
||||||
position: relative;
|
position: relative;
|
||||||
// border-radius: 20rpx;
|
// border-radius: 20rpx;
|
||||||
border-top-right-radius: 20rpx;
|
border-top-right-radius: 38rpx;
|
||||||
border-bottom-right-radius: 20rpx;
|
border-bottom-right-radius: 38rpx;
|
||||||
|
position: relative;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -665,36 +737,42 @@
|
||||||
.top-font-line {
|
.top-font-line {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
font-size: 23rpx;
|
||||||
|
|
||||||
.line-weight {
|
.line-weight {
|
||||||
font-size: 35rpx;
|
font-size: 35rpx;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
margin-left: 10rpx;
|
margin-left: 20rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
.line-margin {
|
.line-margin {
|
||||||
margin-left: 40rpx;
|
margin-left: 20rpx;
|
||||||
margin-right: 20rpx;
|
margin-right: 20rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
.font-gray {
|
.font-gray {
|
||||||
margin-left: 10rpx;
|
margin-left: 20rpx;
|
||||||
margin-top: 10rpx;
|
// margin-top: 10rpx;
|
||||||
font-size: 25rpx;
|
font-size: 28rpx;
|
||||||
color: #555555;
|
color: #555555;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.blue-button {
|
.blue-button {
|
||||||
width: 140rpx;
|
position: absolute;
|
||||||
|
right: 20rpx;
|
||||||
|
top: -3rpx;
|
||||||
|
// transform: translateY(-50%);
|
||||||
|
width: 130rpx;
|
||||||
height: 50rpx;
|
height: 50rpx;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
font-size: 25rpx;
|
font-size: 25rpx;
|
||||||
background-color: #01B1FC;
|
background: linear-gradient(to bottom, #00C9FF, #0076FF);
|
||||||
border-radius: 20rpx;
|
border-radius: 15rpx;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
margin: 20rpx 10rpx 0 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.font-gray-right {
|
.font-gray-right {
|
||||||
|
|
@ -706,28 +784,33 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.right-spec {
|
.right-spec {
|
||||||
display: flex;
|
margin-top: 68rpx;
|
||||||
flex-direction: column;
|
font-weight: 600;
|
||||||
align-items: flex-end;
|
margin-right: 10rpx;
|
||||||
|
width: 150rpx;
|
||||||
|
// display: flex;
|
||||||
|
// flex-direction: column;
|
||||||
|
// align-items: flex-end;
|
||||||
}
|
}
|
||||||
|
|
||||||
.video-img {
|
.video-img {
|
||||||
// margin-top: 10rpx;
|
// margin-top: 10rpx;
|
||||||
margin-left: 30rpx;
|
margin-left: 110rpx;
|
||||||
width: 520rpx;
|
width: 570rpx;
|
||||||
height: 370rpx;
|
height: 400rpx;
|
||||||
border-radius: 30rpx;
|
border-radius: 30rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
.video-bottom {
|
.video-bottom {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
height: 70rpx;
|
height: 85rpx;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
padding-left: 30rpx;
|
padding-left: 110rpx;
|
||||||
color: #858585;
|
color: #858585;
|
||||||
font-size: 24rpx;
|
font-size: 24rpx;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
.font-bottom-weight {
|
.font-bottom-weight {
|
||||||
font-size: 28rpx;
|
font-size: 28rpx;
|
||||||
|
|
@ -743,33 +826,37 @@
|
||||||
|
|
||||||
.bottom-balls {
|
.bottom-balls {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 110rpx;
|
bottom: 120rpx;
|
||||||
left: 35%;
|
left: 38%;
|
||||||
transform: translateX(-35%);
|
transform: translateX(-35%);
|
||||||
z-index: 999;
|
z-index: 999;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|
||||||
.one-ball-father {
|
.one-ball-father {
|
||||||
width: 50rpx;
|
width: 120rpx;
|
||||||
|
// padding: 5rpx 15rpx;
|
||||||
height: 50rpx;
|
height: 50rpx;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
background-color: rgb(111, 111, 111);
|
// background-color: rgb(111, 111, 111);
|
||||||
border: 2rpx solid #fff;
|
border: 2rpx solid #fff;
|
||||||
margin: 0 18rpx;
|
margin: 0 5rpx;
|
||||||
border-radius: 50%;
|
color: #fff;
|
||||||
|
font-size: 25rpx;
|
||||||
|
border-radius: 10rpx;
|
||||||
|
// border-radius: 50%;
|
||||||
|
|
||||||
.one-ball {
|
// .one-ball {
|
||||||
width: 35rpx;
|
// width: 35rpx;
|
||||||
height: 35rpx;
|
// height: 35rpx;
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.right-balls {
|
.right-balls {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: 0;
|
left: 25rpx;
|
||||||
top: 140rpx;
|
top: 140rpx;
|
||||||
padding-top: 10rpx;
|
padding-top: 10rpx;
|
||||||
z-index: 999;
|
z-index: 999;
|
||||||
|
|
@ -780,34 +867,40 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.blue-ball-father {
|
.blue-ball-father {
|
||||||
width: 65rpx;
|
width: 70rpx;
|
||||||
height: 65rpx;
|
height: 70rpx;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
background-color: #E7ECFA;
|
background-color: #dbe8f9;
|
||||||
border-radius: 20rpx;
|
border-radius: 25rpx;
|
||||||
margin-right: 20rpx;
|
margin-right: 20rpx;
|
||||||
margin-bottom: 5rpx;
|
margin-bottom: 18rpx;
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
// border: 2rpx solid gainsboro;
|
||||||
}
|
}
|
||||||
|
|
||||||
.blue-ball-father-target {
|
.blue-ball-father-target {
|
||||||
width: 65rpx;
|
width: 70rpx;
|
||||||
height: 65rpx;
|
height: 70rpx;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
background-color: rgb(215, 240, 254);
|
background-color: #dbe8f9;
|
||||||
border-radius: 20rpx;
|
border-radius: 25rpx;
|
||||||
margin-right: 20rpx;
|
margin-right: 20rpx;
|
||||||
margin-bottom: 5rpx;
|
margin-bottom: 18rpx;
|
||||||
|
position: relative;
|
||||||
|
overflow: auto;
|
||||||
|
// border: 2rpx solid gainsboro;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.right-title {
|
.right-title {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: -31rpx;
|
right: -50rpx;
|
||||||
top: -33rpx;
|
top: 10rpx;
|
||||||
width: 250rpx;
|
width: 250rpx;
|
||||||
height: 120rpx;
|
height: 120rpx;
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
|
|
@ -820,6 +913,11 @@
|
||||||
transform: translate(-50%, -50%);
|
transform: translate(-50%, -50%);
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
border-top-left-radius: 30rpx;
|
||||||
|
border-bottom-left-radius: 30rpx;
|
||||||
|
width: 150rpx;
|
||||||
|
height: 60rpx;
|
||||||
|
|
||||||
.other-class {
|
.other-class {
|
||||||
width: 35rpx;
|
width: 35rpx;
|
||||||
|
|
@ -835,7 +933,7 @@
|
||||||
|
|
||||||
.time {
|
.time {
|
||||||
display: flex;
|
display: flex;
|
||||||
margin-top: 80rpx;
|
margin-top: 120rpx;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
|
|
||||||
|
|
@ -843,40 +941,31 @@
|
||||||
background: linear-gradient(to bottom, #7080A1, #263556);
|
background: linear-gradient(to bottom, #7080A1, #263556);
|
||||||
-webkit-background-clip: text;
|
-webkit-background-clip: text;
|
||||||
color: transparent;
|
color: transparent;
|
||||||
font-size: 50rpx;
|
font-size: 45rpx;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
// margin-left: 5rpx;
|
// margin-left: 5rpx;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
}
|
}
|
||||||
|
|
||||||
.time-right {
|
|
||||||
width:90rpx;
|
|
||||||
height: 35rpx;
|
|
||||||
display: flex;
|
|
||||||
|
|
||||||
// justify-content: flex-end;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
background-color: #F37B5B;
|
|
||||||
color: #fff;
|
|
||||||
margin-left: 5rpx;
|
|
||||||
border-radius: 10rpx;
|
|
||||||
font-size: 20rpx;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.time-img {
|
.time-img {
|
||||||
width: 240rpx;
|
width: 240rpx;
|
||||||
height: 180rpx;
|
height: 180rpx;
|
||||||
margin-top: 30rpx;
|
margin-bottom: 15rpx;
|
||||||
margin-left: 30rpx;
|
// margin: 0 auto;
|
||||||
margin-bottom: 10rpx;
|
// background: red;
|
||||||
|
// margin-top: 30rpx;
|
||||||
|
// margin-left: 30rpx;
|
||||||
|
// margin-bottom: 10rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
.time-weight {
|
.time-weight {
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
font-size: 32rpx;
|
font-size: 32rpx;
|
||||||
margin-left: 40rpx;
|
margin-top: 25rpx;
|
||||||
|
// margin-left: 40rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
.time-small {
|
.time-small {
|
||||||
|
|
@ -924,11 +1013,7 @@
|
||||||
align-items: center;
|
align-items: center;
|
||||||
margin-bottom: 10rpx;
|
margin-bottom: 10rpx;
|
||||||
|
|
||||||
.laba-img {
|
|
||||||
width: 35rpx;
|
|
||||||
height: 35rpx;
|
|
||||||
margin-left: 10rpx;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -954,8 +1039,8 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.kufang-img {
|
.kufang-img {
|
||||||
width: 35rpx;
|
width: 43rpx;
|
||||||
height: 35rpx;
|
height: 43rpx;
|
||||||
// margin-bottom: 5rpx;
|
// margin-bottom: 5rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -969,4 +1054,96 @@
|
||||||
border-radius: 10rpx;
|
border-radius: 10rpx;
|
||||||
// background: linear-gradient(to right, #0052C2, #00B4FF);
|
// background: linear-gradient(to right, #0052C2, #00B4FF);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.right-title-father {
|
||||||
|
position: absolute;
|
||||||
|
right: 20rpx;
|
||||||
|
height: 100%;
|
||||||
|
top: 0;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
// .index-title-left-img {
|
||||||
|
// width: 65rpx;
|
||||||
|
// height: 65rpx;
|
||||||
|
// margin-right: 20rpx;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// .index-title-left-font {
|
||||||
|
// margin-right: 25rpx;
|
||||||
|
// font-size: 30rpx;
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
.split-line-white-sec {
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
top: 50%;
|
||||||
|
transform: translateY(-50%);
|
||||||
|
width: 2rpx;
|
||||||
|
/* 线条的宽度 */
|
||||||
|
height: 600rpx;
|
||||||
|
z-index: 999;
|
||||||
|
/* 高度占满父容器 */
|
||||||
|
background: linear-gradient(to top, rgba(0, 0, 0, 0) 0%, #fff 50%, rgba(0, 0, 0, 0) 100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.topright-ball {
|
||||||
|
position: absolute;
|
||||||
|
top: 170rpx;
|
||||||
|
right: 50rpx;
|
||||||
|
width: 75rpx;
|
||||||
|
height: 75rpx;
|
||||||
|
border-radius: 50%;
|
||||||
|
background-color: rgba(255, 255, 255, 0.3);
|
||||||
|
z-index: 999;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.ball-righttop {
|
||||||
|
width: 45rpx;
|
||||||
|
height: 45rpx;
|
||||||
|
margin-top: -10rpx;
|
||||||
|
// background: linear-gradient(to right,#008AFF,#01BCFF);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.small-button {
|
||||||
|
width: 70%;
|
||||||
|
height: 70rpx;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
|
||||||
|
.gray-ball {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
background-color: #d8e1f2;
|
||||||
|
width: 60rpx;
|
||||||
|
height: 60rpx;
|
||||||
|
border-radius: 50%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.laba-img {
|
||||||
|
width: 30rpx;
|
||||||
|
height: 30rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.time-right {
|
||||||
|
position: absolute;
|
||||||
|
right: 10rpx;
|
||||||
|
top: 5rpx;
|
||||||
|
width: 90rpx;
|
||||||
|
height: 35rpx;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
background-color: #FFD5AC;
|
||||||
|
color: #FF5834;
|
||||||
|
border: 2rpx solid #FF5834;
|
||||||
|
margin-left: 5rpx;
|
||||||
|
border-radius: 10rpx;
|
||||||
|
font-size: 20rpx;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
@ -1,129 +0,0 @@
|
||||||
<template>
|
|
||||||
<view class="container">
|
|
||||||
<scroll-view id="scrollContainer" ref="scrollViewRef" class="scroll-view" scroll-y :scroll-top="scrollTop"
|
|
||||||
@scroll="onScroll">
|
|
||||||
<view v-for="(item, index) in items" :key="index" class="item" :class="{ active: index === activeIndex }"
|
|
||||||
:style="{ marginLeft: marginList[index] + 'rpx' }">
|
|
||||||
{{ item }}
|
|
||||||
</view>
|
|
||||||
</scroll-view>
|
|
||||||
</view>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script setup>
|
|
||||||
import {
|
|
||||||
ref,
|
|
||||||
onMounted,
|
|
||||||
nextTick,
|
|
||||||
getCurrentInstance
|
|
||||||
} from 'vue';
|
|
||||||
|
|
||||||
const {
|
|
||||||
proxy
|
|
||||||
} = getCurrentInstance();
|
|
||||||
const scrollViewRef = ref(null);
|
|
||||||
// 原始列表数据及状态
|
|
||||||
const originalItems = Array.from({
|
|
||||||
length: 20
|
|
||||||
}, (_, i) => `列表项 ${i+1}`);
|
|
||||||
const items = ref([]);
|
|
||||||
const marginList = ref([]);
|
|
||||||
const activeIndex = ref(0);
|
|
||||||
const scrollTop = ref(0);
|
|
||||||
let offsetCount = 0;
|
|
||||||
|
|
||||||
// 计算各项 margin 并更新高亮
|
|
||||||
function updateMargins(scrollY) {
|
|
||||||
const query = uni.createSelectorQuery().in(proxy);
|
|
||||||
query.select('#scrollContainer').boundingClientRect();
|
|
||||||
query.selectAll('.item').boundingClientRect();
|
|
||||||
query.exec(res => {
|
|
||||||
const [scrollRect, itemRects] = res;
|
|
||||||
if (!scrollRect || !itemRects) return;
|
|
||||||
|
|
||||||
const centerY = scrollRect.height / 2;
|
|
||||||
const maxMargin = 300; // ← 从 60 调到 120,偏移加倍
|
|
||||||
const maxDist = centerY;
|
|
||||||
|
|
||||||
itemRects.forEach((r, i) => {
|
|
||||||
const itemCenter = r.top - scrollRect.top + r.height / 2;
|
|
||||||
const dist = Math.abs(itemCenter - centerY);
|
|
||||||
const t = Math.min(dist / maxDist, 1);
|
|
||||||
const eased = 1 - Math.cos(t * Math.PI / 2);
|
|
||||||
const m = eased * maxMargin;
|
|
||||||
|
|
||||||
marginList.value[i] = Math.round(m);
|
|
||||||
});
|
|
||||||
|
|
||||||
// 剩下高亮逻辑不变
|
|
||||||
const slice = marginList.value.slice(offsetCount, offsetCount + originalItems.length);
|
|
||||||
const minM = Math.min(...slice);
|
|
||||||
activeIndex.value = slice.indexOf(minM) + offsetCount;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
// 滚动时触发
|
|
||||||
const scrollTimeout = ref(null);
|
|
||||||
|
|
||||||
const onScroll = (e) => {
|
|
||||||
nextTick(() => updateMargins(e.detail.scrollTop));
|
|
||||||
|
|
||||||
// 检测停止滚动
|
|
||||||
if (scrollTimeout.value) clearTimeout(scrollTimeout.value);
|
|
||||||
scrollTimeout.value = setTimeout(() => {
|
|
||||||
// 滚动停止后的处理逻辑
|
|
||||||
console.log('滚动已停止');
|
|
||||||
console.log("??????????????", activeIndex.value - 8)
|
|
||||||
// 你可以在这里触发居中对齐、播放动画等
|
|
||||||
}, 100); // 100ms 内未触发 scroll,判定为停止
|
|
||||||
};
|
|
||||||
|
|
||||||
onMounted(async () => {
|
|
||||||
// 初始先用原始列表测量高度
|
|
||||||
items.value = originalItems;
|
|
||||||
marginList.value = Array(items.value.length).fill(0);
|
|
||||||
await nextTick();
|
|
||||||
const query = uni.createSelectorQuery().in(proxy);
|
|
||||||
query.select('#scrollContainer').boundingClientRect();
|
|
||||||
query.selectAll('.item').boundingClientRect();
|
|
||||||
query.exec(res => {
|
|
||||||
const [scrollRect, itemRects] = res;
|
|
||||||
if (!scrollRect || !itemRects || !itemRects.length) return;
|
|
||||||
const itemH = itemRects[0].height;
|
|
||||||
offsetCount = Math.ceil((scrollRect.height / 2) / itemH) + 3;
|
|
||||||
// 重构带占位的列表
|
|
||||||
items.value = [
|
|
||||||
...Array(offsetCount).fill(''),
|
|
||||||
...originalItems,
|
|
||||||
...Array(offsetCount).fill(''),
|
|
||||||
];
|
|
||||||
marginList.value = Array(items.value.length).fill(0);
|
|
||||||
// 设置初始滚动位置
|
|
||||||
scrollTop.value = offsetCount * itemH;
|
|
||||||
nextTick(() => updateMargins(scrollTop.value));
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
.container {
|
|
||||||
height: 800rpx;
|
|
||||||
position: absolute;
|
|
||||||
bottom: 300rpx;
|
|
||||||
right: 100rpx;
|
|
||||||
overflow: hidden;
|
|
||||||
z-index: 100;
|
|
||||||
}
|
|
||||||
|
|
||||||
.scroll-view {
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.item {
|
|
||||||
padding: 10px;
|
|
||||||
/* transition: color 0.2s; */
|
|
||||||
}
|
|
||||||
|
|
||||||
.active {
|
|
||||||
color: red;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
@ -1,131 +0,0 @@
|
||||||
<template>
|
|
||||||
<view id="arc-wrapper" @touchstart="onStart" @touchmove.prevent="onMove" @touchend="onEnd">
|
|
||||||
<!-- 父容器旋转 -->
|
|
||||||
<view id="arc" :style="{ transform: `rotate(${rotation}deg)` }">
|
|
||||||
<view v-for="(item, idx) in items" :key="idx" class="arc-item" :style="getItemStyle(idx)">
|
|
||||||
<!-- 文字反向旋转,保持水平 -->
|
|
||||||
<view class="item-content" :style="{
|
|
||||||
transform: `rotate(${-rotation}deg)`,
|
|
||||||
transformOrigin: 'center center'
|
|
||||||
}">
|
|
||||||
<text>{{ item }}</text>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</template>
|
|
||||||
<script setup>
|
|
||||||
import {
|
|
||||||
ref,
|
|
||||||
onMounted,
|
|
||||||
getCurrentInstance
|
|
||||||
} from 'vue';
|
|
||||||
|
|
||||||
const items = ['A', 'B', 'C', 'D', 'E'];
|
|
||||||
const radius = 100;
|
|
||||||
const rotation = ref(0);
|
|
||||||
const startAngle = ref(0);
|
|
||||||
const centerLocal = {
|
|
||||||
x: 0,
|
|
||||||
y: 0
|
|
||||||
};
|
|
||||||
const centerScreen = {
|
|
||||||
x: 0,
|
|
||||||
y: 0
|
|
||||||
};
|
|
||||||
|
|
||||||
const instance = getCurrentInstance();
|
|
||||||
|
|
||||||
// 获取半圆容器在屏幕中的中心坐标
|
|
||||||
onMounted(() => {
|
|
||||||
uni.createSelectorQuery()
|
|
||||||
.in(instance)
|
|
||||||
.select('#arc')
|
|
||||||
.boundingClientRect(rect => {
|
|
||||||
centerLocal.x = rect.width / 2;
|
|
||||||
centerLocal.y = rect.height;
|
|
||||||
centerScreen.x = rect.left + centerLocal.x;
|
|
||||||
centerScreen.y = rect.top + centerLocal.y;
|
|
||||||
})
|
|
||||||
.exec();
|
|
||||||
});
|
|
||||||
|
|
||||||
// 计算触摸点相对于屏幕圆心的角度
|
|
||||||
function calcAngle(x, y) {
|
|
||||||
const dx = x - centerScreen.x;
|
|
||||||
const dy = y - centerScreen.y;
|
|
||||||
return Math.atan2(dy, dx) * 180 / Math.PI; // rotate() 基于度数 :contentReference[oaicite:6]{index=6}
|
|
||||||
}
|
|
||||||
|
|
||||||
function onStart(e) {
|
|
||||||
const {
|
|
||||||
clientX,
|
|
||||||
clientY
|
|
||||||
} = e.touches[0];
|
|
||||||
startAngle.value = calcAngle(clientX, clientY);
|
|
||||||
}
|
|
||||||
|
|
||||||
function onMove(e) {
|
|
||||||
const {
|
|
||||||
clientX,
|
|
||||||
clientY
|
|
||||||
} = e.touches[0];
|
|
||||||
const current = calcAngle(clientX, clientY);
|
|
||||||
rotation.value += current - startAngle.value;
|
|
||||||
startAngle.value = current;
|
|
||||||
}
|
|
||||||
|
|
||||||
function onEnd() {
|
|
||||||
// 可加惯性或回正逻辑
|
|
||||||
}
|
|
||||||
|
|
||||||
// 计算每个子项在半圆上的定位
|
|
||||||
function getItemStyle(idx) {
|
|
||||||
const per = 180 / (items.length + 1);
|
|
||||||
const baseAngle = -90 + per * (idx + 1);
|
|
||||||
const rad = baseAngle * Math.PI / 180;
|
|
||||||
const x = centerLocal.x + radius * Math.cos(rad);
|
|
||||||
const y = centerLocal.y + radius * Math.sin(rad);
|
|
||||||
return {
|
|
||||||
position: 'absolute',
|
|
||||||
left: `${x}px`,
|
|
||||||
top: `${y}px`,
|
|
||||||
transform: 'translate(-50%,-50%)'
|
|
||||||
};
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
<style lang="less" scoped>
|
|
||||||
#arc-wrapper {
|
|
||||||
width: 200px;
|
|
||||||
height: 100px;
|
|
||||||
position: absolute;
|
|
||||||
bottom: 300rpx;
|
|
||||||
right: 100rpx;
|
|
||||||
overflow: hidden;
|
|
||||||
z-index: 100;
|
|
||||||
}
|
|
||||||
|
|
||||||
#arc {
|
|
||||||
width: 200px;
|
|
||||||
height: 100px;
|
|
||||||
position: absolute;
|
|
||||||
bottom: 0;
|
|
||||||
left: 0;
|
|
||||||
transform-origin: center bottom;
|
|
||||||
/* 半圆底部中心为旋转中心 :contentReference[oaicite:7]{index=7} */
|
|
||||||
}
|
|
||||||
|
|
||||||
.arc-item {
|
|
||||||
/* 可自定义尺寸 */
|
|
||||||
}
|
|
||||||
|
|
||||||
.item-content {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
/* 确保 transform-origin 在自身中心 */
|
|
||||||
transform-box: fill-box;
|
|
||||||
/* 在某些渲染环境需指定 reference box :contentReference[oaicite:8]{index=8} */
|
|
||||||
transform-origin: center center;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
@ -0,0 +1,72 @@
|
||||||
|
<template>
|
||||||
|
<view class="container">
|
||||||
|
<scroll-view
|
||||||
|
scroll-y
|
||||||
|
class="scroll"
|
||||||
|
:scroll-top="scrollTop"
|
||||||
|
@scroll="onScroll"
|
||||||
|
:scroll-with-animation="false"
|
||||||
|
>
|
||||||
|
<view
|
||||||
|
v-for="(item, index) in renderList"
|
||||||
|
:key="index"
|
||||||
|
class="item"
|
||||||
|
>
|
||||||
|
{{ item }}
|
||||||
|
</view>
|
||||||
|
</scroll-view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref, onMounted, nextTick } from 'vue'
|
||||||
|
|
||||||
|
// 原始数据
|
||||||
|
const baseList = Array.from({ length: 10 }, (_, i) => `第 ${i + 1} 项`)
|
||||||
|
const renderList = ref([]) // 显示的3倍数据
|
||||||
|
const itemHeight = 100 // 每项高度(rpx)需与你样式保持一致
|
||||||
|
const scrollTop = ref(0)
|
||||||
|
const totalHeight = baseList.length * itemHeight * 3
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
// 三倍复制数据(上下留出空间)
|
||||||
|
renderList.value = [...baseList, ...baseList, ...baseList]
|
||||||
|
|
||||||
|
// 滚动到中间(第二组开头)
|
||||||
|
nextTick(() => {
|
||||||
|
scrollTop.value = baseList.length * itemHeight
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
function onScroll(e) {
|
||||||
|
const currentTop = e.detail.scrollTop
|
||||||
|
|
||||||
|
const singleHeight = baseList.length * itemHeight
|
||||||
|
const threshold = 20 // 触发回跳的阈值(rpx)
|
||||||
|
|
||||||
|
// 回到中间,形成无缝循环
|
||||||
|
if (currentTop <= threshold) {
|
||||||
|
scrollTop.value = singleHeight + currentTop
|
||||||
|
} else if (currentTop >= singleHeight * 2 - threshold) {
|
||||||
|
scrollTop.value = currentTop - singleHeight
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.container {
|
||||||
|
height: 100vh;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
.scroll {
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
.item {
|
||||||
|
height: 100rpx;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
border-bottom: 1px solid #eee;
|
||||||
|
background: #fff;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -0,0 +1,269 @@
|
||||||
|
<template>
|
||||||
|
<view class="captcha-container" id="container">
|
||||||
|
<view class="font-title">请通过滑块验证</view>
|
||||||
|
<view class="captcha-image" style="position: relative; width: 100%; height: 400rpx; overflow: hidden;">
|
||||||
|
<image :src="bgImage" class="bg-image" mode="widthFix" @load="init" />
|
||||||
|
<view class="overlay" :style="{ width: containerWidth + 'rpx', height: containerHeight + 'rpx' }">
|
||||||
|
<view
|
||||||
|
class="hole"
|
||||||
|
:style="{
|
||||||
|
top: originY + 'rpx',
|
||||||
|
left: originX + 'rpx',
|
||||||
|
width: pieceSize + 'rpx',
|
||||||
|
height: pieceSize + 'rpx',
|
||||||
|
clipPath: clipPath,
|
||||||
|
transform: 'translate(-50%, -50%)',
|
||||||
|
backgroundColor: 'rgba(0,0,0,0.6)'
|
||||||
|
}"
|
||||||
|
></view>
|
||||||
|
|
||||||
|
<view
|
||||||
|
class="piece"
|
||||||
|
:style="{
|
||||||
|
top: originY + 'rpx',
|
||||||
|
left: offsetX + 47 + 'rpx',
|
||||||
|
width: pieceSize + 'rpx',
|
||||||
|
height: pieceSize + 'rpx',
|
||||||
|
backgroundImage: `url(${bgImage})`,
|
||||||
|
backgroundSize: containerWidth + 'rpx ' + containerHeight + 'rpx',
|
||||||
|
backgroundPosition: `-${originX-45}rpx -${originY-50}rpx`,
|
||||||
|
clipPath: clipPath,
|
||||||
|
transform: 'translate(-50%, -50%)'
|
||||||
|
}"
|
||||||
|
></view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="slider-bar">
|
||||||
|
<view class="slider-bar-font">向右滑动滑块填充拼图</view>
|
||||||
|
<view
|
||||||
|
class="slider-button"
|
||||||
|
ref="btn"
|
||||||
|
@touchstart="onStart"
|
||||||
|
@touchmove="onMove"
|
||||||
|
@touchend="onEnd"
|
||||||
|
:style="{ left: offsetX + 'rpx', maxWidth: (containerWidth - pieceSize) + 'rpx' }"
|
||||||
|
>
|
||||||
|
<image
|
||||||
|
src="https://www.focusnu.com/media/directive/login/right.png"
|
||||||
|
style="width: 50rpx; height: 50rpx;"
|
||||||
|
mode="widthFix"
|
||||||
|
/>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref, onMounted, nextTick, getCurrentInstance } from 'vue'
|
||||||
|
|
||||||
|
const emit = defineEmits(['success'])
|
||||||
|
|
||||||
|
const pieceSizePx = 50
|
||||||
|
const pieceSize = pieceSizePx * 2
|
||||||
|
const tolerance = 20
|
||||||
|
|
||||||
|
const containerWidth = ref(400)
|
||||||
|
const containerHeight = ref(400)
|
||||||
|
|
||||||
|
const originX = ref(0)
|
||||||
|
const originY = ref(0)
|
||||||
|
const offsetX = ref(0)
|
||||||
|
const dragging = ref(false)
|
||||||
|
const startX = ref(0)
|
||||||
|
|
||||||
|
const bgImage = ref('')
|
||||||
|
|
||||||
|
const instance = getCurrentInstance()
|
||||||
|
|
||||||
|
function getPuzzlePiecePath(size) {
|
||||||
|
const s = size
|
||||||
|
return `
|
||||||
|
M${10 * 2} 0
|
||||||
|
h${s / 3 - 10 * 2}
|
||||||
|
a${10 * 2} ${10 * 2} 0 0 1 0 ${20 * 2}
|
||||||
|
h${s / 3}
|
||||||
|
a${10 * 2} ${10 * 2} 0 0 0 0 -${20 * 2}
|
||||||
|
h${s / 3 - 10 * 2}
|
||||||
|
v${s / 3 - 10 * 2}
|
||||||
|
a${10 * 2} ${10 * 2} 0 0 1 -${20 * 2} 0
|
||||||
|
v${s / 3}
|
||||||
|
a${10 * 2} ${10 * 2} 0 0 0 ${20 * 2} 0
|
||||||
|
v${s / 3 - 10 * 2}
|
||||||
|
h-${s / 3 - 10 * 2}
|
||||||
|
a${10 * 2} ${10 * 2} 0 0 1 0 -${20 * 2}
|
||||||
|
h-${s / 3}
|
||||||
|
a${10 * 2} ${10 * 2} 0 0 0 0 ${20 * 2}
|
||||||
|
h-${s / 3 - 10 * 2}
|
||||||
|
z
|
||||||
|
`
|
||||||
|
}
|
||||||
|
|
||||||
|
const clipPath = `path('${getPuzzlePiecePath(pieceSize)}')`
|
||||||
|
|
||||||
|
function init() {
|
||||||
|
nextTick(() => {
|
||||||
|
if (!instance) {
|
||||||
|
console.error('无法获取组件实例')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
uni.createSelectorQuery()
|
||||||
|
.in(instance.proxy)
|
||||||
|
.select('.bg-image')
|
||||||
|
.boundingClientRect(data => {
|
||||||
|
if (!data) {
|
||||||
|
console.error('无法获取图片尺寸')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
containerWidth.value = data.width * 2
|
||||||
|
containerHeight.value = data.height * 2
|
||||||
|
|
||||||
|
originX.value = Math.random() * (containerWidth.value - pieceSize * 2) + pieceSize
|
||||||
|
if (originX.value < 100) originX.value = 100
|
||||||
|
if (originX.value > 400) originX.value = 400
|
||||||
|
originY.value = containerHeight.value / 2
|
||||||
|
offsetX.value = 0
|
||||||
|
})
|
||||||
|
.exec()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function onStart(e) {
|
||||||
|
dragging.value = true
|
||||||
|
startX.value = e.touches[0].clientX * 2
|
||||||
|
}
|
||||||
|
|
||||||
|
function onMove(e) {
|
||||||
|
if (!dragging.value) return
|
||||||
|
const clientX = e.touches[0].clientX * 2
|
||||||
|
let dx = clientX - startX.value
|
||||||
|
dx = Math.max(0, Math.min(dx, containerWidth.value - pieceSize))
|
||||||
|
offsetX.value = dx
|
||||||
|
}
|
||||||
|
|
||||||
|
function onEnd() {
|
||||||
|
dragging.value = false
|
||||||
|
if (Math.abs(offsetX.value + 47 - originX.value) < tolerance) {
|
||||||
|
uni.showToast({
|
||||||
|
title: '验证成功',
|
||||||
|
icon: 'none',
|
||||||
|
duration: 2000
|
||||||
|
})
|
||||||
|
// console.log("????", originX.value)
|
||||||
|
emit('success')
|
||||||
|
} else {
|
||||||
|
offsetX.value = 0
|
||||||
|
uni.showToast({
|
||||||
|
title: '验证失败',
|
||||||
|
icon: 'none',
|
||||||
|
duration: 2000
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
const images = [
|
||||||
|
'https://www.focusnu.com/media/directive/login/0.png',
|
||||||
|
'https://www.focusnu.com/media/directive/login/1.png',
|
||||||
|
'https://www.focusnu.com/media/directive/login/2.png',
|
||||||
|
// 'https://www.focusnu.com/media/directive/login/3.png'
|
||||||
|
]
|
||||||
|
bgImage.value = images[Math.floor(Math.random() * images.length)]
|
||||||
|
console.log('加载图片:', bgImage.value)
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.captcha-container {
|
||||||
|
user-select: none;
|
||||||
|
background-color: #fff;
|
||||||
|
width: 600rpx;
|
||||||
|
height: 700rpx;
|
||||||
|
margin: 0 auto;
|
||||||
|
border-radius: 30rpx;
|
||||||
|
overflow: hidden;
|
||||||
|
padding: 0 30rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.captcha-image {
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bg-image {
|
||||||
|
position: relative;
|
||||||
|
z-index: 1;
|
||||||
|
display: block;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.overlay {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
z-index: 100;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hole,
|
||||||
|
.piece {
|
||||||
|
position: absolute;
|
||||||
|
z-index: 101;
|
||||||
|
box-shadow: 0 0 6rpx rgba(0, 0, 0, 0.4);
|
||||||
|
}
|
||||||
|
|
||||||
|
.hole {
|
||||||
|
background-color: rgba(0, 0, 0, 0.3);
|
||||||
|
}
|
||||||
|
|
||||||
|
.piece {
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-size: cover;
|
||||||
|
cursor: grab;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slider-bar {
|
||||||
|
position: relative;
|
||||||
|
height: 100rpx;
|
||||||
|
margin-top: 0rpx;
|
||||||
|
background: rgb(245, 246, 252);
|
||||||
|
width: 540rpx;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.slider-bar-font {
|
||||||
|
color: rgb(169, 169, 171);
|
||||||
|
font-size: 28rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.slider-button {
|
||||||
|
position: absolute;
|
||||||
|
top: 0rpx;
|
||||||
|
left: 0;
|
||||||
|
width: 100rpx;
|
||||||
|
height: 100rpx;
|
||||||
|
background: #fff;
|
||||||
|
box-shadow: 0 0 20rpx rgba(0, 0, 0, 0.2);
|
||||||
|
user-select: none;
|
||||||
|
border-radius: 10rpx;
|
||||||
|
border: 3rpx solid rgb(139, 218, 202);
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.font-title {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
height: 100rpx;
|
||||||
|
font-size: 35rpx;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -21,7 +21,7 @@
|
||||||
<image class="right-icons-img-icon"
|
<image class="right-icons-img-icon"
|
||||||
:src="darkFans?`/static/index/undericons/out.png`:`/static/index/undericons/outlight.png`" />
|
:src="darkFans?`/static/index/undericons/out.png`:`/static/index/undericons/outlight.png`" />
|
||||||
</view>
|
</view>
|
||||||
<view class="right-container-title-class-anhei-button">
|
<view class="right-container-title-class-anhei-button" @click="newchange(0)">
|
||||||
<text class="right-container-title-class-anhei">
|
<text class="right-container-title-class-anhei">
|
||||||
拖动模式
|
拖动模式
|
||||||
</text>
|
</text>
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@
|
||||||
拖动模式
|
拖动模式
|
||||||
</text>
|
</text>
|
||||||
</view>
|
</view>
|
||||||
<!-- <view class="right-container-title-class-anhei-button">
|
<!-- <view class="right-container-title-class-anhei-button" @click="newchange(1)">
|
||||||
<text class="right-container-title-class-anhei">
|
<text class="right-container-title-class-anhei">
|
||||||
手柄模式1
|
手柄模式1
|
||||||
</text>
|
</text>
|
||||||
|
|
|
||||||
|
|
@ -4,19 +4,7 @@
|
||||||
<view class="right-container" :style="isshow?{opacity: `1`}:{opacity: `0`}"
|
<view class="right-container" :style="isshow?{opacity: `1`}:{opacity: `0`}"
|
||||||
@click="bottomisShaking=false;shakyTable = false">
|
@click="bottomisShaking=false;shakyTable = false">
|
||||||
<!-- 轮盘 -->
|
<!-- 轮盘 -->
|
||||||
<!-- <joystick v-show="isEdit" @movecard="movecard" /> -->
|
|
||||||
<joystick @movecard="movecard" />
|
<joystick @movecard="movecard" />
|
||||||
<!-- 测试 -->
|
|
||||||
<!-- <ceshi /> -->
|
|
||||||
<!-- 新增后的按钮 -->
|
|
||||||
<!-- <skill v-show="isEdit && songisopen && !isMove && !deleteisopen" @clickcircle="clickcircle" /> -->
|
|
||||||
<!-- 新增 -->
|
|
||||||
<!-- <skilladd v-show="!haveName && isEdit && !songisopen && !isMove&& !deleteisopen" @getDownListIndex="openAdd" /> -->
|
|
||||||
<!-- 移动 -->
|
|
||||||
<!-- <skillmove v-show="((haveName && isEdit && !songisopen) ||(isEdit && !songisopen && isMove)) && !deleteisopen"
|
|
||||||
:ismove="isMove" @clickcard="changecard" /> -->
|
|
||||||
<!-- 删除 -->
|
|
||||||
<!-- <skilmovedelete v-show="deleteisopen" @clickdelete="clickdelete" /> -->
|
|
||||||
<view class="right-container-title-nav">
|
<view class="right-container-title-nav">
|
||||||
<text :class="darkFans?`right-container-title-no-dark`:`right-container-title-no`">
|
<text :class="darkFans?`right-container-title-no-dark`:`right-container-title-no`">
|
||||||
ID:12345678
|
ID:12345678
|
||||||
|
|
@ -72,12 +60,6 @@
|
||||||
<view class="doctorsay-container-juzhen" @click="routerPush">
|
<view class="doctorsay-container-juzhen" @click="routerPush">
|
||||||
预览
|
预览
|
||||||
</view>
|
</view>
|
||||||
<!-- <view class="doctorsay-container-juzhen" @click="openEdit">
|
|
||||||
{{isEdit?"取消编辑":"编辑"}}
|
|
||||||
</view> -->
|
|
||||||
<!-- <view v-show="isEdit" class="doctorsay-container-juzhen" @click="openLunpan">
|
|
||||||
{{isLunpan?"取消轮盘":"开启轮盘"}}
|
|
||||||
</view> -->
|
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="super-card">
|
<view class="super-card">
|
||||||
|
|
@ -104,10 +86,6 @@
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view class="super-card-container">
|
<view class="super-card-container">
|
||||||
<!-- <swiper :disable-touch="!canmove || shakyTable" :current="currentNumber" class="scroll-x"
|
|
||||||
circular :indicator-dots="false" @change="changecurrentNumber" :interval="4000"
|
|
||||||
:duration="500">
|
|
||||||
<swiper-item v-for="(item,index) in [1,2,3]" :key="index"> -->
|
|
||||||
<scroll-view style="height: 920rpx;width: 100%;" :scroll-left="cardLeft" scroll-x
|
<scroll-view style="height: 920rpx;width: 100%;" :scroll-left="cardLeft" scroll-x
|
||||||
@scroll="handleTop" :show-scrollbar="false">
|
@scroll="handleTop" :show-scrollbar="false">
|
||||||
<view
|
<view
|
||||||
|
|
@ -176,10 +154,7 @@
|
||||||
{{item1.cycleType}}
|
{{item1.cycleType}}
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<!-- <view style="margin-top: 20rpx;font-weight: 700;"
|
|
||||||
v-show=" liang.index0 !== index0 || liang.index1 !== index1 || canmove">
|
|
||||||
{{splitString(item1.directiveName)[0]}}
|
|
||||||
</view> -->
|
|
||||||
<image v-if="item1.startTime" class="title-time-img"
|
<image v-if="item1.startTime" class="title-time-img"
|
||||||
src="/static/index/tu.png" />
|
src="/static/index/tu.png" />
|
||||||
<view v-if="item1.startTime" class="title-time-font-rel">
|
<view v-if="item1.startTime" class="title-time-font-rel">
|
||||||
|
|
@ -191,19 +166,7 @@
|
||||||
<image class="right-box-items-button"
|
<image class="right-box-items-button"
|
||||||
src="/static/index/ren.png" />
|
src="/static/index/ren.png" />
|
||||||
</view>
|
</view>
|
||||||
<!-- <view class="down-icons"
|
|
||||||
v-show=" liang.index0 !== index0 || liang.index1 !== index1 || canmove"
|
|
||||||
:style="item1.cycleType!='日常'?{backgroundColor:`rgb(212,203,255)`}:{}"
|
|
||||||
v-if="splitString(item1.directiveName)[1]">
|
|
||||||
<view class=""
|
|
||||||
v-for="(item,index) in splitString(item1.directiveName).slice(1)"
|
|
||||||
:key="index">
|
|
||||||
<view class="icon"
|
|
||||||
:style="item1.cycleType!='日常'?{backgroundColor:`rgb(123,97,255)`}:{}">
|
|
||||||
{{splitString(item1.directiveName)[index + 1]}}
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view> -->
|
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
@ -267,6 +230,7 @@
|
||||||
{{item}}
|
{{item}}
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view v-for="(item,index) in days" :key="index"
|
<view v-for="(item,index) in days" :key="index"
|
||||||
@click="clickMonth(item,index)" v-if="!isweek">
|
@click="clickMonth(item,index)" v-if="!isweek">
|
||||||
<view :class="monthIndex===index?`items-card-target`:`items-card`">
|
<view :class="monthIndex===index?`items-card-target`:`items-card`">
|
||||||
|
|
@ -281,7 +245,7 @@
|
||||||
:scroll-top="firsttop" v-show="!iszhouqi">
|
:scroll-top="firsttop" v-show="!iszhouqi">
|
||||||
<view
|
<view
|
||||||
v-for="(item,index) in bigArray[upmenuIndex].children[downmenuIndex].children"
|
v-for="(item,index) in bigArray[upmenuIndex].children[downmenuIndex].children"
|
||||||
:key="index" @click="thirdmenuIndex=index">
|
:key="index" @click="onTap(index)">
|
||||||
<view class="right-box-item"
|
<view class="right-box-item"
|
||||||
:style="thirdmenuIndex==index?{border: `2rpx solid rgb(54, 159, 239)`,backgroundColor:`#fff`}:{border: `2rpx solid rgb(229, 233, 249)`}">
|
:style="thirdmenuIndex==index?{border: `2rpx solid rgb(54, 159, 239)`,backgroundColor:`#fff`}:{border: `2rpx solid rgb(229, 233, 249)`}">
|
||||||
<image class="title-time-button" v-show="item.cycleType ==='日常护理'"
|
<image class="title-time-button" v-show="item.cycleType ==='日常护理'"
|
||||||
|
|
@ -323,6 +287,7 @@
|
||||||
</view>
|
</view>
|
||||||
<view class="middle-right-box">
|
<view class="middle-right-box">
|
||||||
<view v-for="(item,index) in doctorsayList" :key="index" @click="changLeft(index)">
|
<view v-for="(item,index) in doctorsayList" :key="index" @click="changLeft(index)">
|
||||||
|
|
||||||
<view
|
<view
|
||||||
:class="index === upmenuIndex ? `doctorsay-container-card-target`:`doctorsay-container-card`">
|
:class="index === upmenuIndex ? `doctorsay-container-card-target`:`doctorsay-container-card`">
|
||||||
<image class="doctorsay-container-card-img"
|
<image class="doctorsay-container-card-img"
|
||||||
|
|
@ -386,93 +351,6 @@
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<!-- 选择的弹出层 -->
|
|
||||||
<!-- <view v-if="songisopen" class="popup-song">
|
|
||||||
<view class="popup-song-contain" :style="{opacity: songisopacity ? 1 : 0}" @click.stop>
|
|
||||||
<view class="popup-song-father">
|
|
||||||
<image class="shu-up-img" src="/static/index/cheng.png" />
|
|
||||||
<view class="shu-up-font">
|
|
||||||
<view class="">
|
|
||||||
服务时段:{{ openValue.time + ":" + openValue.minute}}
|
|
||||||
</view>
|
|
||||||
<view style="margin-left: 30rpx;">
|
|
||||||
护理时长:10分钟
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
<view class="shu-container-left" v-show="!clickstauts">
|
|
||||||
<view class="shu-container-left-gun"></view>
|
|
||||||
<view class="shu-container-left-font">服务类型</view>
|
|
||||||
</view>
|
|
||||||
<view class="arrayindex" v-show="!clickstauts">
|
|
||||||
<view v-for="(item,index) in openValue.array" :key="index">
|
|
||||||
<view style="position: relative;box-shadow: 10rpx 10rpx 20rpx rgba(105, 129, 178, 0.4)"
|
|
||||||
:class="cardsumit.op.index[1]===index?`arrayindex-one-target`:`arrayindex-one`"
|
|
||||||
@click="cardsumit.op.index[1]=index">
|
|
||||||
{{item.title}}
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
<view class="shu-container-left" v-show="clickstauts===1">
|
|
||||||
<view class="shu-container-left-gun"></view>
|
|
||||||
<view class="shu-container-left-font">服务指令</view>
|
|
||||||
</view>
|
|
||||||
<view class="secondarrayindex" v-show="clickstauts===1">
|
|
||||||
<view v-for="(item,index) in secondopenValue" :key="index">
|
|
||||||
<view style="position: relative;box-shadow: 10rpx 10rpx 20rpx rgba(105, 129, 178, 0.4)"
|
|
||||||
:class="cardsumit.op.index[2]===index?`arrayindex-one-target`:`arrayindex-one`"
|
|
||||||
@click="clickOp(index,item)">
|
|
||||||
<image class="ri-img" v-show="item.cycleType ==='日常护理'"
|
|
||||||
:src="cardsumit.op.index[2]!==index? `/static/index/ridark.png`:`/static/index/ri.png`" />
|
|
||||||
<image class="ri-img" v-show="item.cycleType ==='周期护理'"
|
|
||||||
:src="cardsumit.op.index[2]==index? `/static/index/zhoudark.png`:`/static/index/zhou.png`" />
|
|
||||||
<image class="ri-img" v-show="item.cycleType ==='即时护理'"
|
|
||||||
:src="cardsumit.op.index[2]==index? `/static/index/jidark.png`:`/static/index/ji.png`" />
|
|
||||||
{{ item.relName }}
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
<view class="shu-container-left" v-show="clickstauts===2">
|
|
||||||
<view class="shu-container-left-gun"></view>
|
|
||||||
<view class="shu-container-left-font">周期类型</view>
|
|
||||||
</view>
|
|
||||||
<view class="radio-father" v-show="clickstauts===2">
|
|
||||||
<view :class="isweek?`radio-circle-target`: `radio-circle`" @click="clickWeek"></view>
|
|
||||||
<view :class="isweek&&selectType? `radio-font-target` : `radio-font`" @click="clickWeek">每周
|
|
||||||
</view>
|
|
||||||
<view :class="!isweek?`radio-circle-target`: `radio-circle`" @click="clickMonth"></view>
|
|
||||||
<view :class="!isweek&&selectType? `radio-font-target` : `radio-font`" @click="clickMonth">每月
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
<view class="week-father" v-show="isweek&&clickstauts===2">
|
|
||||||
<view v-for="(item,index) in weekDays" :key="index">
|
|
||||||
<view :class="cardsumit.weekTimeNumber===index?`week-one-target`:`week-one`"
|
|
||||||
@click="cardsumit.weekTime=item;cardsumit.weekTimeNumber=index;selectType=false">
|
|
||||||
{{item}}
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
<view class="month-father" v-show="!isweek&&clickstauts===2">
|
|
||||||
<view v-for="(item,index) in days" :key="index">
|
|
||||||
<view :class="cardsumit.monthTimeNumber===index?`month-one-target`:`month-one`"
|
|
||||||
@click="cardsumit.monthTime=item;cardsumit.monthTimeNumber=index;selectType=false">
|
|
||||||
{{item}}
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
</view>
|
|
||||||
</view> -->
|
|
||||||
<!-- 删除表格的的弹出层 -->
|
|
||||||
<!-- <view v-show="deleteisopen" class="popup-delete" @click="deleteisopen=false">
|
|
||||||
<view class="popup-delete-content" style="padding-top: 30rpx;" :style="{ opacity: deleteisopacity ? 1 : 0 }"
|
|
||||||
@click.stop>
|
|
||||||
<image class="popup-delete-img" src="/static/index/deleteicon.png" />
|
|
||||||
<view style="margin-top: 30rpx;" class="popup-delete-text">
|
|
||||||
确定要删除 {{deletename}} 吗?
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view> -->
|
|
||||||
<!-- 替换表格的的弹出层 -->
|
<!-- 替换表格的的弹出层 -->
|
||||||
<view v-show="sayisopen" class="popup-say" @click="sayisopen=false">
|
<view v-show="sayisopen" class="popup-say" @click="sayisopen=false">
|
||||||
<view class="popup-say-content" style="padding-top: 30rpx;" :style="{ opacity: sayisopacity ? 1 : 0 }"
|
<view class="popup-say-content" style="padding-top: 30rpx;" :style="{ opacity: sayisopacity ? 1 : 0 }"
|
||||||
|
|
@ -504,24 +382,6 @@
|
||||||
<view class="popup-say-three"></view>
|
<view class="popup-say-three"></view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<!-- 删除下方菜单的的弹出层 -->
|
|
||||||
<!-- <view v-show="deletedownisopen" class="popup-delete" @click="deletedownisopen=false">
|
|
||||||
<view class="popup-delete-content" :style="{ opacity: deletedownisopacity ? 1 : 0 }" @click.stop>
|
|
||||||
<image class="popup-delete-img" src="/static/index/deleteicon.png" />
|
|
||||||
<view class="popup-delete-text">
|
|
||||||
确定要删除 {{deletename}} 吗?
|
|
||||||
</view>
|
|
||||||
<view class="popup-delete-button">
|
|
||||||
<view class="popup-delete-button-right" @click="deletedownisopen=false">
|
|
||||||
取消
|
|
||||||
</view>
|
|
||||||
<view class="popup-delete-button-left"
|
|
||||||
@click="bottomItems.splice(deletebottomindex, 1);deletedownisopen=false">
|
|
||||||
确定
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view> -->
|
|
||||||
<!-- 分享的弹出层 -->
|
<!-- 分享的弹出层 -->
|
||||||
<view v-show="shareShow" class="popup-share" @click="shareShow=false">
|
<view v-show="shareShow" class="popup-share" @click="shareShow=false">
|
||||||
<view class="popup-share-content" :style="{ opacity: deletedownisopacity ? 1 : 0 }" @click.stop>
|
<view class="popup-share-content" :style="{ opacity: deletedownisopacity ? 1 : 0 }" @click.stop>
|
||||||
|
|
@ -556,12 +416,10 @@
|
||||||
import index from '../../request';
|
import index from '../../request';
|
||||||
import { myArray } from './yaoshandiao.js';
|
import { myArray } from './yaoshandiao.js';
|
||||||
import joystick from '@/component/public/newgame/joysticknew.vue';
|
import joystick from '@/component/public/newgame/joysticknew.vue';
|
||||||
// import joysticknew from '@/component/public/game/joysticknew.vue';
|
|
||||||
import skill from '@/component/public/game/skill.vue';
|
import skill from '@/component/public/game/skill.vue';
|
||||||
import skilladd from '@/component/public/game/skilladd.vue'
|
import skilladd from '@/component/public/game/skilladd.vue'
|
||||||
import skillmove from '@/component/public/game/skilmove.vue'
|
import skillmove from '@/component/public/game/skilmove.vue'
|
||||||
import skilmovedelete from '@/component/public/game/skilmovedelete.vue'
|
import skilmovedelete from '@/component/public/game/skilmovedelete.vue'
|
||||||
// import ceshi from '@/component/public/game/ceshi.vue'
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
isshow: {
|
isshow: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
|
|
@ -587,14 +445,13 @@
|
||||||
() => props.isold,
|
() => props.isold,
|
||||||
() => {
|
() => {
|
||||||
if (props.isold) {
|
if (props.isold) {
|
||||||
saveEditIndex.value.index0 = saveleft.value;
|
saveEditIndex.value.index0 = 9;
|
||||||
saveEditIndex.value.index1 = 0;
|
saveEditIndex.value.index1 = 0;
|
||||||
cardLeft.value = 1;
|
cardLeft.value = 1;
|
||||||
scrollTop.value = 1;
|
scrollTop.value = 1;
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
scrollTop.value = 0;
|
scrollTop.value = 0;
|
||||||
cardLeft.value = saveleft.value * 117;
|
cardLeft.value = saveleft.value * 117;
|
||||||
// isHave()
|
|
||||||
})
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -717,15 +574,33 @@
|
||||||
//第几套表格
|
//第几套表格
|
||||||
const currentNumber = ref(0);
|
const currentNumber = ref(0);
|
||||||
const scrollKey = ref(0);
|
const scrollKey = ref(0);
|
||||||
// const updo = ref(0);
|
|
||||||
// const rightdo = ref(0);
|
|
||||||
// const leftdo = ref(0);
|
|
||||||
// const downdo = ref(0);
|
|
||||||
const saveleft = ref(6);
|
const saveleft = ref(6);
|
||||||
const saveright = ref(11);
|
const saveright = ref(11);
|
||||||
const savetop = ref(0);
|
const savetop = ref(0);
|
||||||
const savebottom = ref(3);
|
const savebottom = ref(3);
|
||||||
const isMove = ref(false);
|
const isMove = ref(false);
|
||||||
|
|
||||||
|
// 上次点击时间
|
||||||
|
const lastTap = ref(0)
|
||||||
|
// 双击的最大间隔(ms),可根据体验调整
|
||||||
|
const DOUBLE_TAP_DELAY = 300
|
||||||
|
|
||||||
|
function onTap(e) {
|
||||||
|
const now = Date.now()
|
||||||
|
if (now - lastTap.value < DOUBLE_TAP_DELAY) {
|
||||||
|
// 双击成立
|
||||||
|
thirdmenuIndex.value = e
|
||||||
|
addnew()
|
||||||
|
// 重置,避免多次触发
|
||||||
|
lastTap.value = 0
|
||||||
|
} else {
|
||||||
|
thirdmenuIndex.value = e
|
||||||
|
// 记录本次时间,等待下次点击
|
||||||
|
lastTap.value = now
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 替换新的
|
// 替换新的
|
||||||
const getNew = () => {
|
const getNew = () => {
|
||||||
let object = JSON.parse(JSON.stringify(timearr.value[flyNumber.value.index0].children[flyNumber.value.index1]))
|
let object = JSON.parse(JSON.stringify(timearr.value[flyNumber.value.index0].children[flyNumber.value.index1]))
|
||||||
|
|
@ -792,35 +667,7 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// const openAdd = (index : number) => {
|
|
||||||
// selectType.value = true;
|
|
||||||
// cardsumit.value = {
|
|
||||||
// op: {
|
|
||||||
// name: "",
|
|
||||||
// index: [-1, -1, -1],
|
|
||||||
// },
|
|
||||||
// startTime: "",
|
|
||||||
// monthTimeNumber: -1,
|
|
||||||
// monthTime: "",
|
|
||||||
// weekTime: "",
|
|
||||||
// weekTimeNumber: -1,
|
|
||||||
// }
|
|
||||||
// //虚化的动画
|
|
||||||
// songisopen.value = true;
|
|
||||||
// songisopacity.value = false;
|
|
||||||
// setTimeout(() => {
|
|
||||||
// songisopacity.value = true
|
|
||||||
// }, 100)
|
|
||||||
// // 存储 两个index
|
|
||||||
// cardsumit.value.op.index[0] = index
|
|
||||||
// cardsumit.value.op.index[1] = 0
|
|
||||||
// // 存储时间和二级数组
|
|
||||||
// openValue.value.time = timearr.value[saveEditIndex.value.index0].positioning;
|
|
||||||
// openValue.value.minute = timearr.value[saveEditIndex.value.index0].children[saveEditIndex.value.index1].typeName
|
|
||||||
// openValue.value.array = bigArray.value[index].children;
|
|
||||||
// //存储选中表格的坐标
|
|
||||||
// indexsave.value = [saveEditIndex.value.index0, saveEditIndex.value.index1]
|
|
||||||
// }
|
|
||||||
function dosomesave() {
|
function dosomesave() {
|
||||||
cardsumit.value.op.name = secondopenValue.value[cardsumit.value.op.index[2]].relName
|
cardsumit.value.op.name = secondopenValue.value[cardsumit.value.op.index[2]].relName
|
||||||
switch (secondopenValue.value[cardsumit.value.op.index[2]].cycleType) {
|
switch (secondopenValue.value[cardsumit.value.op.index[2]].cycleType) {
|
||||||
|
|
@ -839,6 +686,11 @@
|
||||||
}
|
}
|
||||||
const selectType = ref(true);
|
const selectType = ref(true);
|
||||||
const deleteButton = ref(false);
|
const deleteButton = ref(false);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 给摇杆用的
|
// 给摇杆用的
|
||||||
//看完迷糊不,我都迷糊了
|
//看完迷糊不,我都迷糊了
|
||||||
//0上1右2下3左
|
//0上1右2下3左
|
||||||
|
|
@ -848,28 +700,28 @@
|
||||||
const movecard = (where : number) => {
|
const movecard = (where : number) => {
|
||||||
isDelete.value = false;
|
isDelete.value = false;
|
||||||
// console.log("?????",leftIn.value,saveleft.value*117)
|
// console.log("?????",leftIn.value,saveleft.value*117)
|
||||||
if (((saveleft.value * 117 - leftIn.value) > 5) || ((leftIn.value - saveleft.value * 117) > 0)) {
|
// if (((saveleft.value * 117 - leftIn.value) > 5) || ((leftIn.value - saveleft.value * 117) > 0)) {
|
||||||
cardLeft.value = 1;
|
// cardLeft.value = 1;
|
||||||
nextTick(() => {
|
// nextTick(() => {
|
||||||
cardLeft.value = saveleft.value * 117;
|
// cardLeft.value = saveleft.value * 117;
|
||||||
})
|
// })
|
||||||
}
|
// }
|
||||||
if (((savetop.value * 104.5 - topIn.value) > 5) || ((topIn.value - savetop.value * 104.5) > 0)) {
|
// if (((savetop.value * 104.5 - topIn.value) > 5) || ((topIn.value - savetop.value * 104.5) > 0)) {
|
||||||
scrollTop.value = 1;
|
// scrollTop.value = 1;
|
||||||
nextTick(() => {
|
// nextTick(() => {
|
||||||
scrollTop.value = savetop.value * 104.5;
|
// scrollTop.value = savetop.value * 104.5;
|
||||||
})
|
// })
|
||||||
}
|
// }
|
||||||
switch (where) {
|
switch (where) {
|
||||||
case 0:
|
case 0:
|
||||||
if (saveEditIndex.value.index1) {
|
if (saveEditIndex.value.index1) {
|
||||||
saveEditIndex.value.index1--
|
saveEditIndex.value.index1--
|
||||||
}
|
}
|
||||||
if (saveEditIndex.value.index1 < savetop.value) {
|
// if (saveEditIndex.value.index1 < savetop.value) {
|
||||||
savetop.value = saveEditIndex.value.index1;
|
// savetop.value = saveEditIndex.value.index1;
|
||||||
savebottom.value = saveEditIndex.value.index1 + 3
|
// savebottom.value = saveEditIndex.value.index1 + 3
|
||||||
scrollTop.value = saveEditIndex.value.index1 * 104.5;
|
// scrollTop.value = saveEditIndex.value.index1 * 104.5;
|
||||||
}
|
// }
|
||||||
// isHave()
|
// isHave()
|
||||||
break
|
break
|
||||||
case 1:
|
case 1:
|
||||||
|
|
@ -877,11 +729,11 @@
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
saveEditIndex.value.index0++
|
saveEditIndex.value.index0++
|
||||||
if (saveEditIndex.value.index0 > saveright.value) {
|
// if (saveEditIndex.value.index0 > saveright.value) {
|
||||||
saveleft.value = saveEditIndex.value.index0 - 5;
|
// saveleft.value = saveEditIndex.value.index0 - 5;
|
||||||
saveright.value = saveEditIndex.value.index0
|
// saveright.value = saveEditIndex.value.index0
|
||||||
cardLeft.value = saveleft.value * 117;
|
// cardLeft.value = saveleft.value * 117;
|
||||||
}
|
// }
|
||||||
|
|
||||||
// isHave()
|
// isHave()
|
||||||
break
|
break
|
||||||
|
|
@ -890,11 +742,11 @@
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
saveEditIndex.value.index1++
|
saveEditIndex.value.index1++
|
||||||
if (saveEditIndex.value.index1 > savebottom.value) {
|
// if (saveEditIndex.value.index1 > savebottom.value) {
|
||||||
savetop.value = saveEditIndex.value.index1 - 3;
|
// savetop.value = saveEditIndex.value.index1 - 3;
|
||||||
savebottom.value = saveEditIndex.value.index1;
|
// savebottom.value = saveEditIndex.value.index1;
|
||||||
scrollTop.value = savetop.value * 104.5;
|
// scrollTop.value = savetop.value * 104.5;
|
||||||
}
|
// }
|
||||||
// isHave()
|
// isHave()
|
||||||
break
|
break
|
||||||
case 3:
|
case 3:
|
||||||
|
|
@ -902,49 +754,51 @@
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
saveEditIndex.value.index0--
|
saveEditIndex.value.index0--
|
||||||
if (saveEditIndex.value.index0 < saveleft.value) {
|
// if (saveEditIndex.value.index0 < saveleft.value) {
|
||||||
saveleft.value = saveEditIndex.value.index0;
|
// saveleft.value = saveEditIndex.value.index0;
|
||||||
saveright.value = saveEditIndex.value.index0 + 5;
|
// saveright.value = saveEditIndex.value.index0 + 5;
|
||||||
cardLeft.value = saveleft.value * 117;
|
// cardLeft.value = saveleft.value * 117;
|
||||||
}
|
// }
|
||||||
// isHave()
|
// isHave()
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
// if(((savetop.value*117 - topIn.value) > 5) || ((topIn.value - savetop.value*104.5)>0) ){
|
|
||||||
// scrollTop.value = savetop.value * 104.5;
|
|
||||||
// }
|
|
||||||
// if(saveleft.value*117 > leftIn.value || leftIn.value > saveright.value*117 || topIn.value<savetop.value* 104.5 || topIn.value>savebottom.value* 104.5){
|
|
||||||
// // cardLeft.value = 0;
|
|
||||||
// // scrollTop.value = 0;
|
|
||||||
// // cardLeft.value = saveleft.value * 117;
|
|
||||||
// // scrollTop.value = savetop.value * 104.5;
|
|
||||||
// console.log("?????",leftIn.value,topIn.value)
|
|
||||||
// }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
const weekValue = ref("");
|
const weekValue = ref("");
|
||||||
const weekIndex = ref(-1);
|
const weekIndex = ref(-1);
|
||||||
const monthValue = ref("");
|
const monthValue = ref("");
|
||||||
const monthIndex = ref(-1);
|
const monthIndex = ref(-1);
|
||||||
const clickWeek = (item, index) => {
|
const clickWeek = (item, index) => {
|
||||||
weekValue.value = item;
|
|
||||||
weekIndex.value = index;
|
|
||||||
|
|
||||||
// selectType.value = true;
|
const now = Date.now()
|
||||||
// isweek.value = true;
|
if (now - lastTap.value < DOUBLE_TAP_DELAY) {
|
||||||
// cardsumit.value.monthTime = '';
|
// 双击成立
|
||||||
// cardsumit.value.monthTimeNumber = -1;
|
weekValue.value = item;
|
||||||
|
weekIndex.value = index;
|
||||||
|
addnew()
|
||||||
|
// 重置,避免多次触发
|
||||||
|
lastTap.value = 0
|
||||||
|
} else {
|
||||||
|
weekValue.value = item;
|
||||||
|
weekIndex.value = index;
|
||||||
|
// 记录本次时间,等待下次点击
|
||||||
|
lastTap.value = now
|
||||||
|
}
|
||||||
}
|
}
|
||||||
const clickMonth = (item, index) => {
|
const clickMonth = (item, index) => {
|
||||||
// console.log("item", item)
|
const now = Date.now()
|
||||||
monthValue.value = item;
|
if (now - lastTap.value < DOUBLE_TAP_DELAY) {
|
||||||
monthIndex.value = index;
|
// 双击成立
|
||||||
|
monthValue.value = item;
|
||||||
// selectType.value = true;
|
monthIndex.value = index;
|
||||||
// isweek.value = false;
|
addnew()
|
||||||
// cardsumit.value.weekTime = '';
|
// 重置,避免多次触发
|
||||||
// cardsumit.value.weekTimeNumber = -1;
|
lastTap.value = 0
|
||||||
|
} else {
|
||||||
|
monthValue.value = item;
|
||||||
|
monthIndex.value = index;
|
||||||
|
// 记录本次时间,等待下次点击
|
||||||
|
lastTap.value = now
|
||||||
|
}
|
||||||
}
|
}
|
||||||
const isDelete = ref(false);
|
const isDelete = ref(false);
|
||||||
const openDelete = () => {
|
const openDelete = () => {
|
||||||
|
|
@ -966,15 +820,6 @@
|
||||||
haveName.value = false;
|
haveName.value = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// const clickdelete = (type : number) => {
|
|
||||||
// if (type) {
|
|
||||||
// deleteisopen.value = false;
|
|
||||||
// deleteButton.value = false;
|
|
||||||
// } else {
|
|
||||||
// deleteRuler(deleteindex.value[0], deleteindex.value[1]);
|
|
||||||
// isHave()
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// 给抖动用的
|
// 给抖动用的
|
||||||
function pseudoRandom(index0, index1) {
|
function pseudoRandom(index0, index1) {
|
||||||
const seed = index0 * 55.9898 + index1 * 78.233;
|
const seed = index0 * 55.9898 + index1 * 78.233;
|
||||||
|
|
@ -987,14 +832,6 @@
|
||||||
}
|
}
|
||||||
// 在作用域中声明一个定时器变量
|
// 在作用域中声明一个定时器变量
|
||||||
let throttleTimer = null;
|
let throttleTimer = null;
|
||||||
|
|
||||||
// const changecurrentNumber = (event : any) => {
|
|
||||||
// // 进行你想要的操作
|
|
||||||
// currentNumber.value = event.detail.current;
|
|
||||||
// nextTick(() => {
|
|
||||||
// scrollTop.value = moveDownNumber.value;
|
|
||||||
// });
|
|
||||||
// };
|
|
||||||
//监听拖拽
|
//监听拖拽
|
||||||
const dragOffset = ref(0);
|
const dragOffset = ref(0);
|
||||||
const topIn = ref(0)
|
const topIn = ref(0)
|
||||||
|
|
@ -1008,15 +845,6 @@
|
||||||
const leftIn = ref(0)
|
const leftIn = ref(0)
|
||||||
function handleTop(e) {
|
function handleTop(e) {
|
||||||
leftIn.value = e.detail.scrollLeft
|
leftIn.value = e.detail.scrollLeft
|
||||||
// console.log(e.detail.scrollLeft)
|
|
||||||
// if(e.detail.scrollLeft>7000){
|
|
||||||
// cardLeft.value = 0;
|
|
||||||
|
|
||||||
// }else if(e.detail.scrollLeft<1000){
|
|
||||||
// // cardLeft.value = 7234;
|
|
||||||
// cardLeft.value = 7000;
|
|
||||||
// }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const changeBug = ref(true);
|
const changeBug = ref(true);
|
||||||
|
|
@ -1065,8 +893,8 @@
|
||||||
const isEdit = ref(false);
|
const isEdit = ref(false);
|
||||||
// const isLunpan = ref(false);
|
// const isLunpan = ref(false);
|
||||||
const saveEditIndex = ref({
|
const saveEditIndex = ref({
|
||||||
index0: -1,
|
index0: 9,
|
||||||
index1: -1
|
index1: 0
|
||||||
})
|
})
|
||||||
const clickstauts = ref(0)
|
const clickstauts = ref(0)
|
||||||
const secondopenValue = ref([]);
|
const secondopenValue = ref([]);
|
||||||
|
|
@ -1084,85 +912,7 @@
|
||||||
firsttop.value = 0;
|
firsttop.value = 0;
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
// const clickcircle = (index : number) => {
|
|
||||||
// if (clickstauts.value === 2 && selectType.value) {
|
|
||||||
// return
|
|
||||||
// }
|
|
||||||
// if (!index) {
|
|
||||||
// clickstauts.value++
|
|
||||||
// } else {
|
|
||||||
// if (clickstauts.value) {
|
|
||||||
// clickstauts.value--
|
|
||||||
// } else {
|
|
||||||
// songisopen.value = false
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// if (clickstauts.value === 1) {
|
|
||||||
|
|
||||||
// cardsumit.value.op.index[2] = 1
|
|
||||||
// secondopenValue.value = []
|
|
||||||
// secondopenValue.value = openValue.value.array[cardsumit.value.op.index[1]].children
|
|
||||||
// secondopenValue.value.forEach((element : any) => {
|
|
||||||
// element.relName = element.title + (element.tagName ? element.tagName.split(",").map(item => `(${item})`).join("") : "")
|
|
||||||
// })
|
|
||||||
// clickOp(0, secondopenValue.value[0])
|
|
||||||
// }
|
|
||||||
// else if (clickstauts.value === 2) {
|
|
||||||
|
|
||||||
// if (openOp.value == 1) {
|
|
||||||
// cardsumit.value.weekTime = "";
|
|
||||||
// cardsumit.value.monthTime = "";
|
|
||||||
// isweek.value = true
|
|
||||||
// // clickstauts.value =
|
|
||||||
// } else {
|
|
||||||
// clickstauts.value = 0
|
|
||||||
// movetoruler()
|
|
||||||
// }
|
|
||||||
|
|
||||||
// } else if (clickstauts.value === 3) {
|
|
||||||
|
|
||||||
// clickstauts.value = 0
|
|
||||||
// movetoruler()
|
|
||||||
// }
|
|
||||||
|
|
||||||
// }
|
|
||||||
// const openEdit = () => {
|
|
||||||
// isEdit.value = !isEdit.value;
|
|
||||||
// if (isEdit.value) {
|
|
||||||
// saveEditIndex.value.index0 = saveleft.value;
|
|
||||||
// saveEditIndex.value.index1 = 0;
|
|
||||||
// cardLeft.value = 1;
|
|
||||||
// scrollTop.value = 1;
|
|
||||||
// nextTick(() => {
|
|
||||||
// scrollTop.value = 0;
|
|
||||||
// cardLeft.value = saveleft.value * 117;
|
|
||||||
// })
|
|
||||||
// isHave()
|
|
||||||
// } else {
|
|
||||||
// saveEditIndex.value.index0 = -1;
|
|
||||||
// saveEditIndex.value.index1 = -1;
|
|
||||||
// }
|
|
||||||
// };
|
|
||||||
// const openLunpan = () => {
|
|
||||||
// isLunpan.value = !isLunpan.value;
|
|
||||||
// isEdit.value = false;
|
|
||||||
// // nnd必须这样写
|
|
||||||
// if (isLunpan.value) {
|
|
||||||
// scrollTop.value = 1;
|
|
||||||
// nextTick(() => {
|
|
||||||
// scrollTop.value = 0;
|
|
||||||
// })
|
|
||||||
// }
|
|
||||||
|
|
||||||
// if (isLunpan.value) {
|
|
||||||
// saveEditIndex.value.index0 = saveleft.value;
|
|
||||||
// saveEditIndex.value.index1 = 0;
|
|
||||||
// isHave()
|
|
||||||
// } else {
|
|
||||||
// saveEditIndex.value.index0 = -1;
|
|
||||||
// saveEditIndex.value.index1 = -1;
|
|
||||||
// }
|
|
||||||
// };
|
|
||||||
const newchange = (type : number) => {
|
const newchange = (type : number) => {
|
||||||
emit('changeold', type)
|
emit('changeold', type)
|
||||||
}
|
}
|
||||||
|
|
@ -1192,21 +942,7 @@
|
||||||
deletedownisopacity.value = true
|
deletedownisopacity.value = true
|
||||||
}, 100)
|
}, 100)
|
||||||
}
|
}
|
||||||
// const deleteindex = ref([-1, -1])
|
|
||||||
// const deleteId = ref("");
|
|
||||||
// const deleteItems = (item : any, index0 : number, index1 : number) => {
|
|
||||||
// deleteindex.value = [-1, -1];
|
|
||||||
// shakyTable.value = false;
|
|
||||||
// bottomisShaking.value = false;
|
|
||||||
// deleteisopacity.value = false;
|
|
||||||
// deleteisopen.value = true;
|
|
||||||
// deleteindex.value = [index0, index1]
|
|
||||||
// deletename.value = item.directiveName;
|
|
||||||
// deleteId.value = item.id
|
|
||||||
// setTimeout(() => {
|
|
||||||
// deleteisopacity.value = true
|
|
||||||
// }, 100)
|
|
||||||
// }
|
|
||||||
const touchindex1 = ref(-1);
|
const touchindex1 = ref(-1);
|
||||||
// 分享矩阵到微信
|
// 分享矩阵到微信
|
||||||
const shareShow = ref(false);
|
const shareShow = ref(false);
|
||||||
|
|
@ -1277,33 +1013,7 @@
|
||||||
const reldata = ref([]);
|
const reldata = ref([]);
|
||||||
//表格长按开始
|
//表格长按开始
|
||||||
const rulerTouchStart = (item : any, index0 : number, index1 : number, e : any) => {
|
const rulerTouchStart = (item : any, index0 : number, index1 : number, e : any) => {
|
||||||
// scrollTop.value = moveDownNumber.value;
|
|
||||||
// moveX.value = Math.floor(e.touches[0].pageX);
|
|
||||||
// moveY.value = Math.floor(e.touches[0].pageY);
|
|
||||||
// timer.value = setTimeout(() => {
|
|
||||||
// if (item.directiveName) {
|
|
||||||
// flyNumber.value.typeName = item.typeName
|
|
||||||
// flyNumber.value.index0 = index0;
|
|
||||||
// flyNumber.value.index1 = index1;
|
|
||||||
// indexsave.value = [-1, -1]
|
|
||||||
// reldata.value = []
|
|
||||||
// isTuoing.value = true;
|
|
||||||
// const query = uni.createSelectorQuery()
|
|
||||||
// query
|
|
||||||
// .selectAll('.super-card-time-card')
|
|
||||||
// .boundingClientRect((data : any) => {
|
|
||||||
// data.forEach(async (res : any) => {
|
|
||||||
// // 根据你的条件筛选元素
|
|
||||||
// if (res.left > 200 && res.left < 1067 && res.top < 570 && res.top > 140) {
|
|
||||||
// shakyTable.value = true;
|
|
||||||
// reldata.value.push(res)
|
|
||||||
// }
|
|
||||||
// })
|
|
||||||
// })
|
|
||||||
// .exec()
|
|
||||||
// emit('saveruler', item, reldata.value);
|
|
||||||
// }
|
|
||||||
// }, 100); // 2秒后触发
|
|
||||||
}
|
}
|
||||||
const rulerTouchMove = (e : any) => {
|
const rulerTouchMove = (e : any) => {
|
||||||
const moveXa = Math.floor(e.touches[0].pageX);
|
const moveXa = Math.floor(e.touches[0].pageX);
|
||||||
|
|
@ -1598,87 +1308,11 @@
|
||||||
index1: saveEditIndex.value.index1
|
index1: saveEditIndex.value.index1
|
||||||
}
|
}
|
||||||
whereEvent(data);
|
whereEvent(data);
|
||||||
// isHave()
|
|
||||||
saveAll()
|
saveAll()
|
||||||
// console.log("!!!!!!!!",timearr.value)
|
|
||||||
|
|
||||||
}
|
}
|
||||||
const cleansettimeout = ref(null);
|
const cleansettimeout = ref(null);
|
||||||
const cleansettimeoutrel = ref(null);
|
const cleansettimeoutrel = ref(null);
|
||||||
|
|
||||||
// const movetoruler = async () => {
|
|
||||||
// //关闭弹窗
|
|
||||||
// songisopen.value = false;
|
|
||||||
// // 还原成默认选项
|
|
||||||
// isweek.value = true;
|
|
||||||
// //如果是即时指令直接干掉
|
|
||||||
// if (openOp.value === 2) {
|
|
||||||
// scrollLeft.value = 1;
|
|
||||||
// nextTick(() => {
|
|
||||||
// scrollLeft.value = 0;
|
|
||||||
|
|
||||||
// if (bottomItems.value[0].target === "#00a8ff") {
|
|
||||||
|
|
||||||
// bottomItems.value[0].target === "#fff"
|
|
||||||
// clearTimeout(cleansettimeout.value);
|
|
||||||
// }
|
|
||||||
// nextTick(() => {
|
|
||||||
// bottomItems.value.unshift({
|
|
||||||
// name: cardsumit.value.op.name,
|
|
||||||
// url: "/static/index/ou.png",
|
|
||||||
// target: `#00a8ff`
|
|
||||||
// })
|
|
||||||
// // 实现即时指令动画
|
|
||||||
// cleansettimeout.value = setTimeout(() => {
|
|
||||||
// bottomItems.value[0].target = `#fff`;
|
|
||||||
// }, 1500)
|
|
||||||
// })
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// })
|
|
||||||
// return
|
|
||||||
// }
|
|
||||||
// let cycleType = ""
|
|
||||||
// //看看是啥指令
|
|
||||||
// if (!openOp.value) {
|
|
||||||
// cycleType = "日常";
|
|
||||||
// } else if (openOp.value === 1) {
|
|
||||||
// cycleType = cardsumit.value.weekTime || (cardsumit.value.monthTime + '号');
|
|
||||||
// }
|
|
||||||
|
|
||||||
// const startHour = Number(openValue.value.time)
|
|
||||||
// const startMinute = Number(openValue.value.minute)
|
|
||||||
// const endMinute = startMinute + 10
|
|
||||||
|
|
||||||
// const endHour = startHour + Math.floor(endMinute / 60)
|
|
||||||
// const formattedStart = `${String(startHour)}:${String(startMinute).padStart(2, '0')}`
|
|
||||||
// const formattedEnd = `${String(endHour)}:${String(endMinute % 60).padStart(2, '0')}`
|
|
||||||
|
|
||||||
// timearr.value[indexsave.value[0]].children[indexsave.value[1]].startTime = formattedStart
|
|
||||||
// timearr.value[indexsave.value[0]].children[indexsave.value[1]].endTime = formattedEnd
|
|
||||||
|
|
||||||
// let param = {
|
|
||||||
// directiveId: saveId.value,
|
|
||||||
// directiveName: cardsumit.value.op.name,
|
|
||||||
// startTime: formattedStart,
|
|
||||||
// endTime: formattedEnd,
|
|
||||||
// positioning: indexsave.value[0].toString(),
|
|
||||||
// positioningLong: indexsave.value[1].toString(),
|
|
||||||
// tagName: saveTagName.value,
|
|
||||||
// cycleType: cycleType,
|
|
||||||
// nuId: "1",
|
|
||||||
// customerId: "1",
|
|
||||||
// id: "",
|
|
||||||
// typeName: timearr.value[indexsave.value[0]].children[indexsave.value[1]].typeName,
|
|
||||||
// }
|
|
||||||
// //给表格赋值
|
|
||||||
// timearr.value[indexsave.value[0]].children[indexsave.value[1]] = param;
|
|
||||||
// movecard(1)
|
|
||||||
// isHave()
|
|
||||||
// saveAll()
|
|
||||||
// }
|
|
||||||
const saveAll = () => {
|
const saveAll = () => {
|
||||||
//给后端编译一下
|
//给后端编译一下
|
||||||
let postArray = [];
|
let postArray = [];
|
||||||
|
|
@ -1703,7 +1337,6 @@
|
||||||
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
// console.log("!!!!!!!!", postArray)
|
|
||||||
}
|
}
|
||||||
const routerPush = () => {
|
const routerPush = () => {
|
||||||
uni.setStorage({
|
uni.setStorage({
|
||||||
|
|
@ -1728,16 +1361,10 @@
|
||||||
bordershow: true
|
bordershow: true
|
||||||
})
|
})
|
||||||
const whereEvent = (data : any) => {
|
const whereEvent = (data : any) => {
|
||||||
// scrollTop.value = 0;
|
|
||||||
// scrollTop.value = data.index1 * 104;
|
|
||||||
// cardLeft.value = 0;
|
|
||||||
// cardLeft.value = data.index0 * 113;
|
|
||||||
|
|
||||||
targetRuler.value.index0 = data.index0;
|
targetRuler.value.index0 = data.index0;
|
||||||
targetRuler.value.index1 = data.index1;
|
targetRuler.value.index1 = data.index1;
|
||||||
saveRulerTime.value.index0 = targetRuler.value.index0;
|
saveRulerTime.value.index0 = targetRuler.value.index0;
|
||||||
saveRulerTime.value.index1 = targetRuler.value.index1;
|
saveRulerTime.value.index1 = targetRuler.value.index1;
|
||||||
// targetRuler.value.current = currentNumber.value
|
|
||||||
targetRuler.value.bordershow = false;
|
targetRuler.value.bordershow = false;
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
targetRuler.value.index0 = -1;
|
targetRuler.value.index0 = -1;
|
||||||
|
|
@ -1749,46 +1376,6 @@
|
||||||
saveRulerTime.value.index0 = -1;
|
saveRulerTime.value.index0 = -1;
|
||||||
saveRulerTime.value.index1 = -1;
|
saveRulerTime.value.index1 = -1;
|
||||||
}, 1000)
|
}, 1000)
|
||||||
// if (currentNumber.value === Math.floor(data.index0 / 8)) {
|
|
||||||
// targetRuler.value.index0 = data.index0 - currentNumber.value * 8;
|
|
||||||
// targetRuler.value.index1 = data.index1;
|
|
||||||
// saveRulerTime.value.index0 = targetRuler.value.index0;
|
|
||||||
// saveRulerTime.value.index1 = targetRuler.value.index1;
|
|
||||||
// targetRuler.value.current = currentNumber.value
|
|
||||||
// targetRuler.value.bordershow = false;
|
|
||||||
// setTimeout(() => {
|
|
||||||
// targetRuler.value.index0 = -1;
|
|
||||||
// targetRuler.value.index1 = -1;
|
|
||||||
// targetRuler.value.current = -1
|
|
||||||
// }, 400)
|
|
||||||
// setTimeout(() => {
|
|
||||||
// targetRuler.value.bordershow = true;
|
|
||||||
// saveRulerTime.value.index0 = -1;
|
|
||||||
// saveRulerTime.value.index1 = -1;
|
|
||||||
// }, 1000)
|
|
||||||
// } else {
|
|
||||||
// setTimeout(() => {
|
|
||||||
// currentNumber.value = Math.floor(data.index0 / 8);
|
|
||||||
// }, 100)
|
|
||||||
// setTimeout(() => {
|
|
||||||
// targetRuler.value.index0 = data.index0 - currentNumber.value * 8;
|
|
||||||
// targetRuler.value.index1 = data.index1;
|
|
||||||
// saveRulerTime.value.index0 = targetRuler.value.index0;
|
|
||||||
// saveRulerTime.value.index1 = targetRuler.value.index1;
|
|
||||||
// targetRuler.value.current = currentNumber.value
|
|
||||||
// targetRuler.value.bordershow = false;
|
|
||||||
// }, 800)
|
|
||||||
// setTimeout(() => {
|
|
||||||
// targetRuler.value.index0 = -1;
|
|
||||||
// targetRuler.value.index1 = -1;
|
|
||||||
// targetRuler.value.current = -1
|
|
||||||
// }, 1400)
|
|
||||||
// setTimeout(() => {
|
|
||||||
// targetRuler.value.bordershow = true;
|
|
||||||
// saveRulerTime.value.index0 = -1;
|
|
||||||
// saveRulerTime.value.index1 = -1;
|
|
||||||
// }, 2200)
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
// 定义每小时中的分钟数组,表示每 5 分钟一个时间段,总共 12 个
|
// 定义每小时中的分钟数组,表示每 5 分钟一个时间段,总共 12 个
|
||||||
const minuteArr = ['00', '05', '10', '15', '20', '25', '30', '35', '40', '45', '50', '55']
|
const minuteArr = ['00', '05', '10', '15', '20', '25', '30', '35', '40', '45', '50', '55']
|
||||||
|
|
@ -1802,31 +1389,16 @@
|
||||||
}))
|
}))
|
||||||
)
|
)
|
||||||
onShow(() => {
|
onShow(() => {
|
||||||
// console.log("QQQQ", myArray)
|
|
||||||
bigArray.value = myArray
|
bigArray.value = myArray
|
||||||
downList.value = bigArray.value[0].children
|
downList.value = bigArray.value[0].children
|
||||||
// console.log("aaaaa", timearr.value)
|
|
||||||
//暂时注释
|
|
||||||
// getServiceTree().then((res : any) => {
|
|
||||||
// console.log("!!!!!!!",res.result)
|
|
||||||
// bigArray.value = res.result
|
|
||||||
// downList.value = bigArray.value[0].children
|
|
||||||
// })
|
|
||||||
|
|
||||||
// getNclist().then((res : any) => {
|
|
||||||
// console.log("!!!!!!!!!!!!!!!!!!!",res.result)
|
|
||||||
// timearr.value = res.result
|
|
||||||
// })
|
|
||||||
// timearr.value = saveArray
|
|
||||||
uni.$on('where', whereEvent);
|
uni.$on('where', whereEvent);
|
||||||
|
console.log("???",saveEditIndex.value)
|
||||||
})
|
})
|
||||||
onHide(() => {
|
onHide(() => {
|
||||||
uni.$off('where', whereEvent);
|
uni.$off('where', whereEvent);
|
||||||
});
|
});
|
||||||
defineExpose({
|
defineExpose({
|
||||||
// rulerEnd,
|
|
||||||
rulerMoveEnd,
|
rulerMoveEnd,
|
||||||
// nextItems,
|
|
||||||
})
|
})
|
||||||
|
|
||||||
const moveNumber = ref({
|
const moveNumber = ref({
|
||||||
|
|
@ -1877,6 +1449,40 @@
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
watch(
|
||||||
|
[() => saveEditIndex.value.index0, () => saveEditIndex.value.index1],
|
||||||
|
() => {
|
||||||
|
centerCell();
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
const totalColumns = 24; // 总列数
|
||||||
|
const totalRows = 11; // 总行数
|
||||||
|
const visibleWidth = 1405; // 可视区域宽度 (rpx),基于 scalcType * widthType ≈ 2220
|
||||||
|
const visibleHeight = 480; // 可视区域高度 (rpx),假设显示约5行时 heightType = 102.5
|
||||||
|
function centerCell() {
|
||||||
|
if (saveEditIndex.value.index0 >= 0 && saveEditIndex.value.index0 <= totalColumns && saveEditIndex.value.index1 >= 0 && saveEditIndex.value.index1 <= totalRows) {
|
||||||
|
// 计算点击格子的中心位置 (rpx)
|
||||||
|
const cellCenterX = (saveEditIndex.value.index0 ) * 234;
|
||||||
|
const cellCenterY = (saveEditIndex.value.index1 ) * 210;
|
||||||
|
console.log("!!!!",saveEditIndex.value.index0)
|
||||||
|
// 计算 scrollLeft 和 scrollTop,使格子中心位于可视区域中心
|
||||||
|
cardLeft.value = cellCenterX - visibleWidth / 2;
|
||||||
|
scrollTop.value = cellCenterY - visibleHeight / 2;
|
||||||
|
|
||||||
|
// 计算网格总宽高
|
||||||
|
const totalWidth = totalColumns * 234;
|
||||||
|
const totalHeight = totalRows * 210;
|
||||||
|
|
||||||
|
// 限制 scrollLeft 和 scrollTop 在有效范围内
|
||||||
|
cardLeft.value = Math.max(0, Math.min(cardLeft.value, totalWidth - visibleWidth)) /2;
|
||||||
|
// scrollTop.value = 0
|
||||||
|
scrollTop.value = Math.max(0, Math.min(scrollTop.value, totalHeight - visibleHeight)) /2;
|
||||||
|
|
||||||
|
console.log("????",cardLeft.value,scrollTop.value)
|
||||||
|
// console.log("????",scrollLeft.value,scrollTop.value,rpx2px)
|
||||||
|
}
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="less" scoped>
|
<style lang="less" scoped>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,49 @@
|
||||||
|
// 引入 request 文件
|
||||||
|
import request from '@/request/index.js'
|
||||||
|
|
||||||
|
// 以下 api 为博主项目示例,实际与项目相匹配
|
||||||
|
|
||||||
|
// 查询服务类型
|
||||||
|
export const getServiceTree = () => {
|
||||||
|
return request({
|
||||||
|
url: '/nuIpadApi/nuConfigServiceCategory/getServiceTree',
|
||||||
|
method: 'get',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 查询表格
|
||||||
|
export const getNclist = () => {
|
||||||
|
return request({
|
||||||
|
url: '/nuIpadApi/nuBizNuCustomerServer/getNclist?nuId=1&customerId=1',
|
||||||
|
method: 'get',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 新增表格
|
||||||
|
export const addNuCustomerServer = (params) => {
|
||||||
|
return request({
|
||||||
|
url: '/nuIpadApi/nuBizNuCustomerServer/addNuCustomerServer',
|
||||||
|
method: 'post',
|
||||||
|
data: params,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 移动表格
|
||||||
|
export const editNuCustomerServer = (params) => {
|
||||||
|
return request({
|
||||||
|
url: '/nuIpadApi/nuBizNuCustomerServer/editNuCustomerServer',
|
||||||
|
method: 'post',
|
||||||
|
data: params,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
export const deleteNuCustomerServer = (params) => {
|
||||||
|
return request({
|
||||||
|
url: `/nuIpadApi/nuBizNuCustomerServer/deleteNuCustomerServer?id=${params.id}`,
|
||||||
|
method: 'delete',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 移动表格
|
||||||
|
export const addBatch = (params) => {
|
||||||
|
return request({
|
||||||
|
url: '/nuIpadApi/nuBizNuCustomerServer/addBatch',
|
||||||
|
method: 'post',
|
||||||
|
data: params,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
|
||||||
|
// 定义 Link 类型
|
||||||
|
export type roomBtttonType = {
|
||||||
|
url : string;
|
||||||
|
targetUrl : string;
|
||||||
|
name : string
|
||||||
|
}
|
||||||
|
|
@ -92,10 +92,11 @@
|
||||||
.zy-modal.drawer-modal.show .zy-dialog {
|
.zy-modal.drawer-modal.show .zy-dialog {
|
||||||
transform: translateX(0%);
|
transform: translateX(0%);
|
||||||
}
|
}
|
||||||
.zy-modal .zy-dialog>.zy-bar:first-child .action{
|
|
||||||
min-width: 100rpx;
|
.zy-modal .zy-dialog>.zy-bar:first-child .action {
|
||||||
margin-right: 0;
|
min-width: 100rpx;
|
||||||
min-height: 100rpx;
|
margin-right: 0;
|
||||||
|
min-height: 100rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ==================
|
/* ==================
|
||||||
|
|
@ -172,22 +173,32 @@
|
||||||
==================== */
|
==================== */
|
||||||
|
|
||||||
.zy-btn {
|
.zy-btn {
|
||||||
position: relative;
|
/* position: relative;
|
||||||
border: 0upx;
|
border: 0upx; */
|
||||||
display: inline-flex;
|
/* display: inline-flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center; */
|
||||||
box-sizing: border-box;
|
/* box-sizing: border-box; */
|
||||||
padding: 0 30upx;
|
/* padding: 0 30upx; */
|
||||||
font-size: 28upx;
|
/* font-size: 28upx; */
|
||||||
height: 64upx;
|
/* height: 64upx; */
|
||||||
line-height: 1;
|
/* line-height: 1;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
overflow: visible;
|
overflow: visible;
|
||||||
margin-left: initial;
|
margin-left: initial;
|
||||||
transform: translate(0upx, 0upx);
|
transform: translate(0upx, 0upx);
|
||||||
margin-right: initial;
|
margin-right: initial; */
|
||||||
|
height: 90rpx;
|
||||||
|
width: 550rpx;
|
||||||
|
/* margin: 0 auto; */
|
||||||
|
background: linear-gradient(to right, #00C9FF, #0076FF);
|
||||||
|
border-radius: 30rpx;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
color: #fff;
|
||||||
|
font-size: 32rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
.zy-btn::after {
|
.zy-btn::after {
|
||||||
|
|
@ -1576,6 +1587,7 @@ button.cuIcon.lg {
|
||||||
z-index: 0;
|
z-index: 0;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ==================
|
/* ==================
|
||||||
文本
|
文本
|
||||||
==================== */
|
==================== */
|
||||||
|
|
@ -1744,4 +1756,4 @@ button.cuIcon.lg {
|
||||||
.line-white,
|
.line-white,
|
||||||
.lines-white {
|
.lines-white {
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
}
|
}
|
||||||
|
|
@ -1,16 +1,22 @@
|
||||||
<template>
|
<template>
|
||||||
<view class="zy-modal" :class="dshow?'show':''">
|
<view class="zy-modal" :class="dshow?'show':''">
|
||||||
<view class="zy-dialog" style="background-color: transparent;">
|
<view style="position: absolute;top: 300rpx;left: 1040rpx;z-index: 9999;" >
|
||||||
<view class="padding-top text-white" :class="'zy-upgrade-topbg-'+theme">
|
<image style="width: 300rpx;height: 400rpx;position: absolute;top: 0rpx;left: 0rpx;" src="/static/index/update/fly.png" />
|
||||||
|
</view>
|
||||||
|
<view class="zy-dialog" style="background-color: #fff;border-radius: 40rpx;">
|
||||||
|
<view style="height: 400rpx;width: 100%;position: relative;">
|
||||||
|
<image style="width: 1800rpx;height: 1600rpx;position: absolute;top: -370rpx;left: -220rpx;" src="/static/index/update/bgc.png" />
|
||||||
|
</view>
|
||||||
|
<view :class="'zy-upgrade-topbg-'+theme">
|
||||||
<view>
|
<view>
|
||||||
<text class="zy-upgrade-title">
|
<text class="zy-upgrade-title">
|
||||||
发现新版本
|
发现新版本
|
||||||
</text>
|
</text>
|
||||||
</view>
|
</view>
|
||||||
<text class="flex-wrap">{{version}}</text>
|
<text class="flex-wrap" style="margin-top: 10rpx;">{{version}}</text>
|
||||||
</view>
|
</view>
|
||||||
<view class="padding-xl bg-white text-left">
|
<view class="padding-xl bg-white text-left">
|
||||||
<scroll-view style="max-height: 200rpx;" scroll-y="auto" v-if="!update_flag">
|
<scroll-view style="max-height: 200rpx;text-align: center;" scroll-y="auto" v-if="!update_flag">
|
||||||
<text>{{update_tips}}</text>
|
<text>{{update_tips}}</text>
|
||||||
</scroll-view>
|
</scroll-view>
|
||||||
<view class="zy-progress radius striped active" v-if="update_flag">
|
<view class="zy-progress radius striped active" v-if="update_flag">
|
||||||
|
|
@ -19,7 +25,7 @@
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="zy-bar bg-white justify-end">
|
<view class="zy-bar bg-white " style="justify-content: center;display: flex;margin-bottom: 60rpx;">
|
||||||
<view class="action" v-if="!update_flag">
|
<view class="action" v-if="!update_flag">
|
||||||
<button class="zy-btn" :class="'bg-'+theme" @click="upgrade_checked">确认升级</button>
|
<button class="zy-btn" :class="'bg-'+theme" @click="upgrade_checked">确认升级</button>
|
||||||
<button class="zy-btn margin-left" :class="'line-'+theme"
|
<button class="zy-btn margin-left" :class="'line-'+theme"
|
||||||
|
|
@ -131,7 +137,7 @@
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
dataType:'json',
|
dataType:'json',
|
||||||
success: (res) => {
|
success: (res) => {
|
||||||
console.log("?????",res)
|
console.log("?????",res.data.code)
|
||||||
if(res.statusCode===404){
|
if(res.statusCode===404){
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
@ -212,7 +218,7 @@
|
||||||
url: targetUrl,
|
url: targetUrl,
|
||||||
header:this.header,
|
header:this.header,
|
||||||
success:function(res){
|
success:function(res){
|
||||||
// console.log("!!!",res)
|
console.log("!!!",res)
|
||||||
if(res.statusCode == 200){
|
if(res.statusCode == 200){
|
||||||
//开始安装
|
//开始安装
|
||||||
plus.runtime.install(res.tempFilePath, {
|
plus.runtime.install(res.tempFilePath, {
|
||||||
|
|
@ -291,13 +297,14 @@
|
||||||
height: 290rpx;
|
height: 290rpx;
|
||||||
}
|
}
|
||||||
.zy-upgrade-topbg-blue {
|
.zy-upgrade-topbg-blue {
|
||||||
background-image: url('static/images/blue.png');
|
/* background-image: url('static/images/blue.png'); */
|
||||||
background-size: 100% 100%;
|
background-size: 100% 100%;
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
height: 290rpx;
|
/* height: 290rpx; */
|
||||||
}
|
}
|
||||||
.zy-upgrade-title {
|
.zy-upgrade-title {
|
||||||
font-size: 50rpx;
|
font-size: 35rpx;
|
||||||
color: white;
|
font-weight: 600;
|
||||||
|
/* color: white; */
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,8 @@
|
||||||
"name" : "护理单元",
|
"name" : "护理单元",
|
||||||
"appid" : "__UNI__FB2D473",
|
"appid" : "__UNI__FB2D473",
|
||||||
"description" : "护理单元",
|
"description" : "护理单元",
|
||||||
"versionName" : "1.2.5",
|
"versionName" : "1.2.9",
|
||||||
"versionCode" : 125,
|
"versionCode" : 129,
|
||||||
"transformPx" : false,
|
"transformPx" : false,
|
||||||
/* 5+App特有相关 */
|
/* 5+App特有相关 */
|
||||||
"app-plus" : {
|
"app-plus" : {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<view :class="darkFans?`darkbackgroundContainer`:`backgroundContainer`">
|
<view :class="darkFans?`darkbackgroundContainer`:`backgroundContainer`">
|
||||||
<view class="index-title">
|
<!-- <view class="index-title">
|
||||||
<view class="index-title-left">
|
<view class="index-title-left">
|
||||||
<image class="index-title-left-img" src="/static/index/customer.png" />
|
<image class="index-title-left-img" src="/static/index/customer.png" />
|
||||||
<view class="index-title-left-font">
|
<view class="index-title-left-font">
|
||||||
|
|
@ -9,15 +9,15 @@
|
||||||
<view class="index-title-left-wel">
|
<view class="index-title-left-wel">
|
||||||
长春市朝阳区久泰开运养老服务有限公司
|
长春市朝阳区久泰开运养老服务有限公司
|
||||||
</view>
|
</view>
|
||||||
<!-- <view class="index-title-left-weight">
|
<view class="index-title-left-weight">
|
||||||
{{name}}
|
{{name}}
|
||||||
</view>
|
</view>
|
||||||
<view class="">
|
<view class="">
|
||||||
长春市朝阳区久泰开运养老服务有限公司
|
长春市朝阳区久泰开运养老服务有限公司
|
||||||
</view> -->
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="index-title-right">
|
<view class="index-title-right">
|
||||||
|
长春市朝阳区久泰开运养老服务有限公司
|
||||||
<view v-for="(item,index) in ballList" :key="index">
|
<view v-for="(item,index) in ballList" :key="index">
|
||||||
<view class="ball-bgc" @click="jumpToIndex(index)">
|
<view class="ball-bgc" @click="jumpToIndex(index)">
|
||||||
<image class="ball-img" :src="item.url" />
|
<image class="ball-img" :src="item.url" />
|
||||||
|
|
@ -33,9 +33,17 @@
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view> -->
|
||||||
<view class="index-content">
|
<view class="index-content">
|
||||||
<view class="index-content-leftMenus">
|
<view class="index-content-leftMenus">
|
||||||
|
<view class="index-title-title">
|
||||||
|
<image class="index-title-left-img" src="/static/index/customer.png" />
|
||||||
|
<view class="index-title-left-font">
|
||||||
|
{{name}}
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
|
||||||
<view v-for="(item,index) in iconList" :key="index" class="blue-circle-pos">
|
<view v-for="(item,index) in iconList" :key="index" class="blue-circle-pos">
|
||||||
<view class="blue-circle" v-show="index === menuIndex">
|
<view class="blue-circle" v-show="index === menuIndex">
|
||||||
<image class="blue-circle-size" :src="`/static/index/ray.png`" />
|
<image class="blue-circle-size" :src="`/static/index/ray.png`" />
|
||||||
|
|
@ -52,6 +60,7 @@
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<!-- 首页 -->
|
<!-- 首页 -->
|
||||||
|
|
||||||
<fuwu :isShow="menuIndex == 0" />
|
<fuwu :isShow="menuIndex == 0" />
|
||||||
<storeroomindex :isShow="menuIndex == -1" @nav="navMenu" />
|
<storeroomindex :isShow="menuIndex == -1" @nav="navMenu" />
|
||||||
<leidaindex :isShow="menuIndex==-2" />
|
<leidaindex :isShow="menuIndex==-2" />
|
||||||
|
|
@ -82,14 +91,12 @@
|
||||||
const detailisopacity = ref(false)
|
const detailisopacity = ref(false)
|
||||||
// 初始化左侧菜单列表
|
// 初始化左侧菜单列表
|
||||||
const iconList = ref<Link[]>([
|
const iconList = ref<Link[]>([
|
||||||
{ url: '/static/index/lefticon/index.png', targetUrl: '/static/index/lefticontarget/blueindex.png', name: '首页', pao: 0 },
|
{ url: '/static/index/relindex/index.png', targetUrl: '/static/index/relindex/indexblue.png', name: '首页', pao: 0 },
|
||||||
{ url: '/static/index/Warehousing/dingdan.png', targetUrl: '/static/index/Warehousing/dingdanblue.png', name: '服务考核', pao: 0 },
|
{ url: '/static/index/relindex/fuwu.png', targetUrl: '/static/index/relindex/fuwublue.png', name: '服务考核', pao: 0 },
|
||||||
{ url: '/static/index/Warehousing/chuku.png', targetUrl: '/static/index/Warehousing/chukublue.png', name: '库房管理', pao: 5 },
|
{ url: '/static/index/relindex/jigou.png', targetUrl: '/static/index/relindex/jigoublue.png', name: '机构功能1', pao: 0 },
|
||||||
|
{ url: '/static/index/relindex/jigou.png', targetUrl: '/static/index/relindex/jigoublue.png', name: '机构功能2', pao: 0 },
|
||||||
{ url: '/static/index/Warehousing/jiankong.png', targetUrl: '/static/index/Warehousing/jiankongblue.png', name: '机构功能1', pao: 0 },
|
{ url: '/static/index/relindex/jigou.png', targetUrl: '/static/index/relindex/jigoublue.png', name: '机构功能3', pao: 0 },
|
||||||
{ url: '/static/index/Warehousing/jiankong.png', targetUrl: '/static/index/Warehousing/jiankongblue.png', name: '机构功能2', pao: 0 },
|
{ url: '/static/index/relindex/shezhi.png', targetUrl: '/static/index/relindex/shezhiblue.png', name: '设置', pao: 0 },
|
||||||
{ url: '/static/index/Warehousing/jiankong.png', targetUrl: '/static/index/Warehousing/jiankongblue.png', name: '设置', pao: 0 },
|
|
||||||
// { url: '/static/index/lefticon/back.png', targetUrl: '/static/index/lefticontarget/blueback.png', name: '返回', pao: 0 }
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const iconTop = ref<iconTopLink[]>([
|
const iconTop = ref<iconTopLink[]>([
|
||||||
|
|
@ -203,15 +210,7 @@
|
||||||
align-items: center;
|
align-items: center;
|
||||||
margin-top: 20rpx;
|
margin-top: 20rpx;
|
||||||
|
|
||||||
.index-title-left-img {
|
|
||||||
width: 75rpx;
|
|
||||||
height: 75rpx;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
.index-title-left-font {
|
|
||||||
margin-left: 20rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
.index-title-left-wel {
|
.index-title-left-wel {
|
||||||
margin-left: 40rpx;
|
margin-left: 40rpx;
|
||||||
|
|
@ -228,6 +227,7 @@
|
||||||
height: 100%;
|
height: 100%;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
margin-top: 20rpx;
|
margin-top: 20rpx;
|
||||||
|
margin-right: 10rpx;
|
||||||
|
|
||||||
.top-card {
|
.top-card {
|
||||||
width: 180rpx;
|
width: 180rpx;
|
||||||
|
|
@ -256,19 +256,21 @@
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: calc(100vh - 150rpx);
|
height: calc(100vh - 150rpx);
|
||||||
display: flex;
|
display: flex;
|
||||||
|
margin-top: 55rpx;
|
||||||
|
|
||||||
.index-content-leftMenus {
|
.index-content-leftMenus {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
width: 170rpx;
|
width: 170rpx;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
// justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
margin-top: -15rpx;
|
margin-top: 20rpx;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
.left-img {
|
.left-img {
|
||||||
width: 93rpx;
|
width: 90rpx;
|
||||||
height: 93rpx;
|
height: 90rpx;
|
||||||
// margin: 50rpx 0;
|
// margin: 50rpx 0;
|
||||||
z-index: 100;
|
z-index: 100;
|
||||||
}
|
}
|
||||||
|
|
@ -276,12 +278,13 @@
|
||||||
.left-img-font {
|
.left-img-font {
|
||||||
margin-top: 10rpx;
|
margin-top: 10rpx;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
|
font-size: 25rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
.left-img-font-target {
|
.left-img-font-target {
|
||||||
margin-top: 10rpx;
|
margin-top: 10rpx;
|
||||||
color: #0174D3;
|
color: #0174D3;
|
||||||
|
font-size: 25rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
.blue-circle-pos {
|
.blue-circle-pos {
|
||||||
|
|
@ -290,8 +293,8 @@
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
height: 230rpx;
|
height: 800rpx;
|
||||||
|
|
||||||
|
|
||||||
.blue-circle {
|
.blue-circle {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
|
@ -335,4 +338,19 @@
|
||||||
height: 38rpx;
|
height: 38rpx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.index-title-title{
|
||||||
|
// width: 200rpx;
|
||||||
|
height: 200rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.index-title-left-img {
|
||||||
|
width: 75rpx;
|
||||||
|
height: 75rpx;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.index-title-left-font {
|
||||||
|
// margin-left: 20rpx;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
@ -54,7 +54,7 @@
|
||||||
:darkFans="darkFans" v-show="menuIndex==1&&!isOld" @darkchange="darkchange" @savename="openname"
|
:darkFans="darkFans" v-show="menuIndex==1&&!isOld" @darkchange="darkchange" @savename="openname"
|
||||||
@saveruler="openruler" @changefangkuang="changefangkuang" @cleanname="closename" @changeold="isOldchange" />
|
@saveruler="openruler" @changefangkuang="changefangkuang" @cleanname="closename" @changeold="isOldchange" />
|
||||||
<!-- 新表格 -->
|
<!-- 新表格 -->
|
||||||
<rightItemssecondnew ref="rulernew" :isold="isOld===1" :liang="indexNumber" :isshow="menuIndexshowsecond" :canmove="canmove"
|
<specialruler ref="rulernew" :isold="isOld===1" :liang="indexNumber" :isshow="menuIndexshowsecond" :canmove="canmove"
|
||||||
:darkFans="darkFans" v-show="menuIndex==1&&isOld===1" @darkchange="darkchange" @savename="openname"
|
:darkFans="darkFans" v-show="menuIndex==1&&isOld===1" @darkchange="darkchange" @savename="openname"
|
||||||
@saveruler="openruler" @changefangkuang="changefangkuang" @cleanname="closename" @changeold="isOldchange" />
|
@saveruler="openruler" @changefangkuang="changefangkuang" @cleanname="closename" @changeold="isOldchange" />
|
||||||
<!-- 新表格 -->
|
<!-- 新表格 -->
|
||||||
|
|
@ -69,7 +69,7 @@
|
||||||
import type { Link } from "./index";
|
import type { Link } from "./index";
|
||||||
import rightItemsfirst from "../../component/rightItemsindex/index.vue"
|
import rightItemsfirst from "../../component/rightItemsindex/index.vue"
|
||||||
import rightItemssecond from "../../component/rightItemssecond/index.vue"
|
import rightItemssecond from "../../component/rightItemssecond/index.vue"
|
||||||
import rightItemssecondnew from "../../component/rightItemssecondnew/index.vue"
|
import specialruler from "../../component/specialruler/index.vue"
|
||||||
import rightItemssecondrelnew from "../../component/rightItemssecondrelnew/index.vue"
|
import rightItemssecondrelnew from "../../component/rightItemssecondrelnew/index.vue"
|
||||||
import { onShow } from '@dcloudio/uni-app';
|
import { onShow } from '@dcloudio/uni-app';
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,9 +12,9 @@ export const isRel = (tel) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
//获得登录图片
|
//获得登录图片
|
||||||
export const getLoginImg = (time) => {
|
export const getLoginCode = (time) => {
|
||||||
return request({
|
return request({
|
||||||
url: `${uni.getStorageSync('serverUrl')}/sys/randomImage/${time}`,
|
url: `${uni.getStorageSync('serverUrl')}/sys/randomCode/${time}`,
|
||||||
method: 'get',
|
method: 'get',
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,22 +4,20 @@
|
||||||
<view class="input-father">
|
<view class="input-father">
|
||||||
<view class="add">+86</view>
|
<view class="add">+86</view>
|
||||||
<view class="shu"></view>
|
<view class="shu"></view>
|
||||||
<input style="font-size: 27rpx;" type="number" v-model="form.username" maxlength="11" placeholder="请输入手机号" @blur="getImg" />
|
<input style="font-size: 27rpx;" type="number" v-model="form.username" maxlength="11" placeholder="请输入手机号"
|
||||||
|
@blur="getImg" />
|
||||||
</view>
|
</view>
|
||||||
<view class="input-father">
|
<view class="input-father">
|
||||||
<input class="password" password type="text" v-model="form.password" maxlength="15" placeholder="请输入密码" />
|
<input class="password" password type="text" v-model="form.password" maxlength="15" placeholder="请输入密码" />
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view class="input-father" v-show="loginphoto">
|
|
||||||
<input class="password" :password="false" v-model="form.captcha" maxlength="15" placeholder="请输入验证码" />
|
|
||||||
<image class="input-code" :src="loginphoto" @click="getImg"></image>
|
|
||||||
</view>
|
|
||||||
<view class="input-father-gray" v-show="(!fullName) || (!canclick)">
|
<view class="input-father-gray" v-show="(!fullName) || (!canclick)">
|
||||||
验证并登录
|
验证并登录
|
||||||
</view>
|
</view>
|
||||||
<view class="input-father-blue" v-show="fullName&&canclick" @click="login()">
|
<view class="input-father-blue" v-show="fullName&&canclick" @click="login()">
|
||||||
验证并登录
|
验证并登录
|
||||||
</view>
|
</view>
|
||||||
|
<!-- <demo style="z-index: 999;" /> -->
|
||||||
<view class="under-container-title">
|
<view class="under-container-title">
|
||||||
<view :class="isTarget ? 'radio-circle-target' : 'radio-circle'" @click="isTarget = !isTarget"></view>
|
<view :class="isTarget ? 'radio-circle-target' : 'radio-circle'" @click="isTarget = !isTarget"></view>
|
||||||
<view style="margin-left: 17rpx;" class="radio-circle-font" @click="isTarget = !isTarget">我已阅读并同意</view>
|
<view style="margin-left: 17rpx;" class="radio-circle-font" @click="isTarget = !isTarget">我已阅读并同意</view>
|
||||||
|
|
@ -43,8 +41,9 @@
|
||||||
欢迎使用护理单元app!
|
欢迎使用护理单元app!
|
||||||
</view>
|
</view>
|
||||||
<view style="text-indent: 2em;">
|
<view style="text-indent: 2em;">
|
||||||
我们将通过<text class="text-blue"@click="openany=true;opentype=true">《用户协议》</text>和<text
|
我们将通过<text class="text-blue" @click="openany=true;opentype=true">《用户协议》</text>和<text
|
||||||
class="text-blue" @click="openany=true;opentype=false">《隐私政策》</text>,帮助您了解我们为您提供的服务、我们如何处理个人信息以及您享有的权利。我们会严格按照相关法律法规要求,采取各种安全措施来保护您的个人信息。
|
class="text-blue"
|
||||||
|
@click="openany=true;opentype=false">《隐私政策》</text>,帮助您了解我们为您提供的服务、我们如何处理个人信息以及您享有的权利。我们会严格按照相关法律法规要求,采取各种安全措施来保护您的个人信息。
|
||||||
</view>
|
</view>
|
||||||
<view style="margin: 30rpx 0;">
|
<view style="margin: 30rpx 0;">
|
||||||
点击“同意”按钮,表示您已知情并同意以上协议和以下约定。
|
点击“同意”按钮,表示您已知情并同意以上协议和以下约定。
|
||||||
|
|
@ -124,6 +123,9 @@
|
||||||
<!-- 自动更新组件 -->
|
<!-- 自动更新组件 -->
|
||||||
<zy-update ref="zyupgrade" :noticeflag="true" theme="blue" :h5preview="false" oldversion="1.0.0"
|
<zy-update ref="zyupgrade" :noticeflag="true" theme="blue" :h5preview="false" oldversion="1.0.0"
|
||||||
:appstoreflag="true" :autocheckupdate="true"></zy-update>
|
:appstoreflag="true" :autocheckupdate="true"></zy-update>
|
||||||
|
<view class="bg-mask" v-if="huakuaiOpen" @click="huakuaiOpen=false">
|
||||||
|
<huakuai @click.stop @success="huakuaisuccess" />
|
||||||
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
|
@ -132,17 +134,19 @@
|
||||||
import ZyUpdate from '@/component/zy-upgrade/zy-upgrade.vue'
|
import ZyUpdate from '@/component/zy-upgrade/zy-upgrade.vue'
|
||||||
import oneseven from '@/pages/login/oneseven.vue'
|
import oneseven from '@/pages/login/oneseven.vue'
|
||||||
import twoseven from '@/pages/login/twoseven.vue'
|
import twoseven from '@/pages/login/twoseven.vue'
|
||||||
import { isRel,getLoginImg,loginApp } from './api.js'
|
import { isRel, getLoginCode, loginApp } from './api.js'
|
||||||
|
import huakuai from '@/component/public/huakuai.vue'
|
||||||
|
import demo from '@/component/public/game/demo.vue';
|
||||||
|
|
||||||
const zyupgrade = ref(null);
|
const zyupgrade = ref(null);
|
||||||
const isTarget = ref(false);
|
const isTarget = ref(false);
|
||||||
|
const huakuaiOpen = ref(false)
|
||||||
|
|
||||||
const form = reactive({
|
const form = reactive({
|
||||||
username: "",
|
username: "",
|
||||||
password: "",
|
password: "",
|
||||||
captcha: "",
|
captcha: "",
|
||||||
checkKey:0
|
checkKey: 0
|
||||||
})
|
})
|
||||||
|
|
||||||
const changeform = reactive({
|
const changeform = reactive({
|
||||||
|
|
@ -152,7 +156,7 @@
|
||||||
|
|
||||||
// 计算属性
|
// 计算属性
|
||||||
const fullName = computed(() => {
|
const fullName = computed(() => {
|
||||||
return form.password && isLength11(form.username)
|
return form.password && isLength11(form.username)
|
||||||
})
|
})
|
||||||
|
|
||||||
const showPopup = ref(false)
|
const showPopup = ref(false)
|
||||||
|
|
@ -177,38 +181,37 @@
|
||||||
url: url
|
url: url
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
const loginphoto = ref("");
|
|
||||||
const canclick = ref(false)
|
const canclick = ref(false)
|
||||||
const time = ref(0);
|
const time = ref(0);
|
||||||
const getImg = () => {
|
const getImg = () => {
|
||||||
if(/^\d{11}$/.test(form.username)){
|
if (/^\d{11}$/.test(form.username)) {
|
||||||
isRel(form.username).then((res:any)=>{
|
isRel(form.username).then((res : any) => {
|
||||||
if( res.result !==null && res.result.serverUrl){
|
if (res.result !== null && res.result.serverUrl) {
|
||||||
uni.setStorageSync('serverUrl', res.result.serverUrl);
|
uni.setStorageSync('serverUrl', res.result.serverUrl);
|
||||||
console.log("info",res.result)
|
|
||||||
time.value = Date.now();
|
time.value = Date.now();
|
||||||
getLoginImg(time.value).then((element:any)=>{
|
|
||||||
loginphoto.value = element.result
|
getLoginCode(time.value).then((res : any) => {
|
||||||
|
form.captcha = res.message
|
||||||
canclick.value = true
|
canclick.value = true
|
||||||
})
|
})
|
||||||
}else{
|
} else {
|
||||||
uni.setStorageSync('serverUrl', "");
|
uni.setStorageSync('serverUrl', "");
|
||||||
loginphoto.value = "";
|
|
||||||
uni.showToast({
|
uni.showToast({
|
||||||
title: '该手机号未绑定机构',
|
title: '该手机号未绑定机构',
|
||||||
icon: 'none', // 可选值:'success'、'loading'、'none'
|
icon: 'none', // 可选值:'success'、'loading'、'none'
|
||||||
duration: 2000 // 持续时间,单位ms
|
duration: 2000 // 持续时间,单位ms
|
||||||
})
|
})
|
||||||
canclick.value = false;
|
canclick.value = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
})
|
})
|
||||||
}else{
|
} else {
|
||||||
if(form.username){
|
if (form.username) {
|
||||||
uni.showToast({
|
uni.showToast({
|
||||||
title: '手机号不足11位',
|
title: '手机号不足11位',
|
||||||
icon: 'none', // 可选值:'success'、'loading'、'none'
|
icon: 'none', // 可选值:'success'、'loading'、'none'
|
||||||
duration: 2000 // 持续时间,单位ms
|
duration: 2000 // 持续时间,单位ms
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -219,51 +222,40 @@
|
||||||
const opentype = ref(false)
|
const opentype = ref(false)
|
||||||
const login = () => {
|
const login = () => {
|
||||||
if (isTarget.value) {
|
if (isTarget.value) {
|
||||||
// if (form.password == "123456") {
|
huakuaiOpen.value = true;
|
||||||
// openchange.value = true;
|
|
||||||
// } else {
|
|
||||||
// loginApp().then(res=>{
|
|
||||||
// console.log("???",res)
|
|
||||||
// })
|
|
||||||
// // jumpTo(`/pages/index/index`)
|
|
||||||
// }
|
|
||||||
form.checkKey = time.value
|
|
||||||
loginApp(form).then(res=>{
|
|
||||||
if(res.success){
|
|
||||||
uni.showToast({
|
|
||||||
title: res.message,
|
|
||||||
icon: 'none', // 可选值:'success'、'loading'、'none'
|
|
||||||
duration: 500 // 持续时间,单位ms
|
|
||||||
})
|
|
||||||
uni.setStorageSync('token', res.result.token);
|
|
||||||
uni.setStorageSync('realname', res.result.userInfo.realname);
|
|
||||||
// console.log("????",res.result.userInfo.realname)
|
|
||||||
setTimeout(()=>{
|
|
||||||
jumpTo(`/pages/Initialization/index`)
|
|
||||||
},500)
|
|
||||||
}else{
|
|
||||||
|
|
||||||
uni.showToast({
|
|
||||||
title: res.message,
|
|
||||||
icon: 'none', // 可选值:'success'、'loading'、'none'
|
|
||||||
duration: 2000 // 持续时间,单位ms
|
|
||||||
})
|
|
||||||
setTimeout(()=>{
|
|
||||||
getImg()
|
|
||||||
form.captcha=""
|
|
||||||
},2000)
|
|
||||||
}
|
|
||||||
// console.log("???",res)
|
|
||||||
})
|
|
||||||
} else {
|
} else {
|
||||||
openbottom.value = true;
|
openbottom.value = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
const huakuaisuccess = () => {
|
||||||
|
form.checkKey = time.value
|
||||||
|
huakuaiOpen.value = false
|
||||||
|
loginApp(form).then(res => {
|
||||||
|
if (res.success) {
|
||||||
|
uni.showToast({
|
||||||
|
title: res.message,
|
||||||
|
icon: 'none', // 可选值:'success'、'loading'、'none'
|
||||||
|
duration: 500 // 持续时间,单位ms
|
||||||
|
})
|
||||||
|
uni.setStorageSync('token', res.result.token);
|
||||||
|
uni.setStorageSync('realname', res.result.userInfo.realname);
|
||||||
|
setTimeout(() => {
|
||||||
|
jumpTo(`/pages/Initialization/index`)
|
||||||
|
}, 500)
|
||||||
|
} else {
|
||||||
|
uni.showToast({
|
||||||
|
title: res.message,
|
||||||
|
icon: 'none', // 可选值:'success'、'loading'、'none'
|
||||||
|
duration: 2000 // 持续时间,单位ms
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
// 生命周期钩子
|
// 生命周期钩子
|
||||||
onLoad(() => {
|
onLoad(() => {
|
||||||
if (uni.getStorageSync('appWgtVersion') != uni.getSystemInfoSync().appWgtVersion) {
|
if (uni.getStorageSync('appWgtVersion') != uni.getSystemInfoSync().appWgtVersion) {
|
||||||
showPopup.value = true;
|
showPopup.value = true;
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
// 生命周期钩子
|
// 生命周期钩子
|
||||||
|
|
@ -418,7 +410,8 @@
|
||||||
/* 播放动画:名称 fadeIn,时长 0.5s,缓动函数 ease,保持最后状态 */
|
/* 播放动画:名称 fadeIn,时长 0.5s,缓动函数 ease,保持最后状态 */
|
||||||
animation: fadeIn 0.5s ease forwards;
|
animation: fadeIn 0.5s ease forwards;
|
||||||
}
|
}
|
||||||
.popup-any{
|
|
||||||
|
.popup-any {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
inset: 0;
|
inset: 0;
|
||||||
z-index: 999;
|
z-index: 999;
|
||||||
|
|
@ -443,14 +436,12 @@
|
||||||
position: absolute;
|
position: absolute;
|
||||||
inset: 0;
|
inset: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.box-any {
|
.box-any {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 50%;
|
top: 50%;
|
||||||
left: 50%;
|
left: 50%;
|
||||||
// transform: translate(0, -50%);
|
transform: translate(-50%, -50%);
|
||||||
// transform: translateX(-50%);
|
|
||||||
transform: translate(-50%,-50%);
|
|
||||||
width: 1000rpx;
|
width: 1000rpx;
|
||||||
height: 1500rpx;
|
height: 1500rpx;
|
||||||
background: #fff;
|
background: #fff;
|
||||||
|
|
@ -458,16 +449,13 @@
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
// align-items: center;
|
|
||||||
// padding: 65rpx;
|
|
||||||
padding: 65rpx 40rpx;
|
padding: 65rpx 40rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
.box-small {
|
.box-small {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 20rpx;
|
bottom: 20rpx;
|
||||||
left: 50%;
|
left: 50%;
|
||||||
// transform: translate(0, -50%);
|
|
||||||
transform: translateX(-50%);
|
transform: translateX(-50%);
|
||||||
width: 800rpx;
|
width: 800rpx;
|
||||||
height: 350rpx;
|
height: 350rpx;
|
||||||
|
|
@ -589,17 +577,33 @@
|
||||||
border-radius: 25rpx;
|
border-radius: 25rpx;
|
||||||
font-size: 35rpx;
|
font-size: 35rpx;
|
||||||
}
|
}
|
||||||
.title-left{
|
|
||||||
|
.title-left {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
.back-img{
|
|
||||||
|
.back-img {
|
||||||
width: 60rpx;
|
width: 60rpx;
|
||||||
height: 60rpx;
|
height: 60rpx;
|
||||||
margin-right: 30rpx;
|
margin-right: 30rpx;
|
||||||
}
|
}
|
||||||
.back-font{
|
|
||||||
|
.back-font {
|
||||||
font-size: 35rpx;
|
font-size: 35rpx;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.bg-mask {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100vw;
|
||||||
|
height: 100vh;
|
||||||
|
background: rgba(0, 0, 0, 0.3);
|
||||||
|
backdrop-filter: blur(5rpx);
|
||||||
|
z-index: 998;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
@ -0,0 +1,137 @@
|
||||||
|
<template>
|
||||||
|
<!-- 使用 view 作为悬浮球容器,通过绑定 style 进行定位 -->
|
||||||
|
<view class="floating-ball" v-show="isShow"
|
||||||
|
:style="{ left: ballLeft + 'px', top: ballTop + 'px' }"
|
||||||
|
@touchstart="handleTouchStart"
|
||||||
|
@touchmove="handleTouchMove"
|
||||||
|
@touchend="handleTouchEnd"
|
||||||
|
@touchcancel="handleTouchEnd">
|
||||||
|
<!-- <image class="floating-ball-img" src="/static/index/caigouqingdan.png" /> -->
|
||||||
|
+
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref, onMounted,defineEmits } from 'vue';
|
||||||
|
const props = defineProps({
|
||||||
|
isShow: {
|
||||||
|
type: Boolean,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const emit = defineEmits(['clickBall'])
|
||||||
|
// 定义悬浮球尺寸和长按阈值
|
||||||
|
const ballWidth = 60; // 悬浮球宽度,单位 px,与 CSS 中保持一致
|
||||||
|
const ballHeight = 60; // 悬浮球高度
|
||||||
|
const longPressThreshold = 300; // 长按时间阈值(毫秒)
|
||||||
|
|
||||||
|
// 悬浮球当前位置
|
||||||
|
const ballLeft = ref(1070);
|
||||||
|
const ballTop = ref(650);
|
||||||
|
|
||||||
|
// 用于判断是否进入拖动状态
|
||||||
|
const isDragging = ref(false);
|
||||||
|
|
||||||
|
// 记录初始按下时坐标以及悬浮球起始位置
|
||||||
|
let startTouchX = 0;
|
||||||
|
let startTouchY = 0;
|
||||||
|
let initialLeft = 0;
|
||||||
|
let initialTop = 0;
|
||||||
|
let longPressTimer = null;
|
||||||
|
|
||||||
|
// 屏幕尺寸
|
||||||
|
let windowWidth = 0;
|
||||||
|
let windowHeight = 0;
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
// 获取系统信息,初始化屏幕宽高(uni-app API)
|
||||||
|
const res = uni.getSystemInfoSync();
|
||||||
|
windowWidth = res.windowWidth;
|
||||||
|
windowHeight = res.windowHeight;
|
||||||
|
});
|
||||||
|
|
||||||
|
// 触摸开始:记录初始位置,同时启动长按定时器
|
||||||
|
function handleTouchStart(e) {
|
||||||
|
const touch = e.touches[0];
|
||||||
|
// console.log("????0",touch.clientX )
|
||||||
|
startTouchX = touch.clientX.toFixed(2);
|
||||||
|
startTouchY = touch.clientY.toFixed(2);
|
||||||
|
initialLeft = ballLeft.value;
|
||||||
|
initialTop = ballTop.value;
|
||||||
|
|
||||||
|
// 设置定时器,达到长按后进入拖动状态
|
||||||
|
longPressTimer = setTimeout(() => {
|
||||||
|
isDragging.value = true;
|
||||||
|
}, longPressThreshold);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 触摸移动:如果进入拖动状态,则计算新位置,同时限制悬浮球不超出屏幕边界
|
||||||
|
function handleTouchMove(e) {
|
||||||
|
|
||||||
|
// 如果尚未进入拖动状态,且手指移动距离较大,则可以提前进入拖动模式
|
||||||
|
if (!isDragging.value) {
|
||||||
|
const touch = e.touches[0];
|
||||||
|
// console.log("????0",touch.clientX )
|
||||||
|
const deltaX = Math.abs(touch.clientX.toFixed(2) - startTouchX);
|
||||||
|
const deltaY = Math.abs(touch.clientY.toFixed(2) - startTouchY);
|
||||||
|
if(deltaX > 5 || deltaY > 5){
|
||||||
|
clearTimeout(longPressTimer);
|
||||||
|
isDragging.value = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 正在拖动,更新悬浮球位置
|
||||||
|
if(isDragging.value){
|
||||||
|
|
||||||
|
const touch = e.touches[0];
|
||||||
|
// console.log("????0",touch.clientX )
|
||||||
|
let newLeft = initialLeft + (touch.clientX.toFixed(2) - startTouchX);
|
||||||
|
let newTop = initialTop + (touch.clientY.toFixed(2) - startTouchY);
|
||||||
|
// 限制左右边界:不让超出屏幕(计算时需要考虑悬浮球自身尺寸)
|
||||||
|
newLeft = Math.max(0, Math.min(newLeft, windowWidth - ballWidth));
|
||||||
|
// 限制上下边界
|
||||||
|
newTop = Math.max(0, Math.min(newTop, windowHeight - ballHeight));
|
||||||
|
|
||||||
|
ballLeft.value = newLeft;
|
||||||
|
ballTop.value = newTop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 触摸结束或取消:若未进入拖动状态则视为点击,触发点击处理方法;否则结束拖动状态
|
||||||
|
function handleTouchEnd(e) {
|
||||||
|
clearTimeout(longPressTimer);
|
||||||
|
if(isDragging.value){
|
||||||
|
// 拖动结束后重置状态
|
||||||
|
isDragging.value = false;
|
||||||
|
} else {
|
||||||
|
// 非拖动状态下,触发点击事件
|
||||||
|
triggerClick();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 点击事件处理方法
|
||||||
|
function triggerClick() {
|
||||||
|
emit('clickBall')
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.floating-ball {
|
||||||
|
position: fixed;
|
||||||
|
width: 140rpx;
|
||||||
|
height: 140rpx;
|
||||||
|
border-radius: 50%;
|
||||||
|
background: linear-gradient(to bottom right,#3FBBFE,#A541FF);
|
||||||
|
border: 2rpx solid #fff;
|
||||||
|
z-index: 999;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
color: #fff;
|
||||||
|
font-size: 100rpx;
|
||||||
|
/* 可根据需要添加阴影或其他样式 */
|
||||||
|
// .floating-ball-img{
|
||||||
|
// width: 70rpx;
|
||||||
|
// height: 70rpx;
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -0,0 +1,137 @@
|
||||||
|
<template>
|
||||||
|
<!-- 使用 view 作为悬浮球容器,通过绑定 style 进行定位 -->
|
||||||
|
<view class="floating-ball" v-show="isShow"
|
||||||
|
:style="{ left: ballLeft + 'px', top: ballTop + 'px' }"
|
||||||
|
@touchstart="handleTouchStart"
|
||||||
|
@touchmove="handleTouchMove"
|
||||||
|
@touchend="handleTouchEnd"
|
||||||
|
@touchcancel="handleTouchEnd">
|
||||||
|
<!-- <image class="floating-ball-img" src="/static/index/caigouqingdan.png" /> -->
|
||||||
|
-
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref, onMounted,defineEmits } from 'vue';
|
||||||
|
const props = defineProps({
|
||||||
|
isShow: {
|
||||||
|
type: Boolean,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const emit = defineEmits(['clickBall'])
|
||||||
|
// 定义悬浮球尺寸和长按阈值
|
||||||
|
const ballWidth = 60; // 悬浮球宽度,单位 px,与 CSS 中保持一致
|
||||||
|
const ballHeight = 60; // 悬浮球高度
|
||||||
|
const longPressThreshold = 300; // 长按时间阈值(毫秒)
|
||||||
|
|
||||||
|
// 悬浮球当前位置
|
||||||
|
const ballLeft = ref(980);
|
||||||
|
const ballTop = ref(650);
|
||||||
|
|
||||||
|
// 用于判断是否进入拖动状态
|
||||||
|
const isDragging = ref(false);
|
||||||
|
|
||||||
|
// 记录初始按下时坐标以及悬浮球起始位置
|
||||||
|
let startTouchX = 0;
|
||||||
|
let startTouchY = 0;
|
||||||
|
let initialLeft = 0;
|
||||||
|
let initialTop = 0;
|
||||||
|
let longPressTimer = null;
|
||||||
|
|
||||||
|
// 屏幕尺寸
|
||||||
|
let windowWidth = 0;
|
||||||
|
let windowHeight = 0;
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
// 获取系统信息,初始化屏幕宽高(uni-app API)
|
||||||
|
const res = uni.getSystemInfoSync();
|
||||||
|
windowWidth = res.windowWidth;
|
||||||
|
windowHeight = res.windowHeight;
|
||||||
|
});
|
||||||
|
|
||||||
|
// 触摸开始:记录初始位置,同时启动长按定时器
|
||||||
|
function handleTouchStart(e) {
|
||||||
|
const touch = e.touches[0];
|
||||||
|
// console.log("????0",touch.clientX )
|
||||||
|
startTouchX = touch.clientX.toFixed(2);
|
||||||
|
startTouchY = touch.clientY.toFixed(2);
|
||||||
|
initialLeft = ballLeft.value;
|
||||||
|
initialTop = ballTop.value;
|
||||||
|
|
||||||
|
// 设置定时器,达到长按后进入拖动状态
|
||||||
|
longPressTimer = setTimeout(() => {
|
||||||
|
isDragging.value = true;
|
||||||
|
}, longPressThreshold);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 触摸移动:如果进入拖动状态,则计算新位置,同时限制悬浮球不超出屏幕边界
|
||||||
|
function handleTouchMove(e) {
|
||||||
|
|
||||||
|
// 如果尚未进入拖动状态,且手指移动距离较大,则可以提前进入拖动模式
|
||||||
|
if (!isDragging.value) {
|
||||||
|
const touch = e.touches[0];
|
||||||
|
// console.log("????0",touch.clientX )
|
||||||
|
const deltaX = Math.abs(touch.clientX.toFixed(2) - startTouchX);
|
||||||
|
const deltaY = Math.abs(touch.clientY.toFixed(2) - startTouchY);
|
||||||
|
if(deltaX > 5 || deltaY > 5){
|
||||||
|
clearTimeout(longPressTimer);
|
||||||
|
isDragging.value = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 正在拖动,更新悬浮球位置
|
||||||
|
if(isDragging.value){
|
||||||
|
|
||||||
|
const touch = e.touches[0];
|
||||||
|
// console.log("????0",touch.clientX )
|
||||||
|
let newLeft = initialLeft + (touch.clientX.toFixed(2) - startTouchX);
|
||||||
|
let newTop = initialTop + (touch.clientY.toFixed(2) - startTouchY);
|
||||||
|
// 限制左右边界:不让超出屏幕(计算时需要考虑悬浮球自身尺寸)
|
||||||
|
newLeft = Math.max(0, Math.min(newLeft, windowWidth - ballWidth));
|
||||||
|
// 限制上下边界
|
||||||
|
newTop = Math.max(0, Math.min(newTop, windowHeight - ballHeight));
|
||||||
|
|
||||||
|
ballLeft.value = newLeft;
|
||||||
|
ballTop.value = newTop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 触摸结束或取消:若未进入拖动状态则视为点击,触发点击处理方法;否则结束拖动状态
|
||||||
|
function handleTouchEnd(e) {
|
||||||
|
clearTimeout(longPressTimer);
|
||||||
|
if(isDragging.value){
|
||||||
|
// 拖动结束后重置状态
|
||||||
|
isDragging.value = false;
|
||||||
|
} else {
|
||||||
|
// 非拖动状态下,触发点击事件
|
||||||
|
triggerClick();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 点击事件处理方法
|
||||||
|
function triggerClick() {
|
||||||
|
emit('clickBall')
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.floating-ball {
|
||||||
|
position: fixed;
|
||||||
|
width: 140rpx;
|
||||||
|
height: 140rpx;
|
||||||
|
border-radius: 50%;
|
||||||
|
background: linear-gradient(to bottom right,#3FBBFE,#A541FF);
|
||||||
|
border: 2rpx solid #fff;
|
||||||
|
z-index: 999;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
color: #fff;
|
||||||
|
font-size: 100rpx;
|
||||||
|
/* 可根据需要添加阴影或其他样式 */
|
||||||
|
// .floating-ball-img{
|
||||||
|
// width: 70rpx;
|
||||||
|
// height: 70rpx;
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -5,6 +5,7 @@
|
||||||
<view class="doctorsay-container-left-gun"></view>
|
<view class="doctorsay-container-left-gun"></view>
|
||||||
<view class="doctorsay-container-left-font">时间矩阵</view>
|
<view class="doctorsay-container-left-font">时间矩阵</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view class="doctorsay-container-right">
|
<view class="doctorsay-container-right">
|
||||||
<view class="titlebutton-father">
|
<view class="titlebutton-father">
|
||||||
<view v-for="(item,index) in buttonArray" :key="index">
|
<view v-for="(item,index) in buttonArray" :key="index">
|
||||||
|
|
@ -25,35 +26,27 @@
|
||||||
</view>
|
</view>
|
||||||
<view class="super-card">
|
<view class="super-card">
|
||||||
<view class="super-card-container">
|
<view class="super-card-container">
|
||||||
<!-- <view class="boom">
|
|
||||||
<view :style="{ marginTop: `-${2 *moveDownNumber}rpx` }">
|
|
||||||
<view v-for="(item,index) in changetimearr[0]?.children" :key="index">
|
|
||||||
<view :class="(clickY === index) ? `boom-son-target`: `boom-son`" v-show="item.typeName">
|
|
||||||
{{item.typeName}}
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view> -->
|
|
||||||
<scroll-view style="height: 100%;width: 100%;" :scroll-left="scrollLeft" scroll-x
|
<scroll-view style="height: 100%;width: 100%;" :scroll-left="scrollLeft" scroll-x
|
||||||
:show-scrollbar="false">
|
:show-scrollbar="false">
|
||||||
<view
|
<view :style="{width:widthType * 24 + `rpx`}"
|
||||||
style="display: flex;width: 5945rpx; box-shadow: 10rpx 10rpx 20rpx rgba(0, 0, 0, 0.1);background: linear-gradient(to right, #c4dbf4,#c9c2ef, #c6dcf3);">
|
style="display: flex; box-shadow: 10rpx 10rpx 20rpx rgba(0, 0, 0, 0.1);background: linear-gradient(to right, #c4dbf4,#c9c2ef, #c6dcf3);">
|
||||||
<view v-for="(item0,index0) in changetimearr" :key="index0">
|
<view v-for="(item0,index0) in changetimearr" :key="index0">
|
||||||
<view class="super-card-time">
|
<view class="super-card-time" :style="{width:widthType + `rpx`}">
|
||||||
{{(item0.positioning.length == 1 ? ('0' + item0.positioning) : item0.positioning) + ":00"}}
|
{{(item0.positioning.length == 1 ? ('0' + item0.positioning) : item0.positioning) + ":00"}}
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view style="display: flex;height: calc(100% - 80rpx);width: 5945rpx">
|
<view style="display: flex;height: calc(100% - 80rpx);" :style="{width:widthType * 24 + `rpx`}">
|
||||||
<scroll-view scroll-y :show-scrollbar="false" @scroll="handleScrolltime">
|
<scroll-view scroll-y :show-scrollbar="false" :scroll-top="scrollTop">
|
||||||
<view style="display: flex;height: 100%;">
|
<view style="display: flex;height: 100%;">
|
||||||
<view v-for="(item0,index0) in changetimearr" :key="index0">
|
<view v-for="(item0,index0) in changetimearr" :key="index0">
|
||||||
<view class="super-card-time-und">
|
<view class="super-card-time-und" :style="{width:widthType + `rpx`}">
|
||||||
<view v-for="(item1,index1) in item0.children" style="width: 100%;"
|
<view v-for="(item1,index1) in item0.children" style="width: 100%;"
|
||||||
:key="index1">
|
:key="index1">
|
||||||
<view
|
<view
|
||||||
:class="(clickX === index0 && clickY ===index1) ? `title-time-border-blue` : ``"
|
:class="(clickX === index0 && clickY ===index1) ? `title-time-border-blue` : ``"
|
||||||
|
:style="{height:heightType + `rpx`}"
|
||||||
class="super-card-time-card" style="position: relative;"
|
class="super-card-time-card" style="position: relative;"
|
||||||
@touchend="handleTap(item1,index0,index1,$event)" :data-index0="index0"
|
@touchend="handleTap(item1,index0,index1,$event)" :data-index0="index0"
|
||||||
:data-index1="index1">
|
:data-index1="index1">
|
||||||
|
|
@ -62,21 +55,25 @@
|
||||||
style="font-size: 30rpx;overflow: hidden;">
|
style="font-size: 30rpx;overflow: hidden;">
|
||||||
<view class="title-time" v-if="item1.startTime"
|
<view class="title-time" v-if="item1.startTime"
|
||||||
style="margin-top: 0rpx;">
|
style="margin-top: 0rpx;">
|
||||||
<view class="title-time-time" style="font-size: 25rpx;">
|
<view class="title-time-time" style="font-size: 25rpx;"
|
||||||
|
v-show="scalcType<10">
|
||||||
{{item1.startTime + `-` + item1.endTime}}
|
{{item1.startTime + `-` + item1.endTime}}
|
||||||
</view>
|
</view>
|
||||||
<image class="title-time-button"
|
<image class="title-time-button" v-show="scalcType<10"
|
||||||
:src="item1.cycleType=='日常'?`/static/index/yellowbian.png`:`/static/index/puoplebian.png`" />
|
:src="item1.cycleType=='日常'?`/static/index/yellowbian.png`:`/static/index/puoplebian.png`" />
|
||||||
<view class="title-time-font">
|
<view class="title-time-font" v-show="scalcType<10">
|
||||||
{{item1.cycleType}}
|
{{item1.cycleType}}
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view
|
<view v-show="scalcType>=10" style="margin: auto;" :style="{fontSize: cardFont + `rpx`}">
|
||||||
|
{{item1.cycleType}}
|
||||||
|
</view>
|
||||||
|
<view v-show="scalcType<10"
|
||||||
:style="splitString(item1.directiveName)[1] ? {}:{marginTop:`20rpx`}"
|
:style="splitString(item1.directiveName)[1] ? {}:{marginTop:`20rpx`}"
|
||||||
style="font-weight: 700;font-size: 24rpx;">
|
style="font-weight: 700;font-size: 24rpx;">
|
||||||
{{splitString(item1.directiveName)[0]}}
|
{{splitString(item1.directiveName)[0]}}
|
||||||
</view>
|
</view>
|
||||||
<view class="down-icons"
|
<view class="down-icons" v-show="scalcType<10"
|
||||||
:style="item1.cycleType!='日常'?{backgroundColor:`rgb(212,203,255)`}:{}"
|
:style="item1.cycleType!='日常'?{backgroundColor:`rgb(212,203,255)`}:{}"
|
||||||
v-if="splitString(item1.directiveName)[1]">
|
v-if="splitString(item1.directiveName)[1]">
|
||||||
<view class=""
|
<view class=""
|
||||||
|
|
@ -99,6 +96,10 @@
|
||||||
</scroll-view>
|
</scroll-view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
<addball :isShow="true" @clickBall="changeType(0)" />
|
||||||
|
<decball :isShow="true" @clickBall="changeType(1)" />
|
||||||
|
<!-- 轮盘 -->
|
||||||
|
<joystick @movecard="movecard" />
|
||||||
<!-- 长按的弹出层` -->
|
<!-- 长按的弹出层` -->
|
||||||
<view v-show="isopen" class="popup-overlay" @click="isopen=false">
|
<view v-show="isopen" class="popup-overlay" @click="isopen=false">
|
||||||
<view class="popup-overlay-content"
|
<view class="popup-overlay-content"
|
||||||
|
|
@ -124,9 +125,12 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, onMounted, onBeforeUnmount, computed, nextTick } from 'vue';
|
import { ref, onMounted, onBeforeUnmount, computed, nextTick, reactive, watch } from 'vue';
|
||||||
import { onLoad } from '@dcloudio/uni-app';
|
import { onLoad } from '@dcloudio/uni-app';
|
||||||
import { getNclist } from "@/component/rightItemssecond/api.js";
|
import { getNclist } from "@/component/rightItemssecond/api.js";
|
||||||
|
import addball from "./addball.vue"
|
||||||
|
import decball from "./decball.vue"
|
||||||
|
import joystick from '@/component/public/newgame/joysticknew.vue';
|
||||||
// 暗黑模式
|
// 暗黑模式
|
||||||
const darkFans = ref(false);
|
const darkFans = ref(false);
|
||||||
const timearr = ref([]);
|
const timearr = ref([]);
|
||||||
|
|
@ -135,6 +139,8 @@
|
||||||
}
|
}
|
||||||
const buttonArray = ref(["全部", "日常", "周期"]);
|
const buttonArray = ref(["全部", "日常", "周期"]);
|
||||||
const buttonTarget = ref(0);
|
const buttonTarget = ref(0);
|
||||||
|
const sysInfo = uni.getSystemInfoSync();
|
||||||
|
const rpx2px = sysInfo.windowWidth / 750;
|
||||||
// 方法:根据条件返回不同的类名
|
// 方法:根据条件返回不同的类名
|
||||||
const getClass = (item : any, index0 : number, index1 : number) => {
|
const getClass = (item : any, index0 : number, index1 : number) => {
|
||||||
if (item.cycleType === '日常') {
|
if (item.cycleType === '日常') {
|
||||||
|
|
@ -145,12 +151,7 @@
|
||||||
}
|
}
|
||||||
return 'title-time-border';
|
return 'title-time-border';
|
||||||
}
|
}
|
||||||
const moveDownNumber = ref(0);
|
|
||||||
function handleScrolltime(e) {
|
|
||||||
let num = e.detail.scrollTop
|
|
||||||
let formattedNum = parseFloat(num.toFixed(2));
|
|
||||||
moveDownNumber.value = formattedNum
|
|
||||||
}
|
|
||||||
const getClassItem = (index) => {
|
const getClassItem = (index) => {
|
||||||
if (buttonTarget.value !== index) {
|
if (buttonTarget.value !== index) {
|
||||||
return `titlebutton`
|
return `titlebutton`
|
||||||
|
|
@ -204,24 +205,16 @@
|
||||||
|
|
||||||
}
|
}
|
||||||
const scrollLeft = ref(0);
|
const scrollLeft = ref(0);
|
||||||
|
const scrollTop = ref(0);
|
||||||
|
|
||||||
const changetimearr = ref([]);
|
const changetimearr = ref([]);
|
||||||
|
const scalcType = ref(9);
|
||||||
|
const widthType = ref(247);
|
||||||
|
const heightType = ref(180);
|
||||||
|
const cardFont = ref(0);
|
||||||
|
const bili = ref(0)
|
||||||
// 生命周期钩子
|
// 生命周期钩子
|
||||||
onLoad((options) => {
|
onLoad((options) => {
|
||||||
// getNclist().then((res : any) => {
|
|
||||||
// timearr.value = res.result
|
|
||||||
// if (timearr.value[0].children.length < 8) {
|
|
||||||
// timearr.value.forEach((element : any) => {
|
|
||||||
// // 循环直到长度达到 7
|
|
||||||
// while (element.children.length < 8) {
|
|
||||||
// element.children.push({ value: "" });
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
// changetimearr.value = JSON.parse(JSON.stringify(timearr.value));
|
|
||||||
// if (options.currentNumber) {
|
|
||||||
// scrollLeft.value = options.currentNumber * 745
|
|
||||||
// }
|
|
||||||
// })
|
|
||||||
let arr = uni.getStorageSync('myArray');
|
let arr = uni.getStorageSync('myArray');
|
||||||
timearr.value = arr
|
timearr.value = arr
|
||||||
if (timearr.value[0].children.length < 8) {
|
if (timearr.value[0].children.length < 8) {
|
||||||
|
|
@ -233,50 +226,349 @@
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
changetimearr.value = JSON.parse(JSON.stringify(timearr.value));
|
changetimearr.value = JSON.parse(JSON.stringify(timearr.value));
|
||||||
scrollLeft.value = 740
|
// scrollLeft.value = 740
|
||||||
|
scalcType.value = 9
|
||||||
|
widthType.value = 247;
|
||||||
|
scrollLeft.value = 740;
|
||||||
|
heightType.value = 140
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const changeType = (number : number) => {
|
||||||
|
if (number) {
|
||||||
|
if (scalcType.value < 24) {
|
||||||
|
scalcType.value++
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (scalcType.value > 7) {
|
||||||
|
scalcType.value--
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const totalColumns = 24; // 总列数
|
||||||
|
const totalRows = 11; // 总行数
|
||||||
|
const visibleWidth = 2220; // 可视区域宽度 (rpx),基于 scalcType * widthType ≈ 2220
|
||||||
|
const visibleHeight = 512.5; // 可视区域高度 (rpx),假设显示约5行时 heightType = 102.5
|
||||||
|
function centerCell() {
|
||||||
|
if (clickX.value >= 0 && clickX.value <= totalColumns && clickY.value >= 0 && clickY.value <= totalRows) {
|
||||||
|
// 计算点击格子的中心位置 (rpx)
|
||||||
|
const cellCenterX = (clickX.value) * widthType.value;
|
||||||
|
const cellCenterY = (clickY.value) * heightType.value;
|
||||||
|
|
||||||
|
// 计算 scrollLeft 和 scrollTop,使格子中心位于可视区域中心
|
||||||
|
scrollLeft.value = cellCenterX - visibleWidth / 2;
|
||||||
|
scrollTop.value = cellCenterY - visibleHeight / 2;
|
||||||
|
|
||||||
|
// 计算网格总宽高
|
||||||
|
const totalWidth = totalColumns * widthType.value;
|
||||||
|
const totalHeight = totalRows * heightType.value;
|
||||||
|
|
||||||
|
// 限制 scrollLeft 和 scrollTop 在有效范围内
|
||||||
|
scrollLeft.value = Math.max(0, Math.min(scrollLeft.value, totalWidth - visibleWidth)) /2;
|
||||||
|
// scrollTop.value = 0
|
||||||
|
scrollTop.value = Math.max(0, Math.min(scrollTop.value, totalHeight - visibleHeight)) /2;
|
||||||
|
|
||||||
|
// console.log("????",scrollLeft.value,scrollTop.value,rpx2px)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const clickX = ref(10);
|
||||||
|
const clickY = ref(0);
|
||||||
|
watch([clickX, clickY], () => {
|
||||||
|
centerCell();
|
||||||
|
});
|
||||||
|
|
||||||
|
watch(
|
||||||
|
scalcType,
|
||||||
|
(newVal, oldVal) => {
|
||||||
|
if (oldVal !== newVal) {
|
||||||
|
switch (newVal) {
|
||||||
|
case 24:
|
||||||
|
widthType.value = 92.5;
|
||||||
|
// scrollLeft.value = 0;
|
||||||
|
heightType.value = 102.5
|
||||||
|
cardFont.value = 18
|
||||||
|
return
|
||||||
|
case 23:
|
||||||
|
widthType.value = 96.5;
|
||||||
|
|
||||||
|
// if(clickX.value>10){
|
||||||
|
// scrollLeft.value = 50
|
||||||
|
// }else{
|
||||||
|
// scrollLeft.value = 0
|
||||||
|
// }
|
||||||
|
heightType.value = 102.5
|
||||||
|
cardFont.value = 18
|
||||||
|
centerCell();
|
||||||
|
return
|
||||||
|
case 22:
|
||||||
|
widthType.value = 101;
|
||||||
|
|
||||||
|
// if(clickX.value>10){
|
||||||
|
// scrollLeft.value = 100
|
||||||
|
// }else{
|
||||||
|
// scrollLeft.value = 0
|
||||||
|
// }
|
||||||
|
heightType.value = 102.5
|
||||||
|
cardFont.value = 18
|
||||||
|
centerCell();
|
||||||
|
return
|
||||||
|
case 21:
|
||||||
|
widthType.value = 106;
|
||||||
|
// scrollLeft.value = 159
|
||||||
|
// if(clickX.value>10){
|
||||||
|
// scrollLeft.value = 159
|
||||||
|
// }else{
|
||||||
|
// scrollLeft.value = 0
|
||||||
|
// }
|
||||||
|
heightType.value = 102.5
|
||||||
|
cardFont.value = 19
|
||||||
|
centerCell();
|
||||||
|
return
|
||||||
|
case 20:
|
||||||
|
widthType.value = 112;
|
||||||
|
// scrollLeft.value = 230
|
||||||
|
// if(clickX.value>10){
|
||||||
|
// scrollLeft.value = 230
|
||||||
|
// }else{
|
||||||
|
// scrollLeft.value = 0
|
||||||
|
// }
|
||||||
|
heightType.value = 102.5
|
||||||
|
cardFont.value = 20
|
||||||
|
centerCell();
|
||||||
|
return
|
||||||
|
case 19:
|
||||||
|
widthType.value = 117;
|
||||||
|
// scrollLeft.value = 292
|
||||||
|
// if(clickX.value>10){
|
||||||
|
// scrollLeft.value = 292
|
||||||
|
// }else{
|
||||||
|
// scrollLeft.value = 0
|
||||||
|
// }
|
||||||
|
heightType.value = 102.5
|
||||||
|
cardFont.value = 21
|
||||||
|
centerCell();
|
||||||
|
return
|
||||||
|
case 18:
|
||||||
|
widthType.value = 124;
|
||||||
|
// scrollLeft.value = 373
|
||||||
|
// if(clickX.value>10){
|
||||||
|
// scrollLeft.value = 373
|
||||||
|
// }else{
|
||||||
|
// scrollLeft.value = 0
|
||||||
|
// }
|
||||||
|
heightType.value = 102.5
|
||||||
|
cardFont.value = 22
|
||||||
|
centerCell();
|
||||||
|
return
|
||||||
|
case 17:
|
||||||
|
widthType.value = 131;
|
||||||
|
// scrollLeft.value = 395
|
||||||
|
// if(clickX.value>10){
|
||||||
|
// scrollLeft.value = 395
|
||||||
|
// }else{
|
||||||
|
// scrollLeft.value = 0
|
||||||
|
// }
|
||||||
|
heightType.value = 102.5
|
||||||
|
cardFont.value = 23
|
||||||
|
centerCell();
|
||||||
|
return
|
||||||
|
case 16:
|
||||||
|
widthType.value = 139;
|
||||||
|
// scrollLeft.value = 416
|
||||||
|
// if(clickX.value>10){
|
||||||
|
// scrollLeft.value = 416
|
||||||
|
// }else{
|
||||||
|
// scrollLeft.value = 0
|
||||||
|
// }
|
||||||
|
heightType.value = 102.5
|
||||||
|
cardFont.value = 24
|
||||||
|
centerCell();
|
||||||
|
return
|
||||||
|
case 15:
|
||||||
|
widthType.value = 148;
|
||||||
|
// scrollLeft.value = 445
|
||||||
|
// if(clickX.value>10){
|
||||||
|
// scrollLeft.value = 445
|
||||||
|
// }else{
|
||||||
|
// scrollLeft.value = 0
|
||||||
|
// }
|
||||||
|
heightType.value = 102.5
|
||||||
|
cardFont.value = 25
|
||||||
|
centerCell();
|
||||||
|
return
|
||||||
|
case 14:
|
||||||
|
widthType.value = 159;
|
||||||
|
// scrollLeft.value = 477
|
||||||
|
// if(clickX.value>10){
|
||||||
|
// scrollLeft.value = 477
|
||||||
|
// }else{
|
||||||
|
// scrollLeft.value = 0
|
||||||
|
// }
|
||||||
|
heightType.value = 102.5
|
||||||
|
cardFont.value = 26
|
||||||
|
centerCell();
|
||||||
|
return
|
||||||
|
case 13:
|
||||||
|
widthType.value = 171;
|
||||||
|
// scrollLeft.value = 515
|
||||||
|
// if(clickX.value>10){
|
||||||
|
// scrollLeft.value = 515
|
||||||
|
// }else{
|
||||||
|
// scrollLeft.value = 0
|
||||||
|
// }
|
||||||
|
heightType.value = 102.5
|
||||||
|
cardFont.value = 27
|
||||||
|
centerCell();
|
||||||
|
return
|
||||||
|
case 12:
|
||||||
|
widthType.value = 185;
|
||||||
|
// scrollLeft.value = 555
|
||||||
|
// if(clickX.value>10){
|
||||||
|
// scrollLeft.value = 555
|
||||||
|
// }else{
|
||||||
|
// scrollLeft.value = 0
|
||||||
|
// }
|
||||||
|
heightType.value = 102.5
|
||||||
|
cardFont.value = 28
|
||||||
|
centerCell();
|
||||||
|
return
|
||||||
|
case 11:
|
||||||
|
widthType.value = 202;
|
||||||
|
// scrollLeft.value = 607
|
||||||
|
// if(clickX.value>10){
|
||||||
|
// scrollLeft.value = 607
|
||||||
|
// }else{
|
||||||
|
// scrollLeft.value = 0
|
||||||
|
// }
|
||||||
|
heightType.value = 102.5
|
||||||
|
cardFont.value = 29
|
||||||
|
centerCell();
|
||||||
|
return
|
||||||
|
case 10:
|
||||||
|
widthType.value = 222;
|
||||||
|
// scrollLeft.value = 665
|
||||||
|
// if(clickX.value>10){
|
||||||
|
// scrollLeft.value = 665
|
||||||
|
// }else{
|
||||||
|
// scrollLeft.value = 0
|
||||||
|
// }
|
||||||
|
heightType.value = 102.5;
|
||||||
|
cardFont.value = 30
|
||||||
|
centerCell();
|
||||||
|
return
|
||||||
|
case 9:
|
||||||
|
widthType.value = 247;
|
||||||
|
// scrollLeft.value = 740;
|
||||||
|
heightType.value = 140
|
||||||
|
cardFont.value = 30
|
||||||
|
centerCell();
|
||||||
|
return
|
||||||
|
|
||||||
|
case 8:
|
||||||
|
widthType.value = 280;
|
||||||
|
// scrollLeft.value = 850
|
||||||
|
heightType.value = 150
|
||||||
|
cardFont.value = 30
|
||||||
|
centerCell();
|
||||||
|
return
|
||||||
|
case 7:
|
||||||
|
widthType.value = 320;
|
||||||
|
// scrollLeft.value = 960
|
||||||
|
heightType.value = 160
|
||||||
|
cardFont.value = 30
|
||||||
|
centerCell();
|
||||||
|
return
|
||||||
|
case 6:
|
||||||
|
widthType.value = 380;
|
||||||
|
// scrollLeft.value = 1150
|
||||||
|
heightType.value = 170
|
||||||
|
cardFont.value = 30
|
||||||
|
centerCell();
|
||||||
|
return
|
||||||
|
|
||||||
|
}
|
||||||
|
// centerCell();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
// 上一次触摸结束的时间戳
|
||||||
|
const lastTap = ref(0)
|
||||||
|
// 单击逻辑的定时器 ID
|
||||||
|
const clickTimer = ref(null)
|
||||||
|
function handleTap(item : any, index0 : number, index1 : number, e : any) {
|
||||||
|
const now = Date.now()
|
||||||
|
// 先清除之前的单击定时器,防止误触
|
||||||
|
if (clickTimer.value != null) {
|
||||||
|
clearTimeout(clickTimer.value)
|
||||||
|
}
|
||||||
|
// 如果两次触摸间隔小于 250ms,则判定双击
|
||||||
|
if (now - lastTap.value < 250) {
|
||||||
|
// message.value = '检测到双击事件'
|
||||||
|
// console.log('双击逻辑执行')
|
||||||
|
if(item.startTime){
|
||||||
|
closeIsOpen(index0, index1)
|
||||||
|
}
|
||||||
|
|
||||||
|
lastTap.value = 0 // 重置,避免连续三次触发
|
||||||
|
} else {
|
||||||
|
// 延迟 250ms 执行单击逻辑,以等待可能的第二次触摸
|
||||||
|
clickTimer.value = setTimeout(() => {
|
||||||
|
// message.value = '检测到单击事件'
|
||||||
|
// console.log('单击逻辑执行')
|
||||||
|
rulerTouchClick(item, index0, index1, e)
|
||||||
|
}, 250)
|
||||||
|
lastTap.value = now
|
||||||
|
}
|
||||||
|
}
|
||||||
const openX = ref(0);
|
const openX = ref(0);
|
||||||
const openY = ref(0);
|
const openY = ref(0);
|
||||||
const isopen = ref(false);
|
const isopen = ref(false);
|
||||||
const isopacity = ref(false);
|
const isopacity = ref(false);
|
||||||
const clickX = ref(-1);
|
|
||||||
const clickY = ref(-1);
|
|
||||||
const timer = ref<number | null>(null)
|
const timer = ref<number | null>(null)
|
||||||
|
|
||||||
//表格点击开始
|
//表格点击开始
|
||||||
const rulerTouchClick = (item : any, index0 : number, index1 : number, e : any) => {
|
const rulerTouchClick = (item : any, index0 : number, index1 : number, e : any) => {
|
||||||
if (item.directiveName) {
|
if (item.directiveName) {
|
||||||
clickX.value = index0;
|
clickX.value = index0;
|
||||||
clickY.value = index1;
|
clickY.value = index1;
|
||||||
const query = uni.createSelectorQuery()
|
nextTick(()=>{
|
||||||
query
|
const query = uni.createSelectorQuery()
|
||||||
.selectAll('.super-card-time-card')
|
query
|
||||||
.boundingClientRect((data : any) => {
|
.selectAll('.super-card-time-card')
|
||||||
data.forEach(async (res : any) => {
|
.boundingClientRect((data : any) => {
|
||||||
// 根据你的条件筛选元素
|
data.forEach(async (res : any) => {
|
||||||
if (res.dataset.index0 == index0 && res.dataset.index1 == index1) {
|
// 根据你的条件筛选元素
|
||||||
if (res.left < 500) {
|
if (res.dataset.index0 == index0 && res.dataset.index1 == index1) {
|
||||||
// 表格太靠左侧,修改到右面
|
if (res.left < 500) {
|
||||||
openX.value = Math.floor(res.left) + 510;
|
// 表格太靠左侧,修改到右面
|
||||||
} else {
|
openX.value = Math.floor(res.left) + 510;
|
||||||
openX.value = Math.floor(res.left) - 10
|
} else {
|
||||||
|
openX.value = Math.floor(res.left) - 10
|
||||||
|
}
|
||||||
|
if (res.top < 300) {
|
||||||
|
// 表格太靠上侧,修改到下面
|
||||||
|
openY.value = Math.floor(res.top) + 250;
|
||||||
|
} else {
|
||||||
|
openY.value = Math.floor(res.top)
|
||||||
|
}
|
||||||
|
await nextTick()
|
||||||
|
isopen.value = true;
|
||||||
|
isopacity.value = false;
|
||||||
|
//加动画
|
||||||
|
setTimeout(() => {
|
||||||
|
isopacity.value = true;
|
||||||
|
}, 100)
|
||||||
}
|
}
|
||||||
if (res.top < 300) {
|
})
|
||||||
// 表格太靠上侧,修改到下面
|
|
||||||
openY.value = Math.floor(res.top) + 250;
|
|
||||||
} else {
|
|
||||||
openY.value = Math.floor(res.top)
|
|
||||||
}
|
|
||||||
await nextTick()
|
|
||||||
isopen.value = true;
|
|
||||||
isopacity.value = false;
|
|
||||||
//加动画
|
|
||||||
setTimeout(() => {
|
|
||||||
isopacity.value = true;
|
|
||||||
}, 100)
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
})
|
.exec()
|
||||||
.exec()
|
})
|
||||||
|
|
||||||
|
}else{
|
||||||
|
// clickX.value = index0;
|
||||||
|
// clickY.value = index1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const rulerTouchStart = () => {
|
const rulerTouchStart = () => {
|
||||||
|
|
@ -325,11 +617,6 @@
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
// emptyChildIndices.forEach((item : number) => {
|
|
||||||
// changetimearr.value.forEach((element : any) => {
|
|
||||||
// element.children.splice(item, 1)
|
|
||||||
// })
|
|
||||||
// })
|
|
||||||
const sortedIndices = [...emptyChildIndices].sort((a, b) => b - a);
|
const sortedIndices = [...emptyChildIndices].sort((a, b) => b - a);
|
||||||
changetimearr.value.forEach((element : any) => {
|
changetimearr.value.forEach((element : any) => {
|
||||||
sortedIndices.forEach(idx => {
|
sortedIndices.forEach(idx => {
|
||||||
|
|
@ -364,7 +651,7 @@
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
changeWhiteLine()
|
// changeWhiteLine()
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
changetimearr.value = JSON.parse(JSON.stringify(timearr.value));
|
changetimearr.value = JSON.parse(JSON.stringify(timearr.value));
|
||||||
|
|
@ -378,39 +665,40 @@
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
changeWhiteLine()
|
// changeWhiteLine()
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 上一次触摸结束的时间戳
|
const movecard = (type:number) => {
|
||||||
const lastTap = ref(0)
|
isopen.value = false
|
||||||
// 单击逻辑的定时器 ID
|
switch (type) {
|
||||||
const clickTimer = ref(null)
|
case 0:
|
||||||
// 页面显示信息
|
if(clickY.value>0){
|
||||||
// const message = ref('请单击或双击此区域')
|
clickY.value--
|
||||||
|
}
|
||||||
function handleTap(item : any, index0 : number, index1 : number, e : any) {
|
|
||||||
const now = Date.now()
|
break
|
||||||
// 先清除之前的单击定时器,防止误触
|
case 1:
|
||||||
if (clickTimer.value != null) {
|
if(clickX.value<23){
|
||||||
clearTimeout(clickTimer.value)
|
clickX.value++
|
||||||
}
|
}
|
||||||
// 如果两次触摸间隔小于 250ms,则判定双击
|
|
||||||
if (now - lastTap.value < 250) {
|
|
||||||
// message.value = '检测到双击事件'
|
break
|
||||||
// console.log('双击逻辑执行')
|
case 2:
|
||||||
closeIsOpen(index0, index1)
|
if(clickY.value<11){
|
||||||
lastTap.value = 0 // 重置,避免连续三次触发
|
clickY.value++
|
||||||
} else {
|
}
|
||||||
// 延迟 250ms 执行单击逻辑,以等待可能的第二次触摸
|
|
||||||
clickTimer.value = setTimeout(() => {
|
break
|
||||||
// message.value = '检测到单击事件'
|
case 3:
|
||||||
// console.log('单击逻辑执行')
|
if(clickX.value>0){
|
||||||
rulerTouchClick(item, index0, index1, e)
|
clickX.value--
|
||||||
}, 250)
|
}
|
||||||
lastTap.value = now
|
|
||||||
}
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
@ -696,7 +984,7 @@
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
height: 80rpx;
|
height: 80rpx;
|
||||||
width: 247rpx;
|
width: 380rpx;
|
||||||
border-right: 1rpx solid transparent;
|
border-right: 1rpx solid transparent;
|
||||||
border-image: repeating-linear-gradient(180deg, #0184db 0px, #0184db 6rpx, transparent 6rpx, transparent 12rpx) 1;
|
border-image: repeating-linear-gradient(180deg, #0184db 0px, #0184db 6rpx, transparent 6rpx, transparent 12rpx) 1;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
|
|
@ -706,7 +994,7 @@
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
width: 247rpx;
|
width: 380rpx;
|
||||||
|
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
border-right: 1rpx solid transparent;
|
border-right: 1rpx solid transparent;
|
||||||
|
|
@ -717,7 +1005,7 @@
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
height: 153rpx;
|
// height: 180rpx;
|
||||||
width: calc(100%);
|
width: calc(100%);
|
||||||
border-top: 1rpx solid transparent;
|
border-top: 1rpx solid transparent;
|
||||||
border-image: repeating-linear-gradient(90deg, #0184db 0px, #0184db 6rpx, transparent 6rpx, transparent 12rpx) 1;
|
border-image: repeating-linear-gradient(90deg, #0184db 0px, #0184db 6rpx, transparent 6rpx, transparent 12rpx) 1;
|
||||||
|
|
|
||||||
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 962 B |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 2.3 MiB |
|
After Width: | Height: | Size: 774 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 6.2 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.4 KiB |
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 5.2 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 5.0 KiB |
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 4.5 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 5.5 KiB |
|
Before Width: | Height: | Size: 5.2 KiB |
|
Before Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 9.0 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 5.6 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 6.2 KiB |
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 5.6 KiB |
|
|
@ -1 +1 @@
|
||||||
https://app.liuyingyong.cn/build/download/2ba4c760-5d68-11f0-9521-35e0630c0d6a
|
https://app.liuyingyong.cn/build/download/b6b0c6f0-6093-11f0-8cb2-c9c3a3189877
|
||||||
|
|
@ -1 +1 @@
|
||||||
{"@platforms":["android","iPhone","iPad"],"id":"__UNI__FB2D473","name":"护理单元","version":{"name":"1.2.5","code":125},"description":"护理单元","developer":{"name":"","email":"","url":""},"permissions":{"Share":{},"Camera":{},"VideoPlayer":{},"UniNView":{"description":"UniNView原生渲染"}},"plus":{"useragent":{"value":"uni-app","concatenate":true},"splashscreen":{"autoclose":true,"delay":0,"target":"id:1","waiting":true},"popGesture":"close","launchwebview":{"render":"always","id":"1","kernel":"WKWebview"},"usingComponents":true,"nvueStyleCompiler":"uni-app","compilerVersion":3,"distribute":{"icons":{"android":{"hdpi":"icon-android-hdpi.png","xhdpi":"icon-android-xhdpi.png","xxhdpi":"icon-android-xxhdpi.png","xxxhdpi":"icon-android-xxxhdpi.png"},"ios":{"appstore":"unpackage/res/icons/1024x1024.png","ipad":{"app":"unpackage/res/icons/76x76.png","app@2x":"unpackage/res/icons/152x152.png","notification":"unpackage/res/icons/20x20.png","notification@2x":"unpackage/res/icons/40x40.png","proapp@2x":"unpackage/res/icons/167x167.png","settings":"unpackage/res/icons/29x29.png","settings@2x":"unpackage/res/icons/58x58.png","spotlight":"unpackage/res/icons/40x40.png","spotlight@2x":"unpackage/res/icons/80x80.png"},"iphone":{"app@2x":"unpackage/res/icons/120x120.png","app@3x":"unpackage/res/icons/180x180.png","notification@2x":"unpackage/res/icons/40x40.png","notification@3x":"unpackage/res/icons/60x60.png","settings@2x":"unpackage/res/icons/58x58.png","settings@3x":"unpackage/res/icons/87x87.png","spotlight@2x":"unpackage/res/icons/80x80.png","spotlight@3x":"unpackage/res/icons/120x120.png"},"prerendered":"false"}},"google":{"abiFilters":["armeabi-v7a","arm64-v8a","x86"],"permissions":["<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>","<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>","<uses-permission android:name=\"android.permission.VIBRATE\"/>","<uses-permission android:name=\"android.permission.READ_LOGS\"/>","<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>","<uses-feature android:name=\"android.hardware.camera.autofocus\"/>","<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>","<uses-permission android:name=\"android.permission.CAMERA\"/>","<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>","<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>","<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>","<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>","<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>","<uses-feature android:name=\"android.hardware.camera\"/>","<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"],"packagename":"uni.UNIFB2D473","aliasname":"__uni__fb2d473","password":"Z4Urhm9jqwqMGoeQNpGzJA==","storepwd":"Z4Urhm9jqwqMGoeQNpGzJA==","keypwd":"Z4Urhm9jqwqMGoeQNpGzJA==","keystore":"google-keystore.keystore","custompermissions":true},"apple":{"dSYMs":false,"devices":"universal"},"plugins":{"audio":{"mp3":{"description":"Android平台录音支持MP3格式文件"}},"share":{"weixin":{"UniversalLinks":"","appid":"wxda748470da82886e"}}},"orientation":"portrait-primary"},"statusbar":{"immersed":"supportedDevice","style":"dark","background":"#F8F8F8"},"uniStatistics":{"enable":false},"allowsInlineMediaPlayback":true,"uni-app":{"control":"uni-v3","vueVersion":"3","compilerVersion":"4.75","nvueCompiler":"uni-app","renderer":"auto","nvue":{"flex-direction":"column"},"nvueLaunchMode":"normal","webView":{"minUserAgentVersion":"49.0"}},"adid":"122926210510"},"app-harmony":{"useragent":{"value":"uni-app","concatenate":true},"uniStatistics":{"enable":false}},"screenOrientation":["landscape-primary","landscape-secondary"],"launch_path":"__uniappview.html"}
|
{"@platforms":["android","iPhone","iPad"],"id":"__UNI__FB2D473","name":"护理单元","version":{"name":"1.2.6","code":126},"description":"护理单元","developer":{"name":"","email":"","url":""},"permissions":{"Share":{},"Camera":{},"VideoPlayer":{},"UniNView":{"description":"UniNView原生渲染"}},"plus":{"useragent":{"value":"uni-app","concatenate":true},"splashscreen":{"autoclose":true,"delay":0,"target":"id:1","waiting":true},"popGesture":"close","launchwebview":{"render":"always","id":"1","kernel":"WKWebview"},"usingComponents":true,"nvueStyleCompiler":"uni-app","compilerVersion":3,"distribute":{"icons":{"android":{"hdpi":"icon-android-hdpi.png","xhdpi":"icon-android-xhdpi.png","xxhdpi":"icon-android-xxhdpi.png","xxxhdpi":"icon-android-xxxhdpi.png"},"ios":{"appstore":"unpackage/res/icons/1024x1024.png","ipad":{"app":"unpackage/res/icons/76x76.png","app@2x":"unpackage/res/icons/152x152.png","notification":"unpackage/res/icons/20x20.png","notification@2x":"unpackage/res/icons/40x40.png","proapp@2x":"unpackage/res/icons/167x167.png","settings":"unpackage/res/icons/29x29.png","settings@2x":"unpackage/res/icons/58x58.png","spotlight":"unpackage/res/icons/40x40.png","spotlight@2x":"unpackage/res/icons/80x80.png"},"iphone":{"app@2x":"unpackage/res/icons/120x120.png","app@3x":"unpackage/res/icons/180x180.png","notification@2x":"unpackage/res/icons/40x40.png","notification@3x":"unpackage/res/icons/60x60.png","settings@2x":"unpackage/res/icons/58x58.png","settings@3x":"unpackage/res/icons/87x87.png","spotlight@2x":"unpackage/res/icons/80x80.png","spotlight@3x":"unpackage/res/icons/120x120.png"},"prerendered":"false"}},"google":{"abiFilters":["armeabi-v7a","arm64-v8a","x86"],"permissions":["<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>","<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>","<uses-permission android:name=\"android.permission.VIBRATE\"/>","<uses-permission android:name=\"android.permission.READ_LOGS\"/>","<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>","<uses-feature android:name=\"android.hardware.camera.autofocus\"/>","<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>","<uses-permission android:name=\"android.permission.CAMERA\"/>","<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>","<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>","<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>","<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>","<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>","<uses-feature android:name=\"android.hardware.camera\"/>","<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"],"packagename":"uni.UNIFB2D473","aliasname":"__uni__fb2d473","password":"Z4Urhm9jqwqMGoeQNpGzJA==","storepwd":"Z4Urhm9jqwqMGoeQNpGzJA==","keypwd":"Z4Urhm9jqwqMGoeQNpGzJA==","keystore":"google-keystore.keystore","custompermissions":true},"apple":{"dSYMs":false,"devices":"universal"},"plugins":{"audio":{"mp3":{"description":"Android平台录音支持MP3格式文件"}},"share":{"weixin":{"UniversalLinks":"","appid":"wxda748470da82886e"}}},"orientation":"portrait-primary"},"statusbar":{"immersed":"supportedDevice","style":"dark","background":"#F8F8F8"},"uniStatistics":{"enable":false},"allowsInlineMediaPlayback":true,"uni-app":{"control":"uni-v3","vueVersion":"3","compilerVersion":"4.75","nvueCompiler":"uni-app","renderer":"auto","nvue":{"flex-direction":"column"},"nvueLaunchMode":"normal","webView":{"minUserAgentVersion":"49.0"}},"adid":"122926210510"},"app-harmony":{"useragent":{"value":"uni-app","concatenate":true},"uniStatistics":{"enable":false}},"screenOrientation":["landscape-primary","landscape-secondary"],"launch_path":"__uniappview.html"}
|
||||||
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 962 B |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 6.2 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.4 KiB |
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 5.2 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 5.0 KiB |
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 4.5 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 5.5 KiB |
|
Before Width: | Height: | Size: 5.2 KiB |
|
Before Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 9.0 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 5.6 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 6.2 KiB |
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 5.6 KiB |
|
Before Width: | Height: | Size: 24 KiB |
|
|
@ -7,8 +7,8 @@
|
||||||
"id": "__UNI__FB2D473",
|
"id": "__UNI__FB2D473",
|
||||||
"name": "护理单元",
|
"name": "护理单元",
|
||||||
"version": {
|
"version": {
|
||||||
"name": "1.2.5",
|
"name": "1.2.9",
|
||||||
"code": 125
|
"code": 129
|
||||||
},
|
},
|
||||||
"description": "护理单元",
|
"description": "护理单元",
|
||||||
"developer": {
|
"developer": {
|
||||||
|
|
|
||||||