00"> 100
+    'no-iterator': 2,
101
+    'no-label-var': 2,
102
+    'no-labels': [2, {
103
+      'allowLoop': false,
104
+      'allowSwitch': false
105
+    }],
106
+    'no-lone-blocks': 2,
107
+    'no-mixed-spaces-and-tabs': 2,
108
+    'no-multi-spaces': 2,
109
+    'no-multi-str': 2,
110
+    'no-multiple-empty-lines': [2, {
111
+      'max': 1
112
+    }],
113
+    'no-native-reassign': 2,
114
+    'no-negated-in-lhs': 2,
115
+    'no-new-object': 2,
116
+    'no-new-require': 2,
117
+    'no-new-symbol': 2,
118
+    'no-new-wrappers': 2,
119
+    'no-obj-calls': 2,
120
+    'no-octal': 2,
121
+    'no-octal-escape': 2,
122
+    'no-path-concat': 2,
123
+    'no-proto': 2,
124
+    'no-redeclare': 2,
125
+    'no-regex-spaces': 2,
126
+    'no-return-assign': [2, 'except-parens'],
127
+    'no-self-assign': 2,
128
+    'no-self-compare': 2,
129
+    'no-sequences': 2,
130
+    'no-shadow-restricted-names': 2,
131
+    'no-spaced-func': 2,
132
+    'no-sparse-arrays': 2,
133
+    'no-this-before-super': 2,
134
+    'no-throw-literal': 2,
135
+    'no-trailing-spaces': 2,
136
+    'no-undef': 2,
137
+    'no-undef-init': 2,
138
+    'no-unexpected-multiline': 2,
139
+    'no-unmodified-loop-condition': 2,
140
+    'no-unneeded-ternary': [2, {
141
+      'defaultAssignment': false
142
+    }],
143
+    'no-unreachable': 2,
144
+    'no-unsafe-finally': 2,
145
+    'no-unused-vars': [2, {
146
+      'vars': 'all',
147
+      'args': 'none'
148
+    }],
149
+    'no-useless-call': 2,
150
+    'no-useless-computed-key': 2,
151
+    'no-useless-constructor': 2,
152
+    'no-useless-escape': 0,
153
+    'no-whitespace-before-property': 2,
154
+    'no-with': 2,
155
+    'one-var': [2, {
156
+      'initialized': 'never'
157
+    }],
158
+    'operator-linebreak': [2, 'after', {
159
+      'overrides': {
160
+        '?': 'before',
161
+        ':': 'before'
162
+      }
163
+    }],
164
+    'padded-blocks': [2, 'never'],
165
+    'quotes': [2, 'single', {
166
+      'avoidEscape': true,
167
+      'allowTemplateLiterals': true
168
+    }],
169
+    'semi': [2, 'never'],
170
+    'semi-spacing': [2, {
171
+      'before': false,
172
+      'after': true
173
+    }],
174
+    'space-before-blocks': [2, 'always'],
175
+    'space-before-function-paren': [2, 'never'],
176
+    'space-in-parens': [2, 'never'],
177
+    'space-infix-ops': 2,
178
+    'space-unary-ops': [2, {
179
+      'words': true,
180
+      'nonwords': false
181
+    }],
182
+    'spaced-comment': [2, 'always', {
183
+      'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ',']
184
+    }],
185
+    'template-curly-spacing': [2, 'never'],
186
+    'use-isnan': 2,
187
+    'valid-typeof': 2,
188
+    'wrap-iife': [2, 'any'],
189
+    'yield-star-spacing': [2, 'both'],
190
+    'yoda': [2, 'never'],
191
+    'prefer-const': 2,
192
+    'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0,
193
+    'object-curly-spacing': [2, 'always', {
194
+      objectsInObjects: false
195
+    }],
196
+    'array-bracket-spacing': [2, 'never']
197
+  }
198
+}

+ 4 - 0
.github/FUNDING.yml

@@ -0,0 +1,4 @@
1
+# These are supported funding model platforms
2
+
3
+patreon: panjiachen
4
+custom: https://panjiachen.github.io/vue-element-admin-site/donate

+ 33 - 0
.github/ISSUE_TEMPLATE/bug_report.md

@@ -0,0 +1,33 @@
1
+---
2
+name: Bug report(报告问题)
3
+about: Create a report to help us improve
4
+---
5
+<!--
6
+    注意:为更好的解决你的问题,请参考模板提供完整信息,准确描述问题,信息不全的 issue 将被关闭。
7
+
8
+    Note: In order to better solve your problem, please refer to the template to provide complete information, accurately describe the problem, and the incomplete information issue will be closed.
9
+-->
10
+
11
+
12
+## Bug report(问题描述)
13
+
14
+#### Steps to reproduce(问题复现步骤)
15
+<!--
16
+1. [xxx]
17
+2. [xxx]
18
+3. [xxxx]
19
+-->
20
+
21
+#### Screenshot or Gif(截图或动态图)
22
+
23
+
24
+#### Link to minimal reproduction(最小可在线还原demo)
25
+
26
+<!--
27
+Please only use Codepen, JSFiddle, CodeSandbox or a github repo
28
+-->
29
+
30
+#### Other relevant information(格外信息)
31
+- Your OS:
32
+- Node.js version:
33
+- vue-element-admin version:

+ 7 - 0
.github/ISSUE_TEMPLATE/feature_request.md

@@ -0,0 +1,7 @@
1
+---
2
+name: Feature Request(新功能建议)
3
+about: Suggest an idea for this project
4
+---
5
+
6
+## Feature request(新功能建议)
7
+

+ 35 - 0
.github/ISSUE_TEMPLATE/question.md

@@ -0,0 +1,35 @@
1
+---
2
+name: Question(提问)
3
+about: Asking questions about use
4
+---
5
+
6
+## Question(提问)
7
+
8
+<!--
9
+    提问之前,请确定你已经过自己的努力,尝试解决过这个问题。
10
+    若是代码相关问题,请不要只截图,请提供在线 demo,以便节约彼此的时间。
11
+
12
+    Before asking a question, please make sure that you have tried your best to solve this problem.
13
+    If it's a code-related issue, please don't just take screenshots. Please provide an online demo to save each other's time.
14
+-->
15
+
16
+#### Steps to reproduce(问题复现步骤)
17
+<!--
18
+1. [xxx]
19
+2. [xxx]
20
+3. [xxxx]
21
+-->
22
+
23
+#### Screenshot or Gif(截图或动态图)
24
+
25
+
26
+#### Link to minimal reproduction(最小可在线还原demo)
27
+
28
+<!--
29
+Please only use Codepen, JSFiddle, CodeSandbox or a github repo
30
+-->
31
+
32
+#### Other relevant information(格外信息)
33
+- Your OS:
34
+- Node.js version:
35
+- vue-element-admin version:

+ 23 - 0
.gitignore

@@ -0,0 +1,23 @@
1
+.DS_Store
2
+node_modules/
3
+dist/
4
+npm-debug.log*
5
+yarn-debug.log*
6
+yarn-error.log*
7
+**/*.log
8
+
9
+tests/**/coverage/
10
+tests/e2e/reports
11
+selenium-debug.log
12
+
13
+# Editor directories and files
14
+.idea
15
+.vscode
16
+*.suo
17
+*.ntvs*
18
+*.njsproj
19
+*.sln
20
+*.local
21
+
22
+package-lock.json
23
+yarn.lock

+ 5 - 0
.travis.yml

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

+ 21 - 0
LICENSE

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

+ 0 - 0
README.md


+ 5 - 0
babel.config.js

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

+ 35 - 0
build/index.js

@@ -0,0 +1,35 @@
1
+const { run } = require('runjs')
2
+const chalk = require('chalk')
3
+const config = require('../vue.config.js')
4
+const rawArgv = process.argv.slice(2)
5
+const args = rawArgv.join(' ')
6
+
7
+if (process.env.npm_config_preview || rawArgv.includes('--preview')) {
8
+  const report = rawArgv.includes('--report')
9
+
10
+  run(`vue-cli-service build ${args}`)
11
+
12
+  const port = 9526
13
+  const publicPath = config.publicPath
14
+
15
+  var connect = require('connect')
16
+  var serveStatic = require('serve-static')
17
+  const app = connect()
18
+
19
+  app.use(
20
+    publicPath,
21
+    serveStatic('./dist', {
22
+      index: ['index.html', '/']
23
+    })
24
+  )
25
+
26
+  app.listen(port, function () {
27
+    console.log(chalk.green(`> Preview at  http://localhost:${port}${publicPath}`))
28
+    if (report) {
29
+      console.log(chalk.green(`> Report at  http://localhost:${port}${publicPath}report.html`))
30
+    }
31
+
32
+  })
33
+} else {
34
+  run(`vue-cli-service build ${args}`)
35
+}

+ 24 - 0
jest.config.js

