signupList.vue 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846
  1. <template>
  2. <div class="sigup-container">
  3. <div class="topWrap">
  4. <div>
  5. <h2>
  6. <!-- <div class="squrt"></div> -->
  7. <el-page-header @back="onCancel"
  8. :content="teamName + '报名详情'"></el-page-header>
  9. <!-- {{ teamName }}报名详情 -->
  10. </h2>
  11. <div class="btnList">
  12. <div class='newBand close' v-permission="'musicGroup/cancelMusicGroup'"
  13. @click="onClose">停止乐团</div>
  14. <div class='newBand'
  15. @click="payStart" v-permission="'musicGroup/openPay'"
  16. v-if="status=='APPLY'">开始缴费</div>
  17. <div class='newBand' v-permission="'musicGroup/found'"
  18. @click="onGoHome"
  19. v-if="status=='PAY'">确认开团</div>
  20. <div class='newBand' v-permission="'musicGroup/extensionPayment'"
  21. @click="extendPaymentStatus = true"
  22. v-if="status=='PAY'">延长缴费</div>
  23. <div class='newBand'
  24. @click="onCreateQRCode">报名链接</div>
  25. <div class='newBand'
  26. @click="onCreateQRCode2">缴费详情</div>
  27. </div>
  28. </div>
  29. <!-- stepImgs: {
  30. APPLY: require('@/assets/images/base/clock.png'),
  31. PAY: require('@/assets/images/base/pay.png')
  32. }, -->
  33. <p class='msg'
  34. :class="status=='PAY'? 'pay' : '' "> <img :src="status=='APPLY'?stepImgs.APPLY:stepImgs.PAY"
  35. alt="">
  36. {{ status=='APPLY'?'报名中':'缴费中' }}</p>
  37. </div>
  38. <div class="searchList">
  39. <el-form :inline="true"
  40. :model="searchFrom">
  41. <el-form-item label="专业">
  42. <el-select v-model="searchFrom.subject"
  43. clearable>
  44. <el-option v-for="(item,index) in soundList"
  45. :key='index'
  46. :label="item.name"
  47. :value="item.id"></el-option>
  48. </el-select>
  49. </el-form-item>
  50. <el-form-item label="是否允许调剂">
  51. <el-select v-model="searchFrom.isAllowAdjust"
  52. clearable>
  53. <el-option label="是"
  54. value="1"></el-option>
  55. <el-option label="否"
  56. value="0"></el-option>
  57. </el-select>
  58. </el-form-item>
  59. <el-form-item label="用户名或手机号">
  60. <el-input v-model="searchFrom.name"></el-input>
  61. </el-form-item>
  62. <!-- 专业actualSubjectId 调剂isAllowAdjust 手机号name -->
  63. <el-form-item>
  64. <div class='searchBtn'
  65. @click='search'>搜索</div>
  66. </el-form-item>
  67. </el-form>
  68. </div>
  69. <div class="sigup-core">
  70. <div class="left">
  71. <el-table :data='leftList'
  72. :header-cell-style="{background:'#EDEEF0',color:'#444'}">
  73. <el-table-column label="乐团声部"
  74. prop="subjectName"
  75. align='center'>
  76. </el-table-column>
  77. <el-table-column label="计划招生"
  78. prop="expectedStudentNum"
  79. align='center'>
  80. <template slot-scope="scope">
  81. <div>
  82. <p v-if="!isEdit">{{ scope.row.expectedStudentNum }}</p>
  83. <el-input v-if="isEdit"
  84. v-model="scope.row.expectedStudentNum"></el-input>
  85. </div>
  86. </template>
  87. </el-table-column>
  88. <el-table-column label="已报名"
  89. prop='applyStudentNum'
  90. align='center'>
  91. </el-table-column>
  92. <el-table-column label="已缴费"
  93. prop='payNum'
  94. align='center'>
  95. </el-table-column>
  96. </el-table>
  97. <div class="btnWrap"
  98. style="margin-right:20px; margin-top:20px;">
  99. <el-button v-if="!isEdit" v-permission="'musicGroup/updateExpectedStudentNum'"
  100. @click="isEdit = true">编辑</el-button>
  101. <el-button v-if="isEdit" v-permission="'musicGroup/updateExpectedStudentNum'"
  102. @click="saveIsEdit">保存</el-button>
  103. </div>
  104. </div>
  105. <div class="right">
  106. <el-table :data='rightList'
  107. ref="multipleTable"
  108. :header-cell-style="{background:'#EDEEF0',color:'#444'}"
  109. @selection-change="handleSelectionChange">
  110. <el-table-column type="selection"
  111. width="55">
  112. </el-table-column>
  113. <el-table-column label="学员姓名"
  114. prop="studentName"
  115. align='center'>
  116. </el-table-column>
  117. <el-table-column label="家长姓名"
  118. prop="parentsName"
  119. align='center'>
  120. </el-table-column>
  121. <el-table-column label="年级班级"
  122. align='center'>
  123. <template slot-scope="scope">
  124. <div>
  125. {{scope.row.currentGrade+scope.row.currentClass}}
  126. </div>
  127. </template>
  128. </el-table-column>
  129. <el-table-column label="性别"
  130. prop="gender"
  131. align='center'>
  132. <template slot-scope="scope">
  133. <div>
  134. {{scope.row.gender | sex}}
  135. </div>
  136. </template>
  137. </el-table-column>
  138. <el-table-column label="服从调剂"
  139. prop="isAllowAdjust"
  140. align='center'>
  141. <template slot-scope="scope">
  142. <div>
  143. {{ scope.row.isAllowAdjust | isAllowAdjust}}
  144. </div>
  145. </template>
  146. </el-table-column>
  147. <el-table-column label="报名专业"
  148. prop="subjectName"
  149. align='center'>
  150. </el-table-column>
  151. <el-table-column label="调剂专业"
  152. prop="actualSubjectName"
  153. align='center'>
  154. </el-table-column>
  155. <el-table-column label="联系电话"
  156. prop="parentsPhone"
  157. align='center'>
  158. </el-table-column>
  159. <!-- v-if='status == "PAY"' -->
  160. <el-table-column label="学员状态"
  161. prop="paymentStatus"
  162. align='center'>
  163. <template slot-scope="scope">
  164. <div>
  165. {{ scope.row.paymentStatus | paymentStatus }}
  166. </div>
  167. </template>
  168. </el-table-column>
  169. <el-table-column label="操作"
  170. align='center'>
  171. <template slot-scope="scope">
  172. <div>
  173. <el-button type='text' v-permission="'studentRegistration/batchUpdateSubject'"
  174. v-if="scope.row.paymentStatus != 2"
  175. @click='resetSubject(scope.row)'>修改专业</el-button>
  176. <!-- APPLY -->
  177. <el-popover v-if='status == "APPLY" || scope.row.remark'
  178. placement="top-start"
  179. title="备注"
  180. width="200"
  181. trigger="hover"
  182. :content="scope.row.remark">
  183. <el-button type="text"
  184. slot="reference">备注</el-button>
  185. </el-popover>
  186. <!-- PAY -->
  187. <el-button type='text' v-permission="'studentRegistration/queryFeeDetail'"
  188. v-if='status == "PAY"&&scope.row.paymentStatus==1'
  189. @click='lookdetail(scope.row)'>查看</el-button>
  190. </div>
  191. </template>
  192. </el-table-column>
  193. </el-table>
  194. <div style="margin-top: 10px; margin-bottom: 10px;"
  195. v-if="status=='APPLY'">
  196. <el-button @click="onSelectAll">全选/取消</el-button>
  197. <el-button style="background-color: #14928a;border: 1px solid #14928a;"
  198. @click="onPartPayment" v-permission="'studentRegistration/openPayment'"
  199. type="primary">提前缴费</el-button>
  200. <!-- <div class='newBand' v-if="status=='APPLY'">允许缴费</div> -->
  201. </div>
  202. <pagination :total="rules.total"
  203. :page.sync="rules.page"
  204. :limit.sync="rules.limit"
  205. :page-sizes="rules.page_size"
  206. @pagination="getList" />
  207. </div>
  208. </div>
  209. <el-dialog title="修改专业"
  210. :visible.sync="subjectVisible"
  211. width="400px">
  212. <el-form :model="maskForm">
  213. <el-form-item label="选择专业">
  214. <el-select v-model="maskForm.subject"
  215. clearable>
  216. <el-option v-for="(item,index) in soundList"
  217. :key='index'
  218. :label="item.name"
  219. :value="item.id"></el-option>
  220. </el-select>
  221. </el-form-item>
  222. </el-form>
  223. <div slot="footer"
  224. class="dialog-footer">
  225. <el-button @click="subjectVisible = false">取 消</el-button>
  226. <el-button type="primary"
  227. @click="okReset">确 定</el-button>
  228. </div>
  229. </el-dialog>
  230. <el-dialog title="延长缴费"
  231. :visible.sync="extendPaymentStatus"
  232. width="400px">
  233. <el-form :model="extendForm"
  234. ref="extendForm"
  235. :rules="extendRule">
  236. <el-form-item label="延长时间"
  237. prop="expireDate">
  238. <el-date-picker v-model="extendForm.expireDate"
  239. value-format="yyyy-MM-dd"
  240. type="date"
  241. placeholder="选择日期">
  242. </el-date-picker>
  243. </el-form-item>
  244. </el-form>
  245. <div slot="footer"
  246. class="dialog-footer">
  247. <el-button @click="extendPaymentStatus = false">取 消</el-button>
  248. <el-button type="primary"
  249. @click="onExtendPayment('extendForm')">确 定</el-button>
  250. </div>
  251. </el-dialog>
  252. <el-dialog title="订单详情"
  253. :visible.sync="orderVisible"
  254. width="600px">
  255. <el-form :model="orderForm"
  256. :inline="true">
  257. <!-- name: '',
  258. totalAmount: '',
  259. subject: '',
  260. subjectFee: '',
  261. axe: '',
  262. axePrice: '',
  263. others: '',
  264. othersPrice: '' -->
  265. <el-form-item label="学员姓名">
  266. <el-input v-model="orderForm.name"
  267. disabled=""></el-input>
  268. </el-form-item>
  269. <el-form-item label="实缴金额">
  270. <el-input v-model="orderForm.totalAmount"
  271. disabled=""></el-input>
  272. </el-form-item>
  273. <el-form-item label="实际专业">
  274. <el-input v-model="orderForm.subject"
  275. disabled=""></el-input>
  276. </el-form-item>
  277. <el-form-item label="课程费用">
  278. <el-input v-model="orderForm.subjectFee"
  279. disabled=""></el-input>
  280. </el-form-item>
  281. <el-form-item label="选择乐器">
  282. <el-input v-model="orderForm.axe"
  283. disabled=""></el-input>
  284. </el-form-item>
  285. <el-form-item label="乐器价格">
  286. <el-input v-model="orderForm.axePrice"
  287. disabled=""></el-input>
  288. </el-form-item>
  289. <el-form-item label="教辅组合">
  290. <el-input v-model="orderForm.others"
  291. disabled=""></el-input>
  292. </el-form-item>
  293. <el-form-item label="组合价格">
  294. <el-input v-model="orderForm.othersPrice"
  295. disabled=""></el-input>
  296. </el-form-item>
  297. </el-form>
  298. <div slot="footer"
  299. class="dialog-footer">
  300. <!-- <el-button>取 消</el-button> -->
  301. <el-button type="primary"
  302. @click="orderVisible = false">确 定</el-button>
  303. </div>
  304. </el-dialog>
  305. <el-dialog title="开始缴费"
  306. :visible.sync="paymentStatus"
  307. width="400px">
  308. <el-form ref="paymentForm"
  309. :model="paymentForm"
  310. label-position="top"
  311. :rules="paymentRules">
  312. <el-form-item label="请设置缴费截止日期"
  313. prop="paymentExpireDate">
  314. <el-date-picker v-model="paymentForm.paymentExpireDate"
  315. type="date"
  316. value-format="yyyy-MM-dd"
  317. style="width: 100%"
  318. placeholder="选择日期">
  319. </el-date-picker>
  320. </el-form-item>
  321. </el-form>
  322. <div slot="footer"
  323. class="dialog-footer">
  324. <el-button @click="paymentStatus = false">取 消</el-button>
  325. <el-button type="primary"
  326. @click="onStartPayment('paymentForm')">确 定</el-button>
  327. </div>
  328. </el-dialog>
  329. <el-dialog title="报名二维码"
  330. :visible.sync="qrcodeStatus"
  331. width="300px">
  332. <div class="left-code">
  333. <h2>学员报名连接</h2>
  334. <div id="qrcode"
  335. class="qrcode code"
  336. ref="qrCodeUrl"></div>
  337. <p class="code-url"
  338. v-if="codeUrl">{{ codeUrl }}</p>
  339. </div>
  340. </el-dialog>
  341. <el-dialog title="缴费详情二维码"
  342. :visible.sync="qrcodeStatus2"
  343. width="300px">
  344. <div class="right-code">
  345. <h2>报名缴费详情</h2>
  346. <div id="qrcode2"
  347. class="qrcode code"
  348. ref="qrCodeUrl"></div>
  349. <p class="code-url"
  350. v-if="codeUrl2">{{ codeUrl2 }}</p>
  351. </div>
  352. </el-dialog>
  353. </div>
  354. </template>
  355. <script>
  356. import pagination from '@/components/Pagination/index'
  357. import { getintoClass, getStudentList, findSound, musicGroupOpenPay, openPayment, musicGroupFound, extensionPayment, resetPlanNum, cancelMusicGroup } from '@/api/buildTeam'
  358. import { resetStudentSubject, getStudentFeeDetail } from '@/api/studentManager'
  359. import QRCode from 'qrcodejs2'
  360. export default {
  361. components: {
  362. pagination
  363. },
  364. data () {
  365. return {
  366. multipleSelection: [], //
  367. isEdit: false,
  368. subjectVisible: false,
  369. orderVisible: false,
  370. leftList: [],
  371. rightList: [],
  372. searchFrom: {
  373. name: '',
  374. subject: '', // 专业
  375. isAllowAdjust: '' // 是否允许调剂
  376. },
  377. stepImgs: {
  378. APPLY: require('@/assets/images/base/clock.png'),
  379. PAY: require('@/assets/images/base/pay.png')
  380. },
  381. status: '',
  382. id: '',
  383. rules: {
  384. // 分页规则
  385. limit: 10, // 限制显示条数
  386. page: 1, // 当前页
  387. total: 0, // 总条数
  388. page_size: [10, 20, 30, 40] // 选择限制显示条数
  389. },
  390. teamName: '',
  391. maskForm: {
  392. subject: ''
  393. },
  394. activeId: '',
  395. soundList: [],
  396. orderForm: {
  397. name: '',
  398. totalAmount: '',
  399. subject: '',
  400. subjectFee: '',
  401. axe: '',
  402. axePrice: '',
  403. others: '',
  404. othersPrice: ''
  405. },
  406. paymentStatus: false,
  407. paymentForm: {
  408. paymentExpireDate: null,
  409. },
  410. paymentRules: {
  411. paymentExpireDate: [{ required: true, message: '请设置缴费截止日期', trigger: 'blur' }]
  412. },
  413. paymentNum: 0, // 缴费了多少人
  414. qrcodeStatus: false, // 生成二维码
  415. qrcodes: true,
  416. qrcode: null,
  417. codeUrl: null,
  418. qrcodeStatus2: false, // 生成二维码
  419. qrcodes2: true,
  420. qrcode2: null,
  421. codeUrl2: null,
  422. extendPaymentStatus: false,
  423. extendForm: {
  424. expireDate: null,
  425. },
  426. extendRule: {
  427. expireDate: [{ required: true, message: '请选择延长时间', trigger: 'change' }]
  428. }
  429. }
  430. },
  431. created () {
  432. // 通过乐团状态判断显示隐藏的东西
  433. this.status = this.$route.query.status;
  434. // 通过乐团id 获取乐团招生状态
  435. this.id = this.$route.query.id;
  436. this.teamName = this.$route.query.name
  437. },
  438. mounted () {
  439. // 根据乐团id获取学团情况
  440. getintoClass({ musicGroupId: this.id }).then(res => {
  441. if (res.code == 200) {
  442. this.leftList = res.data;
  443. }
  444. })
  445. // 根据乐团id获乐团声部
  446. findSound({ musicGroupId: this.id }).then(res => {
  447. if (res.code == 200) {
  448. this.soundList = res.data;
  449. }
  450. })
  451. // 通过乐团id获取乐团学生列表
  452. this.getList()
  453. },
  454. methods: {
  455. search () {
  456. this.rules.page = 1;
  457. this.getList();
  458. },
  459. onCancel () {
  460. this.$router.push('/business/teamDetail')
  461. },
  462. payStart () {
  463. this.paymentStatus = true;
  464. this.getList();
  465. },
  466. getList () {
  467. let obj = {
  468. musicGroupId: this.id,
  469. actualSubjectId: this.searchFrom.subject || null,
  470. isAllowAdjust: this.searchFrom.isAllowAdjust || null,
  471. name: this.searchFrom.name || null,
  472. page: this.rules.page,
  473. rows: this.rules.limit
  474. }
  475. getStudentList(obj).then(res => {
  476. if (res.code == 200) {
  477. res.data.rows.forEach(item => {
  478. // '未开启缴费', '开启缴费', '已缴费'
  479. if (item.paymentStatus == 2) {
  480. this.paymentNum += 1
  481. }
  482. })
  483. this.rightList = res.data.rows
  484. this.rules.total = res.data.total
  485. }
  486. })
  487. },
  488. onStartPayment (formName) { // 开启缴费
  489. this.$refs[formName].validate((valid) => {
  490. if (valid) {
  491. musicGroupOpenPay({
  492. musicGroupId: this.id,
  493. expireDate: this.paymentForm.paymentExpireDate
  494. }).then(res => {
  495. if (res.code == 200) {
  496. this.$message.success('开启成功')
  497. this.paymentStatus = false
  498. this.$router.push({
  499. path: '/business/signupList',
  500. query: {
  501. status: 'PAY',
  502. id: this.$route.query.id,
  503. name: this.$route.query.name
  504. }
  505. })
  506. this.status = 'PAY'
  507. }
  508. })
  509. } else {
  510. // console.log('error submit!!');
  511. return false;
  512. }
  513. })
  514. // this.id
  515. },
  516. onSelectAll () { // 选中全部
  517. this.$refs.multipleTable.toggleAllSelection()
  518. },
  519. onPartPayment () { // 部分缴费
  520. let selection = this.multipleSelection
  521. if (selection.length <= 0) {
  522. this.$message.success('您还没有选择学生')
  523. return false
  524. }
  525. let ids = []
  526. selection.forEach(item => {
  527. ids.push(item.id)
  528. })
  529. openPayment({
  530. ids: ids.join(',')
  531. }).then(res => {
  532. if (res.code == 200) {
  533. this.$message.success('开启成功')
  534. this.getList()
  535. } else {
  536. this.$message.error(res.msg)
  537. }
  538. })
  539. },
  540. onCreateQRCode () { // 生成报名二维码
  541. this.qrcodeStatus = true
  542. let id = this.$route.query.id
  543. let teamName = this.$route.query.name
  544. if (this.qrcodes) {
  545. this.qrcodes = false
  546. setTimeout(() => {
  547. this.qrcode = new QRCode('qrcode', {
  548. width: 200,
  549. height: 200,
  550. colorDark: '#000000',
  551. colorLight: '#ffffff',
  552. correctLevel: QRCode.CorrectLevel.H
  553. })
  554. this.qrcode.makeCode('http://mstudev.dayaedu.com/#/login?musicGroupId=' + id)
  555. this.codeUrl = 'http://mstudev.dayaedu.com/#/login?musicGroupId=' + id
  556. }, 500)
  557. }
  558. },
  559. onCreateQRCode2 () { // 生成报名二维码
  560. this.qrcodeStatus2 = true
  561. let id = this.$route.query.id
  562. let teamName = this.$route.query.name
  563. if (this.qrcodes2) {
  564. this.qrcodes2 = false
  565. setTimeout(() => {
  566. this.qrcode2 = new QRCode('qrcode2', {
  567. width: 200,
  568. height: 200,
  569. colorDark: '#000000',
  570. colorLight: '#ffffff',
  571. correctLevel: QRCode.CorrectLevel.H
  572. })
  573. this.qrcode2.makeCode('http://mteadev.dayaedu.com/#/order?musicGroupId=' + id + '&musicGroupName=' + teamName)
  574. this.codeUrl2 = 'http://mteadev.dayaedu.com/#/order?musicGroupId=' + id + '&musicGroupName=' + teamName
  575. }, 500)
  576. }
  577. },
  578. onGoHome () { // 确认开团
  579. // 判断是否有学生缴费
  580. if (this.paymentNum <= 0) {
  581. this.$message.error('当前缴费人数为0,无法开团')
  582. return
  583. }
  584. this.$confirm(`是否确认开团?`, '提示', {
  585. confirmButtonText: '确定',
  586. cancelButtonText: '取消',
  587. type: 'warning'
  588. }).then(() => {
  589. musicGroupFound({
  590. musicGroupId: this.$route.query.id
  591. }).then(res => {
  592. if (res.code == 200) {
  593. this.$message.success('开启成功')
  594. this.$router.push({
  595. path: '/business/teamSeting',
  596. query: {
  597. status: 'PREPARE',
  598. id: this.$route.query.id,
  599. name: this.$route.query.name
  600. }
  601. })
  602. }
  603. })
  604. }).catch(() => {
  605. })
  606. },
  607. onClose () { // 停止乐团
  608. this.$confirm('您确定停止乐团吗?', '提示', {
  609. confirmButtonText: '确定',
  610. cancelButtonText: '取消',
  611. type: 'warning'
  612. }).then(() => {
  613. cancelMusicGroup({
  614. musicGroupId: this.$route.query.id
  615. }).then(res => {
  616. if (res.code == 200) {
  617. this.$message.success('停止成功')
  618. this.$router.push({
  619. path: '/business/teamDetail'
  620. })
  621. }
  622. })
  623. }).catch(() => {
  624. })
  625. },
  626. handleSelectionChange (val) {
  627. this.multipleSelection = val;
  628. },
  629. // 修改专业
  630. resetSubject (row) {
  631. this.activeId = row.studentId
  632. this.subjectVisible = true;
  633. // resetStudentSubject().then(res=>{]})
  634. },
  635. // 确认修改
  636. okReset () {
  637. if (!this.maskForm.subject) {
  638. this.$message.error('请选择调剂专业');
  639. return
  640. }
  641. resetStudentSubject({ musicGroupId: this.id, userId: this.activeId, subId: this.maskForm.subject }).then(res => {
  642. if (res.code == 200) {
  643. this.$message.success('修改成功');
  644. this.subjectVisible = false;
  645. this.maskForm.subject = '';
  646. getintoClass({ musicGroupId: this.id }).then(res => {
  647. if (res.code == 200) {
  648. this.leftList = res.data;
  649. }
  650. })
  651. this.getList();
  652. }
  653. })
  654. },
  655. onExtendPayment (formName) {
  656. this.$refs[formName].validate(valid => {
  657. if (valid) {
  658. extensionPayment({
  659. musicGroupId: this.id,
  660. expireDate: this.extendForm.expireDate
  661. }).then(res => {
  662. if (res.code == 200) {
  663. this.$message.success('延长缴费成功')
  664. this.extendPaymentStatus = false
  665. } else {
  666. this.$message.error(res.msg);
  667. }
  668. })
  669. }
  670. })
  671. },
  672. lookdetail (row) {
  673. // console.log(row);
  674. this.orderVisible = true;
  675. this.activeId = row.studentId;
  676. this.orderForm.name = row.studentName;
  677. this.orderForm.subject = row.subjectName;
  678. getStudentFeeDetail({ musicGroupId: this.id, studentId: row.studentId }).then(res => {
  679. if (res.code == 200) {
  680. this.orderForm.totalAmount = res.data.totalAmount;
  681. this.orderForm.subjectFee = res.data.courseFee;
  682. for (let i in res.data.goods) {
  683. if (res.data.goods[i].goodsType == 'ACCESSORIES') {
  684. this.orderForm.axe = res.data.goods[i].goodsName;
  685. this.orderForm.axePrice = res.data.goods[i].musicalFee;
  686. } else if (res.data.goods[i].goodsType == 'INSTRUMENT') {
  687. this.orderForm.others = res.data.goods[i].goodsName;
  688. this.orderForm.othersPrice = res.data.goods[i].musicalFee;
  689. }
  690. }
  691. }
  692. })
  693. },
  694. saveIsEdit () {
  695. // 提交数据
  696. // console.log(this.leftList);
  697. this.isEdit = false;
  698. resetPlanNum(this.leftList).then(res => {
  699. })
  700. }
  701. },
  702. }
  703. </script>
  704. <style lang="scss">
  705. .sigup-container {
  706. margin-left: 12px;
  707. .topWrap {
  708. padding: 18px 58px;
  709. height: 136px;
  710. background-color: #fff;
  711. display: flex;
  712. flex-direction: row;
  713. justify-content: space-between;
  714. .msg.pay {
  715. color: #f85043;
  716. }
  717. .msg {
  718. text-align: right;
  719. color: #f97215;
  720. font-size: 32px;
  721. font-weight: bold;
  722. padding-top: 30px;
  723. box-sizing: border-box;
  724. img {
  725. width: 36px;
  726. height: 36px;
  727. position: relative;
  728. top: 5px;
  729. margin-right: 8px;
  730. }
  731. }
  732. h2 {
  733. height: 48px;
  734. line-height: 48px;
  735. position: relative;
  736. // padding-left: 30px;
  737. font-size: 32px;
  738. font-weight: 600;
  739. margin-bottom: 10px;
  740. display: flex;
  741. flex-direction: row;
  742. justify-content: flex-start;
  743. align-items: center;
  744. .term {
  745. height: 32px;
  746. line-height: 32px;
  747. border-radius: 24px;
  748. width: 100px;
  749. color: #14928a;
  750. border: 1px solid rgba(20, 146, 138, 1);
  751. font-size: 14px;
  752. text-align: center;
  753. margin-right: 12px;
  754. &:nth-child(1) {
  755. margin-left: 47px;
  756. }
  757. }
  758. .term.active {
  759. color: #fff;
  760. background-color: #14928a;
  761. }
  762. .squrt {
  763. position: absolute;
  764. left: -25px;
  765. top: 8px;
  766. height: 34px;
  767. width: 8px;
  768. background-color: #14928a;
  769. }
  770. }
  771. .btnList {
  772. display: flex;
  773. flex-direction: row;
  774. justify-content: flex-start;
  775. align-items: center;
  776. div {
  777. margin-right: 15px;
  778. }
  779. }
  780. .newBand.close {
  781. background-color: #777;
  782. border: 1px solid #777;
  783. }
  784. }
  785. .searchList {
  786. background-color: #fff;
  787. padding: 0 58px;
  788. }
  789. .sigup-core {
  790. margin-top: 12px;
  791. display: flex;
  792. flex-direction: row;
  793. justify-content: flex-start;
  794. .left {
  795. width: 340px;
  796. background-color: #fff;
  797. height: 80vh;
  798. overflow: auto;
  799. }
  800. .right {
  801. margin-left: 12px;
  802. flex-grow: 1;
  803. }
  804. }
  805. }
  806. .el-dialog__body {
  807. overflow: hidden;
  808. }
  809. .left-code,
  810. .right-code {
  811. // width: 50%;
  812. // float: left;
  813. h2 {
  814. font-size: 18px;
  815. text-align: center;
  816. padding-bottom: 8px;
  817. }
  818. .qrcode {
  819. img {
  820. width: 200px;
  821. height: 200px;
  822. margin: 0 auto;
  823. }
  824. }
  825. .code-url {
  826. font-size: 18px;
  827. text-align: center;
  828. padding: 15px 15px 0 15px;
  829. }
  830. }
  831. </style>