123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- <template>
- <view class="cl-topbar" :class="[classList]" :style="{
- 'padding-top': top,
- 'background-color': backgroundColor,
- color,
- zIndex
- }">
- <view class="cl-topbar__content" :style="{
- color
- }">
- <slot>
- <view class="cl-topbar__text" @tap="tapText">
- <text class="cl-topbar__title" v-if="title">{{ title }}</text>
- <text class="cl-topbar__description" v-if="description">{{ description }}</text>
- </view>
- </slot>
- </view>
- <view class="cl-topbar__prepend" :style="{
- top
- }">
- <view class="cl-topbar__icon" v-if="showBack" @tap="back">
- <text class="cl-icon-arrow-left"></text>
- </view>
- <slot name="prepend"></slot>
- </view>
- <view class="cl-topbar__append" :style="{
- top
- }">
- <slot name="append"></slot>
- </view>
- </view>
- </template>
- <script>
- const {
- platform,
- statusBarHeight
- } = uni.getSystemInfoSync();
- /**
- * topbar 顶部导航
- * @description 自定义顶部导航,弥补原生的不足
- * @tutorial https://docs.cool-js.com/uni/components/nav/topbar.html
- * @property {String} title 绑定值
- * @property {String} description 描述
- * @property {Boolean} border 是否带有下边框,默认true
- * @property {Boolean} showBack 是否显示返回按钮
- * @property {String} backgroundColor 背景颜色,默认#fff
- * @property {String} color 字体颜色,默认#000
- * @property {String} backPath 返回路径
- * @property {Boolean} fixed 是否固定布局在顶部
- * @property {Boolean} isTop 是否添加顶部安全区域
- * @property {Boolean} sticky 是否吸顶
- * @property {Number} zIndex 层级
- * @example <cl-topbar title="COOL-UNI" />
- */
- export default {
- name: "cl-topbar",
- props: {
- // 标题
- title: String,
- // 描述
- description: String,
- // 是否带有下边框
- border: {
- type: Boolean,
- default: false
- },
- // 是否显示返回按钮
- showBack: {
- type: Boolean,
- default: true
- },
- // 背景颜色
- backgroundColor: {
- type: String,
- default: "#fff"
- },
- // 字体颜色
- color: {
- type: String,
- default: "#000"
- },
- // 返回路径
- backPath: String,
- // 是否固定布局在顶部
- fixed: Boolean,
- // 是否添加顶部安全区域
- isTop: {
- type: Boolean,
- default: true
- },
- sticky: Boolean,
- zIndex: {
- type: Number,
- default: 9
- }
- },
- computed: {
- top() {
- console.log(this.isTop,'----------------',statusBarHeight,platform === "android");
- return this.isTop ?
- platform === "android" ?
- `${statusBarHeight}px` :
- "env(safe-area-inset-top)" :
- 0;
- },
- classList() {
- let list = [];
- if (this.border) {
- list.push("is-border");
- }
- if (this.fixed) {
- list.push("is-fixed");
- }
- if (this.sticky) {
- list.push("is-sticky");
- }
- return list.join(" ");
- }
- },
- methods: {
- back() {
- let pages = getCurrentPages();
- if (pages.length == 1) {
- // H5页面刷新或者分享页时,页面栈长度只有1。此时逐个验证返回的页面路径
- uni.reLaunch({
- url: this.backPath || this.$cl.homePage || this.$store.state.app.info.pages.home
- });
- } else {
- uni.navigateBack({
- delta: 1
- });
- }
- },
- tapText(e) {
- this.$emit("click", e);
- }
- }
- };
- </script>
|