Moss 1 рік тому
батько
коміт
8bae9d1556
100 змінених файлів з 4181 додано та 0 видалено
  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. 23 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. 57 0
      mock/index.js
  17. 81 0
      mock/mock-server.js
  18. 29 0
      mock/table.js
  19. 84 0
      mock/user.js
  20. 25 0
      mock/utils.js
  21. 76 0
      package.json
  22. 8 0
      postcss.config.js
  23. BIN
      public/favicon.ico
  24. BIN
      public/favicon.png
  25. 17 0
      public/index.html
  26. 0 0
      readme.txt
  27. 11 0
      src/App.vue
  28. 25 0
      src/api/common.js
  29. 91 0
      src/api/coupon.js
  30. 28 0
      src/api/dashboard.js
  31. 27 0
      src/api/discode.js
  32. 55 0
      src/api/discount.js
  33. 129 0
      src/api/draw.js
  34. 57 0
      src/api/freight.js
  35. 316 0
      src/api/goods.js
  36. 127 0
      src/api/groupbuy.js
  37. 28 0
      src/api/invoice.js
  38. 236 0
      src/api/marketing.js
  39. 197 0
      src/api/member.js
  40. 69 0
      src/api/merchant.js
  41. 37 0
      src/api/notice.js
  42. 91 0
      src/api/offline.js
  43. 207 0
      src/api/order.js
  44. 28 0
      src/api/package.js
  45. 109 0
      src/api/seckill.js
  46. 389 0
      src/api/setting.js
  47. 42 0
      src/api/settlement.js
  48. 65 0
      src/api/special.js
  49. 46 0
      src/api/storage.js
  50. 37 0
      src/api/tag/evaluate_tag.js
  51. 19 0
      src/api/tag/goods_tag.js
  52. 64 0
      src/api/tag/user_tag.js
  53. 44 0
      src/api/user.js
  54. 91 0
      src/api/wxcustomer.js
  55. BIN
      src/assets/404_images/404.png
  56. BIN
      src/assets/404_images/404_cloud.png
  57. BIN
      src/assets/common/empty.png
  58. BIN
      src/assets/common/excel.png
  59. BIN
      src/assets/common/pdf.png
  60. BIN
      src/assets/common/ppt.png
  61. BIN
      src/assets/common/word.png
  62. BIN
      src/assets/home/icon_01.png
  63. BIN
      src/assets/home/icon_02.png
  64. BIN
      src/assets/home/icon_03.png
  65. BIN
      src/assets/home/icon_04.png
  66. BIN
      src/assets/home/icon_05.png
  67. BIN
      src/assets/home/icon_06.png
  68. BIN
      src/assets/home/icon_07.png
  69. BIN
      src/assets/home/icon_08.png
  70. BIN
      src/assets/home/icon_09.png
  71. BIN
      src/assets/home/icon_10.png
  72. BIN
      src/assets/home/icon_11.png
  73. BIN
      src/assets/home/icon_12.png
  74. BIN
      src/assets/login/background.png
  75. BIN
      src/assets/login/code.png
  76. BIN
      src/assets/login/image.png
  77. BIN
      src/assets/login/logo.png
  78. BIN
      src/assets/login/title.png
  79. BIN
      src/assets/logo.png
  80. BIN
      src/assets/order/CLOSE.png
  81. BIN
      src/assets/order/DFH.png
  82. BIN
      src/assets/order/NOPAY.png
  83. BIN
      src/assets/order/OVER.png
  84. BIN
      src/assets/order/TIMEOUT.png
  85. BIN
      src/assets/order/YFH.png
  86. BIN
      src/assets/template/template_1.png
  87. BIN
      src/assets/template/template_2.png
  88. BIN
      src/assets/template/template_3.png
  89. BIN
      src/assets/template/tmp_1.png
  90. BIN
      src/assets/template/tmp_1_thumb.png
  91. BIN
      src/assets/template/tmp_2.png
  92. BIN
      src/assets/template/tmp_2_thumb.png
  93. BIN
      src/assets/template/tmp_3.png
  94. BIN
      src/assets/template/tmp_3_thumb.png
  95. 86 0
      src/components/Breadcrumb/index.vue
  96. 44 0
      src/components/Hamburger/index.vue
  97. 79 0
      src/components/Mall/Member/member-account.vue
  98. 89 0
      src/components/Mall/Member/member-address.vue
  99. 98 0
      src/components/Mall/Member/member-browse.vue
  100. 185 0
      src/components/Mall/Member/member-coupon.vue

+ 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 = 'http://121.43.111.127:10003/'

+ 6 - 0
.env.production

@@ -0,0 +1,6 @@
+# just a flag
+ENV = 'production'
+
+# base api
+VUE_APP_BASE_API = 'https://gjmall.zfire.top/api/'
+

+ 8 - 0
.env.staging

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

+ 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']
+  }
+}

+ 23 - 0
.gitignore

@@ -0,0 +1,23 @@
+.DS_Store
+node_modules
+/dist
+
+
+# local env files
+.env.local
+.env.*.local
+
+# Log files
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?

+ 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"]
+}

+ 57 - 0
mock/index.js

@@ -0,0 +1,57 @@
+const Mock = require('mockjs')
+const { param2Obj } = require('./utils')
+
+const user = require('./user')
+const table = require('./table')
+
+const mocks = [
+  ...user,
+  ...table
+]
+
+// for front mock
+// please use it cautiously, it will redefine XMLHttpRequest,
+// which will cause many of your third-party libraries to be invalidated(like progress event).
+function mockXHR() {
+  // mock patch
+  // https://github.com/nuysoft/Mock/issues/300
+  Mock.XHR.prototype.proxy_send = Mock.XHR.prototype.send
+  Mock.XHR.prototype.send = function() {
+    if (this.custom.xhr) {
+      this.custom.xhr.withCredentials = this.withCredentials || false
+
+      if (this.responseType) {
+        this.custom.xhr.responseType = this.responseType
+      }
+    }
+    this.proxy_send(...arguments)
+  }
+
+  function XHR2ExpressReqWrap(respond) {
+    return function(options) {
+      let result = null
+      if (respond instanceof Function) {
+        const { body, type, url } = options
+        // https://expressjs.com/en/4x/api.html#req
+        result = respond({
+          method: type,
+          body: JSON.parse(body),
+          query: param2Obj(url)
+        })
+      } else {
+        result = respond
+      }
+      return Mock.mock(result)
+    }
+  }
+
+  for (const i of mocks) {
+    Mock.mock(new RegExp(i.url), i.type || 'get', XHR2ExpressReqWrap(i.response))
+  }
+}
+
+module.exports = {
+  mocks,
+  mockXHR
+}
+

+ 81 - 0
mock/mock-server.js

@@ -0,0 +1,81 @@
+const chokidar = require('chokidar')
+const bodyParser = require('body-parser')
+const chalk = require('chalk')
+const path = require('path')
+const Mock = require('mockjs')
+
+const mockDir = path.join(process.cwd(), 'mock')
+
+function registerRoutes(app) {
+  let mockLastIndex
+  const { mocks } = require('./index.js')
+  const mocksForServer = mocks.map(route => {
+    return responseFake(route.url, route.type, route.response)
+  })
+  for (const mock of mocksForServer) {
+    app[mock.type](mock.url, mock.response)
+    mockLastIndex = app._router.stack.length
+  }
+  const mockRoutesLength = Object.keys(mocksForServer).length
+  return {
+    mockRoutesLength: mockRoutesLength,
+    mockStartIndex: mockLastIndex - mockRoutesLength
+  }
+}
+
+function unregisterRoutes() {
+  Object.keys(require.cache).forEach(i => {
+    if (i.includes(mockDir)) {
+      delete require.cache[require.resolve(i)]
+    }
+  })
+}
+
+// for mock server
+const responseFake = (url, type, respond) => {
+  return {
+    url: new RegExp(`${process.env.VUE_APP_BASE_API}${url}`),
+    type: type || 'get',
+    response(req, res) {
+      console.log('request invoke:' + req.path)
+      res.json(Mock.mock(respond instanceof Function ? respond(req, res) : respond))
+    }
+  }
+}
+
+module.exports = app => {
+  // parse app.body
+  // https://expressjs.com/en/4x/api.html#req.body
+  app.use(bodyParser.json())
+  app.use(bodyParser.urlencoded({
+    extended: true
+  }))
+
+  const mockRoutes = registerRoutes(app)
+  var mockRoutesLength = mockRoutes.mockRoutesLength
+  var mockStartIndex = mockRoutes.mockStartIndex
+
+  // watch files, hot reload mock server
+  chokidar.watch(mockDir, {
+    ignored: /mock-server/,
+    ignoreInitial: true
+  }).on('all', (event, path) => {
+    if (event === 'change' || event === 'add') {
+      try {
+        // remove mock routes stack
+        app._router.stack.splice(mockStartIndex, mockRoutesLength)
+
+        // clear routes cache
+        unregisterRoutes()
+
+        const mockRoutes = registerRoutes(app)
+        mockRoutesLength = mockRoutes.mockRoutesLength
+        mockStartIndex = mockRoutes.mockStartIndex
+
+        console.log(chalk.magentaBright(`\n > Mock Server hot reload success! changed  ${path}`))
+      } catch (error) {
+        console.log(chalk.redBright(error))
+      }
+    }
+  })
+}

+ 29 - 0
mock/table.js

@@ -0,0 +1,29 @@
+const Mock = require('mockjs')
+
+const data = Mock.mock({
+  'items|30': [{
+    id: '@id',
+    title: '@sentence(10, 20)',
+    'status|1': ['published', 'draft', 'deleted'],
+    author: 'name',
+    display_time: '@datetime',
+    pageviews: '@integer(300, 5000)'
+  }]
+})
+
+module.exports = [
+  {
+    url: '/vue-admin-template/table/list',
+    type: 'get',
+    response: config => {
+      const items = data.items
+      return {
+        code: 20000,
+        data: {
+          total: items.length,
+          items: items
+        }
+      }
+    }
+  }
+]

+ 84 - 0
mock/user.js

