Commit 6f41651b authored by 罗超's avatar 罗超

1

parent 005a3fa5
...@@ -45,4 +45,16 @@ export function getActivityDatail(data) { ...@@ -45,4 +45,16 @@ export function getActivityDatail(data) {
method: 'post', method: 'post',
data data
}) })
}
/**
* 活动报名
* @param {JSON参数} data
*/
export function activitySignUp(data) {
return request({
url: '/WeChatPay/SetActivityEnrollInfoJXH',
method: 'post',
data
})
} }
\ No newline at end of file
...@@ -243,6 +243,7 @@ ...@@ -243,6 +243,7 @@
</view> </view>
</view> </view>
</van-popup> </van-popup>
<van-toast id="van-toast" />
</view> </view>
</template> </template>
......
...@@ -22,6 +22,10 @@ ...@@ -22,6 +22,10 @@
"path": "pages/activity/activityList" //活动列表 "path": "pages/activity/activityList" //活动列表
}, { }, {
"path": "pages/activity/activityDetails" //活动详情 "path": "pages/activity/activityDetails" //活动详情
}, {
"path": "pages/activity/activitySignUp" //活动报名
}, {
"path": "pages/activity/activityMedia" //活动图片、视频
}], }],
"subPackages": [{ "subPackages": [{
"root": "pages/course", //课程分包 "root": "pages/course", //课程分包
......
...@@ -588,7 +588,7 @@ ...@@ -588,7 +588,7 @@
<view class="fourimg-box" v-if="item.FileList.length >= 4"> <view class="fourimg-box" v-if="item.FileList.length >= 4">
<div <div
v-for="(_item, _index) in item.FileList" v-for="(_item, _index) in item.FileList"
:key="_item.id" :key="_index"
class="subpic-box" class="subpic-box"
v-if="_index <= 3" v-if="_index <= 3"
> >
...@@ -646,18 +646,7 @@ ...@@ -646,18 +646,7 @@
> >
</view> </view>
</view> </view>
<!-- <view v-if="detial.IsFree==2 && detial.Price==0 && detial.PointNum>0" style="display: flex;align-items: flex-end;" >
<text>{{detial.PointNum}}</text>
<text style="font-size: 22rpx;">点</text>
</view> -->
</view> </view>
<view
class="btnc"
:style="{ background: mainColor }"
v-if="IsShowRollCall == 1"
@click="goRollCall"
>点名</view
>
<view v-if="detial.IsJoinActivity == 0"> <view v-if="detial.IsJoinActivity == 0">
<view <view
class="btnc" class="btnc"
...@@ -682,6 +671,7 @@ ...@@ -682,6 +671,7 @@
@changeuserinfo="reloadUserinfo" @changeuserinfo="reloadUserinfo"
@gbAuth="gbAuth" @gbAuth="gbAuth"
></auth> ></auth>
<van-toast id="van-toast" />
</view> </view>
</template> </template>
...@@ -704,7 +694,7 @@ export default { ...@@ -704,7 +694,7 @@ export default {
loading: true, loading: true,
pageTitle: "活动详情", pageTitle: "活动详情",
showAuth: false, showAuth: false,
mainColor: "", mainColor: "#00ACF9",
pricecolor: "", pricecolor: "",
Id: 0, Id: 0,
detial: {}, detial: {},
...@@ -716,7 +706,7 @@ export default { ...@@ -716,7 +706,7 @@ export default {
goPicDetail(arr) { goPicDetail(arr) {
uni.navigateTo({ uni.navigateTo({
url: url:
"/pages/school/picDetail?data=" + "/pages/activity/activityMedia?data=" +
encodeURIComponent(JSON.stringify({ data: arr })), encodeURIComponent(JSON.stringify({ data: arr })),
}); });
}, },
...@@ -755,19 +745,10 @@ export default { ...@@ -755,19 +745,10 @@ export default {
}); });
}, },
gosignUp() { gosignUp() {
let u = uni.getStorageSync("mall_UserInfo"); let dataList = encodeURIComponent(JSON.stringify(this.detial));
if (!u) { uni.navigateTo({
u = { url: "/pages/activity/activitySignUp?details=" + dataList,
nickName: "未登录", });
avatarUrl: "",
};
this.showAuth = true;
} else {
let dataList = encodeURIComponent(JSON.stringify(this.detial));
uni.navigateTo({
url: "/pages/school/jieheactivityBM?details=" + dataList,
});
}
}, },
previewImage(x) { previewImage(x) {
uni.previewImage({ uni.previewImage({
......
...@@ -223,6 +223,7 @@ ...@@ -223,6 +223,7 @@
</scroll-view> </scroll-view>
</view> </view>
</van-popup> </van-popup>
<van-toast id="van-toast" />
</view> </view>
</template> </template>
...@@ -239,7 +240,7 @@ import { ...@@ -239,7 +240,7 @@ import {
nextTick, nextTick,
} from "vue"; } from "vue";
import Loadmore from "../../components/loadmore.vue"; import Loadmore from "../../components/loadmore.vue";
import signUp from "../../components/signUp.vue"; import signUp from "../../components/signUpList.vue";
import { getActivityTypeList, getActivityList } from "../../api/activity"; import { getActivityTypeList, getActivityList } from "../../api/activity";
export default { export default {
components: { components: {
......
<template>
<view class="box">
<view class="nodata" v-if="dataList.length === 0"> 暂无内容 </view>
<view
v-for="(item, index) in dataList"
:key="index"
class="img-box"
style="position: relative"
v-if="dataList.length > 0"
>
<image
:src="item.Path"
mode="aspectFill"
class="img"
v-if="item.Type == 1"
@click="previewImage(index)"
></image>
<video
:id="'myVideo' + index"
:src="item.Path"
style="width: 215rpx; height: 215rpx"
:controls="controls"
:show-center-play-btn="false"
:show-fullscreen-btn="false"
@fullscreenchange="videoControl"
v-if="item.Type == 2"
></video>
<view
@click="enlarge(index)"
style="
position: absolute;
left: 50%;
top: 50%;
margin-top: -49rpx;
margin-left: -49rpx;
width: 98rpx;
height: 98rpx;
border-radius: 20rpx;
background-color: rgba(255, 255, 255, 0.4);
display: flex;
align-items: center;
justify-content: center;
"
v-if="item.Type == 2"
>
<!-- 播放按钮 -->
<image
src="https://viitto-1301420277.cos.ap-chengdu.myqcloud.com/Test/Upload/Goods/1616471847000_345.png"
style="width: 37rpx; height: 44rpx"
mode=""
></image>
</view>
</view>
<van-toast id="van-toast" />
</view>
</template>
<script>
import {
ref,
reactive,
toRefs,
toRef,
getCurrentInstance,
watch,
computed,
onMounted,
nextTick,
} from "vue";
export default {
setup() {
let data = reactive({
id: 0,
boxOption: 0,
navsOption: 0,
titleStyle: {},
active: 0,
mainColor: "",
likeStatus: false,
controls: false, //显示默认控件
dataList: [],
preImg: [],
videoContext: null,
});
let methods = {
previewImage(i) {
console.log(i);
uni.previewImage({
urls: data.preImg,
current: i,
longPressActions: {
itemList: ["发送给朋友", "保存图片", "收藏"],
success: function (data) {},
fail: function (err) {
console.log(err.errMsg);
},
},
});
},
goback() {
uni.navigateBack({
delta: 1,
});
},
enlarge(i) {
// 全屏
data.videoContext = uni.createVideoContext("myVideo" + i);
data.videoContext.requestFullScreen({
direction: 0,
});
},
videoControl(e) {
if (e.detail.fullScreen == false) {
data.videoContext.stop();
data.controls = false;
} else {
data.videoContext.play();
data.controls = true;
}
},
};
return {
...toRefs(data),
...methods,
};
},
onLoad(options) {
uni.setNavigationBarTitle({
title: "相册详情",
});
if (options.data) {
let res = JSON.parse(decodeURIComponent(options.data));
this.dataList = res.data;
this.dataList.map((e) => {
this.preImg.push(e.Path);
});
console.log(this.dataList);
}
},
};
</script>
<style scoped>
.box {
box-sizing: border-box;
padding: 30rpx;
display: flex;
flex-wrap: wrap;
}
.box .img-box:nth-child(3n) {
margin-right: 0rpx !important;
background-color: #000000;
}
.img-box {
width: 215rpx;
height: 215rpx;
border-radius: 12rpx;
margin-right: 18rpx;
margin-bottom: 18rpx;
border: 1rpx solid #eeeeee;
overflow: hidden;
}
.img {
width: 215rpx;
height: 215rpx;
border-radius: 12rpx;
}
.nodata {
width: 100%;
text-align: center;
font-size: 20rpx;
color: #999;
}
</style>
\ No newline at end of file
<style>
.stickSignUp {
width: 100%;
height: 100vh;
background: #fff;
}
.stickSignUp .box {
padding: 15px;
border-bottom: 1px solid #e2e2e2;
}
.stickSignUp .box-top {
width: 100%;
height: 67px;
display: flex;
align-items: center;
}
.stickSignUp .box-title {
width: calc(100vw - 30px - 110px - 10px);
height: 67px;
font-size: 15px;
color: #000000;
font-weight: 500;
line-height: 22px;
margin-left: 10px;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
}
.stickSignUp .box-c {
padding: 15px;
}
.stickSignUp .box-c-i {
width: 100%;
height: 52px;
display: flex;
align-items: center;
border-bottom: 1px solid #e2e2e2;
}
.stickSignUp .box-c-i input {
font-size: 12px;
width: calc(100vw - 30px - 70px);
}
.stickSignUp .box-c-l {
width: 70px;
font-size: 12px;
color: #666666;
}
.btn {
width: 100%;
height: 45px;
border-radius: 22px;
display: flex;
align-items: center;
justify-content: center;
font-size: 16px;
color: #ffffff;
margin: 30px 0;
}
</style>
<template>
<view class="stickSignUp">
<view class="box">
<view class="box-top">
<image
:src="details.CoverImg"
mode="aspectFill"
style="width: 110px; height: 67px; border-radius: 8px"
></image>
<view class="box-title">{{ details.ActivityName }}</view>
</view>
</view>
<view class="box-c">
<view style="font-size: 16px; color: #111111">请填写报名资料</view>
<view class="box-c-i">
<view class="box-c-l">姓名</view>
<input type="text" v-model="addMsg.LinkMan" placeholder="请填写姓名" />
</view>
<view class="box-c-i">
<view class="box-c-l">联系电话</view>
<input
type="number"
v-model="addMsg.LinkTel"
placeholder="请填写联系电话"
/>
</view>
<!-- <view class="box-c-i">
<view class="box-c-l">报名人数</view>
<u-number-box v-model="addMsg.PeopleNum" :min='1' :disabled='true' @change="valChange"></u-number-box>
</view> -->
<view class="box-c-i">
<view class="box-c-l">备注</view>
<input
type="text"
v-model="addMsg.Remark"
placeholder="请填写备注内容"
/>
</view>
<view class="box-c-i" v-if="details.IsFree !== 1">
<view class="box-c-l">支付方式</view>
<u-radio-group v-model="addMsg.PaymentWay">
<u-radio
shape="circle"
:active-color="mainColor"
@change="radioChange"
v-for="(item, index) in list"
:key="index"
:disabled="item.disabled"
:name="item.Id"
>
{{ item.name }}
</u-radio>
</u-radio-group>
</view>
<!-- <view class="box-c-i" v-if="details.IsFree==2" style="justify-content: flex-end;border-bottom: none;height: 35px;margin-top: 10px;">
<view><text class="box-c-l">{{addMsg.PaymentWay==1?'现金单价:':'点数单价:'}} </text>{{addMsg.PaymentWay==1?addMsg.UnitPrice:addMsg.UnitPoint}}{{addMsg.PaymentWay==1?'元':'点'}}</view>
</view> -->
<view
class="box-c-i"
v-if="details.IsFree == 2"
style="justify-content: flex-end; border-bottom: none; height: 35px"
>
<view
><text class="box-c-l">{{
addMsg.PaymentWay == 1 ? "现金总价:" : "点数总价:"
}}</text
>{{ addMsg.PaymentWay == 1 ? addMsg.Money : addMsg.TotalPoint
}}{{ addMsg.PaymentWay == 1 ? "元" : "点" }}</view
>
</view>
<view
class="box-c-i"
v-if="details.IsFree == 1"
style="justify-content: flex-end; border-bottom: none; height: 35px"
>
<view class="box-c-l" style="text-align: right">免费</view>
</view>
<view
class="btn"
@click="btnshow == true ? signup() : ''"
:style="{ background: mainColor }"
>
报名
</view>
</view>
</view>
</template>
<script>
import {
ref,
reactive,
toRefs,
toRef,
getCurrentInstance,
watch,
computed,
onMounted,
nextTick,
} from "vue";
import { activitySignUp } from "../../api/activity";
export default {
setup() {
let userinfo = uni.getStorageSync("userInfo");
let data = reactive({
pageTitle: "报名订单",
mainColor: "",
details: {},
addMsg: {
ActivityId: 0,
LinkMan: "",
LinkTel: "",
Remark: "",
PeopleNum: 1,
UnitPrice: 0,
Money: 0,
PaymentWay: 1,
PayWay: 1,
UnitPoint: 0,
TotalPoint: 0,
Sex: userinfo.StuSex + 1,
StuBirth: userinfo.StuBirth,
},
list: [
{ name: "在线支付", Id: 1, disabled: false },
{ name: "点数支付", Id: 6, disabled: false },
],
orderInfo: {},
btnshow: true,
mainColor: "#00ACF9",
});
let methods = {
valChange(e) {
data.addMsg.PeopleNum = e.value;
data.addMsg.Money = data.addMsg.UnitPrice * data.addMsg.PeopleNum;
},
radioChange() {},
async signup() {
data.btnshow = false;
if (data.addMsg.LinkMan == "") {
uni.showToast({
title: "请填写姓名",
icon: "none",
});
data.btnshow = true;
return;
}
if (data.addMsg.LinkTel == "") {
uni.showToast({
title: "请填写联系电话",
icon: "none",
});
data.btnshow = true;
return;
}
uni.showLoading({
title: "报名中",
});
if (data.addMsg.PaymentWay == 6) {
data.addMsg.UnitPrice = 0;
data.addMsg.Money = 0;
data.addMsg.PayWay = 0;
}
if (data.addMsg.PaymentWay == 1) {
data.addMsg.UnitPoint = 0;
data.addMsg.TotalPoint = 0;
data.addMsg.PayWay = 1;
}
let res = await activitySignUp(data.addMsg);
if (res) {
uni.hideLoading();
data.btnshow = true;
if (data.addMsg.PaymentWay == 6) {
uni.showToast({
title: "报名成功",
icon: "none",
duration: 2000,
});
that.getbackurl(); //返回列表
} else {
data.orderInfo = JSON.parse(res.data);
that.Pay();
}
} else {
uni.hideLoading();
data.btnshow = true;
}
},
Pay() {
let that = this;
uni.requestPayment({
provider: "wxpay",
timeStamp: this.orderInfo.timeStamp,
nonceStr: this.orderInfo.nonceStr,
package: this.orderInfo.package,
signType: this.orderInfo.signType,
paySign: this.orderInfo.sign,
success: function (res) {
console.log("success", res);
uni.showToast({
title: "支付成功",
});
let pages = getCurrentPages(); // 当前页面
let beforePage = pages[pages.length - 3]; // 前2个页面
setTimeout(() => {
uni.navigateBack({
delta: 2,
success: function () {
beforePage.$vm.getorder(); // 执行前一个页面的方法
},
});
}, 1000);
},
fail: function (err) {
console.log("fail:", err);
uni.showToast({
title: "支付失败",
});
},
});
},
getbackurl() {
let pages = getCurrentPages(); // 当前页面
let beforePage = pages[pages.length - 3]; // 前2个页面
setTimeout(() => {
uni.navigateBack({
delta: 2,
success: function () {
beforePage.$vm.getorder(); // 执行前一个页面的方法
},
});
}, 1000);
},
};
let that = methods;
return {
...toRefs(data),
...methods,
};
},
onLoad(option) {
uni.setNavigationBarTitle({
title: this.pageTitle,
});
this.details = JSON.parse(decodeURIComponent(option.details));
this.addMsg.ActivityId = this.details.Id;
if (this.details.IsFree == 1) {
this.addMsg.PaymentWay = 6;
this.list = [{ name: "点数支付", Id: 6, disabled: false }];
} else {
this.addMsg.UnitPrice = this.details.Price;
this.addMsg.UnitPoint = this.details.PointNum;
this.addMsg.Money = this.addMsg.UnitPrice * this.addMsg.PeopleNum;
this.addMsg.TotalPoint = this.addMsg.UnitPoint * this.addMsg.PeopleNum;
if (this.addMsg.UnitPrice == 0) {
this.addMsg.PaymentWay = 6;
this.list = [{ name: "点数支付", Id: 6, disabled: false }];
}
if (this.addMsg.UnitPoint == 0) {
this.addMsg.PaymentWay = 1;
this.list = [{ name: "在线支付", Id: 1, disabled: false }];
}
}
},
};
</script>
...@@ -6,17 +6,16 @@ if (process.env.NODE_ENV === "development") { ...@@ -6,17 +6,16 @@ if (process.env.NODE_ENV === "development") {
// host = 'https://eduapi.oytour.com/api' // host = 'https://eduapi.oytour.com/api'
} }
import Toast from '../wxcomponents/vant/toast/toast'; import Toast from '../wxcomponents/vant/toast/toast';
let JHdata = uni.getStorageSync("userInfo");
let request = (param) => { let request = (param) => {
//网络请求 //网络请求
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
let token = uni.getStorageSync('userInfo').Token; let JHdata = uni.getStorageSync("userInfo");
uni.request({ uni.request({
url: host + param.url, url: host + param.url,
method: param.method || "Post", method: param.method || "Post",
header: param.header || { header: param.header || {
'content-type': "application/json", 'content-type': "application/json",
'token': token || "" 'token': JHdata.Token || ""
}, },
data: { data: {
msg: param.data, msg: param.data,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment