Browse Source

Merge branch 'online' into wxl

lex-xin 5 years ago
parent
commit
336826228b
69 changed files with 574 additions and 62 deletions
  1. 0 0
      dist/index.html
  2. 0 0
      dist/static/css/chunk-0040b65a.546ad8fc.css
  3. 1 1
      dist/static/css/chunk-2c638012.71dcc538.css
  4. 0 1
      dist/static/css/chunk-3db642f1.e0030167.css
  5. 0 0
      dist/static/css/chunk-46234199.54a36887.css
  6. 0 0
      dist/static/css/chunk-6c42ea8e.641b676e.css
  7. 0 0
      dist/static/css/chunk-ba404ada.50905a4f.css
  8. 0 0
      dist/static/css/chunk-bb579d98.641b676e.css
  9. 1 1
      dist/static/css/chunk-f4f6bc24.d9d07b25.css
  10. 0 0
      dist/static/js/app.0266558d.js
  11. 0 0
      dist/static/js/app.4319f01b.js
  12. 0 0
      dist/static/js/chunk-0040b65a.a7261160.js
  13. 0 0
      dist/static/js/chunk-046f506a.05aef1cf.js
  14. 0 0
      dist/static/js/chunk-047dcaaa.da6b4bcc.js
  15. 0 0
      dist/static/js/chunk-09753c97.0f58e78b.js
  16. 0 0
      dist/static/js/chunk-09753c97.c6356f47.js
  17. 0 0
      dist/static/js/chunk-13cc5d62.e0098643.js
  18. 0 0
      dist/static/js/chunk-16f87310.2bc4ac42.js
  19. 0 0
      dist/static/js/chunk-1c9ae0ee.232bf90e.js
  20. 0 0
      dist/static/js/chunk-231926cd.35ca57f7.js
  21. 0 0
      dist/static/js/chunk-2c638012.04d90c03.js
  22. 0 0
      dist/static/js/chunk-35d7984f.798894e0.js
  23. 0 0
      dist/static/js/chunk-3661e960.8e4c7d41.js
  24. 0 0
      dist/static/js/chunk-3d78ba52.f96f6ea5.js
  25. 0 0
      dist/static/js/chunk-3db642f1.279a587c.js
  26. 0 0
      dist/static/js/chunk-3e699cc0.43ee591b.js
  27. 0 0
      dist/static/js/chunk-3fef4f99.9d6e66f7.js
  28. 0 0
      dist/static/js/chunk-40e665d1.ce722ef0.js
  29. 0 0
      dist/static/js/chunk-415e29c8.ff3cd796.js
  30. 0 0
      dist/static/js/chunk-419ce36c.df3dac43.js
  31. 0 0
      dist/static/js/chunk-41f382a0.297764a8.js
  32. 0 0
      dist/static/js/chunk-46234199.338ba2ff.js
  33. 0 0
      dist/static/js/chunk-5e5d6dc0.a2e0adae.js
  34. 0 0
      dist/static/js/chunk-6181ddae.2768a08a.js
  35. 0 0
      dist/static/js/chunk-64c33787.493ad5fe.js
  36. 0 0
      dist/static/js/chunk-6562cc02.6ece8576.js
  37. 0 0
      dist/static/js/chunk-68259a14.f81f926b.js
  38. 0 0
      dist/static/js/chunk-6c42ea8e.acb223e5.js
  39. 0 0
      dist/static/js/chunk-7cfc4d3d.0b6401ff.js
  40. 0 0
      dist/static/js/chunk-8752c0de.6975b639.js
  41. 0 0
      dist/static/js/chunk-8752c0de.81e39dca.js
  42. 0 0
      dist/static/js/chunk-90bc8dd8.cc12a79f.js
  43. 0 0
      dist/static/js/chunk-a9a6c8fe.c9d6cd38.js
  44. 0 0
      dist/static/js/chunk-af2aa50e.22d40ad2.js
  45. 0 0
      dist/static/js/chunk-b1e176fc.19764d59.js
  46. 0 0
      dist/static/js/chunk-b1e176fc.fd1a59e1.js
  47. 0 0
      dist/static/js/chunk-ba404ada.6def4abe.js
  48. 0 0
      dist/static/js/chunk-bb579d98.54f039ec.js
  49. 0 0
      dist/static/js/chunk-bc672cf4.8c6a3588.js
  50. 0 0
      dist/static/js/chunk-bc672cf4.a71b45d0.js
  51. 0 0
      dist/static/js/chunk-c7045f8e.ce6c6664.js
  52. 0 0
      dist/static/js/chunk-d576a10e.3be217a8.js
  53. 0 0
      dist/static/js/chunk-d576a10e.96f5cb44.js
  54. 0 0
      dist/static/js/chunk-dc69ca8a.40ffe6e3.js
  55. 0 0
      dist/static/js/chunk-edcf4054.9493bbb5.js
  56. 0 0
      dist/static/js/chunk-f4f6bc24.ff3a8750.js
  57. 0 0
      dist/static/js/chunk-fac7eb14.8f973b71.js
  58. 10 0
      src/api/buildTeam.js
  59. 9 0
      src/api/zeroManager.js
  60. 2 1
      src/utils/searchArray.js
  61. 0 1
      src/views/businessManager/orderManager/backMoney.vue
  62. 0 1
      src/views/businessManager/orderManager/expend.vue
  63. 186 3
      src/views/resetTeaming/components/resetSound.vue
  64. 269 39
      src/views/sporadicManager/sporadicList.vue
  65. 70 5
      src/views/teamDetail/components/courseList.vue
  66. 2 2
      src/views/teamDetail/components/studentList.vue
  67. 7 2
      src/views/teamDetail/components/studentSignin.vue
  68. 16 4
      src/views/vipClass/vipReset.vue
  69. 1 1
      vue.config.js

