Browse Source

添加显示

lex 1 year ago
parent
commit
7f89a548f2

+ 49 - 11
src/views/afterSchoolManager/components/examinationDetail.vue

@@ -24,6 +24,36 @@
       >
       >
         <el-table-column type="expand">
         <el-table-column type="expand">
           <template slot-scope="props">
           <template slot-scope="props">
+            <!-- <el-table
+              style="width: 100%;padding-left: 48px"
+              :show-header="false"
+              :data="props.row.detailDtos"
+            >
+              <el-table-column
+                label="名称"
+                prop="musicScoreName"
+              ></el-table-column>
+              <el-table-column label="类型" prop="type"
+                ><template slot-scope="scope">{{
+                  scope.row.homeworkType === "MUSIC_SCORE" ? "曲目" : "视频"
+                }}</template>
+              </el-table-column>
+              <el-table-column label="速度" prop="trainingSpeed">
+                <template slot-scope="scope">
+                  <span v-if="scope.row.homeworkType === 'MUSIC_SCORE'">
+                    {{ scope.row.trainingSpeed }}速度
+                  </span>
+                  <span v-else>--</span>
+                </template>
+              </el-table-column>
+              <el-table-column prop="times" label="次数/总计">
+                <template slot-scope="scope"
+                  >{{ scope.row.trainingTimes }}/{{
+                    scope.row.times
+                  }}次</template
+                >
+              </el-table-column>
+            </el-table> -->
             <el-row
             <el-row
               :gutter="20"
               :gutter="20"
               v-for="(item, index) in props.row.detailDtos"
               v-for="(item, index) in props.row.detailDtos"
@@ -39,17 +69,22 @@
               >
               >
               <el-col :span="6"
               <el-col :span="6"
                 ><div class="rowlast">
                 ><div class="rowlast">
-                  <span :class="item.trainingScore >= item.standardScore ? '' : 'red'">{{
-                    item.trainingScore
-                  }}</span>
+                  <span
+                    :class="
+                      item.trainingScore >= item.standardScore ? '' : 'red'
+                    "
+                    >{{ item.trainingScore }}</span
+                  >
                   / {{ item.standardScore }} 分
                   / {{ item.standardScore }} 分
                 </div></el-col
                 </div></el-col
               >
               >
             </el-row>
             </el-row>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-        <el-table-column prop="username" align="left" label="学生姓名"> </el-table-column>
-        <el-table-column prop="phone" align="left" label="手机号"> </el-table-column>
+        <el-table-column prop="username" align="left" label="学生姓名">
+        </el-table-column>
+        <el-table-column prop="phone" align="left" label="手机号">
+        </el-table-column>
         <el-table-column prop="subjectName" align="left" label="声部名称">
         <el-table-column prop="subjectName" align="left" label="声部名称">
         </el-table-column>
         </el-table-column>
         <el-table-column prop="trainingTime" align="left" label="完成时间">
         <el-table-column prop="trainingTime" align="left" label="完成时间">
@@ -67,14 +102,17 @@
   </div>
   </div>
 </template>
 </template>
 <script>
 <script>
