Jelajahi Sumber

first commit

guanchunjie 3 tahun lalu
melakukan
d5edd86956
100 mengubah file dengan 721 tambahan dan 0 penghapusan
  1. 14 0
      .editorconfig
  2. 5 0
      .env.development
  3. 6 0
      .env.production
  4. 8 0
      .env.staging
  5. 4 0
      .eslintignore
  6. 198 0
      .eslintrc.js
  7. 17 0
      .gitignore
  8. 5 0
      .travis.yml
  9. 21 0
      LICENSE
  10. 102 0
      README-zh.md
  11. 90 0
      README.md
  12. 14 0
      babel.config.js
  13. 35 0
      build/index.js
  14. 24 0
      jest.config.js
  15. 9 0
      jsconfig.json
  16. 66 0
      package.json
  17. 8 0
      postcss.config.js
  18. TEMPAT SAMPAH
      public/favicon.ico
  19. 17 0
      public/index.html
  20. 11 0
      src/App.vue
  21. 67 0
      src/api/ajax.js
  22. TEMPAT SAMPAH
      src/assets/404_images/404.png
  23. TEMPAT SAMPAH
      src/assets/404_images/404_cloud.png
  24. TEMPAT SAMPAH
      src/assets/Personalcenter/1.png
  25. TEMPAT SAMPAH
      src/assets/Personalcenter/2.png
  26. TEMPAT SAMPAH
      src/assets/Personalcenter/3.png
  27. TEMPAT SAMPAH
      src/assets/Personalcenter/4.png
  28. TEMPAT SAMPAH
      src/assets/Personalcenter/5.png
  29. TEMPAT SAMPAH
      src/assets/Personalcenter/check.png
  30. TEMPAT SAMPAH
      src/assets/Personalcenter/checked.png
  31. TEMPAT SAMPAH
      src/assets/Personalcenter/complete-icon.png
  32. TEMPAT SAMPAH
      src/assets/Personalcenter/del-3.png
  33. TEMPAT SAMPAH
      src/assets/Personalcenter/del-order.png
  34. TEMPAT SAMPAH
      src/assets/Personalcenter/delete-icon.png
  35. TEMPAT SAMPAH
      src/assets/Personalcenter/edit-avator.png
  36. TEMPAT SAMPAH
      src/assets/Personalcenter/edit-icon.png
  37. TEMPAT SAMPAH
      src/assets/Personalcenter/excel.png
  38. TEMPAT SAMPAH
      src/assets/Personalcenter/hanzi-play.png
  39. TEMPAT SAMPAH
      src/assets/Personalcenter/hanzi-write.png
  40. TEMPAT SAMPAH
      src/assets/Personalcenter/headbg.png
  41. TEMPAT SAMPAH
      src/assets/Personalcenter/headphoto.png
  42. TEMPAT SAMPAH
      src/assets/Personalcenter/image/img1.png
  43. TEMPAT SAMPAH
      src/assets/Personalcenter/image/img10.png
  44. TEMPAT SAMPAH
      src/assets/Personalcenter/image/img11.png
  45. TEMPAT SAMPAH
      src/assets/Personalcenter/image/img12.png
  46. TEMPAT SAMPAH
      src/assets/Personalcenter/image/img13.png
  47. TEMPAT SAMPAH
      src/assets/Personalcenter/image/img14.png
  48. TEMPAT SAMPAH
      src/assets/Personalcenter/image/img15.png
  49. TEMPAT SAMPAH
      src/assets/Personalcenter/image/img16.png
  50. TEMPAT SAMPAH
      src/assets/Personalcenter/image/img2.png
  51. TEMPAT SAMPAH
      src/assets/Personalcenter/image/img3.png
  52. TEMPAT SAMPAH
      src/assets/Personalcenter/image/img4.png
  53. TEMPAT SAMPAH
      src/assets/Personalcenter/image/img5.png
  54. TEMPAT SAMPAH
      src/assets/Personalcenter/image/img6.png
  55. TEMPAT SAMPAH
      src/assets/Personalcenter/image/img7.png
  56. TEMPAT SAMPAH
      src/assets/Personalcenter/image/img8.png
  57. TEMPAT SAMPAH
      src/assets/Personalcenter/image/img9.png
  58. TEMPAT SAMPAH
      src/assets/Personalcenter/image/orderImg.png
  59. TEMPAT SAMPAH
      src/assets/Personalcenter/nav1-1.png
  60. TEMPAT SAMPAH
      src/assets/Personalcenter/nav1.png
  61. TEMPAT SAMPAH
      src/assets/Personalcenter/nav2-1.png
  62. TEMPAT SAMPAH
      src/assets/Personalcenter/nav2.png
  63. TEMPAT SAMPAH
      src/assets/Personalcenter/nav3-1.png
  64. TEMPAT SAMPAH
      src/assets/Personalcenter/nav3.png
  65. TEMPAT SAMPAH
      src/assets/Personalcenter/nav4-1.png
  66. TEMPAT SAMPAH
      src/assets/Personalcenter/nav4.png
  67. TEMPAT SAMPAH
      src/assets/Personalcenter/nav5-1.png
  68. TEMPAT SAMPAH
      src/assets/Personalcenter/nav5.png
  69. TEMPAT SAMPAH
      src/assets/Personalcenter/nav6-1.png
  70. TEMPAT SAMPAH
      src/assets/Personalcenter/nav6.png
  71. TEMPAT SAMPAH
      src/assets/Personalcenter/nav7-1.png
  72. TEMPAT SAMPAH
      src/assets/Personalcenter/nav7.png
  73. TEMPAT SAMPAH
      src/assets/Personalcenter/nav8-1.png
  74. TEMPAT SAMPAH
      src/assets/Personalcenter/nav8.png
  75. TEMPAT SAMPAH
      src/assets/Personalcenter/notice.png
  76. TEMPAT SAMPAH
      src/assets/Personalcenter/pdf.png
  77. TEMPAT SAMPAH
      src/assets/Personalcenter/ppt.png
  78. TEMPAT SAMPAH
      src/assets/Personalcenter/selected-icon.png
  79. TEMPAT SAMPAH
      src/assets/Personalcenter/sex.png
  80. TEMPAT SAMPAH
      src/assets/Personalcenter/system-msg-icon.png
  81. TEMPAT SAMPAH
      src/assets/Personalcenter/teacher-msg-icon.png
  82. TEMPAT SAMPAH
      src/assets/Personalcenter/word.png
  83. TEMPAT SAMPAH
      src/assets/login/Ellipse 74.png
  84. TEMPAT SAMPAH
      src/assets/login/Ellipse87.png
  85. TEMPAT SAMPAH
      src/assets/login/Frame3.png
  86. TEMPAT SAMPAH
      src/assets/login/Frame77.png
  87. TEMPAT SAMPAH
      src/assets/login/Group 2149.png
  88. TEMPAT SAMPAH
      src/assets/login/Group3214.png
  89. TEMPAT SAMPAH
      src/assets/login/Vector.png
  90. TEMPAT SAMPAH
      src/assets/login/Vector2.png
  91. TEMPAT SAMPAH
      src/assets/login/bg-login.jpg
  92. TEMPAT SAMPAH
      src/assets/login/diandian.png
  93. TEMPAT SAMPAH
      src/assets/login/email.png
  94. TEMPAT SAMPAH
      src/assets/login/image 4.png
  95. TEMPAT SAMPAH
      src/assets/login/indexBG.png
  96. TEMPAT SAMPAH
      src/assets/login/indexBG2.png
  97. TEMPAT SAMPAH
      src/assets/login/lock.png
  98. TEMPAT SAMPAH
      src/assets/login/lock2.png
  99. TEMPAT SAMPAH
      src/assets/login/password1.png
  100. TEMPAT SAMPAH
      src/assets/login/password2.png

