4 changed files with 227 additions and 5 deletions
@ -0,0 +1,32 @@ |
|||
<template> |
|||
<view> |
|||
<view class="cu-timeline"> |
|||
<view class="cu-time">昨天</view> |
|||
<view class="cu-item cur cuIcon-noticefill"> |
|||
<view class="content bg-green shadow-blur"> |
|||
<text>22:22</text>【广州市】快件已到达地球 |
|||
</view> |
|||
</view> |
|||
<view class="cu-item text-red cuIcon-attentionforbidfill"> |
|||
<view class="content bg-red shadow-blur">这是第一次,我家的铲屎官走了这么久。久到足足有三天!!</view> |
|||
</view> |
|||
</view> |
|||
|
|||
<view class="cu-timeline"> |
|||
<view class="cu-time">06-17</view> |
|||
<view class="cu-item"> |
|||
<view class="content"> |
|||
<text>01:30</text>【喵星】 MX-12138 已揽收,准备发往银河系 |
|||
</view> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
</template> |
|||
|
|||
<script> |
|||
export default { |
|||
data() { |
|||
return {}; |
|||
}, |
|||
}; |
|||
</script> |
@ -0,0 +1,124 @@ |
|||
<template> |
|||
<view :class="[styleType === 'text'?'segmented-control--text' : 'segmented-control--button' ]" :style="{ borderColor: styleType === 'text' ? '' : activeColor }" |
|||
class="segmented-control"> |
|||
<view v-for="(item, index) in values" :class="[ styleType === 'text'?'segmented-control__item--text': 'segmented-control__item--button' , index === currentIndex&&styleType === 'button'?'segmented-control__item--button--active': '' , index === 0&&styleType === 'button'?'segmented-control__item--button--first': '',index === values.length - 1&&styleType === 'button'?'segmented-control__item--button--last': '' ]" |
|||
:key="index" :style="{ |
|||
backgroundColor: index === currentIndex && styleType === 'button' ? activeColor : '',borderColor: index === currentIndex&&styleType === 'text'||styleType === 'button'?activeColor:'transparent' |
|||
}" |
|||
class="segmented-control__item" @click="_onClick(index)"> |
|||
<text :style="{color: |
|||
index === currentIndex |
|||
? styleType === 'text' |
|||
? activeColor |
|||
: '#fff' |
|||
: styleType === 'text' |
|||
? '#000' |
|||
: activeColor}" |
|||
class="segmented-control__text">{{ item }}</text> |
|||
</view> |
|||
</view> |
|||
</template> |
|||
|
|||
<script> |
|||
export default { |
|||
name: 'UniSegmentedControl', |
|||
props: { |
|||
current: { |
|||
type: Number, |
|||
default: 0 |
|||
}, |
|||
values: { |
|||
type: Array, |
|||
default () { |
|||
return [] |
|||
} |
|||
}, |
|||
activeColor: { |
|||
type: String, |
|||
default: '#007aff' |
|||
}, |
|||
styleType: { |
|||
type: String, |
|||
default: 'button' |
|||
} |
|||
}, |
|||
data() { |
|||
return { |
|||
currentIndex: 0 |
|||
} |
|||
}, |
|||
watch: { |
|||
current(val) { |
|||
if (val !== this.currentIndex) { |
|||
this.currentIndex = val |
|||
} |
|||
} |
|||
}, |
|||
created() { |
|||
this.currentIndex = this.current |
|||
}, |
|||
methods: { |
|||
_onClick(index) { |
|||
if (this.currentIndex !== index) { |
|||
this.currentIndex = index |
|||
this.$emit('clickItem', {currentIndex:index}) |
|||
} |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
@import '@/uni.scss'; |
|||
|
|||
.segmented-control { |
|||
/* #ifndef APP-NVUE */ |
|||
display: flex; |
|||
box-sizing: border-box; |
|||
/* #endif */ |
|||
flex-direction: row; |
|||
height: 36px; |
|||
overflow: hidden; |
|||
} |
|||
|
|||
.segmented-control__item { |
|||
/* #ifndef APP-NVUE */ |
|||
display: inline-flex; |
|||
box-sizing: border-box; |
|||
/* #endif */ |
|||
position: relative; |
|||
flex: 1; |
|||
justify-content: center; |
|||
align-items: center; |
|||
} |
|||
|
|||
.segmented-control__item--button { |
|||
border-style: solid; |
|||
border-top-width: 1px; |
|||
border-bottom-width: 1px; |
|||
border-right-width: 1px; |
|||
border-left-width: 0; |
|||
} |
|||
|
|||
.segmented-control__item--button--first { |
|||
border-left-width: 1px; |
|||
border-top-left-radius: 5px; |
|||
border-bottom-left-radius: 5px; |
|||
} |
|||
|
|||
.segmented-control__item--button--last { |
|||
border-top-right-radius: 5px; |
|||
border-bottom-right-radius: 5px; |
|||
} |
|||
|
|||
.segmented-control__item--text { |
|||
border-bottom-style: solid; |
|||
border-bottom-width: 3px; |
|||
} |
|||
|
|||
.segmented-control__text { |
|||
font-size: 16px; |
|||
line-height: 20px; |
|||
text-align: center; |
|||
} |
|||
</style> |
@ -0,0 +1,63 @@ |
|||
<template> |
|||
<view class="wrap"> |
|||
<!-- 头部菜单 --> |
|||
<view class="nav-wrap slide-bottom"> |
|||
<uni-segmented-control |
|||
:active-color="activeColor" |
|||
:current="current" |
|||
:values="values" |
|||
@clickItem="handleClickNav" |
|||
class="nav" |
|||
/> |
|||
</view> |
|||
<!-- 内容区 --> |
|||
<view class="content"> |
|||
<!-- 今日打卡地图显示 --> |
|||
<history-map v-if="current === 0" /> |
|||
<!-- 打卡记录 时间轴显示 --> |
|||
<timeline v-else /> |
|||
</view> |
|||
</view> |
|||
</template> |
|||
|
|||
<script> |
|||
export default { |
|||
data() { |
|||
return { |
|||
current: 0, |
|||
values: ['今日打卡', '打卡记录'], |
|||
activeColor: '#0897C7', |
|||
}; |
|||
}, |
|||
methods: { |
|||
handleClickNav({ currentIndex }) { |
|||
this.current = currentIndex; |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.wrap { |
|||
padding-top: 88rpx; |
|||
min-height: 100vh; |
|||
background-color: $white; |
|||
|
|||
.nav-wrap { |
|||
z-index: 999; |
|||
position: fixed; |
|||
left: 0; |
|||
right: 0; |
|||
top: 0; |
|||
|
|||
display: flex; |
|||
justify-content: center; |
|||
align-items: center; |
|||
height: 88rpx; |
|||
background-color: $white; |
|||
.nav { |
|||
width: 540rpx; |
|||
} |
|||
} |
|||
} |
|||
</style> |
Loading…
Reference in new issue