-import { getLessonExaminationStudent, getExaminationSubjectPublic } from "../api";
+import {
+  getLessonExaminationStudent,
+  getExaminationSubjectPublic
+} from "../api";
 export default {
 export default {
   props: ["courseScheduleId", "type"],
   props: ["courseScheduleId", "type"],
   data() {
   data() {
     return {
     return {
       subjectId: [],
       subjectId: [],
       list: [],
       list: [],
-      subjectList: [],
+      subjectList: []
     };
     };
   },
   },
   mounted() {
   mounted() {
@@ -90,7 +128,7 @@ export default {
       try {
       try {
         const res = await getLessonExaminationStudent({
         const res = await getLessonExaminationStudent({
           lessonExaminationId: this.courseScheduleId,
           lessonExaminationId: this.courseScheduleId,
-          subjectId: this.subjectId,
+          subjectId: this.subjectId
         });
         });
         this.list = res.data;
         this.list = res.data;
       } catch (e) {
       } catch (e) {
@@ -100,7 +138,7 @@ export default {
     async getPublicSubject() {
     async getPublicSubject() {
       try {
       try {
         const res = await getExaminationSubjectPublic({
         const res = await getExaminationSubjectPublic({
-          lessonExaminationId: this.courseScheduleId,
+          lessonExaminationId: this.courseScheduleId
         });
         });
         this.subjectList = res.data;
         this.subjectList = res.data;
       } catch (e) {
       } catch (e) {
@@ -112,8 +150,8 @@ export default {
         this.subjectId.shift();
         this.subjectId.shift();
       }
       }
       this.getStudentList();
       this.getStudentList();
-    },
-  },
+    }
+  }
 };
 };
 </script>
 </script>
 
 

+ 55 - 14
src/views/afterSchoolManager/components/studentWroks.vue

@@ -24,32 +24,73 @@
       >
       >
         <el-table-column type="expand">
         <el-table-column type="expand">
           <template slot-scope="props">
           <template slot-scope="props">
-            <el-row
+            <el-table
+              style="width: 100%;padding-left: 48px"
+              :show-header="false"
+              :data="props.row.studentLessonTrainingDetail"
+            >
+              <el-table-column
+                label="名称"
+                prop="musicScoreName"
+              ></el-table-column>
+              <el-table-column label="类型" prop="type"
+                ><template slot-scope="scope">{{
+                  scope.row.homeworkType === "MUSIC_SCORE" ? "曲目" : "视频"
+                }}</template>
+              </el-table-column>
+              <el-table-column label="速度" prop="trainingSpeed">
+                <template slot-scope="scope">
+                  <span v-if="scope.row.homeworkType === 'MUSIC_SCORE'">
+                    {{ scope.row.trainingSpeed }}速度
+                  </span>
+                  <span v-else>--</span>
+                </template>
+              </el-table-column>
+              <el-table-column prop="times" label="次数/总计">
+                <template slot-scope="scope"
+                  >{{ scope.row.trainingTimes }}/{{
+                    scope.row.times
+                  }}次</template
+                >
+              </el-table-column>
+            </el-table>
+            <!-- <el-row
               :gutter="20"
               :gutter="20"
               v-for="(item, index) in props.row.studentLessonTrainingDetail"
               v-for="(item, index) in props.row.studentLessonTrainingDetail"
               :key="index"
               :key="index"
             >
             >
-              <el-col :span="12"
+              <el-col :span="6"
                 ><div class="rowFirst">{{ item.musicScoreName }}</div></el-col
                 ><div class="rowFirst">{{ item.musicScoreName }}</div></el-col
               >
               >
               <el-col :span="6"
               <el-col :span="6"
+                ><div class="rowFirst">{{ scope.row.homeworkType === "MUSIC_SCORE" ? "曲目" : "视频" }}</div></el-col
+              >
+              <el-col :span="6"
                 ><div class="rowSecond">
                 ><div class="rowSecond">
-                  <span>{{ item.trainingSpeed }}</span> 速度
+
+                  <span v-if="item.homeworkType === 'MUSIC_SCORE'">
+              <span>{{ item.trainingSpeed }}</span> 速度
+            </span>
+            <span v-else>--</span>
+
                 </div></el-col
                 </div></el-col
               >
               >
               <el-col :span="6"
               <el-col :span="6"
                 ><div class="rowlast">
                 ><div class="rowlast">
-                  <span :class="item.trainingTimes >= item.times ? '' : 'red'">{{
-                    item.trainingTimes
-                  }}</span>
+                  <span
+                    :class="item.trainingTimes >= item.times ? '' : 'red'"
+                    >{{ item.trainingTimes }}</span
+                  >
                   / {{ item.times }} 次
                   / {{ item.times }} 次
                 </div></el-col
                 </div></el-col
               >
               >
-            </el-row>
+            </el-row> -->
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-        <el-table-column prop="userName" align="left" label="学生姓名"> </el-table-column>
-        <el-table-column prop="phone" align="left" label="手机号"> </el-table-column>
+        <el-table-column prop="userName" align="left" label="学生姓名">
+        </el-table-column>
+        <el-table-column prop="phone" align="left" label="手机号">
+        </el-table-column>
         <el-table-column prop="subjectName" align="left" label="声部名称">
         <el-table-column prop="subjectName" align="left" label="声部名称">
         </el-table-column>
         </el-table-column>
         <el-table-column prop="submitTime" align="left" label="完成时间">
         <el-table-column prop="submitTime" align="left" label="完成时间">
@@ -74,7 +115,7 @@ export default {
     return {
     return {
       subjectId: [],
       subjectId: [],
       list: [],
       list: [],
-      subjectList: [],
+      subjectList: []
     };
     };
   },
   },
   mounted() {
   mounted() {
@@ -92,7 +133,7 @@ export default {
         const res = await getHomeworkStudent({
         const res = await getHomeworkStudent({
           courseScheduleId: this.courseScheduleId,
           courseScheduleId: this.courseScheduleId,
           type: this.type,
           type: this.type,
-          subjectId: this.subjectId[0] ? this.subjectId[0] : "",
+          subjectId: this.subjectId[0] ? this.subjectId[0] : ""
         });
         });
         this.list = res.data;
         this.list = res.data;
       } catch (e) {
       } catch (e) {
@@ -103,7 +144,7 @@ export default {
       try {
       try {
         const res = await getHomeworkSubjectPublic({
         const res = await getHomeworkSubjectPublic({
           courseScheduleId: this.courseScheduleId,
           courseScheduleId: this.courseScheduleId,
-          type: this.type,
+          type: this.type
         });
         });
         this.subjectList = res.data;
         this.subjectList = res.data;
       } catch (e) {
       } catch (e) {
@@ -116,8 +157,8 @@ export default {
         this.subjectId.shift();
         this.subjectId.shift();
       }
       }
       this.getStudentList();
       this.getStudentList();
-    },
-  },
+    }
+  }
 };
 };
 </script>
 </script>
 
 

+ 16 - 8
src/views/afterSchoolManager/components/textConment.vue

@@ -23,19 +23,27 @@
 
 
       <el-table
       <el-table
         :data="item.trainingDetailList"
         :data="item.trainingDetailList"
-        :show-header="false"
+        :show-header="true"
         style="width: 100%;margin-bottom: 12px;"
         style="width: 100%;margin-bottom: 12px;"
         :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
         :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
       >
       >
-        <el-table-column prop="musicScoreName"></el-table-column>
-        <el-table-column prop="trainingSpeed">
-          <template slot-scope="scope"
-            >{{ scope.row.trainingSpeed }}速度</template
-          >
+        <el-table-column label="名称" prop="musicScoreName"></el-table-column>
+        <el-table-column label="类型" prop="type"
+          ><template slot-scope="scope">{{
+            scope.row.homeworkType === "MUSIC_SCORE" ? "曲目" : "视频"
+          }}</template>
+        </el-table-column>
+        <el-table-column label="速度" prop="trainingSpeed">
+          <template slot-scope="scope">
+            <span v-if="scope.row.homeworkType === 'MUSIC_SCORE'">
+              {{ scope.row.trainingSpeed }}速度
+            </span>
+            <span v-else>--</span>
+          </template>
         </el-table-column>
         </el-table-column>
-        <el-table-column prop="times">
+        <el-table-column prop="times" label="次数/总计">
           <template slot-scope="scope"
           <template slot-scope="scope"
-            >{{ scope.row.times }}次</template
+            >{{ scope.row.trainingTimes }}/{{ scope.row.times }}次</template
           >
           >
         </el-table-column>
         </el-table-column>
       </el-table>
       </el-table>

+ 31 - 2
src/views/attendanceManager/attendanceList/components/studentWroks.vue

@@ -22,7 +22,36 @@
     >
     >
       <el-table-column type="expand">
       <el-table-column type="expand">
         <template slot-scope="props">
         <template slot-scope="props">
-          <el-row
+          <el-table
+            style="width: 100%;padding-left: 48px"
+            :show-header="false"
+            :data="props.row.studentLessonTrainingDetail"
+            :border="false"
+          >
+            <el-table-column
+              label="名称"
+              prop="musicScoreName"
+            ></el-table-column>
+            <el-table-column label="类型" prop="type"
+              ><template slot-scope="scope">{{
+                scope.row.homeworkType === "MUSIC_SCORE" ? "曲目" : "视频"
+              }}</template>
+            </el-table-column>
+            <el-table-column label="速度" prop="trainingSpeed">
+              <template slot-scope="scope">
+                <span v-if="scope.row.homeworkType === 'MUSIC_SCORE'">
+                  {{ scope.row.trainingSpeed }}速度
+                </span>
+                <span v-else>--</span>
+              </template>
+            </el-table-column>
+            <el-table-column prop="times" label="次数/总计">
+              <template slot-scope="scope"
+                >{{ scope.row.trainingTimes }}/{{ scope.row.times }}次</template
+              >
+            </el-table-column>
+          </el-table>
+          <!-- <el-row
             :gutter="20"
             :gutter="20"
             v-for="(item, index) in props.row.studentLessonTrainingDetail"
             v-for="(item, index) in props.row.studentLessonTrainingDetail"
             :key="index"
             :key="index"
@@ -43,7 +72,7 @@
                 / {{ item.times }} 次
                 / {{ item.times }} 次
               </div></el-col
               </div></el-col
             >
             >
-          </el-row>
+          </el-row> -->
         </template>
         </template>
       </el-table-column>
       </el-table-column>
       <el-table-column prop="userName" align="left" label="学生姓名">
       <el-table-column prop="userName" align="left" label="学生姓名">

+ 27 - 1
src/views/attendanceManager/attendanceList/components/textConment.vue

@@ -23,6 +23,32 @@
 
 
       <el-table
       <el-table
         :data="item.trainingDetailList"
         :data="item.trainingDetailList"
+        :show-header="true"
+        style="width: 100%;margin-bottom: 12px;"
+        :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+      >
+        <el-table-column label="名称" prop="musicScoreName"></el-table-column>
+        <el-table-column label="类型" prop="type"
+          ><template slot-scope="scope">{{
+            scope.row.homeworkType === "MUSIC_SCORE" ? "曲目" : "视频"
+          }}</template>
+        </el-table-column>
+        <el-table-column label="速度" prop="trainingSpeed">
+          <template slot-scope="scope">
+            <span v-if="scope.row.homeworkType === 'MUSIC_SCORE'">
+              {{ scope.row.trainingSpeed }}速度
+            </span>
+            <span v-else>--</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="times" label="次数/总计">
+          <template slot-scope="scope"
+            >{{ scope.row.trainingTimes }}/{{ scope.row.times }}次</template
+          >
+        </el-table-column>
+      </el-table>
+      <!-- <el-table
+        :data="item.trainingDetailList"
         :show-header="false"
         :show-header="false"
         style="width: 100%;margin-bottom: 12px;"
         style="width: 100%;margin-bottom: 12px;"
         :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
         :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
@@ -38,7 +64,7 @@
             >{{ scope.row.times }}次</template
             >{{ scope.row.times }}次</template
           >
           >
         </el-table-column>
         </el-table-column>
-      </el-table>
+      </el-table> -->
     </div>
     </div>
   </div>
   </div>
 </template>
 </template>

+ 20 - 0
src/views/categroyManager/generalSettings/overallManager.vue

@@ -381,6 +381,26 @@
             </el-select>
             </el-select>
           </el-form-item>
           </el-form-item>
         </el-row>
         </el-row>
+        <el-row>
+          <el-form-item
+            prop="279"
+            :rules="[
+              {
+                required: false,
+                pattern: /^[1-9][0-9]*$/,
+                message: '请输入正确条数'
+              }
+            ]"
+          >
+            作业练习组内最多添加:
+            <el-input
+              style="width: 180px;margin: 0 5px;"
+              v-model="form['279']"
+              placeholder="请输入条数"
+            ></el-input>
+            条练习
+          </el-form-item>
+        </el-row>
       </el-form>
       </el-form>
       <!-- 列表 -->
       <!-- 列表 -->
       <!-- <el-row>
       <!-- <el-row>

+ 15 - 0
src/views/main/api.js

@@ -247,3 +247,18 @@ export const multiDataSourceHomeStatsSummerIncome = data =>
     method: "post",
     method: "post",
     data
     data
   });
   });
+
+// 列表
+export const api_studentCoursewarePlayRecordList = data =>
+  request2({
+    url: "/api-web/studentCoursewarePlayRecord/statList",
+    method: "post",
+    data
+  });
+// 详情
+export const api_studentCoursewarePlayRecordDetail = data =>
+  request2({
+    url: "/api-web/studentCoursewarePlayRecord/statDetailPage",
+    method: "post",
+    data
+  });

+ 0 - 428
src/views/main/coursewareDate/activeUserNum.vue

