whx 3 周之前
父节点
当前提交
5330674973
共有 100 个文件被更改,包括 19365 次插入0 次删除
  1. 二进制
      virgo.wzfrontend/.DS_Store
  2. 二进制
      virgo.wzfrontend/shop/.DS_Store
  3. 14 0
      virgo.wzfrontend/shop/shop-admin/.editorconfig
  4. 14 0
      virgo.wzfrontend/shop/shop-admin/.env.development
  5. 6 0
      virgo.wzfrontend/shop/shop-admin/.env.production
  6. 8 0
      virgo.wzfrontend/shop/shop-admin/.env.staging
  7. 4 0
      virgo.wzfrontend/shop/shop-admin/.eslintignore
  8. 198 0
      virgo.wzfrontend/shop/shop-admin/.eslintrc.js
  9. 24 0
      virgo.wzfrontend/shop/shop-admin/.gitignore
  10. 8 0
      virgo.wzfrontend/shop/shop-admin/.postcssrc.js
  11. 5 0
      virgo.wzfrontend/shop/shop-admin/.travis.yml
  12. 21 0
      virgo.wzfrontend/shop/shop-admin/LICENSE
  13. 5 0
      virgo.wzfrontend/shop/shop-admin/babel.config.js
  14. 24 0
      virgo.wzfrontend/shop/shop-admin/jest.config.js
  15. 68 0
      virgo.wzfrontend/shop/shop-admin/mock/index.js
  16. 37 0
      virgo.wzfrontend/shop/shop-admin/mock/menu.js
  17. 68 0
      virgo.wzfrontend/shop/shop-admin/mock/mock-server.js
  18. 29 0
      virgo.wzfrontend/shop/shop-admin/mock/table.js
  19. 84 0
      virgo.wzfrontend/shop/shop-admin/mock/user.js
  20. 16761 0
      virgo.wzfrontend/shop/shop-admin/package-lock.json
  21. 73 0
      virgo.wzfrontend/shop/shop-admin/package.json
  22. 二进制
      virgo.wzfrontend/shop/shop-admin/public/favicon.ico
  23. 二进制
      virgo.wzfrontend/shop/shop-admin/public/img/bg.jpg
  24. 19 0
      virgo.wzfrontend/shop/shop-admin/public/index.html
  25. 230 0
      virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/langs/zh_CN.js
  26. 138 0
      virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/plugins/codesample/css/prism.css
  27. 二进制
      virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/plugins/emoticons/img/smiley-cool.gif
  28. 二进制
      virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/plugins/emoticons/img/smiley-cry.gif
  29. 二进制
      virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/plugins/emoticons/img/smiley-embarassed.gif
  30. 二进制
      virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/plugins/emoticons/img/smiley-foot-in-mouth.gif
  31. 二进制
      virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/plugins/emoticons/img/smiley-frown.gif
  32. 二进制
      virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/plugins/emoticons/img/smiley-innocent.gif
  33. 二进制
      virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/plugins/emoticons/img/smiley-kiss.gif
  34. 二进制
      virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/plugins/emoticons/img/smiley-laughing.gif
  35. 二进制
      virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/plugins/emoticons/img/smiley-money-mouth.gif
  36. 二进制
      virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/plugins/emoticons/img/smiley-sealed.gif
  37. 二进制
      virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/plugins/emoticons/img/smiley-smile.gif
  38. 二进制
      virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/plugins/emoticons/img/smiley-surprised.gif
  39. 二进制
      virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/plugins/emoticons/img/smiley-tongue-out.gif
  40. 二进制
      virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/plugins/emoticons/img/smiley-undecided.gif
  41. 二进制
      virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/plugins/emoticons/img/smiley-wink.gif
  42. 二进制
      virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/plugins/emoticons/img/smiley-yell.gif
  43. 154 0
      virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/plugins/visualblocks/css/visualblocks.css
  44. 1 0
      virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/skins/lightgray/content.inline.min.css
  45. 1 0
      virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/skins/lightgray/content.min.css
  46. 二进制
      virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/skins/lightgray/fonts/tinymce-mobile.woff
  47. 二进制
      virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/skins/lightgray/fonts/tinymce-small.eot
  48. 63 0
      virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/skins/lightgray/fonts/tinymce-small.svg
  49. 二进制
      virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/skins/lightgray/fonts/tinymce-small.ttf
  50. 二进制
      virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/skins/lightgray/fonts/tinymce-small.woff
  51. 二进制
      virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/skins/lightgray/fonts/tinymce.eot
  52. 131 0
      virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/skins/lightgray/fonts/tinymce.svg
  53. 二进制
      virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/skins/lightgray/fonts/tinymce.ttf
  54. 二进制
      virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/skins/lightgray/fonts/tinymce.woff
  55. 二进制
      virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/skins/lightgray/img/anchor.gif
  56. 二进制
      virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/skins/lightgray/img/loader.gif
  57. 二进制
      virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/skins/lightgray/img/object.gif
  58. 二进制
      virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/skins/lightgray/img/trans.gif
  59. 1 0
      virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/skins/lightgray/skin.min.css
  60. 1 0
      virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/skins/lightgray/skin.min.css.map
  61. 2 0
      virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/tinymce.min.js
  62. 11 0
      virgo.wzfrontend/shop/shop-admin/src/App.vue
  63. 36 0
      virgo.wzfrontend/shop/shop-admin/src/api/cms/article.js
  64. 31 0
      virgo.wzfrontend/shop/shop-admin/src/api/cms/banner.js
  65. 28 0
      virgo.wzfrontend/shop/shop-admin/src/api/cms/channel.js
  66. 9 0
      virgo.wzfrontend/shop/shop-admin/src/api/cms/contacts.js
  67. 9 0
      virgo.wzfrontend/shop/shop-admin/src/api/cms/fileInfo.js
  68. 9 0
      virgo.wzfrontend/shop/shop-admin/src/api/dashboard.js
  69. 25 0
      virgo.wzfrontend/shop/shop-admin/src/api/message/message.js
  70. 34 0
      virgo.wzfrontend/shop/shop-admin/src/api/message/sender.js
  71. 28 0
      virgo.wzfrontend/shop/shop-admin/src/api/message/template.js
  72. 38 0
      virgo.wzfrontend/shop/shop-admin/src/api/promotion/topic.js
  73. 28 0
      virgo.wzfrontend/shop/shop-admin/src/api/shop/address.js
  74. 37 0
      virgo.wzfrontend/shop/shop-admin/src/api/shop/attrKey.js
  75. 46 0
      virgo.wzfrontend/shop/shop-admin/src/api/shop/attrVal.js
  76. 28 0
      virgo.wzfrontend/shop/shop-admin/src/api/shop/cart.js
  77. 66 0
      virgo.wzfrontend/shop/shop-admin/src/api/shop/category.js
  78. 28 0
      virgo.wzfrontend/shop/shop-admin/src/api/shop/favorite.js
  79. 55 0
      virgo.wzfrontend/shop/shop-admin/src/api/shop/goods.js
  80. 21 0
      virgo.wzfrontend/shop/shop-admin/src/api/shop/goodsSku.js
  81. 73 0
      virgo.wzfrontend/shop/shop-admin/src/api/shop/order.js
  82. 28 0
      virgo.wzfrontend/shop/shop-admin/src/api/shop/orderItem.js
  83. 43 0
      virgo.wzfrontend/shop/shop-admin/src/api/shop/shopUser.js
  84. 51 0
      virgo.wzfrontend/shop/shop-admin/src/api/system/cfg.js
  85. 33 0
      virgo.wzfrontend/shop/shop-admin/src/api/system/dept.js
  86. 43 0
      virgo.wzfrontend/shop/shop-admin/src/api/system/dict.js
  87. 45 0
      virgo.wzfrontend/shop/shop-admin/src/api/system/express.js
  88. 23 0
      virgo.wzfrontend/shop/shop-admin/src/api/system/log.js
  89. 16 0
      virgo.wzfrontend/shop/shop-admin/src/api/system/loginLog.js
  90. 50 0
      virgo.wzfrontend/shop/shop-admin/src/api/system/menu.js
  91. 9 0
      virgo.wzfrontend/shop/shop-admin/src/api/system/notice.js
  92. 47 0
      virgo.wzfrontend/shop/shop-admin/src/api/system/role.js
  93. 65 0
      virgo.wzfrontend/shop/shop-admin/src/api/system/task.js
  94. 35 0
      virgo.wzfrontend/shop/shop-admin/src/api/system/user.js
  95. 9 0
      virgo.wzfrontend/shop/shop-admin/src/api/table.js
  96. 36 0
      virgo.wzfrontend/shop/shop-admin/src/api/user.js
  97. 二进制
      virgo.wzfrontend/shop/shop-admin/src/assets/404_images/404.png
  98. 二进制
      virgo.wzfrontend/shop/shop-admin/src/assets/404_images/404_cloud.png
  99. 二进制
      virgo.wzfrontend/shop/shop-admin/src/assets/custom-theme/fonts/element-icons.ttf
  100. 0 0
      virgo.wzfrontend/shop/shop-admin/src/assets/custom-theme/fonts/element-icons.woff

