echoFan 4 år sedan
förälder
incheckning
11c15f6eef
50 ändrade filer med 1921 tillägg och 274 borttagningar
  1. 3 0
      .env
  2. 33 0
      .eslintrc.js
  3. 9 21
      README.md
  4. 1 1
      babel.config.js
  5. 153 48
      package-lock.json
  6. 7 0
      package.json
  7. 18 22
      src/App.vue
  8. BIN
      src/assets/banner.png
  9. BIN
      src/assets/lunbo.jpg
  10. 0 130
      src/components/HelloWorld.vue
  11. 37 0
      src/iconfonts/iconfont.css
  12. BIN
      src/iconfonts/iconfont.eot
  13. 64 0
      src/iconfonts/iconfont.js
  14. 44 0
      src/iconfonts/iconfont.json
  15. 41 0
      src/iconfonts/iconfont.svg
  16. BIN
      src/iconfonts/iconfont.ttf
  17. BIN
      src/iconfonts/iconfont.woff
  18. BIN
      src/iconfonts/iconfont.woff2
  19. 40 0
      src/layout/index/banner.vue
  20. 194 0
      src/layout/index/mainOne.vue
  21. 166 0
      src/layout/index/mainTwo.vue
  22. 65 0
      src/layout/index/menuInfo.vue
  23. 34 0
      src/layout/index/top.vue
  24. 22 9
      src/main.js
  25. 19 0
      src/plugins/axios.js
  26. 42 0
      src/plugins/check-res.js
  27. 5 0
      src/plugins/element.js
  28. 6 0
      src/plugins/filters.js
  29. 27 0
      src/plugins/loading.js
  30. 4 0
      src/plugins/meta.js
  31. 33 0
      src/plugins/methods.js
  32. 20 0
      src/plugins/setting.js
  33. 65 0
      src/plugins/stomp.js
  34. 5 0
      src/plugins/vant.js
  35. 25 0
      src/plugins/var.js
  36. 20 17
      src/router/index.js
  37. 3 3
      src/store/index.js
  38. 118 0
      src/util/axios-wrapper.js
  39. 10 0
      src/util/filters.js
  40. 50 0
      src/util/methods-util.js
  41. 47 0
      src/util/optionTitles.js
  42. 50 0
      src/util/role_menu.js
  43. 69 0
      src/util/user-util.js
  44. 0 5
      src/views/About.vue
  45. 0 18
      src/views/Home.vue
  46. 43 0
      src/views/animate.vue
  47. 38 0
      src/views/iconfont.vue
  48. 194 0
      src/views/index.vue
  49. 55 0
      src/views/index1.vue
  50. 42 0
      vue.config.js

+ 3 - 0
.env

@@ -0,0 +1,3 @@
+VUE_APP_AXIOS_BASE_URL = ''
+VUE_APP_ROUTER="/liveadmin"
+VUE_APP_LIMIT = 10

+ 33 - 0
.eslintrc.js

@@ -0,0 +1,33 @@
+// https://eslint.org/docs/user-guide/configuring
+
+module.exports = {
+  root: true,
+  env: {
+    node: true,
+  },
+  extends: ['plugin:vue/essential', '@vue/prettier'],
+  plugins: ['vue'],
+  rules: {
+    'max-len': [
+      'warn',
+      {
+        code: 1000,
+      },
+    ],
+    'no-unused-vars': 'off',
+    'no-console': 'off',
+    'prettier/prettier': [
+      'warn',
+      {
+        singleQuote: true,
+        trailingComma: 'es5',
+        bracketSpacing: true,
+        jsxBracketSameLine: true,
+        printWidth: 160,
+      },
+    ],
+  },
+  parserOptions: {
+    parser: 'babel-eslint',
+  },
+};

+ 9 - 21
README.md

@@ -1,24 +1,12 @@
-# web-test
+# web-study
 
-## Project setup
-```
-npm install
-```
+## 阿狸图标使用方式
+# class方式引用,不带有颜色,需要自行配置 <i class="iconfont icontingliceshi"></i>
+# unicode方式引用,不带有颜色,需要自行配置 <i class="iconfont">&#xe600;</i>
+# svg方式引用,自带图标颜色 也可在阿狸图标项目库里编辑图片颜色 <svg class="icon" aria-hidden="true"><use xlink:href="#iconA"></use></svg>
 
-### Compiles and hot-reloads for development
-```
-npm run serve
-```
+## animate css动画使用方式
+# 下载依赖 npm install animate.css --save
+# main.js引用依赖 import 'animate.css';
+# 页面class使用 animate__animated animate__fadeInUp 前缀和页面效果 网站:https://animate.style/
 
-### Compiles and minifies for production
-```
-npm run build
-```
-
-### Lints and fixes files
-```
-npm run lint
-```
-
-### Customize configuration
-See [Configuration Reference](https://cli.vuejs.org/config/).

+ 1 - 1
babel.config.js

@@ -1,3 +1,3 @@
 module.exports = {
-  presets: ["@vue/cli-plugin-babel/preset"]
+  presets: ['@vue/cli-plugin-babel/preset'],
 };

+ 153 - 48
package-lock.json

@@ -1012,7 +1012,6 @@
       "version": "7.11.0",
       "resolved": "https://registry.npm.taobao.org/@babel/runtime/download/@babel/runtime-7.11.0.tgz?cache=0&sync_timestamp=1596142929017&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.11.0.tgz",
       "integrity": "sha1-8QJFh3BCqBXgf35pP6/wrp06Kqw=",
-      "dev": true,
       "requires": {
         "regenerator-runtime": "^0.13.4"
       }
@@ -1260,11 +1259,15 @@
       "integrity": "sha1-FZJUFOCtLNdlv+9YhC9+JqesyyQ=",
       "dev": true
     },
+    "@vant/icons": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/@vant/icons/-/icons-1.2.3.tgz",
+      "integrity": "sha512-LMu1JGGgZqLYXVFRcuNRDCOWE7AX0vt/gFBkd9xMI7H9uMdNx2oO3YujgNVvVrrF8iufHwfwUv41HiwYMvU3zQ=="
+    },
     "@vue/babel-helper-vue-jsx-merge-props": {
       "version": "1.0.0",
       "resolved": "https://registry.npm.taobao.org/@vue/babel-helper-vue-jsx-merge-props/download/@vue/babel-helper-vue-jsx-merge-props-1.0.0.tgz",
-      "integrity": "sha1-BI/leZWNpAj7eosqPsBQtQpmEEA=",
-      "dev": true
+      "integrity": "sha1-BI/leZWNpAj7eosqPsBQtQpmEEA="
     },
     "@vue/babel-plugin-transform-vue-jsx": {
       "version": "1.1.2",
@@ -1971,6 +1974,11 @@
       "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=",
       "dev": true
     },
+    "animate.css": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/animate.css/-/animate.css-4.1.0.tgz",
+      "integrity": "sha512-0aVcfWDeU9ykV6vjn1P67ZSs01jxoUQZCGaYbkk0SIIelIG8kUdLrIkua1+VabHfTtsSivDRMMn0ILPvZum2gw=="
+    },
     "ansi-colors": {
       "version": "3.2.4",
       "resolved": "https://registry.npm.taobao.org/ansi-colors/download/ansi-colors-3.2.4.tgz",
@@ -2192,6 +2200,14 @@
       "integrity": "sha1-3TeelPDbgxCwgpH51kwyCXZmF/0=",
       "dev": true
     },
+    "async-validator": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npm.taobao.org/async-validator/download/async-validator-1.8.5.tgz?cache=0&sync_timestamp=1588849525754&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fasync-validator%2Fdownload%2Fasync-validator-1.8.5.tgz",
+      "integrity": "sha1-3D4I7B/Q3dtn5ghC8CwM0c7G1/A=",
+      "requires": {
+        "babel-runtime": "6.x"
+      }
+    },
     "asynckit": {
       "version": "0.4.0",
       "resolved": "https://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz",
@@ -2231,6 +2247,37 @@
       "integrity": "sha1-oXs6jqgRBg501H0wYSJACtRJeuI=",
       "dev": true
     },