@@ -1,428 +0,0 @@
-<template>
-  <div>
-    <el-card>
-      <headers
-        title="活跃用户统计"
-        @changeOrgan="changeOrgan"
-        :special="true"
-      />
-      <div class="chioseBox">
-        <el-radio-group v-model="timers" @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="mdate"
-          type="daterange"
-          class="datePick"
-          style="width: 300px; padding: 0 10px"
-          range-separator="-"
-          start-placeholder="开始日期"
-          end-placeholder="结束日期"
-          value-format="yyyy-MM-dd"
-          format="yyyy-MM-dd"
-          @change="changeValue"
-          :picker-options="bigin()"
-        >
-        </el-date-picker>
-        <p>单位:</p>
-
-        <el-radio-group v-model="timer">
-          <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";
-import { getIndex } from "../api";
-import { getTimes } from "@/utils";
-import { descs, chioseNum } from "../constant";
-export default {
-  components: {
-    headers,
-    veLine,
-  },
-  data() {
-    return {
-      timer: "day", // 按天 按月
-      timers: "", // 本月 本年 去年
-      mdate: [],
-      data: [],
-      organId: "",
-    };
-  },
-  mounted() {
-    this.init();
-  },
-  computed: {
-    legend() {
-      return {
-        left: "10px",
-      };
-    },
-    items() {
-      let obj = {};
-      let arr = [
-        "MEMBER_STUDENT_NUM",
-        "CLOUD_STUDY_LIVELY_STUDENT_NUM",
-        "CLOUD_STUDY_DAY_USE_STUDENT_NUM",
-        "CLOUD_STUDY_NEW_STUDENT_NUM",
-      ];
-      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,
-            };
-          }
-          months[key][item.title] = row.percent;
-        }
-      }
-      return {
-        columns: ["日期", ...values.map((item) => item.title)],
-        rows: Object.values(months),
-      };
-    },
-    chartDataForMoth() {
-      const values = Object.values(this.items);
-      //   console.log(values)
-      // values['VIP_GROUP_COURSE'].forEach(item=>{
-      //     console.log(item.month)
-      //   })
-      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] &&
-              item.dataType == "CLOUD_STUDY_NEW_STUDENT_NUM"
-            ) {
-              months[key][item.title] += parseFloat(row.percent);
-            } else {
-              months[key][item.title] = row.percent;
-            }
-          }
-        }
-      }
-      // console.log(Object.values(months));
-      return {
-        columns: ["月份", ...values.map((item) => item.title)],
-        rows: Object.values(months),
-      };
-    },
-    dataEmpty() {
-      return !this.chartData.rows.length;
-    },
-    chartExtend() {
-      return {
-        series: {
-          type: "line",
-          smooth: false,
-        },
-        yAxis: {
-          //纵轴标尺固定
-          minInterval: 1,
-          type: "value",
-          scale: true,
-          min: 0,
-          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("");
-          },
-        },
-      };
-    },
-  },
-  methods: {
-    init() {
-      let nowTiem = this.$helpers.dayjs(new Date()).format("YYYY-MM-DD");
-
-      let startTime = this.$helpers
-        .dayjs(nowTiem)
-        .subtract(8, "day")
-        .format("YYYY-MM-DD");
-
-      let endTime = this.$helpers
-        .dayjs(nowTiem)
-        .subtract(1, "day")
-        .format("YYYY-MM-DD");
-      this.mdate = [startTime, endTime];
-      this.FetchDetail();
-    },
-    changeValue(date) {
-      // 请求更改数据
-      this.mdate = date;
-      this.isDayOrMoth(date);
-      console.log("调用", date);
-      this.FetchDetail();
-    },
-    async FetchDetail() {
-      this.loading = true;
-      let data = [];
-      try {
-        // const { dates, ...rest } = this.search;
-        //   ...rest,
-        const res = await getIndex({
-          ...getTimes(this.mdate, ["startDate", "endDate"]),
-          organId: this.organId,
-          dataTypes:
-            "MEMBER_STUDENT_NUM,CLOUD_STUDY_LIVELY_STUDENT_NUM,CLOUD_STUDY_DAY_USE_STUDENT_NUM,CLOUD_STUDY_NEW_STUDENT_NUM",
-        });
-        for (const item of res.data) {
-          data[item.dataType] = {
-            ...item,
-            desc: descs[item.dataType],
-          };
-        }
-        this.data = data;
-        // 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.data = data;
-      // this.$emit("resetDate", data);
-    },
-    changeQuick(val) {
-      let startDate;
-      let endDate;
-      if (val == "month") {
-        // 获取本月的第一天 获取本月的今天
-        let nowDate =  this.$helpers.dayjs(new Date()).get("date");
-
-        if (nowDate == 1) {
-          startDate =  this.$helpers.dayjs()
-            .add(-1, "month")
-            .startOf("month")
-            .format("YYYY-MM-DD");
-          endDate =  this.$helpers.dayjs(new Date()).subtract(1, "day").format("YYYY-MM-DD");
-        } else {
-          startDate =  this.$helpers.dayjs(new Date()).set("date", 1).format("YYYY-MM-DD");
-          endDate =  this.$helpers.dayjs(new Date()).subtract(1, "day").format("YYYY-MM-DD");
-        }
-        this.mdate = [startDate, endDate];
-        this.isDayOrMoth(this.mdate);
-        this.FetchDetail();
-        // this.submitDate(this.date);
-      } else if (val == "year") {
-        let nowDate = this.$helpers.dayjs(new Date()).get("date");
-        let nowMonth = this.$helpers.dayjs(new Date()).get("month") + 1;
-        if (nowDate == 1 && nowMonth == 1) {
-          startDate = this.$helpers
-            .dayjs(new Date())
-            .add(-1, "year")
-            .set("month", 0)
-            .set("date", 1)
-            .format("YYYY-MM-DD");
-          endDate = this.$helpers
-            .dayjs(new Date())
-            .subtract(1, "day")
-            .format("YYYY-MM-DD");
-        } else {
-          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.mdate = [startDate, endDate];
-        this.isDayOrMoth(this.mdate);
-        this.FetchDetail();
-        // 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.mdate = [startDate, endDate];
-        this.isDayOrMoth(this.mdate);
-        this.FetchDetail();
-        // 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;
-          }
-        },
-      };
-    },
-    isDayOrMoth(arr) {
-      if (!arr || arr.length < 1) {
-        this.timer = "day";
-      } else {
-        const count = this.$helpers
-          .dayjs(arr[0])
-          .diff(this.$helpers.dayjs(arr[1]), "day");
-        Math.abs(count) > chioseNum
-          ? (this.timer = "month")
-          : (this.timer = "day");
-      }
-    },
-    changeOrgan(val) {
-      this.organId = val;
-      this.FetchDetail();
-    },
-  },
-};
-</script>
-<style lang="scss" scoped>
-::v-deep .el-card__body {
-  padding-top: 0 !important;
-}
-
-.chioseBox {
-  position: absolute;
-  right: 20px;
-  z-index: 1000;
-  display: flex;
-  flex-direction: row;
-  align-items: center;
-  p {
-    font-size: 14px;
-    margin: 0 5px 0 10px;
-  }
-  .datePick {
-    margin-left: 10px;
-  }
-}
-.wrap {
-  position: relative;
-}
-</style>

+ 106 - 102
src/views/main/coursewareDate/exerciseDuration.vue

@@ -62,89 +62,96 @@
         </el-table-column>
         </el-table-column>
         <el-table-column
         <el-table-column
           align="center"
           align="center"
-          prop="organName"
+          prop="organizationName"
           label="分部名称"
           label="分部名称"
         ></el-table-column>
         ></el-table-column>
         <el-table-column
         <el-table-column
           align="center"
           align="center"
-          prop="normalNum"
+          prop="memberNum"
           sortable="custom"
           sortable="custom"
-          label="在读人数"
+          label="会员人数"
+          width="100px"
         >
         >
           <template slot-scope="scope">
           <template slot-scope="scope">
-            <div>{{ scope.row.normalNum }}人</div>
+            <div>{{ scope.row.memberNum }}人</div>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
         <el-table-column
         <el-table-column
           align="center"
           align="center"
-          prop="normalNum"
+          prop="noPlayNum"
           sortable="custom"
           sortable="custom"
           label="无练习人数"
           label="无练习人数"
+          width="120px"
         >
         >
           <template slot-scope="scope">
           <template slot-scope="scope">
-            <div>{{ scope.row.normalNum }}人</div>
+            <div>{{ scope.row.noPlayNum }}人</div>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
         <el-table-column
         <el-table-column
           align="center"
           align="center"
-          prop="train0"
+          prop="playTimeLess10"
           sortable="custom"
           sortable="custom"
           label="0-10分钟"
           label="0-10分钟"
+          width="120px"
         >
         >
           <template slot-scope="scope">
           <template slot-scope="scope">
-            <div>{{ scope.row.train0 }}人</div>
+            <div>{{ scope.row.playTimeLess10 }}人</div>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
         <el-table-column
         <el-table-column
           align="center"
           align="center"
-          prop="train1"
+          prop="playTimeLess60"
           sortable="custom"
           sortable="custom"
           label="10-60分钟"
           label="10-60分钟"
+          width="120px"
         >
         >
           <template slot-scope="scope">
           <template slot-scope="scope">
-            <div>{{ scope.row.train1 }}人</div>
+            <div>{{ scope.row.playTimeLess60 }}人</div>
           </template></el-table-column
           </template></el-table-column
         >
         >
 
 
         <el-table-column
         <el-table-column
           align="center"
           align="center"
-          prop="train2"
+          prop="playTimeLess120"
           sortable="custom"
           sortable="custom"
           label="60-120分钟"
           label="60-120分钟"
+          width="120px"
         >
         >
           <template slot-scope="scope">
           <template slot-scope="scope">
-            <div>{{ scope.row.train2 }}人</div>
+            <div>{{ scope.row.playTimeLess120 }}人</div>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
         <el-table-column
         <el-table-column
           align="center"
           align="center"
-          prop="train3"
+          prop="playTimeLess240"
           sortable="custom"
           sortable="custom"
           label="120-240分钟"
           label="120-240分钟"
+          width="130px"
         >
         >
           <template slot-scope="scope">
           <template slot-scope="scope">
-            <div>{{ scope.row.train3 }}人</div>
+            <div>{{ scope.row.playTimeLess240 }}人</div>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
         <el-table-column
         <el-table-column
           align="center"
           align="center"
-          prop="train4"
+          prop="playTimeRather240"
           sortable="custom"
           sortable="custom"
           label=">240分钟"
           label=">240分钟"
+          width="120px"
         >
         >
           <template slot-scope="scope">
           <template slot-scope="scope">
-            <div>{{ scope.row.train4 }}人</div>
+            <div>{{ scope.row.playTimeRather240 }}人</div>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
         <el-table-column
         <el-table-column
           align="center"
           align="center"
-          prop="avgTrainTime"
+          prop="avgPlayTime"
           sortable="custom"
           sortable="custom"
           label="平均时长"
           label="平均时长"
           width="100px"
           width="100px"
         >
         >
           <template slot-scope="scope">
           <template slot-scope="scope">
