Browse Source

Merge branch '07/06musicArchives' into test

mo 3 years ago
parent
commit
f691f5fd64

+ 95 - 71
src/store/modules/permission.js

@@ -1,8 +1,15 @@
-import { asyncRoutes, constantRoutes } from '@/router'
-import router  from '@/router'
-import { getSilder } from '@/api/silder'
+import {
+  asyncRoutes,
+  constantRoutes
+} from '@/router'
+import router from '@/router'
+import {
+  getSilder
+} from '@/api/silder'
 import store from "@/store";
 import store from "@/store";
-import { Message } from 'element-ui'
+import {
+  Message
+} from 'element-ui'
 // import { stat } from 'fs'
 // import { stat } from 'fs'
 // import { removeToken } from '@/utils/auth'
 // import { removeToken } from '@/utils/auth'
 // import Layout from '@/layout'
 // import Layout from '@/layout'
@@ -65,16 +72,16 @@ function pathErgodic(item) {
   // console.log(item)
   // console.log(item)
   let firstMenu = null
   let firstMenu = null
   item.children.forEach(i => {
   item.children.forEach(i => {
-    if (!firstMenu && i.children?.length > 0&&!i.hidden) {
+    if (!firstMenu && i.children?.length > 0 && !i.hidden) {
       let isChildrenList = false;
       let isChildrenList = false;
-      i.children.forEach(ii=>{
-        if(!ii.hidden){
+      i.children.forEach(ii => {
+        if (!ii.hidden) {
           isChildrenList = true
           isChildrenList = true
         }
         }
       })
       })
-      if(isChildrenList){
+      if (isChildrenList) {
         firstMenu = pathErgodic(i)
         firstMenu = pathErgodic(i)
-      }else{
+      } else {
         if (!firstMenu && checkPathUrl(i.path)) {
         if (!firstMenu && checkPathUrl(i.path)) {
           firstMenu = i.path
           firstMenu = i.path
         } else {
         } else {
@@ -123,7 +130,14 @@ function recursionRouter(arr) {
       arr[i].hid == 0 ? obj.hidden = false : obj.hidden = true
       arr[i].hid == 0 ? obj.hidden = false : obj.hidden = true
       // console.log('高亮标签'+arr[i].parentPermission,'普通路径'+arr[i].path)
       // console.log('高亮标签'+arr[i].parentPermission,'普通路径'+arr[i].path)
       obj.path = arr[i].path;
       obj.path = arr[i].path;
-      obj.meta = { 'title': arr[i].name, 'icon': arr[i].icon, 'noCache': arr[i].keepAlive, 'activeMenu': arr[i].parentPermission, 'belongTopMenu': arr[i].belongTopMenu,'id':arr[i].id }
+      obj.meta = {
+        'title': arr[i].name,
+        'icon': arr[i].icon,
+        'noCache': arr[i].keepAlive,
+        'activeMenu': arr[i].parentPermission,
+        'belongTopMenu': arr[i].belongTopMenu,
+        'id': arr[i].id
+      }
       if (arr[i].sysMenus && arr[i].sysMenus.length > 0) {
       if (arr[i].sysMenus && arr[i].sysMenus.length > 0) {
         obj.children = recursionRouter(arr[i].sysMenus);
         obj.children = recursionRouter(arr[i].sysMenus);
       }
       }
@@ -172,6 +186,7 @@ function setTopMenu(arr, topParentArr) {
 // 权限
 // 权限
 // 递归遍历数组
 // 递归遍历数组
 let tempArr = []
 let tempArr = []
+
 function recursionPermission(arr) {
 function recursionPermission(arr) {
   arr.map(item => {
   arr.map(item => {
     tempArr.push(item.memo)
     tempArr.push(item.memo)
@@ -180,13 +195,13 @@ function recursionPermission(arr) {
     }
     }
   })
   })
 }
 }
+
 function setDetailRoute(accessedRoutes) {
 function setDetailRoute(accessedRoutes) {
   // console.log(accessedRoutes)
   // console.log(accessedRoutes)
   accessedRoutes.forEach(route => {
   accessedRoutes.forEach(route => {
     // console.log(route.path)
     // console.log(route.path)
     if (route.path == '/main') {
     if (route.path == '/main') {
-      route.children = route.children.concat([
-        {
+      route.children = route.children.concat([{
           name: '日程安排',
           name: '日程安排',
           path: 'scheduleDetail',
           path: 'scheduleDetail',
           component: () => import('@/views/main/teamSchedule/scheduleDetail'),
           component: () => import('@/views/main/teamSchedule/scheduleDetail'),
@@ -196,7 +211,7 @@ function setDetailRoute(accessedRoutes) {
             title: '日程安排',
             title: '日程安排',
             belongTopMenu: "/main",
             belongTopMenu: "/main",
             activeMenu: '/main/main',
             activeMenu: '/main/main',
-            id:'xx1'
+            id: 'xx1'
           }
           }
         },
         },
         {
         {
@@ -209,7 +224,7 @@ function setDetailRoute(accessedRoutes) {
             title: '未在班级学员',
             title: '未在班级学员',
             belongTopMenu: "/main",
             belongTopMenu: "/main",
             activeMenu: '/main/main',
             activeMenu: '/main/main',
-            id:'xx2'
+            id: 'xx2'
           }
           }
         },
         },
         {
         {
@@ -248,13 +263,24 @@ function setDetailRoute(accessedRoutes) {
             activeMenu: '/main/main'
             activeMenu: '/main/main'
           }
           }
         },
         },
+        {
+          name: 'organDateDetail',
+          path: 'organDateDetail',
+          component: () => import('@/views/main/cloudDate/organDateDetail'),
+          hidden: true,
+          meta: {
+            noCache: '1',
+            title: '分部云教练数据详情',
+            belongTopMenu: "/main",
+            activeMenu: '/main/main'
+          }
+        },
         //
         //
       ])
       ])
     }
     }
     if (route.path == '/business') {
     if (route.path == '/business') {
       // import('@/views/resetTeaming/components/strudentPayInfo'),
       // import('@/views/resetTeaming/components/strudentPayInfo'),
-      route.children = route.children.concat([
-        {
+      route.children = route.children.concat([{
           name: '学员缴费详情',
           name: '学员缴费详情',
           path: 'strudentPayInfo',
           path: 'strudentPayInfo',
           component: () => import('@/views/resetTeaming/components/strudentPayInfo'),
           component: () => import('@/views/resetTeaming/components/strudentPayInfo'),
@@ -264,7 +290,7 @@ function setDetailRoute(accessedRoutes) {
             title: '学员缴费详情',
             title: '学员缴费详情',
             belongTopMenu: "/business",
             belongTopMenu: "/business",
             activeMenu: '/teamList',
             activeMenu: '/teamList',
-            id:'xx3'
+            id: 'xx3'
           }
           }
         },
         },
         {
         {
@@ -277,7 +303,7 @@ function setDetailRoute(accessedRoutes) {
             title: '乐团详情',
             title: '乐团详情',
             belongTopMenu: "/business",
             belongTopMenu: "/business",
             activeMenu: '/teamList',
             activeMenu: '/teamList',
-            id:'xx4'
+            id: 'xx4'
           }
           }
         },
         },
         {
         {
@@ -290,7 +316,7 @@ function setDetailRoute(accessedRoutes) {
             title: '乐团档案',
             title: '乐团档案',
             belongTopMenu: "/business",
             belongTopMenu: "/business",
             activeMenu: '/teamList',
             activeMenu: '/teamList',
-            id:'xx4'
+            id: 'xx4'
           }
           }
         },
         },
         //musicArchices
         //musicArchices
@@ -304,7 +330,7 @@ function setDetailRoute(accessedRoutes) {
             title: '会员排课列表',
             title: '会员排课列表',
             belongTopMenu: "/business",
             belongTopMenu: "/business",
             activeMenu: '/teamList',
             activeMenu: '/teamList',
-            id:'xx28'
+            id: 'xx28'
           }
           }
         },
         },
         {
         {
@@ -317,7 +343,7 @@ function setDetailRoute(accessedRoutes) {
             title: '相册详情',
             title: '相册详情',
             belongTopMenu: "/business",
             belongTopMenu: "/business",
             activeMenu: '/teamList',
             activeMenu: '/teamList',
-            id:'xxx28'
+            id: 'xxx28'
           }
           }
         },
         },
         // 相册详情
         // 相册详情
@@ -331,7 +357,7 @@ function setDetailRoute(accessedRoutes) {
             title: '全部证书',
             title: '全部证书',
             belongTopMenu: "/business",
             belongTopMenu: "/business",
             activeMenu: '/teamList',
             activeMenu: '/teamList',
-            id:'xxx28'
+            id: 'xxx28'
           }
           }
         },
         },
         // 全部证书
         // 全部证书
@@ -345,7 +371,7 @@ function setDetailRoute(accessedRoutes) {
             title: 'VIP/乐理课申请',
             title: 'VIP/乐理课申请',
             belongTopMenu: "/business",
             belongTopMenu: "/business",
             activeMenu: '/vipManager/vipList',
             activeMenu: '/vipManager/vipList',
-            id:'xx5'
+            id: 'xx5'
           }
           }
         },
         },
         {
         {
@@ -358,7 +384,7 @@ function setDetailRoute(accessedRoutes) {
             title: 'VIP/乐理课修改',
             title: 'VIP/乐理课修改',
             belongTopMenu: "/business",
             belongTopMenu: "/business",
             activeMenu: '/vipManager/vipList',
             activeMenu: '/vipManager/vipList',
-            id:'xx6'
+            id: 'xx6'
           }
           }
         },
         },
         {
         {
@@ -371,7 +397,7 @@ function setDetailRoute(accessedRoutes) {
             title: 'vip详情',
             title: 'vip详情',
             belongTopMenu: "/business",
             belongTopMenu: "/business",
             activeMenu: '/vipManager/vipList',
             activeMenu: '/vipManager/vipList',
-            id:'xx7'
+            id: 'xx7'
           }
           }
         },
         },
         {
         {
@@ -384,7 +410,7 @@ function setDetailRoute(accessedRoutes) {
             title: '网管课详情',
             title: '网管课详情',
             belongTopMenu: "/business",
             belongTopMenu: "/business",
             activeMenu: '/accompanyManager/accompany',
             activeMenu: '/accompanyManager/accompany',
-            id:'xx8'
+            id: 'xx8'
           }
           }
         },
         },
         {
         {
@@ -397,7 +423,7 @@ function setDetailRoute(accessedRoutes) {
             title: '评价详情',
             title: '评价详情',
             belongTopMenu: "/business",
             belongTopMenu: "/business",
             activeMenu: '/commentManager',
             activeMenu: '/commentManager',
-            id:'xx9'
+            id: 'xx9'
           }
           }
         },
         },
         {
         {
@@ -410,7 +436,7 @@ function setDetailRoute(accessedRoutes) {
             title: 'VIP/乐理课详情',
             title: 'VIP/乐理课详情',
             belongTopMenu: "/business",
             belongTopMenu: "/business",
             activeMenu: '/afterSchoolManager',
             activeMenu: '/afterSchoolManager',
-            id:'xx10'
+            id: 'xx10'
           }
           }
         },
         },
         {
         {
@@ -423,7 +449,7 @@ function setDetailRoute(accessedRoutes) {
             title: '学员详情',
             title: '学员详情',
             belongTopMenu: "/business",
             belongTopMenu: "/business",
             activeMenu: '/studentManager/studentList',
             activeMenu: '/studentManager/studentList',
-            id:'xx11'
+            id: 'xx11'
           }
           }
         },
         },
         {
         {
@@ -436,7 +462,7 @@ function setDetailRoute(accessedRoutes) {
             title: '老师详情',
             title: '老师详情',
             belongTopMenu: "/business",
             belongTopMenu: "/business",
             activeMenu: '/teacherManager/teacherList',
             activeMenu: '/teacherManager/teacherList',
-            id:'xx12'
+            id: 'xx12'
           }
           }
         },
         },
         {
         {
@@ -449,7 +475,7 @@ function setDetailRoute(accessedRoutes) {
             title: '老师修改',
             title: '老师修改',
             belongTopMenu: "/business",
             belongTopMenu: "/business",
             activeMenu: '/teacherManager/teacherList',
             activeMenu: '/teacherManager/teacherList',
-            id:'xx13'
+            id: 'xx13'
           }
           }
         },
         },
         {
         {
@@ -462,7 +488,7 @@ function setDetailRoute(accessedRoutes) {
             title: '问答详情',
             title: '问答详情',
             belongTopMenu: "/business",
             belongTopMenu: "/business",
             activeMenu: '/otherManager/reaplceMusicPlayer',
             activeMenu: '/otherManager/reaplceMusicPlayer',
-            id:'xx4'
+            id: 'xx4'
           }
           }
         },
         },
         {
         {
@@ -482,8 +508,7 @@ function setDetailRoute(accessedRoutes) {
       ])
       ])
     }
     }
     if (route.path == '/operateManager') {
     if (route.path == '/operateManager') {
-      route.children = route.children.concat([
-        {
+      route.children = route.children.concat([{
           name: '服务指标(详情)',
           name: '服务指标(详情)',
           path: 'serverIndexDetail',
           path: 'serverIndexDetail',
           component: () => import('@/views/operateManager/serverIndexDetail'),
           component: () => import('@/views/operateManager/serverIndexDetail'),
@@ -493,7 +518,7 @@ function setDetailRoute(accessedRoutes) {
             title: '服务指标(详情)',
             title: '服务指标(详情)',
             belongTopMenu: "/operateManager",
             belongTopMenu: "/operateManager",
             activeMenu: '/serverIndexManager/serverIndexList',
             activeMenu: '/serverIndexManager/serverIndexList',
-            id:'xx15'
+            id: 'xx15'
           }
           }
         },
         },
         {
         {
@@ -506,7 +531,7 @@ function setDetailRoute(accessedRoutes) {
             title: '新建活动方案',
             title: '新建活动方案',
             belongTopMenu: "/operateManager",
             belongTopMenu: "/operateManager",
             activeMenu: '/vipActiveManager/vipActiveList',
             activeMenu: '/vipActiveManager/vipActiveList',
-            id:'xx16'
+            id: 'xx16'
           }
           }
         },
         },
         {
         {
@@ -519,7 +544,7 @@ function setDetailRoute(accessedRoutes) {
             title: '添加分部活动',
             title: '添加分部活动',
             belongTopMenu: "/operateManager",
             belongTopMenu: "/operateManager",
             activeMenu: '/branchActiveManager/branchActive',
             activeMenu: '/branchActiveManager/branchActive',
-            id:'xx17'
+            id: 'xx17'
           }
           }
         },
         },
         {
         {
@@ -532,7 +557,7 @@ function setDetailRoute(accessedRoutes) {
             title: '修改分部活动',
             title: '修改分部活动',
             belongTopMenu: "/operateManager",
             belongTopMenu: "/operateManager",
             activeMenu: '/branchActiveManager/branchActive',
             activeMenu: '/branchActiveManager/branchActive',
-            id:'xx18'
+            id: 'xx18'
           }
           }
         },
         },
         {
         {
@@ -545,32 +570,29 @@ function setDetailRoute(accessedRoutes) {
             title: '添加问卷',
             title: '添加问卷',
             belongTopMenu: "/operateManager",
             belongTopMenu: "/operateManager",
             activeMenu: '/operateManager/setQuestions',
             activeMenu: '/operateManager/setQuestions',
-            id:'xx19'
+            id: 'xx19'
           }
           }
         },
         },
         // /operateManager/setQuestions /questionOperation   operateManager
         // /operateManager/setQuestions /questionOperation   operateManager
       ])
       ])
     }
     }
     if (route.path == '/financialManager') {
     if (route.path == '/financialManager') {
-      route.children = route.children.concat([
-        {
-          name: '经营报表详情',
-          path: 'businessStatementDetail',
-          component: () => import('@/views/businessManager/orderManager/businessStatementDetail'),
-          hidden: true,
-          meta: {
-            noCache: '1',
-            title: '经营报表详情',
-            belongTopMenu: "/financialManager",
-            activeMenu: '/businessStatement',
-            id:'xx20'
-          }
-        },
-      ])
+      route.children = route.children.concat([{
+        name: '经营报表详情',
+        path: 'businessStatementDetail',
+        component: () => import('@/views/businessManager/orderManager/businessStatementDetail'),
+        hidden: true,
+        meta: {
+          noCache: '1',
+          title: '经营报表详情',
+          belongTopMenu: "/financialManager",
+          activeMenu: '/businessStatement',
+          id: 'xx20'
+        }
+      }, ])
     }
     }
     if (route.path == '/contentManager') {
     if (route.path == '/contentManager') {
-      route.children = route.children.concat([
-        {
+      route.children = route.children.concat([{
           name: '经营报表详情',
           name: '经营报表详情',
           path: 'helpCategory',
           path: 'helpCategory',
           component: () => import('@/views/helpCenter/helpCategory'),
           component: () => import('@/views/helpCenter/helpCategory'),
@@ -580,7 +602,7 @@ function setDetailRoute(accessedRoutes) {
             title: '经营报表详情',
             title: '经营报表详情',
             belongTopMenu: "/contentManager",
             belongTopMenu: "/contentManager",
             activeMenu: '/contentManager/helpContent',
             activeMenu: '/contentManager/helpContent',
-            id:'xx21'
+            id: 'xx21'
           }
           }
         },
         },
         {
         {
@@ -593,14 +615,13 @@ function setDetailRoute(accessedRoutes) {
             title: '添加&修改内容管理',
             title: '添加&修改内容管理',
             belongTopMenu: "/contentManager",
             belongTopMenu: "/contentManager",
             activeMenu: '/contentManager/contentManager',
             activeMenu: '/contentManager/contentManager',
-            id:'xx22'
+            id: 'xx22'
           }
           }
         },
         },
       ])
       ])
     }
     }
     if (route.path == '/shopManager') {
     if (route.path == '/shopManager') {
-      route.children = route.children.concat([
-        {
+      route.children = route.children.concat([{
           name: '进货清单',
           name: '进货清单',
           path: 'purchaseLlist',
           path: 'purchaseLlist',
           component: () => import('@/views/businessManager/shopManager/purchase-llist'),
           component: () => import('@/views/businessManager/shopManager/purchase-llist'),
@@ -610,7 +631,7 @@ function setDetailRoute(accessedRoutes) {
             title: '进货清单',
             title: '进货清单',
             belongTopMenu: "/shopManager",
             belongTopMenu: "/shopManager",
             activeMenu: '/shopList',
             activeMenu: '/shopList',
-            id:'xx23'
+            id: 'xx23'
           }
           }
         },
         },
         {
         {
@@ -623,14 +644,13 @@ function setDetailRoute(accessedRoutes) {
             title: '添加修改商品',
             title: '添加修改商品',
             belongTopMenu: "/shopManager",
             belongTopMenu: "/shopManager",
             activeMenu: '/shopList',
             activeMenu: '/shopList',
-            id:'xx24'
+            id: 'xx24'
           }
           }
         },
         },
       ])
       ])
     }
     }