@@ -0,0 +1,24 @@
1
+module.exports = {
2
+  moduleFileExtensions: ['js', 'jsx', 'json', 'vue'],
3
+  transform: {
4
+    '^.+\\.vue$': 'vue-jest',
5
+    '.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$':
6
+      'jest-transform-stub',
7
+    '^.+\\.jsx?$': 'babel-jest'
8
+  },
9
+  moduleNameMapper: {
10
+    '^@/(.*)$': '<rootDir>/src/$1'
11
+  },
12
+  snapshotSerializers: ['jest-serializer-vue'],
13
+  testMatch: [
14
+    '**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)'
15
+  ],
16
+  collectCoverageFrom: ['src/utils/**/*.{js,vue}', '!src/utils/auth.js', '!src/utils/request.js', 'src/components/**/*.{js,vue}'],
17
+  coverageDirectory: '<rootDir>/tests/unit/coverage',
18
+  // 'collectCoverage': true,
19
+  'coverageReporters': [
20
+    'lcov',
21
+    'text-summary'
22
+  ],
23
+  testURL: 'http://kodo.xfoto.com.cn/api'
24
+}

+ 9 - 0
jsconfig.json

@@ -0,0 +1,9 @@
1
+{ 
2
+  "compilerOptions": {
3
+    "baseUrl": "./",
4
+    "paths": {
5
+        "@/*": ["src/*"]
6
+    }
7
+  },
8
+  "exclude": ["node_modules", "dist"]
9
+}

+ 114 - 0
package.json

@@ -0,0 +1,114 @@
1
+{
2
+  "name": "vue-element-admin",
3
+  "version": "4.2.1",
4
+  "description": "A magical vue admin. An out-of-box UI solution for enterprise applications. Newest development stack of vue. Lots of awesome features",
5
+  "author": "Pan <panfree23@gmail.com>",
6
+  "license": "MIT",
7
+  "scripts": {
8
+    "dev": "vue-cli-service serve",
9
+    "build:prod": "vue-cli-service build",
10
+    "build:stage": "vue-cli-service build --mode staging",
11
+    "preview": "node build/index.js --preview",
12
+    "lint": "eslint --ext .js,.vue src",
13
+    "test:unit": "jest --clearCache && vue-cli-service test:unit",
14
+    "test:ci": "npm run lint && npm run test:unit",
15
+    "svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml",
16
+    "new": "plop"
17
+  },
18
+  "husky": {
19
+    "hooks": {
20
+      "pre-commit": "lint-staged"
21
+    }
22
+  },
23
+  "lint-staged": {
24
+    "src/**/*.{js,vue}": [
25
+      "eslint --fix",
26
+      "git add"
27
+    ]
28
+  },
29
+  "keywords": [
30
+    "vue",
31
+    "admin",
32
+    "dashboard",
33
+    "element-ui",
34
+    "boilerplate",
35
+    "admin-template",
36
+    "management-system"
37
+  ],
38
+  "repository": {
39
+    "type": "git",
40
+    "url": "git+https://github.com/PanJiaChen/vue-element-admin.git"
41
+  },
42
+  "bugs": {
43
+    "url": "https://github.com/PanJiaChen/vue-element-admin/issues"
44
+  },
45
+  "dependencies": {
46
+    "axios": "0.18.1",
47
+    "clipboard": "2.0.4",
48
+    "codemirror": "5.45.0",
49
+    "driver.js": "0.9.5",
50
+    "dropzone": "5.5.1",
51
+    "echarts": "4.2.1",
52
+    "element-ui": "2.13.0",
53
+    "file-saver": "2.0.1",
54
+    "fuse.js": "3.4.4",
55
+    "js-cookie": "2.2.0",
56
+    "jsonlint": "1.6.3",
57
+    "jszip": "3.2.1",
58
+    "normalize.css": "7.0.0",
59
+    "nprogress": "0.2.0",
60
+    "path-to-regexp": "2.4.0",
61
+    "qs": "^6.9.3",
62
+    "screenfull": "4.2.0",
63
+    "script-loader": "0.7.2",
64
+    "showdown": "1.9.0",
65
+    "sortablejs": "1.8.4",
66
+    "tui-editor": "1.3.3",
67
+    "vue": "2.6.10",
68
+    "vue-count-to": "1.0.13",
69
+    "vue-router": "3.0.2",
70
+    "vue-splitpane": "1.0.4",
71
+    "vuedraggable": "2.20.0",
72
+    "vuex": "3.1.0",
73
+    "xlsx": "0.14.1"
74
+  },
75
+  "devDependencies": {
76
+    "@babel/core": "7.0.0",
77
+    "@babel/register": "7.0.0",
78
+    "@vue/cli-plugin-babel": "3.5.3",
79
+    "@vue/cli-plugin-eslint": "^3.9.1",
80
+    "@vue/cli-plugin-unit-jest": "3.5.3",
81
+    "@vue/cli-service": "3.5.3",
82
+    "@vue/test-utils": "1.0.0-beta.29",
83
+    "autoprefixer": "^9.5.1",
84
+    "babel-core": "7.0.0-bridge.0",
85
+    "babel-eslint": "10.0.1",
86
+    "babel-jest": "23.6.0",
87
+    "chalk": "2.4.2",
88
+    "chokidar": "2.1.5",
89
+    "connect": "3.6.6",
90
+    "eslint": "5.15.3",
91
+    "eslint-plugin-vue": "5.2.2",
92
+    "html-webpack-plugin": "3.2.0",
93
+    "husky": "1.3.1",
94
+    "lint-staged": "8.1.5",
95
+    "mockjs": "1.0.1-beta3",
96
+    "node-sass": "^4.9.0",
97
+    "plop": "2.3.0",
98
+    "runjs": "^4.3.2",
99
+    "sass-loader": "^7.1.0",
100
+    "script-ext-html-webpack-plugin": "2.1.3",
101
+    "serve-static": "^1.13.2",
102
+    "svg-sprite-loader": "4.1.3",
103
+    "svgo": "1.2.0",
104
+    "vue-template-compiler": "2.6.10"
105
+  },
106
+  "engines": {
107
+    "node": ">=8.9",
108
+    "npm": ">= 3.0.0"
109
+  },
110
+  "browserslist": [
111
+    "> 1%",
112
+    "last 2 versions"
113
+  ]
114
+}