+ 14 - 0
.editorconfig

@@ -0,0 +1,14 @@
+# http://editorconfig.org
+root = true
+
+[*]
+charset = utf-8
+indent_style = space
+indent_size = 2
+end_of_line = lf
+insert_final_newline = true
+trim_trailing_whitespace = true
+
+[*.md]
+insert_final_newline = false
+trim_trailing_whitespace = false

+ 5 - 0
.env.development

@@ -0,0 +1,5 @@
+# just a flag
+ENV = 'development'
+
+# base api
+VUE_APP_BASE_API = '/dev-api'

+ 6 - 0
.env.production

@@ -0,0 +1,6 @@
+# just a flag
+ENV = 'production'
+
+# base api
+VUE_APP_BASE_API = ''
+

+ 8 - 0
.env.staging

@@ -0,0 +1,8 @@
+NODE_ENV = production
+
+# just a flag
+ENV = 'staging'
+
+# base api
+VUE_APP_BASE_API = '/stage-api'
+

+ 4 - 0
.eslintignore

@@ -0,0 +1,4 @@
+build/*.js
+src/assets
+public
+dist

+ 198 - 0
.eslintrc.js

@@ -0,0 +1,198 @@
+module.exports = {
+  root: true,
+  parserOptions: {
+    parser: 'babel-eslint',
+    sourceType: 'module'
+  },
+  env: {
+    browser: true,
+    node: true,
+    es6: true,
+  },
+  extends: ['plugin:vue/recommended', 'eslint:recommended'],
+
+  // add your custom rules here
+  //it is base on https://github.com/vuejs/eslint-config-vue
+  rules: {
+    "vue/max-attributes-per-line": [2, {
+      "singleline": 10,
+      "multiline": {
+        "max": 1,
+        "allowFirstLine": false
+      }
+    }],
+    "vue/singleline-html-element-content-newline": "off",
+    "vue/multiline-html-element-content-newline":"off",
+    "vue/name-property-casing": ["error", "PascalCase"],
+    "vue/no-v-html": "off",
+    'accessor-pairs': 2,
+    'arrow-spacing': [2, {
+      'before': true,
+      'after': true
+    }],
+    'block-spacing': [2, 'always'],
+    'brace-style': [2, '1tbs', {
+      'allowSingleLine': true
+    }],
+    'camelcase': [0, {
+      'properties': 'always'
+    }],
+    'comma-dangle': [2, 'never'],
+    'comma-spacing': [2, {
+      'before': false,
+      'after': true
+    }],
+    'comma-style': [2, 'last'],
+    'constructor-super': 2,
+    'curly': [2, 'multi-line'],
+    'dot-location': [2, 'property'],
+    'eol-last': 2,
+    'eqeqeq': ["error", "always", {"null": "ignore"}],
+    'generator-star-spacing': [2, {
+      'before': true,
+      'after': true
+    }],
+    'handle-callback-err': [2, '^(err|error)$'],
+    'indent': [2, 2, {
+      'SwitchCase': 1
+    }],
+    'jsx-quotes': [2, 'prefer-single'],
+    'key-spacing': [2, {
+      'beforeColon': false,
+      'afterColon': true
+    }],
+    'keyword-spacing': [2, {
+      'before': true,
+      'after': true
+    }],
+    'new-cap': [2, {
+      'newIsCap': true,
+      'capIsNew': false
+    }],
+    'new-parens': 2,
+    'no-array-constructor': 2,
+    'no-caller': 2,
+    'no-console': 'off',
+    'no-class-assign': 2,
+    'no-cond-assign': 2,
+    'no-const-assign': 2,
+    'no-control-regex': 0,
+    'no-delete-var': 2,
+    'no-dupe-args': 2,
+    'no-dupe-class-members': 2,
+    'no-dupe-keys': 2,
+    'no-duplicate-case': 2,
+    'no-empty-character-class': 2,
+    'no-empty-pattern': 2,
+    'no-eval': 2,
+    'no-ex-assign': 2,
+    'no-extend-native': 2,
+    'no-extra-bind': 2,
+    'no-extra-boolean-cast': 2,
+    'no-extra-parens': [2, 'functions'],
+    'no-fallthrough': 2,
+    'no-floating-decimal': 2,
+    'no-func-assign': 2,
+    'no-implied-eval': 2,
+    'no-inner-declarations': [2, 'functions'],
+    'no-invalid-regexp': 2,
+    'no-irregular-whitespace': 2,
+    'no-iterator': 2,
+    'no-label-var': 2,
+    'no-labels': [2, {
+      'allowLoop': false,
+      'allowSwitch': false
+    }],
+    'no-lone-blocks': 2,
+    'no-mixed-spaces-and-tabs': 2,
+    'no-multi-spaces': 2,
+    'no-multi-str': 2,
+    'no-multiple-empty-lines': [2, {
+      'max': 1
+    }],
+    'no-native-reassign': 2,
+    'no-negated-in-lhs': 2,
+    'no-new-object': 2,
+    'no-new-require': 2,
+    'no-new-symbol': 2,
+    'no-new-wrappers': 2,
+    'no-obj-calls': 2,
+    'no-octal': 2,
+    'no-octal-escape': 2,
+    'no-path-concat': 2,
+    'no-proto': 2,
+    'no-redeclare': 2,
+    'no-regex-spaces': 2,
+    'no-return-assign': [2, 'except-parens'],
+    'no-self-assign': 2,
+    'no-self-compare': 2,
+    'no-sequences': 2,
+    'no-shadow-restricted-names': 2,
+    'no-spaced-func': 2,
+    'no-sparse-arrays': 2,
+    'no-this-before-super': 2,
+    'no-throw-literal': 2,
+    'no-trailing-spaces': 2,
+    'no-undef': 2,
+    'no-undef-init': 2,
+    'no-unexpected-multiline': 2,
+    'no-unmodified-loop-condition': 2,
+    'no-unneeded-ternary': [2, {
+      'defaultAssignment': false
+    }],
+    'no-unreachable': 2,
+    'no-unsafe-finally': 2,
+    'no-unused-vars': [2, {
+      'vars': 'all',
+      'args': 'none'
+    }],
+    'no-useless-call': 2,
+    'no-useless-computed-key': 2,
+    'no-useless-constructor': 2,
+    'no-useless-escape': 0,
+    'no-whitespace-before-property': 2,
+    'no-with': 2,
+    'one-var': [2, {
+      'initialized': 'never'
+    }],
+    'operator-linebreak': [2, 'after', {
+      'overrides': {
+        '?': 'before',
+        ':': 'before'
+      }
+    }],
+    'padded-blocks': [2, 'never'],
+    'quotes': [2, 'single', {
+      'avoidEscape': true,
+      'allowTemplateLiterals': true
+    }],
+    'semi': [2, 'never'],
+    'semi-spacing': [2, {
+      'before': false,
+      'after': true
+    }],
+    'space-before-blocks': [2, 'always'],
+    'space-before-function-paren': [2, 'never'],
+    'space-in-parens': [2, 'never'],
+    'space-infix-ops': 2,
+    'space-unary-ops': [2, {
+      'words': true,
+      'nonwords': false
+    }],
+    'spaced-comment': [2, 'always', {
+      'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ',']
+    }],
+    'template-curly-spacing': [2, 'never'],
+    'use-isnan': 2,
+    'valid-typeof': 2,
+    'wrap-iife': [2, 'any'],
+    'yield-star-spacing': [2, 'both'],
+    'yoda': [2, 'never'],
+    'prefer-const': 2,
+    'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0,
+    'object-curly-spacing': [2, 'always', {
+      objectsInObjects: false
+    }],
+    'array-bracket-spacing': [2, 'never']
+  }
+}

+ 17 - 0
.gitignore

@@ -0,0 +1,17 @@
+.DS_Store
+node_modules/
+dist/
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+package-lock.json
+tests/**/coverage/
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.zip

