Commit ead476dde3ee1f3851870933ba75ee0a19ba2bd4

Authored by LH_PC
1 parent 627f3fff

fix:最终定版

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
1 1 const modeUrl = {
2 2 // 开发环境
3 3 development: {
4   - baseURL: "/api/",
  4 + baseURL: "/",
5 5 authBaseURL: "",
6 6 $cdn:""
7 7 },
8 8 // 生产环境
9 9 production: {
10   - baseURL: "/api/",
  10 + baseURL: "/",
11 11 authBaseURL: "",
12 12 $cdn:""
13 13 },
... ...
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 }}&nbsp;</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 }}&nbsp;</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
... ... @@ -15,7 +15,7 @@ p{
15 15 height: 28px;
16 16 line-height: 28px;
17 17 text-align: left;
18   - font-size: 12px;
  18 + font-size: 12px !important;
19 19 color: #999999;
20 20 }
21 21 </style>
... ...
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 => {
... ...