@@ -0,0 +1,84 @@
+
+const tokens = {
+  admin: {
+    token: 'admin-token'
+  },
+  editor: {
+    token: 'editor-token'
+  }
+}
+
+const users = {
+  'admin-token': {
+    roles: ['admin'],
+    introduction: 'I am a super administrator',
+    avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif',
+    name: 'Super Admin'
+  },
+  'editor-token': {
+    roles: ['editor'],
+    introduction: 'I am an editor',
+    avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif',
+    name: 'Normal Editor'
+  }
+}
+
+module.exports = [
+  // user login
+  {
+    url: '/vue-admin-template/user/login',
+    type: 'post',
+    response: config => {
+      const { username } = config.body
+      const token = tokens[username]
+
+      // mock error
+      if (!token) {
+        return {
+          code: 60204,
+          message: 'Account and password are incorrect.'
+        }
+      }
+
+      return {
+        code: 20000,
+        data: token
+      }
+    }
+  },
+
+  // get user info
+  {
+    url: '/vue-admin-template/user/info\.*',
+    type: 'get',
+    response: config => {
+      const { token } = config.query
+      const info = users[token]
+
+      // mock error
+      if (!info) {
+        return {
+          code: 50008,
+          message: 'Login failed, unable to get user details.'
+        }
+      }
+
+      return {
+        code: 20000,
+        data: info
+      }
+    }
+  },
+
+  // user logout
+  {
+    url: '/vue-admin-template/user/logout',
+    type: 'post',
+    response: _ => {
+      return {
+        code: 20000,
+        data: 'success'
+      }
+    }
+  }
+]

+ 25 - 0
mock/utils.js

@@ -0,0 +1,25 @@
+/**
+ * @param {string} url
+ * @returns {Object}
+ */
+function param2Obj(url) {
+  const search = decodeURIComponent(url.split('?')[1]).replace(/\+/g, ' ')
+  if (!search) {
+    return {}
+  }
+  const obj = {}
+  const searchArr = search.split('&')
+  searchArr.forEach(v => {
+    const index = v.indexOf('=')
+    if (index !== -1) {
+      const name = v.substring(0, index)
+      const val = v.substring(index + 1, v.length)
+      obj[name] = val
+    }
+  })
+  return obj
+}
+
+module.exports = {
+  param2Obj
+}

+ 76 - 0
package.json

@@ -0,0 +1,76 @@
+{
+  "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",
+    "clipboard": "^2.0.8",
+    "core-js": "3.6.5",
+    "echarts": "^5.1.1",
+    "element-ui": "2.13.2",
+    "js-cookie": "2.2.0",
+    "normalize.css": "7.0.0",
+    "nprogress": "0.2.0",
+    "path-to-regexp": "2.4.0",
+    "screenfull": "^4.2.0",
+    "vue": "2.6.10",
+    "vue-pdf": "^4.3.0",
+    "vue-quill-editor": "^3.0.6",
+    "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",
+  "main": "babel.config.js",
+  "directories": {
+    "test": "tests"
+  },
+  "repository": {
+    "type": "git",
+    "url": "ssh://git@gogs.zfire.top:2222/gj-train/gj-manager-front.git"
+  },
+  "keywords": []
+}

+ 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': {}
+  }
+}

BIN
public/favicon.ico


BIN
public/favicon.png


+ 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.png">
+    <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>

+ 0 - 0
readme.txt


+ 11 - 0
src/App.vue

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

+ 25 - 0
src/api/common.js

@@ -0,0 +1,25 @@
+import request from '@/utils/request'
+
+export function getSystemList(params) {
+  return request({
+    url: '/sys/dict/list/page',
+    method: 'get',
+    params
+  })
+}
+
+export function getExpress(params) {
+  return request({
+    url: '/common/express',
+    method: 'get',
+    params
+  })
+}
+
+export function getCompanyList(params) {
+  return request({
+    url: '/common/express/company',
+    method: 'get',
+    params
+  })
+}

+ 91 - 0
src/api/coupon.js

@@ -0,0 +1,91 @@
+import request from '@/utils/request'
+
+// 获取优惠券列表
+export function getList(params) {
+  return request({
+    url: '/coupon/list/page',
+    method: 'get',
+    params
+  })
+}
+
+// 新增优惠券
+export function addCoupon(params) {
+  return request({
+    url: '/coupon/add',
+    method: 'post',
+    data: params
+  })
+}
+
+// 编辑优惠券
+export function editCoupon(params) {
+  return request({
+    url: '/coupon/update',
+    method: 'post',
+    data: params
+  })
+}
+
+// 获取优惠券详情
+export function getCouponDetail(params) {
+  return request({
+    url: '/coupon/detail',
+    method: 'get',
+    params
+  })
+}
+
+// 变更优惠券标志
+export function changeCouponFlag(params) {
+  return request({
+    url: '/coupon/change/flag',
+    method: 'post',
+    params
+  })
+}
+
+// 获取分类列表
+export function getClassifyList(params) {
+  return request({
+    url: '/goods/category/list',
+    method: 'get',
+    params
+  })
+}
+
+// 获取商品列表
+export function getGoodsList(params) {
+  return request({
+    url: '/coupon/list/spec/select',
+    method: 'get',
+    params
+  })
+}
+
+// 获取标签列表
+export function getTagList(params) {
+  return request({
+    url: '/tag/list',
+    method: 'get',
+    params
+  })
+}
+
+// 获取会员列表
+export function getMemberList(params) {
+  return request({
+    url: '/member/list/page',
+    method: 'get',
+    params
+  })
+}
+
+// 补发业务员优惠券
+export function reissueCoupon(params) {
+  return request({
+    url: '/coupon/reissue',
+    method: 'post',
+    data: params
+  })
+}

+ 28 - 0
src/api/dashboard.js

@@ -0,0 +1,28 @@
+import request from '@/utils/request'
+
+// 获取概况
+export function getInfo(params) {
+  return request({
+    url: '/count/info',
+    method: 'get',
+    params
+  })
+}
+
+// 交易概述
+export function getOrder(params) {
+  return request({
+    url: '/count/order',
+    method: 'get',
+    params
+  })
+}
+
+// 商品销量排行
+export function getGoodsRank(params) {
+  return request({
+    url: '/count/goods/rank',
+    method: 'get',
+    params
+  })
+}

+ 27 - 0
src/api/discode.js

@@ -0,0 +1,27 @@
+import request from '@/utils/request'
+
+// 获取优惠码列表
+export function getList(params) {
+  return request({
+    url: '/exchange/code/count/list',
+    method: 'get',
+    params
+  })
+}
+
+export function getWebsiteList(params) {
+  return request({
+    url: '/websit/list',
+    method: 'get',
+    params
+  })
+}
+
+// 获取优惠码详情
+export function getDetail(params) {
+  return request({
+    url: '/exchange/code/list',
+    method: 'get',
+    params
+  })
+}

+ 55 - 0
src/api/discount.js

@@ -0,0 +1,55 @@
+import request from '@/utils/request'
+
+// 获取列表
+export function getList(params) {
+  return request({
+    url: '/promotion/discount/list',
+    method: 'get',
+    params
+  })
+}
+
+// 获取详情
+export function getDetail(params) {
+  return request({
+    url: '/promotion/discount/detail',
+    method: 'get',
+    params
+  })
+}
+
+// 新增
+export function addData(params) {
+  return request({
+    url: '/promotion/discount/add',
+    method: 'post',
+    data: params
+  })
+}
+
+// 编辑
+export function editData(params) {
+  return request({
+    url: '/promotion/discount/update',
+    method: 'post',
+    data: params
+  })
+}
+
+// 删除
+export function deleteData(params) {
+  return request({
+    url: '/promotion/discount/delete',
+    method: 'post',
+    params
+  })
+}
+
+// 获取活动列表
+export function getActivityList(params) {
+  return request({
+    url: '/promotion/group/list',
+    method: 'get',
+    params
+  })
+}

+ 129 - 0
src/api/draw.js

@@ -0,0 +1,129 @@
+import request from '@/utils/request'
+
+// 获取列表
+export function getList(params) {
+  return request({
+    url: '/promotion/luck/draw/list',
+    method: 'get',
+    params
+  })
+}
+
+// 新增数据
+export function addData(params) {
+  return request({
+    url: '/promotion/luck/draw/add',
+    method: 'post',
+    data: params
+  })
+}
+
+// 获取详情
+export function getDetail(params) {
+  return request({
+    url: '/promotion/luck/draw/detail',
+    method: 'get',
+    params
+  })
+}
+
+// 更改状态
+export function changeStatus(params) {
+  return request({
+    url: '/promotion/luck/draw/updateStatus',
+    method: 'post',
+    params
+  })
+}
+
+// 获取记录
+export function getRecords(params) {
+  return request({
+    url: '/promotion/luck/draw/exchange/list',
+    method: 'get',
+    params
+  })
+}
+
+
+
+// 新增优惠券
+export function addCoupon(params) {
+  return request({
+    url: '/coupon/add',
+    method: 'post',
+    data: params
+  })
+}
+
+// 编辑优惠券
+export function editCoupon(params) {
+  return request({
+    url: '/coupon/update',
+    method: 'post',
+    data: params
+  })
+}
+
+// 获取优惠券详情
+export function getCouponDetail(params) {
+  return request({
+    url: '/coupon/detail',
+    method: 'get',
+    params
+  })
+}
+
+// 变更优惠券标志
+export function changeCouponFlag(params) {
+  return request({
+    url: '/coupon/change/flag',
+    method: 'post',
+    params
+  })
+}
+
+// 获取分类列表
+export function getClassifyList(params) {
+  return request({
+    url: '/goods/category/list',
+    method: 'get',
+    params
+  })
+}
+
+// 获取商品列表
+export function getGoodsList(params) {
+  return request({
+    url: '/coupon/list/spec/select',
+    method: 'get',
+    params
+  })
+}
+
+// 获取标签列表
+export function getTagList(params) {
+  return request({
+    url: '/tag/list',
+    method: 'get',
+    params
+  })
+}
+
+// 获取会员列表
+export function getMemberList(params) {
+  return request({
+    url: '/member/list/page',
+    method: 'get',
+    params
+  })
+}
+
+// 补发业务员优惠券
+export function reissueCoupon(params) {
+  return request({
+    url: '/coupon/reissue',
+    method: 'post',
+    data: params
+  })
+}

+ 57 - 0
src/api/freight.js

