| @ -0,0 +1,97 @@ | |||||
| <template> | |||||
| <view class="card"> | |||||
| <view class="card-header"> | |||||
| <view class="title">{{ data.title }}</view> | |||||
| <view class="desc">{{ data.createTime }}</view> | |||||
| </view> | |||||
| <view class="card-content"> | |||||
| {{ data.content }} | |||||
| </view> | |||||
| <view class="card-footer"> | |||||
| <button class="btn">了解详情</button> | |||||
| </view> | |||||
| <view v-if="data.new" class="dot"></view> | |||||
| </view> | |||||
| </template> | |||||
| <script> | |||||
| export default { | |||||
| props: { | |||||
| data: { | |||||
| type: Object, | |||||
| default() { | |||||
| return {} | |||||
| } | |||||
| }, | |||||
| }, | |||||
| methods: { | |||||
| jumpToDetail() { | |||||
| this.$utils.navigateTo(`/pages_order/message/index?id=${this.data.id}`) | |||||
| }, | |||||
| }, | |||||
| } | |||||
| </script> | |||||
| <style scoped lang="scss"> | |||||
| .card { | |||||
| position: relative; | |||||
| padding: 32rpx 32rpx 0 32rpx; | |||||
| font-family: PingFang SC; | |||||
| font-weight: 400; | |||||
| line-height: 1.4; | |||||
| background-image: linear-gradient(164deg,#DAF3FF 88rpx, #FBFEFF 176rpx, #FBFEFF); | |||||
| border: 2rpx solid #FFFFFF; | |||||
| &-header { | |||||
| .title { | |||||
| font-size: 32rpx; | |||||
| color: #181818; | |||||
| } | |||||
| .desc { | |||||
| margin-top: 4rpx; | |||||
| font-size: 24rpx; | |||||
| color: #999999; | |||||
| } | |||||
| } | |||||
| &-content { | |||||
| margin-top: 16rpx; | |||||
| font-size: 26rpx; | |||||
| line-height: 1.7; | |||||
| color: #666666; | |||||
| overflow: hidden; | |||||
| text-overflow: ellipsis; | |||||
| display:-webkit-box; //作为弹性伸缩盒子模型显示。 | |||||
| -webkit-box-orient:vertical; //设置伸缩盒子的子元素排列方式--从上到下垂直排列 | |||||
| -webkit-line-clamp:4; //显示的行 | |||||
| } | |||||
| &-footer { | |||||
| margin-top: 16rpx; | |||||
| border-top: 2rpx dashed #DADADA; | |||||
| .btn { | |||||
| width: 100%; | |||||
| padding: 16rpx 32rpx; | |||||
| font-family: PingFang SC; | |||||
| font-size: 32rpx; | |||||
| font-weight: 400; | |||||
| line-height: 1.4; | |||||
| color: #00A9FF; | |||||
| box-sizing: border-box; | |||||
| } | |||||
| } | |||||
| .dot { | |||||
| position: absolute; | |||||
| top: 12rpx; | |||||
| right: 12rpx; | |||||
| width: 16rpx; | |||||
| height: 16rpx; | |||||
| background: #F53F3F; | |||||
| border-radius: 50%; | |||||
| } | |||||
| } | |||||
| </style> | |||||
| @ -0,0 +1,159 @@ | |||||
| <template> | |||||
| <view class="page__view"> | |||||
| <navbar title="详情" leftClick @leftClick="$utils.navigateBack" /> | |||||
| <view class="main"> | |||||
| <view class="card"> | |||||
| <view class="card-header"> | |||||
| <view class="title">{{ detail.title }}</view> | |||||
| <view class="desc">{{ detail.createTime }}</view> | |||||
| </view> | |||||
| <view class="card-content"> | |||||
| {{ detail.content }} | |||||
| </view> | |||||
| </view> | |||||
| </view> | |||||
| <view class="bottom"> | |||||
| <button plain class="flex flex-column btn btn-simple" open-type="contact"> | |||||
| <image class="icon" src="@/pages_order/static/product/icon-service.png" mode="widthFix"></image> | |||||
| <view>联系客服</view> | |||||
| </button> | |||||
| <button class="col btn" @click="onContactMentor">联系导师</button> | |||||
| </view> | |||||
| </view> | |||||
| </template> | |||||
| <script> | |||||
| import contactMentorPopup from '@/pages_order/order/components/contactMentorPopup.vue' | |||||
| export default { | |||||
| components: { | |||||
| contactMentorPopup, | |||||
| }, | |||||
| data() { | |||||
| return { | |||||
| id: null, | |||||
| detail: {}, | |||||
| } | |||||
| }, | |||||
| onLoad(arg) { | |||||
| const { id } = arg | |||||
| this.id = id | |||||
| this.getData() | |||||
| }, | |||||
| methods: { | |||||
| async getData() { | |||||
| // todo | |||||
| // todo: mark read | |||||
| }, | |||||
| }, | |||||
| } | |||||
| </script> | |||||
| <style scoped lang="scss"> | |||||
| .page__view { | |||||
| width: 100vw; | |||||
| min-height: 100vh; | |||||
| position: relative; | |||||
| /deep/ .nav-bar__view { | |||||
| position: fixed; | |||||
| top: 0; | |||||
| left: 0; | |||||
| } | |||||
| } | |||||
| .main { | |||||
| padding: calc(var(--status-bar-height) + 160rpx) 40rpx 326rpx 40rpx; | |||||
| } | |||||
| .card { | |||||
| padding: 32rpx; | |||||
| font-family: PingFang SC; | |||||
| font-weight: 400; | |||||
| line-height: 1.4; | |||||
| background: #FFFFFF; | |||||
| border-radius: 32rpx; | |||||
| &-header { | |||||
| font-family: PingFang SC; | |||||
| line-height: 1.4; | |||||
| color: #252545; | |||||
| .title { | |||||
| font-size: 40rpx; | |||||
| font-weight: 500; | |||||
| color: #262626; | |||||
| } | |||||
| .desc { | |||||
| margin-top: 4rpx; | |||||
| font-size: 24rpx; | |||||
| color: #999999; | |||||
| } | |||||
| } | |||||
| &-content { | |||||
| margin-top: 24rpx; | |||||
| font-size: 28rpx; | |||||
| line-height: 1.7; | |||||
| color: #3B3D3D; | |||||
| } | |||||
| } | |||||
| .bottom { | |||||
| position: fixed; | |||||
| left: 0; | |||||
| bottom: 0; | |||||
| width: 100vw; | |||||
| // height: 270rpx; | |||||
| background: #FFFFFF; | |||||
| box-sizing: border-box; | |||||
| padding: 24rpx 40rpx; | |||||
| padding-bottom: calc(env(safe-area-inset-bottom) + 24rpx); | |||||
| box-sizing: border-box; | |||||
| column-gap: 32rpx; | |||||
| .col { | |||||
| flex: 1; | |||||
| } | |||||
| .btn { | |||||
| width: 100%; | |||||
| // padding: 14rpx 74rpx; | |||||
| padding: 14rpx 0; | |||||
| font-family: PingFang SC; | |||||
| font-weight: 500; | |||||
| font-size: 36rpx; | |||||
| line-height: 1; | |||||
| color: #252545; | |||||
| border: 2rpx solid #252545; | |||||
| border-radius: 41rpx; | |||||
| } | |||||
| .btn-simple { | |||||
| flex: none; | |||||
| width: auto; | |||||
| font-family: PingFang SC; | |||||
| font-weight: 400; | |||||
| font-size: 22rpx; | |||||
| line-height: 1.1; | |||||
| color: #999999; | |||||
| border: none; | |||||
| border-radius: unset; | |||||
| .icon { | |||||
| width: 52rpx; | |||||
| height: auto; | |||||
| margin-bottom: 4rpx; | |||||
| } | |||||
| } | |||||
| } | |||||
| </style> | |||||
| @ -0,0 +1,57 @@ | |||||
| <template> | |||||
| <view class="page__view"> | |||||
| <navbar title="开营通知" leftClick @leftClick="$utils.navigateBack" /> | |||||
| <view class="list"> | |||||
| <view class="list-item" v-for="item in list" :key="item.id"> | |||||
| <messageCard :data="item" ></messageCard> | |||||
| </view> | |||||
| </view> | |||||
| </view> | |||||
| </template> | |||||
| <script> | |||||
| import mixinsList from '@/mixins/list.js' | |||||
| import messageCard from './card.vue' | |||||
| export default { | |||||
| mixins: [mixinsList], | |||||
| components: { | |||||
| messageCard, | |||||
| }, | |||||
| data() { | |||||
| return { | |||||
| // todo: check key | |||||
| mixinsListApi: '', | |||||
| } | |||||
| }, | |||||
| methods: { | |||||
| }, | |||||
| } | |||||
| </script> | |||||
| <style scoped lang="scss"> | |||||
| .page__view { | |||||
| width: 100vw; | |||||
| min-height: 100vh; | |||||
| background-color: $uni-bg-color; | |||||
| position: relative; | |||||
| } | |||||
| .list { | |||||
| padding: 40rpx; | |||||
| &-item { | |||||
| & + & { | |||||
| margin-top: 32rpx; | |||||
| } | |||||
| } | |||||
| } | |||||
| </style> | |||||