|
@@ -12,73 +12,94 @@
|
|
|
已读消息</div>
|
|
|
</div>
|
|
|
<div class="middle">
|
|
|
- <div class="msgItem">
|
|
|
- <h6 class="type">审批</h6>
|
|
|
- <h4 class="name">黄老师 <span class='time'>10:03</span>
|
|
|
- <div class="dot"></div>
|
|
|
+ <div class="msgItem" :class="[isCheckMessage == item.id ? 'active' : '']" @click="onClickRead(item)" v-for="(item, index) in dataList" :key="index">
|
|
|
+ <!-- <h6 class="type"></h6> -->
|
|
|
+ <h4 class="name">学生申诉<span class='time'>{{ item.createOn }}</span>
|
|
|
+ <div class="dot" v-if="item.readStatus == 0"></div>
|
|
|
</h4>
|
|
|
- <p class='msg'>那家纯四季花城教学总结爱喝酒收到货就暗示的看见爱上大家超级好吃就撒客户看见爱上当看见那家纯四季花城教学总结爱喝酒收到货就暗示的看见爱上大家超级好吃就撒客户看见爱上当看见</p>
|
|
|
- </div>
|
|
|
- <div class="msgItem active">
|
|
|
- <h6 class="type">审批</h6>
|
|
|
- <h4 class="name">黄老师 <span class='time'>10:03</span>
|
|
|
- <div class="dot"></div>
|
|
|
- </h4>
|
|
|
- <p class='msg'>那家纯四季花城教学总结爱喝酒收到货就暗示的看见爱上大家超级好吃就撒客户看见爱上当看见那家纯四季花城教学总结爱喝酒收到货就暗示的看见爱上大家超级好吃就撒客户看见爱上当看见</p>
|
|
|
+ <p class='msg'>{{ item.content }}</p>
|
|
|
</div>
|
|
|
+ <el-pagination style="text-align: right"
|
|
|
+ small v-if="dataList.length > 0"
|
|
|
+ @current-change="onChange"
|
|
|
+ :hide-on-single-page="pageInfo.isSinglePage"
|
|
|
+ layout="prev, pager, next"
|
|
|
+ :total="pageInfo.total">
|
|
|
+ </el-pagination>
|
|
|
</div>
|
|
|
- <div class="right">
|
|
|
- <div class="rightWrap">
|
|
|
- <img src="@/assets/images/base/placehorder-icon.png"
|
|
|
- class="header"
|
|
|
- alt="">
|
|
|
- <div class="info">
|
|
|
- <h2>黄老师<span>【185****2109】</span></h2>
|
|
|
- <p class="subMsg">发至 <span class='san'></span> <span style="margin-left:30px">我</span></p>
|
|
|
- <div class="textWrap">
|
|
|
- <p>审批事项: 合班</p>
|
|
|
- <p>开始时间: 2019-09-01 09:00</p>
|
|
|
- <p>结束时间: 2019-09-01 09:00</p>
|
|
|
- <p>备注:班人数较少较少班人数较少较少班人数较少较少班人数较少较少班人数较少较少班人数较少较少班人数较少较少班人数较少较少</p>
|
|
|
+ <div class="right" v-if="showRight">
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="24">
|
|
|
+ <h3 class="title">学员投诉
|
|
|
+ <el-tag v-if="showMessage.complaints.status == 'PASS'" type="success" effect="plain">已处理</el-tag>
|
|
|
+ <el-tag v-if="showMessage.complaints.status == 'REJECT'" type="danger" effect="plain">已拒绝</el-tag>
|
|
|
+ <span class="time">发起投诉时间: 2019年11月9日14:25:31</span></h3>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="4"> 学员姓名: </el-col>
|
|
|
+ <el-col :span="20"> {{ showMessage.complaints.user.username }} </el-col>
|
|
|
+ </el-row>
|
|
|
+
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="4"> 课程名称: </el-col>
|
|
|
+ <el-col :span="20"> {{ showMessage.courseSchedule.name }} </el-col>
|
|
|
+ </el-row>
|
|
|
+
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="4"> 课程时间: </el-col>
|
|
|
+ <el-col :span="20"> {{ showMessage.courseSchedule.classDate | formatTimer }} {{ showMessage.courseSchedule.startClassTime | timer }} </el-col>
|
|
|
+ </el-row>
|
|
|
+
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="4"> 老师名称: </el-col>
|
|
|
+ <el-col :span="20"> {{ showMessage.courseSchedule.teacher.username }} </el-col>
|
|
|
+ </el-row>
|
|
|
+
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="4">投诉理由:</el-col>
|
|
|
+ <el-col :span="20">
|
|
|
+ {{ showMessage.complaints.reason }}
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="4">
|
|
|
+ 责任比:
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="20" v-if="showMessage.complaints.status == 'ING'">
|
|
|
+ <div style="padding-bottom: 8px;">
|
|
|
+ <span style="padding-right: 8px;">老师</span>
|
|
|
+ <el-input type="number" min="0" max="10" v-model="teacherRate" placeholder="请输入内容"></el-input>
|
|
|
</div>
|
|
|
- <div class="timeline">
|
|
|
- <el-timeline>
|
|
|
- <el-timeline-item placement='center'>
|
|
|
- <div class='timeMsg'>
|
|
|
- <p class="name">我</p>
|
|
|
- <p class='status'>审批中</p>
|
|
|
- </div>
|
|
|
- <div slot='dot'>
|
|
|
- <img class='dot'
|
|
|
- src="@/assets/images/base/clock.png"
|
|
|
- alt="">
|
|
|
- </div>
|
|
|
- </el-timeline-item>
|
|
|
- <el-timeline-item placement='center'>
|
|
|
- <div class='timeMsg'>
|
|
|
- <p class="name">我</p>
|
|
|
- <p class='status'>审批中</p>
|
|
|
- </div>
|
|
|
- <div slot='dot'>
|
|
|
- <img class='dot'
|
|
|
- src="@/assets/images/base/clock.png"
|
|
|
- alt="">
|
|
|
- </div>
|
|
|
- </el-timeline-item>
|
|
|
- </el-timeline>
|
|
|
+ <div>
|
|
|
+ <span style="padding-right: 8px;">学生</span>
|
|
|
+ <el-input type="number" min="0" max="10" v-model="studentRate" placeholder="请输入内容"></el-input>
|
|
|
</div>
|
|
|
-
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="infoFoot">
|
|
|
- <div class="noBtn">拒绝</div>
|
|
|
- <div class="yesBtn">同意</div>
|
|
|
- </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="20" v-else>
|
|
|
+ <div style="padding-bottom: 8px;">
|
|
|
+ <span style="padding-right: 8px;">老师</span>
|
|
|
+ <el-input disabled type="number" min="0" max="10" v-model="teacherRate" placeholder="请输入内容"></el-input>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <span style="padding-right: 8px;">学生</span>
|
|
|
+ <el-input disabled type="number" min="0" max="10" v-model="studentRate" placeholder="请输入内容"></el-input>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-row v-if="showMessage.complaints.status == 'ING'">
|
|
|
+ <el-col :span="24">
|
|
|
+ <el-button type="primary" @click="onSubmit(showMessage.complaints.id, 'submit')">确认</el-button>
|
|
|
+ <el-button type="danger" @click="onSubmit(showMessage.complaints.id, 'reject')">拒绝</el-button>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
</div>
|
|
|
</div>
|
|
|
</template>
|
|
|
<script>
|
|
|
-import { queryCountOfUnread, sysMessageList } from '@/api/journal'
|
|
|
+import { queryCountOfUnread, sysMessageList, setRead, queryCourseScheduleComplaintsDetail, courseScheduleCommplaintAudit } from '@/api/journal'
|
|
|
export default {
|
|
|
data () {
|
|
|
return {
|
|
@@ -90,7 +111,6 @@ export default {
|
|
|
boxicon: require('@/assets/images/base/boxicon.png'),
|
|
|
Hboxicon: require('@/assets/images/base/boxicon-h.png')
|
|
|
},
|
|
|
- activities: [{ }],
|
|
|
pageInfo: {
|
|
|
isSinglePage: false, // 是否只有一页
|
|
|
limit: 10,
|
|
@@ -99,7 +119,12 @@ export default {
|
|
|
total: 0,
|
|
|
},
|
|
|
noReadMessage: 0, // 未读消息
|
|
|
- dataList: []
|
|
|
+ dataList: [],
|
|
|
+ isCheckMessage: null,
|
|
|
+ showRight: false,
|
|
|
+ showMessage: {},
|
|
|
+ teacherRate: null,
|
|
|
+ studentRate: null
|
|
|
}
|
|
|
},
|
|
|
mounted() {
|
|
@@ -130,6 +155,19 @@ export default {
|
|
|
}
|
|
|
})
|
|
|
},
|
|
|
+ getCourseDetail(id) {
|
|
|
+ queryCourseScheduleComplaintsDetail({ courseScheduleComplaintsId: id }).then(res => {
|
|
|
+ let result = res.data
|
|
|
+ if(res.code == 200) {
|
|
|
+ this.showRight = true
|
|
|
+ this.showMessage = result
|
|
|
+ if(result.complaints.status != 'ING') {
|
|
|
+ this.teacherRate = result.complaints.teacherLiabilityRatio
|
|
|
+ this.studentRate = result.complaints.studentLiabilityRatio
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
onLookMessage(type) { // 查看对应的数据
|
|
|
if(type == "all") {
|
|
|
this.pageInfo.readStatus = null
|
|
@@ -142,6 +180,77 @@ export default {
|
|
|
this.isCheckMessage = null
|
|
|
this.sysMessageList()
|
|
|
},
|
|
|
+ onChange(page) { // 分页
|
|
|
+ this.pageInfo.page = page
|
|
|
+ this.sysMessageList()
|
|
|
+ },
|
|
|
+ onClickRead(item) {
|
|
|
+ this.isCheckMessage = item.id
|
|
|
+ let memo = JSON.parse(item.memo)
|
|
|
+ if(item.readStatus == 1) {
|
|
|
+ this.getCourseDetail(memo.courseScheduleComplaintsId)
|
|
|
+ } else {
|
|
|
+ setRead({ id: item.id }).then(res => {
|
|
|
+ let result = res.data
|
|
|
+ if(res.code == 200) {
|
|
|
+ item.readStatus = 1
|
|
|
+ this.getCourseDetail(memo.courseScheduleComplaintsId)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ },
|
|
|
+ onSubmit(id, type) {
|
|
|
+ let params = {
|
|
|
+ id: id
|
|
|
+ }
|
|
|
+ let teacherRate = this.teacherRate
|
|
|
+ let studentRate = this.studentRate
|
|
|
+ if(type == 'submit') {
|
|
|
+ if(teacherRate < 0 || teacherRate > 10 || typeof teacherRate == 'string') {
|
|
|
+ this.$message.error('老师责任比输入有误')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if(studentRate < 0 || studentRate > 10 || typeof studentRate == 'string') {
|
|
|
+ this.$message.error('学生责任比输入有误')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if(studentRate + teacherRate != 10) {
|
|
|
+ this.$message.error('责任比之和为必须为10')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ params.status = 'PASS'
|
|
|
+ params.studentLiabilityRatio = studentRate
|
|
|
+ params.teacherLiabilityRatio = teacherRate
|
|
|
+ } else if(type == 'reject') {
|
|
|
+ params.status = 'REJECT'
|
|
|
+ params.studentLiabilityRatio = 0
|
|
|
+ params.teacherLiabilityRatio = 0
|
|
|
+ }
|
|
|
+
|
|
|
+ courseScheduleCommplaintAudit(params).then(res => {
|
|
|
+ if(res.code == 200) {
|
|
|
+ this.$message({
|
|
|
+ message: '处理成功',
|
|
|
+ type: 'success'
|
|
|
+ })
|
|
|
+ this.getCourseDetail(id)
|
|
|
+ } else {
|
|
|
+ this.$message.errot(res.msg)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ },
|
|
|
+ watch: {
|
|
|
+ teacherRate(newvalue, oldvalue) {
|
|
|
+ if(newvalue) {
|
|
|
+ this.studentRate = 10 - newvalue
|
|
|
+ }
|
|
|
+ },
|
|
|
+ studentRate(newvalue, oldvalue) {
|
|
|
+ if(newvalue) {
|
|
|
+ this.teacherRate = 10 - newvalue
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
</script>
|
|
@@ -200,12 +309,13 @@ export default {
|
|
|
}
|
|
|
}
|
|
|
.middle {
|
|
|
- width: 390px;
|
|
|
+ width: 40%;
|
|
|
margin-left: 76px;
|
|
|
padding-top: 50px;
|
|
|
overflow: auto;
|
|
|
.msgItem {
|
|
|
padding: 16px 18px 23px 30px;
|
|
|
+ border-bottom: 1px solid #ccc;
|
|
|
.type {
|
|
|
font-size: 14px;
|
|
|
color: #777;
|
|
@@ -254,127 +364,12 @@ export default {
|
|
|
}
|
|
|
}
|
|
|
.right {
|
|
|
- display: flex;
|
|
|
- flex-direction: column;
|
|
|
- justify-content: space-between;
|
|
|
border: 1px solid #e4e8eb;
|
|
|
margin-left: 25px;
|
|
|
position: relative;
|
|
|
overflow: auto;
|
|
|
- .rightWrap {
|
|
|
- // overflow: auto;
|
|
|
- padding: 18px 24px;
|
|
|
- display: flex;
|
|
|
- flex-direction: row;
|
|
|
- justify-content: flex-start;
|
|
|
- width: 570px;
|
|
|
- box-sizing: border-box;
|
|
|
- .header {
|
|
|
- width: 30px;
|
|
|
- height: 30px;
|
|
|
- position: relative;
|
|
|
- top: 7px;
|
|
|
- border-radius: 50%;
|
|
|
- margin-right: 12px;
|
|
|
- }
|
|
|
- .info {
|
|
|
- position: relative;
|
|
|
- h2 {
|
|
|
- color: #212223;
|
|
|
- font-size: 16px;
|
|
|
- margin-bottom: 0px;
|
|
|
- span {
|
|
|
- font-size: 12px;
|
|
|
- color: #444;
|
|
|
- }
|
|
|
- }
|
|
|
- .subMsg {
|
|
|
- position: relative;
|
|
|
- font-size: 12px;
|
|
|
- color: #444;
|
|
|
- margin-bottom: 12px;
|
|
|
- .san {
|
|
|
- // margin-left: 110px;
|
|
|
- float: left;
|
|
|
- position: absolute;
|
|
|
- top: 0px;
|
|
|
- width: 0;
|
|
|
- height: 0;
|
|
|
- border-width: 5px;
|
|
|
- border-style: solid;
|
|
|
- border-color: transparent #909191 transparent transparent;
|
|
|
- transform: rotate(180deg); /*顺时针旋转90°*/
|
|
|
- margin: 0 8px;
|
|
|
- }
|
|
|
- }
|
|
|
- .textWrap {
|
|
|
- width: 316px;
|
|
|
- line-height: 21px;
|
|
|
- font-size: 14px;
|
|
|
- color: #212223;
|
|
|
- margin: 12px 0 34px;
|
|
|
- }
|
|
|
- .dot {
|
|
|
- width: 20px;
|
|
|
- height: 20px;
|
|
|
- }
|
|
|
- .timeMsg {
|
|
|
- position: relative;
|
|
|
- top: 5px;
|
|
|
- margin-left: 20px;
|
|
|
- .name {
|
|
|
- font-size: #444;
|
|
|
- font-size: 16px;
|
|
|
- margin-bottom: 3px;
|
|
|
- font-weight: 600;
|
|
|
- }
|
|
|
- .status {
|
|
|
- font-size: 14px;
|
|
|
- color: #62a070;
|
|
|
- }
|
|
|
- .status.waring {
|
|
|
- color: #f97215;
|
|
|
- }
|
|
|
- .status.end {
|
|
|
- color: #aaaaaa;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- .infoFoot {
|
|
|
- min-height: 60px;
|
|
|
- height: 60px;
|
|
|
- line-height: 60px;
|
|
|
- border-top: 1px solid #e4e8eb;
|
|
|
- width: 100%;
|
|
|
- display: flex;
|
|
|
- flex-direction: row;
|
|
|
- justify-content: flex-start;
|
|
|
- align-items: center;
|
|
|
- .noBtn {
|
|
|
- cursor: pointer;
|
|
|
- width: 100px;
|
|
|
- height: 32px;
|
|
|
- line-height: 32px;
|
|
|
- color: #444;
|
|
|
- border-radius: 3px;
|
|
|
- border: 1px solid rgba(228, 232, 235, 1);
|
|
|
- text-align: center;
|
|
|
- margin-left: 70px;
|
|
|
- }
|
|
|
- .yesBtn {
|
|
|
- cursor: pointer;
|
|
|
- margin-left: 15px;
|
|
|
- text-align: center;
|
|
|
- width: 100px;
|
|
|
- height: 32px;
|
|
|
- line-height: 32px;
|
|
|
- background: rgba(249, 114, 21, 1);
|
|
|
- border-radius: 3px;
|
|
|
- color: #fff;
|
|
|
- }
|
|
|
- // width: 570px;
|
|
|
- }
|
|
|
+ padding: 20px;
|
|
|
+ min-width: 40%;
|
|
|
}
|
|
|
}
|
|
|
.el-timeline-item__dot {
|
|
@@ -387,4 +382,25 @@ export default {
|
|
|
.el-timeline-item__tail {
|
|
|
left: 9px !important;
|
|
|
}
|
|
|
+/deep/.el-row {
|
|
|
+ padding-bottom: 10px;
|
|
|
+}
|
|
|
+/deep/.el-col-4 {
|
|
|
+ font-size: 16px;
|
|
|
+}
|
|
|
+
|
|
|
+/deep/.el-col {
|
|
|
+ .el-input {
|
|
|
+ width: 200px;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.title {
|
|
|
+ font-size: 16px;
|
|
|
+ .time {
|
|
|
+ float: right;
|
|
|
+ font-size: 12px;
|
|
|
+ color: #ccc;
|
|
|
+ }
|
|
|
+}
|
|
|
</style>
|