hldy_app/component/rightItemssecondnew/index.vue

1731 lines
56 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!-- 护嘱 -->
<template>
<!-- click是让抖动停止 -->
<view class="right-container" :style="isshow?{opacity: `1`}:{opacity: `0`}"
@click="bottomisShaking=false;shakyTable = false">
<!-- 轮盘 -->
<joystick v-show="isEdit" @movecard="movecard" />
<!-- <joysticknew v-show="isLunpan" @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
</text>
<text :class="darkFans?`right-container-title-no-dark`:`right-container-title-no`">
名称未命名01
</text>
<view class="right-icons">
<image class="right-icons-img" :src="`/static/index/undericons/man.png`" />
<view :class="darkFans?`right-icons-font-dark`: `right-icons-font` ">王金福</view>
<image class="right-icons-img-icon"
:src="darkFans?`/static/index/undericons/face.png`:`/static/index/undericons/facelight.png`" />
<image class="right-icons-img-icon"
:src="darkFans?`/static/index/undericons/hand.png`:`/static/index/undericons/handlight.png`" />
<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-wrong" @click="newchange(0)">
<text class="right-container-title-class-anhei">
拖动模式
</text>
</view>
<!-- <view class="right-container-title-class-anhei-button">
<text class="right-container-title-class-anhei">
手柄模式1
</text>
</view> -->
<view class="right-container-title-class-anhei-button-wrong" @click="newchange(2)">
<text class="right-container-title-class-anhei">
手柄模式
</text>
</view>
</view>
<view class="doctorsay-container-view">
<view class="doctorsay-container-container">
<view class="doctorsay-container-title">
<view class="doctorsay-container-left">
<view class="doctorsay-container-left-gun"></view>
<view class="doctorsay-container-left-font">时间矩阵</view>
<view class="doctorsay-container-share" @click="shareToWeixin">
分享
</view>
</view>
<view class="doctorsay-container-right">
<view class="doctorsay-container-right-kuai-cheng"></view>
<view class="doctorsay-container-kuai-font">日常</view>
<view class="doctorsay-container-right-kuai-zi"></view>
<view class="doctorsay-container-kuai-font">周期</view>
<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">
<view class="boom-title">
<view class="boom-title-left">
分钟
</view>
<view class="boom-title-right">
小时
</view>
</view>
<view class="boom">
<view :style="{ marginTop: `-${2 *moveDownNumber}rpx` }">
<view v-for="(item,index) in timearr[0].children" :key="index">
<view
:class="touchindex1 === index ||(liang.index1 === index && !canmove) || (flyNumber.index1 === index && shakyTable) ? `boom-son-target`: `boom-son`"
v-show="item.typeName">
{{item.typeName}}
</view>
</view>
</view>
</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: 100%;width: 100%;" :scroll-left="cardLeft" scroll-x
@scroll="handleTop" :show-scrollbar="false">
<view
style="display: flex;box-shadow: 10rpx 10rpx 20rpx rgba(0, 0, 0, 0.1);width:5420rpx;background: linear-gradient(to right, #c4dbf4,#c9c2ef, #c6dcf3);">
<view v-for="(item0,index0) in timearr" :key="index0">
<view class="super-card-time" style="width:226rpx">
{{(item0.positioning.length == 1 ? ('0' + item0.positioning) : item0.positioning) + ":00"}}
</view>
</view>
</view>
<view style="display: flex;height: calc(100% - 80rpx);">
<scroll-view style="height: 100%;width:5800rpx" :scroll-top="scrollTop"
:scroll-y="canmove && !shakyTable" @scroll="handleScrolltime"
:show-scrollbar="false">
<view style="display: flex;height: 100%;">
<view v-for="(item0,index0) in timearr" :key="index0">
<view class="super-card-time-und" style="width:226rpx">
<view v-for="(item1,index1) in item0.children" style="width: 100%;"
:key="index1">
<view
:class=" targetRuler.index0 === index0 && targetRuler.index1 === index1 ? targetRuler.index1 ?`title-time-border-big`:`title-time-border-big-top` : `super-card-time-card` "
:style="!targetRuler.bordershow && saveRulerTime.index0 === index0 && saveRulerTime.index1 === index1 ? {zIndex:999} : {borderTop: '1rpx solid transparent'}"
:id="`a${index0}_${index1}`" style="position: relative;"
@click="rulerTouchClick(item1,index0,index1,$event)"
@touchstart="rulerTouchStart(item1,index0,index1,$event)"
@touchmove="rulerTouchMove" @touchend="rulerTouchEnd()"
:data-index0="index0" :data-index1="index1">
<view class="title-time-delete"
v-show="liang.index0 !== index0 || liang.index1 !== index1 || canmove"
v-if="item1.directiveName&&shakyTable "
@click.stop="deleteItems(item1,index0,index1)">
-
</view>
<view class="title-time-blue"
v-show="saveEditIndex.index0 == index0 && saveEditIndex.index1 == index1">
<image class="title-time-blue-img"
:src="isMove?`/static/index/movemode/targetcheng.png`: `/static/index/movemode/target.png`" />
</view>
<view :class="getClass(item1,index0,index1)"
style="font-size: 30rpx;overflow: hidden;"
:style="{ animationDelay:`-${computeDelay(index0, index1).toFixed(2)}s` }">
<view class="title-time" v-if="item1.startTime"
v-show=" liang.index0 !== index0 || liang.index1 !== index1 || canmove"
style="margin-top: 5rpx;">
<view class="title-time-time" style="font-size: 25rpx;">
{{item1.startTime + `-` + item1.endTime}}
</view>
<image class="title-time-button"
:src="item1.cycleType=='日常'?`/static/index/yellowbian.png`:`/static/index/puoplebian.png`" />
<view class="title-time-font">
{{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>
<view class="down-icons"
v-show=" liang.index0 !== index0 || liang.index1 !== index1 || canmove"
:style="item1.cycleType!='日常'?{backgroundColor:`rgb(212,203,255)`}:{}"
v-if="splitString(item1.directiveName)[1]">
<view class=""
v-for="(item,index) in splitString(item1.directiveName).slice(1)"
:key="index">
<view class="icon"
:style="item1.cycleType!='日常'?{backgroundColor:`rgb(123,97,255)`}:{}">
{{splitString(item1.directiveName)[index + 1]}}
</view>
</view>
</view>
</view>
</view>
</view>
</view>
</view>
</view>
</scroll-view>
</view>
</scroll-view>
<!-- </swiper-item>
</swiper> -->
</view>
</view>
<view class="super-card-end">
<view class="super-end-father">
<view class="super-end-font-father">
<view class="super-end-font-gun"></view>
<view class="super-end-font-font">即时指令</view>
</view>
<scroll-view scroll-x class="super-end-items-all" :scroll-left="scrollLeft">
<view class="super-end-items">
<view v-for="(item,index) in bottomItems" :key="index">
<view @touchstart="bottomTouchStart" @touchmove="bottomTouchMove"
@touchend="bottomTouchEnd"
:style="item.target?{background: item.target,transition:`all 1.5s ease-in-out`}:{transition:`all 1.5s ease-in-out`}"
class="super-end-items-father">
<view class="super-end-items-father-close-father" v-show="bottomisShaking"
@click.stop="deletebottom(index,item.name)">
-
</view>
<view :style="{ animationDelay:`-${index * 0.1}s` }"
:class="bottomisShaking?`super-end-items-img-father-active`:`super-end-items-img-father`">
<image class="super-end-items-img" :src="item.url" />
</view>
<view class="super-end-items-font">{{item.name}}</view>
</view>
</view>
</view>
</scroll-view>
</view>
</view>
</view>
</view>
<!-- 点击的弹出层 -->
<view v-show="isopen" class="popup-overlay" @click="isopen=false;flyNumber.index0=999;touchindex1=-1">
<view class="popup-overlay-content"
:style="{ top: (2*openY - 350) + 'rpx',left: (2*openX - 780) + 'rpx',opacity: isopacity ? 1 : 0,backgroundColor:timearr[flyNumber.index0]?.children[flyNumber.index1]?.type==='日常'? '#fffcf6':'rgb(246, 244, 254)' }"
@click.stop>
<view class="popup-overlay-content-left">
<image class="popup-overlay-content-left-img" :src="`/static/index/teeth.png`" />
<text class="popup-overlay-content-left-font">
{{ timearr[flyNumber.index0]?.children[flyNumber.index1]?.value }}
</text>
</view>
<view class="popup-overlay-content-right">
<view class="time-font">
10:00 - 10:10
</view>
<view class="time-text">
为老人提供口腔清洁器具,牙膏、牙刷及水杯,看护完成
</view>
</view>
</view>
</view>
<!-- 选择的弹出层 -->
<view v-if="songisopen" class="popup-song">
<view class="popup-song-contain" :style="{opacity: songisopacity ? 1 : 0}" @click.stop>
<view class="popup-song-father">
<image class="shu-up-img" src="/static/index/cheng.png" />
<view class="shu-up-font">
<view class="">
服务时段:{{ openValue.time + ":" + openValue.minute}}
</view>
<view style="margin-left: 30rpx;">
护理时长10分钟
</view>
</view>
<view class="shu-container-left" v-show="!clickstauts">
<view class="shu-container-left-gun"></view>
<view class="shu-container-left-font">服务类型</view>
</view>
<view class="arrayindex" v-show="!clickstauts">
<view v-for="(item,index) in openValue.array" :key="index">
<view style="position: relative;box-shadow: 10rpx 10rpx 20rpx rgba(105, 129, 178, 0.4)"
:class="cardsumit.op.index[1]===index?`arrayindex-one-target`:`arrayindex-one`"
@click="cardsumit.op.index[1]=index">
{{item.title}}
</view>
</view>
</view>
<view class="shu-container-left" v-show="clickstauts===1">
<view class="shu-container-left-gun"></view>
<view class="shu-container-left-font">服务指令</view>
</view>
<view class="secondarrayindex" v-show="clickstauts===1">
<view v-for="(item,index) in secondopenValue" :key="index">
<view style="position: relative;box-shadow: 10rpx 10rpx 20rpx rgba(105, 129, 178, 0.4)"
:class="cardsumit.op.index[2]===index?`arrayindex-one-target`:`arrayindex-one`"
@click="clickOp(index,item)">
<image class="ri-img" v-show="item.cycleType ==='日常护理'"
:src="cardsumit.op.index[2]!==index? `/static/index/ridark.png`:`/static/index/ri.png`" />
<image class="ri-img" v-show="item.cycleType ==='周期护理'"
:src="cardsumit.op.index[2]==index? `/static/index/zhoudark.png`:`/static/index/zhou.png`" />
<image class="ri-img" v-show="item.cycleType ==='即时护理'"
:src="cardsumit.op.index[2]==index? `/static/index/jidark.png`:`/static/index/ji.png`" />
{{ item.relName }}
</view>
</view>
</view>
<view class="shu-container-left" v-show="clickstauts===2">
<view class="shu-container-left-gun"></view>
<view class="shu-container-left-font">周期类型</view>
</view>
<view class="radio-father" v-show="clickstauts===2">
<view :class="isweek?`radio-circle-target`: `radio-circle`" @click="clickWeek"></view>
<view :class="isweek&&selectType? `radio-font-target` : `radio-font`" @click="clickWeek">每周
</view>
<view :class="!isweek?`radio-circle-target`: `radio-circle`" @click="clickMonth"></view>
<view :class="!isweek&&selectType? `radio-font-target` : `radio-font`" @click="clickMonth">每月
</view>
</view>
<view class="week-father" v-show="isweek&&clickstauts===2">
<view v-for="(item,index) in weekDays" :key="index">
<view :class="cardsumit.weekTimeNumber===index?`week-one-target`:`week-one`"
@click="cardsumit.weekTime=item;cardsumit.weekTimeNumber=index;selectType=false">
{{item}}
</view>
</view>
</view>
<view class="month-father" v-show="!isweek&&clickstauts===2">
<view v-for="(item,index) in days" :key="index">
<view :class="cardsumit.monthTimeNumber===index?`month-one-target`:`month-one`"
@click="cardsumit.monthTime=item;cardsumit.monthTimeNumber=index;selectType=false">
{{item}}
</view>
</view>
</view>
</view>
</view>
</view>
<!-- 删除表格的的弹出层 -->
<view v-show="deleteisopen" class="popup-delete" @click="deleteisopen=false">
<view class="popup-delete-content" style="padding-top: 30rpx;" :style="{ opacity: deleteisopacity ? 1 : 0 }"
@click.stop>
<image class="popup-delete-img" src="/static/index/deleteicon.png" />
<view style="margin-top: 30rpx;" class="popup-delete-text">
确定要删除 {{deletename}} 吗?
</view>
</view>
</view>
<!-- 替换表格的的弹出层 -->
<view v-show="replacementisopen" class="popup-delete" @click="replacementisopen=false">
<view class="popup-delete-content" style="padding-top: 30rpx;"
:style="{ opacity: replacementisopacity ? 1 : 0 }" @click.stop>
<image class="popup-delete-img" src="/static/index/deleteicon.png" />
<view style="margin-top: 30rpx;" class="popup-delete-text">
该单元格已有服务指令,是否替换旧服务指令
</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>
<view class="popup-share-title">
护理日程分享
<image class="popup-share-img" src="/static/index/NU.png" />
</view>
<view class="popup-share-upcontent">
<view class="popup-share-font">久泰护理日程分享测试</view>
</view>
<view class="popup-share-gray"></view>
<view class="popup-share-downcontent">
<view class="popup-share-downcontent-left">
<image class="popup-downcontent-img" src="/static/index/NU.png" />
<view class="popup-downcontent-font">久泰护理</view>
</view>
<view class="popup-share-downcontent-button" @click="clickshare">
分享
</view>
</view>
</view>
</view>
</view>
</template>
<script setup lang="ts">
import { ref, onMounted, onBeforeUnmount, computed, nextTick, defineProps, defineEmits, watch } from 'vue';
import { onShow, onHide } from '@dcloudio/uni-app';
import type { roomBtttonType } from "./index";
import { getServiceTree, getNclist, addBatch } from "./api.js";
import index from '../../request';
import { myArray } from './yaoshandiao.js';
import joystick from '@/component/public/game/joystick.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,
required: true,
},
darkFans: {
type: Boolean,
required: true,
},
canmove: {
type: Boolean,
required: true,
},
liang: {
type: Object,
},
isold:{
type: Boolean,
required: true,
}
});
watch(
() => props.canmove,
() => {
bottomisShaking.value = false;
})
watch(
() => props.isold,
() => {
if(props.isold){
cardLeft.value = 1;
scrollTop.value = 1;
nextTick(() => {
scrollTop.value = 0;
cardLeft.value = saveleft.value * 113;
})
}
})
watch(
() => props.isshow,
() => {
bottomisShaking.value = false
shakyTable.value = false
})
const bottomItems = ref([
{
name: '纸尿裤',
url: "/static/index/niao.png"
},
{
name: '呕吐',
url: "/static/index/tu.png"
},
{
name: '吸痰',
url: "/static/index/ou.png"
},
{
name: '大便',
url: "/static/index/baba.png"
},
])
const timeArray = [
`00`, `05`, `10`, `15`, `20`, `25`, `30`, `35`, `40`, `45`, `50`, `55`
];
const weekDays = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"];
const days = Array.from({ length: 31 }, (_, i) => (i + 1).toString().padStart(2, "0"));
const isweek = ref(true);
//弹窗
// const containerRef = ref(null);
const scrollLeft = ref(0);
const cardLeft = ref(678);
//移动表格
const scrollTop = ref(0)
//左下的数组
const downList = ref<any>()
//左下的数组
const rightList = ref<String[]>([
// "三分段",
// "四分段",
])
const bigArray = ref([]);
const isopen = ref(false)
const songisopen = ref(false)
const isopacity = ref(false)
const songisopacity = ref(false)
// 删除表格弹窗
const deleteisopen = ref(false);
const deletename = ref("")
const deleteisopacity = ref(false)
// 替换表格弹窗
const replacementisopen = ref(false);
const replacementname = ref("")
const replacementisopacity = ref(false)
//第几套表格
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(13);
const savetop = ref(0);
const savebottom = ref(3);
const isMove = ref(false);
// 替换新的
const getNew = () => {
let object = JSON.parse(JSON.stringify(timearr.value[flyNumber.value.index0].children[flyNumber.value.index1]))
indexsave.value = [saveEditIndex.value.index0, saveEditIndex.value.index1]
// 旧的typeName保存了
let typeName = timearr.value[flyNumber.value.index0].children[flyNumber.value.index1].typeName
timearr.value[flyNumber.value.index0].children[flyNumber.value.index1] = { directiveName: '', typeName: typeName }
//然后保存新的
let newtypeName = timearr.value[indexsave.value[0]].children[indexsave.value[1]].typeName
timearr.value[indexsave.value[0]].children[indexsave.value[1]] = object
timearr.value[indexsave.value[0]].children[indexsave.value[1]].typeName = newtypeName
let startTime = timearr.value[indexsave.value[0]].children[indexsave.value[1]].startTime;
let endTime = timearr.value[indexsave.value[0]].children[indexsave.value[1]].endTime;
let positioning = timearr.value[indexsave.value[0]].positioning
const rest = startTime.split(":")[1]; // ":20"
const rest0 = endTime.split(":")[1];; // ":20"
let many = Number(rest0) - Number(rest);
let start = newtypeName
let end = Number(start) + many
// 用 positioning 替换原来的小时部分
timearr.value[indexsave.value[0]].children[indexsave.value[1]].startTime = positioning + ":" + start.padStart(2, '0'); // "9:20"
timearr.value[indexsave.value[0]].children[indexsave.value[1]].endTime = positioning + ":" + String(end % 60).padStart(2, '0'); // "9:20"
flyNumber.value.index0 = -1;
flyNumber.value.index1 = -1;
isMove.value = false;
isHave()
}
const changecard = (type : number) => {
//1是删除0是移动
if (isMove.value) {
if (replacementisopen.value) {
if (type) {
flyNumber.value.index0 = -1;
flyNumber.value.index1 = -1;
isMove.value = false;
} else {
getNew()
}
replacementisopen.value = false;
} else {
if (type) {
flyNumber.value.index0 = -1;
flyNumber.value.index1 = -1;
isMove.value = false
} else {
if (timearr.value[saveEditIndex.value.index0].children[saveEditIndex.value.index1].directiveName) {
replacementisopacity.value = false;
replacementisopen.value = true;
setTimeout(() => {
replacementisopacity.value = true
}, 100)
} else {
getNew()
}
}
}
} else {
if (type) {
deleteItems(timearr.value[saveEditIndex.value.index0].children[saveEditIndex.value.index1], saveEditIndex.value.index0, saveEditIndex.value.index1)
} else {
flyNumber.value.index0 = saveEditIndex.value.index0;
flyNumber.value.index1 = saveEditIndex.value.index1;
isMove.value = true
}
}
}
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) {
case `日常护理`:
openOp.value = 0
break;
case `周期护理`:
openOp.value = 1
break;
case `即时护理`:
openOp.value = 2
break;
default:
break;
}
}
const selectType = ref(true);
const deleteButton = ref(false);
// 给摇杆用的
//看完迷糊不,我都迷糊了
//0上1右2下3左
// songisopen.value是弹窗打没打开
// clickstauts.value是弹窗的第几步
// selectType.value是选择周和月的状态
const movecard = (where : number) => {
if (songisopen.value) {
if (!clickstauts.value) {
switch (where) {
case 0:
if (cardsumit.value.op.index[1] > 3) {
cardsumit.value.op.index[1] = cardsumit.value.op.index[1] - 4
}
break
case 1:
if (openValue.value.array.length - 1 == cardsumit.value.op.index[1]) {
cardsumit.value.op.index[1] = 0;
} else {
cardsumit.value.op.index[1]++;
}
break
case 2:
if (openValue.value.array.length > cardsumit.value.op.index[1] + 4) {
cardsumit.value.op.index[1] = cardsumit.value.op.index[1] + 4
} else {
cardsumit.value.op.index[1] = openValue.value.array.length - 1
}
break
case 3:
if (cardsumit.value.op.index[1]) {
cardsumit.value.op.index[1]--;
} else {
cardsumit.value.op.index[1] = openValue.value.array.length - 1
}
break
}
} else if (clickstauts.value === 1) {
switch (where) {
case 0:
if (cardsumit.value.op.index[2] > 2) {
cardsumit.value.op.index[2] = cardsumit.value.op.index[2] - 3
dosomesave()
}
break
case 1:
if (secondopenValue.value.length - 1 == cardsumit.value.op.index[2]) {
cardsumit.value.op.index[2] = 0;
} else {
cardsumit.value.op.index[2]++;
}
dosomesave()
break
case 2:
if (secondopenValue.value.length > cardsumit.value.op.index[2] + 3) {
cardsumit.value.op.index[2] = cardsumit.value.op.index[2] + 3
} else {
cardsumit.value.op.index[2] = secondopenValue.value.length - 1
}
dosomesave()
break
case 3:
if (cardsumit.value.op.index[2]) {
cardsumit.value.op.index[2]--;
} else {
cardsumit.value.op.index[2] = secondopenValue.value.length - 1
}
dosomesave()
break
}
} else if (clickstauts.value === 2) {
if (selectType.value) {
if (where === 1 || where === 3) {
isweek.value = !isweek.value
if (isweek.value) {
cardsumit.value.monthTime = '';
cardsumit.value.monthTimeNumber = -1;
} else {
cardsumit.value.weekTime = '';
cardsumit.value.weekTimeNumber = -1;
}
} else if (where === 2) {
if (isweek.value) {
cardsumit.value.weekTime = '周一';
cardsumit.value.weekTimeNumber = 0
} else {
cardsumit.value.monthTime = '01';
cardsumit.value.monthTimeNumber = 0
}
selectType.value = false;
}
} else {
if (isweek.value) {
switch (where) {
case 0:
if (cardsumit.value.weekTimeNumber > 4) {
cardsumit.value.weekTimeNumber = cardsumit.value.weekTimeNumber - 5;
cardsumit.value.weekTime = weekDays[cardsumit.value.weekTimeNumber]
} else {
selectType.value = true;
cardsumit.value.weekTime = ""
cardsumit.value.weekTimeNumber = -1
}
break
case 1:
if (weekDays.length - 1 == cardsumit.value.weekTimeNumber) {
cardsumit.value.weekTimeNumber = 0;
} else {
cardsumit.value.weekTimeNumber++;
}
cardsumit.value.weekTime = weekDays[cardsumit.value.weekTimeNumber]
break
case 2:
if (weekDays.length > cardsumit.value.weekTimeNumber + 5) {
cardsumit.value.weekTimeNumber = cardsumit.value.weekTimeNumber + 5
} else {
cardsumit.value.weekTimeNumber = weekDays.length - 1
}
cardsumit.value.weekTime = weekDays[cardsumit.value.weekTimeNumber]
break
case 3:
if (cardsumit.value.weekTimeNumber) {
cardsumit.value.weekTimeNumber--;
} else {
cardsumit.value.weekTimeNumber = weekDays.length - 1
}
break
}
} else {
switch (where) {
case 0:
if (cardsumit.value.monthTimeNumber > 11) {
cardsumit.value.monthTimeNumber = cardsumit.value.monthTimeNumber - 12;
cardsumit.value.monthTime = days[cardsumit.value.monthTimeNumber]
} else {
selectType.value = true;
cardsumit.value.monthTime = ""
cardsumit.value.monthTimeNumber = -1
}
break
case 1:
if (days.length - 1 == cardsumit.value.monthTimeNumber) {
cardsumit.value.monthTimeNumber = 0;
} else {
cardsumit.value.monthTimeNumber++;
}
cardsumit.value.monthTime = days[cardsumit.value.monthTimeNumber]
break
case 2:
if (days.length > cardsumit.value.monthTimeNumber + 12) {
cardsumit.value.monthTimeNumber = cardsumit.value.monthTimeNumber + 12
} else {
cardsumit.value.monthTimeNumber = days.length - 1
}
cardsumit.value.monthTime = days[cardsumit.value.monthTimeNumber]
break
case 3:
if (cardsumit.value.monthTimeNumber) {
cardsumit.value.monthTimeNumber--;
} else {
cardsumit.value.monthTimeNumber = days.length - 1
}
break
}
}
}
}
} else {
if (deleteisopen.value) {
deleteButton.value = !deleteButton.value
} else {
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;
}
// downdo.value = 2
// if (updo.value) {
// updo.value--
// } else {
// if (saveEditIndex.value.index1 < 12) {
// scrollTop.value = (saveEditIndex.value.index1) * 104.5
// }
// }
isHave()
break
case 1:
if (saveEditIndex.value.index0 == 23) {
return
}
saveEditIndex.value.index0++
if (saveEditIndex.value.index0 > saveright.value) {
saveleft.value = saveEditIndex.value.index0 - 7;
saveright.value = saveEditIndex.value.index0
cardLeft.value = saveleft.value * 113;
}
// rightdo.value = 6
// if (leftdo.value) {
// leftdo.value--
// if (saveEditIndex.value.index0 > saveright.value && saveright.value != -1) {
// cardLeft.value = (saveEditIndex.value.index0 - 7) * 113;
// console.log("222",saveEditIndex.value.index0,saveright.value)
// }
// } else {
// if (saveEditIndex.value.index0 > 1) {
// cardLeft.value = (saveEditIndex.value.index0 - 7) * 113
// saveleft.value = saveEditIndex.value.index0 - 7;
// saveright.value = saveEditIndex.value.index0
// }
// }
// saveEditIndex.value.index0++
// if (saveEditIndex.value.index0 > 7) {
// if (currentNumber.value == 2) {
// currentNumber.value = 0
// } else {
// currentNumber.value++
// }
// // currentNumber.value++
// saveEditIndex.value.index0 = 0;
// }
isHave()
break
case 2:
if (saveEditIndex.value.index1 == 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;
}
// updo.value = 2
// if (downdo.value) {
// downdo.value--
// } else {
// if (saveEditIndex.value.index1 > 1) {
// scrollTop.value = (saveEditIndex.value.index1 - 3) * 104.5
// }
// }
isHave()
break
case 3:
// saveEditIndex.value.index0--
// if (saveEditIndex.value.index0 < 0) {
// if (currentNumber.value) {
// currentNumber.value--
// } else {
// currentNumber.value = 2
// }
// saveEditIndex.value.index0 = 7;
// }
// if (saveEditIndex.value.index1) {
// saveEditIndex.value.index1--
// }
if (saveEditIndex.value.index0 == 0) {
return
}
saveEditIndex.value.index0--
if (saveEditIndex.value.index0 < saveleft.value) {
saveleft.value = saveEditIndex.value.index0;
saveright.value = saveEditIndex.value.index0 + 7;
cardLeft.value = saveleft.value * 113;
}
// leftdo.value = 6
// if (rightdo.value) {
// rightdo.value--
// if (saveEditIndex.value.index0 < saveleft.value && saveleft.value != -1) {
// cardLeft.value = (saveEditIndex.value.index0) * 113
// console.log("111",saveEditIndex.value.index0,saveleft.value)
// }
// } else {
// if (saveEditIndex.value.index0 < 23) {
// // scrollTop.value = (saveEditIndex.value.index1) * 104.5
// cardLeft.value = (saveEditIndex.value.index0) * 113;
// saveleft.value = saveEditIndex.value.index0;
// saveright.value = saveEditIndex.value.index0 + 7
// }
// }
isHave()
break
}
}
}
}
const clickWeek = () => {
selectType.value = true;
isweek.value = true;
cardsumit.value.monthTime = '';
cardsumit.value.monthTimeNumber = -1;
}
const clickMonth = () => {
selectType.value = true;
isweek.value = false;
cardsumit.value.weekTime = '';
cardsumit.value.weekTimeNumber = -1;
}
const haveName = ref(false);
const isHave = () => {
if (timearr.value[saveEditIndex.value.index0].children[saveEditIndex.value.index1].directiveName) {
haveName.value = true;
} else {
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;
// 产生一个伪随机数,取小数部分
return Math.abs(Math.sin(seed) * 43758.5453) % 1;
}
function computeDelay(index0, index1) {
const range = 2; // 延迟范围 0 ~ 2 秒
return pseudoRandom(index0, index1) * range;
}
// 在作用域中声明一个定时器变量
let throttleTimer = null;
// const changecurrentNumber = (event : any) => {
// // 进行你想要的操作
// currentNumber.value = event.detail.current;
// nextTick(() => {
// scrollTop.value = moveDownNumber.value;
// });
// };
//监听拖拽
const dragOffset = ref(0);
const moveDownNumber = ref(0)
function handleScrolltime(e) {
let num = e.detail.scrollTop
let formattedNum = parseFloat(num.toFixed(2));
moveDownNumber.value = formattedNum
}
function handleTop(e) {
// console.log(e.detail.scrollLeft)
// if(e.detail.scrollLeft>7000){
// cardLeft.value = 0;
// }else if(e.detail.scrollLeft<1000){
// // cardLeft.value = 7234;
// cardLeft.value = 7000;
// }
}
const changeBug = ref(true);
// const nextItems = () => {
// if (!isEdit.value) {
// if (currentNumber.value) {
// currentNumber.value--
// } else {
// currentNumber.value = 2
// }
// }
// }
// 方法:根据条件返回不同的类名
const getClass = (item, index0, index1) => {
// if (saveEditIndex.value.index0 == index0 && saveEditIndex.value.index1 == index1) {
// return 'title-time-border-blue';
// }
// else if (!props.canmove && props.liang.index0 === index0 && props.liang.index1 === index1 && (redNameindex0.value.includes(index0 + (currentNumber.value * 6)) || (redNameindex1.value != index1))) {
// return 'title-time-border-red';
// }
// else if (!props.canmove && props.liang.index0 === index0 && props.liang.index1 === index1) {
// return 'title-time-border-blue';
// }
if (item.cycleType === '日常') {
if (flyNumber.value.index0 === (index0) && flyNumber.value.index1 === index1) {
return 'title-time-border-yellow-active-transparent';
} else if (shakyTable.value) {
return 'title-time-border-yellow-active';
} else {
return 'title-time-border-yellow';
}
} else if (item.cycleType) {
//为啥这么写,是因为动画写行内无效!!!
if (flyNumber.value.index0 === (index0) && flyNumber.value.index1 === index1) {
return 'title-time-border-pouple-active-transparent';
}
else if (shakyTable.value) {
return 'title-time-border-pouple-active';
} else {
return 'title-time-border-pouple';
}
}
return 'title-time-border';
}
// 初始化下面侧单列表
const doctorsayList = ref<roomBtttonType[]>([
{ url: '/static/index/doctorsay/light/clean.png', targetUrl: '/static/index/doctorsay/dark/clean.png', name: '清洁' },
{ url: '/static/index/doctorsay/light/drink.png', targetUrl: '/static/index/doctorsay/dark/drink.png', name: '饮食' },
{ url: '/static/index/doctorsay/light/bed.png', targetUrl: '/static/index/doctorsay/dark/bed.png', name: '睡眠' },
{ url: '/static/index/doctorsay/light/shi.png', targetUrl: '/static/index/doctorsay/dark/shi.png', name: '排泻' },
{ url: '/static/index/doctorsay/light/use.png', targetUrl: '/static/index/doctorsay/dark/use.png', name: '日常' },
]);
// 当前选中的菜单索引
const upmenuIndex = ref<number>(0);
const downmenuIndex = ref<number>(999);
// 暗黑模式
const underFans = ref<boolean>(false);
// 当前选中的菜单索引
const roomTar = ref<number[]>([]);
const emit = defineEmits(['darkchange', 'savename', 'saveruler', 'closename', 'changefangkuang', 'changeold']);
const isEdit = ref(false);
// const isLunpan = ref(false);
const saveEditIndex = ref({
index0: -1,
index1: -1
})
const clickstauts = ref(0)
const secondopenValue = ref([]);
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 * 113;
})
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)
}
const timer = ref(null);//计时器
const elementsInfo = ref({})//所有表格的信息
const moveX = ref(0)
const moveY = ref(0)
const openX = ref(0)
const openY = ref(0)
const flyNumber = ref({
index0: 999,
index1: 999,
typeName: ''
})
const deletebottomindex = ref(-1);
const deletedownisopen = ref(false);
const deletedownisopacity = ref(false);
const deletebottom = (index : number, name : string) => {
bottomisShaking.value = false;
deletebottomindex.value = index;
shakyTable.value = false;
deletedownisopacity.value = false;
deletedownisopen.value = true;
deletename.value = name;
setTimeout(() => {
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);
const shareToWeixin = () => {
shareShow.value = true;
deletedownisopacity.value = false;
setTimeout(() => {
deletedownisopacity.value = true
}, 100)
}
const clickshare = () => {
uni.share({
provider: "weixin",
scene: "WXSceneSession",
type: 0,
href: "http://192.168.2.31:3101/daytoday",
title: "护理日程分享",
summary: "九泰护理日程测试",
imageUrl: "https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/uni@2x.png",
success: function (res) {
console.log("success:");
},
fail: function (err) {
console.log("fail:");
}
});
}
//表格点击开始
const rulerTouchClick = (item : any, index0 : number, index1 : number, e : any) => {
if (item.directiveName) {
touchindex1.value = index1;
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 && res.dataset.index0 == index0 && res.dataset.index1 == index1) {
if (res.left > 200 && res.left < 500) {
// 表格太靠左侧,修改到右面
openX.value = Math.floor(res.left) + 520;
} else {
openX.value = Math.floor(res.left)
}
if (res.top > 140 && res.top < 300) {
// 表格太靠上侧,修改到下面
openY.value = Math.floor(res.top) + 250;
} else {
openY.value = Math.floor(res.top)
}
// openY.value = Math.floor(res.top);
await nextTick()
isopen.value = true;
isopacity.value = false;
//加动画
setTimeout(() => {
isopacity.value = true;
}, 100)
}
})
})
.exec()
}
}
const shakyTable = ref(false);
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);
const moveYa = Math.floor(e.touches[0].pageY);
// 计算移动距离
if (
Math.abs(moveXa - moveX.value) > 0 ||
Math.abs(moveYa - moveY.value) > 0
) {
// 移动时取消长按计时器
if (timer.value) {
clearTimeout(timer.value);
timer.value = null;
}
}
}
//表格长按结束
const rulerTouchEnd = () => {
isTuoing.value = false;
if (timer.value) {
clearTimeout(timer.value);
timer.value = null;
}
}
const deleteRuler = (index0 : number, index1 : number) => {
let typeName = timearr.value[index0].children[index1].typeName
timearr.value[index0].children[index1] = { directiveName: "", typeName: typeName };
isopen.value = false;
deleteisopen.value = false;
}
const longPressTimer = ref(null);
const isScrolling = ref(false)
//长按计时器
let scrollTimeout = null
function handleScroll(e) {
isScrolling.value = true
// 清除之前的定时器
if (scrollTimeout) clearTimeout(scrollTimeout)
// 设置新的定时器
scrollTimeout = setTimeout(() => {
isScrolling.value = false;
}, 400)
}
const isBack = ref(false)
const saveX = ref(0);
const saveY = ref(0);
const isTuoing = ref(false);
// 存储菜单的id
const saveId = ref("");
const saveTagName = ref("");
function isblue() {
if (openOp.value !== -1) {
return true
} else {
return false
}
}
const bottomTimer = ref(null);
const bottomisShaking = ref(false);
const bottomTouchStart = (e) => {
saveX.value = Math.floor(e.touches[0].pageX);
saveY.value = Math.floor(e.touches[0].pageY);
// 2秒后触发抖动效果
bottomTimer.value = setTimeout(() => {
bottomisShaking.value = true
}, 500)
}
const bottomTouchMove = (e) => {
const moveX = Math.floor(e.touches[0].pageX);
const moveY = Math.floor(e.touches[0].pageY);
// 计算移动距离
if (
Math.abs(moveX - saveX.value) > 0 ||
Math.abs(moveY - saveY.value) > 0
) {
if (bottomTimer.value) {
clearTimeout(bottomTimer.value)
bottomTimer.value = null
}
}
}
const bottomTouchEnd = () => {
if (bottomTimer.value) {
clearTimeout(bottomTimer.value)
bottomTimer.value = null
}
}
const openValue = ref({
time: "",
minute: "",
array: []
})
const cardsumit = ref({
op: {
name: "",
index: [-1, -1, -1],
},
startTime: "",
weekTimeNumber: -1,
monthTimeNumber: -1,
monthTime: "",
weekTime: ""
})
const openOp = ref(0);
const clickOp = (index : number, item : any) => {
saveId.value = item.id;
saveTagName.value = item.tagName
cardsumit.value.op.index[2] = index
cardsumit.value.op.name = item.relName
switch (item.cycleType) {
case `日常护理`:
openOp.value = 0
break;
case `周期护理`:
openOp.value = 1
break;
case `即时护理`:
openOp.value = 2
break;
default:
break;
}
// if (cardsumit.value.op.index[2] === index) {
// cardsumit.value.op.index[2] = -1;
// cardsumit.value.op.name = ""
// openOp.value = -1
// } else {
// cardsumit.value.op.index[2] = index
// cardsumit.value.op.name = item.relName
// switch (item.cycleType) {
// case `日常护理`:
// openOp.value = 0
// break;
// case `周期护理`:
// openOp.value = 1
// break;
// case `即时护理`:
// openOp.value = 2
// break;
// default:
// break;
// }
// }
}
// const clickweek = (index : string) => {
// cardsumit.value.weekTime = index
// }
// const clickmonth = (index : string) => {
// cardsumit.value.monthTime = index
// }
const indexsave = ref([-1, -1]);
// (长按表格后)表格拖动结束
const rulerMoveEnd = (object : any) => {
if (props.liang.index0 !== 999 && object.cycleType) {
indexsave.value = [props.liang.index0, props.liang.index1]
// 旧的typeName保存了
let typeName = timearr.value[flyNumber.value.index0].children[flyNumber.value.index1].typeName
timearr.value[flyNumber.value.index0].children[flyNumber.value.index1] = { directiveName: '', typeName: typeName }
//然后保存新的
let newtypeName = timearr.value[indexsave.value[0]].children[indexsave.value[1]].typeName
timearr.value[indexsave.value[0]].children[indexsave.value[1]] = object
timearr.value[indexsave.value[0]].children[indexsave.value[1]].typeName = newtypeName
let startTime = timearr.value[indexsave.value[0]].children[indexsave.value[1]].startTime;
let endTime = timearr.value[indexsave.value[0]].children[indexsave.value[1]].endTime;
let positioning = timearr.value[indexsave.value[0]].positioning
const rest = startTime.split(":")[1]; // ":20"
const rest0 = endTime.split(":")[1];; // ":20"
let many = Number(rest0) - Number(rest);
let start = newtypeName
let end = Number(start) + many
// 用 positioning 替换原来的小时部分
timearr.value[indexsave.value[0]].children[indexsave.value[1]].startTime = positioning + ":" + start.padStart(2, '0'); // "9:20"
timearr.value[indexsave.value[0]].children[indexsave.value[1]].endTime = positioning + ":" + String(end % 60).padStart(2, '0'); // "9:20"
// 检查是否有任意一个对象的 children 数组最后一个对象的 value 有值
// saveAll()
}
}
const scrollContainer = ref(null)
const movetoruler = async () => {
//关闭弹窗
songisopen.value = false;
// 还原成默认选项
isweek.value = true;
let savaIndex = -1;
//如果是即时指令直接干掉
if (openOp.value === 2) {
console.log("????")
scrollLeft.value = 1;
nextTick(() => {
scrollLeft.value = 0;
bottomItems.value.unshift({
name: cardsumit.value.op.name,
url: "/static/index/ou.png",
target: `#00a8ff`
})
// 实现即时指令动画
setTimeout(() => {
bottomItems.value[0].target = `#fff`;
}, 1500)
setTimeout(() => {
bottomItems.value[0].target = "";
}, 3000)
})
return
}
let cycleType = ""
//看看是啥指令
// openOp.value点击最后一项时修改
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()
let allArray = [];
timearr.value.forEach((element : any) => {
element.children.forEach((res : any) => {
allArray.push(res)
})
})
saveAll()
}
const saveAll = () => {
//给后端编译一下
let postArray = [];
timearr.value.forEach((element0, index0) => {
element0.children.forEach((element1, index1) => {
let saveTypeName = ""
if (!element1.directiveName && !element1.id) {
let array = {};
if (element1.typeName) {
saveTypeName = element1.typeName
}
array = JSON.parse(JSON.stringify(moBan.value))
saveTypeName ? array.typeName = saveTypeName : ""
array.positioning = index0
array.positioningLong = index1
postArray.push(array)
} else {
element1.positioning = index0;
element1.positioningLong = index1;
postArray.push(element1)
}
})
})
console.log("!!!!!!!!",postArray)
}
const routerPush = () => {
uni.setStorage({
key: 'myArray',
data: timearr.value,
success: function () {
uni.navigateTo({
url: `/pages/timeMatrix/indexnew`
})
},
});
}
// 暂存器
const saveRulerTime = ref({
index0: -1,
index1: -1
})
const targetRuler = ref({
index0: -1,
index1: -1,
current: -1,
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;
targetRuler.value.index1 = -1;
targetRuler.value.current = -1
}, 400)
setTimeout(() => {
targetRuler.value.bordershow = true;
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']
const timearr = ref(
Array.from({ length: 24 }, (_, hour) => ({
positioning: hour.toString(),
children: minuteArr.map(time => ({
typeName: time, // 表示分钟,如 '00', '05' 等
directiveName: '' // 默认的 directiveName
}))
}))
)
onShow(() => {
// console.log("QQQQ", myArray)
bigArray.value = myArray
downList.value = bigArray.value[0].children
cardLeft.value = 678
// 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);
})
onHide(() => {
uni.$off('where', whereEvent);
});
defineExpose({
// rulerEnd,
rulerMoveEnd,
// nextItems,
})
const moveNumber = ref({
index0: 999,
index1: 999
})
const moBan = ref({
directiveId: "",
directiveName: "",
startTime: "",
endTime: "",
positioning: "",
positioningLong: "",
tagName: "",
cycleType: "",
nuId: "1",
customerId: "1",
id: "",
typeName: ""
})
// 切割bigArray
function splitString(str) {
// 使用正则表达式找到所有括号的内容
let result = [];
let remainingStr = str;
// 正则匹配最外层括号(支持全角和半角)
let regex = /([^(]*)[(]([^)]+)[)]/;
while (regex.test(remainingStr)) {
let match = remainingStr.match(regex);
if (match) {
// 添加括号前的部分(去掉空白)
if (match[1].trim()) {
result.push(match[1].trim());
}
// 添加括号内的内容
if (match[2].trim()) {
result.push(match[2].trim());
}
// 更新剩余的字符串
remainingStr = remainingStr.replace(match[0], '').trim();
}
}
// 如果最后还有剩余部分,也加入结果
if (remainingStr.trim()) {
result.push(remainingStr.trim());
}
return result;
}
</script>
<style lang="less" scoped>
// 主页的css
@import './index';
</style>