3b8f2e4ed04a397722fed33a67f123fR109">109
+ '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']
+ }
+}
@@ -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 |
@@ -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: |
@@ -0,0 +1,7 @@ |
||
| 1 |
+--- |
|
| 2 |
+name: Feature Request(新功能建议) |
|
| 3 |
+about: Suggest an idea for this project |
|
| 4 |
+--- |
|
| 5 |
+ |
|
| 6 |
+## Feature request(新功能建议) |
|
| 7 |
+ |
@@ -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: |
@@ -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 |
@@ -0,0 +1,5 @@ |
||
| 1 |
+language: node_js |
|
| 2 |
+node_js: 10 |
|
| 3 |
+script: npm run test |
|
| 4 |
+notifications: |
|
| 5 |
+ email: false |
@@ -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 +1,5 @@ |
||
| 1 |
+module.exports = {
|
|
| 2 |
+ presets: [ |
|
| 3 |
+ '@vue/app' |
|
| 4 |
+ ] |
|
| 5 |
+} |
@@ -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 |
+} |
@@ -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 |
+} |
@@ -0,0 +1,9 @@ |
||
| 1 |
+{
|
|
| 2 |
+ "compilerOptions": {
|
|
| 3 |
+ "baseUrl": "./", |
|
| 4 |
+ "paths": {
|
|
| 5 |
+ "@/*": ["src/*"] |
|
| 6 |
+ } |
|
| 7 |
+ }, |
|
| 8 |
+ "exclude": ["node_modules", "dist"] |
|
| 9 |
+} |
@@ -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 |
+} |
@@ -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}}
|
@@ -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 |
+} |
@@ -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 |
+} |
@@ -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 |
+} |
@@ -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 |
+} |
@@ -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}}
|
@@ -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 |
+} |
@@ -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 |
+} |
@@ -0,0 +1,5 @@ |
||
| 1 |
+module.exports = {
|
|
| 2 |
+ plugins: {
|
|
| 3 |
+ autoprefixer: {}
|
|
| 4 |
+ } |
|
| 5 |
+} |
@@ -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> |
@@ -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> |
@@ -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 |
+} |
@@ -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 |
+} |
@@ -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 |
+} |
@@ -0,0 +1 @@ |