hldy_app_mini/pages/NursingNew/index.vue

462 lines
12 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>
<view class="backgroundContainer" @touchmove.stop="getxy" @touchend.stop="cleanall">
<!-- 手指拖动 -->
<view class="box" :style="boxStyle">
<view class="title-time-blue">
<image class="blue-img" lazy-load src="/static/index/target.png" />
</view>
<image class="card-icon" :src="movelook.url" mode="aspectFill"></image>
<view class="card-text" style="margin-top: 0;">
{{ movelook.title }}
</view>
</view>
<!-- 左侧菜单 -->
<leftcontent :list="arrlist" @navurl="navurl" :userInfo="userInfo"></leftcontent>
<!-- 主页 -->
<!-- <index :isShow="menuIndex==0" v-if="swipedex==0&&!specialPage" @swip="swip" @gospecial="gospecial" /> -->
<index :isShow="menuIndex==0" v-if="swipedex==0&&!specialPage" @swip="swip" @gospecial="gospecial" />
<!-- 新主页 -->
<bignurse :isshow="menuIndex==0"
v-if="swipedex==0&&specialPage==1&&uni.getStorageSync('elderId')&&uni.getStorageSync('nuId')" />
<!-- 户嘱页 -->
<newnurse :isshow="menuIndex==1" v-if="swipedex==1" :canmove="startmoveit"
:sendxy="sendxy" :isblue='isblue' @handmove="handmove" @handsend="handsend" />
<!-- 医嘱 -->
<doctorask v-if="swipedex==2&&uni.getStorageSync('elderId')&&uni.getStorageSync('nuId')" />
<logistics :isshow="menuIndex==3"
v-if="swipedex==3&&uni.getStorageSync('elderId')&&uni.getStorageSync('nuId')" />
<invoicing :isshow="menuIndex==6"
v-if="swipedex==6&&uni.getStorageSync('elderId')&&uni.getStorageSync('nuId')" />
<!-- 医嘱页 -->
<!-- <logistics :isShow="menuIndexshowfourth" v-if="menuIndex==3" /> -->
<requestform :isShow="menuIndex==4" v-if="swipedex==4" />
<!-- 设备页 -->
<equipment :isShow="menuIndex==5" v-if="swipedex==5" />
<!-- 没有数据 -->
<view class="nomessageclass" :style="messageopit?{opacity: `1`}:{opacity: `0`}"
v-if="(menuIndex == 1 || menuIndex == 2) && (!uni.getStorageSync('elderId') ||!uni.getStorageSync('nuId'))">
<defaultr cont="暂无老人入住"></defaultr>
</view>
</view>
</template>
<script setup lang="ts">
import { ref, onMounted, onBeforeUnmount, nextTick } from 'vue';
import { queryPadPageList, getPermissionList } from '@/pages/watch/api/lunpan.js'
import index from "./component/index.vue"
import newnurse from "./component/nurse/newindex.vue"
import equipment from "./component/equipment.vue"
import logistics from "./component/logistics/index.vue"
import invoicing from "./component/invoicing/index.vue"
import requestform from "./component/pleasetake/takehome.vue"
import doctorask from "./component/doctorask/doctorask.vue"
// import nurse from "./component/nurse/index.vue"
import bignurse from "./component/nurse/bigindex.vue"
import { onBackPress, onShow } from '@dcloudio/uni-app';
import { getNcPackagelist } from './component/nurse/api.js'
import leftcontent from "./component/leftcontent/leftcontent.vue"
import defaultr from '@/pages/procurement/components/default.vue';
onBackPress(() => {
if (specialPage.value) {
specialPage.value--
return true; // 禁止返回手势返回
} else {
return false; // 禁止返回手势返回
}
})
const listarr = ref([]);
onMounted(() => {
menuIndex.value = 0;
swipedex.value = 0;
// getNcPackagelist().then((res : any) => {
// //缓存指令包
// uni.setStorageSync("Packagelist", res.result)
// })
getPermissionList({ employessId: uni.getStorageSync('userInfo').employessId }).then(res => {
listarr.value = res.result;
console.log("这个是啥",listarr.value)
})
})
const gospecial = (index : number) => {
specialPage.value = index
}
// 通用的生成函数
function genPaths(base, prefix, count, ext = 'png', startIndex = 0, pad = false) {
return Array.from({ length: count }, (_, i) => {
const idx = pad
? String(i + startIndex).padStart(2, '0')
: i + startIndex
return `${base}/${prefix}${idx}.${ext}`
})
}
const tabbrarr = ref([
{ name: '护理', url: '/static/shouye/sy/n0.png', urls: '/static/shouye/sy/n1.png', type: 'kzgn_hljz' },
{ name: '医疗', url: '/static/shouye/sy/y0.png', urls: '/static/shouye/sy/y1.png', type: 'kzgn_yljz' },
{ name: '后勤', url: '/static/shouye/sy/l0.png', urls: '/static/shouye/sy/l1.png', type: 'kzgn_hqjz' },
{ name: '库房', url: '/static/shouye/sy/l0.png', urls: '/static/shouye/sy/l1.png', type: 'kzgn_kfjz' },
])
const specialPage = ref(0)
const navurl = (e, v) => {
swipedex.value = -1;
specialPage.value = 0
switch (v.type) {
case 'hldy':
swipedex.value = 0;
setTimeout(() => {
menuIndex.value = 0;
}, 100)
// console.log('护理单元')
break;
case 'kzgn_hljz':
swipedex.value = 1;
setTimeout(() => {
menuIndex.value = 1;
}, 100)
// console.log('护理矩阵')
break;
case 'kzgn_yljz':
swipedex.value = 2;
setTimeout(() => {
menuIndex.value = 2;
}, 100)
// console.log('医疗矩阵')
break;
case 'kzgn_hqjz':
swipedex.value = 3;
setTimeout(() => {
menuIndex.value = 3;
}, 100)
// console.log('后勤矩阵')
break;
case 'kzgn_kfjz':
swipedex.value = 6;
setTimeout(() => {
menuIndex.value = 6;
}, 100)
//console.log('库房')
break;
case 'kf_cg':
//console.log('采购')
break;
case 'kf_jh':
//console.log('拣货')
break;
case 'kf_wj':
//console.log('完结')
break;
case 'hldy_ql':
swipedex.value = 4;
setTimeout(() => {
menuIndex.value = 4;
}, 100)
//console.log('请领')
break;
case 'kf_th':
//console.log('退货')
break;
case 'kf_pd':
//console.log('盘点')
break;
case 'wl':
swipedex.value = 5;
setTimeout(() => {
menuIndex.value = 5;
}, 100)
//console.log('物联')
break;
case 'back':
uni.navigateBack()
//console.log('物联')
break;
default:
break;
}
//
}
const arrlist = ref([
{ name: '首页', url: '/static/shouye/sy/h0.png', urls: '/static/shouye/sy/h1.png', type: 'hldy' }
])
const swip = () => {
let nuId = uni.getStorageSync('nuId');
let arrs = [];
listarr.value.forEach(item => {
if (item.nuId == nuId) {
arrs = item.dataList
}
})
let nuName = uni.getStorageSync('nuName')
queryPadPageList({ 'pageNo': -1, 'nuName': nuName }).then((res => {
let arr = res.result.records[0].permissionList;
arrlist.value = [{ name: '首页', url: '/static/shouye/sy/h0.png', urls: '/static/shouye/sy/h1.png', type: 'hldy' }];
let tbr = [];
// console.log("xxxx",arr)
if (arr) {
arr.forEach((v, i) => {
let obj = arrs.find(item =>
item.menuCode == v.menuCode
);
if (obj) {
tbr.push(v);
}
})
tbr.forEach(item => {
let obj = tabbrarr.value.find(r =>
r.type == item.menuCode
);
if (obj) {
arrlist.value.push(obj);
}
})
}
let back = [
{ name: '请领', url: '/static/shouye/sy/l0.png', urls: '/static/shouye/sy/l1.png', type: 'hldy_ql' },
{ name: '智慧物联', url: '/static/shouye/sy/g0.png', urls: '/static/shouye/sy/g1.png', type: 'wl' },
{ name: '返回', url: '/static/shouye/sy/f0.png', urls: '/static/shouye/sy/f1.png', type: 'back' }
]
arrlist.value.push(...back);
// navurl(0,arrlist.value[0])
}))
}
// 当前选中的菜单索引
const menuIndex = ref<number>(-1);
const swipedex = ref<number>(-1);
const menuIndexshow = ref<boolean>(false);
const menuIndexshowsecond = ref<boolean>(false);
const menuIndexshowfourth = ref<boolean>(false);
const menuIndexshowfifth = ref<boolean>(false);
const messageopit = ref<boolean>(false);
// 变更菜单
const changeMenu = (index : number) => {
if (index === menuIndex.value) {
return
}
menuIndex.value = index;
menuIndexshow.value = false
menuIndexshowsecond.value = false
menuIndexshowfourth.value = false;
menuIndexshowfifth.value = false
if (index === arrlist.value.length - 1) {
uni.navigateBack()
return
}
setTimeout(() => {
switch (index) {
case 0:
menuIndexshow.value = true
break;
case 1:
menuIndexshowsecond.value = true
nomesssageshow()
break;
case 2:
nomesssageshow()
break;
case 3:
menuIndexshowfourth.value = true
break;
case 4:
menuIndexshowfifth.value = true;
break;
case 5:
menuIndexshowfourth.value = true
break;
default:
}
}, 50)
};
const clientX = ref(0);
const clientY = ref(0);
const savename = ref("")
// 生命周期钩子
onMounted(() => {
//首次加载和跳转回来需要重新做个动画
setTimeout(() => {
changeMenu(menuIndex.value)
}, 50)
menuIndexshow.value = false
setTimeout(() => {
menuIndexshow.value = true
}, 50)
});
const nomesssageshow = () => {
messageopit.value = false;
setTimeout(() => {
messageopit.value = true;
}, 200)
}
const userInfo = ref({})
onShow(() => {
userInfo.value = uni.getStorageSync('userInfo');
})
const box = ref(null);
const boxStyle = ref({
transform: 'translate3d(-500px, -500px, 0px)',
});
function handmove(wh : number[]) {
// 直接更新 transform父组件可频繁调用
const nx = Number(wh[0]) || 0;
const ny = Number(wh[1]) || 0;
// console.log("----", nx, ny)
boxStyle.value = {
transform: `translate3d(${nx - 100}px, ${ny - 70}px, 0)`
};
}
const movelook = ref({
url: "",
title: ""
})
const startmoveit = ref(true)
function handsend(look : any) {
movelook.value.url = uni.getStorageSync('imagebase') + look.immediateFileFocus;
if (!movelook.value.url) {
movelook.value.url = `/static/index/sharelogo.png`
}
movelook.value.title = look.title;
startmoveit.value = false
}
//节流函数
function throttle(fn, delay) {
let lastExecutionTime = 0;
return function (...args) {
const now = Date.now();
if (now - lastExecutionTime >= delay) {
lastExecutionTime = now;
fn.apply(this, args);
}
};
}
const canTrigger = ref(true);
//全局获得x轴和y轴
const animation = uni.createAnimation({
duration: 0,
timingFunction: 'linear',
delay: 0
});
const animationData = ref({});
let ticking = false;
let handle = null;
const sendxy = ref([0,0])
const isblue = ref(false)
const getxyrel = (event) => {
event.preventDefault()
if(!startmoveit.value){
const touch = event.touches[0];
const a = touch.clientX.toFixed(2);
const b = touch.clientY.toFixed(2);
isblue.value = inArea(a,b)
handmove([a,b])
}
}
function inArea(x, y) {
return (
x >= 790 &&
x <= 1062 &&
y >= 147 &&
y <= 255
)
}
const getxy = throttle(getxyrel, 40);
const cleanall = (event) => {
// console.log("zzzz",event)
const touch = event.changedTouches[0];
const a = touch.clientX.toFixed(2);
const b = touch.clientY.toFixed(2);
sendxy.value = [a,b]
handmove([-200,-200])
startmoveit.value = true;
isblue.value = false
}
</script>
<style lang="less" scoped>
.backgroundContainer {
display: flex;
position: relative;
width: 100vw;
height: 100vh;
overflow: hidden;
z-index: 99;
background-color: #F2F3F8;
}
.nomessageclass {
width: 100vw;
transition: opacity 1s ease;
}
.box {
// pointer-events: none;
position: fixed;
left: 0;
top: 0;
width: 190rpx;
height: 140rpx;
border-radius: 20rpx;
background: #fff;
will-change: transform;
pointer-events: none;
z-index: 200;
border: 2rpx dashed #0089FE;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
.card-icon {
width: 55rpx;
height: 55rpx;
/* margin-bottom: 10rpx; */
}
.card-text {
margin-top: -10rpx;
color: #0089FE;
font-size: 26rpx;
}
.title-time-blue {
/* 你的定位与尺寸保持不变 */
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 107%;
height: 105%;
z-index: 10;
.blue-img {
width: 100%;
height: 100%;
}
}
}
</style>