提交 8ab18457 authored 作者: 王鹏飞's avatar 王鹏飞

chore: 试卷批阅新增分数和导出

上级 84b843c8
...@@ -15,7 +15,8 @@ ...@@ -15,7 +15,8 @@
"vue": "^2.6.14", "vue": "^2.6.14",
"vue-meta": "^2.4.0", "vue-meta": "^2.4.0",
"vue-router": "^3.5.4", "vue-router": "^3.5.4",
"vuex": "^3.6.2" "vuex": "^3.6.2",
"xlsx": "^0.18.5"
}, },
"devDependencies": { "devDependencies": {
"ali-oss": "^6.17.1", "ali-oss": "^6.17.1",
...@@ -1226,6 +1227,14 @@ ...@@ -1226,6 +1227,14 @@
"node": ">= 0.12.0" "node": ">= 0.12.0"
} }
}, },
"node_modules/adler-32": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz",
"integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==",
"engines": {
"node": ">=0.8"
}
},
"node_modules/aes-decrypter": { "node_modules/aes-decrypter": {
"version": "3.1.2", "version": "3.1.2",
"resolved": "https://registry.npmjs.org/aes-decrypter/-/aes-decrypter-3.1.2.tgz", "resolved": "https://registry.npmjs.org/aes-decrypter/-/aes-decrypter-3.1.2.tgz",
...@@ -1645,6 +1654,18 @@ ...@@ -1645,6 +1654,18 @@
} }
] ]
}, },
"node_modules/cfb": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.2.tgz",
"integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==",
"dependencies": {
"adler-32": "~1.3.0",
"crc-32": "~1.2.0"
},
"engines": {
"node": ">=0.8"
}
},
"node_modules/chalk": { "node_modules/chalk": {
"version": "4.1.2", "version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
...@@ -1691,6 +1712,14 @@ ...@@ -1691,6 +1712,14 @@
"fsevents": "~2.3.2" "fsevents": "~2.3.2"
} }
}, },
"node_modules/codepage": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz",
"integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==",
"engines": {
"node": ">=0.8"
}
},
"node_modules/color-convert": { "node_modules/color-convert": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
...@@ -1784,6 +1813,17 @@ ...@@ -1784,6 +1813,17 @@
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
"dev": true "dev": true
}, },
"node_modules/crc-32": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz",
"integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==",
"bin": {
"crc32": "bin/crc32.njs"
},
"engines": {
"node": ">=0.8"
}
},
"node_modules/cross-spawn": { "node_modules/cross-spawn": {
"version": "7.0.3", "version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
...@@ -3274,6 +3314,14 @@ ...@@ -3274,6 +3314,14 @@
"pause-stream": "~0.0.11" "pause-stream": "~0.0.11"
} }
}, },
"node_modules/frac": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz",
"integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==",
"engines": {
"node": ">=0.8"
}
},
"node_modules/fs-extra": { "node_modules/fs-extra": {
"version": "10.1.0", "version": "10.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
...@@ -5267,6 +5315,17 @@ ...@@ -5267,6 +5315,17 @@
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
"dev": true "dev": true
}, },
"node_modules/ssf": {
"version": "0.11.2",
"resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz",
"integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==",
"dependencies": {
"frac": "~1.1.2"
},
"engines": {
"node": ">=0.8"
}
},
"node_modules/statuses": { "node_modules/statuses": {
"version": "1.5.0", "version": "1.5.0",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
...@@ -6278,6 +6337,22 @@ ...@@ -6278,6 +6337,22 @@
"semver": "bin/semver" "semver": "bin/semver"
} }
}, },
"node_modules/wmf": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz",
"integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==",
"engines": {
"node": ">=0.8"
}
},
"node_modules/word": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz",
"integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==",
"engines": {
"node": ">=0.8"
}
},
"node_modules/word-wrap": { "node_modules/word-wrap": {
"version": "1.2.3", "version": "1.2.3",
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
...@@ -6293,6 +6368,26 @@ ...@@ -6293,6 +6368,26 @@
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
"dev": true "dev": true
}, },
"node_modules/xlsx": {
"version": "0.18.5",
"resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.18.5.tgz",
"integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==",
"dependencies": {
"adler-32": "~1.3.0",
"cfb": "~1.2.1",
"codepage": "~1.15.0",
"crc-32": "~1.2.1",
"ssf": "~0.11.2",
"wmf": "~1.0.1",
"word": "~0.3.0"
},
"bin": {
"xlsx": "bin/xlsx.njs"
},
"engines": {
"node": ">=0.8"
}
},
"node_modules/xml2js": { "node_modules/xml2js": {
"version": "0.4.23", "version": "0.4.23",
"resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz",
...@@ -7235,6 +7330,11 @@ ...@@ -7235,6 +7330,11 @@
"integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==",
"dev": true "dev": true
}, },
"adler-32": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz",
"integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A=="
},
"aes-decrypter": { "aes-decrypter": {
"version": "3.1.2", "version": "3.1.2",
"resolved": "https://registry.npmjs.org/aes-decrypter/-/aes-decrypter-3.1.2.tgz", "resolved": "https://registry.npmjs.org/aes-decrypter/-/aes-decrypter-3.1.2.tgz",
...@@ -7559,6 +7659,15 @@ ...@@ -7559,6 +7659,15 @@
"integrity": "sha512-1gLHWyfVoRDsHieO+CaeYe7jSo/MT7D7lhaXUiwwbuR5BwQxORs0f1tAwUSQr3YbxRXJvxHM/PA5FfPQRnsPeQ==", "integrity": "sha512-1gLHWyfVoRDsHieO+CaeYe7jSo/MT7D7lhaXUiwwbuR5BwQxORs0f1tAwUSQr3YbxRXJvxHM/PA5FfPQRnsPeQ==",
"dev": true "dev": true
}, },
"cfb": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.2.tgz",
"integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==",
"requires": {
"adler-32": "~1.3.0",
"crc-32": "~1.2.0"
}
},
"chalk": { "chalk": {
"version": "4.1.2", "version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
...@@ -7591,6 +7700,11 @@ ...@@ -7591,6 +7700,11 @@
"readdirp": "~3.6.0" "readdirp": "~3.6.0"
} }
}, },
"codepage": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz",
"integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA=="
},
"color-convert": { "color-convert": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
...@@ -7667,6 +7781,11 @@ ...@@ -7667,6 +7781,11 @@
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
"dev": true "dev": true
}, },
"crc-32": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz",
"integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ=="
},
"cross-spawn": { "cross-spawn": {
"version": "7.0.3", "version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
...@@ -8686,6 +8805,11 @@ ...@@ -8686,6 +8805,11 @@
"pause-stream": "~0.0.11" "pause-stream": "~0.0.11"
} }
}, },
"frac": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz",
"integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA=="
},
"fs-extra": { "fs-extra": {
"version": "10.1.0", "version": "10.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
...@@ -10184,6 +10308,14 @@ ...@@ -10184,6 +10308,14 @@
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
"dev": true "dev": true
}, },
"ssf": {
"version": "0.11.2",
"resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz",
"integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==",
"requires": {
"frac": "~1.1.2"
}
},
"statuses": { "statuses": {
"version": "1.5.0", "version": "1.5.0",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
...@@ -10990,6 +11122,16 @@ ...@@ -10990,6 +11122,16 @@
} }
} }
}, },
"wmf": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz",
"integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw=="
},
"word": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz",
"integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA=="
},
"word-wrap": { "word-wrap": {
"version": "1.2.3", "version": "1.2.3",
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
...@@ -11002,6 +11144,20 @@ ...@@ -11002,6 +11144,20 @@
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
"dev": true "dev": true
}, },
"xlsx": {
"version": "0.18.5",
"resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.18.5.tgz",
"integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==",
"requires": {
"adler-32": "~1.3.0",
"cfb": "~1.2.1",
"codepage": "~1.15.0",
"crc-32": "~1.2.1",
"ssf": "~0.11.2",
"wmf": "~1.0.1",
"word": "~0.3.0"
}
},
"xml2js": { "xml2js": {
"version": "0.4.23", "version": "0.4.23",
"resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz",
......
...@@ -18,7 +18,8 @@ ...@@ -18,7 +18,8 @@
"vue": "^2.6.14", "vue": "^2.6.14",
"vue-meta": "^2.4.0", "vue-meta": "^2.4.0",
"vue-router": "^3.5.4", "vue-router": "^3.5.4",
"vuex": "^3.6.2" "vuex": "^3.6.2",
"xlsx": "^0.18.5"
}, },
"devDependencies": { "devDependencies": {
"ali-oss": "^6.17.1", "ali-oss": "^6.17.1",
......
...@@ -2,36 +2,73 @@ ...@@ -2,36 +2,73 @@
<el-dialog v-bind="$attrs" v-on="$listeners" width="600px"> <el-dialog v-bind="$attrs" v-on="$listeners" width="600px">
<el-tabs v-model="activeName"> <el-tabs v-model="activeName">
<el-tab-pane :label="`全部(${students.length})`" name="0"> <el-tab-pane :label="`全部(${students.length})`" name="0">
<ul> <VueExcelXlsx :data="students" :columns="exportColumns" :file-name="data.paper_title + '_全部'" sheet-name="全部">
<el-button type="primary">导出</el-button>
</VueExcelXlsx>
<AppList v-bind="tableOptions" :data="students">
<template #table-action="{ row }">
<el-button type="text" @click="$emit('studentReview', row)">查看</el-button>
</template>
</AppList>
<!-- <ul>
<li v-for="(student, index) in students" :key="index" @click="$emit('studentReview', student)"> <li v-for="(student, index) in students" :key="index" @click="$emit('studentReview', student)">
{{ student.name }} {{ student.name }}
</li> </li>
</ul> </ul> -->
</el-tab-pane> </el-tab-pane>
<el-tab-pane :label="`未批阅(${unreviewedStudents.length})`" name="1"> <el-tab-pane :label="`未批阅(${unreviewedStudents.length})`" name="1">
<ul> <VueExcelXlsx :data="unreviewedStudents" :columns="exportColumns" :file-name="data.paper_title + '_未批阅'" sheet-name="未批阅">
<el-button type="primary">导出</el-button>
</VueExcelXlsx>
<AppList v-bind="tableOptions" :data="unreviewedStudents">
<template #table-action="{ row }">
<el-button type="text" @click="$emit('studentReview', row)">查看</el-button>
</template>
</AppList>
<!-- <ul>
<li v-for="(student, index) in unreviewedStudents" :key="index" @click="$emit('studentReview', student)"> <li v-for="(student, index) in unreviewedStudents" :key="index" @click="$emit('studentReview', student)">
{{ student.name }} {{ student.name }}
</li> </li>
</ul> </ul> -->
</el-tab-pane> </el-tab-pane>
<el-tab-pane :label="`已批阅(${reviewedStudents.length})`" name="2"> <el-tab-pane :label="`已批阅(${reviewedStudents.length})`" name="2">
<ul> <VueExcelXlsx :data="reviewedStudents" :columns="exportColumns" :file-name="data.paper_title + '_已批阅'" sheet-name="已批阅">
<el-button type="primary">导出</el-button>
</VueExcelXlsx>
<AppList v-bind="tableOptions" :data="reviewedStudents">
<template #table-action="{ row }">
<el-button type="text" @click="$emit('studentReview', row)">查看</el-button>
</template>
</AppList>
<!-- <ul>
<li v-for="(student, index) in reviewedStudents" :key="index" @click="$emit('studentReview', student)"> <li v-for="(student, index) in reviewedStudents" :key="index" @click="$emit('studentReview', student)">
{{ student.name }} {{ student.name }}
</li> </li>
</ul> </ul> -->
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
</el-dialog> </el-dialog>
</template> </template>
<script> <script>
import VueExcelXlsx from '@/components/VueExcelXlsx.vue'
export default { export default {
props: { students: { type: Array, default: () => [] } }, props: { data: { type: Object, default: () => ({}) }, students: { type: Array, default: () => [] } },
components: { VueExcelXlsx },
data() { data() {
return { return {
activeName: '0' activeName: '0',
tableOptions: {
columns: [
{ label: '姓名', prop: 'name' },
{ label: '分数', prop: 'score' },
{ label: '操作', align: 'right', slots: 'table-action' }
]
},
exportColumns: [
{ label: '姓名', field: 'name' },
{ label: '分数', field: 'score' }
]
} }
}, },
computed: { computed: {
......
<template>
<span @click="exportExcel">
<slot></slot>
</span>
</template>
<script>
import XLSX from 'xlsx'
export default {
name: 'vue-excel-xlsx',
props: {
columns: {
type: Array,
default: () => []
},
data: {
type: Array,
default: () => []
},
fileName: {
type: String,
default: 'excel'
},
sheetName: {
type: String,
default: 'SheetName'
},
fileType: {
type: String,
default: 'xlsx',
validator: val => ['xlsx', 'xls'].includes(val)
}
},
methods: {
exportExcel() {
const createXLSLFormatObj = []
const newXlsHeader = []
const vm = this
if (vm.columns.length === 0) {
console.log('Add columns!')
return
}
if (vm.data.length === 0) {
this.$message.error('无数据')
console.log('Add data!')
return
}
vm.columns.forEach(column => {
newXlsHeader.push(column.label)
})
createXLSLFormatObj.push(newXlsHeader)
vm.data.forEach(value => {
const innerRowData = []
vm.columns.forEach(val => {
let fieldValue = value[val.field]
if (val.field.split('.').length > 1) {
fieldValue = this.getNestedValue(value, val.field)
}
if (val.dataFormat && typeof val.dataFormat === 'function') {
innerRowData.push(val.dataFormat(fieldValue))
} else {
innerRowData.push(fieldValue)
}
})
createXLSLFormatObj.push(innerRowData)
})
const fileName = vm.fileName + '.' + vm.fileType
const wsName = vm.sheetName
const wb = XLSX.utils.book_new()
const ws = XLSX.utils.aoa_to_sheet(createXLSLFormatObj)
XLSX.utils.book_append_sheet(wb, ws, wsName)
XLSX.writeFile(wb, fileName)
},
getNestedValue(object, string) {
string = string.replace(/\[(\w+)\]/g, '.$1')
string = string.replace(/^\./, '')
const a = string.split('.')
for (let i = 0, n = a.length; i < n; ++i) {
const k = a[i]
if (k in object) {
object = object[k]
} else {
return
}
}
return object
}
}
}
</script>
...@@ -5,11 +5,7 @@ ...@@ -5,11 +5,7 @@
<el-link type="primary">{{ row.paper_title }}</el-link> <el-link type="primary">{{ row.paper_title }}</el-link>
</template> </template>
</app-list> </app-list>
<review-students <review-students @studentReview="studentReview" :visible.sync="visible" :data="currentClickRow" :students="currentClickRow.students"></review-students>
@studentReview="studentReview"
:visible.sync="visible"
:students="currentClickRow.students"
></review-students>
</app-card> </app-card>
</template> </template>
......
...@@ -5,11 +5,7 @@ ...@@ -5,11 +5,7 @@
<el-link type="primary">{{ row.paper_title }}</el-link> <el-link type="primary">{{ row.paper_title }}</el-link>
</template> </template>
</app-list> </app-list>
<review-students <review-students @studentReview="studentReview" :data="currentClickRow" :visible.sync="visible" :students="currentClickRow.students"></review-students>
@studentReview="studentReview"
:visible.sync="visible"
:students="currentClickRow.students"
></review-students>
</app-card> </app-card>
</template> </template>
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论