You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

546 lines
13 KiB

<template>
<view class="container">
<image class="cbg" :src="base.imgHost('common_bg.png')"></image>
<!-- <view> -->
<scroll-view :scroll-y="true" @scrolltolower="scrollGet" class="list">
<!-- <topBanner v-if="banner_list.length>0" :banner_list="banner_list"></topBanner> -->
<image @click="goCourse" class="list-img" :src="base.imgHost('course-top.png')"></image>
<view v-if="hasData" style="padding-bottom: 200rpx;">
<!-- 10进行中 40已结束 -->
<view class="list-item" :class="{'list-end':item.sign_status===40}" v-for="item in course_list">
<view class="list-item-wrap">
<view class="list-item-wrap-time">
<view>
<view class="list-item-wrap-time-date" v-if="item.start_date">
<!-- 没有结束时间 或开始结束相等 -->
<block v-if="convertToChineseMonth(item.start_date,item.end_date).noend">
<view>{{convertToChineseMonth(item.start_date,item.end_date).month}}</view>
<view class="bigFont">
{{convertToChineseMonth(item.start_date,item.end_date).day}}</view>
<view>{{convertToChineseMonth(item.start_date,item.end_date).year}}</view>
</block>
<block v-else>
<view class="flexbetween">
<text>{{convertToChineseMonth(item.start_date,item.end_date).month}}</text>
<text>{{convertToChineseMonth(item.start_date,item.end_date).endmonth}}</text>
</view>
<view class="bigFont flexbetween">
<text>{{convertToChineseMonth(item.start_date,item.end_date).day}}</text>
<text>-</text>
<text>{{convertToChineseMonth(item.start_date,item.end_date).endday}}</text>
</view>
<view>
<text>{{convertToChineseMonth(item.start_date,item.end_date).year}}</text>
<!-- <text>{{convertToChineseMonth(item.start_date,item.end_date).endyear}}</text> -->
</view>
</block>
</view>
<view class="list-item-wrap-time-date" v-else>
<view class="bigFont" style="font-size: 36rpx;">开课</view>
<view class="bigFont" style="font-size: 36rpx;">待定</view>
</view>
<view class="list-item-wrap-time-status">报名{{item.sign_date_status}}</view>
</view>
</view>
<view class="list-item-wrap-status">
<view class="list-item-wrap-status-type">
<text>{{item.is_fee===1?'付费':'公益'}}</text>
</view>
<view class="list-item-wrap-status-title">
<text v-if="item.type">{{item.type_detail?item.type_detail.name+' | ':''}}</text>
{{item.name}}
</view>
<view class="list-item-wrap-status-label">
<text v-if="item.sign_status===10" @click="toDetail(item)">我要报名</text>
<text v-else @click="toDetail(item)">查看详情</text>
</view>
</view>
</view>
</view>
</view>
<view class="nodata" v-else>
<u-empty mode="data"></u-empty>
</view>
</scroll-view>
<tabbar :currentPage="1"></tabbar>
<view class="modal">
<u-popup v-model="showRegister" mode="bottom">
<view>
<view class="modal-tip">提示</view>
<view class="modal-content">
<view>如您已是我方校友,请先绑定账号</view>
<view @click="goBind" class="modal-bind">
去绑定
</view>
<view>如您还不是我方校友,请先注册</view>
<view @click="toRegister" class="modal-register">
去注册
</view>
</view>
<!-- <view class="modal-btn">
<view @click="goBind" class="modal-btn-bind">
去绑定
</view>
<view @click="toRegister" class="modal-btn-register">
去注册
</view>
</view> -->
</view>
</u-popup>
</view>
</view>
</template>
<script>
import tabbar from '@/components/tabbar/tabbar.vue';
import topBanner from '@/components/topBanner.vue'
export default {
components: {
tabbar,
topBanner
},
data() {
return {
showRegister: false,
banner_list: [],
hasMobile: false,
go_course_id: '',
hasData: true,
current_page: 1,
total_page: 0,
load_status: '',
course_list: [],
}
},
onShareAppMessage() {
return {
title: "苏州科技商学院",
imageUrl: "/static/share.jpg"
}
},
onShareTimeline() {
return {
title: "苏州科技商学院",
imageUrl: "/static/share.jpg"
}
},
onLoad() {
// this.getBannerList()
this.getCourseList()
},
onShow() {
this.showRegister = false
let user = uni.getStorageSync("stbc1_lifeData") ? uni.getStorageSync("stbc1_lifeData").vuex_user : {}
if (!this.base.isNull(user.mobile)) {
this.hasMobile = true
} else {
this.hasMobile = false
}
},
onReachBottom() {
// console.log("this.onReachBottom", this.current_page, this.total_page)
},
methods: {
goCourse(){
uni.navigateTo({
url:'/packages/mycourse/index'
})
},
scrollGet() {
if (!this.hasData) {
return
}
if (this.current_page > this.total_page) {
this.base.toast('没有更多了')
return
}
this.current_page = this.current_page + 1
this.getCourseList()
},
async getCourseList() {
this.load_status = 'loading'
const res = await this.$u.api.courseIndex({
page: this.current_page,
page_size: 10,
status: 1
})
this.total_page = res.last_page
if (res.data.length === 0 && this.current_page === 1) {
this.hasData = false
}
this.course_list.push(...res.data)
},
convertToChineseMonth(startDate, endDate) {
// 解析日期字符串
const dateParts = startDate.split('-');
const year = parseInt(dateParts[0], 10);
const monthNumber = parseInt(dateParts[1], 10);
const day = parseInt(dateParts[2], 10);
// 定义中文月份
let chineseMonths = ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'];
// 获取中文月份
const chineseMonth = chineseMonths[monthNumber - 1];
// 结束时间为空 只显示开始时间
if (this.base.isNull(endDate)) {
return {
year: year,
month: chineseMonth,
day: day,
noend: true
}
} else {
// 开始结束时间相等 只显示开始时间
if (startDate == endDate) {
return {
year: year,
month: chineseMonth,
day: day,
noend: true
}
} else {
const enddateParts = endDate.split('-');
const endyear = parseInt(enddateParts[0], 10);
const endmonthNumber = parseInt(enddateParts[1], 10);
const endday = parseInt(enddateParts[2], 10);
// console.log(endmonthNumber, chineseMonths)
const endchineseMonth = chineseMonths[endmonthNumber - 1];
return {
year: year,
month: chineseMonth,
day: day,
noend: false,
endyear: endyear,
endmonth: endchineseMonth,
endday: endday,
}
}
}
},
// 报名
toDetail(item) {
uni.navigateTo({
url: '/packages/course/detail?id=' + item.id
})
return
this.go_course_id = item.id
// 收费的不限制报名人数 total没值也不限制
// 免费的限制报名人数
if (!item.is_fee && (item.total && item.total > 0)) {
// 报名人数已满
if (item.course_signs_count >= item.total) {
this.base.toast("当前报名人数已满")
return
}
}
if (!this.hasMobile) {
this.showRegister = true
return
} else {
uni.navigateTo({
url: '/packages/apply/index?id=' + this.go_course_id
})
}
},
// 去绑定登录
goBind() {
console.log("qwe")
uni.navigateTo({
url: '/packages/register/login?id=' + this.go_course_id
})
},
// 去注册
toRegister() {
uni.navigateTo({
url: '/packages/register/index?id=' + this.go_course_id
})
},
async getBannerList() {
const res = await this.$u.api.otherBanner({
position: 2,
})
if (res.length > 0) {
this.banner_list = res.sort((a, b) => {
a.sort - b.sort
})
}
},
}
}
</script>
<style scoped lang="scss">
.container {
width: 100%;
height: 100vh;
overflow: hidden;
.cbg {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100vh;
}
.list {
height: 100vh;
padding:30rpx 0;
position: relative;
top: 0;
left: 0;
overflow: scroll;
.nodata {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
&-img {
width: calc(100% - 60rpx);
height: 125rpx;
display: block;
margin: 0 auto;
}
&-item {
margin: 30rpx;
background-color: #fff;
display: flex;
justify-content: space-between;
align-items: center;
box-shadow: 0 -1rpx 20rpx #bed2ec;
border-radius: 10rpx;
&-wrap {
width: 100%;
display: flex;
&-time {
padding: 30rpx;
background: linear-gradient(to bottom, #5e5fbc, #0d0398);
border-radius: 10rpx 0 0 10rpx;
color: #fff;
width: 170rpx;
text-align: center;
font-size: 0rpx;
position: relative;
&>view {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 100%;
padding: 25rpx;
>view {
font-size: 24rpx;
}
}
.bigFont {
font-size: 42rpx;
// border-bottom: 1rpx solid #ddd;
}
.flexbetween {
display: flex;
justify-content: space-between;
align-items: center;
}
&-date {
padding-bottom: 15rpx;
border-bottom: 1rpx solid #fff;
}
&-status {
padding-top: 10rpx;
}
}
&-status {
// border-right: 1px solid #ddd;
width: calc(100% - 170rpx);
padding: 30rpx;
position: relative;
&-type {
text-align: right;
margin-bottom: 20rpx;
&>text {
border-radius: 28rpx 0 28rpx 28rpx;
color: #fff;
padding: 5rpx 15rpx;
background: linear-gradient(to right, #5e5fbc, #0d0398, );
}
}
&-title {
height: 80rpx;
overflow: hidden;
margin-bottom: 20rpx;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
/* 定义文本的行数 */
overflow: hidden;
text-overflow: ellipsis;
}
&-label {
text-align: right;
text {
display: inline-block;
padding: 5rpx 20rpx;
border: 1px solid #cfcfcf;
border-radius: 30rpx;
display: inline-block;
position: relative;
&:before {
content: " ";
background: #00b318;
display: inline-block;
width: 10rpx;
height: 10rpx;
top: -5rpx;
position: relative;
// top: -2rpx;
margin-right: 14rpx;
border-radius: 50%;
}
}
}
}
}
}
// 已结束
&-end {
.list-item-wrap {
width: 100%;
&-time {
background: linear-gradient(to bottom, #e4cdb4, #c69c6d);
}
&-status {
border-right: none;
&-type {
&>text {
background: linear-gradient(to right, #e4cdb4, #c69c6d);
}
}
&-label {
text {
&:before {
content: " ";
background: #efa36e;
}
}
}
}
}
.list-item-btn {
display: none;
}
}
}
.modal {
::v-deep .u-drawer-bottom {
border-radius: 40rpx;
}
&-tip {
text-align: center;
padding: 30rpx;
font-size: 32rpx;
}
&-content {
height: 450rpx;
padding: 0 30rpx;
font-size: 32rpx;
text-align: center;
&>view {
margin: 30rpx auto;
}
}
&-bind {
width: 45%;
text-align: center;
margin: 0 auto;
color: #fff;
border-radius: 30rpx;
padding: 20rpx;
background: linear-gradient(to right, #e4cdb4, #c69c6d);
}
&-register {
width: 45%;
text-align: center;
margin: 0 auto;
color: #fff;
border-radius: 30rpx;
padding: 20rpx;
background: linear-gradient(to right, #5e5fbc, #0d0398);
}
&-btn {
display: flex;
justify-content: space-between;
padding: 30rpx;
&>view {
width: 45%;
text-align: center;
margin: 0 auto;
color: #fff;
border-radius: 30rpx;
padding: 20rpx;
}
&-bind {
background: linear-gradient(to right, #e4cdb4, #c69c6d);
}
&-register {
background: linear-gradient(to right, #5e5fbc, #0d0398);
}
}
}
}
</style>