Tang 1 жил өмнө
parent
commit
ff4f8b9e2f
100 өөрчлөгдсөн 791 нэмэгдсэн , 129 устгасан
  1. 345 45
      package-lock.json
  2. 1 0
      package.json
  3. 16 2
      src/apis/course.js
  4. BIN
      src/assets/contact.png
  5. BIN
      src/assets/dd.png
  6. BIN
      src/assets/favicon.ico
  7. BIN
      src/assets/kc.png
  8. 0 0
      src/assets/new1/backTop.png
  9. 0 0
      src/assets/new1/bkzd.png
  10. BIN
      src/assets/new1/ch.png
  11. 0 0
      src/assets/new1/cjwt.png
  12. BIN
      src/assets/new1/course.png
  13. BIN
      src/assets/new1/courseBGC.png
  14. BIN
      src/assets/new1/cyhz.png
  15. 0 0
      src/assets/new1/dlgg.png
  16. BIN
      src/assets/new1/hxx.png
  17. BIN
      src/assets/new1/jxsl.png
  18. 0 0
      src/assets/new1/kcst.png
  19. BIN
      src/assets/new1/khc.png
  20. 0 0
      src/assets/new1/ksrl.png
  21. BIN
      src/assets/new1/liveBGC.png
  22. BIN
      src/assets/new1/mym.png
  23. BIN
      src/assets/new1/ppsl.png
  24. BIN
      src/assets/new1/rspz.png
  25. 0 0
      src/assets/new1/search-white.png
  26. 0 0
      src/assets/new1/search.png
  27. 0 0
      src/assets/new1/shoppingcar.png
  28. 0 0
      src/assets/new1/sztd.png
  29. BIN
      src/assets/new1/sztd1.png
  30. BIN
      src/assets/new1/tenzz.png
  31. 0 0
      src/assets/new1/tjbank.png
  32. 0 0
      src/assets/new1/tjkc.png
  33. BIN
      src/assets/new1/tkbank.png
  34. 0 0
      src/assets/new1/wechat.png
  35. 0 0
      src/assets/new1/wechat2.png
  36. 0 0
      src/assets/new1/xcx.png
  37. BIN
      src/assets/new1/xfk.png
  38. BIN
      src/assets/new1/zlps.png
  39. 0 0
      src/assets/new1/zshktj.png
  40. 0 0
      src/assets/new1/zxrx.png
  41. BIN
      src/assets/new1/zyjn.png
  42. BIN
      src/assets/new1/zykz.png
  43. BIN
      src/assets/new1/zzhteacher.png
  44. BIN
      src/assets/new1/产业合作.png
  45. BIN
      src/assets/new1/人社批准.png
  46. BIN
      src/assets/new1/会员商城banner – 1.jpg
  47. BIN
      src/assets/new1/会员商城banner.png
  48. BIN
      src/assets/new1/十年专注.png
  49. BIN
      src/assets/new1/品牌实力.png
  50. BIN
      src/assets/new1/师资团队1.png
  51. BIN
      src/assets/new1/徐福康.png
  52. BIN
      src/assets/new1/教学实力.png
  53. BIN
      src/assets/new1/朱培浩.png
  54. BIN
      src/assets/new1/职业技能.png
  55. BIN
      src/assets/new1/职业考证.png
  56. BIN
      src/assets/new1/胡欣欣.png
  57. BIN
      src/assets/new1/课程.png
  58. BIN
      src/assets/new1/课程banner – 1.jpg
  59. BIN
      src/assets/new1/课程banner.png
  60. BIN
      src/assets/new1/资料.png
  61. BIN
      src/assets/new1/邝穗春.png
  62. BIN
      src/assets/new1/陈红.png
  63. BIN
      src/assets/new1/题库.png
  64. BIN
      src/assets/new1/马英明.png
  65. BIN
      src/assets/tk.png
  66. BIN
      src/assets/zzzs/2018A1.jpg
  67. BIN
      src/assets/zzzs/2018A2.jpg
  68. BIN
      src/assets/zzzs/2018A3.jpg
  69. BIN
      src/assets/zzzs/2018A4.jpg
  70. BIN
      src/assets/zzzs/2018A5.jpg
  71. BIN
      src/assets/zzzs/2018A6.jpg
  72. BIN
      src/assets/zzzs/2018A7.jpg
  73. BIN
      src/assets/zzzs/2018A8.jpg
  74. BIN
      src/assets/zzzs/2019A1.jpg
  75. 0 0
      src/assets/zzzs/bxxkz-zb.jpg
  76. 0 0
      src/assets/zzzs/djz.jpg
  77. 0 0
      src/assets/zzzs/facesbrzzs.jpg
  78. 0 0
      src/assets/zzzs/hjgltxrz.jpg
  79. 0 0
      src/assets/zzzs/zlgltxrz.jpg
  80. 0 0
      src/assets/zzzs/zyhjaqgktxrz.jpg
  81. 0 0
      src/assets/zzzs/zzqyzhjyxtrzzs.jpg
  82. 0 0
      src/assets/zzzs/zzyxtptrzzs1.jpg
  83. 0 0
      src/assets/zzzs/zzyxtptrzzs2.jpg
  84. 0 0
      src/assets/zzzs/zzzhkcrzzs.jpg
  85. 0 0
      src/assets/zzzs/zzzhkcrzzs1.jpg
  86. 0 0
      src/assets/zzzs/zzzhkcrzzs2.jpg
  87. 0 0
      src/assets/zzzs/zzzhkcrzzs3-3.jpg
  88. 0 0
      src/assets/zzzs/zzzhkcrzzs3.jpg
  89. 4 1
      src/axios.js
  90. 7 5
      src/common/uploadFile.js
  91. 42 1
      src/components/dataReview/index.vue
  92. 18 11
      src/components/footer2/index.vue
  93. 6 6
      src/components/header1/index.vue
  94. 13 6
      src/components/header2/index.vue
  95. 4 4
      src/components/listOption2/index.vue
  96. 3 3
      src/components/login/index.vue
  97. 200 0
      src/components/preference/index.vue
  98. 4 3
      src/components/takePicture/index.vue
  99. 42 16
      src/components/toolbar/index.vue
  100. 86 26
      src/components/videoCy/index.vue

+ 345 - 45
package-lock.json

@@ -257,6 +257,11 @@
         }
       }
     },
+    "address": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmmirror.com/address/-/address-1.2.2.tgz",
+      "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA=="
+    },
     "adler-32": {
       "version": "1.3.1",
       "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz",
@@ -351,6 +356,90 @@
       "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
       "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ=="
     },
+    "ali-oss": {
+      "version": "6.18.1",
+      "resolved": "https://registry.npmmirror.com/ali-oss/-/ali-oss-6.18.1.tgz",
+      "integrity": "sha512-VsptD0jX3JNc3AjiLs5a9oTP0ArfT9IYhBuY6G/SpuY6LMuiwfqywrAosY65BlHKODAdYy8VWL6kmt0mO7BUGA==",
+      "requires": {
+        "address": "^1.2.2",
+        "agentkeepalive": "^3.4.1",
+        "bowser": "^1.6.0",
+        "copy-to": "^2.0.1",
+        "dateformat": "^2.0.0",
+        "debug": "^4.3.4",
+        "destroy": "^1.0.4",
+        "end-or-error": "^1.0.1",
+        "get-ready": "^1.0.0",
+        "humanize-ms": "^1.2.0",
+        "is-type-of": "^1.4.0",
+        "js-base64": "^2.5.2",
+        "jstoxml": "^2.0.0",
+        "merge-descriptors": "^1.0.1",
+        "mime": "^2.4.5",
+        "platform": "^1.3.1",
+        "pump": "^3.0.0",
+        "sdk-base": "^2.0.1",
+        "stream-http": "2.8.2",
+        "stream-wormhole": "^1.0.4",
+        "urllib": "2.41.0",
+        "utility": "^1.18.0",
+        "xml2js": "^0.6.2"
+      },
+      "dependencies": {
+        "agentkeepalive": {
+          "version": "3.5.2",
+          "resolved": "https://registry.npmmirror.com/agentkeepalive/-/agentkeepalive-3.5.2.tgz",
+          "integrity": "sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ==",
+          "requires": {
+            "humanize-ms": "^1.2.1"
+          }
+        },
+        "debug": {
+          "version": "4.3.4",
+          "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz",
+          "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+          "requires": {
+            "ms": "2.1.2"
+          }
+        },
+        "js-base64": {
+          "version": "2.6.4",
+          "resolved": "https://registry.npmmirror.com/js-base64/-/js-base64-2.6.4.tgz",
+          "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ=="
+        },
+        "mime": {
+          "version": "2.6.0",
+          "resolved": "https://registry.npmmirror.com/mime/-/mime-2.6.0.tgz",
+          "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg=="
+        },
+        "ms": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz",
+          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+        },
+        "pump": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmmirror.com/pump/-/pump-3.0.0.tgz",
+          "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+          "requires": {
+            "end-of-stream": "^1.1.0",
+            "once": "^1.3.1"
+          }
+        },
+        "stream-http": {
+          "version": "2.8.2",
+          "resolved": "https://registry.npmmirror.com/stream-http/-/stream-http-2.8.2.tgz",
+          "integrity": "sha512-QllfrBhqF1DPcz46WxKTs6Mz1Bpc+8Qm6vbqOpVav5odAXwbyzwnEczoWqtxrsmlO+cJqtPrp/8gWKWjaKLLlA==",
+          "requires": {
+            "builtin-status-codes": "^3.0.0",
+            "inherits": "^2.0.1",
+            "readable-stream": "^2.3.6",
+            "to-arraybuffer": "^1.0.0",
+            "xtend": "^4.0.0"
+          }
+        }
+      }
+    },
     "align-text": {
       "version": "0.1.4",
       "resolved": "https://registry.npmmirror.com/align-text/-/align-text-0.1.4.tgz",
@@ -400,6 +489,11 @@
         "color-convert": "^1.9.0"
       }
     },
+    "any-promise": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmmirror.com/any-promise/-/any-promise-1.3.0.tgz",
+      "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="
+    },
     "anymatch": {
       "version": "3.1.3",
       "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz",
@@ -2157,6 +2251,11 @@
       "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
       "dev": true
     },
+    "bowser": {
+      "version": "1.9.4",
+      "resolved": "https://registry.npmmirror.com/bowser/-/bowser-1.9.4.tgz",
+      "integrity": "sha512-9IdMmj2KjigRq6oWhmwv1W36pDuA4STQZ8q6YO9um+x07xgYNCD3Oou+WP/3L1HNz7iqythGet3/p4wvc8AAwQ=="
+    },
     "brace-expansion": {
       "version": "1.1.11",
       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -2346,8 +2445,7 @@
     "builtin-status-codes": {
       "version": "3.0.0",
       "resolved": "https://registry.npmmirror.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
-      "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==",
-      "dev": true
+      "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ=="
     },
     "bytes": {
       "version": "3.1.2",
@@ -2469,7 +2567,6 @@
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
       "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
-      "dev": true,
       "requires": {
         "function-bind": "^1.1.1",
         "get-intrinsic": "^1.0.2"
@@ -3024,8 +3121,7 @@
     "content-type": {
       "version": "1.0.5",
       "resolved": "https://registry.npmmirror.com/content-type/-/content-type-1.0.5.tgz",
-      "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
-      "dev": true
+      "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="
     },
     "convert-source-map": {
       "version": "1.8.0",
@@ -3067,6 +3163,11 @@
       "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==",
       "dev": true
     },
+    "copy-to": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/copy-to/-/copy-to-2.0.1.tgz",
+      "integrity": "sha512-3DdaFaU/Zf1AnpLiFDeNCD4TOWe3Zl2RZaTzUvWiIk5ERzcCodOE20Vqq4fzCbNoHURFHT4/us/Lfq+S2zyY4w=="
+    },
     "copy-webpack-plugin": {
       "version": "4.6.0",
       "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.6.0.tgz",
@@ -4144,6 +4245,11 @@
         "assert-plus": "^1.0.0"
       }
     },
+    "dateformat": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmmirror.com/dateformat/-/dateformat-2.2.0.tgz",
+      "integrity": "sha512-GODcnWq3YGoTnygPfi02ygEiRxqUxpJwuRHjdhJYuxpcZmDq4rjBiXYmbCCzStxo176ixfLT6i4NPwQooRySnw=="
+    },
     "de-indent": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz",
@@ -4154,7 +4260,6 @@
       "version": "2.6.9",
       "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
       "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-      "dev": true,
       "requires": {
         "ms": "2.0.0"
       }
@@ -4341,6 +4446,14 @@
       "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz",
       "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ=="
     },
+    "default-user-agent": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/default-user-agent/-/default-user-agent-1.0.0.tgz",
+      "integrity": "sha512-bDF7bg6OSNcSwFWPu4zYKpVkJZQYVrAANMYB8bc9Szem1D0yKdm4sa/rOCs2aC9+2GMqQ7KnwtZRvDhmLF0dXw==",
+      "requires": {
+        "os-name": "~1.0.3"
+      }
+    },
     "define-properties": {
       "version": "1.1.3",
       "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
@@ -4465,8 +4578,7 @@
     "destroy": {
       "version": "1.2.0",
       "resolved": "https://registry.npmmirror.com/destroy/-/destroy-1.2.0.tgz",
-      "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
-      "dev": true
+      "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg=="
     },
     "detect-indent": {
       "version": "4.0.0",
@@ -4502,6 +4614,11 @@
         }
       }
     },
+    "digest-header": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/digest-header/-/digest-header-1.1.0.tgz",
+      "integrity": "sha512-glXVh42vz40yZb9Cq2oMOt70FIoWiv+vxNvdKdU8CwjLad25qHM3trLxhl9bVjdr6WaslIXhWpn0NO8T/67Qjg=="
+    },
     "dir-glob": {
       "version": "2.2.2",
       "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz",
@@ -4679,8 +4796,7 @@
     "ee-first": {
       "version": "1.1.1",
       "resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz",
-      "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
-      "dev": true
+      "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
     },
     "ejs": {
       "version": "2.7.4",
@@ -4777,6 +4893,11 @@
         "once": "^1.4.0"
       }
     },
+    "end-or-error": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/end-or-error/-/end-or-error-1.0.1.tgz",
+      "integrity": "sha512-OclLMSug+k2A0JKuf494im25ANRBVW8qsjmwbgX7lQ8P82H21PQ1PWkoYwb9y5yMBS69BPlwtzdIFClo3+7kOQ=="
+    },
     "enhanced-resolve": {
       "version": "3.4.1",
       "resolved": "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz",
@@ -4987,8 +5108,7 @@
     "escape-html": {
       "version": "1.0.3",
       "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz",
-      "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
-      "dev": true
+      "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
     },
     "escape-string-regexp": {
       "version": "1.0.5",
@@ -5650,6 +5770,23 @@
         "mime-types": "^2.1.12"
       }
     },
+    "formstream": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmmirror.com/formstream/-/formstream-1.3.1.tgz",
+      "integrity": "sha512-FkW++ub+VbE5dpwukJVDizNWhSgp8FhmhI65pF7BZSVStBqe6Wgxe2Z9/Vhsn7l7nXCPwP+G1cyYlX8VwWOf0g==",
+      "requires": {
+        "destroy": "^1.0.4",
+        "mime": "^2.5.2",
+        "pause-stream": "~0.0.11"
+      },
+      "dependencies": {
+        "mime": {
+          "version": "2.6.0",
+          "resolved": "https://registry.npmmirror.com/mime/-/mime-2.6.0.tgz",
+          "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg=="
+        }
+      }
+    },
     "forwarded": {
       "version": "0.2.0",
       "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
@@ -5765,8 +5902,7 @@
     "function-bind": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
-      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
-      "dev": true
+      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
     },
     "function.prototype.name": {
       "version": "1.1.5",
@@ -5855,7 +5991,6 @@
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
       "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
-      "dev": true,
       "requires": {
         "function-bind": "^1.1.1",
         "has": "^1.0.3",
@@ -5872,6 +6007,11 @@
         "npm-conf": "^1.1.0"
       }
     },
