Bläddra i källkod

Merge branch '04/25optimize' into main_master

mo 4 år sedan
förälder
incheckning
a561171915

+ 16 - 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,10 @@ export default {
     if(query.result) {
       this.searchForm.eduTeacherId = Number(query.result)
     }
+    if(query.noPaymentType){
+
+        this.searchForm.noPaymentType = Number(query.noPaymentType)
+    }
     getCooperation({ rows: 1000 }).then((res) => {
       this.cooperations = res.data.rows
     })

+ 1 - 1
src/views/buildVip/index.vue

@@ -1532,7 +1532,7 @@ export default {
           if (res.code == 200) {
             if (res.data == "ING") {
               this.$confirm(
-                "课程提交成功,已提交运营主管审批,审批通过后,课程创建成功!",
+                "课程提交成功,已提交运营主管审批,审批通过后,课程创建成功!",
                 "提示",
                 {
                   confirmButtonText: "确定",

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

+ 11 - 1
src/views/teamDetail/componentCourse/studentRollCall.vue

@@ -60,7 +60,7 @@
                 scope.row.courseSchedule.status != 'NOT_START'
               "
             >
-              <p v-if="scope.row.status">
+              <p v-if="scope.row.status" :class="scope.row.status == 'NORMAL'?'green':'red'">
                 {{ scope.row.status | studentRecord }}
               </p>
               <p v-else>未签到</p>
@@ -200,4 +200,14 @@ export default {
     margin-bottom: 10px !important;
   }
 }
+.red {
+  color: red;
+}
+.green {
+  color: #14928a;
+}
+.orgin {
+  color: #E6A23C;
+}
 </style>
+

+ 2 - 2
vue.config.js

@@ -20,8 +20,8 @@ const name = defaultSettings.title || '管乐迷后台管理系统' // page titl
 // let target = 'http://192.168.3.139:8000' // 箭河
 // let target = 'http://192.168.3.38:8000' //邹璇
 // let target = 'http://192.168.3.57:8000' //勇哥
-// let target = 'http://dev.dayaedu.com' // 开发环境
-let target = 'https://test.dayaedu.com' //测试环境
+let target = 'http://dev.dayaedu.com' // 开发环境
+// let target = 'https://test.dayaedu.com' //测试环境
 // let target = 'http://192.168.3.134' // 乔
 // All configuration item explanations can be find in https://cli.vuejs.org/config/
 module.exports = {