Jelajahi Sumber

会员提交

1
mo 3 tahun lalu
induk
melakukan
80b38bb6bd

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

+ 29 - 23
src/views/main/cloudDate/modals/headers.vue

@@ -1,32 +1,35 @@
 <template>
-  <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 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'],
+  props: ["title", "hidenOrgan"],
   data() {
     return {
       organId: "",
@@ -39,6 +42,9 @@ export default {
 </script>
 
 <style lang="scss" scoped>
+.el-divider--horizontal{
+  margin-top:0!important
+}
 .titleWrap {
   display: flex;
   flex-direction: row;

+ 16 - 8
src/views/main/cloudDate/organDate.vue

@@ -91,11 +91,13 @@
             prop="studentId"
             label="付费会员占比"
           >
-                    <template slot="header" slot-scope="slot">
+            <template slot="header" slot-scope="slot">
               <div class="titleCell">
                 <span>付费会员占比</span>
                 <el-tooltip placement="top" popper-class="mTooltip">
-                  <div slot="content">该分部生效中、待生效付费会员占服务学员比例</div>
+                  <div slot="content">
+                    该分部生效中、待生效付费会员占服务学员比例
+                  </div>
                   <i
                     class="el-icon-question micon el-tooltip"
                     style="
@@ -109,11 +111,13 @@
               </div>
             </template>
           </el-table-column>
-          <el-table-column
-            align="center"
-            prop="studentId"
-            label="操作"
-          ></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
@@ -137,7 +141,7 @@ export default {
   },
   data() {
     return {
-      tableList: [],
+      tableList: [{}],
       rules: {
         // 分页规则
         limit: 10, // 限制显示条数
@@ -150,6 +154,10 @@ export default {
   mounted() {},
   methods: {
     getList() {},
+    gotoDetail(row) {
+      // 跳转到分部数据详情 row.organId
+      this.$router.push({name:'organDateDetail',params:{organId:1}})
+    },
   },
 };
 </script>

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

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

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

@@ -151,6 +151,51 @@
           :data="tableList"
           :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
         >
+          <el-table-column type="expand">
+            <template slot-scope="props">
+              <el-form label-position="left" inline class="demo-table-expand">
+                <el-form-item label="所属学校">
+                  <span>{{ cooperationOrganName }}</span>
+                </el-form-item>
+                <el-form-item label="指导老师">
+                  <span>{{ props.row.teacherName }}</span>
+                </el-form-item>
+                <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-form-item label="网管课剩余课时">
+                  <span>{{ props.row.noStartPracticeCourseNum }}</span>
+                </el-form-item>
+                <el-form-item label="vip课剩余课时">
+                  <span>{{ props.row.noStartVipCourseNum }}</span>
+                </el-form-item>
+                <el-form-item label="是否运营">
+                  <span>{{ props.row.operatingTag ? "是" : "否" }}</span>
+                </el-form-item>
+                <el-form-item label="课程余额(元)">
+                  <span>{{ props.row.courseBalance | moneyFormat }}</span>
+                </el-form-item>
+                <el-form-item label="账户余额(元)">
+                  <span>{{ props.row.balance | moneyFormat }}</span>
+                </el-form-item>
+                <el-form-item label="关心包">
+                  <span> {{ props.row.carePackage | studentPackage }} </span>
+                </el-form-item>
+                <el-form-item label="加油包">
+                  <span>{{ props.row.comeOnPackage | studentPackage }}</span>
+                </el-form-item>
+              </el-form>
+            </template>
+          </el-table-column>
           <el-table-column align="center" prop="organName" label="所属分部">
             <template slot-scope="scope">
               <copy-text>{{ scope.row.organName }}</copy-text>
@@ -188,17 +233,17 @@
             prop="subjectName"
             label="声部"
           ></el-table-column>
-          <el-table-column
+          <!-- <el-table-column
             align="center"
             prop="cooperationOrganName"
             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">
               <copy-text>{{ scope.row.teacherName }}</copy-text>
             </template>
-          </el-table-column>
+          </el-table-column> -->
           <!-- <el-table-column align="center" label="性别">
             <template slot-scope="scope"></template>
           </el-table-column> -->
@@ -208,7 +253,7 @@
             prop="leaveNum"
             label="本月请假次数"
           ></el-table-column> -->
-          <el-table-column align="center">
+          <!-- <el-table-column align="center">
             <template slot="header">
               <p style="position: relative">
                 是否激活
@@ -224,7 +269,7 @@
             <template slot-scope="scope">{{
               scope.row.isActive ? "是" : "否"
             }}</template>
-          </el-table-column>
+          </el-table-column> -->
           <el-table-column align="center" label="未上课时">
             <template slot-scope="scope">{{
               scope.row.hasCourse ? "有" : "无"
@@ -233,43 +278,72 @@
           <!-- <el-table-column align="center" label="预约网管课">
             <template slot-scope="scope">{{ scope.row.isMake ? '是' : '否' }}</template>
           </el-table-column> -->
-          <el-table-column align="center" label="网管课剩余课时">
+          <!-- <el-table-column align="center" label="网管课剩余课时">
             <template slot-scope="scope">{{
               scope.row.noStartPracticeCourseNum
             }}</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">{{
               scope.row.noStartVipCourseNum
             }}</template>
-          </el-table-column>
-          <el-table-column align="center" label="是否运营">
+          </el-table-column> -->
+          <!-- <el-table-column align="center" label="是否运营">
             <template slot-scope="scope">{{
               scope.row.operatingTag ? "是" : "否"
             }}</template>
-          </el-table-column>
+          </el-table-column> -->
           <el-table-column align="center" label="是否服务">
             <template slot-scope="scope">{{
               scope.row.serviceTag ? "是" : "否"
             }}</template>
           </el-table-column>
-                   <el-table-column
+          <el-table-column
             align="center"
             width="120px"
             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 align="center" label="是否是新用户">
             <template slot="header">
@@ -290,7 +364,7 @@
               {{ scope.row.isNewUser ? "是" : "否" }}
             </template>
           </el-table-column>
-          <el-table-column
+          <!-- <el-table-column
             align="center"
             prop="courseBalance"
             label="课程余额(元)"
@@ -300,15 +374,15 @@
                 {{ scope.row.courseBalance | moneyFormat }}
               </div>
             </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">
               <div>
                 {{ scope.row.balance | moneyFormat }}
               </div>
             </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">{{
               scope.row.carePackage | studentPackage
             }}</template>
@@ -317,13 +391,8 @@
             <template slot-scope="scope">{{
               scope.row.comeOnPackage | studentPackage
             }}</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">
               <router-link
                 v-permission="'/studentDetail'"
@@ -1152,11 +1221,11 @@ export default {
     onDownloadProtocol(item) {
       window.location.href = item.url;
     },
-    checkDate(dateStr){
+    checkDate(dateStr) {
       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>
@@ -1182,4 +1251,19 @@ export default {
 .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;
+  width: 400px;
+}
+/deep/.el-table__expanded-cell[class*="cell"] {
+  padding: 20px 110px;
+}
 </style>

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

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

+ 24 - 8
src/views/teamDetail/components/modals/addTryList.vue

@@ -10,7 +10,7 @@
       </el-form-item>
       <el-form-item
         label="会员等级"
-        prop="memberRankSettingId"
+        prop="rankId"
         :rules="[
           { required: true, message: '请选择会员等级', trigger: 'blur' },
         ]"
@@ -18,7 +18,7 @@
         <el-select
           placeholder="会员等级"
           clearable
-          v-model.trim="tryForm.memberRankSettingId"
+          v-model.trim="tryForm.rankId"
           style="width: 185px !important"
         >
           <el-option
@@ -31,13 +31,13 @@
       </el-form-item>
       <el-form-item
         label="将会员试用期延长至"
-        prop="tryTime"
+        prop="endTime"
         :rules="[
           { required: true, message: '请选择延长日期', trigger: 'blur' },
         ]"
       >
         <el-date-picker
-          v-model.trim="tryForm.tryTime"
+          v-model.trim="tryForm.endTime"
           align="right"
           type="date"
           placeholder="选择日期"
@@ -49,15 +49,17 @@
   </div>
 </template>
 <script>
+import { updateMemberExperience } from "../../api";
 export default {
   props: ["multipleSelection", "memberRankList"],
   data() {
     return {
       tryForm: {
-        tryTime: "",
-        memberRankSettingId: "",
+        endTime: "",
+        rankId: "",
       },
       studendNames: "",
+      studentIds: "",
       pickerOptions: {
         firstDayOfWeek: 1,
         disabledDate(time) {
@@ -72,14 +74,28 @@ export default {
         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) {
-          this.$emit("close");
-          this.$emit("submited");
+          try {
+            const rulset = await updateMemberExperience({
+              ...this.tryForm,
+              studentIds: this.studentIds,
+            });
+            this.$message.success('新增时长成功')
+            this.$emit("close");
+            this.$emit("submited");
+          } catch (e) {
+            console.log(e);
+          }
         }
       });
     },

+ 120 - 36
src/views/teamDetail/components/studentList.vue

@@ -10,7 +10,7 @@
       </div>
       <div
         class="newBand"
-        v-permission="'studentRegistration/insertStudent'"
+        v-permission="'studentManage/updateMemberExperience'"
         @click="addTryTime"
       >
         增加会员试用期
@@ -206,19 +206,60 @@
           width="55"
           :selectable="checkboxSelect"
         ></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" inline class="demo-table-expand">
+              <el-form-item label="性别">
+                <span>{{ props.row.gender | sex }}</span>
+              </el-form-item>
+              <el-form-item label="入团年份">
+                <span>{{
+                  props.row.registerTime | dayjsFormat("YYYY年")
+                }}</span>
+              </el-form-item>
+              <el-form-item label="报名专业">
+                <copy-text>
+                  {{ props.row.regSubjectName }}
+                </copy-text>
+              </el-form-item>
+              <el-form-item label="是否激活">
+                <span>{{ props.row.isActive ? "是" : "否" }}</span>
+              </el-form-item>
+              <el-form-item label="关心包">
+                <span> {{ props.row.carePackage | studentPackage }} </span>
+              </el-form-item>
+              <el-form-item label="加油包">
+                <span>{{ props.row.comeOnPackage | studentPackage }}</span>
+              </el-form-item>
+              <el-form-item label="VIP/网管是否有课">
+                <span>{{ props.row.hasCourse ? "是" : "否" }}</span>
+              </el-form-item>
+              <el-form-item label="退团原因">
+                <Tooltip :content="props.row.quitReason" />
+              </el-form-item>
+            </el-form>
+          </template>
+        </el-table-column>
+        <el-table-column label="学员信息" width="120px;" prop="userId">
           <template slot-scope="scope">
             <div
               @click="gotoStudent(scope.row.userId)"
               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>
           </template>
         </el-table-column>
-        <el-table-column label="学员姓名" width="120px;" prop="realName">
+        <!-- <el-table-column label="学员姓名" width="120px;" prop="realName">
           <template slot-scope="scope">
             <div
               @click="gotoStudent(scope.row.realName)"
@@ -229,8 +270,8 @@
               </copy-text>
             </div>
           </template>
-        </el-table-column>
-        <el-table-column
+        </el-table-column> -->
+        <!-- <el-table-column
           align="center"
           prop="gender"
           width="50px;"
@@ -239,7 +280,7 @@
           <template slot-scope="scope">
             <div>{{ scope.row.gender | sex }}</div>
           </template>
-        </el-table-column>
+        </el-table-column> -->
         <el-table-column align="center" prop="phone" label="联系电话">
           <template slot-scope="scope">
             <copy-text>
@@ -247,23 +288,23 @@
             </copy-text>
           </template>
         </el-table-column>
-        <el-table-column align="center" label="入团年份">
+        <!-- <el-table-column align="center" label="入团年份">
           <template slot-scope="scope">
             <div>{{ scope.row.registerTime | dayjsFormat("YYYY年") }}</div>
           </template>
-        </el-table-column>
+        </el-table-column> -->
         <el-table-column align="center" label="年级班级">
           <template slot-scope="scope">
             <div>{{ scope.row.currentGrade + scope.row.currentClass }}</div>
           </template>
         </el-table-column>
-        <el-table-column align="center" label="报名专业" prop="subjectName">
+        <!-- <el-table-column align="center" label="报名专业" prop="subjectName">
           <template slot-scope="scope">
             <copy-text>
               {{ scope.row.regSubjectName }}
             </copy-text>
           </template>
-        </el-table-column>
+        </el-table-column> -->
         <el-table-column align="center" label="入团专业" prop="subjectName">
           <template slot-scope="scope">
             <copy-text>
@@ -286,26 +327,26 @@
             <div>{{ scope.row.paymentStatus | paymentStatus }}</div>
           </template>
         </el-table-column>
-        <el-table-column align="center" label="是否激活">
+        <!-- <el-table-column align="center" label="是否激活">
           <template slot-scope="scope">
             <div>{{ scope.row.isActive ? "是" : "否" }}</div>
           </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">
             <div>{{ scope.row.hasCourse ? "是" : "否" }}</div>
           </template>
-        </el-table-column>
-        <el-table-column align="center" label="关心包">
+        </el-table-column> -->
+        <!-- <el-table-column align="center" label="关心包">
           <template slot-scope="scope">{{
             scope.row.carePackage | studentPackage
           }}</template>
-        </el-table-column>
-        <el-table-column align="center" label="加油包">
+        </el-table-column> -->
+        <!-- <el-table-column align="center" label="加油包">
           <template slot-scope="scope">{{
             scope.row.comeOnPackage | studentPackage
           }}</template>
-        </el-table-column>
+        </el-table-column> -->
         <el-table-column align="center" label="欠费金额(元)">
           <template slot-scope="scope">
             <div :class="[scope.row.noPaymentAmount > 0 ? 'error' : null]">
@@ -325,17 +366,52 @@
             </div>
           </template>
         </el-table-column>
-        <el-table-column label="退团原因" align="center">
+        <!-- <el-table-column label="退团原因" align="center">
           <template slot-scope="scope">
             <div>
               <Tooltip :content="scope.row.quitReason" />
             </div>
           </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 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">
             <div>
               {{ scope.row.membershipEndTime | dayjsFormat }}
+              <p class="error" v-if="scope.row.membershipEndTime">
+                剩余{{ scope.row.membershipDay }}天
+              </p>
             </div>
           </template>
         </el-table-column>
@@ -346,12 +422,7 @@
             </div>
           </template>
         </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">
             <div>
               <el-button
@@ -744,7 +815,7 @@
       :visible.sync="addTryVisible"
     >
       <addTryList
-      ref="addTry"
+        ref="addTry"
         v-if="addTryVisible"
         :multipleSelection="multipleSelection"
         :memberRankList="memberRankList"
@@ -753,9 +824,7 @@
       />
       <div slot="footer" class="dialog-footer">
         <el-button @click="addTryVisible = false">取 消</el-button>
-        <el-button type="primary" @click="submitAddTryTime"
-          >确 定</el-button
-        >
+        <el-button type="primary" @click="submitAddTryTime">确 定</el-button>
       </div>
     </el-dialog>
   </div>
@@ -1715,9 +1784,9 @@ export default {
         this.$message.error("请至少选择一名学员");
       }
     },
-    submitAddTryTime(){
-      this.$refs.addTry.submit()
-    }
+    submitAddTryTime() {
+      this.$refs.addTry.submit();
+    },
   },
   watch: {
     createUserPayVisible(val) {
@@ -1919,4 +1988,19 @@ export default {
     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;
+  width: 400px;
+}
+/deep/.el-table__expanded-cell[class*="cell"] {
+  padding: 20px 110px;
+}
 </style>

+ 2 - 2
vue.config.js

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