12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058 |
- <template>
- <div style="background: #F3F4F8;">
- <div class="noticeInfo">
- <h2>注册说明</h2>
- 1、您注册时所选择的乐团声部,即为乐团录取最终确认的声部,请您务必仔细填写;<br />
- 2、为避免因部分已注册家长放弃名额导致乐团声部失衡,系统设定各声部限额放大20%比例开放注册,系统自动按照完全完成注册的先后顺序确认录取名单,因此,超员后有可能出现无法注册的情况,请您理解。如果其他声部仍有名额,在您孩子的身体条件适合该乐器的前提下,我们将优先予以调配。
- </div>
- <div class="section">
- <h2 class="title">{{ courseViewType == 1 ? '服务' : '乐团课程' }}</h2>
- <p style="font-size: 14px; padding: 2px 0; color: #f85043" v-if="serviceValidDate && courseViewType == 1">服务有效期:{{ serviceValidDate }}</p>
- <!-- 所有不可选的课程合集 -->
- <template v-if="courseShowStatus && courseViewType == 1">
- <el-row class="option-row" v-for="(item, index) in courseShowInfo" :class="[!item.isStudentOptional ? 'disabled' : '']" :key="index" @click.native="onCourseChange(item)">
- <el-col :span="16">
- <i class="check_default" :class="[item.isStatus ? 'check_active' : '']"></i>
- <span style="display: flex; align-items: center;">
- <template v-if="item.courseType == 'PROJECT'">{{ chargeTypeName }} </template><template v-else>{{ item.courseType | coursesType }}</template>
- </span>
- <el-icon v-if="item.courseType == 'PROJECT'" class="el-icon-question" @click.native="onQuestions('amr')" />
- </el-col>
- <el-col :span="8">
- <span style="color: #1A1A1A">¥{{ item.courseCurrentPrice | moneyFormat }}</span>
- </el-col>
- </el-row>
- </template>
- <el-row class="title-row" v-if="courseViewType == 0">
- <el-col :span="12">课程类型</el-col>
- <el-col :span="5" :offset="1" style="text-align: right;">原价</el-col>
- <el-col :span="6" style="text-align: right;">现价</el-col>
- </el-row>
- <!-- 可选课程信息集合 -->
- <template v-for="(item, index) in courseInfo">
- <el-row class="option-row" :key="index" @click.native="onCourseChange(item)" v-if="courseViewType == 0">
- <el-col :span="12">
- <i class="check_default" :class="[item.isStatus ? 'check_active' : '', !item.isStudentOptional ? 'disabled' : '']"></i><template v-if="item.courseType == 'PROJECT'">{{ item.name }}</template><template v-else>{{ item.courseType | coursesType }}</template>
- </el-col>
- <el-col :span="6">
- <del style="color: #AAA; font-size: 12px;">¥{{ item.courseOriginalPrice | moneyFormat }}</del>
- </el-col>
- <el-col :span="6">
- <span style="color: #1A1A1A">¥{{ item.courseCurrentPrice | moneyFormat }}</span>
- </el-col>
- </el-row>
- </template>
- </div>
- <div class="section" v-if="courseInfo && courseInfo.length > 0 && isClickStatus && courseViewType == 1">
- <h2 class="title">{{ '乐团课程' }}</h2>
- <el-row class="title-row">
- <el-col :span="12">课程类型</el-col>
- <el-col :span="5" :offset="1" style="text-align: right;">原价</el-col>
- <el-col :span="6" style="text-align: right;">现价</el-col>
- </el-row>
- <!-- 可选课程信息集合 -->
- <template v-for="(item, index) in courseInfo">
- <el-row class="option-row" :key="index" @click.native="onCourseChange(item)" v-if="item.isStudentOptional">
- <el-col :span="12">
- <i class="check_default" :class="[item.isStatus ? 'check_active' : '', !item.isStudentOptional ? 'disabled' : '']"></i><template v-if="item.courseType == 'PROJECT'">{{ item.name }}</template><template v-else>{{ item.courseType | coursesType }}</template>
- </el-col>
- <el-col :span="6">
- <del style="color: #AAA; font-size: .12rem;">¥{{ item.courseOriginalPrice | moneyFormat }}</del>
- </el-col>
- <el-col :span="6">
- <span style="color: #1A1A1A">¥{{ item.courseCurrentPrice | moneyFormat }}</span>
- </el-col>
- </el-row>
- </template>
- </div>
- <div class="section" v-if="instrumentResult.length > 0">
- <h2 class="title">乐器</h2>
- <div v-for="(i, index) in instrumentResultList" :key="index">
- <el-row class="title-row">
- <el-col :span="12">
- <template v-if="i[0]['kitType'] == 'GROUP'">团购乐器</template>
- <template v-if="i[0]['kitType'] == 'LEASE'">乐器租赁</template>
- <template v-if="i[0]['kitType'] == 'FREE'">免费使用</template>
- <template v-if="i[0]['kitType'] == 'owned'">自备乐器</template>
- </el-col>
- <el-col :span="5" :offset="1" style="text-align: right;">
- <template v-if="['GROUP', 'LEASE', 'FREE'].includes(i[0]['kitType'])">原价</template>
- </el-col>
- <el-col :span="5" :offset="1" style="text-align: right;">
- <template v-if="['GROUP', 'FREE'].includes(i[0]['kitType'])">现价</template>
- <template v-if="i[0]['kitType'] == 'LEASE'">租赁押金</template>
- </el-col>
- </el-row>
- <el-row class="option-row" v-for="(con, index) in i" :key="index" @click.native="instrumentF(con)">
- <el-col :span="12">
- <i class="check_default" :class="[ con.checked ? 'check_active' : '' ]"></i>
- <div>
- {{ con.name }}
- <div v-if="con.goodsList" style="font-size: .12rem; color: #aaa">
- {{ con.goodsList[0].specification }}
- </div>
- </div>
- </el-col>
- <el-col :span="6">
- <del style="color: #AAA; font-size: 12px;" v-if="con.kitType != 'owned'">¥{{ con.marketPrice | moneyFormat }}</del>
- </el-col>
- <el-col :span="6">
- <span style="color: #1A1A1A" v-if="(con.kitType == 'LEASE')">¥{{ Number((con.depositFee - con.coupon).toFixed(2)) | moneyFormat }}</span>
- <span style="color: #1A1A1A" v-if="con.kitType == 'FREE'">¥{{ 0 | moneyFormat }}</span>
- <span style="color: #1A1A1A" v-if="con.kitType == 'GROUP'">¥{{ Number((con.price - con.coupon).toFixed(2)) | moneyFormat }}</span>
- </el-col>
- </el-row>
- </div>
- <div v-if="leBaoStatus">
- <el-row class="title-row">
- <el-col :span="12">服务项目</el-col>
- <el-col :span="5" :offset="1" style="text-align: right;">原价</el-col>
- <el-col :span="6" style="text-align: right;">现价</el-col>
- </el-row>
- <el-row class="option-row" @click="onLeBao">
- <el-col :span="12">
- <i class="check_default" :class="[ buyMaintenance ? 'check_active' : '' ]"></i>乐器保养(一年)<el-icon style="padding-left: 0;" name="question" @click.native="onQuestions('instrument')" />
- </el-col>
- <el-col :span="6">
- <del style="color: #AAA; font-size: .12rem;">¥{{ 500 | moneyFormat }}</del>
- </el-col>
- <el-col :span="6">
- <span style="color: #1A1A1A">¥{{ 300 | moneyFormat }}</span>
- </el-col>
- </el-row>
- </div>
- </div>
- <div class="section" v-if="accessOries.length > 0" key="accessOries">
- <h2 class="title">辅件</h2>
- <el-row class="title-row">
- <el-col :span="12">服务项目</el-col>
- <el-col :span="5" :offset="1" style="text-align: right;">原价</el-col>
- <el-col :span="5" :offset="1" style="text-align: right;">现价</el-col>
- </el-row>
- <div v-for="(instr, index) in accessOries" :key="index">
- <el-row class="option-row" @click.native="onAuxiliarie(instr)">
- <el-col :span="12">
- <i class="check_default" :class="[ instr.checked ? 'check_active' : '' ]"></i>{{ instr.name }}
- </el-col>
- <el-col :span="6">
- <del style="color: #AAA; font-size: 12px;">¥{{ instr.goodsList[0] ? instr.goodsList[0].marketPrice : 0 | moneyFormat }}</del>
- </el-col>
- <el-col :span="6">
- <span style="color: #1A1A1A" v-if="instr.price == 0">免费</span>
- <span style="color: #1A1A1A" v-else>¥{{ instr.price | moneyFormat }}</span>
- </el-col>
- </el-row>
- <el-row style="padding-left: 24px;" v-if="instr.childGoodsList">
- <el-col>
- <span v-for="(child, index) in instr.childGoodsList" :key="child.id" style="font-size: 12px; color: #aaaaaa;">{{ child.name }} {{instr.childGoodsList.length - 1 == index ? '' : ','}}</span>
- </el-col>
- </el-row>
- </div>
- <!-- <el-row class="option-row lines">
- <el-col :span="12" class="fontBold">
- 仅需支付
- </el-col>
- <el-col :span="6">
- <del style="color: #f85043; font-size: 12px;">¥{{ orderInfo.accessMarketPrice | moneyFormat }}</del>
- </el-col>
- <el-col :span="6">
- <span class="fontBold" style="color: #f85043;">¥{{ orderInfo.accessPrice | moneyFormat }}</span>
- </el-col>
- </el-row> -->
- </div>
- <!-- 原价现价 -->
- <!-- <div class="section">
- <div class="needprice markerprice">
- <del>原价</del>
- <del>¥{{ orderInfo.marketPrice | moneyFormat }}</del>
- </div>
- <div class="needprice grouopprice">
- <span>仅需支付</span>
- <span>¥{{ orderInfo.amount | moneyFormat }}</span>
- </div>
- </div> -->
- <div class="buy">
- <div class="price">
- <!-- <p class="use_price">
- <img class="logo" src="@/assets/images/mycard.png" alt="">
- <span>¥{{ needPrice | moneyFormat }}</span>
- </p> -->
- <p class="oldprice">
- <del class="text">原价</del>
- <del style=" font-size: 13px;">¥{{ orderInfo.marketPrice | moneyFormat }}</del>
- </p>
- <p class="now_price">
- <span class="text">仅需支付</span>
- <span style="font-weight: bold">¥{{ needPrice | moneyFormat }}</span>
- </p>
- </div>
- <a class="btn-submit">购买</a>
- </div>
- </div>
- </template>
- <script>
- import { permission } from '@/utils/directivePage'
- import { getSubjectGoodsAndInfoPreview, getType } from '@/api/buildTeam'
- import dayjs from 'dayjs'
- const paymentPatternType = {
- 0: '按月',
- 1: '按学期',
- 2: '一次性'
- }
- export default {
- props: ["subjectId", "calenderId"],
- data() {
- const query = this.$route.query
- return {
- musicGroupId: query.id,
- result: {}, // 返回结果
- instrument: {}, // 乐器类型
- baseInfo: {}, // 其它类
- money: 580,
- balance: 0, // 余额
- needPrice: 0, // 还需支付
- payType: false, // 是否余额支付
- orderInfo: {
- marketPrice: 0,
- amount: 0, // 现价总金额
- groupPurchasePrice: 0, // 现价
- goodsGroupIds: null,
- goodsIds: null,
- contractGoodsIds: null, // 选中所有商品ID
- couponPrice: 0, //
- musicClassFee: 0, // 课程现价
- musicMarketClassFee: 0, // 课程原价
- accessPrice: 0, // 辅件现价
- accessMarketPrice: 0, // 辅件原价
- goodsPrice: 0, // 乐器现价
- goodsMarketPrice: 0, // 乐器原价
- }, // 金额列表,金额计算
- courseInfo: null, // 课程信息
- musicGroupSubject: null, // 基本信息
- instrumentResult: [], //乐器
- accessOries: [], // 辅件(打包)
- agreeStatus: true,
- authStatus: false,
- buyList: [], // 信息列表
- ids: [],
- chargeTypeId: null,
- paymentStatus: null,
- paymentPattern: null,
- serviceValidDate: null, // 服务时间
- courseShowStatus: false,
- chargeTypeList: [],
- chargeTypeName: null,
- courseViewType: 0, // 收费模式,0 课程显示,1 AMR系统
- leBaoStatus: false,
- buyMaintenance: false, // 是否开启乐保
- isClickStatus: false
- };
- },
- mounted() {
- this.__init()
- },
- methods: {
- async __init() {
- // 获取数据
- let params = {
- musicGroupId: this.musicGroupId,
- subjectId: this.subjectId,
- calenderId: this.calenderId
- }
- await getType().then(res => {
- let result = res.data
- if(res.code == 200) {
- this.chargeTypeList = result.rows || []
- }
- })
- await getSubjectGoodsAndInfoPreview(params).then(res => {
- let result = res
- if (result.code == 200) {
- let tempResult = result.data
- this.courseViewType = tempResult.musicGroup.courseViewType || 0
- this.paymentPattern = 2
- if(tempResult.musicGroupPaymentCalender) {
- this.paymentPattern = tempResult.musicGroupPaymentCalender.paymentPattern
- this.serviceValidDate = dayjs(tempResult.musicGroupPaymentCalender.paymentValidStartDate).format('YYYY/MM/DD') + '~' + dayjs(tempResult.musicGroupPaymentCalender.paymentValidEndDate).format('YYYY/MM/DD')
- }
- let tempInfo = tempResult.musicGroupPaymentCalender? tempResult.musicGroupPaymentCalender.musicGroupPaymentCalenderCourseSettingsList : null
- // 判断是否有课程
- if (tempInfo && tempInfo.length > 0) {
- let tempCourse = {
- courseCurrentPrice: 0,
- courseOriginalPrice: 0,
- courseType: null,
- name: '器乐练习系统'
- }
- tempInfo.forEach(info => {
- if(!info.isStudentOptional) {
- this.courseShowStatus = true
- tempCourse = {
- courseCurrentPrice: (info.courseCurrentPrice + tempCourse.courseCurrentPrice),
- courseOriginalPrice: (info.courseCurrentPrice + tempCourse.courseCurrentPrice),
- courseType: 'PROJECT',
- isStatus: true,
- name: '器乐练习系统'
- }
- }
- })
- this.courseShowInfo = [tempCourse]
- // 默认课程都选中
- this.courseInfo = tempInfo
- } else {
- // 判断是否有课程,如果没有课程则默认显示0
- this.courseInfo = [{
- id: -1,
- courseCurrentPrice: 0,
- courseOriginalPrice: 0,
- isStudentOptional: false,
- courseType: 'MUSIC'
- }]
- }
- this.isClickStatus = false
- this.courseInfo.forEach(item => {
- if(item.isStudentOptional) {
- item.isStatus = false
- this.isClickStatus = true
- } else {
- item.isStatus = true
- }
- })
- console.log(this.isClickStatus)
- this.musicGroupSubject = tempResult.musicGroupSubjectPlan
- let instrumentInfo = {}
- let tempInstrument = []
- tempResult.musicGroupSubjectGoodsGroupList.forEach((item) => {
- if (item.type == "INSTRUMENT") {
- // 获取乐器所有提供方式
- let KGPTJ = item.kitGroupPurchaseTypeJson ? JSON.parse(item.kitGroupPurchaseTypeJson) : {}
- for (let single in KGPTJ) {
- let tempItem = Object.assign({}, item) // 深拷贝
- tempItem.marketPrice = tempItem.goodsList[0].marketPrice
- tempItem.kitType = single // 优惠模式
- tempItem.coupon = KGPTJ[single] // 优惠金额
- if (instrumentInfo.id) {
- tempItem.checked = false
- if (single == 'GROUP') { // 团购
- if ((instrumentInfo.kitType == 'GROUP' && instrumentInfo.price < tempItem.price) || instrumentInfo.kitType ==
- 'LEASE' || instrumentInfo.kitType == 'FREE') {
- this.instrumentResult.forEach(instrRes => {
- instrRes.checked = false
- })
- tempItem.checked = true
- instrumentInfo = {
- id: tempItem.id,
- price: tempItem.price,
- kitType: single
- }
- }
- } else if (single == 'LEASE') { // 租赁
- if (instrumentInfo.kitType == 'LEASE' && instrumentInfo.price < tempItem.price) {
- this.instrumentResult.forEach(instrRes => {
- instrRes.checked = false
- })
- tempItem.checked = true
- instrumentInfo = {
- id: tempItem.id,
- price: tempItem.price,
- kitType: single
- }
- }
- } else if (single == 'FREE') { // 免费
- if (instrumentInfo.kitType == 'FREE' && instrumentInfo.price < tempItem.price) {
- this.instrumentResult.forEach(instrRes => {
- instrRes.checked = false
- })
- tempItem.checked = true
- instrumentInfo = {
- id: tempItem.id,
- price: tempItem.price,
- kitType: single
- }
- }
- }
- } else {
- tempItem.checked = true
- instrumentInfo = {
- id: tempItem.id,
- price: tempItem.price,
- kitType: single
- }
- }
- this.instrumentResult.push(tempItem)
- tempInstrument.push(tempItem)
- }
- } else if (item.type == "ACCESSORIES") {
- item.checked = true
- this.accessOries.push(item)
- }
- })
- // 添加自备选项
- if (this.instrumentResult.length > 0) {
- // this.instrumentResult.push({
- // id: -1,
- // kitType: 'owned',
- // name: '自备',
- // price: 0,
- // marketPrice: 0,
- // checked: false
- // })
- let owned = {
- id: -1,
- kitType: 'owned',
- name: '自备乐器',
- price: 0,
- marketPrice: 0,
- checked: false
- }
- tempInstrument.push(owned)
- this.instrumentResult.push(owned)
- let sorted = this.groupBy(tempInstrument, (item) => {
- return [item.kitType];
- });
- this.instrumentResultList = sorted
- this.chargeTypeList.forEach(item => {
- if(item.id == tempResult.musicGroup.chargeTypeId) {
- this.chargeTypeName = item.description
- }
- })
- // 乐保服务初始化
- // this.instrumentResult.forEach(item => {
- // if(item.checked && item.kitType == "GROUP") {
- // this.leBaoStatus = true
- // this.buyMaintenance = true
- // }
- // })
- }
- }
- // 初始化计算金额
- this.calcPrice()
- })
- },
- onLeBao() {
- this.buyMaintenance = !this.buyMaintenance
- this.calcPrice()
- },
- groupBy(array, f) {
- var groups = {};
- array.forEach(function (o) {
- var group = JSON.stringify(f(o));
- groups[group] = groups[group] || [];
- groups[group].push(o);
- });
- return Object.keys(groups).map(function (group) {
- return groups[group];
- });
- },
- onQuestions(type) {
- if(type == 'amr') {
- this.$alert(`<b>革命性的“AMR器乐练习系统”</b><br />它的诞生是基于世界上最优秀的华人管乐指导专家唐嘉宏先生的教育理念,创新开发的一种新型“音乐感官植入程序”,这个程序抛弃了传统的“数线式识谱、机械式节奏、死记式乐理”,它营造出沉浸式可变速演奏过程,采用画面与音乐刺激序列组合而成的特定场景,在趣味性挑战的反复刺激中逐步促进器乐演奏的三核心:“音质→音准→音型”,从而达成演奏各环节水准的均匀提高,产生永久性条件反射式大脑记忆,将多板块知识融会贯通,让抽象的音乐知识刻入脑海里!<br /><br /><b>本练习系统的特点:</b><br /> 1.轻松快速掌握要点,让练习者沉浸其中,远离枯燥!<br /> 2.不假思索就能瞬间唤起反射式记忆,演奏识谱不再慢吞吞!<br /> 3.真正的实践记忆,摆脱纸上谈兵,与实际演奏紧密结合!<br />4.思维+肌肉的双重强化!无缝整合复习系统!<br /> 5.每条练习都经过严谨的编曲,你以为你只是在练习旋律线?其实是整个乐团在为你伴奏!`, 'AMR器乐练习系统', {
- confirmButtonText: '确定',
- dangerouslyUseHTMLString: true,
- callback: action => {
- }
- });
- } else if(type == 'instrument') {
- this.$alert(`<p style="text-align: justify">1.乐器保养是管乐迷针对乐团学员提供的乐器检查、保养及维修优惠特权;<br />2.该特权为包年制,从开通特权之日起365天内有效;<br />3.特权用户可享受管乐迷提供专业的高级乐器维修技师一年不低于两次下校检查乐器使用情况;<br />4.特权有效期内凭该特权绑定的乐器编号可享受保养人工费减免、非返厂维修人工费优惠等特权;<br />感谢您的信任和支持!</p>`, '乐器保养特权', {
- confirmButtonText: '确定',
- dangerouslyUseHTMLString: true,
- callback: action => {
- }
- });
- }
- },
- onCourseChange(item) {
- // 判断用户是否可以选择
- if (item.isStudentOptional) {
- item.isStatus = !item.isStatus
- this.calcPrice()
- }
- },
- onClickCheckbox() { //是否使用余额支付
- if (!this.payType) {
- if (this.orderInfo.amount >= this.balance) {
- this.needPrice = Number((this.orderInfo.amount - this.balance).toFixed(2))
- } else {
- this.needPrice = 0
- }
- } else {
- this.needPrice = this.orderInfo.amount
- }
- this.payType = !this.payType
- },
- onAuxiliarie(item) {
- // 辅件切换状态
- item.checked = !item.checked
- // 重新计算金额
- this.calcPrice()
- },
- instrumentF(item) {
- // 乐器切换状态
- this.instrumentResult.forEach(item => {
- item.checked = false
- })
- item.checked = true
- // if(item.kitType == "GROUP") {
- // this.leBaoStatus = true
- // this.buyMaintenance = true
- // } else {
- // this.leBaoStatus = false
- // this.buyMaintenance = false
- // }
- // 重新计算金额
- this.calcPrice()
- },
- calcPrice() {
- let buyList = [],
- ids = []
- let amount = 0,
- marketPrice = 0,
- goodsPrice = 0, // 乐器两现价
- goodsMarketPrice = 0, // 乐器原价
- goodsGroupIds = {},
- courseKeys = [],
- couponPrice = 0, // 优惠金额
- goodsIds = [],
- tempCourseFee = 0,
- musicClassFee = 0,
- musicMarketClassFee = 0,
- tempAccessPrice = 0,
- tempAccessMarketPrice = 0,
- tempGroupRemissionCourseFee = 0, // 乐团减免费用
- contractGoodsIds = '' // 合同所需要的商品Id (只需要乐器编号)
- // 课程
- let mgs = this.musicGroupSubject
- let csi = this.courseInfo
- // 加上判断是否有课程信息
- if (mgs) {
- let tempCourse = this.courseShowInfo
- // if (tempCourse.length > 0 && this.courseViewType == 1) {
- // tempCourse.forEach(item => {
- // if (item.id > 0) {
- // courseKeys.push(item.id)
- // }
- // musicClassFee += parseFloat(item.courseCurrentPrice)
- // marketPrice += parseFloat(item.courseOriginalPrice)
- // // 不可选的课程才会减免课程费用
- // if (!item.isStudentOptional) {
- // tempGroupRemissionCourseFee += parseFloat(item.courseCurrentPrice)
- // }
- // });
- // buyList.unshift({
- // name: this.chargeTypeName,
- // type: paymentPatternType[this.paymentPattern],
- // price: Number((musicClassFee).toFixed(2))
- // })
- // } else {
- if (tempCourse.length > 0 && this.courseViewType == 1) {
- let m = 0
- tempCourse.forEach(item => {
- m += parseFloat(item.courseCurrentPrice)
- // 不可选的课程才会减免课程费用
- if (!item.isStudentOptional) {
- tempGroupRemissionCourseFee += parseFloat(item.courseCurrentPrice)
- }
- });
- buyList.unshift({
- name: this.chargeTypeName,
- type: paymentPatternType[this.paymentPattern],
- price: Number((m).toFixed(2))
- })
- }
- csi.forEach(item => {
- if (item.isStatus) {
- musicClassFee += parseFloat(item.courseCurrentPrice)
- marketPrice += parseFloat(item.courseOriginalPrice)
- if (item.id > 0) {
- courseKeys.push(item.id)
- }
- // 不可选的课程才会减免课程费用
- if (!item.isStudentOptional) {
- tempGroupRemissionCourseFee += parseFloat(item.courseCurrentPrice)
- }
- }
- })
- // }
- }
- // 乐器
- let ir = this.instrumentResult
- if (ir.length > 0) {
- ir.forEach(item => {
- if (item.checked) {
- if (item.name != '自备') {
- contractGoodsIds += item.goodsIdList
- }
- if (item.kitType == 'FREE') {
- amount += 0
- couponPrice = 0 // 优惠金额
- } else if (item.kitType == 'LEASE') {
- couponPrice = item.coupon // 优惠金额
- if (item.name != '自备') {
- amount += item.depositFee
- goodsPrice += item.depositFee
- } else {
- amount += 0
- }
- } else {
- amount += parseFloat(item.price)
- goodsPrice += parseFloat(item.price)
- couponPrice = item.coupon ? item.coupon : 0
- }
- if (item.kitType == 'LEASE') {
- if (item.name != '自备') {
- marketPrice += parseFloat(item.marketPrice)
- goodsMarketPrice += item.depositFee
- }
- } else {
- marketPrice += parseFloat(item.marketPrice)
- goodsMarketPrice += parseFloat(item.marketPrice)
- }
- // item.id ? goodsGroupIds[item.id] : null
- if (item.id) {
- goodsGroupIds[item.id] = item.kitType
- }
- if (item.kitType == 'LEASE') {
- buyList.push({
- name: item.name,
- type: '租赁',
- price: item.depositFee
- })
- } else if (item.kitType == 'GROUP') {
- // && parseFloat(item.price - couponPrice) > 0
- buyList.push({
- name: item.name,
- type: '团购',
- price: parseFloat(item.price - couponPrice)
- })
- } else if(item.kitType == 'FREE') {
- buyList.push({
- name: item.name,
- type: '免费',
- price: 0
- })
- }
- // 是否减免课程费用,必须团购,并且开启了减免课程费用
- if(item.kitType == 'GROUP' && item.groupRemissionCourseFee == 1) {
- musicClassFee = parseFloat(musicClassFee - tempGroupRemissionCourseFee)
- }
- }
- })
- }
- if(this.leBaoStatus && this.buyMaintenance) {
- // 判断是否使用乐保
- marketPrice += 500
- amount += 300
- buyList.push({
- name: '乐器保养',
- time: dayjs().format('YYYY/MM/DD') + '~' + dayjs().add(365, 'day').format('YYYY/MM/DD'),
- type: '包年',
- price: 300
- })
- }
- amount += parseFloat(tempCourseFee + musicClassFee)
- if (parseFloat(tempCourseFee + musicClassFee) > 0 && this.courseViewType == 0) {
- buyList.unshift({
- name: '乐团课',
- type: paymentPatternType[this.paymentPattern],
- price: Number((tempCourseFee + musicClassFee).toFixed(2))
- })
- }
- // 辅件
- if (this.accessOries.length > 0) {
- this.accessOries.forEach(item => {
- if (item.checked) {
- tempAccessPrice += parseFloat(item.price)
- amount += parseFloat(item.price)
- if (item.goodsList && item.goodsList.length > 0) {
- item.goodsList.forEach(childGoods => {
- tempAccessMarketPrice += parseFloat(childGoods.marketPrice)
- marketPrice += parseFloat(childGoods.marketPrice)
- })
- }
- goodsGroupIds[item.id] = 'ACCESSORIES'
- buyList.push({
- name: item.name,
- type: '团购',
- price: item.price
- })
- }
- })
- // if (tempAccessPrice > 0) {
- // buyList.push({
- // name: '辅件',
- // type: '团购',
- // price: tempAccessPrice
- // })
- // }
- }
- let tempGroupPurchasePrice = amount
- // 判断减去优惠金额,是否大于0(这里有可能出现负数)
- if (amount - couponPrice >= 0) {
- amount = Number((amount - couponPrice).toFixed(2))
- this.errorPrice = false
- } else {
- amount = 0
- this.errorPrice = true // 订单金额是否异常
- }
- if (amount - tempCourseFee - musicClassFee > 0) {
- ids.push(1, 2)
- }
- if (parseFloat(tempCourseFee + musicClassFee) > 0) {
- ids.push(3, 4, 5)
- }
- this.ids = ids
- // 计算是否使用过余额
- if (this.payType) {
- let tempPrice = Number((amount - this.balance).toFixed(2))
- if (tempPrice > 0) {
- this.needPrice = tempPrice
- } else {
- this.needPrice = 0
- }
- } else {
- this.needPrice = Number(amount.toFixed(2))
- }
- this.buyList = buyList
- this.orderInfo = {
- amount: Number(amount.toFixed(2)),
- marketPrice: Number(marketPrice.toFixed(2)),
- groupPurchasePrice: tempGroupPurchasePrice,
- couponPrice: couponPrice,
- goodsGroupIds: goodsGroupIds,
- goodsIds: goodsIds.join(','),
- contractGoodsIds: contractGoodsIds,
- courseKeys: courseKeys,
- musicClassFee: musicClassFee,
- musicMarketClassFee: musicMarketClassFee,
- accessMarketPrice: tempAccessMarketPrice,
- accessPrice: tempAccessPrice,
- goodsPrice: goodsPrice,
- goodsMarketPrice: goodsMarketPrice
- }
- },
- permission(str){
- return permission(str)
- }
- },
- };
- </script>
- <style lang="less" scoped>
- .noticeInfo {
- line-height: 1.8;
- h2 {
- font-size: 18px;
- color: #1a1a1a;
- line-height: 28px;
- height: 26px !important;
- font-weight: bold;
- }
- position: relative;
- background: #fff;
- padding: 0 16px 10px;
- font-size: 14px;
- color: #808080;
- margin-bottom: 10px;
- }
- .section {
- padding: 16px 16px 10px;
- background: #fff;
- margin-bottom: 10px;
- >.title {
- font-size: 20px;
- line-height: 28px;
- height: 26px !important;
- font-weight: bold;
- &::before {
- content: " ";
- width: 4px;
- height: 15px;
- background: #14928a;
- display: inline-block;
- margin-right: 7px;
- border-radius: 8px;
- }
- }
- .indate {
- font-size: 14px;
- padding: 6px 0;
- display: flex;
- // justify-content: space-between;
- justify-content: flex-end;
- span {
- color: #fa101d;
- }
- }
- }
- .disabled {
- opacity: 0.5;
- .check_active {
- opacity: .5;
- }
- }
- .buy {
- height: 60px;
- display: flex;
- align-items: center;
- padding: 0 20px;
- border-top: 1px solid #ffe9e9e9;
- color: #000000;
- font-size: 12px;
- background: #fff;
- .price {
- flex: 1;
- font-size: 16px;
- }
- font-size: 16px;
- span {
- color: #fa101d;
- }
- .text {
- font-size: 12px;
- width: 60px;
- display: inline-block;
- color: #000;
- }
- del {
- color: #b5b5b5;
- &.text {
- color: #b5b5b5;
- }
- }
- .btn-submit {
- display: inline-block;
- font-size: 18px;
- color: #fff;
- background: #f85043;
- border-radius: 100px;
- box-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.19);
- padding: 8px 46px;
- }
- }
- .iframe {
- width: 100%;
- height: 100%;
- -webkit-overflow-scrolling: touch;
- overflow-y: scroll;
- border-top: none !important;
- min-height: calc(100vh - 41px);
- }
- .countDownContent {
- line-height: 40px;
- text-align: center;
- font-size: 14px;
- border-bottom: 1px solid #ccc;
- .van-count-down {
- display: inline;
- color: #f00;
- }
- }
- .loadingOrder {
- width: 90%;
- height: 180px;
- display: flex;
- align-items: center;
- justify-content: center;
- .van-loading__text {
- color: #444;
- }
- }
- .pay-section {
- margin-bottom: 10px;
- padding: 10px 8px;
- }
- .pay-name {
- padding-left: 10px;
- flex: 1 auto;
- font-weight: bold;
- }
- .logo {
- width: 24px;
- height: 24px;
- }
- .van-checkbox {
- float: right;
- /deep/.van-checkbox__icon .van-icon {
- border-color: #e9eaef;
- background-color: #e9eaef;
- }
- /deep/.van-checkbox__icon--checked .van-icon {
- background-color: #2dc7aa;
- border-color: #2dc7aa;
- }
- }
- .needprice {
- display: flex;
- justify-content: space-between;
- padding: 2px 0;
- del {
- font-size: 14px;
- color: #aaa;
- font-weight: bold;
- }
- span {
- font-size: 18px;
- color: #f85043;
- font-weight: bold;
- }
- }
- .couponprice {
- display: flex;
- justify-content: space-between;
- }
- .use_price {
- display: flex;
- align-items: center;
- font-size: 14px;
- font-weight: bold;
- img {
- padding-right: 8px;
- }
- span {
- font-size: 16px;
- }
- }
- .check_default {
- margin-right: 8px;
- display: flex;
- align-items: center;
- height: 26px;
- &::before {
- display: block;
- content: ' ';
- width: 18px;
- height: 18px;
- background-color: #e9eaef;
- border-radius: 50%;
- }
- &.check_active {
- &::before {
- display: block;
- content: ' ';
- background: url("../../../assets/images/icon_checkbox.png") no-repeat center;
- background-size: contain;
- }
- }
- &.radio_active {
- &::before {
- display: block;
- content: ' ';
- background: url("../../../assets/images/icon_radio.png") no-repeat center;
- background-size: contain;
- }
- }
- }
- // .check_default {
- // margin-right: 8px;
- // display: block;
- // width: 18px;
- // height: 18px;
- // background-color: #e9eaef;
- // border-radius: 50%;
- // &.check_active {
- // background: url("../../../assets/images/icon_checkbox.png") no-repeat center;
- // background-size: contain;
- // }
- // }
- .title-row {
- background: #F3F4F8;
- color: #1a1a1a;
- padding:5px 5px 3px;
- border-radius:5px;
- font-size: 14px;
- }
- .option-row {
- line-height: 26px;
- font-size: 14px;
- display: flex;
- // align-items: center;
- position: relative;
- padding: 10px 0 5px;
- box-sizing: border-box;
- cursor: pointer;
- .el-col {
- display: flex;
- // align-items: center;
- }
- .el-col-6, .el-col-8 {
- display: flex;
- justify-content: flex-end;
- }
- &.lines {
- margin-top: 5px;
- border-top: 1px solid #ededed;
- }
- }
- .el-icon-question {
- font-size: 16px;
- color: #4d4d4d;
- padding-left: 5px;
- padding-top: 5px;
- }
- .fontBold {
- font-weight: bold;
- }
- </style>
|