Browse Source

新增页面内容

yellowtaotao 3 years ago
parent
commit
33e61018df

+ 152 - 120
package-lock.json

@@ -1297,7 +1297,7 @@
     },
     "@nodelib/fs.stat": {
       "version": "1.1.3",
-      "resolved": "https://registry.nlark.com/@nodelib/fs.stat/download/@nodelib/fs.stat-1.1.3.tgz?cache=0&sync_timestamp=1622792655362&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40nodelib%2Ffs.stat%2Fdownload%2F%40nodelib%2Ffs.stat-1.1.3.tgz",
+      "resolved": "https://registry.nlark.com/@nodelib/fs.stat/download/@nodelib/fs.stat-1.1.3.tgz",
       "integrity": "sha1-K1o6s/kYzKSKjHVMCBaOPwPrphs=",
       "dev": true
     },
@@ -1380,6 +1380,11 @@
       "integrity": "sha1-pTUV2yXYA4N0OBtzryC7Ty5QjYc=",
       "dev": true
     },
+    "@tinymce/tinymce-vue": {
+      "version": "3.2.8",
+      "resolved": "https://registry.nlark.com/@tinymce/tinymce-vue/download/@tinymce/tinymce-vue-3.2.8.tgz",
+      "integrity": "sha1-AUVxtS7I+oNmWn+oh79lFAIH3nE="
+    },
     "@types/body-parser": {
       "version": "1.19.0",
       "resolved": "https://registry.nlark.com/@types/body-parser/download/@types/body-parser-1.19.0.tgz?cache=0&sync_timestamp=1621240672784&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fbody-parser%2Fdownload%2F%40types%2Fbody-parser-1.19.0.tgz",
@@ -1634,7 +1639,7 @@
     },
     "@vue/babel-preset-app": {
       "version": "4.5.13",
-      "resolved": "https://registry.nlark.com/@vue/babel-preset-app/download/@vue/babel-preset-app-4.5.13.tgz",
+      "resolved": "https://registry.nlark.com/@vue/babel-preset-app/download/@vue/babel-preset-app-4.5.13.tgz?cache=0&sync_timestamp=1620981723230&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40vue%2Fbabel-preset-app%2Fdownload%2F%40vue%2Fbabel-preset-app-4.5.13.tgz",
       "integrity": "sha1-y0dTIeTHP38RDawppIwqnLgK/rY=",
       "dev": true,
       "requires": {
@@ -1786,7 +1791,7 @@
     },
     "@vue/cli-plugin-eslint": {
       "version": "4.5.13",
-      "resolved": "https://registry.nlark.com/@vue/cli-plugin-eslint/download/@vue/cli-plugin-eslint-4.5.13.tgz?cache=0&sync_timestamp=1623215859183&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40vue%2Fcli-plugin-eslint%2Fdownload%2F%40vue%2Fcli-plugin-eslint-4.5.13.tgz",
+      "resolved": "https://registry.nlark.com/@vue/cli-plugin-eslint/download/@vue/cli-plugin-eslint-4.5.13.tgz",
       "integrity": "sha1-i68i0NltdnIMdQZka5b09iwFvfo=",
       "dev": true,
       "requires": {
@@ -1815,7 +1820,7 @@
     },
     "@vue/cli-service": {
       "version": "4.5.13",
-      "resolved": "https://registry.nlark.com/@vue/cli-service/download/@vue/cli-service-4.5.13.tgz",
+      "resolved": "https://registry.nlark.com/@vue/cli-service/download/@vue/cli-service-4.5.13.tgz?cache=0&sync_timestamp=1620981723722&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40vue%2Fcli-service%2Fdownload%2F%40vue%2Fcli-service-4.5.13.tgz",
       "integrity": "sha1-oJ5oSoAWhLbiTlQUrTBlCXDuye0=",
       "dev": true,
       "requires": {
@@ -1879,16 +1884,54 @@
       "dependencies": {
         "acorn": {
           "version": "7.4.1",
-          "resolved": "https://registry.nlark.com/acorn/download/acorn-7.4.1.tgz",
+          "resolved": "https://registry.nlark.com/acorn/download/acorn-7.4.1.tgz?cache=0&sync_timestamp=1620134156200&other_urls=https%3A%2F%2Fregistry.nlark.com%2Facorn%2Fdownload%2Facorn-7.4.1.tgz",
           "integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=",
           "dev": true
         },
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz?cache=0&sync_timestamp=1618995547052&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-styles%2Fdownload%2Fansi-styles-4.3.0.tgz",
+          "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
         "camelcase": {
           "version": "5.3.1",
           "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz?cache=0&sync_timestamp=1603921882890&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamelcase%2Fdownload%2Fcamelcase-5.3.1.tgz",
           "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=",
           "dev": true
         },
+        "chalk": {
+          "version": "4.1.1",
+          "resolved": "https://registry.nlark.com/chalk/download/chalk-4.1.1.tgz?cache=0&sync_timestamp=1618995354302&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-4.1.1.tgz",
+          "integrity": "sha1-yAs/qyi/Y3HmhjMl7uZ+YYt35q0=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+          "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+          "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+          "dev": true,
+          "optional": true
+        },
         "css-loader": {
           "version": "3.6.0",
           "resolved": "https://registry.nlark.com/css-loader/download/css-loader-3.6.0.tgz?cache=0&sync_timestamp=1621865230592&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcss-loader%2Fdownload%2Fcss-loader-3.6.0.tgz",
@@ -1919,6 +1962,13 @@
             "ms": "2.1.2"
           }
         },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-flag%2Fdownload%2Fhas-flag-4.0.0.tgz",
+          "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+          "dev": true,
+          "optional": true
+        },
         "json5": {
           "version": "1.0.1",
           "resolved": "https://registry.nlark.com/json5/download/json5-1.0.1.tgz",
@@ -1959,12 +2009,58 @@
           "requires": {
             "minipass": "^3.1.1"
           }
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz",
+          "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        },
+        "vue-loader-v16": {
+          "version": "npm:vue-loader@16.2.0",
+          "resolved": "https://registry.nlark.com/vue-loader/download/vue-loader-16.2.0.tgz?cache=0&sync_timestamp=1620717857145&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fvue-loader%2Fdownload%2Fvue-loader-16.2.0.tgz",
+          "integrity": "sha1-BGpTMI3Ufljv4g3ewe3sAnzjtG4=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "chalk": "^4.1.0",
+            "hash-sum": "^2.0.0",
+            "loader-utils": "^2.0.0"
+          },
+          "dependencies": {
+            "json5": {
+              "version": "2.2.0",
+              "resolved": "https://registry.npm.taobao.org/json5/download/json5-2.2.0.tgz?cache=0&sync_timestamp=1612146875530&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson5%2Fdownload%2Fjson5-2.2.0.tgz",
+              "integrity": "sha1-Lf7+cgxrpSXZ69kJlQ8FFTFsiaM=",
+              "dev": true,
+              "optional": true,
+              "requires": {
+                "minimist": "^1.2.5"
+              }
+            },
+            "loader-utils": {
+              "version": "2.0.0",
+              "resolved": "https://registry.npm.taobao.org/loader-utils/download/loader-utils-2.0.0.tgz",
+              "integrity": "sha1-5MrOW4FtQloWa18JfhDNErNgZLA=",
+              "dev": true,
+              "optional": true,
+              "requires": {
+                "big.js": "^5.2.2",
+                "emojis-list": "^3.0.0",
+                "json5": "^2.1.2"
+              }
+            }
+          }
         }
       }
     },
     "@vue/cli-shared-utils": {
       "version": "4.5.13",
-      "resolved": "https://registry.nlark.com/@vue/cli-shared-utils/download/@vue/cli-shared-utils-4.5.13.tgz",
+      "resolved": "https://registry.nlark.com/@vue/cli-shared-utils/download/@vue/cli-shared-utils-4.5.13.tgz?cache=0&sync_timestamp=1620981722781&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40vue%2Fcli-shared-utils%2Fdownload%2F%40vue%2Fcli-shared-utils-4.5.13.tgz",
       "integrity": "sha1-rNQPMbR5DxY0KSvapfypXcHg/1A=",
       "dev": true,
       "requires": {
@@ -2241,7 +2337,7 @@
     },
     "acorn": {
       "version": "6.4.2",
-      "resolved": "https://registry.nlark.com/acorn/download/acorn-6.4.2.tgz",
+      "resolved": "https://registry.nlark.com/acorn/download/acorn-6.4.2.tgz?cache=0&sync_timestamp=1620134156200&other_urls=https%3A%2F%2Fregistry.nlark.com%2Facorn%2Fdownload%2Facorn-6.4.2.tgz",
       "integrity": "sha1-NYZv1xBSjpLeEM8GAWSY5H454eY=",
       "dev": true
     },
@@ -2273,7 +2369,7 @@
     },
     "ajv": {
       "version": "6.12.6",
-      "resolved": "https://registry.nlark.com/ajv/download/ajv-6.12.6.tgz?cache=0&sync_timestamp=1622991619843&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fajv%2Fdownload%2Fajv-6.12.6.tgz",
+      "resolved": "https://registry.nlark.com/ajv/download/ajv-6.12.6.tgz?cache=0&sync_timestamp=1621517642931&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fajv%2Fdownload%2Fajv-6.12.6.tgz",
       "integrity": "sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=",
       "requires": {
         "fast-deep-equal": "^3.1.1",
@@ -2316,7 +2412,7 @@
       "dependencies": {
         "type-fest": {
           "version": "0.21.3",
-          "resolved": "https://registry.nlark.com/type-fest/download/type-fest-0.21.3.tgz?cache=0&sync_timestamp=1622543391721&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftype-fest%2Fdownload%2Ftype-fest-0.21.3.tgz",
+          "resolved": "https://registry.nlark.com/type-fest/download/type-fest-0.21.3.tgz?cache=0&sync_timestamp=1621402383646&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftype-fest%2Fdownload%2Ftype-fest-0.21.3.tgz",
           "integrity": "sha1-0mCiSwGYQ24TP6JqUkptZfo7Ljc=",
           "dev": true
         }
@@ -2345,7 +2441,7 @@
     },
     "ant-design-vue": {
       "version": "1.7.5",
-      "resolved": "https://registry.nlark.com/ant-design-vue/download/ant-design-vue-1.7.5.tgz?cache=0&sync_timestamp=1623136656408&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fant-design-vue%2Fdownload%2Fant-design-vue-1.7.5.tgz",
+      "resolved": "https://registry.nlark.com/ant-design-vue/download/ant-design-vue-1.7.5.tgz",
       "integrity": "sha1-5+0EyzWK3Fa+AsdFPS2wJtLEBeM=",
       "requires": {
         "@ant-design/icons": "^2.1.1",
@@ -2514,7 +2610,7 @@
         },
         "util": {
           "version": "0.10.3",
-          "resolved": "https://registry.nlark.com/util/download/util-0.10.3.tgz?cache=0&sync_timestamp=1622213047493&other_urls=https%3A%2F%2Fregistry.nlark.com%2Futil%2Fdownload%2Futil-0.10.3.tgz",
+          "resolved": "https://registry.npm.taobao.org/util/download/util-0.10.3.tgz",
           "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
           "dev": true,
           "requires": {
@@ -2581,7 +2677,7 @@
     },
     "autoprefixer": {
       "version": "9.8.6",
-      "resolved": "https://registry.nlark.com/autoprefixer/download/autoprefixer-9.8.6.tgz",
+      "resolved": "https://registry.npm.taobao.org/autoprefixer/download/autoprefixer-9.8.6.tgz",
       "integrity": "sha1-O3NZTKG/kmYyDFrPFYjXTep0IQ8=",
       "dev": true,
       "requires": {
@@ -2608,7 +2704,7 @@
     },
     "axios": {
       "version": "0.21.1",
-      "resolved": "https://registry.nlark.com/axios/download/axios-0.21.1.tgz?cache=0&sync_timestamp=1618847188301&other_urls=https%3A%2F%2Fregistry.nlark.com%2Faxios%2Fdownload%2Faxios-0.21.1.tgz",
+      "resolved": "https://registry.npm.taobao.org/axios/download/axios-0.21.1.tgz?cache=0&sync_timestamp=1608609188013&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faxios%2Fdownload%2Faxios-0.21.1.tgz",
       "integrity": "sha1-IlY0gZYvTWvemnbVFu8OXTwJsrg=",
       "requires": {
         "follow-redirects": "^1.10.0"
@@ -2740,7 +2836,7 @@
       "dependencies": {
         "core-js": {
           "version": "2.6.12",
-          "resolved": "https://registry.nlark.com/core-js/download/core-js-2.6.12.tgz?cache=0&sync_timestamp=1622879421799&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcore-js%2Fdownload%2Fcore-js-2.6.12.tgz",
+          "resolved": "https://registry.nlark.com/core-js/download/core-js-2.6.12.tgz?cache=0&sync_timestamp=1621970991239&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcore-js%2Fdownload%2Fcore-js-2.6.12.tgz",
           "integrity": "sha1-2TM9+nsGXjR8xWgiGdb2kIWcwuw="
         }
       }
@@ -3394,7 +3490,7 @@
     },
     "ci-info": {
       "version": "1.6.0",
-      "resolved": "https://registry.nlark.com/ci-info/download/ci-info-1.6.0.tgz?cache=0&sync_timestamp=1622180363085&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fci-info%2Fdownload%2Fci-info-1.6.0.tgz",
+      "resolved": "https://registry.npm.taobao.org/ci-info/download/ci-info-1.6.0.tgz",
       "integrity": "sha1-LKINu5zrMtRSSmgzAzE/AwSx5Jc=",
       "dev": true
     },
@@ -3510,7 +3606,7 @@
         },
         "supports-color": {
           "version": "7.2.0",
-          "resolved": "https://registry.nlark.com/supports-color/download/supports-color-7.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz",
+          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz",
           "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
           "dev": true,
           "requires": {
@@ -4279,7 +4375,7 @@
     },
     "css-select": {
       "version": "2.1.0",
-      "resolved": "https://registry.nlark.com/css-select/download/css-select-2.1.0.tgz?cache=0&sync_timestamp=1622994276976&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcss-select%2Fdownload%2Fcss-select-2.1.0.tgz",
+      "resolved": "https://registry.npm.taobao.org/css-select/download/css-select-2.1.0.tgz?cache=0&sync_timestamp=1618566178339&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-select%2Fdownload%2Fcss-select-2.1.0.tgz",
       "integrity": "sha1-ajRlM1ZjWTSoG6ymjQJVQyEF2+8=",
       "dev": true,
       "requires": {
@@ -4307,7 +4403,7 @@
     },
     "css-what": {
       "version": "3.4.2",
-      "resolved": "https://registry.nlark.com/css-what/download/css-what-3.4.2.tgz",
+      "resolved": "https://registry.npm.taobao.org/css-what/download/css-what-3.4.2.tgz",
       "integrity": "sha1-6nAm/LAXd+295SEk4h8yfnrpUOQ=",
       "dev": true
     },
@@ -4319,7 +4415,7 @@
     },
     "cssnano": {
       "version": "4.1.11",
-      "resolved": "https://registry.nlark.com/cssnano/download/cssnano-4.1.11.tgz",
+      "resolved": "https://registry.nlark.com/cssnano/download/cssnano-4.1.11.tgz?cache=0&sync_timestamp=1621620031632&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcssnano%2Fdownload%2Fcssnano-4.1.11.tgz",
       "integrity": "sha1-x7X1uB2iacsf2YLLlgwSAJEMmpk=",
       "dev": true,
       "requires": {
@@ -4331,7 +4427,7 @@
     },
     "cssnano-preset-default": {
       "version": "4.0.8",
-      "resolved": "https://registry.nlark.com/cssnano-preset-default/download/cssnano-preset-default-4.0.8.tgz",
+      "resolved": "https://registry.nlark.com/cssnano-preset-default/download/cssnano-preset-default-4.0.8.tgz?cache=0&sync_timestamp=1621620031436&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcssnano-preset-default%2Fdownload%2Fcssnano-preset-default-4.0.8.tgz",
       "integrity": "sha1-kgYisfwelaNOiDggPxOXpQTy0/8=",
       "dev": true,
       "requires": {
@@ -4415,7 +4511,7 @@
         },
         "mdn-data": {
           "version": "2.0.14",
-          "resolved": "https://registry.nlark.com/mdn-data/download/mdn-data-2.0.14.tgz",
+          "resolved": "https://registry.nlark.com/mdn-data/download/mdn-data-2.0.14.tgz?cache=0&sync_timestamp=1619049042656&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fmdn-data%2Fdownload%2Fmdn-data-2.0.14.tgz",
           "integrity": "sha1-cRP8QoGRfWPOKbQ0RvcB5owlulA=",
           "dev": true
         }
@@ -4509,7 +4605,7 @@
         },
         "execa": {
           "version": "3.4.0",
-          "resolved": "https://registry.nlark.com/execa/download/execa-3.4.0.tgz?cache=0&sync_timestamp=1622825484602&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fexeca%2Fdownload%2Fexeca-3.4.0.tgz",
+          "resolved": "https://registry.npm.taobao.org/execa/download/execa-3.4.0.tgz?cache=0&sync_timestamp=1606971027153&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-3.4.0.tgz",
           "integrity": "sha1-wI7UVQ72XYWPrCaf/IVyRG8364k=",
           "dev": true,
           "requires": {
@@ -4884,7 +4980,7 @@
     },
     "domutils": {
       "version": "1.7.0",
-      "resolved": "https://registry.nlark.com/domutils/download/domutils-1.7.0.tgz?cache=0&sync_timestamp=1622995111565&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdomutils%2Fdownload%2Fdomutils-1.7.0.tgz",
+      "resolved": "https://registry.npm.taobao.org/domutils/download/domutils-1.7.0.tgz",
       "integrity": "sha1-Vuo0HoNOBuZ0ivehyyXaZ+qfjCo=",
       "dev": true,
       "requires": {
@@ -5129,7 +5225,7 @@
     },
     "eslint": {
       "version": "6.8.0",
-      "resolved": "https://registry.nlark.com/eslint/download/eslint-6.8.0.tgz?cache=0&sync_timestamp=1622846610677&other_urls=https%3A%2F%2Fregistry.nlark.com%2Feslint%2Fdownload%2Feslint-6.8.0.tgz",
+      "resolved": "https://registry.nlark.com/eslint/download/eslint-6.8.0.tgz?cache=0&sync_timestamp=1621646990959&other_urls=https%3A%2F%2Fregistry.nlark.com%2Feslint%2Fdownload%2Feslint-6.8.0.tgz",
       "integrity": "sha1-YiYtZylzn5J1cjgkMC+yJ8jJP/s=",
       "dev": true,
       "requires": {
@@ -5193,7 +5289,7 @@
         },
         "globals": {
           "version": "12.4.0",
-          "resolved": "https://registry.nlark.com/globals/download/globals-12.4.0.tgz",
+          "resolved": "https://registry.npm.taobao.org/globals/download/globals-12.4.0.tgz",
           "integrity": "sha1-oYgTV2pBsAokqX5/gVkYwuGZJfg=",
           "dev": true,
           "requires": {
@@ -5239,7 +5335,7 @@
         },
         "type-fest": {
           "version": "0.8.1",
-          "resolved": "https://registry.nlark.com/type-fest/download/type-fest-0.8.1.tgz?cache=0&sync_timestamp=1622543391721&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftype-fest%2Fdownload%2Ftype-fest-0.8.1.tgz",
+          "resolved": "https://registry.nlark.com/type-fest/download/type-fest-0.8.1.tgz?cache=0&sync_timestamp=1621402383646&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftype-fest%2Fdownload%2Ftype-fest-0.8.1.tgz",
           "integrity": "sha1-CeJJ696FHTseSNJ8EFREZn8XuD0=",
           "dev": true
         }
@@ -5282,7 +5378,7 @@
     },
     "eslint-plugin-vue": {
       "version": "6.2.2",
-      "resolved": "https://registry.nlark.com/eslint-plugin-vue/download/eslint-plugin-vue-6.2.2.tgz",
+      "resolved": "https://registry.npm.taobao.org/eslint-plugin-vue/download/eslint-plugin-vue-6.2.2.tgz",
       "integrity": "sha1-J/7NmjokeJsPER7N1UCp5WGY4P4=",
       "dev": true,
       "requires": {
@@ -5329,7 +5425,7 @@
       "dependencies": {
         "acorn": {
           "version": "7.4.1",
-          "resolved": "https://registry.nlark.com/acorn/download/acorn-7.4.1.tgz",
+          "resolved": "https://registry.nlark.com/acorn/download/acorn-7.4.1.tgz?cache=0&sync_timestamp=1620134156200&other_urls=https%3A%2F%2Fregistry.nlark.com%2Facorn%2Fdownload%2Facorn-7.4.1.tgz",
           "integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=",
           "dev": true
         }
@@ -5432,7 +5528,7 @@
     },
     "execa": {
       "version": "1.0.0",
-      "resolved": "https://registry.nlark.com/execa/download/execa-1.0.0.tgz?cache=0&sync_timestamp=1622825484602&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fexeca%2Fdownload%2Fexeca-1.0.0.tgz",
+      "resolved": "https://registry.npm.taobao.org/execa/download/execa-1.0.0.tgz?cache=0&sync_timestamp=1606971027153&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-1.0.0.tgz",
       "integrity": "sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg=",
       "dev": true,
       "requires": {
@@ -6112,7 +6208,7 @@
     },
     "globals": {
       "version": "11.12.0",
-      "resolved": "https://registry.nlark.com/globals/download/globals-11.12.0.tgz",
+      "resolved": "https://registry.npm.taobao.org/globals/download/globals-11.12.0.tgz",
       "integrity": "sha1-q4eVM4hooLq9hSV1gBjCp+uVxC4=",
       "dev": true
     },
@@ -6660,7 +6756,7 @@
     },
     "import-from": {
       "version": "2.1.0",
-      "resolved": "https://registry.nlark.com/import-from/download/import-from-2.1.0.tgz",
+      "resolved": "https://registry.npm.taobao.org/import-from/download/import-from-2.1.0.tgz",
       "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=",
       "dev": true,
       "requires": {
@@ -6853,7 +6949,7 @@
         },
         "supports-color": {
           "version": "7.2.0",
-          "resolved": "https://registry.nlark.com/supports-color/download/supports-color-7.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz",
+          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz",
           "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
           "dev": true,
           "requires": {
@@ -7698,7 +7794,7 @@
     },
     "mdn-data": {
       "version": "2.0.4",
-      "resolved": "https://registry.nlark.com/mdn-data/download/mdn-data-2.0.4.tgz",
+      "resolved": "https://registry.nlark.com/mdn-data/download/mdn-data-2.0.4.tgz?cache=0&sync_timestamp=1619049042656&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fmdn-data%2Fdownload%2Fmdn-data-2.0.4.tgz",
       "integrity": "sha1-aZs8OKxvHXKAkaZGULZdOIUC/Vs=",
       "dev": true
     },
@@ -8286,7 +8382,7 @@
     },
     "object-hash": {
       "version": "1.3.1",
-      "resolved": "https://registry.nlark.com/object-hash/download/object-hash-1.3.1.tgz",
+      "resolved": "https://registry.npm.taobao.org/object-hash/download/object-hash-1.3.1.tgz?cache=0&sync_timestamp=1608921025476&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-hash%2Fdownload%2Fobject-hash-1.3.1.tgz",
       "integrity": "sha1-/eRSCYqVHLFF8Dm7fUVUSd3BJt8=",
       "dev": true
     },
@@ -8794,7 +8890,7 @@
     },
     "postcss": {
       "version": "7.0.35",
-      "resolved": "https://registry.nlark.com/postcss/download/postcss-7.0.35.tgz",
+      "resolved": "https://registry.nlark.com/postcss/download/postcss-7.0.35.tgz?cache=0&sync_timestamp=1621568858981&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-7.0.35.tgz",
       "integrity": "sha1-0r4AuZj38hHYonaXQHny6SuXDiQ=",
       "dev": true,
       "requires": {
@@ -8805,7 +8901,7 @@
       "dependencies": {
         "supports-color": {
           "version": "6.1.0",
-          "resolved": "https://registry.nlark.com/supports-color/download/supports-color-6.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz",
+          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz",
           "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=",
           "dev": true,
           "requires": {
@@ -8827,7 +8923,7 @@
     },
     "postcss-colormin": {
       "version": "4.0.3",
-      "resolved": "https://registry.nlark.com/postcss-colormin/download/postcss-colormin-4.0.3.tgz",
+      "resolved": "https://registry.nlark.com/postcss-colormin/download/postcss-colormin-4.0.3.tgz?cache=0&sync_timestamp=1621620031272&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-colormin%2Fdownload%2Fpostcss-colormin-4.0.3.tgz",
       "integrity": "sha1-rgYLzpPteUrHEmTwgTLVUJVr04E=",
       "dev": true,
       "requires": {
@@ -8977,7 +9073,7 @@
     },
     "postcss-merge-rules": {
       "version": "4.0.3",
-      "resolved": "https://registry.nlark.com/postcss-merge-rules/download/postcss-merge-rules-4.0.3.tgz",
+      "resolved": "https://registry.nlark.com/postcss-merge-rules/download/postcss-merge-rules-4.0.3.tgz?cache=0&sync_timestamp=1621449818973&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-merge-rules%2Fdownload%2Fpostcss-merge-rules-4.0.3.tgz",
       "integrity": "sha1-NivqT/Wh+Y5AdacTxsslrv75plA=",
       "dev": true,
       "requires": {
@@ -9402,14 +9498,14 @@
     },
     "prettier": {
       "version": "1.19.1",
-      "resolved": "https://registry.nlark.com/prettier/download/prettier-1.19.1.tgz?cache=0&sync_timestamp=1622888610164&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fprettier%2Fdownload%2Fprettier-1.19.1.tgz",
+      "resolved": "https://registry.nlark.com/prettier/download/prettier-1.19.1.tgz?cache=0&sync_timestamp=1620594183343&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fprettier%2Fdownload%2Fprettier-1.19.1.tgz",
       "integrity": "sha1-99f1/4qc2HKnvkyhQglZVqYHl8s=",
       "dev": true,
       "optional": true
     },
     "pretty-error": {
       "version": "2.1.2",
-      "resolved": "https://registry.nlark.com/pretty-error/download/pretty-error-2.1.2.tgz",
+      "resolved": "https://registry.npm.taobao.org/pretty-error/download/pretty-error-2.1.2.tgz",
       "integrity": "sha1-von4LYGxyG7I/fvDhQRYgnJ/k7Y=",
       "dev": true,
       "requires": {
@@ -10894,7 +10990,7 @@
     },
     "supports-color": {
       "version": "5.5.0",
-      "resolved": "https://registry.nlark.com/supports-color/download/supports-color-5.5.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-5.5.0.tgz",
+      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-5.5.0.tgz",
       "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=",
       "dev": true,
       "requires": {
@@ -10993,7 +11089,7 @@
     },
     "terser-webpack-plugin": {
       "version": "1.4.5",
-      "resolved": "https://registry.nlark.com/terser-webpack-plugin/download/terser-webpack-plugin-1.4.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fterser-webpack-plugin%2Fdownload%2Fterser-webpack-plugin-1.4.5.tgz",
+      "resolved": "https://registry.nlark.com/terser-webpack-plugin/download/terser-webpack-plugin-1.4.5.tgz?cache=0&sync_timestamp=1620831017649&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fterser-webpack-plugin%2Fdownload%2Fterser-webpack-plugin-1.4.5.tgz",
       "integrity": "sha1-oheu+uozDnNP+sthIOwfoxLWBAs=",
       "dev": true,
       "requires": {
@@ -11174,6 +11270,11 @@
       "resolved": "https://registry.npm.taobao.org/tinycolor2/download/tinycolor2-1.4.2.tgz",
       "integrity": "sha1-P2pNEHGtB2dtf6Ry4frECnGdiAM="
     },
+    "tinymce": {
+      "version": "5.8.1",
+      "resolved": "https://registry.nlark.com/tinymce/download/tinymce-5.8.1.tgz",
+      "integrity": "sha1-9qznDkfPa1sKY/Us845K4Eo1ulg="
+    },
     "tmp": {
       "version": "0.0.33",
       "resolved": "https://registry.npm.taobao.org/tmp/download/tmp-0.0.33.tgz",
@@ -11308,7 +11409,7 @@
     },
     "type-fest": {
       "version": "0.6.0",
-      "resolved": "https://registry.nlark.com/type-fest/download/type-fest-0.6.0.tgz?cache=0&sync_timestamp=1622543391721&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftype-fest%2Fdownload%2Ftype-fest-0.6.0.tgz",
+      "resolved": "https://registry.nlark.com/type-fest/download/type-fest-0.6.0.tgz?cache=0&sync_timestamp=1621402383646&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftype-fest%2Fdownload%2Ftype-fest-0.6.0.tgz",
       "integrity": "sha1-jSojcNPfiG61yQraHFv2GIrPg4s=",
       "dev": true
     },
@@ -11330,7 +11431,7 @@
     },
     "uglify-js": {
       "version": "3.4.10",
-      "resolved": "https://registry.nlark.com/uglify-js/download/uglify-js-3.4.10.tgz",
+      "resolved": "https://registry.nlark.com/uglify-js/download/uglify-js-3.4.10.tgz?cache=0&sync_timestamp=1621369441167&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fuglify-js%2Fdownload%2Fuglify-js-3.4.10.tgz",
       "integrity": "sha1-mtlWPY6zrN+404WX0q8dgV9qdV8=",
       "dev": true,
       "requires": {
@@ -11587,7 +11688,7 @@
     },
     "util": {
       "version": "0.11.1",
-      "resolved": "https://registry.nlark.com/util/download/util-0.11.1.tgz?cache=0&sync_timestamp=1622213047493&other_urls=https%3A%2F%2Fregistry.nlark.com%2Futil%2Fdownload%2Futil-0.11.1.tgz",
+      "resolved": "https://registry.npm.taobao.org/util/download/util-0.11.1.tgz",
       "integrity": "sha1-MjZzNyDsZLsn9uJvQhqqLhtYjWE=",
       "dev": true,
       "requires": {
@@ -11634,7 +11735,7 @@
     },
     "uuid": {
       "version": "3.4.0",
-      "resolved": "https://registry.nlark.com/uuid/download/uuid-3.4.0.tgz?cache=0&sync_timestamp=1622213185460&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fuuid%2Fdownload%2Fuuid-3.4.0.tgz",
+      "resolved": "https://registry.npm.taobao.org/uuid/download/uuid-3.4.0.tgz?cache=0&sync_timestamp=1607460081656&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuuid%2Fdownload%2Fuuid-3.4.0.tgz",
       "integrity": "sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4=",
       "dev": true
     },
@@ -11776,75 +11877,6 @@
         }
       }
     },
-    "vue-loader-v16": {
-      "version": "npm:vue-loader@16.2.0",
-      "resolved": "https://registry.nlark.com/vue-loader/download/vue-loader-16.2.0.tgz?cache=0&sync_timestamp=1620717857145&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fvue-loader%2Fdownload%2Fvue-loader-16.2.0.tgz",
-      "integrity": "sha1-BGpTMI3Ufljv4g3ewe3sAnzjtG4=",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "chalk": "^4.1.0",
-        "hash-sum": "^2.0.0",
-        "loader-utils": "^2.0.0"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "4.3.0",
-          "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz?cache=0&sync_timestamp=1618995547052&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-styles%2Fdownload%2Fansi-styles-4.3.0.tgz",
-          "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "color-convert": "^2.0.1"
-          }
-        },
-        "chalk": {
-          "version": "4.1.1",
-          "resolved": "https://registry.nlark.com/chalk/download/chalk-4.1.1.tgz?cache=0&sync_timestamp=1618995354302&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-4.1.1.tgz",
-          "integrity": "sha1-yAs/qyi/Y3HmhjMl7uZ+YYt35q0=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "color-convert": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
-          "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "color-name": "~1.1.4"
-          }
-        },
-        "color-name": {
-          "version": "1.1.4",
-          "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
-          "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
-          "dev": true,
-          "optional": true
-        },
-        "has-flag": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-flag%2Fdownload%2Fhas-flag-4.0.0.tgz",
-          "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
-          "dev": true,
-          "optional": true
-        },
-        "supports-color": {
-          "version": "7.2.0",
-          "resolved": "https://registry.nlark.com/supports-color/download/supports-color-7.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz",
-          "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "has-flag": "^4.0.0"
-          }
-        }
-      }
-    },
     "vue-ref": {
       "version": "2.0.0",
       "resolved": "https://registry.npm.taobao.org/vue-ref/download/vue-ref-2.0.0.tgz",
@@ -12082,7 +12114,7 @@
     },
     "webpack": {
       "version": "4.46.0",
-      "resolved": "https://registry.nlark.com/webpack/download/webpack-4.46.0.tgz?cache=0&sync_timestamp=1622151377755&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwebpack%2Fdownload%2Fwebpack-4.46.0.tgz",
+      "resolved": "https://registry.nlark.com/webpack/download/webpack-4.46.0.tgz?cache=0&sync_timestamp=1621407470605&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwebpack%2Fdownload%2Fwebpack-4.46.0.tgz",
       "integrity": "sha1-v5tEBOogoHNgXgoBHRiNd8tq1UI=",
       "dev": true,
       "requires": {
@@ -12167,7 +12199,7 @@
       "dependencies": {
         "acorn": {
           "version": "7.4.1",
-          "resolved": "https://registry.nlark.com/acorn/download/acorn-7.4.1.tgz",
+          "resolved": "https://registry.nlark.com/acorn/download/acorn-7.4.1.tgz?cache=0&sync_timestamp=1620134156200&other_urls=https%3A%2F%2Fregistry.nlark.com%2Facorn%2Fdownload%2Facorn-7.4.1.tgz",
           "integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=",
           "dev": true
         }
@@ -12527,7 +12559,7 @@
         },
         "supports-color": {
           "version": "6.1.0",
-          "resolved": "https://registry.nlark.com/supports-color/download/supports-color-6.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz",
+          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz",
           "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=",
           "dev": true,
           "requires": {
@@ -12613,7 +12645,7 @@
     },
     "webpack-sources": {
       "version": "1.4.3",
-      "resolved": "https://registry.nlark.com/webpack-sources/download/webpack-sources-1.4.3.tgz?cache=0&sync_timestamp=1622110410694&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwebpack-sources%2Fdownload%2Fwebpack-sources-1.4.3.tgz",
+      "resolved": "https://registry.npm.taobao.org/webpack-sources/download/webpack-sources-1.4.3.tgz?cache=0&sync_timestamp=1603965314165&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-sources%2Fdownload%2Fwebpack-sources-1.4.3.tgz",
       "integrity": "sha1-7t2OwLko+/HL/plOItLYkPMwqTM=",
       "dev": true,
       "requires": {
@@ -12825,7 +12857,7 @@
         },
         "execa": {
           "version": "0.8.0",
-          "resolved": "https://registry.nlark.com/execa/download/execa-0.8.0.tgz?cache=0&sync_timestamp=1622825484602&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fexeca%2Fdownload%2Fexeca-0.8.0.tgz",
+          "resolved": "https://registry.npm.taobao.org/execa/download/execa-0.8.0.tgz?cache=0&sync_timestamp=1606971027153&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-0.8.0.tgz",
           "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=",
           "dev": true,
           "requires": {

+ 1 - 1
package.json

@@ -8,7 +8,7 @@
     "lint": "vue-cli-service lint"
   },
   "dependencies": {
-    "@tinymce/tinymce-vue": "^3.0.1",
+    "@tinymce/tinymce-vue": "^3.2.8",
     "ant-design-vue": "^1.7.5",
     "axios": "^0.21.1",
     "core-js": "^3.6.5",

+ 12 - 0
src/api/index.js

@@ -11,9 +11,21 @@ const subList = [
     name: "API_LIST_USER",
     url: "VUE_APP_BASE_API"
   },
+  {
+    name: "API_LIST_ENGINEERINGWORK",
+    url: "VUE_APP_BASE_API"
+  },
+  {
+    name: "API_LIST_EXAM",
+    url: "VUE_APP_BASE_API"
+  },
   {
     name: "API_LIST_EXAM_QUESTION",
     url: "VUE_APP_BASE_API"
+  },
+  {
+    name: "API_LIST_ARTICLE",
+    url: "VUE_APP_BASE_API"
   }
 ];
 

+ 9 - 0
src/api/modules/article.js

@@ -0,0 +1,9 @@
+/* JTXT系统相关api */
+export default {
+  API_LIST_ARTICLE: {
+    // 文章列表
+    INTERFACE_GET_ARTICLE_LIST: 'admin/materials',
+    // 删除文章
+    INTERFACE_POST_ARTICLE_DELETE: '',
+  }
+};

+ 11 - 0
src/api/modules/engineeringWork.js

@@ -0,0 +1,11 @@
+/* JTXT系统相关api */
+export default {
+  API_LIST_ENGINEERINGWORK: {
+    // 工种列表
+    INTERFACE_GET_ENGINEERINGWORK_LIST: "/engineertypes",
+    // 新建工种
+    INTERFACE_POST_ENGINEERINGWORK_CREATE: "/admin/engineertype",
+    // 删除工种
+    INTERFACE_DELETE_ENGINEERINGWORK_DELETE: "/admin/engineertype/{engineertypeid}",
+  }
+};

+ 1 - 1
src/api/modules/exam.js

@@ -1,6 +1,6 @@
 /* JTXT系统相关api */
 export default {
-  API_LIST_EXAM_QUESTION: {
+  API_LIST_EXAM: {
     // 查询考试列表信息
     INTERFACE_GET_EXAMS: "exams",
     // 查询某场考试的详细信息

+ 10 - 3
src/api/modules/examQuestion.js

@@ -1,15 +1,22 @@
 /* JTXT系统相关api */
 export default {
   API_LIST_EXAM_QUESTION: {
+    // 查询所有题目分类
+    INTERFACE_GET_EXAMS_QUESTION_TYPE: "q-categories",
+    // 新建题目分类
+    INTERFACE_POST_EXAMS_QUESTION_TYPE_CREATE: "admin/qCategories",
+    // 删除某个题目分类
+    INTERFACE_POST_EXAMS_QUESTION_TYPE_DELETE: "admin/q-categories/{categoryId}",
+
     // 查询所有试题
     INTERFACE_GET_EXAMS_QUESTION_LIST: "",
     // 新建试题
     INTERFACE_POST_EXAMS_QUESTION_ADD: "",
     // 删除某一个试题
-    INTERFACE_POST_EXAMS_QUESTION_DELETE: "",
+    INTERFACE_DELETE_EXAMS_QUESTION_DELETE: "/questions/{questionId}",
     // 批量删除试题
-    INTERFACE_POST_EXAMS_QUESTION_DELETE_LIST: "",
+    INTERFACE_DELETE_EXAMS_QUESTION_DELETE_LIST: "/admin/somequestions",
     // 查询某个试题的详情
-    INTERFACE_GET_EXAMS_QUESTION_DETAIL: ""
+    INTERFACE_GET_EXAMS_QUESTION_DETAIL: "/question/{questionId}"
   }
 };

+ 47 - 39
src/common/Constant.js

@@ -1,55 +1,63 @@
 // 网络连接错误提示信息
-export const HTTP_ERROR_MESSAGE = "系统出小差了,请联系管理员处理 ≧﹏≦";
+export const HTTP_ERROR_MESSAGE = '系统出小差了,请联系管理员处理 ≧﹏≦';
 // 提示信息停留时间
 export const ELEMENT_MESSAGE_DURATION = 3000;
 // 前台存储的token字段名
-export const AUTH_TOKEN_FRONT = "TOKEN_STRING";
+export const AUTH_TOKEN_FRONT = 'TOKEN_STRING';
 // 后台存储的token字段名
-export const AUTH_TOKEN_END = "Token";
+export const AUTH_TOKEN_END = 'Token';
 // 允许的图片类型列表
 export const UPLOAD_IMAGE_TYPE = [
-  "bmp",
-  "jpg",
-  "jpeg",
-  "png",
-  "tif",
-  "gif",
-  "pcx",
-  "tga",
-  "exif",
-  "fpx",
-  "svg",
-  "psd",
-  "cdr",
-  "pcd",
-  "dxf",
-  "ufo",
-  "eps,",
-  "ai,",
-  "raw",
-  ",WMF",
-  "webp"
+  'bmp',
+  'jpg',
+  'jpeg',
+  'png',
+  'tif',
+  'gif',
+  'pcx',
+  'tga',
+  'exif',
+  'fpx',
+  'svg',
+  'psd',
+  'cdr',
+  'pcd',
+  'dxf',
+  'ufo',
+  'eps,',
+  'ai,',
+  'raw',
+  ',WMF',
+  'webp',
 ];
 // 上传图片的最大大小,单位:MB
 export const UPLOAD_IMAGE_MAX_SIZE = 10;
 // 正则表达式:身份证号
 export const REGULAR_EXPRESSION_IDNUMBER = /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/;
 // 项目的标题文字
-export const PROGRAM_Title = "京铁学堂"
-
+export const PROGRAM_Title = '京铁学堂';
+// 工种类型
 export const ENGINEERING_WORK_LIST = [
-  { title: '桥隧工', code: 'QiaoSuiGong' },
-  // { title: "测量工", code: "CeLiangGong" },
-  { title: '线路工', code: 'XianLuGong' },
-]
+  { id: 1, name: '桥隧工', code: 'QiaoSuiGong' },
+  // { id: 2, name: "测量工", code: "CeLiangGong" },
+  { id: 3, name: '线路工', code: 'XianLuGong' },
+];
+// 试题类型
 export const EXAM_QUESTION_TYPE = [
-  { title: '单选题', code: 'DanXuan' },
-  { title: '多选题', code: 'DuoXuan' },
-  { title: '判断题', code: 'PanDuan' },
-  { title: '填空题', code: 'TianKong' },
-]
-
+  { id: 1, name: '单选题', code: 'DanXuan' },
+  { id: 2, name: '多选题', code: 'DuoXuan' },
+  { id: 3, name: '判断题', code: 'PanDuan' },
+  { id: 4, name: '填空题', code: 'TianKong' },
+];
+// 试题类别
+export const EXAM_QUESTION_TYPE_CONDITION = [
+  { id: 1, name: '类别1', code: 'LeiBie1' },
+  { id: 2, name: '类别2', code: 'LeiBie2' },
+  { id: 3, name: '类别3', code: 'LeiBie3' },
+  { id: 4, name: '类别4', code: 'LeiBie4' },
+];
+// 考试分类
 export const EXAM_TYPE = [
-  { title: '普通考试', code: 'PuTongKaoShi' },
-  { title: '专项考试', code: 'ZhuanXiangKaoShi' },
-]
+  { id: 1, name: '普通考试', code: 'PuTongKaoShi' },
+  { id: 2, name: '专项考试', code: 'ZhuanXiangKaoShi' },
+];

+ 105 - 2
src/common/resData.js

@@ -115,7 +115,7 @@ export const QUESTIONLISTRES = {
     },
   ],
   code: 200,
-  message: '成功'
+  message: '成功',
 };
 
 export const EXAMLISTRES = {
@@ -178,5 +178,108 @@ export const EXAMLISTRES = {
     },
   ],
   code: 200,
-  message: '成功'
+  message: '成功',
+};
+
+export const ARTICLELIST = {
+  data: [
+    {
+      id: 1,
+      name: '文章标题1',
+      contents:
+        '这里是内容这里是内容这里是内容这里是内容这里是内容这里是内容这里是内容这里是内容这里是内容',
+      createdTime: '2021-06-20 18:00:00',
+      readerCount: 30,
+      commentCount: 18,
+      likeCount: 10,
+      collectCount: 3,
+      engineeringWork: 'QiaoSuiGong'
+    },
+    {
+      id: 2,
+      name: '文章标题2',
+      contents:
+        '这里是内容这里是内容这里是内容这里是内容这里是内容这里是内容这里是内容这里是内容这里是内容',
+      createdTime: '2021-02-20 11:12:22',
+      readerCount: 20,
+      commentCount: 11,
+      likeCount: 5,
+      collectCount: 2,
+      engineeringWork: 'XianLuGong'
+    },
+    {
+      id: 3,
+      name: '文章标题3',
+      contents:
+        '这里是内容这里是内容这里是内容这里是内容这里是内容这里是内容这里是内容这里是内容这里是内容',
+      createdTime: '2021-05-25 21:10:30',
+      readerCount: 10,
+      commentCount: 1,
+      likeCount: 1,
+      collectCount: 1,
+      engineeringWork: 'QiaoSuiGong'
+    },
+    {
+      id: 4,
+      name: '文章标题4',
+      contents:
+        '这里是内容这里是内容这里是内容这里是内容这里是内容这里是内容这里是内容这里是内容这里是内容',
+      createdTime: '2021-05-25 21:10:30',
+      readerCount: 10,
+      commentCount: 1,
+      likeCount: 1,
+      collectCount: 1,
+      engineeringWork: 'QiaoSuiGong'
+    },
+    {
+      id: 5,
+      name: '文章标题5',
+      contents:
+        '这里是内容这里是内容这里是内容这里是内容这里是内容这里是内容这里是内容这里是内容这里是内容',
+      createdTime: '2021-05-25 21:10:30',
+      readerCount: 10,
+      commentCount: 1,
+      likeCount: 1,
+      collectCount: 1,
+      engineeringWork: 'QiaoSuiGong'
+    },
+    {
+      id: 6,
+      name: '文章标题6',
+      contents:
+        '这里是内容这里是内容这里是内容这里是内容这里是内容这里是内容这里是内容这里是内容这里是内容',
+      createdTime: '2021-05-25 21:10:30',
+      readerCount: 10,
+      commentCount: 1,
+      likeCount: 1,
+      collectCount: 1,
+      engineeringWork: 'QiaoSuiGong'
+    },
+    {
+      id: 7,
+      name: '文章标题7',
+      contents:
+        '这里是内容这里是内容这里是内容这里是内容这里是内容这里是内容这里是内容这里是内容这里是内容',
+      createdTime: '2021-05-25 21:10:30',
+      readerCount: 10,
+      commentCount: 1,
+      likeCount: 1,
+      collectCount: 1,
+      engineeringWork: 'QiaoSuiGong'
+    },
+    {
+      id: 8,
+      name: '文章标题8',
+      contents:
+        '这里是内容这里是内容这里是内容这里是内容这里是内容这里是内容这里是内容这里是内容这里是内容',
+      createdTime: '2021-05-25 21:10:30',
+      readerCount: 10,
+      commentCount: 1,
+      likeCount: 1,
+      collectCount: 1,
+      engineeringWork: 'QiaoSuiGong'
+    },
+  ],
+  code: 200,
+  message: '成功',
 };

+ 3 - 3
src/filters/index.js

@@ -231,7 +231,7 @@ export function formateExamTypeFun(code) {
   let txt = '';
   EXAM_TYPE.forEach((item) => {
     if ((item.code = code)) {
-      txt = item.title;
+      txt = item.name;
     }
   });
   return txt;
@@ -247,7 +247,7 @@ export function formateExamQuestionTypeFun(code) {
   let txt = '';
   EXAM_QUESTION_TYPE.forEach((item) => {
     if ((item.code = code)) {
-      txt = item.title;
+      txt = item.name;
     }
   });
   return txt;
@@ -262,7 +262,7 @@ export function formateEngineeringWorkTypeFun(code) {
   let txt = '';
   ENGINEERING_WORK_LIST.forEach((item) => {
     if (item.code === code) {
-      txt = item.title;
+      txt = item.name;
     }
   });
   return txt;

+ 7 - 1
src/router/common/common.js

@@ -13,7 +13,13 @@ export default [
         name: "home",
         meta: { title: "首页" },
         component: () => import("@/views/Home")
-      }
+      },
+      {
+        path: "engineeringWorkManagement",
+        name: "engineeringWorkManagement",
+        meta: { title: "工种管理" },
+        component: () => import("@/views/engineeringWorkManagement/engineeringWorkList")
+      },
     ]
   },
   {

+ 8 - 0
src/router/menu.js

@@ -3,10 +3,18 @@ export default [
     path: '/home',
     meta: { title: '统计数据', icon: 'ali-icon-tongji' },
   },
+  {
+    path: '/engineeringWorkManagement',
+    meta: { title: '工种管理', icon: 'ali-icon-gongzhong' },
+  },
   {
     meta: { title: '题目管理', icon: 'ali-icon-lunwentimu' },
     path: '/examQuestionManagement',
     children: [
+      {
+        path: '/examQuestionManagement/questionType',
+        meta: { title: '题目类别' },
+      },
       {
         path: '/examQuestionManagement/list',
         meta: { title: '题目列表' },

+ 7 - 0
src/router/modules/examQuestionManagement.js

@@ -5,6 +5,13 @@ export default {
   redirect: '/examQuestionManagement/list',
   component: layout,
   children: [
+    {
+      path: 'questionType',
+      name: 'examQuestion-type',
+      meta: { title: '题目类别' },
+      component: () =>
+        import('@/views/examQuestionManagement/examQuestionType'),
+    },
     {
       path: 'list',
       name: 'examQuestionManagement-list',

+ 1 - 0
src/styles/common/variable.less

@@ -2,6 +2,7 @@
 @mainColorBlueNormal: #1890FF; // 主题色:蓝色
 @mainColorWhite: #fff; // 主题色:白色
 @mainColorBlack: #222; // 主题色:黑色
+@mainColorBlack25: rgba(0, 0, 0, 0.25); // 主题色:黑色-25%
 @mainColorBlack45: rgba(0, 0, 0, 0.45); // 主题色:黑色-45%
 @mainColorBlack65: rgba(0, 0, 0, 0.65); // 主题色:黑色-65%
 @mainColorBlack85: rgba(0, 0, 0, 0.85); // 主题色:黑色-85%

+ 11 - 1
src/styles/components/index.less

@@ -80,14 +80,20 @@
 // 题目列表中的筛选条件样式--------start
 .filter-condition-box {
   display: flex;
-  align-items: center;
+  >span {
+    flex-wrap: nowrap;
+    white-space: nowrap;
+  }
   ul {
     margin: 0;
     display: flex;
+    flex-wrap: wrap;
     li {
       margin-left: @paddingMarginVal;
       color: @mainColorBlack65;
       cursor: pointer;
+      flex-wrap: nowrap;
+      white-space: nowrap;
       &:hover {
         color: @mainColorBlueNormal;
       }
@@ -102,6 +108,10 @@
   width: 100%;
   display: flex;
   align-items: center;
+  >span {
+    flex-wrap: nowrap;
+    white-space: nowrap;
+  }
   .filter-other-title {
     color: @mainColorBlack85;
   }

+ 1 - 1
src/styles/index.js

@@ -12,7 +12,7 @@ import 'ant-design-vue/dist/antd.css';
 import { Icon } from 'ant-design-vue';
 import Vue from 'vue'
 const IconFont = Icon.createFromIconfontCN({
-  scriptUrl: '//at.alicdn.com/t/font_2605334_ujo5n7ad5zi.js',
+  scriptUrl: '//at.alicdn.com/t/font_2605334_meuo7gj8ds.js',
 });
 
 Vue.use(less);

+ 302 - 14
src/views/articleManagement/articleList.vue

@@ -1,25 +1,153 @@
 <template>
   <div class="app-container">
-    <div class="common-card">
-      <div>这里是文章列表</div>
-    </div>
-    <div class="common-card a-card-margin-top">
-      <div>这里是内容</div>
-    </div>
+    <a-spin :spinning="loading">
+      <div class="common-card">
+        <!-- 过滤条件栏目 -->
+        <div>
+          <div class="filter-condition-box">
+            <span>所属类目:</span>
+            <ul>
+              <li
+                :class="{
+                  checkedExamQuestionType:
+                    checkedExamQuestionType === item.code,
+                }"
+                v-for="(item, index) in examQuestionType"
+                :key="index"
+                @click="handleExamQuestionTypeFun(item)"
+              >
+                {{ item.name }}
+              </li>
+            </ul>
+          </div>
+          <div class="filter-condition-box a-card-margin-top">
+            <span>所属类别:</span>
+            <ul>
+              <li
+                :class="{
+                  checkedExamQuestionType:
+                    checkedExamQuestionTypeCondition === item.code,
+                }"
+                v-for="(item, index) in examQuestionTypeCondition"
+                :key="index"
+                @click="handleExamQuestionTypeConditionFun(item)"
+              >
+                {{ item.name }}
+              </li>
+            </ul>
+          </div>
+          <div class="border-line"></div>
+          <div class="filter-other-box">
+            <span class="filter-other-title">其它选项:</span>
+            <span class="filter-other-item-title">工种:</span>
+            <a-select
+              v-model="engineeringWorkChooseValue"
+              @change="handleChangeEngineeringWorkValue"
+            >
+              <a-select-option
+                v-for="(item, index) in engineeringWorkList"
+                :key="index"
+                :value="item.code"
+                >{{ item.name }}</a-select-option
+              >
+            </a-select>
+          </div>
+        </div>
+      </div>
+      <div class="common-card a-card-margin-top">
+        <!-- 列表 -->
+        <div
+          :class="{
+            'article-list-item': true,
+            'article-list-item-paddingTop': index,
+          }"
+          v-for="(item, index) in articleList"
+          :key="index"
+        >
+          <div class="article-list-item-title">{{ item.name }}</div>
+          <div class="article-list-item-contgents">{{ item.contents }}</div>
+          <div class="article-list-item-createtime">
+            {{ item.createdTime | formatDateTime }}
+          </div>
+          <div class="article-list-item-info">
+            <div class="article-list-item-info-left">
+              <!-- 收藏 -->
+              <div class="article-list-item-info-label">
+                <icon-font type="ali-icon-shoucang-" />
+                <span class="article-list-item-info-labeltxt">{{
+                  item.collectCount
+                }}</span>
+              </div>
+              <div class="article-list-item-info-line"></div>
+              <!-- 点赞 -->
+              <div class="article-list-item-info-label">
+                <icon-font type="ali-icon-dianzan" />
+                <span class="article-list-item-info-labeltxt">{{
+                  item.likeCount
+                }}</span>
+              </div>
+              <div class="article-list-item-info-line"></div>
+              <!-- 评论 -->
+              <div class="article-list-item-info-label">
+                <icon-font type="ali-icon-yipinglun" />
+                <span class="article-list-item-info-labeltxt">{{
+                  item.commentCount
+                }}</span>
+              </div>
+              <!-- 工种 -->
+              <div class="article-list-item-info-engineeringWork">
+                {{ item.engineeringWork | formateEngineeringWorkTypeFun }}
+              </div>
+            </div>
+            <div class="article-list-item-info-right">
+              <a-button type="danger" @click="handleDeleteArticleItem(item)"
+                >删除文章</a-button
+              >
+            </div>
+          </div>
+        </div>
+        <!-- 分页 -->
+        <a-pagination
+          class="article-pagination"
+          v-model="pagination.current"
+          :pageSize="pagination.pageSize"
+          :total.sync="pagination.total"
+          show-less-items
+          show-quick-jumper
+          @change="onChangePagesize"
+        />
+      </div>
+    </a-spin>
   </div>
 </template>
 
 <script>
+import {
+  ENGINEERING_WORK_LIST,
+  EXAM_QUESTION_TYPE,
+  EXAM_QUESTION_TYPE_CONDITION,
+} from '@/common/Constant';
+import { ARTICLELIST } from '@/common/resData';
 export default {
   name: 'articleCreate',
   props: {},
-  components: {
-    // components: (reslove) => {
-    // require(['', reslove]);
-    // }
-  },
+  components: {},
   data() {
-    return {};
+    return {
+      loading: false, // 是否展示加载动画
+      examQuestionType: [], // 题目类型列表
+      checkedExamQuestionType: '', // 所选题目类型
+      examQuestionTypeCondition: [], // 题目类别列表
+      checkedExamQuestionTypeCondition: '', // 所选题目类别
+      engineeringWorkList: [], // 工种数据列表
+      engineeringWorkChooseValue: '', // 所选工种
+      articleList: [], // 文章列表数据
+      pagination: {
+        pageSize: 7,
+        current: 1,
+        total: 0,
+      }, // 分页参数
+    };
   },
   created() {
     this.initDataFun(); //初始化数据
@@ -30,11 +158,171 @@ export default {
   computed: {},
   methods: {
     //初始化数据
-    initDataFun() {},
+    initDataFun() {
+      // 题目分类
+      this.examQuestionType = [
+        { name: '全部', code: '' },
+        ...EXAM_QUESTION_TYPE,
+      ];
+      this.checkedExamQuestionType = this.examQuestionType[0].code;
+      // 题目类别
+      this.examQuestionTypeCondition = [
+        { name: '全部', code: '' },
+        ...EXAM_QUESTION_TYPE_CONDITION,
+      ];
+      this.checkedExamQuestionTypeCondition = this.examQuestionTypeCondition[0].code;
+      // 工种类别
+      this.engineeringWorkList = [
+        { name: '全部', code: '' },
+        ...ENGINEERING_WORK_LIST,
+      ];
+      this.engineeringWorkChooseValue = this.engineeringWorkList[0].code;
+      this.getArticleListFun();
+    },
+    // 查询:文章列表数据
+    getArticleListFun() {
+      this.loading = true;
+      this.articleList = ARTICLELIST.data;
+      this.pagination.total = this.articleList.length;
+      setTimeout(() => {
+        this.loading = false;
+      }, 1500);
+      // let params = {
+      //   questionType: this.checkedExamQuestionType,
+      //   questionTypeCondition: this.checkedExamQuestionTypeCondition,
+      //   engineeringWork: this.engineeringWorkChooseValue,
+      //   page: this.pagination.current,
+      //   size: this.pagination.pageSize,
+      // };
+      // this.$_http
+      //   .get(this.$_API.INTERFACE_GET_ARTICLE_LIST, { params })
+      //   .then((res) => {
+      //     console.log(res);
+      //     this.articleList = res.data;
+      //     this.pagination.total = res.pagination.total;
+      //     this.loading = false;
+      //   })
+      //   .catch((err) => {
+      //     console.log(err);
+      //     this.loading = false;
+      //   });
+    },
+    // 操作:选择某个题目类型
+    handleExamQuestionTypeFun(item) {
+      if (this.checkedExamQuestionType === item.code) {
+        return;
+      }
+      this.checkedExamQuestionType = item.code;
+      this.getArticleListFun(); // 查询:文章列表数据
+    },
+    // 操作:选择某个题目类别
+    handleExamQuestionTypeConditionFun(item) {
+      if (this.checkedExamQuestionTypeCondition === item.code) {
+        return;
+      }
+      this.checkedExamQuestionTypeCondition = item.code;
+      this.getArticleListFun(); // 查询:文章列表数据
+    },
+    // 操作:选择了某个工种
+    handleChangeEngineeringWorkValue() {
+      this.getArticleListFun(); // 查询:文章列表数据
+    },
+    // 操作:删除文章
+    handleDeleteArticleItem(item) {
+      console.log('点击了删除文章', item);
+      // let that = this;
+      this.$confirm({
+        title: '删除文章',
+        content: `确认删除文章(${item.name})吗?`,
+        okText: '确认',
+        cancelText: '取消',
+        onOk() {
+          // this.loading = true;
+          // let params = {
+          //   id: item.id,
+          // };
+          // that.$_http
+          //   .post(that.$_API.INTERFACE_POST_ARTICLE_DELETE, params)
+          //   .then((res) => {
+          //     console.log(res);
+          //     this.loading = false;
+          //   })
+          //   .catch((err) => {
+          //     console.log(err);
+          //     this.loading = false;
+          //   });
+        },
+        onCancel() {},
+      });
+    },
+    // 操作:切换页码
+    onChangePagesize() {
+      this.getArticleListFun(); // 查询:文章列表数据
+    },
   },
 };
 </script>
 
 <style lang="less"></style>
 
-<style lang="less" scoped></style>
+<style lang="less" scoped>
+@import '~@/styles/common/variable.less';
+.app-container {
+  overflow-y: auto;
+  .article-list-item {
+    width: 100%;
+    padding-bottom: @paddingMarginVal;
+    border-bottom: 1px solid @mainColorBorder;
+    .article-list-item-title {
+      font-size: 20px;
+      color: @mainColorBlack85;
+    }
+    .article-list-item-contgents {
+      margin-top: @paddingMarginVal;
+      font-size: 16px;
+      color: @mainColorBlack65;
+    }
+    .article-list-item-createtime {
+      margin-top: @paddingMarginVal;
+      font-size: 14px;
+      color: @mainColorBlack25;
+    }
+    .article-list-item-info {
+      margin-top: @paddingMarginVal;
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      .article-list-item-info-left {
+        display: flex;
+        align-items: center;
+        .article-list-item-info-label {
+          font-size: 14px;
+          color: @mainColorBlack45;
+          display: flex;
+          align-items: center;
+          .article-list-item-info-labeltxt {
+            margin-left: 6px;
+          }
+        }
+        .article-list-item-info-line {
+          margin: 0 10px;
+          height: 12px;
+          width: 1px;
+          background-color: @mainColorBlack25;
+        }
+        .article-list-item-info-engineeringWork {
+          font-size: 14px;
+          color: @mainColorBlack65;
+          margin-left: 10px;
+        }
+      }
+    }
+  }
+  .article-list-item-paddingTop {
+    padding-top: @paddingMarginVal;
+  }
+  .article-pagination {
+    margin-top: @paddingMarginVal;
+  }
+}
+</style>

+ 187 - 0
src/views/engineeringWorkManagement/engineeringWorkList.vue

@@ -0,0 +1,187 @@
+<template>
+  <div class="app-container">
+    <div class="common-card">
+      <!-- 新建工种 -->
+      <div class="engineeringWork-create">
+        <div class="engineeringWork-create-title">新建工种</div>
+        <div class="engineeringWork-create-edit">
+          <div class="engineeringWork-create-none"></div>
+          <div class="engineeringWork-create-input">
+            <span>工种名称:</span>
+            <a-input
+              v-model.trim="engineeringWorkName"
+              placeholder="请输入工种名称"
+            />
+          </div>
+          <a-button
+            type="primary"
+            :disabled="!engineeringWorkName.length"
+            @click="engineeringWorkCreateFun"
+            >新建</a-button
+          >
+        </div>
+      </div>
+    </div>
+    <div class="common-card a-card-margin-top">
+      <!-- 已有工种 -->
+      <div class="engineeringWork-list">
+        <div class="engineeringWork-list-title">已有工种</div>
+        <a-table
+          :columns="columns"
+          :row-key="(record) => record.code"
+          :data-source="tableData"
+          :pagination="false"
+        >
+          <a
+            slot="action"
+            slot-scope="text, record"
+            @click="engineeringWorkDelete(record)"
+            >删除</a
+          >
+        </a-table>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { ENGINEERING_WORK_LIST } from '@/common/Constant';
+// import { pathParams } from '@/filters';
+export default {
+  name: 'engineeringWorkList',
+  props: {},
+  components: {},
+  data() {
+    return {
+      engineeringWorkName: '', // 新建工种的名称
+      columns: [], // 表单配置
+      tableData: [], // 列表数据
+    };
+  },
+  created() {
+    this.initDataFun(); //初始化数据
+  },
+  mounted() {},
+  beforeDestroy() {},
+  watch: {},
+  computed: {},
+  methods: {
+    //初始化数据
+    initDataFun() {
+      // 表单配置
+      this.columns = [
+        {
+          title: '工种类别',
+          dataIndex: 'name',
+          key: 'name',
+        },
+        {
+          title: '操作',
+          key: 'action',
+          scopedSlots: { customRender: 'action' },
+          width: 150,
+        },
+      ];
+      this.getTableListFun(); // 查询:工种列表
+    },
+    // 查询:工种列表
+    getTableListFun() {
+      this.tableData = ENGINEERING_WORK_LIST;
+      // this.loading = true;
+      // this.$_http
+      //   .get(this.$_API.INTERFACE_GET_ENGINEERINGWORK_LIST)
+      //   .then((res) => {
+      //     console.log(res);
+      //     this.tableData = res.data;
+      //     this.loading = false;
+      //   })
+      //   .catch((err) => {
+      //     console.log(err);
+      //     this.loading = false;
+      //   });
+    },
+    // 操作:新建工种
+    engineeringWorkCreateFun() {
+      this.engineeringWorkName = '';
+      this.$message.success('新建工种成功');
+      // this.loading = true;
+      // let params = {
+      //   name: this.engineeringWorkName,
+      // };
+      // this.$_http
+      //   .post(this.$_API.INTERFACE_GET_ENGINEERINGWORK_LIST, params)
+      //   .then((res) => {
+      //     console.log(res);
+      //     this.engineeringWorkName = '';
+      //     this.loading = false;
+      //     this.$message.success('新建工种成功');
+      //   })
+      //   .catch(() => {
+      //     this.loading = false;
+      //   });
+    },
+    // 操作:删除工种
+    engineeringWorkDelete(record) {
+      console.log('删除', record);
+      this.$message.success('删除工种成功');
+      // this.loading = true;
+      // let params = {
+      //   engineertypeid: record.id,
+      // };
+      // this.$_http
+      //   .delete(
+      //     pathParams(this.$_API.INTERFACE_DELETE_ENGINEERINGWORK_DELETE, params)
+      //   )
+      //   .then((res) => {
+      //     console.log(res);
+      //     this.loading = false;
+      //     this.$message.success('删除工种成功');
+      //   })
+      //   .catch(() => {
+      //     this.loading = false;
+      //   });
+    },
+  },
+};
+</script>
+
+<style lang="less"></style>
+
+<style lang="less" scoped>
+@import '~@/styles/common/variable.less';
+.app-container {
+  overflow-y: auto;
+  .engineeringWork-create {
+    width: 100%;
+    .engineeringWork-create-title {
+      font-size: 18px;
+      font-weight: bold;
+      color: @mainColorBlack85;
+    }
+    .engineeringWork-create-edit {
+      display: flex;
+      .engineeringWork-create-none {
+        width: 100px;
+      }
+      .engineeringWork-create-input {
+        margin-right: 50px;
+        display: flex;
+        align-items: center;
+        > span {
+          font-size: 14px;
+          flex-wrap: nowrap;
+          white-space: nowrap;
+        }
+      }
+    }
+  }
+  .engineeringWork-list {
+    .engineeringWork-list-title {
+      margin-bottom: @paddingMarginVal;
+      font-size: 18px;
+      font-weight: bold;
+      color: @mainColorBlack85;
+    }
+  }
+}
+</style>

+ 2 - 2
src/views/examManagement/examManagementDetail.vue

@@ -239,12 +239,12 @@ export default {
         resData.forEach((item) => {
           EXAM_QUESTION_TYPE.forEach((it) => {
             if (item.questionType === it.code) {
-              item.questionTypeTxt = it.title;
+              item.questionTypeTxt = it.name;
             }
           });
           ENGINEERING_WORK_LIST.forEach((it) => {
             if (item.engineeringWork === it.code) {
-              item.engineeringWorkTxt = it.title;
+              item.engineeringWorkTxt = it.name;
             }
           });
         });

+ 5 - 5
src/views/examManagement/examManagementList.vue

@@ -14,7 +14,7 @@
               :key="index"
               @click="handleExamQuestionTypeFun(item)"
             >
-              {{ item.title }}
+              {{ item.name }}
             </li>
           </ul>
         </div>
@@ -31,7 +31,7 @@
               :key="index"
               :value="item.code"
             >
-              {{ item.title }}
+              {{ item.name }}
             </a-select-option>
           </a-select>
         </div>
@@ -161,7 +161,7 @@ export default {
     initDataFun() {
       this.loading = true;
       // 题目分类
-      this.examType = [{ title: '全部', code: '' }, ...EXAM_TYPE];
+      this.examType = [{ name: '全部', code: '' }, ...EXAM_TYPE];
       this.checkedExamType = this.examType[0].code;
 
       // 工种类别
@@ -277,7 +277,7 @@ export default {
           //   id: record.id,
           // };
           // that.$_http
-          //   .post(that.$_API.INTERFACE_POST_EXAMS_QUESTION_DELETE, params)
+          //   .delete(that.$_API.INTERFACE_DELETE_EXAMS_QUESTION_DELETE, params)
           //   .then((res) => {
           //     console.log(res);
           //   })
@@ -315,7 +315,7 @@ export default {
           that.selectedRowKeys = [];
           that.loading = false;
           // that.$_http
-          //   .post(that.$_API.INTERFACE_POST_EXAMS_QUESTION_DELETE_LIST, params)
+          //   .delete(that.$_API.INTERFACE_DELETE_EXAMS_QUESTION_DELETE_LIST, params)
           //   .then((res) => {
           //     console.log(res);
           //   })

+ 72 - 14
src/views/examManagement/examManualVolumeFormation.vue

@@ -127,7 +127,7 @@
                 :value="item.code"
                 v-for="(item, index) in examTypeList"
                 :key="index"
-                >{{ item.title }}</a-select-option
+                >{{ item.name }}</a-select-option
               >
             </a-select>
           </a-form-item>
@@ -154,7 +154,7 @@
                 :value="item.code"
                 v-for="(item, index) in engineeringWorkList"
                 :key="index"
-                >{{ item.title }}</a-select-option
+                >{{ item.name }}</a-select-option
               >
             </a-select>
           </a-form-item>
@@ -217,6 +217,19 @@
           <template slot="engineeringWork" slot-scope="text, record">
             <span>{{ record.engineeringWorkTxt }}</span>
           </template>
+          <template slot="grade" slot-scope="text, record">
+            <a-input
+              :value="record.grade"
+              type="number"
+              placeholder="输入分值"
+              :maxLength="3"
+              @change="
+                (e) => {
+                  handleCurrentGradeChange(e, record);
+                }
+              "
+            />
+          </template>
           <template slot="action" slot-scope="text, record">
             <a @click="toQuestionDetailFun(record)">详情</a>
             <a-divider type="vertical" />
@@ -240,7 +253,23 @@
                 :key="index"
                 @click="handleExamQuestionTypeFun(item)"
               >
-                {{ item.title }}
+                {{ item.name }}
+              </li>
+            </ul>
+          </div>
+          <div class="filter-condition-box a-card-margin-top">
+            <span>所属类别:</span>
+            <ul>
+              <li
+                :class="{
+                  checkedExamQuestionType:
+                    bank_checkedExamQuestionTypeCondition === item.code,
+                }"
+                v-for="(item, index) in bank_examQuestionTypeCondition"
+                :key="index"
+                @click="handleExamQuestionTypeConditionFun(item)"
+              >
+                {{ item.name }}
               </li>
             </ul>
           </div>
@@ -256,7 +285,7 @@
                 v-for="(item, index) in bank_engineeringWorkList"
                 :key="index"
                 :value="item.code"
-                >{{ item.title }}</a-select-option
+                >{{ item.name }}</a-select-option
               >
             </a-select>
           </div>
@@ -331,6 +360,7 @@ import {
   ENGINEERING_WORK_LIST,
   EXAM_TYPE,
   EXAM_QUESTION_TYPE,
+  EXAM_QUESTION_TYPE_CONDITION,
 } from '@/common/Constant';
 import { formateSeconds } from '@/filters';
 import { QUESTIONLISTRES } from '@/common/resData';
@@ -457,6 +487,8 @@ export default {
       // 题库列表
       bank_examQuestionType: [], // 题目类型列表
       bank_checkedExamQuestionType: '', // 所选题目类型
+      bank_examQuestionTypeCondition: [], // 题目类别列表
+      bank_checkedExamQuestionTypeCondition: '', // 所选题目类别
       bank_engineeringWorkList: [], // 工种数据列表
       bank_engineeringWorkChooseValue: '', // 所选工种
       bank_columns: [], // form表单的列参数
@@ -468,7 +500,7 @@ export default {
       }, // 分页参数
       bank_selectedRowKeys: [], // 多选的结果
       bank_tableGradesCount: 0, // 总分
-      disabledIdArr: [], // 不可选取的行数据Id
+      disabledIdArr: [], // 当前题目中已有的题目ID(即题库列表中不可选取的行数据Id
     };
   },
   created() {
@@ -534,7 +566,8 @@ export default {
           title: '分值',
           dataIndex: 'grade',
           key: 'grade',
-          width: 150,
+          scopedSlots: { customRender: 'grade' },
+          width: 100,
         },
         {
           title: '操作',
@@ -554,12 +587,12 @@ export default {
         resData.forEach((item) => {
           EXAM_QUESTION_TYPE.forEach((it) => {
             if (item.questionType === it.code) {
-              item.questionTypeTxt = it.title;
+              item.questionTypeTxt = it.name;
             }
           });
           ENGINEERING_WORK_LIST.forEach((it) => {
             if (item.engineeringWork === it.code) {
-              item.engineeringWorkTxt = it.title;
+              item.engineeringWorkTxt = it.name;
             }
           });
         });
@@ -592,6 +625,15 @@ export default {
       //     this.loading = false;
       //   });
     },
+    // 操作:修改分值
+    handleCurrentGradeChange(e, record) {
+      for (let i = 0; i < this.current_tableData.length; i++) {
+        if (this.current_tableData[i].id === record.id) {
+          this.$set(this.current_tableData[i], 'grade', Number(e.target.value));
+          break;
+        }
+      }
+    },
     // 操作:删除
     deleteCurrentTableQuestionFun(record) {
       let that = this;
@@ -663,13 +705,19 @@ export default {
     initBankTableFun() {
       // 题目分类
       this.bank_examQuestionType = [
-        { title: '全部', code: '' },
+        { name: '全部', code: '' },
         ...EXAM_QUESTION_TYPE,
       ];
       this.bank_checkedExamQuestionType = this.bank_examQuestionType[0].code;
+      // 题目类别
+      this.bank_examQuestionTypeCondition = [
+        { name: '全部', code: '' },
+        ...EXAM_QUESTION_TYPE_CONDITION,
+      ];
+      this.bank_checkedExamQuestionTypeCondition = this.bank_examQuestionTypeCondition[0].code;
       // 工种类别
       this.bank_engineeringWorkList = [
-        { title: '全部', code: '' },
+        { name: '全部', code: '' },
         ...ENGINEERING_WORK_LIST,
       ];
       this.bank_engineeringWorkChooseValue = this.bank_engineeringWorkList[0].code;
@@ -719,12 +767,12 @@ export default {
           item.disabled = false;
           EXAM_QUESTION_TYPE.forEach((it) => {
             if (item.questionType === it.code) {
-              item.questionTypeTxt = it.title;
+              item.questionTypeTxt = it.name;
             }
           });
           ENGINEERING_WORK_LIST.forEach((it) => {
             if (item.engineeringWork === it.code) {
-              item.engineeringWorkTxt = it.title;
+              item.engineeringWorkTxt = it.name;
             }
           });
         });
@@ -741,6 +789,14 @@ export default {
       }
       this.bank_checkedExamQuestionType = item.code;
     },
+    // 操作:选择某个题目类别
+    handleExamQuestionTypeConditionFun(item) {
+      console.log('选择某个题目类别', item);
+      if (this.bank_checkedExamQuestionTypeCondition === item.code) {
+        return;
+      }
+      this.bank_checkedExamQuestionTypeCondition = item.code;
+    },
     // 操作:选择了某个工种
     handleChangeEngineeringWorkValue() {
       console.log('选择了某个工种', this.bank_engineeringWorkChooseValue);
@@ -779,7 +835,7 @@ export default {
       for (let i = 0; i < this.bank_tableData.length; i++) {
         let bankItem = this.bank_tableData[i];
         if (bankItem.id === record.id) {
-          this.current_tableData.push(bankItem);
+          this.current_tableData.push({ ...bankItem });
           break;
         }
       }
@@ -806,7 +862,7 @@ export default {
           that.bank_tableData.forEach((bankItem) => {
             that.bank_selectedRowKeys.forEach((id) => {
               if (bankItem.id === id) {
-                arr.push(bankItem);
+                arr.push({ ...bankItem });
               }
             });
           });
@@ -903,6 +959,8 @@ export default {
               values.examTimeLong.hours,
               values.examTimeLong.minutes
             ),
+            // questionListIds: this.disabledIdArr,
+            questionList: this.current_tableData,
           };
           this.httpQuestFun(params);
         }

+ 7 - 7
src/views/examQuestionManagement/examQuestionList.vue

@@ -14,7 +14,7 @@
               :key="index"
               @click="handleExamQuestionTypeFun(item)"
             >
-              {{ item.title }}
+              {{ item.name }}
             </li>
           </ul>
         </div>
@@ -31,7 +31,7 @@
               :key="index"
               :value="item.code"
             >
-              {{ item.title }}
+              {{ item.name }}
             </a-select-option>
           </a-select>
         </div>
@@ -147,7 +147,7 @@ export default {
       this.loading = true;
       // 题目分类
       this.examQuestionType = [
-        { title: '全部', code: '' },
+        { name: '全部', code: '' },
         ...EXAM_QUESTION_TYPE,
       ];
       this.checkedExamQuestionType = this.examQuestionType[0].code;
@@ -212,12 +212,12 @@ export default {
         resData.forEach((item) => {
           EXAM_QUESTION_TYPE.forEach((it) => {
             if (item.questionType === it.code) {
-              item.questionTypeTxt = it.title;
+              item.questionTypeTxt = it.name;
             }
           });
           ENGINEERING_WORK_LIST.forEach((it) => {
             if (item.engineeringWork === it.code) {
-              item.engineeringWorkTxt = it.title;
+              item.engineeringWorkTxt = it.name;
             }
           });
         });
@@ -271,7 +271,7 @@ export default {
           //   id: record.id,
           // };
           // that.$_http
-          //   .post(that.$_API.INTERFACE_POST_EXAMS_QUESTION_DELETE, params)
+          //   .delete(that.$_API.INTERFACE_DELETE_EXAMS_QUESTION_DELETE, params)
           //   .then((res) => {
           //     console.log(res);
           //   })
@@ -311,7 +311,7 @@ export default {
             that.loading = false;
           }, 1500);
           // that.$_http
-          //   .post(that.$_API.INTERFACE_POST_EXAMS_QUESTION_DELETE_LIST, params)
+          //   .delete(that.$_API.INTERFACE_DELETE_EXAMS_QUESTION_DELETE_LIST, params)
           //   .then((res) => {
           //     console.log(res);
           //   })

+ 187 - 0
src/views/examQuestionManagement/examQuestionType.vue

@@ -0,0 +1,187 @@
+<template>
+  <div class="app-container">
+    <div class="common-card">
+      <!-- 新建类别 -->
+      <div class="engineeringWork-create">
+        <div class="engineeringWork-create-title">新建类别</div>
+        <div class="engineeringWork-create-edit">
+          <div class="engineeringWork-create-none"></div>
+          <div class="engineeringWork-create-input">
+            <span>类别名称:</span>
+            <a-input
+              v-model.trim="engineeringWorkName"
+              placeholder="请输入题目类别"
+            />
+          </div>
+          <a-button
+            type="primary"
+            :disabled="!engineeringWorkName.length"
+            @click="engineeringWorkCreateFun"
+            >新建</a-button
+          >
+        </div>
+      </div>
+    </div>
+    <div class="common-card a-card-margin-top">
+      <!-- 已有类别 -->
+      <div class="engineeringWork-list">
+        <div class="engineeringWork-list-title">已有类别</div>
+        <a-table
+          :columns="columns"
+          :row-key="(record) => record.code"
+          :data-source="tableData"
+          :pagination="false"
+        >
+          <a
+            slot="action"
+            slot-scope="text, record"
+            @click="engineeringWorkDelete(record)"
+            >删除</a
+          >
+        </a-table>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { EXAM_QUESTION_TYPE_CONDITION } from '@/common/Constant';
+// import { pathParams } from '@/filters';
+export default {
+  name: 'examQuestionType',
+  props: {},
+  components: {},
+  data() {
+    return {
+      engineeringWorkName: '', // 新建题目类别的名称
+      columns: [], // 表单配置
+      tableData: [], // 列表数据
+    };
+  },
+  created() {
+    this.initDataFun(); //初始化数据
+  },
+  mounted() {},
+  beforeDestroy() {},
+  watch: {},
+  computed: {},
+  methods: {
+    //初始化数据
+    initDataFun() {
+      // 表单配置
+      this.columns = [
+        {
+          title: '题目类别',
+          dataIndex: 'name',
+          key: 'name',
+        },
+        {
+          title: '操作',
+          key: 'action',
+          scopedSlots: { customRender: 'action' },
+          width: 150,
+        },
+      ];
+      this.getTableListFun(); // 查询:题目列表
+    },
+    // 查询:题目类别列表
+    getTableListFun() {
+      this.tableData = EXAM_QUESTION_TYPE_CONDITION;
+      // this.loading = true;
+      // this.$_http
+      //   .get(this.$_API.INTERFACE_GET_EXAMS_QUESTION_TYPE)
+      //   .then((res) => {
+      //     console.log(res);
+      //     this.tableData = res.data;
+      //     this.loading = false;
+      //   })
+      //   .catch((err) => {
+      //     console.log(err);
+      //     this.loading = false;
+      //   });
+    },
+    // 操作:新建题目类别
+    engineeringWorkCreateFun() {
+      this.engineeringWorkName = '';
+      this.$message.success('新建题目类别成功');
+      // this.loading = true;
+      // let params = {
+      //   name: this.engineeringWorkName,
+      // };
+      // this.$_http
+      //   .post(this.$_API.INTERFACE_POST_EXAMS_QUESTION_TYPE_CREATE, params)
+      //   .then((res) => {
+      //     console.log(res);
+      //     this.engineeringWorkName = '';
+      //     this.loading = false;
+      //     this.$message.success('新建题目成功');
+      //   })
+      //   .catch(() => {
+      //     this.loading = false;
+      //   });
+    },
+    // 操作:删除题目类别
+    engineeringWorkDelete(record) {
+      console.log('删除', record);
+      this.$message.success('删除题目类别成功');
+      // this.loading = true;
+      // let params = {
+      //   categoryId: record.id,
+      // };
+      // this.$_http
+      //   .delete(
+      //     pathParams(this.$_API.INTERFACE_POST_EXAMS_QUESTION_TYPE_DELETE, params)
+      //   )
+      //   .then((res) => {
+      //     console.log(res);
+      //     this.loading = false;
+      //     this.$message.success('删除题目类别成功');
+      //   })
+      //   .catch(() => {
+      //     this.loading = false;
+      //   });
+    },
+  },
+};
+</script>
+
+<style lang="less"></style>
+
+<style lang="less" scoped>
+@import '~@/styles/common/variable.less';
+.app-container {
+  overflow-y: auto;
+  .engineeringWork-create {
+    width: 100%;
+    .engineeringWork-create-title {
+      font-size: 18px;
+      font-weight: bold;
+      color: @mainColorBlack85;
+    }
+    .engineeringWork-create-edit {
+      display: flex;
+      .engineeringWork-create-none {
+        width: 100px;
+      }
+      .engineeringWork-create-input {
+        margin-right: 50px;
+        display: flex;
+        align-items: center;
+        > span {
+          font-size: 14px;
+          flex-wrap: nowrap;
+          white-space: nowrap;
+        }
+      }
+    }
+  }
+  .engineeringWork-list {
+    .engineeringWork-list-title {
+      margin-bottom: @paddingMarginVal;
+      font-size: 18px;
+      font-weight: bold;
+      color: @mainColorBlack85;
+    }
+  }
+}
+</style>

+ 2 - 2
src/views/examQuestionManagement/examQusetionCreateGapFilling.vue

@@ -101,7 +101,7 @@
                 v-for="(item, index) in engineeringWorkList"
                 :key="index"
               >
-                {{ item.title }}
+                {{ item.name }}
               </a-select-option>
             </a-select>
           </a-form-item>
@@ -152,7 +152,7 @@ export default {
     initDataFun() {
       // 工种类别
       this.engineeringWorkList = [
-        { title: '不限工种', code: '' },
+        { name: '不限工种', code: '' },
         ...ENGINEERING_WORK_LIST,
       ];
       this.engineeringWorkChooseValue = this.engineeringWorkList[0].code;

+ 2 - 2
src/views/examQuestionManagement/examQusetionCreateMultiple.vue

@@ -134,7 +134,7 @@
                 v-for="(item, index) in engineeringWorkList"
                 :key="index"
               >
-                {{ item.title }}
+                {{ item.name }}
               </a-select-option>
             </a-select>
           </a-form-item>
@@ -186,7 +186,7 @@ export default {
     initDataFun() {
       // 工种类别
       this.engineeringWorkList = [
-        { title: '不限工种', code: '' },
+        { name: '不限工种', code: '' },
         ...ENGINEERING_WORK_LIST,
       ];
       this.engineeringWorkChooseValue = this.engineeringWorkList[0].code;

+ 2 - 2
src/views/examQuestionManagement/examQusetionCreateSingle.vue

@@ -127,7 +127,7 @@
                 v-for="(item, index) in engineeringWorkList"
                 :key="index"
               >
-                {{ item.title }}
+                {{ item.name }}
               </a-select-option>
             </a-select>
           </a-form-item>
@@ -179,7 +179,7 @@ export default {
     initDataFun() {
       // 工种类别
       this.engineeringWorkList = [
-        { title: '不限工种', code: '' },
+        { name: '不限工种', code: '' },
         ...ENGINEERING_WORK_LIST,
       ];
       this.engineeringWorkChooseValue = this.engineeringWorkList[0].code;

+ 2 - 2
src/views/examQuestionManagement/examQusetionCreateTrueOrFalse.vue

@@ -126,7 +126,7 @@
                 v-for="(item, index) in engineeringWorkList"
                 :key="index"
               >
-                {{ item.title }}
+                {{ item.name }}
               </a-select-option>
             </a-select>
           </a-form-item>
@@ -178,7 +178,7 @@ export default {
     initDataFun() {
       // 工种类别
       this.engineeringWorkList = [
-        { title: '不限工种', code: '' },
+        { name: '不限工种', code: '' },
         ...ENGINEERING_WORK_LIST,
       ];
       this.engineeringWorkChooseValue = this.engineeringWorkList[0].code;