浏览代码

Merge branch '02/23reviewBUG' into test

mo 3 年之前
父节点
当前提交
cec4eaec92

+ 19 - 0
src/api/buildTeam.js

@@ -1628,4 +1628,23 @@ export function confirmPreCourseSchedule(data) {
   })
 }
 
+// 查询退费详情
+export function getRefundsDetail(data) {
+  return request2({
+    url: api + `/musicGroupQuit/queryRefundsDetail`,
+    method: 'get',
+    params:data,
+
+  })
+}
+
+// 发起退团申请 musicGroupQuit/apply
+export function applyMusicGroupQuit(data) {
+  return request2({
+    url: api + `/musicGroupQuit/apply`,
+    method: 'post',
+    data:data,
+    requestType:'json'
+  })
+}
 

+ 3 - 2
src/api/journal.js

@@ -80,7 +80,8 @@ export function quitMusicGroup (data) {
   return request({
     url: api + '/musicGroupQuit/quitMusicGroup',
     method: 'POST',
-    data: qs.stringify(data)
+    data,
+    requestType:'json'
   })
 }
 
@@ -200,4 +201,4 @@ export function rejectTeacherAttendanceComplaints (data) {
     method: 'post',
     data: qs.stringify(data)
   })
-}
+}

+ 2 - 0
src/store/getters.js

