11111
|
|
@ -1,16 +1,26 @@
|
|||
<template>
|
||||
<view class="index-content-other" v-show="isShow" :style="transition?{opacity: `1`}:{opacity: `0`}">
|
||||
<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 :style="tabnumber===index?{fontWeight:800}:{}" style="z-index: 1;">
|
||||
{{item}}
|
||||
</view>
|
||||
<view class="tab-heng" v-show="tabnumber===index"></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>
|
||||
|
||||
<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 v-for="(item0,index0) in changearray" :key="index0">
|
||||
<view class="card" v-if="!item0.cardtype"
|
||||
|
|
@ -25,9 +35,12 @@
|
|||
<view class="line-margin">
|
||||
女
|
||||
</view>
|
||||
<view class="">
|
||||
<view>
|
||||
80岁
|
||||
</view>
|
||||
<view style="margin-left: 20rpx;">
|
||||
2025.01.01
|
||||
</view>
|
||||
</view>
|
||||
<view class="top-font-line">
|
||||
<view class="font-gray">
|
||||
|
|
@ -35,37 +48,42 @@
|
|||
</view>
|
||||
|
||||
</view>
|
||||
|
||||
</view>
|
||||
</view>
|
||||
<view class="right-spec">
|
||||
<view class="blue-button">
|
||||
服务指令
|
||||
</view>
|
||||
<view class="font-gray-right">
|
||||
2025.01.01
|
||||
</view>
|
||||
|
||||
护理单元
|
||||
</view>
|
||||
</view>
|
||||
<view class="bottom-balls">
|
||||
|
||||
<view v-for="(item1,index1) in bottomballarray" :key="index1"
|
||||
class="one-ball-father">
|
||||
<image class="one-ball" :src="item1" />
|
||||
{{item1}}
|
||||
<!-- <image class="one-ball" :src="item1" /> -->
|
||||
</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 v-for="(item1,index1) in righttoparray" :key="index1"
|
||||
:class="cardarray[index0]?.buttontarget[index1]?`blue-ball-father-target`:`blue-ball-father`"
|
||||
<view v-for="(item1,index1) in righttoparray" :key="index1" class="blue-ball-father"
|
||||
@click="cardarray[index0].buttontarget[index1] = !cardarray[index0].buttontarget[index1]">
|
||||
<image class="blue-ball"
|
||||
: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>
|
||||
<image class="video-img" src="/static/index/bed.png" />
|
||||
<view class="video-bottom">
|
||||
<view class="font-bottom-weight">
|
||||
护理单元
|
||||
<view class="blue-button">
|
||||
服务指令
|
||||
</view>
|
||||
<view class="bottom-shu">|</view>
|
||||
<view class="">
|
||||
NUID:2506000001
|
||||
</view>
|
||||
|
|
@ -76,11 +94,13 @@
|
|||
</view>
|
||||
</view>
|
||||
<view class="card-right">
|
||||
<view class="split-line-white-sec"></view>
|
||||
<view class="right-title">
|
||||
|
||||
<image style="width: 100%;height: 100%;"
|
||||
:src="`/static/index/video/videotopright/${item0.states}${item0.states}.png`" />
|
||||
<view class="right-other">
|
||||
<!-- <image style="width: 100%;height: 100%;"
|
||||
:src="`/static/index/video/videotopright/${item0.states}${item0.states}.png`" /> -->
|
||||
<view class="right-other"
|
||||
:style="`background: ${rightballarray[item0.states].bgc};`">
|
||||
<image class="other-class" :src="rightballarray[item0.states].url" />
|
||||
<view class="other-font">
|
||||
{{rightballarray[item0.states].name}}
|
||||
|
|
@ -89,7 +109,7 @@
|
|||
</view>
|
||||
|
||||
<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">
|
||||
<image class="laba-img" src="/static/index/video/laba.png" />
|
||||
</view>
|
||||
|
|
@ -99,23 +119,42 @@
|
|||
<view class="right-laba">
|
||||
<image class="laba-img" src="/static/index/video/txt.png" />
|
||||
</view>
|
||||
</view>
|
||||
</view> -->
|
||||
<view class="time">
|
||||
<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>
|
||||
</view>
|
||||
<view class="">
|
||||
10:00-10:10
|
||||
</view>
|
||||
</view> -->
|
||||
</view>
|
||||
</view>
|
||||
<image class="time-img" src="/static/index/teeth.png" @click="jumptodanyuan" />
|
||||
<view class="time-weight">
|
||||
准备洁具(口腔)
|
||||
<view
|
||||
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 class="time-people-two" style="margin-top: 20rpx;">
|
||||
<image class="time-people-img" src="/static/index/cardicons/zhixing.png" />
|
||||
<text class="time-people-font">
|
||||
|
|
@ -155,7 +194,9 @@
|
|||
style="width: 70rpx;height: 80rpx;" />
|
||||
<view style="margin-left: 10rpx;width: 150rpx;">
|
||||
<!-- <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 class="top-font-line">
|
||||
<view class="font-gray">
|
||||
|
|
@ -163,14 +204,15 @@
|
|||
</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
|
||||
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">
|
||||
<image class="kufang-img"
|
||||
:src="item0.movestates===index2 ? item.targeturl : item.url" />
|
||||
<view style="font-size: 25rpx;"
|
||||
:style="item0.movestates===index2 ? {color:`#00B4FF`} :{} ">
|
||||
<view style="font-size: 20rpx;"
|
||||
:style="item0.movestates===index2 ? {color:`#0096ff`} :{} ">
|
||||
{{ item.name }}
|
||||
</view>
|
||||
<!-- <view class="tab-heng" v-show="item0.movestates===index2"></view> -->
|
||||
|
|
@ -183,16 +225,24 @@
|
|||
<view class="bottom-balls">
|
||||
<view v-for="(item1,index1) in bottomballarray" :key="index1"
|
||||
class="one-ball-father">
|
||||
<image class="one-ball" :src="item1" />
|
||||
|
||||
<!-- <image class="one-ball" :src="item1" /> -->
|
||||
{{item1}}
|
||||
</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 v-for="(item1,index1) in righttoparray" :key="index1"
|
||||
:class="cardarray[index0]?.buttontarget[index1]?`blue-ball-father-target`:`blue-ball-father`"
|
||||
@click="cardarray[index0].buttontarget[index1] = !cardarray[index0].buttontarget[index1]">
|
||||
<image class="blue-ball"
|
||||
: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>
|
||||
<image class="video-img" src="/static/index/bed.png" />
|
||||
|
|
@ -211,19 +261,28 @@
|
|||
</view>
|
||||
</view>
|
||||
<view class="card-right">
|
||||
<view class="split-line-white-sec"></view>
|
||||
<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`" />
|
||||
<view class="right-other">
|
||||
<image class="other-class" :src="rightballarrayspec[item0.states].url" />
|
||||
<view class="other-font">
|
||||
{{rightballarrayspec[item0.states].name}}
|
||||
</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 v-if=" !item0.states" style="width: 100%;position: relative;">
|
||||
<view class="right-time">
|
||||
|
||||
<!-- <view class="right-time">
|
||||
<view class="right-laba">
|
||||
<image class="laba-img" src="/static/index/video/laba.png" />
|
||||
</view>
|
||||
|
|
@ -233,22 +292,39 @@
|
|||
<view class="right-laba">
|
||||
<image class="laba-img" src="/static/index/video/txt.png" />
|
||||
</view>
|
||||
</view>
|
||||
</view> -->
|
||||
<view class="time">
|
||||
<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>
|
||||
</view>
|
||||
</view> -->
|
||||
<view class="">
|
||||
10:00-10:10
|
||||
10:00~10:10
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<image class="time-img" src="/static/index/teeth.png" @click="jumptokufang" />
|
||||
<view class="time-weight">
|
||||
准备洁具(口腔)
|
||||
<view
|
||||
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 class="time-people-two" style="margin-top: 20rpx;">
|
||||
<image class="time-people-img" src="/static/index/cardicons/zhixing.png" />
|
||||
|
|
@ -296,29 +372,36 @@
|
|||
const props = defineProps({ isShow: { type: Boolean, required: true } })
|
||||
|
||||
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/4.png"
|
||||
`清晰度`,
|
||||
`分屏`,
|
||||
`画面旋转`
|
||||
// "/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/4.png"
|
||||
])
|
||||
|
||||
const rightballarray = ref([
|
||||
{
|
||||
url: `/static/index/video/videotopright/0.png`,
|
||||
name: `入住`
|
||||
name: `入住`,
|
||||
bgc: `linear-gradient(to right,#008AFF,#01BCFF)`
|
||||
},
|
||||
{
|
||||
url: `/static/index/video/videotopright/1.png`,
|
||||
name: `预警`
|
||||
name: `预警`,
|
||||
bgc: `linear-gradient(to right,#FF585D ,#FF4F52)`
|
||||
},
|
||||
{
|
||||
url: `/static/index/video/videotopright/2.png`,
|
||||
name: `外出`
|
||||
name: `外出`,
|
||||
bgc: `linear-gradient(to right,#709EE2 ,#A0BFEC )`
|
||||
},
|
||||
{
|
||||
url: `/static/index/video/videotopright/3.png`,
|
||||
name: `空闲`
|
||||
name: `空闲`,
|
||||
bgc: `linear-gradient(to right,#B7BCD0,#B7BCD0)`
|
||||
},
|
||||
|
||||
])
|
||||
|
|
@ -353,11 +436,13 @@
|
|||
const rightballarrayspec = ref([
|
||||
{
|
||||
url: `/static/index/video/videotopright/4.png`,
|
||||
name: `启用`
|
||||
name: `启用`,
|
||||
bgc: `linear-gradient(to right,#008AFF,#01BCFF)`
|
||||
},
|
||||
{
|
||||
url: `/static/index/video/videotopright/5.png`,
|
||||
name: `停用`
|
||||
name: `停用`,
|
||||
bgc: `linear-gradient(to right,#B7BCD0,#B7BCD0)`
|
||||
},
|
||||
|
||||
|
||||
|
|
@ -462,8 +547,9 @@
|
|||
}
|
||||
}
|
||||
)
|
||||
const name = ref("");
|
||||
onLoad(() => {
|
||||
// tabnumber.value = 0
|
||||
name.value = uni.getStorageSync('realname')
|
||||
changearray.value = JSON.parse(JSON.stringify(cardarray.value))
|
||||
|
||||
})
|
||||
|
|
@ -538,30 +624,12 @@
|
|||
|
||||
.index-content-right {
|
||||
height: calc(100% - 30rpx);
|
||||
width: calc(100% - 60rpx);
|
||||
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);
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
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 {
|
||||
width: 200rpx;
|
||||
|
|
@ -587,7 +655,7 @@
|
|||
|
||||
.tab {
|
||||
width: 200rpx;
|
||||
height: 100rpx;
|
||||
height: 120rpx;
|
||||
font-size: 32rpx;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
|
|
@ -597,7 +665,7 @@
|
|||
.tab-heng {
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
bottom: 28rpx;
|
||||
bottom: 35rpx;
|
||||
transform: translateX(-50%);
|
||||
width: 50rpx;
|
||||
height: 12rpx;
|
||||
|
|
@ -612,15 +680,15 @@
|
|||
flex-wrap: wrap;
|
||||
|
||||
.card {
|
||||
margin-left: 30rpx;
|
||||
// margin-top: 5rpx;
|
||||
margin-right: 30rpx;
|
||||
margin-bottom: 30rpx;
|
||||
border: 2rpx solid #fff;
|
||||
background: url("/static/index/newpink.png") center/cover, rgba(255, 255, 255, 0.5);
|
||||
background-position: 30% 70%;
|
||||
width: 1003rpx;
|
||||
height: 590rpx;
|
||||
border-radius: 20rpx;
|
||||
background-image: url('/static/index/mountain.png');
|
||||
background-color: rgba(255, 255, 255, 0.6);
|
||||
background-position: 60% 50%;
|
||||
width: 1045rpx;
|
||||
height: 650rpx;
|
||||
border-radius: 50rpx;
|
||||
// box-shadow: 2rpx 4rpx 8rpx 2rpx rgba(0, 0, 0, 0.3);
|
||||
display: flex;
|
||||
border-top-right-radius: 40rpx;
|
||||
|
|
@ -628,7 +696,7 @@
|
|||
|
||||
.card-left {
|
||||
height: 100%;
|
||||
width: 65%;
|
||||
width: 68%;
|
||||
position: relative;
|
||||
|
||||
.card-left-title {
|
||||
|
|
@ -641,10 +709,13 @@
|
|||
|
||||
.left-view {
|
||||
display: flex;
|
||||
margin-top: 20rpx;
|
||||
position: relative;
|
||||
width: 100%;
|
||||
|
||||
.left-view-img {
|
||||
width: 100rpx;
|
||||
height: 100rpx;
|
||||
width: 85rpx;
|
||||
height: 85rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -652,12 +723,13 @@
|
|||
|
||||
.card-right {
|
||||
height: 100%;
|
||||
width: 35%;
|
||||
background-color: rgba(205, 222, 246, 0.6);
|
||||
width: 32%;
|
||||
background-color: rgba(244, 235, 249, 0.3);
|
||||
position: relative;
|
||||
// border-radius: 20rpx;
|
||||
border-top-right-radius: 20rpx;
|
||||
border-bottom-right-radius: 20rpx;
|
||||
border-top-right-radius: 38rpx;
|
||||
border-bottom-right-radius: 38rpx;
|
||||
position: relative;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -665,36 +737,42 @@
|
|||
.top-font-line {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-size: 23rpx;
|
||||
|
||||
.line-weight {
|
||||
font-size: 35rpx;
|
||||
font-weight: 600;
|
||||
margin-left: 10rpx;
|
||||
margin-left: 20rpx;
|
||||
}
|
||||
|
||||
.line-margin {
|
||||
margin-left: 40rpx;
|
||||
margin-left: 20rpx;
|
||||
margin-right: 20rpx;
|
||||
}
|
||||
|
||||
.font-gray {
|
||||
margin-left: 10rpx;
|
||||
margin-top: 10rpx;
|
||||
font-size: 25rpx;
|
||||
margin-left: 20rpx;
|
||||
// margin-top: 10rpx;
|
||||
font-size: 28rpx;
|
||||
color: #555555;
|
||||
}
|
||||
}
|
||||
|
||||
.blue-button {
|
||||
width: 140rpx;
|
||||
position: absolute;
|
||||
right: 20rpx;
|
||||
top: -3rpx;
|
||||
// transform: translateY(-50%);
|
||||
width: 130rpx;
|
||||
height: 50rpx;
|
||||
color: #fff;
|
||||
font-size: 25rpx;
|
||||
background-color: #01B1FC;
|
||||
border-radius: 20rpx;
|
||||
background: linear-gradient(to bottom, #00C9FF, #0076FF);
|
||||
border-radius: 15rpx;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
margin: 20rpx 10rpx 0 0;
|
||||
}
|
||||
|
||||
.font-gray-right {
|
||||
|
|
@ -706,28 +784,33 @@
|
|||
}
|
||||
|
||||
.right-spec {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: flex-end;
|
||||
margin-top: 68rpx;
|
||||
font-weight: 600;
|
||||
margin-right: 10rpx;
|
||||
width: 150rpx;
|
||||
// display: flex;
|
||||
// flex-direction: column;
|
||||
// align-items: flex-end;
|
||||
}
|
||||
|
||||
.video-img {
|
||||
// margin-top: 10rpx;
|
||||
margin-left: 30rpx;
|
||||
width: 520rpx;
|
||||
height: 370rpx;
|
||||
margin-left: 110rpx;
|
||||
width: 570rpx;
|
||||
height: 400rpx;
|
||||
border-radius: 30rpx;
|
||||
}
|
||||
|
||||
.video-bottom {
|
||||
width: 100%;
|
||||
overflow: hidden;
|
||||
height: 70rpx;
|
||||
height: 85rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding-left: 30rpx;
|
||||
padding-left: 110rpx;
|
||||
color: #858585;
|
||||
font-size: 24rpx;
|
||||
position: relative;
|
||||
|
||||
.font-bottom-weight {
|
||||
font-size: 28rpx;
|
||||
|
|
@ -743,33 +826,37 @@
|
|||
|
||||
.bottom-balls {
|
||||
position: absolute;
|
||||
bottom: 110rpx;
|
||||
left: 35%;
|
||||
bottom: 120rpx;
|
||||
left: 38%;
|
||||
transform: translateX(-35%);
|
||||
z-index: 999;
|
||||
display: flex;
|
||||
|
||||
.one-ball-father {
|
||||
width: 50rpx;
|
||||
width: 120rpx;
|
||||
// padding: 5rpx 15rpx;
|
||||
height: 50rpx;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
background-color: rgb(111, 111, 111);
|
||||
// background-color: rgb(111, 111, 111);
|
||||
border: 2rpx solid #fff;
|
||||
margin: 0 18rpx;
|
||||
border-radius: 50%;
|
||||
margin: 0 5rpx;
|
||||
color: #fff;
|
||||
font-size: 25rpx;
|
||||
border-radius: 10rpx;
|
||||
// border-radius: 50%;
|
||||
|
||||
.one-ball {
|
||||
width: 35rpx;
|
||||
height: 35rpx;
|
||||
}
|
||||
// .one-ball {
|
||||
// width: 35rpx;
|
||||
// height: 35rpx;
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
.right-balls {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
left: 25rpx;
|
||||
top: 140rpx;
|
||||
padding-top: 10rpx;
|
||||
z-index: 999;
|
||||
|
|
@ -780,34 +867,40 @@
|
|||
}
|
||||
|
||||
.blue-ball-father {
|
||||
width: 65rpx;
|
||||
height: 65rpx;
|
||||
width: 70rpx;
|
||||
height: 70rpx;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
background-color: #E7ECFA;
|
||||
border-radius: 20rpx;
|
||||
background-color: #dbe8f9;
|
||||
border-radius: 25rpx;
|
||||
margin-right: 20rpx;
|
||||
margin-bottom: 5rpx;
|
||||
margin-bottom: 18rpx;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
// border: 2rpx solid gainsboro;
|
||||
}
|
||||
|
||||
.blue-ball-father-target {
|
||||
width: 65rpx;
|
||||
height: 65rpx;
|
||||
width: 70rpx;
|
||||
height: 70rpx;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
background-color: rgb(215, 240, 254);
|
||||
border-radius: 20rpx;
|
||||
background-color: #dbe8f9;
|
||||
border-radius: 25rpx;
|
||||
margin-right: 20rpx;
|
||||
margin-bottom: 5rpx;
|
||||
margin-bottom: 18rpx;
|
||||
position: relative;
|
||||
overflow: auto;
|
||||
// border: 2rpx solid gainsboro;
|
||||
}
|
||||
}
|
||||
|
||||
.right-title {
|
||||
position: absolute;
|
||||
right: -31rpx;
|
||||
top: -33rpx;
|
||||
right: -50rpx;
|
||||
top: 10rpx;
|
||||
width: 250rpx;
|
||||
height: 120rpx;
|
||||
z-index: 1;
|
||||
|
|
@ -820,6 +913,11 @@
|
|||
transform: translate(-50%, -50%);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border-top-left-radius: 30rpx;
|
||||
border-bottom-left-radius: 30rpx;
|
||||
width: 150rpx;
|
||||
height: 60rpx;
|
||||
|
||||
.other-class {
|
||||
width: 35rpx;
|
||||
|
|
@ -835,7 +933,7 @@
|
|||
|
||||
.time {
|
||||
display: flex;
|
||||
margin-top: 80rpx;
|
||||
margin-top: 120rpx;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
|
||||
|
|
@ -843,40 +941,31 @@
|
|||
background: linear-gradient(to bottom, #7080A1, #263556);
|
||||
-webkit-background-clip: text;
|
||||
color: transparent;
|
||||
font-size: 50rpx;
|
||||
font-size: 45rpx;
|
||||
font-weight: 600;
|
||||
// margin-left: 5rpx;
|
||||
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 {
|
||||
width: 240rpx;
|
||||
height: 180rpx;
|
||||
margin-top: 30rpx;
|
||||
margin-left: 30rpx;
|
||||
margin-bottom: 10rpx;
|
||||
margin-bottom: 15rpx;
|
||||
// margin: 0 auto;
|
||||
// background: red;
|
||||
// margin-top: 30rpx;
|
||||
// margin-left: 30rpx;
|
||||
// margin-bottom: 10rpx;
|
||||
}
|
||||
|
||||
.time-weight {
|
||||
font-weight: 600;
|
||||
font-size: 32rpx;
|
||||
margin-left: 40rpx;
|
||||
margin-top: 25rpx;
|
||||
// margin-left: 40rpx;
|
||||
}
|
||||
|
||||
.time-small {
|
||||
|
|
@ -924,11 +1013,7 @@
|
|||
align-items: center;
|
||||
margin-bottom: 10rpx;
|
||||
|
||||
.laba-img {
|
||||
width: 35rpx;
|
||||
height: 35rpx;
|
||||
margin-left: 10rpx;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -954,8 +1039,8 @@
|
|||
}
|
||||
|
||||
.kufang-img {
|
||||
width: 35rpx;
|
||||
height: 35rpx;
|
||||
width: 43rpx;
|
||||
height: 43rpx;
|
||||
// margin-bottom: 5rpx;
|
||||
}
|
||||
|
||||
|
|
@ -969,4 +1054,96 @@
|
|||
border-radius: 10rpx;
|
||||
// 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>
|
||||
|
|
@ -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"
|
||||
:src="darkFans?`/static/index/undericons/out.png`:`/static/index/undericons/outlight.png`" />
|
||||
</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>
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@
|
|||
拖动模式
|
||||
</text>
|
||||
</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">
|
||||
手柄模式1
|
||||
</text>
|
||||
|
|
|
|||
|
|
@ -4,19 +4,7 @@
|
|||
<view class="right-container" :style="isshow?{opacity: `1`}:{opacity: `0`}"
|
||||
@click="bottomisShaking=false;shakyTable = false">
|
||||
<!-- 轮盘 -->
|
||||
<!-- <joystick v-show="isEdit" @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">
|
||||
<text :class="darkFans?`right-container-title-no-dark`:`right-container-title-no`">
|
||||
ID:12345678
|
||||
|
|
@ -72,12 +60,6 @@
|
|||
<view class="doctorsay-container-juzhen" @click="routerPush">
|
||||
预览
|
||||
</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 class="super-card">
|
||||
|
|
@ -104,10 +86,6 @@
|
|||
</view>
|
||||
|
||||
<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="handleTop" :show-scrollbar="false">
|
||||
<view
|
||||
|
|
@ -176,10 +154,7 @@
|
|||
{{item1.cycleType}}
|
||||
</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"
|
||||
src="/static/index/tu.png" />
|
||||
<view v-if="item1.startTime" class="title-time-font-rel">
|
||||
|
|
@ -191,19 +166,7 @@
|
|||
<image class="right-box-items-button"
|
||||
src="/static/index/ren.png" />
|
||||
</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>
|
||||
|
|
@ -267,6 +230,7 @@
|
|||
{{item}}
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view v-for="(item,index) in days" :key="index"
|
||||
@click="clickMonth(item,index)" v-if="!isweek">
|
||||
<view :class="monthIndex===index?`items-card-target`:`items-card`">
|
||||
|
|
@ -281,7 +245,7 @@
|
|||
:scroll-top="firsttop" v-show="!iszhouqi">
|
||||
<view
|
||||
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"
|
||||
: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 ==='日常护理'"
|
||||
|
|
@ -323,6 +287,7 @@
|
|||
</view>
|
||||
<view class="middle-right-box">
|
||||
<view v-for="(item,index) in doctorsayList" :key="index" @click="changLeft(index)">
|
||||
|
||||
<view
|
||||
:class="index === upmenuIndex ? `doctorsay-container-card-target`:`doctorsay-container-card`">
|
||||
<image class="doctorsay-container-card-img"
|
||||
|
|
@ -386,93 +351,6 @@
|
|||
</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 class="popup-say-content" style="padding-top: 30rpx;" :style="{ opacity: sayisopacity ? 1 : 0 }"
|
||||
|
|
@ -504,24 +382,6 @@
|
|||
<view class="popup-say-three"></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 class="popup-share-content" :style="{ opacity: deletedownisopacity ? 1 : 0 }" @click.stop>
|
||||
|
|
@ -556,12 +416,10 @@
|
|||
import index from '../../request';
|
||||
import { myArray } from './yaoshandiao.js';
|
||||
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 skilladd from '@/component/public/game/skilladd.vue'
|
||||
import skillmove from '@/component/public/game/skilmove.vue'
|
||||
import skilmovedelete from '@/component/public/game/skilmovedelete.vue'
|
||||
// import ceshi from '@/component/public/game/ceshi.vue'
|
||||
const props = defineProps({
|
||||
isshow: {
|
||||
type: Boolean,
|
||||
|
|
@ -587,14 +445,13 @@
|
|||
() => props.isold,
|
||||
() => {
|
||||
if (props.isold) {
|
||||
saveEditIndex.value.index0 = saveleft.value;
|
||||
saveEditIndex.value.index0 = 9;
|
||||
saveEditIndex.value.index1 = 0;
|
||||
cardLeft.value = 1;
|
||||
scrollTop.value = 1;
|
||||
nextTick(() => {
|
||||
scrollTop.value = 0;
|
||||
cardLeft.value = saveleft.value * 117;
|
||||
// isHave()
|
||||
})
|
||||
|
||||
}
|
||||
|
|
@ -717,15 +574,33 @@
|
|||
//第几套表格
|
||||
const currentNumber = 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 saveright = ref(11);
|
||||
const savetop = ref(0);
|
||||
const savebottom = ref(3);
|
||||
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 = () => {
|
||||
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() {
|
||||
cardsumit.value.op.name = secondopenValue.value[cardsumit.value.op.index[2]].relName
|
||||
switch (secondopenValue.value[cardsumit.value.op.index[2]].cycleType) {
|
||||
|
|
@ -839,6 +686,11 @@
|
|||
}
|
||||
const selectType = ref(true);
|
||||
const deleteButton = ref(false);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// 给摇杆用的
|
||||
//看完迷糊不,我都迷糊了
|
||||
//0上1右2下3左
|
||||
|
|
@ -848,28 +700,28 @@
|
|||
const movecard = (where : number) => {
|
||||
isDelete.value = false;
|
||||
// console.log("?????",leftIn.value,saveleft.value*117)
|
||||
if (((saveleft.value * 117 - leftIn.value) > 5) || ((leftIn.value - saveleft.value * 117) > 0)) {
|
||||
cardLeft.value = 1;
|
||||
nextTick(() => {
|
||||
cardLeft.value = saveleft.value * 117;
|
||||
})
|
||||
}
|
||||
if (((savetop.value * 104.5 - topIn.value) > 5) || ((topIn.value - savetop.value * 104.5) > 0)) {
|
||||
scrollTop.value = 1;
|
||||
nextTick(() => {
|
||||
scrollTop.value = savetop.value * 104.5;
|
||||
})
|
||||
}
|
||||
// if (((saveleft.value * 117 - leftIn.value) > 5) || ((leftIn.value - saveleft.value * 117) > 0)) {
|
||||
// cardLeft.value = 1;
|
||||
// nextTick(() => {
|
||||
// cardLeft.value = saveleft.value * 117;
|
||||
// })
|
||||
// }
|
||||
// if (((savetop.value * 104.5 - topIn.value) > 5) || ((topIn.value - savetop.value * 104.5) > 0)) {
|
||||
// scrollTop.value = 1;
|
||||
// nextTick(() => {
|
||||
// scrollTop.value = savetop.value * 104.5;
|
||||
// })
|
||||
// }
|
||||
switch (where) {
|
||||
case 0:
|
||||
if (saveEditIndex.value.index1) {
|
||||
saveEditIndex.value.index1--
|
||||
}
|
||||
if (saveEditIndex.value.index1 < savetop.value) {
|
||||
savetop.value = saveEditIndex.value.index1;
|
||||
savebottom.value = saveEditIndex.value.index1 + 3
|
||||
scrollTop.value = saveEditIndex.value.index1 * 104.5;
|
||||
}
|
||||
// if (saveEditIndex.value.index1 < savetop.value) {
|
||||
// savetop.value = saveEditIndex.value.index1;
|
||||
// savebottom.value = saveEditIndex.value.index1 + 3
|
||||
// scrollTop.value = saveEditIndex.value.index1 * 104.5;
|
||||
// }
|
||||
// isHave()
|
||||
break
|
||||
case 1:
|
||||
|
|
@ -877,11 +729,11 @@
|
|||
return
|
||||
}
|
||||
saveEditIndex.value.index0++
|
||||
if (saveEditIndex.value.index0 > saveright.value) {
|
||||
saveleft.value = saveEditIndex.value.index0 - 5;
|
||||
saveright.value = saveEditIndex.value.index0
|
||||
cardLeft.value = saveleft.value * 117;
|
||||
}
|
||||
// if (saveEditIndex.value.index0 > saveright.value) {
|
||||
// saveleft.value = saveEditIndex.value.index0 - 5;
|
||||
// saveright.value = saveEditIndex.value.index0
|
||||
// cardLeft.value = saveleft.value * 117;
|
||||
// }
|
||||
|
||||
// isHave()
|
||||
break
|
||||
|
|
@ -890,11 +742,11 @@
|
|||
return
|
||||
}
|
||||
saveEditIndex.value.index1++
|
||||
if (saveEditIndex.value.index1 > savebottom.value) {
|
||||
savetop.value = saveEditIndex.value.index1 - 3;
|
||||
savebottom.value = saveEditIndex.value.index1;
|
||||
scrollTop.value = savetop.value * 104.5;
|
||||
}
|
||||
// if (saveEditIndex.value.index1 > savebottom.value) {
|
||||
// savetop.value = saveEditIndex.value.index1 - 3;
|
||||
// savebottom.value = saveEditIndex.value.index1;
|
||||
// scrollTop.value = savetop.value * 104.5;
|
||||
// }
|
||||
// isHave()
|
||||
break
|
||||
case 3:
|
||||
|
|
@ -902,49 +754,51 @@
|
|||
return
|
||||
}
|
||||
saveEditIndex.value.index0--
|
||||
if (saveEditIndex.value.index0 < saveleft.value) {
|
||||
saveleft.value = saveEditIndex.value.index0;
|
||||
saveright.value = saveEditIndex.value.index0 + 5;
|
||||
cardLeft.value = saveleft.value * 117;
|
||||
}
|
||||
// if (saveEditIndex.value.index0 < saveleft.value) {
|
||||
// saveleft.value = saveEditIndex.value.index0;
|
||||
// saveright.value = saveEditIndex.value.index0 + 5;
|
||||
// cardLeft.value = saveleft.value * 117;
|
||||
// }
|
||||
// isHave()
|
||||
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 weekIndex = ref(-1);
|
||||
const monthValue = ref("");
|
||||
const monthIndex = ref(-1);
|
||||
const clickWeek = (item, index) => {
|
||||
weekValue.value = item;
|
||||
weekIndex.value = index;
|
||||
|
||||
// selectType.value = true;
|
||||
// isweek.value = true;
|
||||
// cardsumit.value.monthTime = '';
|
||||
// cardsumit.value.monthTimeNumber = -1;
|
||||
const now = Date.now()
|
||||
if (now - lastTap.value < DOUBLE_TAP_DELAY) {
|
||||
// 双击成立
|
||||
weekValue.value = item;
|
||||
weekIndex.value = index;
|
||||
addnew()
|
||||
// 重置,避免多次触发
|
||||
lastTap.value = 0
|
||||
} else {
|
||||
weekValue.value = item;
|
||||
weekIndex.value = index;
|
||||
// 记录本次时间,等待下次点击
|
||||
lastTap.value = now
|
||||
}
|
||||
}
|
||||
const clickMonth = (item, index) => {
|
||||
// console.log("item", item)
|
||||
monthValue.value = item;
|
||||
monthIndex.value = index;
|
||||
|
||||
// selectType.value = true;
|
||||
// isweek.value = false;
|
||||
// cardsumit.value.weekTime = '';
|
||||
// cardsumit.value.weekTimeNumber = -1;
|
||||
const now = Date.now()
|
||||
if (now - lastTap.value < DOUBLE_TAP_DELAY) {
|
||||
// 双击成立
|
||||
monthValue.value = item;
|
||||
monthIndex.value = index;
|
||||
addnew()
|
||||
// 重置,避免多次触发
|
||||
lastTap.value = 0
|
||||
} else {
|
||||
monthValue.value = item;
|
||||
monthIndex.value = index;
|
||||
// 记录本次时间,等待下次点击
|
||||
lastTap.value = now
|
||||
}
|
||||
}
|
||||
const isDelete = ref(false);
|
||||
const openDelete = () => {
|
||||
|
|
@ -966,15 +820,6 @@
|
|||
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) {
|
||||
const seed = index0 * 55.9898 + index1 * 78.233;
|
||||
|
|
@ -987,14 +832,6 @@
|
|||
}
|
||||
// 在作用域中声明一个定时器变量
|
||||
let throttleTimer = null;
|
||||
|
||||
// const changecurrentNumber = (event : any) => {
|
||||
// // 进行你想要的操作
|
||||
// currentNumber.value = event.detail.current;
|
||||
// nextTick(() => {
|
||||
// scrollTop.value = moveDownNumber.value;
|
||||
// });
|
||||
// };
|
||||
//监听拖拽
|
||||
const dragOffset = ref(0);
|
||||
const topIn = ref(0)
|
||||
|
|
@ -1008,15 +845,6 @@
|
|||
const leftIn = ref(0)
|
||||
function handleTop(e) {
|
||||
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);
|
||||
|
|
@ -1065,8 +893,8 @@
|
|||
const isEdit = ref(false);
|
||||
// const isLunpan = ref(false);
|
||||
const saveEditIndex = ref({
|
||||
index0: -1,
|
||||
index1: -1
|
||||
index0: 9,
|
||||
index1: 0
|
||||
})
|
||||
const clickstauts = ref(0)
|
||||
const secondopenValue = ref([]);
|
||||
|
|
@ -1084,85 +912,7 @@
|
|||
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) => {
|
||||
emit('changeold', type)
|
||||
}
|
||||
|
|
@ -1192,21 +942,7 @@
|
|||
deletedownisopacity.value = true
|
||||
}, 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 shareShow = ref(false);
|
||||
|
|
@ -1277,33 +1013,7 @@
|
|||
const reldata = ref([]);
|
||||
//表格长按开始
|
||||
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 moveXa = Math.floor(e.touches[0].pageX);
|
||||
|
|
@ -1598,87 +1308,11 @@
|
|||
index1: saveEditIndex.value.index1
|
||||
}
|
||||
whereEvent(data);
|
||||
// isHave()
|
||||
saveAll()
|
||||
// console.log("!!!!!!!!",timearr.value)
|
||||
|
||||
}
|
||||
const cleansettimeout = 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 = () => {
|
||||
//给后端编译一下
|
||||
let postArray = [];
|
||||
|
|
@ -1703,7 +1337,6 @@
|
|||
|
||||
})
|
||||
})
|
||||
// console.log("!!!!!!!!", postArray)
|
||||
}
|
||||
const routerPush = () => {
|
||||
uni.setStorage({
|
||||
|
|
@ -1728,16 +1361,10 @@
|
|||
bordershow: true
|
||||
})
|
||||
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.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;
|
||||
|
|
@ -1749,46 +1376,6 @@
|
|||
saveRulerTime.value.index0 = -1;
|
||||
saveRulerTime.value.index1 = -1;
|
||||
}, 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 个
|
||||
const minuteArr = ['00', '05', '10', '15', '20', '25', '30', '35', '40', '45', '50', '55']
|
||||
|
|
@ -1802,31 +1389,16 @@
|
|||
}))
|
||||
)
|
||||
onShow(() => {
|
||||
// console.log("QQQQ", myArray)
|
||||
bigArray.value = myArray
|
||||
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);
|
||||
console.log("???",saveEditIndex.value)
|
||||
})
|
||||
onHide(() => {
|
||||
uni.$off('where', whereEvent);
|
||||
});
|
||||
defineExpose({
|
||||
// rulerEnd,
|
||||
rulerMoveEnd,
|
||||
// nextItems,
|
||||
})
|
||||
|
||||
const moveNumber = ref({
|
||||
|
|
@ -1877,6 +1449,40 @@
|
|||
}
|
||||
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>
|
||||
|
||||
<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 {
|
||||
transform: translateX(0%);
|
||||
}
|
||||
.zy-modal .zy-dialog>.zy-bar:first-child .action{
|
||||
min-width: 100rpx;
|
||||
margin-right: 0;
|
||||
min-height: 100rpx;
|
||||
|
||||
.zy-modal .zy-dialog>.zy-bar:first-child .action {
|
||||
min-width: 100rpx;
|
||||
margin-right: 0;
|
||||
min-height: 100rpx;
|
||||
}
|
||||
|
||||
/* ==================
|
||||
|
|
@ -172,22 +173,32 @@
|
|||
==================== */
|
||||
|
||||
.zy-btn {
|
||||
position: relative;
|
||||
border: 0upx;
|
||||
display: inline-flex;
|
||||
/* position: relative;
|
||||
border: 0upx; */
|
||||
/* display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
box-sizing: border-box;
|
||||
padding: 0 30upx;
|
||||
font-size: 28upx;
|
||||
height: 64upx;
|
||||
line-height: 1;
|
||||
justify-content: center; */
|
||||
/* box-sizing: border-box; */
|
||||
/* padding: 0 30upx; */
|
||||
/* font-size: 28upx; */
|
||||
/* height: 64upx; */
|
||||
/* line-height: 1;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
overflow: visible;
|
||||
margin-left: initial;
|
||||
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 {
|
||||
|
|
@ -1576,6 +1587,7 @@ button.cuIcon.lg {
|
|||
z-index: 0;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
/* ==================
|
||||
文本
|
||||
==================== */
|
||||
|
|
@ -1744,4 +1756,4 @@ button.cuIcon.lg {
|
|||
.line-white,
|
||||
.lines-white {
|
||||
color: #ffffff;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,16 +1,22 @@
|
|||
<template>
|
||||
<view class="zy-modal" :class="dshow?'show':''">
|
||||
<view class="zy-dialog" style="background-color: transparent;">
|
||||
<view class="padding-top text-white" :class="'zy-upgrade-topbg-'+theme">
|
||||
<view style="position: absolute;top: 300rpx;left: 1040rpx;z-index: 9999;" >
|
||||
<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>
|
||||
<text class="zy-upgrade-title">
|
||||
发现新版本
|
||||
</text>
|
||||
</view>
|
||||
<text class="flex-wrap">{{version}}</text>
|
||||
<text class="flex-wrap" style="margin-top: 10rpx;">{{version}}</text>
|
||||
</view>
|
||||
<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>
|
||||
</scroll-view>
|
||||
<view class="zy-progress radius striped active" v-if="update_flag">
|
||||
|
|
@ -19,7 +25,7 @@
|
|||
</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">
|
||||
<button class="zy-btn" :class="'bg-'+theme" @click="upgrade_checked">确认升级</button>
|
||||
<button class="zy-btn margin-left" :class="'line-'+theme"
|
||||
|
|
@ -131,7 +137,7 @@
|
|||
method: 'GET',
|
||||
dataType:'json',
|
||||
success: (res) => {
|
||||
console.log("?????",res)
|
||||
console.log("?????",res.data.code)
|
||||
if(res.statusCode===404){
|
||||
return
|
||||
}
|
||||
|
|
@ -212,7 +218,7 @@
|
|||
url: targetUrl,
|
||||
header:this.header,
|
||||
success:function(res){
|
||||
// console.log("!!!",res)
|
||||
console.log("!!!",res)
|
||||
if(res.statusCode == 200){
|
||||
//开始安装
|
||||
plus.runtime.install(res.tempFilePath, {
|
||||
|
|
@ -291,13 +297,14 @@
|
|||
height: 290rpx;
|
||||
}
|
||||
.zy-upgrade-topbg-blue {
|
||||
background-image: url('static/images/blue.png');
|
||||
/* background-image: url('static/images/blue.png'); */
|
||||
background-size: 100% 100%;
|
||||
background-repeat: no-repeat;
|
||||
height: 290rpx;
|
||||
/* height: 290rpx; */
|
||||
}
|
||||
.zy-upgrade-title {
|
||||
font-size: 50rpx;
|
||||
color: white;
|
||||
font-size: 35rpx;
|
||||
font-weight: 600;
|
||||
/* color: white; */
|
||||
}
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@
|
|||
"name" : "护理单元",
|
||||
"appid" : "__UNI__FB2D473",
|
||||
"description" : "护理单元",
|
||||
"versionName" : "1.2.5",
|
||||
"versionCode" : 125,
|
||||
"versionName" : "1.2.9",
|
||||
"versionCode" : 129,
|
||||
"transformPx" : false,
|
||||
/* 5+App特有相关 */
|
||||
"app-plus" : {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<template>
|
||||
<view :class="darkFans?`darkbackgroundContainer`:`backgroundContainer`">
|
||||
<view class="index-title">
|
||||
<!-- <view class="index-title">
|
||||
<view class="index-title-left">
|
||||
<image class="index-title-left-img" src="/static/index/customer.png" />
|
||||
<view class="index-title-left-font">
|
||||
|
|
@ -9,15 +9,15 @@
|
|||
<view class="index-title-left-wel">
|
||||
长春市朝阳区久泰开运养老服务有限公司
|
||||
</view>
|
||||
<!-- <view class="index-title-left-weight">
|
||||
<view class="index-title-left-weight">
|
||||
{{name}}
|
||||
</view>
|
||||
<view class="">
|
||||
长春市朝阳区久泰开运养老服务有限公司
|
||||
</view> -->
|
||||
</view>
|
||||
</view>
|
||||
<view class="index-title-right">
|
||||
|
||||
长春市朝阳区久泰开运养老服务有限公司
|
||||
<view v-for="(item,index) in ballList" :key="index">
|
||||
<view class="ball-bgc" @click="jumpToIndex(index)">
|
||||
<image class="ball-img" :src="item.url" />
|
||||
|
|
@ -33,9 +33,17 @@
|
|||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view> -->
|
||||
<view class="index-content">
|
||||
<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 class="blue-circle" v-show="index === menuIndex">
|
||||
<image class="blue-circle-size" :src="`/static/index/ray.png`" />
|
||||
|
|
@ -52,6 +60,7 @@
|
|||
</view>
|
||||
</view>
|
||||
<!-- 首页 -->
|
||||
|
||||
<fuwu :isShow="menuIndex == 0" />
|
||||
<storeroomindex :isShow="menuIndex == -1" @nav="navMenu" />
|
||||
<leidaindex :isShow="menuIndex==-2" />
|
||||
|
|
@ -82,14 +91,12 @@
|
|||
const detailisopacity = ref(false)
|
||||
// 初始化左侧菜单列表
|
||||
const iconList = ref<Link[]>([
|
||||
{ url: '/static/index/lefticon/index.png', targetUrl: '/static/index/lefticontarget/blueindex.png', name: '首页', pao: 0 },
|
||||
{ url: '/static/index/Warehousing/dingdan.png', targetUrl: '/static/index/Warehousing/dingdanblue.png', name: '服务考核', pao: 0 },
|
||||
{ url: '/static/index/Warehousing/chuku.png', targetUrl: '/static/index/Warehousing/chukublue.png', name: '库房管理', pao: 5 },
|
||||
|
||||
{ url: '/static/index/Warehousing/jiankong.png', targetUrl: '/static/index/Warehousing/jiankongblue.png', name: '机构功能1', pao: 0 },
|
||||
{ url: '/static/index/Warehousing/jiankong.png', targetUrl: '/static/index/Warehousing/jiankongblue.png', name: '机构功能2', 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 }
|
||||
{ url: '/static/index/relindex/index.png', targetUrl: '/static/index/relindex/indexblue.png', name: '首页', pao: 0 },
|
||||
{ url: '/static/index/relindex/fuwu.png', targetUrl: '/static/index/relindex/fuwublue.png', name: '服务考核', pao: 0 },
|
||||
{ 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/relindex/jigou.png', targetUrl: '/static/index/relindex/jigoublue.png', name: '机构功能3', pao: 0 },
|
||||
{ url: '/static/index/relindex/shezhi.png', targetUrl: '/static/index/relindex/shezhiblue.png', name: '设置', pao: 0 },
|
||||
]);
|
||||
|
||||
const iconTop = ref<iconTopLink[]>([
|
||||
|
|
@ -203,15 +210,7 @@
|
|||
align-items: center;
|
||||
margin-top: 20rpx;
|
||||
|
||||
.index-title-left-img {
|
||||
width: 75rpx;
|
||||
height: 75rpx;
|
||||
|
||||
}
|
||||
|
||||
.index-title-left-font {
|
||||
margin-left: 20rpx;
|
||||
}
|
||||
|
||||
|
||||
.index-title-left-wel {
|
||||
margin-left: 40rpx;
|
||||
|
|
@ -228,6 +227,7 @@
|
|||
height: 100%;
|
||||
align-items: center;
|
||||
margin-top: 20rpx;
|
||||
margin-right: 10rpx;
|
||||
|
||||
.top-card {
|
||||
width: 180rpx;
|
||||
|
|
@ -256,19 +256,21 @@
|
|||
width: 100%;
|
||||
height: calc(100vh - 150rpx);
|
||||
display: flex;
|
||||
margin-top: 55rpx;
|
||||
|
||||
.index-content-leftMenus {
|
||||
height: 100%;
|
||||
width: 170rpx;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
// justify-content: center;
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
margin-top: -15rpx;
|
||||
margin-top: 20rpx;
|
||||
position: relative;
|
||||
|
||||
.left-img {
|
||||
width: 93rpx;
|
||||
height: 93rpx;
|
||||
width: 90rpx;
|
||||
height: 90rpx;
|
||||
// margin: 50rpx 0;
|
||||
z-index: 100;
|
||||
}
|
||||
|
|
@ -276,12 +278,13 @@
|
|||
.left-img-font {
|
||||
margin-top: 10rpx;
|
||||
color: #fff;
|
||||
font-size: 25rpx;
|
||||
}
|
||||
|
||||
.left-img-font-target {
|
||||
margin-top: 10rpx;
|
||||
color: #0174D3;
|
||||
|
||||
font-size: 25rpx;
|
||||
}
|
||||
|
||||
.blue-circle-pos {
|
||||
|
|
@ -290,8 +293,8 @@
|
|||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: 230rpx;
|
||||
|
||||
height: 800rpx;
|
||||
|
||||
|
||||
.blue-circle {
|
||||
position: absolute;
|
||||
|
|
@ -335,4 +338,19 @@
|
|||
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>
|
||||
|
|
@ -54,7 +54,7 @@
|
|||
:darkFans="darkFans" v-show="menuIndex==1&&!isOld" @darkchange="darkchange" @savename="openname"
|
||||
@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"
|
||||
@saveruler="openruler" @changefangkuang="changefangkuang" @cleanname="closename" @changeold="isOldchange" />
|
||||
<!-- 新表格 -->
|
||||
|
|
@ -69,7 +69,7 @@
|
|||
import type { Link } from "./index";
|
||||
import rightItemsfirst from "../../component/rightItemsindex/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 { onShow } from '@dcloudio/uni-app';
|
||||
|
||||
|
|
|
|||
|
|
@ -12,9 +12,9 @@ export const isRel = (tel) => {
|
|||
}
|
||||
|
||||
//获得登录图片
|
||||
export const getLoginImg = (time) => {
|
||||
export const getLoginCode = (time) => {
|
||||
return request({
|
||||
url: `${uni.getStorageSync('serverUrl')}/sys/randomImage/${time}`,
|
||||
url: `${uni.getStorageSync('serverUrl')}/sys/randomCode/${time}`,
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,22 +4,20 @@
|
|||
<view class="input-father">
|
||||
<view class="add">+86</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 class="input-father">
|
||||
<input class="password" password type="text" v-model="form.password" maxlength="15" placeholder="请输入密码" />
|
||||
</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>
|
||||
<view class="input-father-blue" v-show="fullName&&canclick" @click="login()">
|
||||
验证并登录
|
||||
</view>
|
||||
<!-- <demo style="z-index: 999;" /> -->
|
||||
<view class="under-container-title">
|
||||
<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>
|
||||
|
|
@ -43,8 +41,9 @@
|
|||
欢迎使用护理单元app!
|
||||
</view>
|
||||
<view style="text-indent: 2em;">
|
||||
我们将通过<text class="text-blue"@click="openany=true;opentype=true">《用户协议》</text>和<text
|
||||
class="text-blue" @click="openany=true;opentype=false">《隐私政策》</text>,帮助您了解我们为您提供的服务、我们如何处理个人信息以及您享有的权利。我们会严格按照相关法律法规要求,采取各种安全措施来保护您的个人信息。
|
||||
我们将通过<text class="text-blue" @click="openany=true;opentype=true">《用户协议》</text>和<text
|
||||
class="text-blue"
|
||||
@click="openany=true;opentype=false">《隐私政策》</text>,帮助您了解我们为您提供的服务、我们如何处理个人信息以及您享有的权利。我们会严格按照相关法律法规要求,采取各种安全措施来保护您的个人信息。
|
||||
</view>
|
||||
<view style="margin: 30rpx 0;">
|
||||
点击“同意”按钮,表示您已知情并同意以上协议和以下约定。
|
||||
|
|
@ -124,6 +123,9 @@
|
|||
<!-- 自动更新组件 -->
|
||||
<zy-update ref="zyupgrade" :noticeflag="true" theme="blue" :h5preview="false" oldversion="1.0.0"
|
||||
:appstoreflag="true" :autocheckupdate="true"></zy-update>
|
||||
<view class="bg-mask" v-if="huakuaiOpen" @click="huakuaiOpen=false">
|
||||
<huakuai @click.stop @success="huakuaisuccess" />
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
|
|
@ -132,17 +134,19 @@
|
|||
import ZyUpdate from '@/component/zy-upgrade/zy-upgrade.vue'
|
||||
import oneseven from '@/pages/login/oneseven.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 isTarget = ref(false);
|
||||
const huakuaiOpen = ref(false)
|
||||
|
||||
const form = reactive({
|
||||
username: "",
|
||||
password: "",
|
||||
captcha: "",
|
||||
checkKey:0
|
||||
checkKey: 0
|
||||
})
|
||||
|
||||
const changeform = reactive({
|
||||
|
|
@ -152,7 +156,7 @@
|
|||
|
||||
// 计算属性
|
||||
const fullName = computed(() => {
|
||||
return form.password && isLength11(form.username)
|
||||
return form.password && isLength11(form.username)
|
||||
})
|
||||
|
||||
const showPopup = ref(false)
|
||||
|
|
@ -177,38 +181,37 @@
|
|||
url: url
|
||||
});
|
||||
}
|
||||
const loginphoto = ref("");
|
||||
|
||||
const canclick = ref(false)
|
||||
const time = ref(0);
|
||||
const getImg = () => {
|
||||
if(/^\d{11}$/.test(form.username)){
|
||||
isRel(form.username).then((res:any)=>{
|
||||
if( res.result !==null && res.result.serverUrl){
|
||||
if (/^\d{11}$/.test(form.username)) {
|
||||
isRel(form.username).then((res : any) => {
|
||||
if (res.result !== null && res.result.serverUrl) {
|
||||
uni.setStorageSync('serverUrl', res.result.serverUrl);
|
||||
console.log("info",res.result)
|
||||
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
|
||||
})
|
||||
}else{
|
||||
} else {
|
||||
uni.setStorageSync('serverUrl', "");
|
||||
loginphoto.value = "";
|
||||
uni.showToast({
|
||||
title: '该手机号未绑定机构',
|
||||
icon: 'none', // 可选值:'success'、'loading'、'none'
|
||||
duration: 2000 // 持续时间,单位ms
|
||||
title: '该手机号未绑定机构',
|
||||
icon: 'none', // 可选值:'success'、'loading'、'none'
|
||||
duration: 2000 // 持续时间,单位ms
|
||||
})
|
||||
canclick.value = false;
|
||||
}
|
||||
|
||||
|
||||
})
|
||||
}else{
|
||||
if(form.username){
|
||||
} else {
|
||||
if (form.username) {
|
||||
uni.showToast({
|
||||
title: '手机号不足11位',
|
||||
icon: 'none', // 可选值:'success'、'loading'、'none'
|
||||
duration: 2000 // 持续时间,单位ms
|
||||
title: '手机号不足11位',
|
||||
icon: 'none', // 可选值:'success'、'loading'、'none'
|
||||
duration: 2000 // 持续时间,单位ms
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
@ -219,51 +222,40 @@
|
|||
const opentype = ref(false)
|
||||
const login = () => {
|
||||
if (isTarget.value) {
|
||||
// if (form.password == "123456") {
|
||||
// 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)
|
||||
})
|
||||
huakuaiOpen.value = true;
|
||||
|
||||
} else {
|
||||
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(() => {
|
||||
if (uni.getStorageSync('appWgtVersion') != uni.getSystemInfoSync().appWgtVersion) {
|
||||
showPopup.value = true;
|
||||
|
||||
}
|
||||
});
|
||||
// 生命周期钩子
|
||||
|
|
@ -418,7 +410,8 @@
|
|||
/* 播放动画:名称 fadeIn,时长 0.5s,缓动函数 ease,保持最后状态 */
|
||||
animation: fadeIn 0.5s ease forwards;
|
||||
}
|
||||
.popup-any{
|
||||
|
||||
.popup-any {
|
||||
position: fixed;
|
||||
inset: 0;
|
||||
z-index: 999;
|
||||
|
|
@ -443,14 +436,12 @@
|
|||
position: absolute;
|
||||
inset: 0;
|
||||
}
|
||||
|
||||
|
||||
.box-any {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
// transform: translate(0, -50%);
|
||||
// transform: translateX(-50%);
|
||||
transform: translate(-50%,-50%);
|
||||
transform: translate(-50%, -50%);
|
||||
width: 1000rpx;
|
||||
height: 1500rpx;
|
||||
background: #fff;
|
||||
|
|
@ -458,16 +449,13 @@
|
|||
overflow: hidden;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
// align-items: center;
|
||||
// padding: 65rpx;
|
||||
padding: 65rpx 40rpx;
|
||||
}
|
||||
|
||||
|
||||
.box-small {
|
||||
position: absolute;
|
||||
bottom: 20rpx;
|
||||
left: 50%;
|
||||
// transform: translate(0, -50%);
|
||||
transform: translateX(-50%);
|
||||
width: 800rpx;
|
||||
height: 350rpx;
|
||||
|
|
@ -589,17 +577,33 @@
|
|||
border-radius: 25rpx;
|
||||
font-size: 35rpx;
|
||||
}
|
||||
.title-left{
|
||||
|
||||
.title-left {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
.back-img{
|
||||
|
||||
.back-img {
|
||||
width: 60rpx;
|
||||
height: 60rpx;
|
||||
margin-right: 30rpx;
|
||||
}
|
||||
.back-font{
|
||||
|
||||
.back-font {
|
||||
font-size: 35rpx;
|
||||
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>
|
||||
|
|
@ -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-font">时间矩阵</view>
|
||||
</view>
|
||||
|
||||
<view class="doctorsay-container-right">
|
||||
<view class="titlebutton-father">
|
||||
<view v-for="(item,index) in buttonArray" :key="index">
|
||||
|
|
@ -25,35 +26,27 @@
|
|||
</view>
|
||||
<view class="super-card">
|
||||
<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
|
||||
:show-scrollbar="false">
|
||||
<view
|
||||
style="display: flex;width: 5945rpx; box-shadow: 10rpx 10rpx 20rpx rgba(0, 0, 0, 0.1);background: linear-gradient(to right, #c4dbf4,#c9c2ef, #c6dcf3);">
|
||||
<view :style="{width:widthType * 24 + `rpx`}"
|
||||
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 class="super-card-time">
|
||||
<view class="super-card-time" :style="{width:widthType + `rpx`}">
|
||||
{{(item0.positioning.length == 1 ? ('0' + item0.positioning) : item0.positioning) + ":00"}}
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view style="display: flex;height: calc(100% - 80rpx);width: 5945rpx">
|
||||
<scroll-view scroll-y :show-scrollbar="false" @scroll="handleScrolltime">
|
||||
<view style="display: flex;height: calc(100% - 80rpx);" :style="{width:widthType * 24 + `rpx`}">
|
||||
<scroll-view scroll-y :show-scrollbar="false" :scroll-top="scrollTop">
|
||||
<view style="display: flex;height: 100%;">
|
||||
<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%;"
|
||||
:key="index1">
|
||||
<view
|
||||
:class="(clickX === index0 && clickY ===index1) ? `title-time-border-blue` : ``"
|
||||
:style="{height:heightType + `rpx`}"
|
||||
class="super-card-time-card" style="position: relative;"
|
||||
@touchend="handleTap(item1,index0,index1,$event)" :data-index0="index0"
|
||||
:data-index1="index1">
|
||||
|
|
@ -62,21 +55,25 @@
|
|||
style="font-size: 30rpx;overflow: hidden;">
|
||||
<view class="title-time" v-if="item1.startTime"
|
||||
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}}
|
||||
</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`" />
|
||||
<view class="title-time-font">
|
||||
<view class="title-time-font" v-show="scalcType<10">
|
||||
{{item1.cycleType}}
|
||||
</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="font-weight: 700;font-size: 24rpx;">
|
||||
{{splitString(item1.directiveName)[0]}}
|
||||
</view>
|
||||
<view class="down-icons"
|
||||
<view class="down-icons" v-show="scalcType<10"
|
||||
:style="item1.cycleType!='日常'?{backgroundColor:`rgb(212,203,255)`}:{}"
|
||||
v-if="splitString(item1.directiveName)[1]">
|
||||
<view class=""
|
||||
|
|
@ -99,6 +96,10 @@
|
|||
</scroll-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 class="popup-overlay-content"
|
||||
|
|
@ -124,9 +125,12 @@
|
|||
</template>
|
||||
|
||||
<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 { 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 timearr = ref([]);
|
||||
|
|
@ -135,6 +139,8 @@
|
|||
}
|
||||
const buttonArray = ref(["全部", "日常", "周期"]);
|
||||
const buttonTarget = ref(0);
|
||||
const sysInfo = uni.getSystemInfoSync();
|
||||
const rpx2px = sysInfo.windowWidth / 750;
|
||||
// 方法:根据条件返回不同的类名
|
||||
const getClass = (item : any, index0 : number, index1 : number) => {
|
||||
if (item.cycleType === '日常') {
|
||||
|
|
@ -145,12 +151,7 @@
|
|||
}
|
||||
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) => {
|
||||
if (buttonTarget.value !== index) {
|
||||
return `titlebutton`
|
||||
|
|
@ -204,24 +205,16 @@
|
|||
|
||||
}
|
||||
const scrollLeft = ref(0);
|
||||
const scrollTop = ref(0);
|
||||
|
||||
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) => {
|
||||
// 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');
|
||||
timearr.value = arr
|
||||
if (timearr.value[0].children.length < 8) {
|
||||
|
|
@ -233,50 +226,349 @@
|
|||
});
|
||||
}
|
||||
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 openY = ref(0);
|
||||
const isopen = ref(false);
|
||||
const isopacity = ref(false);
|
||||
const clickX = ref(-1);
|
||||
const clickY = ref(-1);
|
||||
|
||||
const timer = ref<number | null>(null)
|
||||
|
||||
//表格点击开始
|
||||
const rulerTouchClick = (item : any, index0 : number, index1 : number, e : any) => {
|
||||
if (item.directiveName) {
|
||||
clickX.value = index0;
|
||||
clickY.value = index1;
|
||||
const query = uni.createSelectorQuery()
|
||||
query
|
||||
.selectAll('.super-card-time-card')
|
||||
.boundingClientRect((data : any) => {
|
||||
data.forEach(async (res : any) => {
|
||||
// 根据你的条件筛选元素
|
||||
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) - 10
|
||||
nextTick(()=>{
|
||||
const query = uni.createSelectorQuery()
|
||||
query
|
||||
.selectAll('.super-card-time-card')
|
||||
.boundingClientRect((data : any) => {
|
||||
data.forEach(async (res : any) => {
|
||||
// 根据你的条件筛选元素
|
||||
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) - 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 = () => {
|
||||
|
|
@ -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);
|
||||
changetimearr.value.forEach((element : any) => {
|
||||
sortedIndices.forEach(idx => {
|
||||
|
|
@ -364,7 +651,7 @@
|
|||
}
|
||||
})
|
||||
})
|
||||
changeWhiteLine()
|
||||
// changeWhiteLine()
|
||||
break;
|
||||
case 2:
|
||||
changetimearr.value = JSON.parse(JSON.stringify(timearr.value));
|
||||
|
|
@ -378,39 +665,40 @@
|
|||
})
|
||||
})
|
||||
|
||||
changeWhiteLine()
|
||||
// changeWhiteLine()
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
// 上一次触摸结束的时间戳
|
||||
const lastTap = ref(0)
|
||||
// 单击逻辑的定时器 ID
|
||||
const clickTimer = ref(null)
|
||||
// 页面显示信息
|
||||
// const message = ref('请单击或双击此区域')
|
||||
|
||||
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('双击逻辑执行')
|
||||
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 movecard = (type:number) => {
|
||||
isopen.value = false
|
||||
switch (type) {
|
||||
case 0:
|
||||
if(clickY.value>0){
|
||||
clickY.value--
|
||||
}
|
||||
|
||||
break
|
||||
case 1:
|
||||
if(clickX.value<23){
|
||||
clickX.value++
|
||||
}
|
||||
|
||||
|
||||
break
|
||||
case 2:
|
||||
if(clickY.value<11){
|
||||
clickY.value++
|
||||
}
|
||||
|
||||
break
|
||||
case 3:
|
||||
if(clickX.value>0){
|
||||
clickX.value--
|
||||
}
|
||||
|
||||
break
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
|
|
@ -696,7 +984,7 @@
|
|||
justify-content: center;
|
||||
align-items: center;
|
||||
height: 80rpx;
|
||||
width: 247rpx;
|
||||
width: 380rpx;
|
||||
border-right: 1rpx solid transparent;
|
||||
border-image: repeating-linear-gradient(180deg, #0184db 0px, #0184db 6rpx, transparent 6rpx, transparent 12rpx) 1;
|
||||
font-weight: 700;
|
||||
|
|
@ -706,7 +994,7 @@
|
|||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
width: 247rpx;
|
||||
width: 380rpx;
|
||||
|
||||
flex-direction: column;
|
||||
border-right: 1rpx solid transparent;
|
||||
|
|
@ -717,7 +1005,7 @@
|
|||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: 153rpx;
|
||||
// height: 180rpx;
|
||||
width: calc(100%);
|
||||
border-top: 1rpx solid transparent;
|
||||
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",
|
||||
"name": "护理单元",
|
||||
"version": {
|
||||
"name": "1.2.5",
|
||||
"code": 125
|
||||
"name": "1.2.9",
|
||||
"code": 129
|
||||
},
|
||||
"description": "护理单元",
|
||||
"developer": {
|
||||
|
|
|
|||