@@ -0,0 +1,57 @@
+import request from '@/utils/request'
+
+// 获取运费模板列表
+export function getList(params) {
+  return request({
+    url: '/freight/list',
+    method: 'get',
+    params
+  })
+}
+
+// 更改运费模板状态
+export function changeFreightStatus(params) {
+  return request({
+    url: '/freight/status/update',
+    method: 'post',
+    params
+  })
+}
+
+// 删除运费模板
+export function deleteFreight(params) {
+  return request({
+    url: '/freight/delete',
+    method: 'post',
+    params
+  })
+}
+
+// 新增/编辑运费模板
+export function addOrEditFreight(params) {
+  return request({
+    url: '/freight/save',
+    method: 'post',
+    data: params
+  })
+}
+
+// 获取运费模板详情
+export function getFreightDetail(params) {
+  return request({
+    url: '/freight/detail',
+    method: 'get',
+    params
+  })
+}
+
+// 获取地区树
+export function getRegionTree(params) {
+  return request({
+    url: '/freight/region/tree',
+    method: 'get',
+    params
+  })
+}
+
+

+ 316 - 0
src/api/goods.js

@@ -0,0 +1,316 @@
+import request from '@/utils/request'
+
+// 获取商品列表
+export function getGoodsList(params) {
+  return request({
+    url: '/goods/list/page',
+    method: 'get',
+    params
+  })
+}
+
+// 删除商品
+export function deleteGoods(params) {
+  return request({
+    url: '/goods/delete',
+    method: 'post',
+    params
+  })
+}
+
+// 获取商品分类
+export function getClassifyList(params) {
+  return request({
+    url: '/goods/category/list',
+    method: 'get',
+    params
+  })
+}
+
+// 添加分类
+export function addClassify(params) {
+  return request({
+    url: '/goods/category/add',
+    method: 'post',
+    data: params
+  })
+}
+
+// 编辑分类
+export function editClassify(params) {
+  return request({
+    url: '/goods/category/update',
+    method: 'post',
+    data: params
+  })
+}
+
+// 删除分类
+export function deleteClassify(params) {
+  return request({
+    url: '/goods/category/delete',
+    method: 'post',
+    params
+  })
+}
+
+// 获取分类详情
+export function getClassifyDetail(params) {
+  return request({
+    url: '/goods/category/detail',
+    method: 'get',
+    params
+  })
+}
+
+// 获取运费模版列表
+export function getFreightList(params) {
+  return request({
+    url: '/freight/list',
+    method: 'get',
+    params
+  })
+}
+
+// 添加商品
+export function addGoods(params) {
+  return request({
+    url: '/goods/add',
+    method: 'post',
+    data: params
+  })
+}
+
+// 编辑商品
+export function editGoods(params) {
+  return request({
+    url: '/goods/update',
+    method: 'post',
+    data: params
+  })
+}
+
+// 克隆商品
+export function cloneGoods(params) {
+  return request({
+    url: '/goods/clone',
+    method: 'post',
+    params
+  })
+}
+
+// 获取运费模版列表
+export function getGoodsDetail(params) {
+  return request({
+    url: '/goods/detail',
+    method: 'get',
+    params
+  })
+}
+
+// 获取商品状态条数
+export function getGoodsStateCount(params) {
+  return request({
+    url: '/goods/count',
+    method: 'get',
+    params
+  })
+}
+
+// 商品批量上架
+export function goodsPutOn(params) {
+  return request({
+    url: '/goods/goods/on',
+    method: 'post',
+    data: params
+  })
+}
+
+// 商品批量下架
+export function goodsPutOff(params) {
+  return request({
+    url: '/goods/goods/off',
+    method: 'post',
+    data: params
+  })
+}
+
+// 商品批量下架
+export function checkSeckill(params) {
+  return request({
+    url: '/goods/goods/off/check/batch',
+    method: 'post',
+    data: params
+  })
+}
+
+// 获取模块列表
+export function getModuleList(params) {
+  return request({
+    url: '/template/list',
+    method: 'get',
+    params
+  })
+}
+
+// 删除模块
+export function deleteModule(params) {
+  return request({
+    url: '/template/delete',
+    method: 'post',
+    params
+  })
+}
+
+// 添加模块
+export function addModule(params) {
+  return request({
+    url: '/template/save',
+    method: 'post',
+    data: params
+  })
+}
+
+// 编辑模块
+export function editModule(params) {
+  return request({
+    url: '/template/update',
+    method: 'post',
+    data: params
+  })
+}
+
+// 获取模块详情
+export function getModuleDetail(params) {
+  return request({
+    url: '/template/detail',
+    method: 'get',
+    params
+  })
+}
+
+// 编辑公共模块
+export function editCommonModule(params) {
+  return request({
+    url: '/template/pub/update',
+    method: 'post',
+    data: params
+  })
+}
+
+// 获取公共模块详情
+export function getCommonModuleDetail(params) {
+  return request({
+    url: '/template/pub/query',
+    method: 'get',
+    params
+  })
+}
+
+// 商品批量设置模块
+export function setCommomModule(params) {
+  return request({
+    url: '/goods/goods/template',
+    method: 'post',
+    data: params
+  })
+}
+
+// 商品批量设置运费
+export function setFreight(params) {
+  return request({
+    url: '/goods/goods/batch/freight',
+    method: 'post',
+    data: params
+  })
+}
+
+// 获取商品列表
+export function getMoreGoodsList(params) {
+  return request({
+    url: '/goods/listbycategory',
+    method: 'get',
+    params
+  })
+}
+
+// 获取商品列表
+export function getMarketingList(params) {
+  return request({
+    url: '/goods/marketing/list',
+    method: 'get',
+    params
+  })
+}
+
+// 获取小类列表
+export function getSmallType(params) {
+  return request({
+    url: '/common/gongdan/smalltype',
+    method: 'get',
+    params
+  })
+}
+
+// 获取标签列表
+export function getTagList(params) {
+  return request({
+    url: '/goods/tag/page',
+    method: 'get',
+    params
+  })
+}
+
+// 分页获取商品新维度分类
+export function getNewclassify(params) {
+  return request({
+    url: '/goods/news/category/page',
+    method: 'get',
+    params
+  })
+}
+
+// 添加新维度分类
+export function addNewclassify(params) {
+  return request({
+    url: '/goods/news/category/addGoodsNewsCategory',
+    method: 'post',
+    params
+  })
+}
+
+// 新维度分类详情
+export function getNewclassifyDetail(params) {
+  return request({
+    url: '/goods/news/category/detail',
+    method: 'get',
+    params
+  })
+}
+
+// 编辑新维度分类
+export function editNewclassifyDetail(params) {
+  return request({
+    url: '/goods/news/category/vimGoodsNewsCategory',
+    method: 'post',
+    data:params
+  })
+}
+
+// 开启关闭新维度分类
+export function changeNewclassify(params) {
+  return request({
+    url: '/goods/news/category/editStatus',
+    method: 'post',
+    params
+  })
+}
+
+// 删除新维度分类
+export function deleteNewclassify(params) {
+  return request({
+    url: '/goods/news/category/delete',
+    method: 'post',
+    params
+  })
+}

+ 127 - 0
src/api/groupbuy.js

@@ -0,0 +1,127 @@
+import request from '@/utils/request'
+
+// 获取活动统计
+export function getActivityCount(params) {
+  return request({
+    url: '/promotion/group/count',
+    method: 'get',
+    params
+  })
+}
+
+// 获取活动列表
+export function getActivityList(params) {
+  return request({
+    url: '/promotion/group/list',
+    method: 'get',
+    params
+  })
+}
+
+// 更改活动状态
+export function changeStatus(params) {
+  return request({
+    url: '/promotion/group/status/update',
+    method: 'post',
+    params
+  })
+}
+
+// 添加活动
+export function addActivity(params) {
+  return request({
+    url: '/promotion/group/add',
+    method: 'post',
+    data: params
+  })
+}
+
+// 编辑活动
+export function editActivity(params) {
+  return request({
+    url: '/promotion/group/update',
+    method: 'post',
+    data: params
+  })
+}
+
+// 获取分类列表
+export function getClassifyList(params) {
+  return request({
+    url: '/goods/category/list',
+    method: 'get',
+    params
+  })
+}
+
+// 获取商品列表
+export function getGoodsList(params) {
+  return request({
+    url: '/goods/list/page',
+    method: 'get',
+    params
+  })
+}
+
+// 获取活动详情
+export function getActivityDetail(params) {
+  return request({
+    url: '/promotion/group/detail',
+    method: 'get',
+    params
+  })
+}
+
+// 获取团长列表
+export function getHeadList(params) {
+  return request({
+    url: '/promotion/user/list',
+    method: 'get',
+    params
+  })
+}
+
+// 修改团长团购价
+export function editHead(params) {
+  return request({
+    url: '/promotion/user/update',
+    method: 'post',
+    data: params
+  })
+}
+
+// 获取详情列表
+export function getDetailList(params) {
+  return request({
+    url: '/promotion/group/pt/detail',
+    method: 'get',
+    params
+  })
+}
+
+// 获取分享列表
+export function getShareList(params) {
+  return request({
+    url: '/promotion/group/pt/visitlist',
+    method: 'get',
+    params
+  })
+}
+
+// 获取订单列表
+export function getOrderList(params) {
+  return request({
+    url: '/promotion/group/pt/orderlist',
+    method: 'get',
+    params
+  })
+}
+
+// 获取会员列表
+export function getMemberList(params) {
+  return request({
+    url: '/member/list/page',
+    method: 'get',
+    params
+  })
+}

+ 28 - 0
src/api/invoice.js

@@ -0,0 +1,28 @@
+import request from '@/utils/request'
+
+// 获取发票列表
+export function getInvoiceList(params) {
+  return request({
+    url: '/tax/list',
+    method: 'get',
+    params
+  })
+}
+
+// 上传发票地址
+export function changeInvoiceUrl(params) {
+  return request({
+    url: '/tax/update',
+    method: 'post',
+    params
+  })
+}
+
+// 线下处理
+export function offlineHandle(params) {
+  return request({
+    url: '/tax/offline',
+    method: 'post',
+    params
+  })
+}

+ 236 - 0
src/api/marketing.js

