This commit is contained in:
Teng 2025-07-23 17:34:48 +08:00
parent 5bc49dabc6
commit 5d1124e7d3
174 changed files with 12010 additions and 5445 deletions

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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`">
ID12345678
@ -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);
//
//
//0123
@ -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>

View File

@ -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,
})
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,7 @@
// 定义 Link 类型
export type roomBtttonType = {
url : string;
targetUrl : string;
name : string
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -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;
}
}

View File

@ -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>

View File

@ -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" : {

View File

@ -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>

View File

@ -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';

View File

@ -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',
})
}

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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;

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 962 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
static/index/update/bgc.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

BIN
static/index/update/fly.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 774 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

View File

@ -1 +1 @@
https://app.liuyingyong.cn/build/download/2ba4c760-5d68-11f0-9521-35e0630c0d6a
https://app.liuyingyong.cn/build/download/b6b0c6f0-6093-11f0-8cb2-c9c3a3189877

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -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"}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 962 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

View File

@ -7,8 +7,8 @@
"id": "__UNI__FB2D473",
"name": "护理单元",
"version": {
"name": "1.2.5",
"code": 125
"name": "1.2.9",
"code": 129
},
"description": "护理单元",
"developer": {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More