+ 26 - 0
plop-templates/component/index.hbs

@@ -0,0 +1,26 @@
1
+{{#if template}}
2
+<template>
3
+  <div />
4
+</template>
5
+{{/if}}
6
+
7
+{{#if script}}
8
+<script>
9
+export default {
10
+  name: '{{ properCase name }}',
11
+  props: {},
12
+  data() {
13
+    return {}
14
+  },
15
+  created() {},
16
+  mounted() {},
17
+  methods: {}
18
+}
19
+</script>
20
+{{/if}}
21
+
22
+{{#if style}}
23
+<style lang="scss" scoped>
24
+
25
+</style>
26
+{{/if}}

+ 55 - 0
plop-templates/component/prompt.js

@@ -0,0 +1,55 @@
1
+const { notEmpty } = require('../utils.js')
2
+
3
+module.exports = {
4
+  description: 'generate vue component',
5
+  prompts: [{
6
+    type: 'input',
7
+    name: 'name',
8
+    message: 'component name please',
9
+    validate: notEmpty('name')
10
+  },
11
+  {
12
+    type: 'checkbox',
13
+    name: 'blocks',
14
+    message: 'Blocks:',
15
+    choices: [{
16
+      name: '<template>',
17
+      value: 'template',
18
+      checked: true
19
+    },
20
+    {
21
+      name: '<script>',
22
+      value: 'script',
23
+      checked: true
24
+    },
25
+    {
26
+      name: 'style',
27
+      value: 'style',
28
+      checked: true
29
+    }
30
+    ],
31
+    validate(value) {
32
+      if (value.indexOf('script') === -1 && value.indexOf('template') === -1) {
33
+        return 'Components require at least a <script> or <template> tag.'
34
+      }
35
+      return true
36
+    }
37
+  }
38
+  ],
39
+  actions: data => {
40
+    const name = '{{properCase name}}'
41
+    const actions = [{
42
+      type: 'add',
43
+      path: `src/components/${name}/index.vue`,
44
+      templateFile: 'plop-templates/component/index.hbs',
45
+      data: {
46
+        name: name,
47
+        template: data.blocks.includes('template'),
48
+        script: data.blocks.includes('script'),
49
+        style: data.blocks.includes('style')
50
+      }
51
+    }]
52
+
53
+    return actions
54
+  }
55
+}

+ 16 - 0
plop-templates/store/index.hbs

@@ -0,0 +1,16 @@
1
+{{#if state}}
2
+const state = {}
3
+{{/if}}
4
+
5
+{{#if mutations}}
6
+const mutations = {}
7
+{{/if}}
8
+
9
+{{#if actions}}
10
+const actions = {}
11
+{{/if}}
12
+
13
+export default {
14
+  namespaced: true,
15
+  {{options}}
16
+}

+ 62 - 0
plop-templates/store/prompt.js

@@ -0,0 +1,62 @@
1
+const { notEmpty } = require('../utils.js')
2
+
3
+module.exports = {
4
+  description: 'generate store',
5
+  prompts: [{
6
+    type: 'input',
7
+    name: 'name',
8
+    message: 'store name please',
9
+    validate: notEmpty('name')
10
+  },
11
+  {
12
+    type: 'checkbox',
13
+    name: 'blocks',
14
+    message: 'Blocks:',
15
+    choices: [{
16
+      name: 'state',
17
+      value: 'state',
18
+      checked: true
19
+    },
20
+    {
21
+      name: 'mutations',
22
+      value: 'mutations',
23
+      checked: true
24
+    },
25
+    {
26
+      name: 'actions',
27
+      value: 'actions',
28
+      checked: true
29
+    }
30
+    ],
31
+    validate(value) {
32
+      if (!value.includes('state') || !value.includes('mutations')) {
33
+        return 'store require at least state and mutations'
34
+      }
35
+      return true
36
+    }
37
+  }
38
+  ],
39
+  actions(data) {
40
+    const name = '{{name}}'
41
+    const { blocks } = data
42
+    const options = ['state', 'mutations']
43
+    const joinFlag = `,
44
+  `
45
+    if (blocks.length === 3) {
46
+      options.push('actions')
47
+    }
48
+
49
+    const actions = [{
50
+      type: 'add',
51
+      path: `src/store/modules/${name}.js`,
52
+      templateFile: 'plop-templates/store/index.hbs',
53
+      data: {
54
+        options: options.join(joinFlag),
55
+        state: blocks.includes('state'),
56
+        mutations: blocks.includes('mutations'),
57
+        actions: blocks.includes('actions')
58
+      }
59
+    }]
60
+    return actions
61
+  }
62
+}

+ 9 - 0
plop-templates/utils.js

@@ -0,0 +1,9 @@
1
+exports.notEmpty = name => {
2
+  return v => {
3
+    if (!v || v.trim === '') {
4
+      return `${name} is required`
5
+    } else {
6
+      return true
7
+    }
8
+  }
9
+}

+ 26 - 0
plop-templates/view/index.hbs

@@ -0,0 +1,26 @@
1
+{{#if template}}
2
+<template>
3
+  <div />
4
+</template>
5
+{{/if}}
6
+
7
+{{#if script}}
8
+<script>
9
+export default {
10
+  name: '{{ properCase name }}',
11
+  props: {},
12
+  data() {
13
+    return {}
14
+  },
15
+  created() {},
16
+  mounted() {},
17
+  methods: {}
18
+}
19
+</script>
20
+{{/if}}
21
+
22
+{{#if style}}
23
+<style lang="scss" scoped>
24
+
25
+</style>
26
+{{/if}}

+ 55 - 0
plop-templates/view/prompt.js

@@ -0,0 +1,55 @@
1
+const { notEmpty } = require('../utils.js')
2
+
3
+module.exports = {
4
+  description: 'generate a view',
5
+  prompts: [{
6
+    type: 'input',
7
+    name: 'name',
8
+    message: 'view name please',
9
+    validate: notEmpty('name')
10
+  },
11
+  {
12
+    type: 'checkbox',
13
+    name: 'blocks',
14
+    message: 'Blocks:',
15
+    choices: [{
16
+      name: '<template>',
17
+      value: 'template',
18
+      checked: true
19
+    },
20
+    {
21
+      name: '<script>',
22
+      value: 'script',
23
+      checked: true
24
+    },
25
+    {
26
+      name: 'style',
27
+      value: 'style',
28
+      checked: true
29
+    }
30
+    ],
31
+    validate(value) {
32
+      if (value.indexOf('script') === -1 && value.indexOf('template') === -1) {
33
+        return 'View require at least a <script> or <template> tag.'
34
+      }
35
+      return true
36
+    }
37
+  }
38
+  ],
39
+  actions: data => {
40
+    const name = '{{name}}'
41
+    const actions = [{
42
+      type: 'add',
43
+      path: `src/views/${name}/index.vue`,
44
+      templateFile: 'plop-templates/view/index.hbs',
45
+      data: {
46
+        name: name,
47
+        template: data.blocks.includes('template'),
48
+        script: data.blocks.includes('script'),
49
+        style: data.blocks.includes('style')
50
+      }
51
+    }]
52
+
53
+    return actions
54
+  }
55
+}

+ 9 - 0
plopfile.js

@@ -0,0 +1,9 @@
1
+const viewGenerator = require('./plop-templates/view/prompt')
2
+const componentGenerator = require('./plop-templates/component/prompt')
3
+const storeGenerator = require('./plop-templates/store/prompt.js')
4
+
5
+module.exports = function(plop) {
6
+  plop.setGenerator('view', viewGenerator)
7
+  plop.setGenerator('component', componentGenerator)
8
+  plop.setGenerator('store', storeGenerator)
9
+}

+ 5 - 0
postcss.config.js

@@ -0,0 +1,5 @@
1
+module.exports = {
2
+  plugins: {
3
+    autoprefixer: {}
4
+  }
5
+}

BIN
public/favicon.ico


+ 15 - 0
public/index.html

@@ -0,0 +1,15 @@
1
+<!DOCTYPE html>
2
+<html>
3
+  <head>
4
+    <meta charset="utf-8">
5
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
6
+    <meta name="renderer" content="webkit">
7
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
8
+    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
9
+    <title><%= webpackConfig.name %></title>
10
+  </head>
11
+  <body>
12
+    <div id="app"></div>
13
+    <!-- built files will be auto injected -->
14
+  </body>
15
+</html>

+ 11 - 0
src/App.vue

@@ -0,0 +1,11 @@
1
+<template>
2
+  <div id="app">
3
+    <router-view />
4
+  </div>
5
+</template>
6
+
7
+<script>
8
+export default {
9
+  name: 'App'
10
+}
11
+</script>

+ 13 - 0
src/api/dashboard.js

@@ -0,0 +1,13 @@
1
+import request from '@/utils/request'
2
+import store from '@/store'
3
+import qs from 'qs'
4
+
5
+export function fetchDashboard(data) {
6
+  data['brand_id'] = 'ywkRTh5vtswRvhh8uLvTTQ'
7
+  data['admin_id'] = store.getters.token
8
+  return request({
9
+    url: '/admin/dashboard',
10
+    method: 'post',
11
+    data: qs.stringify(data)
12
+  })
13
+}

+ 21 - 0
src/api/order.js

@@ -0,0 +1,21 @@
1
+import request from '@/utils/request'
2
+import store from '@/store'
3
+import qs from 'qs'
4
+
5
+export function fetchList(data) {
6
+  data['admin_id'] = store.getters.token
7
+  return request({
8
+    url: '/admin/order/list',
9
+    method: 'post',
10
+    data: qs.stringify(data)
11
+  })
12
+}
13
+
14
+export function updateOrder(data) {
15
+  data['admin_id'] = store.getters.token
16
+  return request({
17
+    url: '/admin/order/update',
18
+    method: 'post',
19
+    data: qs.stringify(data)
20
+  })
21
+}

+ 25 - 0
src/api/user.js

@@ -0,0 +1,25 @@
1
+import request from '@/utils/request'
2
+import qs from 'qs'
3
+
4
+export function login(data) {
5
+  return request({
6
+    url: '/admin/login',
7
+    method: 'post',
8
+    data: qs.stringify(data)
9
+  })
10
+}
11
+
12
+export function getInfo(token) {
13
+  return request({
14
+    url: '/vue-element-admin/user/info',
15
+    method: 'get',
16
+    params: { token }
17
+  })
18
+}
19
+
20
+export function logout() {
21
+  return request({
22
+    url: '/vue-element-admin/user/logout',
23
+    method: 'post'
24
+  })
25
+}

BIN
src/assets/401_images/401.gif


BIN
src/assets/404_images/404.png


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


BIN
src/assets/custom-theme/fonts/element-icons.ttf


BIN
src/assets/custom-theme/fonts/element-icons.woff


+ 0 - 0
src/assets/custom-theme/index.css

@@ -0,0 +1 @@

Kodo/kodo - Gogs: Go Git Service

4 Revīzijas (d2fce27cd415e622c5452e20d17ffebfb25b5b59)

Autors SHA1 Ziņojums Datums
  huangqimin 4ce7f5c87b :art: Member Relative APIs 6 gadi atpakaļ
  Brightcells 2f29afecbd modify version in operation 10 gadi atpakaļ
  Brightcells af2b3f483f change download.html to be generated from download.tmpl.html 10 gadi atpakaļ
  Brightcells 4defb80fdc gogs first init 10 gadi atpakaļ