二进制
virgo.wzfrontend/.DS_Store


二进制
virgo.wzfrontend/shop/.DS_Store


+ 14 - 0
virgo.wzfrontend/shop/shop-admin/.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

+ 14 - 0
virgo.wzfrontend/shop/shop-admin/.env.development

@@ -0,0 +1,14 @@
+# just a flag
+ENV = 'development'
+
+# base api
+VUE_APP_BASE_API = '/dev-api'
+
+# vue-cli uses the VUE_CLI_BABEL_TRANSPILE_MODULES environment variable,
+# to control whether the babel-plugin-dynamic-import-node plugin is enabled.
+# It only does one thing by converting all import() to require().
+# This configuration can significantly increase the speed of hot updates,
+# when you have a large number of pages.
+# Detail:  https://github.com/vuejs/vue-cli/blob/dev/packages/@vue/babel-preset-app/index.js
+
+VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 6 - 0
virgo.wzfrontend/shop/shop-admin/.env.production

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

+ 8 - 0
virgo.wzfrontend/shop/shop-admin/.env.staging

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

+ 4 - 0
virgo.wzfrontend/shop/shop-admin/.eslintignore

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

+ 198 - 0
virgo.wzfrontend/shop/shop-admin/.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']
+  }
+}

+ 24 - 0
virgo.wzfrontend/shop/shop-admin/.gitignore

@@ -0,0 +1,24 @@
+**/.DS_Store
+node_modules
+/dist
+/build
+
+
+# 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?

+ 8 - 0
virgo.wzfrontend/shop/shop-admin/.postcssrc.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': {}
+  }
+}

+ 5 - 0
virgo.wzfrontend/shop/shop-admin/.travis.yml

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

+ 21 - 0
virgo.wzfrontend/shop/shop-admin/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.

+ 5 - 0
virgo.wzfrontend/shop/shop-admin/babel.config.js

@@ -0,0 +1,5 @@
+module.exports = {
+  presets: [
+    '@vue/app'
+  ]
+}

+ 24 - 0
virgo.wzfrontend/shop/shop-admin/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/'
+}

+ 68 - 0
virgo.wzfrontend/shop/shop-admin/mock/index.js

@@ -0,0 +1,68 @@
+import Mock from 'mockjs'
+import { param2Obj } from '../src/utils'
+
+import user from './user'
+import table from './table'
+import menu from './menu'
+
+const mocks = [
+  ...user,
+  ...table,
+  ...menu
+]
+
+// 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).
+export 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))
+  }
+}
+
+// for mock server
+const responseFake = (url, type, respond) => {
+  return {
+    url: new RegExp(`/mock${url}`),
+    type: type || 'get',
+    response(req, res) {
+      res.json(Mock.mock(respond instanceof Function ? respond(req, res) : respond))
+    }
+  }
+}
+
+export default mocks.map(route => {
+  return responseFake(route.url, route.type, route.response)
+})

+ 37 - 0
virgo.wzfrontend/shop/shop-admin/mock/menu.js

@@ -0,0 +1,37 @@
+import Mock from 'mockjs'
+
+const data = Mock.mock({
+  'menus':[  
+    {
+      path: '/product',
+      component: 'layout',   
+      children: [
+        {
+          path: 'index',
+          name: 'product',
+          component: 'views/product/index',
+          meta:{title: 'Product',icon: 'form'}
+        }
+      ]
+    },
+    { path: '*', redirect: '/404', hidden: true }
+  ]
+})
+
+
+export default [
+  {
+    url:'/menu/list',
+    type:'get',
+    response: config =>{
+      return {
+        code:20000,
+        data:{
+          menus:data.menus
+        }
+      }
+    }
+  }
+
+
+]

+ 68 - 0
virgo.wzfrontend/shop/shop-admin/mock/mock-server.js

@@ -0,0 +1,68 @@
+const chokidar = require('chokidar')
+const bodyParser = require('body-parser')
+const chalk = require('chalk')
+const path = require('path')
+
+const mockDir = path.join(process.cwd(), 'mock')
+
+function registerRoutes(app) {
+  let mockLastIndex
+  const { default: mocks } = require('./index.js')
+  for (const mock of mocks) {
+    app[mock.type](mock.url, mock.response)
+    mockLastIndex = app._router.stack.length
+  }
+  const mockRoutesLength = Object.keys(mocks).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)]
+    }
+  })
+}
+
+module.exports = app => {
+  // es6 polyfill
+  require('@babel/register')
+
+  // 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
virgo.wzfrontend/shop/shop-admin/mock/table.js

@@ -0,0 +1,29 @@
+import Mock from '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)'
+  }]
+})
+
+export default [
+  {
+    url: '/table/list',
+    type: 'get',
+    response: config => {
+      const items = data.items
+      return {
+        code: 20000,
+        data: {
+          total: items.length,
+          items: items
+        }
+      }
+    }
+  }
+]

+ 84 - 0
virgo.wzfrontend/shop/shop-admin/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'
+  }
+}
+
+export default [
+  // user login
+  {
+    url: '/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: '/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: '/user/logout',
+    type: 'post',
+    response: _ => {
+      return {
+        code: 20000,
+        data: 'success'
+      }
+    }
+  }
+]

文件差异内容过多而无法显示
+ 16761 - 0
virgo.wzfrontend/shop/shop-admin/package-lock.json


+ 73 - 0
virgo.wzfrontend/shop/shop-admin/package.json

@@ -0,0 +1,73 @@
+{
+  "name": "shop-admin",
+  "version": "4.1.0",
+  "description": "A  shop Admin with Element UI & axios & iconfont & permission control & lint",
+  "author": "enilu",
+  "license": "MIT",
+  "scripts": {
+    "dev": "vue-cli-service serve --open",
+    "build:prod": "vue-cli-service build",
+    "build:stage": "vue-cli-service build --mode staging",
+    "preview": "node build/index.js --preview",
+    "lint": "eslint --ext .js,.vue src",
+    "test:unit": "jest --clearCache && vue-cli-service test:unit",
+    "test:ci": "npm run lint && npm run test:unit",
+    "svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml"
+  },
+  "dependencies": {
+    "@riophae/vue-treeselect": "^0.4.0",
+    "axios": "0.18.0",
+    "browserslist": "^4.9.0",
+    "caniuse-lite": "^1.0.30001030",
+    "crypto-js": "^4.1.1",
+    "element-resize-detector": "^1.2.1",
+    "element-ui": "2.12.0",
+    "js-cookie": "2.2.0",
+    "normalize.css": "7.0.0",
+    "nprogress": "0.2.0",
+    "path-to-regexp": "2.4.0",
+    "vue": "2.6.10",
+    "vue-echarts": "^3.1.2",
+    "vue-i18n": "7.3.2",
+    "vue-router": "3.0.6",
+    "vuex": "3.1.1",
+    "webpack-dev-server": "3.3.1"
+  },
+  "devDependencies": {
+    "@babel/core": "7.0.0",
+    "@babel/register": "7.0.0",
+    "@vue/cli-plugin-babel": "3.6.0",
+    "@vue/cli-plugin-eslint": "3.6.0",
+    "@vue/cli-plugin-unit-jest": "3.6.3",
+    "@vue/cli-service": "3.6.0",
+    "@vue/test-utils": "1.0.0-beta.29",
+    "autoprefixer": "8.5.0",
+    "babel-core": "7.0.0-bridge.0",
+    "babel-eslint": "10.0.1",
+    "babel-jest": "23.6.0",
+    "chalk": "2.4.2",
+    "connect": "3.6.6",
+    "eslint": "5.15.3",
+    "eslint-plugin-vue": "5.2.2",
+    "html-webpack-plugin": "3.2.0",
+    "mockjs": "1.0.1-beta3",
+    "runjs": "^4.3.2",
+    "sass": "^1.32.6",
+    "sass-loader": "^8.0.0",
+    "script-ext-html-webpack-plugin": "2.1.3",
+    "script-loader": "0.7.2",
+    "serve-static": "^1.13.2",
+    "svg-sprite-loader": "4.1.3",
+    "svgo": "1.2.2",
+    "vue-template-compiler": "2.6.10"
+  },
+  "engines": {
+    "node": ">=8.9",
+    "npm": ">= 3.0.0"
+  },
+  "browserslist": [
+    "> 1%",
+    "last 2 versions",
+    "not ie <= 8"
+  ]
+}

