刘洋 1 anno fa
parent
commit
3ee184a0b5
37 ha cambiato i file con 1020 aggiunte e 201 eliminazioni
  1. 14 0
      src/assets/icons/baoliu.svg
  2. 12 0
      src/assets/icons/daanyincangxianshi.svg
  3. 12 0
      src/assets/icons/fuzhi.svg
  4. 12 0
      src/assets/icons/jiarutiku.svg
  5. 12 0
      src/assets/icons/kuaisuchachong.svg
  6. 12 0
      src/assets/icons/shenhejilu.svg
  7. 12 0
      src/assets/icons/shititongji.svg
  8. 7 0
      src/assets/icons/shuxingyincangxianshi.svg
  9. 12 0
      src/assets/icons/tixingguanli.svg
  10. 12 0
      src/assets/icons/yidong.svg
  11. 12 0
      src/assets/icons/yulan.svg
  12. 12 0
      src/assets/icons/zujuan.svg
  13. 14 0
      src/assets/styles/base.scss
  14. 17 5
      src/assets/styles/element-ui-costom.scss
  15. 3 2
      src/assets/styles/pages.scss
  16. 43 5
      src/components/ImportFile.vue
  17. 6 6
      src/components/SvgBtn.vue
  18. 67 0
      src/components/toolTipBtn.vue
  19. 9 7
      src/modules/paper/views/BuildPaper.vue
  20. 129 35
      src/modules/paper/views/EditPaper.vue
  21. 1 0
      src/modules/portal/store/currentPaths.js
  22. 7 3
      src/modules/portal/views/home/HomeSide.vue
  23. 13 9
      src/modules/question/components/AuditQuestionApply.vue
  24. 3 3
      src/modules/question/components/AuditQuestionAudited.vue
  25. 6 6
      src/modules/question/components/AuditQuestionUnsubmit.vue
  26. 5 5
      src/modules/question/components/AuditQuestionWait.vue
  27. 24 8
      src/modules/question/components/GptQuestionDialog.vue
  28. 21 5
      src/modules/question/components/QuestionFolder.vue
  29. 24 5
      src/modules/question/components/QuestionImportDialog.vue
  30. 1 1
      src/modules/question/views/QuestionAudit.vue
  31. 132 53
      src/modules/question/views/QuestionManage.vue
  32. 225 0
      src/modules/question/views/QuestionTypeStatistics/index.vue
  33. 28 13
      src/modules/question/views/SourceDetailManage.vue
  34. 8 0
      src/modules/questions/routes/routes.js
  35. 27 12
      src/modules/questions/views/CheckDuplicateList.vue
  36. 39 10
      src/modules/questions/views/GenPaper.vue
  37. 27 8
      src/modules/questions/views/PropertyInfo.vue

+ 14 - 0
src/assets/icons/baoliu.svg

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>icon-保留</title>
+    <g id="页面-1" stroke="none" stroke-width="1" fill-rule="evenodd">
+        <g id="11.01-试题查重" transform="translate(-434, -209)">
+            <g id="编组-3" transform="translate(426, 201)">
+                <g id="icon-保留" transform="translate(8, 8)">
+                    <rect id="check-circle-(Background)" opacity="0" x="0" y="0" width="16" height="16"></rect>
+                    <path d="M7,10.7069998 L11.5,6.20749998 L10.7924995,5.5 L7,9.29300022 L5.20650005,7.5 L4.5,8.20650005 L7,10.7069998 Z M8,1 C9.85651875,1 11.6369953,1.73749781 12.9497499,3.05025244 C14.2625046,4.36300707 15,6.14348459 15,8 C15,9.38446903 14.5894604,10.7378473 13.8202906,11.8889914 C13.0511208,13.0401354 11.9578705,13.9373426 10.6787872,14.4671564 C9.39970398,14.9969702 7.99223804,15.1355934 6.63437128,14.8654966 C5.27650452,14.5953999 4.02922297,13.9287148 3.05025554,12.9497471 C2.07128799,11.9707794 1.40460272,10.7234993 1.13450618,9.36563206 C0.86440964,8.00776482 1.00303298,6.60029888 1.53284639,5.32121611 C2.06265974,4.04213333 2.95986724,2.94888258 4.11101127,2.17971277 C5.26215553,1.41054291 6.61553383,1 8,1 Z M8,14 C9.59130192,14 11.117425,13.3678589 12.2426434,12.2426405 C13.3678617,11.1174221 14,9.59129906 14,8 C14,6.81331205 13.6481085,5.65327358 12.9888201,4.66657877 C12.3295317,3.67988396 11.3924599,2.9108485 10.2961035,2.45672274 C9.19974709,2.00259697 7.99334764,1.8837769 6.82946157,2.11528826 C5.6655755,2.34679961 4.59647751,2.91824412 3.75736237,3.75735927 C2.91824722,4.59647441 2.34680283,5.66557217 2.11529148,6.82945824 C1.88378012,7.99334431 2.00260019,9.19974422 2.45672596,10.2961006 C2.91085172,11.392457 3.67988682,12.3295288 4.66658187,12.9888172 C5.65327692,13.6481056 6.81331539,14 8,14 Z" id="Union"></path>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 12 - 0
src/assets/icons/daanyincangxianshi.svg

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>icon-答案隐藏展示</title>
+    <g id="页面-1" stroke="none" stroke-width="1" fill-rule="evenodd">
+        <g id="13.15-试卷列表-编辑" transform="translate(-1400, -76)" fill-rule="nonzero">
+            <g id="icon-答案隐藏展示" transform="translate(1400, 76)">
+                <rect id="矩形" fill="#000000" opacity="0" x="0" y="0" width="16" height="16"></rect>
+                <path d="M14.5,3.5 L12,3.5 L12,2.625 C12,2.55625 11.94375,2.5 11.875,2.5 L11,2.5 C10.93125,2.5 10.875,2.55625 10.875,2.625 L10.875,3.5 L8.5625,3.5 L8.5625,2.625 C8.5625,2.55625 8.50625,2.5 8.4375,2.5 L7.5625,2.5 C7.49375,2.5 7.4375,2.55625 7.4375,2.625 L7.4375,3.5 L5.125,3.5 L5.125,2.625 C5.125,2.55625 5.06875,2.5 5,2.5 L4.125,2.5 C4.05625,2.5 4,2.55625 4,2.625 L4,3.5 L1.5,3.5 C1.2234375,3.5 1,3.7234375 1,4 L1,13 C1,13.2765625 1.2234375,13.5 1.5,13.5 L14.5,13.5 C14.7765625,13.5 15,13.2765625 15,13 L15,4 C15,3.7234375 14.7765625,3.5 14.5,3.5 Z M13.875,12.375 L2.125,12.375 L2.125,4.625 L4,4.625 L4,5.5 C4,5.56875 4.05625,5.625 4.125,5.625 L5,5.625 C5.06875,5.625 5.125,5.56875 5.125,5.5 L5.125,4.625 L7.4375,4.625 L7.4375,5.5 C7.4375,5.56875 7.49375,5.625 7.5625,5.625 L8.4375,5.625 C8.50625,5.625 8.5625,5.56875 8.5625,5.5 L8.5625,4.625 L10.875,4.625 L10.875,5.5 C10.875,5.56875 10.93125,5.625 11,5.625 L11.875,5.625 C11.94375,5.625 12,5.56875 12,5.5 L12,4.625 L13.875,4.625 L13.875,12.375 Z M6.5,7.75 L3.625,7.75 C3.55625,7.75 3.5,7.80625 3.5,7.875 L3.5,8.625 C3.5,8.69375 3.55625,8.75 3.625,8.75 L6.5,8.75 C6.56875,8.75 6.625,8.69375 6.625,8.625 L6.625,7.875 C6.625,7.80625 6.56875,7.75 6.5,7.75 Z M6.5,9.875 L3.625,9.875 C3.55625,9.875 3.5,9.93125 3.5,10 L3.5,10.75 C3.5,10.81875 3.55625,10.875 3.625,10.875 L6.5,10.875 C6.56875,10.875 6.625,10.81875 6.625,10.75 L6.625,10 C6.625,9.93125 6.56875,9.875 6.5,9.875 Z M11.315625,7.103125 L9.696875,9.3484375 L8.871875,8.20625 C8.825,8.140625 8.75,8.103125 8.6703125,8.103125 L7.8125,8.103125 C7.7109375,8.103125 7.6515625,8.21875 7.7109375,8.3015625 L9.49375,10.7734375 C9.59375,10.9109375 9.796875,10.9109375 9.896875,10.7734375 L12.475,7.2 C12.534375,7.1171875 12.475,7.0015625 12.3734375,7.0015625 L11.515625,7.0015625 C11.4375,7 11.3625,7.0390625 11.315625,7.103125 Z" id="形状"></path>
+            </g>
+        </g>
+    </g>
+</svg>

+ 12 - 0
src/assets/icons/fuzhi.svg

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>icon-复制</title>
+    <g id="页面-1" stroke="none" stroke-width="1"  fill-rule="evenodd">
+        <g id="10.01-试题列表" transform="translate(-790, -209)">
+            <g id="icon-复制" transform="translate(790, 209)">
+                <rect id="file-copy-(Background)" opacity="0" x="0" y="0" width="16" height="16"></rect>
+                <path d="M4.995296,1 L9.36583757,1 C9.63437033,1 9.89161921,1.10800019 10.0796757,1.29968914 L13.7139349,5.00414753 C13.8971767,5.19092894 13.9999113,5.44209194 14.0000963,5.70375013 L14.0046082,12.077734 C14.0046082,12.6623764 13.4845552,13 13.009264,13 L4.99995232,13 C4.5247221,13 4.00474429,12.662817 4.00460863,12.0783167 L3.99995232,1.92191112 C3.99995232,1.3372677 4.5200057,1 4.995296,1 Z M5.00457287,12 L13.0045528,12 L13.0003157,6.01275492 L9.00003576,6.01275492 L9.00003576,2 L4.99998808,2 L5.00457287,12 Z M12.3215017,5.01275492 L10.0000362,5.01275492 L10.0000362,2.64644825 L12.3215017,5.01275492 Z M2,14.0127563 C2,14.5650425 2.44771647,15.0127554 3,15.0127554 L11,15.0127554 L11,14.0127554 L3,14.0127563 L3,5.00001335 L2,5.00001335 L2,14.0127563 Z" id="file-copy" ></path>
+            </g>
+        </g>
+    </g>
+</svg>

