lrf402788946 5 jaren geleden
bovenliggende
commit
52a02ba788
2 gewijzigde bestanden met toevoegingen van 30 en 1 verwijderingen
  1. 4 1
      package.json
  2. 26 0
      src/views/statistics/detail.vue

+ 4 - 1
package.json

@@ -20,6 +20,7 @@
     "core-js": "^3.4.4",
     "echarts": "^4.8.0",
     "element-ui": "^2.13.0",
+    "file-saver": "^2.0.2",
     "jsonwebtoken": "^8.5.1",
     "lodash": "^4.17.15",
     "moment": "^2.26.0",
@@ -30,7 +31,8 @@
     "vue-meta": "^2.3.1",
     "vue-router": "^3.1.3",
     "vuex": "^3.1.2",
-    "wangeditor": "^3.1.1"
+    "wangeditor": "^3.1.1",
+    "xlsx": "^0.16.2"
   },
   "devDependencies": {
     "@vue/cli-plugin-babel": "^4.1.0",
@@ -46,6 +48,7 @@
     "less": "^3.0.4",
     "less-loader": "^5.0.0",
     "prettier": "^1.19.1",
+    "script-loader": "^0.7.2",
     "vue-template-compiler": "^2.6.10"
   },
   "eslintConfig": {

+ 26 - 0
src/views/statistics/detail.vue

@@ -18,6 +18,11 @@
             </el-row>
           </el-tab-pane>
           <el-tab-pane label="具体数据" name="data">
+            <el-row type="flex" align="middle" justify="end" style="margin-bottom:20px">
+              <el-col :span="2">
+                <el-button size="mini" type="primary" @click="toExcel">导出数据</el-button>
+              </el-col>
+            </el-row>
             <el-collapse v-model="collapse" accordion>
               <el-collapse-item v-for="(data, qi) in cdata" :key="qi" :title="data.studentname" :name="`${qi}`">
                 <el-row type="flex" align="middle" justify="center" style="border-bottom: 1px solid #EBEEF5;">
@@ -145,6 +150,27 @@ export default {
     toReturns() {
       window.history.go(-1);
     },
+    //导出excel数据
+    toExcel() {
+      const { export_json_to_excel } = require('@frame/excel/Export2Excel');
+      let duplicate = _.cloneDeep(this.cdata);
+      let data = [];
+      for (const dup of duplicate) {
+        const elm = { studentname: dup.studentname };
+        for (const answer of dup.answers) {
+          elm[answer.questionid] = answer.answer;
+        }
+        data.push(elm);
+      }
+      let dquest = _.cloneDeep(this.quest.question);
+      let qarr = dquest.map(i => ({ questionid: i._id, topic: i.topic }));
+      let tHeader = qarr.map(i => i.topic);
+      tHeader.unshift('学生姓名');
+      let filterVal = qarr.map(i => i.questionid);
+      filterVal.unshift('studentname');
+      data = data.map(v => filterVal.map(j => v[j]));
+      export_json_to_excel(tHeader, data, this.quest.name);
+    },
   },
   computed: {
     ...mapState(['user']),