|
@@ -1,30 +1,55 @@
|
|
<script setup lang="ts">
|
|
<script setup lang="ts">
|
|
import {watch} from "vue";
|
|
import {watch} from "vue";
|
|
import {useUserStore} from "@/store/modules/user";
|
|
import {useUserStore} from "@/store/modules/user";
|
|
-
|
|
|
|
import {GradeList} from "@/api/grade/types";
|
|
import {GradeList} from "@/api/grade/types";
|
|
|
|
+import {TrainingItem, TrainingParams} from "@/api/training/types";
|
|
|
|
+import {getGradeSelect} from "@/api/grade";
|
|
|
|
+import {getTrainingLists} from "@/api/training";
|
|
|
|
|
|
|
|
+const userStore = useUserStore();
|
|
defineOptions({
|
|
defineOptions({
|
|
name: "TrainingIndex",
|
|
name: "TrainingIndex",
|
|
inheritAttrs: false,
|
|
inheritAttrs: false,
|
|
});
|
|
});
|
|
|
|
|
|
-const userStore = useUserStore();
|
|
|
|
-watch(
|
|
|
|
- () => userStore.schoolId,
|
|
|
|
- (newValue, oldValue) => {
|
|
|
|
- console.log(newValue, oldValue);
|
|
|
|
- }
|
|
|
|
-);
|
|
|
|
-let studentType = ref("");
|
|
|
|
-let classNumber = ref("");
|
|
|
|
-let trainingType = ref("");
|
|
|
|
-const gradeData = ref<GradeList[]>([
|
|
|
|
- {
|
|
|
|
- id: 0,
|
|
|
|
- name: "全部班级",
|
|
|
|
- },
|
|
|
|
-]);
|
|
|
|
|
|
+const pageParams:TrainingParams = reactive({
|
|
|
|
+ is_formal: 0,
|
|
|
|
+ grade_id: 0,
|
|
|
|
+ page_no: 1,
|
|
|
|
+ page_size: 12,
|
|
|
|
+});
|
|
|
|
+/**
|
|
|
|
+ * 班级数据
|
|
|
|
+ */
|
|
|
|
+const gradeData = ref<GradeList[]>();
|
|
|
|
+async function getGradeData(schoolId: number) {
|
|
|
|
+ getGradeSelect(schoolId)
|
|
|
|
+ .then(({ data }) => {
|
|
|
|
+ gradeData.value = data;
|
|
|
|
+ gradeData.value?.unshift({ id: 0, name: "全部班级" })
|
|
|
|
+ })
|
|
|
|
+ .catch((error) => {
|
|
|
|
+ gradeData.value = [];
|
|
|
|
+ gradeData.value?.unshift({ id: 0, name: "全部班级" })
|
|
|
|
+ console.log(error);
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+const trainingData = ref<TrainingItem[]>();
|
|
|
|
+const trainingCount = ref(0);
|
|
|
|
+async function getTrainingData(schoolId: number) {
|
|
|
|
+ pageParams.school_id = schoolId;
|
|
|
|
+ getTrainingLists(pageParams)
|
|
|
|
+ .then(({ data }) => {
|
|
|
|
+ const {count, lists} = data;
|
|
|
|
+ trainingData.value = lists;
|
|
|
|
+ trainingCount.value = count;
|
|
|
|
+ })
|
|
|
|
+ .catch((error) => {
|
|
|
|
+ console.log(error);
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
const tableData = ref<any>([
|
|
const tableData = ref<any>([
|
|
{
|
|
{
|
|
number: 1,
|
|
number: 1,
|
|
@@ -36,6 +61,23 @@ const tableData = ref<any>([
|
|
cls: "向日葵小班",
|
|
cls: "向日葵小班",
|
|
},
|
|
},
|
|
]);
|
|
]);
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+function getTrainingSearch(){
|
|
|
|
+ getTrainingData(userStore.schoolId);
|
|
|
|
+}
|
|
|
|
+onMounted(() => {
|
|
|
|
+ getGradeData(userStore.schoolId);
|
|
|
|
+ getTrainingData(userStore.schoolId);
|
|
|
|
+});
|
|
|
|
+watch(
|
|
|
|
+ () => userStore.schoolId,
|
|
|
|
+ (newValue) => {
|
|
|
|
+ // 学校切换后重新获取
|
|
|
|
+ getGradeData(newValue);
|
|
|
|
+ getTrainingData(newValue);
|
|
|
|
+ }
|
|
|
|
+);
|
|
</script>
|
|
</script>
|
|
|
|
|
|
<template>
|
|
<template>
|
|
@@ -43,64 +85,54 @@ const tableData = ref<any>([
|
|
<!-- 学生查找 -->
|
|
<!-- 学生查找 -->
|
|
<div class="training-search">
|
|
<div class="training-search">
|
|
<el-select
|
|
<el-select
|
|
- v-model="studentType"
|
|
|
|
|
|
+ v-model="pageParams.is_formal"
|
|
placeholder="正式学生/体验用户"
|
|
placeholder="正式学生/体验用户"
|
|
size="large"
|
|
size="large"
|
|
>
|
|
>
|
|
- <el-option key="1" value="1" label="正式学生"></el-option>
|
|
|
|
- <el-option key="2" value="2" label="体验用户"></el-option>
|
|
|
|
- </el-select>
|
|
|
|
- <el-select
|
|
|
|
- v-model="classNumber"
|
|
|
|
- placeholder="请选择班级名称"
|
|
|
|
- size="large"
|
|
|
|
- >
|
|
|
|
- <el-option
|
|
|
|
- v-for="item in gradeData"
|
|
|
|
- :key="item.id"
|
|
|
|
- :label="item.name"
|
|
|
|
- :value="item.id"
|
|
|
|
- />
|
|
|
|
- </el-select>
|
|
|
|
- <el-select
|
|
|
|
- v-model="trainingType"
|
|
|
|
- placeholder="请选择训练方式"
|
|
|
|
- size="large"
|
|
|
|
- >
|
|
|
|
- <el-option
|
|
|
|
- key="1"
|
|
|
|
- value="1"
|
|
|
|
- label="专注模式(脑机专注力训练)"
|
|
|
|
- ></el-option>
|
|
|
|
- <el-option key="2" value="2" label="智脑水舞"></el-option>
|
|
|
|
- <el-option key="2" value="2" label="智脑恐龙"></el-option>
|
|
|
|
- <el-option key="2" value="2" label="智脑碰碰车"></el-option>
|
|
|
|
- <el-option key="2" value="2" label="智脑SUV"></el-option>
|
|
|
|
- <el-option key="2" value="2" label="智脑积木"></el-option>
|
|
|
|
- <el-option key="2" value="2" label="智脑UFO"></el-option>
|
|
|
|
- <el-option
|
|
|
|
- key="2"
|
|
|
|
- value="2"
|
|
|
|
- label="放松模式(脑机放松度训练,即正念)"
|
|
|
|
- ></el-option>
|
|
|
|
|
|
+ <el-option key="0" :value="Number(0)" label="全部学生"></el-option>
|
|
|
|
+ <el-option key="1" :value="Number(1)" label="正式学生"></el-option>
|
|
|
|
+ <el-option key="2" :value="Number(2)" label="体验用户"></el-option>
|
|
</el-select>
|
|
</el-select>
|
|
|
|
+ <el-select v-model="pageParams.grade_id" placeholder="请选择班级" size="large">
|
|
|
|
+ <el-option
|
|
|
|
+ v-for="item in gradeData"
|
|
|
|
+ :key="item.id"
|
|
|
|
+ :label="item.name"
|
|
|
|
+ :value="item.id"
|
|
|
|
+ />
|
|
|
|
+ </el-select>
|
|
|
|
+ <el-input
|
|
|
|
+ v-model="pageParams.search"
|
|
|
|
+ size="large"
|
|
|
|
+ placeholder="请输入学生名称或手机号码"
|
|
|
|
+ />
|
|
|
|
+ <el-button size="large" type="primary" @click="getTrainingSearch()">查找</el-button>
|
|
</div>
|
|
</div>
|
|
<!-- 学生数据 -->
|
|
<!-- 学生数据 -->
|
|
<div class="list-table">
|
|
<div class="list-table">
|
|
- <el-table :data="tableData" style="width: 100%">
|
|
|
|
- <el-table-column prop="number" label="序号" align="center" />
|
|
|
|
|
|
+ <el-table :data="trainingData" style="width: 100%">
|
|
|
|
+ <el-table-column type="index" label="序号" align="center" width="80" />
|
|
<el-table-column prop="name" label="学生名称" align="center" />
|
|
<el-table-column prop="name" label="学生名称" align="center" />
|
|
<el-table-column prop="phone" label="手机号码" align="center" />
|
|
<el-table-column prop="phone" label="手机号码" align="center" />
|
|
- <el-table-column prop="type" label="训练方式" align="center" />
|
|
|
|
- <el-table-column prop="date" label="训练时间" align="center" />
|
|
|
|
- <el-table-column prop="times" label="训练时长" align="center" />
|
|
|
|
- <el-table-column prop="cls" label="所在班级" align="center" />
|
|
|
|
|
|
+ <el-table-column prop="device_name" label="训练方式" align="center" />
|
|
|
|
+ <el-table-column prop="create_time" label="训练时间" align="center" />
|
|
|
|
+ <el-table-column prop="play_time" label="训练时长" align="center" />
|
|
|
|
+ <el-table-column prop="grade_name" label="所在班级" align="center" />
|
|
<el-table-column />
|
|
<el-table-column />
|
|
- <el-table-column label="操作" align="center">
|
|
|
|
- <router-link to="/training/result" class="table-btn">报告详情</router-link>
|
|
|
|
- </el-table-column>
|
|
|
|
|
|
+ <el-table-column label="操作" align="center" >
|
|
|
|
+ <template #default="scope">
|
|
|
|
+ <router-link :to="'/training/result?id='+scope.row.game_record_id" class="table-btn">报告详情</router-link>
|
|
|
|
+ </template>
|
|
|
|
+ </el-table-column>
|
|
</el-table>
|
|
</el-table>
|
|
</div>
|
|
</div>
|
|
|
|
+ <pagination
|
|
|
|
+ v-if="trainingCount > 0"
|
|
|
|
+ v-model:total="trainingCount"
|
|
|
|
+ v-model:page="pageParams.page_no"
|
|
|
|
+ v-model:limit="pageParams.page_size"
|
|
|
|
+ @pagination="getTrainingSearch()"
|
|
|
|
+ />
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</template>
|
|
|
|
|
|
@@ -127,7 +159,8 @@ const tableData = ref<any>([
|
|
font-size: 16px;
|
|
font-size: 16px;
|
|
padding: 0 26px;
|
|
padding: 0 26px;
|
|
margin: 0 20px;
|
|
margin: 0 20px;
|
|
- border-radius: 12px;
|
|
|
|
|
|
+ border-radius: 10px;
|
|
|
|
+ background: #4284f2;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
:deep(.el-input__wrapper) {
|
|
:deep(.el-input__wrapper) {
|