更新大理市民卡app
diff --git a/uview-ui/components/u-top-tips/u-top-tips.vue b/uview-ui/components/u-top-tips/u-top-tips.vue
new file mode 100644
index 0000000..98d58df
--- /dev/null
+++ b/uview-ui/components/u-top-tips/u-top-tips.vue
@@ -0,0 +1,121 @@
+<template>
+	<view class="u-tips" :class="['u-' + type, isShow ? 'u-tip-show' : '']" :style="{
+		top: navbarHeight + 'px',
+		zIndex: uZIndex
+	}">{{ title }}</view>
+</template>
+
+<script>
+	/**
+	 * topTips 顶部提示
+	 * @description 该组件一般用于页面顶部向下滑出一个提示,尔后自动收起的场景。
+	 * @tutorial https://www.uviewui.com/components/topTips.html
+	 * @property {String Number} navbar-height 导航栏高度(包含状态栏高度在内),单位PX
+	 * @property {String Number} z-index z-index值(默认975)
+	 * @example <u-top-tips ref="uTips"></u-top-tips>
+	 */
+	export default {
+		name: "u-top-tips",
+		props: {
+			// 导航栏高度,用于提示的初始化
+			navbarHeight: {
+				type: [Number, String],
+				// #ifndef H5
+				default: 0,
+				// #endif
+				// #ifdef H5
+				default: 44,
+				// #endif
+			},
+			// z-index值
+			zIndex: {
+				type: [Number, String],
+				default: ''
+			}
+		},
+		data() {
+			return {
+				timer: null, // 定时器
+				isShow: false, // 是否显示消息组件
+				title: '', // 组件中显示的消息内容
+				type: 'primary', // 消息的类型(颜色不同),primary,success,error,warning,info
+				duration: 2000, // 组件显示的时间,单位为毫秒
+			};
+		},
+		computed: {
+			uZIndex() {
+				return this.zIndex ? this.zIndex : this.$u.zIndex.topTips;
+			}
+		},
+		methods: {
+			show(config = {}) {
+				// 先清除定时器(可能是上一次定义的,需要清除了再开始新的)
+				clearTimeout(this.timer);
+				// 时间,内容,类型主题(type)等参数
+				if (config.duration) this.duration = config.duration;
+				if (config.type) this.type = config.type;
+				this.title = config.title;
+				this.isShow = true;
+				// 倒计时
+				this.timer = setTimeout(() => {
+					this.isShow = false;
+					clearTimeout(this.timer);
+					this.timer = null;
+				}, this.duration);
+			}
+		}
+	};
+</script>
+
+<style lang="scss" scoped>
+	@import "../../libs/css/style.components.scss";
+	
+	view {
+		box-sizing: border-box;
+	}
+
+	// 顶部弹出类型样式
+	.u-tips {
+		width: 100%;
+		position: fixed;
+		z-index: 1;
+		padding: 20rpx 30rpx;
+		color: #FFFFFF;
+		font-size: 28rpx;
+		left: 0;
+		right: 0;
+		@include vue-flex;
+		align-items: center;
+		justify-content: center;
+		opacity: 0;
+		// 此处为最核心点,translateY(-100%)意味着将其从Y轴隐藏(隐藏到顶部(h5)或者说导航栏(app)下面)
+		transform: translateY(-100%);
+		transition: all 0.35s linear;
+	}
+
+	.u-tip-show {
+		transform: translateY(0);
+		opacity: 1;
+		z-index: 99;
+	}
+
+	.u-primary {
+		background: $u-type-primary;
+	}
+
+	.u-success {
+		background: $u-type-success;
+	}
+
+	.u-warning {
+		background: $u-type-warning;
+	}
+
+	.u-error {
+		background: $u-type-error;
+	}
+
+	.u-info {
+		background: $u-type-info;
+	}
+</style>