+ 12 - 0
src/assets/icons/jiarutiku.svg

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>icon-加入题库</title>
+    <g id="页面-1" stroke="none" stroke-width="1" fill-rule="evenodd">
+        <g id="10.14-试题列表-AI命题" transform="translate(-40, -479)">
+            <g id="icon-加入题库" transform="translate(40, 479)">
+                <rect id="wallet-(Background)" opacity="0" x="0" y="0" width="16" height="16"></rect>
+                <path d="M13.5,4.5 C14.0522852,4.5 14.5,4.94771528 14.5,5.5 L14.5,12 C14.5,12.5522852 14.0522842,13 13.5,13 L2.5,13 C1.94771522,13 1.5,12.5522852 1.5,12 L1.5,3 C1.5,2.44771498 1.94771528,2 2.5,2 L10.5,2 C11.0522842,2 11.5,2.44771498 11.5,3 L11.5,4.5 L13.5,4.5 Z M2.5,3 L2.5,4.5 L10.5,4.5 L10.5,3 L2.5,3 Z" id="wallet" ></path>
+            </g>
+        </g>
+    </g>
+</svg>

+ 12 - 0
src/assets/icons/kuaisuchachong.svg

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>icon-快速查重</title>
+    <g id="页面-1" stroke="none" stroke-width="1" fill-rule="evenodd">
+        <g id="11.01-试题查重" transform="translate(-260, -209)" fill-rule="nonzero">
+            <g id="icon-快速查重" transform="translate(260, 209)">
+                <rect id="矩形" fill="#000000" opacity="0" x="0" y="0" width="16" height="16"></rect>
+                <path d="M13.25,5.6140625 L9.8078125,5.6140625 L12.903125,1.703125 C12.9671875,1.6203125 12.909375,1.5 12.8046875,1.5 L6.8125,1.5 C6.76875,1.5 6.7265625,1.5234375 6.7046875,1.5625 L2.65625,8.5546875 C2.6078125,8.6375 2.6671875,8.7421875 2.7640625,8.7421875 L5.4890625,8.7421875 L4.0921875,14.3296875 C4.0625,14.4515625 4.209375,14.5375 4.3,14.45 L13.3359375,5.828125 C13.4171875,5.7515625 13.3625,5.6140625 13.25,5.6140625 Z" id="路径" ></path>
+            </g>
+        </g>
+    </g>
+</svg>

+ 12 - 0
src/assets/icons/shenhejilu.svg

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>icon-审核记录</title>
+    <g id="页面-1" stroke="none" stroke-width="1" fill-rule="evenodd">
+        <g id="13.15-试卷列表-编辑" transform="translate(-1224, -76)" fill-rule="nonzero">
+            <g id="icon-审核记录" transform="translate(1224, 76)">
+                <rect id="矩形" fill="#000000" opacity="0" x="0" y="0" width="16" height="16"></rect>
+                <path d="M4.625,3.90625 C4.55625,3.90625 4.5,3.9625 4.5,4.03125 L4.5,4.78125 C4.5,4.85 4.55625,4.90625 4.625,4.90625 L10.625,4.90625 C10.69375,4.90625 10.75,4.85 10.75,4.78125 L10.75,4.03125 C10.75,3.9625 10.69375,3.90625 10.625,3.90625 L4.625,3.90625 Z M7.5,6.15625 L4.625,6.15625 C4.55625,6.15625 4.5,6.2125 4.5,6.28125 L4.5,7.03125 C4.5,7.1 4.55625,7.15625 4.625,7.15625 L7.5,7.15625 C7.56875,7.15625 7.625,7.1 7.625,7.03125 L7.625,6.28125 C7.625,6.2125 7.56875,6.15625 7.5,6.15625 Z M6.75,13.3125 L3.25,13.3125 L3.25,2.3125 L12,2.3125 L12,7.3125 C12,7.38125 12.05625,7.4375 12.125,7.4375 L13,7.4375 C13.06875,7.4375 13.125,7.38125 13.125,7.3125 L13.125,1.6875 C13.125,1.4109375 12.9015625,1.1875 12.625,1.1875 L2.625,1.1875 C2.3484375,1.1875 2.125,1.4109375 2.125,1.6875 L2.125,13.9375 C2.125,14.2140625 2.3484375,14.4375 2.625,14.4375 L6.75,14.4375 C6.81875,14.4375 6.875,14.38125 6.875,14.3125 L6.875,13.4375 C6.875,13.36875 6.81875,13.3125 6.75,13.3125 Z M13.625,11.9375 L11.375,11.9375 L11.375,11.365625 C12.0984375,11.15 12.625,10.48125 12.625,9.6875 C12.625,8.7203125 11.8421875,7.9375 10.875,7.9375 C9.9078125,7.9375 9.125,8.7203125 9.125,9.6875 C9.125,10.4796875 9.6515625,11.15 10.375,11.365625 L10.375,11.9375 L8.125,11.9375 C7.9875,11.9375 7.875,12.05 7.875,12.1875 L7.875,14.5625 C7.875,14.7 7.9875,14.8125 8.125,14.8125 L13.625,14.8125 C13.7625,14.8125 13.875,14.7 13.875,14.5625 L13.875,12.1875 C13.875,12.05 13.7625,11.9375 13.625,11.9375 Z M10.09375,9.6875 C10.09375,9.25625 10.44375,8.90625 10.875,8.90625 C11.30625,8.90625 11.65625,9.25625 11.65625,9.6875 C11.65625,10.11875 11.30625,10.46875 10.875,10.46875 C10.44375,10.46875 10.09375,10.11875 10.09375,9.6875 Z M12.90625,13.84375 L8.84375,13.84375 L8.84375,12.90625 L12.90625,12.90625 L12.90625,13.84375 Z" id="形状"></path>
+            </g>
+        </g>
+    </g>
+</svg>

+ 12 - 0
src/assets/icons/shititongji.svg

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>icon-试题统计</title>
+    <g id="页面-1" stroke="none" stroke-width="1"  fill-rule="evenodd">
+        <g id="10.01-试题列表" transform="translate(-1340, -134)" fill-rule="nonzero">
+            <g id="icon-试题统计" transform="translate(1340, 134)">
+                <rect id="矩形" fill="#000000" opacity="0" x="0" y="0" width="16" height="16"></rect>
+                <path d="M4.8765625,9.2421875 C4.925,9.290625 5.0046875,9.290625 5.053125,9.2421875 L6.64375,7.6515625 L7.9890625,8.9984375 C8.0375,9.046875 8.1171875,9.046875 8.165625,8.9984375 L11.7015625,5.459375 C11.75,5.4109375 11.75,5.33125 11.7015625,5.2828125 L11.1265625,4.7078125 C11.078125,4.659375 10.9984375,4.659375 10.95,4.7078125 L8.078125,7.5828125 L6.7328125,6.2359375 C6.684375,6.1875 6.6046875,6.1875 6.55625,6.2359375 L4.3015625,8.490625 C4.253125,8.5390625 4.253125,8.61875 4.3015625,8.6671875 L4.8765625,9.2421875 L4.8765625,9.2421875 Z M14.125,2.5 L8.5625,2.5 L8.5625,1.5 C8.5625,1.43125 8.50625,1.375 8.4375,1.375 L7.5625,1.375 C7.49375,1.375 7.4375,1.43125 7.4375,1.5 L7.4375,2.5 L1.875,2.5 C1.5984375,2.5 1.375,2.7234375 1.375,3 L1.375,11.125 C1.375,11.4015625 1.5984375,11.625 1.875,11.625 L7.44375,11.625 L7.44375,12.125 L4.86875,13.8140625 C4.8109375,13.8515625 4.7953125,13.928125 4.8328125,13.9859375 L5.30625,14.7234375 L5.30625,14.725 C5.34375,14.7828125 5.421875,14.7984375 5.4796875,14.7609375 L8,13.1078125 L10.5203125,14.7609375 C10.578125,14.7984375 10.65625,14.7828125 10.69375,14.725 L10.69375,14.7234375 L11.1671875,13.9859375 C11.2046875,13.928125 11.1875,13.8515625 11.13125,13.8140625 L8.5625,12.1296875 L8.5625,11.625 L14.125,11.625 C14.4015625,11.625 14.625,11.4015625 14.625,11.125 L14.625,3 C14.625,2.7234375 14.4015625,2.5 14.125,2.5 Z M13.5,10.5 L2.5,10.5 L2.5,3.625 L13.5,3.625 L13.5,10.5 Z" id="形状" ></path>
+            </g>
+        </g>
+    </g>
+</svg>

File diff suppressed because it is too large
+ 7 - 0
src/assets/icons/shuxingyincangxianshi.svg


+ 12 - 0
src/assets/icons/tixingguanli.svg

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>icon-题型管理</title>
+    <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="10.01-试题列表" transform="translate(-1384, -134)" fill-rule="nonzero">
+            <g id="icon-题型管理" transform="translate(1384, 134)">
+                <rect id="矩形" fill="#000000" opacity="0" x="0" y="0" width="16" height="16"></rect>
+                <path d="M13.75,1.75 L2.25,1.75 C1.9734375,1.75 1.75,1.9734375 1.75,2.25 L1.75,13.75 C1.75,14.0265625 1.9734375,14.25 2.25,14.25 L13.75,14.25 C14.0265625,14.25 14.25,14.0265625 14.25,13.75 L14.25,2.25 C14.25,1.9734375 14.0265625,1.75 13.75,1.75 Z M13.125,13.125 L2.875,13.125 L2.875,2.875 L13.125,2.875 L13.125,13.125 Z M7.6875,6.25 L10.5625,6.25 C10.63125,6.25 10.6875,6.19375 10.6875,6.125 L10.6875,5.375 C10.6875,5.30625 10.63125,5.25 10.5625,5.25 L7.6875,5.25 C7.61875,5.25 7.5625,5.30625 7.5625,5.375 L7.5625,6.125 C7.5625,6.19375 7.61875,6.25 7.6875,6.25 Z M7.6875,8.5 L10.5625,8.5 C10.63125,8.5 10.6875,8.44375 10.6875,8.375 L10.6875,7.625 C10.6875,7.55625 10.63125,7.5 10.5625,7.5 L7.6875,7.5 C7.61875,7.5 7.5625,7.55625 7.5625,7.625 L7.5625,8.375 C7.5625,8.44375 7.61875,8.5 7.6875,8.5 Z M7.6875,10.75 L10.5625,10.75 C10.63125,10.75 10.6875,10.69375 10.6875,10.625 L10.6875,9.875 C10.6875,9.80625 10.63125,9.75 10.5625,9.75 L7.6875,9.75 C7.61875,9.75 7.5625,9.80625 7.5625,9.875 L7.5625,10.625 C7.5625,10.69375 7.61875,10.75 7.6875,10.75 Z M5.3125,5.75 C5.3125,6.09517797 5.59232203,6.375 5.9375,6.375 C6.28267797,6.375 6.5625,6.09517797 6.5625,5.75 C6.5625,5.40482203 6.28267797,5.125 5.9375,5.125 C5.59232203,5.125 5.3125,5.40482203 5.3125,5.75 L5.3125,5.75 Z M5.3125,8 C5.3125,8.34517797 5.59232203,8.625 5.9375,8.625 C6.28267797,8.625 6.5625,8.34517797 6.5625,8 C6.5625,7.65482203 6.28267797,7.375 5.9375,7.375 C5.59232203,7.375 5.3125,7.65482203 5.3125,8 Z M5.3125,10.25 C5.3125,10.595178 5.59232203,10.875 5.9375,10.875 C6.28267797,10.875 6.5625,10.595178 6.5625,10.25 C6.5625,9.90482203 6.28267797,9.625 5.9375,9.625 C5.59232203,9.625 5.3125,9.90482203 5.3125,10.25 L5.3125,10.25 Z" id="形状" fill="#595959"></path>
+            </g>
+        </g>
+    </g>
+</svg>

+ 12 - 0
src/assets/icons/yidong.svg

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>icon-移动</title>
+    <g id="页面-1" stroke="none" stroke-width="1"  fill-rule="evenodd">
+        <g id="10.01-试题列表" transform="translate(-720, -209)">
+            <g id="icon-移动" transform="translate(720, 209)">
+                <rect id="folder-(Background)" opacity="0" x="0" y="0" width="16" height="16"></rect>
+                <path d="M2.5,2.5 L5.42857146,2.5 L5.5905962,2.5 L5.72182655,2.59502894 L7.6620245,4 L13.5,4 C14.0522852,4 14.5,4.44771528 14.5,5 L14.5,13 C14.5,13.5522852 14.0522842,14 13.5,14 L2.5,14 C1.94771582,14 1.5,13.5522852 1.5,13 L1.5,3.5 C1.5,2.94771469 1.94771558,2.5 2.5,2.5 Z M5.26654696,3.5 L7.20674515,4.90497112 L7.3379755,5 L13.5,5 L13.5,13 L2.5,13 L2.5,3.5 L5.26654696,3.5 Z M8.98494244,6.4247241 L8.28673744,7.14062166 L9.61928606,8.49823809 L4.5,8.53164387 L4.50692177,9.54247379 L9.6080842,9.50919628 L8.26924896,10.8819571 L8.9697361,11.5956221 L11.1653574,9.34436522 C11.3551923,9.14972008 11.3546964,8.83905687 11.1642411,8.64501878 L8.98494244,6.4247241 Z" id="folder" ></path>
+            </g>
+        </g>
+    </g>
+</svg>

+ 12 - 0
src/assets/icons/yulan.svg

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>icon-预览</title>
+    <g id="页面-1" stroke="none" stroke-width="1" fill-rule="evenodd">
+        <g id="13.15-试卷列表-编辑" transform="translate(-1268, -76)" fill-rule="nonzero">
+            <g id="icon-预览" transform="translate(1268, 76)">
+                <rect id="矩形" fill="#000000" opacity="0" x="0" y="0" width="16" height="16"></rect>
+                <path d="M10.75,4.875 L10.75,4.125 C10.75,4.05625 10.69375,4 10.625,4 L4.625,4 C4.55625,4 4.5,4.05625 4.5,4.125 L4.5,4.875 C4.5,4.94375 4.55625,5 4.625,5 L10.625,5 C10.69375,5 10.75,4.94375 10.75,4.875 Z M4.625,6.25 C4.55625,6.25 4.5,6.30625 4.5,6.375 L4.5,7.125 C4.5,7.19375 4.55625,7.25 4.625,7.25 L7.5,7.25 C7.56875,7.25 7.625,7.19375 7.625,7.125 L7.625,6.375 C7.625,6.30625 7.56875,6.25 7.5,6.25 L4.625,6.25 Z M6.875,13.3125 L3.25,13.3125 L3.25,2.3125 L12,2.3125 L12,7.6875 C12,7.75625 12.05625,7.8125 12.125,7.8125 L13,7.8125 C13.06875,7.8125 13.125,7.75625 13.125,7.6875 L13.125,1.6875 C13.125,1.4109375 12.9015625,1.1875 12.625,1.1875 L2.625,1.1875 C2.3484375,1.1875 2.125,1.4109375 2.125,1.6875 L2.125,13.9375 C2.125,14.2140625 2.3484375,14.4375 2.625,14.4375 L6.875,14.4375 C6.94375,14.4375 7,14.38125 7,14.3125 L7,13.4375 C7,13.36875 6.94375,13.3125 6.875,13.3125 Z M13.8390625,14.1171875 L12.38125,12.659375 C12.7296875,12.1984375 12.9375,11.6234375 12.9375,11 C12.9375,9.48125 11.70625,8.25 10.1875,8.25 C8.66875,8.25 7.4375,9.48125 7.4375,11 C7.4375,12.51875 8.66875,13.75 10.1875,13.75 C10.746875,13.75 11.265625,13.5828125 11.7,13.296875 L13.1796875,14.7765625 C13.2046875,14.8015625 13.2359375,14.8125 13.2671875,14.8125 C13.2984375,14.8125 13.33125,14.8 13.3546875,14.7765625 L13.8390625,14.2921875 C13.8875,14.24375 13.8875,14.165625 13.8390625,14.1171875 Z M10.1875,12.75 C9.2203125,12.75 8.4375,11.9671875 8.4375,11 C8.4375,10.0328125 9.2203125,9.25 10.1875,9.25 C11.1546875,9.25 11.9375,10.0328125 11.9375,11 C11.9375,11.9671875 11.1546875,12.75 10.1875,12.75 Z" id="形状"></path>
+            </g>
+        </g>
+    </g>
+</svg>

+ 12 - 0
src/assets/icons/zujuan.svg

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>icon-组卷</title>
+    <g id="页面-1" stroke="none" stroke-width="1"  fill-rule="evenodd">
+        <g id="13.01-试卷列表" transform="translate(-262, -209)" fill-rule="nonzero">
+            <g id="icon-组卷" transform="translate(262, 209)">
+                <rect id="矩形" fill="#000000" opacity="0" x="0" y="0" width="16" height="16"></rect>
+                <path d="M7.5,9.0625 L5.8125,9.0625 C5.74346441,9.0625 5.6875,9.11846441 5.6875,9.1875 L5.6875,9.9375 C5.6875,10.0065356 5.74346441,10.0625 5.8125,10.0625 L7.5,10.0625 L7.5,11.75 C7.5,11.8190356 7.55596441,11.875 7.625,11.875 L8.375,11.875 C8.44403559,11.875 8.5,11.8190356 8.5,11.75 L8.5,10.0625 L10.1875,10.0625 C10.2565356,10.0625 10.3125,10.0065356 10.3125,9.9375 L10.3125,9.1875 C10.3125,9.11846441 10.2565356,9.0625 10.1875,9.0625 L8.5,9.0625 L8.5,7.375 C8.5,7.30596441 8.44403559,7.25 8.375,7.25 L7.625,7.25 C7.55596441,7.25 7.5,7.30596441 7.5,7.375 L7.5,9.0625 Z M13.353125,4.5109375 C13.446875,4.6046875 13.5,4.73125 13.5,4.8640625 L13.5,14.5 C13.5,14.7765625 13.2765625,15 13,15 L3,15 C2.7234375,15 2.5,14.7765625 2.5,14.5 L2.5,1.5 C2.5,1.2234375 2.7234375,1 3,1 L9.6359375,1 C9.76875,1 9.896875,1.053125 9.990625,1.146875 L13.353125,4.5109375 Z M12.346875,5.09375 L9.40625,2.153125 L9.40625,5.09375 L12.346875,5.09375 Z" id="形状"></path>
+            </g>
+        </g>
+    </g>
+</svg>

+ 14 - 0
src/assets/styles/base.scss

@@ -135,6 +135,13 @@ body {
     }
   }
 }
+.right-btns{
+  .tool-tip-btn{
+    &:not(:first-child){
+      margin-left:12px;
+    }
+  }
+}
 .part-box-border {
   border: 1px solid $--color-border;
 }
@@ -405,3 +412,10 @@ body {
 .color-danger {
   color: $--color-danger;
 }
+
+.upload-gray-box{
+  background-color: #F0F0F0;
+  padding-top:15px;
+  margin-left:-20px;
+  margin-right:-20px;
+}

+ 17 - 5
src/assets/styles/element-ui-costom.scss

@@ -124,10 +124,10 @@
   }
 }
 // el-button