二进制
virgo.wzfrontend/shop/shop-admin/public/favicon.ico


二进制
virgo.wzfrontend/shop/shop-admin/public/img/bg.jpg


+ 19 - 0
virgo.wzfrontend/shop/shop-admin/public/index.html

@@ -0,0 +1,19 @@
+<!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="/favicon.ico">
+    <title><%= webpackConfig.name %></title>
+  </head>
+  <body>
+    <noscript>
+      <strong>We're sorry but <%= webpackConfig.name %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
+    </noscript>
+
+    <script src=/tinymce4.7.5/tinymce.min.js></script>
+    <div id="app"></div>
+    <!-- built files will be auto injected -->
+  </body>
+</html>

+ 230 - 0
virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/langs/zh_CN.js

@@ -0,0 +1,230 @@
+tinymce.addI18n('zh_CN',{
+"Cut": "\u526a\u5207",
+"Heading 5": "\u6807\u98985",
+"Header 2": "\u6807\u98982",
+"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u4f60\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u6301\u5bf9\u526a\u8d34\u677f\u7684\u8bbf\u95ee\uff0c\u8bf7\u4f7f\u7528Ctrl+X\/C\/V\u952e\u8fdb\u884c\u590d\u5236\u7c98\u8d34\u3002",
+"Heading 4": "\u6807\u98984",
+"Div": "Div\u533a\u5757",
+"Heading 2": "\u6807\u98982",
+"Paste": "\u7c98\u8d34",
+"Close": "\u5173\u95ed",
+"Font Family": "\u5b57\u4f53",
+"Pre": "\u9884\u683c\u5f0f\u6587\u672c",
+"Align right": "\u53f3\u5bf9\u9f50",
+"New document": "\u65b0\u6587\u6863",
+"Blockquote": "\u5f15\u7528",
+"Numbered list": "\u7f16\u53f7\u5217\u8868",
+"Heading 1": "\u6807\u98981",
+"Headings": "\u6807\u9898",
+"Increase indent": "\u589e\u52a0\u7f29\u8fdb",
+"Formats": "\u683c\u5f0f",
+"Headers": "\u6807\u9898",
+"Select all": "\u5168\u9009",
+"Header 3": "\u6807\u98983",
+"Blocks": "\u533a\u5757",
+"Undo": "\u64a4\u6d88",
+"Strikethrough": "\u5220\u9664\u7ebf",
+"Bullet list": "\u9879\u76ee\u7b26\u53f7",
+"Header 1": "\u6807\u98981",
+"Superscript": "\u4e0a\u6807",
+"Clear formatting": "\u6e05\u9664\u683c\u5f0f",
+"Font Sizes": "\u5b57\u53f7",
+"Subscript": "\u4e0b\u6807",
+"Header 6": "\u6807\u98986",
+"Redo": "\u91cd\u590d",
+"Paragraph": "\u6bb5\u843d",
+"Ok": "\u786e\u5b9a",
+"Bold": "\u7c97\u4f53",
+"Code": "\u4ee3\u7801",
+"Italic": "\u659c\u4f53",
+"Align center": "\u5c45\u4e2d",
+"Header 5": "\u6807\u98985",
+"Heading 6": "\u6807\u98986",
+"Heading 3": "\u6807\u98983",
+"Decrease indent": "\u51cf\u5c11\u7f29\u8fdb",
+"Header 4": "\u6807\u98984",
+"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u5f53\u524d\u4e3a\u7eaf\u6587\u672c\u7c98\u8d34\u6a21\u5f0f\uff0c\u518d\u6b21\u70b9\u51fb\u53ef\u4ee5\u56de\u5230\u666e\u901a\u7c98\u8d34\u6a21\u5f0f\u3002",
+"Underline": "\u4e0b\u5212\u7ebf",
+"Cancel": "\u53d6\u6d88",
+"Justify": "\u4e24\u7aef\u5bf9\u9f50",
+"Inline": "\u6587\u672c",
+"Copy": "\u590d\u5236",
+"Align left": "\u5de6\u5bf9\u9f50",
+"Visual aids": "\u7f51\u683c\u7ebf",
+"Lower Greek": "\u5c0f\u5199\u5e0c\u814a\u5b57\u6bcd",
+"Square": "\u65b9\u5757",
+"Default": "\u9ed8\u8ba4",
+"Lower Alpha": "\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd",
+"Circle": "\u7a7a\u5fc3\u5706",
+"Disc": "\u5b9e\u5fc3\u5706",
+"Upper Alpha": "\u5927\u5199\u82f1\u6587\u5b57\u6bcd",
+"Upper Roman": "\u5927\u5199\u7f57\u9a6c\u5b57\u6bcd",
+"Lower Roman": "\u5c0f\u5199\u7f57\u9a6c\u5b57\u6bcd",
+"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "\u6807\u8bc6\u7b26\u5e94\u8be5\u4ee5\u5b57\u6bcd\u5f00\u5934\uff0c\u540e\u8ddf\u5b57\u6bcd\u3001\u6570\u5b57\u3001\u7834\u6298\u53f7\u3001\u70b9\u3001\u5192\u53f7\u6216\u4e0b\u5212\u7ebf\u3002",
+"Name": "\u540d\u79f0",
+"Anchor": "\u951a\u70b9",
+"Id": "\u6807\u8bc6\u7b26",
+"You have unsaved changes are you sure you want to navigate away?": "\u4f60\u8fd8\u6709\u6587\u6863\u5c1a\u672a\u4fdd\u5b58\uff0c\u786e\u5b9a\u8981\u79bb\u5f00\uff1f",
+"Restore last draft": "\u6062\u590d\u4e0a\u6b21\u7684\u8349\u7a3f",
+"Special character": "\u7279\u6b8a\u7b26\u53f7",
+"Source code": "\u6e90\u4ee3\u7801",
+"Language": "\u8bed\u8a00",
+"Insert\/Edit code sample": "\u63d2\u5165\/\u7f16\u8f91\u4ee3\u7801\u793a\u4f8b",
+"B": "B",
+"R": "R",
+"G": "G",
+"Color": "\u989c\u8272",
+"Right to left": "\u4ece\u53f3\u5230\u5de6",
+"Left to right": "\u4ece\u5de6\u5230\u53f3",
+"Emoticons": "\u8868\u60c5",
+"Robots": "\u673a\u5668\u4eba",
+"Document properties": "\u6587\u6863\u5c5e\u6027",
+"Title": "\u6807\u9898",
+"Keywords": "\u5173\u952e\u8bcd",
+"Encoding": "\u7f16\u7801",
+"Description": "\u63cf\u8ff0",
+"Author": "\u4f5c\u8005",
+"Fullscreen": "\u5168\u5c4f",
+"Horizontal line": "\u6c34\u5e73\u5206\u5272\u7ebf",
+"Horizontal space": "\u6c34\u5e73\u8fb9\u8ddd",
+"Insert\/edit image": "\u63d2\u5165\/\u7f16\u8f91\u56fe\u7247",
+"General": "\u666e\u901a",
+"Advanced": "\u9ad8\u7ea7",
+"Source": "\u5730\u5740",
+"Border": "\u8fb9\u6846",
+"Constrain proportions": "\u4fdd\u6301\u7eb5\u6a2a\u6bd4",
+"Vertical space": "\u5782\u76f4\u8fb9\u8ddd",
+"Image description": "\u56fe\u7247\u63cf\u8ff0",
+"Style": "\u6837\u5f0f",
+"Dimensions": "\u5927\u5c0f",
+"Insert image": "\u63d2\u5165\u56fe\u7247",
+"Image": "\u56fe\u7247",
+"Zoom in": "\u653e\u5927",
+"Contrast": "\u5bf9\u6bd4\u5ea6",
+"Back": "\u540e\u9000",
+"Gamma": "\u4f3d\u9a6c\u503c",
+"Flip horizontally": "\u6c34\u5e73\u7ffb\u8f6c",
+"Resize": "\u8c03\u6574\u5927\u5c0f",
+"Sharpen": "\u9510\u5316",
+"Zoom out": "\u7f29\u5c0f",
+"Image options": "\u56fe\u7247\u9009\u9879",
+"Apply": "\u5e94\u7528",
+"Brightness": "\u4eae\u5ea6",
+"Rotate clockwise": "\u987a\u65f6\u9488\u65cb\u8f6c",
+"Rotate counterclockwise": "\u9006\u65f6\u9488\u65cb\u8f6c",
+"Edit image": "\u7f16\u8f91\u56fe\u7247",
+"Color levels": "\u989c\u8272\u5c42\u6b21",
+"Crop": "\u88c1\u526a",
+"Orientation": "\u65b9\u5411",
+"Flip vertically": "\u5782\u76f4\u7ffb\u8f6c",
+"Invert": "\u53cd\u8f6c",
+"Date\/time": "\u65e5\u671f\/\u65f6\u95f4",
+"Insert date\/time": "\u63d2\u5165\u65e5\u671f\/\u65f6\u95f4",
+"Remove link": "\u5220\u9664\u94fe\u63a5",
+"Url": "\u5730\u5740",
+"Text to display": "\u663e\u793a\u6587\u5b57",
+"Anchors": "\u951a\u70b9",
+"Insert link": "\u63d2\u5165\u94fe\u63a5",
+"Link": "\u94fe\u63a5",
+"New window": "\u5728\u65b0\u7a97\u53e3\u6253\u5f00",
+"None": "\u65e0",
+"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u5c5e\u4e8e\u5916\u90e8\u94fe\u63a5\uff0c\u9700\u8981\u52a0\u4e0ahttp:\/\/:\u524d\u7f00\u5417\uff1f",
+"Paste or type a link": "\u7c98\u8d34\u6216\u8f93\u5165\u94fe\u63a5",
+"Target": "\u6253\u5f00\u65b9\u5f0f",
+"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u4e3a\u90ae\u4ef6\u5730\u5740\uff0c\u9700\u8981\u52a0\u4e0amailto:\u524d\u7f00\u5417\uff1f",
+"Insert\/edit link": "\u63d2\u5165\/\u7f16\u8f91\u94fe\u63a5",
+"Insert\/edit video": "\u63d2\u5165\/\u7f16\u8f91\u89c6\u9891",
+"Media": "\u5a92\u4f53",
+"Alternative source": "\u955c\u50cf",
+"Paste your embed code below:": "\u5c06\u5185\u5d4c\u4ee3\u7801\u7c98\u8d34\u5728\u4e0b\u9762:",
+"Insert video": "\u63d2\u5165\u89c6\u9891",
+"Poster": "\u5c01\u9762",
+"Insert\/edit media": "\u63d2\u5165\/\u7f16\u8f91\u5a92\u4f53",
+"Embed": "\u5185\u5d4c",
+"Nonbreaking space": "\u4e0d\u95f4\u65ad\u7a7a\u683c",
+"Page break": "\u5206\u9875\u7b26",
+"Paste as text": "\u7c98\u8d34\u4e3a\u6587\u672c",
+"Preview": "\u9884\u89c8",
+"Print": "\u6253\u5370",
+"Save": "\u4fdd\u5b58",
+"Could not find the specified string.": "\u672a\u627e\u5230\u641c\u7d22\u5185\u5bb9.",
+"Replace": "\u66ff\u6362",
+"Next": "\u4e0b\u4e00\u4e2a",
+"Whole words": "\u5168\u5b57\u5339\u914d",
+"Find and replace": "\u67e5\u627e\u548c\u66ff\u6362",
+"Replace with": "\u66ff\u6362\u4e3a",
+"Find": "\u67e5\u627e",
+"Replace all": "\u5168\u90e8\u66ff\u6362",
+"Match case": "\u533a\u5206\u5927\u5c0f\u5199",
+"Prev": "\u4e0a\u4e00\u4e2a",
+"Spellcheck": "\u62fc\u5199\u68c0\u67e5",
+"Finish": "\u5b8c\u6210",
+"Ignore all": "\u5168\u90e8\u5ffd\u7565",
+"Ignore": "\u5ffd\u7565",
+"Add to Dictionary": "\u6dfb\u52a0\u5230\u5b57\u5178",
+"Insert row before": "\u5728\u4e0a\u65b9\u63d2\u5165",
+"Rows": "\u884c",
+"Height": "\u9ad8",
+"Paste row after": "\u7c98\u8d34\u5230\u4e0b\u65b9",
+"Alignment": "\u5bf9\u9f50\u65b9\u5f0f",
+"Border color": "\u8fb9\u6846\u989c\u8272",
+"Column group": "\u5217\u7ec4",
+"Row": "\u884c",
+"Insert column before": "\u5728\u5de6\u4fa7\u63d2\u5165",
+"Split cell": "\u62c6\u5206\u5355\u5143\u683c",
+"Cell padding": "\u5355\u5143\u683c\u5185\u8fb9\u8ddd",
+"Cell spacing": "\u5355\u5143\u683c\u5916\u95f4\u8ddd",
+"Row type": "\u884c\u7c7b\u578b",
+"Insert table": "\u63d2\u5165\u8868\u683c",
+"Body": "\u8868\u4f53",
+"Caption": "\u6807\u9898",
+"Footer": "\u8868\u5c3e",
+"Delete row": "\u5220\u9664\u884c",
+"Paste row before": "\u7c98\u8d34\u5230\u4e0a\u65b9",
+"Scope": "\u8303\u56f4",
+"Delete table": "\u5220\u9664\u8868\u683c",
+"H Align": "\u6c34\u5e73\u5bf9\u9f50",
+"Top": "\u9876\u90e8\u5bf9\u9f50",
+"Header cell": "\u8868\u5934\u5355\u5143\u683c",
+"Column": "\u5217",
+"Row group": "\u884c\u7ec4",
+"Cell": "\u5355\u5143\u683c",
+"Middle": "\u5782\u76f4\u5c45\u4e2d",
+"Cell type": "\u5355\u5143\u683c\u7c7b\u578b",
+"Copy row": "\u590d\u5236\u884c",
+"Row properties": "\u884c\u5c5e\u6027",
+"Table properties": "\u8868\u683c\u5c5e\u6027",
+"Bottom": "\u5e95\u90e8\u5bf9\u9f50",
+"V Align": "\u5782\u76f4\u5bf9\u9f50",
+"Header": "\u8868\u5934",
+"Right": "\u53f3\u5bf9\u9f50",
+"Insert column after": "\u5728\u53f3\u4fa7\u63d2\u5165",
+"Cols": "\u5217",
+"Insert row after": "\u5728\u4e0b\u65b9\u63d2\u5165",
+"Width": "\u5bbd",
+"Cell properties": "\u5355\u5143\u683c\u5c5e\u6027",
+"Left": "\u5de6\u5bf9\u9f50",
+"Cut row": "\u526a\u5207\u884c",
+"Delete column": "\u5220\u9664\u5217",
+"Center": "\u5c45\u4e2d",
+"Merge cells": "\u5408\u5e76\u5355\u5143\u683c",
+"Insert template": "\u63d2\u5165\u6a21\u677f",
+"Templates": "\u6a21\u677f",
+"Background color": "\u80cc\u666f\u8272",
+"Custom...": "\u81ea\u5b9a\u4e49...",
+"Custom color": "\u81ea\u5b9a\u4e49\u989c\u8272",
+"No color": "\u65e0",
+"Text color": "\u6587\u5b57\u989c\u8272",
+"Table of Contents": "\u5185\u5bb9\u5217\u8868",
+"Show blocks": "\u663e\u793a\u533a\u5757\u8fb9\u6846",
+"Show invisible characters": "\u663e\u793a\u4e0d\u53ef\u89c1\u5b57\u7b26",
+"Words: {0}": "\u5b57\u6570\uff1a{0}",
+"Insert": "\u63d2\u5165",
+"File": "\u6587\u4ef6",
+"Edit": "\u7f16\u8f91",
+"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u5728\u7f16\u8f91\u533a\u6309ALT-F9\u6253\u5f00\u83dc\u5355\uff0c\u6309ALT-F10\u6253\u5f00\u5de5\u5177\u680f\uff0c\u6309ALT-0\u67e5\u770b\u5e2e\u52a9",
+"Tools": "\u5de5\u5177",
+"View": "\u89c6\u56fe",
+"Table": "\u8868\u683c",
+"Format": "\u683c\u5f0f"
+});