+    "get-ready": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/get-ready/-/get-ready-1.0.0.tgz",
+      "integrity": "sha512-mFXCZPJIlcYcth+N8267+mghfYN9h3EhsDa6JSnbA3Wrhh/XFpuowviFcsDeYZtKspQyWyJqfs4O6P8CHeTwzw=="
+    },
     "get-stdin": {
       "version": "4.0.1",
       "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
@@ -6240,7 +6380,6 @@
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
       "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-      "dev": true,
       "requires": {
         "function-bind": "^1.1.1"
       }
@@ -6291,8 +6430,7 @@
     "has-symbols": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
-      "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
-      "dev": true
+      "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
     },
     "has-to-string-tag-x": {
       "version": "1.4.1",
@@ -6730,7 +6868,6 @@
       "version": "1.2.1",
       "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
       "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=",
-      "dev": true,
       "requires": {
         "ms": "^2.0.0"
       }
@@ -6739,7 +6876,6 @@
       "version": "0.4.24",
       "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
       "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
-      "dev": true,
       "requires": {
         "safer-buffer": ">= 2.1.2 < 3"
       }
@@ -7545,8 +7681,7 @@
     "ip": {
       "version": "1.1.5",
       "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
-      "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
-      "dev": true
+      "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo="
     },
     "ipaddr.js": {
       "version": "1.9.1",
@@ -7662,6 +7797,11 @@
       "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==",
       "dev": true
     },
+    "is-class-hotfix": {
+      "version": "0.0.6",
+      "resolved": "https://registry.npmmirror.com/is-class-hotfix/-/is-class-hotfix-0.0.6.tgz",
+      "integrity": "sha512-0n+pzCC6ICtVr/WXnN2f03TK/3BfXY7me4cjCAqT8TYXEl0+JBRoqBo94JJHXcyDSLUeWbNX8Fvy5g5RJdAstQ=="
+    },
     "is-color-stop": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz",
@@ -7761,8 +7901,7 @@
     "is-extendable": {
       "version": "0.1.1",
       "resolved": "https://registry.npmmirror.com/is-extendable/-/is-extendable-0.1.1.tgz",
-      "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
-      "dev": true
+      "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw=="
     },
     "is-extglob": {
       "version": "2.1.1",
@@ -7972,6 +8111,16 @@
         "has-symbols": "^1.0.2"
       }
     },
+    "is-type-of": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmmirror.com/is-type-of/-/is-type-of-1.4.0.tgz",
+      "integrity": "sha512-EddYllaovi5ysMLMEN7yzHEKh8A850cZ7pykrY1aNRQGn/CDjRDE9qEWbIdt7xGEVJmjBXzU/fNnC4ABTm8tEQ==",
+      "requires": {
+        "core-util-is": "^1.0.2",
+        "is-class-hotfix": "~0.0.6",
+        "isstream": "~0.1.2"
+      }
+    },
     "is-typed-array": {
       "version": "1.1.12",
       "resolved": "https://registry.npmmirror.com/is-typed-array/-/is-typed-array-1.1.12.tgz",
@@ -8034,8 +8183,7 @@
     "isstream": {
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
-      "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
-      "dev": true
+      "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
     },
     "isurl": {
       "version": "1.0.0",
@@ -8153,6 +8301,11 @@
         "verror": "1.10.0"
       }
     },
+    "jstoxml": {
+      "version": "2.2.9",
+      "resolved": "https://registry.npmmirror.com/jstoxml/-/jstoxml-2.2.9.tgz",
+      "integrity": "sha512-OYWlK0j+roh+eyaMROlNbS5cd5R25Y+IUpdl7cNdB8HNrkgwQzIS7L9MegxOiWNBj9dQhA/yAxiMwCC5mwNoBw=="
+    },
     "jszip": {
       "version": "3.10.1",
       "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz",
@@ -8675,8 +8828,7 @@
     "merge-descriptors": {
       "version": "1.0.1",
       "resolved": "https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
-      "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==",
-      "dev": true
+      "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
     },
     "merge-stream": {
       "version": "2.0.0",
@@ -9057,8 +9209,7 @@
     "ms": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
-      "dev": true
+      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
     },
     "multicast-dns": {
       "version": "6.2.3",
@@ -9076,6 +9227,16 @@
       "integrity": "sha512-cnAsSVxIDsYt0v7HmC0hWZFwwXSh+E6PgCrREDuN/EsjgLwA5XRmlMHhSiDPrt6HxY1gTivEa/Zh7GtODoLevQ==",
       "dev": true
     },
+    "mz": {
+      "version": "2.7.0",
+      "resolved": "https://registry.npmmirror.com/mz/-/mz-2.7.0.tgz",
+      "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+      "requires": {
+        "any-promise": "^1.0.0",
+        "object-assign": "^4.0.1",
+        "thenify-all": "^1.0.0"
+      }
+    },
     "nan": {
       "version": "2.15.0",
       "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz",
@@ -9848,8 +10009,7 @@
     "object-inspect": {
       "version": "1.12.0",
       "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz",
-      "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==",
-      "dev": true
+      "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g=="
     },
     "object-is": {
       "version": "1.1.5",
@@ -10077,12 +10237,29 @@
         "mem": "^1.1.0"
       }
     },
+    "os-name": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/os-name/-/os-name-1.0.3.tgz",
+      "integrity": "sha512-f5estLO2KN8vgtTRaILIgEGBoBrMnZ3JQ7W9TMZCnOIGwHe8TRGSpcagnWDo+Dfhd/z08k9Xe75hvciJJ8Qaew==",
+      "requires": {
+        "osx-release": "^1.0.0",
+        "win-release": "^1.0.0"
+      }
+    },
     "os-tmpdir": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
       "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
       "dev": true
     },
+    "osx-release": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/osx-release/-/osx-release-1.1.0.tgz",
+      "integrity": "sha512-ixCMMwnVxyHFQLQnINhmIpWqXIfS2YOXchwQrk+OFzmo6nDjQ0E4KXAyyUh0T0MZgV4bUhkRrAbVqlE4yLVq4A==",
+      "requires": {
+        "minimist": "^1.1.0"
+      }
+    },
     "ow": {
       "version": "0.17.0",
       "resolved": "https://registry.npmmirror.com/ow/-/ow-0.17.0.tgz",
@@ -10306,6 +10483,14 @@
         "pify": "^3.0.0"
       }
     },
+    "pause-stream": {
+      "version": "0.0.11",
+      "resolved": "https://registry.npmmirror.com/pause-stream/-/pause-stream-0.0.11.tgz",
+      "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==",
+      "requires": {
+        "through": "~2.3"
+      }
+    },
     "pbkdf2": {
       "version": "3.1.2",
       "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz",
@@ -10377,6 +10562,11 @@
         "find-up": "^2.1.0"
       }
     },
+    "platform": {
+      "version": "1.3.6",
+      "resolved": "https://registry.npmmirror.com/platform/-/platform-1.3.6.tgz",
+      "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg=="
+    },
     "pngquant-bin": {
       "version": "6.0.1",
       "resolved": "https://registry.npmmirror.com/pngquant-bin/-/pngquant-bin-6.0.1.tgz",
@@ -13038,7 +13228,6 @@
       "version": "6.11.2",
       "resolved": "https://registry.npmmirror.com/qs/-/qs-6.11.2.tgz",
       "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
-      "dev": true,
       "requires": {
         "side-channel": "^1.0.4"
       }
@@ -13703,8 +13892,7 @@
     "safer-buffer": {
       "version": "2.1.2",
       "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
-      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
-      "dev": true
+      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
     },
     "sass-graph": {
       "version": "4.0.0",
@@ -13877,8 +14065,7 @@
     "sax": {
       "version": "1.2.4",
       "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
-      "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
-      "dev": true
+      "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
     },
     "schema-utils": {
       "version": "0.3.0",
@@ -13913,6 +14100,14 @@
         }
       }
     },
+    "sdk-base": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/sdk-base/-/sdk-base-2.0.1.tgz",
+      "integrity": "sha512-eeG26wRwhtwYuKGCDM3LixCaxY27Pa/5lK4rLKhQa7HBjJ3U3Y+f81MMZQRsDw/8SC2Dao/83yJTXJ8aULuN8Q==",
+      "requires": {
+        "get-ready": "~1.0.0"
+      }
+    },
     "seek-bzip": {
       "version": "1.0.6",
       "resolved": "https://registry.npmmirror.com/seek-bzip/-/seek-bzip-1.0.6.tgz",
@@ -13941,8 +14136,7 @@
     "semver": {
       "version": "5.7.1",
       "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-      "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
-      "dev": true
+      "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
     },
     "semver-regex": {
       "version": "2.0.0",
@@ -14146,7 +14340,6 @@
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
       "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
-      "dev": true,
       "requires": {
         "call-bind": "^1.0.0",
         "get-intrinsic": "^1.0.2",
@@ -14668,6 +14861,11 @@
       "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
       "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ=="
     },
+    "stream-wormhole": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/stream-wormhole/-/stream-wormhole-1.1.0.tgz",
+      "integrity": "sha512-gHFfL3px0Kctd6Po0M8TzEvt3De/xu6cnRrjlfYNhwbhLPLwigI2t1nc6jrzNuaYg5C4YF78PPFuQPzRiqn9ew=="
+    },
     "strict-uri-encode": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
@@ -15151,6 +15349,22 @@
         "uuid": "^3.0.1"
       }
     },
+    "thenify": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npmmirror.com/thenify/-/thenify-3.3.1.tgz",
+      "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
+      "requires": {
+        "any-promise": "^1.0.0"
+      }
+    },
+    "thenify-all": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmmirror.com/thenify-all/-/thenify-all-1.6.0.tgz",
+      "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
+      "requires": {
+        "thenify": ">= 3.1.0 < 4"
+      }
+    },
     "throttle-debounce": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-1.1.0.tgz",
@@ -15159,9 +15373,7 @@
     "through": {
       "version": "2.3.8",
       "resolved": "https://registry.npmmirror.com/through/-/through-2.3.8.tgz",
-      "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
-      "dev": true,
-      "optional": true
+      "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg=="
     },
     "through2": {
       "version": "2.0.5",
@@ -15209,8 +15421,7 @@
     "to-arraybuffer": {
       "version": "1.0.1",
       "resolved": "https://registry.npmmirror.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
-      "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==",
-      "dev": true
+      "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA=="
     },
     "to-buffer": {
       "version": "1.1.1",
@@ -15573,6 +15784,24 @@
         }
       }
     },
+    "unescape": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/unescape/-/unescape-1.0.1.tgz",
+      "integrity": "sha512-O0+af1Gs50lyH1nUu3ZyYS1cRh01Q/kUKatTOkSs7jukXE6/NebucDVxyiDsA9AQ4JC1V1jUH9EO8JX2nMDgGQ==",
+      "requires": {
+        "extend-shallow": "^2.0.1"
+      },
+      "dependencies": {
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        }
+      }
+    },
     "union-value": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
@@ -15753,6 +15982,43 @@
       "dev": true,
       "optional": true
     },
+    "urllib": {
+      "version": "2.41.0",
+      "resolved": "https://registry.npmmirror.com/urllib/-/urllib-2.41.0.tgz",
+      "integrity": "sha512-pNXdxEv52L67jahLT+/7QE+Fup1y2Gc6EdmrAhQ6OpQIC2rl14oWwv9hvk1GXOZqEnJNwRXHABuwgPOs1CtL7g==",
+      "requires": {
+        "any-promise": "^1.3.0",
+        "content-type": "^1.0.2",
+        "debug": "^2.6.9",
+        "default-user-agent": "^1.0.0",
+        "digest-header": "^1.0.0",
+        "ee-first": "~1.1.1",
+        "formstream": "^1.1.0",
+        "humanize-ms": "^1.2.0",
+        "iconv-lite": "^0.4.15",
+        "ip": "^1.1.5",
+        "pump": "^3.0.0",
+        "qs": "^6.4.0",
+        "statuses": "^1.3.1",
+        "utility": "^1.16.1"
+      },
+      "dependencies": {
+        "pump": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmmirror.com/pump/-/pump-3.0.0.tgz",
+          "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+          "requires": {
+            "end-of-stream": "^1.1.0",
+            "once": "^1.3.1"
+          }
+        },
+        "statuses": {
+          "version": "1.5.0",
+          "resolved": "https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz",
+          "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA=="
+        }
+      }
+    },
     "use": {
       "version": "3.1.1",
       "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
@@ -15799,6 +16065,18 @@
       "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==",
       "dev": true
     },
+    "utility": {
+      "version": "1.18.0",
+      "resolved": "https://registry.npmmirror.com/utility/-/utility-1.18.0.tgz",
+      "integrity": "sha512-PYxZDA+6QtvRvm//++aGdmKG/cI07jNwbROz0Ql+VzFV1+Z0Dy55NI4zZ7RHc9KKpBePNFwoErqIuqQv/cjiTA==",
+      "requires": {
+        "copy-to": "^2.0.1",
+        "escape-html": "^1.0.3",
+        "mkdirp": "^0.5.1",
+        "mz": "^2.7.0",
+        "unescape": "^1.0.1"
+      }
+    },
     "utils-merge": {
       "version": "1.0.1",
       "resolved": "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz",
@@ -16892,6 +17170,14 @@
         "string-width": "^1.0.2 || 2 || 3 || 4"
       }
     },
+    "win-release": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/win-release/-/win-release-1.1.1.tgz",
+      "integrity": "sha512-iCRnKVvGxOQdsKhcQId2PXV1vV3J/sDPXKA4Oe9+Eti2nb2ESEsYHRYls/UjoUW3bIc5ZDO8dTH50A/5iVN+bw==",
+      "requires": {
+        "semver": "^5.0.1"
+      }
+    },
     "window-size": {
       "version": "0.1.0",
       "resolved": "https://registry.npmmirror.com/window-size/-/window-size-0.1.0.tgz",
@@ -17025,6 +17311,20 @@
         "word": "~0.3.0"
       }
     },
+    "xml2js": {
+      "version": "0.6.2",
+      "resolved": "https://registry.npmmirror.com/xml2js/-/xml2js-0.6.2.tgz",
+      "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==",
+      "requires": {
+        "sax": ">=0.6.0",
+        "xmlbuilder": "~11.0.0"
+      }
+    },
+    "xmlbuilder": {
+      "version": "11.0.1",
+      "resolved": "https://registry.npmmirror.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
+      "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA=="
+    },
     "xtend": {
       "version": "4.0.2",
       "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",

+ 1 - 0
package.json

@@ -21,6 +21,7 @@
     "@vue-office/excel": "^0.2.10",
     "@vue-office/pdf": "^0.2.5",
     "@vue/composition-api": "^1.7.1",
+    "ali-oss": "^6.18.1",
     "axios": "^0.26.1",
     "compression-webpack-plugin": "^1.1.12",
     "docx-preview": "^0.1.15",

+ 16 - 2
src/apis/course.js

@@ -224,7 +224,14 @@ export default {
 			params: data
 		})
 	},
