subject-preview.vue 50 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260
  1. <template>
  2. <div style="background: #F3F4F8;">
  3. <h2 class="title">注册说明</h2>
  4. <div class="noticeInfo">
  5. 1、您注册时所选择的乐团声部,即为乐团录取最终确认的声部,请您务必仔细填写;<br />
  6. 2、为避免因部分已注册家长放弃名额导致乐团声部失衡,系统设定各声部限额放大20%比例开放注册,系统自动按照完全完成注册的先后顺序确认录取名单,因此,超员后有可能出现无法注册的情况,请您理解。如果其他声部仍有名额,在您孩子的身体条件适合该乐器的前提下,我们将优先予以调配。
  7. </div>
  8. <template v-if="courseViewType == 2">
  9. <h2 class="title" >学习工具包</h2>
  10. <div class="yunTrain">
  11. <img :src="trainBg" />
  12. <div class="toolText">
  13. <p class="toolTitle">乐器练习云教练
  14. <i class="icon_video" @click="videoStatus = true"></i>
  15. </p>
  16. <p class="toolDate">有效期说明:自开课之日起6个月内有效</p>
  17. </div>
  18. </div>
  19. </template>
  20. <template v-if="courseViewType == 1 && courseShowInfo.length > 0">
  21. <div class="yunTrain" style="margin-top: 12px;">
  22. <img :src="trainBg" />
  23. <div class="toolText">
  24. <p class="toolTitle">服务</p>
  25. <p class="toolDate" v-if="serviceValidDate">服务有效期:{{ serviceValidDate }}</p>
  26. </div>
  27. </div>
  28. </template>
  29. <h2 class="titles" style="margin-top: 12px;" v-if="courseViewType == 0">
  30. <img :src="trainSmallBg" />
  31. <span>乐团课程</span>
  32. </h2>
  33. <template class="section">
  34. <!-- 所有不可选的课程合集 -->
  35. <div class="section" v-if="courseShowStatus && courseViewType == 1">
  36. <el-row class="option-row" v-for="(item, index) in courseShowInfo" :class="[!item.isStudentOptional ? 'disabled' : '']" :key="index" @click.native="onCourseChange(item)">
  37. <el-col :span="16">
  38. <i class="check_default" :class="[item.isStatus ? 'check_active' : '']"></i>
  39. <span style="display: flex; align-items: center;">
  40. <template v-if="item.courseType == 'PROJECT'">{{ chargeTypeName }} </template><template v-else>{{ item.courseType | coursesType }}</template>
  41. </span>
  42. <el-icon v-if="item.courseType == 'PROJECT'" class="el-icon-question" @click.native="onQuestions('amr')" />
  43. </el-col>
  44. <el-col :span="8">
  45. <span style="color: #1A1A1A">¥{{ item.courseCurrentPrice | moneyFormat }}</span>
  46. </el-col>
  47. </el-row>
  48. </div>
  49. <div class="section" v-if="courseViewType == 2">
  50. <div v-for="(item, index) in toolsPackage" :key="index">
  51. <el-row class="option-row" style="padding-top: 0;" @click.native="onTrainChange(item)">
  52. <el-col :span="18">
  53. <i class="check_default" :class="[item.isStatus ? 'check_active' : '']"></i>
  54. <span style="display: flex; align-items: center;">
  55. <template>{{ item.name }}</template>
  56. </span>
  57. </el-col>
  58. <el-col :span="6">
  59. <span style="color: #1A1A1A" v-if="courseViewType == 2">¥{{ cloudTeacherFee | moneyFormat }}</span>
  60. </el-col>
  61. </el-row>
  62. <el-row style="padding-left: .24rem;" v-if="item.childGoodsList && courseViewType == 2">
  63. <el-col v-for="(child, index) in item.childGoodsList" :key="child.name">
  64. <span style="font-size: 12px; color: #808080;">{{ child.name }} {{item.childGoodsList.length - 1 == index ? '' : '、'}}</span>
  65. </el-col>
  66. </el-row>
  67. </div>
  68. </div>
  69. <!-- 可选课程信息集合 -->
  70. <div class="section" v-if="courseViewType == 0">
  71. <el-row class="title-row" v-if="courseViewType == 0">
  72. <el-col :span="12">课程类型</el-col>
  73. <!-- <el-col :span="5" :offset="1" style="text-align: right;">原价</el-col> -->
  74. <el-col :span="11" :offset="1" style="text-align: right;">现价</el-col>
  75. </el-row>
  76. <el-row class="option-row" v-for="(item, index) in courseInfo" :key="index" @click.native="onCourseChange(item)">
  77. <el-col :span="12">
  78. <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>
  79. </el-col>
  80. <!-- <el-col :span="6">
  81. <del style="color: #AAA; font-size: 12px;">¥{{ item.courseOriginalPrice | moneyFormat }}</del>
  82. </el-col> -->
  83. <el-col :span="11" :offset="1">
  84. <span style="color: #1A1A1A">¥{{ item.courseCurrentPrice | moneyFormat }}</span>
  85. </el-col>
  86. </el-row>
  87. </div>
  88. </template>
  89. <div class="section" v-if="courseInfo && courseInfo.length > 0 && isClickStatus && courseViewType == 1">
  90. <h2 class="title">{{ '乐团课程' }}</h2>
  91. <el-row class="title-row">
  92. <el-col :span="12">课程类型</el-col>
  93. <!-- <el-col :span="5" :offset="1" style="text-align: right;">原价</el-col> -->
  94. <el-col :span="11" :offset="1" style="text-align: right;">现价</el-col>
  95. </el-row>
  96. <!-- 可选课程信息集合 -->
  97. <template v-for="(item, index) in courseInfo">
  98. <el-row class="option-row" :key="index" @click.native="onCourseChange(item)" v-if="item.isStudentOptional">
  99. <el-col :span="12">
  100. <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>
  101. </el-col>
  102. <!-- <el-col :span="6">
  103. <del style="color: #AAA; font-size: .12rem;">¥{{ item.courseOriginalPrice | moneyFormat }}</del>
  104. </el-col> -->
  105. <el-col :span="11" :offset="1">
  106. <span style="color: #1A1A1A">¥{{ item.courseCurrentPrice | moneyFormat }}</span>
  107. </el-col>
  108. </el-row>
  109. </template>
  110. </div>
  111. <h2 class="titles" v-if="instrumentResultList && instrumentResultList.length > 0">
  112. <img :src="trainSmallBg" />
  113. <span>乐器</span>
  114. </h2>
  115. <div class="section" v-if="instrumentResultList && instrumentResult.length > 0">
  116. <div v-for="(i, index) in instrumentResultList" :key="index">
  117. <template v-if="leBaoStatus && i[0].kitType == 'owned'">
  118. <!-- <el-row class="title-row">
  119. <el-col :span="12" :offset="1">服务项目</el-col>
  120. <el-col :span="11" style="text-align: right;">现价</el-col>
  121. </el-row> -->
  122. <el-row class="option-row" style="padding-bottom: 10px; margin-top: 8px; border-top: 1px solid #F0F0F0;" @click.native="onLeBao">
  123. <el-col :span="12">
  124. <i class="check_default" :class="[ buyMaintenance ? 'check_active' : '' ]"></i>乐器保养(一年)<el-icon style="padding-left: 0;" name="question" @click.stop.native="onQuestions('instrument')" />
  125. </el-col>
  126. <!-- <el-col :span="6">
  127. <del style="color: #AAA; font-size: .12rem;">¥{{ 500 | moneyFormat }}</del>
  128. </el-col> -->
  129. <el-col :span="11" :offset="1">
  130. <span style="color: #1A1A1A">¥{{ 300 | moneyFormat }}</span>
  131. </el-col>
  132. </el-row>
  133. </template>
  134. <el-row class="title-row">
  135. <el-col :span="12">
  136. <template v-if="i[0]['kitType'] == 'GROUP'">
  137. 团购乐器{{ courseViewType == 2 ? '(赠送辅件一套)' : null }}
  138. </template>
  139. <template v-if="i[0]['kitType'] == 'LEASE'">
  140. 乐器租赁{{ courseViewType == 2 ? '(请自行购买辅件)' : null }}
  141. </template>
  142. <template v-if="i[0]['kitType'] == 'FREE'">
  143. 免费乐器{{ courseViewType == 2 ? '(请自行购买辅件)' : null }}
  144. </template>
  145. <template v-if="i[0]['kitType'] == 'owned'">
  146. 自备乐器{{ courseViewType == 2 ? '(请自行购买辅件)' : null }}
  147. </template>
  148. </el-col>
  149. <el-col :span="5" :offset="1" style="text-align: right;">
  150. <template v-if="['GROUP', 'LEASE', 'FREE'].includes(i[0]['kitType'])">原价</template>
  151. </el-col>
  152. <el-col :span="5" :offset="1" style="text-align: right;">
  153. <template v-if="['GROUP', 'FREE'].includes(i[0]['kitType'])">现价</template>
  154. <template v-if="i[0]['kitType'] == 'LEASE'">租赁押金</template>
  155. </el-col>
  156. </el-row>
  157. <div v-for="(con, index) in i" :key="index" @click="instrumentF(con)">
  158. <el-row class="option-row">
  159. <el-col :span="12">
  160. <i class="check_default" :class="[ con.checked ? 'check_active' : '' ]"></i>
  161. <div>
  162. {{ con.name }}
  163. <div v-if="con.goodsList" style="font-size: 12px; color: #808080">
  164. {{ con.goodsList[0].specification }}
  165. </div>
  166. </div>
  167. </el-col>
  168. <el-col :span="6">
  169. <del style="color: #808080; font-size: 12px;" v-if="con.kitType != 'owned'">¥{{ con.marketPrice | moneyFormat }}</del>
  170. </el-col>
  171. <el-col :span="6">
  172. <span style="color: #1A1A1A" v-if="(con.kitType == 'LEASE')">¥{{ Number((con.depositFee - con.coupon).toFixed(2)) | moneyFormat }}</span>
  173. <span style="color: #1A1A1A" v-if="con.kitType == 'FREE'">¥{{ 0 | moneyFormat }}</span>
  174. <span style="color: #1A1A1A" v-if="con.kitType == 'GROUP'">¥{{ Number((con.price - con.coupon).toFixed(2)) | moneyFormat }}</span>
  175. </el-col>
  176. </el-row>
  177. <el-row style="padding: 8px 0px 8px 24px; border-top: 1px solid rgb(240, 240, 240);" v-if="con.childGoodsList && con.kitType == 'GROUP'">
  178. <el-col :span="24" style="font-size: 14px; color: #1A1A1A; padding-bottom: 3px">赠送辅件</el-col>
  179. <el-col>
  180. <span style="font-size: 12px; color: #808080;">
  181. {{ con.childGoodsNames }}
  182. </span>
  183. </el-col>
  184. </el-row>
  185. </div>
  186. </div>
  187. </div>
  188. <h2 class="titles" v-if="accessOries.length > 0 && accessIsShowStatus">
  189. <img :src="trainSmallBg" />
  190. <span>辅件</span>
  191. </h2>
  192. <div class="section" v-if="accessOries.length > 0 && accessIsShowStatus" key="accessOries">
  193. <el-row class="title-row">
  194. <el-col :span="12">服务项目</el-col>
  195. <el-col :span="5" :offset="1" style="text-align: right;">原价</el-col>
  196. <el-col :span="5" :offset="1" style="text-align: right;">现价</el-col>
  197. </el-row>
  198. <div v-for="(instr, index) in accessOries" :key="index">
  199. <el-row class="option-row" @click.native="onAuxiliarie(instr)">
  200. <el-col :span="12">
  201. <i class="check_default" :class="[ instr.checked ? 'check_active' : '' ]"></i>{{ instr.name }}
  202. </el-col>
  203. <el-col :span="6">
  204. <del style="color: #808080; font-size: 12px;">¥{{ instr.goodsList[0] ? instr.goodsList[0].marketPrice : 0 | moneyFormat }}</del>
  205. </el-col>
  206. <el-col :span="6">
  207. <span style="color: #1A1A1A" v-if="instr.price == 0">免费</span>
  208. <span style="color: #1A1A1A" v-else>¥{{ instr.price | moneyFormat }}</span>
  209. </el-col>
  210. </el-row>
  211. <el-row style="padding-left: 24px;" v-if="instr.childGoodsList">
  212. <el-col>
  213. <span v-for="(child, index) in instr.childGoodsList" :key="child.id" style="font-size: 12px; color: #808080;">{{ child.name }} {{instr.childGoodsList.length - 1 == index ? '' : ','}}</span>
  214. </el-col>
  215. </el-row>
  216. </div>
  217. </div>
  218. <div class="buy">
  219. <div class="price">
  220. <p class="oldprice">
  221. <del class="text">原价</del>
  222. <del style=" font-size: 13px;">¥{{ orderInfo.marketPrice | moneyFormat }}</del>
  223. </p>
  224. <p class="now_price">
  225. <span class="text">仅需支付</span>
  226. <span style="font-weight: bold">¥{{ needPrice | moneyFormat }}</span>
  227. </p>
  228. </div>
  229. <a class="btn-submit">购买</a>
  230. </div>
  231. <el-dialog
  232. title="视屏"
  233. :visible.sync="videoStatus"
  234. :modal-append-to-body="false"
  235. :append-to-body="true"
  236. class="videoDialog"
  237. width="30%">
  238. <video style="width: 100%;" v-if="videoStatus" controls="controls" class="ql-video" :src="'https://daya.ks3-cn-beijing.ksyun.com/202105/SWmqmvW.mp4'" :poster="require('../../../assets/images/musicGroup/video_bg.png')" />
  239. </el-dialog>
  240. </div>
  241. </template>
  242. <script>
  243. import { permission } from '@/utils/directivePage'
  244. import { getSubjectGoodsAndInfoPreview, getType } from '@/api/buildTeam'
  245. import dayjs from 'dayjs'
  246. const paymentPatternType = {
  247. 0: '按月',
  248. 1: '按学期',
  249. 2: '一次性'
  250. }
  251. export default {
  252. props: ["subjectId", "calenderId"],
  253. data() {
  254. const query = this.$route.query
  255. return {
  256. videoStatus: false,
  257. trainBg: require('../../../assets/images/musicGroup/yunTrain_bg.png'),
  258. trainSmallBg: require('../../../assets/images/musicGroup/yunTrain_small_bg.png'),
  259. musicGroupId: query.id,
  260. result: {}, // 返回结果
  261. instrument: {}, // 乐器类型
  262. baseInfo: {}, // 其它类
  263. money: 580,
  264. balance: 0, // 余额
  265. needPrice: 0, // 还需支付
  266. payType: false, // 是否余额支付
  267. cloudTeacherFee: 0, // 云教练费用
  268. cloudTeacherPlusFee: 0, // 云教练+
  269. orderInfo: {
  270. marketPrice: 0,
  271. amount: 0, // 现价总金额
  272. groupPurchasePrice: 0, // 现价
  273. goodsGroupIds: null,
  274. goodsIds: null,
  275. contractGoodsIds: null, // 选中所有商品ID
  276. couponPrice: 0, //
  277. musicClassFee: 0, // 课程现价
  278. musicMarketClassFee: 0, // 课程原价
  279. accessPrice: 0, // 辅件现价
  280. accessMarketPrice: 0, // 辅件原价
  281. goodsPrice: 0, // 乐器现价
  282. goodsMarketPrice: 0, // 乐器原价
  283. }, // 金额列表,金额计算
  284. toolsPackage: [{
  285. isStatus: true,
  286. name: '练习系统(六个月)',
  287. childGoodsList: [{ name: '' }],
  288. }], // 学习工具包
  289. courseInfo: [], // 课程信息
  290. courseShowInfo: [], // 课程信息显示用
  291. musicGroupSubject: null, // 基本信息
  292. instrumentResult: [], //乐器
  293. accessOries: [], // 辅件(打包)
  294. agreeStatus: true,
  295. authStatus: false,
  296. buyList: [], // 信息列表
  297. ids: [],
  298. instrumentResultList: [],
  299. chargeTypeId: null,
  300. paymentStatus: null,
  301. paymentPattern: null,
  302. serviceValidDate: null, // 服务时间
  303. courseShowStatus: false,
  304. chargeTypeList: [],
  305. chargeTypeName: null,
  306. courseViewType: 0, // 收费模式,0 课程显示,1 AMR系统 2会员
  307. leBaoStatus: false,
  308. buyMaintenance: false, // 是否开启乐保
  309. isClickStatus: false,
  310. accessStatus: false, // 是否有辅件乐保
  311. accessIsShowStatus: false, // 是否显示辅件 true 显示, false 不显示
  312. };
  313. },
  314. mounted() {
  315. this.__init()
  316. },
  317. methods: {
  318. async __init() {
  319. // 获取数据
  320. let params = {
  321. musicGroupId: this.musicGroupId,
  322. subjectId: this.subjectId,
  323. calenderId: this.calenderId
  324. }
  325. await getType().then(res => {
  326. let result = res.data
  327. if(res.code == 200) {
  328. this.chargeTypeList = result.rows || []
  329. }
  330. })
  331. await getSubjectGoodsAndInfoPreview(params).then(res => {
  332. let result = res
  333. if (result.code == 200) {
  334. let tempResult = result.data
  335. this.courseViewType = tempResult.musicGroup.courseViewType || 0
  336. this.cloudTeacherFee = tempResult.cloudTeacherFee || 0
  337. this.cloudTeacherPlusFee = tempResult.cloudTeacherPlusFee || 0
  338. this.paymentPattern = 2
  339. if(tempResult.musicGroupPaymentCalender) {
  340. this.paymentPattern = tempResult.musicGroupPaymentCalender.paymentPattern
  341. this.serviceValidDate = dayjs(tempResult.musicGroupPaymentCalender.paymentValidStartDate).format('YYYY/MM/DD') + '~' + dayjs(tempResult.musicGroupPaymentCalender.paymentValidEndDate).format('YYYY/MM/DD')
  342. }
  343. let tempInfo = tempResult.musicGroupPaymentCalender? tempResult.musicGroupPaymentCalender.musicGroupPaymentCalenderCourseSettingsList : null
  344. let memberPrivilegesItemList = tempResult.memberPrivilegesItemList ? tempResult.memberPrivilegesItemList : []
  345. let tempMember = []
  346. memberPrivilegesItemList.forEach(member => {
  347. if(member.memberPrivilegesItems && member.memberPrivilegesItems.length > 0) {
  348. member.memberPrivilegesItems.forEach(item => {
  349. tempMember.push(item.name)
  350. })
  351. }
  352. })
  353. this.toolsPackage = [{
  354. isStatus: true,
  355. name: '练习系统(六个月)',
  356. childGoodsList: [{ name: tempMember.join('、') }]
  357. }]
  358. // 判断是否有课程
  359. if (tempInfo && tempInfo.length > 0) {
  360. let tempCourse = {
  361. courseCurrentPrice: 0,
  362. courseOriginalPrice: 0,
  363. courseType: null,
  364. name: '器乐练习系统'
  365. }
  366. tempInfo.forEach(info => {
  367. if(!info.isStudentOptional) {
  368. this.courseShowStatus = true
  369. tempCourse = {
  370. courseCurrentPrice: (info.courseCurrentPrice + tempCourse.courseCurrentPrice),
  371. courseOriginalPrice: (info.courseCurrentPrice + tempCourse.courseCurrentPrice),
  372. courseType: 'PROJECT',
  373. isStatus: true,
  374. name: '器乐练习系统'
  375. }
  376. }
  377. })
  378. this.courseShowInfo = [tempCourse]
  379. // 默认课程都选中
  380. this.courseInfo = tempInfo
  381. } else {
  382. // 判断是否有课程,如果没有课程则默认显示0
  383. this.courseInfo = [{
  384. id: -1,
  385. courseCurrentPrice: 0,
  386. courseOriginalPrice: 0,
  387. isStudentOptional: false,
  388. courseType: 'MUSIC'
  389. }]
  390. }
  391. this.isClickStatus = false
  392. this.courseInfo.forEach(item => {
  393. if(item.isStudentOptional) {
  394. item.isStatus = false
  395. this.isClickStatus = true
  396. } else {
  397. item.isStatus = true
  398. }
  399. })
  400. // console.log(this.isClickStatus)
  401. this.musicGroupSubject = tempResult.musicGroupSubjectPlan
  402. let instrumentInfo = {}
  403. let tempInstrument = []
  404. tempResult.musicGroupSubjectGoodsGroupList.forEach((item) => {
  405. if (item.type == "INSTRUMENT") {
  406. // 获取乐器所有提供方式
  407. let KGPTJ = item.kitGroupPurchaseTypeJson ? JSON.parse(item.kitGroupPurchaseTypeJson) : {}
  408. for (let single in KGPTJ) {
  409. let tempItem = Object.assign({}, item) // 深拷贝
  410. tempItem.marketPrice = tempItem.goodsList[0].marketPrice
  411. tempItem.kitType = single // 优惠模式
  412. tempItem.coupon = KGPTJ[single] // 优惠金额
  413. if (instrumentInfo.id) {
  414. tempItem.checked = false
  415. if (single == 'GROUP') { // 团购
  416. if ((instrumentInfo.kitType == 'GROUP' && instrumentInfo.price < tempItem.price) || instrumentInfo.kitType ==
  417. 'LEASE' || instrumentInfo.kitType == 'FREE') {
  418. this.instrumentResult.forEach(instrRes => {
  419. instrRes.checked = false
  420. })
  421. tempItem.checked = true
  422. instrumentInfo = {
  423. id: tempItem.id,
  424. price: tempItem.price,
  425. kitType: single
  426. }
  427. }
  428. } else if (single == 'LEASE') { // 租赁
  429. if (instrumentInfo.kitType == 'LEASE' && instrumentInfo.price < tempItem.price) {
  430. this.instrumentResult.forEach(instrRes => {
  431. instrRes.checked = false
  432. })
  433. tempItem.checked = true
  434. instrumentInfo = {
  435. id: tempItem.id,
  436. price: tempItem.price,
  437. kitType: single
  438. }
  439. }
  440. } else if (single == 'FREE') { // 免费
  441. if (instrumentInfo.kitType == 'FREE' && instrumentInfo.price < tempItem.price) {
  442. this.instrumentResult.forEach(instrRes => {
  443. instrRes.checked = false
  444. })
  445. tempItem.checked = true
  446. instrumentInfo = {
  447. id: tempItem.id,
  448. price: tempItem.price,
  449. kitType: single
  450. }
  451. }
  452. }
  453. } else {
  454. tempItem.checked = true
  455. instrumentInfo = {
  456. id: tempItem.id,
  457. price: tempItem.price,
  458. kitType: single
  459. }
  460. }
  461. let childGoodsNameList = []
  462. if(tempItem.childGoodsList && tempItem.childGoodsList.length > 0) {
  463. tempItem.childGoodsList.forEach(child => {
  464. if(child.type != "INSTRUMENT" && child.type != "OTHER") {
  465. childGoodsNameList.push(child.name)
  466. }
  467. })
  468. tempItem.childGoodsNames = childGoodsNameList.join('、')
  469. }
  470. this.instrumentResult.push(tempItem)
  471. tempInstrument.push(tempItem)
  472. }
  473. } else if (item.type == "ACCESSORIES") {
  474. item.checked = true
  475. this.accessOries.push(item)
  476. }
  477. })
  478. // 添加自备选项
  479. if (this.instrumentResult.length > 0) {
  480. // this.instrumentResult.push({
  481. // id: -1,
  482. // kitType: 'owned',
  483. // name: '自备',
  484. // price: 0,
  485. // marketPrice: 0,
  486. // checked: false
  487. // })
  488. let owned = {
  489. id: -1,
  490. kitType: 'owned',
  491. name: '自备乐器',
  492. price: 0,
  493. marketPrice: 0,
  494. checked: false
  495. }
  496. tempInstrument.push(owned)
  497. this.instrumentResult.push(owned)
  498. let sorted = this.groupBy(tempInstrument, (item) => {
  499. return [item.kitType];
  500. });
  501. console.log(sorted)
  502. this.instrumentResultList = sorted
  503. this.chargeTypeList.forEach(item => {
  504. if(item.id == tempResult.musicGroup.chargeTypeId) {
  505. this.chargeTypeName = item.description
  506. }
  507. })
  508. // 判断辅件是否有乐器维护(编号固定76)
  509. let accessStatus = false // 是否有乐保
  510. this.accessOries.forEach(item => {
  511. // 判断子商品是否有乐保
  512. if(item.childGoodsList && item.childGoodsList.length > 0) {
  513. item.childGoodsList.forEach(child => {
  514. if(child.id == 76) {
  515. accessStatus = true
  516. }
  517. })
  518. }
  519. if(item.goodsIdList == 76) {
  520. accessStatus = true
  521. }
  522. })
  523. this.accessStatus = accessStatus
  524. // 所有打击乐声部没有乐保【23】
  525. if(this.subjectId == 23) {
  526. this.accessStatus = true
  527. accessStatus = true
  528. }
  529. // 乐保服务初始化
  530. this.instrumentResult.forEach(item => {
  531. if(item.checked && item.kitType != "owned" && !accessStatus) {
  532. this.leBaoStatus = true
  533. this.buyMaintenance = true
  534. }
  535. if(item.checked && item.kitType != "GROUP" && (this.courseViewType == 2)) {
  536. this.accessIsShowStatus = true
  537. }
  538. if(this.courseViewType != 2) {
  539. this.accessIsShowStatus = true
  540. }
  541. })
  542. }
  543. }
  544. // 初始化计算金额
  545. this.calcPrice()
  546. })
  547. },
  548. onLeBao() {
  549. this.buyMaintenance = !this.buyMaintenance
  550. this.calcPrice()
  551. },
  552. groupBy(array, f) {
  553. var groups = {};
  554. array.forEach(function (o) {
  555. var group = JSON.stringify(f(o));
  556. groups[group] = groups[group] || [];
  557. groups[group].push(o);
  558. });
  559. return Object.keys(groups).map(function (group) {
  560. return groups[group];
  561. });
  562. },
  563. onQuestions(type) {
  564. if(type == 'amr') {
  565. this.$alert(`<b>革命性的“AMR器乐练习系统”</b><br />它的诞生是基于世界上最优秀的华人管乐指导专家唐嘉宏先生的教育理念,创新开发的一种新型“音乐感官植入程序”,这个程序抛弃了传统的“数线式识谱、机械式节奏、死记式乐理”,它营造出沉浸式可变速演奏过程,采用画面与音乐刺激序列组合而成的特定场景,在趣味性挑战的反复刺激中逐步促进器乐演奏的三核心:“音质→音准→音型”,从而达成演奏各环节水准的均匀提高,产生永久性条件反射式大脑记忆,将多板块知识融会贯通,让抽象的音乐知识刻入脑海里!<br /><br /><b>本练习系统的特点:</b><br /> 1.轻松快速掌握要点,让练习者沉浸其中,远离枯燥!<br /> 2.不假思索就能瞬间唤起反射式记忆,演奏识谱不再慢吞吞!<br /> 3.真正的实践记忆,摆脱纸上谈兵,与实际演奏紧密结合!<br />4.思维+肌肉的双重强化!无缝整合复习系统!<br /> 5.每条练习都经过严谨的编曲,你以为你只是在练习旋律线?其实是整个乐团在为你伴奏!`, 'AMR器乐练习系统', {
  566. confirmButtonText: '确定',
  567. dangerouslyUseHTMLString: true,
  568. callback: action => {
  569. }
  570. });
  571. } else if(type == 'instrument') {
  572. this.$alert(`<p style="text-align: justify">1.乐器保养是管乐迷针对乐团学员提供的乐器检查、保养及维修优惠特权;<br />2.该特权为包年制,从开通特权之日起365天内有效;<br />3.特权用户可享受管乐迷提供专业的高级乐器维修技师一年不低于两次下校检查乐器使用情况;<br />4.特权有效期内凭该特权绑定的乐器编号可享受保养人工费减免、非返厂维修人工费优惠等特权;<br />感谢您的信任和支持!</p>`, '乐器保养特权', {
  573. confirmButtonText: '确定',
  574. dangerouslyUseHTMLString: true,
  575. callback: action => {
  576. }
  577. });
  578. }
  579. },
  580. onCourseChange(item) {
  581. // 判断用户是否可以选择
  582. if (item.isStudentOptional) {
  583. item.isStatus = !item.isStatus
  584. this.calcPrice()
  585. }
  586. },
  587. onTrainChange(item) {
  588. // 练习系统可选
  589. // console.log(item)
  590. item.isStatus = !item.isStatus
  591. let courseShowInfo = this.courseShowInfo
  592. courseShowInfo.forEach(course => {
  593. course.isStatus = item.isStatus
  594. })
  595. let cif = this.courseInfo
  596. cif.forEach(c => {
  597. if(!c.isStudentOptional) {
  598. c.isStatus = item.isStatus
  599. }
  600. })
  601. this.calcPrice()
  602. },
  603. onClickCheckbox() { //是否使用余额支付
  604. if (!this.payType) {
  605. if (this.orderInfo.amount >= this.balance) {
  606. this.needPrice = Number((this.orderInfo.amount - this.balance).toFixed(2))
  607. } else {
  608. this.needPrice = 0
  609. }
  610. } else {
  611. this.needPrice = this.orderInfo.amount
  612. }
  613. this.payType = !this.payType
  614. },
  615. onAuxiliarie(item) {
  616. // 辅件切换状态
  617. item.checked = !item.checked
  618. // 重新计算金额
  619. this.calcPrice()
  620. },
  621. instrumentF(item) {
  622. // 乐器切换状态
  623. this.instrumentResult.forEach(item => {
  624. item.checked = false
  625. })
  626. item.checked = true
  627. if(!this.accessStatus) {
  628. if(item.kitType != "owned") {
  629. this.leBaoStatus = true
  630. this.buyMaintenance = true
  631. } else {
  632. this.leBaoStatus = false
  633. this.buyMaintenance = false
  634. }
  635. }
  636. // 云教练且选择自备则不显示辅件
  637. if(this.courseViewType == 2) {
  638. if(item.kitType != "GROUP") {
  639. this.accessIsShowStatus = true
  640. } else {
  641. this.accessIsShowStatus = false
  642. }
  643. }
  644. // 重新计算金额
  645. this.calcPrice()
  646. },
  647. calcPrice() {
  648. let buyList = [],
  649. ids = []
  650. let amount = 0,
  651. marketPrice = 0,
  652. goodsPrice = 0, // 乐器两现价
  653. goodsMarketPrice = 0, // 乐器原价
  654. goodsGroupIds = {},
  655. courseKeys = [],
  656. couponPrice = 0, // 优惠金额
  657. goodsIds = [],
  658. tempCourseFee = 0,
  659. musicClassFee = 0,
  660. musicMarketClassFee = 0,
  661. tempAccessPrice = 0,
  662. tempAccessMarketPrice = 0,
  663. tempGroupRemissionCourseFee = 0, // 乐团减免费用
  664. contractGoodsIds = '' // 合同所需要的商品Id (只需要乐器编号)
  665. // 课程
  666. let mgs = this.musicGroupSubject
  667. let csi = this.courseInfo
  668. // 加上判断是否有课程信息
  669. // 如果为云教练系统则,没有课程费用
  670. if((this.courseViewType == 2) && this.toolsPackage[0].isStatus) {
  671. let tempFee = this.cloudTeacherFee
  672. musicClassFee += parseFloat(tempFee)
  673. marketPrice += parseFloat(tempFee)
  674. }
  675. if (mgs) {
  676. let tempCourse = this.courseShowInfo
  677. if (tempCourse.length > 0 && this.courseViewType == 1) {
  678. let m = 0
  679. tempCourse.forEach(item => {
  680. m += parseFloat(item.courseCurrentPrice)
  681. // 不可选的课程才会减免课程费用
  682. // if (!item.isStudentOptional) {
  683. // tempGroupRemissionCourseFee += parseFloat(item.courseCurrentPrice)
  684. // }
  685. });
  686. marketPrice += parseFloat(m)
  687. buyList.unshift({
  688. name: this.chargeTypeName,
  689. type: paymentPatternType[this.paymentPattern],
  690. price: Number((m).toFixed(2))
  691. })
  692. }
  693. csi.forEach(item => {
  694. if (item.isStatus) {
  695. if(this.courseViewType != 2) {
  696. musicClassFee += parseFloat(item.courseCurrentPrice)
  697. }
  698. // marketPrice += parseFloat(item.courseOriginalPrice)
  699. if (item.id > 0) {
  700. courseKeys.push(item.id)
  701. }
  702. // 不可选的课程才会减免课程费用
  703. if (!item.isStudentOptional) {
  704. tempGroupRemissionCourseFee += parseFloat(item.courseCurrentPrice)
  705. } else {
  706. marketPrice += parseFloat(item.courseCurrentPrice)
  707. }
  708. if(this.courseViewType == 0 && !item.isStudentOptional) {
  709. marketPrice += parseFloat(item.courseCurrentPrice)
  710. }
  711. }
  712. })
  713. // }
  714. }
  715. // 乐器
  716. let ir = this.instrumentResult
  717. if (ir.length > 0) {
  718. ir.forEach(item => {
  719. if (item.checked) {
  720. if (item.name != '自备乐器') {
  721. contractGoodsIds += item.goodsIdList
  722. }
  723. if (item.kitType == 'FREE') {
  724. amount += 0
  725. couponPrice = 0 // 优惠金额
  726. } else if (item.kitType == 'LEASE') {
  727. couponPrice = item.coupon // 优惠金额
  728. if (item.name != '自备乐器') {
  729. amount += item.depositFee
  730. goodsPrice += item.depositFee
  731. } else {
  732. amount += 0
  733. }
  734. } else {
  735. amount += parseFloat(item.price)
  736. goodsPrice += parseFloat(item.price)
  737. couponPrice = item.coupon ? item.coupon : 0
  738. }
  739. if (item.kitType == 'LEASE') {
  740. if (item.name != '自备乐器') {
  741. marketPrice += parseFloat(item.marketPrice)
  742. goodsMarketPrice += item.depositFee
  743. }
  744. } else {
  745. marketPrice += parseFloat(item.marketPrice)
  746. goodsMarketPrice += parseFloat(item.marketPrice)
  747. }
  748. // item.id ? goodsGroupIds[item.id] : null
  749. if (item.id) {
  750. goodsGroupIds[item.id] = item.kitType
  751. }
  752. if (item.kitType == 'LEASE') {
  753. buyList.push({
  754. name: item.name,
  755. type: '租赁',
  756. price: item.depositFee
  757. })
  758. } else if (item.kitType == 'GROUP') {
  759. // && parseFloat(item.price - couponPrice) > 0
  760. buyList.push({
  761. name: item.name,
  762. type: '团购',
  763. price: parseFloat(item.price - couponPrice)
  764. })
  765. } else if(item.kitType == 'FREE') {
  766. buyList.push({
  767. name: item.name,
  768. type: '免费',
  769. price: 0
  770. })
  771. }
  772. // 是否减免课程费用,必须团购,并且开启了减免课程费用
  773. if(item.kitType == 'GROUP' && item.groupRemissionCourseFee == 1) {
  774. musicClassFee = parseFloat(musicClassFee - tempGroupRemissionCourseFee)
  775. }
  776. }
  777. })
  778. }
  779. if(this.leBaoStatus && this.buyMaintenance) {
  780. // 判断是否使用乐保
  781. // marketPrice += 500
  782. marketPrice += 300
  783. amount += 300
  784. buyList.push({
  785. name: '乐器保养',
  786. time: dayjs().format('YYYY/MM/DD') + '~' + dayjs().add(365, 'day').format('YYYY/MM/DD'),
  787. type: '包年',
  788. price: 300
  789. })
  790. }
  791. amount += parseFloat(tempCourseFee + musicClassFee)
  792. if (parseFloat(tempCourseFee + musicClassFee) > 0 && this.courseViewType == 0) {
  793. buyList.unshift({
  794. name: '乐团课',
  795. type: paymentPatternType[this.paymentPattern],
  796. price: Number((tempCourseFee + musicClassFee).toFixed(2))
  797. })
  798. }
  799. // 辅件
  800. if (this.accessOries.length > 0) {
  801. this.accessOries.forEach(item => {
  802. if (item.checked && this.accessIsShowStatus) {
  803. tempAccessPrice += parseFloat(item.price)
  804. amount += parseFloat(item.price)
  805. if (item.goodsList && item.goodsList.length > 0) {
  806. item.goodsList.forEach(childGoods => {
  807. tempAccessMarketPrice += parseFloat(childGoods.marketPrice)
  808. marketPrice += parseFloat(childGoods.marketPrice)
  809. })
  810. }
  811. goodsGroupIds[item.id] = 'ACCESSORIES'
  812. buyList.push({
  813. name: item.name,
  814. type: '团购',
  815. price: item.price
  816. })
  817. }
  818. })
  819. // if (tempAccessPrice > 0) {
  820. // buyList.push({
  821. // name: '辅件',
  822. // type: '团购',
  823. // price: tempAccessPrice
  824. // })
  825. // }
  826. }
  827. let tempGroupPurchasePrice = amount
  828. // 判断减去优惠金额,是否大于0(这里有可能出现负数)
  829. if (amount - couponPrice >= 0) {
  830. amount = Number((amount - couponPrice).toFixed(2))
  831. this.errorPrice = false
  832. } else {
  833. amount = 0
  834. this.errorPrice = true // 订单金额是否异常
  835. }
  836. // if (amount - tempCourseFee - musicClassFee > 0) {
  837. // ids.push(1, 2)
  838. // }
  839. // if (parseFloat(tempCourseFee + musicClassFee) > 0) {
  840. // ids.push(3, 4, 5)
  841. // }
  842. this.ids = ids
  843. // 计算是否使用过余额
  844. if (this.payType) {
  845. let tempPrice = Number((amount - this.balance).toFixed(2))
  846. if (tempPrice > 0) {
  847. this.needPrice = tempPrice
  848. } else {
  849. this.needPrice = 0
  850. }
  851. } else {
  852. this.needPrice = Number(amount.toFixed(2))
  853. }
  854. this.buyList = buyList
  855. this.orderInfo = {
  856. amount: Number(amount.toFixed(2)),
  857. marketPrice: Number(marketPrice.toFixed(2)),
  858. groupPurchasePrice: tempGroupPurchasePrice,
  859. couponPrice: couponPrice,
  860. goodsGroupIds: goodsGroupIds,
  861. goodsIds: goodsIds.join(','),
  862. contractGoodsIds: contractGoodsIds,
  863. courseKeys: courseKeys,
  864. musicClassFee: musicClassFee,
  865. musicMarketClassFee: musicMarketClassFee,
  866. accessMarketPrice: tempAccessMarketPrice,
  867. accessPrice: tempAccessPrice,
  868. goodsPrice: goodsPrice,
  869. goodsMarketPrice: goodsMarketPrice
  870. }
  871. },
  872. permission(str){
  873. return permission(str)
  874. }
  875. },
  876. };
  877. </script>
  878. <style lang="less" scoped>
  879. .noticeInfo {
  880. margin: 0 12px;
  881. position: relative;
  882. background: #fff;
  883. padding: 10px 12px;
  884. font-size: 14px;
  885. color: #808080;
  886. border-radius: 10px;
  887. line-height: 1.5;
  888. }
  889. .yunTrain {
  890. position: relative;
  891. font-size: 0;
  892. margin: 0 12px;
  893. img {
  894. width: 100%;
  895. }
  896. .toolText {
  897. position: absolute;
  898. top: 0;
  899. left: 0;
  900. height: 100%;
  901. display: flex;
  902. flex-direction: column;
  903. justify-content: center;
  904. padding: 0 10px;
  905. }
  906. .toolTitle {
  907. font-size: 16px;
  908. color: #C1735D;
  909. display: flex;
  910. align-items: center;
  911. padding-top: 2px;
  912. padding-bottom: 2px;
  913. .icon_video {
  914. margin-left: 5px;
  915. display: inline-block;
  916. width: 16px;
  917. height: 16px;
  918. background: url('../../../assets/images/musicGroup/video_btn.png');
  919. background-size: contain;
  920. }
  921. }
  922. .toolDate {
  923. font-size: 12px;
  924. color: #808080;
  925. }
  926. }
  927. .title {
  928. font-size: 18px;
  929. line-height: 28px;
  930. font-weight: bold;
  931. padding-bottom: 5px;
  932. padding: 12px;
  933. display: flex;
  934. align-items: center;
  935. margin-bottom: 0;
  936. &::before {
  937. content: " ";
  938. width: 4px;
  939. height: 15px;
  940. background: #01C1B5;
  941. display: inline-block;
  942. margin-right: 7px;
  943. border-radius: 8px;
  944. }
  945. }
  946. .titles {
  947. position: relative;
  948. font-size: 0;
  949. margin: 0 12px;
  950. img {
  951. width: 100%;
  952. }
  953. & > span {
  954. position: absolute;
  955. top: 0;
  956. left: 0;
  957. height: 100%;
  958. display: flex;
  959. flex-direction: column;
  960. justify-content: center;
  961. padding: 0 10px;
  962. font-size: 16px;
  963. color: #C1735D;
  964. font-weight: 500;
  965. }
  966. }
  967. .section {
  968. margin: 0 12px;
  969. padding: 12px 12px 10px;
  970. background: #fff;
  971. margin-bottom: 12px;
  972. border-bottom-left-radius: 10px;
  973. border-bottom-right-radius: 10px;
  974. }
  975. .disabled {
  976. opacity: 0.5;
  977. .check_active {
  978. opacity: .5;
  979. }
  980. }
  981. .buy {
  982. height: 60px;
  983. display: flex;
  984. align-items: center;
  985. padding: 0 20px;
  986. border-top: 1px solid #ffe9e9e9;
  987. color: #000000;
  988. font-size: 12px;
  989. background: #fff;
  990. .price {
  991. flex: 1;
  992. font-size: 16px;
  993. }
  994. font-size: 16px;
  995. span {
  996. color: #fa101d;
  997. }
  998. .text {
  999. font-size: 12px;
  1000. width: 60px;
  1001. display: inline-block;
  1002. color: #000;
  1003. }
  1004. del {
  1005. color: #b5b5b5;
  1006. &.text {
  1007. color: #b5b5b5;
  1008. }
  1009. }
  1010. .btn-submit {
  1011. display: inline-block;
  1012. font-size: 18px;
  1013. color: #fff;
  1014. background: #01C1B5;
  1015. border-radius: 100px;
  1016. padding: 8px 36px;
  1017. }
  1018. }
  1019. .iframe {
  1020. width: 100%;
  1021. height: 100%;
  1022. -webkit-overflow-scrolling: touch;
  1023. overflow-y: scroll;
  1024. border-top: none !important;
  1025. min-height: calc(100vh - 41px);
  1026. }
  1027. .countDownContent {
  1028. line-height: 40px;
  1029. text-align: center;
  1030. font-size: 14px;
  1031. border-bottom: 1px solid #ccc;
  1032. .van-count-down {
  1033. display: inline;
  1034. color: #f00;
  1035. }
  1036. }
  1037. .loadingOrder {
  1038. width: 90%;
  1039. height: 180px;
  1040. display: flex;
  1041. align-items: center;
  1042. justify-content: center;
  1043. .van-loading__text {
  1044. color: #444;
  1045. }
  1046. }
  1047. .pay-section {
  1048. margin-bottom: 10px;
  1049. padding: 10px 8px;
  1050. }
  1051. .pay-name {
  1052. padding-left: 10px;
  1053. flex: 1 auto;
  1054. font-weight: bold;
  1055. }
  1056. .logo {
  1057. width: 24px;
  1058. height: 24px;
  1059. }
  1060. .van-checkbox {
  1061. float: right;
  1062. /deep/.van-checkbox__icon .van-icon {
  1063. border-color: #e9eaef;
  1064. background-color: #e9eaef;
  1065. }
  1066. /deep/.van-checkbox__icon--checked .van-icon {
  1067. background-color: #2dc7aa;
  1068. border-color: #2dc7aa;
  1069. }
  1070. }
  1071. .needprice {
  1072. display: flex;
  1073. justify-content: space-between;
  1074. padding: 2px 0;
  1075. del {
  1076. font-size: 14px;
  1077. color: #808080;
  1078. font-weight: bold;
  1079. }
  1080. span {
  1081. font-size: 18px;
  1082. color: #f85043;
  1083. font-weight: bold;
  1084. }
  1085. }
  1086. .couponprice {
  1087. display: flex;
  1088. justify-content: space-between;
  1089. }
  1090. .use_price {
  1091. display: flex;
  1092. align-items: center;
  1093. font-size: 14px;
  1094. font-weight: bold;
  1095. img {
  1096. padding-right: 8px;
  1097. }
  1098. span {
  1099. font-size: 16px;
  1100. }
  1101. }
  1102. .check_default {
  1103. margin-right: 8px;
  1104. display: flex;
  1105. align-items: center;
  1106. height: 26px;
  1107. &::before {
  1108. display: block;
  1109. content: ' ';
  1110. width: 18px;
  1111. height: 18px;
  1112. background-color: #fff;
  1113. border: 1px solid #e9eaef;
  1114. border-radius: 50%;
  1115. }
  1116. &.check_active {
  1117. &::before {
  1118. display: block;
  1119. content: ' ';
  1120. background: url("../../../assets/images/icon_checkbox.png") no-repeat center;
  1121. border: 1px solid transparent;
  1122. background-size: contain;
  1123. }
  1124. }
  1125. &.radio_active {
  1126. &::before {
  1127. display: block;
  1128. content: ' ';
  1129. background: url("../../../assets/images/icon_radio.png") no-repeat center;
  1130. border: 1px solid transparent;
  1131. background-size: contain;
  1132. }
  1133. }
  1134. }
  1135. // .check_default {
  1136. // margin-right: 8px;
  1137. // display: block;
  1138. // width: 18px;
  1139. // height: 18px;
  1140. // background-color: #e9eaef;
  1141. // border-radius: 50%;
  1142. // &.check_active {
  1143. // background: url("../../../assets/images/icon_checkbox.png") no-repeat center;
  1144. // background-size: contain;
  1145. // }
  1146. // }
  1147. .title-row {
  1148. background: #F3F4F8;
  1149. color: #1a1a1a;
  1150. padding:5px 5px 3px;
  1151. border-radius:5px;
  1152. font-size: 14px;
  1153. }
  1154. .option-row {
  1155. line-height: 26px;
  1156. font-size: 14px;
  1157. display: flex;
  1158. // align-items: center;
  1159. position: relative;
  1160. padding: 10px 0 5px;
  1161. box-sizing: border-box;
  1162. cursor: pointer;
  1163. .el-col {
  1164. display: flex;
  1165. // align-items: center;
  1166. }
  1167. .el-col-6, .el-col-8, .el-col-11{
  1168. display: flex;
  1169. justify-content: flex-end;
  1170. }
  1171. &.lines {
  1172. margin-top: 5px;
  1173. border-top: 1px solid #ededed;
  1174. }
  1175. }
  1176. .el-icon-question {
  1177. font-size: 16px;
  1178. color: #4d4d4d;
  1179. padding-left: 5px;
  1180. padding-top: 5px;
  1181. }
  1182. .fontBold {
  1183. font-weight: bold;
  1184. }
  1185. .videoDialog {
  1186. /deep/.el-dialog__body {
  1187. padding: 0;
  1188. font-size: 0;
  1189. }
  1190. }
  1191. </style>