-            <div>{{ scope.row.avgTrainTime || 0 }}分钟</div>
+            <div>{{ scope.row.avgPlayTime || 0 }}分钟</div>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
 
 
@@ -168,7 +175,7 @@ import saveform from "@/components/save-form";
 import dayjs from "dayjs";
 import dayjs from "dayjs";
 import histogram from "v-charts/lib/histogram.common";
 import histogram from "v-charts/lib/histogram.common";
 import { getNowDateAndMonday, getNowDateAndSunday } from "@/utils/utils";
 import { getNowDateAndMonday, getNowDateAndSunday } from "@/utils/utils";
-import { cloudTeacherNum } from "../api";
+import { api_studentCoursewarePlayRecordList } from "../api";
 let nowTime = dayjs()
 let nowTime = dayjs()
   .subtract(1, "day")
   .subtract(1, "day")
   .format("YYYY-MM-DD");
   .format("YYYY-MM-DD");
@@ -194,7 +201,9 @@ export default {
           dayjs()
           dayjs()
             .subtract(1, "day")
             .subtract(1, "day")
             .format("YYYY-MM-DD")
             .format("YYYY-MM-DD")
-        ]
+        ],
+        sort: null,
+        asc: null
       },
       },
       tableList: []
       tableList: []
     };
     };