-    if(route.path == '/systemManager'){
-      route.children = route.children.concat([
-        {
+    if (route.path == '/systemManager') {
+      route.children = route.children.concat([{
           name: '创建&修改汇付账号',
           name: '创建&修改汇付账号',
           path: 'adapayOperation',
           path: 'adapayOperation',
           component: () => import('@/views/adapayAccount/form'),
           component: () => import('@/views/adapayAccount/form'),
@@ -640,7 +660,7 @@ function setDetailRoute(accessedRoutes) {
             title: '创建&修改汇付账号',
             title: '创建&修改汇付账号',
             belongTopMenu: "/systemManager",
             belongTopMenu: "/systemManager",
             activeMenu: '/sysBasics/adapayManager',
             activeMenu: '/sysBasics/adapayManager',
-            id:'xx25'
+            id: 'xx25'
           }
           }
         },
         },
         {
         {
@@ -653,7 +673,7 @@ function setDetailRoute(accessedRoutes) {
             title: '添加&查看时间充值活动',
             title: '添加&查看时间充值活动',
             belongTopMenu: "/systemManager",
             belongTopMenu: "/systemManager",
             activeMenu: '/sysBasics/entryActivities',
             activeMenu: '/sysBasics/entryActivities',
-            id:'xx26'
+            id: 'xx26'
           }
           }
         },
         },
         {
         {
@@ -666,7 +686,7 @@ function setDetailRoute(accessedRoutes) {
             title: '添加&修改系统权限',
             title: '添加&修改系统权限',
             belongTopMenu: "/systemManager",
             belongTopMenu: "/systemManager",
             activeMenu: '/parameter/adminManager',
             activeMenu: '/parameter/adminManager',
-            id:'xx27'
+            id: 'xx27'
           }
           }
         },
         },
         // /parameter/adminManager adminOperation
         // /parameter/adminManager adminOperation
@@ -676,13 +696,15 @@ function setDetailRoute(accessedRoutes) {
   return accessedRoutes
   return accessedRoutes
 }
 }
 const actions = {
 const actions = {
-  generateRoutes({ commit }) {
+  generateRoutes({
+    commit
+  }) {
     return new Promise(resolve => {
     return new Promise(resolve => {
       // 获取接口返回的权限菜单
       // 获取接口返回的权限菜单
       getSilder().then(async res => {
       getSilder().then(async res => {
         if (res.code == 200) {
         if (res.code == 200) {
           let result = addTopMenu(res.data)
           let result = addTopMenu(res.data)
-          if(res.data?.length <1){
+          if (res.data?.length < 1) {
             // 一条权限都没有
             // 一条权限都没有
             //退出 跳到登录页 提示'该账号无任何权限'
             //退出 跳到登录页 提示'该账号无任何权限'
             // console.log(store.dispatch)
             // console.log(store.dispatch)
@@ -716,7 +738,9 @@ const actions = {
       })
       })
     })
     })
   },
   },
-  removePermission({ commit }) {
+  removePermission({
+    commit
+  }) {
     window.localStorage.removeItem('permission')
     window.localStorage.removeItem('permission')
     commit('SET_PERMISSION', [])
     commit('SET_PERMISSION', [])
 
 

+ 340 - 0
src/views/main/cloudDate/activeUserNum.vue

@@ -0,0 +1,340 @@
+<template>
+  <div>
+    <el-card>
+      <headers title="活跃用户统计" />
+      <div class="chioseBox">
+        <el-radio-group v-model="timers" size="mini" @change="changeQuick">
+          <el-radio-button label="month">本月</el-radio-button>
+          <el-radio-button label="year">本年度</el-radio-button>
+          <el-radio-button label="lastYear">去年</el-radio-button>
+        </el-radio-group>
+        <el-date-picker
+          v-model="date"
+          type="daterange"
+          style="width: 300px; padding: 0 10px"
+          range-separator="-"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期"
+          value-format="yyyy-MM-dd"
+          format="yyyy-MM-dd"
+          size="mini"
+          @change="changeValue"
+          :picker-options="bigin()"
+        >
+        </el-date-picker>
+        单位:
+        <el-radio-group v-model="timer" size="mini">
+          <el-radio-button label="day">按天</el-radio-button>
+          <el-radio-button label="month">按月</el-radio-button>
+        </el-radio-group>
+      </div>
+      <ve-line
+        style="width: 100%"
+        height="350px"
+        :data="timer == 'day' ? chartData : chartDataForMoth"
+        :data-empty="dataEmpty"
+        :extend="chartExtend"
+        :legend="legend"
+      ></ve-line>
+    </el-card>
+  </div>
+</template>
+<script>
+import "v-charts/lib/style.css";
+import "echarts/lib/component/dataZoom";
+import headers from "./modals/headers.vue";
+import veLine from "v-charts/lib/line.common";
+import { getNowDateAndSunday, getNowDateAndMonday } from "@/utils/date";
+export default {
+  components: {
+    headers,
+    veLine,
+  },
+  data() {
+    return {
+      timer: "", // 按天 按月
+      timers: "", // 本月 本年 去年
+      date: [],
+    };
+  },
+  mounted() {
+    this.init();
+  },
+  computed: {
+    legend() {
+      return {
+        left: "10px",
+      };
+    },
+    items() {
+      let obj = {};
+      // let arr = [
+      //   "HOMEWORK_CREATE_RATE",
+      //   "HOMEWORK_SUBMIT_RATE",
+      //   "HOMEWORK_COMMENT_RATE",
+      // ];
+      // arr.forEach((str) => {
+      //   if (this.data[str]) {
+      //     obj[str] = this.data[str];
+      //   }
+      // });
+      /**
+       *  {
+        HOMEWORK_CREATE_RATE:this.data["HOMEWORK_CREATE_RATE"] || {},
+        HOMEWORK_SUBMIT_RATE: this.data["HOMEWORK_SUBMIT_RATE"] || {},
+        HOMEWORK_COMMENT_RATE: this.data["HOMEWORK_COMMENT_RATE"] || {},
+      };
+       */
+      return obj;
+    },
+    chartExtend() {
+      return {
+        series: {
+          type: "line",
+          smooth: false,
+        },
+        yAxis: {
+          //纵轴标尺固定
+          minInterval: 1,
+          type: "value",
+          scale: true,
+          min: 0,
+          max: 100,
+          axisLabel: {
+            formatter: "{value}%",
+          },
+        },
+        tooltip: {
+          axisPointer: {
+            type: "shadow",
+            shadowStyle: {
+              color: "rgba(150,150,150,0.2)",
+            },
+          },
+
+          formatter: (item) => {
+            return [
+              item[0].axisValueLabel,
+              ...item.map(
+                (d) => `<br/>${d.marker}${d.seriesName}: ${d.value[1]} %`
+              ),
+            ].join("");
+          },
+        },
+      };
+    },
+    dataZoom() {
+      return [
+        {
+          grid: {
+            left: "0%",
+          },
+          type: "slider",
+          start: 40,
+          end: 100,
+        },
+      ];
+    },
+    chartData() {
+      const values = Object.values(this.items);
+      const months = {};
+      for (const item of values) {
+        for (const row of item.indexMonthData || []) {
+          const key = this.$helpers.dayjs(row.month).format("YYYY-MM-DD");
+          if (!months[key]) {
+            months[key] = {
+              日期: key + "/" + getNowDateAndSunday(key),
+            };
+          }
+          months[key][item.title] = row.percent;
+        }
+      }
+
+      return {
+        columns: [
+          "日期",
+          ...values.map((item) => {
+            return item.title;
+          }),
+        ],
+        rows: Object.values(months),
+      };
+    },
+    chartDataForMoth() {
+      const values = Object.values({ ...this.items, ...this.items2 });
+      const months = {};
+      for (const item of values) {
+        for (const row of item.indexMonthData || []) {
+          const key = this.$helpers.dayjs(row.month).format("YYYY-MM");
+
+          if (!months[key]) {
+            months[key] = {
+              月份: key,
+            };
+            months[key][item.title] = row.percent;
+          } else {
+            if (months[key][item.title]) {
+              months[key][item.title] = (
+                parseFloat(months[key][item.title]) + parseFloat(row.percent)
+              ).toFixed(2);
+            } else {
+              months[key][item.title] = parseFloat(row.percent).toFixed(2);
+            }
+          }
+        }
+      }
+      return {
+        columns: [
+          "月份",
+          "总收入",
+          "现金收入",
+          "余额收入",
+          "财务支出",
+          "报名缴费收入",
+          "网管课收入",
+          "其他收入",
+          "乐团续费收入",
+          "VIP课收入",
+        ],
+        rows: Object.values(months),
+        loading: true,
+      };
+    },
+    dataEmpty() {
+      return !this.chartData.rows.length;
+    },
+  },
+  methods: {
+    init() {
+      let nowTiem = this.$helpers.dayjs(new Date()).format("YYYY-MM-DD");
+      let startTime = this.$helpers
+        .dayjs(getNowDateAndMonday(nowTiem))
+        .subtract(49, "day")
+        .format("YYYY-MM-DD");
+      let endTime = getNowDateAndSunday(nowTiem);
+      this.mdate = [startTime, endTime];
+      this.FetchDetail();
+    },
+    changeValue(date) {
+      // 请求更改数据
+      this.mdate = date;
+      //  this.isDayOrMoth(date)
+      this.FetchDetail();
+    },
+    async FetchDetail() {
+      this.loading = true;
+      let data = [];
+      try {
+        // const { dates, ...rest } = this.search;
+        // const res = await getIndex({
+        //   ...rest,
+        //   ...getTimes(this.mdate, ["startDate", "endDate"]),
+        //   dataTypes:
+        //     "HOMEWORK_CREATE_RATE,HOMEWORK_SUBMIT_RATE,HOMEWORK_COMMENT_RATE",
+        // });
+        // for (const item of res.data) {
+        //   // 再循环一遍
+        //   for (const key in this.items) {
+        //     if (item.dataType == key) {
+        //       data[item.dataType] = {
+        //         ...item,
+        //         desc: descs[item.dataType],
+        //       };
+        //     }
+        //   }
+        // }
+      } catch (error) {
+        console.log(error);
+      }
+      this.loading = false;
+      // this.dataInfo = data;
+      // this.$emit("resetDate", data);
+    },
+    changeQuick(val) {
+      let startDate;
+      let endDate;
+      if (val == "month") {
+        // 获取本月的第一天 获取本月的今天
+        startDate = this.$helpers
+          .dayjs(new Date())
+          .set("date", 1)
+          .format("YYYY-MM-DD");
+        this.endDate
+          ? (endDate = this.endDate)
+          : (endDate = this.$helpers
+              .dayjs(new Date())
+              .subtract(1, "day")
+              .format("YYYY-MM-DD"));
+        this.date = [startDate, endDate];
+        // this.submitDate(this.date);
+      } else if (val == "year") {
+        startDate = this.$helpers
+          .dayjs(new Date())
+          .set("month", 0)
+          .set("date", 1)
+          .format("YYYY-MM-DD");
+        this.endDate
+          ? (endDate = this.endDate)
+          : (endDate = this.$helpers
+              .dayjs(new Date())
+              .subtract(1, "day")
+              .format("YYYY-MM-DD"));
+        this.date = [startDate, endDate];
+        // this.submitDate(this.date);
+      } else if (val == "lastYear") {
+        startDate = this.$helpers
+          .dayjs(new Date())
+          .subtract(1, "year")
+          .set("month", 0)
+          .set("date", 1)
+          .format("YYYY-MM-DD");
+        endDate = this.$helpers
+          .dayjs()
+          .subtract(1, "year")
+          .endOf("year")
+          .format("YYYY-MM-DD");
+        this.date = [startDate, endDate];
+        // this.submitDate(this.date);
+      }
+    },
+    changeValue(val) {
+      this.timer = "";
+      this.date = val;
+      // this.submitDate(this.date);
+    },
+    bigin() {
+      let self = this;
+      return {
+        firstDayOfWeek: 1,
+        disabledDate(time) {
+          if (self.endDate) {
+            let endTime = self.$helpers.dayjs(self.endDate).valueOf();
+            return time.getTime() > endTime;
+          } else {
+            return time.getTime() >= Date.now() - 24 * 60 * 60 * 1000;
+          }
+        },
+      };
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+/deep/.el-card__body {
+  padding-top: 0 !important;
+}
+
+.chioseBox {
+  position: absolute;
+  right: 20px;
+  z-index: 1000;
+}
+.wrap {
+  position: relative;
+}
+.chioseBox {
+  position: absolute;
+  right: 20px;
+  z-index: 1000;
+}
+</style>

+ 60 - 0
src/views/main/cloudDate/allDate.vue

@@ -0,0 +1,60 @@
+<template>
+  <div>
+    <el-card>
+      <headers title="数据总览"  :hidenOrgan="true"/>
+      <div
+        class="wall"
+        style="height: 68px"
+        v-if="JSON.stringify(items) == '{}'"
+      >
+        暂无数据
+      </div>
+      <statistic :col="5" class="statistic" :cols="0">
+        <statistic-item
+          v-for="(item, key) in items"
+          :key="key"
+          :class="{ active: active === key }"
+          @click="active = key"
+        >
+          <span>
+            {{ item.title + "(人)" }}
+            <el-tooltip
+              v-if="item.desc"
+              :content="item.desc"
+              :open-delay="0.3"
+              placement="top"
+            >
+              <i
+                style="margin-left: 5px; cursor: pointer"
+                class="el-icon-warning-outline"
+              />
+            </el-tooltip>
+          </span>
+          <span> <count-to :endVal="item.percent" /> </span>
+        </statistic-item>
+      </statistic>
+    </el-card>
+  </div>
+</template>
+<script>
+import headers from "./modals/headers.vue";
+export default {
+  props: ["data"],
+  components: {
+    headers,
+  },
+  data() {
+    return {};
+  },
+  computed: {
+    items() {
+      return {};
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+/deep/.el-card__body {
+  padding-top: 0!important;
+}
+</style>

+ 33 - 0
src/views/main/cloudDate/index.vue

@@ -0,0 +1,33 @@
+<template>
+  <div>
+    <allDate class="marginBottom20" />
+    <organDate class="marginBottom20"/>
+    <activeUserNum  class="marginBottom20" />
+    <organRanking />
+  </div>
+</template>
+<script>
+import allDate from './allDate.vue'
+import organDate from './organDate.vue'
+import activeUserNum from './activeUserNum.vue'
+import organRanking from './organRanking.vue'
+export default {
+  components:{
+    allDate,
+    organDate,
+    activeUserNum,
+    organRanking
+  },
+  data(){
+    return{
+
+    }
+  }
+}
+</script>
+<style lang="scss" scoped>
+.marginBottom20 {
+  margin-bottom: 20px;
+}
+
+</style>

+ 55 - 0
src/views/main/cloudDate/modals/headers.vue

@@ -0,0 +1,55 @@
+<template>
+  <div>
+    <div class="titleWrap">
+      <div class="box">
+        <span class="shape"></span>
+        <span>{{ title }}</span>
+      </div>
+      <div class="right">
+        <el-select
+          v-if="!hidenOrgan"
+          size="mini"
+          class="multiple"
+          v-model.trim="organId"
+          filterable
+          clearable
+          placeholder="请选择分部"
+        >
+          <el-option
+            v-for="(item, index) in selects.branchs"
+            :key="index"
+            :label="item.name"
+            :value="item.id"
+          ></el-option>
+        </el-select>
+      </div>
+    </div>
+    <el-divider></el-divider>
+  </div>
+</template>
+<script>
+export default {
+  props: ["title", "hidenOrgan"],
+  data() {
+    return {
+      organId: "",
+    };
+  },
+  async mounted() {
+    await this.$store.dispatch("setBranchs");
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.el-divider--horizontal{
+  margin-top:0!important
+}
+.titleWrap {
+  display: flex;
+  flex-direction: row;
+  justify-content: space-between;
+  align-items: center;
+  height: 55px;
+}
+</style>

+ 171 - 0
src/views/main/cloudDate/organDate.vue

@@ -0,0 +1,171 @@
+<template>
+  <div>
+    <el-card>
+      <headers title="分部数据" :hidenOrgan="true" />
+      <div class="tableWrap">
+        <el-table
+          style="width: 100%"
+          :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+          :data="tableList"
+        >
+          <el-table-column
+            align="center"
+            prop="studentId"
+            label="分部"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="studentId"
+            label="学员总数"
+            sortable
+          >
+            <template slot="header" slot-scope="slot">
+              <div class="titleCell">
+                <span>学员总数</span>
+                <el-tooltip placement="top" popper-class="mTooltip">
+                  <div slot="content">该分部需服务的学员总数</div>
+                  <i
+                    class="el-icon-question micon el-tooltip"
+                    style="
+                      font-size: 18px;
+                      color: #f56c6c;
+                      top: 2px;
+                      position: relative;
+                    "
+                  ></i>
+                </el-tooltip>
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column
+            sortable
+            align="center"
+            prop="studentId"
+            label="付费会员数"
+          >
+            <template slot="header" slot-scope="slot">
+              <div class="titleCell">
+                <span>付费会员数</span>
+                <el-tooltip placement="top" popper-class="mTooltip">
+                  <div slot="content">该分部生效中、待生效付费会员总数</div>
+                  <i
+                    class="el-icon-question micon el-tooltip"
+                    style="
+                      font-size: 18px;
+                      color: #f56c6c;
+                      top: 2px;
+                      position: relative;
+                    "
+                  ></i>
+                </el-tooltip>
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column
+            sortable
+            align="center"
+            prop="studentId"
+            label="试用会员"
+          >
+            <template slot="header" slot-scope="slot">
+              <div class="titleCell">
+                <span>试用会员</span>
+                <el-tooltip placement="top" popper-class="mTooltip">
+                  <div slot="content">该分部生效中试用会员总数</div>
+                  <i
+                    class="el-icon-question micon el-tooltip"
+                    style="
+                      font-size: 18px;
+                      color: #f56c6c;
+                      top: 2px;
+                      position: relative;
+                    "
+                  ></i>
+                </el-tooltip>
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column
+            sortable
+            align="center"
+            prop="studentId"
+            label="付费会员占比"
+          >
+            <template slot="header" slot-scope="slot">
+              <div class="titleCell">
+                <span>付费会员占比</span>
+                <el-tooltip placement="top" popper-class="mTooltip">
+                  <div slot="content">
+                    该分部生效中、待生效付费会员占服务学员比例
+                  </div>
+                  <i
+                    class="el-icon-question micon el-tooltip"
+                    style="
+                      font-size: 18px;
+                      color: #f56c6c;
+                      top: 2px;
+                      position: relative;
+                    "
+                  ></i>
+                </el-tooltip>
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="studentId" label="操作">
+            <template>
+              <div>
+                <el-button type="text" @click="gotoDetail">详情</el-button>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination
+          sync
+          :total.sync="rules.total"
+          :page.sync="rules.page"
+          :limit.sync="rules.limit"
+          :page-sizes="rules.page_size"
+          @pagination="getList"
+        />
+      </div>
+    </el-card>
+  </div>
+</template>
+<script>
+import headers from "./modals/headers.vue";
+import pagination from "@/components/Pagination/index";
+export default {
+  components: {
+    headers,
+    pagination,
+  },
+  data() {
+    return {
+      tableList: [{}],
+      rules: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
+      },
+    };
+  },
+  mounted() {},
+  methods: {
+    getList() {},
+    gotoDetail(row) {
+      // 跳转到分部数据详情 row.organId
+      this.$router.push({name:'organDateDetail',params:{organId:1}})
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+/deep/.el-card__body {
+  padding-top: 0 !important;
+}
+.titleCell {
+  display: inline-block;
+}
+</style>

+ 162 - 0
src/views/main/cloudDate/organDateDetail.vue

@@ -0,0 +1,162 @@
+<!--  -->
+<template>
+  <div class="m-container">
+    <h2>
+      <div class="squrt"></div>
+      分部云教练数据详情
+    </h2>
+    <div class="m-core">
+      <save-form
+        :inline="true"
+        :model="searchForm"
+        @submit="search"
+        @reset="onReSet"
+        ref="saveForm"
+      >
+        <el-form-item prop="organId">
+          <el-select
+            class="multiple"
+            v-model.trim="searchForm.organId"
+            filterable
+            placeholder="请选择分部"
+            @change="search"
+          >
+            <el-option
+              v-for="(item, index) in selects.branchs"
+              :key="index"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <!-- <el-form-item>
+          <el-button native-type="submit" type="primary">搜索</el-button>
+          <el-button native-type="reset" type="danger">重置</el-button>
+        </el-form-item> -->
+      </save-form>
+      <div class="tableWrap">
+        <el-table
+          style="width: 100%"
+          :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+          :data="tableList"
+        >
+          <el-table-column
+            align="center"
+            prop="studentId"
+            label="老师姓名"
+            sortable
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="studentId"
+            label="学员总数"
+            sortable
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="studentId"
+            label="付费会员数"
+            sortable
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="studentId"
+            label="试用会员"
+            sortable
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="studentId"
+            label="会员占比"
+            sortable
+          ></el-table-column>
+          <el-table-column align="center" prop="studentId" label="操作">
+            <template>
+              <div>
+                <el-button type="text" @click="gotoDetail">详情</el-button>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination
+          sync
+          :total.sync="rules.total"
+          :page.sync="rules.page"
+          :limit.sync="rules.limit"
+          :page-sizes="rules.page_size"
+          @pagination="getList"
+        />
+      </div>
+      <el-dialog
+        title="分部数据"
+        :visible.sync="studentVisible"
+        width="1100px"
+        v-if="studentVisible"
+      >
+        <organStudentDetail />
+        <!-- <span slot="footer" class="dialog-footer">
+          <el-button @click="studentVisible = false">取 消</el-button>
+          <el-button type="primary" @click="submitPlan">确 定</el-button>
+        </span> -->
+      </el-dialog>
+    </div>
+  </div>
+</template>
+
+<script>
+import axios from "axios";
+import { getToken } from "@/utils/auth";
+import pagination from "@/components/Pagination/index";
+import load from "@/utils/loading";
+import organStudentDetail from './organStudentDetail'
+export default {
+  name: "organDateDetail",
+  components: { pagination,organStudentDetail },
+  data() {
+    return {
+      searchForm: {
+        organId: null,
+      },
+
+      tableList: [{}],
+      organList: [],
+      rules: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
+      },
+      studentVisible:false
+    };
+  },
+  //生命周期 - 创建完成(可以访问当前this实例)
+  created() {},
+  //生命周期 - 挂载完成(可以访问DOM元素)
+  async mounted() {
+    // 获取分部
+    await this.$store.dispatch("setBranchs");
+    if (this.$route.params?.organId) {
+      this.searchForm.organId = this.$route.query.params.organId;
+    }
+
+    this.init();
+  },
+  methods: {
+    init() {},
+    getList() {},
+    search() {
+      this.rules.page = 1;
+      this.getList();
+      console.log(this.$refs.saveForm);
+      this.$refs.saveForm.save();
+    },
+    onReSet() {},
+    gotoDetail() {
+      this.studentVisible = true;
+    },
+  },
+};
+</script>
+<style lang='scss' scoped>
+</style>

+ 221 - 0
src/views/main/cloudDate/organRanking.vue

@@ -0,0 +1,221 @@
+<template>
+  <div>
+    <el-card>
+      <headers title="分部排行" :hidenOrgan="true" />
+      <div class="wrap">
+        <div class="chioseBox">
+          <el-date-picker
+            v-model="date"
+            type="date"
+            value-format="yyyy-MM-dd"
+            format="yyyy-MM-dd"
+            @change="changeValue"
+            :picker-options="bigin()"
+          >
+          </el-date-picker>
+        </div>
+      </div>
+      <div class="tableWrap">
+        <el-table
+          style="width: 100%"
+          :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+          :data="tableList"
+        >
+          <el-table-column align="center" prop="studentId" label="排名">
+          </el-table-column>
+          <el-table-column
+            align="center"
+            prop="studentId"
+            label="分部"
+          ></el-table-column>
+
+          <template slot="header" slot-scope="slot">
+            <div class="titleCell">
+              <span>活跃用户</span>
+              <el-tooltip placement="top" popper-class="mTooltip">
+                <div slot="content">当日使用过云教练的用户数量(含试用)</div>
+                <i
+                  class="el-icon-question micon el-tooltip"
+                  style="
+                    font-size: 18px;
+                    color: #f56c6c;
+                    top: 2px;
+                    position: relative;
+                  "
+                ></i>
+              </el-tooltip>
+            </div>
+          </template>
+
+          <el-table-column
+            sortable
+            align="center"
+            prop="studentId"
+            label="付费会员数"
+          >
+            <template slot="header" slot-scope="slot">
+              <div class="titleCell">
+                <span>付费会员数</span>
+                <el-tooltip placement="top" popper-class="mTooltip">
+                  <div slot="content">当日付费会员总数</div>
+                  <i
+                    class="el-icon-question micon el-tooltip"
+                    style="
+                      font-size: 18px;
+                      color: #f56c6c;
+                      top: 2px;
+                      position: relative;
+                    "
+                  ></i>
+                </el-tooltip>
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column
+            sortable
+            align="center"
+            prop="studentId"
+            label="试用会员"
+          >
+            <template slot="header" slot-scope="slot">
+              <div class="titleCell">
+                <span>试用会员数</span>
+                <el-tooltip placement="top" popper-class="mTooltip">
+                  <div slot="content">当日试用会员总数</div>
+                  <i
+                    class="el-icon-question micon el-tooltip"
+                    style="
+                      font-size: 18px;
+                      color: #f56c6c;
+                      top: 2px;
+                      position: relative;
+                    "
+                  ></i>
+                </el-tooltip>
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column
+            sortable
+            align="center"
+            prop="studentId"
+            label="新增付费会员"
+          >
+            <template slot="header" slot-scope="slot">
+              <div class="titleCell">
+                <span>新增付费会员</span>
+                <el-tooltip placement="top" popper-class="mTooltip">
+                  <div slot="content">当日新增付费会员数量</div>
+                  <i
+                    class="el-icon-question micon el-tooltip"
+                    style="
+                      font-size: 18px;
+                      color: #f56c6c;
+                      top: 2px;
+                      position: relative;
+                    "
+                  ></i>
+                </el-tooltip>
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column
+            sortable
+            align="center"
+            prop="studentId"
+            label="活跃度"
+          >
+            <template slot="header" slot-scope="slot">
+              <div class="titleCell">
+                <span>活跃度</span>
+                <el-tooltip placement="top" popper-class="mTooltip">
+                  <div slot="content">
+                    当日使用过云教练的会员占比(生效中会员,含试用)
+                  </div>
+                  <i
+                    class="el-icon-question micon el-tooltip"
+                    style="
+                      font-size: 18px;
+                      color: #f56c6c;
+                      top: 2px;
+                      position: relative;
+                    "
+                  ></i>
+                </el-tooltip>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination
+          sync
+          :total.sync="rules.total"
+          :page.sync="rules.page"
+          :limit.sync="rules.limit"
+          :page-sizes="rules.page_size"
+          @pagination="getList"
+        />
+      </div>
+    </el-card>
+  </div>
+</template>
+<script>
+import headers from "./modals/headers.vue";
+import pagination from "@/components/Pagination/index";
+export default {
+  components: {
+    headers,
+    pagination,
+  },
+  data() {
+    return {
+      tableList: [],
+      rules: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
+      },
+      date: "",
+    };
+  },
+  mounted() {},
+  methods: {
+    getList() {},
+    bigin() {
+      let self = this;
+      return {
+        firstDayOfWeek: 1,
+        disabledDate(time) {
+          if (self.endDate) {
+            let endTime = self.$helpers.dayjs(self.endDate).valueOf();
+            return time.getTime() > endTime;
+          } else {
+            return time.getTime() >= Date.now() - 24 * 60 * 60 * 1000;
+          }
+        },
+      };
+    },
+    changeValue(val) {},
+  },
+};
+</script>
+<style lang="scss" scoped>
+/deep/.el-card__body {
+  padding-top: 0 !important;
+}
+.titleCell {
+  display: inline-block;
+}
+.chioseBox {
+display: flex;
+flex-direction: row;
+align-items: center;
+justify-content: flex-end;
+margin-bottom: 20px;
+}
+.wrap {
+  position: relative;
+}
+</style>
+

+ 110 - 0
src/views/main/cloudDate/organStudentDetail.vue

@@ -0,0 +1,110 @@
+<template>
+  <div class="m-core">
+    <el-form
+      :inline="true"
+      :model="searchForm"
+      @submit="search"
+      @reset="onReSet"
+    >
+      <el-form-item>
+        <el-input
+          v-model.trim="searchForm.search"
+          clearable
+          @keyup.enter.native="search"
+          placeholder="学员姓名、编号、手机号"
+        ></el-input>
+      </el-form-item>
+      <el-form-item prop="organId">
+        <el-select
+          class="multiple"
+          v-model.trim="searchForm.organId"
+          filterable
+          placeholder="付费会员"
+          @change="search"
+        >
+          <el-option label="非会员" value="item.id"></el-option>
+          <el-option label="付费会员" value="item.id"></el-option>
+          <el-option label="试用会员" value="item.id"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button native-type="submit" type="primary">搜索</el-button>
+        <el-button native-type="reset" type="danger">重置</el-button>
+      </el-form-item>
+    </el-form>
+    <div class="tableWrap">
+      <el-table
+        style="width: 100%"
+        :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+        :data="tableList"
+      >
+        <el-table-column
+          align="center"
+          prop="studentId"
+          label="学员姓名(编号)"
+        ></el-table-column>
+        <el-table-column
+          align="center"
+          prop="studentId"
+          label="手机号"
+        ></el-table-column>
+        <el-table-column
+          align="center"
+          prop="studentId"
+          label="声部"
+        ></el-table-column>
+        <el-table-column
+          align="center"
+          prop="studentId"
+          label="会员类型"
+        ></el-table-column>
+        <el-table-column
+          align="center"
+          prop="studentId"
+          label="付费会员结束时间(剩余天数)"
+        ></el-table-column>
+        <el-table-column
+          align="center"
+          prop="studentId"
+          label="试用会员结束时间(剩余天数)"
+        ></el-table-column>
+      </el-table>
+      <pagination
+        :total.sync="rules.total"
+        :page.sync="rules.page"
+        :limit.sync="rules.limit"
+        :page-sizes="rules.page_size"
+        @pagination="getList"
+      />
+    </div>
+  </div>
+</template>
+<script>
+import pagination from "@/components/Pagination/index";
+export default {
+  components:{pagination},
+  props: ["teacherId"],
+  data() {
+    return {
+      searchForm: {
+        search: "",
+      },
+      tableList:[],
+      rules: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
+      },
+    };
+  },mounted(){},
+  methods:{
+    getList(){},
+    search(){},
+    onReSet(){}
+  }
+};
+</script>
+<style lang="scss" scoped>
+</style>

+ 12 - 4
src/views/main/index.vue

@@ -11,7 +11,6 @@
       />
       />
     </h2>
     </h2>
     <div class="m-core">
     <div class="m-core">
-
       <tab-router @change="changeKey">
       <tab-router @change="changeKey">
         <el-tab-pane
         <el-tab-pane
           v-if="permission('/main/main/allData/826')"
           v-if="permission('/main/main/allData/826')"
@@ -21,6 +20,14 @@
         >
         >
           <baseinfo v-if="activeKey === 'baseinfo'" />
           <baseinfo v-if="activeKey === 'baseinfo'" />
         </el-tab-pane>
         </el-tab-pane>
+        <el-tab-pane
+          v-if="permission('/main/main/allData/826')"
+          lazy
+          label="云教练数据"
+          name="cloudDate"
+        >
+         <cloudDate v-if="activeKey === 'cloudDate'" />
+        </el-tab-pane>
         <el-tab-pane v-if="permission('/getIndexErrData')" lazy name="abnormal">
         <el-tab-pane v-if="permission('/getIndexErrData')" lazy name="abnormal">
           <el-badge
           <el-badge
             slot="label"
             slot="label"
@@ -71,6 +78,7 @@ import abnormal from "./abnormal";
 import teamSchedule from "./teamSchedule";
 import teamSchedule from "./teamSchedule";
 import ScheduleBranch from "./schedule-branch";
 import ScheduleBranch from "./schedule-branch";
 import reminders from "./reminders";
 import reminders from "./reminders";
+import cloudDate from './cloudDate'
 export default {
 export default {
   name: "Main",
   name: "Main",
   components: {
   components: {
@@ -79,15 +87,15 @@ export default {
     teamSchedule,
     teamSchedule,
     ScheduleBranch,
     ScheduleBranch,
     reminders,
     reminders,
+    cloudDate
   },
   },
   data() {
   data() {
     return {
     return {
       activeKey: "",
       activeKey: "",
     };
     };
   },
   },
-  mounted(){
+  mounted() {
     // console.log(permission('/main/main/allData/826'))
     // console.log(permission('/main/main/allData/826'))
-
   },
   },
   computed: {
   computed: {
     status() {
     status() {
@@ -138,7 +146,7 @@ export default {
       });
       });
     },
     },
     reloadItem() {
     reloadItem() {
-      console.log('调用')
+      console.log("调用");
       if (this.$refs.teamSchedule) {
       if (this.$refs.teamSchedule) {
         this.$refs.teamSchedule.getList();
         this.$refs.teamSchedule.getList();
       }
       }

+ 177 - 41
src/views/studentManager/studentList.vue

@@ -65,6 +65,17 @@
             ></el-option>
             ></el-option>
           </el-select> -->
           </el-select> -->
         </el-form-item>
         </el-form-item>
+                <el-form-item prop="hasMember">
+          <el-select
+            class="multiple"
+            v-model.trim="searchForm.hasMember"
+            clearable
+            placeholder="是否是会员"
+          >
+            <el-option label="是" value="1"></el-option>
+            <el-option label="否" value="0"></el-option>
+          </el-select>
+        </el-form-item>
 
 
         <el-form-item prop="isActive">
         <el-form-item prop="isActive">
           <el-select
           <el-select
@@ -151,6 +162,83 @@
           :data="tableList"
           :data="tableList"
           :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
           :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
         >
         >
+          <el-table-column type="expand">
+            <template slot-scope="props">
+              <el-form label-position="left" class="demo-table-expand">
+                <el-row>
+                  <el-col :span="4">
+                    <el-form-item label="所属学校">
+                      <div class="schoolWrap">
+                        <overflow-text
+                          width="100%"
+                          :text="props.row.cooperationOrganName"
+                        ></overflow-text>
+                      </div> </el-form-item
+                  ></el-col>
+                  <el-col  :span="4">
+                    <el-form-item>
+                      <span slot="label"
+                        >是否激活
+                        <el-tooltip placement="top" popper-class="mTooltip">
+                          <div slot="content">学员是否设置密码</div>
+                          <i
+                            class="el-icon-question"
+                            style="font-size: 18px; color: #f56c6c"
+                          ></i> </el-tooltip
+                      ></span>
+                      <span>{{ props.row.isActive ? "是" : "否" }}</span>
+                    </el-form-item></el-col
+                  >
+                  <el-col  :span="4">
+                    <el-form-item label="课程余额(元)">
+                      <span>{{ props.row.courseBalance | moneyFormat }}</span>
+                    </el-form-item></el-col
+                  >
+                  <el-col  :span="4">
+                    <el-form-item label="网管课剩余课时">
+                      <span>{{ props.row.noStartPracticeCourseNum }}</span>
+                    </el-form-item></el-col
+                  >
+                  <el-col  :span="4">
+                    <el-form-item label="关心包">
+                      <span>
+                        {{ props.row.carePackage | studentPackage }}
+                      </span>
+                    </el-form-item></el-col
+                  >
+                </el-row>
+                <el-row>
+                  <el-col :span="4">
+                    <el-form-item label="指导老师">
+                      <span>{{ props.row.teacherName }}</span>
+                    </el-form-item></el-col
+                  >
+                  <el-col :span="4">
+                    <el-form-item label="是否运营">
+                      <span>{{ props.row.operatingTag ? "是" : "否" }}</span>
+                    </el-form-item></el-col
+                  >
+                  <el-col :span="4">
+                    <el-form-item label="账户余额(元)">
+                      <span>{{ props.row.balance | moneyFormat }}</span>
+                    </el-form-item></el-col
+                  >
+                  <el-col :span="4">
+                    <el-form-item label="vip课剩余课时">
+                      <span>{{ props.row.noStartVipCourseNum }}</span>
+                    </el-form-item></el-col
+                  >
+                  <el-col :span="4">
+                    <el-form-item label="加油包">
+                      <span>{{
+                        props.row.comeOnPackage | studentPackage
+                      }}</span>
+                    </el-form-item></el-col
+                  >
+                </el-row>
+              </el-form>
+            </template>
+          </el-table-column>
           <el-table-column align="center" prop="organName" label="所属分部">
           <el-table-column align="center" prop="organName" label="所属分部">
             <template slot-scope="scope">
             <template slot-scope="scope">
               <copy-text>{{ scope.row.organName }}</copy-text>
               <copy-text>{{ scope.row.organName }}</copy-text>
@@ -188,17 +276,17 @@
             prop="subjectName"
             prop="subjectName"
             label="声部"
             label="声部"
           ></el-table-column>
           ></el-table-column>
-          <el-table-column
+          <!-- <el-table-column
             align="center"
             align="center"
             prop="cooperationOrganName"
             prop="cooperationOrganName"
             label="所属学校"
             label="所属学校"
-          ></el-table-column>
+          ></el-table-column> -->
 
 
-          <el-table-column align="center" prop="teacherName" label="指导老师">
+          <!-- <el-table-column align="center" prop="teacherName" label="指导老师">
             <template slot-scope="scope">
             <template slot-scope="scope">
               <copy-text>{{ scope.row.teacherName }}</copy-text>
               <copy-text>{{ scope.row.teacherName }}</copy-text>
             </template>
             </template>
-          </el-table-column>
+          </el-table-column> -->
           <!-- <el-table-column align="center" label="性别">
           <!-- <el-table-column align="center" label="性别">
             <template slot-scope="scope"></template>
             <template slot-scope="scope"></template>
           </el-table-column> -->
           </el-table-column> -->
@@ -208,7 +296,7 @@
             prop="leaveNum"
             prop="leaveNum"
             label="本月请假次数"
             label="本月请假次数"
           ></el-table-column> -->
           ></el-table-column> -->
-          <el-table-column align="center">
+          <!-- <el-table-column align="center">
             <template slot="header">
             <template slot="header">
               <p style="position: relative">
               <p style="position: relative">
                 是否激活
                 是否激活
@@ -224,7 +312,7 @@
             <template slot-scope="scope">{{
             <template slot-scope="scope">{{
               scope.row.isActive ? "是" : "否"
               scope.row.isActive ? "是" : "否"
             }}</template>
             }}</template>
-          </el-table-column>
+          </el-table-column> -->
           <el-table-column align="center" label="未上课时">
           <el-table-column align="center" label="未上课时">
             <template slot-scope="scope">{{
             <template slot-scope="scope">{{
               scope.row.hasCourse ? "有" : "无"
               scope.row.hasCourse ? "有" : "无"
@@ -233,43 +321,72 @@
           <!-- <el-table-column align="center" label="预约网管课">
           <!-- <el-table-column align="center" label="预约网管课">
             <template slot-scope="scope">{{ scope.row.isMake ? '是' : '否' }}</template>
             <template slot-scope="scope">{{ scope.row.isMake ? '是' : '否' }}</template>
           </el-table-column> -->
           </el-table-column> -->
-          <el-table-column align="center" label="网管课剩余课时">
+          <!-- <el-table-column align="center" label="网管课剩余课时">
             <template slot-scope="scope">{{
             <template slot-scope="scope">{{
               scope.row.noStartPracticeCourseNum
               scope.row.noStartPracticeCourseNum
             }}</template>
             }}</template>
-          </el-table-column>
-          <el-table-column align="center" label="vip课剩余课时">
+          </el-table-column> -->
+          <!-- <el-table-column align="center" label="vip课剩余课时">
             <template slot-scope="scope">{{
             <template slot-scope="scope">{{
               scope.row.noStartVipCourseNum
               scope.row.noStartVipCourseNum
             }}</template>
             }}</template>
-          </el-table-column>
-          <el-table-column align="center" label="是否运营">
+          </el-table-column> -->
+          <!-- <el-table-column align="center" label="是否运营">
             <template slot-scope="scope">{{
             <template slot-scope="scope">{{
               scope.row.operatingTag ? "是" : "否"
               scope.row.operatingTag ? "是" : "否"
             }}</template>
             }}</template>
-          </el-table-column>
+          </el-table-column> -->
           <el-table-column align="center" label="是否服务">
           <el-table-column align="center" label="是否服务">
             <template slot-scope="scope">{{
             <template slot-scope="scope">{{
               scope.row.serviceTag ? "是" : "否"
               scope.row.serviceTag ? "是" : "否"
             }}</template>
             }}</template>
           </el-table-column>
           </el-table-column>
-                   <el-table-column
+          <el-table-column
             align="center"
             align="center"
             width="120px"
             width="120px"
             prop="parentsPhone"
             prop="parentsPhone"
-            label="会员截止日期"
+            label="会员截止日期(剩余天数)"
           >
           >
-          <template slot-scope="scope">
-            <div v-if="scope.row.membershipEndTime && scope.row.memberRankSettingId == 0" class="red">
-              会员未生效
-            </div>
-            <div v-else-if="scope.row.membershipEndTime && scope.row.memberRankSettingId != 0" :class="checkDate(scope.row.membershipEndTime)?'':'red'">
-              {{scope.row.membershipEndTime|dayjsFormat}}
-            </div>
-            <div v-else class="red">
-               未购买会员
-            </div>
-          </template>
+            <template slot-scope="scope">
+              <div
+                v-if="
+                  scope.row.membershipEndTime &&
+                  scope.row.memberRankSettingId == 0
+                "
+                class="red"
+              >
+                会员未生效
+              </div>
+              <div
+                v-else-if="
+                  scope.row.membershipEndTime &&
+                  scope.row.memberRankSettingId != 0
+                "
+                :class="checkDate(scope.row.membershipEndTime) ? '' : 'red'"
+              >
+                {{ scope.row.membershipEndTime | dayjsFormat }}
+                <p class="red" v-if="scope.row.membershipEndTime">
+                  剩余{{ scope.row.membershipDay }}天
+                </p>
+              </div>
+              <div v-else class="red">未购买会员</div>
+            </template>
+          </el-table-column>
+          <el-table-column
+            label="会员试用结束日期(剩余天数)"
+            align="center"
+            width="120px;"
+          >
+            <template slot-scope="scope">
+              <div>
+                <p :class="checkDate(scope.row.membershipEndTime) ? '' : 'red'">
+                  {{ scope.row.experienceMembershipEndTime | dayjsFormat }}
+                </p>
+                <p class="red" v-if="scope.row.experienceMembershipEndTime">
+                  剩余{{ scope.row.experienceMembershipDay }}天
+                </p>
+              </div>
+            </template>
           </el-table-column>
           </el-table-column>
           <el-table-column align="center" label="是否是新用户">
           <el-table-column align="center" label="是否是新用户">
             <template slot="header">
             <template slot="header">
@@ -290,7 +407,7 @@
               {{ scope.row.isNewUser ? "是" : "否" }}
               {{ scope.row.isNewUser ? "是" : "否" }}
             </template>
             </template>
           </el-table-column>
           </el-table-column>
-          <el-table-column
+          <!-- <el-table-column
             align="center"
             align="center"
             prop="courseBalance"
             prop="courseBalance"
             label="课程余额(元)"
             label="课程余额(元)"
@@ -300,15 +417,15 @@
                 {{ scope.row.courseBalance | moneyFormat }}
                 {{ scope.row.courseBalance | moneyFormat }}
               </div>
               </div>
             </template>
             </template>
-          </el-table-column>
-          <el-table-column align="center" prop="balance" label="账户余额(元)">
+          </el-table-column> -->
+          <!-- <el-table-column align="center" prop="balance" label="账户余额(元)">
             <template slot-scope="scope">
             <template slot-scope="scope">
               <div>
               <div>
                 {{ scope.row.balance | moneyFormat }}
                 {{ scope.row.balance | moneyFormat }}
               </div>
               </div>
             </template>
             </template>
-          </el-table-column>
-          <el-table-column align="center" prop="carePackage" label="关心包">
+          </el-table-column> -->
+          <!-- <el-table-column align="center" prop="carePackage" label="关心包">
             <template slot-scope="scope">{{
             <template slot-scope="scope">{{
               scope.row.carePackage | studentPackage
               scope.row.carePackage | studentPackage
             }}</template>
             }}</template>
@@ -317,13 +434,8 @@
             <template slot-scope="scope">{{
             <template slot-scope="scope">{{
               scope.row.comeOnPackage | studentPackage
               scope.row.comeOnPackage | studentPackage
             }}</template>
             }}</template>
-          </el-table-column>
-          <el-table-column
-            align="center"
-            fixed="right"
-            width="250px"
-            label="操作"
-          >
+          </el-table-column> -->
+          <el-table-column align="center" width="180px" label="操作">
             <template slot-scope="scope">
             <template slot-scope="scope">
               <router-link
               <router-link
                 v-permission="'/studentDetail'"
                 v-permission="'/studentDetail'"
@@ -1152,11 +1264,11 @@ export default {
     onDownloadProtocol(item) {
     onDownloadProtocol(item) {
       window.location.href = item.url;
       window.location.href = item.url;
     },
     },
-    checkDate(dateStr){
+    checkDate(dateStr) {
       let dayjs = this.$helpers.dayjs;
       let dayjs = this.$helpers.dayjs;
-      let nowDate = new Date().getTime()
-      return nowDate -  dayjs(dateStr).valueOf() <0
-    }
+      let nowDate = new Date().getTime();
+      return nowDate - dayjs(dateStr).valueOf() < 0;
+    },
   },
   },
 };
 };
 </script>
 </script>
@@ -1182,4 +1294,28 @@ export default {
 .red {
 .red {
   color: red;
   color: red;
 }
 }
+.demo-table-expand {
+  font-size: 0;
+}
+.demo-table-expand label {
+  width: 150px;
+  color: #99a9bf;
+}
+.demo-table-expand .el-form-item {
+  margin-right: 0;
+  margin-bottom: 0;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  padding-right: 10px;
+}
+/deep/.el-table__expanded-cell[class*="cell"] {
+  padding: 20px 0 20px 110px;
+}
+.schoolWrap {
+  // width: calc(100% - 75px) !important;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
 </style>
 </style>

+ 4 - 6
src/views/teamBuild/signupList.vue

@@ -46,23 +46,21 @@
             v-permission="'musicGroup/extensionApplyExpireDate'"
             v-permission="'musicGroup/extensionApplyExpireDate'"
             @click="extendTime(false)"
             @click="extendTime(false)"
             v-show="
             v-show="
-              status == 'PAY' ||
               status == 'APPLY' ||
               status == 'APPLY' ||
+              status == 'PAY' ||
               status == 'PROGRESS' ||
               status == 'PROGRESS' ||
               status == 'PREPARE'
               status == 'PREPARE'
             "
             "
           >
           >
-            延长报名
+            延长缴费
           </div>
           </div>
+
           <div
           <div
             class="newBand"
             class="newBand"
             v-permission="'musicGroup/extensionPayment'"
             v-permission="'musicGroup/extensionPayment'"
             @click="extendTime(true)"
             @click="extendTime(true)"
             v-show="
             v-show="
-              status == 'APPLY' ||
-              status == 'PAY' ||
-              status == 'PROGRESS' ||
-              status == 'PREPARE'
+               status == 'APPLY' || status == 'PAY' || status == 'PROGRESS' || status == 'PREPARE'
             "
             "
           >
           >
             延长缴费
             延长缴费

+ 7 - 0
src/views/teamDetail/api.js

@@ -23,3 +23,10 @@ export const queryStudentSubTotalCourseTimes = data => request2({
   requestType: 'form'
   requestType: 'form'
 })
 })
 
 
+// 新增会员试用
+export const updateMemberExperience = data => request2({
+  url: '/api-web/studentManage/updateMemberExperience',
+  data,
+  method: 'post',
+  requestType: 'form'
+})

+ 111 - 0
src/views/teamDetail/components/modals/addTryList.vue

@@ -0,0 +1,111 @@
+<template>
+  <div>
+    <!-- <p class="title">已选择{{ multipleSelection.length }}名学员</p> -->
+    <el-form :model="tryForm" label-width="150px" ref="tryForm">
+      <el-form-item label="选择学员数">
+        <p>{{ multipleSelection.length }}名</p>
+      </el-form-item>
+      <el-form-item label="选择学员">
+        <p>{{ studendNames }}</p>
+      </el-form-item>
+      <el-form-item
+        label="会员等级"
+        prop="rankId"
+        :rules="[
+          { required: true, message: '请选择会员等级', trigger: 'blur' },
+        ]"
+      >
+        <el-select
+          placeholder="会员等级"
+          clearable
+          v-model.trim="tryForm.rankId"
+          style="width: 185px !important"
+        >
+          <el-option
+            :value="item.id"
+            :label="item.name"
+            v-for="item in memberRankList"
+            :key="item.id"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item
+        label="将会员试用期延长至"
+        prop="endTime"
+        :rules="[
+          { required: true, message: '请选择延长日期', trigger: 'blur' },
+        ]"
+      >
+        <el-date-picker
+          v-model.trim="tryForm.endTime"
+          align="right"
+          type="date"
+          placeholder="选择日期"
+          value-format="yyyy-MM-dd"
+          :picker-options="pickerOptions"
+        ></el-date-picker>
+      </el-form-item>
+    </el-form>
+  </div>
+</template>
+<script>
+import { updateMemberExperience } from "../../api";
+export default {
+  props: ["multipleSelection", "memberRankList"],
+  data() {
+    return {
+      tryForm: {
+        endTime: "",
+        rankId: "",
+      },
+      studendNames: "",
+      studentIds: "",
+      pickerOptions: {
+        firstDayOfWeek: 1,
+        disabledDate(time) {
+          return time.getTime() < new Date().getTime() - 86400000;
+        },
+      },
+    };
+  },
+  mounted() {
+    this.studendNames = this.multipleSelection
+      .map((stu) => {
+        return stu.realName;
+      })
+      .join(",");
+    this.studentIds = this.multipleSelection
+      .map((stu) => {
+        return stu.userId;
+      })
+      .join(",");
+    // console.log(this.multipleSelection);
+  },
+  methods: {
+    submit() {
+      this.$refs.tryForm.validate(async (res) => {
+        if (res) {
+          try {
+            const rulset = await updateMemberExperience({
+              ...this.tryForm,
+              studentIds: this.studentIds,
+            });
+            this.$message.success('新增时长成功')
+            this.$emit("close");
+            this.$emit("submited");
+          } catch (e) {
+            console.log(e);
+          }
+        }
+      });
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+.title {
+  margin-bottom: 30px;
+  font-size: 16px;
+  color: #000;
+}
+</style>

+ 186 - 49
src/views/teamDetail/components/studentList.vue

@@ -8,6 +8,13 @@
       >
       >
         新增学员
         新增学员
       </div>
       </div>
+      <div
+        class="newBand"
+        v-permission="'studentManage/updateMemberExperience'"
+        @click="addTryTime"
+      >
+        增加会员试用期
+      </div>
     </div>
     </div>
 
 
     <!-- 搜索类型 -->
     <!-- 搜索类型 -->
@@ -199,19 +206,82 @@
           width="55"
           width="55"
           :selectable="checkboxSelect"
           :selectable="checkboxSelect"
         ></el-table-column>
         ></el-table-column>
-        <el-table-column label="学员编号" width="120px;" prop="userId">
+        <el-table-column type="expand">
+          <template slot-scope="props">
+            <el-form label-position="left" class="demo-table-expand">
+              <el-row>
+                <el-col :span="6">
+                  <el-form-item label="入团年份">
+                    <span>{{
+                      props.row.registerTime | dayjsFormat("YYYY年")
+                    }}</span>
+                  </el-form-item></el-col
+                >
+                <el-col :span="6">
+                  <el-form-item label="性别">
+                    <span>{{ props.row.gender | sex }}</span>
+                  </el-form-item></el-col
+                >
+
+                <el-col :span="6">
+                  <el-form-item label="关心包">
+                    <span> {{ props.row.carePackage | studentPackage }} </span>
+                  </el-form-item></el-col
+                >
+                <el-col :span="6">
+                  <el-form-item label="报名专业">
+                    <copy-text>
+                      {{ props.row.regSubjectName }}
+                    </copy-text>
+                  </el-form-item></el-col
+                >
+              </el-row>
+              <el-row>
+                <el-col :span="6">
+                  <el-form-item label="是否激活">
+                    <span>{{ props.row.isActive ? "是" : "否" }}</span>
+                  </el-form-item></el-col
+                >
+                <el-col :span="6">
+                  <el-form-item label="VIP/网管是否有课">
+                    <span>{{ props.row.hasCourse ? "是" : "否" }}</span>
+                  </el-form-item></el-col
+                >
+                <el-col :span="6">
+                  <el-form-item label="加油包">
+                    <span>{{ props.row.comeOnPackage | studentPackage }}</span>
+                  </el-form-item></el-col
+                >
+                <el-col :span="6">
+                  <el-form-item label="退团原因">
+                    <overflow-text
+                      :text="props.row.quitReason"
+                    ></overflow-text> </el-form-item
+                ></el-col>
+              </el-row>
+            </el-form>
+          </template>
+        </el-table-column>
+        <el-table-column label="学员信息" width="120px;" prop="userId">
           <template slot-scope="scope">
           <template slot-scope="scope">
             <div
             <div
               @click="gotoStudent(scope.row.userId)"
               @click="gotoStudent(scope.row.userId)"
               style="color: #14928a; cursor: pointer"
               style="color: #14928a; cursor: pointer"
             >
             >
-              <copy-text>
-                {{ scope.row.userId }}
-              </copy-text>
+              <p>
+                <copy-text>
+                  {{ scope.row.userId }}
+                </copy-text>
+              </p>
+              <p>
+                <copy-text>
+                  {{ scope.row.realName }}
+                </copy-text>
+              </p>
             </div>
             </div>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-        <el-table-column label="学员姓名" width="120px;" prop="realName">
+        <!-- <el-table-column label="学员姓名" width="120px;" prop="realName">
           <template slot-scope="scope">
           <template slot-scope="scope">
             <div
             <div
               @click="gotoStudent(scope.row.realName)"
               @click="gotoStudent(scope.row.realName)"
@@ -222,8 +292,8 @@
               </copy-text>
               </copy-text>
             </div>
             </div>
           </template>
           </template>
-        </el-table-column>
-        <el-table-column
+        </el-table-column> -->
+        <!-- <el-table-column
           align="center"
           align="center"
           prop="gender"
           prop="gender"
           width="50px;"
           width="50px;"
@@ -232,7 +302,7 @@
           <template slot-scope="scope">
           <template slot-scope="scope">
             <div>{{ scope.row.gender | sex }}</div>
             <div>{{ scope.row.gender | sex }}</div>
           </template>
           </template>
-        </el-table-column>
+        </el-table-column> -->
         <el-table-column align="center" prop="phone" label="联系电话">
         <el-table-column align="center" prop="phone" label="联系电话">
           <template slot-scope="scope">
           <template slot-scope="scope">
             <copy-text>
             <copy-text>
@@ -240,23 +310,23 @@
             </copy-text>
             </copy-text>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-        <el-table-column align="center" label="入团年份">
+        <!-- <el-table-column align="center" label="入团年份">
           <template slot-scope="scope">
           <template slot-scope="scope">
             <div>{{ scope.row.registerTime | dayjsFormat("YYYY年") }}</div>
             <div>{{ scope.row.registerTime | dayjsFormat("YYYY年") }}</div>
           </template>
           </template>
-        </el-table-column>
+        </el-table-column> -->
         <el-table-column align="center" label="年级班级">
         <el-table-column align="center" label="年级班级">
           <template slot-scope="scope">
           <template slot-scope="scope">
             <div>{{ scope.row.currentGrade + scope.row.currentClass }}</div>
             <div>{{ scope.row.currentGrade + scope.row.currentClass }}</div>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-        <el-table-column align="center" label="报名专业" prop="subjectName">
+        <!-- <el-table-column align="center" label="报名专业" prop="subjectName">
           <template slot-scope="scope">
           <template slot-scope="scope">
             <copy-text>
             <copy-text>
               {{ scope.row.regSubjectName }}
               {{ scope.row.regSubjectName }}
             </copy-text>
             </copy-text>
           </template>
           </template>
-        </el-table-column>
+        </el-table-column> -->
         <el-table-column align="center" label="入团专业" prop="subjectName">
         <el-table-column align="center" label="入团专业" prop="subjectName">
           <template slot-scope="scope">
           <template slot-scope="scope">
             <copy-text>
             <copy-text>
@@ -279,26 +349,26 @@
             <div>{{ scope.row.paymentStatus | paymentStatus }}</div>
             <div>{{ scope.row.paymentStatus | paymentStatus }}</div>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-        <el-table-column align="center" label="是否激活">
+        <!-- <el-table-column align="center" label="是否激活">
           <template slot-scope="scope">
           <template slot-scope="scope">
             <div>{{ scope.row.isActive ? "是" : "否" }}</div>
             <div>{{ scope.row.isActive ? "是" : "否" }}</div>
           </template>
           </template>
-        </el-table-column>
-        <el-table-column align="center" label="VIP/网管是否有课">
+        </el-table-column> -->
+        <!-- <el-table-column align="center" label="VIP/网管是否有课">
           <template slot-scope="scope">
           <template slot-scope="scope">
             <div>{{ scope.row.hasCourse ? "是" : "否" }}</div>
             <div>{{ scope.row.hasCourse ? "是" : "否" }}</div>
           </template>
           </template>
-        </el-table-column>
-        <el-table-column align="center" label="关心包">
+        </el-table-column> -->
+        <!-- <el-table-column align="center" label="关心包">
           <template slot-scope="scope">{{
           <template slot-scope="scope">{{
             scope.row.carePackage | studentPackage
             scope.row.carePackage | studentPackage
           }}</template>
           }}</template>
-        </el-table-column>
-        <el-table-column align="center" label="加油包">
+        </el-table-column> -->
+        <!-- <el-table-column align="center" label="加油包">
           <template slot-scope="scope">{{
           <template slot-scope="scope">{{
             scope.row.comeOnPackage | studentPackage
             scope.row.comeOnPackage | studentPackage
           }}</template>
           }}</template>
-        </el-table-column>
+        </el-table-column> -->
         <el-table-column align="center" label="欠费金额(元)">
         <el-table-column align="center" label="欠费金额(元)">
           <template slot-scope="scope">
           <template slot-scope="scope">
             <div :class="[scope.row.noPaymentAmount > 0 ? 'error' : null]">
             <div :class="[scope.row.noPaymentAmount > 0 ? 'error' : null]">
@@ -318,17 +388,52 @@
             </div>
             </div>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-        <el-table-column label="退团原因" align="center">
+        <!-- <el-table-column label="退团原因" align="center">
           <template slot-scope="scope">
           <template slot-scope="scope">
             <div>
             <div>
               <Tooltip :content="scope.row.quitReason" />
               <Tooltip :content="scope.row.quitReason" />
             </div>
             </div>
           </template>
           </template>
+        </el-table-column> -->
+        <el-table-column
+          label="下次续费时间(剩余天数)"
+          align="center"
+          width="120px;"
+        >
+          <template slot-scope="scope">
+            <div>
+              {{ scope.row.musicMembershipEndTime | dayjsFormat }}
+              <p class="error" v-if="scope.row.musicMembershipEndTime">
+                剩余{{ scope.row.musicMembershipDay }}天
+              </p>
+            </div>
+          </template>
         </el-table-column>
         </el-table-column>
-        <el-table-column label="乐团会员有效期" align="center" width="100px">
+        <el-table-column
+          label="会员试用结束日期(剩余天数)"
+          align="center"
+          width="120px;"
+        >
+          <template slot-scope="scope">
+            <div>
+              {{ scope.row.experienceMembershipEndTime | dayjsFormat }}
+              <p class="error" v-if="scope.row.experienceMembershipEndTime">
+                剩余{{ scope.row.experienceMembershipDay }}天
+              </p>
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column
+          label="会员截止时间(剩余天数)"
+          align="center"
+          width="120px;"
+        >
           <template slot-scope="scope">
           <template slot-scope="scope">
             <div>
             <div>
               {{ scope.row.membershipEndTime | dayjsFormat }}
               {{ scope.row.membershipEndTime | dayjsFormat }}
+              <p class="error" v-if="scope.row.membershipEndTime">
+                剩余{{ scope.row.membershipDay }}天
+              </p>
             </div>
             </div>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
@@ -339,12 +444,7 @@
             </div>
             </div>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-        <el-table-column
-          align="center"
-          fixed="right"
-          width="360px;"
-          label="操作"
-        >
+        <el-table-column align="center" width="180px;" label="操作">
           <template slot-scope="scope">
           <template slot-scope="scope">
             <div>
             <div>
               <el-button
               <el-button
@@ -727,14 +827,6 @@
       v-if="orderVisible"
       v-if="orderVisible"
     >
     >
       <el-form :model="orderForm" :inline="true">
       <el-form :model="orderForm" :inline="true">
-        <!--     name: '',
-        totalAmount: '',
-        subject: '',
-        subjectFee: '',
-        axe: '',
-        axePrice: '',
-        others: '',
-        othersPrice: '' -->
         <el-form-item label="学员姓名">
         <el-form-item label="学员姓名">
           <el-input v-model.trim="orderForm.name" disabled=""></el-input>
           <el-input v-model.trim="orderForm.name" disabled=""></el-input>
         </el-form-item>
         </el-form-item>
@@ -767,6 +859,24 @@
         >
         >
       </div>
       </div>
     </el-dialog>
     </el-dialog>
+    <el-dialog
+      title="新增会员试用期"
+      width="600px"
+      :visible.sync="addTryVisible"
+    >
+      <addTryList
+        ref="addTry"
+        v-if="addTryVisible"
+        :multipleSelection="multipleSelection"
+        :memberRankList="memberRankList"
+        @close="addTryVisible = false"
+        @submited="getList"
+      />
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="addTryVisible = false">取 消</el-button>
+        <el-button type="primary" @click="submitAddTryTime">确 定</el-button>
+      </div>
+    </el-dialog>
   </div>
   </div>
 </template>
 </template>
 <script>
 <script>
@@ -782,24 +892,13 @@ import {
   StudentFeeIsLock,
   StudentFeeIsLock,
   updateStudentFee,
   updateStudentFee,
   getMusicGroupGradeList,
   getMusicGroupGradeList,
-  getStudentList,
-  musicGroupOpenPay,
-  extensionPayment,
-  extensionApplyExpire,
-  getTeamBaseInfo,
-  getintoClass,
-  resetPlanNum,
-  openPayment,
-  musicGroupFound,
-  checkCanReg,
 } from "@/api/buildTeam";
 } from "@/api/buildTeam";
 import {
 import {
   addStudent,
   addStudent,
   getStudentClass,
   getStudentClass,
   getStudentInfoByPhone,
   getStudentInfoByPhone,
-  getStudentFeeDetail,
-  resetStudentSubject,
 } from "@/api/studentManager";
 } from "@/api/studentManager";
+import { getAllmemberRank } from "@/views/resetTeaming/api";
 import qrCode from "@/components/QrCode/index";
 import qrCode from "@/components/QrCode/index";
 import { getOrganizationCourseUnitPriceSettings } from "@/api/specialSetting";
 import { getOrganizationCourseUnitPriceSettings } from "@/api/specialSetting";
 import { visitChiose } from "@/utils/searchArray";
 import { visitChiose } from "@/utils/searchArray";
@@ -821,6 +920,7 @@ import changeVoice from "@/views/teamBuild/modals/change-voice";
 import visit from "@/views/withdrawal-application/modals/visit";
 import visit from "@/views/withdrawal-application/modals/visit";
 import mergeMusic from "@/views/teamBuild/components/merge-music";
 import mergeMusic from "@/views/teamBuild/components/merge-music";
 import quiteTeam from "@/views/teamDetail/components/modals/quite-team";
 import quiteTeam from "@/views/teamDetail/components/modals/quite-team";
+import addTryList from "@/views/teamDetail/components/modals/addTryList";
 export default {
 export default {
   name: "tstudentList",
   name: "tstudentList",
   data() {
   data() {
@@ -1007,6 +1107,8 @@ export default {
       multipleSelection: [],
       multipleSelection: [],
       isCanReg: false,
       isCanReg: false,
       organId: "",
       organId: "",
+      addTryVisible: false,
+      memberRankList: [],
     };
     };
   },
   },
   components: {
   components: {
@@ -1021,6 +1123,7 @@ export default {
     changeVoice,
     changeVoice,
     mergeMusic,
     mergeMusic,
     quiteTeam,
     quiteTeam,
+    addTryList,
   },
   },
   created() {},
   created() {},
   filters: {
   filters: {
@@ -1042,6 +1145,12 @@ export default {
       });
       });
       this.organizationCourseUnitPriceSettings = res.data.rows;
       this.organizationCourseUnitPriceSettings = res.data.rows;
     } catch (error) {}
     } catch (error) {}
+    try {
+      const res = await getAllmemberRank({ isDefault: 0 });
+      this.memberRankList = res.data;
+    } catch (e) {
+      console.log(e);
+    }
     this.init();
     this.init();
   },
   },
   methods: {
   methods: {
@@ -1705,7 +1814,7 @@ export default {
       this.multipleSelection = val;
       this.multipleSelection = val;
     },
     },
     checkboxSelect(row) {
     checkboxSelect(row) {
-      return row.paymentStatus == 0;
+      return row.studentStatus == "NORMAL";
     },
     },
     gotoStudent(search) {
     gotoStudent(search) {
       // this.$router.push({
       // this.$router.push({
@@ -1718,6 +1827,16 @@ export default {
         params: { search: search },
         params: { search: search },
       });
       });
     },
     },
+    addTryTime() {
+      if (this.multipleSelection.length > 0) {
+        this.addTryVisible = true;
+      } else {
+        this.$message.error("请至少选择一名学员");
+      }
+    },
+    submitAddTryTime() {
+      this.$refs.addTry.submit();
+    },
   },
   },
   watch: {
   watch: {
     createUserPayVisible(val) {
     createUserPayVisible(val) {
@@ -1919,4 +2038,22 @@ export default {
     margin-bottom: 10px;
     margin-bottom: 10px;
   }
   }
 }
 }
+.demo-table-expand {
+  font-size: 0;
+}
+.demo-table-expand label {
+  width: 150px;
+  color: #99a9bf;
+}
+.demo-table-expand .el-form-item {
+  margin-right: 0;
+  margin-bottom: 0;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  padding-right: 10px;
+}
+/deep/.el-table__expanded-cell[class*="cell"] {
+  padding: 20px 0 20px 110px;
+}
 </style>
 </style>

+ 43 - 30
src/views/withdrawal-application/modals/visit.vue

@@ -1,12 +1,19 @@
 <template>
 <template>
   <div>
   <div>
     <div class="visitBtnWrap">
     <div class="visitBtnWrap">
-      <auth auths='studentAttendance/findStudentAttendance'>
-          <el-button type="text" @click="recordVisible = true">学员考勤</el-button>
+      <auth auths="studentAttendance/findStudentAttendance">
+        <el-button type="text" @click="recordVisible = true"
+          >学员考勤</el-button
+        >
+      </auth>
+      <auth
+        :auths="[
+          'webCurseHomework/getStudentHomeWorks',
+          'extracurricularExercisesReply/queryPageList',
+        ]"
+      >
+        <el-button type="text" @click="workVisible = true">训练情况</el-button>
       </auth>
       </auth>
-       <auth :auths="['webCurseHomework/getStudentHomeWorks','extracurricularExercisesReply/queryPageList']">
-         <el-button type="text" @click="workVisible=true">训练情况</el-button>
-       </auth>
     </div>
     </div>
     <el-form
     <el-form
       :model="visitForm"
       :model="visitForm"
@@ -20,7 +27,7 @@
       </el-form-item>
       </el-form-item>
       <el-form-item label="回访类型" prop="visitType">
       <el-form-item label="回访类型" prop="visitType">
         <el-cascader
         <el-cascader
-          :disabled='isMainGo || !!useVisitType'
+          :disabled="isMainGo || !!useVisitType"
           expand-trigger="hover"
           expand-trigger="hover"
           clearable
           clearable
           style="width: 80% !important"
           style="width: 80% !important"
@@ -38,7 +45,7 @@
           style="width: 80% !important"
           style="width: 80% !important"
           placeholder="选择日期"
           placeholder="选择日期"
           value-format="yyyy-MM-dd"
           value-format="yyyy-MM-dd"
-           :picker-options="pickerOptions"
+          :picker-options="pickerOptions"
         ></el-date-picker>
         ></el-date-picker>
       </el-form-item>
       </el-form-item>
       <el-form-item label="学员情况" prop="overview">
       <el-form-item label="学员情况" prop="overview">
@@ -79,7 +86,7 @@
       append-to-body
       append-to-body
       v-if="recordVisible"
       v-if="recordVisible"
     >
     >
-    <record  :studentId="this.detail.userId"/>
+      <record :studentId="this.detail.userId" />
     </el-dialog>
     </el-dialog>
 
 
     <el-dialog
     <el-dialog
@@ -89,20 +96,20 @@
       :visible.sync="workVisible"
       :visible.sync="workVisible"
       append-to-body
       append-to-body
     >
     >
-    <studentWork :studentId="this.detail.userId"/>
+      <studentWork :studentId="this.detail.userId" />
     </el-dialog>
     </el-dialog>
   </div>
   </div>
 </template>
 </template>
 <script>
 <script>
 import cleanDeep from "clean-deep";
 import cleanDeep from "clean-deep";
-import { visitChiose,visitChiose1 } from "@/utils/searchArray";
+import { visitChiose, visitChiose1 } from "@/utils/searchArray";
 import { addVisit } from "@/views/returnVisitManager/api";
 import { addVisit } from "@/views/returnVisitManager/api";
-import record from './record'
-import studentWork from './studentWork'
+import record from "./record";
+import studentWork from "./studentWork";
 export default {
 export default {
   // useVisitType 自定义回访类型
   // useVisitType 自定义回访类型
-  props: ["detail", "username",'isMainGo', "useVisitType"],
-  components:{record,studentWork},
+  props: ["detail", "username", "isMainGo", "useVisitType"],
+  components: { record, studentWork },
   data() {
   data() {
     return {
     return {
       visitChiose,
       visitChiose,
@@ -123,9 +130,9 @@ export default {
         visitTime: [{ required: true, message: "请输入回访时间" }],
         visitTime: [{ required: true, message: "请输入回访时间" }],
         visitType: [{ required: true, message: "请选择回访类型" }],
         visitType: [{ required: true, message: "请选择回访类型" }],
       },
       },
-      recordVisible:false,
-      workVisible:false,
-        pickerOptions: {
+      recordVisible: false,
+      workVisible: false,
+      pickerOptions: {
         firstDayOfWeek: 1,
         firstDayOfWeek: 1,
         disabledDate(time) {
         disabledDate(time) {
           return time.getTime() > new Date().getTime();
           return time.getTime() > new Date().getTime();
@@ -133,24 +140,30 @@ export default {
       },
       },
     };
     };
   },
   },
-  mounted(){
-    if(this.isMainGo){
-      this.visitChiose = visitChiose1
-      this.$set(this.visitForm,'visitType',['常规回访','考勤申诉'])
-    } else if(this.useVisitType) {
-      this.visitChiose = visitChiose1
-      this.$set(this.visitForm,'visitType', this.useVisitType)
-    } else{
-      this.visitChiose = visitChiose
+  mounted() {
+    if (this.isMainGo) {
+      this.visitChiose = visitChiose1;
+      this.$set(this.visitForm, "visitType", ["常规回访", "考勤申诉"]);
+    } else if (this.useVisitType) {
+      this.visitChiose = visitChiose1;
+      this.$set(this.visitForm, "visitType", this.useVisitType);
+    } else {
+      this.visitChiose = visitChiose;
     }
     }
   },
   },
   computed: {
   computed: {
     userName() {
     userName() {
-      return this.username || this.detail.user?.username || this.detail.realName || this.detail.userName || this.detail.studentName
+      return (
+        this.username ||
+        this.detail.user?.username ||
+        this.detail.realName ||
+        this.detail.userName ||
+        this.detail.studentName
+      );
+    },
+    studentId() {
+      return this.detail.userId || this.detail.studentId;
     },
     },
-    studentId(){
-      return this.detail.userId || this.detail.studentId
-    }
   },
   },
   methods: {
   methods: {
     submitAddVisit() {
     submitAddVisit() {