|
@@ -4,105 +4,151 @@
|
|
|
<h2>缴费说明</h2>
|
|
|
1、为确保声部平衡,请家长确认 注册声部为孩子的最终录取声部。<br />
|
|
|
2、为保障每个声部人数达标,我们都进行了超员20%的录取,系统将按照提交注册的先后顺序安排名额。超员后 有可能出现无法注册的情况,请您理解。如果其他声部仍有名额,我们将优先调配您的孩子;
|
|
|
- <div class="line_bottom" style="margin: 20px 0 0;"></div>
|
|
|
</div>
|
|
|
|
|
|
<div class="section">
|
|
|
- <h2 class="title">乐团课程</h2>
|
|
|
- <div class="options">
|
|
|
- <div class="option" :class="[!item.isStudentOptional ? 'disabled' : '']" v-for="(item, index) in courseInfo" :key="index" @click="onCourseChange(item)">
|
|
|
- <div class="o_hd"><i class="check_default" :class="[item.isStatus ? 'check_active' : '']"></i></div>
|
|
|
- <div class="o_bd">{{ item.courseType | coursesType }}</div>
|
|
|
- <span class="o_ft" style="color: #1a1a1a;">
|
|
|
- 原价:<del style=" font-size: 16px; color: #1a1a1a">¥{{ item.courseOriginalPrice | moneyFormat }}</del>
|
|
|
- </span>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="options sale lines">
|
|
|
- <div class="option">
|
|
|
- <div class="o_bd"></div>
|
|
|
- <span class="o_ft">
|
|
|
- 现价 ¥<span style="font-size: 20px">{{ orderInfo.musicClassFee | moneyFormat }}</span>
|
|
|
- </span>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
+ <h2 class="title">{{ chargeTypeName }}</h2>
|
|
|
+ <p style="font-size: 14px; padding: 2px 0; color: #a1a1a1" v-if="serviceValidDate">服务有效期:{{ serviceValidDate }}</p>
|
|
|
+ <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>
|
|
|
+ <!-- 所有不可选的课程合集 -->
|
|
|
+ <template v-if="courseShowStatus">
|
|
|
+ <el-row class="option-row" v-for="(item, index) in courseShowInfo" :class="[!item.isStudentOptional ? 'disabled' : '']" :key="index" @click.native="onCourseChange(item)">
|
|
|
+ <el-col :span="12">
|
|
|
+ <i class="check_default" :class="[item.isStatus ? 'check_active' : '']"></i>
|
|
|
+ <span style="display: flex; align-items: center;">
|
|
|
+ <template v-if="item.courseType == 'PROJECT'">{{ item.name }} </template><template v-else>{{ item.courseType | coursesType }}</template>
|
|
|
+ </span>
|
|
|
+ <el-icon v-if="item.courseType == 'PROJECT'" class="el-icon-question" @click.native="onQuestions" />
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <span style="color: #1A1A1A">¥{{ item.courseCurrentPrice | moneyFormat }}</span>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <del style="color: #AAA;">¥{{ item.courseOriginalPrice | moneyFormat }}</del>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </template>
|
|
|
+ <!-- 可选课程信息集合 -->
|
|
|
+ <template v-for="(item, index) in courseInfo">
|
|
|
+ <el-row class="option-row" :class="[!item.isStudentOptional ? 'disabled' : '']" :key="index" @click.native="onCourseChange(item)" v-if="item.isStudentOptional">
|
|
|
+ <el-col :span="12">
|
|
|
+ <i class="check_default" :class="[item.isStatus ? 'check_active' : '']"></i><template v-if="item.courseType == 'PROJECT'">{{ item.name }}</template><template v-else>{{ item.courseType | coursesType }}</template>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <span style="color: #1A1A1A">¥{{ item.courseCurrentPrice | moneyFormat }}</span>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <del style="color: #AAA;">¥{{ item.courseOriginalPrice | moneyFormat }}</del>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </template>
|
|
|
+
|
|
|
+ <el-row class="option-row lines">
|
|
|
+ <el-col :span="12" class="fontBold">
|
|
|
+ 仅需支付
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <span class="fontBold" style="color: #f85043;">¥{{ orderInfo.musicClassFee | moneyFormat }}</span>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <del class="fontBold" style="color: #f85043;">¥{{ orderInfo.musicMarketClassFee | moneyFormat }}</del>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
</div>
|
|
|
|
|
|
<div class="section" v-if="instrumentResult.length > 0">
|
|
|
<h2 class="title">乐器</h2>
|
|
|
- <div class="options">
|
|
|
- <div v-for="(con, index) in instrumentResult" :key="index" @click="instrumentF(con)" :class="[ instrumentResult.length > 1 ? 'oc' : '' ]">
|
|
|
- <div class="option">
|
|
|
- <div class="o_hd"><i class="check_default" :class="[ con.checked ? 'check_active' : '' ]"></i></div>
|
|
|
- <div class="o_bd">
|
|
|
+ <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', 'FREE'].includes(i[0]['kitType'])">现价</template>
|
|
|
+ <template v-if="i[0]['kitType'] == 'LEASE'">租赁押金</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-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>
|
|
|
- <span class="o_ft o_ft_price" v-if="con.price && con.kitType == 'FREE'">
|
|
|
- 原价<del>:¥{{ con.marketPrice | moneyFormat }}</del>
|
|
|
- </span>
|
|
|
- <span class="o_ft o_ft_price" v-if="con.price && con.kitType == 'GROUP'">
|
|
|
- 原价<del>:¥{{ con.marketPrice | moneyFormat }}</del>
|
|
|
- </span>
|
|
|
- </div>
|
|
|
- <div class="configuration" v-if="con.marketPrice">
|
|
|
- <div class="config config_line">
|
|
|
- <div class="title"><span>配置</span></div>
|
|
|
- <div class="content">
|
|
|
- <p>{{ con.goodsList[0].specification }}</p>
|
|
|
+ <div v-if="con.goodsList" style="font-size: .12rem; color: #aaa">
|
|
|
+ {{ con.goodsList[0].specification }}
|
|
|
</div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- <div class="options sale" style="margin-bottom: 5px;" v-if="con.marketPrice">
|
|
|
- <div class="option">
|
|
|
- <div class="o_bd"></div>
|
|
|
- <template v-if="(con.kitType == 'LEASE')">
|
|
|
- <span class="o_ft">
|
|
|
- 押金:¥<span style="font-size: 20px">{{ Number((con.depositFee - con.coupon).toFixed(2)) | moneyFormat }}</span>
|
|
|
- </span>
|
|
|
- </template>
|
|
|
- <template v-if="con.price && con.kitType == 'FREE'">
|
|
|
- <span class="o_ft">
|
|
|
- 免费领用
|
|
|
- </span>
|
|
|
- </template>
|
|
|
- <span class="o_ft" v-if="con.price && con.kitType == 'GROUP'">
|
|
|
- 现价:¥<span style="font-size: 20px">{{ Number((con.price - con.coupon).toFixed(2)) | moneyFormat }}</span>
|
|
|
- </span>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
+ </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.price && con.kitType == 'FREE'">¥{{ 0 | moneyFormat }}</span>
|
|
|
+ <span style="color: #1A1A1A" v-if="con.price && con.kitType == 'GROUP'">¥{{ Number((con.price - con.coupon).toFixed(2)) | moneyFormat }}</span>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <del style="color: #AAA;" v-if="con.kitType != 'owned'">¥{{ con.marketPrice | moneyFormat }}</del>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
</div>
|
|
|
+
|
|
|
+ <el-row class="option-row lines">
|
|
|
+ <el-col :span="12" class="fontBold">
|
|
|
+ 仅需支付
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <span class="fontBold" style="color: #f85043;">¥{{ orderInfo.goodsPrice | moneyFormat }}</span>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <del class="fontBold" style="color: #f85043;">¥{{ orderInfo.goodsMarketPrice | moneyFormat }}</del>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
</div>
|
|
|
|
|
|
<div class="section" v-if="accessOries.length > 0" key="accessOries">
|
|
|
<h2 class="title">辅件</h2>
|
|
|
- <div class="options" v-for="(instr, index) in accessOries" :key="index" @click="onAuxiliarie(instr)">
|
|
|
- <div class="option">
|
|
|
- <div class="o_hd"><i class="check_default" :class="[ instr.checked ? 'check_active' : '' ]"></i></div>
|
|
|
- <div class="o_bd">{{ instr.name }}</div>
|
|
|
- <span class="o_ft" style="font-size: 14px;">
|
|
|
- <!-- <del>原价:¥{{ instr.marketPrice }}</del> -->
|
|
|
- <template v-if="instr.price == 0">免费</template>
|
|
|
- <template v-else>现价:¥{{ instr.price | moneyFormat }}</template>
|
|
|
- <!-- {{ instr.price == 0 ? '免费' : '现价:¥' + instr.price | moneyFormat }} -->
|
|
|
- </span>
|
|
|
- </div>
|
|
|
- <div class="configuration" v-if="instr.goodsList.length > 1">
|
|
|
- <div class="config config_other">
|
|
|
- <div class="title"><span>配置</span></div>
|
|
|
- <div class="content" v-for="item in instr.goodsList" :key="item.id">
|
|
|
- <div class="option" style="padding: 0 5px;">
|
|
|
- <div class="o_bd" style="font-size: 14px">{{ item.name }}</div>
|
|
|
- <!-- <span class="o_ft">¥{{ item.marketPrice }}</span> -->
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
+ <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>
|
|
|
+
|
|
|
+ <el-row class="option-row" v-for="(instr, index) in accessOries" :key="index" @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">
|
|
|
+ <span style="color: #1A1A1A" v-if="instr.price == 0">免费</span>
|
|
|
+ <span style="color: #1A1A1A" v-else>¥{{ instr.price | moneyFormat }}</span>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <del style="color: #AAA;">¥{{ instr.goodsList[0] ? instr.goodsList[0].marketPrice : 0 | moneyFormat }}</del>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+
|
|
|
+ <el-row class="option-row lines">
|
|
|
+ <el-col :span="12" class="fontBold">
|
|
|
+ 仅需支付
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <span class="fontBold" style="color: #f85043;">¥{{ orderInfo.accessPrice | moneyFormat }}</span>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <del class="fontBold" style="color: #f85043;">¥{{ orderInfo.accessMarketPrice | moneyFormat }}</del>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
</div>
|
|
|
|
|
|
<!-- 原价现价 -->
|
|
|
- <div class="section">
|
|
|
+ <!-- <div class="section">
|
|
|
<div class="needprice markerprice">
|
|
|
<del>原价</del>
|
|
|
<del>¥{{ orderInfo.marketPrice | moneyFormat }}</del>
|
|
@@ -111,7 +157,7 @@
|
|
|
<span>仅需支付</span>
|
|
|
<span>¥{{ orderInfo.amount | moneyFormat }}</span>
|
|
|
</div>
|
|
|
- </div>
|
|
|
+ </div> -->
|
|
|
|
|
|
<div class="buy">
|
|
|
<div class="price">
|
|
@@ -126,8 +172,8 @@
|
|
|
</template>
|
|
|
<script>
|
|
|
import { permission } from '@/utils/directivePage'
|
|
|
-import { getSubjectGoodsAndInfoPreview } from '@/api/buildTeam'
|
|
|
-
|
|
|
+import { getSubjectGoodsAndInfoPreview, getType } from '@/api/buildTeam'
|
|
|
+import dayjs from 'dayjs'
|
|
|
const paymentPatternType = {
|
|
|
0: '按月',
|
|
|
1: '按学期',
|
|
@@ -154,7 +200,12 @@ export default {
|
|
|
goodsIds: null,
|
|
|
contractGoodsIds: null, // 选中所有商品ID
|
|
|
couponPrice: 0, //
|
|
|
- musicClassFee: 0
|
|
|
+ musicClassFee: 0, // 课程现价
|
|
|
+ musicMarketClassFee: 0, // 课程原价
|
|
|
+ accessPrice: 0, // 辅件现价
|
|
|
+ accessMarketPrice: 0, // 辅件原价
|
|
|
+ goodsPrice: 0, // 乐器现价
|
|
|
+ goodsMarketPrice: 0, // 乐器原价
|
|
|
}, // 金额列表,金额计算
|
|
|
courseInfo: null, // 课程信息
|
|
|
musicGroupSubject: null, // 基本信息
|
|
@@ -167,6 +218,10 @@ export default {
|
|
|
chargeTypeId: null,
|
|
|
paymentStatus: null,
|
|
|
paymentPattern: null,
|
|
|
+ serviceValidDate: null, // 服务时间
|
|
|
+ courseShowStatus: false,
|
|
|
+ chargeTypeList: [],
|
|
|
+ chargeTypeName: null,
|
|
|
};
|
|
|
},
|
|
|
mounted() {
|
|
@@ -180,14 +235,44 @@ export default {
|
|
|
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.paymentPattern = tempResult.musicGroupPaymentCalender ? tempResult.musicGroupPaymentCalender.paymentPattern : 2
|
|
|
+ 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.courseOriginalPrice + tempCourse.courseOriginalPrice),
|
|
|
+ courseType: 'PROJECT',
|
|
|
+ isStatus: true,
|
|
|
+ name: '乐团训练辅助系统'
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ this.courseShowInfo = [tempCourse]
|
|
|
// 默认课程都选中
|
|
|
this.courseInfo = tempInfo
|
|
|
} else {
|
|
@@ -206,6 +291,7 @@ export default {
|
|
|
|
|
|
this.musicGroupSubject = tempResult.musicGroupSubjectPlan
|
|
|
let instrumentInfo = {}
|
|
|
+ let tempInstrument = []
|
|
|
tempResult.musicGroupSubjectGoodsGroupList.forEach((item) => {
|
|
|
if (item.type == "INSTRUMENT") {
|
|
|
// 获取乐器所有提供方式
|
|
@@ -264,6 +350,7 @@ export default {
|
|
|
}
|
|
|
}
|
|
|
this.instrumentResult.push(tempItem)
|
|
|
+ tempInstrument.push(tempItem)
|
|
|
}
|
|
|
} else if (item.type == "ACCESSORIES") {
|
|
|
item.checked = true
|
|
@@ -272,13 +359,33 @@ export default {
|
|
|
})
|
|
|
// 添加自备选项
|
|
|
if (this.instrumentResult.length > 0) {
|
|
|
- this.instrumentResult.push({
|
|
|
+ // this.instrumentResult.push({
|
|
|
+ // id: -1,
|
|
|
+ // kitType: 'owned',
|
|
|
+ // name: '自备',
|
|
|
+ // price: 0,
|
|
|
+ // marketPrice: 0,
|
|
|
+ // checked: false
|
|
|
+ // })
|
|
|
+ let owned = {
|
|
|
id: -1,
|
|
|
kitType: 'owned',
|
|
|
- name: '自备',
|
|
|
+ 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
|
|
|
+ }
|
|
|
})
|
|
|
}
|
|
|
}
|
|
@@ -286,6 +393,24 @@ export default {
|
|
|
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() {
|
|
|
+ this.$alert('乐团辅助训练系统描述文案--2月3号下班前才会出', '乐团训练辅助系统', {
|
|
|
+ confirmButtonText: '确定',
|
|
|
+ callback: action => {
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
onCourseChange(item) {
|
|
|
// 判断用户是否可以选择
|
|
|
if (item.isStudentOptional) {
|
|
@@ -325,12 +450,17 @@ export default {
|
|
|
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 (只需要乐器编号)
|
|
|
// 课程
|
|
@@ -341,11 +471,11 @@ export default {
|
|
|
csi.forEach(item => {
|
|
|
if (item.isStatus) {
|
|
|
musicClassFee += parseFloat(item.courseCurrentPrice)
|
|
|
+ musicMarketClassFee += parseFloat(item.courseOriginalPrice)
|
|
|
marketPrice += parseFloat(item.courseOriginalPrice)
|
|
|
if (item.id > 0) {
|
|
|
courseKeys.push(item.id)
|
|
|
}
|
|
|
-
|
|
|
// 不可选的课程才会减免课程费用
|
|
|
if(!item.isStudentOptional) {
|
|
|
tempGroupRemissionCourseFee += parseFloat(item.courseCurrentPrice)
|
|
@@ -369,19 +499,23 @@ export default {
|
|
|
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 += item.depositFee
|
|
|
+ goodsMarketPrice += item.depositFee
|
|
|
}
|
|
|
} else {
|
|
|
marketPrice += parseFloat(item.marketPrice)
|
|
|
+ goodsMarketPrice += parseFloat(item.marketPrice)
|
|
|
}
|
|
|
// item.id ? goodsGroupIds[item.id] : null
|
|
|
if (item.id) {
|
|
@@ -409,9 +543,9 @@ export default {
|
|
|
}
|
|
|
|
|
|
// 是否减免课程费用,必须团购,并且开启了减免课程费用
|
|
|
- if(item.kitType == 'GROUP' && item.groupRemissionCourseFee == 1) {
|
|
|
- musicClassFee = parseFloat(musicClassFee - tempGroupRemissionCourseFee)
|
|
|
- }
|
|
|
+ if(item.kitType == 'GROUP' && item.groupRemissionCourseFee == 1) {
|
|
|
+ musicClassFee = parseFloat(musicClassFee - tempGroupRemissionCourseFee)
|
|
|
+ }
|
|
|
}
|
|
|
})
|
|
|
}
|
|
@@ -425,13 +559,13 @@ export default {
|
|
|
// }
|
|
|
// 辅件
|
|
|
if (this.accessOries.length > 0) {
|
|
|
- let tempAccessPrice = 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)
|
|
|
})
|
|
|
}
|
|
@@ -446,7 +580,6 @@ export default {
|
|
|
})
|
|
|
// }
|
|
|
}
|
|
|
- // console.log(amount)
|
|
|
let tempGroupPurchasePrice = amount
|
|
|
// 判断减去优惠金额,是否大于0(这里有可能出现负数)
|
|
|
if (amount - couponPrice >= 0) {
|
|
@@ -476,6 +609,7 @@ export default {
|
|
|
this.needPrice = Number(amount.toFixed(2))
|
|
|
}
|
|
|
this.buyList = buyList
|
|
|
+
|
|
|
this.orderInfo = {
|
|
|
amount: Number(amount.toFixed(2)),
|
|
|
marketPrice: Number(marketPrice.toFixed(2)),
|
|
@@ -485,7 +619,12 @@ export default {
|
|
|
goodsIds: goodsIds.join(','),
|
|
|
contractGoodsIds: contractGoodsIds,
|
|
|
courseKeys: courseKeys,
|
|
|
- musicClassFee: musicClassFee
|
|
|
+ musicClassFee: musicClassFee,
|
|
|
+ musicMarketClassFee: musicMarketClassFee,
|
|
|
+ accessMarketPrice: tempAccessMarketPrice,
|
|
|
+ accessPrice: tempAccessPrice,
|
|
|
+ goodsPrice: goodsPrice,
|
|
|
+ goodsMarketPrice: goodsMarketPrice
|
|
|
}
|
|
|
},
|
|
|
permission(str){
|
|
@@ -495,38 +634,22 @@ export default {
|
|
|
};
|
|
|
</script>
|
|
|
<style lang="less" scoped>
|
|
|
-
|
|
|
.noticeInfo {
|
|
|
line-height: 1.8;
|
|
|
h2 {
|
|
|
font-size: 18px;
|
|
|
color: #1a1a1a;
|
|
|
- padding-bottom: 10px;
|
|
|
+ line-height: 28px;
|
|
|
+ height: 26px !important;
|
|
|
+ font-weight: bold;
|
|
|
}
|
|
|
|
|
|
position: relative;
|
|
|
background: #fff;
|
|
|
- padding: 15px 16px 10px;
|
|
|
+ padding: 0 16px 10px;
|
|
|
font-size: 14px;
|
|
|
color: #808080;
|
|
|
-}
|
|
|
-
|
|
|
-.protocolbtn {
|
|
|
- margin: 35px 0;
|
|
|
- background: #14928a;
|
|
|
- color: #fff;
|
|
|
- font-size: 18px;
|
|
|
- border-radius: 50px;
|
|
|
- text-align: center;
|
|
|
- width: 100%;
|
|
|
-}
|
|
|
-
|
|
|
-.line_bottom {
|
|
|
- border-bottom: 1px solid #ededed;
|
|
|
-}
|
|
|
-
|
|
|
-.line_top {
|
|
|
- border-top: 1px solid #ededed;
|
|
|
+ margin-bottom: 10px;
|
|
|
}
|
|
|
|
|
|
.section {
|
|
@@ -537,8 +660,8 @@ export default {
|
|
|
>.title {
|
|
|
font-size: 20px;
|
|
|
line-height: 28px;
|
|
|
+ height: 26px !important;
|
|
|
font-weight: bold;
|
|
|
- padding-bottom: 5px;
|
|
|
|
|
|
&::before {
|
|
|
content: " ";
|
|
@@ -564,168 +687,6 @@ export default {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-.options {
|
|
|
-
|
|
|
- // padding-top: .08px;
|
|
|
- .oc {
|
|
|
- border-bottom: 1px solid #ededed;
|
|
|
-
|
|
|
- &:last-child {
|
|
|
- border-bottom: 0;
|
|
|
- // margin-top: 0.08px;
|
|
|
- padding-top: 9px;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .protocol {
|
|
|
- padding-left: 20px;
|
|
|
- font-size: 10px;
|
|
|
- line-height: 14px;
|
|
|
- }
|
|
|
-
|
|
|
- &.classInfo {
|
|
|
- .option .o_ft {
|
|
|
- color: #1a1a1a;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- &.lines {
|
|
|
- margin-top: 5px;
|
|
|
- border-top: 1px solid #ededed;
|
|
|
- }
|
|
|
-
|
|
|
- &.sale {
|
|
|
- .option {
|
|
|
-
|
|
|
- .o_bd,
|
|
|
- .o_ft {
|
|
|
- font-size: 16px;
|
|
|
- color: #f85043;
|
|
|
- font-weight: bold;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .option {
|
|
|
- line-height: 26px;
|
|
|
- font-size: 15px;
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- position: relative;
|
|
|
- padding: 10px 5px 5px;
|
|
|
-
|
|
|
- .o_hd {
|
|
|
- display: flex;
|
|
|
- }
|
|
|
-
|
|
|
- .o_bd {
|
|
|
- color: #1a1a1a;
|
|
|
- flex: 1;
|
|
|
- font-size: 16px;
|
|
|
-
|
|
|
- .c {
|
|
|
- font-size: 12px;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .o_ft {
|
|
|
- font-size: 16px;
|
|
|
- color: #fa101d;
|
|
|
-
|
|
|
- del {
|
|
|
- color: #aaaaaa;
|
|
|
- font-size: 12px;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .o_ft_price,
|
|
|
- .o_ft_price del {
|
|
|
- font-size: 16px;
|
|
|
- color: #1a1a1a;
|
|
|
- }
|
|
|
-
|
|
|
- .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;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-.configuration {
|
|
|
- padding-bottom: 9px;
|
|
|
-
|
|
|
- .config_line {
|
|
|
- display: flex;
|
|
|
- justify-content: space-between;
|
|
|
-
|
|
|
- .content {
|
|
|
- width: 70%;
|
|
|
- text-align: right;
|
|
|
- }
|
|
|
-
|
|
|
- .title {
|
|
|
- font-size: 14px;
|
|
|
- color: #808080;
|
|
|
-
|
|
|
- span {
|
|
|
- padding-left: 26px;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .config_other {
|
|
|
- .title {
|
|
|
- // background:rgba(246,246,246,1);
|
|
|
- // height: 1px;
|
|
|
- position: relative;
|
|
|
-
|
|
|
- // margin: .15px 0;
|
|
|
- span {
|
|
|
- // position: absolute;
|
|
|
- // left: .12px;
|
|
|
- // top: -.09px;
|
|
|
- font-size: 14px;
|
|
|
- color: #808080;
|
|
|
- margin-left: 17px;
|
|
|
- display: inline-block;
|
|
|
- background-color: #fff;
|
|
|
- padding: 0 4px;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .content {
|
|
|
- font-size: 12px;
|
|
|
- padding-left: 16px;
|
|
|
- line-height: 22px;
|
|
|
- color: #acacac;
|
|
|
-
|
|
|
- .o_ft {
|
|
|
- color: #aaaaaa;
|
|
|
- font-size: 12px;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .options {
|
|
|
- padding-top: 0;
|
|
|
- padding-left: 16px;
|
|
|
-
|
|
|
- .option {
|
|
|
- font-size: 14px;
|
|
|
- color: #6f6f6f;
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
.disabled {
|
|
|
opacity: 0.7;
|
|
|
}
|
|
@@ -877,4 +838,80 @@ export default {
|
|
|
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;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// .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 0 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;
|
|
|
+ .el-col {
|
|
|
+ display: flex;
|
|
|
+ // align-items: center;
|
|
|
+ }
|
|
|
+ .el-col-6 {
|
|
|
+ display: flex;
|
|
|
+ justify-content: flex-end;
|
|
|
+ }
|
|
|
+ &.lines {
|
|
|
+ margin-top: 5px;
|
|
|
+ border-top: 1px solid #ededed;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.el-icon-question {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ font-size: 16px;
|
|
|
+ color: #4d4d4d;
|
|
|
+}
|
|
|
+
|
|
|
+.fontBold {
|
|
|
+ font-weight: bold;
|
|
|
+}
|
|
|
</style>
|