mo 4 年之前
父節點
當前提交
e65966f290
共有 36 個文件被更改,包括 583 次插入333 次删除
  1. 0 0
      dist/index.html
  2. 0 0
      dist/static/css/chunk-00bbf359.3f2e96c5.css
  3. 1 1
      dist/static/css/chunk-2fa64fd2.f356e152.css
  4. 0 0
      dist/static/css/chunk-4e38170a.3d6d1144.css
  5. 0 1
      dist/static/css/chunk-54ae4d6e.b210e61b.css
  6. 0 0
      dist/static/css/chunk-73b8e5cf.a667ffda.css
  7. 0 0
      dist/static/css/chunk-bba048e0.5003cbce.css
  8. 1 0
      dist/static/css/chunk-f09b4a16.9dddd4aa.css
  9. 0 0
      dist/static/js/app.c7483ca0.js
  10. 0 0
      dist/static/js/app.cbc10561.js
  11. 0 0
      dist/static/js/chunk-00bbf359.f6897a24.js
  12. 0 0
      dist/static/js/chunk-00e01cbe.506c7401.js
  13. 0 0
      dist/static/js/chunk-00e01cbe.89e9f696.js
  14. 0 0
      dist/static/js/chunk-08a5bd4e.f2f71087.js
  15. 0 0
      dist/static/js/chunk-2fa64fd2.fcc18137.js
  16. 0 0
      dist/static/js/chunk-3c8266ca.b1c4c879.js
  17. 0 0
      dist/static/js/chunk-3c8266ca.b2e3b0bc.js
  18. 0 0
      dist/static/js/chunk-4e38170a.27a21da2.js
  19. 0 0
      dist/static/js/chunk-54ae4d6e.85ccfe0b.js
  20. 0 0
      dist/static/js/chunk-73b8e5cf.6b03ca2b.js
  21. 0 0
      dist/static/js/chunk-bba048e0.7ece03d3.js
  22. 0 0
      dist/static/js/chunk-f09b4a16.6674ca42.js
  23. 4 4
      src/utils/vueFilter.js
  24. 17 11
      src/views/arrearage-students/index.vue
  25. 62 60
      src/views/main/abnormal/title.vue
  26. 2 2
      src/views/main/baseinfo/index.vue
  27. 9 1
      src/views/main/constant.js
  28. 105 51
      src/views/main/reminders/index.vue
  29. 3 3
      src/views/reaplceMusicPlayer/index.vue
  30. 40 16
      src/views/recodeManager/modals/hand.vue
  31. 2 1
      src/views/recodeManager/recodeList.vue
  32. 8 7
      src/views/returnVisitManager/returnVisitList.vue
  33. 96 44
      src/views/stuRecodeManager/index.vue
  34. 108 75
      src/views/teamDetail/componentCourse/studentRollCall.vue
  35. 120 54
      src/views/teamDetail/componentCourse/teacherList.vue
  36. 5 2
      src/views/teamDetail/teamCourseList.vue

文件差異過大導致無法顯示
+ 0 - 0
dist/index.html


文件差異過大導致無法顯示
+ 0 - 0
dist/static/css/chunk-00bbf359.3f2e96c5.css


+ 1 - 1
dist/static/css/chunk-167ec06e.3c15dce7.css → dist/static/css/chunk-2fa64fd2.f356e152.css