+ 138 - 0
virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/plugins/codesample/css/prism.css

@@ -0,0 +1,138 @@
+/* http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript */
+/**
+ * prism.js default theme for JavaScript, CSS and HTML
+ * Based on dabblet (http://dabblet.com)
+ * @author Lea Verou
+ */
+
+code[class*="language-"],
+pre[class*="language-"] {
+  color: black;
+  text-shadow: 0 1px white;
+  font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
+  direction: ltr;
+  text-align: left;
+  white-space: pre;
+  word-spacing: normal;
+  word-break: normal;
+  word-wrap: normal;
+  line-height: 1.5;
+
+  -moz-tab-size: 4;
+  -o-tab-size: 4;
+  tab-size: 4;
+
+  -webkit-hyphens: none;
+  -moz-hyphens: none;
+  -ms-hyphens: none;
+  hyphens: none;
+}
+
+pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection,
+code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection {
+  text-shadow: none;
+  background: #b3d4fc;
+}
+
+pre[class*="language-"]::selection, pre[class*="language-"] ::selection,
+code[class*="language-"]::selection, code[class*="language-"] ::selection {
+  text-shadow: none;
+  background: #b3d4fc;
+}
+
+@media print {
+  code[class*="language-"],
+  pre[class*="language-"] {
+    text-shadow: none;
+  }
+}
+
+/* Code blocks */
+pre[class*="language-"] {
+  padding: 1em;
+  margin: .5em 0;
+  overflow: auto;
+}
+
+:not(pre) > code[class*="language-"],
+pre[class*="language-"] {
+  background: #f5f2f0;
+}
+
+/* Inline code */
+:not(pre) > code[class*="language-"] {
+  padding: .1em;
+  border-radius: .3em;
+}
+
+.token.comment,
+.token.prolog,
+.token.doctype,
+.token.cdata {
+  color: slategray;
+}
+
+.token.punctuation {
+  color: #999;
+}
+
+.namespace {
+  opacity: .7;
+}
+
+.token.property,
+.token.tag,
+.token.boolean,
+.token.number,
+.token.constant,
+.token.symbol,
+.token.deleted {
+  color: #905;
+}
+
+.token.selector,
+.token.attr-name,
+.token.string,
+.token.char,
+.token.builtin,
+.token.inserted {
+  color: #690;
+}
+
+.token.operator,
+.token.entity,
+.token.url,
+.language-css .token.string,
+.style .token.string {
+  color: #a67f59;
+  background: hsla(0, 0%, 100%, .5);
+}
+
+.token.atrule,
+.token.attr-value,
+.token.keyword {
+  color: #07a;
+}
+
+.token.function {
+  color: #DD4A68;
+}
+
+.token.regex,
+.token.important,
+.token.variable {
+  color: #e90;
+}
+
+.token.important,
+.token.bold {
+  font-weight: bold;
+}
+.token.italic {
+  font-style: italic;
+}
+
+.token.entity {
+  cursor: help;
+}
+

