Browse Source

Merge branch 'ol_12_30' into online

wolyshaw 4 năm trước cách đây
mục cha
commit
08714a6f33

+ 0 - 1
src/utils/downLoadFile.js

@@ -54,7 +54,6 @@ export const Export = (that, params, message) => {
                     let objectUrl = URL.createObjectURL(blob);
                     let link = document.createElement("a");
                     let fname = params.fileName || "导出文件.xlsx"; //下载文件的名字
-                    console.log(params)
                     link.href = objectUrl;
                     link.setAttribute("download", fname);
                     document.body.appendChild(link);

+ 1 - 0
src/utils/searchArray.js

@@ -107,6 +107,7 @@ export const musicGroupStatus = [
   { value: 'AUDIT_FAILED', text: '审核失败' },
   { value: 'CANCELED', text: '取消' },
   { value: 'FEE_AUDIT', text: '费用审核中' },
+  { value: 'CLOSE', text: '已关闭' },
 ]
 
 export const vipGroupStatus = [

+ 2 - 1
src/utils/vueFilter.js

@@ -325,7 +325,8 @@ Vue.filter('teamStatus', value => {
     AUDIT: '乐团审核中',
     DRAFT: '编辑中',
     AUDIT_FAILED: '审核失败',
-    FEE_AUDIT: '费用审核中'
+    FEE_AUDIT: '费用审核中',
+    CLOSE: '已关闭',
   }
   return template[value]
 })

+ 0 - 1
src/views/afterSchoolManager/afterWorkList.vue

@@ -344,7 +344,6 @@ export default {
     // 导出
     async onExport () {
       let obj = this.getDate();
-      console.log(obj)
       await Export(this, {
         url: '/api-web/export/extraExercisesReplys',
         fileName: '课外训练(学员).xlsx',

+ 24 - 0
src/views/teamBuild/api.js

@@ -7,3 +7,27 @@ export const addMusicGroupRegs = data => request2({
   method: 'post',
   requestType: 'json'
 })
+
+// 删除学员
+export const delStudentRegistration = data => request2({
+  url: '/api-web/studentRegistration/del',
+  data,
+  method: 'post',
+  requestType: 'json'
+})
+
+// 删除学员
+export const batchDelStudentRegistration = data => request2({
+  url: '/api-web/studentRegistration/batchDel',
+  data,
+  method: 'post',
+  requestType: 'json'
+})
+
+// 关闭乐团
+export const closeMusicGroup = data => request2({
+  url: '/api-web/musicGroup/closeMusicGroup',
+  data,
+  method: 'post',
+  requestType: 'json'
+})

+ 9 - 3
src/views/teamBuild/components/merge-music.vue

@@ -20,24 +20,27 @@
       </el-collapse-item>
     </el-collapse>
     <div class="btns">
-      <el-button type="primary" @click="$emit('chiosetab', 1)">上一步</el-button>
+      <el-button @click="$emit('close')">关闭</el-button>
       <el-button type="primary" @click="merge">确认合并</el-button>
     </div>
     <el-dialog
       title="选择乐团"
       :visible.sync="visible"
       width="700px"
+      append-to-body
     >
       <selectMusic
         :visible="visible"
         @close="visible = false"
         @submited="submited"
+        :organId="organId"
       />
     </el-dialog>
     <el-dialog
       title="查看已合并学生"
       :visible.sync="studentsVisible"
       width="700px"
+      append-to-body
     >
       <mergedStudents
         @close="studentsVisible = false"
@@ -53,7 +56,8 @@ import selectMusic from './select-msic'
 import selectItem from './select-item'
 import mergedStudents from './merged-students'
 export default {
-  components: {
+  props: ['organId']
+,  components: {
     selectMusic,
     selectItem,
     mergedStudents,
@@ -146,7 +150,9 @@ export default {
     },
     async FetchList() {
       try {
-        const res = await getTeamList()
+        const res = await getTeamList({
+          organId: this.organId,
+        })
         this.tableData = res.data.rows
       } catch (error) {}
     },

+ 18 - 2
src/views/teamBuild/components/merged-students.vue

@@ -7,14 +7,19 @@
       <el-form-item>
         <el-button type="primary" native-type="submit">搜索</el-button>
         <el-button type="danger" native-type="reset">重置</el-button>
+        <el-button type="primary" @click="removeStuden" :disabled="!passed.length">删除学员</el-button>
       </el-form-item>
     </el-form>
     <el-table
       style="width: 100%"
       max-height="300px"
+      @selection-change="handleSelectionChange"
       :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
       :data="filterlist"
     >
+      <el-table-column type="selection"
+        width="50">
+      </el-table-column>
       <el-table-column prop="realName" align="center" label="学员姓名">
         <template slot-scope="scope">
           <copy-text>{{ scope.row.realName }}</copy-text>
@@ -35,6 +40,7 @@
 </template>
 <script>
 import { getTeamStudentList } from '@/api/buildTeam'
+import { batchDelStudentRegistration } from '../api'
 export default {
   data() {
     return {
@@ -82,10 +88,20 @@ export default {
     handleSelectionChange(arr) {
       const passed = [];
       for (let i in arr) {
-        passed.push(arr[i].id);
+        passed.push(arr[i].userId);
       }
       this.passed = passed;
-      this.$emit('selected', this.passed, this.id)
+      // this.$emit('selected', this.passed, this.id)
+    },
+    async removeStuden() {
+      try {
+        await this.$confirm('是否确认删除已选择学员?', '提示', {
+          type: 'warning'
+        })
+        await batchDelStudentRegistration(this.passed)
+        this.$message.success('删除成功')
+        this.FetchDetail()
+      } catch (error) {}
     },
     async FetchDetail() {
       try {

+ 2 - 1
src/views/teamBuild/components/select-msic.vue

@@ -62,7 +62,7 @@
 import pagination from '@/components/Pagination/index'
 import { getTeamList, getPayType } from "@/api/teamServer";
 export default {
-  props: ['visible'],
+  props: ['visible', 'organId'],
   components: { pagination },
   data() {
     return {
@@ -127,6 +127,7 @@ export default {
         const res = await getTeamList({
           rows: this.rules.limit,
           page: this.rules.page,
+          organId: this.organId,
           ...this.search
         })
         this.tableData = res.data.rows.filter(item => item.id !== this.$route.query.id)

+ 4 - 20
src/views/teamBuild/components/teamSoundSet.vue

@@ -11,32 +11,16 @@
     <div class="btnWrap">
       <el-button type="primary" @click="goback" style="margin-right: 10px;">上一步</el-button>
       <!--  v-if="teamStatus != 'teamAudit'" -->
-      <el-button class="submitBtn"
-           v-permission="{
-          child: 'musicGroup/createGroup',
-          parent: '/teamBuild/soundMoney',
-        }"
-        v-if="!$helpers.permission('musicGroup/addMusicGroupRegs')"
-        @click="submitInfo()">
-        创建缴费
-      </el-button>
-      <el-dropdown
-        split-button
+      <div
+        class="submitBtn"
         v-permission="{
           child: 'musicGroup/createGroup',
           parent: '/teamBuild/soundMoney',
         }"
-        v-if="$helpers.permission('musicGroup/addMusicGroupRegs')"
-        type="primary"
         @click="submitInfo()"
       >
-        创建缴费
-        <el-dropdown-menu slot="dropdown">
-          <el-dropdown-item>
-            <el-button @click="selectMusic" type="text">选择乐团</el-button>
-          </el-dropdown-item>
-        </el-dropdown-menu>
-      </el-dropdown>
+        下一步
+      </div>
       <!-- <div
         class="submitBtn"
         @click="submitAudit(1)"

+ 39 - 20
src/views/teamBuild/index.vue

@@ -5,9 +5,42 @@
       <el-page-header @back="goBack"
                       :content="pageName"> </el-page-header>
     </h2>
-    <h2>
-      <div class="squrt"></div><h3 style="font-size: 22px;">{{getIndexName(activeIndex)}}</h3>
-    </h2>
+    <div class="m-core">
+      <div class="stepbox">
+        <!--  @click="activeIndex = 0" -->
+        <span class="stepspan stepspan1">
+          <div class="step1 sptep"
+               :class="activeIndex >= 0 ? 'activestep' : ''">
+            基本信息
+          </div>
+          <img :src="activeIndex  >=  0 ? stepImgs.nol : stepImgs.active"
+               alt=""
+               class="arrow" />
+        </span>
+        <!-- @click="activeIndex = 1" -->
+        <span class="stepspan stepspan2"
+              v-if="showFlag?activeIndex>= 1:true">
+          <!--    -->
+          <div class="step2 sptep"
+               :class="activeIndex  >= 1 ? 'activestep' : ''">
+            声部设置
+          </div>
+          <img :src="activeIndex >=  1 ? stepImgs.nol : stepImgs.active"
+               alt=""
+               class="arrow" />
+        </span>
+        <!--  @click="activeIndex = 2" -->
+        <span class="stepspan stepspan3"
+              v-if="showFlag?activeIndex  >=  2:true">
+          <div class="step2 sptep"
+               :class="activeIndex  >=  2 ? 'activestep' : ''">
+            创建缴费
+          </div>
+          <img :src="activeIndex >= 2 ? stepImgs.nol : stepImgs.active"
+               alt=""
+               class="arrow" />
+        </span>
+      </div>
 
       <!-- 下面显示的内容 -->
       <div class="stepcontent">
@@ -27,10 +60,6 @@
                        :getTeamList="getTeamList"
                        :baseInfo="baseInfo" />
         </div>
-        <div v-if="activeIndex == 3">
-          <mergeMusic @chiosetab="chiosetab"
-                       :getTeamList="getTeamList" />
-        </div>
       </div>
     </div>
   </div>
@@ -39,9 +68,8 @@
 import teamBaseInfo from "@/views/teamBuild/components/teamBaseInfo";
 import teamSoundMoney from "@/views/teamBuild/components/teamSoundSet";
 import teamPayInfo from "@/views/teamBuild/components/teamPayInfo";
-import mergeMusic from "@/views/teamBuild/components/merge-music";
 export default {
-  components: { teamBaseInfo, teamSoundMoney, teamPayInfo, mergeMusic },
+  components: { teamBaseInfo, teamSoundMoney, teamPayInfo },
   name: "teamBuild",
   data () {
     return {
@@ -57,7 +85,7 @@ export default {
   },
   created () {
     // 判断 是新建乐团还是修改乐团
-    this.activeIndex = 3;
+    this.activeIndex = 0;
     this.init();
   },
   activated () {
@@ -94,20 +122,11 @@ export default {
       this.baseInfo = baseInfo
       this.pageName = baseInfo.musicGroup?.name
     },
-    getIndexName(index) {
-      const data = {
-        0: '基本信息',
-        1: '声部设置',
-        2: '创建缴费',
-        3: '合并乐团',
-      }
-      return data[index]
-    }
   },
   computed: {
     showFlag () {
       return (this.teamStatus == 'newTeam' || this.teamStatus == 'teamList')
-    },
+    }
   }
 };
 </script>

+ 104 - 0
src/views/teamBuild/modals/close-studens.vue

@@ -0,0 +1,104 @@
+<template>
+  <div>
+    <el-form :model="moneys" ref="form">
+      <el-table
+        style="width: 100%"
+        max-height="300px"
+        :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+        :data="list"
+      >
+        <el-table-column prop="name" align="center" label="学员姓名">
+          <template slot-scope="scope">
+            <copy-text>{{ scope.row.name }}</copy-text>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parentsName" align="center" label="家长姓名">
+          <template slot-scope="scope">
+            <copy-text>{{ scope.row.parentsName }}</copy-text>
+          </template>
+        </el-table-column>
+        <el-table-column prop="parentsPhone" align="center" label="手机号码" width="130">
+          <template slot-scope="scope">
+            <copy-text>{{ scope.row.parentsPhone }}</copy-text>
+          </template>
+        </el-table-column>
+        <el-table-column prop="classGroupName" align="center" label="班级">
+        </el-table-column>
+        <el-table-column prop="subjectName" align="center" label="声部">
+          <template slot-scope="scope">
+            <copy-text>{{ scope.row.subjectName }}</copy-text>
+          </template>
+        </el-table-column>
+        <el-table-column prop="surplusCourseFee" align="center" label="退费金额(元)" width="150">
+          <template slot-scope="scope">
+            <el-form-item :prop="'' + scope.row.userId">
+              <el-input-number
+                :min="0"
+                :max="scope.row.surplusCourseFee"
+                size="mini"
+                :controls="false"
+                :precision="0"
+                v-model="moneys[scope.row.userId]"
+                placeholder="请输入退费金额"
+              />
+            </el-form-item>
+          </template>
+        </el-table-column>
+      </el-table>
+    </el-form>
+    <div slot="footer" class="dialog-footer">
+      <el-button @click="$emit('close')">取 消</el-button>
+      <el-button type="primary" @click="submit">确认</el-button>
+    </div>
+  </div>
+</template>
+<script>
+import { teamSoundStudent } from '@/api/buildTeam'
+import { closeMusicGroup } from '../api'
+export default {
+  props: ['detail'],
+  mounted() {
+    this.FetchList()
+  },
+  data() {
+    return {
+       list: [],
+       moneys: {}
+    }
+  },
+  methods: {
+    async FetchList() {
+      const res = await teamSoundStudent({
+        musicGroupId: this.detail?.id,
+      })
+      this.list = res.data
+      const data = {}
+      for (const item of res.data) {
+        data[item.userId] = item.surplusCourseFee
+      }
+      this.moneys = data
+    },
+    async submit() {
+      try {
+        await this.$confirm('是否确认关闭乐团', '提示', {
+          type: 'warning'
+        })
+        await closeMusicGroup({
+          musicGroupId: this.detail?.id,
+          userReBack: this.moneys
+        })
+        this.$message.success('关闭成功')
+        this.$emit('submited')
+        this.$emit('close')
+      } catch (error) {}
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+  .dialog-footer{
+    margin-top: 20px;
+    display: block;
+    text-align: right;
+  }
+</style>

+ 15 - 0
src/views/teamBuild/signupList.vue

@@ -56,8 +56,18 @@
           >
             报表导出
           </div>
+          <div
+            class="newBand"
+            v-permission="'musicGroup/addMusicGroupRegs'"
+            @click="mergeVisible = true"
+          >
+            合并学员
+          </div>
         </div>
       </div>
+      <el-dialog title="选择合并乐团" :visible.sync="mergeVisible" width="950px">
+        <mergeMusic v-if="mergeVisible" style="padding: 0 20px;" :organId="organId" @close="mergeVisible = false"/>
+      </el-dialog>
       <!--  stepImgs: {
         APPLY: require('@/assets/images/base/clock.png'),
         PAY: require('@/assets/images/base/pay.png')
@@ -607,6 +617,7 @@ import {
   studentApplyDetailExport,
   StudentQuit,
 } from "@/api/buildTeam";
+import mergeMusic from './components/merge-music'
 import { resetStudentSubject, getStudentFeeDetail } from "@/api/studentManager";
 import { vaildStudentUrl, vaildTeacherUrl } from "@/utils/validate";
 import { addVisit } from "@/views/returnVisitManager/api.js";
@@ -624,12 +635,14 @@ export default {
   components: {
     pagination,
     changeVoice,
+    mergeMusic,
   },
   data() {
     return {
       multipleSelection: [], //
       isEdit: false,
       rowDetail: null,
+      mergeVisible: false,
       changeVoiceVisible: false,
       subjectVisible: false,
       orderVisible: false,
@@ -696,6 +709,7 @@ export default {
       qrcodes2: true,
       qrcode2: null,
       codeUrl2: null,
+      organId: '',
       extendPaymentStatus: false,
       extendForm: {
         expireDate: null,
@@ -764,6 +778,7 @@ export default {
       this.pickerOptions = this.beginDate(new Date());
       getTeamBaseInfo({ musicGroupId: this.id }).then((res) => {
         if (res.code == 200) {
+          this.organId = res.data.musicGroup.organId
           this.applyExpireDate = res.data.musicGroup.applyExpireDate;
           this.paymentExpireDate = res.data.musicGroup.paymentExpireDate;
         }

+ 16 - 1
src/views/teamDetail/teamList.vue

@@ -192,6 +192,10 @@
                 <el-button v-if="permission('recharge/findAll')"
                            type="text"
                            @click="lookSteam(scope.row)">乐团日志</el-button>
+                <!-- 进行中 关闭 -->
+                <el-button type="text"
+                           v-if="scope.row.status == 'PROGRESS' && permission('musicGroup/closeMusicGroup')"
+                           @click="closeTeamDetail(scope.row)">关闭乐团</el-button>
                 <!-- 进行中 查看 -->
                 <el-button type="text"
                            v-if="scope.row.status == 'PROGRESS' && permission('/teamDetails')"
@@ -272,6 +276,9 @@
                      @click="showSteam=false">确 定</el-button>
         </div>
       </el-dialog>
+      <el-dialog :visible.sync="closeVisible" title="确认学员" width="800px">
+        <closeStudens v-if="closeVisible" :detail="closeDetail" @close="closeVisible = false" @submited="getList"/>
+      </el-dialog>
 
     </div>
   </div>
@@ -284,10 +291,13 @@ import { musicGroupStatus } from '@/utils/searchArray'
 import { isObject } from 'util'
 import { permission } from '@/utils/directivePage'
 import teamSteam from './teamListComponent/teamSteam'
+import closeStudens from '../teamBuild/modals/close-studens'
 export default {
   name: "teamList",
   data () {
     return {
+      closeDetail: {},
+      closeVisible: false,
       topForm: {
         teamName: '',
         status: '',
@@ -314,7 +324,8 @@ export default {
   },
   components: {
     pagination,
-    teamSteam
+    teamSteam,
+    closeStudens
   },
   mounted () {
     this.init();
@@ -450,6 +461,10 @@ export default {
 
       }
     },
+    closeTeamDetail(row) {
+      this.closeVisible = true
+      this.closeDetail = {...row}
+    },
     onTeamOpeation (type, row) {
       if (type == 'start') {
         this.$confirm('是否确定开启乐团?', '提示', {