|
@@ -23,7 +23,7 @@ defineOptions({
|
|
|
// 数据状态
|
|
|
const dataStatus = ref(false);
|
|
|
const dataMessage = ref("加载中...");
|
|
|
-let chartData: StudentBoard = reactive({});
|
|
|
+const chartData = ref<StudentBoard>();
|
|
|
// 五维雷达图
|
|
|
let radarData: number[][] = reactive([]);
|
|
|
async function getChartData(schoolId: number) {
|
|
@@ -31,12 +31,9 @@ async function getChartData(schoolId: number) {
|
|
|
const studentId = Number(getUrlParam("id")) || 0;
|
|
|
getStudentBoard(studentId, schoolId)
|
|
|
.then(({data}) => {
|
|
|
- chartData = <StudentBoard>{...data};
|
|
|
+ chartData.value = data;
|
|
|
dataStatus.value = true;
|
|
|
- radarData = [chartData.after, chartData.front];
|
|
|
- setTimeout(() => {
|
|
|
- dialogVisible.value = true;
|
|
|
- }, 500);
|
|
|
+ radarData = [chartData.value?.after || [], chartData.value?.front || []];
|
|
|
})
|
|
|
.catch((error) => {
|
|
|
dataStatus.value = false;
|
|
@@ -49,11 +46,11 @@ function starElement(index: number, compare: number) {
|
|
|
let value = 0;
|
|
|
let tag = "";
|
|
|
if (compare == 0) {
|
|
|
- star = chartData.eeg[index].front[1];
|
|
|
- value = chartData.eeg[index].front[0];
|
|
|
+ star = chartData.value?.eeg[index].front[1] || 1;
|
|
|
+ value = chartData.value?.eeg[index].front[0] || 0;
|
|
|
} else {
|
|
|
- star = chartData.eeg[index].after[1];
|
|
|
- value = chartData.eeg[index].after[0];
|
|
|
+ star = chartData.value?.eeg[index].after[1] || 1;
|
|
|
+ value = chartData.value?.eeg[index].after[0] || 0;
|
|
|
}
|
|
|
if (star == 1) {
|
|
|
tag = "重度不足";
|
|
@@ -66,6 +63,7 @@ function starElement(index: number, compare: number) {
|
|
|
} else if (star == 5) {
|
|
|
tag = "优秀水平";
|
|
|
}
|
|
|
+ //return `<div class="star s${star}"></div><div class="status">${tag}</div>`;
|
|
|
return ["star s" + star, tag, value];
|
|
|
}
|
|
|
|
|
@@ -79,12 +77,13 @@ onMounted(() => {
|
|
|
const exportPage = ref();
|
|
|
// 下载页面内容为图片
|
|
|
const downloadHandle = (name: string) => {
|
|
|
+ const containerElement = <HTMLElement>document.querySelector(".result-container");
|
|
|
// html2canvas(绑定的元素,{})
|
|
|
html2canvas(exportPage.value, {
|
|
|
backgroundColor: "#f3f6fd", //海报的背景颜色
|
|
|
useCORS: true, //允许跨域
|
|
|
- width: document.querySelector(".result-container")?.offsetWidth, //生成海报的width,默认px
|
|
|
- height: document.querySelector(".result-container")?.offsetHeight, //生成海报的height
|
|
|
+ width: containerElement?.offsetWidth || 750, //生成海报的width,默认px
|
|
|
+ height: containerElement?.offsetHeight || 1080, //生成海报的height
|
|
|
})
|
|
|
.then((canvas) => {
|
|
|
// canvas 其实就是返回报文,我们所讲的response的意思
|
|
@@ -109,13 +108,13 @@ const downloadHandle = (name: string) => {
|
|
|
<div class="container">
|
|
|
<el-dialog v-model="dialogVisible" title="已生成【训练效果分析】离线报告,您可以:">
|
|
|
<el-button @click="dialogVisible = false">预览</el-button>
|
|
|
- <el-button class="mr-3" color="#626aef" @click="downloadHandle(chartData.name)">下载报告</el-button>
|
|
|
+ <el-button class="mr-3" color="#626aef" @click="downloadHandle(chartData?.name || '')">下载报告</el-button>
|
|
|
<router-link :to="'/student/result?id=' + getUrlParam('id')"
|
|
|
><el-button color="#626aef" plain>返回上一页</el-button></router-link
|
|
|
>
|
|
|
</el-dialog>
|
|
|
<div class="download-btn">
|
|
|
- <el-button class="mr-5" color="#626aef" @click="downloadHandle(chartData.name)">下载报告</el-button>
|
|
|
+ <el-button class="mr-5" color="#626aef" @click="downloadHandle(chartData?.name || '')">下载报告</el-button>
|
|
|
<router-link :to="'/student/result?id=' + getUrlParam('id')"
|
|
|
><el-button color="#626aef" plain>返回上一页</el-button></router-link
|
|
|
>
|
|
@@ -125,27 +124,27 @@ const downloadHandle = (name: string) => {
|
|
|
<el-row class="box-card">
|
|
|
<el-col :span="24">
|
|
|
<div class="l1">
|
|
|
- <span>{{ chartData.name }}</span>
|
|
|
+ <span>{{ chartData?.name }}</span>
|
|
|
</div>
|
|
|
- <div class="l2">{{ chartData.phone }}</div>
|
|
|
+ <div class="l2">{{ chartData?.phone }}</div>
|
|
|
</el-col>
|
|
|
<el-col :span="6">
|
|
|
<div class="l1">
|
|
|
- <span>{{ chartData.count }}</span>
|
|
|
+ <span>{{ chartData?.count }}</span>
|
|
|
</div>
|
|
|
<div class="l2">训练次数累计</div>
|
|
|
</el-col>
|
|
|
<el-col :span="7">
|
|
|
<div class="l1">
|
|
|
- <span>{{ chartData.minute }}</span
|
|
|
- >分<span>{{ chartData.second }}</span
|
|
|
+ <span>{{ chartData?.minute }}</span
|
|
|
+ >分<span>{{ chartData?.second }}</span
|
|
|
>秒
|
|
|
</div>
|
|
|
<div class="l2">训练时长累计</div>
|
|
|
</el-col>
|
|
|
<el-col :span="11">
|
|
|
<div class="l1">
|
|
|
- 前<span>{{ chartData.sort }}%</span>
|
|
|
+ 前<span>{{ chartData?.sort }}%</span>
|
|
|
</div>
|
|
|
<div class="l2">在所有通过训练的学员中你的位置是</div>
|
|
|
</el-col>
|
|
@@ -174,11 +173,11 @@ const downloadHandle = (name: string) => {
|
|
|
<el-row>
|
|
|
<el-col :span="24">
|
|
|
<div class="charts pieChart">
|
|
|
- <template v-if="chartData.percentage?.length > 0">
|
|
|
+ <template v-if="(chartData?.percentage.length || 0) > 0">
|
|
|
<PieChart
|
|
|
id="pieChart"
|
|
|
- :key="chartData.percentage.toString()"
|
|
|
- :data="chartData.percentage"
|
|
|
+ :key="chartData?.percentage.toString()"
|
|
|
+ :data="chartData?.percentage || []"
|
|
|
width="500px"
|
|
|
height="400px"
|
|
|
class="chart"
|
|
@@ -190,8 +189,8 @@ const downloadHandle = (name: string) => {
|
|
|
<div class="charts last">
|
|
|
<CircleChart
|
|
|
id="resultChart1"
|
|
|
- :key="chartData.height"
|
|
|
- :data="chartData.height"
|
|
|
+ :key="chartData?.height"
|
|
|
+ :data="chartData?.height || 0"
|
|
|
height="220px"
|
|
|
width="220px"
|
|
|
color="#4284f2"
|
|
@@ -207,8 +206,8 @@ const downloadHandle = (name: string) => {
|
|
|
<div class="charts last">
|
|
|
<DoubleChart
|
|
|
id="doubleChart1"
|
|
|
- :key="chartData.height_num"
|
|
|
- :data="chartData.height_num"
|
|
|
+ :key="chartData?.height_num"
|
|
|
+ :data="chartData?.height_num || 0"
|
|
|
height="220px"
|
|
|
width="220px"
|
|
|
color="#4e68b0"
|