浏览代码

修改协议和缴费

lex-xin 5 年之前
父节点
当前提交
b8ba8194ca

文件差异内容过多而无法显示
+ 0 - 0
dist/css/app.0054f4b4.css


文件差异内容过多而无法显示
+ 0 - 0
dist/css/app.61db5dc4.css


+ 0 - 0
dist/css/chunk-73057ef4.ff7e01af.css → dist/css/chunk-3c8cb0e0.ff7e01af.css


文件差异内容过多而无法显示
+ 0 - 0
dist/css/chunk-404d3b19.aec25e19.css


+ 0 - 1
dist/css/chunk-69bfbae5.18b9b9f5.css

@@ -1 +0,0 @@
-header[data-v-9deca9b2]{height:.4rem;line-height:.4rem;color:#000;font-size:.17rem;background:#fff;-webkit-box-shadow:0 1px 8px 0 rgba(0,0,0,.07);box-shadow:0 1px 8px 0 rgba(0,0,0,.07);text-align:center}header .back[data-v-9deca9b2]{width:.2rem;height:.2rem;position:absolute;left:.12rem;top:.1rem}.container[data-v-9deca9b2]{padding:.22rem .2rem .8rem;font-size:.14rem}.container h1[data-v-9deca9b2]{font-size:.16rem;text-align:center}.container h2[data-v-9deca9b2]{font-size:.14rem;font-weight:700;padding-top:.15rem}.container .signature[data-v-9deca9b2]{display:-webkit-box;display:-ms-flexbox;display:flex;padding-top:.5rem}.container .signature span[data-v-9deca9b2]{-webkit-box-flex:1;-ms-flex:1;flex:1;position:relative}.container .signature .cachet[data-v-9deca9b2]{position:absolute;top:-.6rem;left:0;width:1.5rem;height:1.5rem}

文件差异内容过多而无法显示
+ 0 - 0
dist/css/chunk-95573550.4798730a.css


+ 0 - 0
dist/css/chunk-59c4b41e.610c3471.css → dist/css/chunk-fef4dc7e.610c3471.css


二进制
dist/favicon.ico


文件差异内容过多而无法显示
+ 0 - 0
dist/index.html


文件差异内容过多而无法显示
+ 0 - 0
dist/js/app.13e327b6.js


文件差异内容过多而无法显示
+ 0 - 0
dist/js/app.13e327b6.js.map


文件差异内容过多而无法显示
+ 0 - 0
dist/js/app.b6326562.js


文件差异内容过多而无法显示
+ 0 - 0
dist/js/app.b6326562.js.map


文件差异内容过多而无法显示
+ 0 - 0
dist/js/chunk-3c8cb0e0.f49fbeb4.js


文件差异内容过多而无法显示
+ 0 - 0
dist/js/chunk-3c8cb0e0.f49fbeb4.js.map


文件差异内容过多而无法显示
+ 0 - 0
dist/js/chunk-404d3b19.a091e4eb.js


文件差异内容过多而无法显示
+ 0 - 0
dist/js/chunk-404d3b19.a091e4eb.js.map


文件差异内容过多而无法显示
+ 0 - 0
dist/js/chunk-59c4b41e.d2facc86.js.map


文件差异内容过多而无法显示
+ 0 - 0
dist/js/chunk-69bfbae5.e7741bde.js


文件差异内容过多而无法显示
+ 0 - 0
dist/js/chunk-69bfbae5.e7741bde.js.map


文件差异内容过多而无法显示
+ 0 - 0
dist/js/chunk-95573550.55c1c7cc.js


文件差异内容过多而无法显示
+ 0 - 0
dist/js/chunk-95573550.55c1c7cc.js.map


文件差异内容过多而无法显示
+ 0 - 0
dist/js/chunk-fef4dc7e.0ca31f34.js


文件差异内容过多而无法显示
+ 0 - 0
dist/js/chunk-fef4dc7e.0ca31f34.js.map


文件差异内容过多而无法显示
+ 0 - 0
dist/js/chunk-vendors.182a6dbf.js


文件差异内容过多而无法显示
+ 0 - 0
dist/js/chunk-vendors.182a6dbf.js.map


文件差异内容过多而无法显示
+ 0 - 0
dist/js/chunk-vendors.e19120bc.js


文件差异内容过多而无法显示
+ 0 - 0
dist/js/chunk-vendors.e19120bc.js.map


二进制
public/favicon.ico


+ 41 - 22
src/views/Home.vue

@@ -68,7 +68,7 @@
             </div>
 
             <div class="options" v-if="(result.payMethod == 25 && result.isCopperPipe == 0) || result.payMethod == 26"> 
-                <div v-for="con in instrument.config" :key="con.name" class="oc" @click="instrumentF2('default')">
+                <div v-for="con in instrument.config" :key="con.name" class="oc" @click="instrumentF2('default', con)">
                     <div class="option" v-if="con.default">
                         <div class="o_"><i class="check_default" :class="[ con.checked ? 'check_active' : '' ]"></i></div>
                         <div class="o_bd">{{ instrument.name }}-<span class="c">{{ con.name }} </span>
@@ -82,7 +82,7 @@
                         </span>
                     </div>
 
-                    <span class="protocol" @click="protocol"  v-if="con.default">《乐器借用协议》</span> 
+                    <!-- <span class="protocol" @click="protocol"  v-if="con.default">《乐器借用协议》</span>  -->
 
                     <div class="configuration" v-if="con.default">
                         <div class="config">
@@ -94,7 +94,7 @@
                     </div>
                 </div>
 
-                <div v-for="con in instrument.config" :key="con.marketPrice" @click="instrumentF2('self')">
+                <div v-for="con in instrument.config" :key="con.marketPrice" @click="instrumentF2('self', con)">
                     <div class="option" v-if="con.marketPrice <= 0">
                         <div class="o_"><i class="check_default" :class="[ con.checked ? 'check_active' : '' ]"></i></div>
                         <div class="o_bd">{{ con.name }}
@@ -134,16 +134,6 @@
             </div>
         </div>
 
-        <!-- <form role="form" method="post" target="_bank" :action="form.host" id="onSubmit">
-            <input type="hidden" name="apiContent" v-model="form.apiContent" >
-            <input type="hidden" name="merNo" v-model="form.merNo" >
-            <input type="hidden" name="notifyUrl" v-model="form.notifyUrl" >
-            <input type="hidden" name="sign" v-model="form.sign" >
-            <input type="hidden" name="signType" v-model="form.signType" >
-            <input type="hidden" name="timestamp" v-model="form.timestamp" >
-            <input type="hidden" name="version" v-model="form.version" >
-        </form> -->
-
          <div class="buy">
              <div class="price">
                  <p class="oldprice">
@@ -157,17 +147,25 @@
              </div>
              <a @click="buy">购买</a>
         </div>
+
+        <van-popup id="protocolPopup" v-model="popupStatus" position="bottom">
+            <protocol :proto="protocolData" @popupClose="onPopupClose"></protocol>
+        </van-popup>
     </div>
 </template>
 
 <script>
-import { home } from '../mockjs/payment'
+// import { home } from '../mockjs/payment'
 import {instruments, baseInfo } from '../assets/front_instruments_config'
 import qs from 'qs'
+import Protocol from './protocol'
 export default {
     name: 'home',
+    components: { Protocol },
     data() {
         return {
+            popupStatus: false, // 协议弹窗样式
+            protocolData: {}, // 协议参数
             result: {}, // 返回结果
             instrument: {}, // 乐器类型
             baseInfo: {}, // 其它类
@@ -216,6 +214,12 @@ export default {
                 course_id: r.course_id_, // 课程组
             }
             this.instrument = instruments[this.cnToEn(this.result.voicyPart)]
+            if(r.fee_type_ == 25 || r.fee_type_ == 26) {
+                this.instrument.config.forEach(el => {
+                    el.checked = false
+                })
+            }
+
             // 初始化计算金额
             this.calcPrice()
         })
@@ -237,7 +241,12 @@ export default {
             // 重新计算金额
             this.calcPrice()
         },
-        instrumentF2(type) {
+        instrumentF2(type, con) {
+            // 1.5 3.0 才会显示协议
+            if((this.result.payMethod == 25 || this.result.payMethod == 26) && !con.checked && con.name != '自备') {
+                this.protocol()
+            }
+            
             // 专门针对25 26 收费类型写的方法
             for(let i = 0; i < this.instrument.config.length; i++) {
                 this.instrument.config[i].checked = false
@@ -285,8 +294,6 @@ export default {
         onSubmit() {
             // submit 提交
             let f = this.form
-            // console.log(this)
-            // debugger
             document.querySelector('#onSubmit').action = f.host
             document.querySelector('#apiContent').value = f.apiContent
             document.querySelector('#merNo').value = f.merNo
@@ -296,7 +303,6 @@ export default {
             document.querySelector('#timestamp').value = f.timestamp
             document.querySelector('#version').value = f.version
             document.querySelector('#onSubmit').submit()
-            // window.location.href = `${f.host}?apiContent=${f.apiContent}&merNo=${f.merNo}&notifyUrl=${f.notifyUrl}&sign=${f.sign}&singType=${f.singType}&timestamp=${f.timestamp}&version=${f.version}`
         },
         protocol() {
             // 协议
@@ -319,10 +325,11 @@ export default {
                     protocol.marketPrice = c[i].marketPrice
                 }
             }
-            
-            this.$router.push({ path: 'protocol', query: {
-                protocol: JSON.stringify(protocol)
-            }})
+            this.protocolData = protocol
+            this.popupStatus = true
+            // this.$router.push({ path: 'protocol', query: {
+            //     protocol: JSON.stringify(protocol)
+            // }})
         },
         cnToEn(type) {
             let arr = {
@@ -423,6 +430,10 @@ export default {
                 auxiliarie: auxiliarie,
                 instrumentIndex: instrumentIndex
             }
+        },
+        onPopupClose(status) {
+            document.querySelector('#protocolPopup').scroll(0, 0)
+            this.popupStatus = false
         }
     }
 }
@@ -456,6 +467,14 @@ export default {
             line-height: .28rem;
             font-weight: bold;
             padding-bottom: .05rem;
+            &::before {
+                content: ' ';
+                width: .04rem;
+                height: 0.15rem;
+                background: #14928a;
+                display: inline-block;
+                margin-right: .07rem;
+            }
         }
         .indate {
             font-size: .12rem;

+ 258 - 106
src/views/payment.vue

@@ -4,79 +4,63 @@
 
         <div class="section">
             <h2 class="title line_bottom">课程</h2>
-            <div v-for="s in mainSubject" :key="s.courseId">
-                <p class="indate line_bottom" v-if="s.chargeMode >= 26"><span>现价:¥580</span></p>
-                <div class="options"  v-if="s.chargeMode < 26" key="yuetuan">
-                    <div class="option">
-                        <div class="0_hd"><i class="check_default check_active"></i></div>
-                        <div class="o_bd">乐团课</div>
-                        <span class="o_ft">
-                            <del>原价:¥23520</del> 现价:¥{{ s.buyCount * s.price }}
-                        </span>
-                    </div>
-                </div>
-
-                <div class="options"  v-else key="yuetuan">
-                    <div class="option">
-                        <div class="0_hd"><i class="check_default check_active"></i></div>
-                        <div class="o_bd">乐团声部训练</div>
-                    </div>
-                    <div class="option">
-                        <div class="0_hd"><i class="check_default check_active"></i></div>
-                        <div class="o_bd">乐团合奏训练</div>
-                    </div>
-                    <div class="option">
-                        <div class="0_hd"><i class="check_default check_active"></i></div>
-                        <div class="o_bd">基础技能训练</div>
-                    </div>
-                    <div class="option">
-                        <div class="0_hd"><i class="check_default check_active"></i></div>
-                        <div class="o_bd">假期集中训练</div>
+            <div class="options">
+                <div v-for="s in classInfo" :key="s.courseId">
+                    <div class="item" v-if="s.classType == 2">
+                        <div class="option" @click="onSelect(s)">
+                            <div class="0_hd"><i class="check_default" :class="[s.status ? 'check_active' : '']"></i></div>
+                            <div class="o_bd">乐团课</div>
+                            <span class="o_ft">价格:¥{{ s.buyCount * s.price }}</span>
+                        </div>
+                        <p class="timer">开课周期:{{ s.startCycel }}</p>
+                        <!-- <input class="inputAmount" type="number" @keyup="calcAmount" v-model="s.inputNumber" pattern="[0-9]" placeholder="输入金额"> -->
                     </div>
                 </div>
-
-                <div class="coutInfo n" v-if="s.chargeMode >= 26">
-                    <i class="trumpet_icon"></i>年度安排十个月训练,共计168课时,120元/课时,原价20160元,现仅支付560元/月(约合34.5元/课时)
-                </div>
             </div>
         </div>
 
-
-        <div class="section" v-for="c in classInfo" :key="c.courseId">
-            <div class="options">
-                <div class="option">
-                    <div class="0_hd"><i class="check_default check_active"></i></div>
-                    <div class="o_bd">提高课({{ c.buyCount }}次)</div>
-                    <span class="o_ft">
-                        <del>原价:¥23520</del> 现价:¥{{ c.buyCount * c.price }}
-                    </span>
+        <div v-for="c in classInfo" :key="c.courseId">
+            <div class="section" v-if="c.classType != 2">
+                <div class="options">
+                    <div class="option" @click="onSelect(c)">
+                        <div class="0_hd"><i class="check_default" :class="[c.status ? 'check_active' : '']"></i></div>
+                        <div class="o_bd">提高课</div>
+                        <span class="o_ft">
+                            现价:¥{{ c.smallAmount }}
+                        </span>
+                    </div>
                 </div>
-            </div>
 
-            <div class="classInfo">
-                <div class="class">
-                    <p>课程名称:{{ c.className }} </p>
-                    <p>学习科目:{{ c.subNames }}</p>
-                    <p>每课时长:{{ c.duration }}分钟  </p>
+                <div class="classInfo">
+                    <div class="class">
+                        <p>学习科目:{{ c.subNames }}</p>
+                        <p>指导老师:{{ c.teaNames }}</p>
+                    </div>
+                    <div class="class">
+                        <p>开课周期:{{ c.startCycel }}</p>
+                        <!-- <p>计划开课周期:{{ c.planCycle }}</p> -->
+                        <p>每课时长:{{ c.duration }}分钟</p>
+                    </div>
                 </div>
-                <div class="class">
-
-                    <p>指导老师:{{ c.teaNames }}</p>
-                    <p>计划开课时间:{{ c.planBegin }}</p>
-                    <p>计划开课周期:{{ c.planCycle }}</p>
+                <div class="classTime">
+                    <p class="title">购买次数:</p>
+                    <div class="ct_button_group">
+                        <span @click="fixationTimer(t, c)" v-for="t in classTimer" :key="t.timer" :class="[t.status?'active':'']">{{ t.timer }}次</span>
+                    </div>
+                    <input type="number" placeholder="输入次数" @keyup="calcAmount(c)" v-model="c.inputNumber" class="inputTime" pattern="[0-9]">
                 </div>
             </div>
         </div>
 
         <div class="buy">
-             <div class="price">
-                 <p class="oldprice">
+            <div class="price">
+                 <!-- <p class="oldprice">
                      <del class="text">原价</del>
-                     <del>{{ orderInfo.marketPrice }}</del>
-                 </p>
+                     <del>{{ orderInfo.marketPrice }}</del>
+                 </p> -->
                  <p class="now_price">
                      <span class="text">仅需支付</span>
-                     <span>{{ orderInfo.referencePrice }}</span>
+                     <span>{{ orderInfo.referencePrice }}</span>
                  </p>
              </div>
              <a @click="buy">购买</a>
@@ -86,47 +70,188 @@
 </template>
 
 <script>
-import { payment } from '../mockjs/payment.js'
+// import { payment } from '../mockjs/payment.js'
+import { Dialog } from 'vant'
 import qs from 'qs'
 export default {
     name: 'payment',
+    components: { Dialog },
     data() {
         return {
             type: true,
-            classInfo: [], // 小课信息
-            mainSubject: [], // 主课程
+            classInfo: [],
+            // mainSubject: [], // 主课程
             // 金额列表,金额计算
             orderInfo: {
                 marketPrice: 0, // 原价总金额
                 referencePrice: 0, // 现价总金额
             }, // 信息列表
+            classTimer: [{
+                status: true,
+                timer: 10
+            },{
+                status: false,
+                timer: 20
+            },{
+                status: false,
+                timer: 40
+            }]
         }
     },
     mounted() {
-        // let result = payment
-
         let userId = this.$route.query.userId
         axios.post('/user/queryUserCourse', qs.stringify({ userId: userId })).then((res) => {
-            console.log(res)
             let data = res.data.data
             if(!res.data.data) {
                 throw '数据为空'
             }
+            let subjectStatus = false // 过滤数据 乐团课只需要显示一条数据
             data.forEach(el => {
-                this.orderInfo.referencePrice += el.buyCount * el.price
-                if(el.classType == 2) {
-                    this.mainSubject.push(el)
-                    this.orderInfo.marketPrice += 23520
-                } else {
+                el.status = false // 状态
+                el.inputNumber = null // 输入的内容
+                el.smallAmount = 0 // 小课金额
+                // 开课周期
+                el.startCycel = this.weekSelect(5) + ' ' + el.planBegin.split(' ')[1]
+
+                // 课程
+                if(!subjectStatus && el.classType == 2) {
                     this.classInfo.push(el)
-                    this.orderInfo.marketPrice += 0
+                    subjectStatus = true
                 }
+                // 小课
+                if(el.classType == 1) {
+                    this.classInfo.push(el)
+                }
+                
             })
+            this.calcAmount() // 计算金额
         })
     },
     methods: {
         buy() {
-            alert('请不要购买了')
+            let [record, timer] = [0, 0] // 购买课次数据
+            let params = {
+                userId: this.$route.query.userId
+            }
+            this.classTimer.forEach(ct => {
+                if(ct.status) {
+                    timer = ct.timer
+                }
+            })
+            let cour = {}
+            this.classInfo.forEach(c => {
+                if(c.classType == 2 && c.status) {
+                   cour = {
+                        courseId: c.courseId,
+                        buyCount: c.buyCount,
+                        price: c.price
+                    }
+                }
+                if(c.classType == 1 && c.status) {
+                    cour = {
+                        courseId: c.courseId,
+                        buyCount: c.buyCount,
+                        price: c.price
+                    }
+                    if(timer) {
+                        cour.buyCount = timer
+                    }
+                }
+                if(c.status) {
+                    record++
+                }
+            })
+            params.courses = JSON.stringify(cour)
+            if(!record) {
+                Dialog.alert({
+                    title: '提示',
+                    message: '请选择续费课程'
+                })
+                return false
+            }
+
+            axios.post('/yqpay/renewalsPay', qs.stringify(params)).then(res => {
+                let result = res.data
+                if(result.status) {
+                    document.querySelector('#onSubmit').action = result.data.host
+                    document.querySelector('#apiContent').value = result.data.apiContent
+                    document.querySelector('#merNo').value = result.data.merNo
+                    document.querySelector('#notifyUrl').value = result.data.notifyUrl
+                    document.querySelector('#sign').value = result.data.sign
+                    document.querySelector('#signType').value = result.data.signType
+                    document.querySelector('#timestamp').value = result.data.timestamp
+                    document.querySelector('#version').value = result.data.version
+                    document.querySelector('#onSubmit').submit()
+                } else {
+                    Dialog.alert({
+                        title: '提示',
+                        message: result.msg
+                    })
+                }
+            })
+        },
+        onSelect(item) {
+            this.classInfo.forEach(e => {
+                e.status = false
+            })
+            item.status = true
+            this.calcAmount()
+        },
+        // 固定次数计算
+        fixationTimer(t, item) {
+            item.inputNumber = null
+            this.classTimer.forEach(e => {
+                e.status = false
+            })
+            t.status = true
+            let amount = t.timer * item.price
+            item.smallAmount = amount
+            // 如果当前课程选中则需要重新计算金额
+            if(item.status) {
+                this.orderInfo.referencePrice = amount
+            }
+        },
+        // 计算总金额
+        calcAmount(item) {
+            let timer, c = this.classInfo
+            this.classTimer.forEach(ct => {
+                // 判断是否从 Input 里面输入的
+                if(item && item.inputNumber) {
+                   ct.status = false 
+                }
+                if(ct.status) {
+                    timer = ct.timer
+                }
+            })
+            c.forEach(e => {
+                // 小课现价
+                let amount = timer ? (timer * e.price) : e.inputNumber * e.price
+                e.smallAmount = amount
+
+                if(e.status) {
+                    if(e.classType == 2) {
+                        this.orderInfo.referencePrice = e.price * e.buyCount
+                    } else {
+                        // 判断是否有选中固定次数
+                        this.orderInfo.referencePrice = amount
+                    }
+                }
+            })
+        },
+        weekSelect(num) {
+            // 计算是周几
+            let res = num.toString(2).split('').reverse() // 转换成二进制 并分割成数组 反转
+            let strArr = []
+            parseInt(res[0]) ? strArr.push('周一') : ''
+            parseInt(res[1]) ? strArr.push('周二') : ''
+            parseInt(res[2]) ? strArr.push('周三') : ''
+            parseInt(res[3]) ? strArr.push('周四') : ''
+            parseInt(res[4]) ? strArr.push('周五') : ''
+            parseInt(res[5]) ? strArr.push('周六') : ''
+            parseInt(res[6]) ? strArr.push('周七') : ''
+
+            strArr = strArr.join('和')
+            return strArr
         }
     }
 }
@@ -158,47 +283,19 @@ header {
         font-size: .2rem;
         line-height: .28rem;
         font-weight: bold;
-    }
-    .indate {
-        font-size: .12rem;
-        padding: .05rem 0;
-        display: flex;
-        justify-content: space-between;
-        span {
-            color: #FA101D;
-        }
-    }
-
-    .coutInfo {
-        font-size: .12rem;
-        color: #ACACAC;
-        border-top: 1px solid #ededed;
-        padding: .12rem 0 0;
-        margin-top: .1rem;
-
-        &.n {
-            font-size: .12rem;
-            color: #F85043;
-            text-align: left;
-            border-top: 1px solid #ededed;
-            padding: .12rem 0 0 .15rem;
-            margin-top: .1rem;
-            position: relative;
-            .trumpet_icon {
-                width: .14rem;
-                height: .12rem;
-                background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAYCAYAAADpnJ2CAAAAAXNSR0IArs4c6QAAAyZJREFUSA21Vk1IVFEUPufOezNilJXQD2UQRERamWhBaUWOSS3U0SawdgZai2gR0aoQXPSDm3JRCbm0xZBjbkQZS0KDjKywDCIIkoKKEIkm35uZezr32X0jQ+bY2IU359xzzj3fPXe++4PwDy0W8JdKgjYCWOkzzWIM9X5NN42RbqCKoxOHl1nR2FVJ1MRgqGzxhCxg8VDp6TSRTpCKsQL+aitqjwPRKQ3mjCVygFPz2MGKQqvG/zxW56+c7ZsXkIJH1liB8hARdQPButmD59WR8mUCuqy6ynwd686OmpsN++XjLUiYrZ0g5E6SdJmAVri2FMWDnnIz3P8gxex07Rp/owS6jQij3h1lu7G5Oe5UOF1bcc5+MTRFlBiTEH/iflLe+htYKsh0oHwzBcpztd3bHWlHxPtEUMTFHFV2YdceOglStnLiZGV6xEIlwbBF+JQaqpa6Qw246OiUOKOkICnPus4MFYGik7m80Z6MXtCpfKHIGBN6kIm2x66tLBJM7q3amak0DbqEgD84eQNzwiUkE+Wmk1vGjwtmnydTID0eQ5EpLoDZTGvjr4b2absXzGdKlwC73FloZ6aSSTKocjC7kyu3Ku8D2xOAuOk/ANKEAwhivZKqYXt7jFdyAnl7LTrgDMTcv4sOyCddnlOVnKlU6dTYaPKS5hHg5IIO77nnnfTw0h1QPTTgjWv9MrGB97ki5zvh/JmuJzOFgv4cPm9rGO6TUVD6SGezhV2sdF7OEcEB49qRqbRi0MKVLEEBHXxu8i6YabzMpx1NGJ18OIjr2pG5pHqu7r13efY1ncsK+rfxvtzPW2LY29U3Krxd/Xe4c55PiKgO+meJsNeHVIIdPd/dHHFoUToitSnpsDQrHGn1FpbmoMcoEIJPA/0BNvFEJlVgOi0rPPAWwwPfdKy6nphE1c71tL3snrK796EOSpVUX7Xano628cBgqk/157oP1Y1PcTkChDEwzRJfqNfhyrz7EO/2fPaFI8dAiGqe3sc/gc5pI3wtPFCrwVTcvBXOTuY8on7GrqBMvms8wjhodvWl/YhaEKAG//1MvMHXUO5Cn4m/ACXBMJBwQaFpAAAAAElFTkSuQmCC) no-repeat center;
-                background-size: contain;
-                position: absolute;
-                left: 0;
-                top: .14rem;
-            }
+        &::before {
+            content: ' ';
+            width: .04rem;
+            height: 0.15rem;
+            background: #14928a;
+            display: inline-block;
+            margin-right: .07rem;
         }
     }
 }
 
 .options {
-    padding-top: .08rem;
+    // padding-top: .08rem;
     .option {
         line-height: .26rem;
         font-size: .15rem;
@@ -234,6 +331,28 @@ header {
         }
     }
 }
+.item {
+    position: relative;
+    border-bottom: 1px solid #ededed;
+    padding: .2rem 0;
+    &:last-child {
+        border-bottom: 0;
+    }
+    .timer {
+        font-size: .14rem;
+        color: #ACACAC;
+    }
+    .inputAmount {
+        position: absolute;
+        top: .2rem;
+        right: 0;
+        width: 1.08rem;
+        height: .4rem;
+        border-radius: 5px;
+        border: 1px solid rgba(238,238,238,1);
+        padding-left: .08rem;
+    }
+}
 
 .classInfo {
     color: #ACACAC;
@@ -245,6 +364,39 @@ header {
     padding-top: .08rem;
     line-height: .22rem;
 }
+.classTime {
+    color: #ACACAC;
+    font-size: .12rem;
+    .ct_button_group {
+        padding-top: .08rem;
+        padding-bottom: .15rem;
+        display: flex;
+        justify-content: space-between;
+        span {
+            width: 1rem;
+            line-height: .36rem;
+            text-align: center;
+            background:rgba(255,255,255,1);
+            border-radius:5px;
+            font-size: .14rem;
+            color: #444444;
+            border:1px solid rgba(226,224,224,1);
+            &.active {
+                background: #14928A;
+                color: #fff;
+            }
+        }
+    }
+    .inputTime {
+        width: calc(100% - .08rem);
+        height: .4rem;
+        border-radius:5px;
+        border:1px solid rgba(238,238,238,1);
+        padding-left: .08rem;
+        font-size: .14rem;
+        color: #444;
+    }
+}
 
 .buy {
     position: fixed;

+ 46 - 23
src/views/protocol.vue

@@ -1,25 +1,27 @@
 <template>
     <div class="protocol">
-        <header> <svg t="1565680265421" class="icon back" @click="goBack" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1100" width="200" height="200"><path d="M672 928c-8 0-16-3.2-22.4-9.6l-384-384c-12.8-12.8-12.8-32 0-44.8l384-384c12.8-12.8 32-12.8 44.8 0 12.8 12.8 12.8 32 0 44.8L332.8 512l361.6 361.6c12.8 12.8 12.8 32 0 44.8-6.4 6.4-14.4 9.6-22.4 9.6z" p-id="1101"></path></svg>领用协议</header>
+        <!-- <header> 
+            <svg t="1565680265421" class="icon back" @click="goBack" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1100" width="200" height="200"><path d="M672 928c-8 0-16-3.2-22.4-9.6l-384-384c-12.8-12.8-12.8-32 0-44.8l384-384c12.8-12.8 32-12.8 44.8 0 12.8 12.8 12.8 32 0 44.8L332.8 512l361.6 361.6c12.8 12.8 12.8 32 0 44.8-6.4 6.4-14.4 9.6-22.4 9.6z" p-id="1101"></path></svg>
+            领用协议</header> -->
  
         <div class="container">
             <h1>《乐器借用协议》</h1>
 
             甲方:    <br />                                 
-            乙方(家长)姓名 {{ protocol.patriarchName }} <br /> 电话:{{ protocol.patriarchPhone }}<br/>
-            学生姓名:{{ protocol.stuName }} <br /> 所在班级:{{ protocol.grade }} <br />所在声部:{{ protocol.subName }}<br/> 
-            为了促进学校乐团健康、持续发展,让更多的学生在校园拥有良好的器乐学习机会,甲方基于公益普惠的原则,决定提供价值{{ protocol.marketPrice }}元的KEY品牌全新乐器供乙方在学校乐团期间免费使用。现根据《中华人民共和国经济合同法》,为明确甲乙双方权利义务,经协商一致,就乙方领用乐器事宜达成如下协议:
+            乙方(家长)姓名 {{ proto.patriarchName }} <br /> 电话:{{ proto.patriarchPhone }}<br/>
+            学生姓名:{{ proto.stuName }} <br /> 所在班级:{{ proto.grade }} <br />所在声部:{{ proto.subName }}<br/> 
+            为了促进学校乐团健康、持续发展,让更多的学生在校园拥有良好的器乐学习机会,甲方基于公益普惠的原则,决定提供价值{{ proto.marketPrice }}元的KEY品牌全新乐器供乙方在学校乐团期间免费使用。现根据《中华人民共和国经济合同法》,为明确甲乙双方权利义务,经协商一致,就乙方领用乐器事宜达成如下协议:
             <h2>一、甲方权责:</h2>
             1、乙方所领用乐器为甲方资产,乐器所有权归属甲方所有;<br />
             2、甲方所提供乐器为全新的KEY品牌乐器。在乙方签订领用协议、交纳乐器使用押金后,即交付供乙方在学校乐团期间免费使用;<br />
             3、乙方归还乐器时,双方当面验收,经甲方维修技师检验确认乐器无人为损坏、可正常使用后,甲方在七个工作日内全额退还押金;<br />
             4、如乙方已购买甲方乐器保养服务,甲方需在领用期间协助乙方处理乐器维修和保养问题。<br />
             <h2>二、乙方权责:</h2>
-            1、乙方在签订领用协议、交纳乐器使用押金¥{{ protocol.isCopperPipe ? 800 : 0 }}元(大写人民币捌佰元)后,享有所领用乐器在学校乐团期间的免费使用权。乙方不得将该乐器转租、出售、典当、抵押,不得将乐器交于非专业人士使用。上述乐器领用政策,每位团员仅可享受一次,退团后再次加入将不享受。<br />
+            1、乙方在签订领用协议、交纳乐器使用押金¥{{ proto.isCopperPipe ? 800 : 0 }}元(大写人民币捌佰元)后,享有所领用乐器在学校乐团期间的免费使用权。乙方不得将该乐器转租、出售、典当、抵押,不得将乐器交于非专业人士使用。上述乐器领用政策,每位团员仅可享受一次,退团后再次加入将不享受。<br />
             2、乐器日常维护由乙方自行完成,每次练习完毕后需按老师要求对乐器进行擦拭并装箱保管。如因人为原因(主要指磕碰摔)造成乐器损坏,乙方需自行承担维修费用。如导致乐器不能正常使用(正常使用磨损除外)或乐器遗失,乙方须按乐器团购价格进行赔付。<br />
             3、当乙方决定不再继续乐团学习时,应及时将乐器归还甲方。如果乙方中断乐团学习2个月内,仍未办理乐器归还手续,则视为乙方违约,所交押金将不予退还,同时乙方须按乐器团购价格进行赔付。<br />
             <h2>三、乐器标准:</h2>
-            名称:{{ protocol.voicyPart }}       品牌:key      型号:{{ protocol.name }}       团购价格:{{ protocol.referencePrice }}     
+            名称:{{ proto.voicyPart }}       品牌:key      型号:{{ proto.name }}       团购价格:{{ proto.referencePrice }}     
             <h2>四、违约责任  </h2>
             当事人一方不履行合同义务或者履行合同义务不符合约定的,违约方应赔偿守约方所有实际损失,承担继续履行、采取补救措施或者赔偿损失等违约责任;<br />
             <h2>五、其他</h2>
@@ -28,11 +30,12 @@
             3、双方确认,本协议的电子版本与纸质版本具有同等法律效力。发生争议时,电子合同打印件将作为证据提交,各方对其真实性、合法性、关联性无异议。各方如以网络方式签订本协议,则各方以点击“确认”等相关按钮或以电子签名的方式作为对合同内容的同意及确认。<br />
             4、甲方因履行本协议而相互发出或者提供的所有通知、文件、资料,均以本协议中所列明的电话、APP推送消息送达,乙方如果变更电话,应当自变更前3日内书面通知到对方且获得甲方书面认可方可变更。
 
-
             <div class="signature">
                 <span>出借方(甲方)(签章) <img class="cachet" src="../assets/cachet.png" alt=""> </span>
                 <span>借用方(乙方):</span>
             </div>
+
+            <div class="btnback" @click="goBack">我同意</div>
         </div>
     </div>
 </template>
@@ -40,30 +43,36 @@
 <script>
 export default {
     name: 'protocol',
+    props: ['proto'],
     data() {
         return {
-            protocol: {
-                patriarchName: '',
-                patriarchPhone: '',
-                stuName: '',
-                grade: '',
-                subName: '',
-                voicyPart: '',
-                payMethod: '', // 缴费类型
-                isCopperPipe: '', // 是否为铜管
-                name: '',
-                referencePrice: '',
-                marketPrice: ''
-            }
+            // protocol: {
+            //     patriarchName: '',
+            //     patriarchPhone: '',
+            //     stuName: '',
+            //     grade: '',
+            //     subName: '',
+            //     voicyPart: '',
+            //     payMethod: '', // 缴费类型
+            //     isCopperPipe: '', // 是否为铜管
+            //     name: '',
+            //     referencePrice: '',
+            //     marketPrice: ''
+            // }
         }
     },
     mounted() {
-        this.protocol = JSON.parse(this.$route.query.protocol)
+        console.log(true)
+        // this.protocol = JSON.parse(this.$route.query.protocol)
+        // this.protocol = proto
+        window.scroll(0,0)
     },
     methods: {
         goBack() {
             // this.$router.push({ path: '/home' })
-            history.go(-1)
+            // history.go(-1)
+            // console.log(true)
+            this.$emit('popupClose', false)
         }
     }
 }
@@ -88,7 +97,7 @@ export default {
         }
     }
     .container {
-        padding: .22rem .2rem .8rem;
+        padding: .22rem .2rem .3rem;
         font-size: .14rem;
         h1 {
             font-size: .16rem;
@@ -118,4 +127,18 @@ export default {
             }
         }
     }
+
+    .btnback {
+        display: inline-block;
+        font-size: 0.18rem;
+        color: #fff;
+        background: #F1111B;
+        border-radius: 0.04rem;
+        -webkit-box-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.19);
+        box-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.19);
+        padding: 0.08rem 0;
+        margin-top: .8rem;
+        width: 100%;
+        text-align: center;
+    }
 </style>

部分文件因为文件数量过多而无法显示