+    "axios": {
+      "version": "0.19.2",
+      "resolved": "https://registry.npm.taobao.org/axios/download/axios-0.19.2.tgz?cache=0&sync_timestamp=1594827610645&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faxios%2Fdownload%2Faxios-0.19.2.tgz",
+      "integrity": "sha1-PqNsXYgY0NX4qKl6bTa4bNwAyyc=",
+      "requires": {
+        "follow-redirects": "1.5.10"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz",
+          "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=",
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "follow-redirects": {
+          "version": "1.5.10",
+          "resolved": "https://registry.npm.taobao.org/follow-redirects/download/follow-redirects-1.5.10.tgz?cache=0&sync_timestamp=1592518278637&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffollow-redirects%2Fdownload%2Ffollow-redirects-1.5.10.tgz",
+          "integrity": "sha1-e3qfmuov3/NnhqlP9kPtB/T/Xio=",
+          "requires": {
+            "debug": "=3.1.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+        }
+      }
+    },
     "babel-eslint": {
       "version": "10.1.0",
       "resolved": "https://registry.npm.taobao.org/babel-eslint/download/babel-eslint-10.1.0.tgz",
@@ -2245,6 +2292,11 @@
         "resolve": "^1.12.0"
       }
     },
+    "babel-helper-vue-jsx-merge-props": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npm.taobao.org/babel-helper-vue-jsx-merge-props/download/babel-helper-vue-jsx-merge-props-2.0.3.tgz",
+      "integrity": "sha1-Iq69OzOQIyjlEyk6jkmSs4T58bY="
+    },
     "babel-loader": {
       "version": "8.1.0",
       "resolved": "https://registry.npm.taobao.org/babel-loader/download/babel-loader-8.1.0.tgz?cache=0&sync_timestamp=1584715910722&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-loader%2Fdownload%2Fbabel-loader-8.1.0.tgz",
@@ -2267,6 +2319,27 @@
         "object.assign": "^4.1.0"
       }
     },
+    "babel-runtime": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npm.taobao.org/babel-runtime/download/babel-runtime-6.26.0.tgz",
+      "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+      "requires": {
+        "core-js": "^2.4.0",
+        "regenerator-runtime": "^0.11.0"
+      },
+      "dependencies": {
+        "core-js": {
+          "version": "2.6.11",
+          "resolved": "https://registry.npm.taobao.org/core-js/download/core-js-2.6.11.tgz",
+          "integrity": "sha1-OIMUafmSK97Y7iHJ3EaYXgOZMIw="
+        },
+        "regenerator-runtime": {
+          "version": "0.11.1",
+          "resolved": "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.11.1.tgz?cache=0&sync_timestamp=1595456117883&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.11.1.tgz",
+          "integrity": "sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk="
+        }
+      }
+    },
     "balanced-match": {
       "version": "1.0.0",
       "resolved": "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz",
@@ -2374,16 +2447,6 @@
       "dev": true,
       "optional": true
     },
-    "bindings": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npm.taobao.org/bindings/download/bindings-1.5.0.tgz",
-      "integrity": "sha1-EDU8npRTNLwFEabZCzj7x8nFBN8=",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "file-uri-to-path": "1.0.0"
-      }
-    },
     "bluebird": {
       "version": "3.7.2",
       "resolved": "https://registry.npm.taobao.org/bluebird/download/bluebird-3.7.2.tgz",
@@ -3879,8 +3942,7 @@
     "deepmerge": {
       "version": "1.5.2",
       "resolved": "https://registry.npm.taobao.org/deepmerge/download/deepmerge-1.5.2.tgz?cache=0&sync_timestamp=1572279556265&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdeepmerge%2Fdownload%2Fdeepmerge-1.5.2.tgz",
-      "integrity": "sha1-EEmdhohEza1P7ghC34x/bwyVp1M=",
-      "dev": true
+      "integrity": "sha1-EEmdhohEza1P7ghC34x/bwyVp1M="
     },
     "default-gateway": {
       "version": "5.0.5",
@@ -4327,6 +4389,19 @@
       "integrity": "sha1-A+wHGwYeRit4a/fnziJv16t88fY=",
       "dev": true
     },
+    "element-ui": {
+      "version": "2.13.2",
+      "resolved": "https://registry.npm.taobao.org/element-ui/download/element-ui-2.13.2.tgz?cache=0&sync_timestamp=1589795164194&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Felement-ui%2Fdownload%2Felement-ui-2.13.2.tgz",
+      "integrity": "sha1-WCv0eqqqr+I+oZWPriF6aHrQZEc=",
+      "requires": {
+        "async-validator": "~1.8.1",
+        "babel-helper-vue-jsx-merge-props": "^2.0.0",
+        "deepmerge": "^1.2.0",
+        "normalize-wheel": "^1.0.1",
+        "resize-observer-polyfill": "^1.5.0",
+        "throttle-debounce": "^1.0.1"
+      }
+    },
     "elliptic": {
       "version": "6.5.3",
       "resolved": "https://registry.npm.taobao.org/elliptic/download/elliptic-6.5.3.tgz?cache=0&sync_timestamp=1592492844326&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Felliptic%2Fdownload%2Felliptic-6.5.3.tgz",
@@ -5096,13 +5171,6 @@
         "schema-utils": "^2.5.0"
       }
     },
-    "file-uri-to-path": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/file-uri-to-path/download/file-uri-to-path-1.0.0.tgz",
-      "integrity": "sha1-VTp7hEb/b2hDWcRF8eN6BdrMM90=",
-      "dev": true,
-      "optional": true
-    },
     "filesize": {
       "version": "3.6.1",
       "resolved": "https://registry.npm.taobao.org/filesize/download/filesize-3.6.1.tgz",
@@ -5322,8 +5390,8 @@
     },
     "fsevents": {
       "version": "2.1.3",
-      "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-2.1.3.tgz",
-      "integrity": "sha1-+3OHA66NL5/pAMM4Nt3r7ouX8j4=",
+      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz",
+      "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==",
       "dev": true,
       "optional": true
     },
@@ -6792,8 +6860,7 @@
     "lodash": {
       "version": "4.17.19",
       "resolved": "https://registry.npm.taobao.org/lodash/download/lodash-4.17.19.tgz?cache=0&sync_timestamp=1594226832494&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.19.tgz",
-      "integrity": "sha1-5I3e2+MLMyF4PFtDAfvTU7weSks=",
-      "dev": true
+      "integrity": "sha1-5I3e2+MLMyF4PFtDAfvTU7weSks="
     },
     "lodash.defaultsdeep": {
       "version": "4.6.1",
@@ -7244,12 +7311,13 @@
         "thenify-all": "^1.0.0"
       }
     },
-    "nan": {
-      "version": "2.14.1",
-      "resolved": "https://registry.npm.taobao.org/nan/download/nan-2.14.1.tgz",
-      "integrity": "sha1-174036MQW5FJTDFHCJMV7/iHSwE=",
-      "dev": true,
-      "optional": true
+    "naf-core": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npm.taobao.org/naf-core/download/naf-core-0.1.2.tgz",
+      "integrity": "sha1-0UetT3+BTsnSvYGPWCOVHgWAsJU=",
+      "requires": {
+        "lodash": "^4.17.11"
+      }
     },
     "nanomatch": {
       "version": "1.2.13",
@@ -7402,6 +7470,11 @@
       "integrity": "sha1-suHE3E98bVd0PfczpPWXjRhlBVk=",
       "dev": true
     },
+    "normalize-wheel": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/normalize-wheel/download/normalize-wheel-1.0.1.tgz",
+      "integrity": "sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU="
+    },
     "npm-run-path": {
       "version": "2.0.2",
       "resolved": "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-2.0.2.tgz",
@@ -8840,8 +8913,7 @@
     "regenerator-runtime": {
       "version": "0.13.7",
       "resolved": "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.13.7.tgz?cache=0&sync_timestamp=1595456117883&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.13.7.tgz",
-      "integrity": "sha1-ysLazIoepnX+qrrriugziYrkb1U=",
-      "dev": true
+      "integrity": "sha1-ysLazIoepnX+qrrriugziYrkb1U="
     },
     "regenerator-transform": {
       "version": "0.14.5",
@@ -9043,6 +9115,11 @@
       "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
       "dev": true
     },
+    "resize-observer-polyfill": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npm.taobao.org/resize-observer-polyfill/download/resize-observer-polyfill-1.5.1.tgz",
+      "integrity": "sha1-DpAg3T0hAkRY1OvSfiPkAmmBBGQ="
+    },
     "resolve": {
       "version": "1.17.0",
       "resolved": "https://registry.npm.taobao.org/resolve/download/resolve-1.17.0.tgz",
@@ -10163,6 +10240,11 @@
         "neo-async": "^2.6.0"
       }
     },
+    "throttle-debounce": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/throttle-debounce/download/throttle-debounce-1.1.0.tgz?cache=0&sync_timestamp=1591627066344&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fthrottle-debounce%2Fdownload%2Fthrottle-debounce-1.1.0.tgz",
+      "integrity": "sha1-UYU9o3vmihVctugns1FKPEIuic0="
+    },
     "through": {
       "version": "2.3.8",
       "resolved": "https://registry.npm.taobao.org/through/download/through-2.3.8.tgz",
@@ -10648,6 +10730,17 @@
         "spdx-expression-parse": "^3.0.0"
       }
     },
