This commit is contained in:
wangweidong 2026-01-14 15:54:06 +08:00
commit 2bdfa4edb4
55 changed files with 433 additions and 125 deletions

View File

@ -525,15 +525,50 @@
width: 100%;
height: 450rpx;
margin-top: 5rpx;
position: relative;
.history-spe {
min-width: 86%;
height: 100%;
margin-left: 14%;
background-color: #F7F8F9;
border-radius: 15rpx;
border-radius: 25rpx;
padding-top: 10rpx;
padding-left: 20rpx;
/* position: relative; */
.history-left-jiao{
position: absolute;
right: 0;
top: 0;
width: 85rpx;
height: 45rpx;
background-color: #D9E5FF;
display: flex;
align-items: center;
justify-content: center;
border-top-right-radius: 25rpx;
border-bottom-left-radius: 25rpx;
color: #3C9CFD;
font-size: 19rpx;
font-weight: 600;
}
.history-left-jiao-error{
position: absolute;
right: 0;
top: 0;
width: 85rpx;
height: 45rpx;
background-color: #FFEBEB;
display: flex;
align-items: center;
justify-content: center;
border-top-right-radius: 25rpx;
border-bottom-left-radius: 25rpx;
color: #F76E6E;
font-size: 19rpx;
font-weight: 600;
}
}
/* background-color: red; */
@ -579,6 +614,7 @@
position: relative;
display: flex;
align-items: center;
transition: height 0.3s ease;
.history-left {
/* margin-left: 58rpx; */
@ -630,10 +666,12 @@
.history-shu-up {
position: absolute;
left: 32rpx;
top: -53.5%;
bottom: calc(50% + 13rpx);
width: 3rpx;
height: 93%;
height: 110rpx;
background-color: #E5E5E5;
transition: height 0.3s ease;
}
.history-shu-circle {
@ -655,6 +693,7 @@
width: 100%;
height: 640rpx;
margin-top: -12rpx;
position: relative;
.future-items {
width: 100%;
@ -668,7 +707,7 @@
.future-item-target {
width: 90%;
margin-left: 5%;
min-height: 152rpx;
height: 152rpx;
margin-bottom: 10rpx;
background-color: #F7F8F9;
border-radius: 30rpx;
@ -679,14 +718,14 @@
color: #555555;
position: relative;
border: 2rpx solid #4690FF;
transition: height 0.3s ease;
}
.future-item {
width: 90%;
margin-left: 5%;
min-height: 152rpx;
height: 152rpx;
margin-bottom: 10rpx;
background-color: #F7F8F9;
border-radius: 30rpx;
@ -697,7 +736,7 @@
color: #555555;
position: relative;
border: 2rpx solid #F7F8F9;
transition: height 0.3s ease;
/* transition: height 0.3s ease; */
}
@ -733,6 +772,7 @@
justify-content: center;
align-items: center;
}
.future-info {
position: absolute;
left: 23rpx;
@ -741,14 +781,24 @@
color: #555555;
display: flex;
}
.future-info-second {
position: absolute;
left:80rpx;
bottom: 12rpx;
font-size: 25rpx;
color: #555555;
display: flex;
}
.info {
display: flex;
.info-img {
width: 30rpx;
height: 30rpx;
margin-right: 3rpx;
}
}
.calendar-father {
position: fixed;
top: 150rpx;
@ -788,6 +838,13 @@
font-size: 22rpx;
}
.small-font-target {
margin-top: 3rpx;
width: 310rpx;
color: #999999;
font-size: 22rpx;
}
.card-bao {
position: absolute;
right: 30rpx;
@ -883,18 +940,22 @@
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%;
transition: transform 0.3s ease;
}
}
.serviceContent {
color: #999999;
margin-top: 20rpx;

View File

@ -119,10 +119,48 @@
</scroll-view>
</view>
<view class="order-future">
<nomessgae :cont="`暂无数据`" v-show="!upmenuarray.length" ></nomessgae>
<scroll-view class="future-items" scroll-with-animation scroll-y :scroll-top="firsttopmove">
<view :class="moveById===item.id? `future-item-target`: `future-item`"
:style="firstListTarget===index?{height:`304rpx`}:{height:`152rpx`}"
v-for="(item,index) in upmenuarray" :key="index" @click="searchtable(item);">
<view style="position: relative;" v-for="(item,index) in upmenuarray" :key="index"
@click="searchtable(item);">
<view :class="moveById===item.id? `future-item-target`: `future-item`">
<view class="future-fonts">
<view class="card-over">
{{ item.directiveName }}
</view>
{{ ` | ` +item.serviceDuration + `分钟` }}
</view>
<view class="future-time">
<text class="time">
{{ extractHHMM(item.startTime) }}
</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 class="future-tag">
{{ item.cycleType }}
</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>
<view
style="position: absolute;top: 0;left: 0;transition: height 0.3s, top 0.3s;z-index: 9999; ;"
:class="moveById===item.id? `future-item-target`: `future-item`" :style="{
height: firstListTarget === index ? '320rpx' : '152rpx',
left: firstListTargetShow === index ? '0' : '999rpx',
top: index === upmenuarray.length - 1 && firstListTarget === index? `-168rpx`:`0rpx`
}">
<view class="future-fonts">
<view class="card-over">
{{ item.directiveName }}
@ -153,7 +191,8 @@
<view class="">
{{ item.optNames?.split(',')[0] }}
</view>
<image class="info-img" style="margin-left: 15rpx;" src="/static/index/rightpeople.png" />
<image class="info-img" style="margin-left: 15rpx;"
src="/static/index/rightpeople.png" />
<view class="">
{{ item.optNames?.split(',')[1] }}
</view>
@ -163,21 +202,21 @@
<view class="">
{{ item.optTypeName }}
</view>
<image class="info-img" style="margin-left: 15rpx;" src="/static/index/rightpeople.png" />
<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)"
<view class="open-img-father" @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>
</view>
@ -190,15 +229,22 @@
长者标签
</view>
</view>
<nomessgae :cont="`暂无数据`" v-show="!downmenuarray.length" ></nomessgae>
<scroll-view class="history-items" scroll-with-animation scroll-y
:scroll-top="secondtopmove">
<view class="history-item" v-for="(item,index) in downmenuarray" :key="index"
@click="searchtable(item);">
<view v-for="(item,index) in downmenuarray" :key="index" @click="searchtable(item);">
<view class="history-item">
<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="item.executeStatus!==`hisOk`?`history-left-jiao-error`: `history-left-jiao`"
style="top: 2rpx;right: 2rpx;"
v-show="secondListTargetShow !== index">
{{ item.rightshow }}
</view>
<view class="history-time">
{{ extractHHMM(item.startTime) }}
</view>
@ -213,9 +259,102 @@
{{ item.serviceContent }}
</view>
</view>
<view class="history-spe"
style="position: absolute;top: 0;left: 0;transition: height 0.3s, top 0.3s;z-index: 9999; "
:style="{
height: secondListTarget === index ? '260rpx' : '120rpx',
left: secondListTargetShow === index ? '0' : '999rpx',
top: index === downmenuarray.length - 1 && secondListTarget === index ? '-140rpx' : '0rpx',
border: moveById === item.id ? '2rpx solid #46B2F6' : '2rpx solid transparent'
}">
<view class="history-left">
<view
:class="item.executeStatus!==`hisOk`?`history-left-jiao-error`: `history-left-jiao`"
v-show="secondListTargetShow === index">
{{ item.rightshow }}
</view>
<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="secondListTarget===index?`small-font-target`:`small-font`">
{{ item.serviceContent }}
</view>
</view>
<view class="future-info-second" style="left: 20rpx;"
v-if="secondListTarget===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" style="right: 15rpx;bottom: 11.5rpx;"
@click.stop="clicksecondarray(item,index)">
<image
:style="secondListTarget===index?{transform: `rotate(180deg)`}:{}"
class="open-img" src="/static/index/down.png" />
</view>
</view>
</view>
<view class="future-info-second"
v-if="secondListTarget===index&& secondListTargetShow !== 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" style="right: 16rpx;bottom: 12rpx;"
@click.stop="clicksecondarray(item,index)">
<image class="open-img" src="/static/index/down.png"
:style="secondListTarget===index?{transform: `rotate(180deg)`}:{}" />
</view>
</view>
</view>
</view>
</scroll-view>
</view>
<view class="calendar-father" v-show="opendata">
@ -236,6 +375,7 @@
import { getNclist, addBatch, addDirective, addInstant, deleteDirective, deleteInstant, editDirective, getDirectiveOrders } from "./api.js";
import { myArray } from './yaoshandiao.js';
import calendarsimple from '@/component/public/calendarsimple.vue'
import nomessgae from './component/default.vue'
const props = defineProps({
isshow: {
@ -252,6 +392,55 @@
const firstListTarget = ref(-1)
const secondListTarget = ref(-1)
const firstListTargetShow = ref(-1)
const secondListTargetShow = ref(-1)
let _hideTimer = null
watch(secondListTarget, (newVal) => {
//
if (_hideTimer) {
clearTimeout(_hideTimer)
_hideTimer = null
}
if (newVal === -1) {
// 0.3s -1
_hideTimer = setTimeout(() => {
secondListTargetShow.value = -1
_hideTimer = null
}, 300) // 300ms = 0.3s
} else {
// -1
secondListTargetShow.value = newVal
}
})
watch(firstListTarget, (newVal) => {
//
if (_hideTimer) {
clearTimeout(_hideTimer)
_hideTimer = null
}
if (newVal === -1) {
// 0.3s -1
_hideTimer = setTimeout(() => {
firstListTargetShow.value = -1
_hideTimer = null
}, 300) // 300ms = 0.3s
} else {
// -1
firstListTargetShow.value = newVal
}
})
onBeforeUnmount(() => {
if (_hideTimer) {
clearTimeout(_hideTimer)
_hideTimer = null
}
})
/* ---- transform ----
注意虽然这是响应式但我们只在 rAF 里更新它受控更新避免频繁触发 Vue 渲染 */
const transformStyle = ref('translate3d(0, 0, 0)');
@ -477,10 +666,17 @@
const clickfirstarray = (item, index) => {
if (firstListTarget.value != -1) {
firstListTarget.value = -1
} else if (!item.tagtype) {
} else {
firstListTarget.value = index;
}
}
const clicksecondarray = (item, index) => {
if (secondListTarget.value != -1) {
secondListTarget.value = -1
} else if (!item.tagtype) {
secondListTarget.value = index;
}
}
//
function genPaths(base, prefix, count, ext = 'png', startIndex = 0, pad = false) {
return Array.from({ length: count }, (_, i) => {
@ -637,6 +833,15 @@
}
})
upmenuarray.value = [...data.result.current, ...data.result.future]
data.result.history.forEach((element : any, index : number) => {
if (element.executeStatus === 'hisUnExe') {
element.rightshow = `未执行`
} else if (element.executeStatus === 'hisTimeOut') {
element.rightshow = `超时`
} else if (element.executeStatus === 'hisOk') {
element.rightshow = `已完成`
}
})
downmenuarray.value = [...data.result.history]
timearr.value = Array.from({ length: 24 }, (_, hour) => ({
positioning: hour.toString(),

View File

@ -0,0 +1,42 @@
<template>
<view>
<view class="que">
<image src="/static/index/procurement/que.png" mode="aspectFill"></image>
<view>{{cont}}</view>
</view>
</view>
</template>
<script>
export default {
props:{
cont:'',
}
}
</script>
<style scoped lang="less">
.que{
width: 16vw;
height: 16vw;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
image{
width: 100%;
height: 100%;
}
view{
width: 100%;
text-align: center;
position: absolute;
bottom: 0.5vw;
left: 0;
font-weight: 300;
font-size: 1.4vw;
color: #555555;
}
}
</style>

View File

@ -294,9 +294,9 @@
})
}
if (index == 1) {
// uni.navigateTo({
// url: '/pages/recording/recorder'
// })
uni.navigateTo({
url: '/pages/recording/recorder'
})
}
// if (index == 2) {

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

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

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

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

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 878 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 818 B

View File

@ -574,7 +574,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
)
]);
}
const camera = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["styles", [_style_0]], ["__file", "D:/项目/hldy_app_mini/pages/camera.nvue"]]);
const camera = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["styles", [_style_0]], ["__file", "D:/hldy_app_mini/pages/camera.nvue"]]);
export {
camera as default
};

View File

@ -578,7 +578,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
)
]);
}
const fullcamera = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["styles", [_style_0]], ["__file", "D:/项目/hldy_app_mini/pages/fullcamera.nvue"]]);
const fullcamera = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["styles", [_style_0]], ["__file", "D:/hldy_app_mini/pages/fullcamera.nvue"]]);
export {
fullcamera as default
};

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

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

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

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

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 878 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 818 B