新首页整完了

This commit is contained in:
Teng 2025-12-18 10:23:55 +08:00
parent 1cfc1c5d8b
commit 744bba860d
15 changed files with 696 additions and 8 deletions

View File

@ -13,7 +13,7 @@
<view class="title">退出登录</view>
<view class="card-font">
确定要注销账户
确定要退出登录
</view>
</view>
</view>

View File

@ -7,6 +7,14 @@
"navigationStyle": "custom"
}
},
//
{
"path": "pages/login/index",
"style": {
"navigationStyle": "custom"
}
},
// nvuenvue
{

308
pages/login/index.vue Normal file
View File

@ -0,0 +1,308 @@
<template>
<view class="all">
<view class="all-title">
<view class="rentou">
<view class="rentou-left">
<image class="rentou-left-img" src="/static/shouye/old.png" />
</view>
<view class="rentou-right">
{{ uni.getStorageSync('realname') }}
</view>
</view>
<view class="lingdang">
<image class="lingdang-img" src="/static/shouye/lingdang.png" />
<view class="hongdian"></view>
</view>
</view>
<view class="all-menu">
<view v-for="(item,index) in menuarray" :key="index" @click="clickleftmenu(index)">
<view class="menu-one" :style="leftarraytarget===index?{backgroundColor:`#fff`}:{}">
<image class="menu-one-img" :src="`/static/shouye/menu${index}.png`" />
</view>
</view>
</view>
<exit :show="exitshow" @close="exitshow=false" />
<view class="right-content">
<view class="yanfazhong" v-show="!leftarraytarget">
研发中...
</view>
<view class="yanfazhong" v-show="leftarraytarget==3">
研发中...
</view>
<view class="componentall" v-show="leftarraytarget==4">
<menusettings :isShow="leftarraytarget==4" />
</view>
<view class="componentall" v-show="leftarraytarget==1 || leftarraytarget==2">
<scroll-view scroll-y class="componentall" >
<!-- 阻止scroll对容器样式的影响 {{item.nuName}}-->
<view class="card-father">
<view class="card"
:style="{border: cardtarget === index? '4rpx dashed #1083F8': '4rpx solid transparent',backgroundColor:cardtarget === index?`#F9FCFF`:``}"
v-for="(item,index) in cardarray" :key="index" @click="clickcard(index)">
<view class="card-title">
{{ item.areaFlag=="1"?`护理单元`:`库房` }}
</view>
<view style="display: flex;margin-top: 5%;">
<view style="width: 50%;">
<view style="color: #888888;">
机构名称
</view>
<view class="card-contect">
{{ item.nuName }}
</view>
</view>
<view style="width: 50%;" v-if="item.areaFlag==`1`">
<view style="color: #888888;">
状态
</view>
<view class="card-contect">
{{ item.elderId ? `已入驻`:`未入驻` }}
</view>
</view>
</view>
<view style="display: flex;margin-top: 5%;">
<view style="width: 50%;">
<view style="color: #888888;">
摄影设备
</view>
<view class="card-contect">
{{ item.cameraInfo? `运行中`:`离线` }}
</view>
</view>
<view style="width: 50%;" v-if="item.areaFlag==`1`">
<view style="color: #888888;">
老人姓名
</view>
<view class="card-contect">
{{ item.elderInfo?.name }}
</view>
</view>
<view style="width: 50%;" v-if="item.areaFlag==`3`">
<view style="color: #888888;">
库管姓名
</view>
<view class="card-contect">
{{ item.fzr }}
</view>
</view>
</view>
</view>
</view>
</scroll-view>
</view>
</view>
</view>
</template>
<script setup lang="ts">
import { ref, onMounted, onBeforeUnmount, computed, nextTick, reactive } from 'vue';
import { onShow, onLoad, onHide, onBackPress } from "@dcloudio/uni-app"
import exit from "@/component/public/exit.vue"
import menusettings from '@/pages/watch/settings/menusettings.vue'
import { queryPadPageList } from '@/pages/watch/api/lunpan.js'
const menuarray = ref(["", "", "", "", "", ""])
const leftarraytarget = ref(0);
//
onBackPress(() => {
return true; //
})
const leftMenuArray = ref([])
//
onShow(() => {
queryPadPageList().then((res => {
leftMenuArray.value = res.result.records;
}))
});
const filteredMenu = (index:number) => {
return leftMenuArray.value.filter(item => Number(item.areaFlag) - 1 == index);
}
const clickcard = (index:number) => {
if(cardtarget.value === index){
jumptopage(index)
}else{
cardtarget.value = index;
}
}
const jumptopage = (index:number) => {
uni.setStorageSync('nuId', cardarray.value[index].nuId);
uni.setStorageSync('nuName', cardarray.value[index].nuName);
uni.setStorageSync('customerId', cardarray.value[index].elderInfo ? cardarray.value[index].elderInfo?.id : null);
uni.setStorageSync('NUall', cardarray.value[index]);
if (leftarraytarget.value===1) {
uni.navigateTo({
url: '/pages/NursingNew/index'
})
} else if (leftarraytarget.value===2) {
uni.navigateTo({
url: '/pages/Warehouse/warehome',
})
}
}
const exitshow = ref(false);
const cardarray = ref([])
const cardtarget = ref(-1);
const clickleftmenu = (index : number) => {
if (index === 5) {
exitshow.value = true;
return
}
cardtarget.value=-1
if(index===1){
cardarray.value = filteredMenu(0)
console.log("??11111111",cardarray.value)
}else if(index===2){
cardarray.value = filteredMenu(2)
console.log("??11111111",cardarray.value)
}
leftarraytarget.value = index;
}
</script>
<style scoped lang="less">
.all {
width: 100%;
height: 100vh;
background-color: #eff0f4;
.all-title {
width: 100%;
height: 13vh;
padding: 0 3vw;
display: flex;
justify-content: space-between;
align-items: flex-end;
.rentou {
height: 7vh;
border-radius: 3vw;
background-color: #E3E4E8;
display: flex;
align-items: center;
font-size: 28rpx;
.rentou-left {
height: 7vh;
width: 7vh;
border-radius: 50%;
background-color: #D6D7DF;
margin-right: 0.5vw;
position: relative;
.rentou-left-img {
position: absolute;
left: 0vw;
top: 0.8vw;
height: 7vh;
width: 7vh;
}
}
.rentou-right {
margin-right: 1vw;
}
}
.lingdang {
width: 5vh;
height: 5vh;
border-radius: 1.5vh;
background-color: #fff;
display: flex;
justify-content: center;
align-items: center;
margin-bottom: 0.5vh;
position: relative;
.lingdang-img {
width: 4vh;
height: 4vh;
margin-left: 0.2vh;
}
}
}
.right-content {
width: 88%;
margin-left: 10%;
height: 86vh;
display: flex;
justify-content: center;
align-items: center;
.yanfazhong {
font-size: 40rpx;
margin-top: -10vh;
}
}
}
.hongdian {
position: absolute;
right: 0.6vh;
top: 0.6vh;
width: 1vh;
height: 1vh;
background-color: #FF5757;
border-radius: 50%;
}
.all-menu {
position: fixed;
left: 3vw;
top: 18vh;
width: 5vw;
.menu-one {
display: flex;
align-items: center;
justify-content: center;
height: 3.8vw;
width: 3.8vw;
border-radius: 50%;
margin-top: 1.2vw;
.menu-one-img {
height: 2.3vw;
width: 2.3vw;
margin-left: 0.1vw;
}
}
}
.componentall{
width: 100%;
height: 100%;
// background-color: red;
}
.card-father{
width: 100%;
height: 100%;
display: flex;
flex-wrap: wrap;
.card{
width: 32%;
margin-left: 1%;
height: 32%;
margin-top: 1%;
background-color: #fff;
border-radius: 23rpx;
// padding: 5vw;
padding: 1.5vw 2vw;
.card-title{
font-size: 35rpx;
font-weight: 600;
}
.card-contect{
font-size: 32rpx;
}
}
}
</style>

View File

@ -259,7 +259,7 @@
if (!jumpFirst.value) {
if (loading.value === 2) {
setTimeout(() => {
jumpTo(`/pages/watch/index`)
jumpTo(`/pages/login/index`)
}, 500)
} else {
loading.value++
@ -278,7 +278,7 @@
selectserve.value = true;
} else {
setTimeout(() => {
jumpTo(`/pages/watch/index`)
jumpTo(`/pages/login/index`)
}, 500)
}
}
@ -287,7 +287,7 @@
uni.setStorageSync('orgListName', item.departName);
uni.setStorageSync('orgListCode', item.orgCode);
setTimeout(() => {
jumpTo(`/pages/watch/index`)
jumpTo(`/pages/login/index`)
}, 500)
}
@ -328,7 +328,7 @@
if (uni.getStorageSync('token') && uni.getStorageSync('token') !== 1) {
if (loading.value === 2) {
setTimeout(() => {
jumpTo(`/pages/watch/index`)
jumpTo(`/pages/login/index`)
}, 500)
} else {
loading.value++
@ -358,7 +358,7 @@
monitorModule.cloudLoginIn(loginfo, (r) => {
if (loading.value === 2) {
setTimeout(() => {
jumpTo(`/pages/watch/index`)
jumpTo(`/pages/login/index`)
}, 500)
} else {
loading.value++

View File

@ -0,0 +1,372 @@
<template>
<scroll-view scroll-y class="index-content-other" :style="transition?{opacity: `1`}:{opacity: `0`}">
<view class="array-father">
<view v-for="(item,index) in iconsArray.slice(0,3)" :key="index" class="item" @click="jumpToTarget(index)">
<view class="left-item">
<image class="left-icon" :src="`/static/index/settings/${index}.png`" />
<view class="left-font">
{{item}}
</view>
</view>
<view class="right-item">
<image class="right-icon" :src="`/static/index/settings/00.png`" />
</view>
</view>
</view>
<view class="array-father">
<view v-for="(item,index) in iconsArray.slice(3,5)" :key="index" class="item"
@click="jumpToTarget(index+3)">
<view class="left-item">
<image class="left-icon" :src="`/static/index/settings/${index+3}.png`" />
<view class="left-font">
{{item}}
</view>
</view>
<view class="right-item">
<image class="right-icon" :src="`/static/index/settings/00.png`" />
</view>
</view>
</view>
<view class="array-father">
<view v-for="(item,index) in iconsArray.slice(5,8)" :key="index" class="item"
@click="jumpToTarget(index+5)">
<view class="left-item">
<image class="left-icon" :src="`/static/index/settings/${index+5}.png`" />
<view class="left-font">
{{item}}
</view>
</view>
<view class="right-item">
<image class="right-icon" :src="`/static/index/settings/00.png`" />
</view>
</view>
</view>
<!-- <view class="bottom-button" @click="exitshow=true">
注销登录
</view> -->
<view class="text-center">
<view>{{ uni.getStorageSync('orgListName') }}</view>
</view>
<!-- <exit :show="exitshow" @close="exitshow=false" /> -->
<reset :show="resetshow" @close="resetshow=false" />
<zy-update ref="zyupgrade" :noticeflag="true" theme="blue" :h5preview="false" oldversion="1.0.0"
:appstoreflag="true" :autocheckupdate="true" @showupdateTips="noNeed"></zy-update>
<!-- 弹出层 -->
<view v-if="openany" class="popup-any" :style="animation?{opacity:1}:{opacity:0}">
<view class="mask" @touchmove.prevent @click="openany=false"></view>
<view class="box-any" @touchmove.prevent>
<view class="title-left">
<!-- <image class="back-img" src="/static/left.png" @click="openany=false"></image> -->
<view v-if="!opentype" class="back-font">NU护理单元隐私信息保护政策</view>
<view v-if="opentype" class="back-font">NU护理单元用户服务协议</view>
</view>
<twoseven v-if="!opentype" />
<oneseven v-if="opentype" />
</view>
</view>
<!-- </view> -->
</scroll-view>
<view class="bg-mask" v-if="selectserve">
<view @click.stop class="white-select">
<view class="big-font">
请选择您的机构
</view>
<view class="">
<view class="small-father">
<view class="small-select"
:style="serverUrl==item.serverUrl?{color:`#0083FF`,borderColor:`#0083FF`}:{}"
v-for="(item,index) in allserve" @click="changeServe(item)">
{{ item.departName }}
</view>
</view>
</view>
</view>
</view>
</template>
<script setup lang="ts">
import { ref, onMounted, watch, nextTick } from 'vue'
import exit from "@/component/public/exit.vue"
import reset from "@/component/public/reset.vue"
import ZyUpdate from '@/component/zy-upgrade/zy-upgrade.vue'
import oneseven from '@/pages/login/oneseven.vue'
import twoseven from '@/pages/login/twoseven.vue'
const zyupgrade = ref(null);
const issay = ref(false)
const openany = ref(false);
const opentype = ref(false);
// const exitshow = ref(false);
const resetshow = ref(false);
const emit = defineEmits(['jump'])
// const props = defineProps({ isShow: { type: Boolean, required: true } })
const iconsArray = ref(["雷达扫描", "扫码添加", "手动录入", "修改密码", "切换机构", "检查更新", "用户协议", "隐私政策"])
const transition = ref(true)
const uuid = ref("")
const selectserve = ref(false)
const allserve = ref(uni.getStorageSync('orgList'))
const changeServe = (item : any) => {
uni.setStorageSync('serverUrl', item.serverUrl);
uni.setStorageSync('orgListName', item.departName);
uni.setStorageSync('orgListCode', item.orgCode);
uni.showToast({
title: '切换机构成功',
icon: 'success', //
duration: 2000 //
});
selectserve.value = false;
// setTimeout(() => {
// jumpTo(`/pages/watch/index`)
// }, 500)
}
const props = defineProps({
isShow: {
type: Boolean,
required: true,
},
});
//
watch(
() => props.isShow,
(newVal, oldVal) => {
if (!oldVal && newVal) {
transition.value = false
setTimeout(() => (transition.value = true), 50)
}
}
)
const animation = ref(false);
const serverUrl = ref("")
const jumpToTarget = (index : number) => {
switch (index) {
case 0:
uni.navigateTo({
url: '/pages/watch/settings/leida'
})
break
case 1:
uni.navigateTo({
url: '/pages/watch/settings/saoma'
})
break
case 2:
uni.navigateTo({
url: '/pages/watch/settings/input'
})
break
case 3:
resetshow.value = true
break
case 4:
if (allserve.value.length == 1) {
uni.showToast({
title: `您目前只绑定了一个机构。如需切换,请先申请新的机构。`,
icon: 'none', //
duration: 2000 //
});
} else {
serverUrl.value = uni.getStorageSync('serverUrl')
selectserve.value = true;
// console.log("!!!!", allserve.value)
}
break
case 5:
issay.value = true;
zyupgrade.value?.check_update()
break
case 6:
openany.value = true;
opentype.value = true;
animation.value = false;
setTimeout(() => {
animation.value = true;
}, 50)
break
case 7:
openany.value = true;
opentype.value = false;
animation.value = false;
setTimeout(() => {
animation.value = true;
}, 50)
break
}
}
const noNeed = () => {
if (issay.value) {
uni.showToast({
title: '已经是最新版了',
icon: 'none', //
duration: 2000 //
});
}
}
const goback = () => {
uni.navigateBack()
}
</script>
<style scoped lang="less">
.index-content-other {
width: 100%;
height: 100%;
transition: opacity 1s ease;
position: relative;
background-color: #EFF0F4;
}
.item {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
height: 130rpx;
.left-item {
display: flex;
align-items: center;
margin-left: 20rpx;
.left-icon {
margin: 0 20rpx;
width: 40rpx;
height: 40rpx;
}
.left-item {}
}
.right-item {
display: flex;
align-items: center;
margin-right: 50rpx;
.right-icon {
// margin: 0 20rpx;
width: 15rpx;
height: 30rpx;
}
}
}
.array-father {
background-color: rgba(255, 255, 255, 0.6);
width: 93%;
margin-left: 2%;
border-radius: 30rpx;
margin-top: 30rpx;
}
.popup-any {
position: fixed;
inset: 0;
z-index: 999;
/* 初始透明度 */
opacity: 0;
/* 播放动画:名称 fadeIn时长 0.5s,缓动函数 ease保持最后状态 */
transition: opacity 0.5s ease;
backdrop-filter: blur(1rpx);
background-color: rgba(236, 237, 241, 0.4);
/* 添加毛玻璃效果 */
z-index: 999;
}
.mask {
position: absolute;
inset: 0;
}
.box-any {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 1000rpx;
height: 1300rpx;
background: #fff;
border-radius: 50rpx;
overflow: hidden;
display: flex;
flex-direction: column;
padding: 65rpx 60rpx;
}
.title-left {
display: flex;
align-items: center;
justify-content: center;
.back-font {
font-size: 35rpx;
font-weight: 600;
}
}
.text-center {
margin-top: 40rpx;
height: 60rpx;
width: 100%;
display: flex;
justify-content: center;
}
.bg-mask {
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
background: rgba(0, 0, 0, 0.3);
backdrop-filter: blur(5rpx);
z-index: 998;
display: flex;
justify-content: center;
align-items: center;
.white-select {
display: flex;
justify-content: center;
align-items: center;
background-color: #fff;
width: 1200rpx;
height: 1200rpx;
border-radius: 30rpx;
flex-direction: column;
.big-font {
font-size: 35rpx;
}
.small-father {
display: flex;
align-items: center;
flex-wrap: wrap;
flex-direction: column;
}
.small-select {
display: flex;
justify-content: center;
align-items: center;
width: 600rpx;
height: 200rpx;
margin-top: 50rpx;
padding: 30rpx;
border-radius: 30rpx;
border: 2rpx solid;
font-size: 32rpx;
}
}
}
</style>

BIN
static/shouye/lingdang.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

BIN
static/shouye/menu0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

BIN
static/shouye/menu1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

BIN
static/shouye/menu2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

BIN
static/shouye/menu3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

BIN
static/shouye/menu4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

BIN
static/shouye/menu5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

BIN
static/shouye/old.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

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

@ -577,7 +577,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
};