lex-xin 5 роки тому
батько
коміт
06d82cddc9

Різницю між файлами не показано, бо вона завелика
+ 0 - 0
dist/index.html


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
dist/static/css/app.c938784e.css


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
dist/static/css/chunk-52687136.7780fd24.css


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
dist/static/js/app.3704650a.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
dist/static/js/app.a8280027.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
dist/static/js/chunk-52687136.5ad440f9.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
dist/static/js/chunk-5e5d6dc0.0ca2c9ec.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
dist/static/js/chunk-5e5d6dc0.cae49b55.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
dist/static/js/chunk-fe6a7d08.f64317d9.js


+ 9 - 0
src/api/journal.js

@@ -102,4 +102,13 @@ export function approve(data) {
     })
 } 
 
+// vip课审核
+export function vipApplyAudit(data) {
+    return request({
+        url: api + '/vipGroupManage/vipApplyAudit',
+        method: 'POST',
+        data: qs.stringify(data)
+    })
+} 
+
 

+ 2 - 1
src/layout/components/Navbar.vue

@@ -17,8 +17,9 @@
                    trigger="click">
 
         <div class="avatar-wrapper">
-          <img :src="$store.getters.avatar"
+          <img v-if="$store.getters.avatar" :src="$store.getters.avatar"
                class="user-avatar" />
+          <img v-else src="@/assets/images/base/placehorder-icon.png" />
           <!-- <i class="el-icon-caret-bottom" /> -->
           <span>{{ username }}</span>
         </div>

+ 2 - 1
src/utils/vueFilter.js

@@ -215,7 +215,8 @@ Vue.filter('returnStatus', value => {
   let template = {
     ING: "审核中",
     REJECT: "拒绝",
-    PASS: "通过"
+    WAIT_PAYMENT: "待支付",
+    DONE: "完成"
   }
   return template[value]
 })

+ 2 - 2
src/views/businessManager/orderManager/backMoney.vue

@@ -57,7 +57,7 @@
           </el-table-column>
           <el-table-column align='center'
                           label="操作">
-            <template slot-scope="scope" v-if="scope.row.status == 'ING'">
+            <template slot-scope="scope" v-if="scope.row.status == 'WAIT_PAYMENT'">
               <el-button @click="onBackMoney(scope.row)" type="text">退费</el-button>
             </template>
           </el-table-column>
@@ -79,7 +79,7 @@
         </el-form>
         <span slot="footer" class="dialog-footer">
           <el-button type="danger" @click="onTeachingSubmit('ruleForm', 'REJECT')">拒绝退费</el-button>
-          <el-button type="primary" @click="onTeachingSubmit('ruleForm', 'PASS')">确认退费</el-button>
+          <el-button type="primary" @click="onTeachingSubmit('ruleForm', 'DONE')">确认退费</el-button>
         </span>
       </el-dialog>
     </div>

+ 2 - 2
src/views/journal/index.vue