+    "vant": {
+      "version": "2.9.4",
+      "resolved": "https://registry.npmjs.org/vant/-/vant-2.9.4.tgz",
+      "integrity": "sha512-ttaB9t/RILWR4yzVCvWNQ/WN7jG5/G/eyx9uZWmGIJMYcFDjp3oH5n5zJENpR6RlM1aXOsXme4kM3sf7QiHSKQ==",
+      "requires": {
+        "@babel/runtime": "7.x",
+        "@vant/icons": "1.2.3",
+        "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0",
+        "vue-lazyload": "1.2.3"
+      }
+    },
     "vary": {
       "version": "1.1.2",
       "resolved": "https://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz",
@@ -10714,6 +10807,11 @@
       "integrity": "sha1-UylVzB6yCKPZkLOp+acFdGV+CPI=",
       "dev": true
     },
+    "vue-lazyload": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/vue-lazyload/-/vue-lazyload-1.2.3.tgz",
+      "integrity": "sha512-DC0ZwxanbRhx79tlA3zY5OYJkH8FYp3WBAnAJbrcuoS8eye1P73rcgAZhyxFSPUluJUTelMB+i/+VkNU/qVm7g=="
+    },
     "vue-loader": {
       "version": "15.9.3",
       "resolved": "https://registry.npm.taobao.org/vue-loader/download/vue-loader-15.9.3.tgz",
@@ -10735,6 +10833,21 @@
         }
       }
     },
+    "vue-meta": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npm.taobao.org/vue-meta/download/vue-meta-2.4.0.tgz",
+      "integrity": "sha1-pBn7S0E1zpZdqzLsZB0ZicLuSEU=",
+      "requires": {
+        "deepmerge": "^4.2.2"
+      },
+      "dependencies": {
+        "deepmerge": {
+          "version": "4.2.2",
+          "resolved": "https://registry.npm.taobao.org/deepmerge/download/deepmerge-4.2.2.tgz?cache=0&sync_timestamp=1572279556265&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdeepmerge%2Fdownload%2Fdeepmerge-4.2.2.tgz",
+          "integrity": "sha1-RNLqNnm49NT/ujPwPYZfwee/SVU="
+        }
+      }
+    },
     "vue-router": {
       "version": "3.3.4",
       "resolved": "https://registry.npm.taobao.org/vue-router/download/vue-router-3.3.4.tgz?cache=0&sync_timestamp=1595736433584&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-router%2Fdownload%2Fvue-router-3.3.4.tgz",
@@ -10854,14 +10967,10 @@
         },
         "fsevents": {
           "version": "1.2.13",
-          "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-1.2.13.tgz",
-          "integrity": "sha1-8yXLBFVZJCi88Rs4M3DvcOO/zDg=",
+          "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
+          "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
           "dev": true,
-          "optional": true,
-          "requires": {
-            "bindings": "^1.5.0",
-            "nan": "^2.12.1"
-          }
+          "optional": true
         },
         "glob-parent": {
           "version": "3.1.0",
@@ -11154,14 +11263,10 @@
         },
         "fsevents": {
           "version": "1.2.13",
-          "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-1.2.13.tgz",
-          "integrity": "sha1-8yXLBFVZJCi88Rs4M3DvcOO/zDg=",
+          "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
+          "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
           "dev": true,
-          "optional": true,
-          "requires": {
-            "bindings": "^1.5.0",
-            "nan": "^2.12.1"
-          }
+          "optional": true
         },
         "glob-parent": {
           "version": "3.1.0",

+ 7 - 0
package.json

@@ -8,8 +8,15 @@
     "lint": "vue-cli-service lint"
   },
   "dependencies": {
+    "animate.css": "^4.1.0",
+    "axios": "^0.19.2",
     "core-js": "^3.6.5",
+    "element-ui": "^2.13.2",
+    "lodash": "^4.17.19",
+    "naf-core": "^0.1.2",
+    "vant": "^2.9.4",
     "vue": "^2.6.11",
+    "vue-meta": "^2.4.0",
     "vue-router": "^3.2.0",
     "vuex": "^3.4.0"
   },

+ 18 - 22
src/App.vue

@@ -1,32 +1,28 @@
 <template>
   <div id="app">
-    <div id="nav">
-      <router-link to="/">Home</router-link> |
-      <router-link to="/about">About</router-link>
-    </div>
     <router-view />
   </div>
 </template>
 
 <style lang="less">
-#app {
-  font-family: Avenir, Helvetica, Arial, sans-serif;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-  text-align: center;
-  color: #2c3e50;
+body {
+  margin: 0;
+  overflow-x: hidden;
 }
