|  | @@ -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>
 |