|
@@ -22,19 +22,13 @@
|
|
|
<div class="column" v-if="details.video_url">
|
|
|
<div class="column-title">测评视频</div>
|
|
|
<div>
|
|
|
- <video
|
|
|
- style="width: 100%; object-fit: fill"
|
|
|
- :poster="
|
|
|
- details.video_url.replace(' ', '') +
|
|
|
- '?x-oss-process=video/snapshot,t_100,f_jpg,w_0,h_0,ar_auto'
|
|
|
- "
|
|
|
- :src="details.video_url"
|
|
|
- :controls="true"
|
|
|
- >
|
|
|
+ <video style="width: 100%; object-fit: fill" :poster="details.video_url.replace(' ', '') +
|
|
|
+ '?x-oss-process=video/snapshot,t_100,f_jpg,w_0,h_0,ar_auto'
|
|
|
+ " :src="details.video_url" :controls="true">
|
|
|
您的浏览器不支持 video 标签。
|
|
|
</video>
|
|
|
</div>
|
|
|
- </div>
|
|
|
+ </div>
|
|
|
<div class="column">
|
|
|
<div class="column-title">示范视频</div>
|
|
|
<div>
|
|
@@ -46,273 +40,273 @@
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
-<script>
|
|
|
+<script setup lang="ts">
|
|
|
import * as echarts from 'echarts';
|
|
|
-export default {
|
|
|
- name: 'run',
|
|
|
- props: {
|
|
|
- details: { type: Object, default: function () { return {} } },
|
|
|
- },
|
|
|
- data() {
|
|
|
- return {
|
|
|
- query: {},
|
|
|
- typeList: [],
|
|
|
- speedList: [],
|
|
|
- strideList: [],
|
|
|
- stepsList: [],
|
|
|
- fullAvgRateList: [],
|
|
|
- };
|
|
|
- },
|
|
|
- created() {
|
|
|
- this.query = this.$route.query;
|
|
|
- },
|
|
|
- mounted() {
|
|
|
- let typeList = [];
|
|
|
- let speedList = [];
|
|
|
- let strideList = [];
|
|
|
- let stepsList = [];
|
|
|
- let fullAvgRateList = [];
|
|
|
- let strideSum = this.details.stride_distribution.reduce((a, b) => {
|
|
|
- return a + b;
|
|
|
- }, 0);
|
|
|
- let stepsSum = this.details.steps_distribution.reduce((a, b) => {
|
|
|
- return a + b;
|
|
|
- }, 0);
|
|
|
- let num = null;
|
|
|
- if (this.query.exam_name == 'runa800') {
|
|
|
- num = 8
|
|
|
- }
|
|
|
- if (this.query.exam_name == 'runa1000') {
|
|
|
- num = 10
|
|
|
- }
|
|
|
- let strideAverage = 0;
|
|
|
- let stepsAverage = 0;
|
|
|
- strideAverage = (strideSum / num).toFixed(1);
|
|
|
- stepsAverage = (stepsSum / num).toFixed(1);
|
|
|
- for (let i = 1; i <= num; i++) {
|
|
|
- typeList.push(i * 100)
|
|
|
- speedList.push(this.details.speed)
|
|
|
- strideList.push(strideAverage)
|
|
|
- stepsList.push(stepsAverage)
|
|
|
- fullAvgRateList.push(this.details.full_avg_rate)
|
|
|
- }
|
|
|
- this.typeList = typeList;
|
|
|
- this.speedList = speedList;
|
|
|
- this.strideList = strideList;
|
|
|
- this.stepsList = stepsList;
|
|
|
- this.fullAvgRateList = fullAvgRateList;
|
|
|
- console.log("this.typeList", this.typeList)
|
|
|
- console.log("this.details.speed_distribution", this.details.speed_distribution)
|
|
|
- console.log("this.speedList", this.speedList)
|
|
|
- console.log("this.strideList", this.strideList)
|
|
|
- console.log("this.stepsList", this.stepsList)
|
|
|
- console.log("this.fullAvgRateList", this.fullAvgRateList)
|
|
|
- this.$nextTick(() => {
|
|
|
- this.speedChart();
|
|
|
- this.strideChart();
|
|
|
- this.stepsChart();
|
|
|
- })
|
|
|
+const route = useRoute();
|
|
|
+
|
|
|
+//父值
|
|
|
+const props = defineProps({
|
|
|
+ detailsData: {
|
|
|
+ type: Object,
|
|
|
+ default: {}
|
|
|
},
|
|
|
- methods: {
|
|
|
- //速度曲线
|
|
|
- speedChart() {
|
|
|
- let myChart = echarts.init(document.getElementById("speedChart"));
|
|
|
- let option = {
|
|
|
- title: {
|
|
|
- text: ''
|
|
|
+});
|
|
|
+
|
|
|
+const data = reactive<any>({
|
|
|
+ details: {},
|
|
|
+ query: {},
|
|
|
+ typeList: [],
|
|
|
+ speedList: [],
|
|
|
+ strideList: [],
|
|
|
+ stepsList: [],
|
|
|
+ fullAvgRateList: [],
|
|
|
+});
|
|
|
+const { details, query, typeList, speedList, strideList, stepsList, fullAvgRateList } = toRefs(data);
|
|
|
+
|
|
|
+//速度曲线
|
|
|
+const speedChart = () => {
|
|
|
+ let myChart = echarts.init(document.getElementById("speedChart"));
|
|
|
+ let option = {
|
|
|
+ title: {
|
|
|
+ text: ''
|
|
|
+ },
|
|
|
+ tooltip: {
|
|
|
+ trigger: 'axis',
|
|
|
+ },
|
|
|
+ legend: {
|
|
|
+ data: ['每百米平均速度', '全程平均速度', '满分平均速度']
|
|
|
+ },
|
|
|
+ grid: {
|
|
|
+ left: '3%',
|
|
|
+ right: '4%',
|
|
|
+ bottom: '3%',
|
|
|
+ containLabel: true
|
|
|
+ },
|
|
|
+ xAxis: [
|
|
|
+ {
|
|
|
+ type: 'category',
|
|
|
+ boundaryGap: false,
|
|
|
+ data: typeList.value
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ yAxis: [
|
|
|
+ {
|
|
|
+ type: 'value'
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ series: [
|
|
|
+ {
|
|
|
+ name: '每百米平均速度',
|
|
|
+ type: 'line',
|
|
|
+ label: {
|
|
|
+ show: true,
|
|
|
+ position: 'top'
|
|
|
},
|
|
|
- tooltip: {
|
|
|
- trigger: 'axis',
|
|
|
+ areaStyle: {
|
|
|
+ color: "#e6fafa"
|
|
|
},
|
|
|
- legend: {
|
|
|
- data: ['每百米平均速度', '全程平均速度', '满分平均速度']
|
|
|
+ data: details.value.speed_distribution
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: '全程平均速度',
|
|
|
+ type: 'line',
|
|
|
+ lineStyle: {
|
|
|
+ type: 'dashed'
|
|
|
},
|
|
|
- grid: {
|
|
|
- left: '3%',
|
|
|
- right: '4%',
|
|
|
- bottom: '3%',
|
|
|
- containLabel: true
|
|
|
+ data: speedList.value
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: '满分平均速度',
|
|
|
+ type: 'line',
|
|
|
+ lineStyle: {
|
|
|
+ type: 'dashed'
|
|
|
},
|
|
|
- xAxis: [
|
|
|
- {
|
|
|
- type: 'category',
|
|
|
- boundaryGap: false,
|
|
|
- data: this.typeList
|
|
|
- }
|
|
|
- ],
|
|
|
- yAxis: [
|
|
|
- {
|
|
|
- type: 'value'
|
|
|
- }
|
|
|
- ],
|
|
|
- series: [
|
|
|
- {
|
|
|
- name: '每百米平均速度',
|
|
|
- type: 'line',
|
|
|
- label: {
|
|
|
- show: true,
|
|
|
- position: 'top'
|
|
|
- },
|
|
|
- areaStyle: {
|
|
|
- color: "#e6fafa"
|
|
|
- },
|
|
|
- data: this.details.speed_distribution
|
|
|
- },
|
|
|
- {
|
|
|
- name: '全程平均速度',
|
|
|
- type: 'line',
|
|
|
- lineStyle: {
|
|
|
- type: 'dashed'
|
|
|
- },
|
|
|
- data: this.speedList
|
|
|
- },
|
|
|
- {
|
|
|
- name: '满分平均速度',
|
|
|
- type: 'line',
|
|
|
- lineStyle: {
|
|
|
- type: 'dashed'
|
|
|
- },
|
|
|
- data: this.fullAvgRateList
|
|
|
- },
|
|
|
- ]
|
|
|
- };
|
|
|
- // 窗口大小自适应方案
|
|
|
- myChart.setOption(option);
|
|
|
- setTimeout(function () {
|
|
|
- window.onresize = function () {
|
|
|
- myChart.resize();
|
|
|
- };
|
|
|
- }, 200);
|
|
|
- },
|
|
|
+ data: fullAvgRateList.value
|
|
|
+ },
|
|
|
+ ]
|
|
|
+ };
|
|
|
+ // 窗口大小自适应方案
|
|
|
+ myChart.setOption(option);
|
|
|
+ setTimeout(function () {
|
|
|
+ window.onresize = function () {
|
|
|
+ myChart.resize();
|
|
|
+ };
|
|
|
+ }, 200);
|
|
|
+};
|
|
|
|
|
|
- //步幅曲线
|
|
|
- strideChart() {
|
|
|
- let myChart = echarts.init(document.getElementById("strideChart"));
|
|
|
- let option = {
|
|
|
- title: {
|
|
|
- text: ''
|
|
|
- },
|
|
|
- tooltip: {
|
|
|
- trigger: 'axis',
|
|
|
+//步幅曲线
|
|
|
+const strideChart = () => {
|
|
|
+ let myChart = echarts.init(document.getElementById("strideChart"));
|
|
|
+ let option = {
|
|
|
+ title: {
|
|
|
+ text: ''
|
|
|
+ },
|
|
|
+ tooltip: {
|
|
|
+ trigger: 'axis',
|
|
|
+ },
|
|
|
+ legend: {
|
|
|
+ data: ['每百米平均步幅', '全程平均步幅']
|
|
|
+ },
|
|
|
+ grid: {
|
|
|
+ left: '3%',
|
|
|
+ right: '4%',
|
|
|
+ bottom: '3%',
|
|
|
+ containLabel: true
|
|
|
+ },
|
|
|
+ xAxis: [
|
|
|
+ {
|
|
|
+ type: 'category',
|
|
|
+ boundaryGap: false,
|
|
|
+ data: typeList.value
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ yAxis: [
|
|
|
+ {
|
|
|
+ type: 'value'
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ series: [
|
|
|
+ {
|
|
|
+ name: '每百米平均步幅',
|
|
|
+ type: 'line',
|
|
|
+ label: {
|
|
|
+ show: true,
|
|
|
+ position: 'top'
|
|
|
},
|
|
|
- legend: {
|
|
|
- data: ['每百米平均步幅', '全程平均步幅']
|
|
|
+ areaStyle: {
|
|
|
+ color: "#ffe6e0"
|
|
|
},
|
|
|
- grid: {
|
|
|
- left: '3%',
|
|
|
- right: '4%',
|
|
|
- bottom: '3%',
|
|
|
- containLabel: true
|
|
|
+ data: details.value.stride_distribution
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: '全程平均步幅',
|
|
|
+ type: 'line',
|
|
|
+ lineStyle: {
|
|
|
+ type: 'dashed'
|
|
|
},
|
|
|
- xAxis: [
|
|
|
- {
|
|
|
- type: 'category',
|
|
|
- boundaryGap: false,
|
|
|
- data: this.typeList
|
|
|
- }
|
|
|
- ],
|
|
|
- yAxis: [
|
|
|
- {
|
|
|
- type: 'value'
|
|
|
- }
|
|
|
- ],
|
|
|
- series: [
|
|
|
- {
|
|
|
- name: '每百米平均步幅',
|
|
|
- type: 'line',
|
|
|
- label: {
|
|
|
- show: true,
|
|
|
- position: 'top'
|
|
|
- },
|
|
|
- areaStyle: {
|
|
|
- color: "#ffe6e0"
|
|
|
- },
|
|
|
- data: this.details.stride_distribution
|
|
|
- },
|
|
|
- {
|
|
|
- name: '全程平均步幅',
|
|
|
- type: 'line',
|
|
|
- lineStyle: {
|
|
|
- type: 'dashed'
|
|
|
- },
|
|
|
- data: this.strideList
|
|
|
- },
|
|
|
- ]
|
|
|
- };
|
|
|
- // 窗口大小自适应方案
|
|
|
- myChart.setOption(option);
|
|
|
- setTimeout(function () {
|
|
|
- window.onresize = function () {
|
|
|
- myChart.resize();
|
|
|
- };
|
|
|
- }, 200);
|
|
|
- },
|
|
|
+ data: strideList.value
|
|
|
+ },
|
|
|
+ ]
|
|
|
+ };
|
|
|
+ // 窗口大小自适应方案
|
|
|
+ myChart.setOption(option);
|
|
|
+ setTimeout(function () {
|
|
|
+ window.onresize = function () {
|
|
|
+ myChart.resize();
|
|
|
+ };
|
|
|
+ }, 200);
|
|
|
+};
|
|
|
|
|
|
- //步频曲线
|
|
|
- stepsChart() {
|
|
|
- let myChart = echarts.init(document.getElementById("stepsChart"));
|
|
|
- let option = {
|
|
|
- title: {
|
|
|
- text: ''
|
|
|
- },
|
|
|
- tooltip: {
|
|
|
- trigger: 'axis',
|
|
|
+//步频曲线
|
|
|
+const stepsChart = () => {
|
|
|
+ let myChart = echarts.init(document.getElementById("stepsChart"));
|
|
|
+ let option = {
|
|
|
+ title: {
|
|
|
+ text: ''
|
|
|
+ },
|
|
|
+ tooltip: {
|
|
|
+ trigger: 'axis',
|
|
|
+ },
|
|
|
+ legend: {
|
|
|
+ data: ['每百米平均步频', '全程平均步频']
|
|
|
+ },
|
|
|
+ grid: {
|
|
|
+ left: '3%',
|
|
|
+ right: '4%',
|
|
|
+ bottom: '3%',
|
|
|
+ containLabel: true
|
|
|
+ },
|
|
|
+ xAxis: [
|
|
|
+ {
|
|
|
+ type: 'category',
|
|
|
+ boundaryGap: false,
|
|
|
+ data: typeList.value
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ yAxis: [
|
|
|
+ {
|
|
|
+ type: 'value'
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ series: [
|
|
|
+ {
|
|
|
+ name: '每百米平均步频',
|
|
|
+ type: 'line',
|
|
|
+ label: {
|
|
|
+ show: true,
|
|
|
+ position: 'top'
|
|
|
},
|
|
|
- legend: {
|
|
|
- data: ['每百米平均步频', '全程平均步频']
|
|
|
+ areaStyle: {
|
|
|
+ color: "#fff5e6"
|
|
|
},
|
|
|
- grid: {
|
|
|
- left: '3%',
|
|
|
- right: '4%',
|
|
|
- bottom: '3%',
|
|
|
- containLabel: true
|
|
|
+ data: details.value.steps_distribution
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: '全程平均步频',
|
|
|
+ type: 'line',
|
|
|
+ lineStyle: {
|
|
|
+ type: 'dashed'
|
|
|
},
|
|
|
- xAxis: [
|
|
|
- {
|
|
|
- type: 'category',
|
|
|
- boundaryGap: false,
|
|
|
- data: this.typeList
|
|
|
- }
|
|
|
- ],
|
|
|
- yAxis: [
|
|
|
- {
|
|
|
- type: 'value'
|
|
|
- }
|
|
|
- ],
|
|
|
- series: [
|
|
|
- {
|
|
|
- name: '每百米平均步频',
|
|
|
- type: 'line',
|
|
|
- label: {
|
|
|
- show: true,
|
|
|
- position: 'top'
|
|
|
- },
|
|
|
- areaStyle: {
|
|
|
- color: "#fff5e6"
|
|
|
- },
|
|
|
- data: this.details.steps_distribution
|
|
|
- },
|
|
|
- {
|
|
|
- name: '全程平均步频',
|
|
|
- type: 'line',
|
|
|
- lineStyle: {
|
|
|
- type: 'dashed'
|
|
|
- },
|
|
|
- data: this.stepsList
|
|
|
- },
|
|
|
- ]
|
|
|
- };
|
|
|
- // 窗口大小自适应方案
|
|
|
- myChart.setOption(option);
|
|
|
- setTimeout(function () {
|
|
|
- window.onresize = function () {
|
|
|
- myChart.resize();
|
|
|
- };
|
|
|
- }, 200);
|
|
|
- },
|
|
|
-
|
|
|
- },
|
|
|
+ data: stepsList.value
|
|
|
+ },
|
|
|
+ ]
|
|
|
+ };
|
|
|
+ // 窗口大小自适应方案
|
|
|
+ myChart.setOption(option);
|
|
|
+ setTimeout(function () {
|
|
|
+ window.onresize = function () {
|
|
|
+ myChart.resize();
|
|
|
+ };
|
|
|
+ }, 200);
|
|
|
};
|
|
|
+
|
|
|
+
|
|
|
+onBeforeMount(() => {
|
|
|
+ query.value = route.query;
|
|
|
+ details.value = JSON.parse(JSON.stringify(props.detailsData));
|
|
|
+ let typeLists = [];
|
|
|
+ let speedLists = [];
|
|
|
+ let strideLists = [];
|
|
|
+ let stepsLists = [];
|
|
|
+ let fullAvgRateLists = [];
|
|
|
+ let strideSum = details.value.stride_distribution.reduce((a:any, b:any) => {
|
|
|
+ return a + b;
|
|
|
+ }, 0);
|
|
|
+ let stepsSum = details.value.steps_distribution.reduce((a:any, b:any) => {
|
|
|
+ return a + b;
|
|
|
+ }, 0);
|
|
|
+ let num: any = null;
|
|
|
+ if (query.value.exam_name == 'runa800') {
|
|
|
+ num = 8
|
|
|
+ }
|
|
|
+ if (query.value.exam_name == 'runa1000') {
|
|
|
+ num = 10
|
|
|
+ }
|
|
|
+ let strideAverage: any = 0;
|
|
|
+ let stepsAverage: any = 0;
|
|
|
+ strideAverage = (strideSum / num).toFixed(1);
|
|
|
+ stepsAverage = (stepsSum / num).toFixed(1);
|
|
|
+ for (let i = 1; i <= num; i++) {
|
|
|
+ typeLists.push(i * 100)
|
|
|
+ speedLists.push(details.value.speed)
|
|
|
+ strideLists.push(strideAverage)
|
|
|
+ stepsLists.push(stepsAverage)
|
|
|
+ fullAvgRateLists.push(details.value.full_avg_rate)
|
|
|
+ }
|
|
|
+ typeList.value = typeLists;
|
|
|
+ speedList.value = speedLists;
|
|
|
+ strideList.value = strideLists;
|
|
|
+ stepsList.value = stepsLists;
|
|
|
+ fullAvgRateList.value = fullAvgRateLists;
|
|
|
+})
|
|
|
+
|
|
|
+onMounted(() => {
|
|
|
+ nextTick(() => {
|
|
|
+ speedChart();
|
|
|
+ strideChart();
|
|
|
+ stepsChart();
|
|
|
+ })
|
|
|
+})
|
|
|
</script>
|
|
|
|
|
|
<style lang="scss" scoped>
|