@@ -1 +1 @@
-.btnList[data-v-6a03bb8f]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.code-url[data-v-6a03bb8f]{margin-top:10px}
+.btnList[data-v-f3ed46a2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.code-url[data-v-f3ed46a2]{margin-top:10px}

文件差異過大導致無法顯示
+ 0 - 0
dist/static/css/chunk-4e38170a.3d6d1144.css


+ 0 - 1
dist/static/css/chunk-54ae4d6e.b210e61b.css

@@ -1 +0,0 @@
-.msg[data-v-4098fc8d]{min-width:120px}.label[data-v-4098fc8d]{width:520px}[data-v-4098fc8d] .description-title{margin-bottom:0}

文件差異過大導致無法顯示
+ 0 - 0
dist/static/css/chunk-73b8e5cf.a667ffda.css


文件差異過大導致無法顯示
+ 0 - 0
dist/static/css/chunk-bba048e0.5003cbce.css


+ 1 - 0
dist/static/css/chunk-f09b4a16.9dddd4aa.css

@@ -0,0 +1 @@
+.msg[data-v-eb7e26f2]{min-width:120px}.label[data-v-eb7e26f2]{width:520px}[data-v-eb7e26f2] .description-title{margin-bottom:0}

文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/app.c7483ca0.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/app.cbc10561.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-00bbf359.f6897a24.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-00e01cbe.506c7401.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-00e01cbe.89e9f696.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-08a5bd4e.f2f71087.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-2fa64fd2.fcc18137.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-3c8266ca.b1c4c879.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-3c8266ca.b2e3b0bc.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-4e38170a.27a21da2.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-54ae4d6e.85ccfe0b.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-73b8e5cf.6b03ca2b.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-bba048e0.7ece03d3.js


文件差異過大導致無法顯示
+ 0 - 0
dist/static/js/chunk-f09b4a16.6674ca42.js


+ 4 - 4
src/utils/vueFilter.js

@@ -225,8 +225,8 @@ Vue.filter('jobNature', (value) => {
 // 考勤状态
 Vue.filter('attendanceType', value => {
   let template = {
-    0: "异常签到",
-    1: "正常签到",
+    0: "异常",
+    1: "正常",
     3: "未签到"
   }
   return template[value]
@@ -234,8 +234,8 @@ Vue.filter('attendanceType', value => {
 // 考情签退
 Vue.filter('attendanceOutType', value => {
   let template = {
-    0: "异常签退",
-    1: "正常签退",
+    0: "异常",
+    1: "正常",
     3: "未签退"
   }
   return template[value]

+ 17 - 11
src/views/arrearage-students/index.vue

@@ -1,7 +1,8 @@
 <template>
   <div class="m-container">
     <h2>
-      <div class="squrt"></div>欠费学员列表 <filter-search @reload="reloadSearch" :keys="['visitFlag']" :moreKeys="['organId']"/>
+      <div class="squrt"></div>欠费学员列表
+      <!-- <filter-search @reload="reloadSearch" :keys="['visitFlag']" :moreKeys="['organId']"/> -->
     </h2>
     <div class="m-core">
       <save-form
@@ -32,16 +33,6 @@
               :value="item.id"
             ></el-option>
           </select-all>
-          <!-- <el-select
-            v-model.trim="searchForm.organIds"
-            clearable
-            filterable
-            multiple
-            collapse-tags
-            placeholder="请选择所属分部"
-          > -->
-
-          <!-- </el-select> -->
         </el-form-item>
         <el-form-item>
           <el-select
@@ -79,6 +70,15 @@
             v-model="searchForm.eduTeacherId"
           />
         </el-form-item>
+               <el-form-item
+                      >
+          <el-select v-model.trim="searchForm.noPaymentType" placeholder="未缴费类型">
+            <el-option label="历史"
+                       :value="0"></el-option>
+            <el-option label="进行中"
+                       :value="1"></el-option>
+          </el-select>
+        </el-form-item>
         <el-form-item>
           <el-button native-type="submit" type="danger">搜索</el-button>
           <el-button native-type="reset" type="primary">重置</el-button>
@@ -200,6 +200,7 @@ const initSearch = {
   branchs: null,
   musicGroupId: null,
   cooperationOrganId: null,
+  noPaymentType:null
 }
 export default {
   components: {
@@ -233,6 +234,11 @@ export default {
     if(query.result) {
       this.searchForm.eduTeacherId = Number(query.result)
     }
+      console.log(query.noPaymentType)
+    if(query.noPaymentType){
+
+        this.searchForm.noPaymentType = Number(query.noPaymentType)
+    }
     getCooperation({ rows: 1000 }).then((res) => {
       this.cooperations = res.data.rows
     })

+ 62 - 60
src/views/main/abnormal/title.vue

@@ -1,109 +1,111 @@
 <template>
-  <div class="title" :class="{error: type === 'error', warning: type === 'warning'}">
+ <div
+    class="title"
+    :class="{ error: type === 'error', warning: type === 'warning' }"
+  >
     <div>
       <span v-for="(item, index) in data" :key="index">
-        <span v-html=titleFilter(item)></span>
-              <el-tooltip
-            v-if="descs[item.errorType]"
-            :content="descs[item.errorType]"
-            :open-delay="0.3"
-            placement="top"
-          >
-          <!-- color: #f56c6c -->
-            <i
-               class="el-icon-warning-outline"
-                style="font-size: 14px; "
-            />
-          </el-tooltip>
-        <b v-if="!(ignore.includes(item.errorType))">{{item.num}}</b>
+        <span v-html="titleFilter(item)"></span>
+        <el-tooltip
+          v-if="descs[item.errorType]"
+          :content="descs[item.errorType]"
+          :open-delay="0.3"
+          placement="top"
+        >
+          <i class="el-icon-warning-outline" style="font-size: 14px" />
+        </el-tooltip>
+        <b v-if="!ignore.includes(item.errorType)">{{ item.num }}</b>
       </span>
-
     </div>
-    <slot/>
+    <slot />
   </div>
 </template>
 <script>
-import { descs } from '../constant'
+import { descs } from "../constant";
 export default {
   props: {
     type: {
       type: String,
-      default: 'warning'
+      default: "warning",
     },
     data: {
       type: Array,
-      default: []
-    }
-  },
-  data(){
-    return{
-     descs,
-     ignore: ['NO_CLASS_MUSIC_GROUP_STUDENT_INFO'] // // 忽略类型
-    }
+      default: [],
+    },
   },
-  mounted(){
+  data() {
+    return {
+      descs,
+      ignore: ["NO_CLASS_MUSIC_GROUP_STUDENT_INFO"], // // 忽略类型
+    };
   },
+  mounted() {},
   methods: {
     titleFilter(item) {
-      if(this.ignore.includes(item.errorType)) {
-        let tempName = item.name
-        tempName = tempName.replace('{0}', `<b>${item.num}</b>`)
-        tempName = tempName.replace('{1}', `<b>${item.num2}</b>`)
-        return tempName
+      if (this.ignore.includes(item.errorType)) {
+
+        let tempName = item.name;
+        tempName = tempName.replace("{0}",`<b>${item.num}</b>`);
+        tempName = tempName.replace("{1}",`<b>${item.num2}</b>`);
+        return tempName;
       } else {
-        return item.name
+        return item.name;
       }
-    }
-  }
-}
+    },
+  },
+};
 </script>
 <style lang="less" scoped>
-.title{
+.title {
   height: 48px;
   line-height: 48px;
-  background-color: rgba(0, 0, 0, .02);
+  background-color: rgba(0, 0, 0, 0.02);
   overflow: hidden;
   display: flex;
   justify-content: space-between;
   padding-right: 10px;
   font-weight: bold;
-  transition: all .3s;
+  transition: all 0.3s;
   width: 100%;
+  box-sizing: content-box;
   /deep/b {
     font-size: 18px;
   }
-  &:hover{
-    background-color: rgba(0, 0, 0, .06);
+  &:hover {
+    background-color: rgba(0, 0, 0, 0.06);
   }
   &.error {
-    /deep/b{
-      color: #ED6F62;
+    /deep/b {
+      color: #ed6f62;
     }
-    &:before{
-      background-color: #ED6F62;
+    &:before {
+      position: absolute;
+      background-color: #ed6f62;
+
     }
   }
   &.warning {
-    /deep/b{
-      color: #F2A24A;
+    /deep/b {
+      color: #f2a24a;
     }
-    &:before{
-      background-color: #F2A24A;
-    }
-  }
-  &:before{
-      content: '';
-      display: block;
+    &:before {
       position: absolute;
-      width: 7px;
-      height: 48px;
-      left: 0;
+      background-color: #f2a24a;
     }
-  >div{
+  }
+  &:before {
+    content: "";
+    display: block;
+    position: absolute;
+    width: 7px;
+    height: 48px;
+    left: 0;
+  }
+  > div {
     position: relative;
     padding-left: 20px;
     font-size: 14px;
-    >span{
+    > span {
       margin-right: 10px;
       display: inline-block;
     }

+ 2 - 2
src/views/main/baseinfo/index.vue

@@ -52,12 +52,12 @@
       <el-col :xs="24" :sm="24" :md="24" :lg="9" :xl="9">
         <hrdata :data="dataInfo" />
       </el-col>
-      <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
+      <!-- <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
         <surplusCourse :data="dataInfo" />
       </el-col>
       <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
         <useCourse :data="dataInfo" />
-      </el-col>
+      </el-col> -->
       <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="12">
         <management
           ref="management"

+ 9 - 1
src/views/main/constant.js

@@ -96,13 +96,21 @@ export const errorType = {
     permission: '/notClassStudent',
     always: true,
   },
+  STUDENT_ARREARAGE:{
+    name: '未缴费学员数',
+    isError: true,
+    url: '/studentManager/ArrearageStudents',
+    permission: '/ArrearageStudents',
+    always: true,
+    query: {noPaymentType:'0'}
+  },
   STUDENT_NOT_PAYMENT: {
     name: '未缴费学员数',
     isError: true,
     url: '/studentManager/ArrearageStudents',
     permission: '/ArrearageStudents',
     always: true,
-    query: {}
+    query: {noPaymentType:'1'}
   },
   STUDENT_APPLY_FOR_QUIT_MUSIC_GROUP: {
     name: '申请退团学员数',

+ 105 - 51
src/views/main/reminders/index.vue

@@ -1,6 +1,12 @@
 <template>
   <div class="container">
-    <save-form inline :model="search" @submit="FetchList" @reset="reset" saveKey="/main/main/reminders">
+    <save-form
+      inline
+      :model="search"
+      @submit="FetchList"
+      @reset="reset"
+      saveKey="/main/main/reminders"
+    >
       <el-form-item prop="organIds">
         <el-select
           clearable
@@ -8,99 +14,147 @@
           placeholder="请选择分部"
           v-model="search.organId"
         >
-          <el-option v-for="(item,index) in selects.branchs"
+          <el-option
+            v-for="(item, index) in selects.branchs"
             :key="index"
             :label="item.name"
-            :value="item.id"></el-option>
+            :value="item.id"
+          ></el-option>
         </el-select>
       </el-form-item>
       <el-button native-type="submit" type="primary">搜索</el-button>
       <el-button native-type="reset" type="danger">重置</el-button>
     </save-form>
-    <empty desc="暂无需要处理异常" v-if="!list.length"/>
-    <el-button @click="handle(item)"
-      style="width: 100%;color: #303133;"
-      v-else
-      v-for="(item, index) in list"
-      :key="index"
-      :disabled="item.result ?  !item.result.length : !item.result" type="text"
-    >
-      <title-item
-        type="warning"
-        :data="[{name: item.desc, num: item.num,errorType:item.errorType}]"
+    <empty desc="暂无需要处理异常" v-if="!list.length" />
+    <div v-else class="buttonWrap">
+      <el-button
+        @click="handle(item)"
+        style="width: 100%; color: #303133"
+        v-for="(item, index) in list"
+        :key="index"
+        :disabled="item.num ? false : true"
+        type="text"
       >
-        <span style="color: #14928A;" v-if='!errorType[item.errorType] || (errorType[item.errorType] && permission(errorType[item.errorType].permission))'>立即处理<i class="el-icon-d-arrow-right"/></span>
-      </title-item>
-    </el-button>
+        <title-item
+          type="warning"
+          :data="[
+            { name: item.desc, num: item.num, errorType: item.errorType },
+          ]"
+        >
+          <span
+            style="color: #14928a"
+            v-if="
+              !errorType[item.errorType] ||
+              (errorType[item.errorType] &&
+                permission(errorType[item.errorType].permission))
+            "
+            >立即处理<i class="el-icon-d-arrow-right"
+          /></span>
+        </title-item>
+      </el-button>
+    </div>
   </div>
 </template>
 <script>
-import { Searchs } from '@/helpers'
-import { getRemindMatterData } from '@/views/main/api'
-import title from '../abnormal/title'
-import { errorType } from '@/views/main/constant'
-import { permission } from '@/utils/directivePage'
+import { Searchs } from "@/helpers";
+import { getRemindMatterData } from "@/views/main/api";
+import title from "../abnormal/title";
+import { errorType } from "@/views/main/constant";
+import { permission } from "@/utils/directivePage";
 const initSearch = {
-  organId: null
-}
+  organId: null,
+};
 export default {
   components: {
-    'title-item': title
+    "title-item": title,
   },
   data() {
     return {
       search: {
-        ...initSearch
+        ...initSearch,
       },
       list: [],
       errorType: errorType,
-    }
+      listByType: {},
+    };
   },
   mounted() {
-    this.FetchList()
-    this.$store.dispatch('setBranchs')
+    this.FetchList();
+    this.$store.dispatch("setBranchs");
   },
   methods: {
     permission,
     handle(item) {
       // 添加判断权限
-      if(errorType[item.errorType] && !this.permission(errorType[item.errorType]?.permission)) {
-        return
+      if (
+        errorType[item.errorType] &&
+        !this.permission(errorType[item.errorType]?.permission)
+      ) {
+        return;
       }
-      new Searchs().removeByKey('/teamList')
+      new Searchs().removeByKey(item.url);
       this.$router.push({
-        path: '/teamList',
+        path: item.url,
         query: {
+          ...item.query,
           filter_type: item.errorType,
-          searchType: 'WAIT_CREATE_PAYMENT_CALENDER',
           organId: this.search.organId || undefined,
-          form: 'reminders'
-        }
-      })
+          [item.resultKey]: item.resultKey
+            ? (item.result || []).join(",")
+            : undefined,
+        },
+      });
+
+      // this.$router.push({
+      //   path: "/teamList",
+      //   query: {
+      //     filter_type: item.errorType,
+      //     searchType: "WAIT_CREATE_PAYMENT_CALENDER",
+      //     organId: this.search.organId || undefined,
+      //     form: "reminders",
+      //   },
+      // });
     },
     async FetchList() {
       try {
         const res = await getRemindMatterData({
-          ...this.search
-        })
-        this.list = res.data
-      } catch (error) {}
+          ...this.search,
+        });
+        this.list = this.formatData(res.data||[])
+      } catch (error) {
+        console.log(error);
+      }
     },
     reset() {
-      this.search = {...initSearch}
-      this.FetchList()
+      this.search = { ...initSearch };
+      this.FetchList();
     },
-  }
-}
+    formatData(data) {
+    let list =  data.map(item=>{
+        return {
+          ...item,
+          ...errorType[item.errorType] || {}
+        }
+      })
+
+      return list
+    },
+  },
+};
 </script>
 <style lang="less" scoped>
-  .container{
-    /deep/ .is-disabled {
-      .title{
-        >span{
-          color: #C0C4CC!important;
-        }
+.container {
+  /deep/ .is-disabled {
+    .title {
+      > span {
+        color: #c0c4cc !important;
       }
     }
   }
+  .buttonWrap {
+    .el-button + .el-button {
+      margin-left: 0;
+    }
+  }
+}
 </style>

+ 3 - 3
src/views/reaplceMusicPlayer/index.vue

@@ -151,8 +151,8 @@
                 >
                 <el-button
                   type="text"
-                  @click="onCreateQRCode(scope.row, '缴费接')"
-                  v-if="scope.row.openPay">缴费接</el-button>
+                  @click="onCreateQRCode(scope.row, '缴费接')"
+                  v-if="scope.row.openPay">缴费接</el-button>
               </div>
             </template>
           </el-table-column>
@@ -351,7 +351,7 @@ export default {
           str =
             vaildTeachingUrl() +
             `/#/questionStatistics?o=${row.organId}&c=${row.cooperationOrganId}`;
-        } else if(name == '缴费接') {
+        } else if(name == '缴费接') {
           str = vaildStudentUrl() + `/#/questionGoodsSale?` + encodeURIComponent(encode(`cid=${row.cooperationOrganId}`));
         }
         // vaildTeachingUrl

+ 40 - 16
src/views/recodeManager/modals/hand.vue

@@ -2,45 +2,69 @@
   <div>
     <el-form :model="quitForm" ref="quitForm" :rules="quitRules">
       <el-form-item prop="disposeContent">
-        <el-input type="textarea" v-model.trim="quitForm.disposeContent" placeholder="请填写处理意见"></el-input>
+        <el-input
+          type="textarea"
+          v-model="quitForm.disposeContent"
+            maxlength="99"
+            show-word-limit
+          placeholder="请填写处理意见"
+        ></el-input>
       </el-form-item>
     </el-form>
-    <div slot="footer" class="dialog-footer" style="text-align: right;">
+    <div slot="footer" class="dialog-footer" style="text-align: right">
       <el-button @click="$emit('close')">取 消</el-button>
       <el-button type="primary" @click="submit">确 定</el-button>
     </div>
   </div>
 </template>
 <script>
-import { teacherAttendanceUpdate } from '../api'
+import { teacherAttendanceUpdate } from "../api";
 export default {
-  props: ['detail'],
+  props: ["detail"],
   data() {
     return {
       quitForm: {
-        reason: null,
+        disposeContent: '',
       },
       quitRules: {
-        reason: [{ required: true, message: "请填写退团退费原因" }],
+        disposeContent: [{ required: true, message: "请填写退团退费原因" }],
       },
+    };
+  },
+  mounted() {
+      //  console.log(this.detail.teacherAttendance.disposeContent);
+    if (this.detail?.teacherAttendance?.disposeContent) {
+      this.$set(
+        this.quitForm,
+        "disposeContent",
+        this.detail.teacherAttendance.disposeContent
+      );
+      // this.quitForm.reason = this.detail?.teacherAttendance?.disposeContent
+    }
+    if(this.detail?.disposeContent){
+          this.$set(
+        this.quitForm,
+        "disposeContent",
+        this.detail.disposeContent
+      );
     }
   },
   methods: {
     submit() {
-      this.$refs.quitForm.validate(async valid => {
+      this.$refs.quitForm.validate(async (valid) => {
         if (valid) {
           try {
             await teacherAttendanceUpdate({
               id: this.detail.teacherAttendanceId,
-              ...this.quitForm
-            })
-            this.$emit('close')
-            this.$emit('submited')
-            this.$message.success("提交成功")
+              ...this.quitForm,
+            });
+            this.$emit("close");
+            this.$emit("submited");
+            this.$message.success("提交成功");
           } catch (error) {}
         }
-      })
-    }
-  }
-}
+      });
+    },
+  },
+};
 </script>

+ 2 - 1
src/views/recodeManager/recodeList.vue

@@ -451,8 +451,9 @@ export default {
       this.search();
     },
     hand(row) {
+        this.detail = row;
       this.handVisible = true;
-      this.detail = row;
+
     },
     appeal(row) {
       this.appealVisible = true;

+ 8 - 7
src/views/returnVisitManager/returnVisitList.vue

@@ -14,7 +14,7 @@
         <el-form-item>
           <el-input
             placeholder="请输入老师姓名"
-            v-model.trim="searchForm.teacher"
+            v-model.trim="searchForm.search"
           ></el-input>
         </el-form-item>
         <el-form-item>
@@ -175,7 +175,7 @@
   </div>
 </template>
 <script>
-import { visitChiose } from "@/utils/searchArray";
+import { visitChiose1 } from "@/utils/searchArray";
 import pagination from "@/components/Pagination/index";
 import { getEmployeeOrgan } from "@/api/buildTeam";
 import { getVisitList } from "./api.js";
@@ -188,14 +188,14 @@ export default {
   data() {
     return {
       searchForm: {
-        teacher: "",
+        search: "",
         organId: "",
         visiterType: "",
         typeList: [],
         timer: [],
       },
 
-      visitChiose,
+      visitChiose:visitChiose1,
       organList: [],
       rules: {
         // 分页规则
@@ -218,7 +218,8 @@ export default {
     this.$store.dispatch("setBranchs");
 
     if(this.$route.query){
-      this.searchForm.teacher = this.$route.query.teacher
+      this.searchForm.search = this.$route.query.teacher // 兼容老功能
+      this.searchForm.search = this.$route.query.search
       this.searchForm.timer = this.$route.query.timer
     }
     this.getList();
@@ -233,7 +234,7 @@ export default {
     },
     search() {
       // this.$router.replace({query:{...this.$route.query,timer:undefined,teacher:undefined}})
-      resetQuery(this,{timer:undefined,teacher:undefined})
+      resetQuery(this,{timer:undefined,search:undefined})
       this.rules.page = 1;
       this.getList();
     },
@@ -241,7 +242,7 @@ export default {
       this.type = [];
       this.timer = [];
       this.searchForm = {
-        teacher: "",
+        search: "",
         organId: "",
         visiterType: "",
         type: "",

+ 96 - 44
src/views/stuRecodeManager/index.vue

@@ -3,7 +3,7 @@
   <div class="m-container">
     <h2>
       <div class="squrt"></div>
-      学生考勤列表 <filter-search @reload="reloadSearch" searchKey="ids"/>
+      学生考勤列表 <filter-search @reload="reloadSearch" searchKey="ids" />
     </h2>
     <div class="m-core">
       <save-form
@@ -237,20 +237,32 @@
             <template slot-scope="scope">
               <div>
                 <!-- {{ scope.row.courseSchedule.newCourseId > 0 ? "是" : "否" }} -->
-                {{ scope.row.courseSchedule.newCourseId > 0 && scope.row.courseSchedule.newCourseId == scope.row.courseScheduleId ? '合并课' : null }}
-                {{ scope.row.courseSchedule.newCourseId > 0 && scope.row.courseSchedule.newCourseId != scope.row.courseScheduleId ? '被合并课' : null }}
+                {{
+                  scope.row.courseSchedule.newCourseId > 0 &&
+                  scope.row.courseSchedule.newCourseId ==
+                    scope.row.courseScheduleId
+                    ? "合并课"
+                    : null
+                }}
+                {{
+                  scope.row.courseSchedule.newCourseId > 0 &&
+                  scope.row.courseSchedule.newCourseId !=
+                    scope.row.courseScheduleId
+                    ? "被合并课"
+                    : null
+                }}
               </div>
             </template>
           </el-table-column>
           <el-table-column
-          width="180px"
+            width="180px"
             align="center"
             prop="startClassTime"
             label="上课时间"
           >
             <template slot-scope="scope">
               <div>
-                   {{ scope.row.courseSchedule.classDate | dayjsFormat }}
+                {{ scope.row.courseSchedule.classDate | dayjsFormat }}
                 {{
                   scope.row.courseSchedule.startClassTime | dayjsFormatMinute
                 }}-{{
@@ -285,7 +297,12 @@
           </el-table-column>
           <el-table-column align="center" label="考勤状态">
             <template slot-scope="scope">
-              <div v-if="scope.row.courseSchedule && scope.row.courseSchedule.status != 'NOT_START'">
+              <div
+                v-if="
+                  scope.row.courseSchedule &&
+                  scope.row.courseSchedule.status != 'NOT_START'
+                "
+              >
                 {{ scope.row.status | clockingIn }}
               </div>
             </template>
@@ -297,11 +314,26 @@
             v-if="permission(getFullPermission('visit/add'))"
           >
             <template slot-scope="scope">
-              <el-button
-                type="text"
-                v-if="permission(getFullPermission('visit/add'))"
-                @click="addVisit(scope.row)"
-              >新增回访</el-button>
+              <div>
+                <el-button
+                  type="text"
+                  v-if="
+                    permission(getFullPermission('visit/add')) &&
+                    !scope.row.visitFlag
+                  "
+                  @click="addVisit(scope.row)"
+                  >新增回访</el-button
+                >
+                <el-button
+                  type="text"
+                  @click="lookVisit(scope.row)"
+                  v-if="
+                    scope.row.visitFlag &&
+                    permission(getFullPermission('visit/queryPage'))
+                  "
+                  >查看回访</el-button
+                >
+              </div>
             </template>
           </el-table-column>
         </el-table>
@@ -314,7 +346,7 @@
           :page-sizes="rules.page_size"
           @pagination="getList"
         />
-            <el-dialog title="新增回访" width="500px" :visible.sync="visitVisible">
+        <el-dialog title="新增回访" width="500px" :visible.sync="visitVisible">
           <visit
             v-if="visitVisible && detail"
             :detail="detail"
@@ -335,14 +367,14 @@ import { getToken } from "@/utils/auth";
 import pagination from "@/components/Pagination/index";
 import load from "@/utils/loading";
 import { getTimes } from "@/utils";
-import qs from 'qs';
-import { permission } from '@/utils/directivePage'
+import qs from "qs";
+import { permission } from "@/utils/directivePage";
 import { findStudentAttendance } from "@/api/buildTeam";
-import { Export } from '@/utils/downLoadFile'
-import cleanDeep from 'clean-deep'
+import { Export } from "@/utils/downLoadFile";
+import cleanDeep from "clean-deep";
 // import { queryTeacherAttendances } from "@/api/recodeManager";
 import { courseType, courseListType, stuAttendance } from "@/utils/searchArray";
-import visit from '@/views/withdrawal-application/modals/visit'
+import visit from "@/views/withdrawal-application/modals/visit";
 export default {
   components: { pagination, visit },
   data() {
@@ -358,7 +390,7 @@ export default {
         teacherId: "",
         courseScheduleType: "",
         organId: "",
-        visitFlag: '',
+        visitFlag: "",
         dates: [],
       },
 
@@ -379,22 +411,22 @@ export default {
   },
   //生命周期 - 创建完成(可以访问当前this实例)
   created() {
-     const { query } = this.$route
-      if (this.searchForm.dates?.length < 1) {
-        const start = query.start || new Date()
-        const end = query.end || new Date()
-        this.searchForm.dates = [start, end]
+    const { query } = this.$route;
+    if (this.searchForm.dates?.length < 1) {
+      const start = query.start || new Date();
+      const end = query.end || new Date();
+      this.searchForm.dates = [start, end];
     }
   },
   //生命周期 - 挂载完成(可以访问DOM元素)
   mounted() {
-    const { query } = this.$route
+    const { query } = this.$route;
 
     if (query.visitFlag == 1 || query.visitFlag == 0) {
-      this.searchForm.visitFlag = String(query.visitFlag)
+      this.searchForm.visitFlag = String(query.visitFlag);
     }
     if (query.status) {
-      this.searchForm.status = query.status
+      this.searchForm.status = query.status;
     }
     this.init();
   },
@@ -410,33 +442,41 @@ export default {
       this.getList();
     },
     addVisit(row) {
-      this.visitVisible = true
-      this.detail = row
+      this.visitVisible = true;
+      this.detail = row;
     },
     // 导出
-    async onExport () {
+    async onExport() {
       const { dates, ...rest } = this.searchForm;
-      let obj =  {
+      let obj = {
         ...rest,
         page: this.rules.page,
         rows: this.rules.limit,
         ids: this.$route.query.ids,
-        ...getTimes(dates, ["classStartDate", "classEndDate"],  "YYYY-MM-DD"),
+        ...getTimes(dates, ["classStartDate", "classEndDate"], "YYYY-MM-DD"),
       };
-      await Export(this, {
-        url: '/api-web/export/exportStudentAttendances',
-        fileName: '考勤列表.xlsx',
-        method: 'post',
-        params: qs.stringify(cleanDeep(obj))
-      }, '您确定考勤列表?')
+      await Export(
+        this,
+        {
+          url: "/api-web/export/exportStudentAttendances",
+          fileName: "考勤列表.xlsx",
+          method: "post",
+          params: qs.stringify(cleanDeep(obj)),
+        },
+        "您确定考勤列表?"
+      );
     },
     getList() {
       const { dates, ...rest } = this.searchForm;
-      let obj =  {
+      let obj = {
         ...rest,
         page: this.rules.page,
         rows: this.rules.limit,
-        ...getTimes(dates, ["startDateOfCourse", "endDateOfCourse"],  "YYYY-MM-DD"),
+        ...getTimes(
+          dates,
+          ["startDateOfCourse", "endDateOfCourse"],
+          "YYYY-MM-DD"
+        ),
       };
 
       // let obj = {
@@ -459,26 +499,38 @@ export default {
       });
     },
     clearSearchUrl() {
-      const { query } = this.$route
-      if (query.status || (query.visitFlag == 0 || query.visitFlag == 1) || query.start || query.end) {
+      const { query } = this.$route;
+      if (
+        query.status ||
+        query.visitFlag == 0 ||
+        query.visitFlag == 1 ||
+        query.start ||
+        query.end
+      ) {
         this.$router.replace({
           status: undefined,
           visitFlag: undefined,
           start: undefined,
           end: undefined,
-        })
+        });
       }
     },
     search() {
       this.rules.page = 1;
-      this.clearSearchUrl()
+      this.clearSearchUrl();
       this.getList();
     },
     onReSet() {
       this.$refs["searchForm"].resetFields();
-      this.clearSearchUrl()
+      this.clearSearchUrl();
       this.search();
     },
+    lookVisit(row) {
+      this.$router.push({
+        path: "/studentManager/returnVisitList",
+        query: { search: row.id },
+      });
+    },
   },
 };
 </script>

+ 108 - 75
src/views/teamDetail/componentCourse/studentRollCall.vue

@@ -1,69 +1,68 @@
 <template>
   <div>
     <el-form :inline="true" class="workForm" style="padding: 0 25px">
-      <el-form-item label="学生总数" >
+      <el-form-item label="学生总数">
         <!-- <el-input disabled
                   :value="studentNum"></el-input> -->
-        <div class="inputStyle">{{studentNum}}</div>
+        <div class="inputStyle">{{ studentNum }}</div>
       </el-form-item>
       <el-form-item label="实际上课学生数">
         <!-- <el-input disabled
                   :value="signInNum"></el-input> -->
-        <div class="inputStyle">{{signInNum}}</div>
+        <div class="inputStyle">{{ signInNum }}</div>
       </el-form-item>
       <el-form-item label="请假学生数">
         <!-- <el-input disabled
                   :value="leaveNum"></el-input> -->
-        <div class="inputStyle">{{leaveNum}}</div>
+        <div class="inputStyle">{{ leaveNum }}</div>
       </el-form-item>
       <el-form-item label="旷课学生数">
         <!-- <el-input disabled
                   :value="leaveNum"></el-input> -->
-        <div class="inputStyle">{{truantNum}}</div>
+        <div class="inputStyle">{{ truantNum }}</div>
       </el-form-item>
     </el-form>
     <div class="tableWrap">
-      <el-table :data='tableList'
-                :header-cell-style="{background:'#EDEEF0',color:'#444'}">
-        <el-table-column align='center'
-                         prop="username"
-                         label="学生姓名">
+      <el-table
+        :data="tableList"
+        :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+      >
+        <el-table-column align="center" prop="username" label="学生姓名">
           <template slot-scope="scope">
             <div>
-              {{scope.row.username}}
-               <span >({{scope.row.userId}})</span>
-               <!-- style="color: #f56c6c" -->
+              {{ scope.row.username }}
+              <span>({{ scope.row.userId }})</span>
+              <!-- style="color: #f56c6c" -->
             </div>
           </template>
         </el-table-column>
-        <el-table-column align='center'
-                         prop="phone"
-                         label="手机号">
+        <el-table-column align="center" prop="phone" label="手机号">
         </el-table-column>
-        <el-table-column align='center'
-                         prop="signInTime"
-                         label="签到时间">
+        <el-table-column align="center" prop="signInTime" label="签到时间">
           <template slot-scope="scope">
             <div>
-              {{scope.row.signInTime | dateForMinFormat}}
+              {{ scope.row.signInTime | dateForMinFormat }}
             </div>
           </template>
         </el-table-column>
-        <el-table-column align='center'
-                         prop="signOutTime"
-                         label="签退时间">
+        <el-table-column align="center" prop="signOutTime" label="签退时间">
           <template slot-scope="scope">
             <div>
-              {{scope.row.signOutTime | dateForMinFormat}}
+              {{ scope.row.signOutTime | dateForMinFormat }}
             </div>
           </template>
         </el-table-column>
-        <el-table-column align='center'
-                         prop="status"
-                         label="考勤状态">
+        <el-table-column align="center" prop="status" label="考勤状态">
           <template slot-scope="scope">
-            <div v-if="scope.row.courseSchedule && scope.row.courseSchedule.status != 'NOT_START'">
-              <p v-if="scope.row.status">{{scope.row.status | studentRecord}}</p>
+            <div
+              v-if="
+                scope.row.courseSchedule &&
+                scope.row.courseSchedule.status != 'NOT_START'
+              "
+            >
+              <p v-if="scope.row.status" :class="scope.row.status == 'NORMAL'?'green':'red'">
+                {{ scope.row.status | studentRecord }}
+              </p>
               <p v-else>未签到</p>
             </div>
           </template>
@@ -73,24 +72,42 @@
             <div>{{ scope.row.visitFlag | yesOrNo }}</div>
           </template>
         </el-table-column>
-        <el-table-column align='center'
-                         prop="ctrls"
-                         v-if="permission('visit/add?page=teamCourseList')"
-                         label="操作">
+        <el-table-column
+          align="center"
+          prop="ctrls"
+          label="操作"
+        >
           <template slot-scope="scope">
-            <el-button
-              type="text"
-              @click="addVisit(scope.row)"
-            >新增回访</el-button>
+            <div>
+              <el-button
+                type="text"
+                @click="addVisit(scope.row)"
+                v-if="!scope.row.visitFlag&&permission('visit/add?page=teamCourseList')"
+                >新增回访</el-button
+              >
+                <el-button
+                type="text"
+                @click="lookVisit(scope.row)"
+                v-if="(scope.row.visitFlag)&&permission('visit/queryPage?page=teamCourseList')"
+                >查看回访</el-button
+              >
+            </div>
           </template>
         </el-table-column>
       </el-table>
-      <pagination :total="rules.total"
-                  :page.sync="rules.page"
-                  :limit.sync="rules.limit"
-                  @pagination="getList" />
+      <pagination
+        :total="rules.total"
+        :page.sync="rules.page"
+        :limit.sync="rules.limit"
+        @pagination="getList"
+      />
     </div>
-    <el-dialog title="新增回访" width="500px" :visible.sync="visitVisible" append-to-body>
+    <el-dialog
+      title="新增回访"
+      width="500px"
+      :visible.sync="visitVisible"
+      append-to-body
+    >
       <visit
         v-if="visitVisible && detail"
         :detail="detail"
@@ -103,14 +120,14 @@
   </div>
 </template>
 <script>
-import { findStudentAttendance, sumStudentAttendance } from '@/api/buildTeam'
-import pagination from '@/components/Pagination/index'
-import { permission } from '@/utils/directivePage'
-import visit from '@/views/withdrawal-application/modals/visit'
+import { findStudentAttendance, sumStudentAttendance } from "@/api/buildTeam";
+import pagination from "@/components/Pagination/index";
+import { permission } from "@/utils/directivePage";
+import visit from "@/views/withdrawal-application/modals/visit";
 export default {
-  props: ['courseScheduleId','isMainGo'],
+  props: ["courseScheduleId", "isMainGo"],
   components: { pagination, visit },
-  data () {
+  data() {
     return {
       tableList: [],
       visitVisible: false,
@@ -124,48 +141,54 @@ export default {
       studentNum: null,
       signInNum: null,
       leaveNum: null,
-      truantNum: null
-    }
+      truantNum: null,
+    };
   },
-  mounted () {
-    this.init()
+  mounted() {
+    this.init();
   },
-  activated () {
-    this.init()
+  activated() {
+    this.init();
   },
   methods: {
     permission,
-    init () {
-      console.log(this.courseScheduleId)
-      this.getList()
+    init() {
+      console.log(this.courseScheduleId);
+      this.getList();
 
       //  发请求获取学生签到信息
     },
     addVisit(row) {
-      this.visitVisible = true
-      this.detail = row
+      this.visitVisible = true;
+      this.detail = row;
+    },
+    lookVisit(row){
+      this.$router.push({path:'/studentManager/returnVisitList',query:{search:row.id}})
     },
-    getList () {
+    getList() {
       findStudentAttendance({
-        search: this.courseScheduleId, rows: this.rules.limit,
+        search: this.courseScheduleId,
+        rows: this.rules.limit,
         page: this.rules.page,
-      }).then(res => {
+      }).then((res) => {
         if (res.code == 200) {
           this.tableList = res.data.rows;
-          this.rules.total = res.data.total
+          this.rules.total = res.data.total;
         }
-      })
-      sumStudentAttendance({ courseScheduleId: this.courseScheduleId }).then(res => {
-        if (res.code == 200) {
-          this.studentNum = res.data.studentNum;
-          this.signInNum = res.data.signInNum;
-          this.leaveNum = res.data.leaveNum
-          this.truantNum = res.data.truantNum
+      });
+      sumStudentAttendance({ courseScheduleId: this.courseScheduleId }).then(
+        (res) => {
+          if (res.code == 200) {
+            this.studentNum = res.data.studentNum;
+            this.signInNum = res.data.signInNum;
+            this.leaveNum = res.data.leaveNum;
+            this.truantNum = res.data.truantNum;
+          }
         }
-      })
-    }
-  }
-}
+      );
+    },
+  },
+};
 </script>
 <style lang="scss" scoped>
 .inputStyle {
@@ -173,8 +196,18 @@ export default {
   text-align: center;
 }
 .workForm {
-    /deep/.el-form-item {
+  /deep/.el-form-item {
     margin-bottom: 10px !important;
   }
 }
+.red {
+  color: red;
+}
+.green {
+  color: #14928a;
+}
+.orgin {
+  color: #E6A23C;
+}
 </style>
+

+ 120 - 54
src/views/teamDetail/componentCourse/teacherList.vue

@@ -12,66 +12,97 @@
       >
         <template slot-scope="scope">
           <div>
-            <span>{{scope.row.teacherName}}</span><br/>
-             <span>(<copy-text>{{scope.row.teacherId}}</copy-text>)</span><!-- style="color: #f56c6c"-->
+            <span
+              >{{ scope.row.teacherName }}-{{
+                scope.row.teacherRole | workType
+              }}</span
+            ><br />
+            <span
+              >(<copy-text>{{ scope.row.teacherId }}</copy-text
+              >)</span
+            ><!-- style="color: #f56c6c"-->
           </div>
         </template>
       </el-table-column>
-      <el-table-column align="center" prop="teacherRole" label="老师类型">
+      <!-- <el-table-column align="center" prop="teacherRole" label="老师类型">
         <template slot-scope="scope">
           <div>
-            {{ scope.row.teacherRole | workType }}
+
           </div>
         </template>
-      </el-table-column>
-      <el-table-column align="center" prop="teacherPhone" label="签到时间">
+      </el-table-column> -->
+      <el-table-column
+        align="center"
+        prop="teacherPhone"
+        label="签到签退"
+        width="200px"
+      >
         <template slot-scope="scope">
           <div>
             {{ scope.row.signInTime | dayjsFormatMinute }}
+            (<span :class="scope.row.signInStatus == 1 ? 'green' : 'red'">{{
+              scope.row.signInStatus | attendanceType
+            }}</span
+            >) -
+            {{ scope.row.signOutTime | dayjsFormatMinute }}
+            (<span :class="scope.row.signOutStatus == 1 ? 'green' : 'red'">{{
+              scope.row.signOutStatus | attendanceOutType
+            }}</span
+            >)
           </div>
         </template>
       </el-table-column>
-      <el-table-column align="center" prop="teacherPhone" label="签退时间">
+      <!-- <el-table-column align="center" prop="teacherPhone" label="签退时间">
         <template slot-scope="scope">
           <div>
-            {{ scope.row.signOutTime | dayjsFormatMinute }}
+
           </div>
         </template>
-      </el-table-column>
-      <el-table-column align="center" prop="teacherPhone" label="签到状态">
+      </el-table-column> -->
+      <!-- <el-table-column align="center" prop="teacherPhone" label="考勤状态">
         <template slot-scope="scope">
-          <div v-if="courseStatus != 'NOT_START'">{{ scope.row.signInStatus | attendanceType}}</div>
+          <div v-if="courseStatus != 'NOT_START'">
+            {{ scope.row.signInStatus | attendanceType }} <br />
+            {{ scope.row.signOutStatus | attendanceOutType }}
+          </div>
         </template>
-      </el-table-column>
-      <el-table-column align="center" prop="teacherPhone" label="签退状态">
+      </el-table-column> -->
+      <!-- <el-table-column align="center" prop="teacherPhone" label="签退状态">
         <template slot-scope="scope">
           <div v-if="courseStatus != 'NOT_START'">{{ scope.row.signOutStatus | attendanceOutType}}</div>
         </template>
-      </el-table-column>
+      </el-table-column> -->
+
       <el-table-column
         align="center"
-        prop="signOutAttachments"
-        label="签退照片"
+        prop="complaintsTime"
+        width="160"
+        label="申诉状态/时间"
       >
         <template slot-scope="scope">
-          <el-image
-            v-if="
-              scope.row.teacherAttendance &&
-              scope.row.teacherAttendance.signOutAttachments
-            "
-            style="width: 60px; height: 60px"
-            fit="cover"
-            :src="scope.row.teacherAttendance.signOutAttachments"
-            :previewSrcList="[scope.row.teacherAttendance.signOutAttachments]"
-          >
-          </el-image>
+          <div>
+            <p>
+              <span :class="complaintscolor(scope.row.teacherAttendance.complaintsStatus)">
+                {{
+                  scope.row.teacherAttendance.complaintsStatus
+                    | complaintsStatusEnum
+                }}
+              </span>
+            </p>
+            <p>
+              {{
+                scope.row.teacherAttendance &&
+                scope.row.teacherAttendance.complaintsTime
+              }}
+            </p>
+          </div>
         </template>
       </el-table-column>
       <el-table-column
         align="center"
         prop="complaintsContent"
         width="120"
-        label="考勤申诉内容"
+        label="申诉内容"
       >
         <template slot-scope="scope">
           <div v-if="scope.row.teacherAttendance">
@@ -84,26 +115,11 @@
           </div>
         </template>
       </el-table-column>
-      <el-table-column
-        align="center"
-        prop="complaintsTime"
-        width="160"
-        label="考勤申诉时间"
-      >
-        <template slot-scope="scope">
-          <div>
-            {{
-              scope.row.teacherAttendance &&
-              scope.row.teacherAttendance.complaintsTime
-            }}
-          </div>
-        </template>
-      </el-table-column>
-      <el-table-column
+      <!-- <el-table-column
         align="center"
         prop="complaintsStatus"
-        width="140"
-        label="考勤申诉状态"
+        width="120"
+        label="申诉状态"
       >
         <template slot-scope="scope">
           <div v-if="scope.row.teacherAttendance">
@@ -113,7 +129,7 @@
             }}
           </div>
         </template>
-      </el-table-column>
+      </el-table-column> -->
       <el-table-column align="center" prop="disposeContent" label="处理意见">
         <template slot-scope="scope">
           <overflow-text
@@ -125,6 +141,25 @@
           ></overflow-text>
         </template>
       </el-table-column>
+      <el-table-column
+        align="center"
+        prop="signOutAttachments"
+        label="签退照片"
+      >
+        <template slot-scope="scope">
+          <el-image
+            v-if="
+              scope.row.teacherAttendance &&
+              scope.row.teacherAttendance.signOutAttachments
+            "
+            style="width: 60px; height: 60px"
+            fit="cover"
+            :src="scope.row.teacherAttendance.signOutAttachments.split(',')[0]"
+            :previewSrcList="scope.row.teacherAttendance.signOutAttachments.split(',')"
+          >
+          </el-image>
+        </template>
+      </el-table-column>
       <el-table-column align="center" width="200px" fixed="right" label="操作">
         <template slot-scope="scope">
           <div>
@@ -157,8 +192,13 @@
                 size="small"
                 type="text"
                 @click="hand(scope.row)"
-                v-if="(scope.row.signInStatus!=1||scope.row.signOutStatus!=1) && courseStatus != 'NOT_START'"
-              >处理意见</el-button>
+                v-if="
+                  (scope.row.signInStatus != 1 ||
+                    scope.row.signOutStatus != 1) &&
+                  courseStatus != 'NOT_START'
+                "
+                >处理意见</el-button
+              >
             </auth>
           </div>
         </template>
@@ -261,8 +301,8 @@ import gpsLoction from "../componentCourse/gpsLocation";
 import hand from "@/views/recodeManager/modals/hand";
 export default {
   components: { gpsLoction, hand },
-  props: ['courseScheduleId', 'teachMode', 'courseStatus'],
-  data () {
+  props: ["courseScheduleId", "teachMode", "courseStatus"],
+  data() {
     return {
       tableList: [],
       gpsVisible: false,
@@ -289,8 +329,8 @@ export default {
       },
     };
   },
-  mounted () {
-    this.init()
+  mounted() {
+    this.init();
     // console.log(this.teachMode, this.courseStatus)
   },
   activated() {},
@@ -312,8 +352,8 @@ export default {
       this.gpsVisible = true;
     },
     hand(row) {
-      this.handVisible = true;
       this.detail = row;
+      this.handVisible = true;
     },
     mackAttendance(row) {
       this.$confirm("确定补考勤", "提示", {
@@ -363,6 +403,21 @@ export default {
       this.innerVisible = true;
       this.activeTeacher = row;
     },
+    complaintscolor(status){
+      /**
+       *    0: "已拒绝",
+    1: "已通过",
+    2: "待处理",
+    3: "已撤销",
+       */
+      if(status==0 || status==2 ){
+        return 'red'
+      }else if(status==1){
+         return 'green'
+      } else{
+        return ''
+      }
+    },
     resetSalary() {
       let that = this;
       this.$refs["teacherMask"].validate((res) => {
@@ -393,3 +448,14 @@ export default {
   },
 };
 </script>
+<style lang="scss" scoped>
+.red {
+  color: red;
+}
+.green {
+  color: #14928a;
+}
+.orgin {
+  color: #E6A23C;
+}
+</style>

+ 5 - 2
src/views/teamDetail/teamCourseList.vue

@@ -523,7 +523,7 @@
         <el-form-item label="学员考勤" v-if="maskForm.status != 'NOT_START'">
           <div
             class="inputStyle"
-            :class="maskForm.errorAttendanceNum != 0 ? 'red' : null"
+            :class="maskForm.errorAttendanceNum != 0 ? 'red' : 'green'"
           >
             {{ maskForm.errorAttendanceNum != 0 ? "异常" : "正常" }}
           </div>
@@ -533,7 +533,7 @@
             class="inputStyle"
             :class="
               maskForm.signInStatusEnum == 1 && maskForm.signOutStatusEnum == 1
-                ? null
+                ? 'green'
                 : 'red'
             "
           >
@@ -1411,6 +1411,9 @@ export default {
 .red {
   color: red;
 }
+.green {
+  color: #14928A;
+}
 
 .exportBtn {
   background: #13817a;

部分文件因文件數量過多而無法顯示