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.
2270 lines
60 KiB
2270 lines
60 KiB
<template>
|
|
<BaseContainer class="single-special">
|
|
<NavBar :title="navTitle" />
|
|
<view class="detail-wrap" v-if="special.id">
|
|
<!-- 播放器 -->
|
|
<view class="header" :style="{ height: playerHeight + 'px' }">
|
|
<image :src="special.image" alt="封面" />
|
|
</view>
|
|
<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 | formatValidity
|
|
}},过期后需重新购买哦!
|
|
</view>
|
|
<view class="special-attr">
|
|
<view class="title">{{ special.title }}</view>
|
|
<view class="label">
|
|
<view v-for="(item, index) in special.label" :key="index">{{
|
|
item
|
|
}}</view>
|
|
</view>
|
|
<view class="money-button">
|
|
<view class="money">
|
|
<template v-if="special.pay_type">
|
|
<view><span>¥</span>{{ special.money }}</view>
|
|
<view>¥{{ special.member_money }}</view>
|
|
</template>
|
|
<view v-else>免费</view>
|
|
</view>
|
|
<view class="button" @click="handleCreateSharePoster">
|
|
<i class="iconfont iconfenxiang"></i>
|
|
<view>分享</view>
|
|
</view>
|
|
<view class="button" @click="collect">
|
|
<i :class="[
|
|
'iconfont',
|
|
special.collect ? 'iconshoucang2' : 'iconshoucang11',
|
|
]"></i>
|
|
<view>{{ special.collect ? "已收藏" : "收藏" }}</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<!-- 群聊 -->
|
|
<view v-if="special.service_code" class="wechat">
|
|
<view class="group-chat">
|
|
<view>和小伙伴一起学习,有老师答疑哦~</view>
|
|
<button type="button" @click="groupChartShow = true">加入群聊</button>
|
|
</view>
|
|
</view>
|
|
<!-- 学习人数、讲师 -->
|
|
<view class="learner-teacher">
|
|
<view v-if="record.length" class="learner">
|
|
<view>
|
|
<image v-for="(item, index) in record" :key="index" :src="item.avatar" alt="" />
|
|
</view>
|
|
已有{{ recordCoujnt }}人学习
|
|
</view>
|
|
<navigator v-if="lecturer" class="teacher" :url="`/pages/merchant/teacher_detail?id=${special.lecturer_id}`">
|
|
<view>
|
|
<image :src="lecturer.lecturer_head" :alt="lecturer.lecturer_name" />
|
|
</view>
|
|
<view class="lecturer-body">
|
|
<view>{{ lecturer.lecturer_name }}</view>
|
|
<view v-if="lecturer.label.length" class="label">
|
|
<view v-for="(item, index) in lecturer.label" :key="index">{{
|
|
item
|
|
}}</view>
|
|
</view>
|
|
</view>
|
|
<i class="iconfont iconxiangyou"></i>
|
|
</navigator>
|
|
</view>
|
|
<!-- 关联资料 -->
|
|
<view v-if="specialDownload.length" class="material">
|
|
<navigator v-for="item in specialDownload" :key="item.id" :url="`/pages/special/data_details?id=${item.id}`">
|
|
<view>
|
|
<image :src="item.image" alt="" mode="aspectFit" />
|
|
</view>
|
|
<view>
|
|
<view>{{ item.title }}</view>
|
|
<view v-if="item.pay_type" class="money">
|
|
¥<span>{{ item.money }}</span>
|
|
</view>
|
|
<view v-else>免费</view>
|
|
<view>
|
|
<view>{{ item.ficti + item.sales }}人已下载</view>
|
|
<button type="button">去下载</button>
|
|
</view>
|
|
</view>
|
|
</navigator>
|
|
</view>
|
|
<!-- 拼团人数 -->
|
|
<view v-if="special.is_pink" class="group-buy">
|
|
<view v-if="specialGroupLists.length" class="marquee">
|
|
<i class="iconfont iconshengyinyinliang"></i>
|
|
<view>已拼{{ specialGroupLists.length }}件</view>
|
|
<view class="swiper-container">
|
|
<view class="swiper-wrapper">
|
|
<view v-for="(item, index) in specialGroupLists" :key="index" class="swiper-slide">
|
|
{{ item.nickname }}拼团成功
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<view v-if="specialPinkLists.length" class="list">
|
|
<view class="item" v-for="(item, index) in specialPinkLists" :key="index">
|
|
<view>
|
|
<image :src="item.avatar" alt="" />
|
|
</view>
|
|
<view>{{ item.nickname }}</view>
|
|
<view>
|
|
<view>
|
|
还差<span>{{ item.num }}人</span>成团
|
|
</view>
|
|
<view>剩余 {{ item.duration | format }}</view>
|
|
</view>
|
|
<button type="button" @click="goPink(item.id, item.uid)">
|
|
去拼单
|
|
</button>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<!-- 拼团玩法 -->
|
|
<view v-if="special.is_pink" class="group-way">
|
|
<view class="way-title">拼团玩法</view>
|
|
<view class="list">
|
|
<view class="item">开团/参团</view>
|
|
<view class="item">邀请好友</view>
|
|
<view class="item">满员发货</view>
|
|
</view>
|
|
</view>
|
|
<!-- 导航 -->
|
|
<view class="tabbar">
|
|
<view class="item" :class="{ on: tabActive === 1 }" @click="tabActive = 1">详情</view>
|
|
<view class="item" v-if="specialTest1.length" :class="{ on: tabActive === 2 }" @click="tabActive = 2">
|
|
练习
|
|
</view>
|
|
<view class="item" v-if="specialTest2.length" :class="{ on: tabActive === 3 }" @click="tabActive = 3">
|
|
考试
|
|
</view>
|
|
<view class="item" v-if="comment_switch" :class="{ on: tabActive === 4 }" @click="tabActive = 4">
|
|
评价({{ whole }})
|
|
</view>
|
|
</view>
|
|
<!-- 详情 -->
|
|
<mp-html v-if="tabActive === 1" container-style="padding: 30rpx;background: #ffffff;"
|
|
:content="special.abstract"></mp-html>
|
|
<!-- 练习 -->
|
|
<view v-if="specialTest1.length && tabActive === 2" class="exercise">
|
|
<view v-for="item in specialTest1" :key="item.id" class="item">
|
|
<view class="title">
|
|
<i v-if="!isPay" class="iconfont iconsuozi"></i>{{ item.title }}
|
|
</view>
|
|
<view class="group">
|
|
<view class="progress">
|
|
<view :style="{ width: item.rate + '%' }"></view>
|
|
</view>
|
|
<view>{{ item.rate }}%</view>
|
|
<view>{{ item.answer }}人已答题</view>
|
|
<button type="button" @click="goQuestion(item)">
|
|
<i class="iconfont icon-19-lianxi"></i>练习
|
|
</button>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<!-- 考试 -->
|
|
<view v-if="specialTest2.length && tabActive === 3" class="question">
|
|
<view class="item" v-for="item in specialTest2" :key="item.id">
|
|
<view class="head">
|
|
<view>
|
|
<image :src="item.image" alt="" />
|
|
</view>
|
|
<view>
|
|
<view class="title">{{ item.title }}</view>
|
|
<view class="group">
|
|
<view>共{{ item.item_number }}题</view>
|
|
<button v-if="isPay" type="button" @click="goQuestion(item)">
|
|
<i class="iconfont icon-19-lianxi"></i>答题
|
|
</button>
|
|
<view v-else>
|
|
<i class="iconfont iconsuozi"></i>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<!-- 评价 -->
|
|
<view v-if="tabActive === 4" class="evaluate">
|
|
<view>
|
|
<view class="score">
|
|
<view>
|
|
<span>{{ score }}</span>分
|
|
</view>
|
|
<view>课程评分</view>
|
|
</view>
|
|
<button type="button" class="flex-center flex" @click="userEvaluate">我要评价</button>
|
|
</view>
|
|
<EvaluateList :evaluate-list="replyList" />
|
|
<view v-if="evaluateFinished && replyList.length" class="finished">已全部加载完</view>
|
|
<view v-if="evaluateFinished && !replyList.length" class="empty">
|
|
<image :src="getImgPath('/wap/first/zsff/images/empty.png')" alt="暂无评价" />
|
|
<view>暂无评价</view>
|
|
</view>
|
|
</view>
|
|
<!-- 底部按钮 -->
|
|
<view class="footer">
|
|
<view class="button" @click="goHome">
|
|
<image :src="getImgPath('/wap/first/zsff/images/home.png')" alt="首页" />
|
|
<view>首页</view>
|
|
</view>
|
|
<!-- 抖音客服 -->
|
|
<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="button" @click="customerService" v-else>
|
|
<image :src="getImgPath('/wap/first/zsff/images/chat.png')" alt="客服" />
|
|
<view>客服</view>
|
|
</view>
|
|
<view class="button" @click="buy(1)">
|
|
<image :src="getImgPath('/wap/first/zsff/images/link.png')" alt="送朋友" />
|
|
<view>送朋友</view>
|
|
</view>
|
|
<view class="learn-btn">
|
|
<button v-if="gift" type="button" @click="buy(4)">领取课程</button>
|
|
<template v-else>
|
|
<button v-if="isPay || (!special.member_pay_type && is_member)" type="button" class="flex flex-center"
|
|
@click="buy(5)">
|
|
{{
|
|
special.pay_type || special.member_pay_type
|
|
? "去学习"
|
|
: "免费学习"
|
|
}}
|
|
</button>
|
|
<template v-else>
|
|
<button v-if="special.profile.is_try" @click="handleTry">试{{ special.light_type === 2 ? '听' : '看'
|
|
}}</button>
|
|
<template v-if="special.is_pink">
|
|
<button v-if="isPink" type="button">查看拼团</button>
|
|
<template>
|
|
<view class="video_footer_btn_left acea-row row-column row-center-wrapper" @click="buy(3)">
|
|
<text class="video_footer_btn_left_pic">¥{{ special.pink_money }}</text>
|
|
<text class="video_footer_btn_left_num">{{ special.pink_number }}人团</text>
|
|
</view>
|
|
<!-- <button type="button" @click="buy(3)">
|
|
¥{{ special.pink_money }}
|
|
<view>{{ special.pink_number }}人团</view>
|
|
</button> -->
|
|
<button type="button" @click="buy(2)" style="font-weight:600;">
|
|
¥{{ is_member ? special.member_money : special.money }}
|
|
<view>单独购</view>
|
|
</button>
|
|
</template>
|
|
</template>
|
|
<button v-else type="button" @click="buy(2)">立即购买</button>
|
|
</template>
|
|
</template>
|
|
</view>
|
|
</view>
|
|
|
|
<!-- 遮罩层 -->
|
|
<view :class="{
|
|
mask:
|
|
payDialogOpen ||
|
|
shareShow ||
|
|
groupChartShow ||
|
|
dialogShow ||
|
|
certificateImage,
|
|
}" @touchmove.prevent @click="maskClick"></view>
|
|
<!-- 支付弹窗 -->
|
|
<PayDiaLog :open.sync="payDialogOpen" :money="parseFloat(money)" :now_money="nowMoney" :special_id="special.id"
|
|
:link_pay_uid="link_pay_uid" :pay_type_num="pay_type_num" :pink-id="pinkId" :is-wechat="isWechat"
|
|
:is-alipay="isAlipay" :is-balance="isBalance" :template-id="templateIds" :wxpay-h5="wxpayH5" @change="changeVal"
|
|
:isMember="!!is_member" :memberMoney="Number(special.member_money)" :isMembership="true"
|
|
@fatherMethod="fatherMethod" />
|
|
<!-- 分享海报 -->
|
|
<image v-if="shareImage && shareShow" class="share-dialog" :src="shareImage" alt="" />
|
|
<!-- 加入群聊 -->
|
|
<view v-if="groupChartShow" class="group-chart-dialog">
|
|
<image :src="special.service_code" alt="" />
|
|
<view>
|
|
<view>长按扫码</view>
|
|
<view>加客服好友进群</view>
|
|
</view>
|
|
</view>
|
|
|
|
<!-- 评价弹窗 -->
|
|
<EvaluateDialog :dialog-show="dialogShow" :rate-value="rateValue" :image-list="imageList"
|
|
@rate-change="rateChange" @image-upload="imageUpload" @image-delete="imageDelete"
|
|
@evaluate-submit="evaluateSubmit" />
|
|
<!-- 兑换码 -->
|
|
<view class="exchange-guide" v-if="isBatch && !isPay" @click="getexchange">
|
|
<i class="iconfont iconicon-life-gift"></i> 兑换码 <i class="iconfont iconxiangyou"></i>
|
|
</view>
|
|
<!-- 完课证书 -->
|
|
<image :src="certificateImage" v-if="certificateImage" class="certificate-image" alt="" />
|
|
<!-- 弹幕 -->
|
|
<view v-if="barrageList.length" class="barrage">
|
|
<view>
|
|
<image :src="barrageList[barrage_index].avatar" alt="" />
|
|
</view>
|
|
<view>
|
|
{{ barrageList[barrage_index].nickname }}
|
|
{{ barrageList[barrage_index].status_name }}
|
|
</view>
|
|
</view>
|
|
|
|
<!-- 分享返佣 -->
|
|
<RebateGuide v-if="rebateMoney" :rebate-money="rebateMoney" @rebate-action="rebateAction" />
|
|
|
|
<TkiQrcode loadMake v-if="isQrcodeCanvasVisable" ref="qrcode" :showLoading="false" :val="qrcodeText"
|
|
@result="handleQrcodeCreateSuccess" />
|
|
<canvas canvas-id="poster" v-if="isPosterCanvasVisable" class="poster-canvas" />
|
|
</view>
|
|
<canvas canvas-id="poster2" v-if="isPosterCanvasVisable2" class="poster-canvas2" />
|
|
</BaseContainer>
|
|
</template>
|
|
|
|
<script>
|
|
import { getLecturer, getRebateAmount } from "@/api/auth";
|
|
import {
|
|
addLearningRecords,
|
|
collectSpecial,
|
|
// getBarrageList,
|
|
getInspectData,
|
|
getLearningRecords,
|
|
getSingleSpecialDetail,
|
|
getSpecialCertificate,
|
|
getSpecialCertificateInfo,
|
|
getSpecialMaterial,
|
|
getSpecialPinkList,
|
|
getSpecialReplyData,
|
|
getSpecialReplyList,
|
|
getSpecialTemplateIds,
|
|
getTopicSpecialTestPaper,
|
|
receiveGift,
|
|
saveSpecialViewing,
|
|
setBarrageIndex,
|
|
validitySpecial,
|
|
submitSpecialComment,
|
|
getVideoPlayCredentials,
|
|
aliPayApp,
|
|
aliPayWap,
|
|
delSpecialOrder,
|
|
} from "@/api/special";
|
|
import { getGroupList } from "@/api/special";
|
|
import userInfoMixin from "@/mixins/userInfo";
|
|
import EvaluateList from "@/components/EvaluateList/index.vue";
|
|
import EvaluateDialog from "@/components/EvaluateDialog/index.vue";
|
|
import PayDiaLog from "@/components/PayDialog/index.vue";
|
|
import RebateGuide from "@/components/RebateGuide/index.vue";
|
|
import dayjs from "dayjs";
|
|
import mpHtml from "mp-html/dist/uni-app/components/mp-html/mp-html.vue";
|
|
import posterMixin from "@/mixins/poster";
|
|
import { getAuthInfo } from "@/api/auth";
|
|
import { CUSTOMER_DETAIL_TYPE, CUSTOMER_SUPPORT_TYPE } from "@/constants/customer-type";
|
|
|
|
export default {
|
|
mixins: [userInfoMixin, posterMixin],
|
|
components: {
|
|
EvaluateList,
|
|
EvaluateDialog,
|
|
PayDiaLog,
|
|
RebateGuide,
|
|
mpHtml,
|
|
},
|
|
filters: {
|
|
format(time, sibling) {
|
|
let duration = dayjs.duration(time * 1000);
|
|
let hours = duration.hours();
|
|
let siblingHours = sibling ? dayjs.duration(sibling * 1000).hours() : 0;
|
|
|
|
return dayjs({
|
|
h: hours,
|
|
m: duration.minutes(),
|
|
s: duration.seconds(),
|
|
}).format((hours || siblingHours ? "HH:" : "") + "mm:ss");
|
|
},
|
|
formatValidity(time) {
|
|
let duration = dayjs.duration(Number(time), "seconds");
|
|
let days = Math.floor(duration.asDays());
|
|
let hours = duration.hours();
|
|
let minutes = duration.minutes();
|
|
return (
|
|
(days ? days + "天" : "") +
|
|
(hours ? hours + "小时" : "") +
|
|
minutes +
|
|
"分钟"
|
|
);
|
|
},
|
|
},
|
|
data() {
|
|
const { screenWidth } = this.$util.getSystemInfo();
|
|
const playerHeight = Math.floor((screenWidth * 9) / 16);
|
|
return {
|
|
navTitle: "",
|
|
special: {},
|
|
poster_image: "",
|
|
site_url: "",
|
|
site_name: "",
|
|
isPay: false,
|
|
is_member: false,
|
|
gift: false,
|
|
isBatch: false,
|
|
isPink: false,
|
|
barrageShowTime: 0,
|
|
barrage_index: 0,
|
|
barrageList: [],
|
|
record: [], // 学习人员
|
|
recordCoujnt: "", // 学习人数
|
|
lecturer: null,
|
|
specialGroupLists: [], // 拼团信息
|
|
specialPinkLists: [], // 拼团人员
|
|
tabActive: 1,
|
|
specialTest1: [], // 关联练习
|
|
specialTest2: [], // 关联考试
|
|
evaluatePage: 1,
|
|
evaluateLimit: 16,
|
|
replyList: [], // 评价列表
|
|
payDialogOpen: false, // 是否显示支付弹窗
|
|
money: 0,
|
|
nowMoney: 0,
|
|
link_pay_uid: 0,
|
|
pay_type_num: -1,
|
|
pinkId: 0,
|
|
isWechat: false,
|
|
isAlipay: false,
|
|
isBalance: false,
|
|
templateIds: "", // 订阅模板id
|
|
wxpayH5: false,
|
|
shareImage: "",
|
|
shareShow: false,
|
|
groupChartShow: false,
|
|
loginShow: false,
|
|
score: 0,
|
|
whole: 0,
|
|
dialogShow: false,
|
|
rateValue: 5,
|
|
imageList: [],
|
|
orderId: 0,
|
|
evaluateLoading: false,
|
|
evaluateFinished: false,
|
|
playerHeight,
|
|
currentTime: 0,
|
|
duration: 0,
|
|
certificateImage: "",
|
|
specialDownload: [], // 关联资料
|
|
comment_switch: false,
|
|
special_validity: -1,
|
|
tryShow: true,
|
|
seeked: false,
|
|
rebateMoney: 0,
|
|
id: 0,
|
|
isOpenWeixing: false,
|
|
gift_uid: 0,
|
|
gift_order_id: 0,
|
|
gift: 0,
|
|
spread_uid: 0,
|
|
isPosterCanvasVisable2: false,
|
|
TOUTIAO_STATUS:false,
|
|
imId:''
|
|
};
|
|
},
|
|
computed: {
|
|
url() {
|
|
return this.isWechat ? "/pages/index/login" : "/pages/login/phone_check";
|
|
},
|
|
range() {
|
|
return Math.ceil((this.currentTime / this.duration) * 100);
|
|
},
|
|
shareQrcodeData() {
|
|
return {
|
|
spread_uid: this.userInfo?.uid,
|
|
id: this.id,
|
|
};
|
|
},
|
|
},
|
|
onUnload() {
|
|
clearInterval(this.timerFlag);
|
|
},
|
|
onShow() {
|
|
if (this.isOpenWeixing && this.orderId) {
|
|
this.$util.wxh5PayIsSuccess(this.orderId, 1, this);
|
|
this.isOpenWeixing = false;
|
|
}
|
|
this.getData();
|
|
},
|
|
onLoad(options) {
|
|
// const { id } = this.$util.mergeLaunchParams(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.id = id;
|
|
|
|
this.getData().then(() => {
|
|
this.lecturerDetails();
|
|
|
|
if (this.special.is_pink) {
|
|
this.groupLists();
|
|
this.pinkIngLists();
|
|
this.getBarrageList();
|
|
}
|
|
|
|
if (this.comment_switch) {
|
|
this.specialReplyData();
|
|
this.specialReplyList();
|
|
}
|
|
|
|
});
|
|
|
|
this.learningRecords();
|
|
this.addLearningRecords();
|
|
this.specialDataDownload();
|
|
this.specialTestPaper(1);
|
|
this.specialTestPaper(2);
|
|
this.$util.checkLogin(this.inspect, '', 1);
|
|
this.rebateAmount();
|
|
this.validitySpecial();
|
|
this.getAuthInfo();
|
|
/* #ifdef MP-TOUTIAO */
|
|
this.TOUTIAO_STATUS = true;
|
|
/* #endif */
|
|
},
|
|
onReachBottom() {
|
|
if (this.tabActive === 4) {
|
|
this.specialReplyList();
|
|
}
|
|
},
|
|
created() {
|
|
//#ifdef MP-WEIXIN
|
|
wx.showShareMenu({
|
|
withShareTicket: true,
|
|
menus: ['shareAppMessage', 'shareTimeline']
|
|
});
|
|
//#endif
|
|
},
|
|
// 分享朋友
|
|
onShareAppMessage() {
|
|
return { title: this.special.title, path: '/pages/special/details?id=' + this.special_id+'&spread_uid='+(this.userInfo.uid??0) }
|
|
},
|
|
methods: {
|
|
|
|
getexchange() {
|
|
this.$util.checkLogin(() => {
|
|
uni.navigateTo({
|
|
url: `/pages/special/exchange?special_id=${this.id}`
|
|
});
|
|
}, true);
|
|
},
|
|
fatherMethod() {
|
|
this.payDialogOpen = false;
|
|
},
|
|
handleTry: function () {
|
|
this.$util.checkLogin(() => {
|
|
this.$nextTick(() => {
|
|
if (this.special.light_type === 1) {
|
|
uni.navigateTo({
|
|
url: "/pages/special/single_text_detail?try=1&id=" + this.id,
|
|
});
|
|
} else {
|
|
uni.navigateTo({
|
|
url: "/pages/special/single_con_detail?try=1&id=" + this.id,
|
|
});
|
|
}
|
|
});
|
|
})
|
|
},
|
|
async getAuthInfo() {
|
|
const res = await getAuthInfo();
|
|
const { nowMoney, isWechat, isAlipay, isBalance, wxpayH5 } = res.data;
|
|
Object.assign(this, {
|
|
nowMoney,
|
|
isWechat,
|
|
isAlipay,
|
|
isBalance,
|
|
wxpayH5,
|
|
});
|
|
},
|
|
getData() {
|
|
return getSingleSpecialDetail(this.id, this.gift_uid, this.gift_order_id, this.gift, this.spread_uid).then(({ data }) => {
|
|
const {
|
|
special,
|
|
pinkId,
|
|
isBatch,
|
|
site_url,
|
|
is_member,
|
|
isPink,
|
|
isPay,
|
|
viewing_time,
|
|
orderId,
|
|
link_pay,
|
|
gift,
|
|
link_pay_uid,
|
|
comment_switch,
|
|
BarrageShowTime,
|
|
barrage_index,
|
|
d_im
|
|
} = data;
|
|
Object.assign(this, {
|
|
navTitle: special.title,
|
|
special: special.special,
|
|
pinkId,
|
|
isBatch,
|
|
site_url,
|
|
is_member,
|
|
isPink,
|
|
isPay,
|
|
viewing_time,
|
|
orderId,
|
|
gift,
|
|
link_pay_uid,
|
|
comment_switch: !!comment_switch,
|
|
BarrageShowTime,
|
|
barrage_index: barrage_index || 0,
|
|
imId:d_im
|
|
});
|
|
}).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);
|
|
|
|
});
|
|
},
|
|
// 学习人数
|
|
learningRecords() {
|
|
getLearningRecords(this.id).then(({ data }) => {
|
|
this.record = data.record;
|
|
this.recordCoujnt = data.recordCoujnt;
|
|
});
|
|
},
|
|
// 讲师信息
|
|
lecturerDetails() {
|
|
getLecturer(this.special.mer_id).then(({ data }) => {
|
|
this.lecturer = data;
|
|
});
|
|
},
|
|
// 拼团消息
|
|
groupLists() {
|
|
getGroupList(this.id).then(({ data }) => {
|
|
this.specialGroupLists = data;
|
|
});
|
|
},
|
|
// 拼团列表
|
|
pinkIngLists() {
|
|
getSpecialPinkList(this.id).then(({ data }) => {
|
|
data.forEach((item) => {
|
|
item.duration = 0;
|
|
item.stop_time = item.stop_time * 1000;
|
|
});
|
|
this.specialPinkLists = data;
|
|
});
|
|
},
|
|
// 练习、考试
|
|
specialTestPaper(type) {
|
|
getTopicSpecialTestPaper(this.id, type).then(({ data }) => {
|
|
if (type === 1) {
|
|
data.forEach((item) => {
|
|
item.rate = Math.floor((item.done / item.item_number) * 100);
|
|
});
|
|
}
|
|
this["specialTest" + type] = data;
|
|
});
|
|
},
|
|
// 评价状态
|
|
specialReplyData() {
|
|
getSpecialReplyData(this.id).then(({ data }) => {
|
|
this.score = data.score;
|
|
this.whole = data.whole;
|
|
});
|
|
},
|
|
// 评价列表
|
|
async specialReplyList() {
|
|
if (this.evaluateLoading || this.evaluateFinished) return;
|
|
this.evaluateLoading = true;
|
|
|
|
try {
|
|
const { data } = await getSpecialReplyList(
|
|
this.id,
|
|
this.evaluatePage++,
|
|
this.evaluateLimit
|
|
);
|
|
this.evaluateLoading = false;
|
|
this.replyList = this.replyList.concat(data);
|
|
this.evaluateFinished = this.evaluateLimit > data.length;
|
|
} catch (err) {
|
|
this.evaluateLoading = false;
|
|
}
|
|
},
|
|
validitySpecial() {
|
|
validitySpecial(this.id).then(({ data }) => {
|
|
this.special_validity = data.validity;
|
|
});
|
|
},
|
|
// 生成分享海报
|
|
handleCreateSharePoster() {
|
|
this.poster_image = this.special.poster_image;
|
|
this.createSharePoster("special", {
|
|
id: this.special_id,
|
|
spread_uid: this.userInfo?.uid,
|
|
url: 'pages/special/single_details'
|
|
});
|
|
},
|
|
// 收藏、取消收藏
|
|
collect() {
|
|
this.$util.checkLogin(() => {
|
|
collectSpecial(this.id).then(() => {
|
|
this.special.collect = !this.special.collect;
|
|
this.$util.showMsg(
|
|
this.special.collect ? "收藏成功" : "取消收藏成功"
|
|
);
|
|
});
|
|
}, true);
|
|
},
|
|
changeVal: function (opt) {
|
|
if (typeof opt !== "object") {
|
|
opt = {};
|
|
}
|
|
var action = opt.action || "";
|
|
var value = opt.value || "";
|
|
this[action] && this[action](value);
|
|
},
|
|
// 点击遮罩层
|
|
maskClick() {
|
|
this.shareShow = false;
|
|
this.groupChartShow = false;
|
|
this.dialogShow = false;
|
|
this.certificateImage = "";
|
|
},
|
|
// 立即购买
|
|
buy(type) {
|
|
this.pay_type_num = type;
|
|
this.$util.checkLogin(() => {
|
|
switch (type) {
|
|
case 1:
|
|
if (!this.special.pay_type) {
|
|
return this.$util.showMsg("免费的不可以赠送哦");
|
|
}
|
|
if (this.is_member && !this.special.member_pay_type) {
|
|
return this.$util.showMsg("会员价免费的不可以赠送哦");
|
|
}
|
|
this.money = this.special.money;
|
|
this.payDialogOpen = true;
|
|
break;
|
|
case 2:
|
|
this.money = this.is_member
|
|
? this.special.member_money
|
|
: this.special.money;
|
|
this.payDialogOpen = true;
|
|
break;
|
|
case 3:
|
|
this.money = this.special.pink_money;
|
|
this.payDialogOpen = true;
|
|
break;
|
|
case 4:
|
|
uni.showLoading({ mask: true });
|
|
receiveGift(this.orderId)
|
|
.then(({ msg }) => {
|
|
uni.hideLoading();
|
|
this.$util.showMsg(msg);
|
|
uni.navigateTo({
|
|
url: "/pages/special/grade_special",
|
|
});
|
|
})
|
|
.catch(({ msg }) => {
|
|
this.$util.showMsg(msg);
|
|
uni.hideLoading();
|
|
});
|
|
|
|
break;
|
|
case 5:
|
|
if (this.special.light_type === 1) {
|
|
uni.navigateTo({
|
|
url: "/pages/special/single_text_detail?try=0&id=" + this.id,
|
|
});
|
|
} else {
|
|
uni.navigateTo({
|
|
url: "/pages/special/single_con_detail?try=1&id=" + this.id,
|
|
});
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}, true);
|
|
},
|
|
// 支付方式回调
|
|
pay_order: function (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: function (msg) {
|
|
this.$util.showMsg(msg ? msg : "支付成功");
|
|
this.payDialogOpen = false;
|
|
switch (parseInt(this.pay_type_num)) {
|
|
case 1:
|
|
uni.navigateTo({
|
|
url: `/pages/special/gift_special?orderId=${this.orderId}`,
|
|
});
|
|
break;
|
|
case 2:
|
|
this.isPay = true;
|
|
this.payment = true;
|
|
break;
|
|
case 3:
|
|
uni.navigateTo({
|
|
url: `/pages/special/pink?orderId=${this.orderId}`,
|
|
});
|
|
break;
|
|
}
|
|
|
|
validitySpecial(this.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: function (msg) {
|
|
var that = this;
|
|
if (typeof msg === "object") {
|
|
if (msg.errMsg === "chooseWXPay:cancel") {
|
|
msg = "微信支付取消";
|
|
} else {
|
|
msg = "支付失败";
|
|
}
|
|
} else {
|
|
msg = "支付失败";
|
|
}
|
|
this.$util.showMsg(msg, "error");
|
|
that.payDialogOpen = false;
|
|
if (that.orderId) {
|
|
delSpecialOrder(that.orderId).then((res) => {
|
|
});
|
|
}
|
|
},
|
|
// 评分
|
|
rateChange(value) {
|
|
this.rateValue = value;
|
|
},
|
|
// 上传图片
|
|
imageUpload(path) {
|
|
this.imageList.push(path);
|
|
},
|
|
// 删除图片
|
|
imageDelete(index) {
|
|
this.imageList.splice(index, 1);
|
|
},
|
|
// 提交评价
|
|
async evaluateSubmit(text) {
|
|
uni.showLoading({ mask: true });
|
|
try {
|
|
const { msg } = await submitSpecialComment(this.id, {
|
|
satisfied_score: this.rateValue,
|
|
comment: text.trim(),
|
|
pics: this.imageList,
|
|
});
|
|
uni.hideLoading();
|
|
|
|
this.$util.showMsg(msg);
|
|
this.dialogShow = false;
|
|
this.specialReplyData();
|
|
this.evaluateFinished = false;
|
|
this.evaluatePage = 1;
|
|
this.replyList = [];
|
|
this.specialReplyList();
|
|
} catch (err) {
|
|
uni.hideLoading();
|
|
this.$util.showMsg(err.msg);
|
|
}
|
|
},
|
|
// 我要评价
|
|
userEvaluate() {
|
|
this.$util.checkLogin(() => {
|
|
if (!this.isPay) {
|
|
return this.$util.showMsg("购买学习后既可进行评价");
|
|
}
|
|
this.dialogShow = true;
|
|
}, true);
|
|
},
|
|
// 去练习、答题
|
|
goQuestion(question) {
|
|
this.$util.checkLogin(() => {
|
|
if (question.is_pay || this.isPay) {
|
|
let url =
|
|
question.type === 1
|
|
? "/pages/topic/problem_index"
|
|
: "/pages/special/question_index" + "?id=" + question.id;
|
|
uni.navigateTo({
|
|
url,
|
|
});
|
|
} else {
|
|
this.payDialogOpen = true;
|
|
}
|
|
}, true);
|
|
},
|
|
// 客服
|
|
customerService() {
|
|
this.$util.goSupport(CUSTOMER_DETAIL_TYPE.GOOD, CUSTOMER_SUPPORT_TYPE.SPECIAL, this.id, this.special.mer_id);
|
|
},
|
|
// 首页
|
|
goHome() {
|
|
uni.switchTab({
|
|
url: "/pages/index/index",
|
|
});
|
|
},
|
|
|
|
// 控制栏自动隐藏
|
|
onPlayerHideBar: function () {
|
|
this.tryShow = true;
|
|
},
|
|
// 控制栏自动显示
|
|
onPlayerShowBar: function () {
|
|
this.tryShow = false;
|
|
},
|
|
|
|
showLoginPage() {
|
|
this.$util.jumpLogin(this);
|
|
},
|
|
// 订阅通知模板id
|
|
getTemplateIds() {
|
|
getSpecialTemplateIds(this.pay_type_num, this.id).then(({ msg }) => {
|
|
this.templateIds = msg;
|
|
});
|
|
},
|
|
// 记录浏览人数
|
|
addLearningRecords() {
|
|
addLearningRecords(this.id);
|
|
},
|
|
// 去拼团
|
|
goPink(id, uid) {
|
|
if (uid === this.uid && this.isPink) {
|
|
uni.navigateTo({
|
|
url: `/pages/special/pink?orderId=${this.orderId}&is_help=0&special_id=${this.id}&pink_id=${this.pinkId}`,
|
|
});
|
|
} else {
|
|
uni.navigateTo({
|
|
url: `/pages/special/pink?orderId=${this.orderId}&is_help=1&special_id=${this.id}&pink_id=${id ? id : this.pinkId
|
|
}`,
|
|
});
|
|
}
|
|
},
|
|
// 播放记忆
|
|
viewing(currentTime) {
|
|
saveSpecialViewing({
|
|
special_id: this.id,
|
|
task_id: 0,
|
|
total: this.duration * 1e3,
|
|
viewing_time: currentTime * 1e3,
|
|
percentage: Math.floor((currentTime / this.duration) * 100),
|
|
});
|
|
},
|
|
// 发放证书
|
|
inspect() {
|
|
getInspectData(this.id, 1).then(() => {
|
|
uni.showModal({
|
|
title: "提示",
|
|
content: "恭喜您达到发放证书要求,是否领取?",
|
|
okText: "领取",
|
|
success: ({ confirm }) => {
|
|
if (!confirm) return;
|
|
this.getTheCertificate();
|
|
},
|
|
});
|
|
});
|
|
},
|
|
// 领取证书
|
|
getTheCertificate() {
|
|
getSpecialCertificate(this.id).then(({ msg }) => {
|
|
this.$util.showMsg("领取成功\n证书制作中...");
|
|
this.viewCertificate(msg);
|
|
});
|
|
},
|
|
// 证书信息
|
|
viewCertificate(id) {
|
|
getSpecialCertificateInfo(id).then(({ data }) => {
|
|
// this.createCertificate(data);
|
|
this.renderProductPoster2(data);
|
|
});
|
|
},
|
|
// 加载图片
|
|
loadImage: function (path) {
|
|
return new Promise(function (resolve, reject) {
|
|
var image = new Image();
|
|
image.crossOrigin = "anonymous";
|
|
image.src = path + "?" + new Date().getTime();
|
|
image.onload = function () {
|
|
resolve(image);
|
|
};
|
|
image.onerror = function () {
|
|
reject("error-image");
|
|
};
|
|
});
|
|
},
|
|
// 制作证书
|
|
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;
|
|
},
|
|
}
|
|
);
|
|
});
|
|
},
|
|
createCertificate: function (certificate) {
|
|
var vm = this;
|
|
$h.loadFFF();
|
|
Promise.all([
|
|
this.loadImage(certificate.certificate.background),
|
|
this.loadImage(certificate.certificate.qr_code),
|
|
])
|
|
.then(function (images) {
|
|
var canvas = document.createElement("canvas");
|
|
var context = canvas.getContext("2d");
|
|
|
|
canvas.width = images[0].width;
|
|
canvas.height = images[0].height;
|
|
|
|
context.drawImage(images[0], 0, 0);
|
|
context.drawImage(images[1], 220, 557, 160, 160);
|
|
|
|
context.fillStyle = "rgba(255, 255, 255, 1)";
|
|
context.fillRect(220, 724, 160, 36);
|
|
|
|
context.font = "20px sans-serif";
|
|
context.textAlign = "center";
|
|
context.fillStyle = "#666666";
|
|
context.fillText("长按二维码查看", 300, 748);
|
|
|
|
context.font = "bold 34px sans-serif";
|
|
context.fillStyle = "#29466D";
|
|
context.fillText(certificate.nickname, 300, 296);
|
|
|
|
context.font = "24px sans-serif";
|
|
context.fillText(
|
|
"颁发时间:" +
|
|
moment(certificate.add_time * 1000).format("YYYY.MM.DD"),
|
|
300,
|
|
481
|
|
);
|
|
|
|
context.font = "28px sans-serif";
|
|
context.textAlign = "start";
|
|
context.fillStyle = "#333333";
|
|
|
|
for (
|
|
var i = Math.ceil(certificate.certificate.explain.length % 16);
|
|
i--;
|
|
|
|
) {
|
|
context.fillText(
|
|
certificate.certificate.explain.substr(i * 16, 16),
|
|
83,
|
|
i * 40 + 370
|
|
);
|
|
}
|
|
|
|
this.certificateImage = canvas.toDataURL("image/jpeg");
|
|
canvas = null;
|
|
})
|
|
.catch(function (err) { });
|
|
},
|
|
// 弹幕
|
|
getBarrageList() {
|
|
getBarrageList(this.id).then(({ data }) => {
|
|
let barrageLen = 0;
|
|
this.barrageList = data;
|
|
barrageLen = this.barrageList.length;
|
|
if (!barrageLen) {
|
|
return;
|
|
}
|
|
this.timerFlag = setInterval(() => {
|
|
this.barrage_index++;
|
|
if (this.barrage_index >= barrageLen) {
|
|
this.barrage_index = 0;
|
|
}
|
|
setBarrageIndex(this.barrage_index);
|
|
}, this.barrageShowTime * 1000);
|
|
});
|
|
},
|
|
// 关联资料
|
|
specialDataDownload() {
|
|
getSpecialMaterial(this.id).then(({ data }) => {
|
|
this.specialDownload = data;
|
|
});
|
|
},
|
|
// 获取返佣金额
|
|
rebateAmount() {
|
|
getRebateAmount(this.id).then(({ data }) => {
|
|
this.rebateMoney = data.brokeragePrice;
|
|
});
|
|
},
|
|
rebateAction(value) {
|
|
switch (value) {
|
|
case "close":
|
|
this.rebateMoney = 0;
|
|
break;
|
|
case "share":
|
|
this.handleCreateSharePoster();
|
|
break;
|
|
}
|
|
},
|
|
},
|
|
};
|
|
</script>
|
|
|
|
<style>
|
|
page {
|
|
background-color: #f5f5f5;
|
|
}
|
|
</style>
|
|
|
|
<style scoped lang="scss">
|
|
/* 轻课程 */
|
|
.wechat {
|
|
background: #ffffff;
|
|
}
|
|
|
|
.validity {
|
|
padding-left: 30rpx;
|
|
background: url(getAssetsPath("/wap/first/zsff/images/validity.png")) center/cover no-repeat;
|
|
font-size: 26rpx;
|
|
line-height: 80rpx;
|
|
color: #ff6b00;
|
|
border-radius: 40rpx 40rpx 0 0;
|
|
margin-top: -40rpx;
|
|
position: relative;
|
|
}
|
|
|
|
.detail-wrap {
|
|
padding-bottom: calc(100rpx + var(--safe-bottom));
|
|
}
|
|
|
|
.single-special .certificate-image {
|
|
position: fixed;
|
|
top: 50%;
|
|
left: 50%;
|
|
z-index: 56;
|
|
width: 600rpx;
|
|
|
|
transform: translate(-50%, -50%);
|
|
}
|
|
|
|
.single-special .finished,
|
|
.single-special .loading {
|
|
font-size: 28rpx;
|
|
line-height: 100rpx;
|
|
text-align: center;
|
|
color: #bbb;
|
|
}
|
|
|
|
.single-special .fa-spin {
|
|
animation: fa-spin 1s infinite linear;
|
|
}
|
|
|
|
.single-special .empty {
|
|
padding-top: 50rpx;
|
|
padding-bottom: 50rpx;
|
|
background-color: #ffffff;
|
|
font-size: 28rpx;
|
|
text-align: center;
|
|
color: #bbb;
|
|
}
|
|
|
|
.single-special .empty image {
|
|
display: block;
|
|
width: 414rpx;
|
|
height: 305rpx;
|
|
margin: 0 auto;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.single-special .prism-player .prism-big-play-btn {
|
|
left: 50% !important;
|
|
bottom: 50% !important;
|
|
|
|
transform: translate(-50%, 50%);
|
|
}
|
|
|
|
.single-special .prism-player .prism-info-display {
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
.single-special .header {
|
|
position: relative;
|
|
/* height: 420rpx; */
|
|
}
|
|
|
|
.single-special .header>image {
|
|
display: block;
|
|
width: 100%;
|
|
height: 100%;
|
|
|
|
object-fit: cover;
|
|
}
|
|
|
|
.single-special .header .try {
|
|
position: absolute;
|
|
right: 30rpx;
|
|
bottom: 30rpx;
|
|
z-index: 12;
|
|
padding: 11rpx 16rpx 11rpx 14rpx;
|
|
border-radius: 23rpx;
|
|
background-color: rgba(0, 0, 0, 0.6);
|
|
font-size: 22rpx;
|
|
line-height: 1;
|
|
color: #ffffff;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.single-special .header .try .iconfont {
|
|
margin-right: 8rpx;
|
|
font-size: 24rpx;
|
|
}
|
|
|
|
.single-special .special-attr {
|
|
padding: 20rpx 30rpx 30rpx;
|
|
background-color: #ffffff;
|
|
}
|
|
|
|
.single-special .special-attr .title {
|
|
overflow: hidden;
|
|
white-space: nowrap;
|
|
text-overflow: ellipsis;
|
|
font-size: 36rpx;
|
|
color: #333;
|
|
}
|
|
|
|
.single-special .special-attr .label {
|
|
display: flex;
|
|
|
|
flex-wrap: wrap;
|
|
margin-top: 20rpx;
|
|
}
|
|
|
|
.single-special .special-attr .label view {
|
|
flex-shrink: 0;
|
|
height: 40rpx;
|
|
padding-right: 12rpx;
|
|
padding-left: 12rpx;
|
|
border-radius: 3rpx;
|
|
background-color: rgba(44, 142, 255, 0.06);
|
|
font-size: 24rpx;
|
|
line-height: 40rpx;
|
|
color: #2c8eff;
|
|
}
|
|
|
|
.single-special .special-attr .label view view {
|
|
margin-left: 12rpx;
|
|
}
|
|
|
|
.single-special .special-attr .money-button {
|
|
display: flex;
|
|
|
|
align-items: flex-end;
|
|
}
|
|
|
|
.single-special .special-attr .money {
|
|
flex: 1;
|
|
|
|
display: flex;
|
|
|
|
align-items: center;
|
|
font-weight: bold;
|
|
font-size: 36rpx;
|
|
color: #ff6b00;
|
|
}
|
|
|
|
.single-special .special-attr .money text {
|
|
font-size: 24rpx;
|
|
}
|
|
|
|
.single-special .special-attr .money view:nth-child(2) {
|
|
padding-right: 46rpx;
|
|
margin-left: 8rpx;
|
|
background: url(getAssetsPath("/wap/first/zsff/images/vip.png")) right center/46rpx 21rpx no-repeat;
|
|
font-size: 28rpx;
|
|
color: #282828;
|
|
}
|
|
|
|
.single-special .special-attr .button {
|
|
font-family: inherit;
|
|
font-weight: normal;
|
|
font-size: 26rpx;
|
|
line-height: normal;
|
|
color: #999999;
|
|
text-align: center;
|
|
}
|
|
|
|
.single-special .special-attr .button+.button {
|
|
width: 3em;
|
|
margin-left: 40rpx;
|
|
}
|
|
|
|
.single-special .special-attr .iconfont {
|
|
font-size: 40rpx;
|
|
}
|
|
|
|
.single-special .special-attr .iconshoucang2 {
|
|
color: #ff6b00;
|
|
}
|
|
|
|
.single-special .special-attr .button view {
|
|
margin-top: 12rpx;
|
|
}
|
|
|
|
.single-special .group-chat {
|
|
display: flex;
|
|
|
|
align-items: center;
|
|
padding: 12rpx 30rpx;
|
|
border-radius: 12rpx;
|
|
margin: 0 20rpx;
|
|
background-color: #e2efff;
|
|
font-size: 26rpx;
|
|
color: #2c8eff;
|
|
}
|
|
|
|
.single-special .group-chat view {
|
|
flex: 1;
|
|
}
|
|
|
|
.single-special .group-chat button {
|
|
padding: 5rpx 20rpx;
|
|
border-radius: 23rpx;
|
|
background-color: #2c8eff;
|
|
font-family: inherit;
|
|
font-weight: normal;
|
|
font-size: 24rpx;
|
|
color: #f5f5f5;
|
|
}
|
|
|
|
.single-special .learner-teacher {
|
|
padding: 30rpx;
|
|
background-color: #ffffff;
|
|
}
|
|
|
|
.single-special .learner-teacher .learner {
|
|
display: flex;
|
|
|
|
justify-content: center;
|
|
|
|
align-items: center;
|
|
padding-top: 6rpx;
|
|
padding-bottom: 6rpx;
|
|
font-size: 24rpx;
|
|
line-height: normal;
|
|
color: #666;
|
|
}
|
|
|
|
.single-special .learner-teacher .learner view {
|
|
flex-shrink: 0;
|
|
margin-right: 20rpx;
|
|
font-size: 0;
|
|
}
|
|
|
|
.single-special .learner-teacher .learner image {
|
|
width: 50rpx;
|
|
height: 50rpx;
|
|
border: 1px solid #ffffff;
|
|
border-radius: 50%;
|
|
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
.single-special .learner-teacher .learner image image {
|
|
margin-left: -13rpx;
|
|
}
|
|
|
|
.single-special .learner-teacher .learner+.teacher {
|
|
margin-top: 30rpx;
|
|
}
|
|
|
|
.single-special .learner-teacher .teacher {
|
|
display: flex;
|
|
|
|
align-items: center;
|
|
padding: 30rpx;
|
|
border-radius: 4rpx;
|
|
background-color: #f7f7f7;
|
|
}
|
|
|
|
.single-special .learner-teacher .teacher image {
|
|
display: block;
|
|
width: 90rpx;
|
|
height: 90rpx;
|
|
border-radius: 50%;
|
|
background-color: #9d8585;
|
|
|
|
object-fit: cover;
|
|
}
|
|
|
|
.lecturer-body {
|
|
flex: 1;
|
|
margin-left: 18rpx;
|
|
font-weight: bold;
|
|
font-size: 30rpx;
|
|
color: #282828;
|
|
}
|
|
|
|
.single-special .learner-teacher .label {
|
|
display: flex;
|
|
margin-top: 4rpx;
|
|
}
|
|
|
|
.single-special .learner-teacher .label view {
|
|
height: 34rpx;
|
|
padding-right: 12rpx;
|
|
padding-left: 12rpx;
|
|
border-radius: 4rpx;
|
|
background-color: #fff0e5;
|
|
font-weight: normal;
|
|
font-size: 22rpx;
|
|
line-height: 34rpx;
|
|
color: #ff6b00;
|
|
}
|
|
|
|
.single-special .learner-teacher .label view view {
|
|
margin-left: 5rpx;
|
|
}
|
|
|
|
.single-special .learner-teacher .iconfont {
|
|
font-size: 24rpx;
|
|
color: #333;
|
|
}
|
|
|
|
.single-special .group-buy {
|
|
margin-top: 14rpx;
|
|
background-color: #ffffff;
|
|
}
|
|
|
|
.single-special .group-buy .marquee {
|
|
display: flex;
|
|
|
|
align-items: center;
|
|
padding-left: 32rpx;
|
|
background-color: #fff0e5;
|
|
font-size: 24rpx;
|
|
color: #ff6b00;
|
|
}
|
|
|
|
.single-special .group-buy .iconfont {
|
|
margin-right: 20rpx;
|
|
font-size: 22rpx;
|
|
}
|
|
|
|
.single-special .group-buy .swiper-container {
|
|
flex: 1;
|
|
height: 62rpx;
|
|
padding-left: 20rpx;
|
|
margin-left: 20rpx;
|
|
font-size: 24rpx;
|
|
line-height: 62rpx;
|
|
color: #282828;
|
|
}
|
|
|
|
.single-special .group-buy .swiper-container::before {
|
|
content: " ";
|
|
position: absolute;
|
|
top: 50%;
|
|
left: 0;
|
|
width: 1px;
|
|
height: 30rpx;
|
|
border-left: 1px solid #282828;
|
|
|
|
box-sizing: border-box;
|
|
|
|
transform: translateY(-50%);
|
|
}
|
|
|
|
.single-special .group-buy .list {
|
|
padding-left: 30rpx;
|
|
}
|
|
|
|
.single-special .group-buy .item {
|
|
display: flex;
|
|
|
|
align-items: center;
|
|
padding-top: 25rpx;
|
|
padding-right: 30rpx;
|
|
padding-bottom: 25rpx;
|
|
}
|
|
|
|
.single-special .group-buy .item+.item {
|
|
border-top: 1px solid #f0f0f0;
|
|
}
|
|
|
|
.single-special .group-buy .item image {
|
|
display: block;
|
|
width: 80rpx;
|
|
height: 80rpx;
|
|
border-radius: 50%;
|
|
background-color: #e93323;
|
|
|
|
object-fit: cover;
|
|
}
|
|
|
|
.single-special .group-buy .item>view view {
|
|
margin-left: 20rpx;
|
|
}
|
|
|
|
.single-special .group-buy .item>view:nth-child(2) {
|
|
flex: 1;
|
|
overflow: hidden;
|
|
white-space: nowrap;
|
|
text-overflow: ellipsis;
|
|
font-size: 28rpx;
|
|
color: #222;
|
|
}
|
|
|
|
.single-special .group-buy .item>view:nth-child(3) {
|
|
text-align: right;
|
|
font-size: 24rpx;
|
|
color: #333;
|
|
}
|
|
|
|
.single-special .group-buy .item>view:nth-child(3) text {
|
|
color: #ff6b00;
|
|
}
|
|
|
|
.single-special .group-buy .item>view:nth-child(3) view:last-child {
|
|
font-size: 22rpx;
|
|
color: #82848f;
|
|
}
|
|
|
|
.single-special .group-buy .item button {
|
|
width: 140rpx;
|
|
height: 50rpx;
|
|
border-radius: 25rpx;
|
|
margin-left: 35rpx;
|
|
|
|
background: linear-gradient(90deg, #409dff 0%, #1e85fb 100%);
|
|
font-size: 24rpx;
|
|
color: #ffffff;
|
|
}
|
|
|
|
.single-special .group-buy>view:nth-child(3) {
|
|
padding-top: 9rpx;
|
|
padding-bottom: 24rpx;
|
|
font-size: 24rpx;
|
|
text-align: center;
|
|
color: #282828;
|
|
}
|
|
|
|
.single-special .group-way {
|
|
margin-top: 14rpx;
|
|
background-color: #ffffff;
|
|
font-size: 28rpx;
|
|
color: #282828;
|
|
}
|
|
|
|
.single-special .group-way .way-title {
|
|
height: 86rpx;
|
|
padding-left: 30rpx;
|
|
line-height: 86rpx;
|
|
}
|
|
|
|
.single-special .group-way .list {
|
|
display: flex;
|
|
|
|
align-items: center;
|
|
height: 110rpx;
|
|
padding-left: 30rpx;
|
|
border-top: 1px solid #eee;
|
|
font-size: 26rpx;
|
|
counter-reset: ul;
|
|
}
|
|
|
|
.single-special .group-way .item {
|
|
position: relative;
|
|
padding-left: 34rpx;
|
|
}
|
|
|
|
.single-special .group-way .item ::before {
|
|
counter-increment: ul;
|
|
content: counter(ul);
|
|
position: absolute;
|
|
top: 50%;
|
|
left: 0;
|
|
width: 28rpx;
|
|
height: 28rpx;
|
|
border: 1px solid #282828;
|
|
border-radius: 50%;
|
|
|
|
box-sizing: border-box;
|
|
|
|
transform: translateY(-50%);
|
|
font-size: 22rpx;
|
|
line-height: 28rpx;
|
|
text-align: center;
|
|
}
|
|
|
|
.single-special .group-way .item:not(:last-child) {
|
|
padding-right: 66rpx;
|
|
margin-right: 40rpx;
|
|
background: url(getAssetsPath("/wap/first/zsff/images/group-way.png")) right center/28rpx no-repeat;
|
|
}
|
|
|
|
.single-special .detail {
|
|
padding: 30rpx;
|
|
background-color: #ffffff;
|
|
}
|
|
|
|
.single-special .detail image {
|
|
display: block;
|
|
width: 100%;
|
|
}
|
|
|
|
.single-special .tabbar {
|
|
position: relative;
|
|
|
|
display: flex;
|
|
height: 96rpx;
|
|
padding-left: 5rpx;
|
|
margin-top: 14rpx;
|
|
|
|
box-sizing: border-box;
|
|
background-color: #ffffff;
|
|
|
|
box-shadow: 0 6rpx 20rpx rgba(0, 0, 0, 0.03);
|
|
font-size: 30rpx;
|
|
line-height: 96rpx;
|
|
color: #999999;
|
|
}
|
|
|
|
.single-special .tabbar .item {
|
|
position: relative;
|
|
padding-right: 25rpx;
|
|
padding-left: 25rpx;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.single-special .tabbar .item.on {
|
|
font-weight: bold;
|
|
font-size: 32rpx;
|
|
color: #282828;
|
|
}
|
|
|
|
.single-special .tabbar .item.on::after {
|
|
content: " ";
|
|
position: absolute;
|
|
bottom: 0;
|
|
left: 50%;
|
|
width: 44rpx;
|
|
height: 4rpx;
|
|
border-radius: 2rpx;
|
|
background-color: #2c8eff;
|
|
|
|
transform: translateX(-50%);
|
|
}
|
|
|
|
.single-special .exercise {
|
|
padding: 30rpx;
|
|
background-color: #ffffff;
|
|
}
|
|
|
|
.single-special .exercise .item {
|
|
padding: 30rpx;
|
|
border-radius: 12rpx;
|
|
|
|
box-shadow: 0 3rpx 20rpx rgba(0, 0, 0, 0.07);
|
|
}
|
|
|
|
.single-special .exercise .item+.item {
|
|
margin-top: 30rpx;
|
|
}
|
|
|
|
.single-special .exercise .title {
|
|
font-size: 30rpx;
|
|
color: #282828;
|
|
}
|
|
|
|
.single-special .exercise .title .iconfont {
|
|
margin-right: 20rpx;
|
|
font-size: 30rpx;
|
|
color: #ccc;
|
|
}
|
|
|
|
.single-special .exercise .group {
|
|
display: flex;
|
|
|
|
align-items: center;
|
|
margin-top: 30rpx;
|
|
font-size: 22rpx;
|
|
color: #999999;
|
|
}
|
|
|
|
.single-special .exercise .progress {
|
|
width: 160rpx;
|
|
height: 12rpx;
|
|
border-radius: 6rpx;
|
|
margin-right: 10rpx;
|
|
background-color: #eee;
|
|
}
|
|
|
|
.single-special .exercise .progress view {
|
|
height: 100%;
|
|
border-radius: 6rpx;
|
|
background-color: #2c8eff;
|
|
}
|
|
|
|
.single-special .exercise .group>view:nth-child(2) {
|
|
width: 98rpx;
|
|
}
|
|
|
|
.single-special .exercise .group>view:nth-child(3) {
|
|
flex: 1;
|
|
}
|
|
|
|
.single-special .exercise button {
|
|
width: 120rpx;
|
|
height: 42rpx;
|
|
border-radius: 21rpx;
|
|
background-color: #2c8eff;
|
|
font-family: inherit;
|
|
font-weight: normal;
|
|
color: #ffffff;
|
|
}
|
|
|
|
.single-special .exercise button .iconfont {
|
|
margin-right: 10rpx;
|
|
font-size: 19rpx;
|
|
}
|
|
|
|
.single-special .question {
|
|
padding: 30rpx;
|
|
background-color: #ffffff;
|
|
}
|
|
|
|
.single-special .question .item {
|
|
padding-right: 30rpx;
|
|
padding-left: 30rpx;
|
|
border-radius: 12rpx;
|
|
|
|
box-shadow: 0 3rpx 20rpx rgba(0, 0, 0, 0.07);
|
|
}
|
|
|
|
.single-special .question .item .item {
|
|
margin-top: 30rpx;
|
|
}
|
|
|
|
.single-special .question .head {
|
|
display: flex;
|
|
padding-top: 30rpx;
|
|
padding-bottom: 30rpx;
|
|
}
|
|
|
|
.single-special .question image {
|
|
display: block;
|
|
width: 240rpx;
|
|
height: 135rpx;
|
|
border-radius: 10rpx;
|
|
|
|
object-fit: cover;
|
|
}
|
|
|
|
.single-special .question .head>view:last-child {
|
|
flex: 1;
|
|
|
|
display: flex;
|
|
|
|
flex-direction: column;
|
|
|
|
justify-content: space-between;
|
|
margin-left: 20rpx;
|
|
}
|
|
|
|
.single-special .question .title {
|
|
-webkit-line-clamp: 2;
|
|
overflow: hidden;
|
|
font-size: 30rpx;
|
|
color: #333;
|
|
}
|
|
|
|
.single-special .question .group {
|
|
display: flex;
|
|
|
|
justify-content: space-between;
|
|
|
|
align-items: center;
|
|
font-size: 22rpx;
|
|
color: #ff6b00;
|
|
}
|
|
|
|
.single-special .question .iconfont {
|
|
font-size: 30rpx;
|
|
color: #ccc;
|
|
}
|
|
|
|
.single-special .question button {
|
|
width: 120rpx;
|
|
height: 42rpx;
|
|
border-radius: 21rpx;
|
|
background-color: #2c8eff;
|
|
font-family: inherit;
|
|
font-weight: normal;
|
|
line-height: normal;
|
|
color: #ffffff;
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
}
|
|
|
|
.single-special .question button .iconfont {
|
|
margin-right: 10rpx;
|
|
font-size: 19rpx;
|
|
color: #ffffff;
|
|
}
|
|
|
|
.single-special .evaluate>view:first-child {
|
|
display: flex;
|
|
|
|
justify-content: space-between;
|
|
|
|
align-items: center;
|
|
padding: 33rpx 30rpx 13rpx;
|
|
background-color: #ffffff;
|
|
}
|
|
|
|
.single-special .evaluate button {
|
|
padding: 9rpx 28rpx;
|
|
border-radius: 28rpx;
|
|
|
|
background: linear-gradient(90deg, #409dff 0%, #1e85fb 100%);
|
|
font-family: inherit;
|
|
font-weight: normal;
|
|
font-size: 26rpx;
|
|
color: #ffffff;
|
|
}
|
|
|
|
.single-special .evaluate .score {
|
|
display: flex;
|
|
|
|
align-items: center;
|
|
font-size: 28rpx;
|
|
color: #ff6b00;
|
|
}
|
|
|
|
.single-special .evaluate .score text {
|
|
margin-right: 5rpx;
|
|
font-weight: bold;
|
|
font-size: 44rpx;
|
|
}
|
|
|
|
.single-special .evaluate .score view:last-child {
|
|
padding: 3rpx 25rpx;
|
|
border-radius: 21rpx;
|
|
margin-left: 15rpx;
|
|
background-color: #f5f5f5;
|
|
font-size: 24rpx;
|
|
color: #999999;
|
|
}
|
|
|
|
.single-special .footer {
|
|
position: fixed;
|
|
right: 0;
|
|
bottom: 0;
|
|
left: 0;
|
|
z-index: 9;
|
|
|
|
display: flex;
|
|
height: 100rpx;
|
|
|
|
height: calc(100rpx + var(--safe-bottom));
|
|
padding-right: 30rpx;
|
|
padding-left: 8rpx;
|
|
border-top: 1px solid #eee;
|
|
background-color: #ffffff;
|
|
padding-bottom: var(--safe-bottom);
|
|
}
|
|
|
|
.single-special .footer>.button {
|
|
width: 84rpx;
|
|
font-family: inherit;
|
|
font-weight: normal;
|
|
font-size: 18rpx;
|
|
color: #333;
|
|
text-align: center;
|
|
}
|
|
|
|
.single-special .footer>.button:nth-child(3) {
|
|
width: 98rpx;
|
|
}
|
|
|
|
.single-special .footer>.button image {
|
|
display: block;
|
|
width: 40rpx;
|
|
height: 40rpx;
|
|
margin: 16rpx auto 5rpx;
|
|
}
|
|
|
|
.learn-btn {
|
|
flex: 1;
|
|
align-self: center;
|
|
|
|
display: flex;
|
|
height: 76rpx;
|
|
border-radius: 38rpx;
|
|
margin-left: 26rpx;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.learn-btn button {
|
|
flex: 1;
|
|
min-width: 0;
|
|
font-family: inherit;
|
|
font-weight: normal;
|
|
font-size: 28rpx;
|
|
line-height: 76rpx;
|
|
color: #ffffff;
|
|
}
|
|
|
|
.learn-btn button:first-child {
|
|
background: linear-gradient(90deg, #ff6b00 0%, #ff9100 100%);
|
|
}
|
|
|
|
.learn-btn button:last-child {
|
|
background: linear-gradient(90deg, #409dff 0%, #1e85fb 100%);
|
|
}
|
|
|
|
.learn-btn button view {
|
|
font-size: 20rpx;
|
|
}
|
|
|
|
.single-special .audio-panel {
|
|
display: flex;
|
|
|
|
flex-direction: column;
|
|
|
|
justify-content: center;
|
|
height: 100%;
|
|
border-bottom: 1px solid #f5f5f5;
|
|
background-color: #ffffff;
|
|
}
|
|
|
|
.single-special .audio-panel image {
|
|
display: block;
|
|
width: 464rpx;
|
|
height: 160rpx;
|
|
margin: 0 auto;
|
|
object-fit: contain;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.single-special .audio-panel .control {
|
|
display: flex;
|
|
|
|
align-items: center;
|
|
padding-right: 30rpx;
|
|
padding-left: 30rpx;
|
|
margin-top: 40rpx;
|
|
}
|
|
|
|
.single-special .audio-panel .icon {
|
|
font-size: 64rpx;
|
|
color: #2c8eff;
|
|
}
|
|
|
|
.single-special .audio-panel .timeline {
|
|
flex: 1;
|
|
|
|
display: flex;
|
|
|
|
align-items: center;
|
|
margin-left: 30rpx;
|
|
font-size: 28rpx;
|
|
color: #2c8eff;
|
|
}
|
|
|
|
.single-special .audio-panel .track {
|
|
flex: 1;
|
|
height: 4rpx;
|
|
border-radius: 2rpx;
|
|
margin-right: 18rpx;
|
|
margin-left: 18rpx;
|
|
background-color: rgba(44, 142, 255, 0.2);
|
|
}
|
|
|
|
.single-special .audio-panel .range {
|
|
position: relative;
|
|
width: 0;
|
|
height: 100%;
|
|
border-radius: 2rpx;
|
|
background-color: #2c8eff;
|
|
}
|
|
|
|
.single-special .audio-panel .thumb {
|
|
position: absolute;
|
|
top: 50%;
|
|
left: 100%;
|
|
width: 16rpx;
|
|
height: 16rpx;
|
|
border-radius: 50%;
|
|
background-color: #2c8eff;
|
|
|
|
transform: translate(-50%, -50%);
|
|
}
|
|
|
|
.single-special .share-dialog {
|
|
position: fixed;
|
|
top: 50%;
|
|
left: 50%;
|
|
z-index: 1001;
|
|
width: 600rpx;
|
|
height: 960rpx;
|
|
|
|
transform: translate(-50%, -50%);
|
|
|
|
object-fit: cover;
|
|
}
|
|
|
|
.single-special .group-chart-dialog {
|
|
position: fixed;
|
|
top: 50%;
|
|
left: 50%;
|
|
z-index: 56;
|
|
width: 600rpx;
|
|
padding-top: 100rpx;
|
|
padding-bottom: 60rpx;
|
|
border-radius: 30rpx;
|
|
background-color: #ffffff;
|
|
|
|
transform: translate(-50%, -50%);
|
|
text-align: center;
|
|
}
|
|
|
|
.single-special .group-chart-dialog image {
|
|
display: block;
|
|
width: 354rpx;
|
|
height: 354rpx;
|
|
margin: 0 auto;
|
|
}
|
|
|
|
.single-special .barrage {
|
|
position: fixed;
|
|
top: 100rpx;
|
|
left: 30rpx;
|
|
|
|
display: flex;
|
|
|
|
align-items: center;
|
|
max-width: calc(100% - 60rpx);
|
|
height: 48rpx;
|
|
padding-right: 24rpx;
|
|
padding-left: 4rpx;
|
|
border-radius: 24rpx;
|
|
background-color: rgba(0, 0, 0, 0.3);
|
|
font-size: 24rpx;
|
|
color: #ffffff;
|
|
}
|
|
|
|
.single-special .barrage image {
|
|
display: block;
|
|
width: 40rpx;
|
|
height: 40rpx;
|
|
border-radius: 50%;
|
|
margin-right: 12rpx;
|
|
|
|
object-fit: cover;
|
|
}
|
|
|
|
.single-special .barrage view:nth-child(2) {
|
|
overflow: hidden;
|
|
white-space: nowrap;
|
|
text-overflow: ellipsis;
|
|
}
|
|
|
|
.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;
|
|
}
|
|
|
|
.video_footer_btn_left {
|
|
width: 35%;
|
|
height: 100%;
|
|
background: #ff6b00;
|
|
}
|
|
|
|
.video_footer_btn_left_pic {
|
|
font-size: 28rpx;
|
|
line-height: 22rpx;
|
|
color: #ffffff;
|
|
font-weight: 600;
|
|
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;
|
|
}
|
|
|
|
.poster-canvas2 {
|
|
width: 1200rpx;
|
|
height: 1700rpx;
|
|
}
|
|
</style> |