护嘱预览页,差一点做完

This commit is contained in:
Teng 2026-01-13 17:16:36 +08:00
parent 27a1625c13
commit 63d90c7395
5 changed files with 428 additions and 86 deletions

View File

@ -150,10 +150,11 @@
.title-time-blue { .title-time-blue {
/* 你的定位与尺寸保持不变 */ /* 你的定位与尺寸保持不变 */
position: absolute; position: absolute;
top: 0; top: 50%;
left: 0; left: 50%;
width: 100%; transform: translate(-50%, -50%);
height: 100%; width: 96%;
height: 96%;
z-index: 10; z-index: 10;
.blue-img { .blue-img {
@ -257,10 +258,8 @@
} }
.title-time-border { .title-time-border {
margin-top: 4rpx; width: calc(100% - 20rpx);
margin-left: 4rpx; height: calc(100% - 20rpx);
width: calc(100% - 8rpx);
height: calc(100% - 8rpx);
border-radius: 20rpx; border-radius: 20rpx;
display: flex; display: flex;
align-items: center; align-items: center;
@ -525,19 +524,34 @@
.order-history { .order-history {
width: 100%; width: 100%;
height: 450rpx; height: 450rpx;
margin-top: 5rpx;
.history-spe {
min-width: 86%;
height: 100%;
margin-left: 14%;
background-color: #F7F8F9;
border-radius: 15rpx;
padding-top: 10rpx;
padding-left: 20rpx;
}
/* background-color: red; */ /* background-color: red; */
.history-title{ .history-title {
width: 100%; width: 100%;
height: 70rpx; height: 70rpx;
display: flex; display: flex;
align-items: center; align-items: center;
padding: 0 30rpx; padding: 0 30rpx;
justify-content: space-between; justify-content: space-between;
.history-left{
.history-left {
font-size: 30rpx; font-size: 30rpx;
margin-top: 10rpx; margin-top: 10rpx;
} }
.history-right{
.history-right {
margin-top: 0.5vw; margin-top: 0.5vw;
width: 7vw; width: 7vw;
height: 2.5vw; height: 2.5vw;
@ -551,6 +565,90 @@
position: relative; position: relative;
} }
} }
.history-items {
width: 100%;
margin-top: 15rpx;
height: 385rpx;
.history-item {
/* margin-left: 1%; */
width: 95%;
height: 120rpx;
margin-bottom: 13rpx;
position: relative;
display: flex;
align-items: center;
.history-left {
/* margin-left: 58rpx; */
width: 120rpx;
}
.history-right {
height: 100%;
width: 245rpx;
border-radius: 10rpx;
display: flex;
align-items: center;
position: relative;
margin-left: 5rpx;
.item-name {
width: 80rpx;
/* 必须有宽度 */
font-size: 25rpx;
white-space: nowrap;
/* 不换行 */
overflow: hidden;
/* 超出隐藏 */
text-overflow: ellipsis;
/* 省略号 */
}
.item-min {
font-size: 25rpx;
}
}
.history-time {
font-weight: 800;
font-size: 32rpx;
margin-bottom: 0rpx;
}
.history-name {
margin-left: 5rpx;
font-size: 24rpx;
color: #555555;
}
.history-shu-up {
position: absolute;
left: 32rpx;
top: -53.5%;
width: 3rpx;
height: 93%;
background-color: #E5E5E5;
}
.history-shu-circle {
position: absolute;
left: 20rpx;
top: 50%;
transform: translateY(-50%);
width: 26.5rpx;
height: 26.5rpx;
border-radius: 50%;
border: 4.5rpx solid #D0D1D1;
z-index: 1;
}
}
}
} }
.order-future { .order-future {
@ -564,12 +662,13 @@
.future-fonts { .future-fonts {
font-size: 27rpx; font-size: 27rpx;
display: flex;
} }
.future-item-target { .future-item-target {
width: 90%; width: 90%;
margin-left: 5%; margin-left: 5%;
min-height: 150rpx; min-height: 152rpx;
margin-bottom: 10rpx; margin-bottom: 10rpx;
background-color: #F7F8F9; background-color: #F7F8F9;
border-radius: 30rpx; border-radius: 30rpx;
@ -580,14 +679,14 @@
color: #555555; color: #555555;
position: relative; position: relative;
border: 2rpx solid #4690FF; border: 2rpx solid #4690FF;
transition: height 0.3s ease;
} }
.future-item { .future-item {
width: 90%; width: 90%;
margin-left: 5%; margin-left: 5%;
min-height: 150rpx; min-height: 152rpx;
margin-bottom: 10rpx; margin-bottom: 10rpx;
background-color: #F7F8F9; background-color: #F7F8F9;
border-radius: 30rpx; border-radius: 30rpx;
@ -598,7 +697,7 @@
color: #555555; color: #555555;
position: relative; position: relative;
border: 2rpx solid #F7F8F9; border: 2rpx solid #F7F8F9;
transition: height 0.3s ease;
} }
@ -634,7 +733,22 @@
justify-content: center; justify-content: center;
align-items: center; align-items: center;
} }
.future-info {
position: absolute;
left: 23rpx;
bottom: 23rpx;
font-size: 25rpx;
color: #555555;
display: flex;
}
.info{
display: flex;
.info-img{
width: 30rpx;
height: 30rpx;
margin-right: 3rpx;
}
}
.calendar-father { .calendar-father {
position: fixed; position: fixed;
top: 150rpx; top: 150rpx;
@ -652,4 +766,136 @@
left: 0; left: 0;
z-index: 100; z-index: 100;
background: RGBA(239, 240, 244, 0.55); background: RGBA(239, 240, 244, 0.55);
}
.history-img {
width: 30rpx;
height: 30rpx;
/* margin-left: 15rpx; */
/* background-color: red; */
}
.small-font {
margin-top: 3rpx;
width: 310rpx;
white-space: nowrap;
/* 不换行 */
overflow: hidden;
/* 超出隐藏 */
text-overflow: ellipsis;
/* 省略号 */
color: #999999;
font-size: 22rpx;
}
.card-bao {
position: absolute;
right: 30rpx;
top: 40rpx;
width: 30rpx;
height: 30rpx;
font-size: 18rpx;
display: flex;
justify-content: center;
align-items: center;
background-color: #4690FF;
color: #fff;
border-radius: 5rpx;
}
.card-overtime {
position: absolute;
right: 30rpx;
bottom: 40rpx;
width: 45rpx;
height: 30rpx;
font-size: 18rpx;
display: flex;
justify-content: center;
align-items: center;
background-color: #E33B3B;
color: #fff;
border-radius: 5rpx;
}
.card-over {
max-width: 200rpx;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.time-right-bad {
color: #666666;
font-size: 24rpx;
margin-left: 10rpx;
margin-top: 10rpx;
}
.time-right-blue {
color: #4690FF;
font-size: 24rpx;
margin-left: 10rpx;
margin-top: 10rpx;
display: flex;
position: relative;
}
.ellipsis {
position: absolute;
left: 105rpx;
top: 20rpx;
display: flex;
gap: 5rpx;
/* height: 28px; */
/* 点的高度 + 跳起空间 */
}
.dot {
width: 5rpx;
height: 5rpx;
background: #4690FF;
border-radius: 50%;
animation: jump 1.5s ease-in-out infinite;
}
@keyframes jump {
0%,
80%,
100% {
transform: translateY(0);
}
40% {
transform: translateY(-8px);
}
}
@media (prefers-reduced-motion: reduce) {
.dot {
animation: none;
}
}
.open-img-father{
position: absolute;
right: 35rpx;
bottom: 28rpx;
width: 22rpx;
height: 22rpx;
transition: transform 0.3s ease;
.open-img{
width: 100%;
height: 100%;
}
}
.serviceContent{
color: #999999;
margin-top: 20rpx;
} }

View File

@ -53,6 +53,14 @@
src="/static/index/bluetarget.png" /> src="/static/index/bluetarget.png" />
</view> </view>
<view class="card-bao" v-if="item1.izPackage==`Y`">
</view>
<view class="card-overtime"
v-if="item1.executeStatus==`hisTimeOut`">
超时
</view>
<view :class="getClass(item1,index0,index1)" <view :class="getClass(item1,index0,index1)"
style="font-size: 30rpx;overflow: hidden;" style="font-size: 30rpx;overflow: hidden;"
:style="{ animationDelay:`-${computeDelay(index0, index1).toFixed(2)}s`,border:saveEditIndex.index0 == index0 && saveEditIndex.index1 == index1? `2rpx solid #46B2F6`:'' }"> :style="{ animationDelay:`-${computeDelay(index0, index1).toFixed(2)}s`,border:saveEditIndex.index0 == index0 && saveEditIndex.index1 == index1? `2rpx solid #46B2F6`:'' }">
@ -78,8 +86,14 @@
</view> </view>
</view> </view>
</view>
</view>
<view
v-if="saveEditIndex.index0 == index0 && saveEditIndex.index1 == index1 && !item1.startTime"
class="pulic-time">
{{(item0.positioning.length == 1 ? ('0' + item0.positioning) : item0.positioning) + ":" + timeArray[index1]}}
</view>
</view> </view>
</view> </view>
</view> </view>
@ -105,22 +119,65 @@
</scroll-view> </scroll-view>
</view> </view>
<view class="order-future"> <view class="order-future">
<scroll-view class="future-items" scroll-with-animation scroll-y :scroll-top="firsttopmove" > <scroll-view class="future-items" scroll-with-animation scroll-y :scroll-top="firsttopmove">
<view :class="moveById===item.id? `future-item-target`: `future-item`" v-for="(item,index) in upmenuarray" :key="index" <view :class="moveById===item.id? `future-item-target`: `future-item`"
@click="searchtable(item)"> :style="firstListTarget===index?{height:`304rpx`}:{height:`152rpx`}"
v-for="(item,index) in upmenuarray" :key="index" @click="searchtable(item);">
<view class="future-fonts"> <view class="future-fonts">
{{ item.directiveName + ` | ` }} {{ item.serviceDuration + `分钟` }} <view class="card-over">
{{ item.directiveName }}
</view>
{{ ` | ` +item.serviceDuration + `分钟` }}
</view> </view>
<view class="future-time"> <view class="future-time">
<text class="time"> <text class="time">
{{ extractHHMM(item.startTime) }} {{ extractHHMM(item.startTime) }}
</text> </text>
<view class="time-right-bad" v-if="item.tagtype">
{{ item.tagtype=="1"?'即将开始':'指令尚未开始' }}
</view>
<view class="time-right-blue" v-else>
正在进行
<view class="ellipsis">
<view v-for="(n, idx) in 3" :key="idx" class="dot"
:style="{ animationDelay: (idx * 0.12) + 's' }"></view>
</view>
</view>
</view> </view>
<view class="future-tag"> <view class="future-tag">
{{ item.cycleType }} {{ item.cycleType }}
</view> </view>
<view class="future-info" v-if="firstListTarget===index">
<view class="info" v-if="item.optType == 2">
<image class="info-img" src="/static/index/leftpeople.png" />
<view class="">
{{ item.optNames?.split(',')[0] }}
</view>
<image class="info-img" style="margin-left: 15rpx;" src="/static/index/rightpeople.png" />
<view class="">
{{ item.optNames?.split(',')[1] }}
</view>
</view>
<view class="info" v-else>
<image class="info-img" src="/static/index/leftpeople.png" />
<view class="">
{{ item.optTypeName }}
</view>
<image class="info-img" style="margin-left: 15rpx;" src="/static/index/rightpeople.png" />
<view class="">
{{ item.optNames }}
</view>
</view>
</view>
<view class="open-img-father" v-if="!item.tagtype"
@click.stop="clickfirstarray(item,index)"
:style="firstListTarget===index?{transform: `rotate(180deg)`}:{}">
<image class="open-img" src="/static/index/down.png" />
</view>
<view class="serviceContent" v-if="firstListTarget===index">
{{ item.serviceContent }}
</view>
</view> </view>
</scroll-view> </scroll-view>
</view> </view>
@ -133,24 +190,33 @@
长者标签 长者标签
</view> </view>
</view> </view>
<!-- <scroll-view class="future-items" scroll-with-animation scroll-y > <scroll-view class="history-items" scroll-with-animation scroll-y
<view :class="moveById===item.id? `future-item-target`: `future-item`" v-for="(item,index) in downmenuarray" :key="index" :scroll-top="secondtopmove">
@click="searchtable(item)"> <view class="history-item" v-for="(item,index) in downmenuarray" :key="index"
<view class=""> @click="searchtable(item);">
{{ item.directiveName + ` | ` }} {{ item.serviceDuration + `分钟` }} <view class="history-shu-up" v-if="index"></view>
<view class="history-shu-circle"></view>
<view class="history-spe"
:style="moveById===item.id?{border:`2rpx solid #46B2F6`}:{border:`2rpx solid transparent`}">
<view class="history-left">
<view class="history-time">
{{ extractHHMM(item.startTime) }}
</view>
<view style="display: flex;width: 1000rpx;">
<image class="history-img"
:src="`${serverUrl}${item.previewFileSmall}`" />
<view class="history-name">
{{ item.directiveName+" " }}|{{" " + item.serviceDuration + `分钟` }}
</view>
</view>
<view class="small-font">
{{ item.serviceContent }}
</view>
</view>
</view> </view>
<view class="future-time">
<text class="time">
{{ extractHHMM(item.startTime) }}
</text>
</view>
<view class="future-tag">
{{ item.cycleType }}
</view>
</view> </view>
</scroll-view> --> </scroll-view>
</view> </view>
<view class="calendar-father" v-show="opendata"> <view class="calendar-father" v-show="opendata">
<calendarsimple @datachange="dateget" v-model="selectdata" /> <calendarsimple @datachange="dateget" v-model="selectdata" />
@ -177,22 +243,15 @@
required: true, required: true,
}, },
}); });
// watch( const serverUrl = ref(uni.getStorageSync('serverUrl') + '/sys/common/static/')
// () => props.isshow,
// (newVal, oldVal) => {
// //
// if (newVal !== oldVal) {
// }
// }
// )
const opendata = ref(false); const opendata = ref(false);
const bodystatus = ref(false); const bodystatus = ref(false);
const bodystatustarget = ref(-1); const bodystatustarget = ref(-1);
const facestatus = ref(false); const facestatus = ref(false);
const facestatustarget = ref(-1); const facestatustarget = ref(-1);
const firstListTarget = ref(-1)
const secondListTarget = ref(-1)
/* ---- transform ---- /* ---- transform ----
注意虽然这是响应式但我们只在 rAF 里更新它受控更新避免频繁触发 Vue 渲染 */ 注意虽然这是响应式但我们只在 rAF 里更新它受控更新避免频繁触发 Vue 渲染 */
const transformStyle = ref('translate3d(0, 0, 0)'); const transformStyle = ref('translate3d(0, 0, 0)');
@ -258,7 +317,7 @@
endDay = new Date(selY, selM, 0).getDate() endDay = new Date(selY, selM, 0).getDate()
} }
daysarray.value = Array.from({ length: endDay }, (_, i) => String(i + 1).padStart(2, '0')) daysarray.value = Array.from({ length: endDay }, (_, i) => String(i + 1).padStart(2, '0'))
console.log("啥",daysarray.value) // console.log("", daysarray.value)
movetime.value = (Number(selectdata.value.day) - 3) * 25 movetime.value = (Number(selectdata.value.day) - 3) * 25
} }
const daytarget = ref(0) const daytarget = ref(0)
@ -326,8 +385,11 @@
}) })
const getFontClass = (item : any, index0, index1) => { const getFontClass = (item : any, index0, index1) => {
switch (item.executeStatus) { switch (item.executeStatus) {
case 'hisFaild': case 'hisUnExe':
return 'card-time-red';
case 'hisTimeOut':
return 'card-time-red'; return 'card-time-red';
case 'current': case 'current':
@ -397,8 +459,9 @@
switch (item.executeStatus) { switch (item.executeStatus) {
case 'hisOk': case 'hisOk':
return 'title-time-border-hisOk'; return 'title-time-border-hisOk';
case 'hisUnExe':
case 'hisFaild': return 'title-time-border-hisFaild';
case 'hisTimeOut':
return 'title-time-border-hisFaild'; return 'title-time-border-hisFaild';
case 'current': case 'current':
@ -411,23 +474,12 @@
} }
return 'title-time-border'; return 'title-time-border';
} }
function getstates(item) { const clickfirstarray = (item, index) => {
// console.log("",item.izStart) if (firstListTarget.value != -1) {
// if(item.izStart=='N'){ firstListTarget.value = -1
} else if (!item.tagtype) {
// if(item.izTimeout == 'Y'){ firstListTarget.value = index;
}
// return ``
// }else{
// return ``
// }
// }else{
// if(item.optType==2){
// return item.optNames?.split(',').join('/')
// }else{
// return `${item.optTypeName}/${item.optNames}`
// }
// }
} }
// //
function genPaths(base, prefix, count, ext = 'png', startIndex = 0, pad = false) { function genPaths(base, prefix, count, ext = 'png', startIndex = 0, pad = false) {
@ -470,7 +522,9 @@
const showDetail = ref([-1, -1]) const showDetail = ref([-1, -1])
const moveById = ref(0); const moveById = ref(0);
const rulerTouchClickfather = (index0 : number, index1 : number) => { const rulerTouchClickfather = (index0 : number, index1 : number) => {
// console.log("sssss", timearr.value[index0].children[index1].id) console.log("sssss", timearr.value[index0].children[index1])
firstListTarget.value = -1;
secondListTarget.value = -1;
moveById.value = timearr.value[index0].children[index1].id moveById.value = timearr.value[index0].children[index1].id
backsearch(moveById.value) backsearch(moveById.value)
rulerTouchClick(index0, index1) rulerTouchClick(index0, index1)
@ -568,9 +622,20 @@
let time = `${selectdata.value.year}-${selectdata.value.month}-${selectdata.value.day}` let time = `${selectdata.value.year}-${selectdata.value.month}-${selectdata.value.day}`
getDirectiveOrders(time).then((data) => { getDirectiveOrders(time).then((data) => {
console.log("所有的数据",data.result.history) firstListTarget.value = -1;
console.log("现在",data.result.current) secondListTarget.value = -1;
console.log("未来",data.result.future) // console.log("", data.result.current)
// console.log("", data.result.future)
data.result.current.forEach((element : any) => {
element.tagtype = 0
})
data.result.future.forEach((element : any, index : number) => {
if (index) {
element.tagtype = 2
} else {
element.tagtype = 1
}
})
upmenuarray.value = [...data.result.current, ...data.result.future] upmenuarray.value = [...data.result.current, ...data.result.future]
downmenuarray.value = [...data.result.history] downmenuarray.value = [...data.result.history]
timearr.value = Array.from({ length: 24 }, (_, hour) => ({ timearr.value = Array.from({ length: 24 }, (_, hour) => ({
@ -582,22 +647,45 @@
data.result.all.forEach((element : any) => { data.result.all.forEach((element : any) => {
element.positioning = parseHourMinute(element.startTime).hour; element.positioning = parseHourMinute(element.startTime).hour;
element.positioningLong = parseHourMinute(element.startTime).minute / 5; element.positioningLong = parseHourMinute(element.startTime).minute / 5;
if (element.izStart == 'N') { if (element.executeStatus === 'hisUnExe') {
element.rightshow = `未执行` element.rightshow = `未执行`
} else if (element.executeStatus === 'current') {
} else { element.rightshow = ``
if (element.izTimeout == 'Y') { } else if (element.executeStatus === 'future') {
element.rightshow = `超时` element.rightshow = ``
return }
} else {
if (element.optType == 2) { if (element.optType == 2) {
element.rightshow = element.optNames?.split(',').join('/') element.rightshow = element.optNames?.split(',').join('/')
} else { } else {
element.rightshow = `${element.optTypeName}/${element.optNames}` element.rightshow = `${element.optTypeName}/${element.optNames}`
} }
} }
timearr.value[element.positioning].children[element.positioningLong] = element; // switch (element.executeStatus) {
// case 'hisUnExe':
// element.rightshow = ``
// case 'hisTimeOut':
// element.rightshow = `${element.optTypeName}/${element.optNames}`
// case 'hisOk':
// element.rightshow = `${element.optTypeName}/${element.optNames}`
// case 'hisTimeOut':
// element.rightshow = `${element.optTypeName}/${element.optNames}`
// case 'hisTimeOut':
// element.rightshow = `${element.optTypeName}/${element.optNames}`
// default:
// return 'card-time';
// }
if (element.cycleTypeId != 3) {
timearr.value[element.positioning].children[element.positioningLong] = element;
}
// console.log("aaaaaa", element)
}) })
}) })
} }
const savePackagelist = ref([]); const savePackagelist = ref([]);
@ -721,7 +809,9 @@
opendata.value = true; opendata.value = true;
} }
const searchtable = (item : any) => { const searchtable = (item : any) => {
// console.log("aaaa", item) // console.log("aaaaaaa",item)
firstListTarget.value = -1;
secondListTarget.value = -1;
moveById.value = item.id moveById.value = item.id
backsearch(item.id) backsearch(item.id)
timearr.value.forEach((element : any) => { timearr.value.forEach((element : any) => {
@ -733,10 +823,16 @@
}) })
} }
const firsttopmove = ref(0) const firsttopmove = ref(0)
const secondtopmove = ref(0)
const backsearch = (id) => { const backsearch = (id) => {
upmenuarray.value.forEach((element:any,index:number)=>{ upmenuarray.value.forEach((element : any, index : number) => {
if(element.id === id){ if (element.id === id) {
firsttopmove.value = (index-1) * 80 firsttopmove.value = (index - 1) * 80
}
})
downmenuarray.value.forEach((element : any, index : number) => {
if (element.id === id) {
secondtopmove.value = (index - 1) * 66.5
} }
}) })
} }

BIN
static/index/down.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 878 B

BIN
static/index/leftpeople.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB