|
@@ -1,57 +1,47 @@
|
|
|
<template>
|
|
|
<div id="quest-chart">
|
|
|
- <el-row type="flex" align="middle" justify="center" class="btn_bar">
|
|
|
- <el-col :span="10">
|
|
|
- 第一题
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
- <el-row type="flex" align="middle" justify="center" v-if="btnModel.table">
|
|
|
- <el-col :span="16">
|
|
|
- <el-table :data="data" size="mini" border stripe>
|
|
|
- <el-table-column align="center" label="选项" prop="answer"></el-table-column>
|
|
|
- <el-table-column align="center" label="小计" prop="value"></el-table-column>
|
|
|
- <el-table-column align="center" label="比例">
|
|
|
- <template v-slot="{ row, $index }">
|
|
|
- <el-row type="flex" align="middle" justify="center">
|
|
|
- <el-col :span="18">
|
|
|
- <g2progress :ind="$index" :data="getPercent(row.value)"></g2progress>
|
|
|
- </el-col>
|
|
|
- <el-col :span="6">
|
|
|
- {{ `${getPercent(row.value) * 100}%` }}
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- </el-table>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
- <el-row type="flex" align="middle" justify="center" class="btn_bar" :gutter="10">
|
|
|
- <el-col :span="3" v-for="(i, index) in btnList" :key="index">
|
|
|
- <el-button :type="btnModel[i.model] ? 'primary' : ''" size="mini" @click="changeModel(i.model)">
|
|
|
- {{ i.text }}
|
|
|
- </el-button>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
- <el-row type="flex" align="middle" justify="center" v-if="btnModel.column">
|
|
|
- <el-col :span="10">
|
|
|
- <g2column :data="data" :axis="axis"></g2column>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
- <el-row type="flex" align="middle" justify="center" v-if="btnModel.pie">
|
|
|
- <el-col :span="10">
|
|
|
- <g2pie :data="data" :axis="axis"></g2pie>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
- <el-row type="flex" align="middle" justify="center" v-if="btnModel.donut">
|
|
|
- <el-col :span="10">
|
|
|
- <g2donut :data="data" :axis="axis"></g2donut>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
- <el-row type="flex" align="middle" justify="center" v-if="btnModel.bar">
|
|
|
- <el-col :span="10">
|
|
|
- <g2bar :data="data" :axis="axis"></g2bar>
|
|
|
- </el-col>
|
|
|
+ <el-row type="flex" align="middle" justify="start" class="btn_bar">
|
|
|
+ <el-col :span="10"> {{ data.topic }} [{{ data.type | topicType }}] </el-col>
|
|
|
</el-row>
|
|
|
+ <template v-if="data.type != 2">
|
|
|
+ <el-row type="flex" align="middle" justify="center" v-if="btnModel.table">
|
|
|
+ <el-col :span="16">
|
|
|
+ <el-table :data="data.option" size="mini" border stripe>
|
|
|
+ <el-table-column align="center" label="选项" prop="opname"></el-table-column>
|
|
|
+ <el-table-column align="center" label="小计" prop="value"></el-table-column>
|
|
|
+ <el-table-column align="center" label="比例">
|
|
|
+ <template v-slot="{ row, $index }">
|
|
|
+ <el-progress :text-inside="true" :stroke-width="20" :percentage="getPercent(row.value)" :color="getPS(getPercent(row.value))"></el-progress>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-row type="flex" align="middle" justify="center" class="btn_bar" :gutter="10">
|
|
|
+ <el-col :span="3" v-for="(i, index) in btnList" :key="index">
|
|
|
+ <el-button :type="btnModel[i.model] ? 'primary' : ''" size="mini" @click="changeModel(i.model)">
|
|
|
+ {{ i.text }}
|
|
|
+ </el-button>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-row type="flex" align="middle" justify="center">
|
|
|
+ <el-col :span="16" v-if="btnModel.column">
|
|
|
+ <g2column :data="data.option" :axis="axis" :gid="data._id"></g2column>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="16" v-if="btnModel.pie">
|
|
|
+ <g2pie :data="data.option" :axis="axis" :gid="data._id"></g2pie>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="16" v-if="btnModel.donut">
|
|
|
+ <g2donut :data="data.option" :axis="axis" :gid="data._id"></g2donut>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="16" v-if="btnModel.bar">
|
|
|
+ <g2bar :data="data.option" :axis="axis" :gid="data._id"></g2bar>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </template>
|
|
|
+ <template v-else>
|
|
|
+ <div style="margin:10px">见详情</div>
|
|
|
+ </template>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
@@ -61,19 +51,23 @@ import g2column from './column.vue';
|
|
|
import g2pie from './pie.vue';
|
|
|
import g2donut from './donut.vue';
|
|
|
import g2bar from './bar.vue';
|
|
|
-import g2progress from './progress.vue';
|
|
|
import { mapState, createNamespacedHelpers } from 'vuex';
|
|
|
export default {
|
|
|
name: 'quest-chart',
|
|
|
props: {
|
|
|
data: { type: [Object, Array], default: () => [] },
|
|
|
- axis: { type: Object, default: () => {} },
|
|
|
},
|
|
|
- components: { g2column, g2progress, g2pie, g2donut, g2bar },
|
|
|
+ components: { g2column, g2pie, g2donut, g2bar },
|
|
|
data: function() {
|
|
|
return {
|
|
|
+ axis: {
|
|
|
+ x: 'opname',
|
|
|
+ xAlias: '选项',
|
|
|
+ y: 'value',
|
|
|
+ yAlias: '数量',
|
|
|
+ },
|
|
|
btnModel: {
|
|
|
- table: false,
|
|
|
+ table: true,
|
|
|
pie: false,
|
|
|
dount: false,
|
|
|
column: false,
|
|
@@ -91,15 +85,28 @@ export default {
|
|
|
created() {},
|
|
|
methods: {
|
|
|
changeModel(model) {
|
|
|
+ if (model !== 'table') {
|
|
|
+ let keys = Object.keys(this.btnModel);
|
|
|
+ for (const key of keys) {
|
|
|
+ if (key != 'table' && key != model) {
|
|
|
+ this.btnModel[key] = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
this.btnModel[model] = !this.btnModel[model];
|
|
|
this.$forceUpdate();
|
|
|
},
|
|
|
getPercent(num) {
|
|
|
- let all = this.data.reduce((prev, next) => prev + next.value * 1, 0);
|
|
|
+ let all = this.data.option.reduce((prev, next) => prev + next.value * 1, 0);
|
|
|
let percent = (num * 1) / all;
|
|
|
- percent = _.round(percent, 4);
|
|
|
+ percent = _.round(percent, 4) * 100;
|
|
|
return percent;
|
|
|
},
|
|
|
+ getPS(percent) {
|
|
|
+ if (percent >= 70) return 'red';
|
|
|
+ if (_.inRange(percent, 30, 70)) return 'blue';
|
|
|
+ if (percent <= 30) return 'gray';
|
|
|
+ },
|
|
|
},
|
|
|
computed: {
|
|
|
...mapState(['user']),
|
|
@@ -107,6 +114,13 @@ export default {
|
|
|
return `${this.$route.meta.title}`;
|
|
|
},
|
|
|
},
|
|
|
+ filters: {
|
|
|
+ topicType(val) {
|
|
|
+ if (val == 0) return '单选题';
|
|
|
+ if (val == 1) return '多选题';
|
|
|
+ if (val == 2) return '简答题';
|
|
|
+ },
|
|
|
+ },
|
|
|
metaInfo() {
|
|
|
return { title: this.$route.meta.title };
|
|
|
},
|