-
+	
+	courseoldgoodslist(data) {
+		return request({
+			url: '/course/old/goods/list',
+			method: 'get',
+			params: data
+		})
+	},
 	studyRecordMenuAllList(data) {
 		return request({
 			url: '/study/record/menuAllList',
@@ -316,6 +323,13 @@ export default {
 		})
 	},
 
+	orderfirstChoiceGoods(data) {
+		return request({
+			url: '/order/firstChoiceGoods',
+			method: 'post',
+			data: data
+		})
+	},
 
 	faceCertificationIDCardOCR(data) {
 		return request({
@@ -324,7 +338,7 @@ export default {
 			data: data
 		})
 	},
-
+	
 	facCertificationImageRecognition(data) {
 		return request({
 			url: '/face/certification/ImageRecognition',

BIN
src/assets/contact.png


BIN
src/assets/dd.png


BIN
src/assets/favicon.ico


BIN
src/assets/kc.png


+ 0 - 0
src/assets/new1/返回置顶.png → src/assets/new1/backTop.png


+ 0 - 0
src/assets/new1/报考指导.png → src/assets/new1/bkzd.png


BIN
src/assets/new1/ch.png


+ 0 - 0
src/assets/new1/常见问题.png → src/assets/new1/cjwt.png


BIN
src/assets/new1/course.png


BIN
src/assets/new1/courseBGC.png


BIN
src/assets/new1/cyhz.png


+ 0 - 0
src/assets/new1/登录广告.png → src/assets/new1/dlgg.png


BIN
src/assets/new1/hxx.png


BIN
src/assets/new1/jxsl.png


+ 0 - 0
src/assets/new1/课程试听.png → src/assets/new1/kcst.png


BIN
src/assets/new1/khc.png


+ 0 - 0
src/assets/new1/考试日历.png → src/assets/new1/ksrl.png


BIN
src/assets/new1/liveBGC.png


BIN
src/assets/new1/mym.png


BIN
src/assets/new1/ppsl.png


BIN
src/assets/new1/rspz.png


+ 0 - 0
src/assets/new1/搜索-白.png → src/assets/new1/search-white.png


+ 0 - 0
src/assets/new1/搜索.png → src/assets/new1/search.png


+ 0 - 0
src/assets/new1/购物车.png → src/assets/new1/shoppingcar.png


+ 0 - 0
src/assets/new1/师资团队.png → src/assets/new1/sztd.png


BIN
src/assets/new1/sztd1.png


BIN
src/assets/new1/tenzz.png


+ 0 - 0
src/assets/new1/推荐题库.png → src/assets/new1/tjbank.png


+ 0 - 0
src/assets/new1/推荐课程.png → src/assets/new1/tjkc.png


BIN
src/assets/new1/tkbank.png


+ 0 - 0
src/assets/new1/微信.png → src/assets/new1/wechat.png


+ 0 - 0
src/assets/new1/微信2.png → src/assets/new1/wechat2.png


+ 0 - 0
src/assets/new1/小程序.png → src/assets/new1/xcx.png


BIN
src/assets/new1/xfk.png


BIN
src/assets/new1/zlps.png


+ 0 - 0
src/assets/new1/专属好课推荐.png → src/assets/new1/zshktj.png


+ 0 - 0
src/assets/new1/咨询热线.png → src/assets/new1/zxrx.png


BIN
src/assets/new1/zyjn.png


BIN
src/assets/new1/zykz.png


BIN
src/assets/new1/zzhteacher.png


BIN
src/assets/new1/产业合作.png


BIN
src/assets/new1/人社批准.png


BIN
src/assets/new1/会员商城banner – 1.jpg


BIN
src/assets/new1/会员商城banner.png


BIN
src/assets/new1/十年专注.png


BIN
src/assets/new1/品牌实力.png


BIN
src/assets/new1/师资团队1.png


BIN
src/assets/new1/徐福康.png


BIN
src/assets/new1/教学实力.png


BIN
src/assets/new1/朱培浩.png


BIN
src/assets/new1/职业技能.png


BIN
src/assets/new1/职业考证.png


BIN
src/assets/new1/胡欣欣.png


BIN
src/assets/new1/课程.png


BIN
src/assets/new1/课程banner – 1.jpg


BIN
src/assets/new1/课程banner.png


BIN
src/assets/new1/资料.png


BIN
src/assets/new1/邝穗春.png


BIN
src/assets/new1/陈红.png


BIN
src/assets/new1/题库.png


BIN
src/assets/new1/马英明.png


BIN
src/assets/tk.png


BIN
src/assets/zzzs/2018A1.jpg


BIN
src/assets/zzzs/2018A2.jpg


BIN
src/assets/zzzs/2018A3.jpg


BIN
src/assets/zzzs/2018A4.jpg


BIN
src/assets/zzzs/2018A5.jpg


BIN
src/assets/zzzs/2018A6.jpg


BIN
src/assets/zzzs/2018A7.jpg


BIN
src/assets/zzzs/2018A8.jpg


BIN
src/assets/zzzs/2019A1.jpg


+ 0 - 0
src/assets/资质证书/祥粤学院-办学许可证-正本(新).jpg → src/assets/zzzs/bxxkz-zb.jpg


+ 0 - 0
src/assets/资质证书/祥粤学院-登记证.jpg → src/assets/zzzs/djz.jpg


+ 0 - 0
src/assets/资质证书/中正-人脸识别软著证书.jpg → src/assets/zzzs/facesbrzzs.jpg


+ 0 - 0
src/assets/资质证书/祥粤学校-环境管理体系认证.jpg → src/assets/zzzs/hjgltxrz.jpg


+ 0 - 0
src/assets/资质证书/祥粤学校-质量管理体系认证.jpg → src/assets/zzzs/zlgltxrz.jpg


+ 0 - 0
src/assets/资质证书/祥粤学校-职业健康安全管理体系认证.jpg → src/assets/zzzs/zyhjaqgktxrz.jpg


+ 0 - 0
src/assets/资质证书/中正企业智慧教育系统软著证书.jpg → src/assets/zzzs/zzqyzhjyxtrzzs.jpg


+ 0 - 0
src/assets/资质证书/中正云学堂平台软著证书1.jpg → src/assets/zzzs/zzyxtptrzzs1.jpg


+ 0 - 0
src/assets/资质证书/中正云学堂平台软著证书2.jpg → src/assets/zzzs/zzyxtptrzzs2.jpg


+ 0 - 0
src/assets/资质证书/中正智慧证书软著证书.jpg → src/assets/zzzs/zzzhkcrzzs.jpg


+ 0 - 0
src/assets/资质证书/中正智慧考场软著证书1.jpg → src/assets/zzzs/zzzhkcrzzs1.jpg


+ 0 - 0
src/assets/资质证书/中正智慧考场软著证书2.jpg → src/assets/zzzs/zzzhkcrzzs2.jpg


+ 0 - 0
src/assets/资质证书/中正智慧考场软著证书3.jpg → src/assets/zzzs/zzzhkcrzzs3-3.jpg


+ 0 - 0
src/assets/资质证书/中正云学堂平台软著证书3.jpg → src/assets/zzzs/zzzhkcrzzs3.jpg


+ 4 - 1
src/axios.js

@@ -2,7 +2,7 @@ import axios from 'axios'
 import store from './store'
 import { Notification, Message } from 'element-ui'
 export const BASE_URL = process.env.BASE_URL    //测试-外网
-// export const BASE_URL = "https://test.xyyxt.net"    //测试-外网
+// export const BASE_URL = "http://192.168.1.24:5055"    //测试-外网
 export const tenantId = process.env.TENANT_ID
 import tools from './common/tools'
 import router from './router'
@@ -84,6 +84,9 @@ request.interceptors.response.use(async (response) => {
       router.push({
         path: '/login'
       })
+    } else if (code == 699) {
+      window.open(res.msg)
+      return Promise.reject("自动跳转前往祥粤云学堂")
     } else if (code == 500) {
       if (res.msg !== '无其他端在操作') {
         // Message({

+ 7 - 5
src/common/uploadFile.js

@@ -28,15 +28,17 @@ export default {
                 formData.append('OSSAccessKeyId', ossToken.accessid); //accessKeyId
                 formData.append('policy', ossToken.policy); //policy
                 formData.append('Signature', ossToken.signature); //签名
-                // formData.append('callback', ossToken.callback); //回调
+                formData.append('callback', ossToken.callback); //回调
                 formData.append('success_action_status', 200); //成功后返回的操作码
                 //如果是base64文件,那么直接把base64字符串转成blob对象进行上传就可以了
                 formData.append("file", file);
                 request.uploadFile(ossToken.host, formData).then(resp => {
-                    resolve(ossToken.dir)
-                    // resolve(ossToken.host + '/' + ossToken.dir)
+                    if (resp.resultContent && resp.resultContent.size) {
+                        resolve(ossToken.dir)
+                    } else {
+                        reject("上传回调失败")
+                    }
                 }).catch(error => {
-                    console.log(error, '1231')
                     reject(error)
                 })
 
@@ -46,4 +48,4 @@ export default {
         })
 
     },
-}
+}

+ 42 - 1
src/components/dataReview/index.vue

@@ -36,7 +36,7 @@
                       : false
                   "
                   clearable
-                  v-model="infoForm[item.fieldKey]"
+                  v-model.trim="infoForm[item.fieldKey]"
                   :placeholder="`请输入${item.fieldName}`"
                 />
               </el-form-item>
@@ -56,6 +56,11 @@
                     :key="indexs"
                     :label="items"
                     :value="items"
+                    :disabled="
+                      item.fieldKey == 'education'
+                        ? eduDisAbledStatus(items)
+                        : false
+                    "
                   >
                   </el-option>
                 </el-select>
@@ -205,9 +210,42 @@ export default {
       STATUS: false //区分个人中心入口操作
     };
   },
+  computed: {
+    eduDisAbledStatus: function() {
+      return function(item) {
+        if (
+          this.activeData.educationName == "继续教育" &&
+          this.activeData.projectName == "施工现场专业人员" &&
+          this.activeData.businessName == "七大员"
+        ) {
+          if (
+            this.activeData.categoryName == "材料员" ||
+            this.activeData.categoryName == "资料员" ||
+            this.activeData.categoryName == "劳务员"
+          ) {
+            let list = [
+              "职高",
+              "高中",
+              "专科",
+              "本科",
+              "硕士研究生",
+              "博士研究生"
+            ];
+            return !list.includes(item);
+          } else {
+            let list = ["专科", "本科", "硕士研究生", "博士研究生"];
+            return !list.includes(item);
+          }
+        } else {
+          return false;
+        }
+      };
+    }
+  },
   methods: {
     async init(item, status = false) {
       this.STATUS = status;
+      console.log(item, "item");
       this.activeData = item;
       //获取初始数据
       try {
@@ -446,6 +484,9 @@ export default {
         if (
           !this.infoForm["education"] &&
           this.$store.state.userInfo.eduLevel
+           && !(this.activeData.educationName == "继续教育" &&
+          this.activeData.projectName == "施工现场专业人员" &&
+          this.activeData.businessName == "七大员")
         ) {
           this.$set(
             this.infoForm,

+ 18 - 11
src/components/footer2/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div id="footer_main">
-    <div class="width_1200 headers">
+    <div class="width_1200 headers" v-if="footerRecord.footerHeightStatus != 0">
       <div class="lf">
         <h2>为什么选择{{ header.companyName }}?</h2>
         <div class="botm">
@@ -24,8 +24,8 @@
         </div>
       </div>
     </div>
-    <div class="fgx"></div>
-    <div class="width_1200 yq">
+    <div class="fgx" v-if="footerRecord.footerHeightStatus != 0"></div>
+    <div class="width_1200 yq" v-if="showList(links).length > 0">
       <div class="lf">友情链接:</div>
       <div class="rg">
         <a
@@ -38,7 +38,11 @@
         <div style="clear:both"></div>
       </div>
     </div>
-    <div class="fgx" style="width: 1200px;margin: 0px auto;"></div>
+    <div
+      class="fgx"
+      style="width: 1200px;margin: 0px auto;"
+      v-if="showList(links).length > 0"
+    ></div>
     <div class="width_1200 ftend">
       <div class="f1">
         <p v-for="(item, index) in footer" :key="index">{{ item.name }}</p>
@@ -58,17 +62,17 @@ export default {
     return {
       valueList: [
         {
-          imgUrl: require("@/assets/new1/人社批准.png"),
+          imgUrl: require("@/assets/new1/rspz.png"),
           label: "人社批准",
           value: "办学许可号:人社民4400003150014号"
         },
         {
-          imgUrl: require("@/assets/new1/十年专注.png"),
+          imgUrl: require("@/assets/new1/tenzz.png"),
           label: "十年专注",
           value: "雄厚师资:教授、博士、工程师"
         },
         {
-          imgUrl: require("@/assets/new1/教学实力.png"),
+          imgUrl: require("@/assets/new1/jxsl.png"),
           label: "教学实力",
           value: "服务5000余家企业,近50000余人次"
         }
@@ -90,8 +94,11 @@ export default {
     },
     sty: function() {
       return function(str) {
-        let a = str.replace(/<a/gi, '<a style="color:#e1e1e1;" target="_blank"');
-        
+        let a = str.replace(
+          /<a/gi,
+          '<a style="color:#e1e1e1;" target="_blank"'
+        );
+
         return a;
       };
     }
@@ -140,8 +147,8 @@ export default {
       display: flex;
       align-items: center;
       & > div {
-        &:first-child {
-          margin-right: 28px;
+        &:nth-of-type(2) {
+          margin-left: 28px;
         }
         & > p {
           text-align: center;

+ 6 - 6
src/components/header1/index.vue

@@ -15,10 +15,10 @@
           <li v-for="(item, index) in showNav(header.Nav)" :key="index">
             <a v-if="item.name == '首页'" @click="go('/index')">首页</a>
             <a
-              v-if="item.name == '走进祥粤'"
+              v-if="item.name == '关于我们'"
               @click="go('/about')"
               :style="$route.path === '/about' ? 'color:red;' : ''"
-              >走进祥粤</a
+              >关于我们</a
             >
             <a
               v-if="item.name == '课程'"
@@ -39,16 +39,16 @@
               >题库</a
             >
             <a
-              v-if="item.name == '讲义资料'"
+              v-if="item.name == '资料'"
               @click="go('/handout-list')"
               :style="$route.path === '/handout-list' ? 'color:red;' : ''"
-              >讲义资料</a
+              >资料</a
             >
             <a
-              v-if="item.name == '积分商城'"
+              v-if="item.name == '积分'"
               @click="go('/points-list')"
               :style="$route.path === '/points-list' ? 'color:red;' : ''"
-              >积分商城</a
+              >积分</a
             >
           </li>
         </ul>

+ 13 - 6
src/components/header2/index.vue

@@ -144,7 +144,7 @@ export default {
                 case "首页":
                   item.url = "/home";
                   break;
-                case "中正":
+                case "关于我们":
                   item.url = "/about";
                   break;
                 case "课程":
@@ -177,7 +177,7 @@ export default {
       return function(collapse, nav_beauf) {
         if (!collapse && nav_beauf) {
           return {
-            backgroundColor: "rgba(0,0,0,.1)",
+            backgroundColor: "rgba(0,0,0,.2)",
             backdropFilter: "blur(20px)"
           };
         } else {
@@ -364,7 +364,7 @@ export default {
   left: 0;
   height: 70px;
   width: 100vw;
-  box-shadow: 0px 1px 4px 0px rgba(0, 0, 0, 0.1);
+  box-shadow: 0px 0px 1px 0px rgba(0, 0, 0, 0.1);
   & > .margin_center {
     width: 1400px;
     margin: 0 auto;
@@ -480,7 +480,7 @@ export default {
     .el-select__caret {
       width: 14px;
       font-size: 12px;
-      color: #fff!important;
+      color: #fff !important;
     }
   }
   & > .el-input__inner {
@@ -499,7 +499,14 @@ export default {
     color: #fff;
   }
 }
-/deep/ .el-select-dropdown__item.hover, .el-select-dropdown__item:hover{
-    color: #409EFF;
+.el-select-dropdown__item.selected {
+  color: #007aff !important;
+}
+/deep/ .el-select-dropdown__item.hover,
+.el-select-dropdown__item:hover {
+  color: #007aff;
+}
+.el-dropdown-menu__item:hover{
+  color: #007aff !important;
 }
 </style>

+ 4 - 4
src/components/listOption2/index.vue

@@ -207,7 +207,7 @@ export default {
           name = "直播";
           break;
         case 8:
-          name = "讲义资料";
+          name = "资料";
           break;
 
         default:
@@ -251,8 +251,8 @@ export default {
     },
     //分页
     currentChange(e) {
-      // document.body.scrollTop = 0;
-      // document.documentElement.scrollTop = 0;
+      document.body.scrollTop = 300;
+      document.documentElement.scrollTop = 300;
       this.formData.pageNum = e;
       this.search();
     },
@@ -461,7 +461,7 @@ export default {
   }
 }
 /deep/ .el-input__icon {
-  line-height: 28px;
+  line-height: 28px !important;
 }
 /deep/ .is-background {
   & > button {

+ 3 - 3
src/components/login/index.vue

@@ -8,7 +8,7 @@
       :close-on-click-modal="false"
     >
       <div class="login_box">
-        <img class="left" src="@/assets/new1/登录广告.png" alt="" />
+        <img class="left" src="@/assets/new1/dlgg.png" alt="" />
         <div class="right">
           <el-form
             v-show="
@@ -793,10 +793,10 @@ export default {
   margin: 30px auto 0px;
   width: 48px;
   height: 48px;
-  background: url("../../assets/new1/微信.png") no-repeat center center;
+  background: url("../../assets/new1/wechat.png") no-repeat center center;
   background-size: contain;
   &:hover {
-    background: url("../../assets/new1/微信2.png") no-repeat center center;
+    background: url("../../assets/new1/wechat2.png") no-repeat center center;
     background-size: contain;
   }
 }

+ 200 - 0
src/components/preference/index.vue

@@ -0,0 +1,200 @@
+<template>
+  <div id="preference">
+    <el-dialog
+      title="优选"
+      :visible.sync="dialogVisible"
+      width="1190px"
+      :close-on-click-modal="false"
+      :close-on-press-escape="false"
+      :show-close="false"
+    >
+      <h3 class="hourTitle">
+        已选学时:{{ classHourComputer(chapterIdList) }} /
+        {{ goodsData.minClassHour && goodsData.minClassHour.toFixed(1) }}
+        <span style="float:right">
+          <span style="color:red;margin-right:10px;"
+            >至少选择{{
+              goodsData.minClassHour && goodsData.minClassHour.toFixed(1)
+            }}学时</span
+          >
+          <el-button
+            @click="quickGet"
+            size="small"
+            type="success"
+            plain
+            v-if="firstChoiceStatusBtn"
+            >一键选课</el-button
+          ></span
+        >
+      </h3>
+      <el-transfer
+        :titles="['未选', '已选']"
+        v-model="chapterIdList"
+        :data="courseMenu"
+        :props="{
+          key: 'menuId',
+          label: 'menuName'
+        }"
+        ><span slot-scope="{ option }" style="text-wrap:wrap;"
+          >{{
+            option.menuName}}
+          <span v-if="option.type == 2" style="color:red"
+            >(学时:{{ chapterClassHours(option.totalTime) }})</span
+          >
+        </span></el-transfer
+      >
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="close()">取 消</el-button>
+        <el-button type="primary" @click="submit">确 定</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      dialogVisible: false,
+      firstChoiceStatusBtn: false,
+      courseList: [], //课程列表
+      courseMenu: [], //课程内容列表
+      chapterIdList: [] //选择的章内容
+    };
+  },
+  inject: ["getGoodsData"],
+  computed: {
+    goodsData() {
+      return this.getGoodsData();
+    },
+    classHourComputer: function() {
+      return function(item) {
+        let hours = 0;
+        item.forEach(i => {
+          const A = this.courseMenu.find(k => k.menuId == i);
+          hours += A.totalTime || 0;
+        });
+        return this.chapterClassHours(hours);
+      };
+    }
+  },
+  methods: {
+    openBoxs() {
+      this.firstChoiceStatusBtn = false;
+      this.dialogVisible = true;
+      this.init();
+      console.log(this.goodsData, "goodsData");
+    },
+    chapterClassHours(num) {
+      return num ? (parseInt(num) / 60 / 45).toFixed(1) : 0;
+    },
+    //一键选课
+    quickGet() {
+      let array = [];
+      this.courseMenu.forEach(i => {
+        if (i.type == 2 && i.firstChoiceStatus == 1) {
+          array.push(i.menuId);
+        }
+      });
+      this.chapterIdList = array;
+    },
+    close() {
+      this.dialogVisible = false;
+      this.$router.go(-1);
+    },
+    submit() {
+      if (
+        this.classHourComputer(this.chapterIdList) < this.goodsData.minClassHour
+      ) {
+        this.$message.warning("未选够" + this.goodsData.minClassHour + "学时");
+        return;
+      }
+      if (
+        this.classHourComputer(this.chapterIdList) >
+        this.goodsData.minClassHour + 3
+      ) {
+        this.$message.warning(
+          `学时范围(${this.goodsData.minClassHour}~${this.goodsData
+            .minClassHour + 3} ),已超出,请重新选择`
+        );
+        return;
+      }
+      let ary = {
+        chapterIdList: this.chapterIdList,
+        courseId: this.courseList[0].courseId,
+        goodsId: this.goodsData.goodsId,
+        gradeId: this.goodsData.gradeId,
+        orderGoodsId: this.goodsData.orderGoodsId
+      };
+      this.$request.orderfirstChoiceGoods(ary).then(res => {
+        this.dialogVisible = false;
+        this.$router.replace({
+          path: "/my-course-detail/" + res.data.goodsId,
+          query: {
+            gradeId: res.data.gradeId,
+            orderGoodsId: res.data.orderGoodsId
+          }
+        });
+        setTimeout(() => {
+          this.$router.go(0);
+        }, 100);
+      });
+    },
+    async init() {
+      await this.getGoodsCourseList(); //获取商品课程列表
+      this.$request
+        .reMenuList({
+          courseId: this.courseList[0].courseId,
+          gradeId: this.goodsData.gradeId,
+          orderGoodsId: this.goodsData.orderGoodsId,
+          getHours: 1
+        })
+        .then(res => {
+          res.rows.forEach(i => {
+            i.disabled = i.type == 2 ? false : true;
+            if (i.firstChoiceStatus == 1) {
+              this.firstChoiceStatusBtn = true;
+            }
+          });
+          this.courseMenu = res.rows;
+        }); //获取课程内容
+    },
+    //获取商品课程列表
+    getGoodsCourseList() {
+      return new Promise((resolve, reject) => {
+        this.$request
+          .courseCourseList({
+            orderGoodsId: this.goodsData.orderGoodsId,
+            goodsId: this.goodsData.goodsId,
+            gradeId: this.goodsData.gradeId
+          })
+          .then(res => {
+            if (res.rows && res.rows.length > 0) {
+              this.courseList = res.rows;
+              resolve();
+            } else {
+              reject();
+            }
+          })
+          .catch(() => {
+            reject();
+          });
+      });
+    }
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+/deep/ .el-transfer-panel {
+  width: 480px;
+}
+/deep/ .el-transfer-panel__item {
+  height: auto;
+}
+.hourTitle {
+  margin-bottom: 20px;
+  font-size: 20px;
+  text-align: center;
+}
+</style>

+ 4 - 3
src/components/takePicture/index.vue

@@ -115,9 +115,10 @@ export default {
     //成功读取摄像头
     photographSuccess(stream) {
       // 兼容webkit核心浏览器
-      if (this.isVirtualCamera(stream)) {
-        return;
-      }
+      // --虚拟摄像头
+      // if (this.isVirtualCamera(stream)) {
+      //   return;
+      // }
       // this.faceUrl = "";
       // this.loading = false;
       // this.isTaking = true;

+ 42 - 16
src/components/toolbar/index.vue

@@ -1,21 +1,41 @@
 <template>
   <div class="toolBar">
     <div class="item phs" v-if="mobile.smallQrCodeShow">
-      <div class="modu">
-        <img
-          style="width: 90px; height: 90px"
-          :src="$tools.splitImgHost(mobile.mobileImage)"
-          alt=""
-        />
-        <div
-          style="text-align: center;color: #222;margin-top: 6px;"
-          class="text"
-        >
-          扫码小程序
+      <div
+        class="modu"
+        :style="
+          !mobile.mobileImage || !mobile.gzhImage ? { left: '-280px' } : null
+        "
+      >
+        <div v-if="mobile.mobileImage">
+          <img
+            style="width: 90px; height: 90px"
+            :src="$tools.splitImgHost(mobile.mobileImage)"
+            alt=""
+          />
+          <div
+            style="text-align: center;color: #222;margin-top: 6px;"
+            class="text"
+          >
+            扫码小程序
+          </div>
+        </div>
+        <div v-if="mobile.gzhImage">
+          <img
+            style="width: 90px; height: 90px"
+            :src="$tools.splitImgHost(mobile.gzhImage)"
+            alt=""
+          />
+          <div
+            style="text-align: center;color: #222;margin-top: 6px;"
+            class="text"
+          >
+            关注公众号
+          </div>
         </div>
       </div>
-      <img src="@/assets/new1/小程序.png" class="img" alt="" />
-      <div class="text">小程序</div>
+      <img src="@/assets/new1/xcx.png" class="img" alt="" />
+      <div class="text">移动端</div>
     </div>
     <div class="item" v-if="userInfo" @click="go('/cart')">
       <el-badge :value="cartCount || ''">
@@ -137,7 +157,7 @@ export default {
         } else {
           clearInterval(this.scrollTimer);
         }
-      }, 16);
+      }, 12);
     }
   }
 };
@@ -207,7 +227,7 @@ export default {
   &:hover .modu {
     visibility: inherit;
     opacity: 1;
-    box-shadow: 0px 0px 4px 0px rgba(0,0,0,.3);
+    box-shadow: 0px 0px 4px 0px rgba(0, 0, 0, 0.3);
   }
 }
 .modu {
@@ -217,7 +237,13 @@ export default {
   position: absolute;
   background-color: #fff;
   border-radius: 8px;
-  left: -124px;
+  left: -220px;
   padding: 10px;
+  display: flex;
+  & > div {
+    &:nth-child(2) {
+      padding-left: 10px;
+    }
+  }
 }
 </style>

+ 86 - 26
src/components/videoCy/index.vue

@@ -48,6 +48,8 @@ export default {
       openPhotoStatus: 0, //暂存学习状态
       commitTime: null, //暂存时间-节流
       commitTimePhoto: null, //判断拍照时刻-节流
+      timeEventStatus: false, //双重保障状态
+      timeEventStatusTimeout: null, //双重保障定时器
       videoPauseSetTimeout: null, //定时器停留太久触发
       failToRegister: false, //报名推送不通过
       videoPauseSetTimeStatus: false
@@ -79,6 +81,10 @@ export default {
   mounted() {
     this.$bus.$on("toPlay", async item => {
       if (this.player) {
+        this.player.HTML5.video.removeEventListener(
+          "timeupdate",
+          this.timeEvent
+        ); //监听器
         this.player.destroy(); //初始化播放器
       }
       this.initData(); //初始化参数
@@ -100,11 +106,13 @@ export default {
     getBeforeWork() {},
     //初始化参数
     initData() {
+      this.timeEventStatus = false;
       this.commitTime = null;
       this.commitTimePhoto = null;
       this.openPhotoStatus = 0;
       this.videoPauseSetTimeStatus = false;
       clearTimeout(this.videoPauseSetTimeout); //删除暂停计算拍照定时器
+      clearTimeout(this.timeEventStatusTimeout); //删除双重保障定时器
     },
     //获取播放记录
     getRecordLast() {
@@ -239,11 +247,15 @@ export default {
     //施工继教
     ShiPhotoList(totalVideoTime) {
       //施工继教带年份的订单拍照设置
-      let time1 = 50 * 60; //拍照间隔多久一张 50分钟
-      let num = Math.trunc(totalVideoTime / time1) + 1; //拍照数量
+      let time1 = 50 * 60 - 1; //拍照间隔多久一张 50分钟
+      let num = Math.ceil(totalVideoTime / time1); //拍照数量
       let photoList = [];
-      for (let i = 0; i < num; i++) {
-        photoList.push(i * time1);
+      if (num == 1) {
+        photoList.push(parseInt(totalVideoTime / 2));
+      } else {
+        for (let i = 0; i < num; i++) {
+          photoList.push(parseInt(((totalVideoTime - 3) / num) * (i + 1)));
+        }
       }
       return photoList;
     },
@@ -317,12 +329,18 @@ export default {
             const autoPlay = self.goodsData.goodsPlayConfig
               ? self.goodsData.goodsPlayConfig.autoPlay
               : true;
-            const isAllowSeek = self.goodsData.goodsPlayConfig
-              ? self.goodsData.goodsPlayConfig.isAllowSeek
-              : "on";
-            const playbackRate = self.goodsData.goodsPlayConfig
-              ? self.goodsData.goodsPlayConfig.playbackRate
-              : false;
+            const isAllowSeek =
+              self.activeSection.learning == 1
+                ? "off"
+                : self.goodsData.goodsPlayConfig
+                ? self.goodsData.goodsPlayConfig.isAllowSeek
+                : "on";
+            const playbackRate =
+              self.activeSection.learning == 1
+                ? true
+                : self.goodsData.goodsPlayConfig
+                ? self.goodsData.goodsPlayConfig.playbackRate
+                : false;
             self.player = polyvPlayer({
               wrap: "#player",
               width: 810,
@@ -353,6 +371,7 @@ export default {
     },
     //监听器
     timeEvent() {
+      this.timeEventStatus = true; //双重保障
       // 定时提交学习记录
       this.submitStudyRecords();
       //拍照监听执行
@@ -410,6 +429,24 @@ export default {
       }
       this.player.HTML5.video.addEventListener("timeupdate", this.timeEvent); //监听器
       console.log("视频初次播放时触发", this.player.j2s_getCurrentTime());
+      this.timeEventStatusTimeout = setTimeout(() => {
+        if (!this.timeEventStatus) {
+          this.player.j2s_pauseVideo();
+          this.$confirm("播放器监听异常,刷新当前页面", "提示", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            showCancelButton: false,
+            closeOnClickModal: false,
+            closeOnPressEscape: false,
+            showClose: false,
+            type: "warning"
+          })
+            .then(() => {
+              this.$router.go(0);
+            })
+            .catch(() => {});
+        }
+      }, 5000);
     },
     //视频暂停时触发
     onVideoPause() {
@@ -418,6 +455,7 @@ export default {
         this.goodsData.erJianErZao &&
         !this.failToRegister
       ) {
+        console.log("拍照停留过长计时开始");
         this.videoPauseSetTimeout = setTimeout(() => {
           if (this.isFullScreen()) {
             this.exitFullscreen();
@@ -445,13 +483,7 @@ export default {
     },
     //视频恢复播放时触发
     onVideoPlay() {
-      if (
-        this.activeSection.learning != 1 &&
-        this.goodsData.erJianErZao &&
-        !this.failToRegister
-      ) {
-        clearTimeout(this.videoPauseSetTimeout);
-      }
+      clearTimeout(this.videoPauseSetTimeout);
       console.log("视频恢复播放时触发");
     },
     //当前视频播放完毕时触发
@@ -492,10 +524,16 @@ export default {
     },
     //播放出现错误时触发
     onPlayerError() {
-      this.$message.error("播放出现错误时触发");
+      this.$router.go(-1);
+      this.$notify.error({
+        duration: 0,
+        title: "错误",
+        message: "视频播放错误,请及时反馈教务人员处理"
+      });
     },
     //发生业务逻辑错误
     serverError() {
+      clearTimeout(this.videoPauseSetTimeout); //删除暂停计算拍照定时器
       this.$message.error("发生业务逻辑错误");
     },
     //启动拍照
@@ -503,19 +541,33 @@ export default {
       if (this.isFullScreen()) {
         this.exitFullscreen();
       }
+      setTimeout(() => {
+        this.player.j2s_pauseVideo(); //暂停
+      }, 1000);
       this.$refs.takePicture.openPhoto();
       this.HideVideo = true;
     },
     //拍照成功回显 url
     async returnParameter(url) {
-      this.HideVideo = false;
       let compareFaceData = await this.faceRecognition(url);
       if (compareFaceData >= 80) {
         let file = this.$tools.convertBase64UrlToBlob(url);
-        const photoUrl = await this.$upload.upload(file, 0, {
-          gradeId: this.goodsData.gradeId,
-          orderGoodsId: this.goodsData.orderGoodsId
-        });
+        try {
+          var photoUrl = await this.$upload.upload(file, 0, {
+            gradeId: this.goodsData.gradeId,
+            orderGoodsId: this.goodsData.orderGoodsId
+          });
+        } catch (err) {
+          this.$message({
+            type: "warning",
+            message: "上传接口报错,请重新拍照上传"
+          });
+          setTimeout(() => {
+            this.openPhoto();
+          }, 1500);
+          return;
+        }
+        this.HideVideo = false;
         this.postCoursePhotoRecord(false, photoUrl)
           .then(async res => {
             this.photoHistoryList.push(this.photoIndex);
@@ -533,6 +585,7 @@ export default {
             }
           })
           .catch(err => {
+            console.log(err, "err");
             this.$message({
               type: "warning",
               message: "上传接口报错,请重新拍照上传"
@@ -691,10 +744,17 @@ export default {
     this.$bus.$off("toPlay");
     clearTimeout(this.videoPauseSetTimeout); //删除暂停计算拍照定时器
     // document.removeEventListener("visibilitychange", this.pauseVideo);
-    this.player && this.player.destroy(); //初始化播放器
-    this.player &&
+    if (this.player) {
       this.player.HTML5.video.removeEventListener("timeupdate", this.timeEvent); //监听器
-    this.$msgbox.close();
+      this.player.destroy(); //初始化播放器
+    }
+    this.timeEventStatus = false;
+    clearTimeout(this.timeEventStatusTimeout); //删除双重保障定时器
+    try {
+      this.$msgbox.close();
+    } catch (error) {
+      console.log(error, "element ui - msgBox close error");
+    }
   }
 };
 </script>

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно