Browse Source

合并代码

1
mo 3 years ago
parent
commit
cfd0f429bc
96 changed files with 1856 additions and 739 deletions
  1. 0 0
      dist/index.html
  2. 1 0
      dist/static/css/app.9ef9da42.css
  3. 0 0
      dist/static/css/app.aef6e610.css
  4. 0 1
      dist/static/css/chunk-033052fa.0ba7bc17.css
  5. 0 1
      dist/static/css/chunk-11f79fd4.dd4c4a38.css
  6. 0 0
      dist/static/css/chunk-1ca9b9ac.ec20285c.css
  7. 1 0
      dist/static/css/chunk-1de728ec.93b9e6d7.css
  8. 0 0
      dist/static/css/chunk-1fc30f7a.647beab2.css
  9. 0 1
      dist/static/css/chunk-241b9e5e.95c284ec.css
  10. 1 0
      dist/static/css/chunk-26f222de.11fc084e.css
  11. 0 0
      dist/static/css/chunk-287c55a6.6b2f8c85.css
  12. 1 1
      dist/static/css/chunk-32da9ee8.eef64e5d.css
  13. 1 0
      dist/static/css/chunk-40de3587.cc1788c6.css
  14. 1 0
      dist/static/css/chunk-41a1f588.89939888.css
  15. 1 0
      dist/static/css/chunk-4350b76c.695d63b6.css
  16. 0 0
      dist/static/css/chunk-4fc86de9.c6e07ba5.css
  17. 0 0
      dist/static/css/chunk-5270a02a.0162d842.css
  18. 1 1
      dist/static/css/chunk-55f6105e.0af6af72.css
  19. 1 0
      dist/static/css/chunk-5f0bfe54.ebdeb033.css
  20. 1 0
      dist/static/css/chunk-6a8bd03e.54fc8ffd.css
  21. 0 1
      dist/static/css/chunk-6d44028a.0c377e44.css
  22. 1 0
      dist/static/css/chunk-6e769042.12c1e6bc.css
  23. 0 0
      dist/static/css/chunk-7ebcd752.5c3a4c0d.css
  24. 0 1
      dist/static/css/chunk-7ffc8c1e.2585d393.css
  25. 0 1
      dist/static/css/chunk-9b8a8648.dc95e69f.css
  26. 0 1
      dist/static/css/chunk-a447c49c.dffb4216.css
  27. 0 1
      dist/static/css/chunk-b28763d8.dffa4166.css
  28. 1 0
      dist/static/css/chunk-c3bc1be6.b1cf227a.css
  29. 1 0
      dist/static/css/chunk-cc11236c.63647321.css
  30. 1 0
      dist/static/css/chunk-commons.ec488016.css
  31. 1 0
      dist/static/css/chunk-dc08c38c.0d78429a.css
  32. 0 1
      dist/static/css/chunk-de232608.c2d78950.css
  33. 0 1
      dist/static/css/chunk-f3a5b39c.1d5772bb.css
  34. 1 1
      dist/static/css/chunk-f8258646.e4ff6268.css
  35. 0 0
      dist/static/js/app.4e502584.js
  36. 0 0
      dist/static/js/chunk-1ca9b9ac.fbf1363c.js
  37. 0 0
      dist/static/js/chunk-1de728ec.fd9f2491.js
  38. 0 0
      dist/static/js/chunk-1fc30f7a.5734a997.js
  39. 0 0
      dist/static/js/chunk-26f222de.ec3139b4.js
  40. 0 0
      dist/static/js/chunk-287c55a6.aa62d2f6.js
  41. 0 0
      dist/static/js/chunk-32da9ee8.28679c24.js
  42. 0 0
      dist/static/js/chunk-40de3587.cd922f65.js
  43. 0 0
      dist/static/js/chunk-41a1f588.744d7abe.js
  44. 0 0
      dist/static/js/chunk-4350b76c.a2cf4bb6.js
  45. 0 0
      dist/static/js/chunk-4fc86de9.8450f62b.js
  46. 0 0
      dist/static/js/chunk-5270a02a.9626269b.js
  47. 0 0
      dist/static/js/chunk-55f6105e.2a7b832f.js
  48. 0 0
      dist/static/js/chunk-56faa0a9.827b0581.js
  49. 0 0
      dist/static/js/chunk-5f0bfe54.8899b79b.js
  50. 0 0
      dist/static/js/chunk-6a8bd03e.f2b8d5d5.js
  51. 0 0
      dist/static/js/chunk-6e769042.ec6c13d9.js
  52. 0 0
      dist/static/js/chunk-7ebcd752.a5bfe2a5.js
  53. 0 0
      dist/static/js/chunk-a23e2ba4.422c8f73.js
  54. 0 0
      dist/static/js/chunk-a23e2ba4.d1db8d23.js
  55. 0 0
      dist/static/js/chunk-ad75f940.7f983849.js
  56. 0 0
      dist/static/js/chunk-ad75f940.d1954d64.js
  57. 0 0
      dist/static/js/chunk-c3bc1be6.a7a600f4.js
  58. 0 0
      dist/static/js/chunk-cc11236c.9efd1bee.js
  59. 0 0
      dist/static/js/chunk-commons.fda4292a.js
  60. 0 0
      dist/static/js/chunk-dc08c38c.bced6315.js
  61. 0 0
      dist/static/js/chunk-f8258646.4426a4a3.js
  62. 2 2
      src/App.vue
  63. 1 1
      src/components/Upload/index.vue
  64. 2 2
      src/components/select-all/index.vue
  65. 13 10
      src/router/index.js
  66. 13 1
      src/store/modules/permission.js
  67. 1 1
      src/views/HumanResources/index.vue
  68. 29 2
      src/views/accompaniment/modals/form.vue
  69. 4 4
      src/views/accompanyManager/accompanyList.vue
  70. 11 0
      src/views/buildVip/index.vue
  71. 3 3
      src/views/businessManager/orderManager/income.vue
  72. 3 2
      src/views/businessManager/orderManager/payRecord.vue
  73. 107 0
      src/views/categroyManager/accompanyBaseConfig.vue
  74. 173 0
      src/views/categroyManager/accompanyFeeConfig.vue
  75. 1 0
      src/views/categroyManager/specialSetup/chargesList.vue
  76. 2 0
      src/views/categroyManager/specialSetup/musicCourseFee.vue
  77. 2 1
      src/views/chargeManager/one.vue
  78. 4 2
      src/views/chargeManager/share-model.vue
  79. 4 4
      src/views/chargeManager/two.vue
  80. 6 3
      src/views/couponManager/couponUpdate.vue
  81. 2 2
      src/views/couponManager/index.vue
  82. 52 14
      src/views/levelManager/levelManager.vue
  83. 143 110
      src/views/reaplceMusicPlayer/answerList.vue
  84. 9 1
      src/views/setQuestions/api.js
  85. 453 176
      src/views/setQuestions/components/answerList.vue
  86. 187 86
      src/views/setQuestions/components/questionList.vue
  87. 160 109
      src/views/setQuestions/index.vue
  88. 2 2
      src/views/setQuestions/operation.vue
  89. 203 0
      src/views/setQuestions/userAskList.vue
  90. 20 1
      src/views/teachManager/index.vue
  91. 86 76
      src/views/teachManager/modals/addTeach.vue
  92. 3 3
      src/views/teacherManager/teacherOperation/components/salarySet.vue
  93. 5 8
      src/views/teacherManager/teacherOperation/components/teacherOperation.vue
  94. 76 62
      src/views/vipClass/vipDetail/index.vue
  95. 53 35
      src/views/vipClass/vipList.vue
  96. 5 3
      src/views/vipClass/vipReset.vue

File diff suppressed because it is too large
+ 0 - 0
dist/index.html


File diff suppressed because it is too large
+ 1 - 0
dist/static/css/app.9ef9da42.css


File diff suppressed because it is too large
+ 0 - 0
dist/static/css/app.aef6e610.css


+ 0 - 1
dist/static/css/chunk-033052fa.0ba7bc17.css

