Commit 76eb1bf66ec67186d81dc54e575bbe04cd86b938

Authored by 梁保满
1 parent 2126f54b

授课端版本管理,学生画像接口联调

src/api/apis/answerSheet.js
1   -
2 1 import service from "../axios"
3 2 import answerSheet from "../urls/answerSheet"
4 3  
... ... @@ -99,5 +98,4 @@ export default {
99 98 data
100 99 })
101 100 },
102   -}
103   -
  101 +}
104 102 \ No newline at end of file
... ...
src/api/apis/apis.js
... ... @@ -337,7 +337,22 @@ export default {
337 337 responseType: 'arraybuffer',
338 338 });
339 339 },
340   -
  340 + // 任课老师-查询学生列表
  341 + tStudentList(data) {
  342 + return service({
  343 + url: setUpUrls.tStudentList,
  344 + method: "POST",
  345 + data
  346 + });
  347 + },
  348 + //任课老师-学生测练统计
  349 + tStudentExamReport(data) {
  350 + return service({
  351 + url: setUpUrls.tStudentExamReport,
  352 + method: "POST",
  353 + data,
  354 + });
  355 + },
341 356  
342 357 // 查询角色列表
343 358 roleList(data) {
... ... @@ -1180,105 +1195,105 @@ export default {
1180 1195 });
1181 1196 },
1182 1197  
1183   - /** 平台管理 */
1184   - //账户管理
1185   - tenantPage(data) {
  1198 + /** 平台管理 */
  1199 + //账户管理
  1200 + tenantPage(data) {
1186 1201 return service({
1187 1202 url: setUpUrls.tenantPage,
1188 1203 method: "POST",
1189 1204 data
1190 1205 });
1191 1206 },
1192   - //修改账号
1193   - updateTenant(data) {
  1207 + //修改账号
  1208 + updateTenant(data) {
1194 1209 return service({
1195 1210 url: setUpUrls.updateTenant,
1196 1211 method: "POST",
1197 1212 data
1198 1213 });
1199 1214 },
1200   - //新增租户账号
1201   - addTenant(data) {
  1215 + //新增租户账号
  1216 + addTenant(data) {
1202 1217 return service({
1203 1218 url: setUpUrls.addTenant,
1204 1219 method: "POST",
1205 1220 data
1206 1221 });
1207 1222 },
1208   - //授课端版本管理
1209   - versionPage(data) {
  1223 + //授课端版本管理
  1224 + versionPage(data) {
1210 1225 return service({
1211 1226 url: setUpUrls.versionPage,
1212 1227 method: "POST",
1213 1228 data
1214 1229 });
1215 1230 },
1216   - //新增授课端版本
1217   - addVersion(data) {
  1231 + //新增授课端版本
  1232 + addVersion(data) {
1218 1233 return service({
1219 1234 url: setUpUrls.addVersion,
1220 1235 method: "POST",
1221 1236 data
1222 1237 });
1223 1238 },
1224   - //删除授课端版本
1225   - delVersion(data) {
  1239 + //删除授课端版本
  1240 + delVersion(data) {
1226 1241 return service({
1227 1242 url: setUpUrls.delVersion,
1228 1243 method: "POST",
1229 1244 data
1230 1245 });
1231 1246 },
1232   - //基站统计数据
1233   - pStationReport(data) {
  1247 + //基站统计数据
  1248 + pStationReport(data) {
1234 1249 return service({
1235 1250 url: setUpUrls.pStationReport,
1236 1251 method: "POST",
1237 1252 data
1238 1253 });
1239 1254 },
1240   - //答题器统计数据
1241   - pKeyboardReport(data) {
  1255 + //答题器统计数据
  1256 + pKeyboardReport(data) {
1242 1257 return service({
1243 1258 url: setUpUrls.pKeyboardReport,
1244 1259 method: "POST",
1245 1260 data
1246 1261 });
1247 1262 },
1248   - //查询设备列表
1249   - pDeviceList(data) {
  1263 + //查询设备列表
  1264 + pDeviceList(data) {
1250 1265 return service({
1251 1266 url: setUpUrls.pDeviceList,
1252 1267 method: "POST",
1253 1268 data
1254 1269 });
1255 1270 },
1256   - //查询设备详情
1257   - pDeviceDetail(data) {
  1271 + //查询设备详情
  1272 + pDeviceDetail(data) {
1258 1273 return service({
1259 1274 url: setUpUrls.pDeviceDetail,
1260 1275 method: "POST",
1261 1276 data
1262 1277 });
1263 1278 },
1264   - //查询设备日志列表
1265   - pDeviceLogList(data) {
  1279 + //查询设备日志列表
  1280 + pDeviceLogList(data) {
1266 1281 return service({
1267 1282 url: setUpUrls.pDeviceLogList,
1268 1283 method: "POST",
1269 1284 data
1270 1285 });
1271 1286 },
1272   - //班级名册导入
1273   - studentTemplateUrl(data) {
  1287 + //班级名册导入
  1288 + studentTemplateUrl(data) {
1274 1289 return service({
1275 1290 url: setUpUrls.studentTemplateUrl,
1276 1291 method: "POST",
1277 1292 data
1278 1293 });
1279 1294 },
1280   - //班级名册导出
1281   - exportStudent(data) {
  1295 + //班级名册导出
  1296 + exportStudent(data) {
1282 1297 return service({
1283 1298 url: setUpUrls.exportStudent,
1284 1299 method: "POST",
... ... @@ -1286,32 +1301,32 @@ export default {
1286 1301 responseType: 'arraybuffer',
1287 1302 });
1288 1303 },
1289   - //上传图片
1290   - puploadImg(data) {
  1304 + //上传图片
  1305 + puploadImg(data) {
1291 1306 return service({
1292 1307 url: setUpUrls.uploadImg,
1293 1308 method: "POST",
1294 1309 data,
1295 1310 });
1296 1311 },
1297   - //学生测练统计
1298   - studentExamReport(data) {
  1312 + //学生测练统计
  1313 + pStudentExamReport(data) {
1299 1314 return service({
1300   - url: setUpUrls.studentExamReport,
  1315 + url: setUpUrls.pStudentExamReport,
1301 1316 method: "POST",
1302 1317 data,
1303 1318 });
1304 1319 },
1305   - //查询最新的授课端应用版本
1306   - pLatestVersion(data) {
  1320 + //查询最新的授课端应用版本
  1321 + pLatestVersion(data) {
1307 1322 return service({
1308 1323 url: setUpUrls.pLatestVersion,
1309 1324 method: "POST",
1310 1325 data,
1311 1326 });
1312 1327 },
1313   - //载指定版本授课端
1314   - pGetAppDownloadUrl(data) {
  1328 + //载指定版本授课端
  1329 + pGetAppDownloadUrl(data) {
1315 1330 return service({
1316 1331 url: setUpUrls.pGetAppDownloadUrl,
1317 1332 method: "POST",
... ...
src/api/apis/ask.js deleted
1   -
2   -import service from "../axios"
3   -import askUrls from "../urls/login"
4   -
5   -export default {
6   - // 随堂问列表
7   - fetchQuizList(data) {
8   - return service({
9   - url: askUrls.quizList,
10   - method: 'POST',
11   - data
12   - })
13   - },
14   - // 随堂问详情
15   - quizDetail(data) {
16   - return service({
17   - url: askUrls.quizDetail,
18   - method: 'POST',
19   - data
20   - })
21   - },
22   -}
src/api/apis/role.js deleted
1   -
2   -import service from "../axios"
3   -import roleUrls from "../urls/role"
4   -
5   -export default {
6   - // 获取权限列表
7   - fetchGetRoleList () {
8   - return service.post(roleUrls.getRoleList)
9   - },
10   -}
11   -
src/api/urls/apis.js
... ... @@ -79,9 +79,10 @@ export default {
79 79 exportPhaseExamReport: "/api_html/teaching/exportPhaseExamReport",
80 80 //任课老师-导出单卷测练报表
81 81 exportExamReport: "/api_html/teaching/exportExamReport",
82   -
83   -
84   -
  82 + //任课老师-查询学生列表
  83 + tStudentList: "/api_html/teaching/studentList",
  84 + //任课老师-学生测练统计
  85 + tStudentExamReport: "/api_html/teaching/studentExamReport",
85 86  
86 87  
87 88 // 查询角色列表
... ... @@ -334,7 +335,7 @@ export default {
334 335 // 班级名册导出
335 336 exportStudent: "/api_html/personal/exportStudent",
336 337 // 学生测练统计
337   - studentExamReport: "/api_html/personal/studentExamReport",
  338 + pStudentExamReport: "/api_html/personal/studentExamReport",
338 339 // 查询最新的授课端应用版本
339 340 pLatestVersion: "/api_html/personal/latestVersion",
340 341 // 载指定版本授课端
... ...
src/api/urls/ask.js deleted
1   -
2   -export default {
3   - // 随堂问列表
4   - quizList: "/web/quizList",
5   - // 随堂问详情
6   - quizDetail: "/web/quizDetail",
7   -}
src/api/urls/role.js deleted
1   -
2   -export default {
3   - // 获取角色列表
4   - getRoleList: "/permissions/getRoleList",
5   -}
6   -
src/components/setAnswer.vue
... ... @@ -137,7 +137,7 @@
137 137 >,</span
138 138 >
139 139 </template>
140   - <template v-if="formAns.qusType == 2" class="answer-box">
  140 + <template v-if="formAns.qusType == 2">
141 141 <span
142 142 class="answer-s active"
143 143 v-for="option in formAns.answerOptions.split(',')"
... ...
src/views/admin/clientVersion/index.vue
... ... @@ -35,6 +35,7 @@
35 35 align="center"
36 36 ></el-table-column>
37 37 <el-table-column
  38 + width="80"
38 39 prop="versionNumber"
39 40 label="版本号"
40 41 align="center"
... ... @@ -49,19 +50,19 @@
49 50 prop="fileSize"
50 51 label="文件大小"
51 52 align="center"
52   - ></el-table-column>
  53 + ><template slot-scope="scoped">{{setSize(scoped.row.fileSize)}}</template></el-table-column>
53 54 <el-table-column
54 55 prop="description"
55 56 label="更新描述"
56 57 align="center"
57 58 ></el-table-column>
58   - <el-table-column label="操作" align="center" width="160">
  59 + <!-- <el-table-column label="操作" align="center" width="160">
59 60 <template slot-scope="scoped">
60 61 <el-popconfirm title="确定删除吗?" @confirm="remove(scoped.row)">
61 62 <span class="del" slot="reference">删除</span>
62 63 </el-popconfirm>
63 64 </template>
64   - </el-table-column>
  65 + </el-table-column> -->
65 66 </el-table>
66 67 <div class="pagination-box">
67 68 <el-pagination
... ... @@ -88,6 +89,16 @@
88 89 ref="formAdd"
89 90 label-width="160px"
90 91 >
  92 + <el-form-item label="应用名称:" prop="versionName">
  93 + <el-col :span="12">
  94 + <el-input
  95 + placeholder="请输入应用名称"
  96 + v-model.trim="formAdd.appName"
  97 + maxlength="30"
  98 + >
  99 + </el-input>
  100 + </el-col>
  101 + </el-form-item>
91 102 <el-form-item label="版本名称:" prop="versionName">
92 103 <el-col :span="12">
93 104 <el-input
... ... @@ -158,23 +169,31 @@ export default {
158 169 diaAdd: false,
159 170 tableData: [],
160 171 formAdd: {
  172 + appName: "",
161 173 versionName: "",
162 174 versionNumber: "",
163 175 appImage: "",
  176 + md5: "",
  177 + fileSize: "",
164 178 filePath: "",
  179 + incrementMd5: "",
  180 + incrementFileSize: "",
165 181 incrementFilePath: "",
166 182 description: "",
167 183 },
168 184 ruleAdd: {
  185 + appName: [
  186 + { required: true, message: "请输入应用名称", trigger: "blur" },
  187 + ],
169 188 versionName: [
170 189 { required: true, message: "请输入版本名称", trigger: "blur" },
171 190 ],
172 191 filePath: [
173 192 { required: true, message: "请上传全量文件包", trigger: "blur" },
174 193 ],
175   - incrementFilePath: [
176   - { required: true, message: "请上传增量文件包", trigger: "blur" },
177   - ],
  194 + // incrementFilePath: [
  195 + // { required: true, message: "请上传增量文件包", trigger: "blur" },
  196 + // ],
178 197 },
179 198 page: 1,
180 199 size: 20,
... ... @@ -185,13 +204,14 @@ export default {
185 204 this._QueryData();
186 205 },
187 206 methods: {
  207 + setSize(size){
  208 + let fileSize = (size/1024/1224).toFixed(2)
  209 + return `${fileSize}MB`
  210 + },
188 211 openAddDia() {
189   - this.formAdd.versionName = "";
190   - this.formAdd.versionNumber = "";
191   - this.formAdd.appImage = "";
192   - this.formAdd.filePath = "";
193   - this.formAdd.incrementFilePath = "";
194   - this.formAdd.description = "";
  212 + for (let key in this.formAdd) {
  213 + this.formAdd[key] = "";
  214 + }
195 215 this.diaAdd = true;
196 216 },
197 217 changePage(page) {
... ... @@ -213,26 +233,36 @@ export default {
213 233 this.formAdd.appImage = res.data.resId;
214 234 },
215 235 appfilesSuccess(res) {
216   - this.formAdd.filePath = res.data;
  236 + this.formAdd.md5 = res.data.md5;
  237 + this.formAdd.fileSize = res.data.size;
  238 + this.formAdd.filePath = res.data.resId;
217 239 },
218 240 addfilesSuccess(res) {
219   - this.formAdd.incrementFilePath = res.data;
  241 + this.formAdd.incrementMd5 = res.data.md5;
  242 + this.formAdd.incrementFileSize = res.data.size;
  243 + this.formAdd.incrementFilePath = res.data.resId;
220 244 },
221 245 async save() {
222   - if (this.addLoading) return;
223   - this.addLoading = true;
224   - const { data, status, info } = await this.$request.addVersion({
225   - ...this.formAdd,
226   - });
  246 + this.$refs.formAdd.validate(async (valid) => {
  247 + if (valid) {
  248 + if (this.addLoading) return;
  249 + this.addLoading = true;
  250 + const { data, status, info } = await this.$request.addVersion({
  251 + ...this.formAdd,
  252 + });
227 253  
228   - this.addLoading = false;
229   - if (status === 0) {
230   - this.diaAdd = false;
231   - this.$message.success("添加成功~");
232   - this._QueryData();
233   - } else {
234   - this.$message.error(info);
235   - }
  254 + this.addLoading = false;
  255 + if (status === 0) {
  256 + this.diaAdd = false;
  257 + this.$message.success("添加成功~");
  258 + this._QueryData();
  259 + } else {
  260 + this.$message.error(info);
  261 + }
  262 + } else {
  263 + this.$message.warning("必填项不能为空,请检查。");
  264 + }
  265 + });
236 266 },
237 267 async _QueryData() {
238 268 this.loading = true;
... ...
src/views/layout/header/header.vue
... ... @@ -180,6 +180,7 @@ export default {
180 180 if (data) {
181 181 window.location.href = data;
182 182 } else {
  183 + localStorage.setItem("token","")
183 184 this.$store.commit("setToken", "");
184 185 this.$store.commit("setInfo", {});
185 186 this.$store.commit("setRouters", []);
... ...
src/views/personal/setUp/student.vue
... ... @@ -166,7 +166,7 @@
166 166 <el-checkbox
167 167 v-for="item in subjectList"
168 168 :label="item"
169   - :key="item.id"
  169 + :key="item"
170 170 >{{ item }}</el-checkbox
171 171 >
172 172 </el-checkbox-group>
... ... @@ -195,11 +195,7 @@
195 195 </div>
196 196 </el-dialog>
197 197 <el-dialog title="学生导入" :visible.sync="diaUp" width="600">
198   - <up-load
199   - :url="url"
200   - @upSuccess="upSuccess"
201   - fileName="学生模板"
202   - >
  198 + <up-load :url="url" @upSuccess="upSuccess" fileName="学生模板">
203 199 <p class="down-txt" slot="down">
204 200 通过Excel名单导入学生模板,点击
205 201 <el-link type="danger" @click="downExcel">模板下载</el-link> 。
... ... @@ -364,7 +360,10 @@ export default {
364 360 async _QuerySubject() {
365 361 const { data, status, info } = await this.$request.pSubjectList();
366 362 if (status === 0) {
367   - this.subjectList = [...data.subjectNames] || [];
  363 + this.subjectList =
  364 + data?.subjectNames.map((item) => {
  365 + return item.subjectName;
  366 + }) || [];
368 367 } else {
369 368 this.$message.error(info);
370 369 }
... ... @@ -435,7 +434,7 @@ export default {
435 434  
436 435 async _QueryClass() {
437 436 const { data, status, info } = await this.$request.pClassList({
438   - needStudentCount:1
  437 + needStudentCount: 1,
439 438 });
440 439 if (status === 0) {
441 440 this.classList = [...data.list] || [];
... ... @@ -462,7 +461,7 @@ export default {
462 461 let data = await this.$request.exportStudent();
463 462 this.loadingDown = false;
464 463 if (data) {
465   - let blob = new Blob([data], {
  464 + let blob = new Blob([data], {
466 465 type: "application/vnd.ms-excel;charset=utf-8",
467 466 });
468 467 downloadFile(`学生名单.xlsx`, blob);
... ...
src/views/portrait/detail.vue
... ... @@ -8,6 +8,20 @@
8 8 <div class="answer-header">
9 9 <div class="sel-box">
10 10 <el-select
  11 + v-if="role == 'ROLE_JIAOSHI'"
  12 + class="sel"
  13 + v-model="query.subjectNames"
  14 + placeholder="选择科目"
  15 + >
  16 + <el-option
  17 + v-for="item in subjectList"
  18 + :key="item.value"
  19 + :label="item.label"
  20 + :value="item.value"
  21 + >
  22 + </el-option>
  23 + </el-select>
  24 + <el-select
11 25 class="sel"
12 26 multiple
13 27 v-model="query.subjectNames"
... ... @@ -145,6 +159,7 @@ export default {
145 159 components: { radarChart, lineChart },
146 160 data() {
147 161 return {
  162 + role: "",
148 163 id: "",
149 164 studentName: "",
150 165 studentCode: "",
... ... @@ -184,11 +199,18 @@ export default {
184 199 };
185 200 },
186 201 async created() {
  202 + this.role =
  203 + this.$store.getters.info.showRole ||
  204 + this.$store.getters.info.permissions[0].role;
187 205 this.id = this.$route.query.id;
188 206 this.classId = this.$route.query.classId;
189 207 this.studentCode = this.$route.query.studentCode;
190 208 this.studentName = this.$route.query.studentName;
191   - this.subjectNames = this.$route.query.subjectNames?.split(",") || [];
  209 + if (this.role != "ROLE_JIAOSHI") {
  210 + this.subjectNames = this.$route.query.subjectNames?.split() || [];
  211 + } else {
  212 + this.subjectNames = this.$route.query.subjectNames;
  213 + }
192 214 await this._QuerySubjectList();
193 215 await this.setDate(1);
194 216 let startDay = this.query?.startDay;
... ... @@ -285,7 +307,11 @@ export default {
285 307 }
286 308 },
287 309 async _QuerySubjectList() {
288   - const { data, status, info } = await this.$request.pSubjectList({
  310 + let subjectList =
  311 + this.role == "ROLE_PERSONAL"
  312 + ? this.$request.pSubjectList
  313 + : this.$request.tSubjectList;
  314 + const { data, status, info } = await subjectList({
289 315 classId: this.classId,
290 316 });
291 317 if (status === 0) {
... ... @@ -296,22 +322,30 @@ export default {
296 322 label: item,
297 323 };
298 324 }) || [];
299   - this.subjectList.unshift({
300   - value: "全部",
301   - label: "全部",
302   - });
303   - if (this.subjectNames.length == 0) {
304   - this.query.subjectNames.push(this.subjectList[0]?.value);
  325 + if (this.role != "ROLE_JIAOSHI") {
  326 + this.subjectList.unshift({
  327 + value: "全部",
  328 + label: "全部",
  329 + });
  330 + if (this.subjectNames.length == 0) {
  331 + this.query.subjectNames.push(this.subjectList[0]?.value);
  332 + } else {
  333 + this.query.subjectNames = [...this.subjectNames];
  334 + }
  335 + this.type =
  336 + this.query.subjectNames.length > 1
  337 + ? 1
  338 + : this.query.subjectNames[0] == "全部" &&
  339 + this.subjectList.length != 2
  340 + ? 1
  341 + : 2;
305 342 } else {
306   - this.query.subjectNames = [...this.subjectNames];
  343 + if (!this.subjectNames) {
  344 + this.query.subjectNames = this.subjectList[0]?.value;
  345 + } else {
  346 + this.query.subjectNames = this.subjectNames;
  347 + }
307 348 }
308   - this.type =
309   - this.query.subjectNames.length > 1
310   - ? 1
311   - : this.query.subjectNames[0] == "全部" &&
312   - this.subjectList.length != 2
313   - ? 1
314   - : 2;
315 349 } else {
316 350 this.$message.error(info);
317 351 }
... ... @@ -326,21 +360,29 @@ export default {
326 360 }
327 361 delete query.subjectNames;
328 362 let subjectNames;
329   - if (
330   - this.query.subjectNames.length == 1 &&
331   - this.query.subjectNames[0] == "全部"
332   - ) {
333   - subjectNames = this.subjectList
334   - .filter((item) => {
335   - return item.value != "全部";
336   - })
337   - .map((item) => {
338   - return item.value;
339   - });
  363 + if (this.role != "ROLE_JIAOSHI") {
  364 + if (
  365 + this.query.subjectNames.length == 1 &&
  366 + this.query.subjectNames[0] == "全部"
  367 + ) {
  368 + subjectNames = this.subjectList
  369 + .filter((item) => {
  370 + return item.value != "全部";
  371 + })
  372 + .map((item) => {
  373 + return item.value;
  374 + });
  375 + } else {
  376 + subjectNames = [...this.query.subjectNames];
  377 + }
340 378 } else {
341   - subjectNames = [...this.query.subjectNames];
  379 + subjectNames = [this.query.subjectNames];
342 380 }
343   - const { data, status, info } = await this.$request.studentExamReport({
  381 + let studentExamReport =
  382 + this.role == "ROLE_PERSONAL"
  383 + ? this.$request.pStudentExamReport
  384 + : this.$request.tStudentExamReport;
  385 + const { data, status, info } = await studentExamReport({
344 386 studentId: this.id,
345 387 subjectNames: subjectNames,
346 388 ...query,
... ...
src/views/standard/ask/index.vue
... ... @@ -769,7 +769,7 @@ export default {
769 769 this.loading = false;
770 770 if (status === 0) {
771 771 this.tableData = (data?.list && [...data?.list]) || [];
772   - this.total = data.count;
  772 + this.total = data?.count || 0;
773 773 } else {
774 774 this.$message.error(info);
775 775 }
... ...
src/views/standard/test/index.vue
1 1 <template>
2   - <div ref="main" class="page-container" :class="dialogVisible ? 'active' : ''">
  2 + <div ref="main" class="page-container">
3 3 <back-box>
4 4 <template slot="title">
5 5 <span>即时测-数据报表</span>
... ... @@ -788,7 +788,7 @@ export default {
788 788 this.loading = false;
789 789 if (status === 0) {
790 790 this.tableData = (data?.list && [...data?.list]) || [];
791   - this.total = data.count;
  791 + this.total = data?.count || 0;
792 792 } else {
793 793 this.$message.error(info);
794 794 }
... ...