@@ -204,31 +213,51 @@ export default {
   },
   },
   methods: {
   methods: {
     onSortChange(val) {
     onSortChange(val) {
-      console.log(val, "order");
+      const template = {
+        memberNum: 1,
+        noPlayNum: 2,
+        playTimeLess10: 3,
+        playTimeLess60: 4,
+        playTimeLess120: 5,
+        playTimeLess240: 6,
+        playTimeRather240: 7,
+        avgPlayTime: 8
+      };
+      this.searchForm.sort = template[val.prop];
+      if (val.order === "ascending") {
+        this.searchForm.asc = true;
+      } else if (val.order === "descending") {
+        this.searchForm.asc = false;
+      } else {
+        this.searchForm.asc = null;
+        this.searchForm.sort = null;
+      }
+      this.getList();
     },
     },
     exportQuestion() {
     exportQuestion() {
       const { dates } = this.searchForm;
       const { dates } = this.searchForm;
       Export(
       Export(
         this,
         this,
         {
         {
-          url: "/api-web/export/managerDownload",
-          fileName: "云练习练习时长.xls",
+          url: "/api-web/studentCoursewarePlayRecord/exportStatList",
+          fileName: "云课堂观看统计.xls",
           method: "post",
           method: "post",
           params: {
           params: {
-            exportEnum: "EXPORT_CLOUD_TEACHER_SUM",
+            // exportEnum: "EXPORT_CLOUD_TEACHER_SUM",
             queryInfo: {
             queryInfo: {
               ...getTimes(dates, ["startDate", "endDate"])
               ...getTimes(dates, ["startDate", "endDate"])
             }
             }
           }
           }
         },
         },
-        "您确定导出云练习练习时长?"
+        "您确定导出云课堂观看统计?"
       );
       );
     },
     },
     onDetail(row) {
     onDetail(row) {
       this.$router.push({
       this.$router.push({
         path: "/coursewareDurationDetail",
         path: "/coursewareDurationDetail",
         query: {
         query: {
-          organId: row.organId
+          organId: row.organizationId,
+          dates: JSON.stringify(this.searchForm.dates)
         }
         }
       });
       });
     },
     },
@@ -275,13 +304,14 @@ export default {
       }
       }
     },
     },
     async getList() {
     async getList() {
-      // cloudTeacherNum
       try {
       try {
-        const { dates } = this.searchForm;
+        const { dates, sort, asc } = this.searchForm;
         let params = {
         let params = {
+          sort,
+          asc,
           ...getTimes(dates, ["startDate", "endDate"])
           ...getTimes(dates, ["startDate", "endDate"])
         };
         };
-        const res = await cloudTeacherNum({
+        const res = await api_studentCoursewarePlayRecordList({
           page: 1,
           page: 1,
           rows: 10,
           rows: 10,
           ...params
           ...params
@@ -292,96 +322,70 @@ export default {
     }
     }
   },
   },
   computed: {
   computed: {
-    items() {
-      let obj = {};
-      //        "eVipStudentNum",
-      let arr = [
-        "normalNum",
-        "train1",
-        "train2",
-        "train3",
-        "train4",
-        "buyRate",
-        "avgTrainTime"
-      ];
-      arr.forEach(str => {
-        if (this.dataList[str] + "") {
-          obj[str] = {
-            title: titles[str],
-            percent: this.dataList[str],
-            desc: descs[str]
-          };
-        }
-      });
+    // items() {
+    //   let obj = {};
+    //   let arr = [
+    //     "normalNum",
+    //     "train1",
+    //     "train2",
+    //     "train3",
+    //     "train4",
+    //     "buyRate",
+    //     "avgTrainTime"
+    //   ];
+    //   arr.forEach(str => {
+    //     if (this.dataList[str] + "") {
+    //       obj[str] = {
+    //         title: titles[str],
+    //         percent: this.dataList[str],
+    //         desc: descs[str]
+    //       };
+    //     }
+    //   });
 
 
-      return obj;
-    },
-    scaleItems() {
-      let obj = {};
-      //        "eVipStudentNum",
-      let arr = ["trainRate", "trainStandRate"];
-      arr.forEach(str => {
-        if (this.dataList[str] + "") {
-          obj[str] = {
-            title: titles[str],
-            percent: this.dataList[str],
-            desc: descs[str]
-          };
-        }
-      });
+    //   return obj;
+    // },
+    // scaleItems() {
+    //   let obj = {};
+    //   let arr = ["trainRate", "trainStandRate"];
+    //   arr.forEach(str => {
+    //     if (this.dataList[str] + "") {
+    //       obj[str] = {
+    //         title: titles[str],
+    //         percent: this.dataList[str],
+    //         desc: descs[str]
+    //       };
+    //     }
+    //   });
 
 
-      return obj;
-    },
+    //   return obj;
+    // },
     legend() {
     legend() {
       return {
       return {
         left: "10px"
         left: "10px"
       };
       };
     },
     },
-    scaleCharData() {
-      const temp = {
-        trainRate: "练习率",
-        trainStandRate: "练习达标率"
-      };
-      const values = this.tableList;
-
-      const months = {};
-      for (const key in temp) {
-        for (const item of values) {
-          if (!months[item.organName]) {
-            months[item.organName] = {
-              分部: item.organName
-            };
-          }
-          months[item.organName][temp[key]] = item[key] || 0;
-        }
-      }
-      console.log(months, "months");
-      return {
-        columns: ["分部", "练习率", "练习达标率"],
-        rows: Object.values(months)
-      };
-    },
     chartData() {
     chartData() {
       const temp = {
       const temp = {
-        normalNum: "无练习人数",
-        train0: "0-10分钟",
-        train1: "10-60分钟",
-        train2: "60-120分钟",
-        train3: "120-240分钟",
-        train4: ">240分钟",
-        avgTrainTime: "平均时长"
+        noPlayNum: "无练习人数",
+        playTimeLess10: "0-10分钟",
+        playTimeLess60: "10-60分钟",
+        playTimeLess120: "60-120分钟",
+        playTimeLess240: "120-240分钟",
+        playTimeRather240: ">240分钟",
+        avgPlayTime: "平均时长"
       };
       };
       const values = this.tableList;
       const values = this.tableList;
 
 
       const months = {};
       const months = {};
       for (const key in temp) {
       for (const key in temp) {
         for (const item of values) {
         for (const item of values) {
-          if (!months[item.organName]) {
-            months[item.organName] = {
-              分部: item.organName
+          if (!months[item.organizationName]) {
+            months[item.organizationName] = {
+              分部: item.organizationName
             };
             };
           }
           }
-          months[item.organName][temp[key]] = item[key] || 0;
+          months[item.organizationName][temp[key]] = item[key] || 0;
         }
         }
       }
       }
       console.log(months, "months");
       console.log(months, "months");

+ 103 - 49
src/views/main/coursewareDate/exerciseDurationDetail.vue

@@ -1,7 +1,7 @@
 <template>
 <template>
   <div class="m-container">
   <div class="m-container">
     <h2>
     <h2>
-      <el-page-header @back="onCancel" content="练习时长详情"></el-page-header>
+      <el-page-header @back="onCancel" content="观看时长详情"></el-page-header>
     </h2>
     </h2>
 
 
     <div class="m-core">
     <div class="m-core">
@@ -65,6 +65,7 @@
         <el-table
         <el-table
           :data="tableList"
           :data="tableList"
           :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
           :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+          @sort-change="onSortChange"
         >
         >
           <!-- <el-table-column width="120px" align="center" prop="id" label="排名">
           <!-- <el-table-column width="120px" align="center" prop="id" label="排名">
             <template slot-scope="scope">
             <template slot-scope="scope">
@@ -78,76 +79,95 @@
             prop="teacherName"
             prop="teacherName"
             label="声部老师"
             label="声部老师"
           ></el-table-column>
           ></el-table-column>
-          <el-table-column align="center" prop="normalNum" label="会员人数">
+          <el-table-column
+            align="center"
+            prop="memberNum"
+            sortable="custom"
+            label="会员人数"
+            width="100px"
+          >
             <template slot-scope="scope">
             <template slot-scope="scope">
-              <div>{{ scope.row.normalNum }}人</div>
+              <div>{{ scope.row.memberNum }}人</div>
             </template>
             </template>
           </el-table-column>
           </el-table-column>
           <el-table-column
           <el-table-column
             align="center"
             align="center"
-            prop="trainStudentNum"
-            label="练习人数"
+            prop="noPlayNum"
+            sortable="custom"
+            label="无练习人数"
+            width="120px"
           >
           >
             <template slot-scope="scope">
             <template slot-scope="scope">
-              <div>{{ scope.row.trainStudentNum }}人</div>
+              <div>{{ scope.row.noPlayNum }}人</div>
             </template></el-table-column
             </template></el-table-column
           >
           >
-          <el-table-column align="center" prop="trainRate" label="练习率">
-            <template slot-scope="scope">
-              <div>{{ scope.row.trainRate }}%</div>
-            </template>
-          </el-table-column>
 
 
-          <el-table-column align="center" label="≤10分钟">
+          <el-table-column
+            align="center"
+            prop="playTimeLess10"
+            sortable="custom"
+            label="0-10分钟"
+            width="120px"
+          >
             <template slot-scope="scope">
             <template slot-scope="scope">
-              <div>{{ scope.row.train0 }}人</div>
+              <div>{{ scope.row.playTimeLess10 }}人</div>
             </template>
             </template>
           </el-table-column>
           </el-table-column>
 
 
-          <el-table-column align="center" label="10~60分钟">
+          <el-table-column
+            align="center"
+            prop="playTimeLess60"
+            sortable="custom"
+            label="10-60分钟"
+            width="120px"
+          >
             <template slot-scope="scope">
             <template slot-scope="scope">
-              <div>{{ scope.row.train1 }}人</div>
+              <div>{{ scope.row.playTimeLess60 }}人</div>
             </template></el-table-column
             </template></el-table-column
           >
           >
 
 
-          <el-table-column align="center" label="60~120分钟">
-            <template slot-scope="scope">
-              <div>{{ scope.row.train2 }}人</div>
-            </template>
-          </el-table-column>
-          <el-table-column align="center" prop="id" label="120~240分钟">
+          <el-table-column
+            align="center"
+            prop="playTimeLess120"
+            sortable="custom"
+            label="60-120分钟"
+            width="120px"
+          >
             <template slot-scope="scope">
             <template slot-scope="scope">
-              <div>{{ scope.row.train3 }}人</div>
+              <div>{{ scope.row.playTimeLess120 }}人</div>
             </template>
             </template>
           </el-table-column>
           </el-table-column>
-          <el-table-column align="center" prop="id" label="≥240分钟">
+          <el-table-column
+            align="center"
+            prop="playTimeLess240"
+            sortable="custom"
+            label="120-240分钟"
+            width="130px"
+          >
             <template slot-scope="scope">
             <template slot-scope="scope">
-              <div>{{ scope.row.train4 }}人</div>
+              <div>{{ scope.row.playTimeLess240 }}人</div>
             </template>
             </template>
           </el-table-column>
           </el-table-column>
           <el-table-column
           <el-table-column
             align="center"
             align="center"
-            prop="avgTrainTime"
-            label="平均练习时长(会员)"
-            width="100px"
+            prop="playTimeRather240"
+            sortable="custom"
+            label=">240分钟"
+            width="120px"
           >
           >
             <template slot-scope="scope">
             <template slot-scope="scope">
-              <div>{{ scope.row.avgTrainTime }}分钟</div>
+              <div>{{ scope.row.playTimeRather240 }}人</div>
             </template>
             </template>
           </el-table-column>
           </el-table-column>
           <el-table-column
           <el-table-column
             align="center"
             align="center"
-            prop="trainAvgTrainTime"
-            label="平均练习时长(练习)"
+            prop="avgPlayTime"
+            sortable="custom"
+            label="平均时长"
             width="100px"
             width="100px"
           >
           >
             <template slot-scope="scope">
             <template slot-scope="scope">
-              <div>{{ scope.row.trainAvgTrainTime }}分钟</div>
-            </template>
-          </el-table-column>
-          <el-table-column align="center" prop="id" label="练习达标占比">
-            <template slot-scope="scope">
-              <div>{{ scope.row.trainStandRate }}%</div>
+              <div>{{ scope.row.avgPlayTime }}分钟</div>
             </template>
             </template>
           </el-table-column>
           </el-table-column>
         </el-table>
         </el-table>
@@ -170,7 +190,7 @@ import saveform from "@/components/save-form";
 import dayjs from "dayjs";
 import dayjs from "dayjs";
 import histogram from "v-charts/lib/histogram.common";
 import histogram from "v-charts/lib/histogram.common";
 import { getNowDateAndMonday, getNowDateAndSunday } from "@/utils/utils";
 import { getNowDateAndMonday, getNowDateAndSunday } from "@/utils/utils";
-import { cloudTeacherSumDetail } from "../api";
+import { api_studentCoursewarePlayRecordDetail } from "../api";
 let nowTime = new Date();
 let nowTime = new Date();
 nowTime =
 nowTime =
   nowTime.getFullYear() +
   nowTime.getFullYear() +
@@ -202,11 +222,13 @@ export default {
             .subtract(1, "day")
             .subtract(1, "day")
             .format("YYYY-MM-DD")
             .format("YYYY-MM-DD")
         ],
         ],
-        organId: ""
+        organId: "",
+        sort: null,
+        asc: null
       },
       },
       tableList: [],
       tableList: [],
       activeName: "first",
       activeName: "first",
-      specialList: [],
+      // specialList: [],
       pageInfo: {
       pageInfo: {
         // 分页规则
         // 分页规则
         limit: 10, // 限制显示条数
         limit: 10, // 限制显示条数
@@ -219,16 +241,48 @@ export default {
   async mounted() {
   async mounted() {
     const query = this.$route.query;
     const query = this.$route.query;
     this.searchForm.organId = query.organId ? Number(query.organId) : "";
     this.searchForm.organId = query.organId ? Number(query.organId) : "";
+    this.searchForm.dates = query.dates
+      ? JSON.parse(query.dates)
+      : [
+          dayjs()
+            .subtract(1, "day")
+            .format("YYYY-MM-DD"),
+          dayjs()
+            .subtract(1, "day")
+            .format("YYYY-MM-DD")
+        ];
     await this.$store.dispatch("setBranchs");
     await this.$store.dispatch("setBranchs");
-    const arr = [36, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 54, 56];
-    this.specialList = this.selects.branchs.filter(item => {
-      return arr.indexOf(item.id) == -1;
-    });
+    // const arr = [36, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 54, 56];
+    // this.specialList = this.selects.branchs.filter(item => {
+    //   return arr.indexOf(item.id) == -1;
+    // });
     // this.searchForm.dates.push(getNowDateAndMonday(nowTime));
     // this.searchForm.dates.push(getNowDateAndMonday(nowTime));
     // this.searchForm.dates.push(getNowDateAndSunday(nowTime));
     // this.searchForm.dates.push(getNowDateAndSunday(nowTime));
     this.getList();
     this.getList();
   },
   },
   methods: {
   methods: {
+    onSortChange(val) {
+      const template = {
+        memberNum: 1,
+        noPlayNum: 2,
+        playTimeLess10: 3,
+        playTimeLess60: 4,
+        playTimeLess120: 5,
+        playTimeLess240: 6,
+        playTimeRather240: 7,
+        avgPlayTime: 8
+      };
+      this.searchForm.sort = template[val.prop];
+      if (val.order === "ascending") {
+        this.searchForm.asc = true;
+      } else if (val.order === "descending") {
+        this.searchForm.asc = false;
+      } else {
+        this.searchForm.asc = null;
+        this.searchForm.sort = null;
+      }
+      this.getList();
+    },
     exportQuestion() {
     exportQuestion() {
       const { dates, organId } = this.searchForm;
       const { dates, organId } = this.searchForm;
       Export(
       Export(
@@ -260,7 +314,7 @@ export default {
     onCancel() {
     onCancel() {
       this.$store.dispatch("delVisitedViews", this.$route);
       this.$store.dispatch("delVisitedViews", this.$route);
       this.$router.push({
       this.$router.push({
-        path: "/cloudDate?tabrouter=exerciseDuration"
+        path: "/coursewareDate"
       });
       });
     },
     },
     onReSet() {
     onReSet() {
@@ -269,8 +323,6 @@ export default {
         page: 1
         page: 1
       };
       };
       this.$refs.searchForm.resetFields();
       this.$refs.searchForm.resetFields();
-      // this.searchForm.dates.push(getNowDateAndMonday(nowTime));
-      // this.searchForm.dates.push(getNowDateAndSunday(nowTime));
       this.getList();
       this.getList();
     },
     },
     getDefaultTime() {
     getDefaultTime() {
@@ -295,14 +347,16 @@ export default {
       }
       }
     },
     },
     async getList() {
     async getList() {
-      // cloudTeacherSumDetail
+      // api_studentCoursewarePlayRecordDetail
       try {
       try {
-        const { dates, organId } = this.searchForm;
+        const { dates, organId, sort, asc } = this.searchForm;
         let params = {
         let params = {
+          sort,
+          asc,
           ...getTimes(dates, ["startDate", "endDate"]),
           ...getTimes(dates, ["startDate", "endDate"]),
           organId
           organId
         };
         };
-        const res = await cloudTeacherSumDetail({
+        const res = await api_studentCoursewarePlayRecordDetail({
           page: this.pageInfo.page,
           page: this.pageInfo.page,
           rows: this.pageInfo.limit,
           rows: this.pageInfo.limit,
           ...params
           ...params

+ 0 - 443
src/views/main/coursewareDate/organDate.vue

@@ -1,443 +0,0 @@
-<template>
-  <div>
-    <el-card>
-      <headers title="分部数据" @changeOrgan="changeOrgan" :special="true" />
-      <div class="btnList">
-        <el-button
-          type="primary"
-          v-permission="'export/organStudentOverView'"
-          @click="organDateExport"
-          >导出</el-button
-        >
-        <el-button
-          type="text"
-          v-permission="'/organRankDetail'"
-          @click="gotoAll"
-          class="lookOrgan"
-          >全部分部 ></el-button
-        >
-      </div>
-
-      <div class="tableWrap">
-        <el-table
-          style="width: 100%"
-          :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
-          :data="tableList"
-          @sort-change="sortChang"
-          :default-sort="{
-            prop: 'cloudStudyUseStudentDuty',
-            order: 'descending'
-          }"
-          sortable="custom"
-        >
-          <el-table-column
-            align="center"
-            prop="index"
-            label="排名"
-          ></el-table-column>
-          <el-table-column
-            align="center"
-            prop="organName"
-            label="分部"
-          ></el-table-column>
-          <el-table-column
-            align="center"
-            prop="totalStudentNum"
-            label="学员总数"
-          >
-            <template slot="header" slot-scope="slot">
-              <div class="titleCell">
-                <span>学员总数</span>
-                <el-tooltip placement="top" popper-class="mTooltip">
-                  <div slot="content">
-                    乐团在读学员+有剩余VIP课或网管课学员去重之和
-                  </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="targetNum"
-            label="目标人数"
-            v-if="tenantId == 1"
-          >
-            <template slot="header" slot-scope="slot">
-              <div class="titleCell">
-                <span>目标人数</span>
-                <el-tooltip placement="top" popper-class="mTooltip">
-                  <div slot="content">
-                    进行中非会员乐团-已上乐团课小于等于4节学员-非本活动购买会员-弦乐声部学员
-                  </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="cloudStudyLivelyStudentNum"
-            label="活跃人数"
-          >
-            <template slot="header" slot-scope="slot">
-              <div class="titleCell">
-                <span>活跃人数</span>
-                <el-tooltip placement="top" popper-class="mTooltip">
-                  <div slot="content">近15天内使用达到5天及以上的用户数</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="cloudStudyUseStudentNum"
-            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="newStudentNum"
-            label="新用户人数"
-          >
-            <template slot="header">
-              <div class="titleCell">
-                <span>新用户人数</span>
-                <el-tooltip placement="top" popper-class="mTooltip">
-                  <div slot="content">乐团在读学员已上课程≤4节</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="custom"
-            align="center"
-            prop="newStudentDuty"
-            label="新用户占比"
-          >
-            <template slot-scope="scope">
-              {{ scope.row.newStudentDuty }}%
-            </template>
-          </el-table-column>
-          <el-table-column
-            align="center"
-            prop="newCloudStudyStudentNum"
-            label="新增使用人数"
-            width="130px"
-          >
-            <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="cloudStudyUseStudentDuty"
-            label="使用比例"
-            sortable="custom"
-            width="140px"
-          >
-            <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>
-            <template slot-scope="scope">
-              <div>{{ scope.row.cloudStudyUseStudentDuty }}%</div>
-            </template>
-          </el-table-column>
-          <el-table-column
-            align="center"
-            prop="vipStudentNum"
-            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="custom"
-            align="center"
-            prop="vipStudentDuty"
-            label="付费会员占比"
-            width="150px"
-            fixed="right"
-          >
-            <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>
-            <template slot-scope="scope">
-              <div>{{ scope.row.vipStudentDuty }}%</div>
-            </template>
-          </el-table-column>
-          <!-- <el-table-column
-               sortable="custom"
-            align="center"
-            prop="eVipStudentNum"
-            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="操作"
-            fixed="right"
-          >
-            <template slot-scope="scope">
-              <div>
-                <auth auths="/organDateDetail">
-                  <el-button type="text" @click="gotoDetail(scope.row)"
-                    >详情</el-button
-                  >
-                </auth>
-              </div>
-            </template>
-          </el-table-column>
-        </el-table>
-        <!-- <pagination
-          :autoScroll="false"
-          :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";
-import { organStudentOverView } from "../api";
-import { Export } from "@/utils/downLoadFile";
-import qs from "qs";
-export default {
-  components: {
-    headers,
-    pagination
-  },
-  data() {
-    return {
-      tableList: [],
-      organId: "",
-      rules: {
-        // 分页规则
-        limit: 10, // 限制显示条数
-        page: 1, // 当前页
-        total: 0, // 总条数
-        page_size: [10, 20, 40, 50] // 选择限制显示条数
-      },
-      searchList: {
-        cloudStudyUseStudentDuty: "DESC"
-      },
-      tenantId: ""
-    };
-  },
-  mounted() {
-    this.tenantId = this.$helpers.tenantId;
-    this.getList();
-  },
-  methods: {
-    async getList() {
-      try {
-        // const arr = [36,39,41,42,43,44,45,46,47,48,49,50,52,54,55,56]
-        const res = await organStudentOverView({
-          page: 1,
-          rows: 10,
-          ...this.searchList,
-          organIds: this.organId
-        });
-        this.tableList = res.data.rows;
-        this.rules.total = res.data.total;
-        // console.log(this.tableList)
-      } catch (e) {
-        console.log(e);
-      }
-    },
-    sortChang(val) {
-      const dates = {
-        ascending: "ASC",
-        descending: "DESC"
-      };
-      this.searchList = {};
-      if (val.prop && val.order) {
-        this.searchList[val.prop] = dates[val.order];
-      }
-      this.rules.page = 1;
-      this.getList();
-    },
-    gotoDetail(row) {
-      // 跳转到分部数据详情 row.organId
-      this.$router.push({
-        name: "organDateDetail",
-        params: { organId: row.organId }
-      });
-    },
-    changeOrgan(val) {
-      this.organId = val;
-      this.rules.page = 1;
-      this.getList();
-    },
-    organDateExport() {
-      let params = { ...this.searchList, organIds: this.organId };
-      Export(
-        this,
-        {
-          url: "/api-web/export/organStudentOverView",
-          fileName: "分部云练习数据.xls",
-          method: "post",
-          params: qs.stringify(params)
-        },
-        "您确定导出分部云练习数据列表?"
-      );
-    },
-
-    gotoAll() {
-      this.$router.push({
-        name: "organRankDetail"
-      });
-    }
-  }
-};
-</script>
-<style lang="scss" scoped>
-::v-deep .el-card__body {
-  padding-top: 0 !important;
-}
-.titleCell {
-  display: inline-block;
-}
-.tableWrap {
-  margin-top: 20px;
-}
-.btnList {
-  display: flex;
-  flex-direction: row;
-  justify-content: space-between;
-}
-</style>

+ 0 - 493
src/views/main/coursewareDate/organRankDetail.vue

@@ -1,493 +0,0 @@
-<template>
-  <div class="m-container">
-    <el-page-header
-      @back="goback"
-      style="padding-bottom: 30px"
-      content="分部云练习数据"
-    >
-    </el-page-header>
-    <save-form
-      :inline="true"
-      :model="searchForm"
-      @submit="search"
-      ref="saveForm"
-    >
-      <el-form-item prop="organId">
-        <el-select
-          class="multiple"
-          v-model.trim="searchForm.organId"
-          clearable
-          filterable
-          placeholder="请选择分部"
-          @change="search"
-        >
-          <el-option
-            v-for="(item, index) in specialList"
-            :key="index"
-            :label="item.name"
-            :value="item.id"
-          ></el-option>
-        </el-select>
-      </el-form-item>
-    </save-form>
-    <p style="margin-bottom: 20px; font-size: 14px">
-      共{{ tableList.length }}个分部
-    </p>
-    <div class="tableWrap">
-      <el-table
-        style="width: 100%"
-        :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
-        :data="tableList"
-        @sort-change="sortChang"
-        :default-sort="{
-          prop: 'cloudStudyUseStudentDuty',
-          order: 'descending'
-        }"
-        sortable="custom"
-      >
-        <el-table-column
-          align="center"
-          prop="index"
-          label="排名"
-        ></el-table-column>
-        <el-table-column
-          align="center"
-          prop="organName"
-          label="分部"
-        ></el-table-column>
-        <el-table-column align="center" prop="totalStudentNum" label="学员总数">
-          <template slot="header" slot-scope="slot">
-            <div class="titleCell">
-              <span>学员总数</span>
-              <el-tooltip placement="top" popper-class="mTooltip">
-                <div slot="content">
-                  乐团在读学员+有剩余VIP课或网管课学员去重之和
-                </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="targetNum"
-          label="目标人数"
-          v-if="tenantId == 1"
-        >
-          <template slot="header" slot-scope="slot">
-            <div class="titleCell">
-              <span>目标人数</span>
-              <el-tooltip placement="top" popper-class="mTooltip">
-                <div slot="content">
-                  进行中非会员乐团-已上乐团课小于等于4节学员-非本活动购买会员-弦乐声部学员
-                </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="cloudStudyLivelyStudentNum"
-          label="活跃人数"
-        >
-          <template slot="header" slot-scope="slot">
-            <div class="titleCell">
-              <span>活跃人数</span>
-              <el-tooltip placement="top" popper-class="mTooltip">
-                <div slot="content">近15天内使用达到5天及以上的用户数</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="cloudStudyUseStudentNum"
-          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="newStudentNum" label="新用户人数">
-          <template slot="header">
-            <div class="titleCell">
-              <span>新用户人数</span>
-              <el-tooltip placement="top" popper-class="mTooltip">
-                <div slot="content">乐团在读学员已上课程≤4节</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="custom"
-          align="center"
-          prop="newStudentDuty"
-          label="新用户占比"
-        >
-          <template slot-scope="scope">
-            {{ scope.row.newStudentDuty }}%
-          </template>
-        </el-table-column>
-        <el-table-column
-          align="center"
-          prop="newCloudStudyStudentNum"
-          label="新增使用人数"
-          width="130px"
-        >
-          <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="cloudStudyUseStudentDuty"
-          label="使用比例"
-          sortable="custom"
-          width="140px"
-        >
-          <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>
-          <template slot-scope="scope">
-            <div>{{ scope.row.cloudStudyUseStudentDuty }}%</div>
-          </template>
-        </el-table-column>
-        <el-table-column align="center" prop="vipStudentNum" 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="custom"
-          align="center"
-          prop="vipStudentDuty"
-          label="付费会员占比"
-          width="150px"
-        >
-          <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>
-          <template slot-scope="scope">
-            <div>{{ scope.row.vipStudentDuty }}%</div>
-          </template>
-        </el-table-column>
-        <!-- <el-table-column
-               sortable="custom"
-            align="center"
-            prop="eVipStudentNum"
-            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 slot-scope="scope">
-            <div>
-              <auth auths="/organDateDetail">
-                <el-button type="text" @click="gotoDetail(scope.row)"
-                  >详情</el-button
-                >
-              </auth>
-            </div>
-          </template>
-        </el-table-column>
-      </el-table>
-      <!-- <pagination
-          :autoScroll="false"
-          :total.sync="rules.total"
-          :page.sync="rules.page"
-          :limit.sync="rules.limit"
-          :page-sizes="rules.page_size"
-          @pagination="getList"
-        /> -->
-    </div>
-  </div>
-</template>
-<script>
-import headers from "./modals/headers.vue";
-import pagination from "@/components/Pagination/index";
-import { Export } from "@/utils/downLoadFile";
-import dayjs from "dayjs";
-import qs from "qs";
-import { organStudentOverView } from "../api";
-export default {
-  components: {
-    headers,
-    pagination
-  },
-  data() {
-    return {
-      tableList: [],
-      searchList: {
-        cloudStudyUseStudentDuty: "DESC"
-      },
-      searchForm: {},
-      rules: {
-        // 分页规则
-        limit: 10, // 限制显示条数
-        page: 1, // 当前页
-        total: 0, // 总条数
-        page_size: [10, 20, 40, 50] // 选择限制显示条数
-      },
-      date: "",
-      specialList: [],
-      tenantId: ""
-    };
-  },
-  async mounted() {
-    this.date = dayjs(new Date())
-      .subtract(1, "day")
-      .format("YYYY-MM-DD");
-    await this.$store.dispatch("setBranchs");
-    const arr = [
-      36,
-      39,
-      41,
-      42,
-      43,
-      44,
-      45,
-      46,
-      47,
-      48,
-      49,
-      50,
-      52,
-      54,
-      55,
-      56
-    ];
-    this.specialList = this.selects.branchs.filter(item => {
-      return arr.indexOf(item.id) == -1;
-    });
-    if (this.$route.params?.organId) {
-      this.searchForm.organId = this.$route.params.organId;
-    }
-    this.getList();
-    this.tenantId = this.$helpers.tenantId;
-  },
-  methods: {
-    async getList() {
-      try {
-        const res = await organStudentOverView({
-          ...this.searchList,
-          rows: 999,
-          page: 1,
-          organIds: this.searchForm.organId
-        });
-        this.tableList = res.data.rows;
-        this.rules.total = res.data.total;
-      } catch (e) {
-        console.log(e);
-      }
-    },
-    search() {
-      this.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) {
-      this.date = val;
-      this.rules.page = 1;
-      this.getList();
-    },
-    sortChang(val) {
-      const dates = {
-        ascending: "ASC",
-        descending: "DESC"
-      };
-      this.searchList = {};
-      if (val.prop && val.order) {
-        this.searchList[val.prop] = dates[val.order];
-      }
-      this.rules.page = 1;
-      this.getList();
-    },
-    rankingExport() {
-      let params = { ...this.searchForm, date: this.date };
-      Export(
-        this,
-        {
-          url: "/api-web/export/cloudStudyStudentOverView",
-          fileName: "分部云练习数据排行.xls",
-          method: "post",
-          params: qs.stringify(params)
-        },
-        "您确定导出分部云练习数据排行?"
-      );
-    },
-    goback() {
-      this.$store.dispatch("delVisitedViews", this.$route);
-      this.$router.push({ path: "/workbench?tabrouter=cloudDate" });
-    },
-    gotoDetail(row) {
-      // 跳转到分部数据详情 row.organId
-      this.$router.push({
-        name: "organDateDetail",
-        params: { organId: row.organId }
-      });
-    }
-  }
-};
-</script>
-<style lang="scss" scoped>
-::v-deep .el-card__body {
-  padding-top: 0 !important;
-}
-.titleCell {
-  display: inline-block;
-}
-.chioseBox {
-  display: flex;
-  flex-direction: row;
-  align-items: center;
-  justify-content: flex-start;
-  margin-bottom: 30px;
-  .lookOrgan {
-    margin-left: 10px;
-  }
-}
-.wrap {
-  position: relative;
-  display: flex;
-  flex-direction: row;
-  align-items: center;
-  justify-content: space-between;
-  margin-bottom: 20px;
-}
-</style>

+ 0 - 471
src/views/main/coursewareDate/organRanking.vue

@@ -1,471 +0,0 @@
-<template>
-  <div>
-    <el-card>
-      <headers title="分部排行" :hidenOrgan="true" />
-      <div class="wrap">
-        <el-button
-          type="primary"
-          @click="rankingExport"
-          v-permission="'export/cloudStudyStudentOverView'"
-          >导出</el-button
-        >
-        <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()"
-            :clearable="false"
-          >
-          </el-date-picker>
-          <!-- <el-button
-            type="text"
-            v-permission="'/organRankDetail'"
-            @click="gotoDetail"
-            class="lookOrgan"
-            >所有分部 ></el-button
-          > -->
-        </div>
-      </div>
-      <!--      :default-sort="{
-            prop: 'cloudStudyUseStudentDuty',
-            order: 'descending',
-          }" -->
-      <div class="tableWrap">
-        <el-table
-          ref="table"
-          style="width: 100%"
-          :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
-          :data="tableList"
-          @sort-change="sortChang"
-        >
-          <el-table-column align="center" prop="index" label="排名">
-          </el-table-column>
-          <el-table-column
-            align="center"
-            prop="organName"
-            label="分部"
-          ></el-table-column>
-          <el-table-column
-            align="center"
-            prop="totalStudentNum"
-            label="学员总数"
-            width="100px"
-          >
-            <template slot="header" slot-scope="slot">
-              <div class="titleCell">
-                <span>学员总数</span>
-                <el-tooltip placement="top" popper-class="mTooltip">
-                  <div slot="content">
-                    乐团在读学员+有剩余VIP课或网管课学员去重之和
-                  </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="cloudStudyLivelyStudentNum"
-            label="活跃人数"
-            width="100px"
-          >
-            <template slot="header" slot-scope="slot">
-              <div class="titleCell">
-                <span>活跃人数</span>
-                <el-tooltip placement="top" popper-class="mTooltip">
-                  <div slot="content">近15天内使用达到5天及以上的用户总数</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="custom"
-            align="center"
-            prop="cloudStudyLivelyStudentDuty"
-            label="活跃人数占比"
-            width="150px"
-          >
-            <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>
-            <template slot-scope="scope">
-              <div>{{ scope.row.cloudStudyLivelyStudentDuty }}%</div>
-            </template>
-          </el-table-column>
-          <el-table-column
-            align="center"
-            prop="cloudStudyUseStudentNum"
-            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="newCloudStudyStudentNum"
-            label="新增使用人数"
-            width="100px"
-          >
-            <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="custom"
-            width="150px"
-            align="center"
-            prop="cloudStudyUseStudentDuty"
-            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>
-            <template slot-scope="scope">
-              <div>{{ scope.row.cloudStudyUseStudentDuty }}%</div>
-            </template>
-          </el-table-column>
-
-          <el-table-column
-            sortable="custom"
-            width="140px"
-            align="center"
-            prop="vipStudentNum"
-            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="custom"
-            width="150px"
-            align="center"
-            prop="vipStudentDuty"
-            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>
-            <template slot-scope="scope">
-              <div>{{ scope.row.vipStudentDuty }}%</div>
-            </template>
-          </el-table-column>
-          <!-- <el-table-column
-               sortable="custom"
-            align="center"
-            prop="eVipStudentNum"
-            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="newMemberStudentNum"
-            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="custom"
-            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
-          :autoScroll="false"
-          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";
-import { Export } from "@/utils/downLoadFile";
-import dayjs from "dayjs";
-import qs from "qs";
-import { indexStudentOverView } from "../api";
-export default {
-  components: {
-    headers,
-    pagination
-  },
-  data() {
-    return {
-      tableList: [],
-      searchList: {},
-      rules: {
-        // 分页规则
-        limit: 10, // 限制显示条数
-        page: 1, // 当前页
-        total: 0, // 总条数
-        page_size: [10, 20, 40, 50] // 选择限制显示条数
-      },
-      date: ""
-    };
-  },
-  mounted() {
-    this.date = dayjs(new Date())
-      .subtract(1, "day")
-      .format("YYYY-MM-DD");
-    this.getList();
-  },
-  methods: {
-    async getList() {
-      try {
-        const res = await indexStudentOverView({
-          ...this.searchList,
-          date: this.date,
-          rows: this.rules.limit,
-          page: this.rules.page
-        });
-        this.tableList = res.data.rows;
-        this.rules.total = res.data.total;
-      } catch (e) {
-        console.log(e);
-      }
-    },
-    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) {
-      this.date = val;
-      this.rules.page = 1;
-      this.getList();
-    },
-    sortChang(val) {
-      const dates = {
-        ascending: "ASC",
-        descending: "DESC"
-      };
-      this.searchList = {};
-      if (val.prop && val.order) {
-        this.searchList[val.prop] = dates[val.order];
-      }
-      this.rules.page = 1;
-      this.getList();
-    },
-    rankingExport() {
-      let params = { ...this.searchForm, date: this.date };
-      Export(
-        this,
-        {
-          url: "/api-web/export/cloudStudyStudentOverView",
-          fileName: "分部云练习数据排行.xls",
-          method: "post",
-          params: qs.stringify(params)
-        },
-        "您确定导出分部云练习数据排行?"
-      );
-    },
-    gotoDetail() {
-      this.$router.push({
-        name: "organRankDetail"
-      });
-    }
-  }
-};
-</script>
-<style lang="scss" scoped>
-::v-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;
-  .lookOrgan {
-    margin-left: 10px;
-  }
-}
-.wrap {
-  position: relative;
-  display: flex;
-  flex-direction: row;
-  align-items: center;
-  justify-content: space-between;
-  margin-bottom: 20px;
-}
-</style>

+ 25 - 26
src/views/teamDetail/componentCourse/studentWork.vue

@@ -125,7 +125,6 @@
             :delete-instance-on-destroy="false"
             :delete-instance-on-destroy="false"
             :cleanup-styles-on-destroy="false"
             :cleanup-styles-on-destroy="false"
           >
           >
-
             <swiper-slide
             <swiper-slide
               class="swiper-no-swiping"
               class="swiper-no-swiping"
               v-for="(item, index) in activeRow.urlList"
               v-for="(item, index) in activeRow.urlList"
@@ -144,13 +143,13 @@
             </swiper-slide>
             </swiper-slide>
             <div class="swiper-pagination" slot="pagination"></div>
             <div class="swiper-pagination" slot="pagination"></div>
             <div
             <div
-            v-if="activeRow.urlList.length>1"
+              v-if="activeRow.urlList.length > 1"
               class="swiper-button-prev swiper-button-white"
               class="swiper-button-prev swiper-button-white"
               @click="prev"
               @click="prev"
               slot="button-prev"
               slot="button-prev"
             ></div>
             ></div>
             <div
             <div
-              v-if="activeRow.urlList.length>1"
+              v-if="activeRow.urlList.length > 1"
               class="swiper-button-next swiper-button-white"
               class="swiper-button-next swiper-button-white"
               @click="next"
               @click="next"
               slot="button-next"
               slot="button-next"
@@ -217,7 +216,7 @@ import pagination from "@/components/Pagination/index";
 import {
 import {
   findStudentCourseHomeworks,
   findStudentCourseHomeworks,
   sumStudentAttendance,
   sumStudentAttendance,
-  getCourseScheduleHomework,
+  getCourseScheduleHomework
 } from "@/api/buildTeam";
 } from "@/api/buildTeam";
 import { findStudentHomeworkComments } from "@/api/operateManager";
 import { findStudentHomeworkComments } from "@/api/operateManager";
 import messageBox from "./message-box";
 import messageBox from "./message-box";
@@ -227,10 +226,10 @@ export default {
     pagination,
     pagination,
     Swiper,
     Swiper,
     SwiperSlide,
     SwiperSlide,
-    messageBox,
+    messageBox
   },
   },
   directives: {
   directives: {
-    swiper: directive,
+    swiper: directive
   },
   },
   data() {
   data() {
     return {
     return {
@@ -239,7 +238,7 @@ export default {
         // 分页规则
         // 分页规则
         limit: 10, // 限制显示条数
         limit: 10, // 限制显示条数
         page: 1, // 当前页
         page: 1, // 当前页
-        total: 0, // 总条数
+        total: 0 // 总条数
       },
       },
       workVisible: false,
       workVisible: false,
       repliedVisible: false,
       repliedVisible: false,
@@ -262,26 +261,26 @@ export default {
         pagination: ".swiper-pagination",
         pagination: ".swiper-pagination",
         navigation: {
         navigation: {
           nextEl: ".swiper-button-next",
           nextEl: ".swiper-button-next",
-          prevEl: ".swiper-button-prev",
+          prevEl: ".swiper-button-prev"
         },
         },
         on: {
         on: {
-          slideChange: (val) => {
+          slideChange: val => {
             // console.log("掉用slideChange");
             // console.log("掉用slideChange");
             this.activeIndex = val.realIndex;
             this.activeIndex = val.realIndex;
-          },
-        },
+          }
+        }
 
 
         // Some Swiper option/callback...
         // Some Swiper option/callback...
       },
       },
       comUrl: "",
       comUrl: "",
       comVisible: false,
       comVisible: false,
-      activeCommit: [],
+      activeCommit: []
     };
     };
   },
   },
   computed: {
   computed: {
     swiper() {
     swiper() {
       return this.$refs.mySwiper.$swiper;
       return this.$refs.mySwiper.$swiper;
-    },
+    }
   },
   },
   mounted() {
   mounted() {
     this.init();
     this.init();
@@ -292,7 +291,7 @@ export default {
   methods: {
   methods: {
     init() {
     init() {
       sumStudentAttendance({ courseScheduleId: this.courseScheduleId }).then(
       sumStudentAttendance({ courseScheduleId: this.courseScheduleId }).then(
-        (res) => {
+        res => {
           if (res.code == 200) {
           if (res.code == 200) {
             this.studentNum = res.data.studentNum;
             this.studentNum = res.data.studentNum;
             this.homeworkStudentNum = res.data.homeworkStudentNum;
             this.homeworkStudentNum = res.data.homeworkStudentNum;
@@ -305,8 +304,8 @@ export default {
       //
       //
 
 
       getCourseScheduleHomework({
       getCourseScheduleHomework({
-        courseScheduleId: this.courseScheduleId,
-      }).then((res) => {
+        courseScheduleId: this.courseScheduleId
+      }).then(res => {
         if (res.code == 200) {
         if (res.code == 200) {
           if (res.data) {
           if (res.data) {
             this.content = res.data.content;
             this.content = res.data.content;
@@ -322,14 +321,14 @@ export default {
       findStudentCourseHomeworks({
       findStudentCourseHomeworks({
         search: this.courseScheduleId,
         search: this.courseScheduleId,
         rows: this.rules.limit,
         rows: this.rules.limit,
-        page: this.rules.page,
-      }).then((res) => {
+        page: this.rules.page
+      }).then(res => {
         if (res.code == 200) {
         if (res.code == 200) {
           this.rules.total = res.data.total;
           this.rules.total = res.data.total;
-          this.tableList = res.data.rows.map((item) => {
+          this.tableList = res.data.rows.map(item => {
             item.urlList = [];
             item.urlList = [];
             if (item.url) {
             if (item.url) {
-              item.url.split(",").forEach((url) => {
+              item.url.split(",").forEach(url => {
                 if (url) {
                 if (url) {
                   item.urlList.push(url);
                   item.urlList.push(url);
                 }
                 }
@@ -344,8 +343,8 @@ export default {
       this.activeRow = row;
       this.activeRow = row;
       findStudentHomeworkComments({
       findStudentHomeworkComments({
         studentCourseHomeworkId: row.studentCourseHomeworkId,
         studentCourseHomeworkId: row.studentCourseHomeworkId,
-        rows: 9999,
-      }).then((res) => {
+        rows: 9999
+      }).then(res => {
         if (res.code == 200) {
         if (res.code == 200) {
           this.activeCommit = res.data.rows;
           this.activeCommit = res.data.rows;
           this.workVisible = true;
           this.workVisible = true;
@@ -361,7 +360,7 @@ export default {
     prev(val) {
     prev(val) {
       this.$nextTick(() => {
       this.$nextTick(() => {
         // this.swiper.slidePrev();
         // this.swiper.slidePrev();
-          this.$refs.mySwiper.$swiper.slidePrev();
+        this.$refs.mySwiper.$swiper.slidePrev();
       });
       });
     },
     },
     next(val) {
     next(val) {
@@ -378,15 +377,15 @@ export default {
     openAideo(src) {
     openAideo(src) {
       this.comUrl = src;
       this.comUrl = src;
       this.comVisible = true;
       this.comVisible = true;
-    },
+    }
   },
   },
   watch: {
   watch: {
     courseScheduleId(val) {
     courseScheduleId(val) {
       if (val) {
       if (val) {
         this.init();
         this.init();
       }
       }
-    },
-  },
+    }
+  }
 };
 };
 </script>
 </script>
 <style lang="scss" scoped>
 <style lang="scss" scoped>