@@ -1 +0,0 @@
-.el-button--primary[data-v-b58f3dce],.el-button--primary[data-v-b58f3dce]:active,.el-button--primary[data-v-b58f3dce]:focus,.el-button--primary[data-v-b58f3dce]:hover{background:#14928a;border-color:#14928a;color:#fff}[data-v-b58f3dce] .el-image-viewer__close{color:#fff;opacity:1}[data-v-b58f3dce] .el-date-editor.el-input,[data-v-b58f3dce] .el-select{width:100%!important}[data-v-b58f3dce] .el-table .cell{display:-webkit-box;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:3;-webkit-box-orient:vertical}

+ 0 - 1
dist/static/css/chunk-11f79fd4.dd4c4a38.css

@@ -1 +0,0 @@
-.box-card[data-v-26a19de6]{margin-bottom:10px}[data-v-26a19de6] .el-collapse-item__header{background:#edeef0;color:#444;padding:0 10px}[data-v-26a19de6] .el-collapse-item__wrap{border:0}[data-v-26a19de6] .el-collapse-item__content{padding-bottom:0}.demo-table-expand[data-v-26a19de6]{font-size:0}.demo-table-expand label[data-v-26a19de6]{width:90px;color:#99a9bf}.demo-table-expand .el-form-item[data-v-26a19de6]{margin-right:0;margin-bottom:0;width:100%}

File diff suppressed because it is too large
+ 0 - 0
dist/static/css/chunk-1ca9b9ac.ec20285c.css


+ 1 - 0
dist/static/css/chunk-1de728ec.93b9e6d7.css

@@ -0,0 +1 @@
+.titleCell[data-v-4a30bef8]{display:inline-block}

+ 0 - 0
dist/static/css/chunk-8f48598c.647beab2.css → dist/static/css/chunk-1fc30f7a.647beab2.css


+ 0 - 1
dist/static/css/chunk-241b9e5e.95c284ec.css

@@ -1 +0,0 @@
-.m-container[data-v-d885a8a6]{-webkit-box-sizing:border-box;box-sizing:border-box;background-color:#fff}.newBand[data-v-d885a8a6]{display:inline-block}

+ 1 - 0
dist/static/css/chunk-26f222de.11fc084e.css

@@ -0,0 +1 @@
+.form[data-v-3a4789ce]{margin-top:30px}.infoTitle[data-v-3a4789ce]{font-weight:400;margin-top:30px;font-size:18px}[data-v-3a4789ce] label{font-weight:400}

File diff suppressed because it is too large
+ 0 - 0
dist/static/css/chunk-287c55a6.6b2f8c85.css


+ 1 - 1
dist/static/css/chunk-0829c824.cc52e187.css → dist/static/css/chunk-32da9ee8.eef64e5d.css

@@ -1 +1 @@
-.topWrap[data-v-88ff0d7a]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.topWrap div[data-v-88ff0d7a]{margin-right:10px}
+.topWrap[data-v-72d14e9c]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.topWrap div[data-v-72d14e9c]{margin-right:10px}

+ 1 - 0
dist/static/css/chunk-40de3587.cc1788c6.css

@@ -0,0 +1 @@
+.vipwrap[data-v-ee81f164]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.vipwrap .newBand[data-v-ee81f164]{margin-right:20px}.resetClassForm[data-v-ee81f164] .el-date-editor.el-input,.resetClassForm[data-v-ee81f164] .el-date-editor.el-input__inner{width:180px!important}.countWrap[data-v-ee81f164] .el-date-editor.el-input,.countWrap[data-v-ee81f164] .el-date-editor.el-input__inner{width:100px!important}.maskForm[data-v-ee81f164] .el-input{width:220px!important}.titlewrap[data-v-ee81f164]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center}

+ 1 - 0
dist/static/css/chunk-41a1f588.89939888.css

@@ -0,0 +1 @@
+.m-container[data-v-29e5d3e0]{-webkit-box-sizing:border-box;box-sizing:border-box;background-color:#fff}.newBand[data-v-29e5d3e0]{display:inline-block}

+ 1 - 0
dist/static/css/chunk-4350b76c.695d63b6.css

@@ -0,0 +1 @@
+[data-v-32ac4b79] .el-button--primary,[data-v-32ac4b79] .el-button--primary:active,[data-v-32ac4b79] .el-button--primary:focus,[data-v-32ac4b79] .el-button--primary:hover{background:#14928a;border-color:#14928a;color:#fff}[data-v-32ac4b79] .el-date-editor.el-input{width:100%!important}[data-v-32ac4b79] .el-select{width:98%!important}

File diff suppressed because it is too large
+ 0 - 0
dist/static/css/chunk-4fc86de9.c6e07ba5.css


File diff suppressed because it is too large
+ 0 - 0
dist/static/css/chunk-5270a02a.0162d842.css


+ 1 - 1
dist/static/css/chunk-12029be2.182f6653.css → dist/static/css/chunk-55f6105e.0af6af72.css

@@ -1 +1 @@
-.btns[data-v-6bb7aab0]{text-align:right}.files[data-v-6bb7aab0]{background-color:#f8f8f8;padding:20px 0;padding-right:20px;margin-bottom:20px;border-radius:5px;position:relative}.files .file-remove[data-v-6bb7aab0]{position:absolute;right:20px;bottom:10px}.myCascader .el-radio{width:100%;height:100%;z-index:10;position:absolute;top:10px;right:10px}.myCascader .el-radio__input{visibility:hidden}.myCascader .el-cascader-node__postfix{top:10px}.remark[data-v-08292ac6]{display:inline;overflow:hidden;white-space:pre}.lookForm[data-v-08292ac6] .el-dialog__body{padding:0}.iframe_back[data-v-08292ac6]{width:195px;height:45px;position:absolute;bottom:50px;background:transparent;left:50%;z-index:99;margin-left:-100px}.iframe_help[data-v-08292ac6]{position:absolute;background:transparent;width:50px;height:120px;top:50%;right:0;margin-top:-35px}.iframe_header_back[data-v-08292ac6]{background:transparent;width:225px;height:50px;position:absolute;top:65px;left:20px}
+.btns[data-v-321e3032]{text-align:right}.files[data-v-321e3032]{background-color:#f8f8f8;padding:20px 0;padding-right:20px;margin-bottom:20px;border-radius:5px;position:relative}.files .file-remove[data-v-321e3032]{position:absolute;right:20px;bottom:10px}.myCascader .el-radio{width:100%;height:100%;z-index:10;position:absolute;top:10px;right:10px}.myCascader .el-radio__input{visibility:hidden}.myCascader .el-cascader-node__postfix{top:10px}.remark[data-v-08292ac6]{display:inline;overflow:hidden;white-space:pre}.lookForm[data-v-08292ac6] .el-dialog__body{padding:0}.iframe_back[data-v-08292ac6]{width:195px;height:45px;position:absolute;bottom:50px;background:transparent;left:50%;z-index:99;margin-left:-100px}.iframe_help[data-v-08292ac6]{position:absolute;background:transparent;width:50px;height:120px;top:50%;right:0;margin-top:-35px}.iframe_header_back[data-v-08292ac6]{background:transparent;width:225px;height:50px;position:absolute;top:65px;left:20px}

+ 1 - 0
dist/static/css/chunk-5f0bfe54.ebdeb033.css

@@ -0,0 +1 @@
+.box-card[data-v-9ce67fa4]{margin-bottom:10px}[data-v-9ce67fa4] .el-collapse-item__header{background:#edeef0;color:#444;padding:0 10px}[data-v-9ce67fa4] .el-collapse-item__wrap{border:0}[data-v-9ce67fa4] .el-collapse-item__content{padding-bottom:0}.demo-table-expand[data-v-9ce67fa4]{font-size:0}.demo-table-expand label[data-v-9ce67fa4]{width:90px;color:#99a9bf}.demo-table-expand .el-form-item[data-v-9ce67fa4]{margin-right:0;margin-bottom:0;width:300px}.demo-table-expand .el-form-item span[data-v-9ce67fa4]{width:200px}

+ 1 - 0
dist/static/css/chunk-6a8bd03e.54fc8ffd.css

@@ -0,0 +1 @@
+.box-card[data-v-27669ce8]{margin-bottom:10px}[data-v-27669ce8] .el-collapse-item__header{background:#edeef0;color:#444;padding:0 10px}[data-v-27669ce8] .el-collapse-item__wrap{border:0}[data-v-27669ce8] .el-collapse-item__content{padding-bottom:0}.demo-table-expand[data-v-27669ce8]{font-size:0}.demo-table-expand label[data-v-27669ce8]{width:90px;color:#99a9bf}.demo-table-expand .el-form-item[data-v-27669ce8]{margin-right:0;margin-bottom:0;width:300px}.demo-table-expand .el-form-item span[data-v-27669ce8]{width:200px}

+ 0 - 1
dist/static/css/chunk-6d44028a.0c377e44.css

@@ -1 +0,0 @@
-.vipwrap[data-v-1d7dc4eb]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.vipwrap .newBand[data-v-1d7dc4eb]{margin-right:20px}.resetClassForm[data-v-1d7dc4eb] .el-date-editor.el-input,.resetClassForm[data-v-1d7dc4eb] .el-date-editor.el-input__inner{width:180px!important}.countWrap[data-v-1d7dc4eb] .el-date-editor.el-input,.countWrap[data-v-1d7dc4eb] .el-date-editor.el-input__inner{width:100px!important}.maskForm[data-v-1d7dc4eb] .el-input{width:220px!important}.titlewrap[data-v-1d7dc4eb]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center}

+ 1 - 0
dist/static/css/chunk-6e769042.12c1e6bc.css

@@ -0,0 +1 @@
+.alert[data-v-68be5c4c]{margin-bottom:20px}.form[data-v-68be5c4c] .el-form-item{margin-right:0!important}.addCateBtn[data-v-68be5c4c]{margin-bottom:20px}.custom-tree-node[data-v-68be5c4c]{font-size:14px}.custom-tree-node .title[data-v-68be5c4c]{font-size:16px}.custom-tree-node i[data-v-68be5c4c]{margin-left:5px}.uploadImg[data-v-68be5c4c] .avatar{width:105px;height:134px}.btnList[data-v-363b1923]{margin-bottom:20px}

File diff suppressed because it is too large
+ 0 - 0
dist/static/css/chunk-7ebcd752.5c3a4c0d.css


+ 0 - 1
dist/static/css/chunk-7ffc8c1e.2585d393.css

@@ -1 +0,0 @@
-.form[data-v-5fc01ec8]{margin-top:30px}.infoTitle[data-v-5fc01ec8]{font-weight:400;margin-top:30px;font-size:18px}[data-v-5fc01ec8] label{font-weight:400}

+ 0 - 1
dist/static/css/chunk-9b8a8648.dc95e69f.css

@@ -1 +0,0 @@
-.alert[data-v-b4581dc4]{margin-bottom:20px}.form[data-v-b4581dc4] .el-form-item{margin-right:0!important}.addCateBtn[data-v-b4581dc4]{margin-bottom:20px}.custom-tree-node[data-v-b4581dc4]{font-size:14px}.custom-tree-node .title[data-v-b4581dc4]{font-size:16px}.custom-tree-node i[data-v-b4581dc4]{margin-left:5px}.uploadImg[data-v-b4581dc4] .avatar{width:105px;height:134px}.btnList[data-v-5db08b7a]{margin-bottom:20px}

+ 0 - 1
dist/static/css/chunk-a447c49c.dffb4216.css

@@ -1 +0,0 @@
-.question .el-select[data-v-4f1623fc]{width:100%!important}.top-tips[data-v-1b023cce]{color:grey;font-size:14px;padding:0 0 10px}.btn-submit[data-v-1b023cce]{width:90%;margin:20px 5%}.form-info[data-v-1b023cce]{margin:10px;width:auto;border-radius:5px}.questionName[data-v-1b023cce]{padding-top:5px;font-size:16px;color:#444;font-weight:500;line-height:1.5}[data-v-1b023cce] .el-checkbox-group,[data-v-1b023cce] .el-radio-group{width:100%}[data-v-1b023cce] .el-radio__input.is-checked+.el-radio__label{color:#606266}[data-v-1b023cce] .el-checkbox,[data-v-1b023cce] .el-radio{width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;padding:10px 0}[data-v-1b023cce] .el-checkbox .el-checkbox__label,[data-v-1b023cce] .el-checkbox .el-radio__label,[data-v-1b023cce] .el-radio .el-checkbox__label,[data-v-1b023cce] .el-radio .el-radio__label{padding-left:0}[data-v-1b023cce] .el-button--primary{background:#01c1b5!important;border-color:#01c1b5!important}.resultModel .img[data-v-1b023cce]{width:145px;margin:0 auto;display:block}.resultModel .content[data-v-1b023cce]{font-size:20px;color:#1a1a1a;text-align:center;font-weight:500;padding-bottom:30px}[data-v-ecd6a8d4] .el-button--primary,[data-v-ecd6a8d4] .el-button--primary:active,[data-v-ecd6a8d4] .el-button--primary:focus,[data-v-ecd6a8d4] .el-button--primary:hover{background:#14928a;border-color:#14928a;color:#fff}[data-v-ecd6a8d4] .el-date-editor.el-input{width:100%!important}[data-v-ecd6a8d4] .el-select{width:98%!important}[data-v-ecd6a8d4] .el-collapse{border:0}[data-v-ecd6a8d4] .el-collapse-item__header,[data-v-ecd6a8d4] .el-collapse-item__wrap{background-color:#eef4f9}

+ 0 - 1
dist/static/css/chunk-b28763d8.dffa4166.css

@@ -1 +0,0 @@
-[data-v-fd68e1a2] .el-button--primary,[data-v-fd68e1a2] .el-button--primary:active,[data-v-fd68e1a2] .el-button--primary:focus,[data-v-fd68e1a2] .el-button--primary:hover{background:#14928a;border-color:#14928a;color:#fff}[data-v-fd68e1a2] .el-date-editor.el-input{width:100%!important}[data-v-fd68e1a2] .el-select{width:98%!important}

+ 1 - 0
dist/static/css/chunk-c3bc1be6.b1cf227a.css

@@ -0,0 +1 @@
+.payForm[data-v-3d1ffe73] .el-form-item{min-width:40%}.newBand[data-v-b589b966]{display:inline-block}.noWrap[data-v-b589b966]{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

+ 1 - 0
dist/static/css/chunk-cc11236c.63647321.css

@@ -0,0 +1 @@
+.el-button--primary[data-v-25cd7b92],.el-button--primary[data-v-25cd7b92]:active,.el-button--primary[data-v-25cd7b92]:focus,.el-button--primary[data-v-25cd7b92]:hover{background:#14928a;border-color:#14928a;color:#fff}[data-v-25cd7b92] .el-image-viewer__close{color:#fff;opacity:1}[data-v-25cd7b92] .el-date-editor.el-input,[data-v-25cd7b92] .el-select{width:100%!important}[data-v-25cd7b92] .el-table .cell{display:-webkit-box;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:3;-webkit-box-orient:vertical}

+ 1 - 0
dist/static/css/chunk-commons.ec488016.css

@@ -0,0 +1 @@
+.pagination-container[data-v-5366c162]{background:#fff;padding:32px 16px;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.pagination-container.hidden[data-v-5366c162]{display:none}[data-v-6e1b7b23] .avatar-uploader .el-upload,[data-v-6e1b7b23] .upload-demo .el-upload{border-radius:6px;cursor:pointer;position:relative;overflow:hidden}.avatar-uploader .el-upload[data-v-6e1b7b23]:hover{border-color:#409eff}.avatar-uploader-icon[data-v-6e1b7b23]{border:1px dashed #d9d9d9;font-size:28px;color:#8c939d;width:120px;height:120px;line-height:120px;text-align:center}.avatar[data-v-6e1b7b23]{width:120px;height:120px;display:block}.ivu-upload[data-v-6e1b7b23]{display:none}.content-tooltip[data-v-98517b38]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;max-width:100%;display:inline-block}.left-code .code-url{margin-top:10px;margin-bottom:10px}.left-code .code-url .link-btn{margin-top:0;margin-bottom:0;font-size:12px}

+ 1 - 0
dist/static/css/chunk-dc08c38c.0d78429a.css

@@ -0,0 +1 @@
+.chioseOragn[data-v-1e73021d]{width:400px;margin:0 5px}.row[data-v-1e73021d]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:14px}.submitBtn[data-v-1e73021d]{margin-left:10px}

+ 0 - 1
dist/static/css/chunk-de232608.c2d78950.css

@@ -1 +0,0 @@
-.payForm[data-v-3d1ffe73] .el-form-item{min-width:40%}.newBand[data-v-1ed8c343]{display:inline-block}.noWrap[data-v-1ed8c343]{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

+ 0 - 1
dist/static/css/chunk-f3a5b39c.1d5772bb.css

@@ -1 +0,0 @@
-.titleCell[data-v-19b1b727]{display:inline-block}

+ 1 - 1
dist/static/css/chunk-de87d9fc.59f7b4a6.css → dist/static/css/chunk-f8258646.e4ff6268.css

@@ -1 +1 @@
-.computeMoney[data-v-482b75e6]{margin-top:10px;float:right}.m-core[data-v-482b75e6]{margin-top:30px}.m-core .el-input[data-v-482b75e6]{width:180px}.m-core h4[data-v-482b75e6]{font-size:16px;background-color:#ccc;color:#fff;width:100%;height:40px;line-height:40px;margin-bottom:20px;padding:0 20px}.m-core .right[data-v-482b75e6]{margin-top:20px}.vipMsg[data-v-482b75e6]{margin-bottom:20px}.planList[data-v-482b75e6]{padding:0 25px}.planList .planTop[data-v-482b75e6]{height:40px;line-height:40px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;border-bottom:1px solid #ccc;margin-top:20px}.planList .planTop>p[data-v-482b75e6]{font-size:14px}.planList .planCore .row[data-v-482b75e6]{width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-wrap:nowrap;flex-wrap:nowrap;height:40px;line-height:40px;font-size:14px;text-align:center}.planList .planCore .row div[data-v-482b75e6]{width:87px}.planList .nomore[data-v-482b75e6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:40px}.okBtn[data-v-482b75e6]{width:120px;height:40px;line-height:40px;text-align:center;color:#fff;border-radius:4px;margin-right:20px;cursor:pointer;background-color:#f97215;float:right}.submitP[data-v-482b75e6]{margin-bottom:20px;font-size:14px;padding-left:24px}
+.computeMoney[data-v-282ea74c]{margin-top:10px;float:right}.m-core[data-v-282ea74c]{margin-top:30px}.m-core .el-input[data-v-282ea74c]{width:180px}.m-core h4[data-v-282ea74c]{font-size:16px;background-color:#ccc;color:#fff;width:100%;height:40px;line-height:40px;margin-bottom:20px;padding:0 20px}.m-core .right[data-v-282ea74c]{margin-top:20px}.vipMsg[data-v-282ea74c]{margin-bottom:20px}.planList[data-v-282ea74c]{padding:0 25px}.planList .planTop[data-v-282ea74c]{height:40px;line-height:40px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;border-bottom:1px solid #ccc;margin-top:20px}.planList .planTop>p[data-v-282ea74c]{font-size:14px}.planList .planCore .row[data-v-282ea74c]{width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-wrap:nowrap;flex-wrap:nowrap;height:40px;line-height:40px;font-size:14px;text-align:center}.planList .planCore .row div[data-v-282ea74c]{width:87px}.planList .nomore[data-v-282ea74c]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:40px}.okBtn[data-v-282ea74c]{width:120px;height:40px;line-height:40px;text-align:center;color:#fff;border-radius:4px;margin-right:20px;cursor:pointer;background-color:#f97215;float:right}.submitP[data-v-282ea74c]{margin-bottom:20px;font-size:14px;padding-left:24px}

File diff suppressed because it is too large
+ 0 - 0
dist/static/js/app.4e502584.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-1ca9b9ac.fbf1363c.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-1de728ec.fd9f2491.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-1fc30f7a.5734a997.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-26f222de.ec3139b4.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-287c55a6.aa62d2f6.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-32da9ee8.28679c24.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-40de3587.cd922f65.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-41a1f588.744d7abe.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-4350b76c.a2cf4bb6.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-4fc86de9.8450f62b.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-5270a02a.9626269b.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-55f6105e.2a7b832f.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-56faa0a9.827b0581.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-5f0bfe54.8899b79b.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-6a8bd03e.f2b8d5d5.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-6e769042.ec6c13d9.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-7ebcd752.a5bfe2a5.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-a23e2ba4.422c8f73.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-a23e2ba4.d1db8d23.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-ad75f940.7f983849.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-ad75f940.d1954d64.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-c3bc1be6.a7a600f4.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-cc11236c.9efd1bee.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-commons.fda4292a.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-dc08c38c.bced6315.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-f8258646.4426a4a3.js


+ 2 - 2
src/App.vue

@@ -30,7 +30,7 @@ export default {
   },
 };
 </script>
-<style >
+<style lang="scss">
 * {
   margin: 0;
   padding: 0;
@@ -255,7 +255,7 @@ input[type="number"] {
   box-sizing: border-box;
   background-color: #fff;
   padding: 18px 30px 40px;
-  // height: calc(100vh- 80px) !important;
+  // height: calc(100vh - 145px) !important;
   // height: calc(100vh - 70px);
   width: 100%;
   // min-width: 1440px;

+ 1 - 1
src/components/Upload/index.vue

@@ -143,7 +143,7 @@ export default {
 };
 </script>
 
-<style lang="scss">
+<style lang="scss" scoped>
 /deep/.avatar-uploader .el-upload,
 /deep/.upload-demo .el-upload {
   border-radius: 6px;

+ 2 - 2
src/components/select-all/index.vue

@@ -25,7 +25,7 @@
       >
         <slot />
       </el-select>
-      <el-button @click="selectAll" class="btn" v-bind="{ ...$attrs, ...$props }">
+      <el-button @click="selectAll" class="btn" v-bind="{ ...$attrs, ...$props  }">
         全选
       </el-button>
     </div>
@@ -124,7 +124,7 @@ export default {
   // padding: 0 10px;
   border-left: none;
   border-radius: 0 4px 4px 0;
-  // height: 100%;
+  // height: 40px;
 }
 .item {
   width: 100%;

+ 13 - 10
src/router/index.js

@@ -449,24 +449,24 @@ export const asyncRoutes = {
   //2021十一活动
   memeberActionManager: () => import('@/views/2021memeberActionManager'),
   // 优惠券管理
-  couponManager:()=>import ('@/views/couponManager'),
+  couponManager: () => import('@/views/couponManager'),
   // 优惠券明细
-  couponDetail:()=>import ('@/views/couponManager/couponDetail'),
+  couponDetail: () => import('@/views/couponManager/couponDetail'),
   // 优惠券明细
-  activeMarketing:()=>import ('@/views/activityScheduling/activeMarketing'),
+  activeMarketing: () => import('@/views/activityScheduling/activeMarketing'),
   // 2021双11
-  '2021double11List':()=>import ('@/views/activityScheduling/2021double11List'),
+  '2021double11List': () => import('@/views/activityScheduling/2021double11List'),
   // 活动资格管理
-  activeSenior:()=>import('@/views/categroyManager/activeSenior'),
-  backManager:()=>import ('@/views/backManager'),
+  activeSenior: () => import('@/views/categroyManager/activeSenior'),
+  backManager: () => import('@/views/backManager'),
   // 教材列表
-  teachManager:()=>import ('@/views/teachManager'),
+  teachManager: () => import('@/views/teachManager'),
   // 课程规则设置
-  courseRulersManager:()=>import('@/views/courseRulersManager'),
+  courseRulersManager: () => import('@/views/courseRulersManager'),
   // 基础规则设置
-  baseRulesManager:()=>import('@/views/baseRulesManager'),
+  baseRulesManager: () => import('@/views/baseRulesManager'),
   // 课程参数设置
-  baseRulesClassSetting:()=>import('@/views/baseRulesClassSetting'),
+  baseRulesClassSetting: () => import('@/views/baseRulesClassSetting'),
   // 产品管理
   productManager: () => import('@/views/platformManager/productManger'),
   // 服务管理
@@ -476,6 +476,9 @@ export const asyncRoutes = {
   serviceOperation: () => import('@/views/platformManager/serviceManager/form'),
   // 云教练流量包
   cloudTrafficPackage: () => import('@/views/platformManager/cloudTrafficPackage'),
+  accompanyBaseConfig: () => import('@/views/categroyManager/accompanyBaseConfig'),
+  // 网管课价格配置
+  accompanyFeeConfig: () => import('@/views/categroyManager/accompanyFeeConfig')
 }
 
 export default router

+ 13 - 1
src/store/modules/permission.js

@@ -677,7 +677,19 @@ function setDetailRoute(accessedRoutes) {
             id: 'xx19'
           }
         },
-
+        {
+          name: '答题详情',
+          path: 'userAskList',
+          component: () => import('@/views/setQuestions/userAskList'),
+          hidden: true,
+          meta: {
+            noCache: '1',
+            title: '答题详情',
+            belongTopMenu: "/operateManager",
+            activeMenu: '/operateManager/setQuestions',
+            id: 'xx19'
+          }
+        },
       ])
     }
     if (route.path == '/financialManager') {

+ 1 - 1
src/views/HumanResources/index.vue

@@ -182,7 +182,7 @@
               </el-tooltip>
             </template>
           </el-table-column>
-          <el-table-column align="center" prop="mobileNo" label="手机号">
+          <el-table-column align="center" prop="mobileNo" label="手机号" width="140px">
             <template slot-scope="scope">
               <div>
                 <copy-text>{{ scope.row.mobileNo }}</copy-text>

+ 29 - 2
src/views/accompaniment/modals/form.vue

@@ -93,6 +93,30 @@
         </el-select>
       </el-form-item>
       <el-form-item
+        prop="sysMusicScore.renderFrom"
+        label="渲染模式"
+        :rules="[{ required: true, message: '请选择渲染模式' }]"
+      >
+        <el-select
+          style="width: 100% !important"
+          v-model="form.sysMusicScore.renderFrom"
+          placeholder="请选择渲染模式"
+        >
+          <el-option value="H5" label="H5"></el-option>
+          <el-option value="APP" label="原生"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item
+        prop="sysMusicScore.enableEvaluation"
+        label="支持评测"
+        :rules="[{ required: true, message: '请选择支持评测' }]"
+      >
+        <el-radio-group v-model="form.sysMusicScore.enableEvaluation">
+          <el-radio :label="1">是</el-radio>
+          <el-radio :label="0">否</el-radio>
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item
         prop="sysMusicScore.order"
         label="排序"
         :rules="[{ required: true, message: '请输入排序' }, {
@@ -275,13 +299,15 @@ export default {
         rankIdType: 0, // 收费会员类型 默认免费
 
         sysMusicScore: {
-            isOpenMetronome: 0, // 是否开启节拍器 默认关闭
+          isOpenMetronome: 0, // 是否开启节拍器 默认关闭
           name: "",
           rankIds: "", // 收费会员编号
           url: "",
           order: "",
           musicScoreCategoriesId: [],
           clientType: "",
+          renderFrom: "",
+          enableEvaluation: 1
         },
         sysMusicScoreAccompaniments: [
           {
@@ -307,7 +333,6 @@ export default {
     await this.FetchTree();
     await this.memberRank();
     if (this.detail) {
-      console.log(this.detail)
       this.$set(this.form, "sysMusicScore", {
         isOpenMetronome:Number(this.detail.isOpenMetronome),
         name: this.detail.name,
@@ -315,6 +340,8 @@ export default {
         rankIds: this.detail.rankIds,
         order: this.detail.order,
         clientType: this.detail.clientType,
+        enableEvaluation: +this.detail.enableEvaluation,
+        renderFrom: this.detail.renderFrom,
         musicScoreCategoriesId: this.detail.categoriesId
           ? this.formatParentId(this.detail.categoriesId, this.tree)
           : [],

+ 4 - 4
src/views/accompanyManager/accompanyList.vue

@@ -149,7 +149,7 @@
             align="center"
             prop="name"
             label="课程组名称"
-            width="100"
+            width="170px"
           >
             <template slot-scope="scope">
               <copy-text>{{ scope.row.name }}</copy-text>
@@ -159,7 +159,7 @@
             align="center"
             prop="type"
             label="课程组类型"
-            width="100"
+
           >
             <template slot-scope="scope">
               <div>
@@ -167,7 +167,7 @@
               </div>
             </template>
           </el-table-column>
-          <el-table-column align="center" prop="organName" label="所属分部">
+          <el-table-column align="center" prop="organName" label="所属分部"  width="100px">
             <template slot-scope="scope">
               <copy-text>{{ scope.row.organName }}</copy-text>
             </template>
@@ -178,7 +178,7 @@
             prop="educationalTeacherName"
             label="乐团主管"
           ></el-table-column>
-          <el-table-column align="center" prop="teacherName" label="指导老师">
+          <el-table-column align="center" prop="teacherName" label="指导老师" width="120px">
             <template slot-scope="scope">
               <copy-text>{{ scope.row.teacherName }}</copy-text>
             </template>

+ 11 - 0
src/views/buildVip/index.vue

@@ -215,6 +215,9 @@
           </el-form-item>
           <el-form-item label="每课时长" prop="classTime">
             <el-select
+            @change="()=>{
+              computationalBtn = false
+            }"
               v-model.trim="leftForm.classTime"
               :disabled="timeTable.length > 0 || classTimeDis"
             >
@@ -1136,7 +1139,9 @@ export default {
       this.courseOption = this.coursesDate();
     },
     onCourseNumChange(type) {
+
       // 折扣类型,并且设置的排课数有值
+      this.computationalBtn = false;
       let centerForm = this.centerForm;
       if (this.maxCourseNum > 0 && this.minCourseNum > 0) {
         // 判断线上或线下总和大于排课次数
@@ -1199,6 +1204,7 @@ export default {
       };
     },
     changeSubject(val) {
+      this.computationalBtn = false
       this.leftForm.teacher = "";
       this.leftForm.section = "";
       // 根据科目id获取相应的老师
@@ -1222,6 +1228,7 @@ export default {
       this.rightForm.offlineCourse = "";
       this.rightForm.onlineCourse = "";
       this.leftForm.activeType = "";
+       this.computationalBtn = false;
       this.leftForm.students = []; // 重置所选学生
       this.changePrice(val);
     },
@@ -1267,6 +1274,7 @@ export default {
     },
     // 选择活动方案
     chioseActive(val) {
+      this.computationalBtn = false;
       this.rightForm.offlineCourse = "";
       this.rightForm.onlineCourse = "";
       // this.rightForm.onlinePrice = '';
@@ -2022,6 +2030,7 @@ export default {
       this.leftForm.section = "";
       this.rightForm.offlineCourse = "";
       this.rightForm.onlineCourse = "";
+      this.computationalBtn = false
       // this.leftForm.courseType = "";
       if (val) {
         getTeachSchool({
@@ -2075,6 +2084,7 @@ export default {
     onClassChange(val) {
       // 课程分部改变时
       // 老师 乐团主管 都要重置
+      this.computationalBtn = false
       this.studentList = [];
       this.activeStudentList = [];
       this.$set(this.leftForm, "students", []);
@@ -2259,6 +2269,7 @@ export default {
       }
     },
     changeStudent(val) {
+      this.computationalBtn = false
       this.chioseActive()
       this.leftForm.activeType = "";
       this.activeStudentList = [];

+ 3 - 3
src/views/businessManager/orderManager/income.vue

@@ -197,7 +197,7 @@
           </el-table-column>
           <el-table-column
             align="center"
-            width="180px"
+            width="100px"
             prop="transNo"
             label="交易流水号"
           >
@@ -209,7 +209,7 @@
           </el-table-column>
           <el-table-column
             align="center"
-            width="210px"
+            width="100px"
             prop="orderNo"
             label="订单号"
           >
@@ -277,7 +277,7 @@
               </div>
             </template>
           </el-table-column>
-          <el-table-column align="center" label="学员姓名">
+          <el-table-column align="center" label="学员姓名" width="150px">
             <template slot-scope="scope">
               <copy-text v-if="scope.row.user.username">
                 {{ scope.row.user.username }}</copy-text

+ 3 - 2
src/views/businessManager/orderManager/payRecord.vue

@@ -217,12 +217,12 @@
           </el-table-column>
           <el-table-column align="center" label="费用类型">
             <template slot-scope="scope">{{
-              scope.row.type | feeType
+              scope.row.feeProject | feeProject 
             }}</template>
           </el-table-column>
           <el-table-column align="center" label="费用项目">
             <template slot-scope="scope">{{
-              scope.row.feeProject | feeProject
+              scope.row.type | feeType
             }}</template>
           </el-table-column>
           <el-table-column
@@ -479,6 +479,7 @@ export default {
     onReSet() {
       // this.orderDate = [];
       this.searchForm = {
+        organId:[],
         startTime: null,
         endTime: null,
         orderDate: [],

+ 107 - 0
src/views/categroyManager/accompanyBaseConfig.vue

@@ -0,0 +1,107 @@
+<template>
+  <div class="m-container">
+    <h2>
+      <div class="squrt"></div>
+      网管课基础配置设置
+    </h2>
+    <div class="m-core">
+      <el-alert
+        style="margin: 20px 0"
+        title="网管课分部设置"
+        :closable="false"
+        class="alert"
+        type="info"
+      >
+      </el-alert>
+      <el-row class="row">
+        网管课可选分部
+        <select-all
+          class="chioseOragn"
+          multiple
+          collapse-tags
+          v-model="organIdList"
+          clearable
+          filterable
+          size="mini"
+          placeholder="请选择分部"
+        >
+          <el-option
+            v-for="(item, index) in selects.branchs"
+            :key="index"
+            :label="item.name"
+            :value="item.id"
+          ></el-option>
+        </select-all>
+        老师
+        <el-button type="primary" size="mini" class="submitBtn" @click="submit"
+          >保存</el-button
+        >
+      </el-row>
+    </div>
+  </div>
+</template>
+<script>
+import { sysConfigList, sysConfigUpdate } from "@/api/generalSettings";
+export default {
+  data() {
+    return {
+      organIdList: [],
+      activeItem: null,
+    };
+  },
+  mounted() {
+    this.$store.dispatch("setBranchs");
+    sysConfigList({ group: "PRACTICE" }).then((res) => {
+      if (res.code == 200 && res.data.length > 0) {
+        res.data.forEach((item, index) => {
+          if (item.paramName == "practice_teacher_organ_range") {
+            this.activeItem = item;
+            this.organIdList = item.paranValue?item.paranValue.split(",").map((oragn) => {
+              return Number(oragn);
+            }):[]
+          }
+        });
+      }
+    });
+  },
+  methods: {
+    submit() {
+      if (this.organIdList.length < 0) {
+        this.$message.error("请至少选择一个分部");
+        return;
+      }
+      let params = { ...this.activeItem };
+      params.paranValue = this.organIdList.join(",");
+      sysConfigUpdate(params).then((res) => {
+        if (res.code == 200) {
+          this.$message.success("修改成功");
+        }
+      });
+      /**
+      *  let params = {
+        id: row.id,
+        paranValue: this.input[index],
+        paramName: row.paramName,
+        description: row.description.join('{}')
+      }
+      */
+      // submit
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+.chioseOragn {
+  width: 400px;
+  margin: 0 5px;
+}
+.row {
+  display: flex;
+  flex-direction: row;
+  align-items: center;
+  font-size: 14px;
+}
+.submitBtn {
+  margin-left: 10px;
+}
+</style>

+ 173 - 0
src/views/categroyManager/accompanyFeeConfig.vue

@@ -0,0 +1,173 @@
+<template>
+  <div class="m-container">
+    <h2>
+      <div class="squrt"></div>
+      网管课价格设置
+    </h2>
+    <div class="m-core">
+      <save-form
+        :inline="true"
+        :model="searchForm"
+        @submit="search"
+        @reset="onReSet"
+        ref='searchForm'
+      >
+        <el-form-item prop="organId">
+          <el-select
+            class="multiple"
+            v-model.trim="searchForm.organId"
+            filterable
+            clearable
+            placeholder="请选择分部"
+          >
+            <el-option
+              v-for="(item, index) in selects.branchs"
+              :key="index"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-button native-type="submit" type="primary">搜索</el-button>
+          <el-button native-type="reset" type="danger">重置</el-button>
+        </el-form-item>
+      </save-form>
+      <div class="tableWrap">
+        <el-table
+          style="width: 100%"
+          :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+          :data="tableList"
+        >
+          <el-table-column
+            align="center"
+            prop="studentId"
+            label="分部"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="studentId"
+            label="课程时长(分钟)"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="studentId"
+            label="课程单价(元)"
+          ></el-table-column>
+          <el-table-column align="center" prop="studentId" label="操作">
+            <template slot-scope="scope">
+              <div>
+                <el-button type="text" @click="resetFee(scope.row)"
+                  >修改</el-button
+                >
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination
+          sync
+          :total.sync="rules.total"
+          :page.sync="rules.page"
+          :limit.sync="rules.limit"
+          :page-sizes="rules.page_size"
+          @pagination="getList"
+        />
+      </div>
+    </div>
+    <el-dialog
+      title="修改课程单价"
+      :visible.sync="dialogVisible"
+      width="400px"
+      append-to-body
+      v-if="dialogVisible"
+    >
+      <el-form :model="form" label-width="120px" label-position="right" >
+        <el-form-item label="分部:">{{ form.organName }}</el-form-item>
+        <el-form-item label="课程时长(分钟):">{{
+          form.courseTime
+        }}</el-form-item>
+        <el-form-item
+          label="课程单价(元):"
+          prop="courseFee"
+          :rules="[
+            { required: true, message: '请输入课程单价', trigger: 'blur' },
+            {
+              pattern:
+                /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
+              message: '请输入正确的金额',
+              trigger: 'blur',
+            },
+          ]"
+        >
+          <el-input v-model="form.courseFee"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer">
+        <el-button @click="dialogVisible = false">取 消</el-button>
+        <el-button type="primary" @click="submitReset">确认修改</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+<script>
+import axios from "axios";
+import { getToken } from "@/utils/auth";
+import pagination from "@/components/Pagination/index";
+import load from "@/utils/loading";
+export default {
+  components:{
+    pagination
+  },
+  data() {
+    return {
+      searchForm: {
+        organId: null,
+      },
+      form: {
+        organName: "武汉",
+        courseTime: "25",
+        courseFee: "180",
+      },
+      tableList: [{}],
+      organList: [],
+      activeRow: null,
+      dialogVisible: false,
+      rules: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
+      },
+    };
+  },
+  created() {},
+  //生命周期 - 挂载完成(可以访问DOM元素)
+  mounted() {
+    // 获取分部
+    this.$store.dispatch("setBranchs");
+    this.init();
+  },
+  methods: {
+    init() {},
+    getList() {},
+    search() {
+      this.rules.page = 1;
+      this.getList();
+    },
+    onReSet() {
+      this.$refs.searchForm.resetFields();
+      this.search()
+    },
+    resetFee(row) {
+      this.activeRow = row;
+      this.dialogVisible = true;
+    },
+    submitReset() {
+
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+</style>

+ 1 - 0
src/views/categroyManager/specialSetup/chargesList.vue

@@ -7,6 +7,7 @@
           <el-select
             placeholder="请选择分部"
             v-model="searchForm.organId"
+            filterable
             clearable
           >
             <el-option

+ 2 - 0
src/views/categroyManager/specialSetup/musicCourseFee.vue

@@ -12,6 +12,7 @@
         <el-form-item prop="organId">
           <el-select placeholder="请选择分部"
                      v-model="searchForm.organId"
+                     filterable
                      clearable>
             <el-option v-for="(item, index) in selects.branchs"
                        :label="item.name"
@@ -109,6 +110,7 @@
                       :label-width="formLabelWidth">
           <el-select placeholder="请选择分部"
                      v-model="createForm.organId"
+                     filterable
                      clearable>
             <el-option v-for="(item, index) in selects.branchs"
                        :label="item.name"

+ 2 - 1
src/views/chargeManager/one.vue

@@ -55,7 +55,7 @@
     >
       <el-form :model="form" :rules="rules" ref="ruleForm">
         <el-form-item label="所属分部" prop="organId" :label-width="formLabelWidth">
-          <el-select v-model.trim="form.organId" :disabled="formActionTitle === 'update'" placeholder="请选择所属分部">
+          <el-select v-model.trim="form.organId" filterable :disabled="formActionTitle === 'update'" placeholder="请选择所属分部">
             <el-option
               v-for="(item, index) in selects.branchs"
               :key="index"
@@ -128,6 +128,7 @@
                 v-model.trim="domain.organId"
                 placeholder="请选择分部"
                 clearable
+                filterable
               >
                 <el-option
                   v-for="(item, index) in calcBranchList"

+ 4 - 2
src/views/chargeManager/share-model.vue

@@ -2,7 +2,7 @@
     <div>
         <el-form :model="form" :rules="rules" ref="ruleForm">
             <el-form-item label="所属分部" prop="organId" :label-width="formLabelWidth">
-                <el-select v-model.trim="form.organId" :disabled="formActionTitle === 'update'" placeholder="请选择所属分部">
+                <el-select v-model.trim="form.organId" :disabled="formActionTitle === 'update'" filterable placeholder="请选择所属分部">
                     <el-option
                     v-for="item in selects.branchs"
                     :key="item.id"
@@ -33,6 +33,7 @@
                         v-model.trim="service.organId"
                         placeholder="分润分部"
                         clearable
+                        filterable
                     >
                         <el-option
                         v-for="(item, index) in calcBranchList"
@@ -91,6 +92,7 @@
                         v-model.trim="domain.organId"
                         placeholder="分润分部"
                         clearable
+                        filterable
                     >
                         <el-option
                         v-for="(item, index) in calcBranchList"
@@ -305,4 +307,4 @@ export default {
     text-align: right;
     margin-top: 20px;
   }
-</style>
+</style>

+ 4 - 4
src/views/chargeManager/two.vue

@@ -21,7 +21,7 @@
               :rules="{
                 required: true, message: '请选择所属分部', trigger: 'change'
               }">
-              <el-select v-model.trim="domain.organId" clearable :disabled="domain.disabled" placeholder="请选择所属分部">
+              <el-select v-model.trim="domain.organId" clearable filterable :disabled="domain.disabled" placeholder="请选择所属分部">
                 <el-option
                   v-for="(item, index1) in selects.branchs"
                   :key="index1"
@@ -33,7 +33,7 @@
             <el-form-item class="setWidth" :prop="'domains.' + index + '.routeOrganId'" :rules="[
               { required: true, message: '请选择收款分部', trigger: 'change' },
             ]">
-              <el-select clearable v-model.trim="domain.routeOrganId" :disabled="domain.disabled" placeholder="请选择收款分部">
+              <el-select clearable v-model.trim="domain.routeOrganId" filterable :disabled="domain.disabled" placeholder="请选择收款分部">
                 <el-option
                   v-for="(item, index) in calcBranchList"
                   :key="index"
@@ -87,7 +87,7 @@
     <el-dialog title="零星收费设置" :visible.sync="sporadicStatus" width="500px">
       <el-form :model="formSporadic" :rules="rulesSporadic" ref="ruleFormSporadic">
         <el-form-item label="收款分部" prop="organId" :label-width="formLabelWidth2">
-          <el-select v-model.trim="formSporadic.organId">
+          <el-select v-model.trim="formSporadic.organId" filterable>
             <el-option
               v-for="item in calcBranchList"
               :key="item.value"
@@ -387,4 +387,4 @@ export default {
   width: 180px;
   text-align: center;
 }
-</style>
+</style>

+ 6 - 3
src/views/couponManager/couponUpdate.vue

@@ -39,7 +39,7 @@
         </el-col>
       </el-row>
       <el-row :gutter="20">
-        <el-col style="width: 395px">
+        <!-- <el-col style="width: 395px">
           <el-form-item
             label="优惠券类型"
             prop="type"
@@ -62,7 +62,7 @@
               ></el-option>
             </el-select>
           </el-form-item>
-        </el-col>
+        </el-col> -->
         <el-col style="width: 395px" v-if="form.type == 'FULL_REDUCTION'">
           <el-form-item
             label="面值"
@@ -264,7 +264,7 @@ export default {
       form: {
         name: "",
         description: "",
-        type: "",
+        type: "FULL_REDUCTION",
         faceValue: "",
         fullAmount: "",
         effectiveType: "",
@@ -283,6 +283,9 @@ export default {
     if (this.$route.query.row) {
       this.activeRow = JSON.parse(this.$route.query.row);
       this.form = { ...this.activeRow };
+      // 优惠券只能时满减
+      this.form.type = 'FULL_REDUCTION'
+
       let effectiveStartTime = this.activeRow.effectiveStartTime;
       let effectiveExpireTime = this.activeRow.effectiveExpireTime;
       let startDate = this.activeRow.startDate;

+ 2 - 2
src/views/couponManager/index.vue

@@ -21,7 +21,7 @@
             placeholder="优惠券名称、编号"
           ></el-input>
         </el-form-item>
-        <el-form-item prop="type">
+        <!-- <el-form-item prop="type">
           <el-select
             placeholder="优惠券类型"
             v-model.trim="searchForm.type"
@@ -35,7 +35,7 @@
               :label="item.label"
             ></el-option>
           </el-select>
-        </el-form-item>
+        </el-form-item> -->
         <el-form-item prop="status">
           <el-select
             placeholder="优惠券状态"

+ 52 - 14
src/views/levelManager/levelManager.vue

@@ -41,8 +41,13 @@
                     @keyup.enter.native="city"
                     placeholder="请输入城市名"></el-input>
         </el-form-item> -->
-        <el-form-item prop="organId">
-          <el-select
+        <el-form-item prop="city">
+          <el-input
+            v-model.trim="searchForm.city"
+            clearable
+            placeholder="请输入所属城市"
+          ></el-input>
+          <!-- <el-select
             v-model.trim="searchForm.organId"
             filterable
             clearable
@@ -54,6 +59,18 @@
               :label="item.name"
               :value="item.id"
             ></el-option>
+          </el-select> -->
+        </el-form-item>
+        <el-form-item>
+          <el-select
+            class="multiple"
+            v-model.trim="searchForm.degreeType"
+            filterable
+            clearable
+            placeholder="请选择考级类型"
+          >
+            <el-option :value="2" label="2022级考级"></el-option>
+            <el-option :value="1" label="2021级考级"></el-option>
           </el-select>
         </el-form-item>
         <el-form-item>
@@ -103,14 +120,15 @@
           :data="tableList"
           :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
         >
-          <el-table-column width="90px" align="center" prop="id" label="编号">
+          <!-- <el-table-column width="90px" align="center" prop="id" label="编号">
             <template slot-scope="scope">
               <copy-text>{{ scope.row.id }}</copy-text>
             </template>
-          </el-table-column>
+          </el-table-column> -->
           <el-table-column align="center" prop="name" label="姓名">
             <template slot-scope="scope">
-              <copy-text>{{ scope.row.name }}</copy-text>
+              <copy-text>{{ scope.row.name }}</copy-text><br />
+              (<copy-text>{{ scope.row.id }}</copy-text>)
             </template>
           </el-table-column>
           <el-table-column align="center" prop="orderNo" label="订单编号">
@@ -122,19 +140,28 @@
             <template slot-scope="scope">
               <el-tooltip placement="top-start">
                 <div slot="content">{{ scope.row.transNo }}</div>
-                <copy-text>{{ scope.row.transNo }}</copy-text>
               </el-tooltip>
+                <copy-text>{{ scope.row.transNo }}</copy-text>
             </template>
           </el-table-column>
-                <el-table-column
+          <el-table-column
             align="center"
             prop="city"
-            label="分部"
+            label="所属城市"
           >
               <template slot-scope="scope">
               <copy-text>{{ scope.row.city }}</copy-text>
             </template>
           </el-table-column>
+          <el-table-column
+            align="center"
+            prop="school"
+            label="学校"
+          >
+              <template slot-scope="scope">
+              <copy-text>{{ scope.row.school }}</copy-text>
+            </template>
+          </el-table-column>
           <el-table-column align="center" prop="gender" label="性别">
             <template slot-scope="scope">{{
               scope.row.gender == 1 ? "男" : "女"
@@ -161,18 +188,28 @@
             align="center"
             prop="level"
             label="报考级别"
-          ></el-table-column>
+            width="150px"
+          >
+            <template slot-scope="scope">
+              {{ scope.row.level }} / {{ scope.row.money | moneyFormat }}元
+            </template>
+          </el-table-column>
           <el-table-column
             align="center"
             prop="theoryLevel"
+            width="150px"
             label="乐理级别"
-          ></el-table-column>
+          >
+            <template slot-scope="scope">
+              <div v-if="scope.row.theoryLevel">{{ scope.row.theoryLevel }} / {{ scope.row.theoryMoney | moneyFormat }}元</div>
+            </template>
+          </el-table-column>
           <el-table-column align="center" label="缴费状态">
             <template slot-scope="scope">{{
               scope.row.status == 2 ? "已缴费" : "未缴费"
             }}</template>
           </el-table-column>
-          <el-table-column align="center" prop="money" label="报考级别费用">
+          <!-- <el-table-column align="center" prop="money" label="报考级别费用">
             <template slot-scope="scope"
               >{{ scope.row.money | moneyFormat }}元</template
             >
@@ -185,13 +222,13 @@
             <template slot-scope="scope"
               >{{ scope.row.theoryMoney | moneyFormat }}元</template
             >
-          </el-table-column>
+          </el-table-column> -->
           <el-table-column align="center" label="证书">
             <template slot-scope="scope">
               <div v-if="scope.row.theoryCert">
                 <el-image
                   fit="cover"
-                  style="width: 100px; height: 100px"
+                  style="width: 80px; height: 80px; border-radius: 5px"
                   :src="scope.row.theoryCert"
                   :preview-src-list="[scope.row.theoryCert]"
                 ></el-image>
@@ -252,6 +289,7 @@ export default {
         organId: null,
         endTime: null,
         orderDate: [],
+        degreeType: 2
       },
       totalNumber: 0,
       totalAmount: 0,
@@ -311,7 +349,7 @@ export default {
       degreeQueryPage(params).then((res) => {
         let result = res.data;
         if (res.code == 200) {
-          this.totalNumber = result.total;
+          this.totalNumber = result.applyNum;
           this.totalAmount = result.totalAmount;
           this.tableList = result.rows;
           this.pageInfo.total = result.total;

+ 143 - 110
src/views/reaplceMusicPlayer/answerList.vue

@@ -1,5 +1,5 @@
 <template>
-<div class='m-container'>
+  <div class="m-container">
     <h2>
       <el-page-header @back="onCancel" :content="titleName"></el-page-header>
     </h2>
@@ -22,135 +22,165 @@
         <el-form-item>
           <el-button native-type="submit" type="primary">搜索</el-button>
           <el-button native-type="reset" type="danger">重置</el-button>
-          <el-button type="primary" @click="onExport" v-if="$helpers.permission('questionnaireUserResult/export')">导出</el-button>
+          <el-button
+            type="primary"
+            @click="onExport"
+            v-if="$helpers.permission('questionnaireUserResult/export')"
+            >导出</el-button
+          >
         </el-form-item>
       </save-form>
       <el-card class="box-card" v-for="item in tableList" :key="item.id">
-          <el-row>
-            <el-col :xs="24" :sm="24" :md="6" :lg="5" :xl="5">
-              <el-form label-position="left" inline label-width="90px" class="demo-table-expand">
-                <el-form-item label="学生编号">
-                  <span><copy-text>{{ item.userId}}</copy-text></span>
-                </el-form-item>
-                <el-form-item label="学生姓名">
-                  <span><copy-text>{{ item.username}}</copy-text></span>
-                </el-form-item>
-                <el-form-item label="学生手机号">
-                  <span><copy-text>{{ item.phone}}</copy-text></span>
-                </el-form-item>
-              </el-form>
-              <!-- <el-row :gutter="10" style="font-size: 14px">
+        <el-row>
+          <el-form
+            label-position="left"
+            :inline="true"
+            label-width="90px"
+            class="demo-table-expand"
+          >
+            <el-form-item label="学生编号">
+              <span
+                ><copy-text>{{ item.userId }}</copy-text></span
+              >
+            </el-form-item>
+            <el-form-item label="学生姓名">
+              <span
+                ><copy-text>{{ item.username }}</copy-text></span
+              >
+            </el-form-item>
+            <el-form-item label="学生手机号">
+              <span
+                ><copy-text>{{ item.phone }}</copy-text></span
+              >
+            </el-form-item>
+          </el-form>
+          <!-- <el-row :gutter="10" style="font-size: 14px">
                 <el-col :span="24" style="padding-bottom: 8px"><>学生编号:<copy-text>{{ item.userId}}</copy-text></el-col>
                 <el-col :span="24" style="padding-bottom: 8px">学生姓名:<copy-text>{{ item.username}}</copy-text></el-col>
                 <el-col :span="24" style="padding-bottom: 8px">学生手机号:<copy-text>{{ item.phone}}</copy-text></el-col>
               </el-row> -->
-            </el-col>
-            <el-col :xs="24" :sm="24" :md="18" :lg="19" :xl="19">
-              <el-collapse>
-                <el-collapse-item title="查看答案" name="1">
-                  <div v-for="(o, index) in item.questionnaireResultDtoList" :key="index" class="text item">
-                    <el-alert :title="o.content" type="info" :closable="false"></el-alert>
-                    <div style="padding: 8px 20px; font-size: 14px;" v-if="o.answerValue || o.additionalValue">{{ o.answerValue ? o.answerValue : o.additionalValue }}</div>
-                    <!-- <div style="padding: 8px 20px; font-size: 14px;" v-else>未答题</div> -->
-                    <el-tag style="margin: 8px 20px; font-size: 14px;" type="danger" v-else>未答题</el-tag>
-                  </div>
-                </el-collapse-item>
-              </el-collapse>
-              <!-- <div v-for="(o, index) in item.questionnaireResultDtoList" :key="index" class="text item">
-                <el-alert :title="o.content" type="info" :closable="false"></el-alert>
-                <div style="padding: 8px 20px; font-size: 14px;">{{ o.answerValue }}</div>
-              </div> -->
-            </el-col>
-          </el-row>
+        </el-row>
+        <el-row>
+          <el-collapse>
+            <el-collapse-item title="查看答案" name="1">
+              <div
+                v-for="(o, index) in item.questionnaireResultDtoList"
+                :key="index"
+                class="text item"
+              >
+                <el-alert
+                  :title="o.content"
+                  type="info"
+                  :closable="false"
+                ></el-alert>
+                <div
+                  style="padding: 8px 20px; font-size: 14px"
+                  v-if="o.answerValue || o.additionalValue"
+                >
+                  {{ o.answerValue ? o.answerValue : o.additionalValue }}
+                </div>
+                <!-- <div style="padding: 8px 20px; font-size: 14px;" v-else>未答题</div> -->
+                <el-tag
+                  style="margin: 8px 20px; font-size: 14px"
+                  type="danger"
+                  v-else
+                  >未答题</el-tag
+                >
+              </div>
+            </el-collapse-item>
+          </el-collapse>
+        </el-row>
       </el-card>
       <empty v-if="tableList.length <= 0" />
       <pagination
-          sync
-          :total.sync="pageInfo.total"
-          :page.sync="pageInfo.page"
-          :limit.sync="pageInfo.limit"
-          :page-sizes="pageInfo.page_size"
-          @pagination="getList"
-        />
+        sync
+        :total.sync="pageInfo.total"
+        :page.sync="pageInfo.page"
+        :limit.sync="pageInfo.limit"
+        :page-sizes="pageInfo.page_size"
+        @pagination="getList"
+      />
     </div>
-</div>
+  </div>
 </template>
 <script>
-import { questionnaireUserResultQueryPage } from './api'
-import { Export } from '@/utils/downLoadFile'
+import { questionnaireUserResultQueryPage } from "./api";
+import { Export } from "@/utils/downLoadFile";
 import pagination from "@/components/Pagination/index";
 export default {
-    name: 'operationQuestion',
-    components: { pagination },
-    data () {
-        let query = this.$route.query
-        let titleName = '问答详情'
-        return {
-            titleName: titleName,
-            id: query.id,
-            topicId: query.topicId,
-            searchForm: {
-              search: null,
-            },
-            tableList: [],
-            pageInfo: {
-              // 分页规则
-              limit: 10, // 限制显示条数
-              page: 1, // 当前页
-              total: 0, // 总条数
-              page_size: [10, 20, 40, 50], // 选择限制显示条数
-            },
-        }
-    },
-    async mounted () {
-      this.getList()
-    },
-    methods: {
-      search() {
-        this.pageInfo.page = 1;
-        this.getList();
-      },
-      onReSet() {
-        this.$refs.searchForm.resetFields();
-        this.search();
+  name: "operationQuestion",
+  components: { pagination },
+  data() {
+    let query = this.$route.query;
+    let titleName = "问答详情";
+    return {
+      titleName: titleName,
+      id: query.id,
+      topicId: query.topicId,
+      searchForm: {
+        search: null,
       },
-      async getList() {
-        try {
-          let params = {
-            activeId: this.id,
-            activeType: 'REPLACEMENT',
-            page: this.pageInfo.page,
-            rows: this.pageInfo.limit,
-            ...this.searchForm
-          }
-          let result = await questionnaireUserResultQueryPage(params)
-          this.tableList = result.data.rows
-          this.pageInfo.total = result.data.total
-        } catch {
-
-        }
-      },
-      onCancel() {
-        this.$store.dispatch('delVisitedViews', this.$route)
-        this.$router.push({ path: '/otherManager/reaplceMusicPlayer' })
+      tableList: [],
+      pageInfo: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
       },
-      onExport() {
-        Export(this, {
-          url: '/api-web/questionnaireUserResult/export',
-          fileName: '问答详情.xls',
-          method: 'get',
-          params: { cooperationId: this.id, activeType: 'REPLACEMENT' }
-        }, '您确定导出问答详情?')
-      }
-    }
-}
+    };
+  },
+  async mounted() {
+    this.getList();
+  },
+  methods: {
+    search() {
+      this.pageInfo.page = 1;
+      this.getList();
+    },
+    onReSet() {
+      this.$refs.searchForm.resetFields();
+      this.search();
+    },
+    async getList() {
+      try {
+        let params = {
+          activeId: this.id,
+          activeType: "REPLACEMENT",
+          page: this.pageInfo.page,
+          rows: this.pageInfo.limit,
+          ...this.searchForm,
+        };
+        let result = await questionnaireUserResultQueryPage(params);
+        this.tableList = result.data.rows;
+        this.pageInfo.total = result.data.total;
+      } catch {}
+    },
+    onCancel() {
+      this.$store.dispatch("delVisitedViews", this.$route);
+      this.$router.push({ path: "/otherManager/reaplceMusicPlayer" });
+    },
+    onExport() {
+      Export(
+        this,
+        {
+          url: "/api-web/questionnaireUserResult/export",
+          fileName: "问答详情.xls",
+          method: "get",
+          params: { cooperationId: this.id, activeType: "REPLACEMENT" },
+        },
+        "您确定导出问答详情?"
+      );
+    },
+  },
+};
 </script>
 <style lang="scss" scoped>
 .box-card {
   margin-bottom: 10px;
 }
 /deep/.el-collapse-item__header {
-  background: #EDEEF0;
+  background: #edeef0;
   color: #444;
   padding: 0 10px;
 }
@@ -162,7 +192,7 @@ export default {
 }
 
 .demo-table-expand {
-    font-size: 0;
+  font-size: 0;
 }
 .demo-table-expand label {
   width: 90px;
@@ -171,6 +201,9 @@ export default {
 .demo-table-expand .el-form-item {
   margin-right: 0;
   margin-bottom: 0;
-  width: 100%;
+  width: 300px;
+  span {
+    width: 200px;
+  }
 }
-</style>
+</style>

+ 9 - 1
src/views/setQuestions/api.js

@@ -29,4 +29,12 @@ export const questionnaireTopicUpdateStatus = data => request2({
     data,
     method: 'post',
     requestType: 'form'
-})
+})
+
+// 问卷答案 questionnaireUserResult/queryResultPage
+export const questionnaireUserResult = data => request2({
+  url: '/api-web/questionnaireUserResult/queryResultPage',
+  data,
+  params: data,
+  method: 'get',
+})

+ 453 - 176
src/views/setQuestions/components/answerList.vue

@@ -1,209 +1,486 @@
 <template>
-	<div>
-        <div class="questions" v-if="questionList.length > 0"  v-show="!resultStatus">
-            <div class="top-tips">{{ form.title }}</div>
-            <el-card class="box-card">
-                <div slot="header" class="clearfix">
-                    <span class="questionName">{{ questionList[currentIndex - 1]['content'] }}</span>
-                </div>
-                <el-radio-group v-model="check" v-if="questionList[currentIndex - 1]['type'] == 'radio'">
-                    <div class="" v-for="(item) in questionList[currentIndex - 1]['questionnaireQuestionItemList']" :key="item.id">
-                        <el-radio :label="item.id">{{item.answerValue}}</el-radio>
-                    </div>
-                </el-radio-group>
-                <el-checkbox-group v-model="checkBox" v-if="questionList[currentIndex - 1]['type'] == 'checkbox'">
-                    <el-checkbox  v-for="(item) in questionList[currentIndex - 1]['questionnaireQuestionItemList']" :key="item.id" :label="item.id">{{ item.answerValue }}</el-checkbox>
-                </el-checkbox-group>
-                <el-input
-                    v-if="questionList[currentIndex - 1]['type'] == 'textarea'"
-                    type="textarea"
-                    style="border: 0;"
-                    :autosize="{ minRows: 3, maxRows: 6}"
-                    placeholder="请输入其它意见"
-                    v-model="textarea">
-                </el-input>
-            </el-card>
-            <el-button size="large" type="primary" v-if="questionList[currentIndex - 1]['type'] == 'radio'" block round class="btn-submit" color="#01C1B5" :disabled="!check && !!isRequire" @click="onSubmit">提交</el-button>
-            <el-button size="large" type="primary" v-if="questionList[currentIndex - 1]['type'] == 'checkbox'" block round class="btn-submit" color="#01C1B5" :disabled="checkBox.length <= 0 && !!isRequire" @click="onSubmit">提交</el-button>
-            <el-button size="large" type="primary" v-if="questionList[currentIndex - 1]['type'] == 'textarea'" block round class="btn-submit" color="#01C1B5" :disabled="!textarea && !!isRequire" @click="onSubmit">提交</el-button>
-        </div>
+  <div>
+    <div
+      class="questions"
+      v-if="questionList.length > 0"
+      v-show="!resultStatus"
+    >
+      <div class="top-tips">{{ form.title }}</div>
 
-        <div class="resultModel" v-show="resultStatus">
-            <img src="@/assets/images/pay_success.png" class="img" alt="">
-            <p class="content">感谢您的参与!</p>
-            <el-button size="large" type="primary" round class="btn-submit" @click="onSubmitClose">确认</el-button>
+      <el-card class="box-card">
+        <div slot="header" class="clearfix">
+          <span class="questionName">{{
+            questionList[currentIndex - 1]["content"]
+          }}</span>
         </div>
+        <el-radio-group
+          v-model="check"
+          v-if="questionList[currentIndex - 1]['type'] == 'radio'"
+        >
+          <div
+            class=""
+            v-for="item in questionList[currentIndex - 1][
+              'questionnaireQuestionItemList'
+            ]"
+            :key="item.id"
+          >
+            <el-radio :label="item.id">{{ item.answerValue }}</el-radio>
+          </div>
+        </el-radio-group>
+        <el-checkbox-group
+          v-model="checkBox"
+          v-if="questionList[currentIndex - 1]['type'] == 'checkbox'"
+        >
+          <el-checkbox
+            v-for="item in questionList[currentIndex - 1][
+              'questionnaireQuestionItemList'
+            ]"
+            :key="item.id"
+            :label="item.id"
+            >{{ item.answerValue }}</el-checkbox
+          >
+        </el-checkbox-group>
+        <el-input
+          v-if="questionList[currentIndex - 1]['type'] == 'textarea'"
+          type="textarea"
+          style="border: 0"
+          :autosize="{ minRows: 3, maxRows: 6 }"
+          placeholder="请输入其它意见"
+          v-model="textarea"
+        >
+        </el-input>
+        <!-- 图片或者文件 -->
+        <el-upload
+          v-if="
+            questionList[currentIndex - 1]['type'] == 'image' ||
+            questionList[currentIndex - 1]['type'] == 'file'
+          "
+          class="ivu-upload"
+          :file-list="fileList"
+          :show-file-list="true"
+          :headers="headers"
+          :on-remove="handleRemove"
+          :accept="
+            questionList[currentIndex - 1]['type'] == 'image'
+              ? '.jpg, .jpeg, .png'
+              : '.XLSX,.XLS,.DOCX,.PDF,.TXT,.PSD,.EPS,.RAR,.ZIP '
+          "
+          :before-upload="
+            (flie) => {
+              return beforeUpload(flie, questionList[currentIndex - 1]['type']);
+            }
+          "
+          :on-success="
+            (response, file, list) => {
+              handleUploadSuccess(
+                response,
+                file,
+                list,
+                questionList[currentIndex - 1]
+              );
+            }
+          "
+          :on-error="handleUploadError"
+          :max-size="2048"
+          multiple
+          action="/api-web/uploadFile"
+        >
+          <div slot="trigger" class="el-upload el-upload--picture-card">
+            <i class="el-icon-plus"></i>
+          </div>
+          <div
+            slot="tip"
+            v-if="questionList[currentIndex - 1]['type'] == 'image'"
+            class="el-upload__tip"
+          >
+            仅支持上传JPG、PNG、JPEG、GIF文件,且不超过5MB
+          </div>
+          <div slot="tip" v-else class="el-upload__tip">
+            仅支持上传XLSX、XLS、DOCX、PDF、TXT、PSD、EPS、RAR、ZIP文件,且不超过5MB
+          </div>
+        </el-upload>
+      </el-card>
+      <el-button
+        size="large"
+        type="primary"
+        v-if="questionList[currentIndex - 1]['type'] == 'radio'"
+        block
+        round
+        class="btn-submit"
+        color="#01C1B5"
+        :disabled="!check && !!isRequire"
+        @click="onSubmit"
+        >提交</el-button
+      >
+      <el-button
+        size="large"
+        type="primary"
+        v-if="questionList[currentIndex - 1]['type'] == 'checkbox'"
+        block
+        round
+        class="btn-submit"
+        color="#01C1B5"
+        :disabled="checkBox.length <= 0 && !!isRequire"
+        @click="onSubmit"
+        >提交</el-button
+      >
+      <el-button
+        size="large"
+        type="primary"
+        v-if="questionList[currentIndex - 1]['type'] == 'textarea'"
+        block
+        round
+        class="btn-submit"
+        color="#01C1B5"
+        :disabled="!textarea && !!isRequire"
+        @click="onSubmit"
+        >提交</el-button
+      >
+      <el-button
+        size="large"
+        type="primary"
+        v-if="questionList[currentIndex - 1]['type'] == 'image'"
+        block
+        round
+        class="btn-submit"
+        color="#01C1B5"
+        :disabled="fileList.length <= 0 && !!isRequire"
+        @click="onSubmit"
+        >提交</el-button
+      >
+      <el-button
+        size="large"
+        type="primary"
+        v-if="questionList[currentIndex - 1]['type'] == 'file'"
+        block
+        round
+        class="btn-submit"
+        color="#01C1B5"
+        :disabled="fileList.length <= 0 && !!isRequire"
+        @click="onSubmit"
+        >提交</el-button
+      >
+    </div>
 
-	</div>
+    <div class="resultModel" v-show="resultStatus">
+      <img src="@/assets/images/pay_success.png" class="img" alt="" />
+      <p class="content">感谢您的参与!</p>
+      <el-button
+        size="large"
+        type="primary"
+        round
+        class="btn-submit"
+        @click="onSubmitClose"
+        >确认</el-button
+      >
+    </div>
+  </div>
 </template>
 
 <script>
-	export default {
-		name: 'question',
-        props: ['form', 'close'],
-		data() {
-			return {
-                currentIndex: 1,
-                questionList: [],
-                check: null,
-                isRequire: 1,
-                checkBox: [],
-                textarea: null,
-                checkList: [],
-                resultStatus: false
-			}
-		},
-		async mounted() {
-            try {
-                this.questionList = this.form.questionnaireQuestionList || []
-                console.log(this.questionList)
-                this.isRequire = this.questionList[this.currentIndex - 1].isRequire
-            } catch {
-                //
-            }
-		},
-		methods: {
-            toggle(index) {
-                let selectList = this.questionList[this.currentIndex - 1]
-                if(selectList.type == 'radio') {
-                    this.check = index
-                } else if(selectList.type == 'checkbox') {
-                    this.$refs.checkboxes[index].toggle()
-                }
-            },
-            onSubmit() {
-                let selectList = this.questionList[this.currentIndex - 1]
-                if(selectList.type == 'radio' && selectList.isRequire && !this.check) {
-                    this.$message.error('请回答当前问题')
-                    return
-                } else if(selectList.type == 'checkbox' && selectList.isRequire && this.checkBox.length <= 0) {
-                    this.$message.error('请回答当前问题')
-                    return
-                } else if(selectList.type == 'textarea' && selectList.isRequire && !this.textarea) {
-                    this.$message.error('请回答当前问题')
-                    return
-                }
+import { getToken } from "@/utils/auth";
+export default {
+  name: "question",
+  props: ["form", "close"],
+  data() {
+    return {
+      currentIndex: 1,
+      questionList: [],
+      check: null,
+      isRequire: 1,
+      checkBox: [],
+      textarea: null,
+      checkList: [],
+      fileList: [],
 
-                let answerList = selectList.questionnaireQuestionItemList || [] //当前题的选项
-                let currentIsOver = 0 // 是否终止答题
-                answerList.forEach(item => {
-                    if(selectList.type == 'radio' && this.check == item.id) {
-                        currentIsOver = item.isOver
-                    } else if(selectList.type == 'checkbox' && this.checkBox.includes(item.id) && !currentIsOver) {
-                        currentIsOver = item.isOver
-                    }
-                })
+      resultStatus: false,
+      headers: {
+        Authorization: getToken(),
+      },
+    };
+  },
+  async mounted() {
+    try {
+      this.questionList = this.form.questionnaireQuestionList || [];
+      console.log(this.questionList);
+      this.isRequire = this.questionList[this.currentIndex - 1].isRequire;
+    } catch {
+      //
+    }
+  },
+  methods: {
+    toggle(index) {
+      let selectList = this.questionList[this.currentIndex - 1];
+      if (selectList.type == "radio") {
+        this.check = index;
+      } else if (selectList.type == "checkbox") {
+        this.$refs.checkboxes[index].toggle();
+      }
+    },
+    onSubmit() {
+      let selectList = this.questionList[this.currentIndex - 1];
+      if (selectList.type == "radio" && selectList.isRequire && !this.check) {
+        this.$message.error("请回答当前问题");
+        return;
+      } else if (
+        selectList.type == "checkbox" &&
+        selectList.isRequire &&
+        this.checkBox.length <= 0
+      ) {
+        this.$message.error("请回答当前问题");
+        return;
+      } else if (
+        selectList.type == "textarea" &&
+        selectList.isRequire &&
+        !this.textarea
+      ) {
+        this.$message.error("请回答当前问题");
+        return;
+      } else if (
+        selectList.type == "image" &&
+        selectList.isRequire &&
+        this.fileList.length <= 0
+      ) {
+        this.$message.error("请回答当前问题");
+        return;
+      } else if (
+        selectList.type == "file" &&
+        selectList.isRequire &&
+        this.fileList.length <= 0
+      ) {
+        this.$message.error("请回答当前问题");
+        return;
+      }
 
-                // 判断是否在题目列表里面
-                if(this.currentIndex <= this.questionList.length) {
-                    if(selectList.type == 'radio') {
-                        this.checkList[this.currentIndex - 1] = {
-                            questionnaireQuestionId: selectList.id,
-                            questionnaireQuestionItemIdList: this.check
-                        }
-                        this.check = null
-                    } else if(selectList.type == 'checkbox') {
-                        this.checkList[this.currentIndex - 1] = {
-                            questionnaireQuestionId: selectList.id,
-                            questionnaireQuestionItemIdList: this.checkBox.join(',')
-                        }
-                        this.checkBox = []
-                    } else if(selectList.type == 'textarea') {
-                        this.checkList[this.currentIndex - 1] = {
-                            questionnaireQuestionId: selectList.id,
-                            additionalValue: this.textarea
-                        }
-                        this.textarea = null
-                    }
+      let answerList = selectList.questionnaireQuestionItemList || []; //当前题的选项
+      let currentIsOver = 0; // 是否终止答题
+      answerList.forEach((item) => {
+        if (selectList.type == "radio" && this.check == item.id) {
+          currentIsOver = item.isOver;
+        } else if (
+          selectList.type == "checkbox" &&
+          this.checkBox.includes(item.id) &&
+          !currentIsOver
+        ) {
+          currentIsOver = item.isOver;
+        }
+      });
 
-                    // 1 为终止答题
-                    if(currentIsOver) {
-                        this.onConfirm()
-                        return
-                    }
+      // 判断是否在题目列表里面
+      if (this.currentIndex <= this.questionList.length) {
+        if (selectList.type == "radio") {
+          this.checkList[this.currentIndex - 1] = {
+            questionnaireQuestionId: selectList.id,
+            questionnaireQuestionItemIdList: this.check,
+          };
+          this.check = null;
+        } else if (selectList.type == "checkbox") {
+          this.checkList[this.currentIndex - 1] = {
+            questionnaireQuestionId: selectList.id,
+            questionnaireQuestionItemIdList: this.checkBox.join(","),
+          };
+          this.checkBox = [];
+        } else if (selectList.type == "textarea") {
+          this.checkList[this.currentIndex - 1] = {
+            questionnaireQuestionId: selectList.id,
+            additionalValue: this.textarea,
+          };
+          this.textarea = null;
+        } else if (selectList.type == "image") {
+          this.checkList[this.currentIndex - 1] = {
+            questionnaireQuestionId: selectList.id,
+            additionalValue: JSON.stringify(
+              this.fileList.map((item) => {
+                return {
+                  name: item.name,
+                  url: item.response.data.url,
+                };
+              })
+            ),
+          };
+          this.fileList = [];
+        } else if (selectList.type == "file") {
+          this.checkList[this.currentIndex - 1] = {
+            questionnaireQuestionId: selectList.id,
+            additionalValue: JSON.stringify(
+              this.fileList.map((item) => {
+                return {
+                  name: item.name,
+                  url: item.response.data.url,
+                };
+              })
+            ),
+          };
+          this.fileList = [];
+        }
 
-                    this.check = null
-                    if(this.currentIndex == this.questionList.length) {
-                        this.saveKey()
-                        return
-                    }
+        // 1 为终止答题
+        if (currentIsOver) {
+          this.onConfirm();
+          return;
+        }
 
-                    this.currentIndex++
-                }
-            },
-            saveKey() {
-                // this.$message.info('谢谢参与')
-                this.resultStatus = true
-            },
-            async onConfirm() {
-                // this.$message.info('谢谢参与')
-                this.resultStatus = true
-            },
-            onSubmitClose() {
-                this.close()
-            }
-		}
-	}
+        this.check = null;
+        if (this.currentIndex == this.questionList.length) {
+          this.saveKey();
+          return;
+        }
+        this.currentIndex++;
+      }
+    },
+    saveKey() {
+      // this.$message.info('谢谢参与')
+      this.resultStatus = true;
+    },
+    async onConfirm() {
+      // this.$message.info('谢谢参与')
+      this.resultStatus = true;
+    },
+    onSubmitClose() {
+      this.close();
+    },
+    beforeUpload(file, type) {
+      // const isJPG = file.type === 'image/jpeg';
+      const isLt2M = file.size / 1024 / 1024 < 5;
+      const imgType = ["JPG", "PNG", "JPEG", "GIF"];
+      const testType = [
+        "XLSX",
+        "XLS",
+        "DOCX",
+        "PDF",
+        "TXT",
+        "PSD",
+        "EPS",
+        "RAR",
+        "ZIP",
+      ];
+      const fileExtension = file.name.split(".").pop().toUpperCase();
+      console.log(
+        type,
+        fileExtension,
+        testType,
+        testType.indexOf(fileExtension) != -1
+      );
+      let fileType = false;
+      if (type == "file") {
+        if (testType.indexOf(fileExtension) != -1) {
+          fileType = true;
+        } else {
+          this.$message.error("请上传正确的附件!");
+          return false;
+        }
+      } else if ((type = "image")) {
+        if (imgType.indexOf(fileExtension) != -1) {
+          fileType = true;
+        } else {
+          this.$message.error("请上传正确的附件!");
+          return false;
+        }
+      }
+      //   if (!isJPG) {
+      //     this.$message.error('上传头像图片只能是 JPG 格式!');
+      //   }
+      if (!isLt2M) {
+        this.$message.error("上传附件大小不能超过 5MB!");
+      }
+      this.uploadLoading = true;
+      return isLt2M && fileType;
+    },
+    handleUploadError(file) {
+      this.uploadLoading = false;
+      this.$message.error("上传附件失败");
+    },
+    handleUploadSuccess(response, file, list, question) {
+      this.uploadLoading = false;
+      if (response.code != 200) {
+        this.$message.error(response.msg);
+        return;
+      }
+      this.$message.success("上传附件成功");
+      this.fileList = [...list];
+      console.log(this.fileList);
+      // this.fileList.push(file)
+    },
+    handleRemove(file, list) {
+      this.fileList = [...list];
+      console.log(this.fileList);
+    },
+  },
+};
 </script>
 
 <style lang="less" scoped>
 .top-tips {
-    color: #808080;
-    font-size: 14px;
-    padding: 0 0 10px;
+  color: #808080;
+  font-size: 14px;
+  padding: 0 0 10px;
 }
 
 .btn-submit {
-    width: 90%;
-    margin: 20px 5%;
+  width: 90%;
+  margin: 20px 5%;
 }
 
 .form-info {
-    margin: 10px;
-    width: auto;
-    border-radius: 5px;
+  margin: 10px;
+  width: auto;
+  border-radius: 5px;
 }
 .questionName {
-    padding-top: 5px;
-    font-size: 16px;
-    color: #444;
-    font-weight: 500;
-    line-height: 1.5;
+  padding-top: 5px;
+  font-size: 16px;
+  color: #444;
+  font-weight: 500;
+  line-height: 1.5;
 }
-/deep/.el-radio-group, /deep/.el-checkbox-group {
-    width: 100%;
+/deep/.el-radio-group,
+/deep/.el-checkbox-group {
+  width: 100%;
 }
-/deep/.el-radio__input.is-checked+.el-radio__label {
-    color: #606266;
+/deep/.el-radio__input.is-checked + .el-radio__label {
+  color: #606266;
 }
-/deep/.el-radio, /deep/.el-checkbox {
-    width: 100%;
-    display: flex;
-    justify-content: space-between;
-    flex-direction: row-reverse;
-    padding: 10px 0;
-    .el-radio__label, .el-checkbox__label {
-        padding-left: 0;
-    }
+/deep/.el-radio,
+/deep/.el-checkbox {
+  width: 100%;
+  display: flex;
+  justify-content: space-between;
+  flex-direction: row-reverse;
+  padding: 10px 0;
+  .el-radio__label,
+  .el-checkbox__label {
+    padding-left: 0;
+  }
 }
 /deep/.el-button--primary {
-    background: #01c1b5 !important;
-    border-color: #01c1b5 !important;
+  background: #01c1b5 !important;
+  border-color: #01c1b5 !important;
+}
+/deep/.el-upload {
+  display: block;
+}
+/deep/.el-upload--picture-card {
+  width: 100%;
+  height: 100px;
+  align-items: center;
+  display: flex;
+  flex-direction: row;
+  justify-content: center;
 }
 
 .resultModel {
-    .img {
-        width: 145px;
-        margin: 0 auto;
-        display: block;
-        // padding-top: 50px;
-    }
-    .content {
-        font-size: 20px;
-        color: #1A1A1A;
-        text-align: center;
-        font-weight: 500;
-        padding-bottom: 30px;
-    }
+  .img {
+    width: 145px;
+    margin: 0 auto;
+    display: block;
+    // padding-top: 50px;
+  }
+  .content {
+    font-size: 20px;
+    color: #1a1a1a;
+    text-align: center;
+    font-weight: 500;
+    padding-bottom: 30px;
+  }
 }
-</style>
+</style>

+ 187 - 86
src/views/setQuestions/components/questionList.vue

@@ -1,103 +1,204 @@
 <template>
-<el-form :model="form" ref="form" label-width="100px" class="question">
+  <el-form :model="form" ref="form" label-width="100px" class="question">
     <el-row>
-        <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
-            <el-form-item label="题目类型" prop="type" :rules="[{ required: true, message: '请选择题目类型', trigger: 'change' }]">
-                <el-select v-model="form.type" placeholder="请选择题目类型" :disabled="disabled">
-                    <el-option label="单选" value="radio"></el-option>
-                    <el-option label="多选" value="checkbox"></el-option>
-                    <el-option label="问答" value="textarea"></el-option>
-                </el-select>
-            </el-form-item>
-        </el-col>
-        <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
-            <el-form-item label="是否必填" prop="isRequire" :rules="[{ required: true, message: '请选择是否必填', trigger: 'change' }]">
-                <el-select v-model="form.isRequire" placeholder="请选择是否必填" :disabled="disabled">
-                    <el-option label="是" :value="1"></el-option>
-                    <el-option label="否" :value="0"></el-option>
-                </el-select>
-            </el-form-item>
-        </el-col>
+      <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
+        <el-form-item
+          label="题目类型"
+          prop="type"
+          :rules="[
+            { required: true, message: '请选择题目类型', trigger: 'change' },
+          ]"
+        >
+          <el-select
+            v-model="form.type"
+            placeholder="请选择题目类型"
+            :disabled="disabled"
+          >
+            <el-option label="单选" value="radio"></el-option>
+            <el-option label="多选" value="checkbox"></el-option>
+            <el-option label="问答" value="textarea"></el-option>
+            <el-option label="附件" value="file"></el-option>
+            <el-option label="图片" value="image"></el-option>
+          </el-select>
+        </el-form-item>
+      </el-col>
+      <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
+        <el-form-item
+          label="是否必填"
+          prop="isRequire"
+          :rules="[
+            { required: true, message: '请选择是否必填', trigger: 'change' },
+          ]"
+        >
+          <el-select
+            v-model="form.isRequire"
+            placeholder="请选择是否必填"
+            :disabled="disabled"
+          >
+            <el-option label="是" :value="1"></el-option>
+            <el-option label="否" :value="0"></el-option>
+          </el-select>
+        </el-form-item>
+      </el-col>
     </el-row>
-    <el-form-item label="题目" prop="content" :rules="[{ required: true, message: '请输入题目', trigger: 'blur' }]">
-        <el-input type="textarea" placeholder="请输入题目" :disabled="disabled" v-model="form.content" show-word-limit maxlength="200" :autosize="{ minRows: 2, maxRows: 4}"></el-input>
+    <el-form-item
+      label="题目"
+      prop="content"
+      :rules="[{ required: true, message: '请输入题目', trigger: 'blur' }]"
+    >
+      <el-input
+        type="textarea"
+        placeholder="请输入题目"
+        :disabled="disabled"
+        v-model="form.content"
+        show-word-limit
+        maxlength="200"
+        :autosize="{ minRows: 2, maxRows: 4 }"
+      ></el-input>
     </el-form-item>
 
-    <template v-if="form.type != 'textarea'">
-        <div v-for="(questionnaireQuestionItemList, index) in form.questionnaireQuestionItemList" :key="index">
-            <el-form-item :label="'选项' + (index + 1)"
-                style="display: inline-block;"
-                :prop="'questionnaireQuestionItemList.' + index + '.answerValue'"
-                :rules="[{ required: true, message: '请输入选项内容', trigger: 'change' }]">
-                <el-input type="text" placeholder="请输入选项内容" :disabled="disabled" maxlength="100" v-model="questionnaireQuestionItemList.answerValue"></el-input>
-            </el-form-item>
-            <el-form-item label="是否终止答题"
-                style="display: inline-block;"
-                label-width="120px"
-                :prop="'questionnaireQuestionItemList.' + index + '.isOver'"
-                :rules="[{ required: true, message: '请选择是否终止答题', trigger: 'change' }]">
-                <el-radio-group v-model="questionnaireQuestionItemList.isOver" :disabled="disabled" style="margin-right: 20px">
-                    <el-radio :label="1">是</el-radio>
-                    <el-radio :label="0">否</el-radio>
-                </el-radio-group>
-            </el-form-item>
-            <div style="display: inline-block;">
-                <el-tooltip class="item" effect="dark" content="向下移动" placement="top">
-                    <el-button icon="el-icon-top" circle size="small" @click="moveDown(form.questionnaireQuestionItemList, index)" :disabled="index == 0 || disabled"></el-button>
-                </el-tooltip>
-                <el-tooltip class="item" effect="dark" content="向下移动" placement="top">
-                    <el-button icon="el-icon-bottom" circle size="small" @click="moveUp(form.questionnaireQuestionItemList, index)" :disabled="form.questionnaireQuestionItemList.length <= 1 || form.questionnaireQuestionItemList.length == (index + 1) || disabled"></el-button>
-                </el-tooltip>
-                <el-tooltip class="item" effect="dark" content="删除" placement="top">
-                    <el-button icon="el-icon-delete" circle size="small" @click="onDelete(form.questionnaireQuestionItemList, index)" :disabled="form.questionnaireQuestionItemList.length <= 1 || disabled"></el-button>
-                </el-tooltip>
-            </div>
-        </div>
-        <el-form-item>
-            <el-button style="width: 200px" type="default" icon="el-icon-plus" :disabled="form.questionnaireQuestionItemList.length >= 10 || disabled" @click="addQuestionItem(form.questionnaireQuestionItemList)">新增选项</el-button>
+    <template v-if="form.type == 'radio' || form.type == 'checkbox'">
+      <div
+        v-for="(
+          questionnaireQuestionItemList, index
+        ) in form.questionnaireQuestionItemList"
+        :key="index"
+      >
+        <el-form-item
+          :label="'选项' + (index + 1)"
+          style="display: inline-block"
+          :prop="'questionnaireQuestionItemList.' + index + '.answerValue'"
+          :rules="[
+            { required: true, message: '请输入选项内容', trigger: 'change' },
+          ]"
+        >
+          <el-input
+            type="text"
+            placeholder="请输入选项内容"
+            :disabled="disabled"
+            maxlength="100"
+            v-model="questionnaireQuestionItemList.answerValue"
+          ></el-input>
         </el-form-item>
+        <el-form-item
+          label="是否终止答题"
+          style="display: inline-block"
+          label-width="120px"
+          :prop="'questionnaireQuestionItemList.' + index + '.isOver'"
+          :rules="[
+            {
+              required: true,
+              message: '请选择是否终止答题',
+              trigger: 'change',
+            },
+          ]"
+        >
+          <el-radio-group
+            v-model="questionnaireQuestionItemList.isOver"
+            :disabled="disabled"
+            style="margin-right: 20px"
+          >
+            <el-radio :label="1">是</el-radio>
+            <el-radio :label="0">否</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <div style="display: inline-block">
+          <el-tooltip
+            class="item"
+            effect="dark"
+            content="向下移动"
+            placement="top"
+          >
+            <el-button
+              icon="el-icon-top"
+              circle
+              size="small"
+              @click="moveDown(form.questionnaireQuestionItemList, index)"
+              :disabled="index == 0 || disabled"
+            ></el-button>
+          </el-tooltip>
+          <el-tooltip
+            class="item"
+            effect="dark"
+            content="向下移动"
+            placement="top"
+          >
+            <el-button
+              icon="el-icon-bottom"
+              circle
+              size="small"
+              @click="moveUp(form.questionnaireQuestionItemList, index)"
+              :disabled="
+                form.questionnaireQuestionItemList.length <= 1 ||
+                form.questionnaireQuestionItemList.length == index + 1 ||
+                disabled
+              "
+            ></el-button>
+          </el-tooltip>
+          <el-tooltip class="item" effect="dark" content="删除" placement="top">
+            <el-button
+              icon="el-icon-delete"
+              circle
+              size="small"
+              @click="onDelete(form.questionnaireQuestionItemList, index)"
+              :disabled="
+                form.questionnaireQuestionItemList.length <= 1 || disabled
+              "
+            ></el-button>
+          </el-tooltip>
+        </div>
+      </div>
+      <el-form-item>
+        <el-button
+          style="width: 200px"
+          type="default"
+          icon="el-icon-plus"
+          :disabled="
+            form.questionnaireQuestionItemList.length >= 10 || disabled
+          "
+          @click="addQuestionItem(form.questionnaireQuestionItemList)"
+          >新增选项</el-button
+        >
+      </el-form-item>
     </template>
-</el-form>
+  </el-form>
 </template>
 <script>
 export default {
-    props: ['form', 'type', 'disabled'],
-    data () {
-        return {
-        }
+  props: ["form", "type", "disabled"],
+  data() {
+    return {};
+  },
+  mounted() {},
+  methods: {
+    // 添加题目选项
+    addQuestionItem(questionnaireQuestionItemLists) {
+      questionnaireQuestionItemLists.push({});
     },
-    mounted () {
+    // 向上移动
+    moveUp(arr, index) {
+      arr.splice(index, 1, ...arr.splice(index + 1, 1, arr[index]));
     },
-    methods: {
-        // 添加题目选项
-        addQuestionItem(questionnaireQuestionItemLists) {
-            questionnaireQuestionItemLists.push({})
-        },
-        // 向上移动
-        moveUp(arr, index) {
-            arr.splice(index, 1, ...arr.splice(index + 1, 1, arr[index]));
-        },
-        // 向下移动
-        moveDown(arr, index) {
-            arr.splice(index - 1, 1, ...arr.splice(index, 1, arr[index - 1]));
-
-        },
-        // 删除选项
-        onDelete(arr, index) {
-            if(this.type == 'update') {
-                if(this.form.delQuestionnaireQuestionItemIdList) {
-                    this.form.delQuestionnaireQuestionItemIdList.push(arr[index].id)
-                } else {
-                    this.form.delQuestionnaireQuestionItemIdList = [arr[index].id]
-                }
-            }
-            arr.splice(index, 1)
+    // 向下移动
+    moveDown(arr, index) {
+      arr.splice(index - 1, 1, ...arr.splice(index, 1, arr[index - 1]));
+    },
+    // 删除选项
+    onDelete(arr, index) {
+      if (this.type == "update") {
+        if (this.form.delQuestionnaireQuestionItemIdList) {
+          this.form.delQuestionnaireQuestionItemIdList.push(arr[index].id);
+        } else {
+          this.form.delQuestionnaireQuestionItemIdList = [arr[index].id];
         }
-    }
-}
+      }
+      arr.splice(index, 1);
+    },
+  },
+};
 </script>
 <style lang="scss" scoped>
 .question .el-select {
-    width: 100% !important;
+  width: 100% !important;
 }
-</style>
+</style>

+ 160 - 109
src/views/setQuestions/index.vue

@@ -1,30 +1,39 @@
 <template>
-  <div class='m-container'>
+  <div class="m-container">
     <h2>
-      <div class="squrt"></div>问卷管理
+      <div class="squrt"></div>
+      问卷管理
     </h2>
     <div class="m-core">
-        <el-button type="primary" @click="onQuestionOperation('create')"
-           v-if="$helpers.permission('/operateManager/questionOperation/create')"
-           class='newBand'>添加问卷</el-button>
-        <save-form :inline="true"
-               @submit="search"
-               @reset="onReSet"
-               ref="searchForm"
-               :model="searchForm">
+      <el-button
+        type="primary"
+        @click="onQuestionOperation('create')"
+        v-if="$helpers.permission('/operateManager/questionOperation/create')"
+        class="newBand"
+        >添加问卷</el-button
+      >
+      <save-form
+        :inline="true"
+        @submit="search"
+        @reset="onReSet"
+        ref="searchForm"
+        :model="searchForm"
+      >
         <el-form-item prop="search">
-            <el-input
-                type="text"
-                clearable
-                v-model="searchForm.search"
-                placeholder="问卷编号或名称"
-            ></el-input>
+          <el-input
+            type="text"
+            clearable
+            v-model="searchForm.search"
+            placeholder="问卷编号或名称"
+          ></el-input>
         </el-form-item>
         <el-form-item prop="status">
-          <el-select v-model="searchForm.status"
-                     filterable
-                     placeholder="请选择问卷状态"
-                     clearable>
+          <el-select
+            v-model="searchForm.status"
+            filterable
+            placeholder="请选择问卷状态"
+            clearable
+          >
             <el-option label="启用" :value="1"></el-option>
             <el-option label="停用" :value="0"></el-option>
           </el-select>
@@ -37,145 +46,187 @@
       </save-form>
       <!-- 列表 -->
       <div class="tableWrap">
-        <el-table :data='tableList'
-                  :header-cell-style="{background:'#EDEEF0',color:'#444'}">
-          <el-table-column align='center'
-                           prop="id"
-                           label="问卷编号">
+        <el-table
+          :data="tableList"
+          :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+        >
+          <el-table-column align="center" prop="id" label="问卷编号">
             <template slot-scope="scope">
               <copy-text>{{ scope.row.id }}</copy-text>
             </template>
           </el-table-column>
-          <el-table-column align='center'
-                           prop="title"
-                           label="问卷名称">
+          <el-table-column align="center" prop="title" label="问卷名称">
             <template slot-scope="scope">
               <!-- <copy-text>{{ scope.row.title }}</copy-text> -->
-              <overflow-text :text="scope.row.title" ></overflow-text>
+              <overflow-text :text="scope.row.title"></overflow-text>
             </template>
           </el-table-column>
-          <el-table-column align='center'
-                           prop="status"
-                           label="状态">
+          <el-table-column align="center" prop="status" label="状态">
             <template slot-scope="scope">
-              {{ scope.row.status ? '开启' : '关闭' }}
+              {{ scope.row.status ? "开启" : "关闭" }}
             </template>
           </el-table-column>
-          <el-table-column align='center'
-                           label="操作">
+          <el-table-column align="center" label="操作">
             <template slot-scope="scope">
-              <el-button @click="onQuestionOperation('look', scope.row)"
-                         v-if="$helpers.permission('/operateManager/questionOperation/detail')"
-                         type="text">详情</el-button>
-              <el-button @click="onOperation(scope.row)"
-                         v-if="$helpers.permission(scope.row.status ? 'questionnaireTopic/updateStatus/stop' : 'questionnaireTopic/updateStatus/start')"
-                         type="text">{{ scope.row.status ? '停用' : '启用' }}</el-button>
+              <el-button
+                @click="onQuestionOperation('look', scope.row)"
+                v-if="
+                  $helpers.permission(
+                    '/operateManager/questionOperation/detail'
+                  )
+                "
+                type="text"
+                >详情</el-button
+              >
+              <!-- <el-button
+                @click="onOperation(scope.row)"
+                v-if="
+                  $helpers.permission(
+                    scope.row.status
+                      ? 'questionnaireTopic/updateStatus/stop'
+                      : 'questionnaireTopic/updateStatus/start'
+                  )
+                "
+                type="text"
+                >{{ scope.row.status ? "停用" : "启用" }}</el-button
+              > -->
               <!-- 启用的问卷不能修改 -->
-              <el-button @click="onQuestionOperation('update', scope.row)"
-                         v-if="$helpers.permission('/operateManager/questionOperation/update') && !scope.row.status"
-                         type="text">修改</el-button>
+              <el-button
+                @click="onQuestionOperation('update', scope.row)"
+                v-if="
+                  $helpers.permission(
+                    '/operateManager/questionOperation/update'
+                  ) && !scope.row.status
+                "
+                type="text"
+                >修改</el-button
+              >
+              <el-button
+                @click="lookAsk(scope.row)"
+                v-if="
+                  $helpers.permission(
+                    '/userAskList'
+                  )
+                "
+                type="text"
+                >答题详情</el-button
+              >
             </template>
           </el-table-column>
         </el-table>
-        <pagination sync :total.sync="pageInfo.total"
-                    :page.sync="pageInfo.page"
-                    :limit.sync="pageInfo.limit"
-                    :page-sizes="pageInfo.page_size"
-                    @pagination="getList" />
+        <pagination
+          sync
+          :total.sync="pageInfo.total"
+          :page.sync="pageInfo.page"
+          :limit.sync="pageInfo.limit"
+          :page-sizes="pageInfo.page_size"
+          @pagination="getList"
+        />
       </div>
     </div>
-
   </div>
 </template>
 <script>
-import pagination from '@/components/Pagination/index'
-import { questionnaireTopicQueryPage, questionnaireTopicUpdateStatus } from './api'
+import pagination from "@/components/Pagination/index";
+import {
+  questionnaireTopicQueryPage,
+  questionnaireTopicUpdateStatus,
+} from "./api";
 export default {
-  name: 'branchSetting',
+  name: "branchSetting",
   components: { pagination },
-  data () {
+  data() {
     return {
-        searchForm: {
-            search: null,
-            status: null
-        },
-        tableList: [],
-        pageInfo: {
-            // 分页规则
-            limit: 10, // 限制显示条数
-            page: 1, // 当前页
-            total: 0, // 总条数
-            page_size: [10, 20, 40, 50] // 选择限制显示条数
-        },
-        organId: null,
-    }
+      searchForm: {
+        search: null,
+        status: null,
+      },
+      tableList: [],
+      pageInfo: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
+      },
+      organId: null,
+    };
   },
-  mounted () {
-    this.getList()
+  mounted() {
+    this.getList();
   },
   methods: {
-    getList () {
+    getList() {
       questionnaireTopicQueryPage({
         rows: this.pageInfo.limit,
         page: this.pageInfo.page,
-        ...this.searchForm
-      }).then(res => {
+        ...this.searchForm,
+      }).then((res) => {
         if (res.code == 200 && res.data) {
-          this.tableList = res.data.rows
-          this.pageInfo.total = res.data.total
+          this.tableList = res.data.rows;
+          this.pageInfo.total = res.data.total;
         }
-      })
+      });
     },
     onQuestionOperation(type, row) {
-        let str = '问卷'
-        if(type == 'create') {
-          str = '添加' + str
-        } else if(type == 'update') {
-          str = '修改' + str
-        } else if(type == 'look') {
-          str = '查看' + str
-        }
-        let params = {
-          type
-        }
-        if(type == 'update' || type == 'look') {
-          params.id = row.id
+      let str = "问卷";
+      if (type == "create") {
+        str = "添加" + str;
+      } else if (type == "update") {
+        str = "修改" + str;
+      } else if (type == "look") {
+        str = "查看" + str;
+      }
+      let params = {
+        type,
+      };
+      if (type == "update" || type == "look") {
+        params.id = row.id;
+      }
+      this.$router.push(
+        {
+          path: "/operateManager/questionOperations",
+          query: params,
+        },
+        (router) => {
+          router.meta.title = str;
         }
-        this.$router.push({
-            path: '/operateManager/questionOperations',
-            query: params
-        }, (router) => {
-            router.meta.title = str;
-        })
+      );
     },
     async onOperation(row, type) {
-      let str = row.status ? '停用' : '启用'
-      this.$confirm(`是否${str}该问卷?`, '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
+      let str = row.status ? "停用" : "启用";
+      this.$confirm(`是否${str}该问卷?`, "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
       }).then(async () => {
         try {
-            let status = row.status ? 0 : 1
-            await questionnaireTopicUpdateStatus({ topicId: row.id, status: status })
-            this.$message.success(str + '成功')
-            this.getList()
+          let status = row.status ? 0 : 1;
+          await questionnaireTopicUpdateStatus({
+            topicId: row.id,
+            status: status,
+          });
+          this.$message.success(str + "成功");
+          this.getList();
         } catch {
           //
         }
-      })
+      });
     },
     search() {
       this.pageInfo.page = 1;
       this.getList();
     },
     onReSet() {
-      this.$refs['searchForm'].resetFields();
+      this.$refs["searchForm"].resetFields();
       this.search();
     },
-
-  }
-}
+    lookAsk(row){
+      this.$router.push({path:'/operateManager/userAskList',query:{id:row.id,name:row.title}})
+      console.log(row)
+    }
+  },
+};
 </script>
 <style lang="scss" scoped>
 /deep/.el-button--primary {

+ 2 - 2
src/views/setQuestions/operation.vue

@@ -72,7 +72,7 @@
         </el-row>
         <el-button type="primary" :disabled="disabled" @click="onSubmit">{{ type == 'create' ? '生成问卷' : '修改问卷' }}</el-button>
         <el-button @click="onReset" :disabled="disabled">重置</el-button>
-        <el-button @click="onPreview">预览</el-button>
+        <!-- <el-button @click="onPreview">预览</el-button> -->
 
         <el-dialog title="问卷题目"
                :close-on-click-modal="false"
@@ -268,4 +268,4 @@ export default {
 /deep/.el-collapse-item__wrap, /deep/.el-collapse-item__header {
     background-color: #eef4f9;
 }
-</style>
+</style>

+ 203 - 0
src/views/setQuestions/userAskList.vue

@@ -0,0 +1,203 @@
+<template>
+  <div class="m-container">
+    <h2>
+      <el-page-header @back="onCancel" :content="titleName"></el-page-header>
+    </h2>
+    <div class="m-core">
+      <save-form
+        :inline="true"
+        ref="searchForm"
+        :model="searchForm"
+        @submit="search"
+        @reset="onReSet"
+      >
+        <el-form-item prop="search">
+          <el-input
+            v-model.trim="searchForm.search"
+            clearable
+            @keyup.enter.native="search"
+            placeholder="请输入搜索内容"
+          ></el-input>
+        </el-form-item>
+        <el-form-item>
+          <el-button native-type="submit" type="primary">搜索</el-button>
+          <el-button native-type="reset" type="danger">重置</el-button>
+          <!-- <el-button
+            type="primary"
+            @click="onExport"
+            v-if="$helpers.permission('questionnaireUserResult/export')"
+            >导出</el-button
+          > -->
+        </el-form-item>
+      </save-form>
+
+      <div class="tableWrap" v-if="tableList.length > 0">
+        <el-table
+          :data="tableList"
+          :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+        >
+          <el-table-column
+            align="center"
+            :label="item.content"
+            v-for="(item, index) in tableList[0].questionnaireResultDtoList"
+            :key="item.userId"
+          >
+            <template slot-scope="scope">
+              <div v-if=" scope.row.questionnaireResultDtoList[index]&&scope.row.questionnaireResultDtoList[index].type">
+                <p v-if=" scope.row.questionnaireResultDtoList[index].type == 'radio'">
+                  {{
+                    scope.row.questionnaireResultDtoList[index].questionnaireQuestionItemIdList=='true' ? "是" : "否"
+                  }}
+                </p>
+                <p v-if="scope.row.questionnaireResultDtoList[index].type == 'checkbox'">
+                  {{ scope.row.questionnaireResultDtoList[index].answerValue }}
+                </p>
+                <p v-if="scope.row.questionnaireResultDtoList[index].type == 'textarea'">
+                  <overflow-text  :text="scope.row.questionnaireResultDtoList[index].additionalValue" />
+                </p>
+                <div v-if="scope.row.questionnaireResultDtoList[index].type == 'file'">
+                  <p
+                    v-for="(url, index) in JSON.parse(scope.row.questionnaireResultDtoList[index].additionalValue)"
+                    :key="index"
+                  >
+                    <a :href="url.url">{{ url.name }}</a>
+                  </p>
+                </div>
+                <div v-if="scope.row.questionnaireResultDtoList[index].type == 'image'">
+                  <div v-if="JSON.parse(scope.row.questionnaireResultDtoList[index].additionalValue).length > 0">
+                    <el-image
+
+                      v-for="(item,index) in JSON.parse(scope.row.questionnaireResultDtoList[index].additionalValue)"
+                      :key="index"
+                      style="width: 50px; height: 50px;margin-right:5px"
+                      :src="item.url"
+                      :preview-src-list="[
+                        item.url,
+                      ]"
+                    >
+                    </el-image>
+                  </div>
+
+                  <span v-else>--</span>
+                </div>
+              </div>
+              <p v-else>--</p>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+      <empty v-if="tableList.length <= 0" />
+      <pagination
+        sync
+        :total.sync="pageInfo.total"
+        :page.sync="pageInfo.page"
+        :limit.sync="pageInfo.limit"
+        :page-sizes="pageInfo.page_size"
+        @pagination="getList"
+      />
+    </div>
+  </div>
+</template>
+<script>
+import { questionnaireUserResult } from "./api";
+import { Export } from "@/utils/downLoadFile";
+import pagination from "@/components/Pagination/index";
+export default {
+  name: "operationQuestion",
+  components: { pagination },
+  data() {
+    let query = this.$route.query;
+    let titleName = "问答详情";
+    return {
+      titleName: query.name,
+      id: query.id,
+      searchForm: {
+        search: null,
+      },
+      tableList: [],
+      pageInfo: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
+      },
+    };
+  },
+  async mounted() {
+    this.getList();
+  },
+  methods: {
+    search() {
+      this.pageInfo.page = 1;
+      this.getList();
+    },
+    onReSet() {
+      this.$refs.searchForm.resetFields();
+      this.search();
+    },
+    async getList() {
+      try {
+        let params = {
+          topicId: this.id,
+          page: this.pageInfo.page,
+          rows: this.pageInfo.limit,
+          ...this.searchForm,
+        };
+        console.log(params);
+        let result = await questionnaireUserResult(params);
+        this.tableList = result.data.rows;
+        this.pageInfo.total = result.data.total;
+      } catch {}
+    },
+    onCancel() {
+      this.$store.dispatch("delVisitedViews", this.$route);
+      this.$router.push({ path: "/operateManager/setQuestions" });
+    },
+    // onExport() {
+    //   Export(
+    //     this,
+    //     {
+    //       url: "/api-web/questionnaireUserResult/export",
+    //       fileName: "问答详情.xls",
+    //       method: "get",
+    //       params: { cooperationId: this.id, activeType: "REPLACEMENT" },
+    //     },
+    //     "您确定导出问答详情?"
+    //   );
+    // },
+  },
+};
+</script>
+<style lang="scss" scoped>
+.box-card {
+  margin-bottom: 10px;
+}
+/deep/.el-collapse-item__header {
+  background: #edeef0;
+  color: #444;
+  padding: 0 10px;
+}
+/deep/.el-collapse-item__wrap {
+  border: 0;
+}
+/deep/.el-collapse-item__content {
+  padding-bottom: 0;
+}
+
+.demo-table-expand {
+  font-size: 0;
+}
+.demo-table-expand label {
+  width: 90px;
+  color: #99a9bf;
+}
+.demo-table-expand .el-form-item {
+  margin-right: 0;
+  margin-bottom: 0;
+  width: 300px;
+  span {
+    width: 200px;
+  }
+}
+</style>

+ 20 - 1
src/views/teachManager/index.vue

@@ -89,6 +89,15 @@
           ></el-table-column>
           <el-table-column
             align="center"
+            prop="musicScoreNum"
+            label="使用音源"
+          >
+            <template slot-scope="scope">
+              {{ scope.row.soundResource | formatSoundReSource }}
+            </template>
+          </el-table-column>
+          <el-table-column
+            align="center"
             prop="updateTime"
             label="最后更新时间"
           ></el-table-column>
@@ -155,7 +164,7 @@
     <el-dialog
       title="新增教材"
       :visible.sync="teachVisible"
-      width="800px"
+      width="600px"
       v-if="teachVisible"
     >
       <addTeach
@@ -214,6 +223,16 @@ export default {
      this.$store.dispatch("setBranchs");
     this.init();
   },
+  filters: {
+    formatSoundReSource(val) {
+      let template = {
+        NOTEPERFORMER: 'NotePerformer音源',
+        TANG: '标准音源',
+        OFFICIAL: '官方音源'
+      }
+      return template[val]
+    }
+  },
   methods: {
     init() {
       this.getList();

+ 86 - 76
src/views/teachManager/modals/addTeach.vue

@@ -3,85 +3,93 @@
     <el-alert title="教材信息" :closable="false" class="alert" type="info" />
     <el-form
       :model="form"
-      :inline="true"
       label-width="120px"
       class="form"
       ref="form"
     >
-      <el-row>
-        <el-col :span="12">
-          <el-form-item
-            label="教材名称"
-            prop="name"
-            :rules="[
-              {
-                required: true,
-                message: '请输入教材名称',
-                trigger: 'blur',
-              },
-            ]"
-          >
-            <el-input v-model="form.name" style="width: 260px"></el-input>
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item
-            label="适用分部"
-            prop="organId"
-            :rules="[
-              {
-                required: true,
-                message: '请选择适用分部',
-                trigger: 'change',
-              },
-            ]"
-          >
-            <select-all
-              style="width: 260px"
-              v-model.trim="form.organId"
-              class="organSelect"
-              filterable
-              placeholder="请选择分部"
-              multiple
-              clearable
-            >
-              <el-option
-                v-for="(item, index) in selects.branchs"
-                :key="index"
-                :label="item.name"
-                :value="item.id"
-              ></el-option>
-            </select-all>
-          </el-form-item>
-        </el-col>
-      </el-row>
-      <el-row>
-        <el-form-item
-          label="教材封面图"
-          prop="coverImg"
-          :rules="[
-            {
-              required: true,
-              message: '请上传教材封面图',
-              trigger: 'blur',
-            },
-          ]"
-          label-width="120px"
+      <el-form-item
+        label="教材名称"
+        prop="name"
+        :rules="[
+          {
+            required: true,
+            message: '请输入教材名称',
+            trigger: 'blur',
+          },
+        ]"
+      >
+        <el-input v-model="form.name" style="width: 100%"></el-input>
+      </el-form-item>
+      <el-form-item
+        label="适用分部"
+        prop="organId"
+        :rules="[
+          {
+            required: true,
+            message: '请选择适用分部',
+            trigger: 'change',
+          },
+        ]"
+      >
+        <select-all
+          v-model.trim="form.organId"
+           style="width: 100%"
+          class="organSelect"
+          filterable
+          placeholder="请选择分部"
+          multiple
+          clearable
         >
-          <!--      v-show="!form.coverImg"  -->
-          <upload
-            class="uploadImg"
-            v-model="form.coverImg"
-            :imageWidthM="210"
-            :imageHeightM="268"
-            ref="uploadImg"
-          ></upload>
-          <!-- <img v-show="form.coverImg" :src="form.coverImg" alt="" width="105px" height="134px" @click="uploadImg"/> -->
-          <p style="color: red">
-            请上传210*268像素,大小2M以内,格式为jpg、png、gif图片
-          </p>
-        </el-form-item>
-      </el-row>
+          <el-option
+            v-for="(item, index) in selects.branchs"
+            :key="index"
+            :label="item.name"
+            :value="item.id"
+          ></el-option>
+        </select-all>
+      </el-form-item>
+      <el-form-item
+        label="音源设置"
+        prop="soundResource"
+        :rules="[
+          {
+            required: true,
+            message: '请选择音源设置',
+            trigger: 'blur',
+          },
+        ]"
+      >
+        <el-select filterable placeholder="请选择音源设置" clearable v-model="form.soundResource" style="width: 100% !important">
+          <el-option label="NotePerformer音源" value="NOTEPERFORMER"></el-option>
+          <el-option label="标准音源" value="TANG"></el-option>
+          <el-option label="官方音源" value="OFFICIAL"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item
+        label="教材封面图"
+        prop="coverImg"
+        :rules="[
+          {
+            required: true,
+            message: '请上传教材封面图',
+            trigger: 'blur',
+          },
+        ]"
+        label-width="120px"
+      >
+        <!--      v-show="!form.coverImg"  -->
+        <upload
+          class="uploadImg"
+          v-model="form.coverImg"
+          :imageWidthM="210"
+          :imageHeightM="268"
+          ref="uploadImg"
+        ></upload>
+        <!-- <img v-show="form.coverImg" :src="form.coverImg" alt="" width="105px" height="134px" @click="uploadImg"/> -->
+        <p style="color: red">
+          请上传210*268像素,大小2M以内,格式为jpg、png、gif图片
+        </p>
+      </el-form-item>
       <el-alert
         title="教材曲目分类"
         :closable="false"
@@ -145,6 +153,7 @@ export default {
         organId: [],
         name: null,
         coverImg: "",
+        soundResource: null,
         sysMusicScoreCategoriesList: [],
         delCategoriesIds: [],
       },
@@ -165,6 +174,7 @@ export default {
           return Number(item);
         });
         this.form.coverImg = res.data.coverImg;
+        this.form.soundResource = res.data.soundResource;
         this.form.sysMusicScoreCategoriesList =
           this.recursionDate(res.data.sysMusicScoreCategoriesList) || [];
       } catch (e) {}
@@ -276,12 +286,12 @@ export default {
           try {
             if (this.activeRow?.id) {
               obj.id = this.activeRow.id;
-              const resut = await resetsysMusicScore(obj);
+              await resetsysMusicScore(obj);
               this.$message.success("修改成功");
               this.$emit("getList");
               this.$emit("close");
             } else {
-              const resut = await addsysMusicScore(obj);
+              await addsysMusicScore(obj);
               this.$message.success("添加成功");
               this.$emit("getList");
               this.$emit("close");

+ 3 - 3
src/views/teacherManager/teacherOperation/components/salarySet.vue

@@ -156,7 +156,7 @@
                         @mousewheel.native.prevent
                         v-model.trim="scope.row.offlineClassesSalary"
                         placeholder="请输入内容">
-                <template slot="append"> 节/元</template>
+                <template slot="append"> 元/节</template>
                 <!-- <template slot="append" v-else>节/人</template>  v-if="scope.row.musicTheory" -->
               </el-input>
               </div>
@@ -632,8 +632,8 @@ export default {
       //   this.$message.error("请填写生效日期");
       //   return;
       // }
-      
-      
+
+
     }
   }
 };

+ 5 - 8
src/views/teacherManager/teacherOperation/components/teacherOperation.vue

@@ -384,22 +384,19 @@
         >
           <el-button
             icon="ios-cloud-upload-outline"
-            v-if="pageType != 'create'"
-            v-permission="{
-              child: 'resetTeacher/uploadFile',
-              parent: '/teacherUpdate/baseInfo',
-            }"
             >修改头像</el-button
           >
-          <el-button
+          <!--
+               v-if="pageType != 'create'"
+            <el-button
             icon="ios-cloud-upload-outline"
-            v-if="pageType == 'create'"
+            v-if="0. == 'create'"
             v-permission="{
               child: 'createTeacher/uploadFile',
               parent: '/teacherAdd/baseInfo',
             }"
             >新增头像</el-button
-          >
+          > -->
         </el-upload>
         <p class="iconP">
           推荐图片尺寸:200x200;

+ 76 - 62
src/views/vipClass/vipDetail/index.vue

@@ -1,99 +1,113 @@
 <template>
-  <div class='m-container'>
-
+  <div class="m-container">
     <h2>
-      <el-page-header @back="onCancel"
-                      :content="className"></el-page-header>
+      <el-page-header @back="onCancel" :content="className"></el-page-header>
     </h2>
     <div class="m-core">
       <!-- navMenu -->
-      <tab-router v-model.trim="activeName"
-               type="card"
-               @tab-click="handleClick">
-        <el-tab-pane label="基本信息"
-        lazy
-                     v-if="permissionList.vipBase"
-                     name="1">
-          <vipBase  />
+      <tab-router
+        v-model.trim="activeName"
+        type="card"
+        @tab-click="handleClick"
+      >
+        <el-tab-pane
+          label="基本信息"
+          lazy
+          v-if="permissionList.vipBase"
+          name="1"
+        >
+          <vipBase />
         </el-tab-pane>
-        <el-tab-pane label="教学记录"
-                     v-if="permissionList.teacherRecord"
-                     lazy
-                     name="2">
+        <el-tab-pane
+          label="教学记录"
+          v-if="permissionList.teacherRecord"
+          lazy
+          name="2"
+        >
           <teacherRecord v-if="activeName == 2" />
         </el-tab-pane>
-        <el-tab-pane label="VIP课程财务"
-                     v-if="permissionList.fnanceInfo"
-                     lazy
-                     name="3">
+        <el-tab-pane
+          label="VIP课程财务"
+          v-if="permissionList.fnanceInfo"
+          lazy
+          name="3"
+        >
           <fnanceInfo v-if="activeName == 3" />
         </el-tab-pane>
-        <el-tab-pane label="VIP学生列表"
-                     v-if="permissionList.vipStudentList"
-                     lazy
-                     name="4">
-          <vipStudentList v-if="activeName == 4"  :vipDetail='vipDetail'/>
+        <el-tab-pane
+          label="VIP学生列表"
+          v-if="permissionList.vipStudentList"
+          lazy
+          name="4"
+        >
+          <vipStudentList v-if="activeName == 4" :vipDetail="vipDetail" />
+        </el-tab-pane>
+        <el-tab-pane
+          label="VIP调整"
+          v-if="permissionList.vipReset"
+          lazy
+          name="5"
+        >
+          <vipReset v-if="activeName == 5" :vipDetail="vipDetail" />
         </el-tab-pane>
       </tab-router>
     </div>
   </div>
 </template>
 <script>
-import vipBase from '@/views/vipClass/vipDetail/components/vipBaseInfo'
-import teacherRecord from '@/views/vipClass/vipDetail/components/teacherRecord'
-import fnanceInfo from '@/views/vipClass/vipDetail/components/fnanceInfo'
-import vipStudentList from '@/views/vipClass/vipDetail/components/vipStudentList'
-import { permission } from '@/utils/directivePage' // 权限
-import {
-  getVipGroupDetail,
-} from "@/api/vipSeting";
+import vipBase from "@/views/vipClass/vipDetail/components/vipBaseInfo";
+import teacherRecord from "@/views/vipClass/vipDetail/components/teacherRecord";
+import fnanceInfo from "@/views/vipClass/vipDetail/components/fnanceInfo";
+import vipStudentList from "@/views/vipClass/vipDetail/components/vipStudentList";
+import vipReset from "../vipReset.vue";
+import { permission } from "@/utils/directivePage"; // 权限
+import { getVipGroupDetail } from "@/api/vipSeting";
 export default {
-  components: { teacherRecord, vipBase, fnanceInfo, vipStudentList },
-  name: 'vipDetail',
-  data () {
+  components: { teacherRecord, vipBase, fnanceInfo, vipStudentList, vipReset },
+  name: "vipDetail",
+  data() {
     return {
-      activeName: '1',
-      className: '',
+      activeName: "1",
+      className: "",
       rules: null,
       searchForm: null,
-      vipDetail:null,
+      vipDetail: null,
       permissionList: {
-        vipBase: permission('/vipDetail/vipBase'),
-        teacherRecord: permission('/vipDetail/teacherRecord'),
-        fnanceInfo: permission('/vipDetail/fnanceInfo'),
-        vipStudentList: permission('/vipDetail/vipStudentList')
-      }
-    }
+        vipBase: permission("/vipDetail/vipBase"),
+        teacherRecord: permission("/vipDetail/teacherRecord"),
+        fnanceInfo: permission("/vipDetail/fnanceInfo"),
+        vipStudentList: permission("/vipDetail/vipStudentList"),
+        vipReset: permission("/vipReset"),
+      },
+    };
   },
-  mounted () {
-    this.__init()
+  mounted() {
+    this.__init();
   },
   methods: {
-    __init () {
-      let querys = this.$route.query
+    __init() {
+      let querys = this.$route.query;
       if (querys.rules) {
-        this.rules = querys.rules
+        this.rules = querys.rules;
       }
       if (querys.searchForm) {
-        this.searchForm = querys.searchForm
+        this.searchForm = querys.searchForm;
       }
-      this.className = querys.name
+      this.className = querys.name;
       // 获取vip基本信息
-        let id = this.$route.query.id;
+      let id = this.$route.query.id;
       // 根据id 获取vip详情
-
     },
 
-    handleClick (val, event) {
+    handleClick(val, event) {
       this.activeName = val.name;
-
     },
-    onCancel () {
-       this.$store.dispatch('delVisitedViews', this.$route)
-      this.$router.push({ path: '/vipManager/vipList' })
-    }
-  }
-}
+    onCancel() {
+      this.$store.dispatch("delVisitedViews", this.$route);
+      this.$router.push({ path: "/vipManager/vipList" });
+    },
+  },
+};
 </script>
 <style lang="scss">
 </style>

+ 53 - 35
src/views/vipClass/vipList.vue

@@ -88,7 +88,7 @@
               :label="item.realName"
             ></el-option>
           </el-select> -->
-               <remote-search
+          <remote-search
             :commit="'setTeachers'"
             v-model="searchForm.teacherId"
           />
@@ -203,7 +203,10 @@
             label="活动方案"
           >
             <template slot-scope="scope">
-               <overflow-text :text="scope.row.vipGroupActivityName" width="100%" />
+              <overflow-text
+                :text="scope.row.vipGroupActivityName"
+                width="100%"
+              />
             </template>
           </el-table-column>
           <el-table-column align="center" label="当前课次">
@@ -286,7 +289,7 @@
                   type="text"
                   v-if="permission('/vipDetail')"
                   @click="gotoVipDetail(scope.row)"
-                  >查看</el-button
+                  >详情</el-button
                 >
                 <!--
                 <el-button type="text">启动</el-button>-->
@@ -333,7 +336,7 @@
                   "
                   >删除</el-button
                 >
-                <el-button
+                <!-- <el-button
                   type="text"
                   v-if="
                     scope.row.status > 1 &&
@@ -342,10 +345,17 @@
                   "
                   @click="resetVip(scope.row)"
                   >修改</el-button
+                > -->
+                <el-button
+                  type="text"
+                  v-if="
+                    scope.row.vipGroupCategoryName == '乐理课' &&
+                    permission('vipGroupManage/update') &&
+                    scope.row.status == 1
+                  "
+                  @click="isStartCourse(scope.row)"
+                  >确认成课</el-button
                 >
-                <el-button type='text'  v-if="
-                    scope.row.vipGroupCategoryName =='乐理课' &&
-                    permission('vipGroupManage/update')&&scope.row.status==1" @click="isStartCourse(scope.row)">确认成课</el-button>
               </div>
             </template>
           </el-table-column>
@@ -415,13 +425,11 @@ export default {
       stopReason: null, // 停止原因
     };
   },
-  created() {
-
-  },
+  created() {},
   mounted() {
-       const { query } = this.$route;
-      if(query.search){
-      this.searchForm.search = query.search
+    const { query } = this.$route;
+    if (query.search) {
+      this.searchForm.search = query.search;
     }
     this.init();
   },
@@ -484,13 +492,24 @@ export default {
     },
     // 跳转到vip详情
     gotoVipDetail(row) {
+      let id = row.id;
+      let organId = row.organId;
+      let educationalTeacherId = row.educationalTeacherId;
+      let userId = row.userId; // 课程组上指导老师
       let rules = JSON.stringify(this.rules);
       let searchForm = JSON.stringify(this.searchForm);
-      let id = row.id;
       let name = row.name;
+      let endTimeStr = row.coursesExpireDate;
+      let startTimeStr = row.courseStartDate;
       this.$router.push({
         path: "/business/vipDetail",
-        query: { id, name },
+        query: {  id,
+          educationalTeacherId,
+          organId,
+          userId,
+          name,
+          endTimeStr,
+          startTimeStr,},
       });
     },
     closeVip(scope) {
@@ -556,7 +575,7 @@ export default {
                 } else {
                   let objectUrl = URL.createObjectURL(blob);
                   let link = document.createElement("a");
-                  let fname = "VIP列表" + new Date().getTime() + '.xls'; //下载文件的名字
+                  let fname = "VIP列表" + new Date().getTime() + ".xls"; //下载文件的名字
                   link.href = objectUrl;
                   link.setAttribute("download", fname);
                   document.body.appendChild(link);
@@ -610,8 +629,7 @@ export default {
                 } else {
                   let objectUrl = URL.createObjectURL(blob);
                   let link = document.createElement("a");
-                  let fname =
-                    "VIP课程续费提醒" + new Date().getTime() + ".xls"; //下载文件的名字
+                  let fname = "VIP课程续费提醒" + new Date().getTime() + ".xls"; //下载文件的名字
                   link.href = objectUrl;
                   link.setAttribute("download", fname);
                   document.body.appendChild(link);
@@ -671,25 +689,25 @@ export default {
     permission(str) {
       return permission(str);
     },
-    isStartCourse(row){
+    isStartCourse(row) {
       // row.id
-        this.$confirm("确定开启乐理课", "提示", {
-      confirmButtonText: "确定",
-      cancelButtonText: "取消",
-      type: "warning"
-    })
-      .then(() => {
-            vipGroupManageUpdate({id:row.id,status:'PROGRESS'}).then(res=>{
-        if(res.code == 200){
-          this.$message.success('提交成功')
-          this.getList()
-        }
-      })
+      this.$confirm("确定开启乐理课", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
       })
-      .catch(() => { });
-
-
-    }
+        .then(() => {
+          vipGroupManageUpdate({ id: row.id, status: "PROGRESS" }).then(
+            (res) => {
+              if (res.code == 200) {
+                this.$message.success("提交成功");
+                this.getList();
+              }
+            }
+          );
+        })
+        .catch(() => {});
+    },
   },
   filters: {
     formatterTime(val) {

+ 5 - 3
src/views/vipClass/vipReset.vue

@@ -1,10 +1,10 @@
 <template>
-  <div class="m-container">
+  <div >
     <div class="titlewrap">
-      <h2>
+      <!-- <h2> class="m-container"
         <el-page-header @back="goBack"
                         :content="name"></el-page-header>
-      </h2>
+      </h2> -->
       <!-- <p style="margin-bottom:10px; margin-left:30px;">课程有效期:{{ startClassTime|dayjsFormat }} ~ {{endTime |dayjsFormat}}</p> -->
     </div>
     <div class="vipwrap">
@@ -492,6 +492,7 @@ import { diffTimerFormMinute, addTimerFormMinute } from '@/utils/date'
 import dayjs from 'dayjs'
 let that;
 export default {
+  props:['vipDetail'],
   components: {
     pagination
   },
@@ -605,6 +606,7 @@ export default {
   },
   methods: {
     __init () {
+      console.log(this.vipDetail)
       this.vipid = this.$route.query.id;
       let query = this.$route.query
       let addrForm = this.addrForm

Some files were not shown because too many files changed in this diff