lex-xin 5 years ago
parent
commit
1abc0afd00

File diff suppressed because it is too large
+ 0 - 0
dist/app.2d4c85ef99ae9996ee8d.js


File diff suppressed because it is too large
+ 0 - 0
dist/app.dc0c15495970db092ad9.js


+ 1 - 0
dist/css/AppealDetail.42069e82.css

@@ -0,0 +1 @@
+.mheader[data-v-61d0e2e4]{height:.44rem;overflow:hidden}.m-nav-header[data-v-61d0e2e4]{position:absolute;left:0;top:0;width:100%;height:.44rem;line-height:.44rem;background-color:#14928a;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:#fff}.m-nav-header.fixed[data-v-61d0e2e4]{position:fixed;z-index:99}.m-nav-header .m-nav-bar__title[data-v-61d0e2e4]{max-width:60%;margin:0 auto;color:#fff;font-weight:500;font-size:.16rem}.m-nav-header .m-nav-bar__left[data-v-61d0e2e4],.m-nav-header .m-nav-bar__right[data-v-61d0e2e4]{position:absolute;bottom:0}.m-nav-header .m-nav-bar__left[data-v-61d0e2e4]{left:.12rem}.m-nav-header .m-nav-bar__left .arrow-left[data-v-61d0e2e4]{font-size:.21rem;vertical-align:middle}.m-nav-header .m-nav-bar__right[data-v-61d0e2e4]{right:.12rem}.wrap[data-v-2f978f12]{height:100vh;overflow-y:auto;overflow-x:hidden;background-color:#f3f4f8}[data-v-2f978f12] .van-cell{font-size:.14rem;padding-top:.18rem}.button-group[data-v-2f978f12]{margin:.3rem .26rem .2rem}.button-group .van-button--primary[data-v-2f978f12]{background:#14928a;border:1px solid #14928a;font-size:.18rem}

+ 1 - 0
dist/css/AppealRecord.49be5408.css

@@ -0,0 +1 @@
+.mheader[data-v-61d0e2e4]{height:.44rem;overflow:hidden}.m-nav-header[data-v-61d0e2e4]{position:absolute;left:0;top:0;width:100%;height:.44rem;line-height:.44rem;background-color:#14928a;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:#fff}.m-nav-header.fixed[data-v-61d0e2e4]{position:fixed;z-index:99}.m-nav-header .m-nav-bar__title[data-v-61d0e2e4]{max-width:60%;margin:0 auto;color:#fff;font-weight:500;font-size:.16rem}.m-nav-header .m-nav-bar__left[data-v-61d0e2e4],.m-nav-header .m-nav-bar__right[data-v-61d0e2e4]{position:absolute;bottom:0}.m-nav-header .m-nav-bar__left[data-v-61d0e2e4]{left:.12rem}.m-nav-header .m-nav-bar__left .arrow-left[data-v-61d0e2e4]{font-size:.21rem;vertical-align:middle}.m-nav-header .m-nav-bar__right[data-v-61d0e2e4]{right:.12rem}.icon[data-v-67669af7]{width:2rem;height:2rem;margin:.5rem auto .05rem}.icon_nodata[data-v-67669af7]{background:url(../img/icon_nodata.81c87d57.png) no-repeat 50%;background-size:contain}.msg[data-v-67669af7]{color:#aaa;font-size:.16rem;text-align:center;line-height:.22rem}.wrap[data-v-403acedd]{height:100vh;overflow-y:auto;overflow-x:hidden;background-color:#f3f4f8}[data-v-403acedd] .van-cell{font-size:.16rem;padding:.15rem .16rem}[data-v-403acedd] .van-cell .van-cell__title{color:grey}[data-v-403acedd] .van-cell .van-cell__value{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;font-size:.17rem;color:#1a1a1a;width:60%;-webkit-box-flex:0;-ms-flex:0 auto;flex:0 auto}[data-v-403acedd] .van-cell .van-cell__value .agree{color:#2ec7a5}[data-v-403acedd] .van-cell .van-cell__value .reject{color:#ec4848}[data-v-403acedd] .van-cell .van-cell__value .over{color:grey}

+ 1 - 0
dist/css/AppealResult.14ed23ec.css

@@ -0,0 +1 @@
+.mheader[data-v-61d0e2e4]{height:.44rem;overflow:hidden}.m-nav-header[data-v-61d0e2e4]{position:absolute;left:0;top:0;width:100%;height:.44rem;line-height:.44rem;background-color:#14928a;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:#fff}.m-nav-header.fixed[data-v-61d0e2e4]{position:fixed;z-index:99}.m-nav-header .m-nav-bar__title[data-v-61d0e2e4]{max-width:60%;margin:0 auto;color:#fff;font-weight:500;font-size:.16rem}.m-nav-header .m-nav-bar__left[data-v-61d0e2e4],.m-nav-header .m-nav-bar__right[data-v-61d0e2e4]{position:absolute;bottom:0}.m-nav-header .m-nav-bar__left[data-v-61d0e2e4]{left:.12rem}.m-nav-header .m-nav-bar__left .arrow-left[data-v-61d0e2e4]{font-size:.21rem;vertical-align:middle}.m-nav-header .m-nav-bar__right[data-v-61d0e2e4]{right:.12rem}.wrap[data-v-0ebb74e3]{height:100vh;overflow-y:auto;overflow-x:hidden;background-color:#f3f4f8}[data-v-0ebb74e3] .van-panel{margin-bottom:.15rem}[data-v-0ebb74e3] .van-panel .title{font-size:.18rem;color:#1a1a1a;padding:.2rem .1rem .05rem}[data-v-0ebb74e3] .van-panel .status{padding:0 .1rem .15rem;color:#2ec7a5;font-size:.16rem}[data-v-0ebb74e3] .van-panel .status.error{color:#ec4848}.appealContent[data-v-0ebb74e3]{padding:0 .1rem;padding-bottom:.15rem;background:#fff}.appealContent h2[data-v-0ebb74e3]{font-size:.16rem;color:#666;padding:.15rem 0 .13rem}.appealContent .desc[data-v-0ebb74e3]{padding:0 .2rem;text-indent:.3rem;color:#1a1a1a}

+ 0 - 0
dist/css/ExchangeRecord.18396082.css → dist/css/ExchangeRecord.818eda02.css


+ 0 - 0
dist/css/HelpCenter.dcfb14bc.css → dist/css/HelpCenter.3ee8f1da.css


+ 1 - 0
dist/css/MonthAppeal.bd78de2d.css

@@ -0,0 +1 @@
+.mheader[data-v-61d0e2e4]{height:.44rem;overflow:hidden}.m-nav-header[data-v-61d0e2e4]{position:absolute;left:0;top:0;width:100%;height:.44rem;line-height:.44rem;background-color:#14928a;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:#fff}.m-nav-header.fixed[data-v-61d0e2e4]{position:fixed;z-index:99}.m-nav-header .m-nav-bar__title[data-v-61d0e2e4]{max-width:60%;margin:0 auto;color:#fff;font-weight:500;font-size:.16rem}.m-nav-header .m-nav-bar__left[data-v-61d0e2e4],.m-nav-header .m-nav-bar__right[data-v-61d0e2e4]{position:absolute;bottom:0}.m-nav-header .m-nav-bar__left[data-v-61d0e2e4]{left:.12rem}.m-nav-header .m-nav-bar__left .arrow-left[data-v-61d0e2e4]{font-size:.21rem;vertical-align:middle}.m-nav-header .m-nav-bar__right[data-v-61d0e2e4]{right:.12rem}.icon[data-v-67669af7]{width:2rem;height:2rem;margin:.5rem auto .05rem}.icon_nodata[data-v-67669af7]{background:url(../img/icon_nodata.81c87d57.png) no-repeat 50%;background-size:contain}.msg[data-v-67669af7]{color:#aaa;font-size:.16rem;text-align:center;line-height:.22rem}.wrap[data-v-0de08a61]{height:100vh;overflow-y:auto;overflow-x:hidden;background-color:#f3f4f8}[data-v-0de08a61] .van-cell,[data-v-0de08a61] .van-dropdown-menu__title{font-size:.16rem}[data-v-0de08a61] .van-cell{padding-top:.14rem;padding-bottom:.14rem}.countMoney[data-v-0de08a61]{color:#ff433f}.disabled[data-v-0de08a61]{opacity:.5}[data-v-0de08a61] .van-cell-group{margin-bottom:.55rem}.allCount[data-v-0de08a61]{padding:0 .16rem;line-height:.55rem;background:#fff;font-size:.17rem;color:#1a1a1a;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;position:fixed;width:calc(100% - .32rem);bottom:0;left:0}.allCount .allMoney[data-v-0de08a61]{font-size:.22rem;color:#f85043}.allCount .allMoney i[data-v-0de08a61]{font-style:normal;font-size:.16rem}

File diff suppressed because it is too large
+ 0 - 0
dist/css/Remuneration.358d1eef.css


+ 0 - 0
dist/css/chunk-vendors.18b72052.css → dist/css/chunk-vendors.85a787b0.css


File diff suppressed because it is too large
+ 0 - 0
dist/css/privacy.9153a81d.css


File diff suppressed because it is too large
+ 0 - 0
dist/index.html


File diff suppressed because it is too large
+ 0 - 0
dist/js/Account~AppLogin~AppRegister~AppSetInfo~AppealDetail~Approval~Attendance~CallNames~ClassDetail~Cours~592a36b8.500a20c4.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/AppealDetail.38cbe94d.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/AppealRecord.f27bed25.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/AppealResult.cb406160.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/MonthAppeal.b8aaae53.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/Remuneration.839008e7.js


+ 0 - 0
dist/js/UserProtocol.86ae7215.js → dist/js/UserProtocol.6489802d.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/privacy.4d31add2.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/privacy.d8814b0b.js


+ 67 - 0
src/api/audition.js

@@ -0,0 +1,67 @@
+const axios = require('@/common/axios').default
+import qs from 'qs'
+// import axios from '@/common/axios'
+const api = '/api-teacher'
+
+// 获取老师指定月份课酬信息
+const findTeacherSettlementCourseSalarys = (data) => {
+  return axios({
+      url: api + '/courseScheduleTeacherSalary/findTeacherSettlementCourseSalarys',
+      method: 'get',
+      params: data
+  })
+}
+
+// 确定教师指定月份的课酬 
+const confirmTeacherMonthSalary = (data) => {
+  return axios({
+      url: api + '/courseScheduleTeacherSalary/confirmTeacherMonthSalary',
+      method: 'post',
+      data: qs.stringify(data)
+  })
+}
+
+// 课酬申述
+const teacherSalaryComplaintAdd = (data) => {
+  return axios({
+      url: api + '/teacherSalaryComplaints/add',
+      method: 'post',
+      data: qs.stringify(data)
+  })
+}
+
+// 获取申述
+const teacherSalaryComplaintGet = (data) => {
+  return axios({
+      url: api + '/teacherSalaryComplaints/get',
+      method: 'post',
+      data: qs.stringify(data)
+  })
+}
+
+// 获取当月未处理申述
+const findByMonth = (data) => {
+  return axios({
+      url: api + '/teacherSalaryComplaints/findByMonth',
+      method: 'post',
+      data: qs.stringify(data)
+  })
+}
+
+// 撤销当月未处理申述
+const repealComplaints = (data) => {
+  return axios({
+      url: api + '/teacherSalaryComplaints/repealComplaints',
+      method: 'post',
+      data: qs.stringify(data)
+  })
+}
+
+export {
+  findTeacherSettlementCourseSalarys,
+  confirmTeacherMonthSalary,
+  teacherSalaryComplaintAdd,
+  teacherSalaryComplaintGet,
+  findByMonth,
+  repealComplaints
+}

+ 16 - 1
src/common/common.js

@@ -61,9 +61,24 @@ const getYMD = (time, noIos) => {
   return tempDate.getFullYear() + t + month + t + day
 }
 
+const getDateList = () => {
+  let getNowYear = new Date().getFullYear()
+  let getNowMonth = new Date().getMonth() + 1
+  const getDateList = {}
+  for(let i = 0; i < 12; i++) {
+      let months = []
+      for(let j = 0; j < (i == 0 ? getNowMonth : 12); j++) {
+          months.push((j + 1) + '月')
+      }
+      getDateList[(getNowYear - i) + '年'] = months // 组合数据
+  }
+  return getDateList
+}
+
 export {
   browser,
   calcMinute,
   getSTD,
-  getYMD
+  getYMD,
+  getDateList
 }

+ 16 - 0
src/router/auditionRouter.js

@@ -39,6 +39,22 @@ let auditionRouter = [
             descrition: '处理结果',
             weight: 4 // 页面权重
         }
+    }, {
+        path: '/monthAppeal',
+        name: 'monthAppeal',
+        component: () => import(/* webpackChunkName:'MonthAppeal'*/'@/views/audition/MonthAppeal.vue'),
+        meta: {
+            descrition: '月度课酬列表',
+            weight: 4 // 页面权重
+        }
+    }, {
+        path: '/appealRecord',
+        name: 'appealRecord',
+        component: () => import(/* webpackChunkName:'AppealRecord'*/'@/views/audition/AppealRecord.vue'),
+        meta: {
+            descrition: '课酬申诉记录',
+            weight: 4 // 页面权重
+        }
     }
 ]
 

+ 71 - 11
src/views/audition/AppealDetail.vue

@@ -3,24 +3,33 @@
     <m-header v-if="headerStatus" />
     <!-- <m-empty class="empty" v-else key="data" /> -->
     <van-field
+      v-model="reason"
       rows="15"
+      :disabled="haveComplaints == 1"
       type="textarea"
       placeholder="请提交课程日期,时间,课程名称及情况说明"
     />
     <div class="button-group">
-      <van-button type="primary" round size="large">提交</van-button>
+      <van-button type="primary" v-if="haveComplaints == 1" round size="large" @click="onCancel">撤销</van-button>
+      <van-button type="primary" v-else round size="large" @click="onSubmit">提交</van-button>
     </div>
   </div>
 </template>
 <script>
-import MHeader from "@/components/MHeader";
+import MHeader from "@/components/MHeader"
 import { browser }  from '@/common/common'
+import { teacherSalaryComplaintAdd, findByMonth, repealComplaints } from '@/api/audition'
 export default {
   name: "teacherList",
   components: { MHeader },
   data() {
+    let query = this.$route.query
     return {
       headerStatus: true,
+      reason: null,
+      haveComplaints: query.haveComplaints,
+      appealDateStr: query.appealDateStr,
+      isClick: true,
     };
   },
   mounted() {
@@ -29,22 +38,73 @@ export default {
       localStorage.setItem("Authorization", decodeURI(params.Authorization));
       localStorage.setItem("userInfo", decodeURI(params.Authorization));
     }
-    document.title = '确认课酬'
+    document.title = '申诉详情'
     if(browser().android || browser().iPhone) {
       this.headerStatus = false
     }
+
+    if(this.haveComplaints == 1) {
+      this.getList()
+    }
   },
   methods: {
-    formatter(type, val) {
-      if (type === "year") {
-        return `${val}年`;
-      } else if (type === "month") {
-        return `${val}月`;
-      } else if (type == "day") {
-        return `${val}日`;
+    getList() {
+      findByMonth({ salarySettlementMonth: this.appealDateStr }).then(res => {
+        let result = res.data
+        if(result.code == 200) {
+          this.reason = result.data.reason
+          this.appealId = result.data.id
+        } else {
+          this.$toast(result.msg)
+        }
+      })
+    },
+    onSubmit() {
+      if(!this.reason.trim()) {
+        this.$toast('请输入申诉内容')
+        return
+      }
+      let params = {
+        reason: this.reason,
+        salarySettlementMonth: this.appealDateStr
       }
-      return val;
+      if(!this.isClick) {
+        return
+      }
+      this.isClick = false
+      teacherSalaryComplaintAdd(params).then(res => {
+        let result = res.data
+        this.isClick = true
+        if(result.code == 200) {
+          this.$toast('申诉提交成功')
+          this.$router.push('/remuneration')
+        } else {
+          this.$toast(result.msg)
+        }
+      })
     },
+    onCancel() {
+      this.$dialog.confirm({
+        title: '撤销申诉',
+        message: '您是否确认撤销本次申诉?',
+      })
+      .then(() => {
+        // on confirm
+        repealComplaints({ salarySettlementMonth: this.appealDateStr }).then(res => {
+          let result = res.data
+          if(result.code == 200) {
+            this.$toast('撤销申诉成功')
+            this.$router.push('/remuneration')
+          } else {
+            this.$toast(result.msg)
+          }
+        })
+      })
+      .catch(() => {
+        // on cancel
+      })
+      
+    }
   }
 };
 </script>

+ 80 - 0
src/views/audition/AppealRecord.vue

@@ -0,0 +1,80 @@
+<template>
+  <div class="wrap">
+    <m-header v-if="headerStatus" />
+
+    <van-list v-if="dataShow" v-model="loading" :finished="finished" finished-text="没有更多了" @load="getList">
+      <van-cell v-for="i in 5" :key="i">
+        <template #title>4月5日 15:05 </template>
+        <template #default>4月课酬申诉<span class="agree">待处理</span></template>
+      </van-cell>
+    </van-list>
+    <m-empty class="empty" msg="暂无数据" v-else key="data" />
+  </div>
+</template>
+<script>
+import MHeader from "@/components/MHeader"
+import MEmpty from "@/components/MEmpty"
+import { browser }  from '@/common/common'
+export default {
+  name: "appealReocrd",
+  components: { MHeader, MEmpty },
+  data() {
+    return {
+      headerStatus: true,
+      loading: false,
+      finished: false,
+      dataShow: true
+    };
+  },
+  mounted() {
+    let params = this.$route.query;
+    if (params.Authorization) {
+      localStorage.setItem("Authorization", decodeURI(params.Authorization));
+      localStorage.setItem("userInfo", decodeURI(params.Authorization));
+    }
+    document.title = '处理结果'
+    if(browser().android || browser().iPhone) {
+      this.headerStatus = false
+    }
+  },
+  methods: {
+    getList() {
+      this.finished = true
+    },
+  }
+};
+</script>
+<style lang="less" scoped>
+@import url("../../assets/commonLess/variable.less");
+.wrap {
+  height: 100vh;
+  overflow-y: auto;
+  overflow-x: hidden;
+  background-color: #F3F4F8;
+}
+
+/deep/.van-cell {
+  font-size: .16rem;
+  padding: .15rem .16rem;
+  .van-cell__title {
+    color: #808080;
+  }
+  .van-cell__value {
+    display: flex;
+    justify-content: space-between;
+    font-size: .17rem;
+    color: #1A1A1A;
+    width: 60%;
+    flex: 0 auto;
+    .agree {
+      color: #2EC7A5;
+    }
+    .reject {
+      color: #EC4848;
+    }
+    .over {
+      color: #808080;
+    }
+  }
+}
+</style>

+ 118 - 0
src/views/audition/MonthAppeal.vue

@@ -0,0 +1,118 @@
+<template>
+  <div class="wrap">
+    <m-header v-if="headerStatus">
+      <template slot="right">
+          <div @click="onAppealRecord">申诉记录</div>
+      </template>
+    </m-header>
+    <van-dropdown-menu>
+      <van-dropdown-item v-model="value1" :options="option1" />
+    </van-dropdown-menu>
+
+    <div v-if="dataShow">
+      <van-cell-group>
+        <van-cell title="4月">
+          <template #default>
+            总计:<span class="countMoney">2000元</span>
+          </template>
+        </van-cell>
+        <van-cell title="3月" class="disabled">
+          <template #default>
+            总计:<span class="countMoney">2000元</span>
+          </template>
+        </van-cell>
+      </van-cell-group>
+
+      <div class="allCount">
+        合计:<span class="allMoney">5000.00<i>元</i></span>
+      </div>
+    </div>
+    <m-empty class="empty" msg="暂无数据" v-else key="data" />
+  </div>
+</template>
+<script>
+import MHeader from "@/components/MHeader"
+import MEmpty from "@/components/MEmpty"
+import { browser }  from '@/common/common'
+export default {
+  name: "teacherList",
+  components: { MHeader, MEmpty },
+  data() {
+    return {
+      headerStatus: true,
+      value1: new Date().getFullYear(),
+      option1: [
+        { text: '2020年', value: 2020 },
+        { text: '2021年', value: 2021 },
+        { text: '2022年', value: 2022 }
+      ],
+      dataShow: true
+    };
+  },
+  mounted() {
+    let params = this.$route.query;
+    if (params.Authorization) {
+      localStorage.setItem("Authorization", decodeURI(params.Authorization));
+      localStorage.setItem("userInfo", decodeURI(params.Authorization));
+    }
+    document.title = "确认课酬";
+    if (browser().android || browser().iPhone) {
+      this.headerStatus = false;
+    }
+  },
+  methods: {
+    onAppealRecord() {
+      this.$router.push({
+        path: 'appealRecord'
+      })
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+@import url("../../assets/commonLess/variable.less");
+.wrap {
+  height: 100vh;
+  overflow-y: auto;
+  overflow-x: hidden;
+  background-color: #f3f4f8;
+}
+/deep/.van-dropdown-menu__title, /deep/.van-cell {
+  font-size: .16rem;
+}
+/deep/.van-cell {
+  padding-top: .14rem;
+  padding-bottom: .14rem;
+}
+.countMoney {
+  color: #FF433F;
+}
+.disabled {
+  opacity: .5;
+}
+
+/deep/.van-cell-group {
+  margin-bottom: .55rem;
+}
+.allCount {
+  padding: 0 .16rem;
+  line-height: .55rem;
+  background: #fff;
+  font-size: .17rem;
+  color: #1A1A1A;
+  display: flex;
+  justify-content: space-between;
+  position: fixed;
+  width: calc(100% - .32rem);
+  bottom: 0;
+  left: 0;
+  .allMoney {
+    font-size: .22rem;
+    color: #F85043;
+    i {
+      font-style: normal;
+      font-size: .16rem;
+    }
+  }
+}
+</style>

+ 187 - 89
src/views/audition/Remuneration.vue

@@ -2,48 +2,41 @@
   <div class="wrap">
     <m-header v-if="headerStatus" />
 
-    <div class="monthMoney"> 2020年3月课酬确认单 </div>
-    <div class="monthCount">
-      <div class="item">
-        <span class="title">本月合计</span>
-        <span>100节</span>
-        <span class="money">4000元</span>
-      </div>
-      <div class="item">
-        <span class="title">乐团课合计</span>
-        <span>100节</span>
-        <span class="money">4000元</span>
-      </div>
-      <div class="item">
-        <span class="title">VIP课合计</span>
-        <span>100节</span>
-        <span class="money">4元</span>
-      </div>
-      <div class="item">
-        <span class="title">网管课合计</span>
-        <span>100节</span>
-        <span class="money">4000元</span>
+    <div class="monthMoney">{{ appealDate }}课酬</div>
+    <div class="monthCount" v-if="statistics.length > 0">
+      <div class="item" v-for="(item, index) in statistics" :key="index">
+        <span class="title" v-if="item.groupType == 'ALL'">本月合计</span>
+        <span class="title" v-if="item.groupType == 'MUSIC'">乐团课合计</span>
+        <span class="title" v-if="item.groupType == 'VIP'">VIP课合计</span>
+        <span class="title" v-if="item.groupType == 'PRACTICE'">网管课合计</span>
+        <span>{{ item.courseTimes }}节</span>
+        <span class="money">{{ item.totalActualSalary }}元</span>
       </div>
     </div>
 
-    <div style="padding-bottom: .8rem">
+    <div :class="confirmStatus == 0 ? 'paddingB80' : 'paddingB16'">
       <van-list v-model="loading" :finished="finished" finished-text=" " @load="getList">
-        <van-cell-group v-for="i in 10" :key="i">
+        <van-cell-group v-for="(item, index) in dataList" :key="index">
           <van-cell>
             <template #icon>
-              <i class="icon icon_audition"></i>
+              <i class="icon icon_audition" v-if="item.groupType == 'PRACTICE'"></i>
+              <i class="icon icon_vip" v-if="item.groupType == 'VIP'"></i>
+              <i class="icon icon_music" v-if="item.groupType == 'MUSIC'"></i>
             </template>
             <template #title>
-              <div class="title">长笛·基础知识课</div>
+              <div class="title">{{ item.courseName }}</div>
               <div class="baseInfo">
-                <p>排课:3月5日 13:00-13:35</p>
-                <p>签到:13:00&nbsp;&nbsp;&nbsp;&nbsp;签退13:35</p>
+                <p>排课:{{ item.startClassTime | getMonthDay }} {{ item.startClassTime | getHourMin }}-{{ item.endClassTime | getHourMin }}</p>
+                <p>签到:{{ item.signInTime | getHourMin }}&nbsp;&nbsp;&nbsp;&nbsp;签退:{{ item.signOutTime | getHourMin }}</p>
               </div>
             </template>
             <template #default>
-              <p class="money error">¥<span>50</span></p>
-              <div class="moneyInfo">
-                课酬:¥100<br />实付:¥50
+              <p class="money" :class="[item.reduceSalary > 0 ? 'error' : '']">
+                ¥<span>{{ item.actualSalary }}</span>
+              </p>
+              <div class="moneyInfo" v-if="item.reduceSalary > 0">
+                课酬:¥{{ item.expectSalary }}
+                <br />扣款:¥{{ item.reduceSalary }}
               </div>
             </template>
           </van-cell>
@@ -53,24 +46,45 @@
 
     <!-- <m-empty class="empty" v-else key="data" /> -->
 
-    <div class="button-group">
-      <span class="btn" @click="onAppeal">问题申诉</span>
-      <span class="btn primary">确认课酬</span>
+    <div class="button-group" v-if="confirmStatus == 0">
+      <span class="btn" @click="onAppeal(haveComplaints)">{{ haveComplaints == 1 ? '申诉详情' : '问题申诉' }}</span>
+      <span class="btn primary" @click="onConfirmAppeal">确认课酬</span>
     </div>
   </div>
 </template>
 <script>
 import MHeader from "@/components/MHeader";
-import { browser }  from '@/common/common'
+import { browser, getSTD } from "@/common/common";
 // import MEmpty from "@/components/MEmpty";
+import { findTeacherSettlementCourseSalarys, confirmTeacherMonthSalary } from "@/api/audition";
 export default {
   name: "remuneration",
   components: { MHeader },
   data() {
+    let query = this.$route.query
+    let tempDate = new Date(query.month + '-01')
+    if(!query.month) {
+      tempDate = new Date()
+      tempDate.setMonth(tempDate.getMonth() - 1)
+    }
+    let tempAppealDate = tempDate.getFullYear() + '年' + getSTD(tempDate.getMonth() + 1) + '月'
+    let tempAppealDateStr = tempDate.getFullYear() + '-' + getSTD(tempDate.getMonth() + 1)
     return {
       headerStatus: true,
+      appealDate: tempAppealDate,
+      appealDateStr: tempAppealDateStr,
       loading: false,
-      finished: false
+      finished: false,
+      statistics: [],
+      dataList: [],
+      dataShow: true, // 是否有数据
+      confirmStatus: 1, // 是否确认
+      haveComplaints: 0, // 是否存在申诉
+      params: {
+        month: query.month ? query.month : null,
+        page: 1,
+        rows: 20
+      }
     };
   },
   mounted() {
@@ -79,29 +93,105 @@ export default {
       localStorage.setItem("Authorization", decodeURI(params.Authorization));
       localStorage.setItem("userInfo", decodeURI(params.Authorization));
     }
-    document.title = '确认课酬'
-    if(browser().android || browser().iPhone) {
-      this.headerStatus = false
+    document.title = "确认课酬";
+    if (browser().android || browser().iPhone) {
+      this.headerStatus = false;
     }
   },
   methods: {
     getList() {
-      this.finished = true
+      // this.finished = true
+      let params = this.params;
+      findTeacherSettlementCourseSalarys().then(res => {
+        let result = res.data;
+        this.loading = false;
+        if (result.code == 200) {
+          // 判断是否有统计数据
+          if(result.data.stat) {
+            let tempStatistics = result.data.stat
+            let counts = {
+              courseTimes: 0,
+              totalActualSalary: 0
+            }
+            result.data.stat.forEach(item => {
+              counts.courseTimes += item.courseTimes
+              counts.totalActualSalary += item.totalActualSalary
+            })
+            counts.groupType = 'ALL'
+            tempStatistics.unshift(counts)
+            this.statistics = tempStatistics
+          }
+          let pageInfo = result.data.pageInfo
+          params.page = pageInfo.pageNo
+          this.confirmStatus = result.data.confirmStatus
+          this.haveComplaints = result.data.haveComplaints
+          this.dataList = this.dataList.concat(pageInfo.rows)
+          if (params.page >= pageInfo.totalPage) {
+            this.finished = true;
+          }
+          this.params.page++;
+        } else {
+          this.finished = true;
+        }
+        // 判断是否有数据
+        if (this.dataList.length <= 0) {
+          this.dataShow = false;
+        }
+      });
     },
-    onAppeal() {
+    onAppeal(haveComplaints) {
       this.$router.push({
-        path: 'appealDetail'
+        path: "appealDetail",
+        query: {
+          haveComplaints: haveComplaints,
+          appealDateStr: this.appealDateStr
+        }
+      });
+    },
+    onConfirmAppeal() {
+      this.$dialog.confirm({
+        title: '确认课酬',
+        message: '您是否确认本月课酬?',
+      })
+      .then(() => {
+        // on confirm
+        confirmTeacherMonthSalary({ month: this.appealDateStr }).then(res => {
+          let result = res.data
+          if(result.code == 200) {
+            this.$toast('课酬确认成功')
+            this.confirmStatus = 1
+          } else {
+            this.$toast(result.msg)
+          }
+        })
       })
+      .catch(() => {
+        // on cancel
+      })
+      
+    }
+  },
+  filters: {
+    getHourMin(time) {
+      let tempDate = time
+      if(!time) {
+        return ''
+      }
+      if(typeof(tempDate) == 'string') {
+          tempDate = new Date(time.replace(/-/ig, '/'))
+      }
+      let hour = tempDate.getHours()
+      let minut = tempDate.getMinutes()
+      return getSTD(hour) + ':' + getSTD(minut)
     },
-    formatter(type, val) {
-      if (type === "year") {
-        return `${val}年`;
-      } else if (type === "month") {
-        return `${val}月`;
-      } else if (type == "day") {
-        return `${val}日`;
+    getMonthDay(time) {
+      let tempDate = time || new Date()
+      if(typeof(tempDate) == 'string') {
+          tempDate = new Date(time.replace(/-/ig, '/'))
       }
-      return val;
+      let month = tempDate.getFullYear()
+      let day = tempDate.getMonth() + 1
+      return month + '月' + day + '日'
     }
   }
 };
@@ -112,102 +202,110 @@ export default {
   height: 100vh;
   overflow-y: auto;
   overflow-x: hidden;
-  background-color: #F3F4F8;
+  background-color: #f3f4f8;
 }
 
 .monthMoney {
-  font-size: .16rem;
-  color: #1A1A1A;
+  font-size: 0.16rem;
+  color: #1a1a1a;
   background: #fff;
   text-align: center;
-  line-height: .5rem;
+  line-height: 0.5rem;
 }
 
 .monthCount {
-  border: 1px solid rgba(204,204,204,1);
-  border-radius: .04rem;
-  margin: .16rem .16rem 0;
+  border: 1px solid rgba(204, 204, 204, 1);
+  border-radius: 0.04rem;
+  margin: 0.16rem 0.16rem 0;
   background: #fff;
-  padding: .12rem;
+  padding: 0.12rem;
   .item {
     display: flex;
     justify-content: space-between;
     color: #666666;
-    font-size: .14rem;
-    padding: .05rem .1rem;
+    font-size: 0.14rem;
+    padding: 0.05rem 0.1rem;
     .title {
-      width: .8rem;
+      width: 0.8rem;
     }
     .money {
-      width: .8rem;
+      width: 0.8rem;
       text-align: right;
     }
 
     &:nth-child(2n + 2) {
-      background: #F0F0F0;
+      background: #f0f0f0;
     }
   }
 }
 /deep/.van-cell-group {
-  margin: .16rem .16rem 0;
-  border: 1px solid #71BDB8;
-  border-radius: .04rem;
+  margin: 0.16rem 0.16rem 0;
+  border: 1px solid #71bdb8;
+  border-radius: 0.04rem;
   overflow: hidden;
 }
 /deep/.van-cell {
-  padding: .13rem;
+  padding: 0.13rem;
   .van-cell__title {
-    padding-left: .1rem;
+    padding-left: 0.1rem;
   }
   .van-cell__value {
     flex: 0 auto;
-    padding-left: .1rem;
+    padding-left: 0.1rem;
   }
   .title {
-    font-size: .16rem;
+    font-size: 0.16rem;
     font-weight: 500;
-    color: #1A1A1A;
-    padding-bottom: .05rem;
+    color: #1a1a1a;
+    padding-bottom: 0.05rem;
   }
   .baseInfo {
-    font-size: .14rem;
+    font-size: 0.14rem;
     color: #808080;
     line-height: 1.3;
   }
   .money {
-    font-size: .16rem;
-    color: #1A1A1A;
-    padding-bottom: .02rem;
+    font-size: 0.16rem;
+    color: #1a1a1a;
+    padding-bottom: 0.02rem;
     &.error {
-      color: #FF3535;
+      color: #ff3535;
     }
     span {
-      font-size: .22rem;
+      font-size: 0.22rem;
     }
   }
   .moneyInfo {
-    font-size: .14rem;
+    font-size: 0.14rem;
     line-height: 1.3;
-    color: #1A1A1A;
+    color: #1a1a1a;
   }
 }
 .icon {
-  width: .4rem;
-  height: .4rem;
+  width: 0.4rem;
+  height: 0.4rem;
   display: inline-block;
 }
 .icon_audition {
-  background: url('../../assets/images/audition/audition_icon.png') no-repeat center;
+  background: url("../../assets/images/audition/audition_icon.png") no-repeat
+    center;
   background-size: contain;
 }
 .icon_music {
-  background: url('../../assets/images/audition/music_icon.png') no-repeat center;
+  background: url("../../assets/images/audition/music_icon.png") no-repeat
+    center;
   background-size: contain;
 }
 .icon_vip {
-  background: url('../../assets/images/audition/vip_icon.png') no-repeat center;
+  background: url("../../assets/images/audition/vip_icon.png") no-repeat center;
   background-size: contain;
 }
+.paddingB80 {
+  padding-bottom: .8rem
+}
+.paddingB16 {
+  padding-bottom: .16rem;
+}
 .button-group {
   position: absolute;
   bottom: 0;
@@ -215,21 +313,21 @@ export default {
   width: 100%;
   text-align: center;
   .btn {
-    padding: 0 .45rem;
-    line-height: .4rem;
+    padding: 0 0.45rem;
+    line-height: 0.4rem;
     display: inline-block;
     border: 1px solid @mColor;
     border-radius: 1rem;
     color: @mColor;
     background: #fff;
-    font-size: .18rem;
+    font-size: 0.18rem;
     &.primary {
       color: #fff;
       background: @mColor;
     }
   }
-  .btn+.btn {
-    margin-left: .1rem;
+  .btn + .btn {
+    margin-left: 0.1rem;
   }
 }
 </style>

Some files were not shown because too many files changed in this diff