|
@@ -1,50 +1,48 @@
|
|
|
<script setup>
|
|
|
-import { getCountDownTime } from '~/utils/day';
|
|
|
-import { user } from '~/store/user';
|
|
|
-import { child } from '~/store/child';
|
|
|
-import { showFailToast, showSuccessToast } from 'vant';
|
|
|
-const oss = window.GLOBAL_CONFIG.oss
|
|
|
+import { getCountDownTime } from "~/utils/day";
|
|
|
+import { user } from "~/store/user";
|
|
|
+import { child } from "~/store/child";
|
|
|
+import { showFailToast, showSuccessToast } from "vant";
|
|
|
+const oss = window.GLOBAL_CONFIG.oss;
|
|
|
const props = defineProps({
|
|
|
id: {
|
|
|
type: String,
|
|
|
required: true,
|
|
|
},
|
|
|
-})
|
|
|
+});
|
|
|
|
|
|
-const router = useRouter()
|
|
|
+const router = useRouter();
|
|
|
function handleNavLeftClick() {
|
|
|
- router.replace('/stxk/jz')
|
|
|
+ router.replace("/stxk/jz");
|
|
|
}
|
|
|
|
|
|
// 当前学生是否可报名
|
|
|
-let isOpen = $ref(false)
|
|
|
+let isOpen = $ref(false);
|
|
|
|
|
|
-let loading = $ref(true)
|
|
|
-let detailInfo = $ref()
|
|
|
+let loading = $ref(true);
|
|
|
+let detailInfo = $ref();
|
|
|
request({
|
|
|
- url: '/khfw/kcgl/detail',
|
|
|
+ url: "/khfw/kcgl/detail",
|
|
|
data: {
|
|
|
token: child.token,
|
|
|
kk_id: props.id,
|
|
|
- }
|
|
|
-}).then(res => {
|
|
|
- if (res.code === '1') {
|
|
|
- detailInfo = res.data.one_info
|
|
|
- detailInfo.$kk_kcfy = detailInfo.kk_kcfy * 100
|
|
|
+ },
|
|
|
+}).then((res) => {
|
|
|
+ if (res.code === "1") {
|
|
|
+ detailInfo = res.data.one_info;
|
|
|
+ detailInfo.$kk_kcfy = detailInfo.kk_kcfy * 100;
|
|
|
|
|
|
- isOpen = detailInfo.khfw_kcbmxx.kkbm_id === '0'
|
|
|
+ isOpen = detailInfo.khfw_kcbmxx.kkbm_id === "0";
|
|
|
} else {
|
|
|
-
|
|
|
}
|
|
|
- loading = false
|
|
|
-})
|
|
|
-
|
|
|
+ loading = false;
|
|
|
+});
|
|
|
|
|
|
function handleSubmitbarClick() {
|
|
|
- console.log('handleSubmitbarClick', child);
|
|
|
+ console.log("handleSubmitbarClick", isOpen, child);
|
|
|
|
|
|
request({
|
|
|
- url: '/khfw/kcbmxx/add',
|
|
|
+ url: "/khfw/kcbmxx/add",
|
|
|
data: {
|
|
|
token: child.token,
|
|
|
khfw_kcbmxx: {
|
|
@@ -60,90 +58,97 @@ function handleSubmitbarClick() {
|
|
|
kkbm_s_grade_id: child.cm_info[0].grade,
|
|
|
// kkbm_s_grade_name: '',
|
|
|
kkbm_s_class_id: child.cm_info[0].cm_id,
|
|
|
- kkbm_s_class_name: child.cm_info[0].pre + child.cm_info[0].cm_name
|
|
|
- }
|
|
|
- }
|
|
|
+ kkbm_s_class_name: child.cm_info[0].pre + child.cm_info[0].cm_name,
|
|
|
+ },
|
|
|
+ },
|
|
|
}).then((res) => {
|
|
|
- if (res.code === '1') {
|
|
|
- const _href = encodeURIComponent(location.href)
|
|
|
- location.replace(`http://wx.bozedu.net/get-weixin-code.html?appid=${window.GLOBAL_CONFIG.appid}&redirect_uri=${_href}&state=1`)
|
|
|
+ if (res.code === "1") {
|
|
|
+ const _href = encodeURIComponent(location.href);
|
|
|
+ if (detailInfo.$kk_kcfy != "0") {
|
|
|
+ location.replace(
|
|
|
+ `http://wx.bozedu.net/get-weixin-code.html?appid=${window.GLOBAL_CONFIG.appid}&redirect_uri=${_href}&state=1`
|
|
|
+ );
|
|
|
+ }
|
|
|
}
|
|
|
- })
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
function onBridgeReady(data) {
|
|
|
return new Promise((resolve, reject) => {
|
|
|
WeixinJSBridge.invoke(
|
|
|
- 'getBrandWCPayRequest',
|
|
|
+ "getBrandWCPayRequest",
|
|
|
{
|
|
|
- "appId": data.appid,
|
|
|
- "timeStamp": data.timestamp,
|
|
|
- "nonceStr": data.noncestr,
|
|
|
- "package": data.package,
|
|
|
- "signType": data.signtype,
|
|
|
- "paySign": data.paysign
|
|
|
+ appId: data.appid,
|
|
|
+ timeStamp: data.timestamp,
|
|
|
+ nonceStr: data.noncestr,
|
|
|
+ package: data.package,
|
|
|
+ signType: data.signtype,
|
|
|
+ paySign: data.paysign,
|
|
|
},
|
|
|
function (res) {
|
|
|
// 使用以上方式判断前端返回,微信团队郑重提示:
|
|
|
// res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
|
|
|
switch (res.err_msg) {
|
|
|
case "get_brand_wcpay_request:ok":
|
|
|
- showSuccessToast("支付成功")
|
|
|
- return resolve(true)
|
|
|
+ showSuccessToast("支付成功");
|
|
|
+ return resolve(true);
|
|
|
case "get_brand_wcpay_request:ok":
|
|
|
- showFailToast('取消支付')
|
|
|
- return resolve(false)
|
|
|
+ showFailToast("取消支付");
|
|
|
+ return resolve(false);
|
|
|
case "get_brand_wcpay_request:ok":
|
|
|
- showFailToast("支付失败")
|
|
|
- return resolve(false)
|
|
|
+ showFailToast("支付失败");
|
|
|
+ return resolve(false);
|
|
|
default:
|
|
|
- return resolve(false)
|
|
|
+ return resolve(false);
|
|
|
}
|
|
|
}
|
|
|
- )
|
|
|
- })
|
|
|
-
|
|
|
+ );
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-const searchObj = new URLSearchParams(location.search)
|
|
|
-const code = searchObj.get('code')
|
|
|
+const searchObj = new URLSearchParams(location.search);
|
|
|
+const code = searchObj.get("code");
|
|
|
// 微信支付跳转过来
|
|
|
if (code) {
|
|
|
request({
|
|
|
- url: '/khfw/jfgl/gotopay',
|
|
|
+ url: "/khfw/jfgl/gotopay",
|
|
|
data: {
|
|
|
token: child.token,
|
|
|
- client: 'wx',
|
|
|
+ client: "wx",
|
|
|
code,
|
|
|
khfw_jfgl: {
|
|
|
kkbm_s_user_id: child.user_id,
|
|
|
kk_id: props.id,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ })
|
|
|
+ .then((res) => {
|
|
|
+ if (res.code === "1") {
|
|
|
+ // isOpen = false
|
|
|
+ if (typeof WeixinJSBridge == "undefined") {
|
|
|
+ console.log("WeixinJSBridge is not ready");
|
|
|
+ document.addEventListener(
|
|
|
+ "WeixinJSBridgeReady",
|
|
|
+ onBridgeReady(res.data),
|
|
|
+ false
|
|
|
+ );
|
|
|
+ } else {
|
|
|
+ return onBridgeReady(res.data);
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
- }).then(res => {
|
|
|
- if (res.code === '1') {
|
|
|
- // isOpen = false
|
|
|
- if (typeof WeixinJSBridge == "undefined") {
|
|
|
- console.log('WeixinJSBridge is not ready');
|
|
|
- document.addEventListener('WeixinJSBridgeReady', onBridgeReady(res.data), false);
|
|
|
+ })
|
|
|
+ .then((res) => {
|
|
|
+ location.search = "";
|
|
|
+ if (res) {
|
|
|
+ isOpen = false;
|
|
|
+ // router.replace('/stsk/jz/wd')
|
|
|
} else {
|
|
|
- return onBridgeReady(res.data);
|
|
|
}
|
|
|
- }
|
|
|
- }).then(res => {
|
|
|
- location.search = ''
|
|
|
- if (res) {
|
|
|
- isOpen = false
|
|
|
- // router.replace('/stsk/jz/wd')
|
|
|
- } else {
|
|
|
- }
|
|
|
- })
|
|
|
+ });
|
|
|
}
|
|
|
</script>
|
|
|
|
|
|
<template>
|
|
|
-
|
|
|
<van-sticky>
|
|
|
<van-nav-bar title="课程详情" left-arrow @click-left="handleNavLeftClick">
|
|
|
</van-nav-bar>
|
|
@@ -155,19 +160,23 @@ if (code) {
|
|
|
|
|
|
<div class="text-sm">
|
|
|
<div class="flex text-lg py-1">
|
|
|
- <div class="mr-4 font-bold">{{ detailInfo.kk_name }}</div>
|
|
|
- <van-tag type="primary">{{ detailInfo.ksgl_list.length }}课时</van-tag>
|
|
|
+ <div class="mr-4 font-bold">{{ detailInfo.kk_name }}</div>
|
|
|
+ <van-tag type="primary"
|
|
|
+ >{{ detailInfo.ksgl_list.length }}课时</van-tag
|
|
|
+ >
|
|
|
</div>
|
|
|
<div class="flex py-1">
|
|
|
- <div class="mr-4"><span>讲师:</span><span>{{ detailInfo.kk_teacher.name }}</span></div>
|
|
|
+ <div class="mr-4">
|
|
|
+ <span>讲师:</span><span>{{ detailInfo.kk_teacher.name }}</span>
|
|
|
+ </div>
|
|
|
<div class="flex">
|
|
|
<span>报名倒计时:</span>
|
|
|
<van-count-down :time="getCountDownTime(detailInfo.kk_bmkssj)">
|
|
|
<template #default="timeData">
|
|
|
<span>
|
|
|
- {{ paddingLeft(timeData.days * 24 + timeData.hours) }}小时{{ paddingLeft(timeData.minutes) }}分钟{{
|
|
|
- paddingLeft(timeData.seconds)
|
|
|
- }}秒
|
|
|
+ {{ paddingLeft(timeData.days * 24 + timeData.hours) }}小时{{
|
|
|
+ paddingLeft(timeData.minutes)
|
|
|
+ }}分钟{{ paddingLeft(timeData.seconds) }}秒
|
|
|
</span>
|
|
|
</template>
|
|
|
</van-count-down>
|
|
@@ -175,43 +184,58 @@ if (code) {
|
|
|
</div>
|
|
|
<div class="flex py-1">
|
|
|
<div>开课时间:</div>
|
|
|
- <div>{{ detailInfo.kk_skqjkssj }} - {{ detailInfo.kk_skqjjwsj }}(请在开课前报名)</div>
|
|
|
+ <div>
|
|
|
+ {{ detailInfo.kk_skqjkssj }} -
|
|
|
+ {{ detailInfo.kk_skqjjwsj }}(请在开课前报名)
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- <div class="flex py-1" v-show="detailInfo.kk_skdd!=''">
|
|
|
+ <div class="flex py-1" v-show="detailInfo.kk_skdd != ''">
|
|
|
<div>上课地点:</div>
|
|
|
- <div>{{detailInfo.kk_skdd}}</div>
|
|
|
+ <div>{{ detailInfo.kk_skdd }}</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
<van-divider />
|
|
|
|
|
|
<div class="mb-4">
|
|
|
<div class="pre font-bold mb-2">课程简介</div>
|
|
|
- <div class="text-sm" v-html="detailInfo.kk_kcjj">
|
|
|
- </div>
|
|
|
+ <div class="text-sm" v-html="detailInfo.kk_kcjj"></div>
|
|
|
</div>
|
|
|
|
|
|
<div class="mb-10">
|
|
|
<div class="pre font-bold mb-2">教师简介</div>
|
|
|
- <div v-if="detailInfo.kk_teachers!=''">
|
|
|
- <div class="flex text-sm shadow-md p-2 mb-4" v-for="item in detailInfo.kk_teachers">
|
|
|
- <div class="w-1/3 flex-none flex flex-col items-center" >
|
|
|
- <van-image :src=" item.avatar" width="100" height="100" round fit="cover"></van-image>
|
|
|
- <div>
|
|
|
- <div>{{ item.name }}</div>
|
|
|
+ <div v-if="detailInfo.kk_teachers != ''">
|
|
|
+ <div
|
|
|
+ class="flex text-sm shadow-md p-2 mb-4"
|
|
|
+ v-for="item in detailInfo.kk_teachers"
|
|
|
+ >
|
|
|
+ <div class="w-1/3 flex-none flex flex-col items-center">
|
|
|
+ <van-image
|
|
|
+ :src="item.avatar"
|
|
|
+ width="100"
|
|
|
+ height="100"
|
|
|
+ round
|
|
|
+ fit="cover"
|
|
|
+ ></van-image>
|
|
|
+ <div>
|
|
|
+ <div>{{ item.name }}</div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- <div>{{ item.intro }}</div>
|
|
|
- <!-- <ul class="list-disc list-inside">
|
|
|
+ <div>{{ item.intro }}</div>
|
|
|
+ <!-- <ul class="list-disc list-inside">
|
|
|
<li>{{ detailInfo.kk_teacher.intro }}</li>
|
|
|
</ul> -->
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
<div v-else>暂无数据</div>
|
|
|
</div>
|
|
|
|
|
|
- <van-submit-bar :price="detailInfo.$kk_kcfy" :button-text="isOpen ? '立即报名' : '已报名'" :disabled="!isOpen"
|
|
|
- @submit="handleSubmitbarClick" placeholder />
|
|
|
+ <van-submit-bar
|
|
|
+ :price="detailInfo.$kk_kcfy"
|
|
|
+ :button-text="isOpen ? '立即报名' : '已报名'"
|
|
|
+ :disabled="!isOpen"
|
|
|
+ @submit="handleSubmitbarClick"
|
|
|
+ placeholder
|
|
|
+ />
|
|
|
</van-skeleton>
|
|
|
</div>
|
|
|
-
|
|
|
</template>
|