更新大理市民卡app
diff --git a/uview-ui/components/u-badge/u-badge.vue b/uview-ui/components/u-badge/u-badge.vue
new file mode 100644
index 0000000..e85b133
--- /dev/null
+++ b/uview-ui/components/u-badge/u-badge.vue
@@ -0,0 +1,216 @@
+<template>
+ <view v-if="show" class="u-badge" :class="[
+ isDot ? 'u-badge-dot' : '',
+ size == 'mini' ? 'u-badge-mini' : '',
+ type ? 'u-badge--bg--' + type : ''
+ ]" :style="[{
+ top: offset[0] + 'rpx',
+ right: offset[1] + 'rpx',
+ fontSize: fontSize + 'rpx',
+ position: absolute ? 'absolute' : 'static',
+ color: color,
+ backgroundColor: bgColor
+ }, boxStyle]"
+ >
+ {{showText}}
+ </view>
+</template>
+
+<script>
+ /**
+ * badge 角标
+ * @description 本组件一般用于展示头像的地方,如个人中心,或者评论列表页的用户头像展示等场所。
+ * @tutorial https://www.uviewui.com/components/badge.html
+ * @property {String Number} count 展示的数字,大于 overflowCount 时显示为 ${overflowCount}+,为0且show-zero为false时隐藏
+ * @property {Boolean} is-dot 不展示数字,只有一个小点(默认false)
+ * @property {Boolean} absolute 组件是否绝对定位,为true时,offset参数才有效(默认true)
+ * @property {String Number} overflow-count 展示封顶的数字值(默认99)
+ * @property {String} type 使用预设的背景颜色(默认error)
+ * @property {Boolean} show-zero 当数值为 0 时,是否展示 Badge(默认false)
+ * @property {String} size Badge的尺寸,设为mini会得到小一号的Badge(默认default)
+ * @property {Array} offset 设置badge的位置偏移,格式为 [x, y],也即设置的为top和right的值,单位rpx。absolute为true时有效(默认[20, 20])
+ * @property {String} color 字体颜色(默认#ffffff)
+ * @property {String} bgColor 背景颜色,优先级比type高,如设置,type参数会失效
+ * @property {Boolean} is-center 组件中心点是否和父组件右上角重合,优先级比offset高,如设置,offset参数会失效(默认false)
+ * @example <u-badge type="error" count="7"></u-badge>
+ */
+ export default {
+ name: 'u-badge',
+ props: {
+ // primary,warning,success,error,info
+ type: {
+ type: String,
+ default: 'error'
+ },
+ // default, mini
+ size: {
+ type: String,
+ default: 'default'
+ },
+ //是否是圆点
+ isDot: {
+ type: Boolean,
+ default: false
+ },
+ // 显示的数值内容
+ count: {
+ type: [Number, String],
+ },
+ // 展示封顶的数字值
+ overflowCount: {
+ type: Number,
+ default: 99
+ },
+ // 当数值为 0 时,是否展示 Badge
+ showZero: {
+ type: Boolean,
+ default: false
+ },
+ // 位置偏移
+ offset: {
+ type: Array,
+ default: () => {
+ return [20, 20]
+ }
+ },
+ // 是否开启绝对定位,开启了offset才会起作用
+ absolute: {
+ type: Boolean,
+ default: true
+ },
+ // 字体大小
+ fontSize: {
+ type: [String, Number],
+ default: '24'
+ },
+ // 字体演示
+ color: {
+ type: String,
+ default: '#ffffff'
+ },
+ // badge的背景颜色
+ bgColor: {
+ type: String,
+ default: ''
+ },
+ // 是否让badge组件的中心点和父组件右上角重合,配置的话,offset将会失效
+ isCenter: {
+ type: Boolean,
+ default: false
+ }
+ },
+ computed: {
+ // 是否将badge中心与父组件右上角重合
+ boxStyle() {
+ let style = {};
+ if(this.isCenter) {
+ style.top = 0;
+ style.right = 0;
+ // Y轴-50%,意味着badge向上移动了badge自身高度一半,X轴50%,意味着向右移动了自身宽度一半
+ style.transform = "translateY(-50%) translateX(50%)";
+ } else {
+ style.top = this.offset[0] + 'rpx';
+ style.right = this.offset[1] + 'rpx';
+ style.transform = "translateY(0) translateX(0)";
+ }
+ // 如果尺寸为mini,后接上scal()
+ if(this.size == 'mini') {
+ style.transform = style.transform + " scale(0.8)";
+ }
+ return style;
+ },
+ // isDot类型时,不显示文字
+ showText() {
+ if(this.isDot) return '';
+ else {
+ if(this.count > this.overflowCount) return `${this.overflowCount}+`;
+ else return this.count;
+ }
+ },
+ // 是否显示组件
+ show() {
+ // 如果count的值为0,并且showZero设置为false,不显示组件
+ if(this.count == 0 && this.showZero == false) return false;
+ else return true;
+ }
+ }
+ }
+</script>
+
+<style lang="scss" scoped>
+ @import "../../libs/css/style.components.scss";
+
+ .u-badge {
+ /* #ifndef APP-NVUE */
+ display: inline-flex;
+ /* #endif */
+ justify-content: center;
+ align-items: center;
+ line-height: 24rpx;
+ padding: 4rpx 8rpx;
+ border-radius: 100rpx;
+ z-index: 9;
+
+ &--bg--primary {
+ background-color: $u-type-primary;
+ }
+
+ &--bg--error {
+ background-color: $u-type-error;
+ }
+
+ &--bg--success {
+ background-color: $u-type-success;
+ }
+
+ &--bg--info {
+ background-color: $u-type-info;
+ }
+
+ &--bg--warning {
+ background-color: $u-type-warning;
+ }
+ }
+
+ .u-badge-dot {
+ height: 16rpx;
+ width: 16rpx;
+ border-radius: 100rpx;
+ line-height: 1;
+ }
+
+ .u-badge-mini {
+ transform: scale(0.8);
+ transform-origin: center center;
+ }
+
+ // .u-primary {
+ // background: $u-type-primary;
+ // color: #fff;
+ // }
+
+ // .u-error {
+ // background: $u-type-error;
+ // color: #fff;
+ // }
+
+ // .u-warning {
+ // background: $u-type-warning;
+ // color: #fff;
+ // }
+
+ // .u-success {
+ // background: $u-type-success;
+ // color: #fff;
+ // }
+
+ // .u-black {
+ // background: #585858;
+ // color: #fff;
+ // }
+
+ .u-info {
+ background-color: $u-type-info;
+ color: #fff;
+ }
+</style>
\ No newline at end of file