@@ -0,0 +1,236 @@
+import request from '@/utils/request'
+
+// 获取分组列表
+export function getGroupList(params) {
+  return request({
+    url: '/marketing/group/list',
+    method: 'get',
+    params
+  })
+}
+
+// 添加分组
+export function addGroup(params) {
+  return request({
+    url: '/marketing/group/add',
+    method: 'post',
+    params
+  })
+}
+
+// 修改分组
+export function editGroup(params) {
+  return request({
+    url: '/marketing/group/update',
+    method: 'post',
+    params
+  })
+}
+
+// 删除分组
+export function deleteGroup(params) {
+  return request({
+    url: '/marketing/group/delete',
+    method: 'post',
+    params
+  })
+}
+
+// 获取素材列表
+export function getMaterialList(params) {
+  return request({
+    url: '/marketing/materials/page',
+    method: 'get',
+    params
+  })
+}
+
+// 添加素材
+export function addMaterial(params) {
+  return request({
+    url: '/marketing/materials/add',
+    method: 'post',
+    data: params
+  })
+}
+
+// 编辑素材
+export function editMaterial(params) {
+  return request({
+    url: '/marketing/materials/update',
+    method: 'post',
+    data: params
+  })
+}
+
+// 删除素材
+export function deleteMaterial(params) {
+  return request({
+    url: '/marketing/materials/deleteById',
+    method: 'post',
+    params
+  })
+}
+
+// 移组
+export function moveGroup(params) {
+  return request({
+    url: '/marketing/materials/moveGroup',
+    method: 'post',
+    params
+  })
+}
+
+// 获取素材详情
+export function getMaterialDetail(params) {
+  return request({
+    url: '/marketing/materials/getUpdateDetailById',
+    method: 'get',
+    params
+  })
+}
+
+// 获取标签列表
+export function getTagList(params) {
+  return request({
+    url: '/tag/group/list',
+    method: 'get',
+    params
+  })
+}
+
+// 获取动态素材列表
+export function getDynamicList(params) {
+  return request({
+    url: '/dynamic/materials/page',
+    method: 'get',
+    params
+  })
+}
+
+// 获取动态素材详情
+export function getDynamicDetail(params) {
+  return request({
+    url: '/dynamic/materials/details',
+    method: 'get',
+    params
+  })
+}
+
+// 获取部门树
+export function getDepartmentTree(params) {
+  return request({
+    url: '/admin/websit/tree',
+    method: 'get',
+    params
+  })
+}
+
+// 成员列表
+export function getStaffList(params) {
+  return request({
+    url: '/wechat/enterprise/list',
+    method: 'get',
+    params
+  })
+}
+
+// 个人sop-新增规则
+export function addRules(params) {
+  return request({
+    url: '/sopRule/add',
+    method: 'post',
+    data:params
+  })
+}
+
+// 个人sop-list
+export function getSopList(params) {
+  return request({
+    url: '/sopRule/list',
+    method: 'get',
+    params
+  })
+}
+
+// 个人sop-详情
+export function getSopDetal(params) {
+  return request({
+    url: '/sopRule/detail',
+    method: 'get',
+    params
+  })
+}
+
+// 个人sop-任务详情
+export function getSopRuleDetal(params) {
+  return request({
+    url: '/sopRule/detailTask',
+    method: 'get',
+    params
+  })
+}
+
+// 个人sop-任务统计
+export function getSopTaskCount(params) {
+  return request({
+    url: '/sopRule/taskCount',
+    method: 'get',
+    params
+  })
+}
+
+// 个人sop-客户列表
+export function getSopTaskList(params) {
+  return request({
+    url: '/sopRule/taskList',
+    method: 'get',
+    params
+  })
+}
+
+// 个人sop-删除规则
+export function delSopRule(params) {
+  return request({
+    url: '/sopRule/delete',
+    method: 'post',
+    params
+  })
+}
+
+// 个人sop-修改规则
+export function editSopRule(params) {
+  return request({
+    url: '/sopRule/edit',
+    method: 'post',
+    data:params
+  })
+}
+
+// 个人sop-修改任务
+export function editSopTask(params) {
+  return request({
+    url: '/sopRule/editPushTask',
+    method: 'post',
+    data:params
+  })
+}
+
+// 个人sop-删除任务
+export function delSopTask(params) {
+  return request({
+    url: '/sopRule/deleteTask',
+    method: 'post',
+    params
+  })
+}
+
+// 个人sop-新增客服
+export function addKeFu(params) {
+  return request({
+    url: '/sopRule/addKeFu',
+    method: 'post',
+    data:params
+  })
+}
+

+ 197 - 0
src/api/member.js

@@ -0,0 +1,197 @@
+import request from '@/utils/request'
+
+// 获取会员列表
+export function getMemberList(params) {
+  return request({
+    url: '/member/list/page',
+    method: 'get',
+    params
+  })
+}
+
+// 获取会员详情
+export function getMemberDetail(params) {
+  return request({
+    url: '/member/detail',
+    method: 'get',
+    params
+  })
+}
+
+// 更改会员状态
+export function changeMemberStatus(params) {
+  return request({
+    url: '/member/status/update',
+    method: 'post',
+    params
+  })
+}
+
+// 更改团长状态
+export function changeHeadStatus(params) {
+  return request({
+    url: '/member/groupleader',
+    method: 'post',
+    params
+  })
+}
+
+// 修改会员
+export function updateMember(params) {
+  return request({
+    url: '/member/update',
+    method: 'post',
+    data: params
+  })
+}
+
+// 获取会员地址列表
+export function getMemberAddressList(params) {
+  return request({
+    url: '/member/address',
+    method: 'get',
+    params
+  })
+}
+
+// 获取会员收藏列表
+export function getMemberFavoriteList(params) {
+  return request({
+    url: '/member/favorite',
+    method: 'get',
+    params
+  })
+}
+
+// 获取会员优惠券列表
+export function getMemberCouponList(params) {
+  return request({
+    url: '/member/coupon',
+    method: 'get',
+    params
+  })
+}
+
+// 获取会员浏览记录列表
+export function getMemberBrowseList(params) {
+  return request({
+    url: '/member/goods/visit',
+    method: 'get',
+    params
+  })
+}
+
+// 获取会员账户明细列表
+export function getMemberAccountList(params) {
+  return request({
+    url: '/order/share/list',
+    method: 'get',
+    params
+  })
+}
+
+// 获取企业微信客户列表
+export function getMemberCustomerList(params) {
+  return request({
+    url: '/member/wx/list',
+    method: 'get',
+    params
+  })
+}
+
+// 成为业务员
+export function applyWorker(params) {
+  return request({
+    url: '/manual/assign/worker',
+    method: 'post',
+    params
+  })
+}
+
+export function getWebsiteList(params) {
+  return request({
+    url: '/websit/list',
+    method: 'get',
+    params
+  })
+}
+
+export function getShareList(params) {
+  return request({
+    url: '/coupon/userCouponDetail/query',
+    method: 'get',
+    params
+  })
+}
+
+// 修改会员昵称
+export function editNickname(params) {
+  return request({
+    url: '/member/updateNickName',
+    method: 'post',
+    params
+  })
+}
+
+// 更改内部人员状态
+export function changeInternalPersonnelStatus(params) {
+  return request({
+    url: '/member/updateUserInnerStatus',
+    method: 'post',
+    params
+  })
+}
+
+// // 内部人员批量设置模板
+// export function handleDownload(params) {
+//   return request({
+//     url: '/member/downLoadUserInnerTimplate',
+//     method: 'get',
+//     params
+//   })
+// }
+
+// // 导入跟新内部人员状态
+// export function handleInternalPersonnel(params) {
+//   return request({
+//     url: '/member/localUpdateInner',
+//     method: 'post',
+//     params
+//   })
+// }
+
+// 获取优惠设置列表
+export function getDiscountList(params) {
+  return request({
+    url: '/promotion/apply/list',
+    method: 'get',
+    params
+  })
+}
+
+// 获取优惠设置详情
+export function getDiscountDetail(params) {
+  return request({
+    url: '/promotion/apply/detail',
+    method: 'get',
+    params
+  })
+}
+
+// 删除优惠设置
+export function deleteDiscount(params) {
+  return request({
+    url: '/promotion/apply/delete',
+    method: 'post',
+    params
+  })
+}
+
+// 修改优惠设置
+export function saveDiscount(params) {
+  return request({
+    url: '/promotion/apply/save',
+    method: 'post',
+    params
+  })
+}

+ 69 - 0
src/api/merchant.js

@@ -0,0 +1,69 @@
+
+import request from "@/utils/request";
+
+export function getList(params) {
+  return request({
+    url: '/admin/user/mch/list',
+    method: 'get',
+    params
+  })
+}
+
+export function addAccount(params) {
+  return request({
+    url: '/admin/user/addCompanyWechat',
+    method: 'post',
+    data: params
+  })
+}
+
+export function getDetail(params) {
+  return request({
+    url: '/admin/user/detail',
+    method: 'get',
+    params
+  })
+}
+
+export function resetPassword(params) {
+  return request({
+    url: '/admin/user/password/reset',
+    method: 'post',
+    params
+  })
+}
+
+// 更改账户状态
+export function changeAccountStatus(params) {
+  return request({
+    url: '/admin/user/status/update',
+    method: 'post',
+    params
+  })
+}
+
+export function editAccount(params) {
+  return request({
+    url: '/admin/user/user/updateCompanyWechat',
+    method: 'post',
+    data: params
+  })
+}
+
+// 获取模版信息
+export function getTemplate(params) {
+  return request({
+    url: '/admin/company/template/detail',
+    method: 'get',
+    params
+  })
+}
+
+// 更改模版信息
+export function editTemplate(params) {
+  return request({
+    url: '/admin/company/template/updateCompanyWithTemplate',
+    method: 'post',
+    data: params
+  })
+}

+ 37 - 0
src/api/notice.js

@@ -0,0 +1,37 @@
+import request from '@/utils/request'
+
+// 获取消息列表
+export function getNoticeList(params) {
+  return request({
+    url: '/notice/list',
+    method: 'get',
+    params
+  })
+}
+
+// 更改全部消息状态
+export function changeAllReadFlag(params) {
+  return request({
+    url: '/notice/mark/read/all',
+    method: 'post',
+    params
+  })
+}
+
+// 更改消息状态
+export function changeReadFlag(params) {
+  return request({
+    url: '/notice/mark/read',
+    method: 'post',
+    data: params
+  })
+}
+
+// 获取消息列表
+export function getNoticeListCount(params) {
+  return request({
+    url: '/notice/list/count',
+    method: 'get',
+    params
+  })
+}

+ 91 - 0
src/api/offline.js

