<template> <div class="myOrders"> <van-tabs v-model="active" :before-change="beforeTabChange"> <!-- <van-tab title="待付款"> <van-list v-model="loading" :finished="finished" finished-text="没有更多了" @load="onLoadpay()"> <div class="showBoxDPJ" v-for="(item,index) in paylist" :key="index"> <div class="topLine"> <div class="topLineL">订单编号:{{item.orderpaynum}}</div> <div class="topLineR" style="color:#F64C37">待付款</div> </div> <div class="top" @click="toEdit(item)"> <div class="pic"> <img :src="item.coverUrl ? item.coverUrl : require('@/assets/home/defCoure.jpg')" alt="" style="width:100%;height:100%"> </div> <div class="basefont"> <div class="titlefont">{{item.baseName}}</div> <div class="tcfont">套餐名称:{{item.courseName}}</div> <div class="tcfont">数量*{{item.orderCount}}</div> </div> <div class="priceRight">¥{{item.paymoney}}</div> </div> <div class="detailsBox"> <div class="detailsBoxOne"> <div>订单创建时间</div> <div>{{item.intime.replace(/T/,' ')}}</div> </div> </div> </div> </van-list> </van-tab> --> <!-- <van-tab title="待审核"> <van-list v-model="loading" :finished="finished" finished-text="没有更多了" @load="onLoadmove()"> <div class="showBox" v-for="(item, index) in movelist" :key="index"> <div class="top" @click="toEdit(item)"> <div class="pic"> <img :src="item.coverUrl ? item.coverUrl : require('@/assets/home/defCoure.jpg')" alt="" style="width: 100%; height: 100%" /> </div> <div class="basefont"> <div class="titlefont">{{ item.baseName }}</div> <div class="tcfont">套餐名称:{{ item.courseName }}</div> <div class="tcfont">数量*{{ item.orderCount }}</div> </div> <div class="priceRight">¥{{ item.paymoney }}</div> </div> <div class="groupTime"> <van-icon name="clock-o" /><span class="grey"> 活动日期</span><span> {{ item.startDate }} - {{ item.endDate }}</span> </div> <div class="btnBox"> <div></div> <div> <van-button type="warning" plain size="small" @click="showPintuanAbout = true" style="margin-right: 15px" >退款说明</van-button > <van-button type="info" size="small" @click="toCode(item)">核销码</van-button> </div> </div> <div class="detailsBox"> <div class="detailsBoxOne"> <div>订单创建时间</div> <div>{{ item.intime.replace(/T/, ' ') }}</div> </div> <div class="detailsBoxOne"> <div>订单编号</div> <div>{{ item.orderpaynum }}</div> </div> </div> </div> </van-list> </van-tab> --> <!-- <van-tab title="待评价"> <van-list v-model="loading" :finished="finished" finished-text="没有更多了" @load="onLoadCareer()"> <div class="showBoxDPJ" v-for="(item, index) in datalist" :key="index"> <div class="topLine"> <div class="topLineL">订单编号:{{ item.orderpaynum }}</div> <div class="topLineR" @click="evaluate(item)">去评价 ></div> </div> <div class="top" @click="toEdit(item)"> <div class="pic"> <img :src="item.coverUrl ? item.coverUrl : require('@/assets/home/defCoure.jpg')" alt="" style="width: 100%; height: 100%" /> </div> <div class="basefont"> <div class="titlefont">{{ item.baseName }}</div> <div class="tcfont">套餐名称:{{ item.courseName }}</div> <div class="tcfont">数量*{{ item.orderCount }}</div> </div> <div class="priceRight">¥{{ item.paymoney }}</div> </div> <div class="detailsBox"> <div class="detailsBoxOne"> <div>订单创建时间</div> <div>{{ item.intime.replace(/T/, ' ') }}</div> </div> </div> </div> </van-list> </van-tab> --> <!-- <van-tab title="已评价"> <van-list v-model="loading" :finished="finished" finished-text="没有更多了" @load="onLoad()"> <div class="showBoxDPJ showBoxYPJ" v-for="(item, index) in list" :key="index"> <div class="top"> <div class="pic"> <img :src="item.coverUrl ? item.coverUrl : require('@/assets/home/defCoure.jpg')" alt="" style="width: 100%; height: 100%" /> </div> <div class="basefont"> <div class="titlefont">{{ item.baseName }}</div> <div class="tcfont">套餐名称:{{ item.courseName }}</div> <div class="tcfont">数量*{{ item.orderCount }}</div> </div> <div class="priceRight">¥{{ item.paymoney }}</div> </div> <div class="boxdf"> <div class="title">课程评分</div> <div class="fr"> <van-rate v-model="item.courseScore" void-icon="star" void-color="#eee" color="#FFCC00" :size="16" readonly /> <span class="rate">{{ item.courseScore }}.0</span> </div> </div> <div class="boxdf"> <div class="title">基地评分</div> <div class="fr"> <van-rate v-model="item.baseScore" void-icon="star" void-color="#eee" color="#FFCC00" :size="16" readonly /> <span class="rate">{{ item.baseScore }}.0</span> </div> </div> <p class="evaluation"><span>评价:</span>{{ item.evaluation }}</p> <div class="evaluation_img_box"> <img class="evaluation_img" v-for="(imgItem, index) in item.imageList" :key="index" :src="imgItem.imgUrl" alt="" @click="previewImg(imgItem.imgUrl)" /> </div> </div> </van-list> </van-tab> --> <van-tab title="待核销"> <van-list v-model="loading" :finished="finished" finished-text="没有更多了" @load="onWritten()"> <div class="showBox" v-for="(item, index) in movelist" :key="index"> <div class="top"> <div class="pic"> <img :src="item.coverUrl ? item.coverUrl : require('@/assets/home/defCoure.jpg')" alt="" style="width: 100%; height: 100%" /> </div> <div class="basefont"> <div class="titlefont">{{ item.baseName }}</div> <div class="tcfont">套餐名称:{{ item.courseName }}</div> <div class="tcfont">数量*{{ item.orderCount }}</div> </div> <div class="priceRight">¥{{ item.paymoney }}</div> </div> <div class="groupTime"> <van-icon name="clock-o" /><span class="grey"> 活动日期</span><span> {{ item.startDate }} - {{ item.endDate }}</span> </div> <div class="btnBox"> <div></div> <div> <!-- <van-button type="warning" plain size="small" @click="showPintuanAbout = true" style="margin-right: 15px" >退款说明</van-button > --> <van-button type="info" size="small" @click="toCode(item)">核销码</van-button> </div> </div> <div class="detailsBox"> <div class="detailsBoxOne"> <div>订单创建时间</div> <div>{{ item.intime.replace(/T/, ' ') }}</div> </div> <div class="detailsBoxOne"> <div>订单编号</div> <div>{{ item.orderpaynum }}</div> </div> </div> </div> </van-list> </van-tab> <van-tab title="已核销"> <van-list v-model="loading" :finished="finished" finished-text="没有更多了" @load="onalreadyWritten()"> <div class="showBoxDPJ showBoxYPJ" v-for="(item, index) in datalist" :key="index"> <div class="top"> <div class="pic"> <img :src="item.coverUrl ? item.coverUrl : require('@/assets/home/defCoure.jpg')" alt="" style="width: 100%; height: 100%" /> </div> <div class="basefont"> <div class="titlefont">{{ item.baseName }}</div> <div class="tcfont">套餐名称:{{ item.courseName }}</div> <div class="tcfont">数量*{{ item.orderCount }}</div> </div> <div class="priceRight">¥{{ item.paymoney }}</div> </div> <div class="evaluate_css"> <van-button type="info" size="small" @click="evaluate(item)">评价</van-button> </div> </div> </van-list> </van-tab> <van-tab title="已评价"> <van-list v-model="loading" :finished="finished" finished-text="没有更多了" @load="onLoad()"> <div class="showBoxDPJ showBoxYPJ" v-for="(item, index) in list" :key="index"> <div class="top"> <div class="pic"> <img :src="item.coverUrl ? item.coverUrl : require('@/assets/home/defCoure.jpg')" alt="" style="width: 100%; height: 100%" /> </div> <div class="basefont"> <div class="titlefont">{{ item.baseName }}</div> <div class="tcfont">套餐名称:{{ item.courseName }}</div> <div class="tcfont">数量*{{ item.orderCount }}</div> </div> <div class="priceRight">¥{{ item.paymoney }}</div> </div> <div class="boxdf"> <div class="title">课程评分</div> <div class="fr"> <van-rate v-model="item.courseScore" void-icon="star" void-color="#eee" color="#FFCC00" :size="16" readonly /> <span class="rate">{{ item.courseScore }}.0</span> </div> </div> <div class="boxdf"> <div class="title">基地评分</div> <div class="fr"> <van-rate v-model="item.baseScore" void-icon="star" void-color="#eee" color="#FFCC00" :size="16" readonly /> <span class="rate">{{ item.baseScore }}.0</span> </div> </div> <p class="evaluation"><span>评价:</span>{{ item.evaluation }}</p> <div class="evaluation_img_box"> <img class="evaluation_img" v-for="(imgItem, index) in item.imageList" :key="index" :src="imgItem.imgUrl" alt="" @click="previewImg(imgItem.imgUrl)" /> </div> </div> </van-list> </van-tab> </van-tabs> <!--二维码--> <!-- <div class="qrcodeBox" @click.self="qrcodeShow = false" v-show="qrcodeShow"> <div id="qrcode"></div> </div> --> <!--退款说明--> <van-popup v-model="showPintuanAbout" round> <div class="pintuan_about"> <img class="about_img" src="@/assets/home/tip.png" alt="" /> <p class="about_title">退款说明</p> <p class="about_content"> 1、凡拼团活动报名人数未达最低成团数,本团活动则不开营,系统将在72小时内,全额退还,且不产生违约风险赔偿。 </p> <p class="about_content"> 2、如果您因行程发生变动需要取消预订,建议您尽可能提前与平台商户取得联系,并按商品订购须知或该商户旅游合同条款进行退款。 </p> <p class="about_content" style="font-weight: bold">如若未声明与明确的,按《浙江省境内旅游合同》条款退款。</p> <!-- <p class="about_content">(1)出发前7日至4日,支付旅游费用总额的10%。</p> <p class="about_content">(2)出发前3日至1日,支付旅游费用总额的15%。</p> <p class="about_content">(3)出发当日,支付旅游费用总额的20%。</p> --> <p class="about_know" @click="showPintuanAbout = false">我知道了</p> </div> </van-popup> <van-popup v-model="showCode" round get-container="body"> <div class="codeCss"> <div class="showBox"> <div class="top"> <div class="pic"> <img :src="codeData.coverUrl ? codeData.coverUrl : require('@/assets/home/defCoure.jpg')" alt="" style="width: 100%; height: 100%" /> </div> <div class="basefont"> <div class="titlefont">{{ codeData.baseName }}</div> <div class="tcfont">套餐名称:{{ codeData.courseName }}</div> <div class="tcfont">数量*{{ codeData.orderCount }}</div> </div> <!-- <div class="priceRight">¥{{codeData.paymoney}}</div> --> </div> <div class="groupTime"> <van-icon name="clock-o" /><span class="grey"> 活动日期</span><span> {{ codeData.startDate }} - {{ codeData.endDate }}</span> </div> <div class="qrcodeBox"> <div id="qrcode" ref="imageWrapper" v-if="!imgUrl"></div> <div class="imgBox"> <img :src="imgUrl" v-if="imgUrl" style="width: 100%; height: 100%" /> </div> </div> <div class="numShow"> {{ codeData.id }} </div> <div class="fontBottom">请向工作人员出示</div> </div> </div> </van-popup> <van-popup v-model="showPreview" round get-container="body"> <img class="preview_img" :src="previewUrl" alt="" /> </van-popup> </div> </template> <script> import QRCode from 'qrcodejs2' // 引入qrcode // import html2canvas from "html2canvas" // let Base64 = require('js-base64').Base64; export default { name: 'ServiceOrder', data() { return { userInfo: '', active: 0, paylist: [], //待付款 movelist: [], //待核销 list: [], //所有 datalist: [], //未评价 loading: false, finished: false, pageCareerIndex: 0, qrcodeShow: false, showPintuanAbout: false, showCode: false, codeData: {}, imgUrl: '', previewUrl: '', //图片预览 showPreview: false, showGroupCode: false, //群码 chatGroupUrl: '', //群码图片 showChatGroupUrlTag: false, } }, computed: { nicknameUser() { return localStorage.getItem('nicknameUser') }, }, mounted() { let userInfo = localStorage.getItem('userInfo') if (userInfo) { this.userInfo = JSON.parse(userInfo) } // 进入页面进到第几个tab if (this.$route.query.active || this.$route.query.active == 0) { this.active = this.$route.query.active } // 进入页面直接显示第一个订单的群码 if (this.$route.query.showChatGroupUrl == 1) { this.showChatGroupUrlTag = true } }, methods: { beforeTabChange(item) { console.log(item) this.paylist = [] this.movelist = [] this.list = [] this.datalist = [] if (item == 0) { // this.onLoadmove() this.onWritten() } else if (item == 1) { // this.onLoadCareer() this.onalreadyWritten() } else if (item == 2) { // this.onLoadCareer() this.onLoad() } else { // this.onLoad() } return true }, //获取待支付 onLoadpay() { this.finished = true const centerNo = this.userInfo?.centerNo if (!centerNo) return this.yxAxios.get(`${this.yanxueUrl}/api/StudiesWap/GetOrderPayList?userId=${centerNo}&type=1&page=1&pageSize=999`).then((res) => { let data = res.data if (data.status == 1) { this.paylist = this.paylist.concat(data.data.list) this.loading = false if (data.data.list.length < 10) { this.finished = true } } else { this.$toast.fail(data.message) } }) }, //获取已支付 onLoadmove() { this.finished = true const centerNo = this.userInfo?.centerNo this.yxAxios.get(`${this.yanxueUrl}/api/StudiesWap/GetOrderPayList?userId=${centerNo}&type=2&page=1&pageSize=999`).then((res) => { let data = res.data if (data.status == 1) { this.movelist = this.movelist.concat(data.data.list) this.loading = false if (data.data.list.length < 10) { this.finished = true } if (this.showChatGroupUrlTag) { this.showChatGroupUrlTag = false this.openGroupCodePopup(0) } } else { this.$toast.fail(data.message) } }) }, //获取待评价 onLoadCareer() { this.finished = true const centerNo = this.userInfo?.centerNo this.yxAxios.get(`${this.yanxueUrl}/api/StudiesWap/GetOrderPayList?userId=${centerNo}&type=3&page=1&pageSize=999`).then((res) => { let data = res.data if (data.status == 1) { this.datalist = this.datalist.concat(data.data.list) this.loading = false if (data.data.list.length < 10) { this.finished = true } } else { this.$toast.fail(data.message) } }) }, //获取已评价 onLoad() { this.finished = true const centerNo = this.userInfo?.centerNo this.yxAxios.get(`${this.yanxueUrl}/api/StudiesWap/GetOrderPayList?userId=${centerNo}&type=4&page=1&pageSize=999`).then((res) => { // console.log(res) let data = res.data if (data.status == 1) { this.list = this.list.concat(data.data.list) this.loading = false if (data.data.list.length < 10) { this.finished = true } } else { this.$toast.fail(data.message) } }) }, //获取待核销 onwaitReviewe(){ this.yxAxios .post(`${this.zlyanxueUrl}api/Order/GetOrderSingleReserveList`, { pageSize: 100, page: 1, state: 0, userNum: this.userInfo?.centerNo }) .then((res) => { if (res.data.status == 1) { let tableData = res.data.data.items; // for (let i in tableData) { // tableData[i].createTime = this.Moment(tableData[i].createTime).format('YYYY-MM-DD HH:mm:ss'); // } this.tableData = tableData; } else { this.$message.warning(res.data.message); } }); }, //待核销 onWritten() { this.finished = true const centerNo = this.userInfo?.centerNo this.yxAxios.get(`${this.yanxueUrl}/api/StudiesWap/GetOrderPayList?userId=${centerNo}&type=2&page=1&pageSize=999`).then((res) => { let data = res.data if (data.status == 1) { this.movelist = data.data.list } else { this.$toast.fail(data.message) } }) }, //已核销 onalreadyWritten() { this.finished = true const centerNo = this.userInfo?.centerNo this.yxAxios.get(`${this.yanxueUrl}/api/StudiesWap/GetOrderPayList?userId=${centerNo}&type=3&page=1&pageSize=999`).then((res) => { let data = res.data if (data.status == 1) { this.datalist = data.data.list } else { this.$toast.fail(data.message) } }) }, //生成核销码 makeCode(id) { console.log(id.toString()) document.getElementById('qrcode').innerHTML = '' this.qrcodeShow = true let qrcode = new QRCode('qrcode', { width: 200, height: 200, text: id.toString(), // 二维码地址 }) this.canvanqrCode() }, //评价 evaluate(item) { window.localStorage.setItem('courseInfo', JSON.stringify(item)) this.$router.push({ name: 'evaluateCourse' }) }, //核销码 toCode(item) { this.codeData = {} this.showCode = true this.codeData = item this.imgUrl = '' setTimeout(() => { this.makeCode(item.id) }, 1000) }, // 打开群码弹窗 openGroupCodePopup(index) { this.chatGroupUrl = this.movelist[index]?.chatGroupUrl this.showGroupCode = true // 设置分享 // this.$emit('getWxConfig', { // title: this.movelist[index].courseName, // 分享标题 // desc: '读万卷书,行万里路,我们一起“趣研学啦”', // 分享描述 // link: `https://payment.myjxt.com/center/#/abroad_detail?courseId=${this.movelist[index].courseId}`, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致 // imgUrl: 'https://payment.myjxt.com/share_qxy.png', // 分享图标 // }) }, //跳转 toEdit(item) { // this.$router.push({ path: 'abroad_detail', query: { courseId: item.courseId, } }) }, //二维码转图片 // canvanqrCode () { // html2canvas(this.$refs.imageWrapper, { // width: 200, // height: 200 // }).then(canvas => { // let dataURL = canvas.toDataURL("image/png"); // this.imgUrl = dataURL; // }); // }, // 预览图片 previewImg(url) { this.previewUrl = url this.showPreview = true }, }, components: {}, } </script> <style lang="scss" scoped> .myOrders { position: fixed; top: 0; left: 0; right: 0; bottom: 0; overflow: auto; background: #f6f7fa; // .qrcodeBox { // position: fixed; // top: 0; // left: 0; // bottom: 0; // right: 0; // background-color: rgba(0, 0, 0, 0.4); // #qrcode { // position: absolute; // top: 50%; // left: 50%; // transform: translate(-50%, -50%); // padding: 20px; // background: #fff; // } // } .list { padding: 20px; box-sizing: border-box; li:not(:last-child) { border-bottom: 1px dashed #eee; } li { margin-bottom: 10px; padding-bottom: 10px; .baseName { padding-left: 50px; font-size: 30px; background: url('~@/assets/home/hoom.png') no-repeat left top; background-size: contain; margin: 10px 0; } .career_type { font-size: 30px; margin: 0; margin-top: 10px; } .career_create { color: #ccc; font-size: 30px; margin: 0; margin-top: 10px; } .course { min-height: 60px; img { object-fit: cover; width: 200px; float: left; margin-right: 10px; } .courseCont { h5 { word-break: break-all; text-overflow: ellipsis; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; overflow: hidden; font-size: 30px; margin: 0; } p { color: #ccc; font-size: 30px; margin: 0; margin-top: 10px; } } } .orderCont { padding: 40px 0; font-size: 28px; span { color: red; } .pj { float: right; } } .codeBtn { text-align: right; margin-top: 15px; } } } //待审核 .showBox { width: 702px; background: #fff; border-radius: 16px; margin: 30px auto; padding: 34px 24px; box-sizing: border-box; .top { display: flex; .pic { width: 124px; height: 124px; flex-shrink: 0; } .basefont { padding: 0 20px; box-sizing: border-box; .titlefont { color: #333333; font-size: 28px; margin-bottom: 18px; } .tcfont { color: #535353; font-size: 24px; } } .priceRight { width: 110px; font-size: 28px; color: #f64c37; line-height: 200px; } } .groupTime { font-size: 28px; line-height: 60px; height: 60px; margin-bottom: 20px; // background-color: #f5f6fa; padding-left: 10px; box-sizing: border-box; .grey { color: #999999; } } .btnBox { display: flex; justify-content: space-between; align-items: center; .wechat_code { display: flex; align-items: center; height: 54px; padding: 0 16px; background: #00c800; border-radius: 8px; font-size: 28px; color: #fff; img { width: 40px; margin-right: 14px; } } } .detailsBox { color: #999999; font-size: 28px; margin-top: 60px; .detailsBoxOne { margin-top: 20px; display: flex; justify-content: space-between; } } } //待评价 .showBoxDPJ { width: 702px; // height: 330px; margin: 30px auto; padding: 34px 24px; box-sizing: border-box; background: #fff; border-radius: 16px; .topLine { height: 60px; display: flex; justify-content: space-between; .topLineL { font-size: 23px; color: #999999; } .topLineR { font-size: 23px; } } .top { display: flex; .pic { width: 124px; height: 124px; flex-shrink: 0; } .basefont { padding: 0 20px; box-sizing: border-box; .titlefont { margin-bottom: 18px; color: #333333; font-weight: bold; font-size: 28px; } .tcfont { color: #535353; font-size: 24px; } } .priceRight { width: 110px; font-size: 28px; color: #f64c37; line-height: 200px; } } .evaluate_css { display: flex; justify-content: flex-end; } .detailsBox { color: #999999; font-size: 28px; .detailsBoxOne { margin-top: 20px; display: flex; justify-content: space-between; } } } // 已评价 .showBoxYPJ { .boxdf { padding: 10px 0; font-size: 5vw; display: flex; .title { font-size: 28px; margin-right: 10px; } .rate { color: #ffcc00; font-size: 30px; margin-left: 10px; } } .evaluation { font-size: 30px; span { font-weight: bold; } } .evaluation_img_box { margin-top: 22px; .evaluation_img { width: 212px; height: 212px; margin-right: 9px; margin-bottom: 9px; &:nth-of-type(3n) { margin-right: 0; } } } .evaluation_time { margin-top: 18px; text-align: right; color: #999999; font-size: 28px; } } .pintuan_about { width: 592px; box-sizing: border-box; padding: 0 50px; .about_img { width: 112px; margin: 0 auto; margin-top: 30px; display: block; } .about_title { font-size: 34px; font-weight: bold; text-align: center; } .about_content { font-size: 30px; margin-top: 20px; } .about_know { font-size: 32px; text-align: center; color: #3385ff; margin-top: 60px; margin-bottom: 44px; } } } .codeCss { width: 700px; height: 850px; position: relative; .showBox { width: 702px; // height: 500px; // background-color: aquamarine; margin: 30px auto; padding: 34px 24px; box-sizing: border-box; .top { display: flex; .pic { width: 124px; height: 124px; flex-shrink: 0; } .basefont { padding: 0 20px; box-sizing: border-box; .titlefont { color: #333333; font-size: 28px; margin-bottom: 18px; } .tcfont { color: #535353; font-size: 24px; } } .priceRight { width: 110px; font-size: 28px; color: #f64c37; line-height: 200px; } } .groupTime { font-size: 28px; line-height: 60px; height: 60px; margin-bottom: 20px; background-color: #f5f6fa; padding-left: 10px; box-sizing: border-box; .grey { color: #999999; } } .qrcodeBox { width: 100%; height: 430px; #qrcode { transform: translate(25%, 10%); // margin: auto; } .imgBox { width: 370px; height: 370px; margin: 30px auto 0; // transform: translate(25%, 10%); } } .numShow { width: 100%; font-size: 28px; text-align: center; color: #999999; } .fontBottom { width: 100%; font-weight: bold; font-size: 28px; text-align: center; } } } .preview_img { width: 100vw; } </style>