@@ -41,8 +41,8 @@ export default {
   },
   data () {
     return {
-      activeIndex: '4',
-      activeStatus: [false, false, false, false, true]
+      activeIndex: '0',
+      activeStatus: [true, false, false, false, false]
     }
   },
   methods: {

+ 2 - 2
src/views/journal/leaveOperation.vue

@@ -73,11 +73,11 @@
                     {{ scope.row.after.startClassTime | getFormatTime(scope.row.after.endClassTime) }}
                   </template>
                 </el-table-column>
-                <el-table-column label="操作" v-if="showMessage.status == 'ING'">
+                <!-- <el-table-column label="操作" v-if="showMessage.status == 'ING'">
                   <template slot-scope="scope">
                     <el-button @click="onClssTime(scope.row)" type="text">调整</el-button>
                   </template>
-                </el-table-column>
+                </el-table-column> -->
             </el-table>
           </div>
 

+ 5 - 0
src/views/journal/musicGroup.vue

@@ -113,6 +113,11 @@
             <el-button type="danger" @click="onSubmitGroup(showMessage, 'DENIED')">拒绝</el-button>
           </el-col>
         </el-row>
+
+        <div class="infoFoot" v-if="showMessage.auditStatus == 'ING'">
+          <div class="noBtn" @click="onSubmit(showMessage, 'REJECT')">拒绝</div>
+          <div class="yesBtn" @click="onSubmit(showMessage, 'PASS')">同意</div>
+        </div>
       </div>
     </div>
   </div>

+ 227 - 162
src/views/journal/vipApply.vue

@@ -14,7 +14,7 @@
     <div class="middle">
       <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>
+        <h4 class="name">请假处理<span class='time'>{{ item.createOn }}</span>
           <div class="dot" v-if="item.readStatus == 0"></div>
         </h4>
         <p class='msg'>{{ item.content }}</p>
@@ -28,78 +28,77 @@
       </el-pagination>
     </div>
     <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>
+      <div class="rightWrap">
+        <img src="@/assets/images/base/placehorder-icon.png"
+             class="header"
+             alt="">
+        <div class="info">
+          <h2>{{ showMessage.userName }}
+            <el-tag v-if="showMessage.auditStatus == 'PASS'" type="success" effect="plain">已处理</el-tag>
+            <el-tag v-if="showMessage.auditStatus == 'REJECT'" type="danger" effect="plain">已拒绝</el-tag>
+          </h2>
+          <!-- <span class="subMsg">发至 <span class='san'></span> <span style="margin-left:30px">我</span></p> -->
+          <div class="textWrap">
+            <p>审批事项: VIP申请</p>
+            <p>开始时间: {{ showMessage.createTime }}</p>
+          </div>
+          <div class="leaverecord">
+             <el-form :inline="true"  label-width="100px">
+              <el-form-item label="老师姓名">
+                <el-input disabled :value="showMessage.userName" ></el-input>
+              </el-form-item>
+              <el-form-item label="线上课数">
+                <el-input disabled :value="showMessage.onlineClassesNum" ></el-input>
+              </el-form-item>
+              <el-form-item label="线下课数">
+                <el-input disabled :value="showMessage.offlineClassesNum" ></el-input>
+              </el-form-item>
 
-      <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-form-item label="科目名">
+                <el-input disabled :value="showMessage.subjectName" ></el-input>
+              </el-form-item>
+              <el-form-item label="线上课单价">
+                <el-input disabled :value="showMessage.onlineClassesUnitPrice"></el-input>
+              </el-form-item>
+              <el-form-item label="线下课单价">
+                <el-input disabled :value="showMessage.offlineClassesUnitPrice"></el-input>
+              </el-form-item>
 
-      <el-row>
-        <el-col :span="4"> 老师名称: </el-col>
-        <el-col :span="20"> {{ showMessage.courseSchedule.teacher.username }} </el-col>
-      </el-row>
+              <el-form-item label="活动名称">
+                <el-input disabled :value="showMessage.vipGroupActivityName"></el-input>
+              </el-form-item>
+              <el-form-item label="线上课课酬">
+                <el-input disabled :value="showMessage.onlineTeacherSalary"></el-input>
+              </el-form-item>
+              <el-form-item label="线下课课酬">
+                <el-input disabled :value="showMessage.offlineTeacherSalary" ></el-input>
+              </el-form-item>
 
-      <el-row>
-        <el-col :span="4">投诉理由:</el-col>
-        <el-col :span="20">
-          {{ showMessage.complaints.reason }}
-        </el-col>
-      </el-row>
+              <el-form-item label="商品价格">
+                <el-input disabled :value="showMessage.totalPrice"></el-input>
+              </el-form-item>
 
-      <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>
-            <span style="padding-right: 8px;">学生</span>
-            <el-input type="number" min="0" max="10" v-model="studentRate" placeholder="请输入内容"></el-input>
-          </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>
+              <el-form-item label="原因">
+                <el-input :disabled="showMessage.auditStatus != 'ING'" type="textarea" v-model="reason"></el-input>
+              </el-form-item>
+              
+            </el-form>
           </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>
+      <div class="infoFoot" v-if="showMessage.auditStatus == 'ING'">
+        <div class="noBtn" @click="onSubmit(showMessage, 'REJECT')">拒绝</div>
+        <div class="yesBtn" @click="onSubmit(showMessage, 'PASS')">同意</div>
+      </div>
     </div>
+
+    
   </div>
 </template>
 <script>
-import { queryCountOfUnread, sysMessageList, setRead, queryCourseScheduleComplaintsDetail, courseScheduleCommplaintAudit } from '@/api/journal'
+import { getVipGroupDetail } from '@/api/vipSeting'
+import { queryCountOfUnread, sysMessageList, setRead, vipApplyAudit  } from '@/api/journal'
 export default {
   data () {
     return {
@@ -122,9 +121,8 @@ export default {
       dataList: [],
       isCheckMessage: null,
       showRight: false,
-      showMessage: {},
-      teacherRate: null,
-      studentRate: null
+      reason: null,
+      showMessage: {}
     }
   },
   mounted() {
@@ -136,12 +134,35 @@ export default {
       // 未读消息
       queryCountOfUnread().then(res => {
         if(res.code == 200) {
-          if(res.data && res.data.VIPAPPLY) {
-            this.noReadMessage = res.data.VIPAPPLY
+          if(res.data && res.data.LEAVE) {
+            this.noReadMessage = res.data.LEAVE
           }
         }
       })
     },
+    onSubmit(showMessage, type) {
+      if(!this.reason || this.reason == '') {
+        this.$message.error('请输入原因')
+        return
+      }
+      let params = {
+        vipGroupId: showMessage.id,
+        reason: this.reason,
+        auditStatus: type,
+      }
+      vipApplyAudit(params).then(res => {
+        if(res.code == 200) {
+          this.$message({
+            message: '处理成功',
+            type: 'success'
+          })
+          this.getVipGroupItem(JSON.stringify({ vipGroupId: showMessage.id }))
+        } else {
+          this.$message.error(res.msg)
+        }
+      })
+    },
+
     sysMessageList() { // 列表
       sysMessageList({
         group: 'VIPAPPLY',
@@ -155,19 +176,6 @@ 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
@@ -186,70 +194,41 @@ export default {
     },
     onClickRead(item) {
       this.isCheckMessage = item.id
-      let memo = JSON.parse(item.memo)
       if(item.readStatus == 1) {
-        this.getCourseDetail(memo.courseScheduleComplaintsId)
+        this.getVipGroupItem(item.memo)
       } else {
         setRead({ id: item.id }).then(res => {
           let result = res.data
           if(res.code == 200) {
             item.readStatus = 1
-            this.getCourseDetail(memo.courseScheduleComplaintsId)
+            this.getVipGroupItem(item.memo)
           }
         })
       }
     },
-    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 => {
+    getVipGroupItem(memo) {
+      memo = JSON.parse(memo)
+      getVipGroupDetail({ vipGroupId: memo.vipGroupId }).then(res => {
         if(res.code == 200) {
-          this.$message({
-            message: '处理成功',
-            type: 'success'
-          })
-          this.getCourseDetail(id)
+          this.showRight = true
+          this.showMessage = res.data
+          this.reason = res.data.stopReason
         } else {
-          this.$message.errot(res.msg)
+          this.$message.error(res.msg)
         }
       })
     }
   },
-  watch: {
-    teacherRate(newvalue, oldvalue) {
-      if(newvalue) {
-        this.studentRate = 10 - newvalue
-      }
-    },
-    studentRate(newvalue, oldvalue) {
-      if(newvalue) {
-        this.teacherRate = 10 - newvalue
-      }
+  filters: {
+    getFormatTime(tempA, tempB) {
+        tempA = new Date(tempA.replace(/-/g, "/")),
+        tempB = new Date(tempB.replace(/-/g, "/"))
+        let hours = Number(tempA.getHours()) >= 10 ? tempA.getHours() : '0' + tempA.getHours()
+        let hours2 = Number(tempB.getHours()) >= 10 ? tempB.getHours() : '0' + tempB.getHours()
+        let min = Number(tempA.getMinutes()) >= 10 ? tempA.getMinutes() : '0' + tempA.getMinutes()
+        let min2 = Number(tempB.getMinutes()) >= 10 ? tempB.getMinutes() : '0' + tempB.getMinutes()
+
+        return hours + ':' + min + '-' + hours2 + ':' + min2
     }
   }
 }
@@ -367,43 +346,129 @@ export default {
     }
   }
   .right {
+    display: flex;
+    flex-direction: column;
+    justify-content: space-between;
     border: 1px solid #e4e8eb;
     margin-left: 25px;
     position: relative;
     overflow: auto;
-    padding: 20px;
-    min-width: 50%;
-  }
-}
-.el-timeline-item__dot {
-  width: 20px;
-  height: 20px;
-}
-.el-timeline-item {
-  min-height: 80px !important;
-}
-.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;
+    width: 50%;
+    .rightWrap {
+      // overflow: auto;
+      padding: 18px 24px;
+      display: flex;
+      flex-direction: row;
+      justify-content: flex-start;
+      box-sizing: border-box;
+      .header {
+        width: 30px;
+        height: 30px;
+        position: relative;
+        top: 7px;
+        border-radius: 50%;
+        margin-right: 12px;
+      }
+      .info {
+        position: relative;
+        width: 100%;
+        h2 {
+          color: #212223;
+          font-size: 16px;
+          margin-bottom: 0px;
+          .phone {
+            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;
+    }
   }
 }
 
-.title {
-  font-size: 16px;
-  .time {
-    float: right;
-    font-size: 12px;
-    color: #ccc;
-  }
-}
 </style>

Деякі файли не було показано, через те що забагато файлів було змінено