File diff suppressed because it is too large
+ 0 - 0
dist/index.html


File diff suppressed because it is too large
+ 0 - 0
dist/static/css/chunk-0040b65a.546ad8fc.css


+ 1 - 1
dist/static/css/chunk-3e699cc0.b1174fc4.css → dist/static/css/chunk-2c638012.71dcc538.css

@@ -1 +1 @@
-.pagination-container[data-v-31cb099a]{background:#fff;padding:32px 16px;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.pagination-container.hidden[data-v-31cb099a]{display:none}.vipwrap[data-v-de5bbc76]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.vipwrap .newBand[data-v-de5bbc76]{margin-right:20px}.resetClassForm[data-v-de5bbc76] .el-date-editor.el-input,.resetClassForm[data-v-de5bbc76] .el-date-editor.el-input__inner{width:180px!important}[data-v-de5bbc76] .el-date-editor.el-input,[data-v-de5bbc76] .el-date-editor.el-input__inner{width:100px!important}
+.pagination-container[data-v-31cb099a]{background:#fff;padding:32px 16px;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.pagination-container.hidden[data-v-31cb099a]{display:none}.vipwrap[data-v-400ef3e6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.vipwrap .newBand[data-v-400ef3e6]{margin-right:20px}.resetClassForm[data-v-400ef3e6] .el-date-editor.el-input,.resetClassForm[data-v-400ef3e6] .el-date-editor.el-input__inner{width:180px!important}[data-v-400ef3e6] .el-date-editor.el-input,[data-v-400ef3e6] .el-date-editor.el-input__inner{width:100px!important}

+ 0 - 1
dist/static/css/chunk-3db642f1.e0030167.css

@@ -1 +0,0 @@
-.setBtn[data-v-3b267e69]{width:120px;height:40px;line-height:40px;text-align:center;border-radius:4px;color:#fff;background-color:#444;cursor:pointer;margin:20px 0}.imc[data-v-5ef28ee8]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:30px 42px;background-color:#fff;min-height:80vh}.imc .addBtn[data-v-5ef28ee8]{line-height:40px;text-align:center;color:#fff;border-radius:4px;margin-right:20px;cursor:pointer;width:120px;height:40px;background-color:#4eada7}

File diff suppressed because it is too large
+ 0 - 0
dist/static/css/chunk-46234199.54a36887.css


+ 0 - 0
dist/static/css/chunk-5e5d6dc0.641b676e.css → dist/static/css/chunk-6c42ea8e.641b676e.css


File diff suppressed because it is too large
+ 0 - 0
dist/static/css/chunk-ba404ada.50905a4f.css


+ 0 - 0
dist/static/css/chunk-dc69ca8a.641b676e.css → dist/static/css/chunk-bb579d98.641b676e.css


+ 1 - 1
dist/static/css/chunk-047dcaaa.d7bda41a.css → dist/static/css/chunk-f4f6bc24.d9d07b25.css

@@ -1 +1 @@
-.pagination-container[data-v-31cb099a]{background:#fff;padding:32px 16px;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.pagination-container.hidden[data-v-31cb099a]{display:none}.right-code .title{font-size:18px;text-align:center;padding-bottom:8px}
+.pagination-container[data-v-31cb099a]{background:#fff;padding:32px 16px;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.pagination-container.hidden[data-v-31cb099a]{display:none}.right-code .title[data-v-4d106d7f]{font-size:18px;text-align:center;padding-bottom:8px}.newBand[data-v-4d106d7f]{display:inline-block}

File diff suppressed because it is too large
+ 0 - 0
dist/static/js/app.0266558d.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/app.4319f01b.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-0040b65a.a7261160.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-046f506a.05aef1cf.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-047dcaaa.da6b4bcc.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-09753c97.0f58e78b.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-09753c97.c6356f47.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-13cc5d62.e0098643.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-16f87310.2bc4ac42.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-1c9ae0ee.232bf90e.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-231926cd.35ca57f7.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-2c638012.04d90c03.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-35d7984f.798894e0.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-3661e960.8e4c7d41.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-3d78ba52.f96f6ea5.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-3db642f1.279a587c.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-3e699cc0.43ee591b.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-3fef4f99.9d6e66f7.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-40e665d1.ce722ef0.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-415e29c8.ff3cd796.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-419ce36c.df3dac43.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-41f382a0.297764a8.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-46234199.338ba2ff.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-5e5d6dc0.a2e0adae.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-6181ddae.2768a08a.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-64c33787.493ad5fe.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-6562cc02.6ece8576.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-68259a14.f81f926b.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-6c42ea8e.acb223e5.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-7cfc4d3d.0b6401ff.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-8752c0de.6975b639.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-8752c0de.81e39dca.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-90bc8dd8.cc12a79f.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-a9a6c8fe.c9d6cd38.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-af2aa50e.22d40ad2.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-b1e176fc.19764d59.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-b1e176fc.fd1a59e1.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-ba404ada.6def4abe.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-bb579d98.54f039ec.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-bc672cf4.8c6a3588.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-bc672cf4.a71b45d0.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-c7045f8e.ce6c6664.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-d576a10e.3be217a8.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-d576a10e.96f5cb44.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-dc69ca8a.40ffe6e3.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-edcf4054.9493bbb5.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-f4f6bc24.ff3a8750.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-fac7eb14.8f973b71.js


+ 10 - 0
src/api/buildTeam.js

@@ -455,6 +455,16 @@ export function resetCourse (data) {
   })
 }
 
+// 课时调整 批量
+export function batchAdjustment (data) {
+  return request({
+    url: api + `/courseSchedule/batchClassStartDateAdjust`,
+    method: 'post',
+    data
+  })
+}
+// 课时调整-批量
+
 // 根据乐团id 和声部id获取学生列表
 export function teamSoundStudent (data) {
   return request({

+ 9 - 0
src/api/zeroManager.js

@@ -24,4 +24,13 @@ export function removeZero (data) {
     method: 'POST',
     data: qs.stringify(data)
   })
+}
+
+// 根据用户编号获取用户信息
+export function getBasic(data) {
+  return request({
+    url: '/api-auth/user/getBasic',
+    method: 'get',
+    params: data
+  })
 }

+ 2 - 1
src/utils/searchArray.js

@@ -48,7 +48,8 @@ const orderStatus = [
   { value: "APPLY", label: "报名" },
   { value: "RENEW", label: "续费" },
   { value: "OTHER", label: "其他" },
-  { value: "SMALL_CLASS_TO_BUY", label: "VIP购买" }
+  { value: "SMALL_CLASS_TO_BUY", label: "VIP购买" },
+  { value: "SPORADIC", label: "零星收费" }
 ]
 
 // 交易状态

+ 0 - 1
src/views/businessManager/orderManager/backMoney.vue

@@ -133,7 +133,6 @@ import pagination from '@/components/Pagination/index'
 import { studentRefundsQueryPage, applyRefundAudit } from '@/api/orderManager'
 import { getEmployeeOrgan } from '@/api/buildTeam'
 import store from '@/store'
-import { orderStatus, dealStatus } from '@/utils/searchArray'
 export default {
   components: { pagination },
   name: 'income',

+ 0 - 1
src/views/businessManager/orderManager/expend.vue

@@ -128,7 +128,6 @@ import pagination from '@/components/Pagination/index'
 import { studentWithdraw, studentWithdrawConfirm } from '@/api/orderManager'
 import { getEmployeeOrgan } from '@/api/buildTeam'
 import store from '@/store'
-import { orderStatus, dealStatus } from '@/utils/searchArray'
 export default {
   components: { pagination },
   name: 'income',

+ 186 - 3
src/views/resetTeaming/components/resetSound.vue

@@ -168,6 +168,13 @@
         </template>
       </el-table-column>
     </el-table>
+    <!-- <div class="remove"
+             @click="removeListItem">删除</div> -->
+    <!-- <div class="floor">
+
+      <div class='add'
+           @click="addListItem">添加</div>
+    </div> -->
     <div class="btnWrap"
          style="margin-top:30px">
       <div class="closeBtn"
@@ -176,6 +183,41 @@
            v-permission="{child: 'musicGroup/updateSubjectInfo', parent: '/resetTeaming/resetSound'}"
            @click="saveInfo">保存</div>
     </div>
+
+    <el-dialog title="声部选择"
+               :visible.sync="dialogTableVisible"
+               :modal-append-to-body="false">
+      <div class="soundWrap">
+        <div class="itemList">
+          <div class="categroy"
+               v-for="(item,index) in soundList"
+               :key="index">
+            <p>{{item.name }}</p>
+            <el-checkbox-group v-model="soundLists[index]"
+                               @change='changeList'>
+              <!--  sound: this.activeSoundList[item].name,  // id
+                 jihua: '10', //计划招生人数
+                 yuji: '10', // 预计收费
+                 zhonglei: [], // 可选乐器种类
+                 fangshi: 2, // 乐器提供方式
+                 jiaopu: 'jiaopu1', // 教辅组合
+                 type: 1, // 操作
+                 id: this.activeSoundList[item].id, //声部id
+                 visible: false, // 当前乐器提供方式的pop提示框显示隐藏 -->
+              <el-checkbox :label="sound.id"
+                           @change="checkinlist({'id':sound.id,'sound':sound.name,'jihua':0,'yuji':0,'zhonglei':[],'fangshi':'','fangshiprice':1500,'jiaopu':'','type':1,'typeVisible':false,'provideVisible':false,'markVisible':false,'goodsList':[],'markList':[],'markChioseList':[]})"
+                           v-for="(sound,indexs) in item.subjects"
+                           :key="indexs">{{sound.name }}</el-checkbox>
+            </el-checkbox-group>
+          </div>
+        </div>
+      </div>
+      <p class='soundSubP'>当前选择声部数:{{chioseSoundNum}}</p>
+      <div class="btnWrapss">
+        <div class="dialogBtn"
+             @click="generates">确定</div>
+      </div>
+    </el-dialog>
   </div>
 </template>
 <script>
@@ -183,13 +225,15 @@ import { findMusicGroupSubjectInfo, resetSubjectPlan, getSoundTree, getGoods, up
 export default {
   data () {
     return {
+      dialogTableVisible: false,
       tableList: [],
       teamid: '',
       activeSoundList: [],
       soundList: [],
       checkList: [],
       multipleSelection: [], // 列表选择的集合
-
+      soundList: [],
+      soundLists: [], // 存储选中项的声部id 记录变量
     }
   },
   mounted () {
@@ -197,11 +241,23 @@ export default {
     this.teamid = this.$route.query.id
     this.getSound();
     sessionStorage.setItem('resetCode', '2');
+    // 获取所有声部
+    getSoundTree().then(res => {
+      if (res.code == 200) {
+        this.soundList = res.data.rows;
+        // // 生成动态的checkList
+        for (let key in this.soundList) {
+          this.$set(this.soundLists, key, [])
+        }
+      }
+
+    })
 
   },
   methods: {
+    changeList (e) {
+    },
     getSound () {
-
       findMusicGroupSubjectInfo({ musicGroupId: this.teamid }).then(res => {
         if (res.code == 200) {
           this.activeSoundList = res.data.musicGroupSubjectPlans.map(item => {
@@ -338,6 +394,33 @@ export default {
         }
       })
     },
+    // 勾选选中框处理数据,存储勾选过的checkbox值
+    checkinlist (obj) {
+      let flag = false;
+      this.activeSoundList.map(item => {
+        if (item.id == obj.id) {
+          flag = true
+        }
+      })
+      if (!flag) {
+        this.activeSoundList.push(obj)
+      } else {
+        for (let i = 0; i < this.activeSoundList.length; i++) {
+          if (this.activeSoundList[i].id == obj.id) {
+            this.activeSoundList.splice(i, 1);
+          }
+        }
+      }
+    },
+    // 添加声部
+    // 点击添加按钮
+    addListItem () {
+      this.dialogTableVisible = true;
+    },
+    // 点击确认按钮生成表单
+    generates () {
+      this.dialogTableVisible = false;
+    },
 
   }, filters: {
     zhongleiFilter (val, list) {
@@ -396,8 +479,108 @@ export default {
     //   let goods = val.goods.join(',');
     //   let price = val.price
     // }
-  },
+  }, computed: {
+    // 返回当前选中声部数量
+    chioseSoundNum () {
+      let num = 0;
+      for (let key in this.soundList) {
+        num += this.soundLists[key].length;
+
+      }
+      return num;
+    }
+  }
+
 }
 </script>
 <style lang="scss">
+.floor {
+  display: flex;
+  flex-direction: row;
+  justify-content: flex-start;
+  width: 100%;
+  height: 48px;
+  line-height: 48px;
+  background: rgba(237, 238, 240, 1);
+  font-size: 14px;
+  color: #444;
+  align-items: center;
+  position: relative;
+  z-index: 1;
+  .remove {
+    width: 98px;
+    height: 32px;
+    background: rgba(248, 80, 67, 1);
+    border-radius: 3px;
+    color: #fff;
+    line-height: 32px;
+    text-align: center;
+    margin-left: 164px;
+    cursor: pointer;
+  }
+  .add {
+    width: 98px;
+    height: 32px;
+    background: rgba(20, 146, 138, 1);
+    border-radius: 3px;
+    color: #fff;
+    line-height: 32px;
+    text-align: center;
+    margin-left: 20px;
+    cursor: pointer;
+  }
+}
+.soundWrap {
+  width: 100%;
+  overflow: auto;
+  .itemList {
+    display: flex;
+    flex-direction: row;
+    justify-content: flex-start;
+    flex-wrap: nowrap;
+    flex-grow: 1;
+    height: 300px;
+    max-height: 300px;
+    overflow: auto;
+    .categroy {
+      width: 150px;
+      min-width: 150px;
+      .el-checkbox {
+        height: 30px;
+        line-height: 30px;
+        display: block;
+        padding-left: 20px;
+      }
+      p {
+        height: 40px;
+        line-height: 40px;
+        background-color: #edeef0;
+        margin-bottom: 15px;
+        text-align: center;
+      }
+    }
+  }
+}
+.soundSubP {
+  height: 40px;
+  line-height: 40px;
+  background-color: #edeef0;
+  padding-left: 25px;
+}
+.btnWrapss {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  margin-top: 150px;
+  .dialogBtn {
+    width: 188px;
+    height: 40px;
+    background: rgba(249, 114, 21, 1);
+    border-radius: 4px;
+    line-height: 40px;
+    color: #fff;
+    text-align: center;
+    cursor: pointer;
+  }
+}
 </style>

+ 269 - 39
src/views/sporadicManager/sporadicList.vue

@@ -8,12 +8,18 @@
       <!-- v-permission="'sporadicChargeInfo/add'" -->
       <div class="newBand"
            v-permission="'sporadicChargeInfo/add'"
-           @click="
-           newVisible">新增</div>
+           @click="newVisible">新增公用收费</div>
+      <div class="newBand"
+           v-permission="'sporadicChargeInfo/add'"
+           @click="newVisible1">新增个人收费</div>
       <el-form :inline="true"
                :model="searchForm">
-        <el-form-item label="分部">
+        <el-form-item>
+          <el-input placeholder="标题或学生姓名" v-model="searchForm.search"></el-input>
+        </el-form-item>
+        <el-form-item>
           <el-select v-model="searchForm.organId"
+                     placeholder='请选择分部'
                      clearable
                      filterable>
             <el-option v-for='(item,index) in organList'
@@ -22,8 +28,9 @@
                        :label="item.name"></el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="收费类型">
-          <el-select v-model="searchForm.type"
+        <el-form-item>
+          <el-select v-model="searchForm.chargeType"
+                     placeholder='请选择收费类型'
                      clearable>
             <el-option label="考级"
                        :value="1"></el-option>
@@ -35,8 +42,21 @@
                        :value="4"></el-option>
           </el-select>
         </el-form-item>
-        <el-button type="danger"
+        <el-form-item>
+          <el-select v-model="searchForm.type"
+                     placeholder='请选择订单类型'
+                     clearable>
+            <el-option label="个人"
+                       value="personal"></el-option>
+            <el-option label="公用"
+                       value="common"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-button type="danger"
                    @click="search">搜索</el-button>
+          <el-button @click="onReSet"
+                     type="primary">重置</el-button>
         </el-form-item>
       </el-form>
       <div class="tableWrap">
@@ -71,6 +91,19 @@
             </template>
           </el-table-column>
           <el-table-column align='center'
+                           label="学生姓名"
+                           prop="userName">
+            <template slot-scope="scope">
+              {{ scope.row.userName || '-' }}
+            </template>
+          </el-table-column>
+          <el-table-column align='center'
+                           label="订单类型">
+            <template slot-scope="scope">
+              {{ scope.row.userId ? '人个' : '公用' }}
+            </template>
+          </el-table-column>
+          <el-table-column align='center'
                            label="创建人"
                            prop="operatorName">
           </el-table-column>
@@ -96,6 +129,7 @@
     </div>
     <el-dialog :title="title"
                :visible.sync="zeroVisible"
+               @close="onFormClose('maskForm')"
                width="650px">
       <el-form :model='maskForm'
                :rules="maskRules"
@@ -171,6 +205,86 @@
                    @click="zeroVisible = false">确定</el-button>
       </span>
     </el-dialog>
+
+    <el-dialog :title="title1"
+               :visible.sync="zeroVisible1"
+               @close="onFormClose('maskForm1')"
+               width="650px">
+      <el-form :model='maskForm1'
+               :rules="maskRules1"
+               label-width="100px"
+               label-position="right"
+               :inline="true"
+               ref="maskForm1">
+        <el-form-item label="标题"
+                      prop="title">
+          <el-input v-model="maskForm1.title"
+                    :disabled='!isNew1'></el-input>
+        </el-form-item>
+        <el-form-item label="收费类型"
+                      prop="type">
+          <el-select v-model="maskForm1.type"
+                     :disabled='!isNew1'
+                     clearable
+                     filterable>
+            <el-option label="考级"
+                       :value="1"></el-option>
+            <el-option label="缴费"
+                       :value="2"></el-option>
+            <el-option label="声部更改"
+                       :value="3"></el-option>
+            <el-option label="乐器更换"
+                       :value="4"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="学员编号"
+                      prop='studentId'>
+          <el-input v-model="maskForm1.studentId"
+                    @blur="onStudentChange"
+                    type="number"
+                    @mousewheel.native.prevent
+                    :disabled='!isNew1'></el-input>
+        </el-form-item>
+        <el-form-item label="金额"
+                      prop='money'>
+          <el-input v-model="maskForm1.money"
+                    type="number"
+                    @mousewheel.native.prevent
+                    :disabled='!isNew1'></el-input>
+        </el-form-item>
+        <el-form-item label="学员姓名"
+                      prop='studentName'>
+          <el-input v-model="maskForm1.studentName"
+                    :disabled='true'></el-input>
+        </el-form-item>
+        <el-form-item label="查看链接"
+                      v-if="!isNew1">
+          <el-input style='width:400px'
+                    :disabled='!isNew1'
+                    v-model="maskForm1.code"></el-input>
+          <el-button type='danger'
+                     @click="onCreateQRCode">二维码</el-button>
+        </el-form-item>
+        <el-form-item label="收费详情"
+                      prop="desc">
+          <el-input type='textarea'
+                    :disabled='!isNew1'
+                    v-model="maskForm1.desc"
+                    style="width:490px"
+                    :autosize="{minRows: 5}"></el-input>
+        </el-form-item>
+      </el-form>
+      <span slot="footer"
+            class="dialog-footer">
+        <el-button @click="zeroVisible1 = false">取 消</el-button>
+        <el-button type="primary"
+                   v-if="isNew1"
+                   @click="addZero1">确 定</el-button>
+        <el-button v-if="!isNew1"
+                   type="primary"
+                   @click="zeroVisible1 = false">确定</el-button>
+      </span>
+    </el-dialog>
     <el-dialog :visible.sync="qrcodeStatus"
                center
                width="300px">
@@ -189,7 +303,7 @@
 import { getEmployeeOrgan } from '@/api/buildTeam'
 import pagination from '@/components/Pagination/index'
 import { vaildStudentUrl } from '@/utils/validate'
-import { addZero, getZero, removeZero } from '@/api/zeroManager'
+import { addZero, getZero, removeZero, getBasic } from '@/api/zeroManager'
 import QRCode from 'qrcodejs2'
 export default {
   components: { pagination },
@@ -198,7 +312,9 @@ export default {
       zeroVisible: false,
       searchForm: {
         organId: null,
+        chargeType: null,
         type: null,
+        search: null
       },
       tableList: [{}],
       organList: [],
@@ -227,7 +343,29 @@ export default {
       title: '新增收费',
       qrcodeStatus: false,
       qrcodes: true,
-      activeRow: null
+      activeRow: null,
+
+
+      title1: '新增收费',
+      activeRow1: null,
+      zeroVisible1: false,
+      maskForm1: {
+        type: null,
+        money: null,
+        desc: null,
+        title: null,
+        code: null,
+        studentId: null,
+        studentName: null,
+      },
+      isNew1: false,
+      maskRules1: {
+        organId: [{ required: true, message: '请选择分部', trigger: 'change' }],
+        type: [{ required: true, message: '请选择收费类型', trigger: 'change' }],
+        money: [{ required: true, message: '请输入收费金额', trigger: 'change' }],
+        title: [{ required: true, message: '请输入标题名称', trigger: 'change' }],
+        studentId: [{ required: true, message: '请输入学员编号', trigger: 'blur' }],
+      },
     }
   }, mounted () {
     getEmployeeOrgan().then(res => {
@@ -242,48 +380,93 @@ export default {
       this.pageInfo.page = 1;
       this.getList()
     },
+    onReSet () {
+      this.searchForm = {
+        organId: null,
+        chargeType: null,
+        type: null,
+        search: null
+      }
+    },
     getList () {
-      let chargeType, organId;
-      this.searchForm.type ? chargeType = this.searchForm.type : chargeType = null
-      this.searchForm.organId ? organId = this.searchForm.organId : organId = null
-      getZero({ page: this.pageInfo.page, rows: this.pageInfo.limit, chargeType, organId }).then(res => {
+      let searchForm = this.searchForm
+      let params = {
+        organId: searchForm.organId ? searchForm.organId : null,
+        chargeType: searchForm.chargeType ? searchForm.chargeType : null,
+        type: searchForm.type ? searchForm.type : null,
+        search: searchForm.search ? searchForm.search : null,
+        page: this.pageInfo.page,
+        rows: this.pageInfo.limit
+      }
+      
+      getZero(params).then(res => {
         if (res.code == 200) {
           this.tableList = res.data.rows
           this.pageInfo.total = res.data.total
         }
       })
     },
+    onFormClose (formName) { // 关闭弹窗重置验证
+      if(formName == 'maskForm') {
+        this.maskForm = {
+          organId: null,
+          type: null,
+          money: null,
+          desc: null,
+          title: null,
+          code: null
+        }
+      } else if(formName == 'maskForm1') {
+        this.maskForm1 = {
+          type: null,
+          money: null,
+          desc: null,
+          title: null,
+          code: null,
+          studentId: null,
+          studentName: null,
+        }
+      }
+      this.$refs[formName].resetFields()
+    },
     newVisible () {
       this.isNew = true;
       this.zeroVisible = true;
-      this.title = '新增收费'
+      this.title = '新增公用收费'
+    },
+    newVisible1 () {
+      this.isNew1 = true;
+      this.zeroVisible1 = true;
+      this.title1 = '新增个人收费'
     },
     lookVisible (row) {
-      this.isNew = false;
-      this.zeroVisible = true;
-      this.title = '查看收费'
-      this.activeRow = row
-      this.maskForm.code = vaildStudentUrl() + `/#/sporadicLogin?id=${this.activeRow.id}`
-      this.maskForm.type = parseInt(row.chargeType)
-      this.maskForm.desc = row.detail
-      this.maskForm.title = row.title
-      this.maskForm.organId = row.organId
-      this.maskForm.money = row.amount
-      // this.maskForm = {
-      //   code: vaildStudentUrl() + `/#/sporadicLogin?id=${this.activeRow.id}`,
-      //   type: parseInt(row.chargeType),
-      //   desc: row.detail,
-      //   title: row.title,
-      //   organId: row.organId,
-      //   money: row.amount
-      // }
+      if(row.userId) {
+        this.isNew1 = false;
+        this.zeroVisible1 = true;
+        this.title1 = '查看个人收费'
+        this.activeRow = row
+        this.maskForm1.code = vaildStudentUrl() + `/#/sporadicPay?id=${this.activeRow.id}&userId=${this.activeRow.userId}`
+        this.maskForm1.type = parseInt(row.chargeType)
+        this.maskForm1.desc = row.detail
+        this.maskForm1.title = row.title
+        this.maskForm1.money = row.amount
+        this.maskForm1.studentId = row.userId
+        this.maskForm1.studentName = row.userName
+      } else {
+        this.isNew = false;
+        this.zeroVisible = true;
+        this.title = '查看公用收费'
+        this.activeRow = row
+        this.maskForm.code = vaildStudentUrl() + `/#/sporadicLogin?id=${this.activeRow.id}`
+        this.maskForm.type = parseInt(row.chargeType)
+        this.maskForm.desc = row.detail
+        this.maskForm.title = row.title
+        this.maskForm.organId = row.organId
+        this.maskForm.money = row.amount
+      }
     },
-    // look2Code () { },
     onCreateQRCode () { // 生成报名二维码
       this.qrcodeStatus = true
-      // let id = this.$route.query.id
-      // let teamName = this.$route.query.name
-
       setTimeout(() => {
         if (this.qrcodes) {
           this.qrcodes = false
@@ -295,10 +478,12 @@ export default {
             correctLevel: QRCode.CorrectLevel.H
           })
         }
-        // vaildStudentUrl() + `/#/sporadicLogin?id=${刷刷刷}`
         this.qrcode.clear();
-        this.qrcode.makeCode(vaildStudentUrl() + `/#/sporadicLogin?id=${this.activeRow.id}`)
-        // this.codeUrl = vaildStudentUrl() + '/#/login?musicGroupId=' + id
+        if(this.activeRow.userId) {
+          this.qrcode.makeCode(vaildStudentUrl() + `/#/sporadicPay?id=${this.activeRow.id}&userId=${this.activeRow.userId}`)
+        } else {
+          this.qrcode.makeCode(vaildStudentUrl() + `/#/sporadicLogin?id=${this.activeRow.id}`)
+        }
       }, 500)
     },
     addZero () {
@@ -321,6 +506,48 @@ export default {
         }
       })
     },
+    addZero1 () {
+      this.$refs['maskForm1'].validate(item => {
+        if (item) {
+          let maskForm1 = this.maskForm1
+          if(!maskForm1.studentName) {
+            this.$message.error('学员信息不存在')
+            return
+          }
+          let obj = {
+            chargeType: maskForm1.type,
+            detail: maskForm1.desc,
+            title: maskForm1.title,
+            userId: maskForm1.studentId,
+            amount: maskForm1.money
+          }
+          addZero(obj).then(res => {
+            if (res.code == 200) {
+              this.$message.success('新增成功')
+              this.zeroVisible1 = false;
+              this.getList()
+            }
+          })
+        }
+      })
+    },
+    onStudentChange() {
+      let studentId = this.maskForm1.studentId
+      // 判断学生编号是否存在
+      if(!studentId) {
+        return
+      }
+
+      getBasic({ userId: studentId }).then(res => {
+        if(res.code == 200) {
+          if(res.data) {
+            this.maskForm1.studentName = res.data.name
+          } else {
+            this.maskForm1.studentName = null
+          }
+        }
+      })
+    },
     removeItem (row) {
       this.$confirm('是否删除该收费', '提示', {
         confirmButtonText: '确定',
@@ -367,7 +594,7 @@ export default {
   }
 }
 </script>
-<style lang="scss">
+<style lang="scss" scoped>
 .right-code {
   // width: 50%;
   // float: left;
@@ -377,4 +604,7 @@ export default {
     padding-bottom: 8px;
   }
 }
+.newBand {
+  display: inline-block;
+}
 </style>

+ 70 - 5
src/views/teamDetail/components/courseList.vue

@@ -64,10 +64,16 @@
              @click="search">搜索</div>
       </el-form-item>
     </el-form>
+    <div class="btnWraps">
+      <div class="newBand"
+           @click="removeCourses"
+           v-permission="'courseSchedule/bathDelete'">批量删除</div>
+      <!-- v-permission="'courseSchedule/bathDelete'" -->
+      <div class="newBand"
+           @click="resetTimer">修改日期</div>
+    </div>
     <!-- -->
-    <div class="newBand"
-         @click="removeCourses"
-         v-permission="'courseSchedule/bathDelete'">批量删除</div>
+
     <!-- 列表 -->
     <div class="tableWrap">
       <el-table :data='tableList'
@@ -228,12 +234,34 @@
                    @click="submitResetClass">确 定</el-button>
       </div>
     </el-dialog>
+    <el-dialog title='修改时间'
+               width="400px"
+               :before-close="handleCloseTimer"
+               :visible.sync="timerVisible">
+      <el-form :model="timerMask">
+        <el-form-item label="上课日期"
+                      :rules=" [{ required: true, message: '请选择日期', trigger: 'blur' },]">
+          <el-date-picker v-model="timerMask.timer"
+                          type="date"
+                          format='yyyy-MM-dd'
+                          value-format="yyyy-MM-dd"
+                          placeholder="选择日期">
+          </el-date-picker>
+        </el-form-item>
+      </el-form>
+      <div slot="footer"
+           class="dialog-footer">
+        <el-button @click="timerVisible = false">取 消</el-button>
+        <el-button type="primary"
+                   @click="batchAdjustmentTime">确 定</el-button>
+      </div>
+    </el-dialog>
   </div>
 </template>
 <script>
 import pagination from '@/components/Pagination/index'
 import { bathDelete } from '@/api/vipSeting'
-import { getCourseList, findMusicGroupClassTeacher, resetCourse, getTeacher, getMusicGroupAllClass, getCourseSchedule } from '@/api/buildTeam'
+import { getCourseList, findMusicGroupClassTeacher, resetCourse, getTeacher, getMusicGroupAllClass, getCourseSchedule, batchAdjustment } from '@/api/buildTeam'
 export default {
   props: {
     teamid: {
@@ -243,6 +271,7 @@ export default {
   },
   data () {
     return {
+      timerVisible: false,
       courseVisible: false,
       searchForm: {
         courseStatus: '', // 课程类型
@@ -275,8 +304,12 @@ export default {
       },
       teacherList: [],
       classList: [],
-      activeCourseList: []
+      activeCourseList: [],
+      timerMask: {
+        timer: ''
+      }
     }
+
   },
   components: {
     pagination
@@ -432,7 +465,31 @@ export default {
     },
     checkSelectable (val) {
       return val.courseScheduleStatus == 'NOT_START'
+    },
+    batchAdjustmentTime () {
+      let arr = [];
+      arr = this.activeCourseList.map(item => {
+        return { classDate: this.timerMask.timer, id: item.courseScheduleId, endClassTimeStr: item.endClassTimeStr, startClassTimeStr: item.startClassTimeStr };
+      })
+      batchAdjustment(arr).then(res => {
+        if (res.code == 200) {
+          this.timerVisible = false;
+          this.getList();
+        }
+      })
+    },
+    handleCloseTimer () {
+      this.timerVisible = false;
+      this.timerMask.timer = '';
+    },
+    resetTimer () {
+      if (this.activeCourseList.length < 1) {
+        this.$message.error('请至少选择一节课')
+        return
+      }
+      this.timerVisible = true;
     }
+
   }
 }
 </script>
@@ -456,4 +513,12 @@ export default {
     margin: 0 30px;
   }
 }
+.btnWraps {
+  display: flex;
+  flex-direction: row;
+  justify-content: flex-start;
+  div {
+    margin-right: 20px;
+  }
+}
 </style>

+ 2 - 2
src/views/teamDetail/components/studentList.vue

@@ -17,9 +17,9 @@
         <div class="newStudent"
              style="margin-bottom:10px;"
              @click="addStudentVisible = true">新增学员</div>
-        <div class="newStudent"
+        <!-- <div class="newStudent"
              style="margin-bottom:10px;"
-             @click="onCreateQRCode">报名连接</div>
+             @click="onCreateQRCode">报名连接</div> -->
         <div class="newStudent"
              @click='gotoSignin'>点名总览</div>
       </div>

+ 7 - 2
src/views/teamDetail/components/studentSignin.vue

@@ -21,8 +21,13 @@
                           end-placeholder="结束日期">
           </el-date-picker>
         </el-form-item>
-        <el-form-item label='课程名称'>
-          <el-input v-model="searchForm.courseName"></el-input>
+        <el-form-item label='班级名称'>
+          <el-select v-model="searchForm.className">
+            <el-option v-for='(item,index) in classList'
+                       :key='index'
+                       :label="item.name"
+                       :value="item.id"></el-option>
+          </el-select>
         </el-form-item>
         <el-form-item label='学生名字'>
           <el-input v-model="searchForm.studentName"></el-input>

+ 16 - 4
src/views/vipClass/vipReset.vue

@@ -143,7 +143,17 @@
                             minTime: maskForm.startTime
                           }">
           </el-time-select>
-        </el-form-item> -->
+        </el-form-item>  v-if="maskForm.teachMode=='OFFLINE'"-->
+        <el-form-item label="课程类型"
+                      prop="courseType">
+          <el-select clearable
+                     v-model="maskForm.teachMode">
+            <el-option label="线上课"
+                       value="ONLINE"></el-option>
+            <el-option label="线下课"
+                       value="OFFLINE"></el-option>
+          </el-select>
+        </el-form-item>
         <el-form-item label="教学地点"
                       v-if='maskForm.teachMode == "OFFLINE"'>
           <el-select v-model="maskForm.address"
@@ -259,9 +269,9 @@
                       v-if='isaddCourse'>
           <el-input v-model="adjustmentForm.fee"></el-input>
         </el-form-item>
+        <!--  v-if='isaddCourse' v-if="adjustmentForm.courseType=='OFFLINE'" -->
         <el-form-item label="课程类型"
-                      prop="courseType"
-                      v-if='isaddCourse'>
+                      prop="courseType">
           <el-select clearable
                      v-model="adjustmentForm.courseType">
             <el-option label="线上课"
@@ -510,7 +520,9 @@ export default {
           this.$message.success('修改成功')
           this.courseVisible = false;
           this.getList();
-        }
+        } //else {
+        //   this.$message.error(res.msg)
+        // }
       })
     },
     removeClass (row) {

+ 1 - 1
vue.config.js

@@ -21,7 +21,7 @@ const name = defaultSettings.title || '管乐迷后台管理系统' // page titl
 // let target = 'http://192.168.3.27:8000' // 箭河
 // let target = 'http://192.168.3.28:8000' //邹璇
 // let target = 'http://192.168.3.8:18000' //勇哥
-let target = 'http://47.99.212.176:8000' // 测试服
+let target = 'http://admin.dayaedu.com/' // 测试服
 // let target = 'http://192.168.3.48:8080' // 乔
 // All configuration item explanations can be find in https://cli.vuejs.org/config/
 module.exports = {

Some files were not shown because too many files changed in this diff