@@ -0,0 +1,91 @@
+import request from '@/utils/request'
+
+// 获取列表
+export function getList(params) {
+  return request({
+    url: '/offline/list',
+    method: 'get',
+    params
+  })
+}
+
+// 删除
+export function deleteData(params) {
+  return request({
+    url: '/offline/delete',
+    method: 'post',
+    params
+  })
+}
+
+// 新增
+export function addData(params) {
+  return request({
+    url: '/offline/save',
+    method: 'post',
+    data: params
+  })
+}
+
+// 编辑
+export function editData(params) {
+  return request({
+    url: '/offline/update',
+    method: 'post',
+    data: params
+  })
+}
+
+// 获取详情
+export function getDetail(params) {
+  return request({
+    url: '/offline/detail',
+    method: 'get',
+    params
+  })
+}
+
+// 网点列表
+export function getWebsiteList(params) {
+  return request({
+    url: '/select/websit',
+    method: 'get',
+    params
+  })
+}
+
+// 区域列表
+export function getZoneList(params) {
+  return request({
+    url: '/select/zone',
+    method: 'get',
+    params
+  })
+}
+
+// 获取年销售列表
+export function getYearList(params) {
+  return request({
+    url: '/report/year/statistics',
+    method: 'get',
+    params
+  })
+}
+
+// 获取月销售列表
+export function getMonthList(params) {
+  return request({
+    url: '/report/month/statistics',
+    method: 'get',
+    params
+  })
+}
+
+// 获取日销售列表
+export function getDayList(params) {
+  return request({
+    url: '/report/day/statistics',
+    method: 'get',
+    params
+  })
+}

+ 207 - 0
src/api/order.js

@@ -0,0 +1,207 @@
+import request from '@/utils/request'
+
+// 获取订单列表
+export function getList(params) {
+  return request({
+    url: '/order/list',
+    method: 'get',
+    params
+  })
+}
+
+// 编辑备注
+export function saveRemark(params) {
+  return request({
+    url: '/order/remark',
+    method: 'post',
+    params
+  })
+}
+
+// 获取订单详情
+export function getOrderDetail(params) {
+  return request({
+    url: '/order/detail',
+    method: 'get',
+    params
+  })
+}
+
+// 取消订单
+export function cancelOrder(params) {
+  return request({
+    url: '/order/cancel',
+    method: 'post',
+    params
+  })
+}
+
+// 确认收款
+export function confirmOrder(params) {
+  return request({
+    url: '/order/ack',
+    method: 'post',
+    params
+  })
+}
+
+// 修改价格
+export function changePrice(params) {
+  return request({
+    url: '/order/price/update',
+    method: 'post',
+    params
+  })
+}
+
+// 修改收货信息
+export function changeReceiveInfo(params) {
+  return request({
+    url: '/order/rece/info/update',
+    method: 'post',
+    data: params
+  })
+}
+
+// 发货
+export function goodsDeliver(params) {
+  return request({
+    url: '/order/goods/deliver',
+    method: 'post',
+    params
+  })
+}
+
+// 获取维权订单列表
+export function getRefundList(params) {
+  return request({
+    url: '/order/refund/list',
+    method: 'get',
+    params
+  })
+}
+
+// 编辑维权备注
+export function saveRefundRemark(params) {
+  return request({
+    url: '/order/refund/remark',
+    method: 'post',
+    params
+  })
+}
+
+// 变更维权处理状态
+export function changeExamineStatus(params) {
+  return request({
+    url: '/order/refund/examine',
+    method: 'post',
+    params
+  })
+}
+
+// 变更维权处理状态
+export function receiveProd(params) {
+  return request({
+    url: '/order/refund/ack',
+    method: 'post',
+    params
+  })
+}
+
+// 获取维权订单详情
+export function getOrderRefundDetail(params) {
+  return request({
+    url: '/order/refund/refund/detail',
+    method: 'get',
+    params
+  })
+}
+
+// 退款
+export function orderRefund(params) {
+  return request({
+    url: '/order/detail/refund',
+    method: 'post',
+    params
+  })
+}
+
+// 理赔
+export function orderCompensate(params) {
+  return request({
+    url: '/order/cliaims/refund',
+    method: 'post',
+    params
+  })
+}
+
+// 获取理赔列表
+export function getCompensateList(params) {
+  return request({
+    url: '/order/cliaims/list',
+    method: 'get',
+    params
+  })
+}
+
+// 卖家批量设置备注
+export function batchRemark(params) {
+  return request({
+    url: '/order/batch/remark',
+    method: 'post',
+    data: params
+  })
+}
+
+export function getWebsiteList(params) {
+  return request({
+    url: '/websit/list',
+    method: 'get',
+    params
+  })
+}
+
+// 修改快递单号
+export function editLogistics(params) {
+  return request({
+    url: '/order/express/update',
+    method: 'post',
+    params
+  })
+}
+
+// 获取地区树
+export function getRegion(params) {
+  return request({
+    url: '/common/region/list',
+    method: 'get',
+    params
+  })
+}
+
+// 修改收货地址
+export function editAddress(params) {
+  return request({
+    url: '/order/rece/info/update',
+    method: 'post',
+    data: params
+  })
+}
+
+// 获取工单
+export function getWorkOrder(params) {
+  return request({
+    url: '/order/work/list',
+    method: 'get',
+    params
+  })
+}
+
+// 新增标签
+export function changeShow(params) {
+  return request({
+    url: '/order/comment/show',
+    method: 'post',
+    params
+  })
+}

+ 28 - 0
src/api/package.js

@@ -0,0 +1,28 @@
+import request from '@/utils/request'
+
+// 获取列表
+export function getGoodsList(params) {
+  return request({
+    url: '/goods/package/list',
+    method: 'get',
+    params
+  })
+}
+
+// 获取订单列表
+export function getOrderList(params) {
+  return request({
+    url: '/order/list',
+    method: 'get',
+    params
+  })
+}
+
+// 获取商品框的商品
+export function getGoods(params) {
+  return request({
+    url: '/goods/package/poplist',
+    method: 'get',
+    params
+  })
+}

+ 109 - 0
src/api/seckill.js

@@ -0,0 +1,109 @@
+import request from '@/utils/request'
+
+// 获取秒杀活动列表
+export function getActivityList(params) {
+  return request({
+    url: '/sec-kill/goods/list/activity/page',
+    method: 'get',
+    params
+  })
+}
+
+// 获取秒杀商品列表
+export function getSeckillGoodsList(params) {
+  return request({
+    url: '/sec-kill/goods/list/spec/page',
+    method: 'get',
+    params
+  })
+}
+
+// 更改活动状态 - 关闭
+export function closeActivityStatus(params) {
+  return request({
+    url: '/sec-kill/goods/activity/close',
+    method: 'post',
+    params
+  })
+}
+
+// 更改活动状态 - 开启
+export function openActivityStatus(params) {
+  return request({
+    url: '/sec-kill/goods/activity/open',
+    method: 'post',
+    params
+  })
+}
+
+// 更改商品状态 - 关闭
+export function closeGoodsStatus(params) {
+  return request({
+    url: '/sec-kill/goods/spec/close',
+    method: 'post',
+    params
+  })
+}
+
+// 更改商品状态 - 开启
+export function openGoodsStatus(params) {
+  return request({
+    url: '/sec-kill/goods/spec/close',
+    method: 'post',
+    params
+  })
+}
+
+// 删除商品
+export function deleteGoods(params) {
+  return request({
+    url: '/sec-kill/goods/spec/delete',
+    method: 'post',
+    params
+  })
+}
+
+// 添加活动
+export function addActivity(params) {
+  return request({
+    url: '/sec-kill/goods/activity/add',
+    method: 'post',
+    data: params
+  })
+}
+
+// 编辑活动
+export function editActivity(params) {
+  return request({
+    url: '/sec-kill/goods/activity/update',
+    method: 'post',
+    data: params
+  })
+}
+
+// 获取分类列表
+export function getClassifyList(params) {
+  return request({
+    url: '/goods/category/list',
+    method: 'get',
+    params
+  })
+}
+
+// 获取商品列表
+export function getGoodsList(params) {
+  return request({
+    url: '/sec-kill/goods/list/spec/select',
+    method: 'get',
+    params
+  })
+}
+
+// 获取活动详情
+export function getActivityDetail(params) {
+  return request({
+    url: '/sec-kill/goods/activity/detail',
+    method: 'get',
+    params
+  })
+}

+ 389 - 0
src/api/setting.js

