city-casereport/miniprogram_npm/tdesign-miniprogram/navbar/navbar.js
2023-12-06 14:22:42 +08:00

120 lines
4.5 KiB
JavaScript

var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
import { SuperComponent, wxComponent } from '../common/src/index';
import config from '../common/config';
import props from './props';
const { prefix } = config;
const name = `${prefix}-navbar`;
let Navbar = class Navbar extends SuperComponent {
constructor() {
super(...arguments);
this.externalClasses = [
`${prefix}-class`,
`${prefix}-class-title`,
`${prefix}-class-left`,
`${prefix}-class-center`,
`${prefix}-class-left-icon`,
`${prefix}-class-home-icon`,
`${prefix}-class-capsule`,
`${prefix}-class-nav-btn`,
];
this.timer = null;
this.options = {
addGlobalClass: true,
multipleSlots: true,
};
this.properties = props;
this.observers = {
visible(visible) {
const { animation } = this.properties;
const visibleClass = `${name}${visible ? '--visible' : '--hide'}`;
this.setData({
visibleClass: `${visibleClass}${animation ? '-animation' : ''}`,
});
if (this.timer) {
clearTimeout(this.timer);
}
if (animation) {
this.timer = setTimeout(() => {
this.setData({
visibleClass,
});
}, 300);
}
},
'title,titleMaxLength'() {
const { title } = this.properties;
const titleMaxLength = this.properties.titleMaxLength || Number.MAX_SAFE_INTEGER;
let temp = title.slice(0, titleMaxLength);
if (titleMaxLength < title.length)
temp += '...';
this.setData({
showTitle: temp,
});
},
};
this.data = {
prefix,
classPrefix: name,
boxStyle: '',
showTitle: '',
};
this.methods = {
goBack() {
const { delta } = this.data;
const that = this;
this.triggerEvent('go-back');
if (delta > 0) {
wx.navigateBack({
delta,
fail(e) {
that.triggerEvent('fail', e);
},
complete(e) {
that.triggerEvent('complete', e);
},
success(e) {
that.triggerEvent('success', e);
},
});
}
},
};
}
attached() {
let rect = null;
if (wx.getMenuButtonBoundingClientRect) {
rect = wx.getMenuButtonBoundingClientRect();
}
if (!rect)
return;
wx.getSystemInfo({
success: (res) => {
const boxStyleList = [];
const { statusBarHeight } = wx.getSystemInfoSync();
boxStyleList.push(`--td-navbar-padding-top:${statusBarHeight}px`);
if (rect && (res === null || res === void 0 ? void 0 : res.windowWidth)) {
boxStyleList.push(`--td-navbar-right:${res.windowWidth - rect.left}px`);
}
boxStyleList.push(`--td-navbar-capsule-height: ${rect.height}px`);
boxStyleList.push(`--td-navbar-capsule-width: ${rect.width}px`);
boxStyleList.push(`--td-navbar-height: ${(rect.top - statusBarHeight) * 2 + rect.height}px`);
this.setData({
boxStyle: `${boxStyleList.join('; ')}`,
});
},
fail: (err) => {
console.error('navbar 获取系统信息失败', err);
},
});
}
};
Navbar = __decorate([
wxComponent()
], Navbar);
export default Navbar;