二进制
virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/plugins/emoticons/img/smiley-cool.gif


二进制
virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/plugins/emoticons/img/smiley-cry.gif


二进制
virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/plugins/emoticons/img/smiley-embarassed.gif


二进制
virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/plugins/emoticons/img/smiley-foot-in-mouth.gif


二进制
virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/plugins/emoticons/img/smiley-frown.gif


二进制
virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/plugins/emoticons/img/smiley-innocent.gif


二进制
virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/plugins/emoticons/img/smiley-kiss.gif


二进制
virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/plugins/emoticons/img/smiley-laughing.gif


二进制
virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/plugins/emoticons/img/smiley-money-mouth.gif


二进制
virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/plugins/emoticons/img/smiley-sealed.gif


二进制
virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/plugins/emoticons/img/smiley-smile.gif


二进制
virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/plugins/emoticons/img/smiley-surprised.gif


二进制
virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/plugins/emoticons/img/smiley-tongue-out.gif


二进制
virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/plugins/emoticons/img/smiley-undecided.gif


二进制
virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/plugins/emoticons/img/smiley-wink.gif


二进制
virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/plugins/emoticons/img/smiley-yell.gif


+ 154 - 0
virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/plugins/visualblocks/css/visualblocks.css

