diff --git a/vue/.editorconfig b/vue/.editorconfig
index 3454886e..d6da2515 100644
--- a/vue/.editorconfig
+++ b/vue/.editorconfig
@@ -1,14 +1,14 @@
-# https://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
+# https://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
diff --git a/vue/.env.development b/vue/.env.development
index fe21aeb5..a274372a 100644
--- a/vue/.env.development
+++ b/vue/.env.development
@@ -1,15 +1,15 @@
-# just a flag
-ENV = 'development'
-
-# base api
-VUE_APP_BASE_API = '/dev-api'
-VUE_APP_BASE_API_ADMIN = 'http://114.116.225.148:8002'
-port='9528'
-# 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
+# just a flag
+ENV = 'development'
+
+# base api
+VUE_APP_BASE_API = '/dev-api'
+VUE_APP_BASE_API_ADMIN = 'http://114.116.225.148:8002'
+port='9528'
+# 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
diff --git a/vue/.env.production b/vue/.env.production
index 80c81030..312585e2 100644
--- a/vue/.env.production
+++ b/vue/.env.production
@@ -1,6 +1,6 @@
-# just a flag
-ENV = 'production'
-
-# base api
-VUE_APP_BASE_API = '/prod-api'
-
+# just a flag
+ENV = 'production'
+
+# base api
+VUE_APP_BASE_API = '/prod-api'
+
diff --git a/vue/.env.staging b/vue/.env.staging
index a8793a09..defe786f 100644
--- a/vue/.env.staging
+++ b/vue/.env.staging
@@ -1,8 +1,8 @@
-NODE_ENV = production
-
-# just a flag
-ENV = 'staging'
-
-# base api
-VUE_APP_BASE_API = '/stage-api'
-
+NODE_ENV = production
+
+# just a flag
+ENV = 'staging'
+
+# base api
+VUE_APP_BASE_API = '/stage-api'
+
diff --git a/vue/.eslintignore b/vue/.eslintignore
index 99b9edd1..73beee6d 100644
--- a/vue/.eslintignore
+++ b/vue/.eslintignore
@@ -1,4 +1,4 @@
-build/*.js
-src
-public
-dist
+build/*.js
+src
+public
+dist
diff --git a/vue/.eslintrc.js b/vue/.eslintrc.js
index b3382c0f..7dc2e072 100644
--- a/vue/.eslintrc.js
+++ b/vue/.eslintrc.js
@@ -1,15 +1,15 @@
-module.exports = {
- root: true,
- env: {
- node: true,
- es6: true
- },
- rules: {
- 'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
- 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off'
- },
- parserOptions: {
- parser: 'babel-eslint',
- sourceType: "module",
- }
-}
+module.exports = {
+ root: true,
+ env: {
+ node: true,
+ es6: true
+ },
+ rules: {
+ 'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
+ 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off'
+ },
+ parserOptions: {
+ parser: 'babel-eslint',
+ sourceType: "module",
+ }
+}
diff --git a/vue/.gitignore b/vue/.gitignore
index d3d938d1..525c2a42 100644
--- a/vue/.gitignore
+++ b/vue/.gitignore
@@ -1,24 +1,24 @@
-.DS_Store
-node_modules/
-dist/
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-**/*.log
-
-tests/**/coverage/
-tests/e2e/reports
-selenium-debug.log
-
-# Editor directories and files
-.idea
-.vscode
-*.suo
-*.ntvs*
-*.njsproj
-*.sln
-*.local
-
-package-lock.json
-yarn.lock
-/.vs
+.DS_Store
+node_modules/
+dist/
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+**/*.log
+
+tests/**/coverage/
+tests/e2e/reports
+selenium-debug.log
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.local
+
+package-lock.json
+yarn.lock
+/.vs
diff --git a/vue/.travis.yml b/vue/.travis.yml
index f4be7a08..a95f7bb0 100644
--- a/vue/.travis.yml
+++ b/vue/.travis.yml
@@ -1,5 +1,5 @@
-language: node_js
-node_js: 10
-script: npm run test
-notifications:
- email: false
+language: node_js
+node_js: 10
+script: npm run test
+notifications:
+ email: false
diff --git a/vue/LICENSE b/vue/LICENSE
index 61515750..7be02ace 100644
--- a/vue/LICENSE
+++ b/vue/LICENSE
@@ -1,21 +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.
+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.
diff --git a/vue/README.md b/vue/README.md
index c80d4d5d..883d3727 100644
--- a/vue/README.md
+++ b/vue/README.md
@@ -1,83 +1,83 @@
-
-
-**Table of Contents** *generated with [DocToc](https://github.com/thlorenz/doctoc)*
-
-- [Getting started](#getting-started)
-- [Build](#build)
-- [Advanced](#advanced)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-## Getting started
-
-```bash
-# clone the project
-git clone -b i18n git@github.com:PanJiaChen/vue-element-admin.git
-
-# enter the project directory
-cd vue-element-admin
-
-# install dependency
-npm install
-
-# develop
-npm run dev
-```
-
-This will automatically open http://localhost:9527
-
-## Build
-
-```bash
-# build for test environment
-npm run build:stage
-
-# build for production environment
-npm run build:prod
-```
-
-## Advanced
-
-```bash
-# preview the release environment effect
-npm run preview
-
-# preview the release environment effect + static resource analysis
-npm run preview -- --report
-
-# code format check
-npm run lint
-
-# code format check and auto fix
-npm run lint -- --fix
-```
-
-
+
+
+**Table of Contents** *generated with [DocToc](https://github.com/thlorenz/doctoc)*
+
+- [Getting started](#getting-started)
+- [Build](#build)
+- [Advanced](#advanced)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Getting started
+
+```bash
+# clone the project
+git clone -b i18n git@github.com:PanJiaChen/vue-element-admin.git
+
+# enter the project directory
+cd vue-element-admin
+
+# install dependency
+npm install
+
+# develop
+npm run dev
+```
+
+This will automatically open http://localhost:9527
+
+## Build
+
+```bash
+# build for test environment
+npm run build:stage
+
+# build for production environment
+npm run build:prod
+```
+
+## Advanced
+
+```bash
+# preview the release environment effect
+npm run preview
+
+# preview the release environment effect + static resource analysis
+npm run preview -- --report
+
+# code format check
+npm run lint
+
+# code format check and auto fix
+npm run lint -- --fix
+```
+
+
diff --git a/vue/babel.config.js b/vue/babel.config.js
index ba179669..c8e69f56 100644
--- a/vue/babel.config.js
+++ b/vue/babel.config.js
@@ -1,5 +1,5 @@
-module.exports = {
- presets: [
- '@vue/app'
- ]
-}
+module.exports = {
+ presets: [
+ '@vue/app'
+ ]
+}
diff --git a/vue/build/index.js b/vue/build/index.js
index 0c57de2a..385da08e 100644
--- a/vue/build/index.js
+++ b/vue/build/index.js
@@ -1,35 +1,35 @@
-const { run } = require('runjs')
-const chalk = require('chalk')
-const config = require('../vue.config.js')
-const rawArgv = process.argv.slice(2)
-const args = rawArgv.join(' ')
-
-if (process.env.npm_config_preview || rawArgv.includes('--preview')) {
- const report = rawArgv.includes('--report')
-
- run(`vue-cli-service build ${args}`)
-
- const port = 9526
- const publicPath = config.publicPath
-
- var connect = require('connect')
- var serveStatic = require('serve-static')
- const app = connect()
-
- app.use(
- publicPath,
- serveStatic('./dist', {
- index: ['index.html', '/']
- })
- )
-
- app.listen(port, function () {
- console.log(chalk.green(`> Preview at http://localhost:${port}${publicPath}`))
- if (report) {
- console.log(chalk.green(`> Report at http://localhost:${port}${publicPath}report.html`))
- }
-
- })
-} else {
- run(`vue-cli-service build ${args}`)
-}
+const { run } = require('runjs')
+const chalk = require('chalk')
+const config = require('../vue.config.js')
+const rawArgv = process.argv.slice(2)
+const args = rawArgv.join(' ')
+
+if (process.env.npm_config_preview || rawArgv.includes('--preview')) {
+ const report = rawArgv.includes('--report')
+
+ run(`vue-cli-service build ${args}`)
+
+ const port = 9526
+ const publicPath = config.publicPath
+
+ var connect = require('connect')
+ var serveStatic = require('serve-static')
+ const app = connect()
+
+ app.use(
+ publicPath,
+ serveStatic('./dist', {
+ index: ['index.html', '/']
+ })
+ )
+
+ app.listen(port, function () {
+ console.log(chalk.green(`> Preview at http://localhost:${port}${publicPath}`))
+ if (report) {
+ console.log(chalk.green(`> Report at http://localhost:${port}${publicPath}report.html`))
+ }
+
+ })
+} else {
+ run(`vue-cli-service build ${args}`)
+}
diff --git a/vue/jest.config.js b/vue/jest.config.js
index 143cdc86..ca6c565a 100644
--- a/vue/jest.config.js
+++ b/vue/jest.config.js
@@ -1,24 +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: {
- '^@/(.*)$': '/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: '/tests/unit/coverage',
- // 'collectCoverage': true,
- 'coverageReporters': [
- 'lcov',
- 'text-summary'
- ],
- testURL: 'http://localhost/'
-}
+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: {
+ '^@/(.*)$': '/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: '/tests/unit/coverage',
+ // 'collectCoverage': true,
+ 'coverageReporters': [
+ 'lcov',
+ 'text-summary'
+ ],
+ testURL: 'http://localhost/'
+}
diff --git a/vue/jsconfig.json b/vue/jsconfig.json
index 958df046..851c5085 100644
--- a/vue/jsconfig.json
+++ b/vue/jsconfig.json
@@ -1,9 +1,9 @@
-{
- "compilerOptions": {
- "baseUrl": "./",
- "paths": {
- "@/*": ["src/*"]
- }
- },
- "exclude": ["node_modules", "dist"]
+{
+ "compilerOptions": {
+ "baseUrl": "./",
+ "paths": {
+ "@/*": ["src/*"]
+ }
+ },
+ "exclude": ["node_modules", "dist"]
}
\ No newline at end of file
diff --git a/vue/mock/article.js b/vue/mock/article.js
index 50218ae4..633370ff 100644
--- a/vue/mock/article.js
+++ b/vue/mock/article.js
@@ -1,116 +1,116 @@
-import Mock from 'mockjs'
-
-const List = []
-const count = 100
-
-const baseContent = 'I am testing data, I am testing data.
![](https://wpimg.wallstcn.com/4c69009c-0fd4-4153-b112-6cb53d1cf943)
'
-const image_uri = 'https://wpimg.wallstcn.com/e4558086-631c-425c-9430-56ffb46e70b3'
-
-for (let i = 0; i < count; i++) {
- List.push(Mock.mock({
- id: '@increment',
- timestamp: +Mock.Random.date('T'),
- author: '@first',
- reviewer: '@first',
- title: '@title(5, 10)',
- content_short: 'mock data',
- content: baseContent,
- forecast: '@float(0, 100, 2, 2)',
- importance: '@integer(1, 3)',
- 'type|1': ['CN', 'US', 'JP', 'EU'],
- 'status|1': ['published', 'draft'],
- display_time: '@datetime',
- comment_disabled: true,
- pageviews: '@integer(300, 5000)',
- image_uri,
- platforms: ['a-platform']
- }))
-}
-
-export default [
- {
- url: '/vue-element-admin/article/list',
- type: 'get',
- response: config => {
- const { importance, type, title, page = 1, limit = 20, sort } = config.query
-
- let mockList = List.filter(item => {
- if (importance && item.importance !== +importance) return false
- if (type && item.type !== type) return false
- if (title && item.title.indexOf(title) < 0) return false
- return true
- })
-
- if (sort === '-id') {
- mockList = mockList.reverse()
- }
-
- const pageList = mockList.filter((item, index) => index < limit * page && index >= limit * (page - 1))
-
- return {
- code: 20000,
- data: {
- total: mockList.length,
- items: pageList
- }
- }
- }
- },
-
- {
- url: '/vue-element-admin/article/detail',
- type: 'get',
- response: config => {
- const { id } = config.query
- for (const article of List) {
- if (article.id === +id) {
- return {
- code: 20000,
- data: article
- }
- }
- }
- }
- },
-
- {
- url: '/vue-element-admin/article/pv',
- type: 'get',
- response: _ => {
- return {
- code: 20000,
- data: {
- pvData: [
- { key: 'PC', pv: 1024 },
- { key: 'mobile', pv: 1024 },
- { key: 'ios', pv: 1024 },
- { key: 'android', pv: 1024 }
- ]
- }
- }
- }
- },
-
- {
- url: '/vue-element-admin/article/create',
- type: 'post',
- response: _ => {
- return {
- code: 20000,
- data: 'success'
- }
- }
- },
-
- {
- url: '/vue-element-admin/article/update',
- type: 'post',
- response: _ => {
- return {
- code: 20000,
- data: 'success'
- }
- }
- }
-]
-
+import Mock from 'mockjs'
+
+const List = []
+const count = 100
+
+const baseContent = 'I am testing data, I am testing data.
![](https://wpimg.wallstcn.com/4c69009c-0fd4-4153-b112-6cb53d1cf943)
'
+const image_uri = 'https://wpimg.wallstcn.com/e4558086-631c-425c-9430-56ffb46e70b3'
+
+for (let i = 0; i < count; i++) {
+ List.push(Mock.mock({
+ id: '@increment',
+ timestamp: +Mock.Random.date('T'),
+ author: '@first',
+ reviewer: '@first',
+ title: '@title(5, 10)',
+ content_short: 'mock data',
+ content: baseContent,
+ forecast: '@float(0, 100, 2, 2)',
+ importance: '@integer(1, 3)',
+ 'type|1': ['CN', 'US', 'JP', 'EU'],
+ 'status|1': ['published', 'draft'],
+ display_time: '@datetime',
+ comment_disabled: true,
+ pageviews: '@integer(300, 5000)',
+ image_uri,
+ platforms: ['a-platform']
+ }))
+}
+
+export default [
+ {
+ url: '/vue-element-admin/article/list',
+ type: 'get',
+ response: config => {
+ const { importance, type, title, page = 1, limit = 20, sort } = config.query
+
+ let mockList = List.filter(item => {
+ if (importance && item.importance !== +importance) return false
+ if (type && item.type !== type) return false
+ if (title && item.title.indexOf(title) < 0) return false
+ return true
+ })
+
+ if (sort === '-id') {
+ mockList = mockList.reverse()
+ }
+
+ const pageList = mockList.filter((item, index) => index < limit * page && index >= limit * (page - 1))
+
+ return {
+ code: 20000,
+ data: {
+ total: mockList.length,
+ items: pageList
+ }
+ }
+ }
+ },
+
+ {
+ url: '/vue-element-admin/article/detail',
+ type: 'get',
+ response: config => {
+ const { id } = config.query
+ for (const article of List) {
+ if (article.id === +id) {
+ return {
+ code: 20000,
+ data: article
+ }
+ }
+ }
+ }
+ },
+
+ {
+ url: '/vue-element-admin/article/pv',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 20000,
+ data: {
+ pvData: [
+ { key: 'PC', pv: 1024 },
+ { key: 'mobile', pv: 1024 },
+ { key: 'ios', pv: 1024 },
+ { key: 'android', pv: 1024 }
+ ]
+ }
+ }
+ }
+ },
+
+ {
+ url: '/vue-element-admin/article/create',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 20000,
+ data: 'success'
+ }
+ }
+ },
+
+ {
+ url: '/vue-element-admin/article/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 20000,
+ data: 'success'
+ }
+ }
+ }
+]
+
diff --git a/vue/mock/common.js b/vue/mock/common.js
index 164f796e..f5e845a4 100644
--- a/vue/mock/common.js
+++ b/vue/mock/common.js
@@ -1,278 +1,278 @@
-import Mock from 'mockjs'
-//表格字段数据
-const ListField = [{
- "level": 1,
- "children": [{"level": 2, "name": "666", "pid": 1, "id": 2, "label": "666"}, {
- "level": 2,
- "name": "777",
- "pid": 1,
- "id": 3,
- "label": "777"
- }],
- "name": "办公室",
- "pid": 0,
- "id": 1,
- "label": "办公室"
-}, {"level": 2, "name": "666", "pid": 1, "id": 2, "label": "666"}, {
- "level": 2,
- "name": "777",
- "pid": 1,
- "id": 3,
- "label": "777"
-}]
-//表格list数据
-const roleList = [{
- "name": "系统管理角色",
- "pid": 1,
- "list": [{
- "remark": "超级管理员",
- "pid": 1,
- "rules": {"bi": [], "crm": []},
- "id": 1,
- "label": null,
- "title": "超级管理员",
- "type": 5,
- "status": 1
- }, {
- "remark": "系统设置管理员",
- "pid": 1,
- "rules": {"bi": [], "crm": []},
- "id": 2,
- "label": null,
- "title": "系统设置管理员",
- "type": 2,
- "status": 1
- }, {
- "remark": "部门与员工管理员",
- "pid": 1,
- "rules": {"bi": [], "crm": []},
- "id": 3,
- "label": null,
- "title": "部门与员工管理员",
- "type": 5,
- "status": 1
- }, {
- "remark": "审批流管理员",
- "pid": 1,
- "rules": {"bi": [], "crm": []},
- "id": 4,
- "label": null,
- "title": "审批流管理员",
- "type": 5,
- "status": 1
- }, {
- "remark": "工作台管理员",
- "pid": 1,
- "rules": {"bi": [], "crm": []},
- "id": 5,
- "label": null,
- "title": "工作台管理员",
- "type": 5,
- "status": 1
- }, {
- "remark": "客户管理员",
- "pid": 1,
- "rules": {"bi": [], "crm": []},
- "id": 6,
- "label": null,
- "title": "客户管理员",
- "type": 5,
- "status": 1
- }]
-}, {
- "name": "客户管理角色",
- "pid": 2,
- "list": [{
- "remark": "销售经理角色",
- "pid": 2,
- "rules": {
- "bi": [],
- "crm": [9, 17, 18, 19, 20, 21, 22, 23, 24, 25, 10, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 191, 11, 40, 41, 42, 43, 44, 45, 107, 108, 12, 46, 47, 48, 49, 50, 51, 52, 13, 53, 54, 55, 56, 57, 58, 59, 14, 60, 61, 62, 63, 64, 15, 65, 66, 67, 68, 69, 109, 110, 127, 128, 129, 130, 131]
- },
- "id": 8,
- "label": null,
- "title": "销售经理角色",
- "type": 2,
- "status": 1
- }, {
- "remark": "行政管理",
- "pid": 2,
- "rules": {"bi": [], "crm": []},
- "id": 9,
- "label": null,
- "title": "行政管理",
- "type": 1,
- "status": 1
- }, {
- "remark": "财务角色",
- "pid": 2,
- "rules": {"bi": [], "crm": []},
- "id": 10,
- "label": null,
- "title": "财务角色",
- "type": 1,
- "status": 1
- }, {
- "remark": "销售员角色",
- "pid": 2,
- "rules": {"bi": [], "crm": []},
- "id": 11,
- "label": null,
- "title": "销售员角色",
- "type": 2,
- "status": 1
- }]
-}, {
- "name": "办公管理角色",
- "pid": 7,
- "list": [{
- "remark": "公告管理员",
- "pid": 7,
- "rules": {"bi": [], "crm": []},
- "id": 7,
- "label": null,
- "title": "公告管理员",
- "type": 5,
- "status": 1
- }]
-}, {
- "name": "项目管理角色",
- "pid": 8,
- "list": [{
- "remark": "项目管理员",
- "pid": 8,
- "rules": {"bi": [], "crm": []},
- "id": 12,
- "label": 1,
- "title": "项目管理员",
- "type": 5,
- "status": 1
- }, {
- "remark": "测试项目",
- "pid": 8,
- "rules": {"bi": [], "crm": []},
- "id": 47,
- "label": null,
- "title": "测试项目",
- "type": 5,
- "status": 1
- }]
-}, {"name": "自定义角色", "pid": 0, "list": []}]
-
-const userList = {
- "totalRow": 2,
- "pageNumber": 1,
- "firstPage": true,
- "lastPage": true,
- "totalPage": 1,
- "pageSize": 15,
- "list": [{
- "deptName": "办公室",
- "img": "",
- "createTime": "2019-02-13 15:43:26",
- "roleId": "1",
- "sex": null,
- "mobile": "12312341234",
- "realname": "admin",
- "parentName": null,
- "post": "1",
- "userId": 3,
- "parentId": 0,
- "roleName": "超级管理员",
- "deptId": 1,
- "email": null,
- "username": "admin",
- "status": 1
- }, {
- "deptName": "办公室",
- "img": null,
- "createTime": "2020-11-10 11:01:49",
- "roleId": "3",
- "sex": null,
- "mobile": "13364306255",
- "realname": "ttt",
- "parentName": null,
- "post": null,
- "userId": 4,
- "parentId": null,
- "roleName": "部门与员工管理员",
- "deptId": 1,
- "email": null,
- "username": "13364306255",
- "status": 1
- }]
-}
-
-const sceneList =
- [{
- "isSystem": 1,
- "bydata": null,
- "data": "{\"is_transform\":{\"condition\":\"is\",\"name\":\"is_transform\",\"value\":0}}",
- "sceneId": 22,
- "name": "全部线索",
- "isDefault": 0
- }, {
- "isSystem": 1,
- "bydata": null,
- "data": "{\"owner_user_id\":{\"condition\":\"is\",\"name\":\"owner_user_id\",\"value\":3},\"is_transform\":{\"condition\":\"is\",\"name\":\"is_transform\",\"value\":0}}",
- "sceneId": 23,
- "name": "我负责的线索",
- "isDefault": 0
- }, {
- "isSystem": 1,
- "bydata": null,
- "data": "{\"owner_user_id\":{\"condition\":\"in\",\"name\":\"owner_user_id\",\"value\":\"0\"},\"is_transform\":{\"condition\":\"is\",\"name\":\"is_transform\",\"value\":0}}",
- "sceneId": 24,
- "name": "下属负责的线索",
- "isDefault": 0
- }, {
- "isSystem": 1,
- "bydata": "transform",
- "data": "{\"is_transform\":{\"condition\":\"is\",\"name\":\"is_transform\",\"value\":\"1\"}}",
- "sceneId": 25,
- "name": "已转化的线索",
- "isDefault": 0
- }]
-export default [
- {
- url: '/vue-element-admin/system/dept/queryDeptTreed',
- type: 'get',
- response: _ => {
- return {
- "code": 20000,
- "data": ListField
- }
- }
- },
- {
- url: '/vue-element-admin/system/role/getAllRoleList',
- type: 'get',
- response: _ => {
- return {
- "code": 20000,
- "data": roleList,
- }
- }
- },
- {
- url: '/vue-element-admin/system/user/queryUserList',
- type: 'get',
- response: _ => {
- return {
- "code": 20000,
- "data": userList,
- }
- }
- },
- {
- url: '/vue-element-admin/system/scene/getAllsceneList',
- type: 'get',
- response: _ => {
- return {
- "code": 20000,
- "data": sceneList
- }
- }
- },
-]
-
+import Mock from 'mockjs'
+//表格字段数据
+const ListField = [{
+ "level": 1,
+ "children": [{"level": 2, "name": "666", "pid": 1, "id": 2, "label": "666"}, {
+ "level": 2,
+ "name": "777",
+ "pid": 1,
+ "id": 3,
+ "label": "777"
+ }],
+ "name": "办公室",
+ "pid": 0,
+ "id": 1,
+ "label": "办公室"
+}, {"level": 2, "name": "666", "pid": 1, "id": 2, "label": "666"}, {
+ "level": 2,
+ "name": "777",
+ "pid": 1,
+ "id": 3,
+ "label": "777"
+}]
+//表格list数据
+const roleList = [{
+ "name": "系统管理角色",
+ "pid": 1,
+ "list": [{
+ "remark": "超级管理员",
+ "pid": 1,
+ "rules": {"bi": [], "crm": []},
+ "id": 1,
+ "label": null,
+ "title": "超级管理员",
+ "type": 5,
+ "status": 1
+ }, {
+ "remark": "系统设置管理员",
+ "pid": 1,
+ "rules": {"bi": [], "crm": []},
+ "id": 2,
+ "label": null,
+ "title": "系统设置管理员",
+ "type": 2,
+ "status": 1
+ }, {
+ "remark": "部门与员工管理员",
+ "pid": 1,
+ "rules": {"bi": [], "crm": []},
+ "id": 3,
+ "label": null,
+ "title": "部门与员工管理员",
+ "type": 5,
+ "status": 1
+ }, {
+ "remark": "审批流管理员",
+ "pid": 1,
+ "rules": {"bi": [], "crm": []},
+ "id": 4,
+ "label": null,
+ "title": "审批流管理员",
+ "type": 5,
+ "status": 1
+ }, {
+ "remark": "工作台管理员",
+ "pid": 1,
+ "rules": {"bi": [], "crm": []},
+ "id": 5,
+ "label": null,
+ "title": "工作台管理员",
+ "type": 5,
+ "status": 1
+ }, {
+ "remark": "客户管理员",
+ "pid": 1,
+ "rules": {"bi": [], "crm": []},
+ "id": 6,
+ "label": null,
+ "title": "客户管理员",
+ "type": 5,
+ "status": 1
+ }]
+}, {
+ "name": "客户管理角色",
+ "pid": 2,
+ "list": [{
+ "remark": "销售经理角色",
+ "pid": 2,
+ "rules": {
+ "bi": [],
+ "crm": [9, 17, 18, 19, 20, 21, 22, 23, 24, 25, 10, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 191, 11, 40, 41, 42, 43, 44, 45, 107, 108, 12, 46, 47, 48, 49, 50, 51, 52, 13, 53, 54, 55, 56, 57, 58, 59, 14, 60, 61, 62, 63, 64, 15, 65, 66, 67, 68, 69, 109, 110, 127, 128, 129, 130, 131]
+ },
+ "id": 8,
+ "label": null,
+ "title": "销售经理角色",
+ "type": 2,
+ "status": 1
+ }, {
+ "remark": "行政管理",
+ "pid": 2,
+ "rules": {"bi": [], "crm": []},
+ "id": 9,
+ "label": null,
+ "title": "行政管理",
+ "type": 1,
+ "status": 1
+ }, {
+ "remark": "财务角色",
+ "pid": 2,
+ "rules": {"bi": [], "crm": []},
+ "id": 10,
+ "label": null,
+ "title": "财务角色",
+ "type": 1,
+ "status": 1
+ }, {
+ "remark": "销售员角色",
+ "pid": 2,
+ "rules": {"bi": [], "crm": []},
+ "id": 11,
+ "label": null,
+ "title": "销售员角色",
+ "type": 2,
+ "status": 1
+ }]
+}, {
+ "name": "办公管理角色",
+ "pid": 7,
+ "list": [{
+ "remark": "公告管理员",
+ "pid": 7,
+ "rules": {"bi": [], "crm": []},
+ "id": 7,
+ "label": null,
+ "title": "公告管理员",
+ "type": 5,
+ "status": 1
+ }]
+}, {
+ "name": "项目管理角色",
+ "pid": 8,
+ "list": [{
+ "remark": "项目管理员",
+ "pid": 8,
+ "rules": {"bi": [], "crm": []},
+ "id": 12,
+ "label": 1,
+ "title": "项目管理员",
+ "type": 5,
+ "status": 1
+ }, {
+ "remark": "测试项目",
+ "pid": 8,
+ "rules": {"bi": [], "crm": []},
+ "id": 47,
+ "label": null,
+ "title": "测试项目",
+ "type": 5,
+ "status": 1
+ }]
+}, {"name": "自定义角色", "pid": 0, "list": []}]
+
+const userList = {
+ "totalRow": 2,
+ "pageNumber": 1,
+ "firstPage": true,
+ "lastPage": true,
+ "totalPage": 1,
+ "pageSize": 15,
+ "list": [{
+ "deptName": "办公室",
+ "img": "",
+ "createTime": "2019-02-13 15:43:26",
+ "roleId": "1",
+ "sex": null,
+ "mobile": "12312341234",
+ "realname": "admin",
+ "parentName": null,
+ "post": "1",
+ "userId": 3,
+ "parentId": 0,
+ "roleName": "超级管理员",
+ "deptId": 1,
+ "email": null,
+ "username": "admin",
+ "status": 1
+ }, {
+ "deptName": "办公室",
+ "img": null,
+ "createTime": "2020-11-10 11:01:49",
+ "roleId": "3",
+ "sex": null,
+ "mobile": "13364306255",
+ "realname": "ttt",
+ "parentName": null,
+ "post": null,
+ "userId": 4,
+ "parentId": null,
+ "roleName": "部门与员工管理员",
+ "deptId": 1,
+ "email": null,
+ "username": "13364306255",
+ "status": 1
+ }]
+}
+
+const sceneList =
+ [{
+ "isSystem": 1,
+ "bydata": null,
+ "data": "{\"is_transform\":{\"condition\":\"is\",\"name\":\"is_transform\",\"value\":0}}",
+ "sceneId": 22,
+ "name": "全部线索",
+ "isDefault": 0
+ }, {
+ "isSystem": 1,
+ "bydata": null,
+ "data": "{\"owner_user_id\":{\"condition\":\"is\",\"name\":\"owner_user_id\",\"value\":3},\"is_transform\":{\"condition\":\"is\",\"name\":\"is_transform\",\"value\":0}}",
+ "sceneId": 23,
+ "name": "我负责的线索",
+ "isDefault": 0
+ }, {
+ "isSystem": 1,
+ "bydata": null,
+ "data": "{\"owner_user_id\":{\"condition\":\"in\",\"name\":\"owner_user_id\",\"value\":\"0\"},\"is_transform\":{\"condition\":\"is\",\"name\":\"is_transform\",\"value\":0}}",
+ "sceneId": 24,
+ "name": "下属负责的线索",
+ "isDefault": 0
+ }, {
+ "isSystem": 1,
+ "bydata": "transform",
+ "data": "{\"is_transform\":{\"condition\":\"is\",\"name\":\"is_transform\",\"value\":\"1\"}}",
+ "sceneId": 25,
+ "name": "已转化的线索",
+ "isDefault": 0
+ }]
+export default [
+ {
+ url: '/vue-element-admin/system/dept/queryDeptTreed',
+ type: 'get',
+ response: _ => {
+ return {
+ "code": 20000,
+ "data": ListField
+ }
+ }
+ },
+ {
+ url: '/vue-element-admin/system/role/getAllRoleList',
+ type: 'get',
+ response: _ => {
+ return {
+ "code": 20000,
+ "data": roleList,
+ }
+ }
+ },
+ {
+ url: '/vue-element-admin/system/user/queryUserList',
+ type: 'get',
+ response: _ => {
+ return {
+ "code": 20000,
+ "data": userList,
+ }
+ }
+ },
+ {
+ url: '/vue-element-admin/system/scene/getAllsceneList',
+ type: 'get',
+ response: _ => {
+ return {
+ "code": 20000,
+ "data": sceneList
+ }
+ }
+ },
+]
+
diff --git a/vue/mock/index.js b/vue/mock/index.js
index 495bb518..2fc8c25e 100644
--- a/vue/mock/index.js
+++ b/vue/mock/index.js
@@ -1,74 +1,74 @@
-import Mock from 'mockjs'
-import { param2Obj } from '../src/utils'
-
-import user from './user'
-import role from './role'
-import article from './article'
-import search from './remote-search'
-import ux from './ux'
-import common from './common'
-const mocks = [
- ...user,
- ...role,
- ...article,
- ...search,
- ...ux,
- ...common
-]
-
-// 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(`${process.env.VUE_APP_BASE_API}${url}`),
- type: type || 'get',
- response(req, res) {
- console.log('request invoke:' + req.path)
- res.json(Mock.mock(respond instanceof Function ? respond(req, res) : respond))
- }
- }
-}
-
-export default mocks.map(route => {
- return responseFake(route.url, route.type, route.response)
-})
+import Mock from 'mockjs'
+import { param2Obj } from '../src/utils'
+
+import user from './user'
+import role from './role'
+import article from './article'
+import search from './remote-search'
+import ux from './ux'
+import common from './common'
+const mocks = [
+ ...user,
+ ...role,
+ ...article,
+ ...search,
+ ...ux,
+ ...common
+]
+
+// 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(`${process.env.VUE_APP_BASE_API}${url}`),
+ type: type || 'get',
+ response(req, res) {
+ console.log('request invoke:' + req.path)
+ res.json(Mock.mock(respond instanceof Function ? respond(req, res) : respond))
+ }
+ }
+}
+
+export default mocks.map(route => {
+ return responseFake(route.url, route.type, route.response)
+})
diff --git a/vue/mock/mock-server.js b/vue/mock/mock-server.js
index 4c4cb2af..6e9abee9 100644
--- a/vue/mock/mock-server.js
+++ b/vue/mock/mock-server.js
@@ -1,68 +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))
- }
- }
- })
-}
+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))
+ }
+ }
+ })
+}
diff --git a/vue/mock/remote-search.js b/vue/mock/remote-search.js
index 60809cb8..0f95683d 100644
--- a/vue/mock/remote-search.js
+++ b/vue/mock/remote-search.js
@@ -1,51 +1,51 @@
-import Mock from 'mockjs'
-
-const NameList = []
-const count = 100
-
-for (let i = 0; i < count; i++) {
- NameList.push(Mock.mock({
- name: '@first'
- }))
-}
-NameList.push({ name: 'mock-Pan' })
-
-export default [
- // username search
- {
- url: '/vue-element-admin/search/user',
- type: 'get',
- response: config => {
- const { name } = config.query
- const mockNameList = NameList.filter(item => {
- const lowerCaseName = item.name.toLowerCase()
- return !(name && lowerCaseName.indexOf(name.toLowerCase()) < 0)
- })
- return {
- code: 20000,
- data: { items: mockNameList }
- }
- }
- },
-
- // transaction list
- {
- url: '/vue-element-admin/transaction/list',
- type: 'get',
- response: _ => {
- return {
- code: 20000,
- data: {
- total: 20,
- 'items|20': [{
- order_no: '@guid()',
- timestamp: +Mock.Random.date('T'),
- username: '@name()',
- price: '@float(1000, 15000, 0, 2)',
- 'status|1': ['success', 'pending']
- }]
- }
- }
- }
- }
-]
+import Mock from 'mockjs'
+
+const NameList = []
+const count = 100
+
+for (let i = 0; i < count; i++) {
+ NameList.push(Mock.mock({
+ name: '@first'
+ }))
+}
+NameList.push({ name: 'mock-Pan' })
+
+export default [
+ // username search
+ {
+ url: '/vue-element-admin/search/user',
+ type: 'get',
+ response: config => {
+ const { name } = config.query
+ const mockNameList = NameList.filter(item => {
+ const lowerCaseName = item.name.toLowerCase()
+ return !(name && lowerCaseName.indexOf(name.toLowerCase()) < 0)
+ })
+ return {
+ code: 20000,
+ data: { items: mockNameList }
+ }
+ }
+ },
+
+ // transaction list
+ {
+ url: '/vue-element-admin/transaction/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 20000,
+ data: {
+ total: 20,
+ 'items|20': [{
+ order_no: '@guid()',
+ timestamp: +Mock.Random.date('T'),
+ username: '@name()',
+ price: '@float(1000, 15000, 0, 2)',
+ 'status|1': ['success', 'pending']
+ }]
+ }
+ }
+ }
+ }
+]
diff --git a/vue/mock/role/index.js b/vue/mock/role/index.js
index d957493b..ba37ee42 100644
--- a/vue/mock/role/index.js
+++ b/vue/mock/role/index.js
@@ -1,98 +1,98 @@
-import Mock from 'mockjs'
-import { deepClone } from '../../src/utils/index.js'
-import { asyncRoutes, constantRoutes } from './routes.js'
-
-const routes = deepClone([...constantRoutes, ...asyncRoutes])
-
-const roles = [
- {
- key: 'admin',
- name: 'admin',
- description: 'Super Administrator. Have access to view all pages.',
- routes: routes
- },
- {
- key: 'editor',
- name: 'editor',
- description: 'Normal Editor. Can see all pages except permission page',
- routes: routes.filter(i => i.path !== '/permission')// just a mock
- },
- {
- key: 'visitor',
- name: 'visitor',
- description: 'Just a visitor. Can only see the home page and the document page',
- routes: [{
- path: '',
- redirect: 'dashboard',
- children: [
- {
- path: 'dashboard',
- name: 'Dashboard',
- meta: { title: 'dashboard', icon: 'dashboard' }
- }
- ]
- }]
- }
-]
-
-export default [
- // mock get all routes form server
- {
- url: '/vue-element-admin/routes',
- type: 'get',
- response: _ => {
- return {
- code: 20000,
- data: routes
- }
- }
- },
-
- // mock get all roles form server
- {
- url: '/vue-element-admin/roles',
- type: 'get',
- response: _ => {
- return {
- code: 20000,
- data: roles
- }
- }
- },
-
- // add role
- {
- url: '/vue-element-admin/role',
- type: 'post',
- response: {
- code: 20000,
- data: {
- key: Mock.mock('@integer(300, 5000)')
- }
- }
- },
-
- // update role
- {
- url: '/vue-element-admin/role/[A-Za-z0-9]',
- type: 'put',
- response: {
- code: 20000,
- data: {
- status: 'success'
- }
- }
- },
-
- // delete role
- {
- url: '/vue-element-admin/role/[A-Za-z0-9]',
- type: 'delete',
- response: {
- code: 20000,
- data: {
- status: 'success'
- }
- }
- }
-]
+import Mock from 'mockjs'
+import { deepClone } from '../../src/utils/index.js'
+import { asyncRoutes, constantRoutes } from './routes.js'
+
+const routes = deepClone([...constantRoutes, ...asyncRoutes])
+
+const roles = [
+ {
+ key: 'admin',
+ name: 'admin',
+ description: 'Super Administrator. Have access to view all pages.',
+ routes: routes
+ },
+ {
+ key: 'editor',
+ name: 'editor',
+ description: 'Normal Editor. Can see all pages except permission page',
+ routes: routes.filter(i => i.path !== '/permission')// just a mock
+ },
+ {
+ key: 'visitor',
+ name: 'visitor',
+ description: 'Just a visitor. Can only see the home page and the document page',
+ routes: [{
+ path: '',
+ redirect: 'dashboard',
+ children: [
+ {
+ path: 'dashboard',
+ name: 'Dashboard',
+ meta: { title: 'dashboard', icon: 'dashboard' }
+ }
+ ]
+ }]
+ }
+]
+
+export default [
+ // mock get all routes form server
+ {
+ url: '/vue-element-admin/routes',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 20000,
+ data: routes
+ }
+ }
+ },
+
+ // mock get all roles form server
+ {
+ url: '/vue-element-admin/roles',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 20000,
+ data: roles
+ }
+ }
+ },
+
+ // add role
+ {
+ url: '/vue-element-admin/role',
+ type: 'post',
+ response: {
+ code: 20000,
+ data: {
+ key: Mock.mock('@integer(300, 5000)')
+ }
+ }
+ },
+
+ // update role
+ {
+ url: '/vue-element-admin/role/[A-Za-z0-9]',
+ type: 'put',
+ response: {
+ code: 20000,
+ data: {
+ status: 'success'
+ }
+ }
+ },
+
+ // delete role
+ {
+ url: '/vue-element-admin/role/[A-Za-z0-9]',
+ type: 'delete',
+ response: {
+ code: 20000,
+ data: {
+ status: 'success'
+ }
+ }
+ }
+]
diff --git a/vue/mock/role/routes.js b/vue/mock/role/routes.js
index c4654566..c574c9d8 100644
--- a/vue/mock/role/routes.js
+++ b/vue/mock/role/routes.js
@@ -1,525 +1,525 @@
-// Just a mock data
-
-export const constantRoutes = [
- {
- path: '/redirect',
- component: 'layout/Layout',
- hidden: true,
- children: [
- {
- path: '/redirect/:path*',
- component: 'views/redirect/index'
- }
- ]
- },
- {
- path: '/login',
- component: 'views/login/index',
- hidden: true
- },
- {
- path: '/auth-redirect',
- component: 'views/login/auth-redirect',
- hidden: true
- },
- {
- path: '/404',
- component: 'views/error-page/404',
- hidden: true
- },
- {
- path: '/401',
- component: 'views/error-page/401',
- hidden: true
- },
- {
- path: '',
- component: 'layout/Layout',
- redirect: 'dashboard',
- children: [
- {
- path: 'dashboard',
- component: 'views/dashboard/index',
- name: 'Dashboard',
- meta: { title: 'dashboard', icon: 'dashboard', affix: true }
- }
- ]
- },
- {
- path: '/documentation',
- component: 'layout/Layout',
- children: [
- {
- path: 'index',
- component: 'views/documentation/index',
- name: 'Documentation',
- meta: { title: 'documentation', icon: 'documentation', affix: true }
- }
- ]
- },
- {
- path: '/guide',
- component: 'layout/Layout',
- redirect: '/guide/index',
- children: [
- {
- path: 'index',
- component: 'views/guide/index',
- name: 'Guide',
- meta: { title: 'guide', icon: 'guide', noCache: true }
- }
- ]
- }
-]
-
-export const asyncRoutes = [
- {
- path: '/permission',
- component: 'layout/Layout',
- redirect: '/permission/index',
- alwaysShow: true,
- meta: {
- title: 'permission',
- icon: 'lock',
- roles: ['admin', 'editor']
- },
- children: [
- {
- path: 'page',
- component: 'views/permission/page',
- name: 'PagePermission',
- meta: {
- title: 'pagePermission',
- roles: ['admin']
- }
- },
- {
- path: 'directive',
- component: 'views/permission/directive',
- name: 'DirectivePermission',
- meta: {
- title: 'directivePermission'
- }
- },
- {
- path: 'role',
- component: 'views/permission/role',
- name: 'RolePermission',
- meta: {
- title: 'rolePermission',
- roles: ['admin']
- }
- }
- ]
- },
-
- {
- path: '/icon',
- component: 'layout/Layout',
- children: [
- {
- path: 'index',
- component: 'views/icons/index',
- name: 'Icons',
- meta: { title: 'icons', icon: 'icon', noCache: true }
- }
- ]
- },
-
- {
- path: '/components',
- component: 'layout/Layout',
- redirect: 'noRedirect',
- name: 'ComponentDemo',
- meta: {
- title: 'components',
- icon: 'component'
- },
- children: [
- {
- path: 'tinymce',
- component: 'views/components-demo/tinymce',
- name: 'TinymceDemo',
- meta: { title: 'tinymce' }
- },
- {
- path: 'markdown',
- component: 'views/components-demo/markdown',
- name: 'MarkdownDemo',
- meta: { title: 'markdown' }
- },
- {
- path: 'json-editor',
- component: 'views/components-demo/json-editor',
- name: 'JsonEditorDemo',
- meta: { title: 'jsonEditor' }
- },
- {
- path: 'split-pane',
- component: 'views/components-demo/split-pane',
- name: 'SplitpaneDemo',
- meta: { title: 'splitPane' }
- },
- {
- path: 'avatar-upload',
- component: 'views/components-demo/avatar-upload',
- name: 'AvatarUploadDemo',
- meta: { title: 'avatarUpload' }
- },
- {
- path: 'dropzone',
- component: 'views/components-demo/dropzone',
- name: 'DropzoneDemo',
- meta: { title: 'dropzone' }
- },
- {
- path: 'sticky',
- component: 'views/components-demo/sticky',
- name: 'StickyDemo',
- meta: { title: 'sticky' }
- },
- {
- path: 'count-to',
- component: 'views/components-demo/count-to',
- name: 'CountToDemo',
- meta: { title: 'countTo' }
- },
- {
- path: 'mixin',
- component: 'views/components-demo/mixin',
- name: 'ComponentMixinDemo',
- meta: { title: 'componentMixin' }
- },
- {
- path: 'back-to-top',
- component: 'views/components-demo/back-to-top',
- name: 'BackToTopDemo',
- meta: { title: 'backToTop' }
- },
- {
- path: 'drag-dialog',
- component: 'views/components-demo/drag-dialog',
- name: 'DragDialogDemo',
- meta: { title: 'dragDialog' }
- },
- {
- path: 'drag-select',
- component: 'views/components-demo/drag-select',
- name: 'DragSelectDemo',
- meta: { title: 'dragSelect' }
- },
- {
- path: 'dnd-list',
- component: 'views/components-demo/dnd-list',
- name: 'DndListDemo',
- meta: { title: 'dndList' }
- },
- {
- path: 'drag-kanban',
- component: 'views/components-demo/drag-kanban',
- name: 'DragKanbanDemo',
- meta: { title: 'dragKanban' }
- }
- ]
- },
- {
- path: '/charts',
- component: 'layout/Layout',
- redirect: 'noRedirect',
- name: 'Charts',
- meta: {
- title: 'charts',
- icon: 'chart'
- },
- children: [
- {
- path: 'keyboard',
- component: 'views/charts/keyboard',
- name: 'KeyboardChart',
- meta: { title: 'keyboardChart', noCache: true }
- },
- {
- path: 'line',
- component: 'views/charts/line',
- name: 'LineChart',
- meta: { title: 'lineChart', noCache: true }
- },
- {
- path: 'mixchart',
- component: 'views/charts/mixChart',
- name: 'MixChart',
- meta: { title: 'mixChart', noCache: true }
- }
- ]
- },
- {
- path: '/nested',
- component: 'layout/Layout',
- redirect: '/nested/menu1/menu1-1',
- name: 'Nested',
- meta: {
- title: 'nested',
- icon: 'nested'
- },
- children: [
- {
- path: 'menu1',
- component: 'views/nested/menu1/index',
- name: 'Menu1',
- meta: { title: 'menu1' },
- redirect: '/nested/menu1/menu1-1',
- children: [
- {
- path: 'menu1-1',
- component: 'views/nested/menu1/menu1-1',
- name: 'Menu1-1',
- meta: { title: 'menu1-1' }
- },
- {
- path: 'menu1-2',
- component: 'views/nested/menu1/menu1-2',
- name: 'Menu1-2',
- redirect: '/nested/menu1/menu1-2/menu1-2-1',
- meta: { title: 'menu1-2' },
- children: [
- {
- path: 'menu1-2-1',
- component: 'views/nested/menu1/menu1-2/menu1-2-1',
- name: 'Menu1-2-1',
- meta: { title: 'menu1-2-1' }
- },
- {
- path: 'menu1-2-2',
- component: 'views/nested/menu1/menu1-2/menu1-2-2',
- name: 'Menu1-2-2',
- meta: { title: 'menu1-2-2' }
- }
- ]
- },
- {
- path: 'menu1-3',
- component: 'views/nested/menu1/menu1-3',
- name: 'Menu1-3',
- meta: { title: 'menu1-3' }
- }
- ]
- },
- {
- path: 'menu2',
- name: 'Menu2',
- component: 'views/nested/menu2/index',
- meta: { title: 'menu2' }
- }
- ]
- },
-
- {
- path: '/example',
- component: 'layout/Layout',
- redirect: '/example/list',
- name: 'Example',
- meta: {
- title: 'example',
- icon: 'example'
- },
- children: [
- {
- path: 'create',
- component: 'views/example/create',
- name: 'CreateArticle',
- meta: { title: 'createArticle', icon: 'edit' }
- },
- {
- path: 'edit/:id(\\d+)',
- component: 'views/example/edit',
- name: 'EditArticle',
- meta: { title: 'editArticle', noCache: true },
- hidden: true
- },
- {
- path: 'list',
- component: 'views/example/list',
- name: 'ArticleList',
- meta: { title: 'articleList', icon: 'list' }
- }
- ]
- },
-
- {
- path: '/tab',
- component: 'layout/Layout',
- children: [
- {
- path: 'index',
- component: 'views/tab/index',
- name: 'Tab',
- meta: { title: 'tab', icon: 'tab' }
- }
- ]
- },
-
- {
- path: '/error',
- component: 'layout/Layout',
- redirect: 'noRedirect',
- name: 'ErrorPages',
- meta: {
- title: 'errorPages',
- icon: '404'
- },
- children: [
- {
- path: '401',
- component: 'views/error-page/401',
- name: 'Page401',
- meta: { title: 'page401', noCache: true }
- },
- {
- path: '404',
- component: 'views/error-page/404',
- name: 'Page404',
- meta: { title: 'page404', noCache: true }
- }
- ]
- },
-
- {
- path: '/error-log',
- component: 'layout/Layout',
- redirect: 'noRedirect',
- children: [
- {
- path: 'log',
- component: 'views/error-log/index',
- name: 'ErrorLog',
- meta: { title: 'errorLog', icon: 'bug' }
- }
- ]
- },
-
- {
- path: '/excel',
- component: 'layout/Layout',
- redirect: '/excel/export-excel',
- name: 'Excel',
- meta: {
- title: 'excel',
- icon: 'excel'
- },
- children: [
- {
- path: 'export-excel',
- component: 'views/excel/export-excel',
- name: 'ExportExcel',
- meta: { title: 'exportExcel' }
- },
- {
- path: 'export-selected-excel',
- component: 'views/excel/select-excel',
- name: 'SelectExcel',
- meta: { title: 'selectExcel' }
- },
- {
- path: 'export-merge-header',
- component: 'views/excel/merge-header',
- name: 'MergeHeader',
- meta: { title: 'mergeHeader' }
- },
- {
- path: 'upload-excel',
- component: 'views/excel/upload-excel',
- name: 'UploadExcel',
- meta: { title: 'uploadExcel' }
- }
- ]
- },
-
- {
- path: '/zip',
- component: 'layout/Layout',
- redirect: '/zip/download',
- alwaysShow: true,
- meta: { title: 'zip', icon: 'zip' },
- children: [
- {
- path: 'download',
- component: 'views/zip/index',
- name: 'ExportZip',
- meta: { title: 'exportZip' }
- }
- ]
- },
-
- {
- path: '/pdf',
- component: 'layout/Layout',
- redirect: '/pdf/index',
- children: [
- {
- path: 'index',
- component: 'views/pdf/index',
- name: 'PDF',
- meta: { title: 'pdf', icon: 'pdf' }
- }
- ]
- },
- {
- path: '/pdf/download',
- component: 'views/pdf/download',
- hidden: true
- },
-
- {
- path: '/theme',
- component: 'layout/Layout',
- redirect: 'noRedirect',
- children: [
- {
- path: 'index',
- component: 'views/theme/index',
- name: 'Theme',
- meta: { title: 'theme', icon: 'theme' }
- }
- ]
- },
-
- {
- path: '/clipboard',
- component: 'layout/Layout',
- redirect: 'noRedirect',
- children: [
- {
- path: 'index',
- component: 'views/clipboard/index',
- name: 'ClipboardDemo',
- meta: { title: 'clipboardDemo', icon: 'clipboard' }
- }
- ]
- },
-
- {
- path: '/i18n',
- component: 'layout/Layout',
- children: [
- {
- path: 'index',
- component: 'views/i18n-demo/index',
- name: 'I18n',
- meta: { title: 'i18n', icon: 'international' }
- }
- ]
- },
-
- {
- path: 'external-link',
- component: 'layout/Layout',
- children: [
- {
- path: 'https://github.com/PanJiaChen/vue-element-admin',
- meta: { title: 'externalLink', icon: 'link' }
- }
- ]
- },
-
- { path: '*', redirect: '/404', hidden: true }
-]
+// Just a mock data
+
+export const constantRoutes = [
+ {
+ path: '/redirect',
+ component: 'layout/Layout',
+ hidden: true,
+ children: [
+ {
+ path: '/redirect/:path*',
+ component: 'views/redirect/index'
+ }
+ ]
+ },
+ {
+ path: '/login',
+ component: 'views/login/index',
+ hidden: true
+ },
+ {
+ path: '/auth-redirect',
+ component: 'views/login/auth-redirect',
+ hidden: true
+ },
+ {
+ path: '/404',
+ component: 'views/error-page/404',
+ hidden: true
+ },
+ {
+ path: '/401',
+ component: 'views/error-page/401',
+ hidden: true
+ },
+ {
+ path: '',
+ component: 'layout/Layout',
+ redirect: 'dashboard',
+ children: [
+ {
+ path: 'dashboard',
+ component: 'views/dashboard/index',
+ name: 'Dashboard',
+ meta: { title: 'dashboard', icon: 'dashboard', affix: true }
+ }
+ ]
+ },
+ {
+ path: '/documentation',
+ component: 'layout/Layout',
+ children: [
+ {
+ path: 'index',
+ component: 'views/documentation/index',
+ name: 'Documentation',
+ meta: { title: 'documentation', icon: 'documentation', affix: true }
+ }
+ ]
+ },
+ {
+ path: '/guide',
+ component: 'layout/Layout',
+ redirect: '/guide/index',
+ children: [
+ {
+ path: 'index',
+ component: 'views/guide/index',
+ name: 'Guide',
+ meta: { title: 'guide', icon: 'guide', noCache: true }
+ }
+ ]
+ }
+]
+
+export const asyncRoutes = [
+ {
+ path: '/permission',
+ component: 'layout/Layout',
+ redirect: '/permission/index',
+ alwaysShow: true,
+ meta: {
+ title: 'permission',
+ icon: 'lock',
+ roles: ['admin', 'editor']
+ },
+ children: [
+ {
+ path: 'page',
+ component: 'views/permission/page',
+ name: 'PagePermission',
+ meta: {
+ title: 'pagePermission',
+ roles: ['admin']
+ }
+ },
+ {
+ path: 'directive',
+ component: 'views/permission/directive',
+ name: 'DirectivePermission',
+ meta: {
+ title: 'directivePermission'
+ }
+ },
+ {
+ path: 'role',
+ component: 'views/permission/role',
+ name: 'RolePermission',
+ meta: {
+ title: 'rolePermission',
+ roles: ['admin']
+ }
+ }
+ ]
+ },
+
+ {
+ path: '/icon',
+ component: 'layout/Layout',
+ children: [
+ {
+ path: 'index',
+ component: 'views/icons/index',
+ name: 'Icons',
+ meta: { title: 'icons', icon: 'icon', noCache: true }
+ }
+ ]
+ },
+
+ {
+ path: '/components',
+ component: 'layout/Layout',
+ redirect: 'noRedirect',
+ name: 'ComponentDemo',
+ meta: {
+ title: 'components',
+ icon: 'component'
+ },
+ children: [
+ {
+ path: 'tinymce',
+ component: 'views/components-demo/tinymce',
+ name: 'TinymceDemo',
+ meta: { title: 'tinymce' }
+ },
+ {
+ path: 'markdown',
+ component: 'views/components-demo/markdown',
+ name: 'MarkdownDemo',
+ meta: { title: 'markdown' }
+ },
+ {
+ path: 'json-editor',
+ component: 'views/components-demo/json-editor',
+ name: 'JsonEditorDemo',
+ meta: { title: 'jsonEditor' }
+ },
+ {
+ path: 'split-pane',
+ component: 'views/components-demo/split-pane',
+ name: 'SplitpaneDemo',
+ meta: { title: 'splitPane' }
+ },
+ {
+ path: 'avatar-upload',
+ component: 'views/components-demo/avatar-upload',
+ name: 'AvatarUploadDemo',
+ meta: { title: 'avatarUpload' }
+ },
+ {
+ path: 'dropzone',
+ component: 'views/components-demo/dropzone',
+ name: 'DropzoneDemo',
+ meta: { title: 'dropzone' }
+ },
+ {
+ path: 'sticky',
+ component: 'views/components-demo/sticky',
+ name: 'StickyDemo',
+ meta: { title: 'sticky' }
+ },
+ {
+ path: 'count-to',
+ component: 'views/components-demo/count-to',
+ name: 'CountToDemo',
+ meta: { title: 'countTo' }
+ },
+ {
+ path: 'mixin',
+ component: 'views/components-demo/mixin',
+ name: 'ComponentMixinDemo',
+ meta: { title: 'componentMixin' }
+ },
+ {
+ path: 'back-to-top',
+ component: 'views/components-demo/back-to-top',
+ name: 'BackToTopDemo',
+ meta: { title: 'backToTop' }
+ },
+ {
+ path: 'drag-dialog',
+ component: 'views/components-demo/drag-dialog',
+ name: 'DragDialogDemo',
+ meta: { title: 'dragDialog' }
+ },
+ {
+ path: 'drag-select',
+ component: 'views/components-demo/drag-select',
+ name: 'DragSelectDemo',
+ meta: { title: 'dragSelect' }
+ },
+ {
+ path: 'dnd-list',
+ component: 'views/components-demo/dnd-list',
+ name: 'DndListDemo',
+ meta: { title: 'dndList' }
+ },
+ {
+ path: 'drag-kanban',
+ component: 'views/components-demo/drag-kanban',
+ name: 'DragKanbanDemo',
+ meta: { title: 'dragKanban' }
+ }
+ ]
+ },
+ {
+ path: '/charts',
+ component: 'layout/Layout',
+ redirect: 'noRedirect',
+ name: 'Charts',
+ meta: {
+ title: 'charts',
+ icon: 'chart'
+ },
+ children: [
+ {
+ path: 'keyboard',
+ component: 'views/charts/keyboard',
+ name: 'KeyboardChart',
+ meta: { title: 'keyboardChart', noCache: true }
+ },
+ {
+ path: 'line',
+ component: 'views/charts/line',
+ name: 'LineChart',
+ meta: { title: 'lineChart', noCache: true }
+ },
+ {
+ path: 'mixchart',
+ component: 'views/charts/mixChart',
+ name: 'MixChart',
+ meta: { title: 'mixChart', noCache: true }
+ }
+ ]
+ },
+ {
+ path: '/nested',
+ component: 'layout/Layout',
+ redirect: '/nested/menu1/menu1-1',
+ name: 'Nested',
+ meta: {
+ title: 'nested',
+ icon: 'nested'
+ },
+ children: [
+ {
+ path: 'menu1',
+ component: 'views/nested/menu1/index',
+ name: 'Menu1',
+ meta: { title: 'menu1' },
+ redirect: '/nested/menu1/menu1-1',
+ children: [
+ {
+ path: 'menu1-1',
+ component: 'views/nested/menu1/menu1-1',
+ name: 'Menu1-1',
+ meta: { title: 'menu1-1' }
+ },
+ {
+ path: 'menu1-2',
+ component: 'views/nested/menu1/menu1-2',
+ name: 'Menu1-2',
+ redirect: '/nested/menu1/menu1-2/menu1-2-1',
+ meta: { title: 'menu1-2' },
+ children: [
+ {
+ path: 'menu1-2-1',
+ component: 'views/nested/menu1/menu1-2/menu1-2-1',
+ name: 'Menu1-2-1',
+ meta: { title: 'menu1-2-1' }
+ },
+ {
+ path: 'menu1-2-2',
+ component: 'views/nested/menu1/menu1-2/menu1-2-2',
+ name: 'Menu1-2-2',
+ meta: { title: 'menu1-2-2' }
+ }
+ ]
+ },
+ {
+ path: 'menu1-3',
+ component: 'views/nested/menu1/menu1-3',
+ name: 'Menu1-3',
+ meta: { title: 'menu1-3' }
+ }
+ ]
+ },
+ {
+ path: 'menu2',
+ name: 'Menu2',
+ component: 'views/nested/menu2/index',
+ meta: { title: 'menu2' }
+ }
+ ]
+ },
+
+ {
+ path: '/example',
+ component: 'layout/Layout',
+ redirect: '/example/list',
+ name: 'Example',
+ meta: {
+ title: 'example',
+ icon: 'example'
+ },
+ children: [
+ {
+ path: 'create',
+ component: 'views/example/create',
+ name: 'CreateArticle',
+ meta: { title: 'createArticle', icon: 'edit' }
+ },
+ {
+ path: 'edit/:id(\\d+)',
+ component: 'views/example/edit',
+ name: 'EditArticle',
+ meta: { title: 'editArticle', noCache: true },
+ hidden: true
+ },
+ {
+ path: 'list',
+ component: 'views/example/list',
+ name: 'ArticleList',
+ meta: { title: 'articleList', icon: 'list' }
+ }
+ ]
+ },
+
+ {
+ path: '/tab',
+ component: 'layout/Layout',
+ children: [
+ {
+ path: 'index',
+ component: 'views/tab/index',
+ name: 'Tab',
+ meta: { title: 'tab', icon: 'tab' }
+ }
+ ]
+ },
+
+ {
+ path: '/error',
+ component: 'layout/Layout',
+ redirect: 'noRedirect',
+ name: 'ErrorPages',
+ meta: {
+ title: 'errorPages',
+ icon: '404'
+ },
+ children: [
+ {
+ path: '401',
+ component: 'views/error-page/401',
+ name: 'Page401',
+ meta: { title: 'page401', noCache: true }
+ },
+ {
+ path: '404',
+ component: 'views/error-page/404',
+ name: 'Page404',
+ meta: { title: 'page404', noCache: true }
+ }
+ ]
+ },
+
+ {
+ path: '/error-log',
+ component: 'layout/Layout',
+ redirect: 'noRedirect',
+ children: [
+ {
+ path: 'log',
+ component: 'views/error-log/index',
+ name: 'ErrorLog',
+ meta: { title: 'errorLog', icon: 'bug' }
+ }
+ ]
+ },
+
+ {
+ path: '/excel',
+ component: 'layout/Layout',
+ redirect: '/excel/export-excel',
+ name: 'Excel',
+ meta: {
+ title: 'excel',
+ icon: 'excel'
+ },
+ children: [
+ {
+ path: 'export-excel',
+ component: 'views/excel/export-excel',
+ name: 'ExportExcel',
+ meta: { title: 'exportExcel' }
+ },
+ {
+ path: 'export-selected-excel',
+ component: 'views/excel/select-excel',
+ name: 'SelectExcel',
+ meta: { title: 'selectExcel' }
+ },
+ {
+ path: 'export-merge-header',
+ component: 'views/excel/merge-header',
+ name: 'MergeHeader',
+ meta: { title: 'mergeHeader' }
+ },
+ {
+ path: 'upload-excel',
+ component: 'views/excel/upload-excel',
+ name: 'UploadExcel',
+ meta: { title: 'uploadExcel' }
+ }
+ ]
+ },
+
+ {
+ path: '/zip',
+ component: 'layout/Layout',
+ redirect: '/zip/download',
+ alwaysShow: true,
+ meta: { title: 'zip', icon: 'zip' },
+ children: [
+ {
+ path: 'download',
+ component: 'views/zip/index',
+ name: 'ExportZip',
+ meta: { title: 'exportZip' }
+ }
+ ]
+ },
+
+ {
+ path: '/pdf',
+ component: 'layout/Layout',
+ redirect: '/pdf/index',
+ children: [
+ {
+ path: 'index',
+ component: 'views/pdf/index',
+ name: 'PDF',
+ meta: { title: 'pdf', icon: 'pdf' }
+ }
+ ]
+ },
+ {
+ path: '/pdf/download',
+ component: 'views/pdf/download',
+ hidden: true
+ },
+
+ {
+ path: '/theme',
+ component: 'layout/Layout',
+ redirect: 'noRedirect',
+ children: [
+ {
+ path: 'index',
+ component: 'views/theme/index',
+ name: 'Theme',
+ meta: { title: 'theme', icon: 'theme' }
+ }
+ ]
+ },
+
+ {
+ path: '/clipboard',
+ component: 'layout/Layout',
+ redirect: 'noRedirect',
+ children: [
+ {
+ path: 'index',
+ component: 'views/clipboard/index',
+ name: 'ClipboardDemo',
+ meta: { title: 'clipboardDemo', icon: 'clipboard' }
+ }
+ ]
+ },
+
+ {
+ path: '/i18n',
+ component: 'layout/Layout',
+ children: [
+ {
+ path: 'index',
+ component: 'views/i18n-demo/index',
+ name: 'I18n',
+ meta: { title: 'i18n', icon: 'international' }
+ }
+ ]
+ },
+
+ {
+ path: 'external-link',
+ component: 'layout/Layout',
+ children: [
+ {
+ path: 'https://github.com/PanJiaChen/vue-element-admin',
+ meta: { title: 'externalLink', icon: 'link' }
+ }
+ ]
+ },
+
+ { path: '*', redirect: '/404', hidden: true }
+]
diff --git a/vue/mock/user.js b/vue/mock/user.js
index 882c1f8f..c4b19ca4 100644
--- a/vue/mock/user.js
+++ b/vue/mock/user.js
@@ -1,152 +1,152 @@
-
-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: '/vue-element-admin/user/login',
- type: 'post',
- response: config => {
- const { username } = config.body
- const token = tokens[username]
-
- // mock error
- if (!token) {
- return {
- code: 60204,
- message: 'Account and password are incorrect.'
- }
- }
-
- return {
- code: 20000,
- data: token
- }
- }
- },
-
- // get user info
- {
- url: '/vue-element-admin/user/info\.*',
- type: 'get',
- response: config => {
- const { token } = config.query
- const info = users[token]
-
- // mock error
- if (!info) {
- return {
- code: 50008,
- message: 'Login failed, unable to get user details.'
- }
- }
-
- return {
- code: 20000,
- data: info
- }
- }
- },
-
- // user logout
- {
- url: '/vue-element-admin/user/logout',
- type: 'post',
- response: _ => {
- return {
- code: 20000,
- data: 'success'
- }
- }
- },
- {
- url: '/vue-element-admin/getMenu',
- type: 'get',
- response: _ => {
- return {
- "code": 20000,
- "data": {
- "menuList": [
- {
- 'create_time':'2018-03-16 11:33:00',
- "menu_type": "M",
- "path":'/projectManagement',
- "component": "Layout",
- "children": [
- {
- "create_time": "2018-03-16 11:33:00",
- "menu_type": "C",
- "children": [],
- "parent_id": 1,
- "menu_name": "客户管理",
- "icon": "#",
- "perms": "customer:index",
- "order_num": 1,
- "menu_id": 4,
- "url": "/customer/index",
- "path":'index',
- "name": 'customer',
- "component": "customer/index",
- // "roles":"abpvnext_master.Customer"
- "roles":"AbpIdentity.Users"
- },
- {
- "create_time": "2018-03-16 11:33:00",
- "menu_type": "C",
- "children": [],
- "parent_id": 1,
- "menu_name": "合同管理",
- "icon": "#",
- "perms": "customer:contract",
- "order_num": 1,
- "menu_id": 4,
- "url": "/customer/contract",
- "path": 'contract',
- "name": 'contract',
- "component": "customer/contract",
- // "roles": "abpvnext_master.Contract, abpvnext_master.Subject"
- "roles":"AbpIdentity.Roles,AbpIdentity.Users"
- }
- ],
- "parent_id": 0,
- "menu_name": "系统管理",
- "icon": "job",
- "perms": "customer:index",
- "order_num": 2,
- "menu_id": 1,
- "url": "#",
- }
- ],
- "user": {
- "login_name": "admin",
- "user_id": 1,
- "user_name": "管理员",
- "dept_id": 1
- }
- }
- }
- }
- }
-]
+
+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: '/vue-element-admin/user/login',
+ type: 'post',
+ response: config => {
+ const { username } = config.body
+ const token = tokens[username]
+
+ // mock error
+ if (!token) {
+ return {
+ code: 60204,
+ message: 'Account and password are incorrect.'
+ }
+ }
+
+ return {
+ code: 20000,
+ data: token
+ }
+ }
+ },
+
+ // get user info
+ {
+ url: '/vue-element-admin/user/info\.*',
+ type: 'get',
+ response: config => {
+ const { token } = config.query
+ const info = users[token]
+
+ // mock error
+ if (!info) {
+ return {
+ code: 50008,
+ message: 'Login failed, unable to get user details.'
+ }
+ }
+
+ return {
+ code: 20000,
+ data: info
+ }
+ }
+ },
+
+ // user logout
+ {
+ url: '/vue-element-admin/user/logout',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 20000,
+ data: 'success'
+ }
+ }
+ },
+ {
+ url: '/vue-element-admin/getMenu',
+ type: 'get',
+ response: _ => {
+ return {
+ "code": 20000,
+ "data": {
+ "menuList": [
+ {
+ 'create_time':'2018-03-16 11:33:00',
+ "menu_type": "M",
+ "path":'/projectManagement',
+ "component": "Layout",
+ "children": [
+ {
+ "create_time": "2018-03-16 11:33:00",
+ "menu_type": "C",
+ "children": [],
+ "parent_id": 1,
+ "menu_name": "客户管理",
+ "icon": "#",
+ "perms": "customer:index",
+ "order_num": 1,
+ "menu_id": 4,
+ "url": "/customer/index",
+ "path":'index',
+ "name": 'customer',
+ "component": "customer/index",
+ // "roles":"abpvnext_master.Customer"
+ "roles":"AbpIdentity.Users"
+ },
+ {
+ "create_time": "2018-03-16 11:33:00",
+ "menu_type": "C",
+ "children": [],
+ "parent_id": 1,
+ "menu_name": "合同管理",
+ "icon": "#",
+ "perms": "customer:contract",
+ "order_num": 1,
+ "menu_id": 4,
+ "url": "/customer/contract",
+ "path": 'contract',
+ "name": 'contract',
+ "component": "customer/contract",
+ // "roles": "abpvnext_master.Contract, abpvnext_master.Subject"
+ "roles":"AbpIdentity.Roles,AbpIdentity.Users"
+ }
+ ],
+ "parent_id": 0,
+ "menu_name": "系统管理",
+ "icon": "job",
+ "perms": "customer:index",
+ "order_num": 2,
+ "menu_id": 1,
+ "url": "#",
+ }
+ ],
+ "user": {
+ "login_name": "admin",
+ "user_id": 1,
+ "user_name": "管理员",
+ "dept_id": 1
+ }
+ }
+ }
+ }
+ }
+]
diff --git a/vue/mock/ux.js b/vue/mock/ux.js
index 18146471..df7db649 100644
--- a/vue/mock/ux.js
+++ b/vue/mock/ux.js
@@ -1,136 +1,136 @@
-import Mock from 'mockjs'
-//表格字段数据
-const ListField = [{"fieldId":1,"formType":"text","fieldName":"leadsName","name":"线索名称","width":100,"type":1,"setting":[]},{"fieldId":2,"formType":"select","fieldName":"线索来源","name":"线索来源","width":100,"type":3},{"fieldId":3,"formType":"text","fieldName":"telephone","name":"电话","width":100,"type":1,"setting":[]},{"fieldId":4,"formType":"mobile","fieldName":"mobile","name":"手机","width":100,"type":7,"setting":[]},{"fieldId":5,"formType":"select","fieldName":"客户行业","name":"客户行业","width":100,"type":3},{"fieldId":6,"formType":"select","fieldName":"客户级别","name":"客户级别","width":100,"type":3},{"fieldId":7,"formType":"text","fieldName":"address","name":"地址","width":100,"type":1,"setting":[]},{"fieldId":8,"formType":"datetime","fieldName":"nextTime","name":"下次联系时间","width":100,"type":13,"setting":[]},{"fieldId":9,"formType":"text","fieldName":"remark","name":"备注","width":100,"type":1,"setting":[]},{"fieldId":null,"formType":"text","fieldName":"lastContent","name":"最后跟进记录","width":100,"type":1,"setting":[]},{"fieldId":null,"formType":"date","fieldName":"updateTime","name":"更新时间","width":100,"type":4,"setting":[]},{"fieldId":null,"formType":"date","fieldName":"createTime","name":"创建时间","width":100,"type":4,"setting":[]},{"fieldId":null,"formType":"text","fieldName":"ownerUserName","name":"负责人","width":100,"type":1,"setting":[]},{"fieldId":null,"formType":"text","fieldName":"createUserName","name":"创建人","width":100,"type":1,"setting":[]}]
-//表格list数据
-const List=[{"createUserId":3,"ownerUserName":"admin","address":"","createTime":"2020-11-10 10:05:32","createUserName":"admin","ownerUserId":3,"batchId":"3f9e3f45400f452a988bd466a5a36561","mobile":"","telephone":"","remark":"","客户行业":"IT","fieldBatchId":"3f9e3f45400f452a988bd466a5a36561","线索来源":"促销","isTransform":0,"lastContent":null,"followup":null,"leadsId":2,"updateTime":"2020-11-10 10:05:32","nextTime":"2020-11-12 00:00:00","leadsName":"77","customerId":null,"客户级别":"A(重点客户)"},{"createUserId":3,"ownerUserName":"admin","address":"","createTime":"2020-10-13 16:08:48","createUserName":"admin","ownerUserId":3,"batchId":"215f6dfc0b544a84b3b095d505bb62b8","mobile":"1336544343","telephone":"i","remark":"","客户行业":"","fieldBatchId":"215f6dfc0b544a84b3b095d505bb62b8","线索来源":"搜索引擎","isTransform":0,"lastContent":null,"followup":null,"leadsId":1,"updateTime":"2020-10-13 16:08:48","nextTime":null,"leadsName":"ii","customerId":null,"客户级别":"A(重点客户)"}]
-//detail 数据
-
-//record 数据
- const recordList= [{"recordId":2,"img":[],"file":[],"createTime":"2020-11-11 14:06:31","nextTime":"2020-11-23 00:00:00","batchId":null,"category":"上门拜访","userImg":"","content":"77","realname":"admin"}]
-
-//基本信息
-const baseInfoListOne=[{"formType":"text","name":"线索名称","value":"ii"},{"formType":"text","name":"电话","value":"i"},{"formType":"mobile","name":"手机","value":"1336544343"},{"formType":"text","name":"地址","value":""},{"formType":"datetime","name":"下次联系时间","value":"2020-11-09 00:00:00"},{"formType":"text","name":"备注","value":""},{"formType":"select","name":"线索来源","value":"搜索引擎"},{"formType":"select","name":"客户行业","value":""},{"formType":"select","name":"客户级别","value":"A(重点客户)"}]
-const baseInfoListTwo=[{"formType":"text","name":"线索名称","value":"77"},{"formType":"text","name":"电话","value":""},{"formType":"mobile","name":"手机","value":""},{"formType":"text","name":"地址","value":""},{"formType":"datetime","name":"下次联系时间","value":"2020-11-23 00:00:00"},{"formType":"text","name":"备注","value":""},{"formType":"select","name":"线索来源","value":"促销"},{"formType":"select","name":"客户行业","value":"IT"},{"formType":"select","name":"客户级别","value":"A(重点客户)"}]
-
-const scenList=[{"formType":"text","fieldName":"leads_name","name":"线索名称","setting":[]},{"formType":"text","fieldName":"telephone","name":"电话","setting":[]},{"formType":"mobile","fieldName":"mobile","name":"手机","setting":[]},{"formType":"text","fieldName":"address","name":"地址","setting":[]},{"formType":"datetime","fieldName":"next_time","name":"下次联系时间","setting":[]},{"formType":"text","fieldName":"remark","name":"备注","setting":[]},{"formType":"user","fieldName":"owner_user_id","name":"负责人","setting":[]},{"formType":"user","fieldName":"create_user_id","name":"创建人","setting":[]},{"formType":"datetime","fieldName":"update_time","name":"更新时间","setting":[]},{"formType":"datetime","fieldName":"create_time","name":"创建时间","setting":[]},{"fieldId":2,"formType":"select","name":"线索来源","options":"促销,搜索引擎,广告,转介绍,线上注册,线上询价,预约上门,电话咨询,邮件咨询","type":3,"fieldName":"线索来源","setting":["促销","搜索引擎","广告","转介绍","线上注册","线上询价","预约上门","电话咨询","邮件咨询"]},{"fieldId":5,"formType":"select","name":"客户行业","options":"IT,金融业,房地产,商业服务,运输/物流,生产,政府,文化传媒","type":3,"fieldName":"客户行业","setting":["IT","金融业","房地产","商业服务","运输/物流","生产","政府","文化传媒"]},{"fieldId":6,"formType":"select","name":"客户级别","options":"A(重点客户),B(普通客户),C(非优先客户)","type":3,"fieldName":"客户级别977","setting":["A(重点客户)","B(普通客户)","C(非优先客户)"]}]
-export default [
- {
- url: '/vue-element-admin/ux/queryField',
- type: 'get',
- response: _ => {
- return {
- "code": 20000,
- "data": ListField
- }
- }
- },
- {
- url: '/vue-element-admin/ux/queryPageList',
- type: 'get',
- response: config => {
- const { importance, type, title, page = 1, limit = 20, sort } = config.query
-
- let mockList = List.filter(item => {
- if (importance && item.importance !== +importance) return false
- if (type && item.type !== type) return false
- if (title && item.title.indexOf(title) < 0) return false
- return true
- })
-
- if (sort === '-id') {
- mockList = mockList.reverse()
- }
-
- const pageList = mockList.filter((item, index) => index < limit * page && index >= limit * (page - 1))
-
- return {
- code: 20000,
- data: {
- totalRow: mockList.length,
- list: pageList
- }
- }
- }
- },
- {
- url: '/vue-element-admin/ux/detail',
- type: 'get',
- response: config => {
- const { id } = config.query
- for (const article of List) {
- if (article.leadsId == id) {
- return {
- code: 20000,
- data: article
- }
- }
- }
- }
- },
- {
- url: '/vue-element-admin/ux/queryRecordOptions',
- type: 'get',
- response: _ => {
- return {
- "code": 20000,
- "data":["打电话","发短信","上门拜访"]
- }
- }
- },
- {
- url: '/vue-element-admin/ux/getRecord',
- type: 'get',
- response: config => {
- const { page, limit, leadsId } = config.query
- let mockList = recordList.filter(item => {
- return true
- })
- const pageList = mockList.filter((item, index) => index < limit * page && index >= limit * (page - 1))
-
- for (const item of recordList) {
- if (item.recordId == leadsId) {
- return {
- code: 20000,
- data: recordList
- }
- }else{
- return {
- code: 20000,
- data: []
- }
- }
- }
- }
- },
- {
- url: '/vue-element-admin/ux/information',
- type: 'get',
- response: config => {
- const { types, id } = config.query
- console.log(id)
- if(id==1){
- return {
- code: 20000,
- data: baseInfoListOne
- }
- }else{
- return {
- code: 20000,
- data: baseInfoListTwo
- }
- }
- }
- },
- {
- url: '/vue-element-admin/ux/scene/queryField',
- type: 'get',
- response: _ => {
- return {
- "code": 20000,
- "data":scenList
- }
- }
- },
-
-]
-
+import Mock from 'mockjs'
+//表格字段数据
+const ListField = [{"fieldId":1,"formType":"text","fieldName":"leadsName","name":"线索名称","width":100,"type":1,"setting":[]},{"fieldId":2,"formType":"select","fieldName":"线索来源","name":"线索来源","width":100,"type":3},{"fieldId":3,"formType":"text","fieldName":"telephone","name":"电话","width":100,"type":1,"setting":[]},{"fieldId":4,"formType":"mobile","fieldName":"mobile","name":"手机","width":100,"type":7,"setting":[]},{"fieldId":5,"formType":"select","fieldName":"客户行业","name":"客户行业","width":100,"type":3},{"fieldId":6,"formType":"select","fieldName":"客户级别","name":"客户级别","width":100,"type":3},{"fieldId":7,"formType":"text","fieldName":"address","name":"地址","width":100,"type":1,"setting":[]},{"fieldId":8,"formType":"datetime","fieldName":"nextTime","name":"下次联系时间","width":100,"type":13,"setting":[]},{"fieldId":9,"formType":"text","fieldName":"remark","name":"备注","width":100,"type":1,"setting":[]},{"fieldId":null,"formType":"text","fieldName":"lastContent","name":"最后跟进记录","width":100,"type":1,"setting":[]},{"fieldId":null,"formType":"date","fieldName":"updateTime","name":"更新时间","width":100,"type":4,"setting":[]},{"fieldId":null,"formType":"date","fieldName":"createTime","name":"创建时间","width":100,"type":4,"setting":[]},{"fieldId":null,"formType":"text","fieldName":"ownerUserName","name":"负责人","width":100,"type":1,"setting":[]},{"fieldId":null,"formType":"text","fieldName":"createUserName","name":"创建人","width":100,"type":1,"setting":[]}]
+//表格list数据
+const List=[{"createUserId":3,"ownerUserName":"admin","address":"","createTime":"2020-11-10 10:05:32","createUserName":"admin","ownerUserId":3,"batchId":"3f9e3f45400f452a988bd466a5a36561","mobile":"","telephone":"","remark":"","客户行业":"IT","fieldBatchId":"3f9e3f45400f452a988bd466a5a36561","线索来源":"促销","isTransform":0,"lastContent":null,"followup":null,"leadsId":2,"updateTime":"2020-11-10 10:05:32","nextTime":"2020-11-12 00:00:00","leadsName":"77","customerId":null,"客户级别":"A(重点客户)"},{"createUserId":3,"ownerUserName":"admin","address":"","createTime":"2020-10-13 16:08:48","createUserName":"admin","ownerUserId":3,"batchId":"215f6dfc0b544a84b3b095d505bb62b8","mobile":"1336544343","telephone":"i","remark":"","客户行业":"","fieldBatchId":"215f6dfc0b544a84b3b095d505bb62b8","线索来源":"搜索引擎","isTransform":0,"lastContent":null,"followup":null,"leadsId":1,"updateTime":"2020-10-13 16:08:48","nextTime":null,"leadsName":"ii","customerId":null,"客户级别":"A(重点客户)"}]
+//detail 数据
+
+//record 数据
+ const recordList= [{"recordId":2,"img":[],"file":[],"createTime":"2020-11-11 14:06:31","nextTime":"2020-11-23 00:00:00","batchId":null,"category":"上门拜访","userImg":"","content":"77","realname":"admin"}]
+
+//基本信息
+const baseInfoListOne=[{"formType":"text","name":"线索名称","value":"ii"},{"formType":"text","name":"电话","value":"i"},{"formType":"mobile","name":"手机","value":"1336544343"},{"formType":"text","name":"地址","value":""},{"formType":"datetime","name":"下次联系时间","value":"2020-11-09 00:00:00"},{"formType":"text","name":"备注","value":""},{"formType":"select","name":"线索来源","value":"搜索引擎"},{"formType":"select","name":"客户行业","value":""},{"formType":"select","name":"客户级别","value":"A(重点客户)"}]
+const baseInfoListTwo=[{"formType":"text","name":"线索名称","value":"77"},{"formType":"text","name":"电话","value":""},{"formType":"mobile","name":"手机","value":""},{"formType":"text","name":"地址","value":""},{"formType":"datetime","name":"下次联系时间","value":"2020-11-23 00:00:00"},{"formType":"text","name":"备注","value":""},{"formType":"select","name":"线索来源","value":"促销"},{"formType":"select","name":"客户行业","value":"IT"},{"formType":"select","name":"客户级别","value":"A(重点客户)"}]
+
+const scenList=[{"formType":"text","fieldName":"leads_name","name":"线索名称","setting":[]},{"formType":"text","fieldName":"telephone","name":"电话","setting":[]},{"formType":"mobile","fieldName":"mobile","name":"手机","setting":[]},{"formType":"text","fieldName":"address","name":"地址","setting":[]},{"formType":"datetime","fieldName":"next_time","name":"下次联系时间","setting":[]},{"formType":"text","fieldName":"remark","name":"备注","setting":[]},{"formType":"user","fieldName":"owner_user_id","name":"负责人","setting":[]},{"formType":"user","fieldName":"create_user_id","name":"创建人","setting":[]},{"formType":"datetime","fieldName":"update_time","name":"更新时间","setting":[]},{"formType":"datetime","fieldName":"create_time","name":"创建时间","setting":[]},{"fieldId":2,"formType":"select","name":"线索来源","options":"促销,搜索引擎,广告,转介绍,线上注册,线上询价,预约上门,电话咨询,邮件咨询","type":3,"fieldName":"线索来源","setting":["促销","搜索引擎","广告","转介绍","线上注册","线上询价","预约上门","电话咨询","邮件咨询"]},{"fieldId":5,"formType":"select","name":"客户行业","options":"IT,金融业,房地产,商业服务,运输/物流,生产,政府,文化传媒","type":3,"fieldName":"客户行业","setting":["IT","金融业","房地产","商业服务","运输/物流","生产","政府","文化传媒"]},{"fieldId":6,"formType":"select","name":"客户级别","options":"A(重点客户),B(普通客户),C(非优先客户)","type":3,"fieldName":"客户级别977","setting":["A(重点客户)","B(普通客户)","C(非优先客户)"]}]
+export default [
+ {
+ url: '/vue-element-admin/ux/queryField',
+ type: 'get',
+ response: _ => {
+ return {
+ "code": 20000,
+ "data": ListField
+ }
+ }
+ },
+ {
+ url: '/vue-element-admin/ux/queryPageList',
+ type: 'get',
+ response: config => {
+ const { importance, type, title, page = 1, limit = 20, sort } = config.query
+
+ let mockList = List.filter(item => {
+ if (importance && item.importance !== +importance) return false
+ if (type && item.type !== type) return false
+ if (title && item.title.indexOf(title) < 0) return false
+ return true
+ })
+
+ if (sort === '-id') {
+ mockList = mockList.reverse()
+ }
+
+ const pageList = mockList.filter((item, index) => index < limit * page && index >= limit * (page - 1))
+
+ return {
+ code: 20000,
+ data: {
+ totalRow: mockList.length,
+ list: pageList
+ }
+ }
+ }
+ },
+ {
+ url: '/vue-element-admin/ux/detail',
+ type: 'get',
+ response: config => {
+ const { id } = config.query
+ for (const article of List) {
+ if (article.leadsId == id) {
+ return {
+ code: 20000,
+ data: article
+ }
+ }
+ }
+ }
+ },
+ {
+ url: '/vue-element-admin/ux/queryRecordOptions',
+ type: 'get',
+ response: _ => {
+ return {
+ "code": 20000,
+ "data":["打电话","发短信","上门拜访"]
+ }
+ }
+ },
+ {
+ url: '/vue-element-admin/ux/getRecord',
+ type: 'get',
+ response: config => {
+ const { page, limit, leadsId } = config.query
+ let mockList = recordList.filter(item => {
+ return true
+ })
+ const pageList = mockList.filter((item, index) => index < limit * page && index >= limit * (page - 1))
+
+ for (const item of recordList) {
+ if (item.recordId == leadsId) {
+ return {
+ code: 20000,
+ data: recordList
+ }
+ }else{
+ return {
+ code: 20000,
+ data: []
+ }
+ }
+ }
+ }
+ },
+ {
+ url: '/vue-element-admin/ux/information',
+ type: 'get',
+ response: config => {
+ const { types, id } = config.query
+ console.log(id)
+ if(id==1){
+ return {
+ code: 20000,
+ data: baseInfoListOne
+ }
+ }else{
+ return {
+ code: 20000,
+ data: baseInfoListTwo
+ }
+ }
+ }
+ },
+ {
+ url: '/vue-element-admin/ux/scene/queryField',
+ type: 'get',
+ response: _ => {
+ return {
+ "code": 20000,
+ "data":scenList
+ }
+ }
+ },
+
+]
+
diff --git a/vue/package.json b/vue/package.json
index 943d6da9..b4ac0fc5 100644
--- a/vue/package.json
+++ b/vue/package.json
@@ -1,131 +1,131 @@
-{
- "name": "vue-element-admin",
- "version": "4.2.1",
- "description": "A magical vue admin. An out-of-box UI solution for enterprise applications. Newest development stack of vue. Lots of awesome features",
- "author": "Pan ",
- "license": "MIT",
- "scripts": {
- "dev": "vue-cli-service serve",
- "build:prod": "vue-cli-service build",
- "build:stage": "vue-cli-service build --mode staging",
- "preview": "node build/index.js --preview",
- "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",
- "new": "plop"
- },
- "husky": {
- "hooks": {
- "pre-commit": "lint-staged"
- }
- },
- "lint-staged": {
- "src/**/*.{js,vue}": [
- "eslint --fix",
- "git add"
- ]
- },
- "keywords": [
- "vue",
- "admin",
- "dashboard",
- "element-ui",
- "boilerplate",
- "admin-template",
- "management-system"
- ],
- "repository": {
- "type": "git",
- "url": "git+https://github.com/PanJiaChen/vue-element-admin.git"
- },
- "bugs": {
- "url": "https://github.com/PanJiaChen/vue-element-admin/issues"
- },
- "dependencies": {
- "@babel/polyfill": "^7.12.1",
- "@riophae/vue-treeselect": "^0.4.0",
- "axios": "0.18.1",
- "babel-polyfill": "^6.26.0",
- "clipboard": "2.0.4",
- "codemirror": "5.45.0",
- "driver.js": "0.9.5",
- "dropzone": "5.5.1",
- "echarts": "4.2.1",
- "el-table-transfer": "^0.1.4",
- "element-ui": "2.13.0",
- "file-saver": "2.0.1",
- "fuse.js": "3.4.4",
- "js-cookie": "2.2.0",
- "jsonlint": "1.6.3",
- "jszip": "3.2.1",
- "lockr": "^0.8.5",
- "moment": "^2.29.1",
- "normalize.css": "^7.0.0",
- "nprogress": "0.2.0",
- "path-to-regexp": "2.4.0",
- "pinyin": "2.9.0",
- "screenfull": "4.2.0",
- "showdown": "^1.9.1",
- "sortablejs": "1.8.4",
- "tui-editor": "1.3.3",
- "v-distpicker": "^1.2.7",
- "vue": "2.6.10",
- "vue-bus": "^1.2.1",
- "vue-count-to": "1.0.13",
- "vue-cropper": "^0.5.5",
- "vue-i18n": "7.3.2",
- "vue-infinite-scroll": "^2.0.2",
- "vue-lazyload": "^1.3.3",
- "vue-loader": "^15.9.5",
- "vue-router": "3.0.2",
- "vue-splitpane": "1.0.4",
- "vuedraggable": "^2.24.3",
- "vuex": "3.1.0",
- "xlsx": "0.14.1"
- },
- "devDependencies": {
- "@babel/core": "7.0.0",
- "@babel/register": "7.0.0",
- "@vue/cli-plugin-babel": "3.5.3",
- "@vue/cli-plugin-eslint": "^3.9.1",
- "@vue/cli-plugin-unit-jest": "^4.5.9",
- "@vue/cli-service": "^4.5.9",
- "@vue/test-utils": "1.0.0-beta.29",
- "autoprefixer": "^9.5.1",
- "babel-core": "7.0.0-bridge.0",
- "babel-eslint": "10.0.1",
- "babel-jest": "^26.6.3",
- "chalk": "2.4.2",
- "chokidar": "2.1.5",
- "connect": "3.6.6",
- "eslint": "5.15.3",
- "eslint-plugin-vue": "5.2.2",
- "html-webpack-plugin": "3.2.0",
- "husky": "1.3.1",
- "lint-staged": "8.1.5",
- "mockjs": "1.0.1-beta3",
- "node-sass": "^4.14.1",
- "plop": "2.3.0",
- "postcss-loader": "^4.0.4",
- "postcss-px-to-viewport": "^1.1.1",
- "runjs": "^4.3.2",
- "sass-loader": "^7.1.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.0",
- "vue-happy-scroll": "^2.1.1",
- "vue-template-compiler": "2.6.10",
- "webpack": "^5.54.0"
- },
- "engines": {
- "node": ">=8.9",
- "npm": ">= 3.0.0"
- },
- "browserslist": [
- "> 1%",
- "last 2 versions"
- ]
-}
+{
+ "name": "vue-element-admin",
+ "version": "4.2.1",
+ "description": "A magical vue admin. An out-of-box UI solution for enterprise applications. Newest development stack of vue. Lots of awesome features",
+ "author": "Pan ",
+ "license": "MIT",
+ "scripts": {
+ "dev": "vue-cli-service serve",
+ "build:prod": "vue-cli-service build",
+ "build:stage": "vue-cli-service build --mode staging",
+ "preview": "node build/index.js --preview",
+ "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",
+ "new": "plop"
+ },
+ "husky": {
+ "hooks": {
+ "pre-commit": "lint-staged"
+ }
+ },
+ "lint-staged": {
+ "src/**/*.{js,vue}": [
+ "eslint --fix",
+ "git add"
+ ]
+ },
+ "keywords": [
+ "vue",
+ "admin",
+ "dashboard",
+ "element-ui",
+ "boilerplate",
+ "admin-template",
+ "management-system"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/PanJiaChen/vue-element-admin.git"
+ },
+ "bugs": {
+ "url": "https://github.com/PanJiaChen/vue-element-admin/issues"
+ },
+ "dependencies": {
+ "@babel/polyfill": "^7.12.1",
+ "@riophae/vue-treeselect": "^0.4.0",
+ "axios": "0.18.1",
+ "babel-polyfill": "^6.26.0",
+ "clipboard": "2.0.4",
+ "codemirror": "5.45.0",
+ "driver.js": "0.9.5",
+ "dropzone": "5.5.1",
+ "echarts": "4.2.1",
+ "el-table-transfer": "^0.1.4",
+ "element-ui": "2.13.0",
+ "file-saver": "2.0.1",
+ "fuse.js": "3.4.4",
+ "js-cookie": "2.2.0",
+ "jsonlint": "1.6.3",
+ "jszip": "3.2.1",
+ "lockr": "^0.8.5",
+ "moment": "^2.29.1",
+ "normalize.css": "^7.0.0",
+ "nprogress": "0.2.0",
+ "path-to-regexp": "2.4.0",
+ "pinyin": "2.9.0",
+ "screenfull": "4.2.0",
+ "showdown": "^1.9.1",
+ "sortablejs": "1.8.4",
+ "tui-editor": "1.3.3",
+ "v-distpicker": "^1.2.7",
+ "vue": "2.6.10",
+ "vue-bus": "^1.2.1",
+ "vue-count-to": "1.0.13",
+ "vue-cropper": "^0.5.5",
+ "vue-i18n": "7.3.2",
+ "vue-infinite-scroll": "^2.0.2",
+ "vue-lazyload": "^1.3.3",
+ "vue-loader": "^15.9.5",
+ "vue-router": "3.0.2",
+ "vue-splitpane": "1.0.4",
+ "vuedraggable": "^2.24.3",
+ "vuex": "3.1.0",
+ "xlsx": "0.14.1"
+ },
+ "devDependencies": {
+ "@babel/core": "7.0.0",
+ "@babel/register": "7.0.0",
+ "@vue/cli-plugin-babel": "3.5.3",
+ "@vue/cli-plugin-eslint": "^3.9.1",
+ "@vue/cli-plugin-unit-jest": "^4.5.9",
+ "@vue/cli-service": "^4.5.9",
+ "@vue/test-utils": "1.0.0-beta.29",
+ "autoprefixer": "^9.5.1",
+ "babel-core": "7.0.0-bridge.0",
+ "babel-eslint": "10.0.1",
+ "babel-jest": "^26.6.3",
+ "chalk": "2.4.2",
+ "chokidar": "2.1.5",
+ "connect": "3.6.6",
+ "eslint": "5.15.3",
+ "eslint-plugin-vue": "5.2.2",
+ "html-webpack-plugin": "3.2.0",
+ "husky": "1.3.1",
+ "lint-staged": "8.1.5",
+ "mockjs": "1.0.1-beta3",
+ "node-sass": "^4.14.1",
+ "plop": "2.3.0",
+ "postcss-loader": "^4.0.4",
+ "postcss-px-to-viewport": "^1.1.1",
+ "runjs": "^4.3.2",
+ "sass-loader": "^7.1.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.0",
+ "vue-happy-scroll": "^2.1.1",
+ "vue-template-compiler": "2.6.10",
+ "webpack": "^5.54.0"
+ },
+ "engines": {
+ "node": ">=8.9",
+ "npm": ">= 3.0.0"
+ },
+ "browserslist": [
+ "> 1%",
+ "last 2 versions"
+ ]
+}
diff --git a/vue/plop-templates/component/index.hbs b/vue/plop-templates/component/index.hbs
index 76610552..080ac248 100644
--- a/vue/plop-templates/component/index.hbs
+++ b/vue/plop-templates/component/index.hbs
@@ -1,26 +1,26 @@
-{{#if template}}
-
-
-
-{{/if}}
-
-{{#if script}}
-
-{{/if}}
-
-{{#if style}}
-
-{{/if}}
+{{#if template}}
+
+
+
+{{/if}}
+
+{{#if script}}
+
+{{/if}}
+
+{{#if style}}
+
+{{/if}}
diff --git a/vue/plop-templates/component/prompt.js b/vue/plop-templates/component/prompt.js
index 3723e8e1..6b60eeca 100644
--- a/vue/plop-templates/component/prompt.js
+++ b/vue/plop-templates/component/prompt.js
@@ -1,55 +1,55 @@
-const { notEmpty } = require('../utils.js')
-
-module.exports = {
- description: 'generate vue component',
- prompts: [{
- type: 'input',
- name: 'name',
- message: 'component name please',
- validate: notEmpty('name')
- },
- {
- type: 'checkbox',
- name: 'blocks',
- message: 'Blocks:',
- choices: [{
- name: '',
- value: 'template',
- checked: true
- },
- {
- name: '
-{{/if}}
-
-{{#if style}}
-
-{{/if}}
+{{#if template}}
+
+
+
+{{/if}}
+
+{{#if script}}
+
+{{/if}}
+
+{{#if style}}
+
+{{/if}}
diff --git a/vue/plop-templates/view/prompt.js b/vue/plop-templates/view/prompt.js
index 1d490ee8..d04b23e9 100644
--- a/vue/plop-templates/view/prompt.js
+++ b/vue/plop-templates/view/prompt.js
@@ -1,55 +1,55 @@
-const { notEmpty } = require('../utils.js')
-
-module.exports = {
- description: 'generate a view',
- prompts: [{
- type: 'input',
- name: 'name',
- message: 'view name please',
- validate: notEmpty('name')
- },
- {
- type: 'checkbox',
- name: 'blocks',
- message: 'Blocks:',
- choices: [{
- name: '',
- value: 'template',
- checked: true
- },
- {
- name: ' -->
-
-
-
-
-
-
-