@@ -0,0 +1,389 @@
+import request from '@/utils/request'
+
+// 获取个人信息
+export function getUserInfo(params) {
+  return request({
+    url: '/admin/user/detail',
+    method: 'get',
+    params
+  })
+}
+
+// 修改密码
+export function changePassword(params) {
+  return request({
+    url: '/admin/user/password/update',
+    method: 'post',
+    params
+  })
+}
+
+// 获取账户列表
+export function getAccountList(params) {
+  return request({
+    url: '/admin/user/list',
+    method: 'get',
+    params
+  })
+}
+
+// 获取角色列表
+export function getRoleList(params) {
+  return request({
+    url: '/admin/role/list',
+    method: 'get',
+    params
+  })
+}
+
+// 重置密码
+export function resetPassword(params) {
+  return request({
+    url: '/admin/user/password/reset',
+    method: 'post',
+    params
+  })
+}
+
+// 更改账户状态
+export function changeAccountStatus(params) {
+  return request({
+    url: '/admin/user/status/update',
+    method: 'post',
+    params
+  })
+}
+
+// 新增账户
+export function addAccount(params) {
+  return request({
+    url: '/admin/user/add',
+    method: 'post',
+    data: params
+  })
+}
+
+// 编辑账户
+export function editAccount(params) {
+  return request({
+    url: '/admin/user/user/update',
+    method: 'post',
+    data: params
+  })
+}
+
+// 获取字段列表
+export function getFieldList(params) {
+  return request({
+    url: '/sys/dict/list/page',
+    method: 'get',
+    params
+  })
+}
+
+// 更改字段状态
+export function changeFieldStatus(params) {
+  return request({
+    url: '/sys/dict/status/update',
+    method: 'post',
+    params
+  })
+}
+
+// 删除字段
+export function deleteField(params) {
+  return request({
+    url: '/sys/dict/delete',
+    method: 'post',
+    params
+  })
+}
+
+// 新增字段
+export function addField(params) {
+  return request({
+    url: '/sys/dict/add',
+    method: 'post',
+    params
+  })
+}
+
+// 编辑字段
+export function editField(params) {
+  return request({
+    url: '/sys/dict/update',
+    method: 'post',
+    params
+  })
+}
+
+// 获取字段详情
+export function getFieldDetail(params) {
+  return request({
+    url: '/sys/dict/detail',
+    method: 'get',
+    params
+  })
+}
+
+// 获取操作日志列表
+export function getOplogList(params) {
+  return request({
+    url: '/admin/operation/log/list',
+    method: 'get',
+    params
+  })
+}
+
+// 获取操作日志模块列表
+export function getModuleList(params) {
+  return request({
+    url: '/admin/operation/log/module',
+    method: 'get',
+    params
+  })
+}
+
+// 获取轮播图列表
+export function getBannerList(params) {
+  return request({
+    url: '/carouselMap/list/page',
+    method: 'get',
+    params
+  })
+}
+
+// 更改轮播图状态
+export function changeBannerStatus(params) {
+  return request({
+    url: '/carouselMap/state/update',
+    method: 'post',
+    params
+  })
+}
+
+// 删除轮播图
+export function deleteBanner(params) {
+  return request({
+    url: '/carouselMap/delete',
+    method: 'post',
+    params
+  })
+}
+
+// 新增轮播图
+export function addBanner(params) {
+  return request({
+    url: '/carouselMap/add',
+    method: 'post',
+    data: params
+  })
+}
+
+// 编辑轮播图
+export function editBanner(params) {
+  return request({
+    url: '/carouselMap/update',
+    method: 'post',
+    data: params
+  })
+}
+
+// 获取轮播图详情
+export function getBannerDetail(params) {
+  return request({
+    url: '/carouselMap/detail',
+    method: 'get',
+    params
+  })
+}
+
+// 新增角色
+export function addRole(params) {
+  return request({
+    url: '/admin/role/add',
+    method: 'post',
+    data: params
+  })
+}
+
+// 编辑角色
+export function editRole(params) {
+  return request({
+    url: '/admin/role/update',
+    method: 'post',
+    data: params
+  })
+}
+
+// 删除角色
+export function deleteRole(params) {
+  return request({
+    url: '/admin/role/delete',
+    method: 'post',
+    params
+  })
+}
+
+
+// 获取角色详情
+export function getRoleDetail(params) {
+  return request({
+    url: '/admin/role/detail',
+    method: 'get',
+    params
+  })
+}
+
+// 获取权限列表
+export function getMenuRoleList(params) {
+  return request({
+    url: '/admin/user/module/all',
+    method: 'get',
+    params
+  })
+}
+
+// 获取已选权限数组
+export function getMenuRoleIds(params) {
+  return request({
+    url: '/admin/user/module/id/checked',
+    method: 'get',
+    params
+  })
+}
+
+// 提交设置权限
+export function setMenuRole(params) {
+  return request({
+    url: '/admin/user/module/grant',
+    method: 'post',
+    params
+  })
+}
+
+// 获取商品列表
+export function getGoodsList(params) {
+  return request({
+    url: '/carouselMap/list/goods',
+    method: 'get',
+    params
+  })
+}
+
+// 批量删除轮播图
+export function batchDeleteBanner(params) {
+  return request({
+    url: '/carouselMap/batch/delete',
+    method: 'post',
+    data: params
+  })
+}
+
+// 获取通告
+export function getNotice(params) {
+  return request({
+    url: '/notice/mini/select',
+    method: 'get',
+    params
+  })
+}
+
+// 新增通告
+export function addNotice(params) {
+  return request({
+    url: '/notice/mini/add',
+    method: 'post',
+    data: params
+  })
+}
+
+// 编辑通告
+export function editNotice(params) {
+  return request({
+    url: '/notice/mini/update',
+    method: 'post',
+    data: params
+  })
+}
+
+// 获取部门列表
+export function getDepartmentList(params) {
+  return request({
+    url: '/admin/websit/tree',
+    method: 'get',
+    params
+  })
+}
+
+// 获取菜单列表
+export function getMenuList(params) {
+  return request({
+    url: '/admin/user/module/list',
+    method: 'get',
+    params
+  })
+}
+
+// 添加菜单
+export function addMenu(params) {
+  return request({
+    url: '/admin/module/add',
+    method: 'post',
+    data: params
+  })
+}
+
+// 编辑菜单
+export function editMenu(params) {
+  return request({
+    url: '/admin/module/update',
+    method: 'post',
+    data: params
+  })
+}
+
+// 删除菜单
+export function deleteMenu(params) {
+  return request({
+    url: '/admin/module/delete',
+    method: 'post',
+    params
+  })
+}
+
+// 获取菜单详情
+export function getMenuDetail(params) {
+  return request({
+    url: '/admin/module/detail',
+    method: 'get',
+    params
+  })
+}
+
+// 获取商户列表
+export function getMerchantList(params) {
+  return request({
+    url: '/admin/user/mch/list',
+    method: 'get',
+    params
+  })
+}
+
+// 获取用户协议
+export function getAgreement(params) {
+  return request({
+    url: '/admin/company/other/getOne',
+    method: 'get',
+    params
+  })
+}
+
+// 更新用户协议
+export function editAgreement(params) {
+  return request({
+    url: '/admin/company/other/update',
+    method: 'post',
+    data: params
+  })
+}

+ 42 - 0
src/api/settlement.js

@@ -0,0 +1,42 @@
+
+import request from "@/utils/request";
+
+export function getList(params) {
+  return request({
+    url: '/order/share/list',
+    method: 'get',
+    params
+  })
+}
+
+export function settlement(params) {
+  return request({
+    url: '/order/share/confirm',
+    method: 'get',
+    params
+  })
+}
+
+export function getWebsiteList(params) {
+  return request({
+    url: '/websit/list',
+    method: 'get',
+    params
+  })
+}
+
+export function getPositionList(params) {
+  return request({
+    url: '/websit/position/list',
+    method: 'get',
+    params
+  })
+}
+
+export function saveRemark(params) {
+  return request({
+    url: '/order/share/remark',
+    method: 'post',
+    params
+  })
+}

+ 65 - 0
src/api/special.js

@@ -0,0 +1,65 @@
+import request from '@/utils/request'
+
+
+// 获取企业下模板
+export function getEnterpriseTemplate(params) {
+  return request({
+    url: '/admin/company/template/detail',
+    method: 'get',
+    params
+  })
+}
+
+// 更改模板信息
+export function editEnterpriseTemplate(params) {
+  return request({
+    url: '/admin/company/template/updateTemplate',
+    method: 'post',
+    data:params
+  })
+}
+
+// 获取活动商品详情 
+export function getactivityGoodsDetail(params) {
+    return request({
+      url: '/goods/news/category/getGoodsActiveDetail',
+      method: 'get',
+      params
+    })
+  }
+
+  // 获取商品分类
+export function getClassifyList(params) {
+  return request({
+    url: '/goods/category/list',
+    method: 'get',
+    params
+  })
+}
+
+// 获取商品列表
+export function getGoodsList(params) {
+  return request({
+    url: '/goods/list/page',
+    method: 'get',
+    params
+  })
+}
+
+// 添加活动商品
+export function addActiveGoods(params) {
+  return request({
+    url: '/goods/news/category/addActiveGoods',
+    method: 'post',
+    data:params
+  })
+}
+
+// 获取商品列表
+export function getMoreGoodsList(params) {
+  return request({
+    url: '/goods/listbycategory',
+    method: 'get',
+    params
+  })
+}

+ 46 - 0
src/api/storage.js

@@ -0,0 +1,46 @@
+import request from '@/utils/request'
+
+// 获取仓储列表
+export function getList(params) {
+  return request({
+    url: '/storage/list',
+    method: 'get',
+    params
+  })
+}
+
+// 删除仓储
+export function deleteStorage(params) {
+  return request({
+    url: '/storage/delete',
+    method: 'post',
+    params
+  })
+}
+
+// 新增仓储
+export function addStorage(params) {
+  return request({
+    url: '/storage/add',
+    method: 'post',
+    data: params
+  })
+}
+
+// 编辑仓储
+export function editStorage(params) {
+  return request({
+    url: '/storage/update',
+    method: 'post',
+    data: params
+  })
+}
+
+// 获取仓储详情
+export function getStorageDetail(params) {
+  return request({
+    url: '/storage/detail',
+    method: 'get',
+    params
+  })
+}

+ 37 - 0
src/api/tag/evaluate_tag.js

@@ -0,0 +1,37 @@
+import request from '@/utils/request'
+
+// 获取标签列表
+export function getTagList(params) {
+  return request({
+    url: '/comment/tag/list',
+    method: 'get',
+    params
+  })
+}
+
+// 新增标签
+export function addTag(params) {
+  return request({
+    url: '/comment/tag/add',
+    method: 'post',
+    params
+  })
+}
+
+// 新增标签
+export function editTag(params) {
+  return request({
+    url: '/comment/tag/update',
+    method: 'post',
+    params
+  })
+}
+
+// 删除标签
+export function deleteTag(params) {
+  return request({
+    url: '/comment/tag/delete',
+    method: 'post',
+    params
+  })
+}

+ 19 - 0
src/api/tag/goods_tag.js

@@ -0,0 +1,19 @@
+import request from '@/utils/request'
+
+// 获取标签列表
+export function getTagList(params) {
+  return request({
+    url: '/goods/tag/page',
+    method: 'get',
+    params
+  })
+}
+
+// 新增标签
+export function editTag(params) {
+  return request({
+    url: '/goods/tag/add',
+    method: 'post',
+    params
+  })
+}

+ 64 - 0
src/api/tag/user_tag.js

@@ -0,0 +1,64 @@
+import request from '@/utils/request'
+
+// 获取列表
+export function getTagList(params) {
+  return request({
+    url: '/tag/group/list',
+    method: 'get',
+    params
+  })
+}
+
+// 同步
+export function syncTag(params) {
+  return request({
+    url: '/tag/sync',
+    method: 'get',
+    params
+  })
+}
+
+// 新增标签组
+export function addGroup(params) {
+  return request({
+    url: '/tag/group/add',
+    method: 'post',
+    params
+  })
+}
+
+// 新增标签
+export function addTag(params) {
+  return request({
+    url: '/tag/group/tag/add',
+    method: 'post',
+    params
+  })
+}
+
+// 删除仓储
+export function deleteGroup(params) {
+  return request({
+    url: '/tag/group/del',
+    method: 'post',
+    params
+  })
+}
+
+// 编辑标签组
+export function editGroup(params) {
+  return request({
+    url: '/tag/group/update',
+    method: 'post',
+    data: params
+  })
+}
+
+// 获取列表
+export function getTagListById(params) {
+  return request({
+    url: '/tag/group/tag/list',
+    method: 'get',
+    params
+  })
+}

