Просмотр исходного кода

Merge branch 'iteration_adminOptimiz' into online

lex-xin 4 лет назад
Родитель
Сommit
c07faa5c3a

+ 6 - 6
src/views/workBenchManager/journal/index.vue

@@ -4,23 +4,23 @@
       <div class="squrt"></div>系统日志
     </h2>
     <div class="m-core">
-      <location-hash v-model="activeIndex">
-        <el-tabs v-model="activeIndex" type="card">
+        <tab-router v-model="activeIndex" type="card" >
           <el-tab-pane label="系统通知" lazy v-if="permissionList.journalItem" name="SYSTEM">
             <list :type="activeIndex" />
           </el-tab-pane>
           <el-tab-pane label="学生申诉" lazy v-if="permissionList.studentComplain" name="STUDENT">
             <list :type="activeIndex" />
           </el-tab-pane>
-          <!-- <el-tab-pane label="退团退课" value="MUSICGROUP"></el-tab-pane> -->
+          <el-tab-pane label="退团退课" lazy v-if="permissionList.musicGroupCourse" name="MUSICGROUP">
+            <list :type="activeIndex" />
+          </el-tab-pane>
           <el-tab-pane label="请假处理" lazy v-if="permissionList.leaveOperation" name="LEAVE">
             <list :type="activeIndex" />
           </el-tab-pane>
           <el-tab-pane label="VIP申请审核" lazy v-if="permissionList.vipApply" name="VIPAPPLY">
             <list :type="activeIndex" />
           </el-tab-pane>
-        </el-tabs>
-      </location-hash>
+        </tab-router>
     </div>
   </div>
 </template>
@@ -48,4 +48,4 @@ export default {
   methods: {
   }
 }
-</script>
+</script>

+ 21 - 2
src/views/workBenchManager/journal/model/list.vue

@@ -21,7 +21,7 @@
         :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
         :data="tableList"
       >
-        <el-table-column label="申请人" prop="userId" width="200px">
+        <el-table-column label="申请人" prop="userId" width="300px">
           <template slot-scope="scope">
             <el-badge
               :is-dot="!scope.row.readStatus"
@@ -100,6 +100,20 @@
         @close="dialogVipApply = false"
       />
     </el-dialog>
+
+    <!-- 退团退课 -->
+    <el-dialog
+      :title="dialogTitle"
+      :visible.sync="dialogMusic"
+      width="500px"
+    >
+      <music-group-model
+        v-if="dialogMusic"
+        :dialogDetail="dialogDetail"
+        @getList="getList"
+        @close="dialogMusic = false"
+      />
+    </el-dialog>
   </div>
 </template>
 
@@ -110,8 +124,9 @@ import { journalType } from "@/constant";
 import StudentModel from "./student";
 import LeaveModel from "./leave";
 import vipApplyModel from "./vipApply";
+import musicGroupModel from "./musicGroup"
 export default {
-  components: { pagination, StudentModel, LeaveModel, vipApplyModel },
+  components: { pagination, StudentModel, LeaveModel, vipApplyModel, musicGroupModel },
   props: ["type"],
   data() {
     return {
@@ -119,6 +134,7 @@ export default {
       dialogStudent: false,
       dialogLeave: false,
       dialogVipApply: false,
+      dialogMusic: false,
       dialogTitle: null,
       dialogDetail: {},
       searchForm: {
@@ -180,6 +196,9 @@ export default {
         case "VIPAPPLY":
           this.dialogVipApply = true;
           break;
+        case 'MUSICGROUP':
+          this.dialogMusic = true;
+          break;
       }
     }
   }

+ 193 - 0
src/views/workBenchManager/journal/model/musicGroup.vue

@@ -0,0 +1,193 @@
+<template>
+    <div>
+        <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-input disabled v-model.trim="musicForm.user.username"></el-input>
+            </el-form-item>
+            <el-form-item label="乐团名称">
+                <el-input disabled v-model.trim="musicForm.musicGroup.name"></el-input>
+            </el-form-item>
+            <el-form-item label="用户备注">
+                <el-input type="textarea" disabled v-model.trim="musicForm.userComment"></el-input>
+            </el-form-item>
+
+
+            <el-form-item label="退还课程费用" v-if="musicForm.status == 'PROCESSING'"
+                          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="退还乐器费用" v-if="musicForm.status == 'PROCESSING'"
+                          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="退还教辅费用" v-if="musicForm.status == 'PROCESSING'"
+                          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="reason">
+              <el-input type="textarea" :disabled="musicForm.status != 'PROCESSING'"
+                        v-model.trim="quitForm.reason"></el-input>
+            </el-form-item>
+        </el-form>
+        <div slot="footer" class="dialog-footer" v-permission="'musicGroupQuit/quitMusicGroup'" v-if="musicForm.status == 'PROCESSING'">
+            <el-button type="primary"
+                       @click="onSubmitGroup(musicForm, 'APPROVED')">确认</el-button>
+            <el-button type="danger"
+                       @click="onSubmitGroup(musicForm, 'DENIED')">拒绝</el-button>
+        </div>
+    </div>
+</template>
+
+<script>
+import { queryApplyRefundDetail, musicGroupQuit, quitMusicGroup } from '@/api/journal'
+import Tooltip from '@/components/Tooltip'
+import cleanDeep from 'clean-deep'
+import dayjs from 'dayjs'
+export default {
+    props: ['dialogDetail'],
+    components: { Tooltip },
+    data() {
+        var validateReason = (rule, value, callback) => {
+            if (value === '') {
+                callback(new Error('请填写退团退费原因'));
+            } else {
+                callback();
+            }
+        };
+        var validateFee = (rule, value, callback) => {
+            if (value === '' || !value) {
+                callback(new Error('请选择是否退还费用'));
+            } else {
+                callback();
+            }
+        };
+        return {
+            musicForm: {
+                user: {},
+                musicGroup: {}
+            },
+            musicGroupCourse: [],
+            vipCourse: [],
+            quitForm: {
+                // 退团信息确认
+                isRefundCourseFee: null,
+                isRefundInstrumentFee: null,
+                isRefundTeachingAssistantsFee: null,
+                reason: ""
+            },
+            quitRules: {
+                isRefundCourseFee: [
+                { validator: validateFee, trigger: 'change' }
+                ],
+                isRefundInstrumentFee: [
+                { validator: validateFee, trigger: 'change' }
+                ],
+                isRefundTeachingAssistantsFee: [
+                { validator: validateFee, trigger: 'change' }
+                ],
+                reason: [{ validator: validateReason, trigger:"blur" }]
+            },
+        }
+    },
+    mounted() {
+        this.__init()
+    },
+    methods: {
+        async __init() {
+            let { memo } = this.dialogDetail
+            memo = memo ? JSON.parse(memo) : null
+            if(!memo) { // 判断是否有参数
+                this.$message.error('参数有误')
+                return
+            }
+            if (memo.type == 'VIPGROUP') {
+                // await queryApplyRefundDetail({ id: memo.Id }).then(res => {
+                //     if (res.code == 200) {
+                //         this.showRight = true
+                //         this.showMessage = res.data
+                //         this.showMessage.type = memo.type
+                //         this.remark = res.data.studentApplyRefunds.remark
+                //         this.actualAmount = res.data.studentApplyRefunds.actualAmount
+                //         //
+                //     } else {
+                //         this.$message.error(res.msg)
+                //     }
+                // })
+            } else if (memo.type == 'MUSICGROUP') {
+                await musicGroupQuit({ id: memo.Id }).then(res => {
+                    if (res.code == 200) {
+                        this.musicForm = res.data
+                        if(this.$refs.quitForm){
+                            this.$refs.quitForm.resetFields()
+                        }
+                        this.quitForm.reason = res.data.reason
+                    } else {
+                        this.$message.error(res.msg)
+                    }
+                })
+            }
+        },
+        onSubmitGroup (params, status) {
+        if(status == 'DENIED') {
+            this.$refs['musicForm'].clearValidate()
+            this.$refs['musicForm'].validateField('reason', res => {
+            if(!res) {
+                this.onSubmitGroups(params, status)
+            }
+            })
+        } else {
+            this.$refs["musicForm"].validate(res => {
+            if (res) {
+                this.onSubmitGroups(params, status)
+            }
+            });
+        }
+        },
+        onSubmitGroups(params, status) {
+            this.$confirm("确定此操作吗?", "提示", {
+                confirmButtonText: "确定",
+                cancelButtonText: "取消",
+                type: "warning"
+            }).then(async () => {
+                let query = this.quitForm
+                query.id = params.id,
+                query.status = status
+                await quitMusicGroup(cleanDeep(query)).then(res => {
+                    this.$message.success('处理成功')
+                    this.$listeners.close()
+                    this.$listeners.getList()
+                })
+            }).catch(() => { });
+        },
+    }
+}
+</script>
+
+<style lang="less" scoped>
+.dialog-footer{
+    margin-top: 20px;
+    display: block;
+    text-align: right;
+}
+.alert {
+   margin-bottom: 10px;
+}
+</style>