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.
3529 lines
106 KiB
3529 lines
106 KiB
<template>
|
|
<BaseContainer class="thematic-details">
|
|
<NavBar :title="navTitle" />
|
|
<template v-if="infoLoading">
|
|
<view class="base-wrap">
|
|
<view class="swiper-details">
|
|
<view class="special-coverimg">
|
|
<image :src="swiperlist[0]" mode="aspectFill"></image>
|
|
</view>
|
|
<!-- <swiper class="banner slider-banner">
|
|
<swiper-item>
|
|
<view class="swiper-slide" v-for="(src, key) in swiperlist" :key="key">
|
|
<image :src="src" mode="aspectFill" />
|
|
</view>
|
|
</swiper-item>
|
|
</swiper> -->
|
|
<view class="successTip" v-if="barrageStatus">
|
|
<template v-for="(item, index) of Barragelist">
|
|
<view class="picTxt acea-row row-middle" v-if="num == index" :key="index">
|
|
<view class="pictrue">
|
|
<image mode="aspectFill" :src="item.avatar" />
|
|
</view>
|
|
<view class="acea-row row-middle" style="flex: 1; overflow: hidden; white-space: nowrap;">
|
|
<view class="name line1">{{ item.nickname }}</view>
|
|
<view style="flex: 1; overflow: hidden; text-overflow: ellipsis">{{ item.status_name }}</view>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
</view>
|
|
|
|
<view class="swiper" style="padding-bottom: 40rpx;">
|
|
<!-- <view v-if="special_validity == -1" class="validity">
|
|
<template v-if="special.validity">课程有效期为{{
|
|
special.validity
|
|
}}天,过期后需重新购买哦!</template>
|
|
<template v-else>课程永久有效哦!</template>
|
|
</view>
|
|
<view v-else-if="special_validity == 0" class="validity">课程永久有效哦!</view>
|
|
<view v-else-if="special_validity > 0" class="validity">
|
|
课程有效期剩余{{
|
|
special_validity | validityFormat
|
|
}},过期后需重新购买哦!
|
|
</view> -->
|
|
<view class="name txp1">
|
|
{{ special.title || "加载中" }}
|
|
</view>
|
|
<view class="swiper-int">
|
|
<view class="swiper-int-top">
|
|
<!-- <view class="swiper-int-top-left">
|
|
<view v-if="special.label.length" class="attr">
|
|
<view v-for="(item, idx) of special.label" :key="idx">{{
|
|
item
|
|
}}</view>
|
|
</view>
|
|
</view> -->
|
|
<view class="acea-row" style="flex-direction: column;line-height: 22rpx;">
|
|
<view class="pin-money" v-if="is_pay">
|
|
<text class="price">
|
|
¥
|
|
<text>
|
|
{{ special.is_pink ? special.pink_money : special.money }}
|
|
</text>
|
|
</text>
|
|
<text class="vip-price" style="margin-left: 13rpx;">¥{{ special.member_money }}</text>
|
|
<img class="vip-price-icon" :src="getImgPath('/wap/first/zsff/images/vip.png')" />
|
|
</view>
|
|
<view class="pin-money" v-if="special.is_pink">
|
|
拼课价<text class="money">¥{{ special.pink_money }}</text>
|
|
</view>
|
|
<view class="study-count" style="color: #999999;font-size: 20rpx;margin-top: 16rpx;">{{ record.recordCoujnt }}人已学习</view>
|
|
</view>
|
|
</view>
|
|
<view class="collect" @click="handleCreateSharePoster">
|
|
<view class="iconfont">
|
|
<image :src="getImgPath('/wap/first/zsff/images/fenxiang.png')"></image>
|
|
</view>
|
|
<view>分享</view>
|
|
</view>
|
|
<view class="collect" @click="collect">
|
|
<view :class="[
|
|
'iconfont',
|
|
special.collect ? 'iconshoucang2' : 'iconshoucang11',
|
|
]"></view>
|
|
<view>{{ special.collect ? "已收藏" : "收藏" }}</view>
|
|
</view>
|
|
</view>
|
|
<join-vip></join-vip>
|
|
</view>
|
|
<!-- <view class="share">
|
|
<view v-if="special.service_code" class="share_wechat">
|
|
<view class="pinTip2 acea-row row-between-wrapper"
|
|
v-if="is_pay || (isMember && special.member_pay_type == 0)">
|
|
<view class="reminder line1">和小伙伴一起学习,有老师答疑哦~</view>
|
|
<view class="chatBnt acea-row row-center-wrapper" @click="open = false">
|
|
加入群聊
|
|
</view>
|
|
</view>
|
|
</view>
|
|
|
|
<view class="teacher-section">
|
|
<view class="teacher-table">
|
|
<view class="item">
|
|
<view class="num">{{ count }}</view>
|
|
<view>总节数</view>
|
|
</view>
|
|
<view class="item">
|
|
<view>
|
|
<template v-for="(item, index) in record.record">
|
|
<image mode="aspectFill" v-if="index < 5" :key="index" :src="item.avatar" />
|
|
</template>
|
|
</view>
|
|
<view class="learn">
|
|
<text class="child">已有</text>
|
|
<text class="child">{{ record.recordCoujnt }}</text>
|
|
<text class="child">人学习</text>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<view v-if="lecturer" class="teacher-detail-wrap">
|
|
<navigator class="a" :url="`/pages/merchant/teacher_detail?id=${special.lecturer_id}`">
|
|
<view class="detail-hd">
|
|
<view class="head">
|
|
<image class="image" mode="aspectFill" :src="lecturer.lecturer_head" />
|
|
</view>
|
|
<view class="text">
|
|
<view>{{ lecturer.lecturer_name }}</view>
|
|
<view v-if="lecturer.label.length">
|
|
<template v-for="(item, index) in lecturer.label">
|
|
<text class="text" v-if="index < 3" :key="index">{{ item }}</text>
|
|
</template>
|
|
</view>
|
|
</view>
|
|
<view class="iconfont iconxiangyou"></view>
|
|
</view>
|
|
</navigator>
|
|
</view>
|
|
</view>
|
|
</view> -->
|
|
<navigator v-if="lecturer" class="lecturer-info flex" :url="`/pages/merchant/teacher_detail?id=${special.lecturer_id}`">
|
|
<view class="info-avatar">
|
|
<image :src="lecturer && lecturer.lecturer_head" mode="aspectFill"></image>
|
|
</view>
|
|
<view class="info-box">
|
|
<view class="info-name">
|
|
{{ lecturer.lecturer_name }} <text>{{ lecturer.explain }}</text>
|
|
</view>
|
|
<view class="info-desc">{{ lecturer.explain }}</view>
|
|
</view>
|
|
<text class="more"></text>
|
|
</navigator>
|
|
|
|
<view v-if="materialList.length" class="material">
|
|
<navigator v-for="item in materialList" :key="item.id" :url="`/pages/special/data_details?id=${item.id}`">
|
|
<view>
|
|
<image mode="aspectFill" :src="item.image" alt="" />
|
|
</view>
|
|
<view>
|
|
<view>{{ item.title }}</view>
|
|
<view v-if="item.pay_type" class="money">
|
|
¥<text>{{ item.money }}</text>
|
|
</view>
|
|
<view v-else>免费</view>
|
|
<view>
|
|
<view>{{ item.ficti + item.sales }}人已下载</view>
|
|
<button type="button">去下载</button>
|
|
</view>
|
|
</view>
|
|
</navigator>
|
|
</view>
|
|
<view v-if="pinkIngList.length && is_pay == false" class="scroll-section">
|
|
<view class="label">已拼{{ scrollData.length }}件</view>
|
|
<swiper class="swiper-container" :autoplay="true" interval="2000" circular vertical>
|
|
<swiper-item class="swiper-wrapper">
|
|
<view v-for="(item, index) in scrollData" :key="index" class="swiper-slide">
|
|
{{ item.nickname }}拼团成功
|
|
</view>
|
|
</swiper-item>
|
|
</swiper>
|
|
</view>
|
|
|
|
<view class="list" v-if="pinkIngList.length && is_pay == false">
|
|
<view class="item acea-row row-middle" v-for="(item, k) of pinkIngList" :key="k">
|
|
<view class="pictrue">
|
|
<image mode="aspectFill" :src="item.avatar" />
|
|
</view>
|
|
<view class="name line1">{{ item.nickname }}</view>
|
|
<view class="left">
|
|
<view>
|
|
还差<text>{{ item.num }}人</text>成团
|
|
</view>
|
|
<view class="time">
|
|
剩余{{ item.difftime.hour }}:{{ item.difftime.minute }}:{{
|
|
item.difftime.second
|
|
}}
|
|
</view>
|
|
</view>
|
|
<view class="acea-row row-center-wrapper link" @click="goPink(item.id, item.uid, item.order_id)">
|
|
去拼单
|
|
<text class="iconfont iconxiangyou"></text>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
|
|
<view v-if="special.is_pink" class="process-section">
|
|
<view class="title">拼团玩法</view>
|
|
<view class="list">
|
|
<view class="item">
|
|
<text>1</text>
|
|
<text>开团/参团</text>
|
|
</view>
|
|
<view class="item">
|
|
<text>2</text>
|
|
<text>邀请好友</text>
|
|
</view>
|
|
<view class="item">
|
|
<text>3</text>
|
|
<text>满员成团</text>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
|
|
<!-- 导航栏 -->
|
|
<view ref="list" class="swiper-nav">
|
|
<view class="navCon acea-row row-middle">
|
|
<template v-if="special.type === 4">
|
|
<view v-for="nav in liveNavlist" :key="nav.value" :class="{ on: active === nav.value }" class="item"
|
|
@click="active = nav.value">
|
|
{{ nav.title }}
|
|
</view>
|
|
</template>
|
|
<!-- <template v-else-if="special.type === 5">
|
|
<view v-for="nav in cloumnNavlist" :key="nav.value" :class="{ on: active === nav.value }" class="item"
|
|
@click="active = nav.value">
|
|
{{ nav.title
|
|
}}<text v-if="nav.value === 5">({{ evaluateWhole }})</text>
|
|
</view>
|
|
</template> -->
|
|
<template v-else>
|
|
<view v-for="nav in otherNavlist" :key="nav.value" :class="{ on: active === nav.value }" class="item"
|
|
@click="active = nav.value">
|
|
{{ nav.title
|
|
}}<text v-if="nav.value === 5">({{ evaluateWhole }})</text>
|
|
</view>
|
|
</template>
|
|
</view>
|
|
</view>
|
|
|
|
<!-- 详情 -->
|
|
<mp-html v-if="active === 2" class="swiper-conter" container-style="padding: 0 30rpx;background: #ffffff;width: 690rpx; margin: 0 auto;"
|
|
:content="special.content"></mp-html>
|
|
|
|
<template v-if="special.type === 4">
|
|
<!-- 回放目录 -->
|
|
<view v-if="active === 1" class="replay-directory">
|
|
<view v-if="liveTaskList.length">
|
|
<view v-for="(item, index) in liveTaskList" :key="index" :class="{ active: RecordId === item.RecordId }"
|
|
class="item" @click="playBackRecord(item.RecordId)">
|
|
<view class="label">回放</view>
|
|
<view class="name">
|
|
{{ index | serial }} |
|
|
{{ item.playback_name || special.title }}
|
|
</view>
|
|
<view></view>
|
|
</view>
|
|
</view>
|
|
<view class="foot">
|
|
<text v-if="liveLoading" class="fa fa-spinner loadingpic"></text>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
|
|
<view v-else class="mulu">
|
|
<view v-if="active === 1">
|
|
<view ref="list">
|
|
<!-- 专栏目录 -->
|
|
<view v-if="special.type === 5" class="parent-catalogue">
|
|
<view v-for="specialItem of otherTaskList" :key="specialItem.id"
|
|
:class="{ active: specialItem.active }" @click="show(specialItem)">
|
|
<view class="parent-title">
|
|
<view class="name">{{ specialItem.title }}</view>
|
|
<view :class="[
|
|
specialItem.active ? 'iconxiangshang' : 'iconxiangxia',
|
|
'iconfont',
|
|
]"></view>
|
|
</view>
|
|
<view v-if="specialItem.special_task.length" class="catalogue">
|
|
<view v-for="(item, index) of specialItem.special_task" :key="item.id" @click.stop="play(item)">
|
|
<view>
|
|
<image src="@/static/images/special/video.png" />
|
|
</view>
|
|
<view class="text">
|
|
<view class="title">
|
|
{{ index >= 9 ? index + 1 : "0" + (index + 1) }}.
|
|
{{ item.title }}
|
|
</view>
|
|
<view class="try-progress">
|
|
<view v-if="
|
|
!is_pay &&
|
|
(special.member_pay_type || !isMember) &&
|
|
item.is_free &&
|
|
item.is_try
|
|
" class="try">
|
|
试看
|
|
</view>
|
|
<template v-if="
|
|
isLogin &&
|
|
(is_pay || (!special.member_pay_type && isMember))
|
|
">
|
|
<view v-if="item.watch && item.watch.percentage" class="progress">
|
|
已学习
|
|
</view>
|
|
<view v-else class="progress no">未学习</view>
|
|
</template>
|
|
</view>
|
|
</view>
|
|
<view class="status">
|
|
<i v-if="item.is_free" :class="[
|
|
item.pay_status ? 'iconsuozi' : 'iconziyuan2',
|
|
'iconfont',
|
|
]"></i>
|
|
<text v-else class="free">免费</text>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<!-- 专题目录 -->
|
|
<view v-else class="catalogue">
|
|
<view v-for="(item, index) in otherTaskList" :key="item.id" @click="play(item)">
|
|
<view>
|
|
<image src="@/static/images/special/video.png" />
|
|
</view>
|
|
<view class="text">
|
|
<view class="title">
|
|
{{ index >= 9 ? index + 1 : "0" + (index + 1) }}.
|
|
{{ item.title }}
|
|
</view>
|
|
<view class="try-progress">
|
|
<view v-if="
|
|
!is_pay &&
|
|
(special.member_pay_type || !isMember) &&
|
|
item.is_free &&
|
|
item.is_try
|
|
" class="try">
|
|
试看
|
|
</view>
|
|
<template v-if="
|
|
isLogin &&
|
|
(is_pay || (!special.member_pay_type && isMember))
|
|
">
|
|
<view v-if="item.watch && item.watch.percentage" class="progress">
|
|
已学习
|
|
</view>
|
|
<view v-else class="progress no">未学习</view>
|
|
</template>
|
|
</view>
|
|
</view>
|
|
<view class="status">
|
|
<i v-if="item.is_free" :class="[
|
|
item.pay_status ? 'iconsuozi' : 'iconziyuan2',
|
|
'iconfont',
|
|
]"></i>
|
|
<text v-else class="free">免费</text>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<view class="loading-line" style="background-color: #ffffff">
|
|
<text v-if="otherLoading == true" class="fa fa-spinner loadingpic" style="font-size: 40rpx"></text>
|
|
<text>{{ otherLoadTitle || "加载更多" }}</text>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
|
|
<!-- 专栏套餐 -->
|
|
<template v-if="special.type === 5">
|
|
<view v-if="active === 6" class="video-list" style="-webkit-overflow-scrolling: touch">
|
|
<view v-if="columnTaskList.length" ref="list">
|
|
<view class="video-listn" style="padding: 30rpx 0">
|
|
<view class="item acea-row row-between-wrapper" :key="idx" v-for="(vo, idx) in columnTaskList"
|
|
@click="setMeal(vo)">
|
|
<view class="pictrue" @click="play(vo)" style="position: relative">
|
|
<image :src="vo.image" mode="aspectFill" />
|
|
<view class="label">{{ specialType[vo.type] }}</view>
|
|
</view>
|
|
<view class="underline">
|
|
<view class="text acea-row row-between row-column">
|
|
<view class="name line1" v-text="vo.title" @click="setMeal(vo)"></view>
|
|
<view v-if="vo.label.length" class="attr">
|
|
<view v-for="(item, idx) in vo.label" :key="idx">{{
|
|
item
|
|
}}</view>
|
|
</view>
|
|
<template v-if="special.pay_type">
|
|
<template v-if="vo.pay_status">
|
|
<template v-if="isMember">
|
|
<view v-if="vo.member_pay_type" class="price">
|
|
¥{{
|
|
vo.member_money === "0.00"
|
|
? vo.money
|
|
: vo.member_money
|
|
}}
|
|
</view>
|
|
<view v-else class="free">去学习</view>
|
|
</template>
|
|
<view v-else class="price">
|
|
¥<text>{{ vo.money }}</text>
|
|
</view>
|
|
</template>
|
|
<view v-else class="free">去学习</view>
|
|
</template>
|
|
<view v-else class="free">去学习</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<view class="loading-line" style="background-color: #ffffff">
|
|
<text v-if="columnLoading == true" class="fa fa-spinner loadingpic" style="font-size: 40rpx"></text>
|
|
<text>{{ columnLoadTitle || "加载更多" }}</text>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
|
|
<template v-if="special.type !== 4">
|
|
<!-- 练习 -->
|
|
<view v-if="active === 3" class="problem-section">
|
|
<view v-if="problemList.length" class="problem-list">
|
|
<view v-for="item of problemList" :key="item.id" class="item">
|
|
<view :class="{ lock: !is_pay }" class="title">{{
|
|
item.title
|
|
}}</view>
|
|
<view class="group">
|
|
<view class="progress">
|
|
<view :style="{ width: item.rate + '%' }"></view>
|
|
</view>
|
|
<view class="people">
|
|
<text>{{ item.rate + "%" }}</text>{{ item.answer }}人已答题
|
|
</view>
|
|
<view class="exercise-btn" @click="goQuestion(item)">
|
|
<image mode="widthFix" :src="getImgPath('/wap/first/zsff/images/question07.png')" />练习
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<!-- 考试 -->
|
|
<view v-if="active === 4" class="question-section">
|
|
<view v-if="questionList.length" class="list">
|
|
<view v-for="item in questionList" :key="item.id" @click="goQuestion(item)" class="item">
|
|
<view>
|
|
<image :src="item.image" mode="aspectFill" />
|
|
</view>
|
|
<view>
|
|
<view>{{ item.title }}</view>
|
|
<view>
|
|
<view>共{{ item.item_number }}题</view>
|
|
<view v-if="is_pay" class="btn">
|
|
<image :src="
|
|
getImgPath(`/wap/first/zsff/images/question07.png`)
|
|
" />答题
|
|
</view>
|
|
<view v-else>
|
|
<image class="lock" :src="
|
|
getImgPath(`/wap/first/zsff/images/question06.png`)
|
|
" />
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<!-- 评价 -->
|
|
<view v-if="active === 5" class="evaluate-section">
|
|
<view class="head">
|
|
<view class="score">
|
|
<view>
|
|
<text>{{ evaluateScore }}</text>分
|
|
</view>
|
|
<view>课程评分</view>
|
|
</view>
|
|
<button type="button" class="flex-center flex" @click="userEvaluate">
|
|
我要评价
|
|
</button>
|
|
</view>
|
|
<EvaluateList :evaluate-list="evaluateList" />
|
|
<view v-if="evaluateLoading" class="loading">
|
|
<i class="fa fa-spinner fa-spin"></i>
|
|
</view>
|
|
<view v-if="evaluateFinished && evaluateList.length" class="finished">
|
|
已全部加载完
|
|
</view>
|
|
<view v-if="evaluateFinished && !evaluateList.length" class="empty">
|
|
<image :src="getImgPath('/wap/first/zsff/images/empty.png')" alt="暂无评价" />
|
|
<view>暂无评价</view>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
</view>
|
|
</view>
|
|
|
|
<view class="acea-row row-middle footer" ref="storeMenu"
|
|
v-if="is_pay == false && is_gift == false && isPink == false">
|
|
<navigator class="link" url="/pages/index/index" open-type="switchTab">
|
|
<view class="cont">
|
|
<image :src="getImgPath('/wap/first/zsff/images/home.png')" />
|
|
<view>首页</view>
|
|
</view>
|
|
</navigator>
|
|
<!-- 抖音客服 -->
|
|
<view class="link" v-if="TOUTIAO_STATUS">
|
|
<view class="cont">
|
|
<view>
|
|
<button class="im" open-type="im" :data-im-id="imId" bindim="imCallback" binderror="onimError">
|
|
<image :src="getImgPath('/wap/first/zsff/images/chat.png')" />
|
|
客服</button>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<!-- 系统客服 -->
|
|
<view class="link" v-else @click="customerService">
|
|
<view class="cont">
|
|
<image :src="getImgPath('/wap/first/zsff/images/chat.png')" />
|
|
<view>客服</view>
|
|
</view>
|
|
</view>
|
|
<view v-if="(special.pay_type == 1 && special.type == 4) || special.money > 0" class="link" @click="OpenPay(1)">
|
|
<view class="cont">
|
|
<image :src="getImgPath('/wap/first/zsff/images/link.png')" />
|
|
<view>送朋友</view>
|
|
</view>
|
|
</view>
|
|
<view class="wrap">
|
|
<view class="video_footer_btn acea-row" :class="special.pay_type == 1 ? '' : 'item2'">
|
|
<view class="video_footer_btn_left acea-row row-column row-center-wrapper" v-if="
|
|
special.is_pink &&
|
|
((special.member_pay_type == 1 && isMember == 1) || isMember == 0)
|
|
" @click="OpenPay(3)">
|
|
<text class="video_footer_btn_left_pic">¥{{ special.pink_money }}</text>
|
|
<text class="video_footer_btn_left_num">{{ special.pink_number }}人团</text>
|
|
</view>
|
|
<view class="video_footer_btn_right acea-row" :class="
|
|
special.is_pink == 0 ||
|
|
(special.is_pink && isMember == 1 && special.member_pay_type == 0)
|
|
? 'on'
|
|
: ''
|
|
" v-if="special.type == 4">
|
|
<text :class="xtt_class" @click="OpenPay(6)" v-if="
|
|
special.pay_type == 0 ||
|
|
(special.member_pay_type == 0 && isMember) ||
|
|
is_pay
|
|
">进入直播间</text>
|
|
<text :class="xtt_class" @click="OpenPay(2)" v-if="isMember == 1 && special.member_pay_type == 1">¥{{
|
|
special.member_money }}</text>
|
|
<text :class="xtt_class" @click="OpenPay(2)" v-if="isMember == 0 && special.pay_type == 1">¥{{
|
|
special.money
|
|
}}</text>
|
|
</view>
|
|
<view class="video_footer_btn_right acea-row" :class="
|
|
special.is_pink == 0 ||
|
|
(special.is_pink && isMember == 1 && special.member_pay_type == 0)
|
|
? 'on'
|
|
: ''
|
|
" v-if="special.type != 4">
|
|
<text v-if="
|
|
special.pay_type == 0 ||
|
|
(special.member_pay_type == 0 && isMember) ||
|
|
is_pay
|
|
" @click="OpenPay(5)" :class="xtt_class">免费学习</text>
|
|
<text v-if="isMember == 1 && special.member_pay_type == 1" @click="OpenPay(2)" :class="xtt_class">¥{{
|
|
special.member_money }}</text>
|
|
<text v-if="isMember == 0 && special.pay_type == 1" @click="OpenPay(2)" :class="xtt_class">¥{{
|
|
special.money
|
|
}}</text>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<view class="acea-row row-wrap-all footer" ref="storeMenu"
|
|
v-if="is_pay == true && is_gift == false && paid && isPink == false">
|
|
<navigator class="link" open-type="switchTab" url="/pages/index/index">
|
|
<view class="cont">
|
|
<image :src="getImgPath('/wap/first/zsff/images/home.png')" />
|
|
<view>首页</view>
|
|
</view>
|
|
</navigator>
|
|
<!-- 抖音客服 -->
|
|
<view class="link" v-if="TOUTIAO_STATUS">
|
|
<view class="cont">
|
|
<view>
|
|
<button class="im" open-type="im" :data-im-id="imId" bindim="imCallback" binderror="onimError">
|
|
<image :src="getImgPath('/wap/first/zsff/images/chat.png')" />
|
|
客服</button>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<!-- 系统客服 -->
|
|
<view class="link" @click="customerService" v-else>
|
|
<view class="cont">
|
|
<image :src="getImgPath('/wap/first/zsff/images/chat.png')" />
|
|
<view>客服</view>
|
|
</view>
|
|
</view>
|
|
<view v-if="(special.pay_type == 1 && special.type == 4) || special.money > 0" class="link" @click="OpenPay(1)">
|
|
<view class="cont">
|
|
<image :src="getImgPath('/wap/first/zsff/images/link.png')" />
|
|
<view>送朋友</view>
|
|
</view>
|
|
</view>
|
|
<view class="wrap">
|
|
<view class="video_footer_btn acea-row">
|
|
<view :class="xtt_class2" v-if="special.type != 4" @click="OpenPay(5)">
|
|
<text class="video_footer_btn_left_pic">去学习</text>
|
|
</view>
|
|
<view :class="xtt_class2" v-if="special.type == 4" @click="OpenPay(6)">
|
|
<text class="video_footer_btn_left_pic">进入直播间</text>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<view class="acea-row row-wrap-all footer" v-if="isPink" ref="storeMenu">
|
|
<navigator class="link" open-type="switchTab" url="/pages/index/index">
|
|
<view class="cont">
|
|
<image :src="getImgPath('/wap/first/zsff/images/home.png')" />
|
|
<view>首页</view>
|
|
</view>
|
|
</navigator>
|
|
<!-- 抖音客服 -->
|
|
<view class="link" v-if="TOUTIAO_STATUS">
|
|
<view class="cont">
|
|
<view>
|
|
<button class="im" open-type="im" :data-im-id="imId" bindim="imCallback" binderror="onimError">
|
|
<image :src="getImgPath('/wap/first/zsff/images/chat.png')" />
|
|
客服</button>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<!-- 系统客服 -->
|
|
<view class="link" @click="customerService" v-else>
|
|
<view class="cont">
|
|
<image :src="getImgPath('/wap/first/zsff/images/chat.png')" />
|
|
<view>客服</view>
|
|
</view>
|
|
</view>
|
|
<view class="link" @click="OpenPay(1)">
|
|
<view class="cont">
|
|
<image :src="getImgPath('/wap/first/zsff/images/link.png')" />
|
|
<view>送朋友</view>
|
|
</view>
|
|
</view>
|
|
<view class="wrap">
|
|
<view class="video_footer_btn acea-row">
|
|
<view :class="xtt_class2" @click="goPink(0, uid, pinkOrderId, oid)">
|
|
<text class="video_footer_btn_left_pic">查看拼课详情</text>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<view class="acea-row row-middle footer" v-if="is_gift" ref="storeMenu">
|
|
<navigator class="link" open-type="switchTab" url="/pages/index/index">
|
|
<view class="cont">
|
|
<image :src="getImgPath('/wap/first/zsff/images/special01.png')" />
|
|
<view>首页</view>
|
|
</view>
|
|
</navigator>
|
|
<!-- 抖音客服 -->
|
|
<view class="link" v-if="TOUTIAO_STATUS">
|
|
<view class="cont">
|
|
<view>
|
|
<button class="im" open-type="im" :data-im-id="imId" bindim="imCallback" binderror="onimError">
|
|
<image :src="getImgPath('/wap/first/zsff/images/chat.png')" />
|
|
客服</button>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<!-- 系统客服 -->
|
|
<view class="link" @click="customerService" v-else>
|
|
<view class="cont">
|
|
<image :src="getImgPath('/wap/first/zsff/images/special02.png')" />
|
|
<view>客服</view>
|
|
</view>
|
|
</view>
|
|
<view class="wrap">
|
|
<view class="video_footer_btn acea-row">
|
|
<view :class="xtt_class2" @click="OpenPay(4)">
|
|
<text class="video_footer_btn_left_pic">领取课程</text>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
|
|
</template>
|
|
|
|
<!-- 遮罩层 -->
|
|
<view :class="{ mask: dialogShow || password || is_poster || imgSrc || !open }" @touchmove.prevent
|
|
@click.self="maskClick"></view>
|
|
|
|
<!-- 加入群聊弹窗 -->
|
|
<view :class="{ show: !open }" class="dialog" v-if="!open">
|
|
<image :src="special.service_code" />
|
|
<view>长按扫一扫</view>
|
|
<view>加客服好友进群哦</view>
|
|
</view>
|
|
|
|
<!-- 关注公众号弹窗 -->
|
|
<view class="mask flex flex-center-x" @touchmove.prevent v-if="is_code" @click="is_code = false">
|
|
<image :src="wechat_qrcode" alt="" style="width: 500rpx; height: 500rpx; margin: 0 auto" />
|
|
</view>
|
|
<!-- 兑换码 -->
|
|
<view class="exchange-guide" v-if="isBatch && !is_pay" @click="getexchange">
|
|
<i class="iconfont iconicon-life-gift"></i> 兑换码 <i class="iconfont iconxiangyou"></i>
|
|
</view>
|
|
<!-- 直播间密码弹窗 -->
|
|
<view :class="{ on: password }" class="password">
|
|
<view class="title">请输入密码</view>
|
|
<input type="password" v-model="qr_password" autocomplete="off" />
|
|
<input type="hidden" v-model="studio_pwd" autocomplete="off" />
|
|
<view class="psdBnt" @click="goLive">确定</view>
|
|
</view>
|
|
<!-- 分享海报 -->
|
|
<view v-if="is_poster" class="poster">
|
|
<image mode="widthFix" :src="filename" />
|
|
<view v-if="filename">长按保存,分享朋友</view>
|
|
</view>
|
|
<!-- 完课证书 -->
|
|
<view v-if="imgSrc" class="certificate-image">
|
|
<image mode="widthFix" :src="imgSrc" />
|
|
</view>
|
|
|
|
<PayDialog v-if="init" :open.sync="payDialogOpen" :money="money" :now_money="now_money"
|
|
:memberMoney="Number(special.member_money)" :memberLink="memberLink" :isMember="!!isMember"
|
|
:special_id="special_id" :link_pay_uid="link_pay_uid" :pay_type_num="pay_type_num" :pink-id="pinkId"
|
|
:is-wechat="isWechat" :is-alipay="is_alipay" :is-balance="is_yue" :isMembership="true"
|
|
@fatherMethod="fatherMethod" :template-id="templateId" :wxpay-h5="wxpayH5" @change="changeVal" />
|
|
|
|
<!-- 评价弹窗 -->
|
|
<EvaluateDialog :dialog-show="dialogShow" :rate-value="rateValue" :image-list="imageList" @rate-change="rateChange"
|
|
@image-upload="imageUpload" @image-delete="imageDelete" @evaluate-submit="evaluateSubmit" />
|
|
|
|
<!-- 分享返佣 -->
|
|
<RebateGuide v-if="rebateMoney && isShareDisplaySwitch" :rebate-money="rebateMoney" @rebate-action="rebateAction" />
|
|
|
|
<TkiQrcode loadMake v-if="infoLoading && isQrcodeCanvasVisable" ref="qrcode" :showLoading="false" :val="qrcodeText"
|
|
@result="handleQrcodeCreateSuccess" />
|
|
<canvas canvas-id="poster" v-if="isPosterCanvasVisable" class="poster-canvas" />
|
|
<canvas canvas-id="poster2" v-if="isPosterCanvasVisable2" class="poster-canvas2" />
|
|
</BaseContainer>
|
|
</template>
|
|
|
|
<script>
|
|
import {
|
|
validitySpecial,
|
|
getSpecialNumberCourse,
|
|
addLearningRecords,
|
|
getLearningRecords,
|
|
getSpecialInfo,
|
|
getSpecialList,
|
|
getTopicSpecialTestPaper,
|
|
getSpecialTemplateIds,
|
|
getSpecialMaterial,
|
|
getSpecialReplyData,
|
|
getSpecialReplyList,
|
|
getGroupList,
|
|
getInspectData,
|
|
getSpecialCertificate,
|
|
getSpecialCertificateInfo,
|
|
getCourseList,
|
|
getColumnTask,
|
|
getLiveRecordList,
|
|
submitSpecialComment,
|
|
getBarrageList,
|
|
// setBarrageIndex,
|
|
getTaskLink,
|
|
getSpecialPlayNum,
|
|
collectSpecial,
|
|
receiveGift,
|
|
getSpecialPinkList,
|
|
aliPayApp,
|
|
aliPayWap,
|
|
delSpecialOrder,
|
|
getGiftToken,
|
|
getMemberRechargeApi
|
|
} from "@/api/special";
|
|
import { getLecturer, getRebateAmount } from "@/api/auth";
|
|
import specialType from "@/constants/special-type";
|
|
import mpHtml from "mp-html/dist/uni-app/components/mp-html/mp-html.vue";
|
|
import EvaluateList from "@/components/EvaluateList/index.vue";
|
|
import RebateGuide from "@/components/RebateGuide/index.vue";
|
|
import EvaluateDialog from "@/components/EvaluateDialog/index.vue";
|
|
import userInfoMixins from "@/mixins/userInfo";
|
|
import PayDialog from "@/components/PayDialog/index.vue";
|
|
import posterMixin from "@/mixins/poster";
|
|
import JoinVip from '@/components/JoinVip/index.vue';
|
|
|
|
import config from "@/config/index";
|
|
import { precheckLive } from "@/api/live";
|
|
import dayjs from "dayjs";
|
|
import { CUSTOMER_DETAIL_TYPE, CUSTOMER_SUPPORT_TYPE } from '@/constants/customer-type';
|
|
|
|
const { BASE_LIVE_URL } = config;
|
|
|
|
export default {
|
|
mixins: [userInfoMixins, posterMixin],
|
|
components: {
|
|
mpHtml,
|
|
EvaluateList,
|
|
RebateGuide,
|
|
EvaluateDialog,
|
|
PayDialog,
|
|
JoinVip,
|
|
},
|
|
filters: {
|
|
serial(value) {
|
|
return value < 9 ? "0" + (value + 1) : value + 1;
|
|
},
|
|
validityFormat(value) {
|
|
let result = "";
|
|
let days = Math.floor(value / 60 / 60 / 24);
|
|
let hours = Math.floor((value / 60 / 60) % 24);
|
|
let minutes = Math.floor((value / 60) % 60);
|
|
if (days) {
|
|
result += days + "天";
|
|
}
|
|
if (hours) {
|
|
result += hours + "小时";
|
|
}
|
|
return result + minutes + "分钟";
|
|
},
|
|
},
|
|
data() {
|
|
return {
|
|
imId:"",
|
|
memberLink: '',
|
|
memberMoney: '',
|
|
xtt_class:
|
|
"acea-row row-center-wrapper video_footer_btn_left_pic flex-auto",
|
|
xtt_class2:
|
|
"video_footer_btn_right acea-row row-column row-center-wrapper on",
|
|
init: false,
|
|
poster_image: "",
|
|
navTitle: "",
|
|
BarrageShowTime: 5,
|
|
infoLoading: false,
|
|
comment_switch: false,
|
|
special_id: 0,
|
|
parentActive: 0,
|
|
site_name: "",
|
|
RecordId: "",
|
|
count: 0,
|
|
special: {},
|
|
swiperlist: [],
|
|
pinkIngList: [],
|
|
otherTaskList: [],
|
|
columnTaskList: [],
|
|
liveTaskList: [],
|
|
cloumnNavlist: [
|
|
{
|
|
title: "目录",
|
|
value: 1,
|
|
},
|
|
{
|
|
title: "套餐",
|
|
value: 6,
|
|
},
|
|
{
|
|
title: "详情",
|
|
value: 2,
|
|
},
|
|
{
|
|
title: "评价",
|
|
value: 5,
|
|
},
|
|
],
|
|
otherNavlist: [
|
|
{
|
|
title: "目录",
|
|
value: 1,
|
|
},
|
|
{
|
|
title: "详情",
|
|
value: 2,
|
|
},
|
|
{
|
|
title: "评价",
|
|
value: 5,
|
|
},
|
|
],
|
|
liveNavlist: [
|
|
{
|
|
title: "回放目录",
|
|
value: 1,
|
|
},
|
|
{
|
|
title: "直播介绍",
|
|
value: 2,
|
|
},
|
|
],
|
|
active: 1,
|
|
open: true,
|
|
payDialogOpen: false, // 是否显示支付弹窗
|
|
loginShow: false,
|
|
is_pay: false,
|
|
isMember: 0,
|
|
otherLoading: false,
|
|
columnLoading: false,
|
|
liveLoading: false,
|
|
otherLoadend: false,
|
|
columnLoadend: false,
|
|
liveLoadend: false,
|
|
otherLoaded: false,
|
|
columnLoaded: false,
|
|
liveLoaded: false,
|
|
pay_type_num: -1,
|
|
pinkId: 0,
|
|
pinkInfo: {
|
|
pinkT: {
|
|
difftime: { hour: "00", minute: "00", second: "00" },
|
|
},
|
|
},
|
|
Barragelist: [],
|
|
otherLoadTitle: "上拉加载更多",
|
|
columnLoadTitle: "上拉加载更多",
|
|
liveLoadTitle: "上拉加载更多",
|
|
money: 0,
|
|
where: {
|
|
page: 1,
|
|
limit: 16,
|
|
special_id: 0,
|
|
source_id: 0,
|
|
},
|
|
where2: {
|
|
page: 1,
|
|
limit: 16,
|
|
special_id: 0,
|
|
source_id: 0,
|
|
},
|
|
orderId: null,
|
|
is_gift: false,
|
|
paid: false,
|
|
link_pay: false,
|
|
link_pay_uid: 0,
|
|
uid: 0,
|
|
wechat_qrcode: "",
|
|
is_code: false,
|
|
isWechat: false,
|
|
is_live: false,
|
|
url: "/pages/index/login",
|
|
isPink: false,
|
|
pinkOrderId: '',
|
|
oid: 0,
|
|
barrageStatus: true,
|
|
num: null,
|
|
stream_name: "",
|
|
password: false,
|
|
liveInfo: {},
|
|
qr_password: "",
|
|
studio_pwd: null,
|
|
is_alipay: false, //支付宝是否开启
|
|
is_yue: false, //余额是否开启
|
|
now_money: 0, //余额
|
|
lecturer: null,
|
|
specialType,
|
|
topFocus: true,
|
|
record: {
|
|
recordCoujnt: 0,
|
|
},
|
|
scrollData: [],
|
|
templateId: "",
|
|
problemList: [],
|
|
questionList: [],
|
|
is_poster: false,
|
|
filename: "",
|
|
imgSrc: "",
|
|
wxpayH5: false,
|
|
dialogShow: false,
|
|
rateValue: 5, // 评价打分
|
|
imageList: [], // 评价上传图片
|
|
evaluateList: [],
|
|
evaluateLoading: false,
|
|
evaluateFinished: false,
|
|
evaluatePage: 1,
|
|
evaluateLimit: 10,
|
|
evaluateWhole: 0,
|
|
evaluateScore: 0,
|
|
isBatch: false,
|
|
materialList: [],
|
|
special_validity: -1, // -1 未购买显示课程有效期 0 已购买并永久 >0 已购买并有有效期
|
|
rebateMoney: 0,
|
|
isShareDisplaySwitch: false,
|
|
isOpenWeixing: false,
|
|
gift_uid: 0,
|
|
gift_order_id: 0,
|
|
gift: 0,
|
|
spread_uid: 0,
|
|
isPosterCanvasVisable2: false,
|
|
site_url: '',
|
|
TOUTIAO_STATUS:false
|
|
|
|
};
|
|
},
|
|
watch: {
|
|
pay_type_num() {
|
|
this.getSubscribeId();
|
|
},
|
|
},
|
|
onShow() {
|
|
if (this.isOpenWeixing && this.orderId) {
|
|
this.$util.wxh5PayIsSuccess(this.orderId, 1, this);
|
|
this.isOpenWeixing = false;
|
|
}
|
|
this.getSpecialInfo();
|
|
},
|
|
onUnload() {
|
|
clearInterval(this.timerFlag);
|
|
},
|
|
onLoad(options) {
|
|
let id = 0;
|
|
const parmData = this.$util.mergeLaunchParams(options)
|
|
if (parmData.id) id = parmData.id;
|
|
if (parmData.goid) {
|
|
this.gift = 1
|
|
this.spread_uid = parmData.guid
|
|
this.gift_order_id = parmData.goid
|
|
this.gift_uid = parmData.guid
|
|
}
|
|
|
|
this.special_id = Number(id);
|
|
if (this.special_id) {
|
|
this.where.special_id = this.special_id;
|
|
this.where2.special_id = this.special_id;
|
|
}
|
|
this.getSpecialInfo().then(() => {
|
|
this.getLecturer();
|
|
this.getPinkIngLists();
|
|
this.getProblem();
|
|
this.getPinkInfo();
|
|
|
|
if (this.special.type != 4) {
|
|
this.getInspect();
|
|
|
|
if (this.comment_switch) {
|
|
this.getEvaluateStatus();
|
|
this.getEvaluateList();
|
|
} else {
|
|
if (this.special == 5) {
|
|
for (let i = 0; i < this.cloumnNavlist.length; i++) {
|
|
if (this.cloumnNavlist[i].value == 5) {
|
|
this.cloumnNavlist.splice(i, 1);
|
|
break;
|
|
}
|
|
}
|
|
} else {
|
|
for (let j = 0; j < this.otherNavlist.length; j++) {
|
|
if (this.otherNavlist[j].value == 5) {
|
|
this.otherNavlist.splice(j, 1);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
this.getCourseLiveData();
|
|
});
|
|
|
|
this.validitySpecial();
|
|
this.getNumberCourses();
|
|
this.addLearningRecords();
|
|
this.getSubscribeId();
|
|
this.specialMaterial();
|
|
this.rebateAmount();
|
|
this.getGroupList();
|
|
this.getMemberRecharge();
|
|
/* #ifdef MP-TOUTIAO */
|
|
this.TOUTIAO_STATUS = true;
|
|
/* #endif */
|
|
|
|
},
|
|
created() {
|
|
//#ifdef MP-WEIXIN
|
|
wx.showShareMenu({
|
|
withShareTicket: true,
|
|
menus: ['shareAppMessage', 'shareTimeline']
|
|
});
|
|
//#endif
|
|
},
|
|
// 分享朋友
|
|
onShareAppMessage() {
|
|
console.log();
|
|
return { title: this.special.title, path: '/pages/special/details?id=' + this.special_id+'&spread_uid='+(this.userInfo.uid??0) }
|
|
},
|
|
onShareTimeline() {
|
|
return {
|
|
title: this.special.title,
|
|
imageUrl: this.swiperlist[0]
|
|
};
|
|
},
|
|
onReachBottom() {
|
|
if (this.active === 1) {
|
|
if (this.special.type === 4) {
|
|
this.getLiveTask();
|
|
} else {
|
|
this.getCourseList();
|
|
}
|
|
}
|
|
if (this.active === 6) {
|
|
this.getCloumnTask();
|
|
}
|
|
if (this.active === 5) {
|
|
this.getEvaluateList();
|
|
}
|
|
},
|
|
computed: {
|
|
shareQrcodeData() {
|
|
return {
|
|
spread_uid: this.userInfo?.uid,
|
|
id: this.special_id,
|
|
};
|
|
},
|
|
},
|
|
methods: {
|
|
imCallback(e) {
|
|
console.log("跳转IM客服成功", e.detail);
|
|
},
|
|
onimError(e) {
|
|
console.log("拉起IM客服失败", e.detail);
|
|
},
|
|
fatherMethod() {
|
|
this.init = false;
|
|
},
|
|
getMemberRecharge() {
|
|
getMemberRechargeApi().then(res => {
|
|
this.memberLink = res.data.url;
|
|
}).catch(err => {
|
|
// console.log(err)
|
|
})
|
|
},
|
|
getGroupList() {
|
|
getGroupList(this.special_id).then((res) => {
|
|
this.scrollData = res.data;
|
|
});
|
|
},
|
|
async getPinkInfo() {
|
|
if (!this.pinkId) return;
|
|
try {
|
|
const { data } = await this.getPinkInfo(this.pinkId);
|
|
this.pinkInfo = data;
|
|
this.CountDown({ name: "pinkInfo.pinkT", time_name: "stop_time" });
|
|
} catch (err) { }
|
|
},
|
|
getCourseLiveData() {
|
|
switch (this.special.type) {
|
|
case 5:
|
|
this.getCourseList();
|
|
this.getCloumnTask();
|
|
break;
|
|
case 4:
|
|
this.getLiveTask();
|
|
break;
|
|
case 1:
|
|
case 2:
|
|
case 3:
|
|
case 6:
|
|
this.getCourseList();
|
|
break;
|
|
}
|
|
},
|
|
validitySpecial() {
|
|
validitySpecial(this.special_id).then(({ data }) => {
|
|
this.special_validity = data.validity;
|
|
});
|
|
},
|
|
// 点击我要评价
|
|
userEvaluate() {
|
|
this.$util.checkLogin(() => {
|
|
if (
|
|
!(this.is_pay || (!this.special.member_pay_type && this.isMember))
|
|
) {
|
|
uni.showModal({
|
|
title: "提示",
|
|
content: "购买后即可进行评价,是否购买?",
|
|
confirmText: "购买",
|
|
success: ({ confirm }) => {
|
|
if (!confirm) return;
|
|
this.payDialogOpen = true;
|
|
this.init = true;
|
|
},
|
|
});
|
|
} else {
|
|
this.dialogShow = true;
|
|
}
|
|
}, true);
|
|
},
|
|
getexchange() {
|
|
this.$util.checkLogin(() => {
|
|
uni.navigateTo({
|
|
url: `/pages/special/exchange?special_id=${this.special_id}`
|
|
});
|
|
}, true);
|
|
|
|
},
|
|
// 获取评价状态
|
|
getEvaluateStatus() {
|
|
getSpecialReplyData(this.special_id).then((resData) => {
|
|
if (resData.code === 200) {
|
|
let data = resData.data;
|
|
this.evaluateWhole = data.whole;
|
|
this.evaluateScore = data.score;
|
|
} else {
|
|
this.$util.showMsg(resData.msg);
|
|
}
|
|
});
|
|
},
|
|
// 获取评价列表
|
|
async getEvaluateList() {
|
|
if (this.evaluateLoading || this.evaluateFinished) {
|
|
return;
|
|
}
|
|
this.evaluateLoading = true;
|
|
|
|
try {
|
|
const resData = await getSpecialReplyList(
|
|
this.special_id,
|
|
this.evaluatePage++,
|
|
this.evaluateLimit
|
|
);
|
|
if (resData.code === 200) {
|
|
let data = resData.data;
|
|
this.evaluateList = this.evaluateList.concat(data);
|
|
this.evaluateFinished = this.evaluateLimit > data.length;
|
|
} else {
|
|
this.$util.showMsg(resData.msg);
|
|
}
|
|
} catch (err) { }
|
|
this.evaluateLoading = false;
|
|
},
|
|
// 点击遮罩层
|
|
maskClick() {
|
|
this.dialogShow = false;
|
|
this.password = false;
|
|
this.is_poster = false;
|
|
this.open = true;
|
|
this.imgSrc = "";
|
|
},
|
|
// 提交评价
|
|
async evaluateSubmit(text) {
|
|
uni.showLoading({ mask: true });
|
|
|
|
try {
|
|
const { msg } = await submitSpecialComment(this.special_id, {
|
|
satisfied_score: this.rateValue,
|
|
comment: text.trim(),
|
|
pics: this.imageList,
|
|
});
|
|
uni.hideLoading();
|
|
|
|
this.$util.showMsg(msg);
|
|
this.dialogShow = false;
|
|
this.getEvaluateStatus();
|
|
this.evaluateFinished = false;
|
|
this.evaluatePage = 1;
|
|
this.evaluateList = [];
|
|
this.getEvaluateList();
|
|
} catch (err) {
|
|
uni.hideLoading();
|
|
this.$util.showMsg(err.msg);
|
|
}
|
|
},
|
|
// 删除图片
|
|
imageDelete(index) {
|
|
this.imageList.splice(index, 1);
|
|
},
|
|
// 上传图片
|
|
imageUpload(path) {
|
|
this.imageList.push(path);
|
|
},
|
|
// 评分
|
|
rateChange(value) {
|
|
this.rateValue = value;
|
|
},
|
|
handleQrcodeCreateSuccess(path) {
|
|
this.x_cb(path);
|
|
},
|
|
handleCreateSharePoster() {
|
|
this.$util.checkLogin(() => {
|
|
this.poster_image = this.special.poster_image;
|
|
this.createSharePoster("poster", {
|
|
id: this.special_id,
|
|
spread_uid: this.userInfo?.uid,
|
|
url: 'pages/special/details'
|
|
});
|
|
|
|
}, true);
|
|
},
|
|
// 是否可以发放证书
|
|
getInspect() {
|
|
getInspectData(this.special_id)
|
|
.then((res) => {
|
|
if (200 == res.code) {
|
|
uni.showModal({
|
|
title: "提示",
|
|
content: "恭喜您已达到证书发放标准,是否领取?",
|
|
confirmText: "领取",
|
|
cancelText: "取消",
|
|
success: ({ confirm }) => {
|
|
if (!confirm) return;
|
|
this.getCertificate();
|
|
},
|
|
});
|
|
}
|
|
})
|
|
.catch((err) => {
|
|
// console.log(err);
|
|
});
|
|
},
|
|
async renderProductPoster2(data) {
|
|
this.isPosterCanvasVisable2 = true
|
|
let id = "poster2"
|
|
let task1 = this.$util.getImagePath(data.certificate.background);
|
|
let task2 = this.$util.getImagePath(data.certificate.qr_code);
|
|
const [bgPath, codePath] = await Promise.all([task1, task2]);
|
|
let WIDTH = 600;
|
|
let HEIGHT = 850;
|
|
let site_name = "知识付费"
|
|
let context = uni.createCanvasContext(id);
|
|
|
|
context.drawImage(bgPath, 0, 0);
|
|
context.drawImage(codePath, 220, 557, 160, 160);
|
|
|
|
context.fillStyle = "rgba(255, 255, 255, 0.8)";
|
|
context.fillRect(220, 724, 160, 36);
|
|
|
|
context.font = "bold 34px sans-serif";
|
|
context.textAlign = "center";
|
|
context.fillStyle = "#29466D";
|
|
context.fillText(data.nickname, 300, 296);
|
|
|
|
context.font = "24px sans-serif";
|
|
context.fillText(
|
|
"颁发时间:" +
|
|
dayjs(data.add_time * 1000).format("YYYY.MM.DD"),
|
|
300,
|
|
490
|
|
);
|
|
|
|
context.font = "20px sans-serif";
|
|
context.fillStyle = "#666666";
|
|
context.fillText("长按二维码查看", 300, 748);
|
|
|
|
context.font = "28px sans-serif";
|
|
context.textAlign = "start";
|
|
context.fillStyle = "#333333";
|
|
|
|
let lineWidth = 0;
|
|
let substringFrom = 0;
|
|
let offsetTop = 364;
|
|
for (let i = 0; i < data.certificate.explain.length; i++) {
|
|
lineWidth += context.measureText(
|
|
data.certificate.explain[i]
|
|
).width;
|
|
if (lineWidth > 434) {
|
|
context.fillText(
|
|
data.certificate.explain.substring(substringFrom, i),
|
|
83,
|
|
offsetTop
|
|
);
|
|
lineWidth = 0;
|
|
substringFrom = i;
|
|
offsetTop += 50;
|
|
}
|
|
if (i == data.certificate.explain.length - 1) {
|
|
context.fillText(
|
|
data.certificate.explain.substring(substringFrom, i),
|
|
83,
|
|
offsetTop
|
|
);
|
|
}
|
|
}
|
|
context.draw(true, () => {
|
|
uni.canvasToTempFilePath(
|
|
{
|
|
canvasId: id,
|
|
fileType: "png",
|
|
destWidth: WIDTH,
|
|
destHeight: HEIGHT,
|
|
success: (res) => {
|
|
this.isPosterCanvasVisable2 = false
|
|
uni.previewImage({
|
|
current: 0,
|
|
urls: [res.tempFilePath],
|
|
})
|
|
context = null;
|
|
},
|
|
fail: (err) => {
|
|
this.isPosterCanvasVisable2 = false
|
|
context = null;
|
|
},
|
|
}
|
|
);
|
|
});
|
|
},
|
|
// 领取证书
|
|
getCertificate() {
|
|
getSpecialCertificate(this.special_id).then((res) => {
|
|
this.$util.showMsg("领取成功,证书制作中…");
|
|
this.getCertificateInfo(res.msg);
|
|
});
|
|
},
|
|
// 获取证书信息
|
|
getCertificateInfo(id) {
|
|
getSpecialCertificateInfo(id).then((res) => {
|
|
this.renderProductPoster2(res.data);
|
|
});
|
|
},
|
|
// 去练习、答题
|
|
goQuestion(question) {
|
|
this.$util.checkLogin(() => {
|
|
if (question.is_pay || this.is_pay) {
|
|
if (question.type == 1) {
|
|
uni.navigateTo({
|
|
url: `/pages/topic/problem_index?id=${question.id}`,
|
|
});
|
|
} else {
|
|
uni.navigateTo({
|
|
url: `/pages/special/question_index?id=${question.id}`,
|
|
});
|
|
}
|
|
} else {
|
|
this.init = true;
|
|
this.pay_type_num = 2;
|
|
this.payDialogOpen = true;
|
|
}
|
|
}, true);
|
|
},
|
|
// 获取练习
|
|
async getProblem() {
|
|
try {
|
|
const { data: questions } = await getTopicSpecialTestPaper(
|
|
this.special_id
|
|
);
|
|
if (questions.length) {
|
|
if (this.special.type === 5) {
|
|
this.cloumnNavlist.splice(this.cloumnNavlist.length - 1, 0, {
|
|
title: "练习",
|
|
value: 3,
|
|
});
|
|
} else {
|
|
this.otherNavlist.splice(this.otherNavlist.length - 1, 0, {
|
|
title: "练习",
|
|
value: 3,
|
|
});
|
|
}
|
|
for (var i = questions.length; i--;) {
|
|
questions[i].rate = Math.floor(
|
|
(questions[i].done / questions[i].item_number) * 100
|
|
);
|
|
}
|
|
this.problemList = questions;
|
|
}
|
|
} catch (err) { }
|
|
this.getQuestion();
|
|
},
|
|
// 获取考试
|
|
getQuestion() {
|
|
getTopicSpecialTestPaper(this.special_id, 2).then(
|
|
({ data: questions }) => {
|
|
if (questions.length) {
|
|
console.log(this.special.type, 1472);
|
|
if (this.special.type === 5) {
|
|
this.cloumnNavlist.splice(this.cloumnNavlist.length - 1, 0, {
|
|
title: "考试",
|
|
value: 4,
|
|
});
|
|
} else {
|
|
this.otherNavlist.splice(this.otherNavlist.length - 1, 0, {
|
|
title: "考试",
|
|
value: 4,
|
|
});
|
|
console.log(this.otherNavlist);
|
|
}
|
|
}
|
|
this.questionList = questions;
|
|
}
|
|
);
|
|
},
|
|
// 获取订阅通知模板id
|
|
getSubscribeId() {
|
|
if (!this.isWechat) {
|
|
return;
|
|
}
|
|
|
|
getSpecialTemplateIds(this.pay_type_num, this.special_id).then((res) => {
|
|
this.templateId = res.msg;
|
|
});
|
|
},
|
|
show(special) {
|
|
// if (special.is_light) {
|
|
// window.location.href = "{:url('special/single_details')}?id=" + special.id;
|
|
// } else {
|
|
// special.active = !special.active;
|
|
// }
|
|
special.active = !special.active;
|
|
},
|
|
// 讲师详情
|
|
getLecturer() {
|
|
getLecturer(this.special.mer_id).then(({ data }) => {
|
|
this.lecturer = data;
|
|
});
|
|
},
|
|
getSpecialInfo() {
|
|
return getSpecialInfo(this.special_id, this.gift_uid, this.gift_order_id, this.gift, this.spread_uid)
|
|
.then(({ data }) => {
|
|
const {
|
|
special,
|
|
orderId,
|
|
isPay,
|
|
gift,
|
|
is_member,
|
|
link_pay,
|
|
pinkId,
|
|
wechat_qrcode,
|
|
link_pay_uid,
|
|
isWechat,
|
|
BarrageShowTime,
|
|
isPink,
|
|
pinkOrderId,
|
|
oid,
|
|
barrage_index,
|
|
liveInfo,
|
|
is_alipay,
|
|
site_url,
|
|
is_yue,
|
|
now_money,
|
|
wxpayH5,
|
|
share_display,
|
|
uid,
|
|
isBatch,
|
|
comment_switch,
|
|
d_im
|
|
} = data;
|
|
Object.assign(this, {
|
|
navTitle: special.title,
|
|
infoLoading: true,
|
|
orderId,
|
|
is_gift: !!gift,
|
|
link_pay: !!link_pay,
|
|
link_pay_uid: link_pay ? link_pay_uid : 0,
|
|
comment_switch,
|
|
isBatch,
|
|
uid,
|
|
BarrageShowTime,
|
|
special: special.special,
|
|
swiperlist: special.swiperlist,
|
|
is_pay: isPay,
|
|
paid: isPay,
|
|
isMember: is_member,
|
|
pinkId,
|
|
money: Number(special.special.money),
|
|
wechat_qrcode,
|
|
isWechat,
|
|
is_live: special.special.is_live,
|
|
url: isWechat ? "/pages/index/login" : "/pages/login/phone_check",
|
|
isPink,
|
|
pinkOrderId,
|
|
oid,
|
|
num: barrage_index,
|
|
stream_name: liveInfo.stream_name || "",
|
|
liveInfo,
|
|
studio_pwd: liveInfo.studio_pwd,
|
|
is_alipay: !!is_alipay,
|
|
site_url: site_url,
|
|
is_yue: !!is_yue,
|
|
now_money: Number(now_money),
|
|
wxpayH5,
|
|
isShareDisplaySwitch: share_display,
|
|
imId:d_im
|
|
});
|
|
this.barrage();
|
|
})
|
|
.catch((err) => {
|
|
this.$util.showMsg(err.msg);
|
|
setTimeout(() => {
|
|
// #ifndef MP
|
|
uni.reLaunch({
|
|
url: '/pages/index/index'
|
|
})
|
|
// #endif
|
|
// #ifdef MP
|
|
uni.navigateBack({
|
|
fail: (err) => {
|
|
uni.switchTab({
|
|
url: '/pages/index/index'
|
|
});
|
|
}
|
|
})
|
|
// #endif
|
|
}, 2000);
|
|
});
|
|
},
|
|
// 获取浏览人数
|
|
getLearningRecords() {
|
|
getLearningRecords(this.special_id).then(({ data }) => {
|
|
this.record = data;
|
|
});
|
|
},
|
|
// 记录浏览人数
|
|
addLearningRecords() {
|
|
addLearningRecords(this.special_id).then(() => {
|
|
this.getLearningRecords();
|
|
});
|
|
},
|
|
// 拼团列表
|
|
getPinkIngLists() {
|
|
if (!this.special.is_pink) return;
|
|
getSpecialPinkList(this.special_id, 0).then(({ data }) => {
|
|
this.pinkIngList = data;
|
|
this.CountDown({ name: "pinkIngList", time_name: "stop_time" });
|
|
});
|
|
},
|
|
// 专题下章节数量
|
|
getNumberCourses() {
|
|
getSpecialNumberCourse(this.special_id).then(({ data }) => {
|
|
this.count = data;
|
|
});
|
|
},
|
|
goLive() {
|
|
if (!this.qr_password) return this.$util.showMsg("请输入密码");
|
|
if (this.qr_password != this.studio_pwd)
|
|
return this.$util.showMsg("密码不正确");
|
|
uni.navigateTo({
|
|
url: `/pages/live/index?${this.$util.objToParam({
|
|
stream_name: this.stream_name,
|
|
record_id: this.RecordId,
|
|
})}`,
|
|
});
|
|
// document.cookie =
|
|
// this.stream_name +
|
|
// "studio_pwd" +
|
|
// "=" +
|
|
// this.studio_pwd +
|
|
// ";expires=7200" +
|
|
// ";path=/";
|
|
// window.location.href = $h.U({
|
|
// c: "live",
|
|
// a: "index",
|
|
// q: { stream_name: this.stream_name, record_id: this.RecordId },
|
|
// });
|
|
},
|
|
barrage() {
|
|
if (typeof this.BarrageShowTime == "string")
|
|
this.BarrageShowTime = parseInt(this.BarrageShowTime);
|
|
this.BarrageShowTime = this.BarrageShowTime * 1000;
|
|
|
|
getBarrageList(this.special_id).then(({ data }) => {
|
|
this.$set(this, "Barragelist", data);
|
|
this.Barragelist = this.Barragelist || [];
|
|
let len = this.Barragelist.length;
|
|
if (!len) return;
|
|
// this.timerFlag = setInterval(() => {
|
|
// this.num = this.num + 1;
|
|
// this.num = this.num >= len ? 0 : this.num;
|
|
// this.num = this.num < 0 ? 0 : this.num;
|
|
// this.barrageStatus = !this.barrageStatus;
|
|
// setBarrageIndex(this.num);
|
|
// }, this.BarrageShowTime);
|
|
});
|
|
},
|
|
goPink(pink_id, uid, orderId, oid = 0) {
|
|
if (uid == this.uid && this.isPink) {
|
|
uni.navigateTo({
|
|
url:
|
|
"/pages/special/pink?" +
|
|
this.$util.objToParam({
|
|
orderId: orderId,
|
|
pink_id: this.pinkId,
|
|
special_id: this.special.id,
|
|
is_help: 0,
|
|
oid: oid
|
|
}),
|
|
});
|
|
} else {
|
|
uni.navigateTo({
|
|
url:
|
|
"/pages/special/pink?" +
|
|
this.$util.objToParam({
|
|
orderId: orderId,
|
|
pink_id: pink_id > 0 ? pink_id : this.pinkId,
|
|
special_id: this.special.id,
|
|
is_help: 1,
|
|
}),
|
|
});
|
|
}
|
|
},
|
|
follow() {
|
|
uni.previewImage({
|
|
current: 0,
|
|
urls: [this.wechat_qrcode],
|
|
});
|
|
},
|
|
getPartakePinkUrl() {
|
|
return `/pages/special/details?id=${this.special_id}`;
|
|
},
|
|
pay_order(data) {
|
|
this.orderId = data.data.result.orderId || "";
|
|
switch (data.data.status) {
|
|
case "PAY_ERROR":
|
|
case "ORDER_EXIST":
|
|
case "ORDER_ERROR":
|
|
this.extendOrder(data.msg);
|
|
break;
|
|
case "WECHAT_PAY":
|
|
this.wechatPay(data.data.result.jsConfig);
|
|
break;
|
|
case "WECHAT_H5_PAY":
|
|
this.payDialogOpen = false;
|
|
this.$util.wechatH5Pay(data.data.result.jsConfig, this);
|
|
break;
|
|
case "WECHAT_ROUTINE_PAY":
|
|
this.$util.wechatRoutinePay(data.data.result.jsConfig, this);
|
|
break;
|
|
case "SUCCESS":
|
|
this.successOrder(data.msg);
|
|
break;
|
|
case "ZHIFUBAO_PAY":
|
|
this.aliPay(data.data.result, "special");
|
|
break;
|
|
case 'TOUTIAO_PAY':
|
|
this.$util.toutiaoPay(data.data.result.jsConfig, this);
|
|
break;
|
|
case 'KUAISHOU_PAY':
|
|
this.$util.kuaishouPay(data.data.result.jsConfig, this);
|
|
break
|
|
}
|
|
},
|
|
aliPay(msn, type) {
|
|
this.$util.aliPay(msn, type, this);
|
|
},
|
|
wechatPay: function (config) {
|
|
this.$util.weixinpay(config, this);
|
|
},
|
|
successOrder(msg) {
|
|
this.$util.showMsg(msg ? msg : "支付成功");
|
|
switch (parseInt(this.pay_type_num)) {
|
|
case 1:
|
|
uni.navigateTo({
|
|
url: `/pages/special/gift_special?orderId=${this.orderId}`,
|
|
});
|
|
break;
|
|
case 2:
|
|
this.paid = true;
|
|
this.is_pay = true;
|
|
this.payDialogOpen = false;
|
|
this.updateMaterialStatus();
|
|
break;
|
|
case 3:
|
|
uni.navigateTo({
|
|
url: `/pages/special/pink?orderId=${this.orderId}`,
|
|
});
|
|
break;
|
|
}
|
|
validitySpecial(this.special_id).then((res) => {
|
|
this.special_validity = res.data.validity;
|
|
});
|
|
},
|
|
updateMaterialStatus() {
|
|
this.otherLoading = false;
|
|
this.otherLoaded = false;
|
|
this.where.page = 1;
|
|
this.$set(this, "otherTaskList", []);
|
|
this.getCourseList();
|
|
},
|
|
extendOrder(msg) {
|
|
let that = this;
|
|
if (typeof msg === "object") {
|
|
if (msg.errMsg === "chooseWXPay:cancel") {
|
|
msg = "微信支付取消";
|
|
} else {
|
|
msg = "支付失败";
|
|
}
|
|
} else {
|
|
msg = "支付失败";
|
|
}
|
|
this.$util.showMsg(msg);
|
|
this.payDialogOpen = false;
|
|
if (this.orderId) {
|
|
delSpecialOrder(this.orderId).then((res) => {
|
|
console.log(res);
|
|
});
|
|
}
|
|
},
|
|
setMeal(item) {
|
|
if (this.special.type == 5) {
|
|
uni.navigateTo({
|
|
url: item.is_light
|
|
? "/pages/special/single_details"
|
|
: "/pages/special/details" + `?id=${item.id}`,
|
|
});
|
|
}
|
|
},
|
|
// 点击专题目录
|
|
play(item) {
|
|
if (this.active == 6) {
|
|
uni.navigateTo({
|
|
url: `/pages/special/details?id=${item.id}`,
|
|
});
|
|
} else {
|
|
this.$util.checkLogin(() => {
|
|
if (
|
|
!item.is_free ||
|
|
item.is_try ||
|
|
this.is_pay ||
|
|
(!this.special.member_pay_type && this.isMember)
|
|
) {
|
|
this.goPlayTask(item);
|
|
} else {
|
|
|
|
uni.showModal({
|
|
title: "提示",
|
|
content: "购买后可操作,是否购买?",
|
|
confirmText: "购买",
|
|
success: ({ confirm }) => {
|
|
if (!confirm) return;
|
|
this.payDialogOpen = true;
|
|
this.init = true
|
|
this.pay_type_num = 2;
|
|
},
|
|
});
|
|
}
|
|
}, true)
|
|
}
|
|
|
|
|
|
},
|
|
// 专题列表
|
|
async getCourseList() {
|
|
if (this.otherLoading) return;
|
|
if (this.otherLoaded) return;
|
|
this.otherLoadTitle = "";
|
|
this.otherLoading = true;
|
|
|
|
try {
|
|
const { data } = await getCourseList(this.where);
|
|
let list = data.list || [],
|
|
taskList = [];
|
|
list.forEach((item) => {
|
|
item.active = false;
|
|
});
|
|
taskList = this.$util.SplitArray(list, this.otherTaskList);
|
|
taskList.forEach((item, index) => {
|
|
item.active = !index;
|
|
});
|
|
this.where.page = data.page;
|
|
this.otherLoaded = list.length < this.where.limit;
|
|
this.otherLoadTitle = this.otherLoaded
|
|
? "我也是有底线的"
|
|
: "上拉加载更多";
|
|
this.otherLoading = false;
|
|
console.log(taskList);
|
|
this.$set(this, "otherTaskList", taskList);
|
|
} catch (error) {
|
|
this.otherLoading = false;
|
|
this.otherLoadTitle = "加载更多";
|
|
}
|
|
},
|
|
// 套餐列表
|
|
async getCloumnTask() {
|
|
if (this.columnLoading) return;
|
|
if (this.columnLoaded) return;
|
|
this.columnLoadTitle = "";
|
|
this.columnLoading = true;
|
|
|
|
try {
|
|
const { data } = await getColumnTask(this.where2);
|
|
let list = data.list || [];
|
|
let taskList = this.$util.SplitArray(list, this.columnTaskList);
|
|
this.where2.page = data.page;
|
|
this.columnLoaded = list.length < this.where2.limit;
|
|
this.columnLoadTitle = this.columnLoaded
|
|
? "我也是有底线的"
|
|
: "上拉加载更多";
|
|
this.columnLoading = false;
|
|
this.$set(this, "columnTaskList", taskList);
|
|
} catch (error) {
|
|
this.columnLoading = false;
|
|
this.columnLoadTitle = "加载更多";
|
|
}
|
|
},
|
|
// 直播回放列表
|
|
async getLiveTask() {
|
|
let that = this;
|
|
if (this.liveLoading) return;
|
|
if (this.liveLoaded) return;
|
|
this.liveLoadTitle = "";
|
|
this.liveLoading = true;
|
|
|
|
try {
|
|
const res = await getLiveRecordList(
|
|
this.special_id,
|
|
this.where.page,
|
|
this.where.limit
|
|
);
|
|
let data = res.data.data;
|
|
let list = data || [];
|
|
let taskList = this.$util.SplitArray(list, this.liveTaskList);
|
|
this.where.page = this.where.page + 1;
|
|
this.liveLoaded = list.length < this.where.limit;
|
|
this.liveLoadTitle = this.liveLoaded
|
|
? "我也是有底线的"
|
|
: "上拉加载更多";
|
|
this.liveLoading = false;
|
|
this.$set(this, "liveTaskList", taskList);
|
|
} catch (error) {
|
|
this.liveLoading = false;
|
|
this.liveLoadTitle = "加载更多";
|
|
}
|
|
},
|
|
//播放素材
|
|
async goPlayTask(item) {
|
|
if (item.is_light) {
|
|
return uni.navigateTo({
|
|
url: `/pages/special/single_details?id=${item.id}`,
|
|
});
|
|
}
|
|
|
|
uni.showLoading({ mask: true });
|
|
|
|
try {
|
|
await getTaskLink(item.id, item.special_id);
|
|
await getSpecialPlayNum(item.id, item.special_id);
|
|
uni.hideLoading();
|
|
const url =
|
|
"/pages/special/" +
|
|
(this.special.type == 1 || this.type == 1
|
|
? "task_text_info"
|
|
: "task_info") +
|
|
"?" +
|
|
this.$util.objToParam({
|
|
id: item.id,
|
|
specialId: item.special_id,
|
|
viewing_time: (item.watch && item.watch.viewing_time) ? item.watch.viewing_time : 0,
|
|
isWechat: this.isWechat,
|
|
is_alipay: this.is_alipay,
|
|
is_yue: this.is_yue,
|
|
wxpayH5: this.wxpayH5,
|
|
memberLink: this.memberLink,
|
|
now_money: this.now_money,
|
|
templateIds: this.templateIds
|
|
});
|
|
uni.hideLoading();
|
|
uni.navigateTo({
|
|
url,
|
|
});
|
|
} catch (err) {
|
|
uni.hideLoading();
|
|
}
|
|
},
|
|
//滑动底部加载
|
|
bScrollInit: function () {
|
|
let that = this;
|
|
$h.EventUtil.listenTouchDirection(
|
|
document,
|
|
function () {
|
|
if (that.special.type == 5) {
|
|
that.columnLoading == false && that.getCloumnTask();
|
|
} else {
|
|
that.otherLoading == false && that.getCourseList();
|
|
}
|
|
},
|
|
false
|
|
);
|
|
},
|
|
// 点击收藏
|
|
collect() {
|
|
this.$util.checkLogin(() => {
|
|
collectSpecial(this.special_id)
|
|
.then(() => {
|
|
this.special.collect = !this.special.collect;
|
|
this.$util.showMsg(
|
|
this.special.collect ? "收藏成功" : "取消收藏成功"
|
|
);
|
|
})
|
|
.catch((err) => {
|
|
console.log(err);
|
|
});
|
|
}, true);
|
|
},
|
|
// 点击客服
|
|
customerService() {
|
|
this.$util.goSupport(CUSTOMER_DETAIL_TYPE.GOOD, CUSTOMER_SUPPORT_TYPE.SPECIAL, this.special_id, this.special.mer_id);
|
|
},
|
|
//打开支付插件,并检测登录状态,没有登录,打开登录插件
|
|
OpenPay(is_pink) {
|
|
this.init = true;
|
|
this.pay_type_num = is_pink;
|
|
this.$util.checkLogin(() => {
|
|
switch (is_pink) {
|
|
case 1:
|
|
if (!this.special.pay_type) {
|
|
return this.$util.showMsg("免费的不可以赠送哦");
|
|
}
|
|
if (this.isMember && !this.special.member_pay_type) {
|
|
return this.$util.showMsg("会员价免费的不可以赠送哦");
|
|
}
|
|
this.money = Number(this.special.money);
|
|
this.payDialogOpen = true;
|
|
break;
|
|
case 2:
|
|
if (this.isMember) {
|
|
this.money = Number(
|
|
this.special.member_pay_type ? this.special.member_money : 0
|
|
);
|
|
} else {
|
|
this.money = Number(this.special.money);
|
|
}
|
|
this.payDialogOpen = true;
|
|
break;
|
|
case 3:
|
|
this.money = Number(this.special.pink_money);
|
|
this.payDialogOpen = true;
|
|
break;
|
|
case 4:
|
|
this.payDialogOpen = false;
|
|
receiveGift(this.orderId).then(({ msg }) => {
|
|
this.$util.showMsg(msg);
|
|
uni.navigateTo({
|
|
url: "/pages/special/grade_special",
|
|
});
|
|
}).catch(({ msg }) => {
|
|
this.$util.showMsg(msg);
|
|
});
|
|
break;
|
|
case 5:
|
|
// location.hash = '#tash';
|
|
// $('body,html').animate({scrollTop: $(this.$refs.list).offset().top}, 800);
|
|
// this.is_pay = true;
|
|
// this.paid = false;
|
|
// this.active = 1;
|
|
|
|
let url = "/pages/special/";
|
|
const params = {
|
|
id: 0,
|
|
};
|
|
|
|
let task = this.otherTaskList[0];
|
|
if (task.special_task) {
|
|
task = task.special_task[0];
|
|
}
|
|
if (task.is_light) {
|
|
if (task.light_type === 1) {
|
|
url += "single_text_detail";
|
|
}
|
|
} else {
|
|
url += task.type === 1 ? "task_text_info" : "task_info";
|
|
params.specialId = task.special_id;
|
|
params.viewing_time =
|
|
(task.watch && task.watch.viewing_time) || 0;
|
|
}
|
|
params.id = task.id;
|
|
url += "?" + this.$util.objToParam(params);
|
|
|
|
uni.navigateTo({
|
|
url,
|
|
});
|
|
|
|
break;
|
|
case 6:
|
|
this.handleToLivePage();
|
|
break;
|
|
}
|
|
}, true);
|
|
},
|
|
async handleToLivePage() {
|
|
if (this.liveInfo.studio_pwd && this.special.pay_type == 2) {
|
|
this.password = true;
|
|
return;
|
|
}
|
|
|
|
const params = {
|
|
stream_name: this.stream_name,
|
|
record_id: this.RecordId,
|
|
};
|
|
|
|
const xparams = this.$util.objToParam(params);
|
|
uni.showLoading({ mask: true });
|
|
try {
|
|
await precheckLive(params);
|
|
uni.hideLoading();
|
|
} catch (err) {
|
|
uni.hideLoading();
|
|
return this.$util.showMsg(err.msg);
|
|
}
|
|
|
|
|
|
uni.navigateTo({
|
|
url: "/pages/live/index?" + xparams,
|
|
});
|
|
|
|
|
|
},
|
|
ReceiveGift() {
|
|
if (!this.orderId) return;
|
|
receiveGift(this.orderId).then(({ msg }) => {
|
|
this.$util.showMsg(msg);
|
|
uni.navigateTo({
|
|
url: "/pages/index/index",
|
|
});
|
|
});
|
|
},
|
|
//关闭登录
|
|
loginClose: function (val) {
|
|
this.loginShow = false;
|
|
val && this.logComplete();
|
|
},
|
|
//登录完成回调事件
|
|
logComplete: function () {
|
|
let that = this;
|
|
that.isLogin = true;
|
|
that.otherLoaded = false;
|
|
that.where.page = false;
|
|
that.otherTaskList = [];
|
|
that.getCourseList();
|
|
app.baseGet($h.U({ c: "special", a: "isMember" }), function (res) {
|
|
let isMember = res.data.data.is_member;
|
|
that.isMember = isMember;
|
|
that.now_money = res.data.data.now_money;
|
|
switch (that.pay_type_num) {
|
|
case 1:
|
|
that.money =
|
|
isMember && that.special.member_pay_type == 1
|
|
? that.special.member_money
|
|
: that.special.money;
|
|
break;
|
|
case 2:
|
|
if (isMember) {
|
|
that.money = that.special.member_pay_type
|
|
? that.special.member_money
|
|
: 0;
|
|
} else {
|
|
that.money = that.special.money;
|
|
}
|
|
break;
|
|
case 3:
|
|
that.money = that.special.pink_money;
|
|
break;
|
|
}
|
|
});
|
|
app.baseGet(
|
|
$h.U({
|
|
c: "special",
|
|
a: "special_validity",
|
|
q: {
|
|
id: special.id,
|
|
},
|
|
}),
|
|
function (res) {
|
|
that.special_validity = res.data.data.validity;
|
|
},
|
|
function () { },
|
|
true
|
|
);
|
|
},
|
|
//所有插件回调处理事件
|
|
changeVal(opt) {
|
|
if (typeof opt != "object") opt = {};
|
|
let action = opt.action || "";
|
|
let value = opt.value || "";
|
|
this[action] && this[action](value);
|
|
},
|
|
CountDown(opt, that) {
|
|
if (typeof opt != "object") opt = {};
|
|
let name = opt.name || "",
|
|
value = null;
|
|
that = that ? that : this;
|
|
if (name.indexOf(".") === -1) value = that[name];
|
|
else {
|
|
let nameArray = name.split(".");
|
|
value = that[nameArray[0]][nameArray[1]];
|
|
}
|
|
let tiem = opt.time || 1000,
|
|
timeName = opt.time_name || "datatime",
|
|
strName = { hour: "00", minute: "00", second: "00" },
|
|
outputName = opt.output || "difftime";
|
|
if (!name) return false;
|
|
if (value === undefined) return false;
|
|
opt.nowTime = function () {
|
|
if (Array.isArray(value)) {
|
|
for (var i = 0; i < value.length; i++) {
|
|
let intDiff = value[i][timeName] - Date.parse(new Date()) / 1000; //获取数据中的时间戳的时间差;
|
|
let days = 0,
|
|
hour = 0,
|
|
minute = 0,
|
|
second = 0;
|
|
if (intDiff > 0) {
|
|
hour = Math.floor(intDiff / (60 * 60)) - days * 24;
|
|
minute = Math.floor(intDiff / 60) - hour * 60;
|
|
second = Math.floor(intDiff) - hour * 60 * 60 - minute * 60;
|
|
if (hour <= 9) hour = "0" + hour;
|
|
if (minute <= 9) minute = "0" + minute;
|
|
if (second <= 9) second = "0" + second;
|
|
strName = {
|
|
hour: hour,
|
|
minute: minute,
|
|
second: second,
|
|
};
|
|
} else {
|
|
strName = {
|
|
hour: "00",
|
|
minute: "00",
|
|
second: "00",
|
|
};
|
|
}
|
|
value[i][outputName] = strName;
|
|
}
|
|
that.$set(that, name, value);
|
|
} else {
|
|
let intDiff = value[timeName] - Date.parse(new Date()) / 1000;
|
|
let days = 0,
|
|
hour = 0,
|
|
minute = 0,
|
|
second = 0;
|
|
if (intDiff > 0) {
|
|
hour = Math.floor(intDiff / (60 * 60)) - days * 24;
|
|
minute = Math.floor(intDiff / 60) - hour * 60;
|
|
second = Math.floor(intDiff) - hour * 60 * 60 - minute * 60;
|
|
if (hour <= 9) hour = "0" + hour;
|
|
if (minute <= 9) minute = "0" + minute;
|
|
if (second <= 9) second = "0" + second;
|
|
strName = {
|
|
hour: hour,
|
|
minute: minute,
|
|
second: second,
|
|
};
|
|
} else {
|
|
strName = {
|
|
hour: "00",
|
|
minute: "00",
|
|
second: "00",
|
|
};
|
|
}
|
|
if (name.indexOf(".") === -1)
|
|
that.$set(that[name], outputName, strName);
|
|
else {
|
|
let nameArray = name.split(".");
|
|
that.$set(that[nameArray[0]][nameArray[1]], outputName, strName);
|
|
}
|
|
}
|
|
};
|
|
opt.nowTime();
|
|
setInterval(opt.nowTime, tiem);
|
|
},
|
|
//播放回放
|
|
playBackRecord: function (item) {
|
|
this.RecordId = item;
|
|
this.OpenPay(6);
|
|
},
|
|
// 关联资料
|
|
specialMaterial() {
|
|
getSpecialMaterial(this.special_id).then((res) => {
|
|
this.materialList = res.data;
|
|
});
|
|
},
|
|
// 获取返佣金额
|
|
rebateAmount() {
|
|
getRebateAmount(this.special_id).then((res) => {
|
|
this.rebateMoney = parseFloat(res.data.brokeragePrice);
|
|
});
|
|
},
|
|
rebateAction(value) {
|
|
switch (value) {
|
|
case "close":
|
|
this.rebateMoney = 0;
|
|
break;
|
|
case "share":
|
|
this.handleCreateSharePoster();
|
|
break;
|
|
}
|
|
},
|
|
},
|
|
};
|
|
</script>
|
|
|
|
<style>
|
|
page {
|
|
background: #f5f5f5;
|
|
}
|
|
|
|
/* #ifdef MP-WEIXIN */
|
|
.swiper-conter {
|
|
padding: 0!important;
|
|
}
|
|
/* #endif */
|
|
</style>
|
|
<style scoped lang="scss">
|
|
.teacher-section {
|
|
// border-top: 14rpx solid #f5f5f5;
|
|
background: #F6F6F6;
|
|
}
|
|
|
|
.thematic-details .swiper-details .share {
|
|
background-color: #ffffff;
|
|
|
|
.share_wechat {
|
|
padding: 20rpx 0 0 0;
|
|
}
|
|
}
|
|
.swiper-details .special-coverimg {
|
|
width: 100%;
|
|
height: 390rpx;
|
|
> image {
|
|
width: 100%;
|
|
height: 100%;
|
|
}
|
|
}
|
|
|
|
.teacher-table {
|
|
display: flex;
|
|
align-items: center;
|
|
height: 150rpx;
|
|
}
|
|
|
|
.teacher-table .item {
|
|
-webkit-box-flex: 1;
|
|
-webkit-flex: 1;
|
|
flex: 1;
|
|
position: relative;
|
|
min-width: 0;
|
|
font-size: 24rpx;
|
|
text-align: center;
|
|
color: #999999;
|
|
}
|
|
|
|
.teacher-table .item:last-child::before {
|
|
content: "";
|
|
position: absolute;
|
|
top: 50%;
|
|
left: 0;
|
|
width: 2rpx;
|
|
height: 40rpx;
|
|
background-color: #e8e8e8;
|
|
-webkit-transform: translateY(-50%);
|
|
transform: translateY(-50%);
|
|
}
|
|
|
|
.teacher-table .item .learn {
|
|
font-size: 0;
|
|
}
|
|
|
|
.teacher-table .item .learn .child {
|
|
font-size: 24rpx;
|
|
}
|
|
|
|
.teacher-table .item .learn .child:nth-child(2) {
|
|
font-weight: bold;
|
|
font-size: 28rpx;
|
|
}
|
|
|
|
.teacher-table>view:last-child>view:first-child {
|
|
margin-bottom: 6rpx;
|
|
}
|
|
|
|
.teacher-table .num {
|
|
font-size: 38rpx;
|
|
color: #333333;
|
|
}
|
|
|
|
.teacher-table image {
|
|
width: 50rpx;
|
|
height: 50rpx;
|
|
border: 2px solid #ffffff;
|
|
border-radius: 50%;
|
|
margin-left: -15rpx;
|
|
-webkit-box-sizing: border-box;
|
|
box-sizing: border-box;
|
|
background-color: #2c8eff;
|
|
vertical-align: middle;
|
|
object-fit: cover;
|
|
pointer-events: none;
|
|
-webkit-touch-callout: none;
|
|
}
|
|
|
|
.teacher-detail-wrap {
|
|
padding: 0 30rpx 30rpx;
|
|
}
|
|
|
|
.teacher-detail-wrap .a {
|
|
display: block;
|
|
padding: 30rpx;
|
|
border-radius: 4rpx;
|
|
background-color: #f9fafc;
|
|
}
|
|
|
|
.teacher-detail-wrap .iconfont {
|
|
color: #666666;
|
|
}
|
|
|
|
.teacher-detail-wrap .detail-hd {
|
|
display: -webkit-box;
|
|
display: -webkit-flex;
|
|
display: flex;
|
|
-webkit-box-align: center;
|
|
-webkit-align-items: center;
|
|
align-items: center;
|
|
}
|
|
|
|
.teacher-detail-wrap .detail-hd .head {
|
|
width: 100rpx;
|
|
height: 100rpx;
|
|
border-radius: 50%;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.teacher-detail-wrap .detail-hd .head .image {
|
|
display: block;
|
|
width: 100rpx;
|
|
height: 100rpx;
|
|
object-fit: cover;
|
|
}
|
|
|
|
.teacher-detail-wrap .detail-hd .text {
|
|
-webkit-box-flex: 1;
|
|
-webkit-flex: 1;
|
|
flex: 1;
|
|
min-width: 0;
|
|
margin: 0 18rpx;
|
|
font-weight: bold;
|
|
font-size: 30rpx;
|
|
color: #282828;
|
|
}
|
|
|
|
.teacher-detail-wrap .detail-hd .text .text {
|
|
display: inline-block;
|
|
height: 34rpx;
|
|
padding: 0 12rpx;
|
|
border-radius: 10rpx;
|
|
background-color: #fff0e5;
|
|
font-weight: normal;
|
|
font-size: 20rpx;
|
|
line-height: 34rpx;
|
|
color: #ff6b00;
|
|
}
|
|
|
|
.teacher-detail-wrap .detail-hd .text {
|
|
margin-left: 10rpx;
|
|
}
|
|
|
|
.teacher-detail-wrap .detail-bd {
|
|
margin-top: 20rpx;
|
|
font-size: 26rpx;
|
|
line-height: 38rpx;
|
|
color: #666666;
|
|
}
|
|
|
|
.scroll-section {
|
|
display: -webkit-box;
|
|
display: -webkit-flex;
|
|
display: flex;
|
|
-webkit-box-align: center;
|
|
-webkit-align-items: center;
|
|
align-items: center;
|
|
margin-top: 14rpx;
|
|
background-color: #fffcf6;
|
|
font-size: 24rpx;
|
|
}
|
|
|
|
.scroll-section .label {
|
|
width: 200rpx;
|
|
padding-left: 75rpx;
|
|
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAYAAAAehFoBAAADgklEQVRYR+2ZQXbaMBCG/zFdkFXJCaqcoOkJCpu+mk3TE4ScoOQEISdIcoLQE6Td4Pe6SXKCkhNEvQFZNRuYPsmykRQbY6CVF2UHNvKn8a9/RiPCX/hwIrrMuADhEMAdtXBKH+R0F4+iXQxij8GJOGNg5IzLmNEeDqgnZ9s+b2fAfCs6/IwbAN0iKGJ8pr781ghgI4EbEDoZEANfoSJL+KJ+Y+C8FUs38hvQbx3hAgk8ETCkWI7niRgRcNYI4BIJPFALg2yBNQa4TAJRG0N7YdUF5kQMGLgGY0p76BUt0tqSWCUBX5J1gRcTcQfCez1OCbQG5kQcMzCoXAOMjvHW7FZHAtsC80QcMWmnSZkZV62+HNrjEk/EkAkXlbDeDcoFfAlsC6z+P5+Iy8xZ1HffDmmRiEcAogZw7gJV/6kriWw8RxqAjGJ5kF1TwJx/AXpVEAAkxVKucR82BTYOpJ7x2rdEBziKZe1FuAp8U2AtDcvDVQKK+nJfS8SO8L8C5kQIVRwxYdaK5UnRpHWUf2MKwhsNCpyoZBQE2Il8gRPkLpH5cvrD9yiWR0GAffsqK4z0mwCUKegPtbEfBNhodEzAsWFxnMCWyCIRqo5+m1tcCA1b9iV9jVZ5ebAIa7uyNKoSUSuWL7KtrluAWz0Rxn1o4KVGLeuyo+wBT4MCK7DFROSyKLNVJ7mF1LABzis0auFd0Wb1P3BZel4nNdvFV+Ml4SWGpyiW+SbWynZLlwAegi467w0029ZMcfOYtQbK0rNd0KtWQbAIzxNxTdm2jHEf9WVhA2YxET+zbZmeVAhbszOcKR17FMs7f/E2pviZJyIvfFZ1hJwiPmh5+UMc8hwjZkh/V5y7Q1rALzUesoBfta3KrnlbpF9RX+qNchANVwG/cBAT3cYC284ARh7dFNiqlqpmbmrSGUUY0Ud5VXX/Oqm5oGBf2l26+XQcZOPOjz4KSF9VaY+iLrBvd0UOkvXWBsxr9NbShrXeX+XRJlxSLM+Lol0X2GsGFiaT2o0T04tTnXTdlTHgU3qFE7+WrQts9fkeqI3uTtqtZi+mGiHjvDVquAkY2dGuC6zHvhWdVYc3tSPs7LfSzufLaBNOVardBLhqIW8FnEWEnzEG8MmZDONSLfLGHcrkMk6b0Qp8qW1rBo069nLyf0G0ATxRG6JRB4uOHNLmh5KEssCVxwpVmvWv/wGVY//ZbDJkGgAAAABJRU5ErkJggg==") 30rpx center/26rpx 22rpx no-repeat;
|
|
color: #feb720;
|
|
}
|
|
|
|
.scroll-section .swiper-container {
|
|
position: relative;
|
|
-webkit-box-flex: 1;
|
|
-webkit-flex: 1;
|
|
flex: 1;
|
|
min-width: 0;
|
|
height: 62rpx;
|
|
padding-left: 16rpx;
|
|
line-height: 62rpx;
|
|
}
|
|
|
|
.scroll-section .swiper-container::before {
|
|
content: "";
|
|
position: absolute;
|
|
top: 50%;
|
|
left: 0;
|
|
width: 1px;
|
|
height: 24rpx;
|
|
border-left: 1px solid #999999;
|
|
-webkit-transform: translateY(-50%);
|
|
transform: translateY(-50%);
|
|
}
|
|
|
|
.process-section {
|
|
margin-top: 14rpx;
|
|
background-color: #ffffff;
|
|
}
|
|
|
|
.process-section .title {
|
|
display: -webkit-box;
|
|
display: -webkit-flex;
|
|
display: flex;
|
|
-webkit-box-align: center;
|
|
-webkit-align-items: center;
|
|
align-items: center;
|
|
height: 86rpx;
|
|
padding-right: 30rpx;
|
|
padding-left: 30rpx;
|
|
font-size: 28rpx;
|
|
color: #282828;
|
|
}
|
|
|
|
.process-section .list {
|
|
display: -webkit-box;
|
|
display: flex;
|
|
-webkit-box-pack: justify;
|
|
justify-content: space-between;
|
|
-webkit-box-align: center;
|
|
align-items: center;
|
|
height: 110rpx;
|
|
padding-right: 30rpx;
|
|
padding-left: 30rpx;
|
|
border-top: 1px solid #eeeeee;
|
|
}
|
|
|
|
.process-section .list .item {
|
|
padding-right: 0 !important;
|
|
}
|
|
|
|
.process-section .list .item~.item {
|
|
padding-left: 67rpx;
|
|
border: none !important;
|
|
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADgAAAAoCAYAAACrUDmFAAAGKklEQVRoQ91a3W8U1xX/nXvvrGcnXhwEdgIlKSp22sSO8ceWGKsJS1pBhKhUVeC3PvSp/TP2L8hLnvoQ5SlShJGiSCiv3lAFTDS7yDYmFnaiQojs2vhz2a/ZmXuqY60j4jhpsBdp4nncPXPv/Z3f+b5DiNFz586dRLVaPeC6rtFa16Moqi0tLVXPnj0b7vaYtNsXm/ne2NiYOXLkSLJYLLYrpY4rpVJhGAaO4ywHQfDA87yVq1evhtls1j7tvrEAODMzkyqVSseIqI+ZzzHzrwGUieiutfZTIrrjuu5GT09P8IsEODEx0QGgJ4qiM8z8VwCdAKoA7jLzNQDjxph7xpilp2UyFgz6vv8yEb0J4AyAtwEcBxAx8woRfc3M4wAE6NTTMhkLgIVC4ai19pRS6g8A/sjMXQBaAIjPlffCZCwATkxMPBcEwQtKqd8DuAwgDeAwgCSAcC9MxgIgM6tcLpfwPO+3xpjzzDxMRN0AjuyVyVgAlMgoIG/evPm81volx3HS1to/S1TdK5OxAbgFstlMxgrgs2AydgCbzWQsATaTydgCbBaTsQbYDCYFIGWzWbp48aIuFoucyWQiIuKdilpmpnw+b+S/a9euRT9W3YtcLpfTIpfJZKQa4Z9YU42OjtLly5cxOjqKkZGRTfkn999tniyXyyt05coV3draajo6OtwwDLlSqZR/rP/yfd8B4MnmrutWuru76zsdXNqf9vZ21xhD8/PzdalGdlKcHHxubs5ZX1/XjuNQqVSyDx8+DEZGRqLtCt5NngyC4J4wMmitdYlIkmzAzN8CWFpYWNi4cOFCTTYaGxtzU6nUQSJql+rCWivsPLLWLq2trS2eP3++1DAnMzc351UqlcNRFL0cRdFzjbZnWSn1oK+vb10Uks1m1aVLlwwzH6zVasdlb7EkIloHcD+VSi13dnaK8r7X//1cJoloWowsiqJZAfgegFZmPkpEa9KaWGtva62nBwYGluTgvu8LqLRSqr9RXSSY+WsiKgRBkDt9+vR/RG52dvZAuVwWYP3W2j8R0a8AbACYAPDxxsbGXWFyenraIaLWIAh6rbV/AfAqESlmvsfMn4RhOHHo0KG1rq6uTQVvN9f/V/EAWAYwB2CVfN8vyGYAXiSiR0IYgByA6wMDA/dl8Xw+30lEF5g5A+CUWCgzywIi92E6nZ4SOenroih6Xdoea630dSeI6DGAfzPze8Vi8WYmkwny+bwrJZjW+k1r7T8axbUweBvA+0R03XGc+Z6eHnn3Bw8z68nJSXGpAQB/AyBdiCjzQMOSqg2yasLgQwCJxp8C8AsiyjHzp4ODgwIChULhNQCXGgC7mVmq/HkAnxHRvwYHB/MiNz4+fkxrPaSUkr5OiubfAKgz8+cA3k0mk9dlxpJMJsWPjxljziil/m6tHSDaDOiTRPShrGuM+aq3t3e1GQCvM7P0Xm1KqRVmvk1E0mB+x6Dv+8LEOwCGAPxOGASwII2oMeajvr4+sXlMTU29EASBjB3eICIB+RIzB0opH8AHWmu/t7e3msvlki0tLS8mEolTRCSK6xb6AMwQ0Sda61ue5z3o6uoS896biRYKhX8y8wFmPqaUEpPIh2E4Y639ZmhoaHODycnJg2EYnmBmAdcLQKLpV0T0pdZ66uTJk4sid+PGjaQx5rAx5hVr7TAAGSKJX89GUfR5Op0Wk7eNFOJ6nndCa/2WdPBEpInogSi2ra1tdnV1tZxOpyUCf/fsKsj4vv+6Ukp88GhD2zOlUmmhXq9XttKFjPPET2u1mvhpVyOK3q/VagsAVoaHhytyiq3oGEVRR71ef03ekciotf7vTozcunXrkOM4rzDzYfErIlomopn+/v5H29PPrtOE7/ttURSZlpYWcVrrum5R/OTJvLV18MePH7uJRKJVKUXFYrGsta5uz1sie+7cuRal1OZ8k4jqnudVOzs7ZUr2vfmmKK5UKqW01glZ01obLC4uFrfS0xZ1P5e57aONzUS/kxPH6bfdMPfkcCrWAHfL3JPjxdgC3CtzW1YYS4DNYC62AJvFXCwBNpO52AFsNnOxAvgsmIsVwH0/ut/3ly/7/vps31+A7vsr7H3/EcJWSH8Wn5H8D2fpbyp9zLJtAAAAAElFTkSuQmCC") left center/28rpx 20rpx no-repeat;
|
|
}
|
|
|
|
.process-section .list .item span {
|
|
display: inline-block;
|
|
box-sizing: border-box;
|
|
vertical-align: middle;
|
|
font-size: 26rpx;
|
|
line-height: 37rpx;
|
|
color: #282828;
|
|
}
|
|
|
|
.process-section .list .item span:first-child {
|
|
width: 28rpx;
|
|
height: 28rpx;
|
|
border: 1px solid #282828;
|
|
border-radius: 50%;
|
|
margin-right: 6rpx;
|
|
font-size: 22rpx;
|
|
line-height: 24rpx;
|
|
text-align: center;
|
|
color: #282828;
|
|
}
|
|
|
|
.navCon {
|
|
position: relative;
|
|
padding: 0 30rpx;
|
|
}
|
|
.navCon {
|
|
.item {
|
|
margin: 0 72rpx 0 0!important;
|
|
&.on {
|
|
font-weight: normal!important;
|
|
&:after {
|
|
background: linear-gradient(90deg, #24A9E1, #0F74BB);
|
|
border-radius: 3rpx;
|
|
}
|
|
}
|
|
&:last-child {
|
|
margin-right: 0;
|
|
color: #999;
|
|
font-size: 28rpx;
|
|
}
|
|
}
|
|
}
|
|
|
|
.evaluate-section .head {
|
|
display: -webkit-box;
|
|
display: flex;
|
|
-webkit-box-pack: justify;
|
|
justify-content: space-between;
|
|
-webkit-box-align: center;
|
|
align-items: center;
|
|
padding: 33rpx 30rpx 13rpx;
|
|
}
|
|
|
|
.evaluate-section .score {
|
|
display: -webkit-box;
|
|
display: flex;
|
|
-webkit-box-align: center;
|
|
align-items: center;
|
|
}
|
|
|
|
.evaluate-section .score view:first-child {
|
|
font-size: 28rpx;
|
|
color: #ff6b00;
|
|
}
|
|
|
|
.evaluate-section .score text {
|
|
margin-right: 5rpx;
|
|
font-weight: bold;
|
|
font-size: 44rpx;
|
|
}
|
|
|
|
.evaluate-section .score view:last-child {
|
|
width: 170rpx;
|
|
height: 42rpx;
|
|
border-radius: 21rpx;
|
|
margin-left: 15rpx;
|
|
background-color: #f5f5f5;
|
|
font-size: 24rpx;
|
|
line-height: 42rpx;
|
|
text-align: center;
|
|
color: #999999;
|
|
}
|
|
|
|
.evaluate-section .head button {
|
|
width: 160rpx;
|
|
height: 56rpx;
|
|
border-radius: 28rpx;
|
|
background-image: linear-gradient(90deg, #409dff 0%, #1e85fb 100%);
|
|
font-size: 26rpx;
|
|
color: #ffffff;
|
|
}
|
|
|
|
.video_footer_btn {
|
|
-webkit-flex: 1;
|
|
flex: 1;
|
|
height: 76rpx;
|
|
border-radius: 37px;
|
|
}
|
|
|
|
.video_footer_btn_left {
|
|
width: 50%;
|
|
height: 100%;
|
|
border-radius: 37px 0px 0px 37px;
|
|
background: #ff6b00;
|
|
}
|
|
|
|
.video_footer_btn_right {
|
|
width: 50%;
|
|
height: 100%;
|
|
border-radius: 0px 37px 37px 0px;
|
|
background: #1D8DFF;
|
|
}
|
|
|
|
.video_footer_btn_left_pic {
|
|
font-size: 28rpx;
|
|
line-height: 22rpx;
|
|
font-weight: 600;
|
|
color: #ffffff;
|
|
text-align: center;
|
|
}
|
|
|
|
.video_footer_btn_left_num {
|
|
font-size: 20rpx;
|
|
line-height: 20rpx;
|
|
color: #ffffff;
|
|
text-align: center;
|
|
}
|
|
|
|
.video_footer_btn_left_pic+.video_footer_btn_left_num {
|
|
margin-top: 9rpx;
|
|
}
|
|
|
|
.thematic-details .material button,
|
|
.single-special .material button {
|
|
|
|
padding: 3rpx 20rpx;
|
|
border-radius: 30rpx;
|
|
background-color: #2c8eff;
|
|
font-family: inherit;
|
|
font-weight: normal;
|
|
font-size: 22rpx;
|
|
color: #ffffff;
|
|
height: 50rpx;
|
|
line-height: 50rpx;
|
|
}
|
|
|
|
.footer .video_footer_btn .on {
|
|
width: 100% !important;
|
|
border-radius: 37px !important;
|
|
}
|
|
|
|
.thematic-details .poster {
|
|
position: fixed;
|
|
top: 15%;
|
|
left: 15%;
|
|
width: 70%;
|
|
z-index: 60;
|
|
}
|
|
|
|
.base-wrap {
|
|
/* #ifndef MP-WEIXIN */
|
|
padding-bottom: calc(100rpx + var(--safe-bottom));
|
|
/* #endif */
|
|
}
|
|
|
|
.thematic-details .poster image {
|
|
width: 100%;
|
|
}
|
|
|
|
.thematic-details .poster view {
|
|
color: #eee;
|
|
font-size: 14px;
|
|
margin-left: 25%;
|
|
}
|
|
|
|
.thematic-details .footer {
|
|
position: fixed;
|
|
bottom: 0;
|
|
left: 0;
|
|
z-index: 9;
|
|
width: 100%;
|
|
border-top: 1px solid #eee;
|
|
padding-bottom: var(--safe-bottom);
|
|
background-color: #ffffff;
|
|
}
|
|
|
|
.thematic-details .footer .link {
|
|
width: 90rpx;
|
|
height: 100rpx;
|
|
line-height: 100rpx;
|
|
text-align: center;
|
|
}
|
|
|
|
.thematic-details .footer .link .cont {
|
|
display: inline-block;
|
|
vertical-align: middle;
|
|
font-size: 20rpx;
|
|
line-height: 36rpx;
|
|
color: #666;
|
|
}
|
|
|
|
.thematic-details .footer .link image {
|
|
display: block;
|
|
width: 44rpx;
|
|
height: 44rpx;
|
|
margin-right: auto;
|
|
margin-left: auto;
|
|
}
|
|
|
|
.thematic-details .footer .wrap {
|
|
flex: 1;
|
|
min-width: 0;
|
|
padding-right: 30rpx;
|
|
padding-left: 30rpx;
|
|
}
|
|
|
|
.thematic-details .footer .item {
|
|
border: 1rpx solid #d9d9d9;
|
|
width: 133rpx;
|
|
height: 100rpx;
|
|
border-radius: 10rpx;
|
|
font-size: 24rpx;
|
|
color: #333;
|
|
}
|
|
|
|
.thematic-details .footer .item image {
|
|
width: 42rpx;
|
|
height: 46rpx;
|
|
}
|
|
|
|
.thematic-details .footer .item.item1 {
|
|
width: 187rpx;
|
|
}
|
|
|
|
.thematic-details .footer .item.item2 {
|
|
width: 187rpx;
|
|
background-color: #f9e067;
|
|
border-color: #f9e067;
|
|
}
|
|
|
|
.thematic-details .footer .item .money {
|
|
font-size: 36rpx;
|
|
color: #333;
|
|
font-weight: bold;
|
|
margin-bottom: -6rpx;
|
|
}
|
|
|
|
.thematic-details .footer .item.on {
|
|
width: 390rpx;
|
|
}
|
|
|
|
.thematic-details .footer .item.on .money {
|
|
margin-bottom: 0;
|
|
}
|
|
|
|
.dialog {
|
|
position: fixed;
|
|
top: 50%;
|
|
right: 85rpx;
|
|
left: 85rpx;
|
|
z-index: 56;
|
|
display: none;
|
|
max-height: 90%;
|
|
padding: 50rpx 0;
|
|
border-radius: 12rpx;
|
|
background-color: #ffffff;
|
|
transform: translateY(-50%);
|
|
text-align: center;
|
|
font-size: 30rpx;
|
|
color: #333333;
|
|
opacity: 0;
|
|
}
|
|
|
|
.dialog.show {
|
|
display: block;
|
|
opacity: 1;
|
|
}
|
|
|
|
.dialog image {
|
|
width: 354rpx;
|
|
height: 354rpx;
|
|
margin-bottom: 20rpx;
|
|
vertical-align: middle;
|
|
object-fit: contain;
|
|
}
|
|
|
|
.thematic-details .swiper-details .swiper-nav {
|
|
background: #ffffff;
|
|
width: 690rpx;
|
|
margin: 20rpx auto 0;
|
|
}
|
|
|
|
.thematic-details .lecturer-info {
|
|
align-items: center;
|
|
width: 690rpx;
|
|
height: 180rpx;
|
|
margin: 20rpx auto 0;
|
|
padding: 0 32rpx;
|
|
background: #fff;
|
|
.info-avatar {
|
|
width: 100rpx;
|
|
height: 100rpx;
|
|
>image {
|
|
width: 100%;
|
|
height: 100%;
|
|
border-radius: 50%;
|
|
}
|
|
}
|
|
.info-box {
|
|
margin: 0 24rpx 0 9rpx;
|
|
flex: 1;
|
|
display: flex;
|
|
flex-direction: column;
|
|
justify-content: center;
|
|
.info-name {
|
|
display: flex;
|
|
font-size: 28rpx;
|
|
color: #333;
|
|
margin-bottom: 14rpx;
|
|
line-height: 39rpx;
|
|
>text {
|
|
padding: 0 14rpx;
|
|
height: 39rpx;
|
|
background: #FFEDE9;
|
|
border-radius: 6rpx;
|
|
color: #FF4B33;
|
|
font-size: 22rpx;
|
|
margin-left: 12rpx;
|
|
text-align: center;
|
|
}
|
|
}
|
|
.info-desc {
|
|
color: #999999;
|
|
font-size: 24rpx;
|
|
max-height: 60rpx;
|
|
line-height: 30rpx;
|
|
-webkit-line-clamp: 2;
|
|
text-overflow: ellipsis;
|
|
display: -webkit-box;
|
|
-webkit-box-orient: vertical;
|
|
}
|
|
}
|
|
}
|
|
|
|
.mulu {
|
|
background: #ffffff;
|
|
width: 690rpx;
|
|
margin: 0 auto;
|
|
}
|
|
|
|
.thematic-details .catalogue {
|
|
background: #ffffff !important;
|
|
}
|
|
|
|
.thematic-details .swiper-details .swiper {
|
|
background-color: #ffffff;
|
|
// border-radius: 40rpx 40rpx 0 0;
|
|
// position: relative;
|
|
margin: 22rpx auto 0;
|
|
width: 690rpx;
|
|
}
|
|
|
|
.thematic-details .swiper-details .swiper .validity {
|
|
padding-left: 30rpx;
|
|
background: url(getAssetsPath("/wap/first/zsff/images/validity.png")) center/cover no-repeat;
|
|
font-size: 26rpx;
|
|
border-radius: 40rpx 40rpx 0 0;
|
|
line-height: 80rpx;
|
|
color: #ff6b00;
|
|
}
|
|
|
|
.thematic-details .swiper-details .swiper .name {
|
|
-webkit-line-clamp: 2;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.thematic-details .follow {
|
|
position: fixed;
|
|
top: 0;
|
|
left: 0;
|
|
z-index: 11;
|
|
width: 100%;
|
|
height: 80rpx;
|
|
padding-right: 30rpx;
|
|
padding-left: 30rpx;
|
|
background-color: rgba(0, 0, 0, 0.32);
|
|
font-size: 26rpx;
|
|
color: #ffffff;
|
|
}
|
|
|
|
.thematic-details .follow .picTxt .pictrue {
|
|
width: 85rpx;
|
|
height: 85rpx;
|
|
}
|
|
|
|
.thematic-details .follow .picTxt .pictrue image {
|
|
width: 100%;
|
|
height: 100%;
|
|
border-radius: 15rpx;
|
|
}
|
|
|
|
.thematic-details .follow .picTxt .text {
|
|
width: 365rpx;
|
|
font-size: 28rpx;
|
|
color: #509efb;
|
|
}
|
|
|
|
.thematic-details .follow .picTxt .text .name {
|
|
font-weight: bold;
|
|
}
|
|
|
|
.thematic-details .follow .followBnt {
|
|
display: inline-block;
|
|
width: 160rpx;
|
|
height: 50rpx;
|
|
border-radius: 25rpx;
|
|
background-color: #2c8eff;
|
|
vertical-align: middle;
|
|
font-size: 24rpx;
|
|
line-height: 50rpx;
|
|
text-align: center;
|
|
color: #ffffff;
|
|
}
|
|
|
|
.thematic-details .follow .iconguanbi2 {
|
|
margin-left: 24rpx;
|
|
vertical-align: middle;
|
|
font-size: 30rpx;
|
|
}
|
|
|
|
.thematic-details .swiper-details .swiper .swiper-int .pin-money {
|
|
flex: 1;
|
|
}
|
|
|
|
.thematic-details .swiper-details .swiper .swiper-int .pin-money .price {
|
|
display: inline-block;
|
|
font-weight: bold;
|
|
font-size: 22rpx;
|
|
color: #ff6b00;
|
|
}
|
|
|
|
.thematic-details .swiper-details .swiper .swiper-int .pin-money .price text {
|
|
font-weight: bold;
|
|
font-size: 32rpx;
|
|
line-height: 25rpx;
|
|
}
|
|
|
|
.thematic-details .swiper-details .swiper .swiper-int .pin-money .vip-price {
|
|
font-size: 24rpx;
|
|
color: #282828;
|
|
}
|
|
|
|
.thematic-details .swiper-details .swiper .swiper-int .pin-money .vip-price+.vip-price-icon {
|
|
vertical-align: inherit;
|
|
}
|
|
|
|
.swiper-details .swiper .swiper-int .collect {
|
|
align-items: center;
|
|
}
|
|
|
|
.swiper-details .swiper .swiper-int .collect .iconfont.iconshoucang2 {
|
|
color: #ff6b00 !important;
|
|
}
|
|
|
|
.swiper-details .swiper .swiper-int .collect .iconfont {
|
|
font-weight: 600;
|
|
color: #23272E !important;
|
|
font-size: 36rpx;
|
|
|
|
image {
|
|
width: 36rpx;
|
|
height: 36rpx;
|
|
}
|
|
}
|
|
|
|
.thematic-details .swiper-details .swiper .swiper-int .pin-money .total {
|
|
margin-left: 10rpx;
|
|
font-size: 26rpx;
|
|
color: #999999;
|
|
}
|
|
|
|
.thematic-details .swiper-details .pinTip {
|
|
height: 70rpx;
|
|
padding-left: 33rpx;
|
|
font-size: 26rpx;
|
|
line-height: 70rpx;
|
|
}
|
|
|
|
.thematic-details .pinTip2 {
|
|
height: 70rpx;
|
|
padding-right: 30rpx;
|
|
padding-left: 30rpx;
|
|
border-radius: 12rpx;
|
|
margin: 14rpx 20rpx;
|
|
background-color: #e2efff;
|
|
}
|
|
|
|
.thematic-details .pinTip2 .chatBnt {
|
|
width: 136rpx;
|
|
height: 46rpx;
|
|
border: 1px solid #3895ff;
|
|
border-radius: 23rpx;
|
|
background-color: #2c8eff;
|
|
font-size: 24rpx;
|
|
line-height: 42rpx;
|
|
text-align: center;
|
|
color: #f5f5f5;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.thematic-details .pinTip2 .reminder {
|
|
font-size: 26rpx;
|
|
color: #2c8dff;
|
|
}
|
|
|
|
.thematic-details .swiper-details .list {
|
|
padding-left: 30rpx;
|
|
background-color: #ffffff;
|
|
}
|
|
|
|
.thematic-details .swiper-details .list .item {
|
|
padding-top: 25rpx;
|
|
padding-right: 30rpx;
|
|
padding-bottom: 25rpx;
|
|
}
|
|
|
|
.thematic-details .swiper-details .list .item .item {
|
|
border-top: 1px solid #f0f0f0;
|
|
}
|
|
|
|
.thematic-details .swiper-details .list .item .pictrue {
|
|
width: 80rpx;
|
|
height: 80rpx;
|
|
border-radius: 50%;
|
|
margin-right: 20rpx;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.thematic-details .swiper-details .list .item .pictrue image {
|
|
display: block;
|
|
width: 100%;
|
|
height: 100%;
|
|
|
|
object-fit: cover;
|
|
}
|
|
|
|
.thematic-details .swiper-details .list .item .name {
|
|
flex: 1;
|
|
min-width: 0;
|
|
}
|
|
|
|
.thematic-details .swiper-details .list .item .left {
|
|
width: 210rpx;
|
|
font-size: 24rpx;
|
|
line-height: 34rpx;
|
|
text-align: center;
|
|
}
|
|
|
|
.thematic-details .swiper-details .list .item .link {
|
|
width: 140rpx;
|
|
height: 50rpx;
|
|
border-radius: 25rpx;
|
|
background: linear-gradient(90deg, #409dff 0%, #1e85fb 100%);
|
|
font-size: 24rpx;
|
|
line-height: 50rpx;
|
|
text-align: center;
|
|
color: #ffffff;
|
|
}
|
|
|
|
.thematic-details .swiper-details .list .item .link .iconfont {
|
|
margin-left: 11rpx;
|
|
font-size: 18rpx;
|
|
}
|
|
|
|
.thematic-details .swiper-details .list .item .left text {
|
|
color: #feb720;
|
|
}
|
|
|
|
.thematic-details .swiper-details .list .item .left .time {
|
|
line-height: 30rpx;
|
|
color: #82848f;
|
|
}
|
|
|
|
.thematic-details .groupCode {
|
|
width: 640rpx;
|
|
height: 574rpx;
|
|
background-color: #ffffff;
|
|
border-radius: 24rpx;
|
|
position: fixed;
|
|
left: 50%;
|
|
top: 50%;
|
|
z-index: 99;
|
|
|
|
transform: translate(-50%, -50%);
|
|
}
|
|
|
|
.thematic-details .groupCode .code {
|
|
width: 310rpx;
|
|
height: 310rpx;
|
|
margin: 70rpx auto 0 auto;
|
|
}
|
|
|
|
.thematic-details .groupCode .code image {
|
|
width: 100%;
|
|
height: 100%;
|
|
}
|
|
|
|
.thematic-details .groupCode .codeTip {
|
|
text-align: center;
|
|
margin-top: 40rpx;
|
|
font-size: 37rpx;
|
|
color: #333;
|
|
}
|
|
|
|
/* 专题目录 */
|
|
.thematic-details .special-tip {
|
|
display: inline-block;
|
|
height: 50rpx;
|
|
padding: 0 22rpx;
|
|
border: 1px solid #2c8eff;
|
|
border-radius: 25rpx 25rpx 25rpx 0;
|
|
margin-top: 30rpx;
|
|
margin-left: 30rpx;
|
|
font-size: 24rpx;
|
|
line-height: 50rpx;
|
|
color: #2c8eff;
|
|
}
|
|
|
|
.thematic-details .catalogue {
|
|
background-color: #f9fafc;
|
|
}
|
|
|
|
.thematic-details .catalogue>view {
|
|
position: relative;
|
|
|
|
display: flex;
|
|
|
|
align-items: center;
|
|
height: 152rpx;
|
|
}
|
|
|
|
.thematic-details .catalogue>view::before {
|
|
content: "";
|
|
position: absolute;
|
|
top: 0;
|
|
right: 0;
|
|
left: 91rpx;
|
|
border-top: 1px solid #f5f5f5;
|
|
}
|
|
|
|
.thematic-details .catalogue>view:first-child::before {
|
|
display: none;
|
|
}
|
|
|
|
.thematic-details .catalogue image {
|
|
display: block;
|
|
width: 38rpx;
|
|
height: 27rpx;
|
|
margin: 0 33rpx 0 20rpx;
|
|
}
|
|
|
|
.thematic-details .catalogue .text {
|
|
flex: 1;
|
|
min-width: 0;
|
|
}
|
|
|
|
.thematic-details .catalogue .title {
|
|
overflow: hidden;
|
|
white-space: nowrap;
|
|
text-overflow: ellipsis;
|
|
font-size: 28rpx;
|
|
line-height: 40rpx;
|
|
color: #333333;
|
|
}
|
|
|
|
.thematic-details .catalogue .try-progress {
|
|
font-size: 0;
|
|
}
|
|
|
|
.thematic-details .catalogue .try,
|
|
.thematic-details .catalogue .progress {
|
|
display: inline-block;
|
|
padding: 0 7rpx;
|
|
border: 1px solid transparent;
|
|
border-radius: 3rpx;
|
|
margin-top: 15rpx;
|
|
font-size: 18rpx;
|
|
line-height: 33rpx;
|
|
height: 33rpx;
|
|
}
|
|
|
|
.thematic-details .catalogue .try {
|
|
border-color: #2c8eff;
|
|
color: #2c8eff;
|
|
}
|
|
|
|
.thematic-details .catalogue .progress {
|
|
padding-left: 9rpx;
|
|
border-color: #fff0e5;
|
|
background-color: #FF9500;
|
|
color: #fff;
|
|
}
|
|
|
|
.thematic-details .catalogue .progress.no {
|
|
border-color: #FFC067;
|
|
background-color: #fff;
|
|
color: #FFBF66;
|
|
}
|
|
|
|
.thematic-details .catalogue .try+.progress {
|
|
margin-left: 15rpx;
|
|
}
|
|
|
|
.thematic-details .catalogue .status {
|
|
width: 130rpx;
|
|
font-size: 0;
|
|
text-align: center;
|
|
}
|
|
|
|
.thematic-details .catalogue .free {
|
|
display: inline-block;
|
|
width: 90rpx;
|
|
height: 40rpx;
|
|
border-radius: 20rpx;
|
|
background-color: #fff0e5;
|
|
font-size: 22rpx;
|
|
line-height: 40rpx;
|
|
text-align: center;
|
|
color: #ff6b00;
|
|
}
|
|
|
|
.thematic-details .catalogue .iconfont {
|
|
font-size: 34rpx;
|
|
color: #cccccc;
|
|
}
|
|
.problem-section,
|
|
.question-section,
|
|
.evaluate-section {
|
|
width: 690rpx;
|
|
margin: 0 auto;
|
|
}
|
|
/* 专题练习题 */
|
|
.thematic-details .problem-section .problem-list {
|
|
padding: 30rpx;
|
|
background-color: #ffffff;
|
|
}
|
|
|
|
.thematic-details .problem-section .item {
|
|
padding: 30rpx 30rpx 32rpx;
|
|
border-radius: 12rpx;
|
|
|
|
box-shadow: 0 3rpx 20rpx rgba(0, 0, 0, 0.07);
|
|
}
|
|
|
|
.thematic-details .problem-section .item+.item {
|
|
margin-top: 30rpx;
|
|
}
|
|
|
|
.thematic-details .problem-section .title {
|
|
overflow: hidden;
|
|
white-space: nowrap;
|
|
text-overflow: ellipsis;
|
|
font-size: 30rpx;
|
|
color: #282828;
|
|
}
|
|
|
|
.thematic-details .problem-section .title.lock {
|
|
padding-left: 43rpx;
|
|
background: url(getAssetsPath("/wap/first/zsff/images/question06.png")) left center/23rpx 30rpx no-repeat;
|
|
}
|
|
|
|
.thematic-details .problem-section .group {
|
|
display: flex;
|
|
|
|
align-items: center;
|
|
margin-top: 30rpx;
|
|
}
|
|
|
|
.thematic-details .problem-section .progress {
|
|
width: 160rpx;
|
|
height: 12rpx;
|
|
border-radius: 6rpx;
|
|
background-color: #eee;
|
|
}
|
|
|
|
.thematic-details .problem-section .progress view {
|
|
width: 50%;
|
|
height: 100%;
|
|
border-radius: 6rpx;
|
|
background-color: #2c8eff;
|
|
}
|
|
|
|
.thematic-details .problem-section .people {
|
|
flex: 1;
|
|
margin-left: 10rpx;
|
|
font-size: 22rpx;
|
|
color: #999999;
|
|
}
|
|
|
|
.thematic-details .problem-section .people text {
|
|
display: inline-block;
|
|
width: 98rpx;
|
|
}
|
|
|
|
.thematic-details .problem-section .exercise-btn {
|
|
width: 120rpx;
|
|
height: 42rpx;
|
|
border-radius: 21rpx;
|
|
background-color: #2c8eff;
|
|
font-size: 22rpx;
|
|
line-height: 42rpx;
|
|
text-align: center;
|
|
color: #ffffff;
|
|
|
|
image {
|
|
width: 18rpx;
|
|
margin-right: 10rpx;
|
|
pointer-events: none;
|
|
-webkit-touch-callout: none;
|
|
}
|
|
}
|
|
|
|
.thematic-details .question-section .list {
|
|
padding: 30rpx;
|
|
background-color: #ffffff;
|
|
}
|
|
|
|
.thematic-details .question-section .item {
|
|
display: flex;
|
|
padding: 30rpx 30rpx 36rpx;
|
|
border-radius: 12rpx;
|
|
|
|
box-shadow: 0 3rpx 20rpx rgba(0, 0, 0, 0.07);
|
|
cursor: pointer;
|
|
}
|
|
|
|
.thematic-details .question-section .item+.item {
|
|
margin-top: 30rpx;
|
|
}
|
|
|
|
.thematic-details .question-section .item>view>image {
|
|
display: block;
|
|
width: 240rpx;
|
|
height: 135rpx;
|
|
border-radius: 10rpx;
|
|
|
|
object-fit: cover;
|
|
-webkit-touch-callout: none;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.thematic-details .question-section .text {
|
|
flex: 1;
|
|
|
|
display: flex;
|
|
|
|
flex-direction: column;
|
|
|
|
justify-content: space-between;
|
|
margin-left: 20rpx;
|
|
}
|
|
|
|
.thematic-details .question-section .item>view:last-child {
|
|
flex: 1;
|
|
|
|
display: flex;
|
|
|
|
flex-direction: column;
|
|
|
|
justify-content: space-between;
|
|
margin-left: 20rpx;
|
|
}
|
|
|
|
.thematic-details .question-section .item>view>view:first-child {
|
|
-webkit-line-clamp: 2;
|
|
overflow: hidden;
|
|
font-size: 30rpx;
|
|
color: #333;
|
|
}
|
|
|
|
.thematic-details .question-section .item>view>view:last-child {
|
|
display: flex;
|
|
|
|
justify-content: space-between;
|
|
|
|
align-items: center;
|
|
font-size: 22rpx;
|
|
color: #ff6b00;
|
|
}
|
|
|
|
.thematic-details .question-section .lock {
|
|
display: block;
|
|
width: 24rpx;
|
|
height: 30rpx;
|
|
-webkit-touch-callout: none;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.thematic-details .question-section .btn {
|
|
width: 120rpx;
|
|
height: 42rpx;
|
|
border-radius: 21rpx;
|
|
background-color: #2c8eff;
|
|
font-size: 22rpx;
|
|
line-height: 42rpx;
|
|
text-align: center;
|
|
color: #ffffff;
|
|
}
|
|
|
|
.thematic-details .question-section .btn image {
|
|
width: 17rpx;
|
|
height: 19rpx;
|
|
margin-right: 10rpx;
|
|
-webkit-touch-callout: none;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.thematic-details .finished,
|
|
.thematic-details .loading {
|
|
font-size: 28rpx;
|
|
line-height: 100rpx;
|
|
text-align: center;
|
|
color: #bbb;
|
|
}
|
|
|
|
.thematic-details .fa-spin {
|
|
animation: fa-spin 1s infinite linear;
|
|
}
|
|
|
|
.thematic-details .empty {
|
|
padding-top: 50rpx;
|
|
padding-bottom: 50rpx;
|
|
background-color: #ffffff;
|
|
font-size: 28rpx;
|
|
text-align: center;
|
|
color: #bbb;
|
|
}
|
|
|
|
.thematic-details .empty image {
|
|
display: block;
|
|
width: 414rpx;
|
|
height: 305rpx;
|
|
margin: 0 auto;
|
|
}
|
|
|
|
.txp1 {
|
|
padding: 25rpx 30rpx 0;
|
|
font-size: 32rpx;
|
|
line-height: 50rpx;
|
|
color: #333333;
|
|
display: -webkit-box;
|
|
-webkit-box-orient: vertical;
|
|
-webkit-line-clamp: 2;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.exchange-guide {
|
|
position: fixed;
|
|
top: 50%;
|
|
right: 0;
|
|
display: -webkit-box;
|
|
display: -webkit-flex;
|
|
display: -ms-flexbox;
|
|
display: flex;
|
|
-webkit-box-align: center;
|
|
-webkit-align-items: center;
|
|
-ms-flex-align: center;
|
|
align-items: center;
|
|
height: 62rpx;
|
|
padding-right: 21rpx;
|
|
padding-left: 28rpx;
|
|
border-top-left-radius: 31rpx;
|
|
border-bottom-left-radius: 31rpx;
|
|
background-color: #2c8eff;
|
|
-webkit-box-shadow: 0 2rpx 10rpx rgba(76, 146, 226, 0.25);
|
|
box-shadow: 0 2rpx 1rpx rgba(76, 146, 226, 0.25);
|
|
font-size: 30rpx;
|
|
line-height: normal;
|
|
color: #ffffff;
|
|
}
|
|
|
|
.poster-canvas2 {
|
|
width: 1200rpx;
|
|
height: 1700rpx;
|
|
}
|
|
.im{
|
|
color: #666;
|
|
border:none;
|
|
}
|
|
.im::after{
|
|
border:none;
|
|
}
|
|
</style> |