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 => { | ... | ... |