-
-#nav {
-  padding: 30px;
-
-  a {
-    font-weight: bold;
-    color: #2c3e50;
-
-    &.router-link-exact-active {
-      color: #42b983;
-    }
-  }
+.textOver {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+p {
+  padding: 0;
+  margin: 0;
+}
+.icon {
+  width: 1em;
+  height: 1em;
+  vertical-align: -0.15em;
+  fill: currentColor;
+  overflow: hidden;
 }
 </style>

BIN
src/assets/banner.png


BIN
src/assets/lunbo.jpg


+ 0 - 130
src/components/HelloWorld.vue

@@ -1,130 +0,0 @@
-<template>
-  <div class="hello">
-    <h1>{{ msg }}</h1>
-    <p>
-      For a guide and recipes on how to configure / customize this project,<br />
-      check out the
-      <a href="https://cli.vuejs.org" target="_blank" rel="noopener"
-        >vue-cli documentation</a
-      >.
-    </p>
-    <h3>Installed CLI Plugins</h3>
-    <ul>
-      <li>
-        <a
-          href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel"
-          target="_blank"
-          rel="noopener"
-          >babel</a
-        >
-      </li>
-      <li>
-        <a
-          href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-router"
-          target="_blank"
-          rel="noopener"
-          >router</a
-        >
-      </li>
-      <li>
-        <a
-          href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-vuex"
-          target="_blank"
-          rel="noopener"
-          >vuex</a
-        >
-      </li>
-      <li>
-        <a
-          href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-eslint"
-          target="_blank"
-          rel="noopener"
-          >eslint</a
-        >
-      </li>
-    </ul>
-    <h3>Essential Links</h3>
-    <ul>
-      <li>
-        <a href="https://vuejs.org" target="_blank" rel="noopener">Core Docs</a>
-      </li>
-      <li>
-        <a href="https://forum.vuejs.org" target="_blank" rel="noopener"
-          >Forum</a
-        >
-      </li>
-      <li>
-        <a href="https://chat.vuejs.org" target="_blank" rel="noopener"
-          >Community Chat</a
-        >
-      </li>
-      <li>
-        <a href="https://twitter.com/vuejs" target="_blank" rel="noopener"
-          >Twitter</a
-        >
-      </li>
-      <li>
-        <a href="https://news.vuejs.org" target="_blank" rel="noopener">News</a>
-      </li>
-    </ul>
-    <h3>Ecosystem</h3>
-    <ul>
-      <li>
-        <a href="https://router.vuejs.org" target="_blank" rel="noopener"
-          >vue-router</a
-        >
-      </li>
-      <li>
-        <a href="https://vuex.vuejs.org" target="_blank" rel="noopener">vuex</a>
-      </li>
-      <li>
-        <a
-          href="https://github.com/vuejs/vue-devtools#vue-devtools"
-          target="_blank"
-          rel="noopener"
-          >vue-devtools</a
-        >
-      </li>
-      <li>
-        <a href="https://vue-loader.vuejs.org" target="_blank" rel="noopener"
-          >vue-loader</a
-        >
-      </li>
-      <li>
-        <a
-          href="https://github.com/vuejs/awesome-vue"
-          target="_blank"
-          rel="noopener"
-          >awesome-vue</a
-        >
-      </li>
-    </ul>
-  </div>
-</template>
-
-<script>
-export default {
-  name: "HelloWorld",
-  props: {
-    msg: String
-  }
-};
-</script>
-
-<!-- Add "scoped" attribute to limit CSS to this component only -->
-<style scoped lang="less">
-h3 {
-  margin: 40px 0 0;
-}
-ul {
-  list-style-type: none;
-  padding: 0;
-}
-li {
-  display: inline-block;
-  margin: 0 10px;
-}
-a {
-  color: #42b983;
-}
-</style>

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 37 - 0
src/iconfonts/iconfont.css


BIN
src/iconfonts/iconfont.eot


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 64 - 0
src/iconfonts/iconfont.js


+ 44 - 0
src/iconfonts/iconfont.json

@@ -0,0 +1,44 @@
+{
+  "id": "1980652",
+  "name": "test",
+  "font_family": "iconfont",
+  "css_prefix_text": "icon",
+  "description": "",
+  "glyphs": [
+    {
+      "icon_id": "16192683",
+      "name": "医院",
+      "font_class": "yiyuan",
+      "unicode": "e86f",
+      "unicode_decimal": 59503
+    },
+    {
+      "icon_id": "3893479",
+      "name": "绩效",
+      "font_class": "jixiao",
+      "unicode": "e628",
+      "unicode_decimal": 58920
+    },
+    {
+      "icon_id": "16250626",
+      "name": "参数二维码",
+      "font_class": "canshuerweima",
+      "unicode": "e600",
+      "unicode_decimal": 58880
+    },
+    {
+      "icon_id": "13478723",
+      "name": "警告",
+      "font_class": "A",
+      "unicode": "e6ee",
+      "unicode_decimal": 59118
+    },
+    {
+      "icon_id": "14231964",
+      "name": "听力测试",
+      "font_class": "tingliceshi",
+      "unicode": "e61d",
+      "unicode_decimal": 58909
+    }
+  ]
+}

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 41 - 0
src/iconfonts/iconfont.svg


BIN
src/iconfonts/iconfont.ttf


BIN
src/iconfonts/iconfont.woff


BIN
src/iconfonts/iconfont.woff2


+ 40 - 0
src/layout/index/banner.vue

@@ -0,0 +1,40 @@
+<template>
+  <div id="banner">
+    <el-row>
+      <el-col :span="24">
+        <el-carousel height="300px">
+          <el-carousel-item v-for="(item, index) in bannerlist" :key="index">
+            <el-image :src="item.pic" style="width:100%;height:300px;"></el-image>
+          </el-carousel-item>
+        </el-carousel>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'banner',
+  props: {
+    bannerlist: { type: Array },
+  },
+  components: {},
+  data: function() {
+    return {};
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped></style>

+ 194 - 0
src/layout/index/mainOne.vue

@@ -0,0 +1,194 @@
+<template>
+  <div id="mainOne">
+    <el-row>
+      <el-col :span="24" class="mainOne">
+        <el-col :span="8" class="left animate__animated animate__fadeInUp">
+          <el-carousel height="300px">
+            <el-carousel-item v-for="(item, index) in carouselList" :key="index">
+              <el-image :src="item.pic" style="width:100%;height:300px;"></el-image>
+              <p class="carouselTitle textOver">{{ item.title }}</p>
+            </el-carousel-item>
+          </el-carousel>
+        </el-col>
+        <el-col :span="10" class="center animate__animated animate__fadeInUp">
+          <el-col :span="24" class="top">
+            <el-col :span="20" class="topTitle">
+              <span>测试标题</span>
+            </el-col>
+            <el-col :span="4" class="topLink">
+              <el-link :underline="false">MORE</el-link>
+            </el-col>
+          </el-col>
+          <el-col :span="24" class="info">
+            <el-col :span="24" class="infoList" v-for="(item, index) in noticeList" :key="index">
+              <el-col :span="19" class="title textOver">
+                {{ item.title }}
+              </el-col>
+              <el-col :span="5" class="date">
+                {{ item.date }}
+              </el-col>
+            </el-col>
+          </el-col>
+        </el-col>
+        <el-col :span="6" class="right animate__animated animate__fadeInUp">
+          <el-col :span="24" class="top">
+            <el-col :span="20" class="topTitle">
+              <span>测试标题</span>
+            </el-col>
+            <el-col :span="4" class="topLink">
+              <el-link :underline="false">MORE</el-link>
+            </el-col>
+          </el-col>
+          <el-col :span="24" class="info">
+            <el-col :span="24" class="infoList" v-for="(item, index) in newsList" :key="index">
+              <el-col :span="24" class="title textOver">
+                {{ item.title }}
+              </el-col>
+            </el-col>
+          </el-col>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'mainOne',
+  props: {
+    carouselList: { type: Array },
+    noticeList: { type: Array },
+    newsList: { type: Array },
+  },
+  components: {},
+  data: function() {
+    return {};
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.mainOne {
+  height: 300px;
+}
+.carouselTitle {
+  position: absolute;
+  bottom: 0;
+  width: 96%;
+  height: 30px;
+  line-height: 30px;
+  padding: 0 10px;
+  color: #fff;
+  background: rgba(0, 0, 0, 0.4);
+}
+.center {
+  height: 300px;
+  background-color: #fff;
+  .top {
+    height: 39px;
+    line-height: 39px;
+    border-bottom: 1px solid #176ebb;
+    .topTitle {
+      span {
+        text-align: center;
+        display: inline-block;
+        width: 110px;
+        color: #fff;
+        font-size: 16px;
+        background-color: #176ebb;
+      }
+    }
+    .topLink {
+      .el-link {
+        width: 100%;
+        text-align: center;
+      }
+    }
+  }
+  .info {
+    padding: 0 10px;
+    .infoList {
+      height: 43px;
+      line-height: 43px;
+      .title {
+        font-size: 16px;
+        text-align: left;
+      }
+      .date {
+        font-size: 16px;
+        text-align: center;
+      }
+    }
+    .infoList:hover {
+      cursor: pointer;
+      .title {
+        color: #176ebb;
+      }
+      .date {
+        color: #176ebb;
+      }
+    }
+  }
+}
+.right {
+  height: 300px;
+  background-color: #fff;
+  .top {
+    height: 39px;
+    line-height: 39px;
+    border-bottom: 1px solid #176ebb;
+    .topTitle {
+      span {
+        text-align: center;
+        display: inline-block;
+        width: 110px;
+        color: #fff;
+        font-size: 16px;
+        background-color: #176ebb;
+      }
+    }
+    .topLink {
+      .el-link {
+        width: 100%;
+        text-align: center;
+      }
+    }
+  }
+  .info {
+    padding: 0 10px;
+    .infoList {
+      height: 43px;
+      line-height: 43px;
+      .title {
+        font-size: 16px;
+        text-align: left;
+      }
+      .date {
+        font-size: 16px;
+        text-align: center;
+      }
+    }
+    .infoList:hover {
+      cursor: pointer;
+      .title {
+        color: #176ebb;
+      }
+      .date {
+        color: #176ebb;
+      }
+    }
+  }
+}
+</style>

+ 166 - 0
src/layout/index/mainTwo.vue

@@ -0,0 +1,166 @@
+<template>
+  <div id="mainTwo">
+    <el-row>
+      <el-col :span="24" class="mainTwo">
+        <el-col :span="10" class="center animate__animated animate__fadeInUp">
+          <el-col :span="24" class="top">
+            <el-col :span="20" class="topTitle">
+              <span>测试标题</span>
+            </el-col>
+            <el-col :span="4" class="topLink">
+              <el-link :underline="false">MORE</el-link>
+            </el-col>
+          </el-col>
+          <el-col :span="24" class="info">
+            <el-col :span="24" class="infoList" v-for="(item, index) in noticeList1" :key="index">
+              <el-col :span="19" class="title textOver">
+                {{ item.title }}
+              </el-col>
+              <el-col :span="5" class="date">
+                {{ item.date }}
+              </el-col>
+            </el-col>
+          </el-col>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'mainOne',
+  props: {
+    noticeList1: { type: Array },
+  },
+  components: {},
+  data: function() {
+    return {};
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.mainTwo {
+  height: 300px;
+}
+.carouselTitle {
+  position: absolute;
+  bottom: 0;
+  width: 96%;
+  height: 30px;
+  line-height: 30px;
+  padding: 0 10px;
+  color: #fff;
+  background: rgba(0, 0, 0, 0.4);
+}
+.center {
+  height: 300px;
+  background-color: #fff;
+  .top {
+    height: 39px;
+    line-height: 39px;
+    border-bottom: 1px solid #176ebb;
+    .topTitle {
+      span {
+        text-align: center;
+        display: inline-block;
+        width: 110px;
+        color: #fff;
+        font-size: 16px;
+        background-color: #176ebb;
+      }
+    }
+    .topLink {
+      .el-link {
+        width: 100%;
+        text-align: center;
+      }
+    }
+  }
+  .info {
+    padding: 0 10px;
+    .infoList {
+      height: 43px;
+      line-height: 43px;
+      .title {
+        font-size: 16px;
+        text-align: left;
+      }
+      .date {
+        font-size: 16px;
+        text-align: center;
+      }
+    }
+    .infoList:hover {
+      cursor: pointer;
+      .title {
+        color: #176ebb;
+      }
+      .date {
+        color: #176ebb;
+      }
+    }
+  }
+}
+.right {
+  background-color: #fff;
+  .top {
+    height: 39px;
+    line-height: 39px;
+    border-bottom: 1px solid #176ebb;
+    .topTitle {
+      span {
+        text-align: center;
+        display: inline-block;
+        width: 110px;
+        color: #fff;
+        font-size: 16px;
+        background-color: #176ebb;
+      }
+    }
+    .topLink {
+      .el-link {
+        width: 100%;
+        text-align: center;
+      }
+    }
+  }
+  .info {
+    padding: 0 10px;
+    .infoList {
+      height: 43px;
+      line-height: 43px;
+      .title {
+        font-size: 16px;
+        text-align: left;
+      }
+      .date {
+        font-size: 16px;
+        text-align: center;
+      }
+    }
+    .infoList:hover {
+      cursor: pointer;
+      .title {
+        color: #176ebb;
+      }
+      .date {
+        color: #176ebb;
+      }
+    }
+  }
+}
+</style>

+ 65 - 0
src/layout/index/menuInfo.vue

@@ -0,0 +1,65 @@
+<template>
+  <div id="menuInfo">
+    <el-row>
+      <el-col :span="24" class="menu">
+        <div class="w_1200">
+          <el-menu :default-active="activeIndex" class="el-menu-demo" mode="horizontal" background-color="#0457c7" text-color="#fff" active-text-color="#fff">
+            <el-menu-item index="1">首页</el-menu-item>
+            <el-menu-item index="2">测试页</el-menu-item>
+            <el-menu-item index="3">测试页</el-menu-item>
+            <el-menu-item index="4">测试页</el-menu-item>
+            <el-menu-item index="5">测试页</el-menu-item>
+            <el-menu-item index="6">测试页</el-menu-item>
+            <el-menu-item index="7">测试页</el-menu-item>
+            <el-menu-item index="8">测试页</el-menu-item>
+          </el-menu>
+        </div>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'menuInfo',
+  props: {},
+  components: {},
+  data: function() {
+    return {
+      activeIndex: '1',
+    };
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.w_1200 {
+  width: 1200px;
+  margin: 0 auto;
+}
+.menu {
+  background-color: rgb(4, 87, 199);
+}
+/deep/.el-menu--horizontal > .el-menu-item.is-active {
+  background-color: #03469f !important;
+  border-bottom: none !important;
+}
+/deep/.el-menu--horizontal > .el-menu-item {
+  border-bottom: none;
+}
+/deep/.el-menu.el-menu--horizontal {
+  border-bottom: none;
+}
+</style>

+ 34 - 0
src/layout/index/top.vue

@@ -0,0 +1,34 @@
+<template>
+  <div id="top">
+    <el-row>
+      <el-col :span="24">
+        您好,欢迎访问吉林省高等学校毕业生就业信息网!
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'top',
+  props: {},
+  components: {},
+  data: function() {
+    return {};
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped></style>

+ 22 - 9
src/main.js

@@ -1,12 +1,25 @@
-import Vue from "vue";
-import App from "./App.vue";
-import router from "./router";
-import store from "./store";
-
-Vue.config.productionTip = false;
-
+import Vue from 'vue';
+import App from './App.vue';
+import router from './router';
+import store from './store';
+import '@/plugins/element.js';
+import '@/plugins/vant';
+import '@/plugins/axios';
+import '@/plugins/check-res';
+import '@/plugins/meta';
+import '@/plugins/filters';
+import '@/plugins/loading';
+import '@/plugins/var';
+import '@/plugins/methods';
+import '@/plugins/setting';
+import '@/iconfonts/iconfont.css';
+import '@/iconfonts/iconfont.js';
+import 'animate.css';
 new Vue({
   router,
   store,
-  render: h => h(App)
-}).$mount("#app");
+  render: h => h(App),
+}).$mount('#app');
+window.vm = new Vue({
+  router,
+});

+ 19 - 0
src/plugins/axios.js

@@ -0,0 +1,19 @@
+import Vue from 'vue';
+import AxiosWrapper from '@/util/axios-wrapper';
+
+const Plugin = {
+  install(vue, options) {
+    // 3. 注入组件
+    vue.mixin({
+      created() {
+        if (this.$store && !this.$store.$axios) {
+          this.$store.$axios = this.$axios;
+        }
+      },
+    });
+    // 4. 添加实例方法
+    vue.prototype.$axios = new AxiosWrapper(options);
+  },
+};
+
+Vue.use(Plugin, { baseUrl: process.env.VUE_APP_AXIOS_BASE_URL });

+ 42 - 0
src/plugins/check-res.js

@@ -0,0 +1,42 @@
+/* eslint-disable no-underscore-dangle */
+/* eslint-disable no-param-reassign */
+/* eslint-disable no-unused-vars */
+/* eslint-disable no-shadow */
+import Vue from 'vue';
+import _ from 'lodash';
+import { Message } from 'element-ui';
+// import { Notify } from 'vant';
+
+const vm = new Vue({});
+const Plugin = {
+  install(Vue, options) {
+    // 4. 添加实例方法
+    Vue.prototype.$checkRes = (res, okText, errText) => {
+      let _okText = okText;
+      let _errText = errText;
+      if (!_.isFunction(okText) && _.isObject(okText) && okText != null) {
+        ({ okText: _okText, errText: _errText } = okText);
+      }
+      const { errcode = 0, errmsg } = res || {};
+      if (errcode === 0) {
+        if (_.isFunction(_okText)) {
+          return _okText();
+        }
+        if (_okText) {
+          Message.success(_okText);
+          // Notify({ type: 'success', message: _okText });
+        }
+        return true;
+      }
+      if (_.isFunction(_errText)) {
+        return _errText();
+      }
+      Message.error(_errText || errmsg);
+      // Notify({ type: 'danger', message: _okText });
+      // Message({ message: _errText || errmsg, duration: 60000 });
+      return false;
+    };
+  },
+};
+
+Vue.use(Plugin);

+ 5 - 0
src/plugins/element.js

@@ -0,0 +1,5 @@
+import Vue from 'vue';
+import Element from 'element-ui';
+import 'element-ui/lib/theme-chalk/index.css';
+
+Vue.use(Element);

+ 6 - 0
src/plugins/filters.js

@@ -0,0 +1,6 @@
+import Vue from 'vue';
+import filters from '@/util/filters';
+
+for (const method in filters) {
+  Vue.filter(method, filters[method]);
+}

+ 27 - 0
src/plugins/loading.js

@@ -0,0 +1,27 @@
+/* eslint-disable no-console */
+/* eslint-disable no-param-reassign */
+
+import Vue from 'vue';
+
+const Plugin = {
+  // eslint-disable-next-line no-unused-vars
+  install(vue, options) {
+    // 3. 注入组件
+    vue.mixin({
+      created() {
+        // eslint-disable-next-line no-underscore-dangle
+        const isRoot = this.constructor === Vue;
+        // console.log(`rootId:${rootVue_uid}; thisId:${this._uid}`);
+        // if (rootVue_uid !== 3) {
+        //   console.log(this);
+        // }
+        if (isRoot) {
+          const el = document.getElementById('loading');
+          if (el) el.style.display = 'none';
+        }
+      },
+    });
+  },
+};
+
+Vue.use(Plugin, { baseUrl: process.env.VUE_APP_AXIOS_BASE_URL });

+ 4 - 0
src/plugins/meta.js

@@ -0,0 +1,4 @@
+import Vue from 'vue';
+import Meta from 'vue-meta';
+
+Vue.use(Meta);

+ 33 - 0
src/plugins/methods.js

@@ -0,0 +1,33 @@
+import Vue from 'vue';
+import _ from 'lodash';
+const Plugin = {
+  install(Vue, options) {
+    // 3. 注入组件
+    Vue.mixin({
+      created() {
+        if (this.$store && !this.$store.$toUndefined) {
+          this.$store.$toUndefined = this.$toUndefined;
+        }
+      },
+    });
+    // 4. 添加实例方法
+    Vue.prototype.$toUndefined = object => {
+      let keys = Object.keys(object);
+      keys.map(item => {
+        object[item] = object[item] === '' ? (object[item] = undefined) : object[item];
+      });
+      return object;
+    };
+    Vue.prototype.$turnTo = item => {
+      if (item.info_type == 1) {
+        window.open(item.url);
+      } else {
+        let router = window.vm.$router;
+        let route = window.vm.$route.path;
+        router.push({ path: `/info/detail?id=${item.id}` });
+      }
+    };
+  },
+};
+
+Vue.use(Plugin);

+ 20 - 0
src/plugins/setting.js

@@ -0,0 +1,20 @@
+import Vue from 'vue';
+
+Vue.config.weixin = {
+  // baseUrl: process.env.BASE_URL + 'weixin',
+  baseUrl: `http://${location.host}/weixin`,
+};
+
+Vue.config.stomp = {
+  // brokerURL: 'ws://192.168.1.190:15674/ws',
+  brokerURL: '/ws', // ws://${location.host}/ws
+  connectHeaders: {
+    host: 'live',
+    login: 'live',
+    passcode: 'live',
+  },
+  // debug: true,
+  reconnectDelay: 5000,
+  heartbeatIncoming: 4000,
+  heartbeatOutgoing: 4000,
+};

+ 65 - 0
src/plugins/stomp.js

@@ -0,0 +1,65 @@
+/**
+ * 基于WebStomp的消息处理插件
+ */
+
+import Vue from 'vue';
+import _ from 'lodash';
+import assert from 'assert';
+import { Client } from '@stomp/stompjs/esm5/client';
+
+const Plugin = {
+  install(Vue, options) {
+    assert(_.isObject(options));
+    if (options.debug && !_.isFunction(options.debug)) {
+      options.debug = str => {
+        console.log(str);
+      };
+    }
+    assert(_.isString(options.brokerURL));
+    if (!options.brokerURL.startsWith('ws://')) {
+      options.brokerURL = `wss://${location.host}${options.brokerURL}`;
+    }
+
+    // 3. 注入组件
+    Vue.mixin({
+      beforeDestroy: function() {
+        if (this.$stompClient) {
+          this.$stompClient.deactivate();
+          delete this.$stompClient;
+        }
+      },
+    });
+
+    // 4. 添加实例方法
+    Vue.prototype.$stomp = function(subscribes = {}) {
+      // connect to mq
+      const client = new Client(options);
+      client.onConnect = frame => {
+        // Do something, all subscribes must be done is this callback
+        // This is needed because this will be executed after a (re)connect
+        console.log('[stomp] connected');
+        Object.keys(subscribes)
+          .filter(p => _.isFunction(subscribes[p]))
+          .forEach(key => {
+            client.subscribe(key, subscribes[key]);
+          });
+      };
+
+      client.onStompError = frame => {
+        // Will be invoked in case of error encountered at Broker
+        // Bad login/passcode typically will cause an error
+        // Complaint brokers will set `message` header with a brief message. Body may contain details.
+        // Compliant brokers will terminate the connection after any error
+        console.log('Broker reported error: ' + frame.headers['message']);
+        console.log('Additional details: ' + frame.body);
+      };
+
+      client.activate();
+
+      this.$stompClient = client;
+    };
+  },
+};
+export default () => {
+  Vue.use(Plugin, Vue.config.stomp);
+};

+ 5 - 0
src/plugins/vant.js

@@ -0,0 +1,5 @@
+import Vue from 'vue';
+import Vant from 'vant';
+import 'vant/lib/index.css';
+
+Vue.use(Vant);

+ 25 - 0
src/plugins/var.js

@@ -0,0 +1,25 @@
+import Vue from 'vue';
+import _ from 'lodash';
+
+const getSiteId = () => {
+  let host = `${window.location.hostname}`; //`999991.smart.jilinjobswx.cn ${window.location.hostname}`
+  let schId;
+  host = host.replace('http://', '');
+  let arr = host.split('.');
+  if (arr.length > 0) {
+    schId = arr[0];
+    if (schId === 'smart') schId = 'master';
+    else `${schId}`.includes('localhost') || `${schId}`.includes('127.0.0.1') ? (schId = '99991') : '';
+    sessionStorage.setItem('schId', `${schId}`.includes('localhost') || `${schId}`.includes('127.0.0.1') ? '99991' : schId);
+  }
+  return schId;
+};
+const Plugin = {
+  install(vue, options) {
+    // 4. 添加实例方法
+    vue.prototype.$limit = 10;
+    vue.prototype.$site = getSiteId();
+  },
+};
+
+Vue.use(Plugin);

+ 20 - 17
src/router/index.js

@@ -1,28 +1,31 @@
-import Vue from "vue";
-import VueRouter from "vue-router";
-import Home from "../views/Home.vue";
+import Vue from 'vue';
+import VueRouter from 'vue-router';
 
 Vue.use(VueRouter);
 
 const routes = [
   {
-    path: "/",
-    name: "Home",
-    component: Home
+    path: '/',
+    name: 'index',
+    meta: { title: '首页' },
+    component: () => import('../views/index.vue'),
   },
   {
-    path: "/about",
-    name: "About",
-    // route level code-splitting
-    // this generates a separate chunk (about.[hash].js) for this route
-    // which is lazy-loaded when the route is visited.
-    component: () =>
-      import(/* webpackChunkName: "about" */ "../views/About.vue")
-  }
+    path: '/iconfont',
+    name: 'iconfont',
+    meta: { title: '图标' },
+    component: () => import('../views/iconfont.vue'),
+  },
+  {
+    path: '/animate',
+    name: 'animate',
+    meta: { title: '动画' },
+    component: () => import('../views/animate.vue'),
+  },
 ];
-
 const router = new VueRouter({
-  routes
+  mode: 'history',
+  base: process.env.NODE_ENV === 'development' ? '' : process.env.VUE_APP_ROUTER,
+  routes,
 });
-
 export default router;

+ 3 - 3
src/store/index.js

@@ -1,5 +1,5 @@
-import Vue from "vue";
-import Vuex from "vuex";
+import Vue from 'vue';
+import Vuex from 'vuex';
 
 Vue.use(Vuex);
 
@@ -7,5 +7,5 @@ export default new Vuex.Store({
   state: {},
   mutations: {},
   actions: {},
-  modules: {}
+  modules: {},
 });

+ 118 - 0
src/util/axios-wrapper.js

@@ -0,0 +1,118 @@
+/* eslint-disable no-console */
+/* eslint-disable no-param-reassign */
+
+import _ from 'lodash';
+import Axios from 'axios';
+import { Util, Error } from 'naf-core';
+// import { Indicator } from 'mint-ui';
+import util from './user-util';
+
+const { trimData, isNullOrUndefined } = Util;
+const { ErrorCode } = Error;
+
+let currentRequests = 0;
+
+export default class AxiosWrapper {
+  constructor({ baseUrl = '', unwrap = true } = {}) {
+    this.baseUrl = baseUrl;
+    this.unwrap = unwrap;
+  }
+
+  // 替换uri中的参数变量
+  static merge(uri, query = {}) {
+    if (!uri.includes(':')) {
+      return uri;
+    }
+    const keys = [];
+    const regexp = /\/:([a-z0-9_]+)/gi;
+    let res;
+    // eslint-disable-next-line no-cond-assign
+    while ((res = regexp.exec(uri)) != null) {
+      keys.push(res[1]);
+    }
+    keys.forEach(key => {
+      if (!isNullOrUndefined(query[key])) {
+        uri = uri.replace(`:${key}`, query[key]);
+      }
+    });
+    return uri;
+  }
+
+  $get(uri, query, options) {
+    return this.$request(uri, null, query, options);
+  }
+
+  $post(uri, data = {}, query, options) {
+    return this.$request(uri, data, query, options);
+  }
+
+  $delete(uri, data = {}, router, query, options = {}) {
+    options = { ...options, method: 'delete' };
+    return this.$request(uri, data, query, options, router);
+  }
+  async $request(uri, data, query, options) {
+    // TODO: 合并query和options
+    if (_.isObject(query) && _.isObject(options)) {
+      options = { ...options, params: query, method: 'get' };
+    } else if (_.isObject(query) && !query.params) {
+      options = { params: query };
+    } else if (_.isObject(query) && query.params) {
+      options = query;
+    }
+    if (!options) options = {};
+    if (options.params) options.params = trimData(options.params);
+    const url = AxiosWrapper.merge(uri, options.params);
+    currentRequests += 1;
+    // Indicator.open({
+    //   spinnerType: 'fading-circle',
+    // });
+
+    try {
+      const axios = Axios.create({
+        baseURL: this.baseUrl,
+      });
+      axios.defaults.headers.common.Authorization = util.token;
+      let res = await axios.request({
+        method: isNullOrUndefined(data) ? 'get' : 'post',
+        url,
+        data,
+        responseType: 'json',
+        ...options,
+      });
+      res = res.data;
+      const { errcode, errmsg, details } = res;
+      if (errcode) {
+        console.warn(`[${uri}] fail: ${errcode}-${errmsg} ${details}`);
+        return res;
+      }
+      // unwrap data
+      if (this.unwrap) {
+        res = _.omit(res, ['details']);
+        const keys = Object.keys(res);
+        if (keys.length === 1 && keys.includes('data')) {
+          res = res.data;
+        }
+      }
+      return res;
+    } catch (err) {
+      let errmsg = '接口请求失败,请稍后重试';
+      if (err.response) {
+        const { status } = err.response;
+        if (status === 401) errmsg = '用户认证失败,请重新登录';
+        if (status === 403) errmsg = '当前用户不允许执行该操作';
+      }
+      console.error(
+        `[AxiosWrapper] 接口请求失败: ${err.config && err.config.url} - 
+        ${err.message}`
+      );
+      return { errcode: ErrorCode.SERVICE_FAULT, errmsg, details: err.message };
+    } finally {
+      /* eslint-disable */
+      currentRequests -= 1;
+      if (currentRequests <= 0) {
+        currentRequests = 0;
+        // Indicator.close();
+      }
+    }
+  }
+}

+ 10 - 0
src/util/filters.js

@@ -0,0 +1,10 @@
+import _ from 'lodash';
+
+const filters = {
+  getName(object) {
+    const { data, searchItem } = object;
+    return _.get(data, searchItem) === undefined ? '' : _.get(data, searchItem);
+  },
+};
+
+export default filters;

+ 50 - 0
src/util/methods-util.js

@@ -0,0 +1,50 @@
+import { Util } from 'naf-core';
+
+const { isNullOrUndefined } = Util;
+
+export default {
+  //判断信息是否过期
+  isDateOff(dataDate) {
+    const now = new Date(new Date().getTime() - 24 * 60 * 60 * 1000);
+    dataDate = new Date(dataDate);
+    return now.getTime() <= dataDate.getTime();
+  },
+  //判断企业是否可以执行此动作/显示
+  checkCorp(data) {
+    const { role, unit, selfUnit, status, displayType, userid } = data;
+    if (!isNullOrUndefined(selfUnit) && !isNullOrUndefined(status)) {
+      return role === 'corp' && selfUnit === unit && status === '0';
+    } else if (!isNullOrUndefined(displayType)) {
+      if (role === 'corp') {
+        return role === displayType;
+      } else {
+        return role === displayType && !isNullOrUndefined(userid);
+      }
+    }
+  },
+  //获取url的参数params
+  getParams() {
+    let str = location.href;
+    let num = str.indexOf('?');
+    const param = {};
+    str = str.substr(num + 1);
+    let num2 = str.indexOf('#');
+    let str2 = '';
+    if (num2 > 0) {
+      str2 = str.substr(0, num2);
+    } else {
+      num2 = str.indexOf('/');
+      str2 = str.substr(0, num2);
+    }
+    const arr = str2.split('&');
+    for (let i = 0; i < arr.length; i++) {
+      num = arr[i].indexOf('=');
+      if (num > 0) {
+        const name = arr[i].substring(0, num);
+        const value = arr[i].substr(num + 1);
+        param[name] = decodeURI(value);
+      }
+    }
+    return param;
+  },
+};

+ 47 - 0
src/util/optionTitles.js

@@ -0,0 +1,47 @@
+export const JOBFAIR_TITLE = [
+  { prop: 'subject', label: '' },
+  { prop: 'address', label: '举办地址' },
+  { prop: 'date', label: '举办日期' },
+  { prop: 'unit', label: '分站信息' },
+];
+
+export const CAMPUS_TITLE = [
+  { prop: 'subject', label: '' },
+  { prop: 'address', label: '举办地址' },
+  { prop: 'status', label: '审核状态' },
+  { prop: 'date', label: '举办日期' },
+  { prop: 'unit', label: '分站信息' },
+];
+
+export const JOBINFO_TITLE = [
+  { prop: 'title', label: '' },
+  { prop: 'count', label: '需求人数' },
+  { prop: 'nature.name', label: '工作性质' },
+  { prop: 'salary.name', label: '薪资待遇' },
+  { prop: 'xlreqs.name', label: '最低学历' },
+  { prop: 'city.name', label: '所在城市' },
+  // { prop: 'expired', label: '状态' },
+];
+
+export const RESUME_TITLE = [{ prop: 'title', label: '' }];
+
+export const LETTER_TITLE = [
+  { prop: 'title', label: '' },
+  { prop: 'corpname', label: '企业名称' },
+  { prop: 'type', label: '类型' },
+  { prop: 'status', label: '状态' },
+];
+
+export const TICKET_TITLE = [
+  { prop: 'subject', label: '' },
+  { prop: 'type', label: '门票类型' },
+  { prop: 'origin', label: '' },
+  { prop: 'date', label: '举办日期' },
+];
+
+export const CORP_JOBFAIR = [
+  { prop: 'subject', label: '' },
+  { prop: 'time', label: '举办时间' },
+  { prop: 'date', label: '举办日期' },
+  { prop: 'unit', label: '分站信息' },
+];

+ 50 - 0
src/util/role_menu.js

@@ -0,0 +1,50 @@
+export const index = {
+  name: '首页',
+  path: '/',
+  icon: 'iconfont iconshouye',
+};
+export const user = {
+  name: '主播管理',
+  path: '/anchor/index',
+  icon: 'iconfont iconyonghu',
+};
+export const role = {
+  name: '菜单管理',
+  path: '/role/index',
+  icon: 'iconfont iconquanxian',
+};
+export const live = {
+  name: '直播管理',
+  path: '/live/index',
+  icon: 'iconfont iconzhibo',
+};
+export const room = {
+  name: '房间管理',
+  path: '/room/index',
+  icon: 'iconfont iconfangjian',
+};
+export const stat = {
+  name: '统计管理',
+  path: '/stat/index',
+  icon: 'iconfont icontongji',
+};
+export const test = {
+  name: '测试管理',
+  path: '/test/index',
+  icon: 'iconfont icontongji',
+};
+export const question = {
+  name: '问卷管理',
+  path: '/question/index',
+  icon: 'iconfont icontongji',
+};
+export const contact = {
+  name: '联系我们',
+  path: '/contact/index',
+  icon: 'iconfont iconlianxiwomen',
+};
+export const meetingBrief = {
+  name: '信息发布',
+  path: '/meetingBrief/index',
+  icon: 'iconfont iconicon_xinyong_xianxing_jijin-',
+};

+ 69 - 0
src/util/user-util.js

@@ -0,0 +1,69 @@
+/* eslint-disable no-console */
+export default {
+  get user() {
+    const val = sessionStorage.getItem('user');
+    try {
+      if (val) return JSON.parse(val);
+    } catch (err) {
+      console.error(err);
+    }
+    return null;
+  },
+  set user(userinfo) {
+    sessionStorage.setItem('user', JSON.stringify(userinfo));
+  },
+  get token() {
+    return sessionStorage.getItem('token');
+  },
+  set token(token) {
+    sessionStorage.setItem('token', token);
+  },
+  get openid() {
+    return sessionStorage.getItem('openid');
+  },
+  set openid(openid) {
+    sessionStorage.setItem('openid', openid);
+  },
+  get isGuest() {
+    return !this.user || this.user.role === 'guest';
+  },
+  save({ userinfo, token }) {
+    sessionStorage.setItem('user', JSON.stringify(userinfo));
+    sessionStorage.setItem('token', token);
+  },
+
+  get corpInfo() {
+    const val = sessionStorage.getItem('corpInfo');
+    if (val) return JSON.parse(val);
+    return null;
+  },
+  set corpInfo(corpInfo) {
+    sessionStorage.setItem('corpInfo', JSON.stringify(corpInfo));
+  },
+  saveCorpInfo(corpInfo) {
+    sessionStorage.setItem('corpInfo', JSON.stringify(corpInfo));
+  },
+
+  get unit() {
+    const val = sessionStorage.getItem('unit');
+    if (val) return JSON.parse(val);
+    return null;
+  },
+  set unit(unitList) {
+    sessionStorage.setItem('unit', JSON.stringify(unitList));
+  },
+  saveUnit(unitList) {
+    sessionStorage.setItem('unit', JSON.stringify(unitList));
+  },
+  get userInfo() {
+    const val = sessionStorage.getItem('userInfo');
+    if (val) return JSON.parse(val);
+    return null;
+  },
+  set userInfo(userInfo) {
+    sessionStorage.setItem('userInfo', JSON.stringify(userInfo));
+  },
+  saveUserInfo(userInfo) {
+    sessionStorage.setItem('userInfo', JSON.stringify(userInfo));
+  },
+};

+ 0 - 5
src/views/About.vue

@@ -1,5 +0,0 @@
-<template>
-  <div class="about">
-    <h1>This is an about page</h1>
-  </div>
-</template>

+ 0 - 18
src/views/Home.vue

@@ -1,18 +0,0 @@
-<template>
-  <div class="home">
-    <img alt="Vue logo" src="../assets/logo.png" />
-    <HelloWorld msg="Welcome to Your Vue.js App" />
-  </div>
-</template>
-
-<script>
-// @ is an alias to /src
-import HelloWorld from "@/components/HelloWorld.vue";
-
-export default {
-  name: "Home",
-  components: {
-    HelloWorld
-  }
-};
-</script>

+ 43 - 0
src/views/animate.vue

@@ -0,0 +1,43 @@
+<template>
+  <div id="animate">
+    <el-row>
+      <el-col :span="24">
+        <div class="animate__animated animate__fadeInUp">
+          <h3>美睿健康产业(重庆)有限公司</h3>
+          <h5>MarryHealth Enterprises (Chongqing) Inc.</h5>
+        </div>
+        <div class="animate__animated animate__fadeInUp">
+          <p>美睿健康产业(重庆)有限公司是加拿大北美美睿健康产业集团( MarryHealth Enterprises North America Inc.)在大中华区的运营中心。</p>
+          <p>
+            北美美睿位于加拿大温哥华,是一家专注于人类健康的大型产业集团。有国际一流的健康产业投资人、健康管理专业团队、健康产品研发及生产行业的顶级专家共同投资组建,是专业从事全球健康产业投资与兼并重组,集互联网医疗、医院信息化系统统、康管理、健康产品、临床营养补充剂、功能性食品及医疗器械的研发、生产、销售及代理与一体的高新科技企业。
+          </p>
+        </div>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'animate',
+  props: {},
+  components: {},
+  data: function() {
+    return {};
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped></style>

+ 38 - 0
src/views/iconfont.vue

@@ -0,0 +1,38 @@
+<template>
+  <div id="iconfont">
+    <el-row>
+      <el-col :span="24">
+        <i class="iconfont icontingliceshi"></i>
+        <i class="iconfont">&#xe600;</i>
+        <svg class="icon" aria-hidden="true">
+          <use xlink:href="#iconcanshuerweima"></use>
+        </svg>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'iconfont',
+  props: {},
+  components: {},
+  data: function() {
+    return {};
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped></style>

+ 194 - 0
src/views/index.vue

@@ -0,0 +1,194 @@
+<template>
+  <div id="index">
+    <el-row>
+      <el-col :span="24" class="style">
+        <el-col :span="24" class="top">
+          <div class="w_1200">
+            <top></top>
+          </div>
+        </el-col>
+        <el-col :span="24" class="banner">
+          <banner :bannerlist="bannerlist"></banner>
+        </el-col>
+        <el-col :span="24" class="menu">
+          <menuInfo></menuInfo>
+        </el-col>
+        <el-col :span="24" class="main">
+          <div class="w_1200">
+            <el-col :span="24" class="mainOne">
+              <mainOne :carouselList="carouselList" :noticeList="noticeList" :newsList="newsList"></mainOne>
+            </el-col>
+            <el-col :span="24" class="mainTwo">
+              <mainTwo :noticeList1="noticeList1"></mainTwo>
+            </el-col>
+          </div>
+        </el-col>
+        <el-col :span="24" class="foot">
+          头部
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import top from '@/layout/index/top.vue';
+import banner from '@/layout/index/banner.vue';
+import menuInfo from '@/layout/index/menuInfo.vue';
+import mainOne from '@/layout/index/mainOne.vue';
+import mainTwo from '@/layout/index/mainTwo.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'index',
+  props: {},
+  components: {
+    top,
+    banner,
+    menuInfo,
+    mainOne,
+    mainTwo,
+  },
+  data: function() {
+    return {
+      // banner
+      bannerlist: [
+        {
+          pic: require('@a/banner.png'),
+        },
+        {
+          pic: require('@a/banner.png'),
+        },
+      ],
+      // 轮播
+      carouselList: [
+        {
+          pic: require('@a/lunbo.jpg'),
+          title: '测试标题',
+        },
+        {
+          pic: require('@a/lunbo.jpg'),
+          title: '测试标题',
+        },
+        {
+          pic: require('@a/lunbo.jpg'),
+          title: '测试标题',
+        },
+        {
+          pic: require('@a/lunbo.jpg'),
+          title: '测试标题',
+        },
+      ],
+      // 通知公告
+      noticeList: [
+        {
+          title: '8888888测试标题测试标题测试标题测试标题测试标题测试标题测试标题测试标题测试标题测试标题',
+          date: '2020-10-10',
+        },
+        {
+          title: '888测试标题',
+          date: '2020-10-10',
+        },
+        {
+          title: '888测试标题',
+          date: '2020-10-10',
+        },
+        {
+          title: '888测试标题',
+          date: '2020-10-10',
+        },
+      ],
+      // eslint-disable-next-line vue/no-dupe-keys
+      noticeList1: [
+        {
+          title: '55555555测试标题测试标题测试标题测试标题测试标题测试标题测试标题测试标题测试标题测试标题',
+          date: '2020-10-10',
+        },
+        {
+          title: '55555555测试标题',
+          date: '2020-10-10',
+        },
+        {
+          title: '55555555测试标题',
+          date: '2020-10-10',
+        },
+        {
+          title: '55555555测试标题',
+          date: '2020-10-10',
+        },
+      ],
+      // eslint-disable-next-line vue/no-dupe-keys
+      newsList: [
+        {
+          title: '哈哈测试标题测试标题测试标题测试标题测试标题测试标题测试标题测试标题测试标题测试标题',
+        },
+        {
+          title: '哈哈测试标题',
+        },
+        {
+          title: '哈哈测试标题',
+        },
+        {
+          title: '测试标题',
+        },
+      ],
+      // eslint-disable-next-line vue/no-dupe-keys
+      newsList1: [
+        {
+          title: '添加标题测试标题测试标题测试标题测试标题测试标题测试标题测试标题测试标题测试标题',
+        },
+        {
+          title: '添加测试标题',
+        },
+        {
+          title: '添加测试标题',
+        },
+        {
+          title: '添加测试标题',
+        },
+      ],
+    };
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.w_1200 {
+  width: 1200px;
+  margin: 0 auto;
+}
+.style {
+  background-color: #f6f6f6;
+  .top {
+    height: 40px;
+    line-height: 40px;
+    background-color: hsla(0, 0%, 96.1%, 0.31);
+  }
+  // .banner {
+  //   border-bottom: 1px solid red;
+  // }
+  // .menu {
+  //   border-bottom: 1px solid red;
+  // }
+  .main {
+    margin: 10px 0 0 0;
+    border-bottom: 1px solid red;
+    .mainOne {
+      margin: 0 0 10px 0;
+    }
+  }
+  .foot {
+    border-bottom: 1px solid red;
+  }
+}
+</style>

+ 55 - 0
src/views/index1.vue

@@ -0,0 +1,55 @@
+<template>
+  <div id="index">
+    <el-row>
+      <el-row :span="24" class="style">
+        <div class="w_1270">
+          <el-col :span="24" class='top'>
+            <el-row>
+              <el-col :span="19">
+                您好,欢迎访问吉林省高等学校毕业生就业信息网!
+              </el-col>
+            </el-row>
+          </el-col>
+        </div>
+        </el-row>
+      </el-row>
+        <el-row :span="24" class='banner'>
+          <div id="banner">
+            <el-col :span="24">
+              <el-image :src="banner.png" style="width:100%;height:300px;">
+              </el-image>
+            </el-col>
+          </div>
+        </el-row>
+        
+      </el-row>
+    </el-row>
+  </div>
+</template>>
+
+<script>
+import top from '@/layout/index/top.vue';
+import banner from '@/layout/index/banner.vue';
+import menuInfo from '@/layout/index/menuInfo.vue';
+import mainOne from '@/layout/index/mainOne.vue';
+import mainTwo from '@/layout/index/mainTwo.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+import { component } from 'vue/types/umd';
+export default {
+  name:'index'
+  props:{},
+  components:{
+    top,
+    banner,
+    menuInfo,
+
+  },
+data:function () {
+  
+}
+}
+</script>
+
+<style scoped>
+
+</style>

+ 42 - 0
vue.config.js

@@ -0,0 +1,42 @@
+const path = require('path');
+// const common = path.resolve(__dirname, '../common');
+module.exports = {
+  publicPath: process.env.NODE_ENV === 'development' ? '/' : process.env.VUE_APP_ROUTER,
+  // outputDir: process.env.VUE_APP_ROUTER,
+  configureWebpack: config => {
+    Object.assign(config, {
+      // 开发生产共同配置
+      resolve: {
+        alias: {
+          '@': path.resolve(__dirname, './src'),
+          '@c': path.resolve(__dirname, './src/components'),
+          '@a': path.resolve(__dirname, './src/assets'),
+          // '@common': common,
+        },
+      },
+    });
+  },
+  devServer: {
+    port: '8001',
+    //api地址前缀
+    proxy: {
+      '/weixin': {
+        target: 'http://smart.cc-lotus.info',
+        changeOrigin: true,
+        ws: true,
+      },
+      '/files': {
+        target: 'https://zb.liaoningdoupo.com',
+      },
+      '/api': {
+        target: 'https://zb.liaoningdoupo.com',
+        changeOrigin: true,
+        ws: true,
+      },
+      '/ws': {
+        target: 'https://zb.liaoningdoupo.com',
+        ws: true,
+      },
+    },
+  },
+};