@@ -0,0 +1,154 @@
+.mce-visualblocks p {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin-left: 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks h1 {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin-left: 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks h2 {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin-left: 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks h3 {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin-left: 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks h4 {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin-left: 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks h5 {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin-left: 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks h6 {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin-left: 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks div:not([data-mce-bogus]) {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin-left: 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks section {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin: 0 0 1em 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks article {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin: 0 0 1em 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks blockquote {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks address {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin: 0 0 1em 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks pre {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin-left: 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks figure {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin: 0 0 1em 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks hgroup {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin: 0 0 1em 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks aside {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin: 0 0 1em 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks figcaption {
+  border: 1px dashed #BBB;
+}
+
+.mce-visualblocks ul {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin: 0 0 1em 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks ol {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin: 0 0 1em 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==);
+  background-repeat: no-repeat;
+}
+
+.mce-visualblocks dl {
+  padding-top: 10px;
+  border: 1px dashed #BBB;
+  margin: 0 0 1em 3px;
+  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==);
+  background-repeat: no-repeat;
+}

文件差异内容过多而无法显示
+ 1 - 0
virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/skins/lightgray/content.inline.min.css


文件差异内容过多而无法显示
+ 1 - 0
virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/skins/lightgray/content.min.css


二进制
virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/skins/lightgray/fonts/tinymce-mobile.woff


二进制
virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/skins/lightgray/fonts/tinymce-small.eot


文件差异内容过多而无法显示
+ 63 - 0
virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/skins/lightgray/fonts/tinymce-small.svg


二进制
virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/skins/lightgray/fonts/tinymce-small.ttf


二进制
virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/skins/lightgray/fonts/tinymce-small.woff


二进制
virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/skins/lightgray/fonts/tinymce.eot


文件差异内容过多而无法显示
+ 131 - 0
virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/skins/lightgray/fonts/tinymce.svg


二进制
virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/skins/lightgray/fonts/tinymce.ttf


二进制
virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/skins/lightgray/fonts/tinymce.woff


二进制
virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/skins/lightgray/img/anchor.gif


二进制
virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/skins/lightgray/img/loader.gif


二进制
virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/skins/lightgray/img/object.gif


二进制
virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/skins/lightgray/img/trans.gif


文件差异内容过多而无法显示
+ 1 - 0
virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/skins/lightgray/skin.min.css


文件差异内容过多而无法显示
+ 1 - 0
virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/skins/lightgray/skin.min.css.map


文件差异内容过多而无法显示
+ 2 - 0
virgo.wzfrontend/shop/shop-admin/public/tinymce4.7.5/tinymce.min.js


+ 11 - 0
virgo.wzfrontend/shop/shop-admin/src/App.vue

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

+ 36 - 0
virgo.wzfrontend/shop/shop-admin/src/api/cms/article.js

@@ -0,0 +1,36 @@
+import request from '@/utils/request'
+
+export default {
+  getList: function (params) {
+    return request({
+      url: '/article/list',
+      method: 'get',
+      params
+    })
+  },
+  save: function (params) {
+    return request({
+      url: '/article',
+      method: 'post',
+      data: params
+    })
+  },
+  remove: function (id) {
+    return request({
+      url: '/article',
+      method: 'delete',
+      params: {
+        id: id
+      }
+    })
+  },
+  get: function (id) {
+    return request({
+      url: '/article',
+      method: 'get',
+      params: {
+        id: id
+      }
+    })
+  }
+}

+ 31 - 0
virgo.wzfrontend/shop/shop-admin/src/api/cms/banner.js

@@ -0,0 +1,31 @@
+import request from '@/utils/request'
+const apiUrl = process.env.BASE_API
+export function getApiUrl() {
+  return apiUrl
+}
+export function getList(params) {
+  return request({
+    url: '/banner/list',
+    method: 'get',
+    params
+  })
+}
+
+
+export function save(params) {
+  return request({
+    url: '/banner',
+    method: 'post',
+    params
+  })
+}
+
+export function remove(id) {
+  return request({
+    url: '/banner',
+    method: 'delete',
+    params: {
+      id: id
+    }
+  })
+}

+ 28 - 0
virgo.wzfrontend/shop/shop-admin/src/api/cms/channel.js

@@ -0,0 +1,28 @@
+import request from '@/utils/request'
+
+export function getList(params) {
+  return request({
+    url: '/channel/list',
+    method: 'get',
+    params
+  })
+}
+
+
+export function save(params) {
+  return request({
+    url: '/channel',
+    method: 'post',
+    params
+  })
+}
+
+export function remove(id) {
+  return request({
+    url: '/channel',
+    method: 'delete',
+    params: {
+      id: id
+    }
+  })
+}

+ 9 - 0
virgo.wzfrontend/shop/shop-admin/src/api/cms/contacts.js

@@ -0,0 +1,9 @@
+import request from '@/utils/request'
+
+export function getList(params) {
+  return request({
+    url: '/contacts/list',
+    method: 'get',
+    params
+  })
+}

+ 9 - 0
virgo.wzfrontend/shop/shop-admin/src/api/cms/fileInfo.js

@@ -0,0 +1,9 @@
+import request from '@/utils/request'
+
+export function getList(params) {
+  return request({
+    url: '/fileMgr/list',
+    method: 'get',
+    params
+  })
+}

+ 9 - 0
virgo.wzfrontend/shop/shop-admin/src/api/dashboard.js

@@ -0,0 +1,9 @@
+import request from '@/utils/request'
+export  default{
+  get:function(){
+    return request({
+      url: '/dashboard',
+      method: 'get',
+    })
+  }
+}

+ 25 - 0
virgo.wzfrontend/shop/shop-admin/src/api/message/message.js

@@ -0,0 +1,25 @@
+import request from '@/utils/request'
+
+export function getList(params) {
+    return request({
+        url: '/message/list',
+        method: 'get',
+        params
+    })
+}
+
+
+export function save(params) {
+    return request({
+        url: '/message',
+        method: 'post',
+        params
+    })
+}
+
+export function clear() {
+    return request({
+        url: '/message',
+        method: 'delete'
+    })
+}

+ 34 - 0
virgo.wzfrontend/shop/shop-admin/src/api/message/sender.js

@@ -0,0 +1,34 @@
+import request from '@/utils/request'
+
+export function getList(params) {
+    return request({
+        url: '/message/sender/list',
+        method: 'get',
+        params
+    })
+}
+
+export function queryAll(params) {
+  return request({
+    url: '/message/sender/queryAll',
+    method: 'get'
+  })
+}
+
+export function save(params) {
+    return request({
+        url: '/message/sender',
+        method: 'post',
+        params
+    })
+}
+
+export function remove(id) {
+    return request({
+        url: '/message/sender',
+        method: 'delete',
+        params: {
+            id: id
+        }
+    })
+}

+ 28 - 0
virgo.wzfrontend/shop/shop-admin/src/api/message/template.js

@@ -0,0 +1,28 @@
+import request from '@/utils/request'
+
+export function getList(params) {
+    return request({
+        url: '/message/template/list',
+        method: 'get',
+        params
+    })
+}
+
+
+export function save(params) {
+    return request({
+        url: '/message/template',
+        method: 'post',
+        params
+    })
+}
+
+export function remove(id) {
+    return request({
+        url: '/message/template',
+        method: 'delete',
+        params: {
+            id: id
+        }
+    })
+}

+ 38 - 0
virgo.wzfrontend/shop/shop-admin/src/api/promotion/topic.js

@@ -0,0 +1,38 @@
+import request from '@/utils/request'
+
+export default {
+  getList: function (params) {
+    return request({
+      url: '/promotion/topic/list',
+      method: 'get',
+      params
+    })
+  },
+  save: function (params) {
+    return request({
+      url: '/promotion/topic',
+      method: 'post',
+      params
+    })
+  },
+  remove: function (id) {
+    return request({
+      url: '/promotion/topic',
+      method: 'delete',
+      params: {
+        id: id
+      }
+    })
+  },
+  changeDisabled:function(id,disabled){
+    return request({
+      url:'/promotion/topic/changeDisabled',
+      method:'post',
+      params:{
+        id:id,
+        disabled:disabled
+      }
+    })
+  }
+
+}

+ 28 - 0
virgo.wzfrontend/shop/shop-admin/src/api/shop/address.js

@@ -0,0 +1,28 @@
+import request from '@/utils/request'
+
+export function getList(params) {
+    return request({
+        url: '/shop/address/list',
+        method: 'get',
+        params
+    })
+}
+
+
+export function save(params) {
+    return request({
+        url: '/shop/address',
+        method: 'post',
+        params
+    })
+}
+
+export function remove(id) {
+    return request({
+        url: '/shop/address',
+        method: 'delete',
+        params: {
+            id: id
+        }
+    })
+}

+ 37 - 0
virgo.wzfrontend/shop/shop-admin/src/api/shop/attrKey.js

@@ -0,0 +1,37 @@
+import request from '@/utils/request'
+
+export default {
+  getList: function (params) {
+    return request({
+      url: '/shop/goods/attr/key/list',
+      method: 'get',
+      params
+    })
+  },
+  save: function (params) {
+    return request({
+      url: '/shop/goods/attr/key',
+      method: 'post',
+      params
+    })
+  },
+  remove: function (id) {
+    return request({
+      url: '/shop/goods/attr/key',
+      method: 'delete',
+      params: {
+        id: id
+      }
+    })
+  },
+  updateAttrName:function(id,attrName){
+    return request({
+      url: '/shop/goods/attr/key/updateAttrName',
+      method: 'POST',
+      params: {
+        id: id,
+        attrName:attrName
+      }
+    })
+  }
+}

+ 46 - 0
virgo.wzfrontend/shop/shop-admin/src/api/shop/attrVal.js

@@ -0,0 +1,46 @@
+import request from '@/utils/request'
+
+export default{
+  getAttrVals: function (idAttrKey) {
+    return request({
+      url: '/shop/attr/val/getAttrVals',
+      method: 'get',
+      params: {
+        idAttrKey: idAttrKey
+      }
+    })
+  },
+  save: function (params) {
+    return request({
+      url: '/shop/attr/val',
+      method: 'post',
+      params
+    })
+  },
+  remove: function (id) {
+    return request({
+      url: '/shop/attr/val',
+      method: 'delete',
+      params: {
+        id: id
+      }
+    })
+  },
+  updateAttrVal:function(id,attrVal){
+    return request({
+      url: '/shop/attr/val/updateAttrVal',
+      method: 'POST',
+      params: {
+        id: id,
+        attrVal:attrVal
+      }
+    })
+  },
+
+  getAttrBy: function(idCategory) {
+    return request({
+      url: '/shop/attr/val/getAttrByCategoryAndGoods/'+idCategory,
+      method: 'get'
+    })
+  }
+}

+ 28 - 0
virgo.wzfrontend/shop/shop-admin/src/api/shop/cart.js

@@ -0,0 +1,28 @@
+import request from '@/utils/request'
+
+export function getList(params) {
+    return request({
+        url: '/shop/cart/list',
+        method: 'get',
+        params
+    })
+}
+
+
+export function save(params) {
+    return request({
+        url: '/shop/cart',
+        method: 'post',
+        params
+    })
+}
+
+export function remove(id) {
+    return request({
+        url: '/shop/cart',
+        method: 'delete',
+        params: {
+            id: id
+        }
+    })
+}

+ 66 - 0
virgo.wzfrontend/shop/shop-admin/src/api/shop/category.js

@@ -0,0 +1,66 @@
+import request from '@/utils/request'
+
+export default {
+
+  getList: function (params) {
+    return request({
+      url: '/shop/category/list',
+      method: 'get',
+      params
+    })
+  },
+
+  getCategories: function () {
+    return request({
+      url: '/shop/category/getAll',
+      method: 'get'
+    })
+  },
+
+  getBanners: function (id) {
+    return request({
+      url: '/shop/category/getBanners/' + id,
+      method: 'get'
+    })
+  },
+  getAttrKeys: function (id) {
+    return request({
+      url: '/shop/category/getAttrKeys/' + id,
+      method: 'get'
+    })
+  },
+  save: function (params) {
+    return request({
+      url: '/shop/category',
+      method: 'post',
+      params:params
+    })
+  },
+  remove: function (id) {
+    return request({
+      url: '/shop/category',
+      method: 'delete',
+      params: {
+        id: id
+      }
+    })
+  },
+  removeBanner: function (id, idBanner) {
+    return request({
+      url: '/shop/category/removeBanner/' + id + '/' + idBanner,
+      method: 'delete'
+    })
+  },
+  setCategoryBanner: function (id, idBanner) {
+    return request({
+      url: '/shop/category/setBanner/' + id + '/' + idBanner,
+      method: 'post'
+    })
+  },
+  changeShowIndex:function(id,showIndex){
+    return request({
+      url: '/shop/category/changeShowIndex/' + id + '/' + showIndex,
+      method: 'post'
+    })
+  }
+}

+ 28 - 0
virgo.wzfrontend/shop/shop-admin/src/api/shop/favorite.js

@@ -0,0 +1,28 @@
+import request from '@/utils/request'
+
+export function getList(params) {
+    return request({
+        url: '/shop/favorite/list',
+        method: 'get',
+        params
+    })
+}
+
+
+export function save(params) {
+    return request({
+        url: '/shop/favorite',
+        method: 'post',
+        params
+    })
+}
+
+export function remove(id) {
+    return request({
+        url: '/shop/favorite',
+        method: 'delete',
+        params: {
+            id: id
+        }
+    })
+}

+ 55 - 0
virgo.wzfrontend/shop/shop-admin/src/api/shop/goods.js

@@ -0,0 +1,55 @@
+import request from '@/utils/request'
+
+export default {
+  getList: function (params) {
+    return request({
+      url: '/shop/goods/list',
+      method: 'get',
+      params
+    })
+  },
+
+
+  saveBaseInfo: function (params) {
+    return request({
+      url: '/shop/goods/saveBaseInfo',
+      method: 'post',
+      data: params
+    })
+  },
+  save: function (params) {
+    return request({
+      url: '/shop/goods',
+      method: 'post',
+      data: params
+    })
+  },
+  remove: function (id) {
+    return request({
+      url: '/shop/goods',
+      method: 'delete',
+      params: {
+        id: id
+      }
+    })
+  },
+  get: function (id) {
+    return request({
+      url: '/shop/goods',
+      method: 'get',
+      params: {
+        id: id
+      }
+    })
+  },
+  changeIsOnSale: function (id, isOnSale) {
+    return request({
+      url: '/shop/goods/changeIsOnSale',
+      method: 'post',
+      params: {
+        id: id,
+        isOnSale: isOnSale
+      }
+    })
+  }
+}

+ 21 - 0
virgo.wzfrontend/shop/shop-admin/src/api/shop/goodsSku.js

@@ -0,0 +1,21 @@
+import request from '@/utils/request'
+
+
+export default {
+  save:function(params){
+    return request({
+      url: '/shop/goods/sku',
+      method: 'post',
+      data : params
+    })
+  },
+  remove:function(id){
+    return request({
+      url: '/shop/goods/sku',
+      method: 'delete',
+      params: {
+        id: id
+      }
+    })
+  }
+}

+ 73 - 0
virgo.wzfrontend/shop/shop-admin/src/api/shop/order.js

@@ -0,0 +1,73 @@
+import request from '@/utils/request'
+
+export  default {
+  getList: function (params) {
+    return request({
+      url: '/shop/order/list',
+      method: 'get',
+      params
+    })
+  },
+  getOrderStatistic:function(){
+    return request({
+      url: '/shop/order/getOrderStatistic',
+      method: 'get'
+    })
+  },
+  exportXls: function (params) {
+    return request({
+      url: '/shop/order/export',
+      method: 'get',
+      params
+    })
+  },
+
+
+  sendOut: function (id,idExpress,shippingSn) {
+    return request({
+      url: '/shop/order/sendOut/' + id,
+      method: 'post',
+      params:{
+        idExpress:idExpress,
+        shippingSn:shippingSn
+      }
+    })
+  },
+
+  remove: function (id) {
+    return request({
+      url: '/shop/order',
+      method: 'delete',
+      params: {
+        id: id
+      }
+    })
+  },
+  getOrder: function (orderSn) {
+    return request({
+      url: '/shop/order/' + orderSn,
+      method: 'get'
+    })
+  },
+  getLogs:function(idOrder){
+    return request({
+      url: '/shop/order/log/queryByIdOrder/' + idOrder,
+      method: 'get'
+    })
+  },
+  addComment:function(idOrder,message){
+    return request({
+      url: '/shop/order/comment/' + idOrder,
+      method: 'post',
+      params: {
+        message: message
+      }
+    })
+  },
+  getExpressInfo:function(orderSn){
+    return request({
+      url:'/shop/order/getExpressInfo/'+orderSn,
+        method:'get'
+    })
+  }
+}

+ 28 - 0
virgo.wzfrontend/shop/shop-admin/src/api/shop/orderItem.js

@@ -0,0 +1,28 @@
+import request from '@/utils/request'
+
+export function getList(params) {
+    return request({
+        url: '/shop/order/item/list',
+        method: 'get',
+        params
+    })
+}
+
+
+export function save(params) {
+    return request({
+        url: '/shop/order/item',
+        method: 'post',
+        params
+    })
+}
+
+export function remove(id) {
+    return request({
+        url: '/shop/order/item',
+        method: 'delete',
+        params: {
+            id: id
+        }
+    })
+}

+ 43 - 0
virgo.wzfrontend/shop/shop-admin/src/api/shop/shopUser.js

@@ -0,0 +1,43 @@
+import request from '@/utils/request'
+
+export function getList(params) {
+    return request({
+        url: '/shop/user/list',
+        method: 'get',
+        params
+    })
+}
+
+
+export function save(params) {
+    return request({
+        url: '/shop/user',
+        method: 'post',
+        params
+    })
+}
+
+export function remove(id) {
+    return request({
+        url: '/shop/user',
+        method: 'delete',
+        params: {
+            id: id
+        }
+    })
+}
+
+
+export function getUser(id) {
+  return request({
+    url: '/shop/user/'+id,
+    method: 'get'
+  })
+}
+
+export function getUserInfo(id) {
+  return request({
+    url: '/shop/user/info/'+id,
+    method: 'get'
+  })
+}

+ 51 - 0
virgo.wzfrontend/shop/shop-admin/src/api/system/cfg.js

@@ -0,0 +1,51 @@
+import request from '@/utils/request'
+
+export function getList(params) {
+  return request({
+    url: '/cfg/list',
+    method: 'get',
+    params
+  })
+}
+export function getByPrefix(params) {
+  return request({
+    url: '/cfg/getByPrefix',
+    method: 'get',
+    params
+  })
+}
+
+export function saveGroup(params){
+  return request({
+    url: '/cfg/saveGroup',
+    method: 'post',
+    params
+  })
+}
+
+export function exportXls(params) {
+  return request({
+    url: '/cfg/export',
+    method: 'get',
+    params
+  })
+}
+
+
+export function save(params) {
+  return request({
+    url: '/cfg',
+    method: 'post',
+    params
+  })
+}
+
+export function remove(id) {
+  return request({
+    url: '/cfg',
+    method: 'delete',
+    params: {
+      id: id
+    }
+  })
+}

+ 33 - 0
virgo.wzfrontend/shop/shop-admin/src/api/system/dept.js

@@ -0,0 +1,33 @@
+import request from '@/utils/request'
+
+export function tree() {
+  return request({
+    url: '/dept/tree',
+    method: 'get',
+  })
+}
+
+export function list() {
+  return request({
+    url: '/dept/list',
+    method: 'get',
+  })
+}
+
+export function save(params) {
+  return request({
+    url: '/dept',
+    method: 'post',
+    params: params
+  })
+}
+
+export function del(id) {
+  return request({
+    url: '/dept',
+    method: 'delete',
+    params: {
+      id: id
+    }
+  })
+}

+ 43 - 0
virgo.wzfrontend/shop/shop-admin/src/api/system/dict.js

@@ -0,0 +1,43 @@
+import request from '@/utils/request'
+
+export function getList(params) {
+  return request({
+    url: '/dict/list',
+    method: 'get',
+    params
+  })
+}
+
+export function save(params) {
+  return request({
+    url: '/dict',
+    method: 'post',
+    params
+  })
+}
+
+
+export function update(params) {
+  return request({
+    url: '/dict',
+    method: 'put',
+    params
+  })
+}
+
+export function remove(id) {
+  return request({
+    url: '/dict',
+    method: 'delete',
+    params: {
+      id:id
+    }
+  })
+}
+
+export  function  getDicts(dictName) {
+  return request({
+    url:'/dict/getDicts/'+dictName,
+    method:'get'
+  })
+}

+ 45 - 0
virgo.wzfrontend/shop/shop-admin/src/api/system/express.js

@@ -0,0 +1,45 @@
+import request from '@/utils/request'
+
+export default {
+  getList: function (params) {
+    return request({
+      url: '/sys/express/list',
+      method: 'get',
+      params
+    })
+  },
+  queryAll: function () {
+    return request({
+      url: '/sys/express/queryAll',
+      method: 'get'
+    })
+  },
+
+  save: function (params) {
+    return request({
+      url: '/sys/express',
+      method: 'post',
+      params
+    })
+  },
+
+  remove: function (id) {
+    return request({
+      url: '/sys/express',
+      method: 'delete',
+      params: {
+        id: id
+      }
+    })
+  },
+  changeDisabled: function (id, disabled) {
+    return request({
+      url: '/sys/express/changeDisabled',
+      method: 'post',
+      params: {
+        id: id,
+        disabled: disabled
+      }
+    })
+  }
+}

+ 23 - 0
virgo.wzfrontend/shop/shop-admin/src/api/system/log.js

@@ -0,0 +1,23 @@
+import request from '@/utils/request'
+
+export function getList(params) {
+  return request({
+    url: '/log/list',
+    method: 'get',
+    params
+  })
+}
+
+export function queryByUser() {
+  return request({
+    url:'/log/queryByUser',
+    method: 'get'
+  })
+}
+
+export function clear() {
+  return request({
+    url: '/log',
+    method: 'delete'
+  })
+}

+ 16 - 0
virgo.wzfrontend/shop/shop-admin/src/api/system/loginLog.js

@@ -0,0 +1,16 @@
+import request from '@/utils/request'
+
+export function getList(params) {
+  return request({
+    url: '/loginLog/list',
+    method: 'get',
+    params
+  })
+}
+
+export function clear() {
+  return request({
+    url: '/loginLog',
+    method: 'delete'
+  })
+}

+ 50 - 0
virgo.wzfrontend/shop/shop-admin/src/api/system/menu.js

@@ -0,0 +1,50 @@
+import request from '@/utils/request'
+
+export function getList() {
+  return request({
+    url: '/menu/list',
+    method: 'get'
+  })
+}
+
+export function listForRouter(params) {
+  return request({
+    url: '/menu/listForRouter',
+    method: 'get',
+    params
+  })
+}
+
+export function save(params) {
+  return request({
+    url: '/menu',
+    method: 'post',
+    params: params
+  })
+}
+
+export function delMenu(id) {
+  return request({
+    url: '/menu',
+    method: 'delete',
+    params: {
+      id: id
+    }
+  })
+}
+export function menuTreeListByRoleId(roleId) {
+  return request({
+    url: '/menu/menuTreeListByRoleId',
+    method: 'get',
+    params: {
+      roleId: roleId
+    }
+  })
+}
+
+export function getMenuTree() {
+  return request({
+    url: '/menu/tree',
+    method: 'get'
+  })
+}

+ 9 - 0
virgo.wzfrontend/shop/shop-admin/src/api/system/notice.js

@@ -0,0 +1,9 @@
+import request from '@/utils/request'
+
+export function getList(params) {
+  return request({
+    url: '/notice/list',
+    method: 'get',
+    params
+  })
+}

+ 47 - 0
virgo.wzfrontend/shop/shop-admin/src/api/system/role.js

@@ -0,0 +1,47 @@
+import request from '@/utils/request'
+
+export function getList(params) {
+  return request({
+    url: '/role/list',
+    method: 'get',
+    params
+  })
+}
+
+
+export function save(params) {
+  return request({
+    url: '/role',
+    method: 'post',
+    params
+  })
+}
+
+export function remove(roleId) {
+  return request({
+    url: '/role',
+    method: 'delete',
+    params: {
+      roleId: roleId
+    }
+  })
+}
+
+export  function roleTreeListByIdUser(idUser){
+  return request({
+    url: '/role/roleTreeListByIdUser',
+    method: 'get',
+    params: {
+      idUser: idUser
+    }
+  })
+}
+
+
+export function savePermissons(params) {
+  return request({
+    url: '/role/savePermisson',
+    method: 'post',
+    params
+  })
+}

+ 65 - 0
virgo.wzfrontend/shop/shop-admin/src/api/system/task.js

@@ -0,0 +1,65 @@
+import request from '@/utils/request'
+
+export function getList(params) {
+  return request({
+    url: '/task/list',
+    method: 'get',
+    params
+  })
+}
+
+export function save(params) {
+  return request({
+    url: '/task',
+    method: 'post',
+    params
+  })
+}
+
+export function remove(id) {
+  return request({
+    url: '/task',
+    method: 'delete',
+    params: {
+      id: id
+    }
+  })
+}
+
+export function logList(params) {
+  return request({
+    url: '/task/logList',
+    method: 'get',
+    params
+  })
+}
+
+export function enable(id) {
+  return request({
+    url: '/task/enable/',
+    method: 'POST',
+    params: {
+      taskId: id
+    }
+  })
+}
+
+export function disable(id) {
+  return request({
+    url: '/task/disable/',
+    method: 'POST',
+    params: {
+      taskId: id
+    }
+  })
+}
+
+export function runOnce(id) {
+  return request({
+    url: '/task/runOnce/',
+    method: 'POST',
+    params: {
+      taskId: id
+    }
+  })
+}

+ 35 - 0
virgo.wzfrontend/shop/shop-admin/src/api/system/user.js

@@ -0,0 +1,35 @@
+import request from '@/utils/request'
+
+export function getList(params) {
+  return request({
+    url: '/user/list',
+    method: 'get',
+    params
+  })
+}
+
+export function saveUser(params) {
+  return request({
+    url: '/user',
+    method: 'post',
+    params
+  })
+}
+
+export function remove(userId) {
+  return request({
+    url: '/user',
+    method: 'delete',
+    params: {
+      userId
+    }
+  })
+}
+
+export function setRole(params) {
+  return request({
+    url: '/user/setRole',
+    method: 'get',
+    params
+  })
+}

+ 9 - 0
virgo.wzfrontend/shop/shop-admin/src/api/table.js

@@ -0,0 +1,9 @@
+import request from '@/utils/request'
+
+export function getList(params) {
+  return request({
+    url: '/table/list',
+    method: 'get',
+    params
+  })
+}

+ 36 - 0
virgo.wzfrontend/shop/shop-admin/src/api/user.js

@@ -0,0 +1,36 @@
+import request from '@/utils/request'
+
+export function login(data) {
+  return request({
+    url: '/account/login',
+    method: 'post',
+    params: {
+      "username": data.username,
+      "password": data.password
+    }
+  })
+}
+
+export function getInfo() {
+  return request({
+    url: '/account/info',
+    method: 'get'
+  })
+}
+
+export function logout(token) {
+  return request({
+    url: '/account/logout',
+    method: 'post'
+  })
+}
+
+
+
+export function updatePwd(params) {
+  return request({
+    url: '/account/updatePwd',
+    method: 'post',
+    params
+  })
+}

二进制
virgo.wzfrontend/shop/shop-admin/src/assets/404_images/404.png


二进制
virgo.wzfrontend/shop/shop-admin/src/assets/404_images/404_cloud.png


二进制
virgo.wzfrontend/shop/shop-admin/src/assets/custom-theme/fonts/element-icons.ttf


+ 0 - 0
virgo.wzfrontend/shop/shop-admin/src/assets/custom-theme/fonts/element-icons.woff


部分文件因为文件数量过多而无法显示