+ 44 - 0
src/api/user.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 登录
+export function login(params) {
+  return request({
+    url: '/admin/user/login',
+    method: 'post',
+    params
+  })
+}
+
+// 获取用户信息
+export function getInfo(userid) {
+  return request({
+    url: '/admin/user/detail',
+    method: 'get',
+    params: { adminUserId: userid }
+  })
+}
+
+// 动态路由
+export function getRouter(params) {
+  return request({
+    url: `/admin/user/module/list`,
+    method: 'get',
+    params
+  })
+}
+
+// 退出登录
+export function logout() {
+  return request({
+    url: '/admin/user/logout',
+    method: 'post'
+  })
+}
+
+// 动态路由
+export function getCode() {
+  return request({
+    url: '/admin/user/imageVerification',
+    method: 'get',
+  })
+}

+ 91 - 0
src/api/wxcustomer.js

@@ -0,0 +1,91 @@
+import request from '@/utils/request'
+
+// 获取部门列表
+export function getDepartmentList(params) {
+  return request({
+    url: '/admin/websit/tree',
+    method: 'get',
+    params
+  })
+}
+
+// 添加部门
+export function addDepartment(params) {
+  return request({
+    url: '/admin/websit/add',
+    method: 'post',
+    data: params
+  })
+}
+
+// 修改部门
+export function editDepartment(params) {
+  return request({
+    url: '/admin/websit/update',
+    method: 'post',
+    data: params
+  })
+}
+
+// 删除部门
+export function deleteDepartment(params) {
+  return request({
+    url: '/admin/websit/delete',
+    method: 'post',
+    params
+  })
+}
+
+// 获取区域列表
+export function getAreaList(params) {
+  return request({
+    url: '/admin/websit/zone/list',
+    method: 'get',
+    params
+  })
+}
+
+// 获取成员列表
+export function getMemberList(params) {
+  return request({
+    url: '/wechat/enterprise/list',
+    method: 'get',
+    params
+  })
+}
+
+// 添加成员
+export function addMember(params) {
+  return request({
+    url: '/wechat/enterprise/add',
+    method: 'post',
+    params
+  })
+}
+
+// 修改成员
+export function editMember(params) {
+  return request({
+    url: '/wechat/enterprise/update',
+    method: 'post',
+    params
+  })
+}
+
+// 删除成员
+export function deleteMember(params) {
+  return request({
+    url: '/wechat/enterprise/delete',
+    method: 'post',
+    params
+  })
+}
+
+// 获取成员详情
+export function getMemberDetail(params) {
+  return request({
+    url: '/wechat/enterprise/detail',
+    method: 'get',
+    params
+  })
+}

BIN
src/assets/404_images/404.png


BIN
src/assets/404_images/404_cloud.png


BIN
src/assets/common/empty.png


BIN
src/assets/common/excel.png


BIN
src/assets/common/pdf.png


BIN
src/assets/common/ppt.png


BIN
src/assets/common/word.png


BIN
src/assets/home/icon_01.png


BIN
src/assets/home/icon_02.png


BIN
src/assets/home/icon_03.png


BIN
src/assets/home/icon_04.png


BIN
src/assets/home/icon_05.png


BIN
src/assets/home/icon_06.png


BIN
src/assets/home/icon_07.png


BIN
src/assets/home/icon_08.png


BIN
src/assets/home/icon_09.png


BIN
src/assets/home/icon_10.png


BIN
src/assets/home/icon_11.png


BIN
src/assets/home/icon_12.png


BIN
src/assets/login/background.png


BIN
src/assets/login/code.png


BIN
src/assets/login/image.png


BIN
src/assets/login/logo.png


BIN
src/assets/login/title.png


BIN
src/assets/logo.png


BIN
src/assets/order/CLOSE.png


BIN
src/assets/order/DFH.png


BIN
src/assets/order/NOPAY.png


BIN
src/assets/order/OVER.png


BIN
src/assets/order/TIMEOUT.png


BIN
src/assets/order/YFH.png


BIN
src/assets/template/template_1.png


BIN
src/assets/template/template_2.png


BIN
src/assets/template/template_3.png


BIN
src/assets/template/tmp_1.png


BIN
src/assets/template/tmp_1_thumb.png


BIN
src/assets/template/tmp_2.png


BIN
src/assets/template/tmp_2_thumb.png


BIN
src/assets/template/tmp_3.png


BIN
src/assets/template/tmp_3_thumb.png


+ 86 - 0
src/components/Breadcrumb/index.vue

@@ -0,0 +1,86 @@
+<template>
+  <el-breadcrumb class="app-breadcrumb" separator="/">
+    <transition-group name="breadcrumb">
+      <el-breadcrumb-item v-for="(item,index) in levelList" :key="item.path">
+        <span v-if="item.redirect==='noRedirect'||index==levelList.length-1" class="no-redirect">{{ item.meta.title }}</span>
+        <a v-else @click.prevent="handleLink(item)">{{ item.meta.title }}</a>
+      </el-breadcrumb-item>
+    </transition-group>
+  </el-breadcrumb>
+</template>
+
+<script>
+import pathToRegexp from 'path-to-regexp'
+
+export default {
+  data() {
+    return {
+      levelList: null
+    }
+  },
+  watch: {
+    $route() {
+      this.getBreadcrumb()
+    }
+  },
+  created() {
+    this.getBreadcrumb()
+  },
+  methods: {
+    getBreadcrumb() {
+      // only show routes with meta.title
+      let matched = this.$route.matched.filter(item => item.meta && item.meta.title)
+      const first = matched[0]
+
+      if (!this.isDashboard(first)) {
+        matched = [{ path: '/dashboard', meta: { title: '首页' }}].concat(matched)
+      }
+      if (matched.length > 1) {
+        const insertPosition = matched.length - 1
+        let parent = matched[insertPosition].meta.parent
+        while (parent) {
+          const route = this.$router.resolve(parent).route
+          matched.splice(insertPosition, 0, route)
+          parent = route.meta.parent
+        }
+      }
+      this.levelList = matched.filter(item => item.meta && item.meta.title && item.meta.breadcrumb !== false)
+    },
+    isDashboard(route) {
+      const name = route && route.name
+      if (!name) {
+        return false
+      }
+      return name.trim().toLocaleLowerCase() === 'Dashboard'.toLocaleLowerCase()
+    },
+    pathCompile(path) {
+      // To solve this problem https://github.com/PanJiaChen/vue-element-admin/issues/561
+      const { params } = this.$route
+      var toPath = pathToRegexp.compile(path)
+      return toPath(params)
+    },
+    handleLink(item) {
+      const { redirect, path } = item
+      if (redirect) {
+        this.$router.push(redirect)
+        return
+      }
+      this.$router.push(this.pathCompile(path))
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.app-breadcrumb.el-breadcrumb {
+  display: inline-block;
+  font-size: 14px;
+  line-height: 50px;
+  margin-left: 8px;
+
+  .no-redirect {
+    color: #97a8be;
+    cursor: text;
+  }
+}
+</style>

+ 44 - 0
src/components/Hamburger/index.vue

@@ -0,0 +1,44 @@
+<template>
+  <div style="padding: 0 15px;" @click="toggleClick">
+    <!-- <svg
+      :class="{'is-active':isActive}"
+      class="hamburger"
+      viewBox="0 0 1024 1024"
+      xmlns="http://www.w3.org/2000/svg"
+      width="64"
+      height="64"
+    >
+      <path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM142.4 642.1L298.7 519a8.84 8.84 0 0 0 0-13.9L142.4 381.9c-5.8-4.6-14.4-.5-14.4 6.9v246.3a8.9 8.9 0 0 0 14.4 7z" />
+    </svg> -->
+    <i class="hamburger" :class="isActive? 'el-icon-s-fold':'el-icon-s-unfold'"></i>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'Hamburger',
+  props: {
+    isActive: {
+      type: Boolean,
+      default: false
+    }
+  },
+  methods: {
+    toggleClick() {
+      this.$emit('toggleClick')
+    }
+  }
+}
+</script>
+
+<style scoped>
+.hamburger {
+  display: inline-block;
+  vertical-align: middle;
+  font-size: 22px;
+}
+
+.hamburger.is-active {
+  transform: rotate(180deg);
+}
+</style>

+ 79 - 0
src/components/Mall/Member/member-account.vue

@@ -0,0 +1,79 @@
+<template>
+  <div>
+    <div class="table">
+      <el-table ref="orderTable" v-loading="listLoading" :data="dataList" element-loading-text="Loading" border fit highlight-current-row stripe>
+        
+        <el-table-column align="center" label="收益金额" prop="amount"></el-table-column>
+        <el-table-column align="center" label="发生方式" prop="">
+          分享
+        </el-table-column>
+        <el-table-column align="center" label="发生时间" prop="createTime"></el-table-column>
+      </el-table>
+    </div>
+    <div class="pagination clearfix">
+      <div class="fr">
+        <el-pagination
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+          :current-page="currentPage"
+          :page-sizes="[10, 20, 30, 50]"
+          :page-size="10"
+          layout="total, sizes, prev, pager, next, jumper"
+          :total="listTotal">
+        </el-pagination>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import {getMemberAccountList} from "@/api/member";
+
+export default {
+  name: 'MemberAccount',
+  componentName: 'MemberAccount',
+  props: ['user'],
+  data() {
+    return {
+      dataList: [], // 数据列表
+      listLoading: true, // 列表加载loading
+      currentPage: 1, // 当前页码
+      pageSize: 10, // 每页数量
+      listTotal: 0 // 列表总数
+    }
+  },
+  created() {
+    this.getAccountList();
+  },
+  methods: {
+    getAccountList() {
+      let params = {
+        userId: this.user.userId,
+        pageNum: this.currentPage,
+        pageSize: this.pageSize
+      }
+
+      getMemberAccountList(params).then(res => {
+        this.dataList = res.data.records
+        this.listTotal = res.data.total
+        this.listLoading = false
+      })
+    },
+    // 更改每页数量
+    handleSizeChange(val) {
+      this.pageSize = val
+      this.currentPage = 1
+      this.getList()
+    },
+    // 更改当前页
+    handleCurrentChange(val) {
+      this.currentPage = val
+      this.getList()
+    },
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 89 - 0
src/components/Mall/Member/member-address.vue

@@ -0,0 +1,89 @@
+<template>
+  <div class="address-list">
+    <div class="table">
+      <el-table
+        ref="orderTable"
+        v-loading="listLoading"
+        :data="dataList"
+        element-loading-text="Loading"
+        border
+        fit
+        highlight-current-row stripe
+      >
+        <el-table-column align="center" label="收货人" prop="name"></el-table-column>
+        <el-table-column align="center" label="手机号" prop="phone"></el-table-column>
+        <el-table-column align="center" label="地址信息" prop="address" min-width="200"></el-table-column>
+        <el-table-column align="center" label="是否默认地址" prop="defaultAddr">
+          <template slot-scope="{ row }">
+            {{ row.defaultAddr ? '是' : '否' }}
+          </template>
+        </el-table-column>
+      </el-table>
+    </div>
+    <div class="pagination clearfix">
+      <div class="fr">
+        <el-pagination
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+          :current-page="currentPage"
+          :page-sizes="[10, 20, 30, 50]"
+          :page-size="10"
+          layout="total, sizes, prev, pager, next, jumper"
+          :total="listTotal">
+        </el-pagination>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import {getMemberAddressList} from "@/api/member";
+
+export default {
+  name: 'MemberAddress',
+  componentName: 'MemberAddress',
+  props: ['user'],
+  data() {
+    return {
+      dataList: [], // 数据列表
+      listLoading: true, // 列表加载loading
+      currentPage: 1, // 当前页码
+      pageSize: 10, // 每页数量
+      listTotal: 0 // 列表总数
+    }
+  },
+  created() {
+    this.getAddressList()
+  },
+  methods: {
+    getAddressList() {
+      let params = {
+        userId: this.user.userId,
+        pageNum: this.currentPage,
+        pageSize: this.pageSize
+      }
+
+      getMemberAddressList(params).then(res => {
+        this.dataList = res.data.records
+        this.listTotal = res.data.total
+        this.listLoading = false
+      })
+    },
+    // 更改每页数量
+    handleSizeChange(val) {
+      this.pageSize = val
+      this.currentPage = 1
+      this.getList()
+    },
+    // 更改当前页
+    handleCurrentChange(val) {
+      this.currentPage = val
+      this.getList()
+    },
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 98 - 0
src/components/Mall/Member/member-browse.vue

@@ -0,0 +1,98 @@
+<template>
+  <div>
+    <div class="table">
+      <el-table ref="orderTable" v-loading="listLoading" :data="dataList" element-loading-text="Loading" border fit highlight-current-row stripe>
+        <el-table-column align="center" label="商品信息" prop="goodsName" min-width="200">
+          <template slot-scope="scope">
+            <div class="goods-info">
+              <el-image style="width: 40px; height: 40px;" :src="scope.row.imgUrl" :preview-src-list="[scope.row.imgUrl]" fit="cover"></el-image>
+              <div class="name">{{scope.row.goodsName}}</div>
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column align="center" label="商品价格" prop="goodsPrice"></el-table-column>
+        <el-table-column align="center" label="商品状态" prop="defaultAddr">
+          <template slot-scope="scope">
+            {{ scope.row.status ? '上架' : '下架' }}
+          </template>
+        </el-table-column>
+        <el-table-column align="center" label="浏览时间" prop="createTime"></el-table-column>
+      </el-table>
+    </div>
+    <div class="pagination clearfix">
+      <div class="fr">
+        <el-pagination
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+          :current-page="currentPage"
+          :page-sizes="[10, 20, 30, 50]"
+          :page-size="10"
+          layout="total, sizes, prev, pager, next, jumper"
+          :total="listTotal">
+        </el-pagination>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import {getMemberBrowseList} from "@/api/member";
+
+export default {
+  name: 'MemberBrowse',
+  componentName: 'MemberBrowse',
+  props: ['user'],
+  data() {
+    return {
+      dataList: [], // 数据列表
+      listLoading: true, // 列表加载loading
+      currentPage: 1, // 当前页码
+      pageSize: 10, // 每页数量
+      listTotal: 0 // 列表总数
+    }
+  },
+  created() {
+    this.getBrowseList();
+  },
+  methods: {
+    getBrowseList() {
+      let params = {
+        userId: this.user.userId,
+        pageNum: this.currentPage,
+        pageSize: this.pageSize
+      }
+
+      getMemberBrowseList(params).then(res => {
+        this.dataList = res.data.records
+        this.listTotal = res.data.total
+        this.listLoading = false
+      })
+    },
+    // 更改每页数量
+    handleSizeChange(val) {
+      this.pageSize = val
+      this.currentPage = 1
+      this.getList()
+    },
+    // 更改当前页
+    handleCurrentChange(val) {
+      this.currentPage = val
+      this.getList()
+    },
+  }
+}
+</script>
+
+<style scoped lang="scss">
+  .goods-info {
+    display: flex;
+    align-items: center;
+    .el-image {
+      flex-shrink: 0;
+    }
+    .name {
+      margin-left: 8px;
+      text-align: left;
+    }
+  }
+</style>

+ 185 - 0
src/components/Mall/Member/member-coupon.vue

@@ -0,0 +1,185 @@
+<template>
+  <div class="address-list">
+    <div class="table">
+      <el-table
+        ref="orderTable"
+        v-loading="listLoading"
+        :data="dataList"
+        element-loading-text="Loading"
+        border
+        fit
+        highlight-current-row stripe
+      >
+        <el-table-column align="center" label="券名称" prop="couponName"></el-table-column>
+        <el-table-column align="center" label="面额" prop="couponValue"></el-table-column>
+        <el-table-column align="center" label="券状态" prop="state">
+          <template slot-scope="{ row }">
+            {{ row.state ? '可用' : '不可用' }}
+          </template>
+        </el-table-column>
+        <el-table-column align="center" label="有效时间">
+          <template slot-scope="{ row }">
+            {{ formatDate(row) }}
+          </template>
+        </el-table-column>
+        <el-table-column align="center" label="分享状态" prop="transferType">
+          <template slot-scope="{ row }">
+            {{ row.transferType ? '可分享' : '不可分享' }}
+          </template>
+        </el-table-column>
+        <el-table-column align="center" label="剩余数量" prop="leftShareTimes"></el-table-column>
+        <el-table-column align="center" label="领取明细">
+          <template slot-scope="{ row }">
+            <el-button type="text" @click="openShareDetail(row.id)">查看明细</el-button>
+          </template>
+        </el-table-column>
+        <!-- <el-table-column align="center" label="使用时间" prop="useTime"></el-table-column> -->
+
+      </el-table>
+    </div>
+    <div class="pagination clearfix">
+      <div class="fr">
+        <el-pagination
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+          :current-page="currentPage"
+          :page-sizes="[10, 20, 30, 50]"
+          :page-size="10"
+          layout="total, sizes, prev, pager, next, jumper"
+          :total="listTotal">
+        </el-pagination>
+      </div>
+    </div>
+
+    <!-- 分享详情 -->
+    <el-dialog title="分享详情" :visible.sync="shareDialog" :show-close="false" width="70%" :close-on-click-modal="false">
+      <div class="table" style="margin: 10px 0 20px;">
+        <el-table 
+          v-loading="shareTable_listLoading" 
+          :data="shareTable_dataList" 
+          element-loading-text="Loading" 
+          tooltip-effect="dark" 
+          style="width: 100%" 
+          max-height="270">
+          <el-table-column align="center" prop="userName" label="用户名称" min-width="120" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" prop="mobile" label="电话" min-width="120" show-overflow-tooltip></el-table-column>
+          <el-table-column align="center" prop="couponName" label="券名称" min-width="120"></el-table-column>
+          <el-table-column align="center" prop="userPhone" label="数量" min-width="120">
+            <template>
+              1
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="receiveTime" label="领取时间" min-width="160"></el-table-column>
+        </el-table>
+      </div>
+      <div class="pagination clearfix">
+        <div class="fr">
+          <el-pagination
+            @current-change="shareTableCurrentChange"
+            :current-page="shareTable_currentPage"
+            :page-size="shareTable_pageSize"
+            background
+            layout="prev, pager, next"
+            :total="shareTable_listTotal">
+          </el-pagination>
+        </div>
+      </div>
+
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="shareDialog = false">关 闭</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {getMemberCouponList, getShareList} from "@/api/member";
+import {dateFormat} from "@/utils/util"
+
+export default {
+  name: 'MemberCoupon',
+  componentName: 'MemberCoupon',
+  props: ['user'],
+  data() {
+    return {
+      dataList: [], // 数据列表
+      listLoading: true, // 列表加载loading
+      currentPage: 1, // 当前页码
+      pageSize: 10, // 每页数量
+      listTotal: 0, // 列表总数
+
+      detailId: '',
+      shareDialog: false, // 分享详情 - 弹窗
+      shareTable_dataList: null, // 分享详情 - 列表数据
+      shareTable_listLoading: true, // 分享详情 - 列表加载loading
+      shareTable_currentPage: 1, // 分享详情 - 当前页码
+      shareTable_pageSize: 10, // 分享详情 - 每页数量
+      shareTable_listTotal: 0, // 分享详情 - 列表总数
+    }
+  },
+  created() {
+    this.getCouponList()
+  },
+  methods: {
+    getCouponList() {
+      let params = {
+        userId: this.user.userId,
+        pageNum: this.currentPage,
+        pageSize: this.pageSize
+      }
+
+      getMemberCouponList(params).then(res => {
+        this.dataList = res.data.records
+        this.listTotal = res.data.total
+        this.listLoading = false
+      })
+    },
+    // 更改每页数量
+    handleSizeChange(val) {
+      this.pageSize = val
+      this.currentPage = 1
+      this.getCouponList()
+    },
+    // 更改当前页
+    handleCurrentChange(val) {
+      this.currentPage = val
+      this.getCouponList()
+    },
+    formatDate(row) {
+      return dateFormat('YYYY.mm.dd', new Date(row.activeStartTime)) + ' - ' + dateFormat('YYYY.mm.dd', new Date(row.activeEndTime))
+    },
+
+    // 分享详情 - 获取列表
+    getShareList() {
+      getShareList({
+        pageNo: this.shareTable_currentPage,
+        pageSize: this.shareTable_pageSize,
+        userCouponId: this.detailId,
+        // userId: this.user.userId,
+      }).then(res => {
+        this.shareTable_dataList = res.data.records;
+        this.shareTable_listTotal = res.data.total;
+        this.shareTable_listLoading = false;
+      })
+    },
+
+    // 分享详情 - 打开弹窗
+    openShareDetail(id) {
+      this.detailId = id;
+      this.shareDialog = true;
+      this.shareTable_currentPage = 1;
+      this.getShareList();
+    },
+
+    // 分享详情 - 更改列表当前页
+    shareTableCurrentChange(val) {
+      this.shareTable_currentPage = val;
+      this.getShareList();
+    },
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

Деякі файли не було показано, через те що забагато файлів було змінено