Commit ead476dde3ee1f3851870933ba75ee0a19ba2bd4
1 parent
627f3fff
fix:最终定版
Showing
15 changed files
with
309 additions
and
222 deletions
src/App.vue
... | ... | @@ -22,9 +22,10 @@ export default { |
22 | 22 | |
23 | 23 | const docHeight = document.body.clientHeight; |
24 | 24 | |
25 | - const docWidth = document.body.clientWidth; | |
26 | - | |
27 | - if (docWidth < 1700) { | |
25 | + const docWidth = document.body.clientWidth; | |
26 | + | |
27 | + if (docWidth < 1700) { | |
28 | + | |
28 | 29 | const currentScale = docHeight / docWidth; |
29 | 30 | |
30 | 31 | let [scale, translate] = [0, 0]; |
... | ... | @@ -51,22 +52,56 @@ export default { |
51 | 52 | offsetHeight > 0 ? `translate(0, ${offsetHeight / 2}px)` : ""; |
52 | 53 | } |
53 | 54 | |
54 | - if (docHeight <= 700) { | |
55 | + if (docHeight <= 600) { | |
56 | + | |
57 | + $app.style.cssText = ` | |
58 | + transform: scale(${scale}) ${translate}; | |
59 | + transform-origin: top left; | |
60 | + min-width: 1920px; | |
61 | + min-height:830px; | |
62 | + `; | |
63 | + } | |
64 | + else if (docHeight == 610) { | |
65 | + $app.style.cssText = ` | |
66 | + transform: scale(${scale}) ${translate}; | |
67 | + transform-origin: top left; | |
68 | + min-width: 1920px; | |
69 | + min-height:885px; | |
70 | + `; | |
71 | + } | |
72 | + else if (docHeight <= 606) { | |
73 | + $app.style.cssText = ` | |
74 | + transform: scale(${scale}) ${translate}; | |
75 | + transform-origin: top left; | |
76 | + min-width: 1920px; | |
77 | + min-height:850px; | |
78 | + `; | |
79 | + } | |
80 | + else if (docHeight <= 650) { | |
81 | + | |
82 | + $app.style.cssText = ` | |
83 | + transform: scale(${scale}) ${translate}; | |
84 | + transform-origin: top left; | |
85 | + min-width: 1920px; | |
86 | + min-height:850px; | |
87 | + `; | |
88 | + } | |
89 | + else if (docHeight <= 700) { | |
55 | 90 | |
56 | 91 | $app.style.cssText = ` |
57 | 92 | transform: scale(${scale}) ${translate}; |
58 | 93 | transform-origin: top left; |
59 | 94 | min-width: 1920px; |
60 | - min-height: 885px; | |
95 | + min-height: 890px; | |
61 | 96 | `; |
62 | 97 | } |
63 | - else if (docHeight <= 780) { | |
98 | + else if (docHeight <= 750) { | |
64 | 99 | |
65 | 100 | $app.style.cssText = ` |
66 | 101 | transform: scale(${scale}) ${translate}; |
67 | 102 | transform-origin: top left; |
68 | 103 | min-width: 1920px; |
69 | - min-height:910px; | |
104 | + min-height: 910px; | |
70 | 105 | `; |
71 | 106 | } |
72 | 107 | else { | ... | ... |
src/assets/css/index.scss
... | ... | @@ -498,7 +498,7 @@ ul { |
498 | 498 | .flex-btn { |
499 | 499 | position: fixed !important; |
500 | 500 | z-index: 999 !important; |
501 | - bottom: 30px !important; | |
501 | + bottom: 0px !important; | |
502 | 502 | padding: 10px 10px !important; |
503 | 503 | right: 0px !important; |
504 | 504 | background-color: white !important; |
... | ... | @@ -514,7 +514,7 @@ ul { |
514 | 514 | .flex-btn { |
515 | 515 | position: fixed !important; |
516 | 516 | z-index: 999 !important; |
517 | - bottom: 30px !important; | |
517 | + bottom: -4px !important; | |
518 | 518 | padding: 10px 10px !important; |
519 | 519 | right: 0px !important; |
520 | 520 | background-color: white !important; |
... | ... | @@ -541,11 +541,13 @@ ul { |
541 | 541 | |
542 | 542 | |
543 | 543 | @media screen and (max-width: 1920px) { |
544 | - * :not(.p1, .fa, .el-button, .el-icon-upload, h1, h2, h3, h4, h5, h6, .el-progress__text) { | |
544 | + * :not(.p1, .fa, .el-button, .el-icon-upload, h1, h2, h3, h4, h5, h6, .el-progress__text, .text-radius) { | |
545 | 545 | |
546 | 546 | font-size: 18px !important; |
547 | 547 | |
548 | - | |
548 | + .text-radius *{ | |
549 | + font-size: 16px !important; | |
550 | + } | |
549 | 551 | |
550 | 552 | .default-body-detail * { |
551 | 553 | font-size: 15px !important; |
... | ... | @@ -576,11 +578,15 @@ ul { |
576 | 578 | } |
577 | 579 | |
578 | 580 | @media screen and (min-width: 1921px) { |
579 | - * :not(.p1, .fa, .el-button, .el-icon-upload, h1, h2, h3, h4, h5, h6, .el-progress__text) { | |
581 | + * :not(.p1, .fa, .el-button, .el-icon-upload, h1, h2, h3, h4, h5, h6, .el-progress__text, .text-radius) { | |
580 | 582 | |
581 | 583 | font-size: 14px !important; |
582 | 584 | |
583 | - .default-body-detail * { | |
585 | + .text-radius * { | |
586 | + font-size: 14px !important; | |
587 | + } | |
588 | + | |
589 | + .default-body-detail * { | |
584 | 590 | font-size: 13px !important; |
585 | 591 | |
586 | 592 | .cell { |
... | ... | @@ -591,7 +597,7 @@ ul { |
591 | 597 | |
592 | 598 | .default-body .default-filter * { |
593 | 599 | line-height: 38px !important; |
594 | - } | |
600 | + } | |
595 | 601 | |
596 | 602 | .card-content { |
597 | 603 | width: 48% !important; | ... | ... |
src/config/index.js
src/store/index.js
... | ... | @@ -67,9 +67,11 @@ const store = new Vuex.Store({ |
67 | 67 | } |
68 | 68 | return null; |
69 | 69 | }); |
70 | + | |
70 | 71 | state.addRouters = aRouters; // 保存动态路由用来addRouter |
71 | 72 | state.routers = defaultRouter.concat(aRouters); // 所有有权限的路由表,用来生成菜单列表 |
72 | 73 | localStorage.setItem("addRouters", JSON.stringify(routers)); |
74 | + console.log('routers',state) | |
73 | 75 | }, |
74 | 76 | setTokenSources(state, data) { |
75 | 77 | if (data instanceof Array) { | ... | ... |
src/views/basic/askTestQuestion/components/askSummaryReport.vue
... | ... | @@ -306,8 +306,7 @@ export default { |
306 | 306 | _export() { |
307 | 307 | this.diaShow = true; |
308 | 308 | }, |
309 | - _print() { | |
310 | - | |
309 | + _print() { | |
311 | 310 | let title = this.detail.title || this.subjectNames?.join(); |
312 | 311 | tablePrint({ |
313 | 312 | id: "print-content", |
... | ... | @@ -473,6 +472,8 @@ export default { |
473 | 472 | this.singleSubjectSummary = periodListReponse.data.list; |
474 | 473 | |
475 | 474 | this.total = periodListReponse.data.count; |
475 | + | |
476 | + this.exportStudent = [...this.singleSubjectSummary]; | |
476 | 477 | }, |
477 | 478 | async _studentPerformance() { |
478 | 479 | ... | ... |
src/views/basic/askTestQuestion/detail.vue
... | ... | @@ -17,16 +17,13 @@ |
17 | 17 | <el-option v-for="(item, index) in types" :lable="item.name" :key="index" :value="item.name" /> |
18 | 18 | </el-select> |
19 | 19 | <div style="float: right;"> |
20 | - <span v-if="(dataType == '2' && currentType == '测验成绩单') || | |
21 | - (dataType == '2' && currentType == '试题分析') || | |
22 | - (dataType == '3' && currentType == '学生成绩排名')"> | |
20 | + <span v-if="(dataType == '2' && currentType == '测验成绩单') || (dataType == '2' && currentType == '试题分析') "> | |
23 | 21 | 单题低分率: |
24 | 22 | <el-input-number class="parent-number" v-model="lowLevel" :min="1" :max="100" label="低分率"> |
25 | 23 | </el-input-number> |
26 | 24 | </span> |
27 | 25 | |
28 | - <el-button v-if="(dataType == '3' && currentType == '班级对比情况表') || | |
29 | - (dataType == '3' && currentType == '学生成绩排名')" @click="_studentLevelSet" | |
26 | + <el-button v-if="(dataType == '3' && currentType == '班级对比情况表') || (dataType == '3' && currentType == '学生成绩排名')" @click="_studentLevelSet" | |
30 | 27 | class="green-el-button"> |
31 | 28 | 设置学生成绩等级 |
32 | 29 | </el-button> |
... | ... | @@ -405,6 +402,7 @@ |
405 | 402 | {{ scoped.row.missPeopleNumber }}</span> 人 |
406 | 403 | </span> |
407 | 404 | <span style="margin: 10px 0;" |
405 | + v-if="item.students && item.students?.length >= 1" | |
408 | 406 | v-for="(item, index) in scoped.row.details.filter(item => item.option.indexOf('未答') < 0 && !item.right)"> |
409 | 407 | 选{{ item.option }}:{{ item.students.join("/") }} |
410 | 408 | </span> |
... | ... | @@ -1650,7 +1648,7 @@ export default { |
1650 | 1648 | |
1651 | 1649 | var missCount = 0; |
1652 | 1650 | |
1653 | - var missI = questionList[i].details.filter(item => !item.right); | |
1651 | + var missI = questionList[i].details.filter(item => item.option.indexOf('未答') < 0 && !item.right); | |
1654 | 1652 | |
1655 | 1653 | missI.forEach(itemsa => { |
1656 | 1654 | missCount = Number(missCount) + Number(itemsa.students?.length ?? 0) | ... | ... |
src/views/basic/askTestQuestion/gradeAnalysisDetail.vue
... | ... | @@ -182,7 +182,7 @@ |
182 | 182 | <span>总计 <span style="color:red;"> |
183 | 183 | {{ scoped.row.missPeopleNumber }}</span> 人 |
184 | 184 | </span> |
185 | - <span style="margin: 10px 0;" | |
185 | + <span style="margin: 10px 0;" v-if="item.students && item.students?.length >= 1" | |
186 | 186 | v-for="(item, index) in scoped.row.details.filter(item => item.option.indexOf('未答') < 0 && !item.right)"> |
187 | 187 | 选{{ item.option }}:{{ item.students.join("/") }} |
188 | 188 | </span> |
... | ... | @@ -1044,7 +1044,7 @@ export default { |
1044 | 1044 | |
1045 | 1045 | var missCount = 0; |
1046 | 1046 | |
1047 | - var missI = questionList[i].details.filter(item => !item.right); | |
1047 | + var missI = questionList[i].details.filter(item => item.option.indexOf('未答') < 0 && !item.right); | |
1048 | 1048 | |
1049 | 1049 | missI.forEach(itemsa => { |
1050 | 1050 | missCount = Number(missCount) + Number(itemsa.students?.length ?? 0) | ... | ... |
src/views/basic/askTestQuestion/index.vue
... | ... | @@ -40,7 +40,7 @@ |
40 | 40 | </el-radio-group> |
41 | 41 | </div> |
42 | 42 | <el-main> |
43 | - <div style='position: relative;'> | |
43 | + <div class="paper-list"> | |
44 | 44 | <el-tabs v-model="tabType" v-loading="queryLoading" type="card" class="default-tabs"> |
45 | 45 | <el-tab-pane :name="'0'" :label="`我自编的(${createdCount})`"> |
46 | 46 | <div class="card-content" :key="index" v-for="( item, index ) in defaultList "> |
... | ... | @@ -53,6 +53,9 @@ |
53 | 53 | <div class="text"> |
54 | 54 | {{ item.id }} |
55 | 55 | </div> |
56 | + <div class="text-radius" v-if="item.tag && item.tag.length >= 1"> | |
57 | + <span> {{ item.tag }} </span> | |
58 | + </div> | |
56 | 59 | </div> |
57 | 60 | </el-col> |
58 | 61 | <el-col :span="18" class="content"> |
... | ... | @@ -73,7 +76,8 @@ |
73 | 76 | <el-popconfirm style="color:gray !important;" |
74 | 77 | @confirm="_deleteDetermineQ(item.id)" |
75 | 78 | :title="dataType == 1 ? '确认删除此课件' : '确认删除此试卷'"> |
76 | - <el-button class="small-button" :size="'small'" style="color:#606266 !important;" | |
79 | + <el-button class="small-button" :size="'small'" | |
80 | + style="color:#606266 !important;" | |
77 | 81 | @click.native="_delete(item.id)" type="text" |
78 | 82 | slot="reference">删除</el-button> |
79 | 83 | </el-popconfirm> |
... | ... | @@ -145,6 +149,9 @@ |
145 | 149 | <div class="text"> |
146 | 150 | {{ item.id }} |
147 | 151 | </div> |
152 | + <div class="text-radius" v-if="item.tag && item.tag.length >= 1"> | |
153 | + <span> {{ item.tag }} </span> | |
154 | + </div> | |
148 | 155 | </div> |
149 | 156 | </el-col> |
150 | 157 | <el-col :span="18" class="content"> |
... | ... | @@ -164,7 +171,8 @@ |
164 | 171 | <el-popconfirm style="color:gray !important;" |
165 | 172 | @confirm="_deleteDetermineQ(item.id)" |
166 | 173 | :title="dataType == 1 ? '确认删除此课件' : '确认删除此试卷'"> |
167 | - <el-button class="small-button" :size="'small'" style="color:#606266 !important;" | |
174 | + <el-button class="small-button" :size="'small'" | |
175 | + style="color:#606266 !important;" | |
168 | 176 | @click.native="_delete(item.id)" type="text" |
169 | 177 | slot="reference">删除</el-button> |
170 | 178 | </el-popconfirm> |
... | ... | @@ -274,7 +282,7 @@ |
274 | 282 | </el-image> |
275 | 283 | |
276 | 284 | </span> |
277 | - </div> | |
285 | + </div> | |
278 | 286 | <p>第二步:上传完成编辑好的试卷。</p> |
279 | 287 | </div> |
280 | 288 | </upload> |
... | ... | @@ -308,14 +316,14 @@ export default { |
308 | 316 | sharedList: [], |
309 | 317 | dataType: "1", |
310 | 318 | importType: 0, |
311 | - tabType: "0", | |
319 | + tabType: "0", | |
312 | 320 | url: "/api_html/common/paper/upload", //上传文档地址 |
313 | 321 | listPage: { |
314 | 322 | page: 1, |
315 | 323 | size: 8, |
316 | 324 | total: 0, |
317 | 325 | }, |
318 | - query: { | |
326 | + query: { | |
319 | 327 | dateStatus: "-1", |
320 | 328 | title: "", |
321 | 329 | class: null, |
... | ... | @@ -339,19 +347,19 @@ export default { |
339 | 347 | this.listPage.page = 1; |
340 | 348 | this._serach(); |
341 | 349 | }, |
342 | - 'query.dateStatus'(val) { | |
350 | + 'query.dateStatus'(val) { | |
343 | 351 | var dateRange = setDateRules(val); |
344 | 352 | |
345 | 353 | this.query.dateRange = [dateRange.startDay, dateRange.endDay]; |
346 | 354 | } |
347 | 355 | }, |
348 | - async created() { | |
356 | + async created() { | |
349 | 357 | this.dataType = location.href.endsWith("askPreparationQuestions") ? "1" : "2"; |
350 | 358 | this.code = this.$store.getters.csCode; |
351 | 359 | this.role = |
352 | 360 | this.$store.getters.info.showRole || |
353 | 361 | this.$store.getters.info.permissions[0].role; |
354 | - this.query.dateStatus = "onWeek"; | |
362 | + this.query.dateStatus = "onWeek"; | |
355 | 363 | await this._loadQueryDatas(); |
356 | 364 | }, |
357 | 365 | methods: { |
... | ... | @@ -657,182 +665,206 @@ export default { |
657 | 665 | }; |
658 | 666 | </script> |
659 | 667 | <style lang="scss"> |
660 | -.down-box { | |
661 | - padding-left: 20px; | |
668 | +.paper-list { | |
669 | + position: relative; | |
670 | + .down-box { | |
671 | + padding-left: 20px; | |
662 | 672 | |
663 | - .down-head { | |
664 | - display: block; | |
673 | + .down-head { | |
674 | + display: block; | |
665 | 675 | |
666 | - span, | |
667 | - a { | |
668 | - vertical-align: middle; | |
676 | + span, | |
677 | + a { | |
678 | + vertical-align: middle; | |
679 | + } | |
669 | 680 | } |
670 | 681 | } |
671 | -} | |
672 | 682 | |
673 | -.header-button { | |
674 | - float: right; | |
675 | - margin-right: 50px; | |
676 | - background: rgba(65, 204, 149, 1); | |
677 | - color: white; | |
678 | - | |
679 | - :hover { | |
683 | + .header-button { | |
684 | + float: right; | |
685 | + margin-right: 50px; | |
680 | 686 | background: rgba(65, 204, 149, 1); |
681 | 687 | color: white; |
682 | - } | |
683 | -} | |
684 | 688 | |
685 | -.el-tabs__content { | |
686 | - padding-left: 20px !important; | |
687 | - padding-right: 0px !important; | |
688 | - padding-top: 20px !important; | |
689 | -} | |
689 | + :hover { | |
690 | + background: rgba(65, 204, 149, 1); | |
691 | + color: white; | |
692 | + } | |
693 | + } | |
690 | 694 | |
691 | -.el-tabs__header { | |
692 | - margin: 0px !important; | |
693 | -} | |
695 | + .el-tabs__content { | |
696 | + padding-left: 20px !important; | |
697 | + padding-right: 0px !important; | |
698 | + padding-top: 20px !important; | |
699 | + } | |
694 | 700 | |
695 | -.card-content { | |
696 | - .descption-tag { | |
697 | - display: inline-block; | |
698 | - background: rgba(102, 127, 253, 0.1); | |
699 | - border-radius: 4px 4px 4px 4px; | |
700 | - color: #667FFD; | |
701 | - line-height: 32px; | |
702 | - padding: 0 10px; | |
703 | - margin-right: 10px; | |
704 | - height: 32px; | |
705 | - margin-top: 3px; | |
701 | + .el-tabs__header { | |
702 | + margin: 0px !important; | |
706 | 703 | } |
707 | 704 | |
708 | - width: 48.4%; | |
709 | - display: inline-block; | |
710 | - margin-bottom: 10px; | |
711 | - min-height: 190px; | |
712 | - border: 1px solid #E6E9F4; | |
713 | - border-radius: 10px 10px 10px 10px; | |
714 | - box-shadow: 0px 4px 14px 0px rgba(0, 0, 0, 0.08); | |
715 | - margin-right: 20px; | |
716 | - background: #FFFFFF; | |
717 | - | |
718 | - .content { | |
719 | - margin-top: 15px !important; | |
720 | - padding-left: 10px !important; | |
721 | - font-size: 14px; | |
722 | - font-weight: 400; | |
723 | - | |
724 | - .descption-label { | |
725 | - min-width: 120px; | |
705 | + .card-content { | |
706 | + .descption-tag { | |
707 | + display: inline-block; | |
708 | + background: rgba(102, 127, 253, 0.1); | |
709 | + border-radius: 4px 4px 4px 4px; | |
710 | + color: #667FFD; | |
711 | + line-height: 32px; | |
712 | + padding: 0 10px; | |
713 | + margin-right: 10px; | |
714 | + height: 32px; | |
715 | + margin-top: 3px; | |
726 | 716 | } |
727 | 717 | |
728 | - .descption-tag-text { | |
729 | - margin-bottom: 20px; | |
730 | - display: flex; | |
731 | - justify-content: flex-start; | |
732 | - align-items: center; | |
733 | - width: calc(100% - 5px); | |
734 | - } | |
718 | + width: 48.4%; | |
719 | + display: inline-block; | |
720 | + margin-bottom: 10px; | |
721 | + min-height: 190px; | |
722 | + border: 1px solid #E6E9F4; | |
723 | + border-radius: 10px 10px 10px 10px; | |
724 | + box-shadow: 0px 4px 14px 0px rgba(0, 0, 0, 0.08); | |
725 | + margin-right: 20px; | |
726 | + background: #FFFFFF; | |
727 | + | |
728 | + .content { | |
729 | + margin-top: 15px !important; | |
730 | + padding-left: 10px !important; | |
731 | + font-size: 14px; | |
732 | + font-weight: 400; | |
733 | + | |
734 | + .descption-label { | |
735 | + min-width: 120px; | |
736 | + } | |
735 | 737 | |
738 | + .descption-tag-text { | |
739 | + margin-bottom: 20px; | |
740 | + display: flex; | |
741 | + justify-content: flex-start; | |
742 | + align-items: center; | |
743 | + width: calc(100% - 5px); | |
744 | + } | |
736 | 745 | |
737 | 746 | |
738 | - .descption-text { | |
739 | - height: 30px; | |
740 | - margin-top: 10px; | |
741 | 747 | |
742 | - .descption-text-block { | |
743 | - margin-right: 10px; | |
744 | - display: flex; | |
745 | - justify-content: flex-start; | |
748 | + .descption-text { | |
749 | + height: 30px; | |
750 | + margin-top: 10px; | |
746 | 751 | |
747 | - .sharing-descption { | |
748 | - flex: 1; | |
749 | - color: gray; | |
750 | - opacity: 0.8; | |
751 | - text-align: right | |
752 | - } | |
752 | + .descption-text-block { | |
753 | + margin-right: 10px; | |
754 | + display: flex; | |
755 | + justify-content: flex-start; | |
753 | 756 | |
754 | - img { | |
755 | - height: 20px; | |
756 | - width: 20px; | |
757 | - margin-right: 5px; | |
758 | - } | |
759 | - } | |
760 | - } | |
757 | + .sharing-descption { | |
758 | + flex: 1; | |
759 | + color: gray; | |
760 | + opacity: 0.8; | |
761 | + text-align: right | |
762 | + } | |
761 | 763 | |
762 | - .title-text { | |
763 | - .title-label { | |
764 | - font-weight: bold; | |
765 | - font-size: 24px !important; | |
766 | - color: #303133; | |
767 | - line-height: 28px; | |
768 | - display: inline-block; | |
769 | - width: calc(100% - 100px); | |
770 | - height: 28px; | |
771 | - text-transform: none; | |
772 | - padding-bottom: 10px !important; | |
764 | + img { | |
765 | + height: 20px; | |
766 | + width: 20px; | |
767 | + margin-right: 5px; | |
768 | + } | |
769 | + } | |
773 | 770 | } |
774 | 771 | |
775 | - .dropdown-button { | |
776 | - .el-button { | |
777 | - background-color: #667FFD !important; | |
778 | - color: white; | |
772 | + .title-text { | |
773 | + .title-label { | |
774 | + font-weight: bold; | |
775 | + font-size: 24px !important; | |
776 | + color: #303133; | |
777 | + line-height: 28px; | |
778 | + display: inline-block; | |
779 | + width: calc(100% - 100px); | |
780 | + height: 28px; | |
781 | + text-transform: none; | |
782 | + padding-bottom: 10px !important; | |
779 | 783 | } |
780 | 784 | |
781 | - float: right; | |
782 | - margin-right: 20px; | |
785 | + .dropdown-button { | |
786 | + .el-button { | |
787 | + background-color: #667FFD !important; | |
788 | + color: white; | |
789 | + } | |
783 | 790 | |
791 | + float: right; | |
792 | + margin-right: 20px; | |
793 | + } | |
784 | 794 | } |
785 | 795 | } |
786 | - } | |
787 | 796 | |
788 | - .left { | |
789 | - height: 190px; | |
790 | - background-color: #41CC95; | |
791 | - vertical-align: middle; | |
792 | - border-radius: 10px 0px 0px 10px; | |
793 | - | |
794 | - .left-icon { | |
795 | - margin-top: 26px; | |
796 | - height: 70px; | |
797 | - | |
798 | - .icon { | |
799 | - height: 100px; | |
800 | - width: 100px; | |
801 | - background: rgba(255, 255, 255, 0.1); | |
802 | - border-radius: 61px 61px 61px 61px; | |
803 | - margin: auto; | |
804 | - text-align: center; | |
805 | - | |
806 | - img { | |
807 | - margin-top: 24px; | |
808 | - height: 52px; | |
809 | - width: 52px; | |
797 | + .left { | |
798 | + height: 190px; | |
799 | + background-color: #41CC95; | |
800 | + vertical-align: middle; | |
801 | + border-radius: 10px 0px 0px 10px; | |
802 | + | |
803 | + .left-icon { | |
804 | + margin-top: 26px; | |
805 | + height: 70px; | |
806 | + .icon { | |
807 | + height: 100px; | |
808 | + width: 100px; | |
809 | + background: rgba(255, 255, 255, 0.1); | |
810 | + border-radius: 61px 61px 61px 61px; | |
811 | + margin: auto; | |
812 | + text-align: center; | |
813 | + | |
814 | + img { | |
815 | + margin-top: 24px; | |
816 | + height: 52px; | |
817 | + width: 52px; | |
818 | + } | |
819 | + } | |
820 | + | |
821 | + .text { | |
822 | + width: 100%; | |
823 | + text-align: center; | |
824 | + margin-top: 5px; | |
825 | + font-size: 20px; | |
826 | + color: #FFFFFF; | |
827 | + } | |
828 | + | |
829 | + .text-radius { | |
830 | + width: 100%; | |
831 | + text-align: left; | |
832 | + margin-top: 9px; | |
833 | + margin-left: 1px; | |
834 | + white-space: nowrap; | |
835 | + width: calc(100% - 7.5px); | |
836 | + span { | |
837 | + overflow: hidden; | |
838 | + white-space: nowrap; | |
839 | + color: #209466; | |
840 | + text-overflow: ellipsis; | |
841 | + display: inline-block; | |
842 | + border-radius: 1px 15px 0px 10px; | |
843 | + padding-left: 8px; | |
844 | + padding-right: 4px; | |
845 | + padding-top: 2px; | |
846 | + padding-bottom: 2px; | |
847 | + max-width: calc(100% - 1px); | |
848 | + background: #E4F8F0; | |
849 | + } | |
810 | 850 | } |
811 | 851 | } |
852 | + } | |
812 | 853 | |
813 | - .text { | |
814 | - width: 100%; | |
815 | - text-align: center; | |
816 | - margin-top: 5px; | |
817 | - font-size: 20px; | |
854 | + .right { | |
855 | + .el-button { | |
856 | + background-color: #667FFD; | |
857 | + line-height: 16px; | |
818 | 858 | color: #FFFFFF; |
859 | + margin-top: 15px; | |
860 | + padding: 10px 20px !important; | |
819 | 861 | } |
820 | 862 | } |
821 | - } | |
822 | 863 | |
823 | - .right { | |
824 | - .el-button { | |
825 | - background-color: #667FFD; | |
826 | - line-height: 16px; | |
827 | - color: #FFFFFF; | |
828 | - margin-top: 15px; | |
829 | - padding: 10px 20px !important; | |
830 | - } | |
831 | 864 | } |
832 | 865 | |
833 | -} | |
834 | - | |
835 | -.el-popconfirm__action { | |
836 | - margin-top: 10px; | |
866 | + .el-popconfirm__action { | |
867 | + margin-top: 10px; | |
868 | + } | |
837 | 869 | } |
838 | 870 | </style> |
839 | 871 | \ No newline at end of file | ... | ... |
src/views/basic/askTestQuestion/update.vue
... | ... | @@ -26,8 +26,7 @@ |
26 | 26 | <p class="name-box"> |
27 | 27 | <span>分享范围:</span> |
28 | 28 | <el-radio :disabled="isViewer" class="name-radio" v-model="form.sharingType" :label="0">任课班级分享</el-radio> |
29 | - <el-radio :disabled="isViewer" class="name-radio" @click.native="_selectClassSharingType" | |
30 | - v-model="form.sharingType" :label="1">自定义分享班级</el-radio> | |
29 | + <el-radio :disabled="isViewer" class="name-radio" @click.native="_selectClassSharingType" v-model="form.sharingType" :label="1">自定义分享班级</el-radio> | |
31 | 30 | </p> |
32 | 31 | </div> |
33 | 32 | <div class="question-box"> |
... | ... | @@ -225,26 +224,30 @@ |
225 | 224 | :append-to-body="true"> |
226 | 225 | <div :key="classSharingType"> |
227 | 226 | <el-row class="row-subfix"> |
228 | - <div class="row-line"> | |
229 | - <span class="line-subfix">年级:</span> | |
230 | - <span class="line-value">{{ gradeName }}</span> | |
231 | - </div> | |
227 | + <el-col :xs="24" :sm="24" :md="24" :lg="24" type="flex" style="flex-wrap:wrap"> | |
228 | + <div class="row-line"> | |
229 | + <span class="line-subfix">年级:</span> | |
230 | + <span class="line-value">{{ gradeName }}</span> | |
231 | + </div> | |
232 | + </el-col> | |
232 | 233 | </el-row> |
233 | 234 | <el-row v-if="gradeClass.length >= 1" class="row-subfix" style="margin-top: 20px;"> |
234 | - <span class="line-subfix" style="float: left;">班级:</span> | |
235 | - <div class="row-line" style="float: left; | |
235 | + <el-col :xs="24" :sm="24" :md="24" :lg="24" type="flex" style="flex-wrap:wrap"> | |
236 | + <span class="line-subfix" style="float: left;">班级:</span> | |
237 | + <div class="row-line" style="float: left; | |
236 | 238 | background:rgb(245,247,250);padding:15px 10px;width: calc(100% - 80px);border-radius:5px;"> |
237 | - <span class="line-value" style="min-height: 300px;border-radius: 4px; background: rgb(247,247,250);"> | |
238 | - <el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" | |
239 | - @change="handleCheckAllChange">全选</el-checkbox> | |
240 | - <div> | |
241 | - <el-checkbox @change="handleCheckedClassChange" v-model="item.isChecked" :key="index" | |
242 | - v-for="(item, index) in gradeClass" :label="item.id"> | |
243 | - {{ item.className }} | |
244 | - </el-checkbox> | |
245 | - </div> | |
246 | - </span> | |
247 | - </div> | |
239 | + <span class="line-value" style="min-height: 300px;border-radius: 4px; background: rgb(247,247,250);"> | |
240 | + <el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" | |
241 | + @change="handleCheckAllChange">全选</el-checkbox> | |
242 | + <div> | |
243 | + <el-checkbox @change="handleCheckedClassChange" v-model="item.isChecked" :key="index" | |
244 | + v-for="(item, index) in gradeClass" :label="item.id"> | |
245 | + {{ item.className }} | |
246 | + </el-checkbox> | |
247 | + </div> | |
248 | + </span> | |
249 | + </div> | |
250 | + </el-col> | |
248 | 251 | </el-row> |
249 | 252 | </div> |
250 | 253 | <div slot="footer"> |
... | ... | @@ -1134,7 +1137,7 @@ export default { |
1134 | 1137 | }, |
1135 | 1138 | }; |
1136 | 1139 | </script> |
1137 | -<style lang="scss"> | |
1140 | +<style lang="scss" scoped> | |
1138 | 1141 | .line-value { |
1139 | 1142 | color: black; |
1140 | 1143 | } | ... | ... |
src/views/basic/down/client.vue
... | ... | @@ -19,7 +19,8 @@ |
19 | 19 | </div> |
20 | 20 | <div class="down-box"> |
21 | 21 | <p class="txt">默认参数配置</p> |
22 | - <el-button class="down-btn" type="primary" @click="getAppDownloadUrl(false)">立即下载</el-button> | |
22 | + <el-button class="down-btn" type="primary" v-loading="downClientLoading" | |
23 | + @click="getAppDownloadUrl(false)">立即下载</el-button> | |
23 | 24 | </div> |
24 | 25 | </div> |
25 | 26 | <!-- <ul class="down-ul"> |
... | ... | @@ -229,6 +230,7 @@ export default { |
229 | 230 | dialogVis: false, |
230 | 231 | askCount: true, |
231 | 232 | examsDuration: true, |
233 | + downClientLoading: false, | |
232 | 234 | configId: "", |
233 | 235 | formData: { |
234 | 236 | configName: "", |
... | ... | @@ -423,11 +425,14 @@ export default { |
423 | 425 | this.$message.error(info); |
424 | 426 | } |
425 | 427 | }, |
426 | - async getAppDownloadUrl(configId) { | |
428 | + async getAppDownloadUrl(configId) { | |
429 | + if (this.downClientLoading) return; | |
430 | + this.downClientLoading = true; | |
427 | 431 | const { data, status, info } = await this.$request.getAppDownloadUrl({ |
428 | 432 | configId: configId || "", |
429 | 433 | }); |
430 | 434 | if (status == 0) { |
435 | + this.downClientLoading = false; | |
431 | 436 | // this.tableData = [...data.list] || []; |
432 | 437 | const a = document.createElement("a"); |
433 | 438 | a.href = data.downloadUrl; |
... | ... | @@ -435,6 +440,7 @@ export default { |
435 | 440 | a.click(); |
436 | 441 | a.remove(); |
437 | 442 | } else { |
443 | + this.downClientLoading = false; | |
438 | 444 | this.$message.error(info); |
439 | 445 | } |
440 | 446 | }, | ... | ... |
src/views/basic/setUp/archived.vue
... | ... | @@ -166,7 +166,7 @@ export default { |
166 | 166 | if (data && !data.code) { |
167 | 167 | |
168 | 168 | let blob = new Blob([data], { |
169 | - type: "application/vnd.ms-excel;charset=utf-8", | |
169 | + type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", | |
170 | 170 | }); |
171 | 171 | |
172 | 172 | downloadFile(type == 2 ? "教师任课信息" : type == 0 ? "行政班名单模板" : "教学班名单模板", blob); | ... | ... |
src/views/examinationPaper/add.vue
... | ... | @@ -78,11 +78,9 @@ |
78 | 78 | v-model="form.examsDuration" label="考试时长"></el-input-number> |
79 | 79 | </el-form-item> |
80 | 80 | <el-form-item v-if="role != 'ROLE_PERSONAL'" label="分享范围:" prop="sharingType"> |
81 | - <el-radio-group v-model="form.sharingType"> | |
82 | - <el-radio :label="0">任课班级分享</el-radio> | |
83 | - <el-radio class="name-radio" @click.native="_selectClassSharingType" v-model="form.sharingType" | |
84 | - :label="1">自定义分享班级</el-radio> | |
85 | - </el-radio-group> | |
81 | + <el-radio :label="0" v-model="form.sharingType">任课班级分享</el-radio> | |
82 | + <el-radio class="name-radio" @click.native="_selectClassSharingType" v-model="form.sharingType" | |
83 | + :label="1">自定义分享班级</el-radio> | |
86 | 84 | </el-form-item> |
87 | 85 | </el-form> |
88 | 86 | <div class="btn-box"> |
... | ... | @@ -355,7 +353,7 @@ |
355 | 353 | <p class="name">{{ form.title }}</p> |
356 | 354 | <p class="totals">卷面总分:{{ allScore }}分</p> |
357 | 355 | </div> |
358 | - <div class="question-box flex-content" v-for="(question, index) in form.questionList" :key="index"> | |
356 | + <div class="question-box flex-content" v-for="(question, index) in form.questionList" :key="index"> | |
359 | 357 | <p class="question-title"> |
360 | 358 | <span>{{ setBigNum(index) }}、</span> |
361 | 359 | <span class="title-txt">{{ question.questionTitle }}</span> |
... | ... | @@ -390,16 +388,11 @@ |
390 | 388 | {{ setNum(index, indexs, subQuestions) }} |
391 | 389 | </div> |
392 | 390 | <div class="qs-type"> |
393 | - <template v-if="isUpload"> | |
394 | - <el-select v-model="subQuestions.questionType" placeholder="选择题目类型" | |
391 | + <el-select v-model="subQuestions.questionType" placeholder="选择题目类型" | |
395 | 392 | @change="changeSubQuestions($event, subQuestions)"> |
396 | 393 | <el-option v-for="options in questionOptions" :key="options.value" :label="options.label" |
397 | 394 | :value="options.value"></el-option> |
398 | 395 | </el-select> |
399 | - </template> | |
400 | - <template v-else> | |
401 | - {{ setSubPro(subQuestions.questionType) }} | |
402 | - </template> | |
403 | 396 | </div> |
404 | 397 | <div class="qs-score"> |
405 | 398 | <el-input-number class="number-ipt" size="medium" :min="1" :max="200" :precision="2" |
... | ... | @@ -528,7 +521,7 @@ |
528 | 521 | <el-button round @click="step = 0">上一步</el-button> |
529 | 522 | <el-button type="primary" round @click="toStep(3)">下一步</el-button> |
530 | 523 | </template> |
531 | - </div> | |
524 | + </div> | |
532 | 525 | </div> |
533 | 526 | </div> |
534 | 527 | <div v-if="step == 3"> |
... | ... | @@ -536,7 +529,7 @@ |
536 | 529 | <p class="name">{{ form.title }}</p> |
537 | 530 | <p class="totals">卷面总分:{{ allScore }}分</p> |
538 | 531 | </div> |
539 | - <div class="question-box flex-content" > | |
532 | + <div class="question-box flex-content"> | |
540 | 533 | <template v-for="(question, index) in form.questionList"> |
541 | 534 | <p class="question-title"> |
542 | 535 | <span>{{ setBigNum(index) }}、</span> | ... | ... |
src/views/examinationPaper/addQs.vue
... | ... | @@ -66,11 +66,9 @@ |
66 | 66 | </el-select> |
67 | 67 | </el-form-item> |
68 | 68 | <el-form-item v-if="role != 'ROLE_PERSONAL'" label="分享范围:" prop="sharingType"> |
69 | - <el-radio-group v-model="form.sharingType"> | |
70 | - <el-radio :label="0">任课班级分享</el-radio> | |
71 | - <el-radio class="name-radio" @click.native="_selectClassSharingType" v-model="form.sharingType" | |
72 | - :label="1">自定义分享班级</el-radio> | |
73 | - </el-radio-group> | |
69 | + <el-radio class="name-radio" :label="0" v-model="form.sharingType">任课班级分享</el-radio> | |
70 | + <el-radio class="name-radio" @click.native="_selectClassSharingType" v-model="form.sharingType" | |
71 | + :label="1">自定义分享班级</el-radio> | |
74 | 72 | </el-form-item> |
75 | 73 | </el-form> |
76 | 74 | <div class="btn-box"> |
... | ... | @@ -82,7 +80,7 @@ |
82 | 80 | <div class="answer-title"> |
83 | 81 | <p class="name">{{ form.title }}</p> |
84 | 82 | </div> |
85 | - <div class="question-box flex-content" > | |
83 | + <div class="question-box flex-content"> | |
86 | 84 | <ul class="questions-ul"> |
87 | 85 | <li class="sub-questions"> |
88 | 86 | <div class="qs-num">题号</div> |
... | ... | @@ -315,7 +313,7 @@ |
315 | 313 | <el-button type="danger" plain round @click="linkBack">取消</el-button> |
316 | 314 | <el-button round @click="step = 0">上一步</el-button> |
317 | 315 | <el-button type="primary" round @click="toStep(2)">下一步</el-button> |
318 | - </div> | |
316 | + </div> | |
319 | 317 | </div> |
320 | 318 | <el-dialog :close-on-click-modal="false" :modal-append-to-body="false" |
321 | 319 | :title="stem.type == 1 ? '上传题干' : '上传题目解析'" :visible.sync="dialogStem" v-if="dialogStem" width="800px"> |
... | ... | @@ -349,7 +347,7 @@ |
349 | 347 | <div class="answer-title"> |
350 | 348 | <p class="name">{{ form.title }}</p> |
351 | 349 | </div> |
352 | - <div class="question-box flex-content" > | |
350 | + <div class="question-box flex-content"> | |
353 | 351 | <template v-for="question in form.questionList"> |
354 | 352 | <template v-if="!question.subQuestions"> |
355 | 353 | <div class="screenshot-box" v-if="question.screenshot"> | ... | ... |
src/views/layout/Footer/bottom.vue
vue.config.js
1 | 1 | const path = require("path"); |
2 | 2 | const resolve = (dir) => path.join(__dirname, dir); |
3 | 3 | const IS_PROD = ["production", "prod"].includes(process.env.NODE_ENV); |
4 | -const BundleAnalyzerPlugin = require("webpack-bundle-analyzer") | |
5 | - .BundleAnalyzerPlugin; | |
4 | +const BundleAnalyzerPlugin = require("webpack-bundle-analyzer").BundleAnalyzerPlugin; | |
5 | + | |
6 | +const TimeStamp = new Date().getTime(); | |
6 | 7 | |
7 | 8 | module.exports = { |
8 | 9 | publicPath: "./", // 编译后的地址,可以根据环境进行设置 |
... | ... | @@ -33,9 +34,21 @@ module.exports = { |
33 | 34 | }, |
34 | 35 | disableHostCheck: true |
35 | 36 | }, |
37 | + configureWebpack: { | |
38 | + devtool: 'source-map', | |
39 | + output: { // 输出重构 打包编译后的 文件名称 【模块名称.版本号.js】 | |
40 | + filename: `js/[name].${TimeStamp}.js`, | |
41 | + chunkFilename: `js/[name].${TimeStamp}.js` | |
42 | + }, | |
43 | + }, | |
36 | 44 | css: { |
37 | 45 | extract: IS_PROD, // 是否将组件中的 CSS 提取至一个独立的 CSS 文件中 (而不是动态注入到 JavaScript 中的 inline 代码)。 |
38 | 46 | sourceMap: false, |
47 | + extract: { | |
48 | + // 修改打包后css文件名 // css打包文件,添加时间戳 | |
49 | + filename: `css/[name].${TimeStamp}.css`, | |
50 | + chunkFilename: `css/[name].${TimeStamp}.css` | |
51 | + } | |
39 | 52 | }, |
40 | 53 | chainWebpack: (config) => { |
41 | 54 | config.plugin('html').tap(args => { | ... | ... |