-.el-button--danger.is-plain,
-.el-button--success.is-plain,
-.el-button--primary.is-plain,
-.el-button--warning.is-plain {
+.el-button--danger.is-plain:not(.maintain),
+.el-button--success.is-plain:not(.maintain),
+.el-button--primary.is-plain:not(.maintain),
+.el-button--warning.is-plain:not(.maintain) {
   color: $--color-text-primary;
   background-color: #fcfcfd;
   border-color: $--color-border-dark;
@@ -265,7 +265,7 @@
   .thead {
     color: $--color-text-secondary;
   }
-  .el-table__body-wrapper{
+  .el-table__body-wrapper,.el-table__fixed-body-wrapper{
     .cell{
       .el-button{
         &.normal{
@@ -282,6 +282,13 @@
         }
       }
     }
+    tbody{
+      td:last-child{
+        .el-button--text:not(:first-child),.el-dropdown{
+          margin-left:15px;
+        }
+      }
+    }
   }
 }
 // el-pagination
@@ -352,4 +359,9 @@
 }
 .el-table--small{
   font-size:14px;
+}
+.el-button.is-back{
+  padding:7px;
+  margin-right:8px;
+  vertical-align: middle
 }

+ 3 - 2
src/assets/styles/pages.scss

@@ -178,7 +178,8 @@
 // edit paper
 .edit-paper {
   .edit-header {
-    padding: 0 60px;
+    // padding: 0 60px;
+    padding: 0 16px;
     position: fixed;
     top: 0;
     left: 0;
@@ -1019,7 +1020,7 @@
   .el-input-number {
     width: auto;
     .el-input__inner {
-      border: none;
+      // border: none;
       width: 180px;
     }
   }

+ 43 - 5
src/components/ImportFile.vue

@@ -1,7 +1,18 @@
 <template>
   <div class="import-file">
+    <div class="tpl-download">
+      <span>模板下载:</span>
+      <svg-btn
+        name="daoru"
+        color="#6D5FF6"
+        hoverBgColor="#fff"
+        @click="toDownload"
+        >下载</svg-btn
+      >
+    </div>
     <el-upload
       ref="UploadComp"
+      drag
       :action="uploadUrl"
       :headers="headers"
       :max-size="maxSize"
@@ -12,11 +23,16 @@
       :on-success="handleSuccess"
       :on-change="fileChange"
       :http-request="upload"
-      :show-file-list="false"
       :disabled="loading"
       :auto-upload="false"
+      :multiple="false"
+      style="text-align: center"
     >
-      <el-button
+      <i class="el-icon-upload"></i>
+      <div class="el-upload__text">
+        {{ `点击或将文件拖拽到这里上传(只能上传${format.join("、")}文件)` }}
+      </div>
+      <!-- <el-button
         slot="trigger"
         size="small"
         type="primary"
@@ -53,9 +69,9 @@
         @click="toDownload"
       >
         下载模板
-      </el-button>
+      </el-button> -->
     </el-upload>
-    <p v-if="filename" class="tips-info">{{ filename }}</p>
+    <!-- <p v-if="filename" class="tips-info">{{ filename }}</p> -->
     <p v-if="!res.success" class="tips-info tips-error">{{ res.message }}</p>
   </div>
 </template>
@@ -132,9 +148,14 @@ export default {
         ? this.format.some((item) => item.toLowerCase() === _file_format)
         : true;
     },
-    fileChange(fileObj) {
+    fileChange(fileObj, fileList) {
+      console.log("fileObj", fileObj);
       if (fileObj.status === "ready") {
         this.handleBeforeUpload(fileObj.raw).catch(() => {});
+        if (fileList.length > 1) {
+          fileList[0] = fileList[1];
+          fileList.splice(1, 1);
+        }
       }
     },
     async handleBeforeUpload(file) {
@@ -258,3 +279,20 @@ export default {
   },
 };
 </script>
+<style lang="scss" scoped>
+.import-file {
+  .tpl-download {
+    display: flex;
+    align-items: center;
+    margin-bottom: 15px;
+    padding-left: 20px;
+  }
+  :deep(.el-upload.el-upload--text) {
+    width: 100%;
+    .el-upload-dragger {
+      width: calc(100% - 40px);
+      margin-left: 20px;
+    }
+  }
+}
+</style>

+ 6 - 6
src/components/SvgBtn.vue

@@ -4,7 +4,7 @@
     :class="{ disabled: disabled }"
     @mouseover="itemHover"
     @mouseout="removeHover"
-    @click="$emit('click')"
+    @click="clickHandler"
     :style="{ background: bgColor }"
   >
     <svg-icon :name="name" :color="color || svgColor"></svg-icon>
@@ -39,7 +39,7 @@ export default {
       return this.disabled ? "#bfbfbf" : this.isHover ? "#262626" : "#595959";
     },
     bgColor() {
-      return this.isHover ? this.hoverBgColor || "#f0f0f0" : "transparent";
+      return this.isHover ? this.hoverBgColor || "#eee" : "transparent";
     },
   },
   data() {
@@ -54,6 +54,9 @@ export default {
     removeHover() {
       this.isHover = false;
     },
+    clickHandler() {
+      !this.disabled && this.$emit("click");
+    },
   },
 };
 </script>
@@ -66,13 +69,10 @@ export default {
   cursor: pointer;
   border-radius: 6px;
   transition: all 0.3s;
-  // &:hover {
-  //   background: #f0f0f0;
-  // }
   &.disabled {
     cursor: not-allowed;
     .svg-btn-text {
-      color: #bfbfbf;
+      color: #bfbfbf !important;
     }
   }
   .svg-btn-text {

+ 67 - 0
src/components/toolTipBtn.vue

@@ -0,0 +1,67 @@
+<template>
+  <div class="tool-tip-btn">
+    <el-tooltip
+      effect="dark"
+      :content="content"
+      placement="bottom"
+      :disabled="disabled"
+    >
+      <div
+        class="icon-btn"
+        @click="$emit('click')"
+        :class="{ 'disabled-status': disabled }"
+      >
+        <svg-icon
+          :name="name"
+          :color="disabled ? '#bfbfbf' : '#595959'"
+        ></svg-icon>
+      </div>
+    </el-tooltip>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "ToolTipBtn",
+  props: {
+    content: {
+      type: String,
+      default: "",
+    },
+    name: {
+      type: String,
+      require: true,
+    },
+    disabled: {
+      type: Boolean,
+      default: false,
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.tool-tip-btn {
+  display: inline-block;
+  &:not(:first-child) {
+    margin-left: 12px;
+  }
+  .icon-btn {
+    width: 32px;
+    height: 32px;
+    border-radius: 6px;
+    border: 1px solid #e5e5e5;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    cursor: pointer;
+    transition: all 0.3s;
+    &:not(.disabled-status):hover {
+      background-color: #f0f0f0;
+    }
+    &.disabled-status {
+      cursor: not-allowed;
+    }
+  }
+}
+</style>

+ 9 - 7
src/modules/paper/views/BuildPaper.vue

@@ -3,26 +3,28 @@
     <div class="part-box">
       <div class="part-box-header">
         <div class="part-box-header-left">
+          <el-button
+            class="is-back"
+            icon="el-icon-arrow-left"
+            @click="toBack"
+            size="mini"
+          ></el-button>
           <h1 class="part-box-title">组卷</h1>
           <span>课程代码:{{ modalForm.courseCode }}</span>
           <span>课程名称:{{ modalForm.courseName }}</span>
         </div>
         <div>
-          <el-button
-            type="primary"
-            size="small"
-            icon="icon icon-save-white"
-            @click="confirm"
+          <el-button type="primary" size="small" @click="confirm"
             >确定</el-button
           >
-          <el-button
+          <!-- <el-button
             type="danger"
             size="small"
             plain
             icon="icon icon-back"
             @click="toback"
             >返回</el-button
-          >
+          > -->
         </div>
       </div>
       <el-form

+ 129 - 35
src/modules/paper/views/EditPaper.vue

@@ -3,13 +3,22 @@
     <div class="edit-header">
       <div class="edit-header-top box-justify">
         <div class="header-info">
-          <div class="header-info-item">
+          <el-button
+            class="is-back"
+            icon="el-icon-arrow-left"
+            @click="toBack"
+            size="mini"
+            style="margin-right: 0"
+          ></el-button>
+          <!-- <div class="header-info-item">
             <span>课程代码:</span>
             <span>{{ paper.course.code }}</span>
-          </div>
+          </div> -->
           <div class="header-info-item">
-            <span>课程名称:</span>
-            <span>{{ paper.course.name }}</span>
+            <!-- <span>课程名称:</span> -->
+            <span style="color: #262626; font-size: 16px; font-weight: bold">{{
+              paper.course.name
+            }}</span>
           </div>
           <div class="header-info-item">
             <span>试卷名称:</span>
@@ -45,17 +54,25 @@
           </div>
         </div>
         <div class="header-btns">
+          <el-dropdown trigger="click" @command="importCommand">
+            <div class="avatar-wrapper">
+              <el-button>
+                导入
+                <i class="el-icon-arrow-down" />
+              </el-button>
+            </div>
+            <el-dropdown-menu slot="dropdown" class="user-dropdown">
+              <el-dropdown-item command="answer">
+                <span>导入答案</span>
+              </el-dropdown-item>
+              <el-dropdown-item command="property">
+                <span>导入属性</span>
+              </el-dropdown-item>
+            </el-dropdown-menu>
+          </el-dropdown>
           <el-button type="primary" size="small" @click="toSavePaper">
             保存
           </el-button>
-          <el-button
-            type="danger"
-            plain
-            size="small"
-            @click="toDeletePaper(paper.id)"
-          >
-            删除
-          </el-button>
           <el-button
             v-if="checkDuplicateBtnShow"
             type="primary"
@@ -66,6 +83,16 @@
             进入查重
           </el-button>
           <el-button
+            type="danger"
+            size="small"
+            plain
+            class="maintain"
+            @click="toDeletePaper(paper.id)"
+          >
+            删除
+          </el-button>
+
+          <!-- <el-button
             size="small"
             type="primary"
             plain
@@ -78,83 +105,116 @@
             plain
             @click="toImportPaperProperty"
             >导入属性</el-button
-          >
-          <el-button
+          > -->
+          <!-- <el-button
             size="small"
             type="danger"
             plain
             icon="icon icon-back"
             @click="toBack"
             >返回</el-button
-          >
+          > -->
         </div>
       </div>
       <div class="edit-header-bottom box-justify">
         <div>
-          <el-button type="info" size="small" @click="toViewBaseInfo">
+          <el-button
+            plain
+            size="small"
+            icon="el-icon-circle-plus"
+            @click="addBigQuestion"
+          >
+            新增大题
+          </el-button>
+          <el-button plain size="small" @click="toViewBaseInfo">
             基础构成
           </el-button>
-          <el-button type="info" size="small" @click="toViewQuestypeInfo">
+          <el-button plain size="small" @click="toViewQuestypeInfo">
             题型分布
           </el-button>
-          <el-button type="info" size="small" @click="toViewBlueInfo">
+          <el-button plain size="small" @click="toViewBlueInfo">
             蓝图分布
           </el-button>
-          <el-button type="info" size="small" @click="toViewAuditInfo">
+          <!-- <el-button plain size="small" @click="toViewAuditInfo">
             审核记录
-          </el-button>
+          </el-button> -->
           <el-button
             v-if="
               enableCardEdit &&
               authButtons.includes('exam_paper_manager-edit_card')
             "
-            type="info"
+            plain
             size="small"
             @click="toEditCard"
           >
             编辑题卡
           </el-button>
-          <el-button type="info" size="small" @click="addBigQuestion">
-            新增大题
-          </el-button>
+
           <el-button
             v-if="enableCardEdit"
             type="danger"
-            plain
             size="small"
+            plain
+            class="maintain"
             @click="toDeletCard"
           >
             清除题卡
           </el-button>
         </div>
         <div>
-          <el-button size="small" type="primary" plain @click="previewPDF2"
+          <tool-tip-btn
+            name="shenhejilu"
+            content="审核记录"
+            @click="toViewAuditInfo"
+          ></tool-tip-btn>
+          <tool-tip-btn
+            name="yulan"
+            content="预览"
+            @click="previewPDF2"
+          ></tool-tip-btn>
+          <tool-tip-btn
+            name="shuxingyincangxianshi"
+            :content="(quesTagShow ? '隐藏' : '显示') + '属性'"
+            @click="toSwitchQuesTagShowHide"
+          ></tool-tip-btn>
+          <tool-tip-btn
+            name="daochu"
+            content="导出试卷蓝图"
+            :disabled="downloading"
+            @click="toExportPaperBlue"
+          ></tool-tip-btn>
+          <tool-tip-btn
+            name="daanyincangxianshi"
+            :content="(quesAnswerShow ? '隐藏' : '显示') + '答案'"
+            @click="toSwitchQuesAnswerShowHide"
+          ></tool-tip-btn>
+          <!-- <el-button size="small" type="primary" plain @click="previewPDF2"
             >预览</el-button
-          >
-          <el-button
+          > -->
+          <!-- <el-button
             type="primary"
             size="small"
             plain
             @click="toSwitchQuesTagShowHide"
           >
             {{ quesTagShow ? "隐藏" : "显示" }}属性
-          </el-button>
-          <el-button
+          </el-button> -->
+          <!-- <el-button
             size="small"
             type="primary"
             plain
             :loading="downloading"
             @click="toExportPaperBlue"
             >导出试卷蓝图</el-button
-          >
-          <el-button
+          > -->
+          <!-- <el-button
             type="primary"
             size="small"
             plain
             @click="toSwitchQuesAnswerShowHide"
           >
             {{ quesAnswerShow ? "隐藏" : "显示" }}答案
-          </el-button>
+          </el-button> -->
         </div>
       </div>
     </div>
@@ -484,6 +544,7 @@
                       ({{ paperDetailUnit.subScoreList[subIndex] }}分)
                     </span>
                   </div>
+
                   <div
                     v-if="!isMatchingQuestion(paperDetailUnit.questionType)"
                     class="edit-cont-body"
@@ -501,13 +562,39 @@
                       ></rich-text>
                     </div>
                   </div>
+
                   <div v-show="quesAnswerShow" class="paper-answer">
                     <span>答案:</span>
                     <question-answer :data="subQuestion"></question-answer>
                     <!-- <rich-text :text-json="subQuestion.quesAnswer"></rich-text> -->
                   </div>
+                  <div
+                    v-if="subQuestion.quesProperties"
+                    class="edit-cont-props"
+                    style="margin-top: 10px"
+                  >
+                    <el-tag
+                      v-for="(content, propIndex) in subQuestion.quesProperties"
+                      :key="propIndex"
+                      type="primary"
+                      effect="dark"
+                      style="margin-right: 5px; margin-bottom: 5px"
+                    >
+                      {{
+                        content.courseProperty && content.courseProperty.name
+                      }}
+                      <span style="margin: 0 3px">/</span>
+                      {{ content.firstProperty && content.firstProperty.name }}
+                      <span v-if="content.secondProperty" style="margin: 0 3px"
+                        >/</span
+                      >
+                      {{
+                        content.secondProperty && content.secondProperty.name
+                      }}
+                    </el-tag>
+                  </div>
                 </div>
-                <div
+                <!-- <div
                   v-if="subQuestion.quesProperties"
                   class="edit-cont-props"
                   style="margin-top: 10px"
@@ -527,7 +614,7 @@
                     >
                     {{ content.secondProperty && content.secondProperty.name }}
                   </el-tag>
-                </div>
+                </div> -->
                 <div v-show="quesTagShow" class="edit-property">
                   <div class="edit-property-box">
                     <div
@@ -797,6 +884,13 @@ export default {
       this.$message.success("删除成功!");
       this.toBack();
     },
+    importCommand(command) {
+      if (command == "answer") {
+        this.toImportPaperAnswer();
+      } else {
+        this.toImportPaperProperty();
+      }
+    },
     // 导入答案
     toImportPaperAnswer() {
       this.answerTemplateUrl = `${QUESTION_API}/paper/answer/export/${this.paperId}`;

+ 1 - 0
src/modules/portal/store/currentPaths.js

@@ -4,6 +4,7 @@ export default {
   state: [],
   mutations: {
     [UPDATE_CURRENT_PATHS](state, paths) {
+      console.log("paths", paths);
       // console.log(state, paths);
       // state = paths;
       // Object.assign(state, paths);

+ 7 - 3
src/modules/portal/views/home/HomeSide.vue

@@ -164,7 +164,10 @@ import { mapMutations } from "vuex";
 import { UPDATE_CURRENT_PATHS } from "../../store/currentPaths";
 import { UPDATE_MENU_LIST } from "../../store/menuList";
 const localMenusConfig = {
-  Recycle: "回收站",
+  Recycle: ["回收站"],
+  QuestionTypeStatistics: ["试题管理", "试题列表", "试题统计"],
+  SourceDetailManage: ["试题管理", "试题列表", "题型管理"],
+  gen_paper_detail: ["卷库管理", "试卷列表", "组卷"],
 };
 export default {
   name: "HomeSide",
@@ -290,9 +293,10 @@ export default {
         }
       }
       if (!arr.length) {
-        arr = [localMenusConfig[this.$route.name]].filter(Boolean);
+        arr = localMenusConfig[this.$route.name] || [];
       }
-      this.UPDATE_CURRENT_PATHS(arr);
+
+      !!arr.length && this.UPDATE_CURRENT_PATHS(arr);
     },
   },
 };

+ 13 - 9
src/modules/question/components/AuditQuestionApply.vue

@@ -46,16 +46,16 @@
           <template slot-scope="scope">
             <div class="operate_left">
               <el-button
-                size="mini"
-                type="primary"
-                plain
+                size="medium"
+                type="text"
+                class="normal"
                 @click="toDetail(scope.row)"
                 >详情</el-button
               >
               <el-button
-                size="mini"
-                type="primary"
-                plain
+                size="medium"
+                type="text"
+                class="normal"
                 @click="toWithdraw(scope.row)"
                 >撤回</el-button
               >
@@ -132,9 +132,13 @@ export default {
       this.$refs.QuestionPreviewDialog.open();
     },
     async toWithdraw(row) {
-      const confirm = await this.$confirm(`确定要撤销该试题的提交吗?`, "提示", {
-        type: "warning",
-      }).catch(() => {});
+      const confirm = await this.$confirm(
+        `确定要撤销该试题的提交吗?`,
+        "系统通知",
+        {
+          type: "warning",
+        }
+      ).catch(() => {});
       if (confirm !== "confirm") return;
 
       await withdrawQuestionApi([row.id]);

+ 3 - 3
src/modules/question/components/AuditQuestionAudited.vue

@@ -46,9 +46,9 @@
           <template slot-scope="scope">
             <div class="operate_left">
               <el-button
-                size="mini"
-                type="primary"
-                plain
+                size="medium"
+                type="text"
+                class="normal"
                 @click="toDetail(scope.row)"
                 >详情</el-button
               >

+ 6 - 6
src/modules/question/components/AuditQuestionUnsubmit.vue

@@ -42,16 +42,16 @@
           <template slot-scope="scope">
             <div class="operate_left">
               <el-button
-                size="mini"
-                type="primary"
-                plain
+                size="medium"
+                type="text"
+                class="normal"
                 @click="toEdit(scope.row)"
                 >编辑</el-button
               >
               <el-button
-                size="mini"
-                type="primary"
-                plain
+                size="medium"
+                type="text"
+                class="normal"
                 @click="toSubmit(scope.row)"
                 >提交</el-button
               >

+ 5 - 5
src/modules/question/components/AuditQuestionWait.vue

@@ -42,15 +42,15 @@
           <template slot-scope="scope">
             <div class="operate_left">
               <el-button
-                size="mini"
-                type="primary"
-                plain
+                size="medium"
+                type="text"
+                class="normal"
                 @click="toDetail(scope.row)"
                 >详情</el-button
               >
               <el-dropdown>
-                <el-button type="primary" size="mini" plain>
-                  审核<i class="el-icon-more el-icon--right"></i>
+                <el-button type="text" size="medium" class="normal">
+                  审核<i class="el-icon-arrow-down el-icon--right"></i>
                 </el-button>
                 <el-dropdown-menu slot="dropdown" class="action-dropdown">
                   <el-dropdown-item>

+ 24 - 8
src/modules/question/components/GptQuestionDialog.vue

@@ -107,7 +107,7 @@
       </div>
 
       <div class="part-box">
-        <div class="part-box-header">
+        <!-- <div class="part-box-header">
           <h2 class="part-box-title">检查试题</h2>
           <div>
             <el-button
@@ -123,8 +123,19 @@
               >加入题库</el-button
             >
           </div>
-        </div>
+        </div> -->
 
+        <div class="icon-btn-group">
+          <svg-btn
+            name="jiarutiku"
+            :disabled="loading"
+            @click="toBatchDeleteQuestion"
+            >加入题库</svg-btn
+          >
+          <svg-btn name="shanchu" :disabled="loading" @click="toSaveQuestion"
+            >删除</svg-btn
+          >
+        </div>
         <el-table
           v-loading="loading"
           ref="table"
@@ -210,6 +221,7 @@ import {
   gptTaskDetailApi,
 } from "../api";
 import timeMixin from "@/mixins/timeMixin";
+import SvgBtn from "@/components/SvgBtn.vue";
 
 const initFormModel = {
   courseId: null,
@@ -225,7 +237,7 @@ const initFormModel = {
 
 export default {
   name: "GptQuestionDialog",
-  components: { PropertyTreeSelect, GptQuestionEditDialog },
+  components: { PropertyTreeSelect, GptQuestionEditDialog, SvgBtn },
   mixins: [timeMixin],
   props: {
     course: {
@@ -387,7 +399,7 @@ export default {
       this.$refs.GptQuestionEditDialog.open();
     },
     async toDeleteQuestion(row) {
-      const confirm = await this.$confirm("确认删除选中试题吗?", "提示", {
+      const confirm = await this.$confirm("确认删除所选试题吗?", "系统通知", {
         type: "warning",
       }).catch(() => {});
       if (confirm !== "confirm") return;
@@ -399,7 +411,7 @@ export default {
         this.$message.error("请选择需要删除的试题!");
         return;
       }
-      const confirm = await this.$confirm("确认删除选中试题吗?", "提示", {
+      const confirm = await this.$confirm("确认删除所选试题吗?", "系统通知", {
         type: "warning",
       }).catch(() => {});
       if (confirm !== "confirm") return;
@@ -426,9 +438,13 @@ export default {
         return;
       }
 
-      const confirm = await this.$confirm("确认保存所选择的试题吗?", "提示", {
-        type: "warning",
-      }).catch(() => {});
+      const confirm = await this.$confirm(
+        "确认保存所选择的试题吗?",
+        "系统通知",
+        {
+          type: "warning",
+        }
+      ).catch(() => {});
       if (confirm !== "confirm") {
         return;
       }

+ 21 - 5
src/modules/question/components/QuestionFolder.vue

@@ -1,8 +1,8 @@
 <template>
   <div class="question-folder">
     <div v-if="isEdit" class="folder-action box-justify margin-bottom-15">
-      <div>
-        <el-button
+      <div style="display: flex; align-items: center">
+        <!-- <el-button
           type="primary"
           size="small"
           plain
@@ -19,9 +19,20 @@
           :disabled="!curNodeData.level"
           @click="toEditFolder"
           >编辑</el-button
-        >
+        > -->
+        <tool-tip-btn
+          name="xinzeng"
+          content="新建"
+          :disabled="curNodeData.level >= MAX_FOLDER_LEVEL"
+        ></tool-tip-btn>
+        <tool-tip-btn
+          name="bianji"
+          content="编辑"
+          :disabled="!curNodeData.level"
+          style="margin-left: 10px"
+        ></tool-tip-btn>
       </div>
-      <el-button
+      <!-- <el-button
         type="danger"
         size="small"
         icon="el-icon-circle-close"
@@ -29,7 +40,12 @@
         :disabled="curNodeData.level >= MAX_FOLDER_LEVEL"
         @click="toDeleteFolder"
         >删除</el-button
-      >
+      > -->
+      <tool-tip-btn
+        name="shanchu"
+        content="删除"
+        :disabled="curNodeData.level >= MAX_FOLDER_LEVEL"
+      ></tool-tip-btn>
     </div>
 
     <el-tree

+ 24 - 5
src/modules/question/components/QuestionImportDialog.vue

@@ -4,7 +4,7 @@
       custom-class="side-dialog"
       :visible.sync="modalIsShow"
       title="试题导入"
-      width="700px"
+      width="500px"
       :modal="true"
       :close-on-click-modal="false"
       :close-on-press-escape="false"
@@ -16,7 +16,7 @@
         ref="modalFormComp"
         :model="modalForm"
         :rules="rules"
-        label-width="150px"
+        label-width="100px"
       >
         <el-form-item label="导入类型">
           <el-radio-group v-model="importType" @change="importTypeChange">
@@ -86,7 +86,7 @@
             :controls="false"
           ></el-input-number
         ></el-form-item>
-        <el-form-item prop="file">
+        <!-- <el-form-item prop="file" label-width="0px">
           <import-file
             ref="ImportFile"
             :format="importFileTypes"
@@ -95,10 +95,29 @@
             @file-change="fileChange"
             @confirm="confirm"
           ></import-file>
-        </el-form-item>
+        </el-form-item> -->
       </el-form>
+      <div class="upload-gray-box">
+        <import-file
+          ref="ImportFile"
+          :format="importFileTypes"
+          :template-url="templateUrl"
+          only-fetch-file
+          @file-change="fileChange"
+          @confirm="confirm"
+        ></import-file>
+      </div>
 
-      <div slot="footer"></div>
+      <div slot="footer">
+        <el-button
+          type="primary"
+          @click="confirm"
+          :disabled="!this.fileData.file"
+          :loading="loading"
+          >确认</el-button
+        >
+        <el-button @click="cancel">取消</el-button>
+      </div>
     </el-dialog>
 
     <el-dialog

+ 1 - 1
src/modules/question/views/QuestionAudit.vue

@@ -2,7 +2,7 @@
   <div class="question-audit">
     <div class="part-box">
       <!-- <h2 class="part-box-title">试题审核</h2> -->
-      <el-tabs v-model="activeName" @tab-click="tabChange">
+      <el-tabs v-model="activeName" @tab-click="tabChange" type="card">
         <el-tab-pane label="待审核列表" name="wait" lazy>
           <audit-question-wait ref="AuditQuestionWait"></audit-question-wait>
         </el-tab-pane>

+ 132 - 53
src/modules/question/views/QuestionManage.vue

@@ -4,70 +4,84 @@
     <div class="part-box">
       <!-- <h2 class="part-box-title">题库列表</h2> -->
 
-      <el-form class="part-filter-form" :inline="true" :model="filter">
-        <el-form-item label="课程名称">
-          <course-select v-model="filter.courseId" @change="courseChange">
-          </course-select>
-        </el-form-item>
-        <el-form-item label="题型">
-          <source-detail-select v-model="filter" :course-id="filter.courseId">
-          </source-detail-select>
-        </el-form-item>
-        <el-form-item label="题目内容">
-          <el-input
-            v-model="filter.questionBody"
-            placeholder="题目内容"
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="属性">
-          <!-- <property-tree-select
+      <div class="search-box">
+        <el-form class="part-filter-form" :inline="true" :model="filter">
+          <el-form-item label="课程名称">
+            <course-select v-model="filter.courseId" @change="courseChange">
+            </course-select>
+          </el-form-item>
+          <el-form-item label="题型">
+            <source-detail-select v-model="filter" :course-id="filter.courseId">
+            </source-detail-select>
+          </el-form-item>
+          <el-form-item label="题目内容">
+            <el-input
+              v-model="filter.questionBody"
+              placeholder="题目内容"
+            ></el-input>
+          </el-form-item>
+          <el-form-item label="属性">
+            <!-- <property-tree-select
             v-model="filter.questionProperty"
             :course-id="filter.courseId"
           ></property-tree-select> -->
-          <property-tree-select
-            v-model="filter.propertyIdList"
-            :course-id="filter.courseId"
-          ></property-tree-select>
-        </el-form-item>
+            <property-tree-select
+              v-model="filter.propertyIdList"
+              :course-id="filter.courseId"
+            ></property-tree-select>
+          </el-form-item>
 
-        <el-form-item>
-          <el-button type="primary" @click="toPage(1)">查询</el-button>
-        </el-form-item>
-      </el-form>
-      <div class="part-box-action">
-        <div>
-          <el-button
+          <el-form-item>
+            <el-button type="primary" @click="toPage(1)">查询</el-button>
+          </el-form-item>
+        </el-form>
+        <div class="right-btns">
+          <tool-tip-btn
+            name="shititongji"
+            content="试题统计"
+            @click="toStatistics"
+          ></tool-tip-btn>
+          <tool-tip-btn
+            name="tixingguanli"
+            content="题型管理"
+            @click="toSourceDetailManage"
+          ></tool-tip-btn>
+        </div>
+      </div>
+      <!-- <div class="part-box-action"> -->
+      <!-- <div> -->
+      <!-- <el-button
             type="primary"
             plain
             icon="el-icon-data-analysis"
             @click="toStatistics"
             >试题统计</el-button
-          >
-          <el-button
+          > -->
+      <!-- <el-button
             v-if="authButtons.includes('import_test_paper-safe')"
             type="danger"
             plain
             icon="el-icon-lock"
             @click="toSafetySet"
             >安全设置</el-button
-          >
-          <el-button
+          > -->
+      <!-- <el-button
             type="primary"
             plain
             icon="el-icon-setting"
             @click="toSourceDetailManage"
             >题型管理</el-button
-          >
-          <!-- <el-button
+          > -->
+      <!-- <el-button
             type="danger"
             plain
             icon="el-icon-delete"
             @click="toRecycle"
             >回收站</el-button
           > -->
-        </div>
-        <div>
-          <el-button
+      <!-- </div> -->
+      <!-- <div> -->
+      <!-- <el-button
             type="primary"
             plain
             icon="el-icon-position"
@@ -87,15 +101,15 @@
             icon="el-icon-circle-close"
             @click="toBatchDelete"
             >删除</el-button
-          >
-          <!-- <el-button
+          > -->
+      <!-- <el-button
             type="primary"
             plain
             icon="el-icon-folder-opened"
             @click="toAddFolder"
             >新建文件夹</el-button
           > -->
-          <el-button
+      <!-- <el-button
             v-if="!gptQuestionEnable"
             type="primary"
             icon="el-icon-circle-plus-outline"
@@ -127,16 +141,16 @@
                 >
               </el-dropdown-item>
             </el-dropdown-menu>
-          </el-dropdown>
-          <el-button
+          </el-dropdown> -->
+      <!-- <el-button
             type="primary"
             plain
             icon="el-icon-upload2"
             @click="toImportQuestion"
             >批量导入</el-button
-          >
-        </div>
-      </div>
+          > -->
+      <!-- </div> -->
+      <!-- </div> -->
     </div>
 
     <div class="folder-question">
@@ -148,6 +162,42 @@
         ></question-folder>
       </div>
       <div class="question-list">
+        <div class="icon-btn-group">
+          <svg-btn
+            name="新增"
+            @click="toCreateQuestion"
+            v-if="!gptQuestionEnable"
+            >新增</svg-btn
+          >
+          <el-dropdown v-else>
+            <svg-btn name="xinzeng">新增</svg-btn>
+            <el-dropdown-menu slot="dropdown" class="action-dropdown">
+              <el-dropdown-item>
+                <el-button
+                  size="mini"
+                  type="primary"
+                  plain
+                  @click="toCreateQuestion"
+                  >手动创建</el-button
+                >
+              </el-dropdown-item>
+              <el-dropdown-item>
+                <el-button
+                  size="mini"
+                  type="primary"
+                  plain
+                  @click="toGPTQuestion"
+                  >AI命题</el-button
+                >
+              </el-dropdown-item>
+            </el-dropdown-menu>
+          </el-dropdown>
+          <svg-btn name="daoru" @click="toImportQuestion">导入</svg-btn>
+
+          <svg-btn name="yidong" @click="toBatchMove">移动</svg-btn>
+          <svg-btn name="fuzhi" @click="toBatchCopy">复制</svg-btn>
+          <svg-btn name="shanchu" @click="toBatchDelete">删除</svg-btn>
+        </div>
         <el-table
           v-loading="loading"
           element-loading-text="加载中"
@@ -187,15 +237,15 @@
             <template slot-scope="scope">
               <div class="operate_left">
                 <el-button
-                  size="mini"
-                  type="primary"
-                  plain
+                  size="medium"
+                  type="text"
+                  class="normal"
                   @click="toEditQuestion(scope.row)"
                   >编辑</el-button
                 >
                 <el-dropdown>
-                  <el-button type="primary" size="mini" plain>
-                    更多 <i class="el-icon-more el-icon--right"></i>
+                  <el-button type="text" size="medium" class="normal">
+                    更多<i class="el-icon-arrow-down el-icon--right"></i>
                   </el-button>
                   <el-dropdown-menu slot="dropdown" class="action-dropdown">
                     <el-dropdown-item>
@@ -298,6 +348,7 @@
       }"
       @modified="getList"
     ></gpt-question-dialog>
+    <router-view></router-view>
   </div>
 </template>
 
@@ -442,7 +493,14 @@ export default {
         this.$message.error("请先选择课程!");
         return;
       }
-      this.$refs.QuestionStatisticsDialog.open();
+      // this.$refs.QuestionStatisticsDialog.open();
+      this.$router.push({
+        name: "QuestionTypeStatistics",
+        query: {
+          courseId: this.filter.courseId,
+          courseName: this.curCourse.name,
+        },
+      });
     },
     toSafetySet() {
       this.$refs.QuestionSafetySetDialog.open();
@@ -625,9 +683,30 @@ export default {
 };
 </script>
 <style lang="scss" scoped>
-.content {
+.question-manage {
   .folder-question {
     min-height: calc(100vh - 306px);
   }
+  .search-box {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    .right-btns {
+      display: flex;
+      align-items: center;
+      padding-bottom: 15px;
+    }
+  }
+}
+</style>
+<style lang="scss">
+@media screen and (max-width: 1366px) {
+  .question-manage {
+    .part-filter-form {
+      .el-form-item {
+        width: 180px !important;
+      }
+    }
+  }
 }
 </style>

+ 225 - 0
src/modules/question/views/QuestionTypeStatistics/index.vue

@@ -0,0 +1,225 @@
+<template>
+  <div class="question-type-statistics">
+    <div class="part-box page-content-main">
+      <div class="part-box-header">
+        <h2 class="part-box-title">{{ courseName }}</h2>
+        <el-button type="danger" plain icon="icon icon-back" @click="goBack"
+          >返回</el-button
+        >
+      </div>
+
+      <div class="part-box" style="flex: 1; overflow: auto">
+        <el-tabs v-model="curType" type="card">
+          <el-tab-pane label="基础构成" name="base">
+            <el-table v-if="curType === 'base'" key="base" :data="baseDataList">
+              <el-table-column label="题型" prop="sourceDetailName">
+              </el-table-column>
+              <el-table-column
+                label="试题数量"
+                prop="questionDifficultInfoCont"
+              ></el-table-column>
+            </el-table>
+          </el-tab-pane>
+          <el-tab-pane label="蓝图分布" name="blue">
+            <div>
+              <el-form v-if="curType === 'blue'">
+                <el-form-item label="可选属性">
+                  <el-select v-model="curProperty" @change="propertyChange">
+                    <el-option
+                      v-for="item in blueDataList"
+                      :key="item.name"
+                      :value="item.name"
+                      :label="item.name"
+                    ></el-option>
+                  </el-select>
+                </el-form-item>
+              </el-form>
+              <el-table
+                v-if="curType === 'blue'"
+                key="blue"
+                :data="curBlueDataList"
+                :span-method="spanMethod"
+              >
+                <el-table-column label="蓝图属性" width="520" fixed="left">
+                  <el-table-column
+                    label="一级属性"
+                    :width="propertyColWidth"
+                    prop="firstPropertyName"
+                  ></el-table-column>
+                  <el-table-column
+                    label="二级属性"
+                    :width="propertyColWidth"
+                    prop="secondPropertyName"
+                  ></el-table-column>
+                </el-table-column>
+                <el-table-column label="题型">
+                  <el-table-column
+                    v-for="item in blueQtypes"
+                    :key="item"
+                    :label="item"
+                    :prop="item"
+                    min-width="220"
+                  ></el-table-column>
+                </el-table-column>
+              </el-table>
+            </div>
+          </el-tab-pane>
+        </el-tabs>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import {
+  questionDistributionStatisticsApi,
+  questionPropertyDistributionStatisticsApi,
+} from "../../api";
+export default {
+  name: "QuestionTypeStatistics",
+  computed: {
+    propertyColWidth() {
+      return this.blueQtypes.length ? 260 : undefined;
+    },
+  },
+  data() {
+    return {
+      courseId: "",
+      courseName: "",
+      filter: {
+        courseId: "",
+      },
+      types: [
+        {
+          name: "基础构成",
+          code: "base",
+        },
+        {
+          name: "蓝图分布",
+          code: "blue",
+        },
+      ],
+      curType: "base",
+      baseDataList: [],
+      blueDataList: [],
+      blueQtypes: [],
+      curProperty: "",
+      curBlueDataList: [],
+    };
+  },
+  created() {
+    this.courseId = this.$route.query.courseId;
+    this.courseName = this.$route.query.courseName;
+    this.filter.courseId = this.$route.query.courseId;
+  },
+  methods: {
+    goBack() {
+      this.$router.back();
+    },
+    toSwitch(item) {
+      this.curType = item.code;
+      this.getData();
+    },
+    spanMethod({ row, columnIndex }) {
+      if (columnIndex === 0) {
+        return {
+          rowspan: row.rowspan || 0,
+          colspan: 1,
+        };
+      }
+    },
+    getData() {
+      if (this.curType === "base") {
+        this.getBaseData();
+      } else {
+        this.getBlueData();
+      }
+    },
+    getQuesDiffContent({ questionCount, questionDifficultInfo }) {
+      if (!questionCount) return "--";
+      const qinfo = questionDifficultInfo
+        .map((item) => `${item.difficultLevel}:${item.questionCount}`)
+        .join(",");
+      return `${questionCount}(${qinfo})`;
+    },
+    async getBaseData() {
+      const res = await questionDistributionStatisticsApi(this.courseId);
+      // console.log(res.data);
+      // parse data
+      this.baseDataList = res.data.map((quesItem) => {
+        let nitem = {
+          sourceDetailName: quesItem.sourceDetailName,
+          questionDifficultInfoCont: this.getQuesDiffContent(quesItem),
+        };
+        return nitem;
+      });
+    },
+    async getBlueData() {
+      const res = await questionPropertyDistributionStatisticsApi(this.filter);
+
+      this.blueDataList = res.data.map((mainGroup) => {
+        let dataList = [];
+        let blueQtypes = [];
+        mainGroup.distributeInfo.forEach((item) => {
+          if (!item.children || !item.children.length) return;
+          const rowspan = item.children.length;
+          item.children.forEach((elem, index) => {
+            let nelem = {
+              firstPropertyName: item.propertyName,
+              secondPropertyName: elem.propertyName,
+            };
+            if (index === 0) nelem.rowspan = rowspan;
+
+            elem.distributeByQuestionTypeList.forEach((qt) => {
+              nelem[qt.sourceDetailName] = this.getQuesDiffContent(qt);
+            });
+            if (!blueQtypes.length) {
+              blueQtypes = elem.distributeByQuestionTypeList.map(
+                (qt) => qt.sourceDetailName
+              );
+            }
+
+            dataList.push(nelem);
+          });
+        });
+        return {
+          name: mainGroup.coursePropertyName,
+          dataList,
+          blueQtypes,
+        };
+      });
+      if (!this.blueDataList.length) return;
+      this.curProperty = this.blueDataList[0].name;
+      this.curBlueDataList = this.blueDataList[0].dataList;
+      this.blueQtypes = this.blueDataList[0].blueQtypes;
+    },
+    propertyChange() {
+      const data = this.blueDataList.find(
+        (item) => item.name === this.curProperty
+      );
+      if (!data) return;
+      this.curBlueDataList = data.dataList;
+      this.blueQtypes = data.blueQtypes;
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.question-type-statistics {
+  position: fixed;
+  top: 110px;
+  left: 220px;
+  right: 0;
+  bottom: 0;
+  padding: 0 15px 15px 15px;
+  border-radius: 10px;
+  background-color: #f2f3f5;
+  z-index: 200;
+  .page-content-main {
+    height: 100%;
+    display: flex;
+    flex-direction: column;
+  }
+}
+</style>

+ 28 - 13
src/modules/question/views/SourceDetailManage.vue

@@ -1,9 +1,21 @@
 <template>
   <div class="source-detail-manage">
     <div class="part-box">
-      <h2 class="part-box-title">
-        题型管理 - {{ courseInfo.name }}({{ courseInfo.code }})
-      </h2>
+      <div class="part-box-header">
+        <h2 class="part-box-title">
+          {{ courseInfo.name }}({{ courseInfo.code }})
+        </h2>
+        <el-button
+          type="danger"
+          plain
+          icon="icon icon-back"
+          @click="$router.back()"
+          >返回</el-button
+        >
+      </div>
+      <!-- <h2 class="part-box-title">
+        {{ courseInfo.name }}({{ courseInfo.code }})
+      </h2> -->
       <!-- 搜索 -->
       <div class="box-justify">
         <el-form class="part-filter-form" inline>
@@ -26,7 +38,7 @@
           </el-form-item>
         </el-form>
 
-        <div>
+        <!-- <div>
           <el-button
             type="primary"
             plain
@@ -42,11 +54,14 @@
             @click="toback"
             >返回</el-button
           >
-        </div>
+        </div> -->
       </div>
     </div>
 
     <div class="part-box">
+      <div class="icon-btn-group">
+        <svg-btn name="xinzeng" @click="toCreate">新建</svg-btn>
+      </div>
       <!-- 页面列表 -->
       <el-table ref="table" :data="tableData">
         <el-table-column prop="name" label="题型名称"> </el-table-column>
@@ -55,16 +70,16 @@
         <el-table-column width="170" label="操作">
           <template slot-scope="scope">
             <el-button
-              size="mini"
-              type="primary"
-              plain
+              size="medium"
+              type="text"
+              class="normal"
               @click="toEdit(scope.row)"
-              >重命名
+              >编辑
             </el-button>
             <el-button
-              size="mini"
-              type="danger"
-              plain
+              size="medium"
+              type="text"
+              class="normal"
               @click="toDelete(scope.row)"
               >删除
             </el-button>
@@ -159,7 +174,7 @@ export default {
       this.$refs.ModifySourceDetail.open();
     },
     async toDelete(row) {
-      const confirm = await this.$confirm(`确定要删除该题型吗?`, "提示", {
+      const confirm = await this.$confirm(`确定要删除该题型吗?`, "系统通知", {
         type: "warning",
       }).catch(() => {});
       if (confirm !== "confirm") return;

+ 8 - 0
src/modules/questions/routes/routes.js

@@ -8,6 +8,7 @@ import CourseProperty from "../views/CourseProperty.vue";
 import PropertyInfo from "../views/PropertyInfo.vue";
 // import ImportPaper from "../views/ImportPaper.vue";
 import ImportPaper from "../../question/views/QuestionManage";
+import QuestionTypeStatistics from "../../question/views/QuestionTypeStatistics/index.vue";
 import QuestionRecycle from "../../question/views/QuestionRecycle";
 import SourceDetailManage from "../../question/views/SourceDetailManage";
 import GenPaper from "../views/GenPaper.vue";
@@ -115,6 +116,13 @@ export const menuRoutes = [
         path: "import_paper/:isClear", //题库试卷列表
         name: "QuestionManage",
         component: ImportPaper,
+        children: [
+          {
+            path: "question_type_statistics",
+            name: "QuestionTypeStatistics",
+            component: QuestionTypeStatistics,
+          },
+        ],
       },
       {
         path: "question_recycle", // 题库列表回车站

+ 27 - 12
src/modules/questions/views/CheckDuplicateList.vue

@@ -35,7 +35,7 @@
           <el-button type="primary" @click="searchFrom">查询</el-button>
         </el-form-item>
       </el-form>
-      <div class="part-box-action">
+      <!-- <div class="part-box-action">
         <div>
           <el-button
             type="primary"
@@ -61,9 +61,24 @@
             >批量保留</el-button
           >
         </div>
-      </div>
+      </div> -->
     </div>
     <div class="part-box">
+      <div class="icon-btn-group">
+        <svg-btn name="kuaisuchachong" @click="dispose">快速查重</svg-btn>
+        <svg-btn
+          name="shanchu"
+          :disabled="noBatchSelected"
+          @click="deleteQuestions"
+          >删除</svg-btn
+        >
+        <svg-btn
+          name="baoliu"
+          :disabled="noBatchSelected"
+          @click="retainQuestions"
+          >保留</svg-btn
+        >
+      </div>
       <!-- 页面列表 -->
       <el-table
         v-loading="loading"
@@ -105,7 +120,7 @@
             <span>{{ scope.row.maxRepetition }}</span>
           </template>
         </el-table-column>
-        <el-table-column label="创建时间" width="140">
+        <el-table-column label="创建时间" width="160">
           <template slot-scope="scope">
             <span>{{ scope.row.creationTime }}</span>
           </template>
@@ -119,16 +134,16 @@
           <template slot-scope="scope">
             <div class="operate_left">
               <el-button
-                size="mini"
-                type="primary"
-                plain
+                size="medium"
+                type="text"
+                class="normal"
                 @click="info(scope.row)"
               >
                 详情
               </el-button>
               <el-dropdown>
-                <el-button type="primary" size="mini" plain>
-                  快速审核<i class="el-icon-more el-icon--right"></i>
+                <el-button type="text" size="medium" class="normal">
+                  快速审核<i class="el-icon-arrow-down el-icon--right"></i>
                 </el-button>
                 <el-dropdown-menu slot="dropdown" class="action-dropdown">
                   <el-dropdown-item>
@@ -178,14 +193,14 @@
       :ques-model="quesModel"
     ></question-preview>
 
-    <el-dialog title="提示" :visible.sync="deleteDialogVisible" append-to-body>
+    <!-- <el-dialog title="提示" :visible.sync="deleteDialogVisible" append-to-body>
       <span>{{ deleteInfo }}</span>
       <span slot="footer" class="dialog-footer">
         <el-button type="primary" @click="deleteDialogVisible = false"
           >确定</el-button
         >
       </span>
-    </el-dialog>
+    </el-dialog> -->
   </section>
 </template>
 <script>
@@ -265,7 +280,7 @@ export default {
       sessionStorage.setItem("question_currentPage", this.currentPage);
     },
     deleteQuestions() {
-      this.$confirm("确认删除吗?", "提示", {
+      this.$confirm("确认删除所选试题吗?", "系统通知", {
         type: "warning",
       }).then(() => {
         this.$http
@@ -297,7 +312,7 @@ export default {
         });
     },
     deleteQuestion(id) {
-      this.$confirm("确认删除吗?", "提示", {
+      this.$confirm("确认删除该试题吗?", "系统通知", {
         type: "warning",
       }).then(() => {
         let quesIds = [];

+ 39 - 10
src/modules/questions/views/GenPaper.vue

@@ -54,7 +54,7 @@
           <el-button type="danger" plain @click="resetForm">重置</el-button>
         </el-form-item>
       </el-form>
-      <div class="part-box-action">
+      <!-- <div class="part-box-action">
         <div>
           <el-button
             type="danger"
@@ -80,13 +80,13 @@
             @click="openBatchExportPaperDialog"
             >下载成卷</el-button
           >
-          <!-- <el-button
+          <el-button
             type="danger"
             plain
             icon="el-icon-delete"
             @click="toRecycle"
             >回收站</el-button
-          > -->
+          >
         </div>
         <div>
           <el-button
@@ -96,9 +96,24 @@
             >组卷</el-button
           >
         </div>
-      </div>
+      </div> -->
     </div>
     <div class="part-box">
+      <div class="icon-btn-group">
+        <svg-btn name="zujuan" @click="genPaperDetail">组卷</svg-btn>
+        <svg-btn
+          name="daoru"
+          :disabled="noBatchSelected"
+          @click="openBatchExportPaperDialog"
+          >下载</svg-btn
+        >
+        <svg-btn
+          name="shanchu"
+          :disabled="noBatchSelected"
+          @click="batchDeleteGenPaper"
+          >删除</svg-btn
+        >
+      </div>
       <el-table
         v-loading="loading"
         element-loading-text="拼命加载中"
@@ -158,7 +173,7 @@
           prop="creationTime"
         >
         </el-table-column>
-        <el-table-column label="修改人" width="150">
+        <el-table-column label="修改人" width="120">
           <template slot-scope="scope">
             <span>{{ scope.row.lastModifyName }}</span>
           </template>
@@ -174,13 +189,27 @@
           <template slot-scope="scope">
             <div class="operate_left">
               <el-button
-                size="mini"
-                type="primary"
-                plain
+                size="medium"
+                type="text"
+                class="normal"
                 @click="editGenPaper(scope.row)"
                 >编辑</el-button
               >
-              <el-dropdown>
+              <el-button
+                size="medium"
+                type="text"
+                class="normal"
+                @click="openExportDialog(scope.row)"
+                >下载</el-button
+              >
+              <el-button
+                size="medium"
+                type="text"
+                class="normal"
+                @click="previewPDF2(scope.row)"
+                >预览</el-button
+              >
+              <!-- <el-dropdown>
                 <el-button type="primary" size="mini" plain>
                   更多 <i class="el-icon-more el-icon--right"></i>
                 </el-button>
@@ -214,7 +243,7 @@
                     >
                   </el-dropdown-item>
                 </el-dropdown-menu>
-              </el-dropdown>
+              </el-dropdown> -->
             </div>
           </template>
         </el-table-column>

+ 27 - 8
src/modules/questions/views/PropertyInfo.vue

@@ -32,12 +32,31 @@
 
       <div class="part-box-action">
         <div class="icon-btn-group">
-          <svg-btn name="xinzeng">新增同级</svg-btn>
-          <svg-btn name="xinzeng">新增子级</svg-btn>
-          <svg-btn name="bianji">编辑</svg-btn>
-          <svg-btn name="shanchu">删除</svg-btn>
-          <svg-btn name="shangjiantou">上移</svg-btn>
-          <svg-btn name="xiajiantou">下移</svg-btn>
+          <svg-btn name="xinzeng" @click="insertParent">新增一级</svg-btn>
+          <svg-btn name="xinzeng" :disabled="showSonButtton" @click="insertSon"
+            >新增二级</svg-btn
+          >
+          <svg-btn name="bianji" :disabled="showButton" @click="updateProperty"
+            >编辑</svg-btn
+          >
+          <svg-btn
+            name="shanchu"
+            :disabled="!multipleSelection.length"
+            @click="deleteProperty"
+            >删除</svg-btn
+          >
+          <svg-btn
+            name="shangjiantou"
+            :disabled="showMoveButtton"
+            @click="moveUp"
+            >上移</svg-btn
+          >
+          <svg-btn
+            name="xiajiantou"
+            :disabled="showMoveButtton"
+            @click="moveDown"
+            >下移</svg-btn
+          >
         </div>
         <!-- <div>
           <el-button
@@ -443,7 +462,7 @@ export default {
     //新增二级
     insertSon() {
       this.disAllBtn();
-      this.title = "新增属性";
+      this.title = "新增知识点";
       //父对象id赋值
       this.propertyForm = {
         id: "",
@@ -460,7 +479,7 @@ export default {
     //修改
     updateProperty() {
       this.disAllBtn();
-      this.title = "修改属性";
+      this.title = "修改知识点";
       this.propertyForm = Object.assign({}, this.curProperty);
       this.propertyDialog = true;
     },

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