+ 5 - 0
.travis.yml

@@ -0,0 +1,5 @@
+language: node_js
+node_js: 10
+script: npm run test
+notifications:
+  email: false

+ 21 - 0
LICENSE

@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2017-present PanJiaChen
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

+ 102 - 0
README-zh.md

@@ -0,0 +1,102 @@
+# vue-admin-template
+
+> 这是一个极简的 vue admin 管理后台。它只包含了 Element UI & axios & iconfont & permission control & lint,这些搭建后台必要的东西。
+
+[线上地址](http://panjiachen.github.io/vue-admin-template)
+
+[国内访问](https://panjiachen.gitee.io/vue-admin-template)
+
+目前版本为 `v4.0+` 基于 `vue-cli` 进行构建,若你想使用旧版本,可以切换分支到[tag/3.11.0](https://github.com/PanJiaChen/vue-admin-template/tree/tag/3.11.0),它不依赖 `vue-cli`。
+
+## Extra
+
+如果你想要根据用户角色来动态生成侧边栏和 router,你可以使用该分支[permission-control](https://github.com/PanJiaChen/vue-admin-template/tree/permission-control)
+
+## 相关项目
+
+- [vue-element-admin](https://github.com/PanJiaChen/vue-element-admin)
+
+- [electron-vue-admin](https://github.com/PanJiaChen/electron-vue-admin)
+
+- [vue-typescript-admin-template](https://github.com/Armour/vue-typescript-admin-template)
+
+- [awesome-project](https://github.com/PanJiaChen/vue-element-admin/issues/2312)
+
+写了一个系列的教程配套文章,如何从零构建后一个完整的后台项目:
+
+- [手摸手,带你用 vue 撸后台 系列一(基础篇)](https://juejin.im/post/59097cd7a22b9d0065fb61d2)
+- [手摸手,带你用 vue 撸后台 系列二(登录权限篇)](https://juejin.im/post/591aa14f570c35006961acac)
+- [手摸手,带你用 vue 撸后台 系列三 (实战篇)](https://juejin.im/post/593121aa0ce4630057f70d35)
+- [手摸手,带你用 vue 撸后台 系列四(vueAdmin 一个极简的后台基础模板,专门针对本项目的文章,算作是一篇文档)](https://juejin.im/post/595b4d776fb9a06bbe7dba56)
+- [手摸手,带你封装一个 vue component](https://segmentfault.com/a/1190000009090836)
+
+## Build Setup
+
+```bash
+# 克隆项目
+git clone https://github.com/PanJiaChen/vue-admin-template.git
+
+# 进入项目目录
+cd vue-admin-template
+
+# 安装依赖
+npm install
+
+# 建议不要直接使用 cnpm 安装以来,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题
+npm install --registry=https://registry.npm.taobao.org
+
+# 启动服务
+npm run dev
+```
+
+浏览器访问 [http://localhost:9528](http://localhost:9528)
+
+## 发布
+
+```bash
+# 构建测试环境
+npm run build:stage
+
+# 构建生产环境
+npm run build:prod
+```
+
+## 其它
+
+```bash
+# 预览发布环境效果
+npm run preview
+
+# 预览发布环境效果 + 静态资源分析
+npm run preview -- --report
+
+# 代码格式检查
+npm run lint
+
+# 代码格式检查并自动修复
+npm run lint -- --fix
+```
+
+更多信息请参考 [使用文档](https://panjiachen.github.io/vue-element-admin-site/zh/)
+
+## 购买贴纸
+
+你也可以通过 购买[官方授权的贴纸](https://smallsticker.com/product/vue-element-admin) 的方式来支持 vue-element-admin - 每售出一张贴纸,我们将获得 2 元的捐赠。
+
+## Demo
+
+![demo](https://github.com/PanJiaChen/PanJiaChen.github.io/blob/master/images/demo.gif)
+
+## Browsers support
+
+Modern browsers and Internet Explorer 10+.
+
+| [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png" alt="IE / Edge" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>IE / Edge | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png" alt="Firefox" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Firefox | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png" alt="Chrome" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Chrome | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png" alt="Safari" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Safari |
+| --------- | --------- | --------- | --------- |
+| IE10, IE11, Edge| last 2 versions| last 2 versions| last 2 versions
+
+## License
+
+[MIT](https://github.com/PanJiaChen/vue-admin-template/blob/master/LICENSE) license.
+
+Copyright (c) 2017-present PanJiaChen

+ 90 - 0
README.md

@@ -0,0 +1,90 @@
+# vue-admin-template
+
+English | [简体中文](./README-zh.md)
+
+> A minimal vue admin template with Element UI & axios & iconfont & permission control & lint
+
+**Live demo:** http://panjiachen.github.io/vue-admin-template
+
+
+**The current version is `v4.0+` build on `vue-cli`. If you want to use the old version , you can switch branch to [tag/3.11.0](https://github.com/PanJiaChen/vue-admin-template/tree/tag/3.11.0), it does not rely on `vue-cli`**
+
+## Build Setup
+
+```bash
+# clone the project
+git clone https://github.com/PanJiaChen/vue-admin-template.git
+
+# enter the project directory
+cd vue-admin-template
+
+# install dependency
+npm install
+
+# develop
+npm run dev
+```
+
+This will automatically open http://localhost:9528
+
+## Build
+
+```bash
+# build for test environment
+npm run build:stage
+
+# build for production environment
+npm run build:prod
+```
+
+## Advanced
+
+```bash
+# preview the release environment effect
+npm run preview
+
+# preview the release environment effect + static resource analysis
+npm run preview -- --report
+
+# code format check
+npm run lint
+
+# code format check and auto fix
+npm run lint -- --fix
+```
+
+Refer to [Documentation](https://panjiachen.github.io/vue-element-admin-site/guide/essentials/deploy.html) for more information
+
+## Demo
+
+![demo](https://github.com/PanJiaChen/PanJiaChen.github.io/blob/master/images/demo.gif)
+
+## Extra
+
+If you want router permission && generate menu by user roles , you can use this branch [permission-control](https://github.com/PanJiaChen/vue-admin-template/tree/permission-control)
+
+For `typescript` version, you can use [vue-typescript-admin-template](https://github.com/Armour/vue-typescript-admin-template) (Credits: [@Armour](https://github.com/Armour))
+
+## Related Project
+
+- [vue-element-admin](https://github.com/PanJiaChen/vue-element-admin)
+
+- [electron-vue-admin](https://github.com/PanJiaChen/electron-vue-admin)
+
+- [vue-typescript-admin-template](https://github.com/Armour/vue-typescript-admin-template)
+
+- [awesome-project](https://github.com/PanJiaChen/vue-element-admin/issues/2312)
+
+## Browsers support
+
+Modern browsers and Internet Explorer 10+.
+
+| [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png" alt="IE / Edge" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>IE / Edge | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png" alt="Firefox" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Firefox | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png" alt="Chrome" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Chrome | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png" alt="Safari" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Safari |
+| --------- | --------- | --------- | --------- |
+| IE10, IE11, Edge| last 2 versions| last 2 versions| last 2 versions
+
+## License
+
+[MIT](https://github.com/PanJiaChen/vue-admin-template/blob/master/LICENSE) license.
+
+Copyright (c) 2017-present PanJiaChen

+ 14 - 0
babel.config.js

@@ -0,0 +1,14 @@
+module.exports = {
+  presets: [
+    // https://github.com/vuejs/vue-cli/tree/master/packages/@vue/babel-preset-app
+    '@vue/cli-plugin-babel/preset'
+  ],
+  'env': {
+    'development': {
+      // babel-plugin-dynamic-import-node plugin only does one thing by converting all import() to require().
+      // This plugin can significantly increase the speed of hot updates, when you have a large number of pages.
+      // https://panjiachen.github.io/vue-element-admin-site/guide/advanced/lazy-loading.html
+      'plugins': ['dynamic-import-node']
+    }
+  }
+}

+ 35 - 0
build/index.js

@@ -0,0 +1,35 @@
+const { run } = require('runjs')
+const chalk = require('chalk')
+const config = require('../vue.config.js')
+const rawArgv = process.argv.slice(2)
+const args = rawArgv.join(' ')
+
+if (process.env.npm_config_preview || rawArgv.includes('--preview')) {
+  const report = rawArgv.includes('--report')
+
+  run(`vue-cli-service build ${args}`)
+
+  const port = 9526
+  const publicPath = config.publicPath
+
+  var connect = require('connect')
+  var serveStatic = require('serve-static')
+  const app = connect()
+
+  app.use(
+    publicPath,
+    serveStatic('./dist', {
+      index: ['index.html', '/']
+    })
+  )
+
+  app.listen(port, function () {
+    console.log(chalk.green(`> Preview at  http://localhost:${port}${publicPath}`))
+    if (report) {
+      console.log(chalk.green(`> Report at  http://localhost:${port}${publicPath}report.html`))
+    }
+
+  })
+} else {
+  run(`vue-cli-service build ${args}`)
+}

+ 24 - 0
jest.config.js

@@ -0,0 +1,24 @@
+module.exports = {
+  moduleFileExtensions: ['js', 'jsx', 'json', 'vue'],
+  transform: {
+    '^.+\\.vue$': 'vue-jest',
+    '.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$':
+      'jest-transform-stub',
+    '^.+\\.jsx?$': 'babel-jest'
+  },
+  moduleNameMapper: {
+    '^@/(.*)$': '<rootDir>/src/$1'
+  },
+  snapshotSerializers: ['jest-serializer-vue'],
+  testMatch: [
+    '**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)'
+  ],
+  collectCoverageFrom: ['src/utils/**/*.{js,vue}', '!src/utils/auth.js', '!src/utils/request.js', 'src/components/**/*.{js,vue}'],
+  coverageDirectory: '<rootDir>/tests/unit/coverage',
+  // 'collectCoverage': true,
+  'coverageReporters': [
+    'lcov',
+    'text-summary'
+  ],
+  testURL: 'http://localhost/'
+}

+ 9 - 0
jsconfig.json

@@ -0,0 +1,9 @@
+{
+  "compilerOptions": {
+    "baseUrl": "./",
+    "paths": {
+        "@/*": ["src/*"]
+    }
+  },
+  "exclude": ["node_modules", "dist"]
+}

+ 66 - 0
package.json

@@ -0,0 +1,66 @@
+{
+  "name": "vue-admin-template",
+  "version": "4.4.0",
+  "description": "A vue admin template with Element UI & axios & iconfont & permission control & lint",
+  "author": "Pan <panfree23@gmail.com>",
+  "scripts": {
+    "dev": "vue-cli-service serve",
+    "build:prod": "vue-cli-service build",
+    "build:stage": "vue-cli-service build --mode staging",
+    "preview": "node build/index.js --preview",
+    "svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml",
+    "lint": "eslint --ext .js,.vue src",
+    "test:unit": "jest --clearCache && vue-cli-service test:unit",
+    "test:ci": "npm run lint && npm run test:unit"
+  },
+  "dependencies": {
+    "axios": "0.18.1",
+    "babel-polyfill": "^6.26.0",
+    "core-js": "3.6.5",
+    "element-ui": "2.13.2",
+    "js-base64": "^3.6.1",
+    "js-cookie": "2.2.0",
+    "normalize.css": "7.0.0",
+    "nprogress": "0.2.0",
+    "path-to-regexp": "2.4.0",
+    "vue": "2.6.10",
+    "vue-i18n": "^8.24.5",
+    "vue-image-crop-upload": "^3.0.3",
+    "vue-router": "3.0.6",
+    "vuex": "3.1.0"
+  },
+  "devDependencies": {
+    "@vue/cli-plugin-babel": "4.4.4",
+    "@vue/cli-plugin-eslint": "4.4.4",
+    "@vue/cli-plugin-unit-jest": "4.4.4",
+    "@vue/cli-service": "4.4.4",
+    "@vue/test-utils": "1.0.0-beta.29",
+    "autoprefixer": "9.5.1",
+    "babel-eslint": "10.1.0",
+    "babel-jest": "23.6.0",
+    "babel-plugin-dynamic-import-node": "2.3.3",
+    "chalk": "2.4.2",
+    "connect": "3.6.6",
+    "eslint": "6.7.2",
+    "eslint-plugin-vue": "6.2.2",
+    "html-webpack-plugin": "3.2.0",
+    "mockjs": "1.0.1-beta3",
+    "runjs": "4.3.2",
+    "sass": "1.26.8",
+    "sass-loader": "8.0.2",
+    "script-ext-html-webpack-plugin": "2.1.3",
+    "serve-static": "1.13.2",
+    "svg-sprite-loader": "4.1.3",
+    "svgo": "1.2.2",
+    "vue-template-compiler": "2.6.10"
+  },
+  "browserslist": [
+    "> 1%",
+    "last 2 versions"
+  ],
+  "engines": {
+    "node": ">=8.9",
+    "npm": ">= 3.0.0"
+  },
+  "license": "MIT"
+}

+ 8 - 0
postcss.config.js

@@ -0,0 +1,8 @@
+// https://github.com/michael-ciniawsky/postcss-load-config
+
+module.exports = {
+  'plugins': {
+    // to edit target browsers: use "browserslist" field in package.json
+    'autoprefixer': {}
+  }
+}

TEMPAT SAMPAH
public/favicon.ico


+ 17 - 0
public/index.html

@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
+    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
+    <title><%= webpackConfig.name %></title>
+  </head>
+  <body>
+    <noscript>
+      <strong>We're sorry but <%= webpackConfig.name %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
+    </noscript>
+    <div id="app"></div>
+    <!-- built files will be auto injected -->
+  </body>
+</html>

+ 11 - 0
src/App.vue

@@ -0,0 +1,11 @@
+<template>
+  <div id="app">
+    <router-view />
+  </div>
+</template>
+
+<script>
+export default {
+  name: "App",
+};
+</script>

+ 67 - 0
src/api/ajax.js

@@ -0,0 +1,67 @@
+import request from '@/utils/request';
+import Cookies from 'js-cookie';
+import { getToken } from '@/utils/auth'
+
+export function getContent(MethodName, data) {
+  let userInfor = getToken();
+  let UserCode = '', UserType = '', SessionID = ''
+  if (userInfor) {
+    let user = JSON.parse(getToken());
+    UserCode = user.user_code;
+    UserType = user.user_type;
+    SessionID = user.session_id;
+  }
+  return request({
+    url: `/GCLSFileServer/ServiceInterface?MethodName=${MethodName}&UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}`,
+    method: 'post',
+    data
+  })
+}
+
+export function getContentFile(
+  MethodName,
+  data
+) {
+  let userInfor = getToken();
+  let UserCode = '', UserType = '', SessionID = ''
+  if (userInfor) {
+    let user = JSON.parse(getToken());
+    UserCode = user.user_code;
+    UserType = user.user_type;
+    SessionID = user.session_id;
+  }
+  return request({
+    url: `/GCLSFileServer/ServiceInterface?MethodName=${MethodName}&UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}`,
+    method: 'post',
+    data
+  })
+}
+
+export function getStaticContent(MethodName, data) {
+  return request({
+    url: `/GCLSFileServer/ServiceInterface?MethodName=${MethodName}`,
+    method: 'post',
+    data
+  })
+}
+
+export function getLearnWebContent(MethodName, data) {
+  let userInfor = getToken();
+  let UserCode = '', UserType = '', SessionID = ''
+  if (userInfor) {
+    let user = JSON.parse(getToken());
+    UserCode = user.user_code;
+    UserType = user.user_type;
+    SessionID = user.session_id;
+  }
+  return request({
+    url: `/GCLSLearnWebSI/ServiceInterface?MethodName=${MethodName}&UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}`,
+    method: 'post',
+    data
+  })
+}
+
+
+
+
+

TEMPAT SAMPAH
src/assets/404_images/404.png


TEMPAT SAMPAH
src/assets/404_images/404_cloud.png


TEMPAT SAMPAH
src/assets/Personalcenter/1.png


TEMPAT SAMPAH
src/assets/Personalcenter/2.png


TEMPAT SAMPAH
src/assets/Personalcenter/3.png


TEMPAT SAMPAH
src/assets/Personalcenter/4.png


TEMPAT SAMPAH
src/assets/Personalcenter/5.png


TEMPAT SAMPAH
src/assets/Personalcenter/check.png


TEMPAT SAMPAH
src/assets/Personalcenter/checked.png


TEMPAT SAMPAH
src/assets/Personalcenter/complete-icon.png


TEMPAT SAMPAH
src/assets/Personalcenter/del-3.png


TEMPAT SAMPAH
src/assets/Personalcenter/del-order.png


TEMPAT SAMPAH
src/assets/Personalcenter/delete-icon.png


TEMPAT SAMPAH
src/assets/Personalcenter/edit-avator.png


TEMPAT SAMPAH
src/assets/Personalcenter/edit-icon.png


TEMPAT SAMPAH
src/assets/Personalcenter/excel.png


TEMPAT SAMPAH
src/assets/Personalcenter/hanzi-play.png


TEMPAT SAMPAH
src/assets/Personalcenter/hanzi-write.png


TEMPAT SAMPAH
src/assets/Personalcenter/headbg.png


TEMPAT SAMPAH
src/assets/Personalcenter/headphoto.png


TEMPAT SAMPAH
src/assets/Personalcenter/image/img1.png


TEMPAT SAMPAH
src/assets/Personalcenter/image/img10.png


TEMPAT SAMPAH
src/assets/Personalcenter/image/img11.png


TEMPAT SAMPAH
src/assets/Personalcenter/image/img12.png


TEMPAT SAMPAH
src/assets/Personalcenter/image/img13.png


TEMPAT SAMPAH
src/assets/Personalcenter/image/img14.png


TEMPAT SAMPAH
src/assets/Personalcenter/image/img15.png


TEMPAT SAMPAH
src/assets/Personalcenter/image/img16.png


TEMPAT SAMPAH
src/assets/Personalcenter/image/img2.png


TEMPAT SAMPAH
src/assets/Personalcenter/image/img3.png


TEMPAT SAMPAH
src/assets/Personalcenter/image/img4.png


TEMPAT SAMPAH
src/assets/Personalcenter/image/img5.png


TEMPAT SAMPAH
src/assets/Personalcenter/image/img6.png


TEMPAT SAMPAH
src/assets/Personalcenter/image/img7.png


TEMPAT SAMPAH
src/assets/Personalcenter/image/img8.png


TEMPAT SAMPAH
src/assets/Personalcenter/image/img9.png


TEMPAT SAMPAH
src/assets/Personalcenter/image/orderImg.png


TEMPAT SAMPAH
src/assets/Personalcenter/nav1-1.png


TEMPAT SAMPAH
src/assets/Personalcenter/nav1.png


TEMPAT SAMPAH
src/assets/Personalcenter/nav2-1.png


TEMPAT SAMPAH
src/assets/Personalcenter/nav2.png


TEMPAT SAMPAH
src/assets/Personalcenter/nav3-1.png


TEMPAT SAMPAH
src/assets/Personalcenter/nav3.png


TEMPAT SAMPAH
src/assets/Personalcenter/nav4-1.png


TEMPAT SAMPAH
src/assets/Personalcenter/nav4.png


TEMPAT SAMPAH
src/assets/Personalcenter/nav5-1.png


TEMPAT SAMPAH
src/assets/Personalcenter/nav5.png


TEMPAT SAMPAH
src/assets/Personalcenter/nav6-1.png


TEMPAT SAMPAH
src/assets/Personalcenter/nav6.png


TEMPAT SAMPAH
src/assets/Personalcenter/nav7-1.png


TEMPAT SAMPAH
src/assets/Personalcenter/nav7.png


TEMPAT SAMPAH
src/assets/Personalcenter/nav8-1.png


TEMPAT SAMPAH
src/assets/Personalcenter/nav8.png


TEMPAT SAMPAH
src/assets/Personalcenter/notice.png


TEMPAT SAMPAH
src/assets/Personalcenter/pdf.png


TEMPAT SAMPAH
src/assets/Personalcenter/ppt.png


TEMPAT SAMPAH
src/assets/Personalcenter/selected-icon.png


TEMPAT SAMPAH
src/assets/Personalcenter/sex.png


TEMPAT SAMPAH
src/assets/Personalcenter/system-msg-icon.png


TEMPAT SAMPAH
src/assets/Personalcenter/teacher-msg-icon.png


TEMPAT SAMPAH
src/assets/Personalcenter/word.png


TEMPAT SAMPAH
src/assets/login/Ellipse 74.png


TEMPAT SAMPAH
src/assets/login/Ellipse87.png


TEMPAT SAMPAH
src/assets/login/Frame3.png


TEMPAT SAMPAH
src/assets/login/Frame77.png


TEMPAT SAMPAH
src/assets/login/Group 2149.png


TEMPAT SAMPAH
src/assets/login/Group3214.png


TEMPAT SAMPAH
src/assets/login/Vector.png


TEMPAT SAMPAH
src/assets/login/Vector2.png


TEMPAT SAMPAH
src/assets/login/bg-login.jpg


TEMPAT SAMPAH
src/assets/login/diandian.png


TEMPAT SAMPAH
src/assets/login/email.png


TEMPAT SAMPAH
src/assets/login/image 4.png


TEMPAT SAMPAH
src/assets/login/indexBG.png


TEMPAT SAMPAH
src/assets/login/indexBG2.png


TEMPAT SAMPAH
src/assets/login/lock.png


TEMPAT SAMPAH
src/assets/login/lock2.png


TEMPAT SAMPAH
src/assets/login/password1.png


TEMPAT SAMPAH
src/assets/login/password2.png


Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini