This commit is contained in:
cwt
2026-07-24 11:56:12 +08:00
parent 81dc1ffaaa
commit faeb976e04
62 changed files with 21716 additions and 73 deletions
+33
View File
@@ -0,0 +1,33 @@
<template>
<view>
<view class="u-flex-col u-row-center u-col-center u-p-t-100">
<image :src="icon" class="u-w-160 u-h-160"></image>
<view class="u-font-24 u-color-181818 u-m-t-20">{{text}}</view>
</view>
</view>
</template>
<script>
export default {
name: "empty",
props: {
text: {
type: String,
default: '暂无记录'
},
icon: {
type: String,
default: '/static/image/icon27.png'
}
},
data() {
return {
};
}
}
</script>
<style>
</style>
+193
View File
@@ -0,0 +1,193 @@
<template>
<view class="" :style="{height:doginfo.safeAreaInsets.top + doginfo.navbar+'px',backgroundColor:bgcolor,}">
<view class="navbarBox"
:style="{height:doginfo.safeAreaInsets.top + doginfo.navbar+'px',backgroundColor:bgcolor}">
<view :style="{height:doginfo.safeAreaInsets.top +'px'}"></view>
<!-- #ifdef MP-WEIXIN -->
<view class="Topnavbar">
<slot name="left" v-if="backopen">
<u-icon @click="goBack()" :name="backname" :color="backcolor" size="20"></u-icon>
</slot>
<slot name="center">
<view class="title" :style="{marginLeft: rightwidth - doginfo.qiudata.width + 'px',color:backcolor}"
v-if="title">
{{title}}
</view>
</slot>
<view class="navbar-right-slot">
<slot name="right">
<!-- 保留占位,确保元素始终存在 -->
</slot>
<view :style="{width:doginfo.qiudata.width + 5 +'px',height:'40px'}"></view>
</view>
</view>
<!-- #endif -->
<!-- #ifndef MP-WEIXIN -->
<view class="Topnavbar">
<slot name="left" v-if="backopen">
<u-icon @click="goBack()" :name="backname" :color="backcolor" size="20"></u-icon>
</slot>
<slot name="center">
<view class="title" :style="{marginLeft:rightwidth+'px',color:backcolor}" v-if="title">{{title}}
</view>
</slot>
<view class="navbar-right-slot">
<slot name="right">
<!-- 保留占位,确保元素始终存在 -->
<view style="width: 38rpx;height: 44rpx;"></view>
</slot>
</view>
</view>
<!-- #endif -->
</view>
</view>
</template>
<script>
export default {
name: "navbar",
props: {
title: {
type: String,
default: ""
},
bgcolor: {
type: String,
default: "transparent"
},
backcolor: {
type: String,
default: "#111111"
},
backname: {
type: String,
default: "arrow-left"
},
backopen: {
type: Boolean,
default: true
}
},
watch: {
title: {
handler(newVal) {
console.log(newVal);
}
},
},
data() {
return {
doginfo: getApp().globalData.doginfo,
rightwidth: getApp().globalData.doginfo.osName == 'ios' ? 87 : 95 // 新增:存储 right slot 尺寸
};
},
created() {
// 微信小程序:同步预计算 rightwidth,避免标题闪烁
if (this.doginfo.type === 'wx') {
const cw = this.doginfo.qiudata.width;
// 右侧只有胶囊占位时:占位宽 = cw+5,rightwidth = (cw+5) + cw/2
this.rightwidth = (cw + 5) + (cw / 2);
}
},
mounted() {
this.$nextTick(() => {
this.getRightSlotSize();
});
},
methods: {
goBack() {
let pages = getCurrentPages();
let curRoute = pages[pages.length - 1].route;
if (pages.length == 1) {
uni.switchTab({
url: '/pages/home/home'
})
} else {
uni.navigateBack({
delta: 1
});
}
},
getRightSlotSize(retryCount = 0) {
const maxRetries = 3;
uni.createSelectorQuery().in(this).select('.navbar-right-slot').boundingClientRect((rect) => {
if (rect && rect.width > 0 && rect.height > 0) {
if (this.doginfo.type === 'wx') {
if (rect.width == this.doginfo.qiudata.width + 5) {
this.rightwidth = rect.width + (this.doginfo.qiudata.width / 2)
return
} else {
this.rightwidth = rect.width - 20
}
} else {
this.rightwidth = rect.width - 20
}
} else {
// 如果还没达到最大重试次数,延迟后重试
if (retryCount < maxRetries) {
setTimeout(() => {
this.getRightSlotSize(retryCount + 1);
}, 300); // 减少重试间隔
}
}
}).exec();
}
}
}
</script>
<style lang="scss" scoped>
.navbarBox {
position: fixed;
left: 0;
top: 0;
background-color: #fff;
z-index: 9999;
}
// #ifdef MP-WEIXIN
.Topnavbar {
height: 40px;
padding: 0 7px;
width: 100vw;
display: flex;
justify-content: space-between;
align-items: center;
box-sizing: border-box;
flex-direction: row;
.title {
font-weight: 500;
font-size: 30rpx;
color: #111111;
}
}
.navbar-right-slot {
display: flex;
align-items: center;
}
// #endif
// #ifndef MP-WEIXIN
.Topnavbar {
height: 44px;
padding: 0 12px;
width: 100vw;
display: flex;
justify-content: space-between;
align-items: center;
box-sizing: border-box;
flex-direction: row;
.title {
font-weight: 500;
font-size: 30rpx;
color: #111111;
line-height: 36rpx;
}
}
// #endif
</style>