@@ -12,6 +12,8 @@ const getters = {
   checkinfo: state => state.buildTeam.checkinfo,
   payList: state => state.buildTeam.payList,
   phone: state => state.user.phone,
+  isSuperAdmin:state=>state.user.isSuperAdmin,
+  roles:state=>state.user.roles,
   newStudentinfo: state => state.buildTeam.newStudentList,
   reactClassStudentList:state=>state.reactClassStudent.classList ,
   buildIndex:state=>state.buildTeam.buildIndex,

+ 15 - 2
src/store/modules/user.js

@@ -8,7 +8,9 @@ const state = {
   avatar: '',
   organ: '',
   organName: '',
-  phone: ''
+  phone: '',
+  isSuperAdmin:false,
+  roles:[]
 }
 // organName
 const mutations = {
@@ -35,6 +37,12 @@ const mutations = {
   },
   SET_PHONE: (state, phone) => {
     state.phone = phone
+  },
+  SET_SUPERADMIN: (state, isSuperAdmin) => {
+    state.isSuperAdmin = isSuperAdmin
+  },
+  SET_ROLES:(state,roles)=>{
+    state.roles = roles
   }
 }
 
@@ -48,7 +56,6 @@ const actions = {
       login({ username: username.trim(), password: password, clientId: 'system', clientSecret: 'system' }).then(response => {
         const { data } = response
         if (response.code == 200) {
-
           let token = data.authentication.token_type + ' ' + data.authentication.access_token;
           commit('SET_REFRESH_TOKEN', data.authentication.refresh_token)
           commit('SET_EXPIRES_IN', data.authentication.expires_in)
@@ -64,7 +71,9 @@ const actions = {
   },
   // get 获取用户信息
   getInfo ({ commit, state }) {
+
     return new Promise((resolve, reject) => {
+
       getInfo(state.token).then(response => {
         if (response.code == 200) {
           const data = response
@@ -76,12 +85,16 @@ const actions = {
           const organ = data.data.organId;
           const organName = data.data.organName;
           const phone = data.data.phone
+          const isSuperAdmin = data.data.isSuperAdmin
+          const roles = data.data.roles
           // const { name, avatar } = data
           commit('SET_NAME', username)
           commit('SET_AVATAR', avatar)
           commit('SET_ORGAN', organ)
           commit('SET_ORGANNAME', organName)
           commit('SET_PHONE', phone)
+          commit('SET_SUPERADMIN',isSuperAdmin)
+          commit('SET_ROLES',roles)
           resolve(data)
         }
       }).catch(error => {

+ 144 - 83
src/views/teamBuild/signupList.vue

@@ -516,7 +516,7 @@
           <template slot-scope="props">
             <el-form label-position="left" class="demo-table-expand">
               <el-row style="margin-left: 64px">
-                 <el-col :span="4">
+                <el-col :span="4">
                   <el-form-item label="入团年份">
                     <span>
                       {{ props.row.createTime | dayjsFormat("YYYY年") }}</span
@@ -525,7 +525,7 @@
                 </el-col>
                 <el-col :span="4">
                   <el-form-item label="报名专业">
-                    <span>{{props.row.subjectName }}</span>
+                    <span>{{ props.row.subjectName }}</span>
                   </el-form-item>
                 </el-col>
                 <el-col :span="4">
@@ -578,7 +578,6 @@
                       :text="props.row.remark"
                     ></overflow-text> </el-form-item
                 ></el-col> -->
-
               </el-row>
             </el-form>
           </template>
@@ -645,11 +644,15 @@
         </el-table-column> -->
         <!-- <el-table-column label="报名专业" prop="subjectName" align="center">
         </el-table-column> -->
-        <el-table-column label="调剂专业" prop="actualSubjectName" align="center">
+        <el-table-column
+          label="调剂专业"
+          prop="actualSubjectName"
+          align="center"
+        >
           <template slot-scope="scope">
             <div>
               <p>
-               {{ scope.row.actualSubjectName }}
+                {{ scope.row.actualSubjectName }}
               </p>
               <!-- <p>报名:{{ scope.row.subjectName }}</p> -->
             </div>
@@ -775,21 +778,21 @@
                 >
               </auth>
               <auth
-                :auths="'musicGroupQuit/directQuitMusicGroup2'"
+                :auths="'musicGroupQuit/apply2'"
                 v-show="scope.row.paymentStatus == 2"
               >
                 <el-button type="text" @click="quitTeam(scope.row)"
-                  >退团退费</el-button
+                  >退团</el-button
                 >
               </auth>
-              <auth
+              <!-- <auth
                 :auths="'musicGroupQuit/directQuitMusicGroup3'"
                 v-show="scope.row.paymentStatus == 2"
               >
                 <el-button type="text" @click="quieTeams(scope.row)"
                   >退团</el-button
                 >
-              </auth>
+              </auth> -->
               <auth
                 :auths="'visit/add/teamSignupList'"
                 v-if="scope.row.visitNum <= 0"
@@ -985,8 +988,8 @@
     <!-- 退团弹窗 -->
     <el-dialog
       title="退团信息确认"
-      :destroy-on-close="true"
-      width="640px"
+      v-if="quitVisible"
+      width="700px"
       :visible.sync="quitVisible"
     >
       <quiteTeam :quitForm="quitForm" :activeRow="activeRow" ref="quitForm" />
@@ -1067,8 +1070,9 @@ import {
   StudentQuit,
   getMusicGroupGradeList,
   checkCanReg,
+  getRefundsDetail,
+  applyMusicGroupQuit,
 } from "@/api/buildTeam";
-
 import { setNoneCloudTeacher, setCloudTeacherToFailed } from "./api";
 import mergeMusic from "./components/merge-music";
 import forecastList from "./components/forecast-list";
@@ -1131,12 +1135,13 @@ export default {
         isRefundCourseFee: null,
         isRefundInstrumentFee: null,
         isRefundTeachingAssistantsFee: null,
-        isMaintenanceFee: null,
-        cloudTeacherAmount: null,
-        isCloudTeacherAmount: null,
-        isRefundMemberFee: null,
-        maintenanceFee: 0,
+        courseViewType: null,
+        hasMaintenance: null,
+        studentName: null,
+        musicGroupName: null,
+        isVisit: false,
         reason: "",
+        userComment: null,
       },
       stepImgs: {
         APPLY: require("@/assets/images/base/clock.png"),
@@ -1237,11 +1242,23 @@ export default {
       gradeList: [],
       ischeckCanReg: false,
       courseViewType: null, // 乐团模式
+      isManage: false,
     };
   },
   created() {},
   mounted() {
     // 通过乐团状态判断显示隐藏的东西
+    let isSuperAdmin = this.$store.getters.isSuperAdmin;
+    let roles = this.$store.getters.roles;
+    if (isSuperAdmin) {
+      this.isManage = true;
+    } else {
+      if (roles.indexof(3) != -1) {
+        this.isManage = true;
+      } else {
+        this.isManage = false;
+      }
+    }
     this.init();
   },
   activated() {
@@ -1720,51 +1737,70 @@ export default {
       this.isEdit = false;
       resetPlanNum(this.leftList).then((res) => {});
     },
-    quitTeam(row) {
-      this.activeRow = row;
-      this.quitVisible = true;
-      this.activeRow.courseViewType = this.courseViewType;
-      this.quitForm.cloudTeacherAmount = row.cloudTeacherAmount;
-    },
-    quieTeams(row) {
-      this.$prompt("请输入退团原因", "提示", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
-        inputPattern: /\S/,
-        inputErrorMessage: "请输入退团原因",
-        type: "warning",
-      })
-        .then((val) => {
-          // 发请求 退团
-          StudentQuit({
-            musicGroupId: this.id,
-            userId: row.studentId,
-            reason: val.value,
-            isRefundCourseFee: false,
-            isRefundInstrumentFee: false,
-            isRefundTeachingAssistantsFee: false,
-            isRefundMemberFee: false,
-          }).then((res) => {
-            this.quitForm = {
-              // 退团信息确认
-              isRefundCourseFee: null,
-              isRefundInstrumentFee: null,
-              isRefundTeachingAssistantsFee: null,
-              isMaintenanceFee: null,
-              cloudTeacherAmount: null,
-              isCloudTeacherAmount: null,
-              maintenanceFee: 0,
-              reason: "",
-            };
-            if (res.code == 200) {
-              this.$message.success("退团成功");
-              this.getList();
-              this.quitVisible = false;
-            }
-          });
-        })
-        .catch(() => {});
+    async quitTeam(row) {
+      try {
+        const res = await getRefundsDetail({
+          musicGroupId: this.$route.query.id,
+          userId: row.studentId,
+        });
+        this.quitForm = {
+          ...this.quitForm,
+          ...res.data,
+          courseViewType: this.courseViewType,
+          studentName: row.studentName,
+          musicGroupName: this.teamName,
+          hasMaintenance:row.hasMaintenance
+        };
+
+        this.activeRow = {...row,...res.data};
+
+        this.activeRow.courseViewType = this.courseViewType;
+        this.quitVisible = true;
+        // this.quitForm.cloudTeacherAmount = row.cloudTeacherAmount;
+      } catch (e) {
+        console.log(e);
+      }
+      //  查询退团费用
     },
+    // quieTeams(row) {
+    //   this.$prompt("请输入退团原因", "提示", {
+    //     confirmButtonText: "确定",
+    //     cancelButtonText: "取消",
+    //     inputPattern: /\S/,
+    //     inputErrorMessage: "请输入退团原因",
+    //     type: "warning",
+    //   })
+    //     .then((val) => {
+    //       // 发请求 退团
+    //       StudentQuit({
+    //         musicGroupId: this.id,
+    //         userId: row.studentId,
+    //         reason: val.value,
+    //         isRefundCourseFee: false,
+    //         isRefundInstrumentFee: false,
+    //         isRefundTeachingAssistantsFee: false,
+    //         isRefundMemberFee: false,
+    //       }).then((res) => {
+    //         this.quitForm = {
+    //           // 退团信息确认
+    //           isRefundCourseFee: null,
+    //           isRefundInstrumentFee: null,
+    //           isRefundTeachingAssistantsFee: null,
+    //           isMaintenanceFee: null,
+    //           cloudTeacherAmount: null,
+    //           isCloudTeacherAmount: null,
+    //           maintenanceFee: 0,
+    //           reason: "",
+    //         };
+    //         if (res.code == 200) {
+    //           this.$message.success("退团成功");
+    //           this.getList();
+    //           this.quitVisible = false;
+    //         }
+    //       });
+    //     })
+    //     .catch(() => {});
+    // },
     chioseType() {
       this.$refs["quitForm"].$refs["quitForm"].validate((res) => {
         if (res) {
@@ -1775,7 +1811,9 @@ export default {
           })
             .then(() => {
               let row = this.activeRow;
+
               let params = {
+                ...this.quitForm,
                 musicGroupId: this.id,
                 userId: row.studentId,
                 reason: this.quitForm.reason,
@@ -1786,27 +1824,49 @@ export default {
                 maintenanceFee: this.quitForm.maintenanceFee,
                 isRefundMemberFee: this.quitForm.isRefundMemberFee,
               };
-              // 退还乐器练习云教练费用
-              if (this.quitForm.isRefundMemberFee) {
-                params.cloudTeacherAmount = this.quitForm.cloudTeacherAmount;
+              params.returnFeeDto = {
+                accessoriesFee: params.accessoriesFee,
+                courseFee: params.courseFee,
+                isReturnAccessoriesFee: params.isReturnAccessoriesFee,
+                isReturnCourseFee: params.isReturnCourseFee,
+                isReturnMaintenanceFee: params.isReturnMaintenanceFee,
+                isReturnMemberFee: params.isReturnMemberFee,
+                isReturnMusicalFee: params.isReturnMusicalFee,
+                maintenanceFee: params.maintenanceFee,
+                memberFee: params.memberFee,
+                musicalFee: params.musicalFee,
+              };
+              if (this.isManage) {
+                params.status = 'APPROVED'
               } else {
-                params.cloudTeacherAmount = 0;
+                params.status = 'PROCESSING'
+              }
+              if( this.activeRow.memberFee < parseFloat(params.returnFeeDto.memberFee)){
+                this.$message.error('会员金额不能超过默认金额')
+                return
+              }
+              if(this.activeRow.maintenanceFee < parseFloat(params.returnFeeDto.maintenanceFee)){
+                 this.$message.error('乐保金额不能超过默认金额')
+                return
               }
               // 发请求 退团
-              StudentQuit(params).then((res) => {
-                this.quitForm = {
-                  // 退团信息确认
-                  isRefundCourseFee: null,
-                  isRefundInstrumentFee: null,
-                  isRefundTeachingAssistantsFee: null,
-                  isMaintenanceFee: null,
-                  cloudTeacherAmount: null,
-                  isCloudTeacherAmount: null,
-                  maintenanceFee: 0,
-                  reason: "",
-                };
+              applyMusicGroupQuit(params).then((res) => {
                 if (res.code == 200) {
-                  this.$message.success("退团成功");
+                  this.quitForm = {
+                    // 退团信息确认
+                    isRefundCourseFee: null,
+                    isRefundInstrumentFee: null,
+                    isRefundTeachingAssistantsFee: null,
+                    reason: "",
+                    courseViewType: null,
+                    hasMaintenance: null,
+                    studentName: null,
+                    musicGroupName: null,
+                    isVisit: false,
+                    reason: "",
+                    userComment: null,
+                  };
+                  this.$message.success("退团申请成功");
                   this.getList();
                   this.quitVisible = false;
                 }
@@ -2054,12 +2114,13 @@ export default {
           isRefundCourseFee: null,
           isRefundInstrumentFee: null,
           isRefundTeachingAssistantsFee: null,
-          isMaintenanceFee: null,
-          cloudTeacherAmount: null,
-          isCloudTeacherAmount: null,
-          maintenanceFee: 0,
+          courseViewType: null,
+          hasMaintenance: null,
+          studentName: null,
+          musicGroupName: null,
+          isVisit: false,
           reason: "",
-          isRefundMemberFee: null,
+          userComment: null,
         };
         this.$refs["quitForm"].$refs["quitForm"].resetFields();
       }

+ 237 - 91
src/views/teamDetail/components/modals/quite-team.vue

@@ -5,106 +5,246 @@
       ref="quitForm"
       label-width="150px"
       :rules="quitRules"
+      :inline="true"
     >
-      <el-form-item
-        label="退还会员费用"
-        prop="isRefundMemberFee"
-        v-if="quitForm.status == 'APPROVED'"
-      >
-        <el-radio v-model.trim="quitForm.isRefundMemberFee" :label="true"
-          >是</el-radio
-        >
-        <el-radio v-model.trim="quitForm.isRefundMemberFee" :label="false"
-          >否</el-radio
-        >
-      </el-form-item>
-      <!-- v-if="activeRow.cloudTeacherAmount > 0" -->
+      <el-row>
+        <el-col :span="10">
+          <el-form-item label="学员姓名" >
+            <span>{{quitForm.studentName}}</span>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="乐团名称">
+            <span>{{quitForm.musicGroupName}}</span>
+          </el-form-item>
+        </el-col>
+      </el-row>
 
-      <el-form-item label="退还云教练费用" prop="isRefundMemberFee" v-if="activeRow.courseViewType == 2">
-        <el-radio v-model.trim="quitForm.isRefundMemberFee" label="true"
-          >是</el-radio
-        >
-        <el-radio v-model.trim="quitForm.isRefundMemberFee" label="false"
-          >否</el-radio
-        >
-      </el-form-item>
-      <el-form-item
-        label="退还云教练金额"
-        prop="cloudTeacherAmount"
-        v-if="quitForm.isRefundMemberFee&&quitForm.isRefundMemberFee!='false'"
-      >
-        <el-input
-          type="number"
-          v-model.trim="quitForm.cloudTeacherAmount"
-          style="width: 180px"
-        >
-          <template slot="append">元</template>
-        </el-input>
-      </el-form-item>
-      <el-form-item label="退还课程费用" prop="isRefundCourseFee">
-        <el-radio v-model.trim="quitForm.isRefundCourseFee" :label="true"
-          >是</el-radio
-        >
-        <el-radio v-model.trim="quitForm.isRefundCourseFee" :label="false"
-          >否</el-radio
-        >
-      </el-form-item>
-      <el-form-item label="退还乐器费用" prop="isRefundInstrumentFee">
-        <el-radio v-model.trim="quitForm.isRefundInstrumentFee" :label="true"
-          >是</el-radio
-        >
-        <el-radio v-model.trim="quitForm.isRefundInstrumentFee" :label="false"
-          >否</el-radio
-        >
-      </el-form-item>
-      <el-form-item label="退还教辅费用" prop="isRefundTeachingAssistantsFee">
-        <el-radio
-          v-model.trim="quitForm.isRefundTeachingAssistantsFee"
-          :label="true"
-          >是</el-radio
-        >
-        <el-radio
-          v-model.trim="quitForm.isRefundTeachingAssistantsFee"
-          :label="false"
-          >否</el-radio
-        >
-      </el-form-item>
-      <el-form-item
-        label="退还乐保费用"
-        prop="isMaintenanceFee"
-        v-if="activeRow.hasMaintenance"
-      >
-        <el-radio v-model.trim="quitForm.isMaintenanceFee" :label="true"
-          >是</el-radio
-        >
-        <el-radio v-model.trim="quitForm.isMaintenanceFee" :label="false"
-          >否</el-radio
-        >
-      </el-form-item>
-      <el-form-item
-        label="退还乐保金额"
-        prop="maintenanceFee"
-        v-if="quitForm.isMaintenanceFee"
-      >
+      <el-row>
+        <el-form-item label="是否回访" prop="isVisit"   >
+          <el-radio v-model.trim="quitForm.isVisit" :label="true"
+          :disabled='isDisabled'
+            >是</el-radio
+          >
+          <el-radio  :disabled='isDisabled' v-model.trim="quitForm.isVisit" :label="false"
+            >否</el-radio
+          >
+        </el-form-item>
+        <el-form-item label="回访时间" v-if="quitForm.isVisit" :rules="[{required: true, message: '请选择回访回访时间'}]">
+          <el-date-picker
+           :disabled='isDisabled'
+            v-model.trim="quitForm.visitTime"
+            align="right"
+            type="date"
+            style="width: 180px !important"
+            placeholder="选择日期"
+            value-format="yyyy-MM-dd"
+            :picker-options="pickerOptions"
+          ></el-date-picker>
+        </el-form-item>
+      </el-row>
+      <!-- <el-row>
+        <el-form-item label="是否退费">
+          <el-radio v-model.trim="quitForm.isQuiteFee" :label="true"
+            >是</el-radio
+          >
+          <el-radio v-model.trim="quitForm.isQuiteFee" :label="false"
+            >否</el-radio
+          >
+        </el-form-item>
+      </el-row> -->
+      <!-- v-if="quitForm.isQuiteFee" -->
+      <div>
+        <el-row>
+          <el-form-item
+            label="退还会员费用"
+            prop="isReturnMemberFee"
+            v-if="quitForm.courseViewType == 2"
+            :rules="[{required: true, message: '请选择是否退还会员费用'}]"
+          >
+            <el-radio  :disabled='isDisabled' v-model.trim="quitForm.isReturnMemberFee" :label="true"
+              >是</el-radio
+            >
+            <el-radio  :disabled='isDisabled' v-model.trim="quitForm.isReturnMemberFee" :label="false"
+              >否</el-radio
+            >
+          </el-form-item>
+          <el-form-item
+            label="退还会员金额"
+             :rules="[{required: true, message: '请输入会员金额'}]"
+            prop="memberFee"
+            v-if="
+              quitForm.isReturnMemberFee
+            "
+          >
+            <el-input
+             :disabled='isDisabled'
+              type="number"
+              v-model.trim="quitForm.memberFee"
+              style="width: 180px"
+            >
+              <template slot="append">元</template>
+            </el-input>
+          </el-form-item>
+        </el-row>
+
+        <!-- v-if="activeRow.cloudTeacherAmount > 0" -->
+
+        <el-row>
+          <el-form-item label="退还课程费用" prop="isReturnCourseFee"   :rules="[{required: true, message: '请选择是否退还课程费用'}]">
+            <el-radio  :disabled='isDisabled' v-model.trim="quitForm.isReturnCourseFee" :label="true"
+              >是</el-radio
+            >
+            <el-radio  :disabled='isDisabled' v-model.trim="quitForm.isReturnCourseFee" :label="false"
+              >否</el-radio
+            >
+          </el-form-item>
+          <el-form-item
+            label="退还课程金额"
+            prop="courseFee"
+            v-if="
+            quitForm.isReturnCourseFee
+            "
+          >
+            <el-input
+            disabled
+              type="number"
+              v-model.trim="quitForm.courseFee"
+              style="width: 180px"
+            >
+              <template slot="append">元</template>
+            </el-input>
+          </el-form-item>
+        </el-row>
+        <el-row>
+          <el-form-item label="退还乐器费用" prop="isReturnMusicalFee"  :rules="[{required: true, message: '请选择是否退还乐器费用'}]">
+            <el-radio
+             :disabled='isDisabled'
+              v-model.trim="quitForm.isReturnMusicalFee"
+              :label="true"
+              >是</el-radio
+            >
+            <el-radio
+             :disabled='isDisabled'
+              v-model.trim="quitForm.isReturnMusicalFee"
+              :label="false"
+              >否</el-radio
+            >
+          </el-form-item>
+          <el-form-item
+            label="退还乐器金额"
+            prop="musicalFee"
+            v-if="
+              quitForm.isReturnMusicalFee
+            "
+          >
+            <el-input
+              type="number"
+              disabled
+              v-model.trim="quitForm.musicalFee"
+              style="width: 180px"
+            >
+              <template slot="append">元</template>
+            </el-input>
+          </el-form-item>
+        </el-row>
+        <el-row>
+          <el-form-item
+          :rules="[{required: true, message: '请选择是否退还教辅费用'}]"
+            label="退还教辅费用"
+            prop="isReturnAccessoriesFee"
+          >
+            <el-radio
+             :disabled='isDisabled'
+              v-model.trim="quitForm.isReturnAccessoriesFee"
+              :label="true"
+              >是</el-radio
+            >
+            <el-radio
+             :disabled='isDisabled'
+              v-model.trim="quitForm.isReturnAccessoriesFee"
+              :label="false"
+              >否</el-radio
+            >
+          </el-form-item>
+          <el-form-item
+            label="退还教辅金额"
+            prop="accessoriesFee"
+            v-if="quitForm.isReturnAccessoriesFee"
+          >
+            <el-input
+               disabled
+              type="number"
+              v-model.trim="quitForm.accessoriesFee"
+              style="width: 180px"
+            >
+              <template slot="append">元</template>
+            </el-input>
+          </el-form-item>
+        </el-row>
+        <el-row>
+          <el-form-item
+            label="退还乐保费用"
+            :rules="[{required: true, message: '请选择是否退还乐保费用'}]"
+            prop="isReturnMaintenanceFee"
+            v-if="quitForm.hasMaintenance"
+          >
+            <el-radio
+             :disabled='isDisabled'
+             v-model.trim="quitForm.isReturnMaintenanceFee" :label="true"
+              >是</el-radio
+            >
+            <el-radio
+             :disabled='isDisabled'
+             v-model.trim="quitForm.isReturnMaintenanceFee" :label="false"
+              >否</el-radio
+            >
+          </el-form-item>
+          <el-form-item
+            label="退还乐保金额"
+            :rules="[{required: true, message: '请输入乐保金额'}]"
+            prop="maintenanceFee"
+            v-if="quitForm.hasMaintenance&&quitForm.isReturnMaintenanceFee"
+          >
+            <el-input
+              type="number"
+              disabled
+              v-model="quitForm.maintenanceFee"
+              style="width: 180px"
+            >
+              <template slot="append">元</template>
+            </el-input>
+          </el-form-item>
+        </el-row>
+      </div>
+      <el-row>
+        <el-form-item label="申请理由" prop="userComment">
+          <el-input
+            type="textarea"
+            :rows="3"
+             :disabled='isDisabled'
+            v-model.trim="quitForm.userComment"
+            style="width: 455px !important"
+          ></el-input>
+        </el-form-item>
+      </el-row>
+      <el-form-item label="审批理由" prop="reason">
         <el-input
-          type="number"
-          v-model="quitForm.maintenanceFee"
-          style="width: 180px"
-        >
-          <template slot="append">元</template>
-        </el-input>
-      </el-form-item>
-      <el-form-item label="退团原因" prop="reason">
-        <el-input type="textarea" v-model.trim="quitForm.reason"></el-input>
+         :disabled='isDisabled'
+          type="textarea"
+          :rows="3"
+          v-model.trim="quitForm.reason"
+          style="width: 455px !important"
+        ></el-input>
       </el-form-item>
     </el-form>
   </div>
 </template>
 <script>
 export default {
-  props: ["quitForm", "activeRow"],
-  mounted(){
-    console.log('quitForm',this.quitForm,'activeRow',this.activeRow)
+  props: ["quitForm",'isDisabled'],
+  mounted() {
+    console.log("quitForm", this.quitForm);
   },
   data() {
     return {
@@ -129,6 +269,12 @@ export default {
           { required: true, message: "请选择是否退还会员费用" },
         ],
       },
+      pickerOptions: {
+        firstDayOfWeek: 1,
+        disabledDate(time) {
+          return time.getTime() > new Date().getTime();
+        },
+      },
     };
   },
 };

+ 161 - 106
src/views/teamDetail/components/studentList.vue

@@ -471,38 +471,38 @@
           align="center"
           width="120px;"
         >
-        <template slot-scope="scope">
-              <div v-if="scope.row.membershipEndTime">
-                <div v-if="scope.row.membershipDay >= 0">
-                  {{ scope.row.membershipEndTime | dayjsFormat }}
-                  <p class="red">剩余{{ scope.row.membershipDay }}天</p>
+          <template slot-scope="scope">
+            <div v-if="scope.row.membershipEndTime">
+              <div v-if="scope.row.membershipDay >= 0">
+                {{ scope.row.membershipEndTime | dayjsFormat }}
+                <p class="red">剩余{{ scope.row.membershipDay }}天</p>
+              </div>
+              <!-- 已过期 -->
+              <div v-else>
+                <!-- 有未生效 -->
+                <div v-if="scope.row.hasNoStartCloudTeacher">
+                  <p>会员未生效</p>
                 </div>
-                <!-- 已过期 -->
+                <!-- 无未生效 -->
                 <div v-else>
-                  <!-- 有未生效 -->
-                  <div v-if="scope.row.hasNoStartCloudTeacher">
-                    <p>会员未生效</p>
-                  </div>
-                  <!-- 无未生效 -->
-                  <div v-else>
-                    {{ scope.row.membershipEndTime | dayjsFormat }}
-                    <p class="red" v-if="scope.row.membershipDay < 0">
-                      已过期{{ Math.abs(scope.row.membershipDay) }}天
-                    </p>
-                  </div>
+                  {{ scope.row.membershipEndTime | dayjsFormat }}
+                  <p class="red" v-if="scope.row.membershipDay < 0">
+                    已过期{{ Math.abs(scope.row.membershipDay) }}天
+                  </p>
                 </div>
+              </div>
 
-                <!-- <div></div>
+              <!-- <div></div>
                 <p v-if="scope.row.hasNoStartCloudTeacher">
                   {{ scope.row.membershipEndTime | dayjsFormat }}
                 </p> -->
-              </div>
+            </div>
 
-              <div v-else class="red">
-                <div v-if="scope.row.hasNoStartCloudTeacher">会员未生效</div>
-                <div v-else>未购买会员</div>
-              </div>
-            </template>
+            <div v-else class="red">
+              <div v-if="scope.row.hasNoStartCloudTeacher">会员未生效</div>
+              <div v-else>未购买会员</div>
+            </div>
+          </template>
         </el-table-column>
         <el-table-column label="备注" prop="remark" align="center">
           <template slot-scope="scope">
@@ -538,13 +538,13 @@
               <el-button
                 type="text"
                 v-if="
-                  permission('musicGroupQuit/directQuitMusicGroup/3852') &&
+                  permission('musicGroupQuit/apply/3852') &&
                   scope.row.studentStatus != 'QUIT'
                 "
                 @click="quieTeamMask(scope.row)"
-                >退团退费</el-button
+                >退团</el-button
               >
-              <el-button
+              <!-- <el-button
                 type="text"
                 v-if="
                   permission('musicGroupQuit/directQuitMusicGroup/3851') &&
@@ -552,7 +552,7 @@
                 "
                 @click="quieTeam(scope.row)"
                 >退团</el-button
-              >
+              > -->
 
               <el-button
                 type="text"
@@ -762,8 +762,8 @@
       </el-form>
     </el-dialog>
     <!-- 退团弹窗 -->
-    <el-dialog title="退团信息确认" width="640px" :visible.sync="quitVisible">
-      <quiteTeam :quitForm="quitForm" :activeRow="activeRow" ref="quitForm" />
+    <el-dialog title="退团信息确认" width="700px" :visible.sync="quitVisible">
+      <quiteTeam :quitForm="quitForm" ref="quitForm" />
       <span slot="footer" class="dialog-footer question">
         <div>
           <el-popover placement="right" width="500" trigger="click">
@@ -959,6 +959,8 @@ import {
   StudentFeeIsLock,
   updateStudentFee,
   getMusicGroupGradeList,
+  getRefundsDetail,
+  applyMusicGroupQuit,
 } from "@/api/buildTeam";
 import {
   addStudent,
@@ -1027,14 +1029,16 @@ export default {
       organizationCourseUnitPriceSettings: [],
       quitForm: {
         // 退团信息确认
-        isCloudTeacherAmount: null,
-        cloudTeacherAmount: null,
         isRefundCourseFee: null,
         isRefundInstrumentFee: null,
         isRefundTeachingAssistantsFee: null,
-        isMaintenanceFee: null,
-        maintenanceFee: 0,
+        courseViewType: null,
+        hasMaintenance: null,
+        studentName: null,
+        musicGroupName: null,
+        isVisit: false,
         reason: "",
+        userComment: null,
       },
       classMask: {
         studentName: "",
@@ -1176,6 +1180,7 @@ export default {
       organId: "",
       addTryVisible: false,
       memberRankList: [],
+      isManage:false
     };
   },
   components: {
@@ -1206,6 +1211,17 @@ export default {
   //   this.init();
   // },
   async mounted() {
+      let isSuperAdmin = this.$store.getters.isSuperAdmin;
+    let roles = this.$store.getters.roles;
+    if (isSuperAdmin) {
+      this.isManage = true;
+    } else {
+      if (roles.indexof(3) != -1) {
+        this.isManage = true;
+      } else {
+        this.isManage = false;
+      }
+    }
     try {
       const res = await getOrganizationCourseUnitPriceSettings({
         rows: 9999,
@@ -1471,6 +1487,7 @@ export default {
             .then(() => {
               let row = this.activeRow;
               let params = {
+                ...this.quitForm,
                 musicGroupId: this.teamid,
                 userId: row.userId,
                 reason: this.quitForm.reason,
@@ -1481,27 +1498,54 @@ export default {
                 maintenanceFee: this.quitForm.maintenanceFee,
                 isRefundMemberFee: this.quitForm.isRefundMemberFee,
               };
-              // 退还乐器练习云教练费用
-              if (this.quitForm.isRefundMemberFee) {
-                params.cloudTeacherAmount = this.quitForm.cloudTeacherAmount;
+              params.returnFeeDto = {
+                accessoriesFee: params.accessoriesFee,
+                courseFee: params.courseFee,
+                isReturnAccessoriesFee: params.isReturnAccessoriesFee,
+                isReturnCourseFee: params.isReturnCourseFee,
+                isReturnMaintenanceFee: params.isReturnMaintenanceFee,
+                isReturnMemberFee: params.isReturnMemberFee,
+                isReturnMusicalFee: params.isReturnMusicalFee,
+                maintenanceFee: params.maintenanceFee,
+                memberFee: params.memberFee,
+                musicalFee: params.musicalFee,
+              };
+              if (this.isManage) {
+                params.status = "APPROVED";
               } else {
-                params.cloudTeacherAmount = 0;
+                params.status = "PROCESSING";
+              }
+              // 退还乐器练习云教练费用
+              if (
+                this.activeRow.memberFee <
+                parseFloat(params.returnFeeDto.memberFee)
+              ) {
+                this.$message.error("会员金额不能超过默认金额");
+                return;
+              }
+              if (
+                this.activeRow.maintenanceFee <
+                parseFloat(params.returnFeeDto.maintenanceFee)
+              ) {
+                this.$message.error("乐保金额不能超过默认金额");
+                return;
               }
               // 发请求 退团
-              StudentQuit(params).then((res) => {
-                this.quitForm = {
-                  // 退团信息确认
-                  isRefundCourseFee: null,
-                  isRefundInstrumentFee: null,
-                  isRefundTeachingAssistantsFee: null,
-                  isMaintenanceFee: null,
-                  cloudTeacherAmount: null,
-                  isCloudTeacherAmount: null,
-                  isRefundMemberFee: null,
-                  maintenanceFee: 0,
-                  reason: "",
-                };
+              applyMusicGroupQuit(params).then((res) => {
                 if (res.code == 200) {
+                  this.quitForm = {
+                    // 退团信息确认
+                    isRefundCourseFee: null,
+                    isRefundInstrumentFee: null,
+                    isRefundTeachingAssistantsFee: null,
+                    courseViewType: null,
+                    hasMaintenance: null,
+                    studentName: null,
+                    musicGroupName: null,
+                    isVisit: false,
+                    reason: "",
+                    userComment: null,
+                  };
                   this.$message.success("退团成功");
                   this.getList();
                   this.quitVisible = false;
@@ -1688,50 +1732,68 @@ export default {
         }
       });
     },
-    quieTeamMask(row) {
-      this.activeRow = row;
+    async quieTeamMask(row) {
       this.activeRow.courseViewType = this.baseInfo.courseViewType;
+
       this.quitVisible = true;
-      this.quitForm.cloudTeacherAmount = row.cloudTeacherAmount;
-    },
-    quieTeam(row) {
-      this.$prompt("请输入退团原因", "提示", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
-        type: "warning",
-        inputPattern: /\S/,
-        inputErrorMessage: "请输入退团原因",
-      })
-        .then((val) => {
-          // 发请求 退团
-          StudentQuit({
-            musicGroupId: this.teamid,
-            userId: row.userId,
-            reason: val.value,
-            isRefundCourseFee: false,
-            isRefundInstrumentFee: false,
-            isRefundTeachingAssistantsFee: false,
-          }).then((res) => {
-            this.quitForm = {
-              // 退团信息确认
-              isRefundCourseFee: null,
-              isRefundInstrumentFee: null,
-              isRefundTeachingAssistantsFee: null,
-              isMaintenanceFee: null,
-              cloudTeacherAmount: null,
-              isCloudTeacherAmount: null,
-              maintenanceFee: 0,
-              reason: "",
-            };
-            if (res.code == 200) {
-              this.$message.success("退团成功");
-              this.getList();
-              this.quitVisible = false;
-            }
-          });
-        })
-        .catch(() => {});
+      try {
+        const res = await getRefundsDetail({
+          musicGroupId: this.$route.query.id,
+          userId: row.userId,
+        });
+        this.quitForm = {
+          ...this.quitForm,
+          ...res.data,
+          courseViewType: this.baseInfo.courseViewType,
+          studentName: row.realName,
+          musicGroupName: this.baseInfo.name,
+          hasMaintenance: row.hasMaintenance,
+        };
+        this.activeRow = {...row,...res.data};
+        this.quitVisible = true;
+        // this.quitForm.cloudTeacherAmount = row.cloudTeacherAmount;
+      } catch (e) {
+        console.log(e);
+      }
     },
+    // quieTeam(row) {
+    //   this.$prompt("请输入退团原因", "提示", {
+    //     confirmButtonText: "确定",
+    //     cancelButtonText: "取消",
+    //     type: "warning",
+    //     inputPattern: /\S/,
+    //     inputErrorMessage: "请输入退团原因",
+    //   })
+    //     .then((val) => {
+    //       // 发请求 退团
+    //       StudentQuit({
+    //         musicGroupId: this.teamid,
+    //         userId: row.userId,
+    //         reason: val.value,
+    //         isRefundCourseFee: false,
+    //         isRefundInstrumentFee: false,
+    //         isRefundTeachingAssistantsFee: false,
+    //       }).then((res) => {
+    //         this.quitForm = {
+    //           // 退团信息确认
+    //           isRefundCourseFee: null,
+    //           isRefundInstrumentFee: null,
+    //           isRefundTeachingAssistantsFee: null,
+    //           isMaintenanceFee: null,
+    //           cloudTeacherAmount: null,
+    //           isCloudTeacherAmount: null,
+    //           maintenanceFee: 0,
+    //           reason: "",
+    //         };
+    //         if (res.code == 200) {
+    //           this.$message.success("退团成功");
+    //           this.getList();
+    //           this.quitVisible = false;
+    //         }
+    //       });
+    //     })
+    //     .catch(() => {});
+    // },
     checkPhone(val) {
       var regu = /^1[3456789]\d{9}$/;
       var re = new RegExp(regu);
@@ -1821,7 +1883,6 @@ export default {
       this.visitForm.purpose = val[1];
     },
     submitAddVisit() {
-      console.log(this.$refs.visitForm);
       this.$refs.visitForm.validate((res) => {
         if (res) {
           addVisit(cleanDeep(this.visitForm)).then((res) => {
@@ -1912,13 +1973,6 @@ export default {
         this.getMusicClass();
       }
     },
-    "quitForm.isMaintenanceFee"(val) {
-      if (val) {
-        this.quitForm.maintenanceFee = 300;
-      } else {
-        this.quitForm.maintenanceFee = 0;
-      }
-    },
     quitVisible(val) {
       if (!val) {
         this.quitForm = {
@@ -1926,12 +1980,13 @@ export default {
           isRefundCourseFee: null,
           isRefundInstrumentFee: null,
           isRefundTeachingAssistantsFee: null,
-          isMaintenanceFee: null,
-          cloudTeacherAmount: null,
-          isCloudTeacherAmount: null,
-          isRefundMemberFee: null,
-          maintenanceFee: 0,
+          courseViewType: null,
+          hasMaintenance: null,
+          studentName: null,
+          musicGroupName: null,
+          isVisit: false,
           reason: "",
+          userComment: null,
         };
         this.$refs["quitForm"].$refs["quitForm"].resetFields();
       }
@@ -2125,6 +2180,6 @@ export default {
   padding: 20px 0 20px 110px;
 }
 .red {
-  color:red;
+  color: red;
 }
 </style>

+ 273 - 71
src/views/withdrawal-application/index.vue

@@ -1,7 +1,13 @@
 <template>
   <div class="m-container">
     <h2>
-      <div class="squrt"></div>退团申请 <filter-search @reload="reloadSearch" :keys="['visitFlag']" :moreKeys="['organId']"/>
+      <div class="squrt"></div>
+      退团申请
+      <filter-search
+        @reload="reloadSearch"
+        :keys="['visitFlag']"
+        :moreKeys="['organId']"
+      />
     </h2>
     <div class="m-core">
       <save-form
@@ -19,7 +25,11 @@
           ></el-input>
         </el-form-item>
         <el-form-item>
-          <el-select v-model="searchForm.status" clearable placeholder="请选择状态">
+          <el-select
+            v-model="searchForm.status"
+            clearable
+            placeholder="请选择状态"
+          >
             <el-option
               v-for="(item, key) in withdrawalStatus"
               :key="key"
@@ -31,7 +41,12 @@
         <el-form-item>
           <el-button native-type="submit" type="danger">搜索</el-button>
           <el-button native-type="reset" type="primary">重置</el-button>
-          <el-button @click="onExport" type="primary" v-permission="'export/musicGroupQuit'">导出</el-button>
+          <el-button
+            @click="onExport"
+            type="primary"
+            v-permission="'export/musicGroupQuit'"
+            >导出</el-button
+          >
         </el-form-item>
       </save-form>
       <el-table
@@ -39,23 +54,44 @@
         style="width: 100%"
         :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
       >
-        <el-table-column
-          prop="userId"
-          label="学员编号"
-        >
-          <copy-text slot-scope="scope">{{scope.row.userId}}</copy-text>
+        <el-table-column prop="userId" label="学员编号">
+          <copy-text slot-scope="scope">{{ scope.row.userId }}</copy-text>
         </el-table-column>
-        <el-table-column
-          prop="userId"
-          label="学员姓名"
-        >
-          <copy-text slot-scope="scope">{{scope.row.user.username}}</copy-text>
+        <el-table-column prop="userId" label="学员姓名">
+          <copy-text slot-scope="scope">{{
+            scope.row.user.username
+          }}</copy-text>
         </el-table-column>
-        <el-table-column
-          prop="musicGroupId"
-          label="所属乐团"
-        >
-          <copy-text slot-scope="scope">{{scope.row.musicGroup.name}}</copy-text>
+        <el-table-column prop="musicGroupId" label="所属乐团">
+          <copy-text slot-scope="scope">{{
+            scope.row.musicGroup.name
+          }}</copy-text>
+        </el-table-column>
+
+        <el-table-column prop="createTime" label="申请时间">
+          <template slot-scope="scope">
+            <div>
+              {{ scope.row.createTime | dateForMinFormat }}
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column prop="createTime" label="申请人"></el-table-column>
+        <el-table-column prop="createTime" label="退费金额">
+          <template slot-scope="scope">
+            <div>
+              <p v-if="scope.row.status == 'PROCESSING'">--</p>
+              <p v-else>
+                {{ scope.row.returnTotalFee | moneyFormat }}
+              </p>
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column prop="userComment" label="退团原因">
+          <overflow-text
+            width="100%"
+            slot-scope="scope"
+            :text="scope.row.userComment"
+          ></overflow-text>
         </el-table-column>
         <el-table-column label="状态">
           <template slot-scope="scope">
@@ -63,29 +99,31 @@
           </template>
         </el-table-column>
         <el-table-column
-          prop="createTime"
-          label="申请时间"
-        ></el-table-column>
-        <el-table-column
-          prop="userComment"
-          label="退团原因"
-        >
-          <overflow-text width="100%" slot-scope="scope" :text="scope.row.userComment"></overflow-text>
-        </el-table-column>
-        <el-table-column
           align="center"
           fixed="right"
           width="200px;"
           label="操作"
-          v-if="permission('musicGroupQuit/quitMusicGroup/quit') || permission('musicGroupQuit/quitMusicGroup/quit-only') || permission('visit/add/tuituanliebiao')"
+          v-if="
+            permission('musicGroupQuit/quitMusicGroup/quit') ||
+            permission('musicGroupQuit/quitMusicGroup/quit-only') ||
+            permission('visit/add/tuituanliebiao')
+          "
         >
           <template slot-scope="scope">
             <el-button
               type="text"
               v-if="permission('musicGroupQuit/quitMusicGroup/quit')"
-              :disabled="scope.row.status != 'PROCESSING'"
+              :disabled="(scope.row.status != 'PROCESSING'||scope.row.status =='DENIED'||scope.row.status =='CANCELED')||!isManage&&currentApproveRole=='4'"
               @click="quieTeamMask(scope.row)"
-            >审核</el-button>
+              >立即处理</el-button
+            >
+            <el-button
+              type="text"
+              v-if="permission('musicGroupQuit/quitMusicGroup/quit')"
+              :disabled="scope.row.status == 'PROCESSING'"
+              @click="quieTeamMask(scope.row,'look')"
+              >查看</el-button
+            >
             <!-- <el-button
               type="text"
               v-if="permission('musicGroupQuit/quitMusicGroup/quit-only')"
@@ -96,7 +134,8 @@
               type="text"
               v-if="permission('visit/add/tuituanliebiao')"
               @click="addVisit(scope.row)"
-            >新增回访</el-button>
+              >新增回访</el-button
+            >
           </template>
         </el-table-column>
       </el-table>
@@ -109,13 +148,58 @@
         @pagination="FetchList"
       />
     </div>
-    <el-dialog title="审核" width="640px" :visible.sync="quitVisible">
+    <el-dialog :title="isDisabled?'查看':'立即处理'" width="700px" :visible.sync="quitVisible">
       <quitModal
-        v-if="quitVisible && detail"
-        :detail="detail"
+        v-if="quitVisible"
+        :quitForm="quitForm"
         @close="quitVisible = false"
         @submited="FetchList"
+        :isDisabled="isDisabled"
+        ref="musicForm"
       />
+      <span slot="footer" class="dialog-footer question">
+        <div>
+          <el-popover placement="right" width="500" trigger="click">
+            <div class="popoverWrap">
+              <p>乐团退团退费规则:</p>
+              <p>退还乐器练习云教练费用:报名缴费时缴费的乐器练习云教练费用</p>
+              <p>退还课程费用:缴费总额-已结束课时单价之和</p>
+              <p>退还乐器费用:报名缴费时缴纳的乐器费用(团购、租金)</p>
+              <p>退还教辅费用:报名缴费时缴费的教辅费用</p>
+              <p>退还乐保费用:报名缴费时缴费的乐保费用</p>
+            </div>
+            <el-button
+              type="text"
+              icon="el-icon-question"
+              slot="reference"
+              style="color: red"
+              >退团退费说明</el-button
+            >
+          </el-popover>
+        </div>
+        <div v-if="!isDisabled">
+          <el-button
+            type="primary"
+            v-permission="'musicGroupQuit/quitMusicGroup'"
+            v-if="!isManage"
+            @click="submitInfo('PROCESSING')"
+            >提交审核</el-button
+          >
+          <el-button
+            v-else
+            type="primary"
+            v-permission="'musicGroupQuit/quitMusicGroup'"
+            @click="submitInfo('APPROVED')"
+            >同意</el-button
+          >
+          <el-button
+            type="danger"
+            v-permission="'musicGroupQuit/quitMusicGroup'"
+            @click="submitInfo('DENIED')"
+            >拒绝</el-button
+          >
+        </div>
+      </span>
     </el-dialog>
     <!-- <el-dialog title="退团" width="500px" :visible.sync="quitOnlyVisible">
       <quitOnlyModal
@@ -137,18 +221,21 @@
 </template>
 <script>
 import pagination from "@/components/Pagination/index";
-import { permission } from '@/utils/directivePage'
-import quitModal from './modals/quit'
-import quitOnlyModal from './modals/quitOnly'
-import visit from './modals/visit'
-import { Export } from '@/utils/downLoadFile'
-import qs from 'qs'
-import { musicGroupQuitQeryPage } from './api'
-import { withdrawalStatus } from '@/constant'
+import { permission } from "@/utils/directivePage";
+import quitModal from "@/views/teamDetail/components/modals/quite-team";
+import quitOnlyModal from "./modals/quitOnly";
+import visit from "./modals/visit";
+import { Export } from "@/utils/downLoadFile";
+import { quitMusicGroup } from "@/api/journal";
+import qs from "qs";
+import { musicGroupQuitQeryPage } from "./api";
+import cleanDeep from "clean-deep";
+import { musicGroupQuit } from "@/api/journal";
+import { withdrawalStatus } from "@/constant";
 const initSearch = {
-  search: '',
-  status: null
-}
+  search: "",
+  status: null,
+};
 export default {
   components: { pagination, quitModal, quitOnlyModal, visit },
   data() {
@@ -160,7 +247,7 @@ export default {
       detail: null,
       list: [],
       searchForm: {
-        ...initSearch
+        ...initSearch,
       },
       rules: {
         // 分页规则
@@ -169,10 +256,36 @@ export default {
         total: 0, // 总条数
         page_size: [10, 20, 40, 50], // 选择限制显示条数
       },
-    }
+      quitForm: {
+        // 退团信息确认
+        isRefundCourseFee: null,
+        isRefundInstrumentFee: null,
+        isRefundTeachingAssistantsFee: null,
+        reason: "",
+        courseViewType: null,
+        hasMaintenance: null,
+        studentName: null,
+        musicGroupName: null,
+        isVisit: false,
+        userComment: null,
+      },
+      isManage: false,
+      isDisabled:false
+    };
   },
   mounted() {
-    this.FetchList()
+    let isSuperAdmin = this.$store.getters.isSuperAdmin;
+    let roles = this.$store.getters.roles;
+    if (isSuperAdmin) {
+      this.isManage = true;
+    } else {
+      if (roles.indexof(3) != -1) {
+        this.isManage = true;
+      } else {
+        this.isManage = false;
+      }
+    }
+    this.FetchList();
   },
   methods: {
     permission,
@@ -181,24 +294,49 @@ export default {
       this.FetchList();
     },
     submit() {
-      this.rules.page = 1
-      this.FetchList()
+      this.rules.page = 1;
+      this.FetchList();
     },
     onReSet() {
-      this.searchForm = {...initSearch}
+      this.searchForm = { ...initSearch };
       this.submit();
     },
-    quieTeamMask(row) {
-      this.quitVisible = true
-      this.detail = row
+    async quieTeamMask(row,look) {
+      await musicGroupQuit({ id: row.id }).then((res) => {
+        if (res.code == 200) {
+          if(look=='look'){
+            this.isDisabled = true
+          }else{
+            this.isDisabled = false
+          }
+          this.musicForm = res.data;
+          console.log(res.data.userComment)
+          this.activeRow = { ...row, ...res.data.returnFeeDto };
+          this.quitForm.courseViewType = res.data.musicGroup.courseViewType;
+          this.quitForm.userComment = res.data.userComment;
+          this.quitForm.isVisit = res.data.isVisit;
+          this.quitForm.visitTime = res.data.visitTime;
+          this.quitForm.studentName = res.data.user?.username;
+          this.quitForm.musicGroupName = res.data.musicGroup?.name;
+          this.quitForm.hasMaintenance = res.data.hasMaintenance;
+          this.quitForm.reason = res.data.reason
+          this.quitForm.id = res.data.id;
+          this.quitForm = { ...this.quitForm, ...res.data.returnFeeDto };
+          this.quitVisible = true;
+        } else {
+          this.$message.error(res.msg);
+        }
+      });
+
+      // this.detail = row;
     },
     quieTeam(row) {
-      this.quitOnlyVisible = true
-      this.detail = row
+      this.quitOnlyVisible = true;
+      this.detail = row;
     },
     addVisit(row) {
-      this.visitVisible = true
-      this.detail = row
+      this.visitVisible = true;
+      this.detail = row;
     },
     async FetchList() {
       try {
@@ -207,20 +345,84 @@ export default {
           rows: this.rules.limit,
           visitFlag: this.$route.query.visitFlag,
           ...this.searchForm,
-        })
+        });
         this.rules.total = res.data.total;
-        this.list = res.data.rows
+        this.list = res.data.rows;
       } catch (error) {}
     },
     onExport() {
-      const { ...rest} = this.searchForm
-      Export(this, {
-        url: '/api-web/export/musicGroupQuit',
-        fileName: '退团申请.xls',
-        method: 'post',
-        params: qs.stringify({ visitFlag: this.$route.query.visitFlag, ...rest })
-      }, '您确定导出退团申请列表?')
-    }
-  }
-}
+      const { ...rest } = this.searchForm;
+      Export(
+        this,
+        {
+          url: "/api-web/export/musicGroupQuit",
+          fileName: "退团申请.xls",
+          method: "post",
+          params: qs.stringify({
+            visitFlag: this.$route.query.visitFlag,
+            ...rest,
+          }),
+        },
+        "您确定导出退团申请列表?"
+      );
+    },
+    submitInfo(status) {
+      this.$confirm("确定此操作吗?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(async () => {
+          let query = this.quitForm;
+          query.status = status;
+          query.returnFeeDto = {
+            accessoriesFee: query.accessoriesFee,
+            courseFee: query.courseFee,
+            isReturnAccessoriesFee: query.isReturnAccessoriesFee,
+            isReturnCourseFee: query.isReturnCourseFee,
+            isReturnMaintenanceFee: query.isReturnMaintenanceFee,
+            isReturnMemberFee: query.isReturnMemberFee,
+            isReturnMusicalFee: query.isReturnMusicalFee,
+            maintenanceFee: query.maintenanceFee,
+            memberFee: query.memberFee,
+            musicalFee: query.musicalFee,
+          };
+          if (
+            this.activeRow.memberFee < parseFloat(query.returnFeeDto.memberFee)
+          ) {
+            this.$message.error("会员金额不能超过默认金额");
+            return;
+          }
+          if (
+            this.activeRow.maintenanceFee <
+            parseFloat(query.returnFeeDto.maintenanceFee)
+          ) {
+            this.$message.error("乐保金额不能超过默认金额");
+            return;
+          }
+          await quitMusicGroup(cleanDeep(query)).then((res) => {
+            this.$message.success("处理成功");
+            this.activeRow = null;
+            if (this.$refs["musicForm"].$refs.quitForm) {
+              this.$refs["musicForm"].$refs.quitForm.resetFields();
+            }
+            this.quitVisible = false;
+            this.FetchList();
+          });
+        })
+        .catch((e) => {
+          console.log(e);
+        });
+      // 乐团主管这里
+    },
+  },
+};
 </script>
+<style lang="scss" scoped>
+.dialog-footer.question {
+  display: flex;
+  flex-direction: row;
+  justify-content: space-between;
+}
+
+</style>

+ 5 - 1
src/views/workBenchManager/journal/model/list.vue

@@ -109,7 +109,7 @@
     <el-dialog
       :title="dialogTitle"
       :visible.sync="dialogMusic"
-      width="500px"
+      width="700px"
     >
       <music-group-model
         v-if="dialogMusic"
@@ -201,6 +201,10 @@ export default {
           this.dialogVipApply = true;
           break;
         case 'MUSICGROUP':
+
+
+          // 退团跳到 退团列表
+          // this.$router.push({'name':'WithdrawalApplication',params:{userId:row.userId}})
           this.dialogMusic = true;
           break;
       }

+ 226 - 79
src/views/workBenchManager/journal/model/musicGroup.vue

@@ -1,41 +1,41 @@
 <template>
   <div>
-    <el-form
+    <el-alert
+      title="已拒绝"
+      show-icon
+      center
+      v-if="musicForm.status == 'DENIED'"
+      :closable="false"
+      class="alert"
+      type="error"
+    ></el-alert>
+    <el-alert
+      title="已处理"
+      show-icon
+      center
+      v-if="musicForm.status == 'APPROVED'"
+      :closable="false"
+      class="alert"
+      type="success"
+    ></el-alert>
+    <el-alert
+      title="已取消"
+      show-icon
+      center
+      v-if="musicForm.status == 'CANCELED'"
+      :closable="false"
+      class="alert"
+      type="info"
+    ></el-alert>
+    <!-- <el-form
       ref="musicForm"
       :model="quitForm"
       :rules="quitRules"
       status-icon
       class="musicForm"
       label-width="120px"
-    >
-      <el-alert
-        title="已拒绝"
-        show-icon
-        center
-        v-if="musicForm.status == 'DENIED'"
-        :closable="false"
-        class="alert"
-        type="error"
-      ></el-alert>
-      <el-alert
-        title="已处理"
-        show-icon
-        center
-        v-if="musicForm.status == 'APPROVED'"
-        :closable="false"
-        class="alert"
-        type="success"
-      ></el-alert>
-      <el-alert
-        title="已取消"
-        show-icon
-        center
-        v-if="musicForm.status == 'CANCELED'"
-        :closable="false"
-        class="alert"
-        type="info"
-      ></el-alert>
-      <el-form-item label="学员姓名">
+    > -->
+    <!-- <el-form-item label="学员姓名">
         <el-input disabled v-model.trim="musicForm.user.username"></el-input>
       </el-form-item>
       <el-form-item label="乐团名称">
@@ -48,7 +48,36 @@
           v-model.trim="musicForm.userComment"
         ></el-input>
       </el-form-item>
+      <el-form-item
+        label="退还云教练费用"
+        prop="isRefundMemberFee"
+        v-if="musicForm.status == 'PROCESSING' && musicForm.courseViewType == 2"
+      >
+        <el-radio v-model.trim="quitForm.isRefundMemberFee" label="true"
+          >是</el-radio
+        >
+        <el-radio v-model.trim="quitForm.isRefundMemberFee" label="false"
+          >否</el-radio
+        >
+      </el-form-item> -->
 
+    <!-- <el-form-item
+        label="退还云教练金额"
+        prop="cloudTeacherAmount"
+        v-if="
+          quitForm.isRefundMemberFee &&
+          quitForm.isRefundMemberFee != 'false' &&
+          musicForm.status == 'PROCESSING'
+        "
+      >
+        <el-input
+          type="number"
+          v-model.trim="quitForm.cloudTeacherAmount"
+          style="width: 180px"
+        >
+          <template slot="append">元</template>
+        </el-input>
+      </el-form-item>
       <el-form-item
         label="退还课程费用"
         v-if="musicForm.status == 'PROCESSING'"
@@ -89,40 +118,88 @@
           >否</el-radio
         >
       </el-form-item>
-       <el-form-item
-          label="退还乐保费用"
-          prop="isMaintenanceFee"
-          v-if="dialogDetail.hasMaintenance"
+      <el-form-item
+        label="退还乐保费用"
+        prop="isMaintenanceFee"
+        v-if="dialogDetail.hasMaintenance"
+      >
+        <el-radio v-model.trim="quitForm.isMaintenanceFee" :label="true"
+          >是</el-radio
         >
-          <el-radio v-model.trim="quitForm.isMaintenanceFee" :label="true"
-            >是</el-radio
-          >
-          <el-radio v-model.trim="quitForm.isMaintenanceFee" :label="false"
-            >否</el-radio
-          >
-        </el-form-item>
-        <el-form-item
-          label="退还乐保金额"
-          prop="maintenanceFee"
-          v-if="quitForm.isMaintenanceFee"
+        <el-radio v-model.trim="quitForm.isMaintenanceFee" :label="false"
+          >否</el-radio
         >
-          <el-input
-            type="number"
-            v-model.trim="quitForm.maintenanceFee"
-            style="width: 180px"
-          >
-            <template slot="append">元</template>
-          </el-input>
-        </el-form-item>
+      </el-form-item>
+      <el-form-item
+        label="退还乐保金额"
+        prop="maintenanceFee"
+        v-if="quitForm.isMaintenanceFee"
+      >
+        <el-input
+          type="number"
+          v-model.trim="quitForm.maintenanceFee"
+          style="width: 180px"
+        >
+          <template slot="append">元</template>
+        </el-input>
+      </el-form-item>
       <el-form-item label="退团原因" prop="reason">
         <el-input
           type="textarea"
           :disabled="musicForm.status != 'PROCESSING'"
           v-model.trim="quitForm.reason"
         ></el-input>
-      </el-form-item>
-    </el-form>
-    <div
+      </el-form-item> -->
+    <!-- </el-form> -->
+    <quiteTeam :quitForm="quitForm" ref="musicForm" />
+    <span
+      slot="footer"
+      class="dialog-footer question"
+      v-if="musicForm.status == 'PROCESSING'"
+    >
+      <div>
+        <el-popover placement="right" width="500" trigger="click">
+          <div class="popoverWrap">
+            <p>乐团退团退费规则:</p>
+            <p>退还乐器练习云教练费用:报名缴费时缴费的乐器练习云教练费用</p>
+            <p>退还课程费用:缴费总额-已结束课时单价之和</p>
+            <p>退还乐器费用:报名缴费时缴纳的乐器费用(团购、租金)</p>
+            <p>退还教辅费用:报名缴费时缴费的教辅费用</p>
+            <p>退还乐保费用:报名缴费时缴费的乐保费用</p>
+          </div>
+          <el-button
+            type="text"
+            icon="el-icon-question"
+            slot="reference"
+            style="color: red"
+            >退团退费说明</el-button
+          >
+        </el-popover>
+      </div>
+      <div>
+        <el-button
+          type="primary"
+          v-permission="'musicGroupQuit/quitMusicGroup/conform'"
+          v-if="!isManage"
+          @click="onSubmitGroup(musicForm, 'PROCESSING')"
+          >提交审核</el-button
+        >
+        <el-button
+          v-else
+          type="primary"
+          v-permission="'musicGroupQuit/quitMusicGroup/conform'"
+          @click="onSubmitGroup(musicForm, 'APPROVED')"
+          >同意</el-button
+        >
+        <el-button
+          type="danger"
+          v-permission="'musicGroupQuit/quitMusicGroup'"
+          @click="onSubmitGroup(musicForm, 'DENIED')"
+          >拒绝</el-button
+        >
+      </div>
+    </span>
+    <!-- <div
       slot="footer"
       class="dialog-footer"
       v-if="musicForm.status == 'PROCESSING'"
@@ -139,7 +216,7 @@
         @click="onSubmitGroup(musicForm, 'DENIED')"
         >拒绝</el-button
       >
-    </div>
+    </div> -->
   </div>
 </template>
 
@@ -151,10 +228,11 @@ import {
 } from "@/api/journal";
 import Tooltip from "@/components/Tooltip";
 import cleanDeep from "clean-deep";
+import quiteTeam from "@/views/teamDetail/components/modals/quite-team";
 import dayjs from "dayjs";
 export default {
   props: ["dialogDetail"],
-  components: { Tooltip },
+  components: { Tooltip, quiteTeam },
   data() {
     var validateReason = (rule, value, callback) => {
       if (value === "") {
@@ -197,38 +275,65 @@ export default {
         isRefundInstrumentFee: null,
         isRefundTeachingAssistantsFee: null,
         reason: "",
+        courseViewType: null,
+        hasMaintenance: null,
+        studentName: null,
+        musicGroupName: null,
+        isVisit: false,
+        reason: "",
+        userComment: null,
       },
       quitRules: {
         isRefundCourseFee: [
-          { validator: validateFee1, trigger: "change, blur" },
+          { required: true, message: "请选择是否退还课程费用" },
         ],
         isRefundInstrumentFee: [
-          { validator: validateFee2, trigger: "change, blur" },
+          { required: true, message: "请选择是否退还乐器费用" },
         ],
         isRefundTeachingAssistantsFee: [
-          { validator: validateFee3, trigger: "change, blur" },
+          { required: true, message: "请选择是否退还教辅费用" },
+        ],
+        isReturnMemberFee: [
+          { required: true, message: "请选择是否退还会员费用" },
         ],
-         isMaintenanceFee: [{ required: true, message: "选择是否退还乐保费用" }],
+        isMaintenanceFee: [{ required: true, message: "选择是否退还乐保费用" }],
         maintenanceFee: [{ required: true, message: "请输入退还乐保金额" }],
+        memberFee: [{ required: true, message: "请输入退还会员金额" }],
         reason: [{ validator: validateReason, trigger: "blur" }],
+        userComment: [{ required: true, message: "请输入申请理由" }],
       },
+      isManage: false,
     };
   },
   mounted() {
     this.__init();
-    console.log(this.dialogDetail)
   },
   watch: {
-    "quitForm.isMaintenanceFee"(val) {
-      if (val) {
-        this.quitForm.maintenanceFee = 300;
-      } else {
-        this.quitForm.maintenanceFee = 0;
-      }
-    },
+    // "quitForm.isMaintenanceFee"(val) {
+    //   if (val) {
+    //     this.quitForm.maintenanceFee = 300;
+    //   } else {
+    //     this.quitForm.maintenanceFee = 0;
+    //   }
+    // },
   },
   methods: {
     async __init() {
+      // 获取权限
+      let isSuperAdmin = this.$store.getters.isSuperAdmin;
+      let roles = this.$store.getters.roles;
+      if (isSuperAdmin) {
+        this.isManage = true;
+      } else {
+        if (roles.indexof(3) != -1) {
+          this.isManage = true;
+        } else {
+          this.isManage = false;
+        }
+      }
+      //   isSuperAdmin:state=>state.user.isSuperAdmin,
+      // roles:state=>state.user.roles,
+
       let { memo } = this.dialogDetail;
       memo = memo ? JSON.parse(memo) : null;
       if (!memo) {
@@ -253,10 +358,18 @@ export default {
         await musicGroupQuit({ id: memo.Id }).then((res) => {
           if (res.code == 200) {
             this.musicForm = res.data;
-            if (this.$refs.quitForm) {
-              this.$refs.quitForm.resetFields();
+            if (this.$refs["musicForm"].$refs.quitForm) {
+              this.$refs["musicForm"].$refs.quitForm.resetFields();
             }
-            this.quitForm.reason = res.data.reason;
+            this.activeRow = {...res.data.returnFeeDto }
+            this.quitForm.courseViewType = res.data.musicGroup.courseViewType;
+            this.quitForm.userComment = res.data.userComment;
+            this.quitForm.isVisit = res.data.isVisit;
+            this.quitForm.visitTime = res.data.visitTime;
+            this.quitForm.studentName = res.data.user?.username;
+            this.quitForm.musicGroupName = res.data.musicGroup?.name;
+            this.quitForm.hasMaintenance = res.data.hasMaintenance;
+            this.quitForm = { ...this.quitForm, ...res.data.returnFeeDto };
           } else {
             this.$message.error(res.msg);
           }
@@ -265,14 +378,18 @@ export default {
     },
     onSubmitGroup(params, status) {
       if (status == "DENIED") {
-        this.$refs["musicForm"].clearValidate();
-        this.$refs["musicForm"].validateField("reason", (res) => {
-          if (!res) {
-            this.onSubmitGroups(params, status);
+        this.$refs["musicForm"].$refs.quitForm.clearValidate();
+        this.$refs["musicForm"].$refs.quitForm.validateField(
+          "reason",
+          (res) => {
+            if (!res) {
+              this.onSubmitGroups(params, status);
+            }
           }
-        });
+        );
       } else {
-        this.$refs["musicForm"].validate((res) => {
+        // console.log(this.$refs.musicForm)
+        this.$refs["musicForm"].$refs.quitForm.validate((res) => {
           if (res) {
             this.onSubmitGroups(params, status);
           }
@@ -288,6 +405,31 @@ export default {
         .then(async () => {
           let query = this.quitForm;
           (query.id = params.id), (query.status = status);
+          query.returnFeeDto = {
+            accessoriesFee: query.accessoriesFee,
+            courseFee: query.courseFee,
+            isReturnAccessoriesFee: query.isReturnAccessoriesFee,
+            isReturnCourseFee: query.isReturnCourseFee,
+            isReturnMaintenanceFee: query.isReturnMaintenanceFee,
+            isReturnMemberFee: query.isReturnMemberFee,
+            isReturnMusicalFee: query.isReturnMusicalFee,
+            maintenanceFee: query.maintenanceFee,
+            memberFee: query.memberFee,
+            musicalFee: query.musicalFee,
+          };
+                 if (
+            this.activeRow.memberFee < parseFloat(query.returnFeeDto.memberFee)
+          ) {
+            this.$message.error("会员金额不能超过默认金额");
+            return;
+          }
+          if (
+            this.activeRow.maintenanceFee <
+            parseFloat(query.returnFeeDto.maintenanceFee)
+          ) {
+            this.$message.error("乐保金额不能超过默认金额");
+            return;
+          }
           await quitMusicGroup(cleanDeep(query)).then((res) => {
             this.$message.success("处理成功");
             this.$listeners.close();
@@ -309,4 +451,9 @@ export default {
 .alert {
   margin-bottom: 10px;
 }
+.dialog-footer.question {
+  display: flex;
+  flex-direction: row;
+  justify-content: space-between;
+}
 </style>