diff --git a/mock/config.js b/mock/config.js
new file mode 100644
index 0000000..7d111e0
--- /dev/null
+++ b/mock/config.js
@@ -0,0 +1,15 @@
+// import { param2Obj } from './utils'
+
+const baseConfig = {
+ kaptcha: true
+}
+
+export default {
+ baseconfig: res => {
+ return {
+ code: 200,
+ success: true,
+ data: baseConfig
+ }
+ }
+}
diff --git a/mock/config.js b/mock/config.js
new file mode 100644
index 0000000..7d111e0
--- /dev/null
+++ b/mock/config.js
@@ -0,0 +1,15 @@
+// import { param2Obj } from './utils'
+
+const baseConfig = {
+ kaptcha: true
+}
+
+export default {
+ baseconfig: res => {
+ return {
+ code: 200,
+ success: true,
+ data: baseConfig
+ }
+ }
+}
diff --git a/mock/index.js b/mock/index.js
new file mode 100644
index 0000000..d2713dd
--- /dev/null
+++ b/mock/index.js
@@ -0,0 +1,70 @@
+const Mock = require('mockjs')
+const { param2Obj } = require('./utils')
+
+const user = require('./system/user')
+const resource = require('./system/resource')
+const dict = require('./system/dict')
+const dept = require('./system/dept')
+const area = require('./system/area')
+const role = require('./system/role')
+const log = require('./system/log')
+const config = require('./system/config')
+const search = require('./remote-search')
+
+const mocks = [
+ ...user,
+ ...resource,
+ ...dict,
+ ...area,
+ ...dept,
+ ...role,
+ ...log,
+ ...config,
+ ...search
+]
+
+// for front mock
+// please use it cautiously, it will redefine XMLHttpRequest,
+// which will cause many of your third-party libraries to be invalidated(like progress event).
+function mockXHR() {
+ // mock patch
+ // https://github.com/nuysoft/Mock/issues/300
+ Mock.XHR.prototype.proxy_send = Mock.XHR.prototype.send
+ Mock.XHR.prototype.send = function() {
+ if (this.custom.xhr) {
+ this.custom.xhr.withCredentials = this.withCredentials || false
+
+ if (this.responseType) {
+ this.custom.xhr.responseType = this.responseType
+ }
+ }
+ this.proxy_send(...arguments)
+ }
+
+ function XHR2ExpressReqWrap(respond) {
+ return function(options) {
+ let result = null
+ if (respond instanceof Function) {
+ const { body, type, url } = options
+ // https://expressjs.com/en/4x/api.html#req
+ result = respond({
+ method: type,
+ body: JSON.parse(body),
+ query: param2Obj(url)
+ })
+ } else {
+ result = respond
+ }
+ return Mock.mock(result)
+ }
+ }
+
+ for (const i of mocks) {
+ Mock.mock(new RegExp(i.url), i.type || 'get', XHR2ExpressReqWrap(i.response))
+ }
+}
+
+module.exports = {
+ mocks,
+ mockXHR
+}
diff --git a/mock/config.js b/mock/config.js
new file mode 100644
index 0000000..7d111e0
--- /dev/null
+++ b/mock/config.js
@@ -0,0 +1,15 @@
+// import { param2Obj } from './utils'
+
+const baseConfig = {
+ kaptcha: true
+}
+
+export default {
+ baseconfig: res => {
+ return {
+ code: 200,
+ success: true,
+ data: baseConfig
+ }
+ }
+}
diff --git a/mock/index.js b/mock/index.js
new file mode 100644
index 0000000..d2713dd
--- /dev/null
+++ b/mock/index.js
@@ -0,0 +1,70 @@
+const Mock = require('mockjs')
+const { param2Obj } = require('./utils')
+
+const user = require('./system/user')
+const resource = require('./system/resource')
+const dict = require('./system/dict')
+const dept = require('./system/dept')
+const area = require('./system/area')
+const role = require('./system/role')
+const log = require('./system/log')
+const config = require('./system/config')
+const search = require('./remote-search')
+
+const mocks = [
+ ...user,
+ ...resource,
+ ...dict,
+ ...area,
+ ...dept,
+ ...role,
+ ...log,
+ ...config,
+ ...search
+]
+
+// for front mock
+// please use it cautiously, it will redefine XMLHttpRequest,
+// which will cause many of your third-party libraries to be invalidated(like progress event).
+function mockXHR() {
+ // mock patch
+ // https://github.com/nuysoft/Mock/issues/300
+ Mock.XHR.prototype.proxy_send = Mock.XHR.prototype.send
+ Mock.XHR.prototype.send = function() {
+ if (this.custom.xhr) {
+ this.custom.xhr.withCredentials = this.withCredentials || false
+
+ if (this.responseType) {
+ this.custom.xhr.responseType = this.responseType
+ }
+ }
+ this.proxy_send(...arguments)
+ }
+
+ function XHR2ExpressReqWrap(respond) {
+ return function(options) {
+ let result = null
+ if (respond instanceof Function) {
+ const { body, type, url } = options
+ // https://expressjs.com/en/4x/api.html#req
+ result = respond({
+ method: type,
+ body: JSON.parse(body),
+ query: param2Obj(url)
+ })
+ } else {
+ result = respond
+ }
+ return Mock.mock(result)
+ }
+ }
+
+ for (const i of mocks) {
+ Mock.mock(new RegExp(i.url), i.type || 'get', XHR2ExpressReqWrap(i.response))
+ }
+}
+
+module.exports = {
+ mocks,
+ mockXHR
+}
diff --git a/mock/mock-server.js b/mock/mock-server.js
new file mode 100644
index 0000000..8941ec0
--- /dev/null
+++ b/mock/mock-server.js
@@ -0,0 +1,81 @@
+const chokidar = require('chokidar')
+const bodyParser = require('body-parser')
+const chalk = require('chalk')
+const path = require('path')
+const Mock = require('mockjs')
+
+const mockDir = path.join(process.cwd(), 'mock')
+
+function registerRoutes(app) {
+ let mockLastIndex
+ const { mocks } = require('./index.js')
+ const mocksForServer = mocks.map(route => {
+ return responseFake(route.url, route.type, route.response)
+ })
+ for (const mock of mocksForServer) {
+ app[mock.type](mock.url, mock.response)
+ mockLastIndex = app._router.stack.length
+ }
+ const mockRoutesLength = Object.keys(mocksForServer).length
+ return {
+ mockRoutesLength: mockRoutesLength,
+ mockStartIndex: mockLastIndex - mockRoutesLength
+ }
+}
+
+function unregisterRoutes() {
+ Object.keys(require.cache).forEach(i => {
+ if (i.includes(mockDir)) {
+ delete require.cache[require.resolve(i)]
+ }
+ })
+}
+
+// for mock server
+const responseFake = (url, type, respond) => {
+ return {
+ url: new RegExp(`${process.env.VUE_APP_BASE_API}${url}`),
+ type: type || 'get',
+ response(req, res) {
+ console.log('request invoke:' + req.path)
+ res.json(Mock.mock(respond instanceof Function ? respond(req, res) : respond))
+ }
+ }
+}
+
+module.exports = app => {
+ // parse app.body
+ // https://expressjs.com/en/4x/api.html#req.body
+ app.use(bodyParser.json())
+ app.use(bodyParser.urlencoded({
+ extended: true
+ }))
+
+ const mockRoutes = registerRoutes(app)
+ var mockRoutesLength = mockRoutes.mockRoutesLength
+ var mockStartIndex = mockRoutes.mockStartIndex
+
+ // watch files, hot reload mock server
+ chokidar.watch(mockDir, {
+ ignored: /mock-server/,
+ ignoreInitial: true
+ }).on('all', (event, path) => {
+ if (event === 'change' || event === 'add') {
+ try {
+ // remove mock routes stack
+ app._router.stack.splice(mockStartIndex, mockRoutesLength)
+
+ // clear routes cache
+ unregisterRoutes()
+
+ const mockRoutes = registerRoutes(app)
+ mockRoutesLength = mockRoutes.mockRoutesLength
+ mockStartIndex = mockRoutes.mockStartIndex
+
+ console.log(chalk.magentaBright(`\n > Mock Server hot reload success! changed ${path}`))
+ } catch (error) {
+ console.log(chalk.redBright(error))
+ }
+ }
+ })
+}
diff --git a/mock/config.js b/mock/config.js
new file mode 100644
index 0000000..7d111e0
--- /dev/null
+++ b/mock/config.js
@@ -0,0 +1,15 @@
+// import { param2Obj } from './utils'
+
+const baseConfig = {
+ kaptcha: true
+}
+
+export default {
+ baseconfig: res => {
+ return {
+ code: 200,
+ success: true,
+ data: baseConfig
+ }
+ }
+}
diff --git a/mock/index.js b/mock/index.js
new file mode 100644
index 0000000..d2713dd
--- /dev/null
+++ b/mock/index.js
@@ -0,0 +1,70 @@
+const Mock = require('mockjs')
+const { param2Obj } = require('./utils')
+
+const user = require('./system/user')
+const resource = require('./system/resource')
+const dict = require('./system/dict')
+const dept = require('./system/dept')
+const area = require('./system/area')
+const role = require('./system/role')
+const log = require('./system/log')
+const config = require('./system/config')
+const search = require('./remote-search')
+
+const mocks = [
+ ...user,
+ ...resource,
+ ...dict,
+ ...area,
+ ...dept,
+ ...role,
+ ...log,
+ ...config,
+ ...search
+]
+
+// for front mock
+// please use it cautiously, it will redefine XMLHttpRequest,
+// which will cause many of your third-party libraries to be invalidated(like progress event).
+function mockXHR() {
+ // mock patch
+ // https://github.com/nuysoft/Mock/issues/300
+ Mock.XHR.prototype.proxy_send = Mock.XHR.prototype.send
+ Mock.XHR.prototype.send = function() {
+ if (this.custom.xhr) {
+ this.custom.xhr.withCredentials = this.withCredentials || false
+
+ if (this.responseType) {
+ this.custom.xhr.responseType = this.responseType
+ }
+ }
+ this.proxy_send(...arguments)
+ }
+
+ function XHR2ExpressReqWrap(respond) {
+ return function(options) {
+ let result = null
+ if (respond instanceof Function) {
+ const { body, type, url } = options
+ // https://expressjs.com/en/4x/api.html#req
+ result = respond({
+ method: type,
+ body: JSON.parse(body),
+ query: param2Obj(url)
+ })
+ } else {
+ result = respond
+ }
+ return Mock.mock(result)
+ }
+ }
+
+ for (const i of mocks) {
+ Mock.mock(new RegExp(i.url), i.type || 'get', XHR2ExpressReqWrap(i.response))
+ }
+}
+
+module.exports = {
+ mocks,
+ mockXHR
+}
diff --git a/mock/mock-server.js b/mock/mock-server.js
new file mode 100644
index 0000000..8941ec0
--- /dev/null
+++ b/mock/mock-server.js
@@ -0,0 +1,81 @@
+const chokidar = require('chokidar')
+const bodyParser = require('body-parser')
+const chalk = require('chalk')
+const path = require('path')
+const Mock = require('mockjs')
+
+const mockDir = path.join(process.cwd(), 'mock')
+
+function registerRoutes(app) {
+ let mockLastIndex
+ const { mocks } = require('./index.js')
+ const mocksForServer = mocks.map(route => {
+ return responseFake(route.url, route.type, route.response)
+ })
+ for (const mock of mocksForServer) {
+ app[mock.type](mock.url, mock.response)
+ mockLastIndex = app._router.stack.length
+ }
+ const mockRoutesLength = Object.keys(mocksForServer).length
+ return {
+ mockRoutesLength: mockRoutesLength,
+ mockStartIndex: mockLastIndex - mockRoutesLength
+ }
+}
+
+function unregisterRoutes() {
+ Object.keys(require.cache).forEach(i => {
+ if (i.includes(mockDir)) {
+ delete require.cache[require.resolve(i)]
+ }
+ })
+}
+
+// for mock server
+const responseFake = (url, type, respond) => {
+ return {
+ url: new RegExp(`${process.env.VUE_APP_BASE_API}${url}`),
+ type: type || 'get',
+ response(req, res) {
+ console.log('request invoke:' + req.path)
+ res.json(Mock.mock(respond instanceof Function ? respond(req, res) : respond))
+ }
+ }
+}
+
+module.exports = app => {
+ // parse app.body
+ // https://expressjs.com/en/4x/api.html#req.body
+ app.use(bodyParser.json())
+ app.use(bodyParser.urlencoded({
+ extended: true
+ }))
+
+ const mockRoutes = registerRoutes(app)
+ var mockRoutesLength = mockRoutes.mockRoutesLength
+ var mockStartIndex = mockRoutes.mockStartIndex
+
+ // watch files, hot reload mock server
+ chokidar.watch(mockDir, {
+ ignored: /mock-server/,
+ ignoreInitial: true
+ }).on('all', (event, path) => {
+ if (event === 'change' || event === 'add') {
+ try {
+ // remove mock routes stack
+ app._router.stack.splice(mockStartIndex, mockRoutesLength)
+
+ // clear routes cache
+ unregisterRoutes()
+
+ const mockRoutes = registerRoutes(app)
+ mockRoutesLength = mockRoutes.mockRoutesLength
+ mockStartIndex = mockRoutes.mockStartIndex
+
+ console.log(chalk.magentaBright(`\n > Mock Server hot reload success! changed ${path}`))
+ } catch (error) {
+ console.log(chalk.redBright(error))
+ }
+ }
+ })
+}
diff --git a/mock/remote-search.js b/mock/remote-search.js
new file mode 100644
index 0000000..b5164b1
--- /dev/null
+++ b/mock/remote-search.js
@@ -0,0 +1,51 @@
+const Mock = require('mockjs')
+
+const NameList = []
+const count = 100
+
+for (let i = 0; i < count; i++) {
+ NameList.push(Mock.mock({
+ name: '@first'
+ }))
+}
+NameList.push({ name: 'mock-Pan' })
+
+module.exports = [
+ // username search
+ {
+ url: '/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: '/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/mock/config.js b/mock/config.js
new file mode 100644
index 0000000..7d111e0
--- /dev/null
+++ b/mock/config.js
@@ -0,0 +1,15 @@
+// import { param2Obj } from './utils'
+
+const baseConfig = {
+ kaptcha: true
+}
+
+export default {
+ baseconfig: res => {
+ return {
+ code: 200,
+ success: true,
+ data: baseConfig
+ }
+ }
+}
diff --git a/mock/index.js b/mock/index.js
new file mode 100644
index 0000000..d2713dd
--- /dev/null
+++ b/mock/index.js
@@ -0,0 +1,70 @@
+const Mock = require('mockjs')
+const { param2Obj } = require('./utils')
+
+const user = require('./system/user')
+const resource = require('./system/resource')
+const dict = require('./system/dict')
+const dept = require('./system/dept')
+const area = require('./system/area')
+const role = require('./system/role')
+const log = require('./system/log')
+const config = require('./system/config')
+const search = require('./remote-search')
+
+const mocks = [
+ ...user,
+ ...resource,
+ ...dict,
+ ...area,
+ ...dept,
+ ...role,
+ ...log,
+ ...config,
+ ...search
+]
+
+// for front mock
+// please use it cautiously, it will redefine XMLHttpRequest,
+// which will cause many of your third-party libraries to be invalidated(like progress event).
+function mockXHR() {
+ // mock patch
+ // https://github.com/nuysoft/Mock/issues/300
+ Mock.XHR.prototype.proxy_send = Mock.XHR.prototype.send
+ Mock.XHR.prototype.send = function() {
+ if (this.custom.xhr) {
+ this.custom.xhr.withCredentials = this.withCredentials || false
+
+ if (this.responseType) {
+ this.custom.xhr.responseType = this.responseType
+ }
+ }
+ this.proxy_send(...arguments)
+ }
+
+ function XHR2ExpressReqWrap(respond) {
+ return function(options) {
+ let result = null
+ if (respond instanceof Function) {
+ const { body, type, url } = options
+ // https://expressjs.com/en/4x/api.html#req
+ result = respond({
+ method: type,
+ body: JSON.parse(body),
+ query: param2Obj(url)
+ })
+ } else {
+ result = respond
+ }
+ return Mock.mock(result)
+ }
+ }
+
+ for (const i of mocks) {
+ Mock.mock(new RegExp(i.url), i.type || 'get', XHR2ExpressReqWrap(i.response))
+ }
+}
+
+module.exports = {
+ mocks,
+ mockXHR
+}
diff --git a/mock/mock-server.js b/mock/mock-server.js
new file mode 100644
index 0000000..8941ec0
--- /dev/null
+++ b/mock/mock-server.js
@@ -0,0 +1,81 @@
+const chokidar = require('chokidar')
+const bodyParser = require('body-parser')
+const chalk = require('chalk')
+const path = require('path')
+const Mock = require('mockjs')
+
+const mockDir = path.join(process.cwd(), 'mock')
+
+function registerRoutes(app) {
+ let mockLastIndex
+ const { mocks } = require('./index.js')
+ const mocksForServer = mocks.map(route => {
+ return responseFake(route.url, route.type, route.response)
+ })
+ for (const mock of mocksForServer) {
+ app[mock.type](mock.url, mock.response)
+ mockLastIndex = app._router.stack.length
+ }
+ const mockRoutesLength = Object.keys(mocksForServer).length
+ return {
+ mockRoutesLength: mockRoutesLength,
+ mockStartIndex: mockLastIndex - mockRoutesLength
+ }
+}
+
+function unregisterRoutes() {
+ Object.keys(require.cache).forEach(i => {
+ if (i.includes(mockDir)) {
+ delete require.cache[require.resolve(i)]
+ }
+ })
+}
+
+// for mock server
+const responseFake = (url, type, respond) => {
+ return {
+ url: new RegExp(`${process.env.VUE_APP_BASE_API}${url}`),
+ type: type || 'get',
+ response(req, res) {
+ console.log('request invoke:' + req.path)
+ res.json(Mock.mock(respond instanceof Function ? respond(req, res) : respond))
+ }
+ }
+}
+
+module.exports = app => {
+ // parse app.body
+ // https://expressjs.com/en/4x/api.html#req.body
+ app.use(bodyParser.json())
+ app.use(bodyParser.urlencoded({
+ extended: true
+ }))
+
+ const mockRoutes = registerRoutes(app)
+ var mockRoutesLength = mockRoutes.mockRoutesLength
+ var mockStartIndex = mockRoutes.mockStartIndex
+
+ // watch files, hot reload mock server
+ chokidar.watch(mockDir, {
+ ignored: /mock-server/,
+ ignoreInitial: true
+ }).on('all', (event, path) => {
+ if (event === 'change' || event === 'add') {
+ try {
+ // remove mock routes stack
+ app._router.stack.splice(mockStartIndex, mockRoutesLength)
+
+ // clear routes cache
+ unregisterRoutes()
+
+ const mockRoutes = registerRoutes(app)
+ mockRoutesLength = mockRoutes.mockRoutesLength
+ mockStartIndex = mockRoutes.mockStartIndex
+
+ console.log(chalk.magentaBright(`\n > Mock Server hot reload success! changed ${path}`))
+ } catch (error) {
+ console.log(chalk.redBright(error))
+ }
+ }
+ })
+}
diff --git a/mock/remote-search.js b/mock/remote-search.js
new file mode 100644
index 0000000..b5164b1
--- /dev/null
+++ b/mock/remote-search.js
@@ -0,0 +1,51 @@
+const Mock = require('mockjs')
+
+const NameList = []
+const count = 100
+
+for (let i = 0; i < count; i++) {
+ NameList.push(Mock.mock({
+ name: '@first'
+ }))
+}
+NameList.push({ name: 'mock-Pan' })
+
+module.exports = [
+ // username search
+ {
+ url: '/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: '/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/mock/system/area.js b/mock/system/area.js
new file mode 100644
index 0000000..1586661
--- /dev/null
+++ b/mock/system/area.js
@@ -0,0 +1,130 @@
+const list = [
+ {
+ 'id': '11010100102',
+ 'lat': '',
+ 'level': 5,
+ 'levelName': '社区',
+ 'lng': '',
+ 'name': '测试社区3',
+ 'num': 1,
+ 'pid': '110101001',
+ 'pids': '[0],[110000],[110100],[110101],[110101001],',
+ 'simplename': '测试社区2'
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/area/listPage',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: list,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/area/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: [
+ {
+ 'id': '110000',
+ 'pid': '0',
+ 'name': '北京市',
+ 'level': 1,
+ 'pids': [0],
+ 'levelName': '省级',
+ 'simplename': '北京'
+ }
+ ]
+ }
+ }
+ },
+ {
+ url: '/area/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/area/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/area/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/code/levelType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '省级',
+ 'id': '166',
+ 'value': '1'
+ },
+ {
+ 'name': '市级',
+ 'id': '167',
+ 'value': '2'
+ },
+ {
+ 'name': '区级',
+ 'id': '168',
+ 'value': '3'
+ },
+ {
+ 'name': '街道',
+ 'id': '169',
+ 'value': '4'
+ },
+ {
+ 'name': '社区',
+ 'id': '170',
+ 'value': '5'
+ },
+ {
+ 'name': '网格',
+ 'id': '171',
+ 'value': '6'
+ },
+ {
+ 'name': '责任网格',
+ 'id': '172',
+ 'value': '7'
+ }
+ ]
+ }
+ }
+ }
+]
diff --git a/mock/config.js b/mock/config.js
new file mode 100644
index 0000000..7d111e0
--- /dev/null
+++ b/mock/config.js
@@ -0,0 +1,15 @@
+// import { param2Obj } from './utils'
+
+const baseConfig = {
+ kaptcha: true
+}
+
+export default {
+ baseconfig: res => {
+ return {
+ code: 200,
+ success: true,
+ data: baseConfig
+ }
+ }
+}
diff --git a/mock/index.js b/mock/index.js
new file mode 100644
index 0000000..d2713dd
--- /dev/null
+++ b/mock/index.js
@@ -0,0 +1,70 @@
+const Mock = require('mockjs')
+const { param2Obj } = require('./utils')
+
+const user = require('./system/user')
+const resource = require('./system/resource')
+const dict = require('./system/dict')
+const dept = require('./system/dept')
+const area = require('./system/area')
+const role = require('./system/role')
+const log = require('./system/log')
+const config = require('./system/config')
+const search = require('./remote-search')
+
+const mocks = [
+ ...user,
+ ...resource,
+ ...dict,
+ ...area,
+ ...dept,
+ ...role,
+ ...log,
+ ...config,
+ ...search
+]
+
+// for front mock
+// please use it cautiously, it will redefine XMLHttpRequest,
+// which will cause many of your third-party libraries to be invalidated(like progress event).
+function mockXHR() {
+ // mock patch
+ // https://github.com/nuysoft/Mock/issues/300
+ Mock.XHR.prototype.proxy_send = Mock.XHR.prototype.send
+ Mock.XHR.prototype.send = function() {
+ if (this.custom.xhr) {
+ this.custom.xhr.withCredentials = this.withCredentials || false
+
+ if (this.responseType) {
+ this.custom.xhr.responseType = this.responseType
+ }
+ }
+ this.proxy_send(...arguments)
+ }
+
+ function XHR2ExpressReqWrap(respond) {
+ return function(options) {
+ let result = null
+ if (respond instanceof Function) {
+ const { body, type, url } = options
+ // https://expressjs.com/en/4x/api.html#req
+ result = respond({
+ method: type,
+ body: JSON.parse(body),
+ query: param2Obj(url)
+ })
+ } else {
+ result = respond
+ }
+ return Mock.mock(result)
+ }
+ }
+
+ for (const i of mocks) {
+ Mock.mock(new RegExp(i.url), i.type || 'get', XHR2ExpressReqWrap(i.response))
+ }
+}
+
+module.exports = {
+ mocks,
+ mockXHR
+}
diff --git a/mock/mock-server.js b/mock/mock-server.js
new file mode 100644
index 0000000..8941ec0
--- /dev/null
+++ b/mock/mock-server.js
@@ -0,0 +1,81 @@
+const chokidar = require('chokidar')
+const bodyParser = require('body-parser')
+const chalk = require('chalk')
+const path = require('path')
+const Mock = require('mockjs')
+
+const mockDir = path.join(process.cwd(), 'mock')
+
+function registerRoutes(app) {
+ let mockLastIndex
+ const { mocks } = require('./index.js')
+ const mocksForServer = mocks.map(route => {
+ return responseFake(route.url, route.type, route.response)
+ })
+ for (const mock of mocksForServer) {
+ app[mock.type](mock.url, mock.response)
+ mockLastIndex = app._router.stack.length
+ }
+ const mockRoutesLength = Object.keys(mocksForServer).length
+ return {
+ mockRoutesLength: mockRoutesLength,
+ mockStartIndex: mockLastIndex - mockRoutesLength
+ }
+}
+
+function unregisterRoutes() {
+ Object.keys(require.cache).forEach(i => {
+ if (i.includes(mockDir)) {
+ delete require.cache[require.resolve(i)]
+ }
+ })
+}
+
+// for mock server
+const responseFake = (url, type, respond) => {
+ return {
+ url: new RegExp(`${process.env.VUE_APP_BASE_API}${url}`),
+ type: type || 'get',
+ response(req, res) {
+ console.log('request invoke:' + req.path)
+ res.json(Mock.mock(respond instanceof Function ? respond(req, res) : respond))
+ }
+ }
+}
+
+module.exports = app => {
+ // parse app.body
+ // https://expressjs.com/en/4x/api.html#req.body
+ app.use(bodyParser.json())
+ app.use(bodyParser.urlencoded({
+ extended: true
+ }))
+
+ const mockRoutes = registerRoutes(app)
+ var mockRoutesLength = mockRoutes.mockRoutesLength
+ var mockStartIndex = mockRoutes.mockStartIndex
+
+ // watch files, hot reload mock server
+ chokidar.watch(mockDir, {
+ ignored: /mock-server/,
+ ignoreInitial: true
+ }).on('all', (event, path) => {
+ if (event === 'change' || event === 'add') {
+ try {
+ // remove mock routes stack
+ app._router.stack.splice(mockStartIndex, mockRoutesLength)
+
+ // clear routes cache
+ unregisterRoutes()
+
+ const mockRoutes = registerRoutes(app)
+ mockRoutesLength = mockRoutes.mockRoutesLength
+ mockStartIndex = mockRoutes.mockStartIndex
+
+ console.log(chalk.magentaBright(`\n > Mock Server hot reload success! changed ${path}`))
+ } catch (error) {
+ console.log(chalk.redBright(error))
+ }
+ }
+ })
+}
diff --git a/mock/remote-search.js b/mock/remote-search.js
new file mode 100644
index 0000000..b5164b1
--- /dev/null
+++ b/mock/remote-search.js
@@ -0,0 +1,51 @@
+const Mock = require('mockjs')
+
+const NameList = []
+const count = 100
+
+for (let i = 0; i < count; i++) {
+ NameList.push(Mock.mock({
+ name: '@first'
+ }))
+}
+NameList.push({ name: 'mock-Pan' })
+
+module.exports = [
+ // username search
+ {
+ url: '/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: '/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/mock/system/area.js b/mock/system/area.js
new file mode 100644
index 0000000..1586661
--- /dev/null
+++ b/mock/system/area.js
@@ -0,0 +1,130 @@
+const list = [
+ {
+ 'id': '11010100102',
+ 'lat': '',
+ 'level': 5,
+ 'levelName': '社区',
+ 'lng': '',
+ 'name': '测试社区3',
+ 'num': 1,
+ 'pid': '110101001',
+ 'pids': '[0],[110000],[110100],[110101],[110101001],',
+ 'simplename': '测试社区2'
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/area/listPage',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: list,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/area/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: [
+ {
+ 'id': '110000',
+ 'pid': '0',
+ 'name': '北京市',
+ 'level': 1,
+ 'pids': [0],
+ 'levelName': '省级',
+ 'simplename': '北京'
+ }
+ ]
+ }
+ }
+ },
+ {
+ url: '/area/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/area/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/area/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/code/levelType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '省级',
+ 'id': '166',
+ 'value': '1'
+ },
+ {
+ 'name': '市级',
+ 'id': '167',
+ 'value': '2'
+ },
+ {
+ 'name': '区级',
+ 'id': '168',
+ 'value': '3'
+ },
+ {
+ 'name': '街道',
+ 'id': '169',
+ 'value': '4'
+ },
+ {
+ 'name': '社区',
+ 'id': '170',
+ 'value': '5'
+ },
+ {
+ 'name': '网格',
+ 'id': '171',
+ 'value': '6'
+ },
+ {
+ 'name': '责任网格',
+ 'id': '172',
+ 'value': '7'
+ }
+ ]
+ }
+ }
+ }
+]
diff --git a/mock/system/config.js b/mock/system/config.js
new file mode 100644
index 0000000..652e41d
--- /dev/null
+++ b/mock/system/config.js
@@ -0,0 +1,18 @@
+module.exports = [
+ {
+ url: '/config/baseConfig',
+ type: 'get',
+ response: _ => {
+ return {
+ 'code': 200,
+ 'data': {
+ 'kaptcha': false,
+ 'publicKey': 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCu5k8gcTFJy5UtMfmtKiR3f/EcUe93kzfteRj6+sM5fHRvOib82+uqQMjgaRZiMcr3HiHIFY5vA6c+Rfb5R2COitoOhxyA9U2eLXknzxLUQIAqXAvKQO8KnerA1Qjcds7xhJB2XPhWFlY4RVtMT2wr2lMd29QDE4F/kzyDhNBpxwIDAQAB',
+ 'sid': 'f390b7d7-337b-431b-be22-fb860a6c04d4'
+ },
+ 'message': '请求成功',
+ 'success': true
+ }
+ }
+ }
+]
diff --git a/mock/config.js b/mock/config.js
new file mode 100644
index 0000000..7d111e0
--- /dev/null
+++ b/mock/config.js
@@ -0,0 +1,15 @@
+// import { param2Obj } from './utils'
+
+const baseConfig = {
+ kaptcha: true
+}
+
+export default {
+ baseconfig: res => {
+ return {
+ code: 200,
+ success: true,
+ data: baseConfig
+ }
+ }
+}
diff --git a/mock/index.js b/mock/index.js
new file mode 100644
index 0000000..d2713dd
--- /dev/null
+++ b/mock/index.js
@@ -0,0 +1,70 @@
+const Mock = require('mockjs')
+const { param2Obj } = require('./utils')
+
+const user = require('./system/user')
+const resource = require('./system/resource')
+const dict = require('./system/dict')
+const dept = require('./system/dept')
+const area = require('./system/area')
+const role = require('./system/role')
+const log = require('./system/log')
+const config = require('./system/config')
+const search = require('./remote-search')
+
+const mocks = [
+ ...user,
+ ...resource,
+ ...dict,
+ ...area,
+ ...dept,
+ ...role,
+ ...log,
+ ...config,
+ ...search
+]
+
+// for front mock
+// please use it cautiously, it will redefine XMLHttpRequest,
+// which will cause many of your third-party libraries to be invalidated(like progress event).
+function mockXHR() {
+ // mock patch
+ // https://github.com/nuysoft/Mock/issues/300
+ Mock.XHR.prototype.proxy_send = Mock.XHR.prototype.send
+ Mock.XHR.prototype.send = function() {
+ if (this.custom.xhr) {
+ this.custom.xhr.withCredentials = this.withCredentials || false
+
+ if (this.responseType) {
+ this.custom.xhr.responseType = this.responseType
+ }
+ }
+ this.proxy_send(...arguments)
+ }
+
+ function XHR2ExpressReqWrap(respond) {
+ return function(options) {
+ let result = null
+ if (respond instanceof Function) {
+ const { body, type, url } = options
+ // https://expressjs.com/en/4x/api.html#req
+ result = respond({
+ method: type,
+ body: JSON.parse(body),
+ query: param2Obj(url)
+ })
+ } else {
+ result = respond
+ }
+ return Mock.mock(result)
+ }
+ }
+
+ for (const i of mocks) {
+ Mock.mock(new RegExp(i.url), i.type || 'get', XHR2ExpressReqWrap(i.response))
+ }
+}
+
+module.exports = {
+ mocks,
+ mockXHR
+}
diff --git a/mock/mock-server.js b/mock/mock-server.js
new file mode 100644
index 0000000..8941ec0
--- /dev/null
+++ b/mock/mock-server.js
@@ -0,0 +1,81 @@
+const chokidar = require('chokidar')
+const bodyParser = require('body-parser')
+const chalk = require('chalk')
+const path = require('path')
+const Mock = require('mockjs')
+
+const mockDir = path.join(process.cwd(), 'mock')
+
+function registerRoutes(app) {
+ let mockLastIndex
+ const { mocks } = require('./index.js')
+ const mocksForServer = mocks.map(route => {
+ return responseFake(route.url, route.type, route.response)
+ })
+ for (const mock of mocksForServer) {
+ app[mock.type](mock.url, mock.response)
+ mockLastIndex = app._router.stack.length
+ }
+ const mockRoutesLength = Object.keys(mocksForServer).length
+ return {
+ mockRoutesLength: mockRoutesLength,
+ mockStartIndex: mockLastIndex - mockRoutesLength
+ }
+}
+
+function unregisterRoutes() {
+ Object.keys(require.cache).forEach(i => {
+ if (i.includes(mockDir)) {
+ delete require.cache[require.resolve(i)]
+ }
+ })
+}
+
+// for mock server
+const responseFake = (url, type, respond) => {
+ return {
+ url: new RegExp(`${process.env.VUE_APP_BASE_API}${url}`),
+ type: type || 'get',
+ response(req, res) {
+ console.log('request invoke:' + req.path)
+ res.json(Mock.mock(respond instanceof Function ? respond(req, res) : respond))
+ }
+ }
+}
+
+module.exports = app => {
+ // parse app.body
+ // https://expressjs.com/en/4x/api.html#req.body
+ app.use(bodyParser.json())
+ app.use(bodyParser.urlencoded({
+ extended: true
+ }))
+
+ const mockRoutes = registerRoutes(app)
+ var mockRoutesLength = mockRoutes.mockRoutesLength
+ var mockStartIndex = mockRoutes.mockStartIndex
+
+ // watch files, hot reload mock server
+ chokidar.watch(mockDir, {
+ ignored: /mock-server/,
+ ignoreInitial: true
+ }).on('all', (event, path) => {
+ if (event === 'change' || event === 'add') {
+ try {
+ // remove mock routes stack
+ app._router.stack.splice(mockStartIndex, mockRoutesLength)
+
+ // clear routes cache
+ unregisterRoutes()
+
+ const mockRoutes = registerRoutes(app)
+ mockRoutesLength = mockRoutes.mockRoutesLength
+ mockStartIndex = mockRoutes.mockStartIndex
+
+ console.log(chalk.magentaBright(`\n > Mock Server hot reload success! changed ${path}`))
+ } catch (error) {
+ console.log(chalk.redBright(error))
+ }
+ }
+ })
+}
diff --git a/mock/remote-search.js b/mock/remote-search.js
new file mode 100644
index 0000000..b5164b1
--- /dev/null
+++ b/mock/remote-search.js
@@ -0,0 +1,51 @@
+const Mock = require('mockjs')
+
+const NameList = []
+const count = 100
+
+for (let i = 0; i < count; i++) {
+ NameList.push(Mock.mock({
+ name: '@first'
+ }))
+}
+NameList.push({ name: 'mock-Pan' })
+
+module.exports = [
+ // username search
+ {
+ url: '/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: '/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/mock/system/area.js b/mock/system/area.js
new file mode 100644
index 0000000..1586661
--- /dev/null
+++ b/mock/system/area.js
@@ -0,0 +1,130 @@
+const list = [
+ {
+ 'id': '11010100102',
+ 'lat': '',
+ 'level': 5,
+ 'levelName': '社区',
+ 'lng': '',
+ 'name': '测试社区3',
+ 'num': 1,
+ 'pid': '110101001',
+ 'pids': '[0],[110000],[110100],[110101],[110101001],',
+ 'simplename': '测试社区2'
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/area/listPage',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: list,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/area/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: [
+ {
+ 'id': '110000',
+ 'pid': '0',
+ 'name': '北京市',
+ 'level': 1,
+ 'pids': [0],
+ 'levelName': '省级',
+ 'simplename': '北京'
+ }
+ ]
+ }
+ }
+ },
+ {
+ url: '/area/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/area/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/area/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/code/levelType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '省级',
+ 'id': '166',
+ 'value': '1'
+ },
+ {
+ 'name': '市级',
+ 'id': '167',
+ 'value': '2'
+ },
+ {
+ 'name': '区级',
+ 'id': '168',
+ 'value': '3'
+ },
+ {
+ 'name': '街道',
+ 'id': '169',
+ 'value': '4'
+ },
+ {
+ 'name': '社区',
+ 'id': '170',
+ 'value': '5'
+ },
+ {
+ 'name': '网格',
+ 'id': '171',
+ 'value': '6'
+ },
+ {
+ 'name': '责任网格',
+ 'id': '172',
+ 'value': '7'
+ }
+ ]
+ }
+ }
+ }
+]
diff --git a/mock/system/config.js b/mock/system/config.js
new file mode 100644
index 0000000..652e41d
--- /dev/null
+++ b/mock/system/config.js
@@ -0,0 +1,18 @@
+module.exports = [
+ {
+ url: '/config/baseConfig',
+ type: 'get',
+ response: _ => {
+ return {
+ 'code': 200,
+ 'data': {
+ 'kaptcha': false,
+ 'publicKey': 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCu5k8gcTFJy5UtMfmtKiR3f/EcUe93kzfteRj6+sM5fHRvOib82+uqQMjgaRZiMcr3HiHIFY5vA6c+Rfb5R2COitoOhxyA9U2eLXknzxLUQIAqXAvKQO8KnerA1Qjcds7xhJB2XPhWFlY4RVtMT2wr2lMd29QDE4F/kzyDhNBpxwIDAQAB',
+ 'sid': 'f390b7d7-337b-431b-be22-fb860a6c04d4'
+ },
+ 'message': '请求成功',
+ 'success': true
+ }
+ }
+ }
+]
diff --git a/mock/system/dept.js b/mock/system/dept.js
new file mode 100644
index 0000000..2c19c94
--- /dev/null
+++ b/mock/system/dept.js
@@ -0,0 +1,88 @@
+const list = [
+ {
+ 'id': '1',
+ 'simplename': '二分公司',
+ 'fullname': '二分公司',
+ 'num': 1,
+ 'pid': '0',
+ 'pids': '[0,1,2]',
+ 'pName': '顶级',
+ 'version': '',
+ 'tips': ''
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/dept/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: list
+ }
+ }
+ }
+ },
+ {
+ url: '/dept/tree',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: [
+ {
+ 'id': '0',
+ 'pid': '',
+ 'name': '顶级',
+ 'open': 'false',
+ 'checked': ''
+ },
+ {
+ 'id': '26',
+ 'pid': '24',
+ 'name': '运行二所',
+ 'open': 'false',
+ 'checked': ''
+ }
+ ]
+ }
+ }
+ }
+ },
+ {
+ url: '/dept/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dept/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dept/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/config.js b/mock/config.js
new file mode 100644
index 0000000..7d111e0
--- /dev/null
+++ b/mock/config.js
@@ -0,0 +1,15 @@
+// import { param2Obj } from './utils'
+
+const baseConfig = {
+ kaptcha: true
+}
+
+export default {
+ baseconfig: res => {
+ return {
+ code: 200,
+ success: true,
+ data: baseConfig
+ }
+ }
+}
diff --git a/mock/index.js b/mock/index.js
new file mode 100644
index 0000000..d2713dd
--- /dev/null
+++ b/mock/index.js
@@ -0,0 +1,70 @@
+const Mock = require('mockjs')
+const { param2Obj } = require('./utils')
+
+const user = require('./system/user')
+const resource = require('./system/resource')
+const dict = require('./system/dict')
+const dept = require('./system/dept')
+const area = require('./system/area')
+const role = require('./system/role')
+const log = require('./system/log')
+const config = require('./system/config')
+const search = require('./remote-search')
+
+const mocks = [
+ ...user,
+ ...resource,
+ ...dict,
+ ...area,
+ ...dept,
+ ...role,
+ ...log,
+ ...config,
+ ...search
+]
+
+// for front mock
+// please use it cautiously, it will redefine XMLHttpRequest,
+// which will cause many of your third-party libraries to be invalidated(like progress event).
+function mockXHR() {
+ // mock patch
+ // https://github.com/nuysoft/Mock/issues/300
+ Mock.XHR.prototype.proxy_send = Mock.XHR.prototype.send
+ Mock.XHR.prototype.send = function() {
+ if (this.custom.xhr) {
+ this.custom.xhr.withCredentials = this.withCredentials || false
+
+ if (this.responseType) {
+ this.custom.xhr.responseType = this.responseType
+ }
+ }
+ this.proxy_send(...arguments)
+ }
+
+ function XHR2ExpressReqWrap(respond) {
+ return function(options) {
+ let result = null
+ if (respond instanceof Function) {
+ const { body, type, url } = options
+ // https://expressjs.com/en/4x/api.html#req
+ result = respond({
+ method: type,
+ body: JSON.parse(body),
+ query: param2Obj(url)
+ })
+ } else {
+ result = respond
+ }
+ return Mock.mock(result)
+ }
+ }
+
+ for (const i of mocks) {
+ Mock.mock(new RegExp(i.url), i.type || 'get', XHR2ExpressReqWrap(i.response))
+ }
+}
+
+module.exports = {
+ mocks,
+ mockXHR
+}
diff --git a/mock/mock-server.js b/mock/mock-server.js
new file mode 100644
index 0000000..8941ec0
--- /dev/null
+++ b/mock/mock-server.js
@@ -0,0 +1,81 @@
+const chokidar = require('chokidar')
+const bodyParser = require('body-parser')
+const chalk = require('chalk')
+const path = require('path')
+const Mock = require('mockjs')
+
+const mockDir = path.join(process.cwd(), 'mock')
+
+function registerRoutes(app) {
+ let mockLastIndex
+ const { mocks } = require('./index.js')
+ const mocksForServer = mocks.map(route => {
+ return responseFake(route.url, route.type, route.response)
+ })
+ for (const mock of mocksForServer) {
+ app[mock.type](mock.url, mock.response)
+ mockLastIndex = app._router.stack.length
+ }
+ const mockRoutesLength = Object.keys(mocksForServer).length
+ return {
+ mockRoutesLength: mockRoutesLength,
+ mockStartIndex: mockLastIndex - mockRoutesLength
+ }
+}
+
+function unregisterRoutes() {
+ Object.keys(require.cache).forEach(i => {
+ if (i.includes(mockDir)) {
+ delete require.cache[require.resolve(i)]
+ }
+ })
+}
+
+// for mock server
+const responseFake = (url, type, respond) => {
+ return {
+ url: new RegExp(`${process.env.VUE_APP_BASE_API}${url}`),
+ type: type || 'get',
+ response(req, res) {
+ console.log('request invoke:' + req.path)
+ res.json(Mock.mock(respond instanceof Function ? respond(req, res) : respond))
+ }
+ }
+}
+
+module.exports = app => {
+ // parse app.body
+ // https://expressjs.com/en/4x/api.html#req.body
+ app.use(bodyParser.json())
+ app.use(bodyParser.urlencoded({
+ extended: true
+ }))
+
+ const mockRoutes = registerRoutes(app)
+ var mockRoutesLength = mockRoutes.mockRoutesLength
+ var mockStartIndex = mockRoutes.mockStartIndex
+
+ // watch files, hot reload mock server
+ chokidar.watch(mockDir, {
+ ignored: /mock-server/,
+ ignoreInitial: true
+ }).on('all', (event, path) => {
+ if (event === 'change' || event === 'add') {
+ try {
+ // remove mock routes stack
+ app._router.stack.splice(mockStartIndex, mockRoutesLength)
+
+ // clear routes cache
+ unregisterRoutes()
+
+ const mockRoutes = registerRoutes(app)
+ mockRoutesLength = mockRoutes.mockRoutesLength
+ mockStartIndex = mockRoutes.mockStartIndex
+
+ console.log(chalk.magentaBright(`\n > Mock Server hot reload success! changed ${path}`))
+ } catch (error) {
+ console.log(chalk.redBright(error))
+ }
+ }
+ })
+}
diff --git a/mock/remote-search.js b/mock/remote-search.js
new file mode 100644
index 0000000..b5164b1
--- /dev/null
+++ b/mock/remote-search.js
@@ -0,0 +1,51 @@
+const Mock = require('mockjs')
+
+const NameList = []
+const count = 100
+
+for (let i = 0; i < count; i++) {
+ NameList.push(Mock.mock({
+ name: '@first'
+ }))
+}
+NameList.push({ name: 'mock-Pan' })
+
+module.exports = [
+ // username search
+ {
+ url: '/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: '/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/mock/system/area.js b/mock/system/area.js
new file mode 100644
index 0000000..1586661
--- /dev/null
+++ b/mock/system/area.js
@@ -0,0 +1,130 @@
+const list = [
+ {
+ 'id': '11010100102',
+ 'lat': '',
+ 'level': 5,
+ 'levelName': '社区',
+ 'lng': '',
+ 'name': '测试社区3',
+ 'num': 1,
+ 'pid': '110101001',
+ 'pids': '[0],[110000],[110100],[110101],[110101001],',
+ 'simplename': '测试社区2'
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/area/listPage',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: list,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/area/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: [
+ {
+ 'id': '110000',
+ 'pid': '0',
+ 'name': '北京市',
+ 'level': 1,
+ 'pids': [0],
+ 'levelName': '省级',
+ 'simplename': '北京'
+ }
+ ]
+ }
+ }
+ },
+ {
+ url: '/area/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/area/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/area/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/code/levelType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '省级',
+ 'id': '166',
+ 'value': '1'
+ },
+ {
+ 'name': '市级',
+ 'id': '167',
+ 'value': '2'
+ },
+ {
+ 'name': '区级',
+ 'id': '168',
+ 'value': '3'
+ },
+ {
+ 'name': '街道',
+ 'id': '169',
+ 'value': '4'
+ },
+ {
+ 'name': '社区',
+ 'id': '170',
+ 'value': '5'
+ },
+ {
+ 'name': '网格',
+ 'id': '171',
+ 'value': '6'
+ },
+ {
+ 'name': '责任网格',
+ 'id': '172',
+ 'value': '7'
+ }
+ ]
+ }
+ }
+ }
+]
diff --git a/mock/system/config.js b/mock/system/config.js
new file mode 100644
index 0000000..652e41d
--- /dev/null
+++ b/mock/system/config.js
@@ -0,0 +1,18 @@
+module.exports = [
+ {
+ url: '/config/baseConfig',
+ type: 'get',
+ response: _ => {
+ return {
+ 'code': 200,
+ 'data': {
+ 'kaptcha': false,
+ 'publicKey': 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCu5k8gcTFJy5UtMfmtKiR3f/EcUe93kzfteRj6+sM5fHRvOib82+uqQMjgaRZiMcr3HiHIFY5vA6c+Rfb5R2COitoOhxyA9U2eLXknzxLUQIAqXAvKQO8KnerA1Qjcds7xhJB2XPhWFlY4RVtMT2wr2lMd29QDE4F/kzyDhNBpxwIDAQAB',
+ 'sid': 'f390b7d7-337b-431b-be22-fb860a6c04d4'
+ },
+ 'message': '请求成功',
+ 'success': true
+ }
+ }
+ }
+]
diff --git a/mock/system/dept.js b/mock/system/dept.js
new file mode 100644
index 0000000..2c19c94
--- /dev/null
+++ b/mock/system/dept.js
@@ -0,0 +1,88 @@
+const list = [
+ {
+ 'id': '1',
+ 'simplename': '二分公司',
+ 'fullname': '二分公司',
+ 'num': 1,
+ 'pid': '0',
+ 'pids': '[0,1,2]',
+ 'pName': '顶级',
+ 'version': '',
+ 'tips': ''
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/dept/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: list
+ }
+ }
+ }
+ },
+ {
+ url: '/dept/tree',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: [
+ {
+ 'id': '0',
+ 'pid': '',
+ 'name': '顶级',
+ 'open': 'false',
+ 'checked': ''
+ },
+ {
+ 'id': '26',
+ 'pid': '24',
+ 'name': '运行二所',
+ 'open': 'false',
+ 'checked': ''
+ }
+ ]
+ }
+ }
+ }
+ },
+ {
+ url: '/dept/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dept/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dept/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/system/dict.js b/mock/system/dict.js
new file mode 100644
index 0000000..60de4cd
--- /dev/null
+++ b/mock/system/dict.js
@@ -0,0 +1,69 @@
+const list = [
+ {
+ 'code': 'sysStatus',
+ 'num': 0,
+ 'name': '状态',
+ 'pid': '0',
+ 'id': '16',
+ 'detail': '1:启用:1;2:禁用:2',
+ 'tips': ''
+ },
+ {
+ 'code': 'sysSex',
+ 'num': 0,
+ 'name': '性别',
+ 'pid': '0',
+ 'id': '29',
+ 'detail': '1:男:1;2:女:2',
+ 'tips': ''
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/dict/listPage',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: list,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/config.js b/mock/config.js
new file mode 100644
index 0000000..7d111e0
--- /dev/null
+++ b/mock/config.js
@@ -0,0 +1,15 @@
+// import { param2Obj } from './utils'
+
+const baseConfig = {
+ kaptcha: true
+}
+
+export default {
+ baseconfig: res => {
+ return {
+ code: 200,
+ success: true,
+ data: baseConfig
+ }
+ }
+}
diff --git a/mock/index.js b/mock/index.js
new file mode 100644
index 0000000..d2713dd
--- /dev/null
+++ b/mock/index.js
@@ -0,0 +1,70 @@
+const Mock = require('mockjs')
+const { param2Obj } = require('./utils')
+
+const user = require('./system/user')
+const resource = require('./system/resource')
+const dict = require('./system/dict')
+const dept = require('./system/dept')
+const area = require('./system/area')
+const role = require('./system/role')
+const log = require('./system/log')
+const config = require('./system/config')
+const search = require('./remote-search')
+
+const mocks = [
+ ...user,
+ ...resource,
+ ...dict,
+ ...area,
+ ...dept,
+ ...role,
+ ...log,
+ ...config,
+ ...search
+]
+
+// for front mock
+// please use it cautiously, it will redefine XMLHttpRequest,
+// which will cause many of your third-party libraries to be invalidated(like progress event).
+function mockXHR() {
+ // mock patch
+ // https://github.com/nuysoft/Mock/issues/300
+ Mock.XHR.prototype.proxy_send = Mock.XHR.prototype.send
+ Mock.XHR.prototype.send = function() {
+ if (this.custom.xhr) {
+ this.custom.xhr.withCredentials = this.withCredentials || false
+
+ if (this.responseType) {
+ this.custom.xhr.responseType = this.responseType
+ }
+ }
+ this.proxy_send(...arguments)
+ }
+
+ function XHR2ExpressReqWrap(respond) {
+ return function(options) {
+ let result = null
+ if (respond instanceof Function) {
+ const { body, type, url } = options
+ // https://expressjs.com/en/4x/api.html#req
+ result = respond({
+ method: type,
+ body: JSON.parse(body),
+ query: param2Obj(url)
+ })
+ } else {
+ result = respond
+ }
+ return Mock.mock(result)
+ }
+ }
+
+ for (const i of mocks) {
+ Mock.mock(new RegExp(i.url), i.type || 'get', XHR2ExpressReqWrap(i.response))
+ }
+}
+
+module.exports = {
+ mocks,
+ mockXHR
+}
diff --git a/mock/mock-server.js b/mock/mock-server.js
new file mode 100644
index 0000000..8941ec0
--- /dev/null
+++ b/mock/mock-server.js
@@ -0,0 +1,81 @@
+const chokidar = require('chokidar')
+const bodyParser = require('body-parser')
+const chalk = require('chalk')
+const path = require('path')
+const Mock = require('mockjs')
+
+const mockDir = path.join(process.cwd(), 'mock')
+
+function registerRoutes(app) {
+ let mockLastIndex
+ const { mocks } = require('./index.js')
+ const mocksForServer = mocks.map(route => {
+ return responseFake(route.url, route.type, route.response)
+ })
+ for (const mock of mocksForServer) {
+ app[mock.type](mock.url, mock.response)
+ mockLastIndex = app._router.stack.length
+ }
+ const mockRoutesLength = Object.keys(mocksForServer).length
+ return {
+ mockRoutesLength: mockRoutesLength,
+ mockStartIndex: mockLastIndex - mockRoutesLength
+ }
+}
+
+function unregisterRoutes() {
+ Object.keys(require.cache).forEach(i => {
+ if (i.includes(mockDir)) {
+ delete require.cache[require.resolve(i)]
+ }
+ })
+}
+
+// for mock server
+const responseFake = (url, type, respond) => {
+ return {
+ url: new RegExp(`${process.env.VUE_APP_BASE_API}${url}`),
+ type: type || 'get',
+ response(req, res) {
+ console.log('request invoke:' + req.path)
+ res.json(Mock.mock(respond instanceof Function ? respond(req, res) : respond))
+ }
+ }
+}
+
+module.exports = app => {
+ // parse app.body
+ // https://expressjs.com/en/4x/api.html#req.body
+ app.use(bodyParser.json())
+ app.use(bodyParser.urlencoded({
+ extended: true
+ }))
+
+ const mockRoutes = registerRoutes(app)
+ var mockRoutesLength = mockRoutes.mockRoutesLength
+ var mockStartIndex = mockRoutes.mockStartIndex
+
+ // watch files, hot reload mock server
+ chokidar.watch(mockDir, {
+ ignored: /mock-server/,
+ ignoreInitial: true
+ }).on('all', (event, path) => {
+ if (event === 'change' || event === 'add') {
+ try {
+ // remove mock routes stack
+ app._router.stack.splice(mockStartIndex, mockRoutesLength)
+
+ // clear routes cache
+ unregisterRoutes()
+
+ const mockRoutes = registerRoutes(app)
+ mockRoutesLength = mockRoutes.mockRoutesLength
+ mockStartIndex = mockRoutes.mockStartIndex
+
+ console.log(chalk.magentaBright(`\n > Mock Server hot reload success! changed ${path}`))
+ } catch (error) {
+ console.log(chalk.redBright(error))
+ }
+ }
+ })
+}
diff --git a/mock/remote-search.js b/mock/remote-search.js
new file mode 100644
index 0000000..b5164b1
--- /dev/null
+++ b/mock/remote-search.js
@@ -0,0 +1,51 @@
+const Mock = require('mockjs')
+
+const NameList = []
+const count = 100
+
+for (let i = 0; i < count; i++) {
+ NameList.push(Mock.mock({
+ name: '@first'
+ }))
+}
+NameList.push({ name: 'mock-Pan' })
+
+module.exports = [
+ // username search
+ {
+ url: '/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: '/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/mock/system/area.js b/mock/system/area.js
new file mode 100644
index 0000000..1586661
--- /dev/null
+++ b/mock/system/area.js
@@ -0,0 +1,130 @@
+const list = [
+ {
+ 'id': '11010100102',
+ 'lat': '',
+ 'level': 5,
+ 'levelName': '社区',
+ 'lng': '',
+ 'name': '测试社区3',
+ 'num': 1,
+ 'pid': '110101001',
+ 'pids': '[0],[110000],[110100],[110101],[110101001],',
+ 'simplename': '测试社区2'
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/area/listPage',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: list,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/area/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: [
+ {
+ 'id': '110000',
+ 'pid': '0',
+ 'name': '北京市',
+ 'level': 1,
+ 'pids': [0],
+ 'levelName': '省级',
+ 'simplename': '北京'
+ }
+ ]
+ }
+ }
+ },
+ {
+ url: '/area/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/area/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/area/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/code/levelType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '省级',
+ 'id': '166',
+ 'value': '1'
+ },
+ {
+ 'name': '市级',
+ 'id': '167',
+ 'value': '2'
+ },
+ {
+ 'name': '区级',
+ 'id': '168',
+ 'value': '3'
+ },
+ {
+ 'name': '街道',
+ 'id': '169',
+ 'value': '4'
+ },
+ {
+ 'name': '社区',
+ 'id': '170',
+ 'value': '5'
+ },
+ {
+ 'name': '网格',
+ 'id': '171',
+ 'value': '6'
+ },
+ {
+ 'name': '责任网格',
+ 'id': '172',
+ 'value': '7'
+ }
+ ]
+ }
+ }
+ }
+]
diff --git a/mock/system/config.js b/mock/system/config.js
new file mode 100644
index 0000000..652e41d
--- /dev/null
+++ b/mock/system/config.js
@@ -0,0 +1,18 @@
+module.exports = [
+ {
+ url: '/config/baseConfig',
+ type: 'get',
+ response: _ => {
+ return {
+ 'code': 200,
+ 'data': {
+ 'kaptcha': false,
+ 'publicKey': 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCu5k8gcTFJy5UtMfmtKiR3f/EcUe93kzfteRj6+sM5fHRvOib82+uqQMjgaRZiMcr3HiHIFY5vA6c+Rfb5R2COitoOhxyA9U2eLXknzxLUQIAqXAvKQO8KnerA1Qjcds7xhJB2XPhWFlY4RVtMT2wr2lMd29QDE4F/kzyDhNBpxwIDAQAB',
+ 'sid': 'f390b7d7-337b-431b-be22-fb860a6c04d4'
+ },
+ 'message': '请求成功',
+ 'success': true
+ }
+ }
+ }
+]
diff --git a/mock/system/dept.js b/mock/system/dept.js
new file mode 100644
index 0000000..2c19c94
--- /dev/null
+++ b/mock/system/dept.js
@@ -0,0 +1,88 @@
+const list = [
+ {
+ 'id': '1',
+ 'simplename': '二分公司',
+ 'fullname': '二分公司',
+ 'num': 1,
+ 'pid': '0',
+ 'pids': '[0,1,2]',
+ 'pName': '顶级',
+ 'version': '',
+ 'tips': ''
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/dept/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: list
+ }
+ }
+ }
+ },
+ {
+ url: '/dept/tree',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: [
+ {
+ 'id': '0',
+ 'pid': '',
+ 'name': '顶级',
+ 'open': 'false',
+ 'checked': ''
+ },
+ {
+ 'id': '26',
+ 'pid': '24',
+ 'name': '运行二所',
+ 'open': 'false',
+ 'checked': ''
+ }
+ ]
+ }
+ }
+ }
+ },
+ {
+ url: '/dept/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dept/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dept/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/system/dict.js b/mock/system/dict.js
new file mode 100644
index 0000000..60de4cd
--- /dev/null
+++ b/mock/system/dict.js
@@ -0,0 +1,69 @@
+const list = [
+ {
+ 'code': 'sysStatus',
+ 'num': 0,
+ 'name': '状态',
+ 'pid': '0',
+ 'id': '16',
+ 'detail': '1:启用:1;2:禁用:2',
+ 'tips': ''
+ },
+ {
+ 'code': 'sysSex',
+ 'num': 0,
+ 'name': '性别',
+ 'pid': '0',
+ 'id': '29',
+ 'detail': '1:男:1;2:女:2',
+ 'tips': ''
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/dict/listPage',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: list,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/system/log.js b/mock/system/log.js
new file mode 100644
index 0000000..9b6306e
--- /dev/null
+++ b/mock/system/log.js
@@ -0,0 +1,115 @@
+const logTypes = [
+ {
+ 'value': '0',
+ 'name': '业务日志'
+ },
+ {
+ 'value': '1',
+ 'name': '登录日志'
+ }
+]
+const loglist = [
+ {
+ 'id': 'c4cdba483fb1449aaad1e6c49353c6b3',
+ 'logtype': '业务日志',
+ 'createtime': '2019-04-04 14:23:31',
+ 'logname': '修改用户',
+ 'succeed': '成功',
+ 'deptid': '24',
+ 'deptName': '总公司',
+ 'message': '账号=yxssadmin...',
+ 'userName': 'bruser',
+ 'userid': '45'
+ }
+]
+const loginloglist = [
+ {
+ 'createtime': '2020-03-26 16:03:23',
+ 'logname': '登录日志',
+ 'succeed': '成功',
+ 'ip': '192.168.8.184',
+ 'deptid': '0',
+ 'message': '',
+ 'userName': '超级管理员',
+ 'userid': '1'
+ },
+ {
+ 'createtime': '2020-03-26 15:13:50',
+ 'logname': '登录日志',
+ 'succeed': '成功',
+ 'ip': '192.168.8.184',
+ 'deptid': '0',
+ 'message': '',
+ 'userName': '超级管理员',
+ 'userid': '1'
+ },
+ {
+ 'createtime': '2020-03-26 14:47:05',
+ 'logname': '登录日志',
+ 'succeed': '成功',
+ 'ip': '192.168.8.105',
+ 'deptid': '0',
+ 'message': '',
+ 'userName': '超级管理员',
+ 'userid': '1'
+ }]
+module.exports = [
+ {
+ url: '/loginLog/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: loginloglist,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/log/list',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: loglist,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/log/detail',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ 'createtime': '2020-03-26',
+ 'logtype': '业务日志',
+ 'classname': 'com.casic.missiles.modular.system.controller.RoleController',
+ 'method': 'dataAuthor',
+ 'logname': '数据权限配置',
+ 'succeed': '成功',
+ 'id': '1243081729056264193',
+ 'message': '角色名称=十一室管理员,资源名称=',
+ 'userName': '超级管理员',
+ 'regularMessage': '角色名称=十一室管理员,资源名称=',
+ 'userid': '1'
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/code/logType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: logTypes
+ }
+ }
+ }
+]
diff --git a/mock/config.js b/mock/config.js
new file mode 100644
index 0000000..7d111e0
--- /dev/null
+++ b/mock/config.js
@@ -0,0 +1,15 @@
+// import { param2Obj } from './utils'
+
+const baseConfig = {
+ kaptcha: true
+}
+
+export default {
+ baseconfig: res => {
+ return {
+ code: 200,
+ success: true,
+ data: baseConfig
+ }
+ }
+}
diff --git a/mock/index.js b/mock/index.js
new file mode 100644
index 0000000..d2713dd
--- /dev/null
+++ b/mock/index.js
@@ -0,0 +1,70 @@
+const Mock = require('mockjs')
+const { param2Obj } = require('./utils')
+
+const user = require('./system/user')
+const resource = require('./system/resource')
+const dict = require('./system/dict')
+const dept = require('./system/dept')
+const area = require('./system/area')
+const role = require('./system/role')
+const log = require('./system/log')
+const config = require('./system/config')
+const search = require('./remote-search')
+
+const mocks = [
+ ...user,
+ ...resource,
+ ...dict,
+ ...area,
+ ...dept,
+ ...role,
+ ...log,
+ ...config,
+ ...search
+]
+
+// for front mock
+// please use it cautiously, it will redefine XMLHttpRequest,
+// which will cause many of your third-party libraries to be invalidated(like progress event).
+function mockXHR() {
+ // mock patch
+ // https://github.com/nuysoft/Mock/issues/300
+ Mock.XHR.prototype.proxy_send = Mock.XHR.prototype.send
+ Mock.XHR.prototype.send = function() {
+ if (this.custom.xhr) {
+ this.custom.xhr.withCredentials = this.withCredentials || false
+
+ if (this.responseType) {
+ this.custom.xhr.responseType = this.responseType
+ }
+ }
+ this.proxy_send(...arguments)
+ }
+
+ function XHR2ExpressReqWrap(respond) {
+ return function(options) {
+ let result = null
+ if (respond instanceof Function) {
+ const { body, type, url } = options
+ // https://expressjs.com/en/4x/api.html#req
+ result = respond({
+ method: type,
+ body: JSON.parse(body),
+ query: param2Obj(url)
+ })
+ } else {
+ result = respond
+ }
+ return Mock.mock(result)
+ }
+ }
+
+ for (const i of mocks) {
+ Mock.mock(new RegExp(i.url), i.type || 'get', XHR2ExpressReqWrap(i.response))
+ }
+}
+
+module.exports = {
+ mocks,
+ mockXHR
+}
diff --git a/mock/mock-server.js b/mock/mock-server.js
new file mode 100644
index 0000000..8941ec0
--- /dev/null
+++ b/mock/mock-server.js
@@ -0,0 +1,81 @@
+const chokidar = require('chokidar')
+const bodyParser = require('body-parser')
+const chalk = require('chalk')
+const path = require('path')
+const Mock = require('mockjs')
+
+const mockDir = path.join(process.cwd(), 'mock')
+
+function registerRoutes(app) {
+ let mockLastIndex
+ const { mocks } = require('./index.js')
+ const mocksForServer = mocks.map(route => {
+ return responseFake(route.url, route.type, route.response)
+ })
+ for (const mock of mocksForServer) {
+ app[mock.type](mock.url, mock.response)
+ mockLastIndex = app._router.stack.length
+ }
+ const mockRoutesLength = Object.keys(mocksForServer).length
+ return {
+ mockRoutesLength: mockRoutesLength,
+ mockStartIndex: mockLastIndex - mockRoutesLength
+ }
+}
+
+function unregisterRoutes() {
+ Object.keys(require.cache).forEach(i => {
+ if (i.includes(mockDir)) {
+ delete require.cache[require.resolve(i)]
+ }
+ })
+}
+
+// for mock server
+const responseFake = (url, type, respond) => {
+ return {
+ url: new RegExp(`${process.env.VUE_APP_BASE_API}${url}`),
+ type: type || 'get',
+ response(req, res) {
+ console.log('request invoke:' + req.path)
+ res.json(Mock.mock(respond instanceof Function ? respond(req, res) : respond))
+ }
+ }
+}
+
+module.exports = app => {
+ // parse app.body
+ // https://expressjs.com/en/4x/api.html#req.body
+ app.use(bodyParser.json())
+ app.use(bodyParser.urlencoded({
+ extended: true
+ }))
+
+ const mockRoutes = registerRoutes(app)
+ var mockRoutesLength = mockRoutes.mockRoutesLength
+ var mockStartIndex = mockRoutes.mockStartIndex
+
+ // watch files, hot reload mock server
+ chokidar.watch(mockDir, {
+ ignored: /mock-server/,
+ ignoreInitial: true
+ }).on('all', (event, path) => {
+ if (event === 'change' || event === 'add') {
+ try {
+ // remove mock routes stack
+ app._router.stack.splice(mockStartIndex, mockRoutesLength)
+
+ // clear routes cache
+ unregisterRoutes()
+
+ const mockRoutes = registerRoutes(app)
+ mockRoutesLength = mockRoutes.mockRoutesLength
+ mockStartIndex = mockRoutes.mockStartIndex
+
+ console.log(chalk.magentaBright(`\n > Mock Server hot reload success! changed ${path}`))
+ } catch (error) {
+ console.log(chalk.redBright(error))
+ }
+ }
+ })
+}
diff --git a/mock/remote-search.js b/mock/remote-search.js
new file mode 100644
index 0000000..b5164b1
--- /dev/null
+++ b/mock/remote-search.js
@@ -0,0 +1,51 @@
+const Mock = require('mockjs')
+
+const NameList = []
+const count = 100
+
+for (let i = 0; i < count; i++) {
+ NameList.push(Mock.mock({
+ name: '@first'
+ }))
+}
+NameList.push({ name: 'mock-Pan' })
+
+module.exports = [
+ // username search
+ {
+ url: '/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: '/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/mock/system/area.js b/mock/system/area.js
new file mode 100644
index 0000000..1586661
--- /dev/null
+++ b/mock/system/area.js
@@ -0,0 +1,130 @@
+const list = [
+ {
+ 'id': '11010100102',
+ 'lat': '',
+ 'level': 5,
+ 'levelName': '社区',
+ 'lng': '',
+ 'name': '测试社区3',
+ 'num': 1,
+ 'pid': '110101001',
+ 'pids': '[0],[110000],[110100],[110101],[110101001],',
+ 'simplename': '测试社区2'
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/area/listPage',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: list,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/area/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: [
+ {
+ 'id': '110000',
+ 'pid': '0',
+ 'name': '北京市',
+ 'level': 1,
+ 'pids': [0],
+ 'levelName': '省级',
+ 'simplename': '北京'
+ }
+ ]
+ }
+ }
+ },
+ {
+ url: '/area/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/area/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/area/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/code/levelType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '省级',
+ 'id': '166',
+ 'value': '1'
+ },
+ {
+ 'name': '市级',
+ 'id': '167',
+ 'value': '2'
+ },
+ {
+ 'name': '区级',
+ 'id': '168',
+ 'value': '3'
+ },
+ {
+ 'name': '街道',
+ 'id': '169',
+ 'value': '4'
+ },
+ {
+ 'name': '社区',
+ 'id': '170',
+ 'value': '5'
+ },
+ {
+ 'name': '网格',
+ 'id': '171',
+ 'value': '6'
+ },
+ {
+ 'name': '责任网格',
+ 'id': '172',
+ 'value': '7'
+ }
+ ]
+ }
+ }
+ }
+]
diff --git a/mock/system/config.js b/mock/system/config.js
new file mode 100644
index 0000000..652e41d
--- /dev/null
+++ b/mock/system/config.js
@@ -0,0 +1,18 @@
+module.exports = [
+ {
+ url: '/config/baseConfig',
+ type: 'get',
+ response: _ => {
+ return {
+ 'code': 200,
+ 'data': {
+ 'kaptcha': false,
+ 'publicKey': 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCu5k8gcTFJy5UtMfmtKiR3f/EcUe93kzfteRj6+sM5fHRvOib82+uqQMjgaRZiMcr3HiHIFY5vA6c+Rfb5R2COitoOhxyA9U2eLXknzxLUQIAqXAvKQO8KnerA1Qjcds7xhJB2XPhWFlY4RVtMT2wr2lMd29QDE4F/kzyDhNBpxwIDAQAB',
+ 'sid': 'f390b7d7-337b-431b-be22-fb860a6c04d4'
+ },
+ 'message': '请求成功',
+ 'success': true
+ }
+ }
+ }
+]
diff --git a/mock/system/dept.js b/mock/system/dept.js
new file mode 100644
index 0000000..2c19c94
--- /dev/null
+++ b/mock/system/dept.js
@@ -0,0 +1,88 @@
+const list = [
+ {
+ 'id': '1',
+ 'simplename': '二分公司',
+ 'fullname': '二分公司',
+ 'num': 1,
+ 'pid': '0',
+ 'pids': '[0,1,2]',
+ 'pName': '顶级',
+ 'version': '',
+ 'tips': ''
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/dept/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: list
+ }
+ }
+ }
+ },
+ {
+ url: '/dept/tree',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: [
+ {
+ 'id': '0',
+ 'pid': '',
+ 'name': '顶级',
+ 'open': 'false',
+ 'checked': ''
+ },
+ {
+ 'id': '26',
+ 'pid': '24',
+ 'name': '运行二所',
+ 'open': 'false',
+ 'checked': ''
+ }
+ ]
+ }
+ }
+ }
+ },
+ {
+ url: '/dept/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dept/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dept/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/system/dict.js b/mock/system/dict.js
new file mode 100644
index 0000000..60de4cd
--- /dev/null
+++ b/mock/system/dict.js
@@ -0,0 +1,69 @@
+const list = [
+ {
+ 'code': 'sysStatus',
+ 'num': 0,
+ 'name': '状态',
+ 'pid': '0',
+ 'id': '16',
+ 'detail': '1:启用:1;2:禁用:2',
+ 'tips': ''
+ },
+ {
+ 'code': 'sysSex',
+ 'num': 0,
+ 'name': '性别',
+ 'pid': '0',
+ 'id': '29',
+ 'detail': '1:男:1;2:女:2',
+ 'tips': ''
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/dict/listPage',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: list,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/system/log.js b/mock/system/log.js
new file mode 100644
index 0000000..9b6306e
--- /dev/null
+++ b/mock/system/log.js
@@ -0,0 +1,115 @@
+const logTypes = [
+ {
+ 'value': '0',
+ 'name': '业务日志'
+ },
+ {
+ 'value': '1',
+ 'name': '登录日志'
+ }
+]
+const loglist = [
+ {
+ 'id': 'c4cdba483fb1449aaad1e6c49353c6b3',
+ 'logtype': '业务日志',
+ 'createtime': '2019-04-04 14:23:31',
+ 'logname': '修改用户',
+ 'succeed': '成功',
+ 'deptid': '24',
+ 'deptName': '总公司',
+ 'message': '账号=yxssadmin...',
+ 'userName': 'bruser',
+ 'userid': '45'
+ }
+]
+const loginloglist = [
+ {
+ 'createtime': '2020-03-26 16:03:23',
+ 'logname': '登录日志',
+ 'succeed': '成功',
+ 'ip': '192.168.8.184',
+ 'deptid': '0',
+ 'message': '',
+ 'userName': '超级管理员',
+ 'userid': '1'
+ },
+ {
+ 'createtime': '2020-03-26 15:13:50',
+ 'logname': '登录日志',
+ 'succeed': '成功',
+ 'ip': '192.168.8.184',
+ 'deptid': '0',
+ 'message': '',
+ 'userName': '超级管理员',
+ 'userid': '1'
+ },
+ {
+ 'createtime': '2020-03-26 14:47:05',
+ 'logname': '登录日志',
+ 'succeed': '成功',
+ 'ip': '192.168.8.105',
+ 'deptid': '0',
+ 'message': '',
+ 'userName': '超级管理员',
+ 'userid': '1'
+ }]
+module.exports = [
+ {
+ url: '/loginLog/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: loginloglist,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/log/list',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: loglist,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/log/detail',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ 'createtime': '2020-03-26',
+ 'logtype': '业务日志',
+ 'classname': 'com.casic.missiles.modular.system.controller.RoleController',
+ 'method': 'dataAuthor',
+ 'logname': '数据权限配置',
+ 'succeed': '成功',
+ 'id': '1243081729056264193',
+ 'message': '角色名称=十一室管理员,资源名称=',
+ 'userName': '超级管理员',
+ 'regularMessage': '角色名称=十一室管理员,资源名称=',
+ 'userid': '1'
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/code/logType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: logTypes
+ }
+ }
+ }
+]
diff --git a/mock/system/resource.js b/mock/system/resource.js
new file mode 100644
index 0000000..1122ea8
--- /dev/null
+++ b/mock/system/resource.js
@@ -0,0 +1,1569 @@
+const tree = [
+ {
+ 'checked': false,
+ 'code': 'system',
+ 'id': '105',
+ 'name': '系统管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],',
+ 'pid': '1189107859077373954',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr',
+ 'id': '106',
+ 'name': '用户管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_add',
+ 'id': '107',
+ 'name': '添加用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_edit',
+ 'id': '108',
+ 'name': '修改用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_delete',
+ 'id': '109',
+ 'name': '删除用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_reset',
+ 'id': '110',
+ 'name': '重置密码',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_freeze',
+ 'id': '111',
+ 'name': '冻结用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_unfreeze',
+ 'id': '112',
+ 'name': '解除冻结用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_setRole',
+ 'id': '113',
+ 'name': '分配角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role',
+ 'id': '114',
+ 'name': '角色管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_add',
+ 'id': '115',
+ 'name': '添加角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_edit',
+ 'id': '116',
+ 'name': '修改角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_remove',
+ 'id': '117',
+ 'name': '删除角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_setAuthority',
+ 'id': '118',
+ 'name': '配置权限',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu',
+ 'id': '119',
+ 'name': '资源管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_add',
+ 'id': '120',
+ 'name': '添加菜单',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_edit',
+ 'id': '121',
+ 'name': '修改菜单',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_remove',
+ 'id': '122',
+ 'name': '删除菜单',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log',
+ 'id': '128',
+ 'name': '日志管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept',
+ 'id': '131',
+ 'name': '组织管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict',
+ 'id': '132',
+ 'name': '字典管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'loginLog',
+ 'id': '133',
+ 'name': '登录日志',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log_clean',
+ 'id': '134',
+ 'name': '清空日志',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'pid': '128',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_add',
+ 'id': '135',
+ 'name': '添加部门',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_update',
+ 'id': '136',
+ 'name': '修改部门',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_delete',
+ 'id': '137',
+ 'name': '删除部门',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_add',
+ 'id': '138',
+ 'name': '添加字典',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_update',
+ 'id': '139',
+ 'name': '修改字典',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_delete',
+ 'id': '140',
+ 'name': '删除字典',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_list',
+ 'id': '151',
+ 'name': '菜单列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_list',
+ 'id': '153',
+ 'name': '部门列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_detail',
+ 'id': '154',
+ 'name': '部门详情',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_list',
+ 'id': '156',
+ 'name': '字典列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_detail',
+ 'id': '157',
+ 'name': '字典详情',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log_list',
+ 'id': '158',
+ 'name': '日志列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'pid': '128',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log_detail',
+ 'id': '159',
+ 'name': '日志详情',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'pid': '128',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'del_login_log',
+ 'id': '160',
+ 'name': '清空登录日志',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'pid': '133',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'login_log_list',
+ 'id': '161',
+ 'name': '登录日志列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'pid': '133',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_list',
+ 'id': '164',
+ 'name': '角色列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_list',
+ 'id': '167',
+ 'name': '用户列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'data_author',
+ 'id': '1138364388198715393',
+ 'name': '数据权限',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'AreaAdmin',
+ 'id': '1170945119300976642',
+ 'name': '区域管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'sys',
+ 'id': '1189107859077373954',
+ 'name': '基础权限管理',
+ 'open': true,
+ 'pcodes': '[0],',
+ 'pid': '0',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_listPage',
+ 'id': '1191975090689810434',
+ 'name': '区域列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_add',
+ 'id': '1191975312815955969',
+ 'name': '新增区域',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_update',
+ 'id': '1191975427559530497',
+ 'name': '修改区域',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_delete',
+ 'id': '1191975543687225346',
+ 'name': '区域删除',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': true,
+ 'code': '',
+ 'id': '0',
+ 'name': '顶级',
+ 'open': true,
+ 'pcodes': '',
+ 'pid': '',
+ 'value': ''
+ }
+]
+const list = [
+ {
+ 'isopen': '1',
+ 'code': 'system',
+ 'pcode': 'sys',
+ 'num': 4,
+ 'icon': 'icon-setting',
+ 'pid': '1189107859077373954',
+ 'isMenu': '是',
+ 'url': '/system',
+ 'tips': '',
+ 'pcodes': '[0],[sys],',
+ 'name': '系统管理',
+ 'statusName': '启用',
+ 'id': '105',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': true,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr',
+ 'pcode': 'system',
+ 'num': 1,
+ 'icon': 'icon-user',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/mgr',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '用户管理',
+ 'statusName': '启用',
+ 'id': '106',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_add',
+ 'pcode': 'mgr',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '添加用户',
+ 'statusName': '启用',
+ 'id': '107',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_edit',
+ 'pcode': 'mgr',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '修改用户',
+ 'statusName': '启用',
+ 'id': '108',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_delete',
+ 'pcode': 'mgr',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '删除用户',
+ 'statusName': '启用',
+ 'id': '109',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_reset',
+ 'pcode': 'mgr',
+ 'num': 4,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/reset',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '重置密码',
+ 'statusName': '启用',
+ 'id': '110',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_freeze',
+ 'pcode': 'mgr',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/freeze',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '冻结用户',
+ 'statusName': '启用',
+ 'id': '111',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_unfreeze',
+ 'pcode': 'mgr',
+ 'num': 6,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/unfreeze',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '解除冻结用户',
+ 'statusName': '启用',
+ 'id': '112',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_setRole',
+ 'pcode': 'mgr',
+ 'num': 7,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/roleAssign',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '分配角色',
+ 'statusName': '启用',
+ 'id': '113',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role',
+ 'pcode': 'system',
+ 'num': 2,
+ 'icon': 'permission',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/role',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '角色管理',
+ 'statusName': '启用',
+ 'id': '114',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_add',
+ 'pcode': 'role',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '添加角色',
+ 'statusName': '启用',
+ 'id': '115',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_edit',
+ 'pcode': 'role',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '修改角色',
+ 'statusName': '启用',
+ 'id': '116',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_remove',
+ 'pcode': 'role',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '删除角色',
+ 'statusName': '启用',
+ 'id': '117',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_setAuthority',
+ 'pcode': 'role',
+ 'num': 4,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/funcAuthor',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '配置权限',
+ 'statusName': '启用',
+ 'id': '118',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu',
+ 'pcode': 'system',
+ 'num': 4,
+ 'icon': 'function',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/resource',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '资源管理',
+ 'statusName': '启用',
+ 'id': '119',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_add',
+ 'pcode': 'menu',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '添加菜单',
+ 'statusName': '启用',
+ 'id': '120',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_edit',
+ 'pcode': 'menu',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '修改菜单',
+ 'statusName': '启用',
+ 'id': '121',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_remove',
+ 'pcode': 'menu',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '删除菜单',
+ 'statusName': '启用',
+ 'id': '122',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log',
+ 'pcode': 'system',
+ 'num': 6,
+ 'icon': 'log',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/log',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '日志管理',
+ 'statusName': '启用',
+ 'id': '128',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept',
+ 'pcode': 'system',
+ 'num': 3,
+ 'icon': 'dept2',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/dept',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '组织管理',
+ 'statusName': '启用',
+ 'id': '131',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict',
+ 'pcode': 'system',
+ 'num': 4,
+ 'icon': 'icon-dict',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/dict',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '字典管理',
+ 'statusName': '启用',
+ 'id': '132',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'loginLog',
+ 'pcode': 'system',
+ 'num': 6,
+ 'icon': 'task',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/loginLog',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '登录日志',
+ 'statusName': '启用',
+ 'id': '133',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log_clean',
+ 'pcode': 'log',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '128',
+ 'isMenu': '不是',
+ 'url': '/log/delLog',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'name': '清空日志',
+ 'statusName': '启用',
+ 'id': '134',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_add',
+ 'pcode': 'dept',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '添加部门',
+ 'statusName': '启用',
+ 'id': '135',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_update',
+ 'pcode': 'dept',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '修改部门',
+ 'statusName': '启用',
+ 'id': '136',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_delete',
+ 'pcode': 'dept',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '删除部门',
+ 'statusName': '启用',
+ 'id': '137',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_add',
+ 'pcode': 'dict',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '添加字典',
+ 'statusName': '启用',
+ 'id': '138',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_update',
+ 'pcode': 'dict',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '修改字典',
+ 'statusName': '启用',
+ 'id': '139',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_delete',
+ 'pcode': 'dict',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '删除字典',
+ 'statusName': '启用',
+ 'id': '140',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_list',
+ 'pcode': 'menu',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '菜单列表',
+ 'statusName': '启用',
+ 'id': '151',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_list',
+ 'pcode': 'dept',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '部门列表',
+ 'statusName': '启用',
+ 'id': '153',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_detail',
+ 'pcode': 'dept',
+ 'num': 6,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/detail',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '部门详情',
+ 'statusName': '启用',
+ 'id': '154',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_list',
+ 'pcode': 'dict',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '字典列表',
+ 'statusName': '启用',
+ 'id': '156',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_detail',
+ 'pcode': 'dict',
+ 'num': 6,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/detail',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '字典详情',
+ 'statusName': '启用',
+ 'id': '157',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log_list',
+ 'pcode': 'log',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '128',
+ 'isMenu': '不是',
+ 'url': '/log/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'name': '日志列表',
+ 'statusName': '启用',
+ 'id': '158',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log_detail',
+ 'pcode': 'log',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '128',
+ 'isMenu': '不是',
+ 'url': '/log/detail',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'name': '日志详情',
+ 'statusName': '启用',
+ 'id': '159',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'del_login_log',
+ 'pcode': 'loginLog',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '133',
+ 'isMenu': '不是',
+ 'url': '/loginLog/delLoginLog',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'name': '清空登录日志',
+ 'statusName': '启用',
+ 'id': '160',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'login_log_list',
+ 'pcode': 'loginLog',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '133',
+ 'isMenu': '不是',
+ 'url': '/loginLog/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'name': '登录日志列表',
+ 'statusName': '启用',
+ 'id': '161',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_list',
+ 'pcode': 'role',
+ 'num': 7,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '角色列表',
+ 'statusName': '启用',
+ 'id': '164',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_list',
+ 'pcode': 'mgr',
+ 'num': 10,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': ' /mgr/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '用户列表',
+ 'statusName': '启用',
+ 'id': '167',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'data_author',
+ 'pcode': 'role',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/dataAuthor',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '数据权限',
+ 'statusName': '启用',
+ 'id': '1138364388198715393',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'AreaAdmin',
+ 'pcode': 'system',
+ 'num': 0,
+ 'icon': 'icon-base',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/area',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '区域管理',
+ 'statusName': '启用',
+ 'id': '1170945119300976642',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'sys',
+ 'pcode': '0',
+ 'num': 0,
+ 'icon': 'icon-setting',
+ 'pid': '0',
+ 'isMenu': '不是',
+ 'url': '/sys',
+ 'tips': '',
+ 'pcodes': '[0],',
+ 'name': '基础权限管理',
+ 'statusName': '启用',
+ 'id': '1189107859077373954',
+ 'ismenu': '0',
+ 'levels': 1,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '02'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_listPage',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/listPage',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '区域列表',
+ 'statusName': '启用',
+ 'id': '1191975090689810434',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_add',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '新增区域',
+ 'statusName': '启用',
+ 'id': '1191975312815955969',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_update',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '修改区域',
+ 'statusName': '启用',
+ 'id': '1191975427559530497',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_delete',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '区域删除',
+ 'statusName': '启用',
+ 'id': '1191975543687225346',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/resource/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: list
+ }
+ }
+ }
+ },
+
+ // mock get all roles form server
+ {
+ url: '/resource/tree',
+ type: 'get',
+ response: _ => {
+ return {
+ 'code': 200,
+ 'message': 'success',
+ 'data': {
+ 'list': tree
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/code/resourceType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '菜单',
+ 'id': '55',
+ 'value': '03'
+ },
+ {
+ 'name': '按钮',
+ 'id': '56',
+ 'value': '04'
+ }
+ ]
+ }
+ }
+ },
+ {
+ url: '/resource/treeListByRoleId',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {
+ 'list': tree
+ }
+ }
+ }
+ },
+ {
+ url: 'resource/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/resource/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/resource/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/config.js b/mock/config.js
new file mode 100644
index 0000000..7d111e0
--- /dev/null
+++ b/mock/config.js
@@ -0,0 +1,15 @@
+// import { param2Obj } from './utils'
+
+const baseConfig = {
+ kaptcha: true
+}
+
+export default {
+ baseconfig: res => {
+ return {
+ code: 200,
+ success: true,
+ data: baseConfig
+ }
+ }
+}
diff --git a/mock/index.js b/mock/index.js
new file mode 100644
index 0000000..d2713dd
--- /dev/null
+++ b/mock/index.js
@@ -0,0 +1,70 @@
+const Mock = require('mockjs')
+const { param2Obj } = require('./utils')
+
+const user = require('./system/user')
+const resource = require('./system/resource')
+const dict = require('./system/dict')
+const dept = require('./system/dept')
+const area = require('./system/area')
+const role = require('./system/role')
+const log = require('./system/log')
+const config = require('./system/config')
+const search = require('./remote-search')
+
+const mocks = [
+ ...user,
+ ...resource,
+ ...dict,
+ ...area,
+ ...dept,
+ ...role,
+ ...log,
+ ...config,
+ ...search
+]
+
+// for front mock
+// please use it cautiously, it will redefine XMLHttpRequest,
+// which will cause many of your third-party libraries to be invalidated(like progress event).
+function mockXHR() {
+ // mock patch
+ // https://github.com/nuysoft/Mock/issues/300
+ Mock.XHR.prototype.proxy_send = Mock.XHR.prototype.send
+ Mock.XHR.prototype.send = function() {
+ if (this.custom.xhr) {
+ this.custom.xhr.withCredentials = this.withCredentials || false
+
+ if (this.responseType) {
+ this.custom.xhr.responseType = this.responseType
+ }
+ }
+ this.proxy_send(...arguments)
+ }
+
+ function XHR2ExpressReqWrap(respond) {
+ return function(options) {
+ let result = null
+ if (respond instanceof Function) {
+ const { body, type, url } = options
+ // https://expressjs.com/en/4x/api.html#req
+ result = respond({
+ method: type,
+ body: JSON.parse(body),
+ query: param2Obj(url)
+ })
+ } else {
+ result = respond
+ }
+ return Mock.mock(result)
+ }
+ }
+
+ for (const i of mocks) {
+ Mock.mock(new RegExp(i.url), i.type || 'get', XHR2ExpressReqWrap(i.response))
+ }
+}
+
+module.exports = {
+ mocks,
+ mockXHR
+}
diff --git a/mock/mock-server.js b/mock/mock-server.js
new file mode 100644
index 0000000..8941ec0
--- /dev/null
+++ b/mock/mock-server.js
@@ -0,0 +1,81 @@
+const chokidar = require('chokidar')
+const bodyParser = require('body-parser')
+const chalk = require('chalk')
+const path = require('path')
+const Mock = require('mockjs')
+
+const mockDir = path.join(process.cwd(), 'mock')
+
+function registerRoutes(app) {
+ let mockLastIndex
+ const { mocks } = require('./index.js')
+ const mocksForServer = mocks.map(route => {
+ return responseFake(route.url, route.type, route.response)
+ })
+ for (const mock of mocksForServer) {
+ app[mock.type](mock.url, mock.response)
+ mockLastIndex = app._router.stack.length
+ }
+ const mockRoutesLength = Object.keys(mocksForServer).length
+ return {
+ mockRoutesLength: mockRoutesLength,
+ mockStartIndex: mockLastIndex - mockRoutesLength
+ }
+}
+
+function unregisterRoutes() {
+ Object.keys(require.cache).forEach(i => {
+ if (i.includes(mockDir)) {
+ delete require.cache[require.resolve(i)]
+ }
+ })
+}
+
+// for mock server
+const responseFake = (url, type, respond) => {
+ return {
+ url: new RegExp(`${process.env.VUE_APP_BASE_API}${url}`),
+ type: type || 'get',
+ response(req, res) {
+ console.log('request invoke:' + req.path)
+ res.json(Mock.mock(respond instanceof Function ? respond(req, res) : respond))
+ }
+ }
+}
+
+module.exports = app => {
+ // parse app.body
+ // https://expressjs.com/en/4x/api.html#req.body
+ app.use(bodyParser.json())
+ app.use(bodyParser.urlencoded({
+ extended: true
+ }))
+
+ const mockRoutes = registerRoutes(app)
+ var mockRoutesLength = mockRoutes.mockRoutesLength
+ var mockStartIndex = mockRoutes.mockStartIndex
+
+ // watch files, hot reload mock server
+ chokidar.watch(mockDir, {
+ ignored: /mock-server/,
+ ignoreInitial: true
+ }).on('all', (event, path) => {
+ if (event === 'change' || event === 'add') {
+ try {
+ // remove mock routes stack
+ app._router.stack.splice(mockStartIndex, mockRoutesLength)
+
+ // clear routes cache
+ unregisterRoutes()
+
+ const mockRoutes = registerRoutes(app)
+ mockRoutesLength = mockRoutes.mockRoutesLength
+ mockStartIndex = mockRoutes.mockStartIndex
+
+ console.log(chalk.magentaBright(`\n > Mock Server hot reload success! changed ${path}`))
+ } catch (error) {
+ console.log(chalk.redBright(error))
+ }
+ }
+ })
+}
diff --git a/mock/remote-search.js b/mock/remote-search.js
new file mode 100644
index 0000000..b5164b1
--- /dev/null
+++ b/mock/remote-search.js
@@ -0,0 +1,51 @@
+const Mock = require('mockjs')
+
+const NameList = []
+const count = 100
+
+for (let i = 0; i < count; i++) {
+ NameList.push(Mock.mock({
+ name: '@first'
+ }))
+}
+NameList.push({ name: 'mock-Pan' })
+
+module.exports = [
+ // username search
+ {
+ url: '/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: '/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/mock/system/area.js b/mock/system/area.js
new file mode 100644
index 0000000..1586661
--- /dev/null
+++ b/mock/system/area.js
@@ -0,0 +1,130 @@
+const list = [
+ {
+ 'id': '11010100102',
+ 'lat': '',
+ 'level': 5,
+ 'levelName': '社区',
+ 'lng': '',
+ 'name': '测试社区3',
+ 'num': 1,
+ 'pid': '110101001',
+ 'pids': '[0],[110000],[110100],[110101],[110101001],',
+ 'simplename': '测试社区2'
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/area/listPage',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: list,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/area/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: [
+ {
+ 'id': '110000',
+ 'pid': '0',
+ 'name': '北京市',
+ 'level': 1,
+ 'pids': [0],
+ 'levelName': '省级',
+ 'simplename': '北京'
+ }
+ ]
+ }
+ }
+ },
+ {
+ url: '/area/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/area/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/area/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/code/levelType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '省级',
+ 'id': '166',
+ 'value': '1'
+ },
+ {
+ 'name': '市级',
+ 'id': '167',
+ 'value': '2'
+ },
+ {
+ 'name': '区级',
+ 'id': '168',
+ 'value': '3'
+ },
+ {
+ 'name': '街道',
+ 'id': '169',
+ 'value': '4'
+ },
+ {
+ 'name': '社区',
+ 'id': '170',
+ 'value': '5'
+ },
+ {
+ 'name': '网格',
+ 'id': '171',
+ 'value': '6'
+ },
+ {
+ 'name': '责任网格',
+ 'id': '172',
+ 'value': '7'
+ }
+ ]
+ }
+ }
+ }
+]
diff --git a/mock/system/config.js b/mock/system/config.js
new file mode 100644
index 0000000..652e41d
--- /dev/null
+++ b/mock/system/config.js
@@ -0,0 +1,18 @@
+module.exports = [
+ {
+ url: '/config/baseConfig',
+ type: 'get',
+ response: _ => {
+ return {
+ 'code': 200,
+ 'data': {
+ 'kaptcha': false,
+ 'publicKey': 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCu5k8gcTFJy5UtMfmtKiR3f/EcUe93kzfteRj6+sM5fHRvOib82+uqQMjgaRZiMcr3HiHIFY5vA6c+Rfb5R2COitoOhxyA9U2eLXknzxLUQIAqXAvKQO8KnerA1Qjcds7xhJB2XPhWFlY4RVtMT2wr2lMd29QDE4F/kzyDhNBpxwIDAQAB',
+ 'sid': 'f390b7d7-337b-431b-be22-fb860a6c04d4'
+ },
+ 'message': '请求成功',
+ 'success': true
+ }
+ }
+ }
+]
diff --git a/mock/system/dept.js b/mock/system/dept.js
new file mode 100644
index 0000000..2c19c94
--- /dev/null
+++ b/mock/system/dept.js
@@ -0,0 +1,88 @@
+const list = [
+ {
+ 'id': '1',
+ 'simplename': '二分公司',
+ 'fullname': '二分公司',
+ 'num': 1,
+ 'pid': '0',
+ 'pids': '[0,1,2]',
+ 'pName': '顶级',
+ 'version': '',
+ 'tips': ''
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/dept/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: list
+ }
+ }
+ }
+ },
+ {
+ url: '/dept/tree',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: [
+ {
+ 'id': '0',
+ 'pid': '',
+ 'name': '顶级',
+ 'open': 'false',
+ 'checked': ''
+ },
+ {
+ 'id': '26',
+ 'pid': '24',
+ 'name': '运行二所',
+ 'open': 'false',
+ 'checked': ''
+ }
+ ]
+ }
+ }
+ }
+ },
+ {
+ url: '/dept/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dept/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dept/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/system/dict.js b/mock/system/dict.js
new file mode 100644
index 0000000..60de4cd
--- /dev/null
+++ b/mock/system/dict.js
@@ -0,0 +1,69 @@
+const list = [
+ {
+ 'code': 'sysStatus',
+ 'num': 0,
+ 'name': '状态',
+ 'pid': '0',
+ 'id': '16',
+ 'detail': '1:启用:1;2:禁用:2',
+ 'tips': ''
+ },
+ {
+ 'code': 'sysSex',
+ 'num': 0,
+ 'name': '性别',
+ 'pid': '0',
+ 'id': '29',
+ 'detail': '1:男:1;2:女:2',
+ 'tips': ''
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/dict/listPage',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: list,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/system/log.js b/mock/system/log.js
new file mode 100644
index 0000000..9b6306e
--- /dev/null
+++ b/mock/system/log.js
@@ -0,0 +1,115 @@
+const logTypes = [
+ {
+ 'value': '0',
+ 'name': '业务日志'
+ },
+ {
+ 'value': '1',
+ 'name': '登录日志'
+ }
+]
+const loglist = [
+ {
+ 'id': 'c4cdba483fb1449aaad1e6c49353c6b3',
+ 'logtype': '业务日志',
+ 'createtime': '2019-04-04 14:23:31',
+ 'logname': '修改用户',
+ 'succeed': '成功',
+ 'deptid': '24',
+ 'deptName': '总公司',
+ 'message': '账号=yxssadmin...',
+ 'userName': 'bruser',
+ 'userid': '45'
+ }
+]
+const loginloglist = [
+ {
+ 'createtime': '2020-03-26 16:03:23',
+ 'logname': '登录日志',
+ 'succeed': '成功',
+ 'ip': '192.168.8.184',
+ 'deptid': '0',
+ 'message': '',
+ 'userName': '超级管理员',
+ 'userid': '1'
+ },
+ {
+ 'createtime': '2020-03-26 15:13:50',
+ 'logname': '登录日志',
+ 'succeed': '成功',
+ 'ip': '192.168.8.184',
+ 'deptid': '0',
+ 'message': '',
+ 'userName': '超级管理员',
+ 'userid': '1'
+ },
+ {
+ 'createtime': '2020-03-26 14:47:05',
+ 'logname': '登录日志',
+ 'succeed': '成功',
+ 'ip': '192.168.8.105',
+ 'deptid': '0',
+ 'message': '',
+ 'userName': '超级管理员',
+ 'userid': '1'
+ }]
+module.exports = [
+ {
+ url: '/loginLog/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: loginloglist,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/log/list',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: loglist,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/log/detail',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ 'createtime': '2020-03-26',
+ 'logtype': '业务日志',
+ 'classname': 'com.casic.missiles.modular.system.controller.RoleController',
+ 'method': 'dataAuthor',
+ 'logname': '数据权限配置',
+ 'succeed': '成功',
+ 'id': '1243081729056264193',
+ 'message': '角色名称=十一室管理员,资源名称=',
+ 'userName': '超级管理员',
+ 'regularMessage': '角色名称=十一室管理员,资源名称=',
+ 'userid': '1'
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/code/logType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: logTypes
+ }
+ }
+ }
+]
diff --git a/mock/system/resource.js b/mock/system/resource.js
new file mode 100644
index 0000000..1122ea8
--- /dev/null
+++ b/mock/system/resource.js
@@ -0,0 +1,1569 @@
+const tree = [
+ {
+ 'checked': false,
+ 'code': 'system',
+ 'id': '105',
+ 'name': '系统管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],',
+ 'pid': '1189107859077373954',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr',
+ 'id': '106',
+ 'name': '用户管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_add',
+ 'id': '107',
+ 'name': '添加用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_edit',
+ 'id': '108',
+ 'name': '修改用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_delete',
+ 'id': '109',
+ 'name': '删除用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_reset',
+ 'id': '110',
+ 'name': '重置密码',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_freeze',
+ 'id': '111',
+ 'name': '冻结用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_unfreeze',
+ 'id': '112',
+ 'name': '解除冻结用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_setRole',
+ 'id': '113',
+ 'name': '分配角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role',
+ 'id': '114',
+ 'name': '角色管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_add',
+ 'id': '115',
+ 'name': '添加角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_edit',
+ 'id': '116',
+ 'name': '修改角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_remove',
+ 'id': '117',
+ 'name': '删除角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_setAuthority',
+ 'id': '118',
+ 'name': '配置权限',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu',
+ 'id': '119',
+ 'name': '资源管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_add',
+ 'id': '120',
+ 'name': '添加菜单',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_edit',
+ 'id': '121',
+ 'name': '修改菜单',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_remove',
+ 'id': '122',
+ 'name': '删除菜单',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log',
+ 'id': '128',
+ 'name': '日志管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept',
+ 'id': '131',
+ 'name': '组织管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict',
+ 'id': '132',
+ 'name': '字典管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'loginLog',
+ 'id': '133',
+ 'name': '登录日志',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log_clean',
+ 'id': '134',
+ 'name': '清空日志',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'pid': '128',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_add',
+ 'id': '135',
+ 'name': '添加部门',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_update',
+ 'id': '136',
+ 'name': '修改部门',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_delete',
+ 'id': '137',
+ 'name': '删除部门',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_add',
+ 'id': '138',
+ 'name': '添加字典',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_update',
+ 'id': '139',
+ 'name': '修改字典',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_delete',
+ 'id': '140',
+ 'name': '删除字典',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_list',
+ 'id': '151',
+ 'name': '菜单列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_list',
+ 'id': '153',
+ 'name': '部门列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_detail',
+ 'id': '154',
+ 'name': '部门详情',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_list',
+ 'id': '156',
+ 'name': '字典列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_detail',
+ 'id': '157',
+ 'name': '字典详情',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log_list',
+ 'id': '158',
+ 'name': '日志列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'pid': '128',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log_detail',
+ 'id': '159',
+ 'name': '日志详情',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'pid': '128',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'del_login_log',
+ 'id': '160',
+ 'name': '清空登录日志',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'pid': '133',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'login_log_list',
+ 'id': '161',
+ 'name': '登录日志列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'pid': '133',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_list',
+ 'id': '164',
+ 'name': '角色列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_list',
+ 'id': '167',
+ 'name': '用户列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'data_author',
+ 'id': '1138364388198715393',
+ 'name': '数据权限',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'AreaAdmin',
+ 'id': '1170945119300976642',
+ 'name': '区域管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'sys',
+ 'id': '1189107859077373954',
+ 'name': '基础权限管理',
+ 'open': true,
+ 'pcodes': '[0],',
+ 'pid': '0',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_listPage',
+ 'id': '1191975090689810434',
+ 'name': '区域列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_add',
+ 'id': '1191975312815955969',
+ 'name': '新增区域',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_update',
+ 'id': '1191975427559530497',
+ 'name': '修改区域',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_delete',
+ 'id': '1191975543687225346',
+ 'name': '区域删除',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': true,
+ 'code': '',
+ 'id': '0',
+ 'name': '顶级',
+ 'open': true,
+ 'pcodes': '',
+ 'pid': '',
+ 'value': ''
+ }
+]
+const list = [
+ {
+ 'isopen': '1',
+ 'code': 'system',
+ 'pcode': 'sys',
+ 'num': 4,
+ 'icon': 'icon-setting',
+ 'pid': '1189107859077373954',
+ 'isMenu': '是',
+ 'url': '/system',
+ 'tips': '',
+ 'pcodes': '[0],[sys],',
+ 'name': '系统管理',
+ 'statusName': '启用',
+ 'id': '105',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': true,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr',
+ 'pcode': 'system',
+ 'num': 1,
+ 'icon': 'icon-user',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/mgr',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '用户管理',
+ 'statusName': '启用',
+ 'id': '106',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_add',
+ 'pcode': 'mgr',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '添加用户',
+ 'statusName': '启用',
+ 'id': '107',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_edit',
+ 'pcode': 'mgr',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '修改用户',
+ 'statusName': '启用',
+ 'id': '108',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_delete',
+ 'pcode': 'mgr',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '删除用户',
+ 'statusName': '启用',
+ 'id': '109',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_reset',
+ 'pcode': 'mgr',
+ 'num': 4,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/reset',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '重置密码',
+ 'statusName': '启用',
+ 'id': '110',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_freeze',
+ 'pcode': 'mgr',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/freeze',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '冻结用户',
+ 'statusName': '启用',
+ 'id': '111',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_unfreeze',
+ 'pcode': 'mgr',
+ 'num': 6,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/unfreeze',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '解除冻结用户',
+ 'statusName': '启用',
+ 'id': '112',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_setRole',
+ 'pcode': 'mgr',
+ 'num': 7,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/roleAssign',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '分配角色',
+ 'statusName': '启用',
+ 'id': '113',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role',
+ 'pcode': 'system',
+ 'num': 2,
+ 'icon': 'permission',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/role',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '角色管理',
+ 'statusName': '启用',
+ 'id': '114',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_add',
+ 'pcode': 'role',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '添加角色',
+ 'statusName': '启用',
+ 'id': '115',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_edit',
+ 'pcode': 'role',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '修改角色',
+ 'statusName': '启用',
+ 'id': '116',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_remove',
+ 'pcode': 'role',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '删除角色',
+ 'statusName': '启用',
+ 'id': '117',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_setAuthority',
+ 'pcode': 'role',
+ 'num': 4,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/funcAuthor',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '配置权限',
+ 'statusName': '启用',
+ 'id': '118',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu',
+ 'pcode': 'system',
+ 'num': 4,
+ 'icon': 'function',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/resource',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '资源管理',
+ 'statusName': '启用',
+ 'id': '119',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_add',
+ 'pcode': 'menu',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '添加菜单',
+ 'statusName': '启用',
+ 'id': '120',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_edit',
+ 'pcode': 'menu',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '修改菜单',
+ 'statusName': '启用',
+ 'id': '121',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_remove',
+ 'pcode': 'menu',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '删除菜单',
+ 'statusName': '启用',
+ 'id': '122',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log',
+ 'pcode': 'system',
+ 'num': 6,
+ 'icon': 'log',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/log',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '日志管理',
+ 'statusName': '启用',
+ 'id': '128',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept',
+ 'pcode': 'system',
+ 'num': 3,
+ 'icon': 'dept2',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/dept',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '组织管理',
+ 'statusName': '启用',
+ 'id': '131',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict',
+ 'pcode': 'system',
+ 'num': 4,
+ 'icon': 'icon-dict',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/dict',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '字典管理',
+ 'statusName': '启用',
+ 'id': '132',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'loginLog',
+ 'pcode': 'system',
+ 'num': 6,
+ 'icon': 'task',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/loginLog',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '登录日志',
+ 'statusName': '启用',
+ 'id': '133',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log_clean',
+ 'pcode': 'log',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '128',
+ 'isMenu': '不是',
+ 'url': '/log/delLog',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'name': '清空日志',
+ 'statusName': '启用',
+ 'id': '134',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_add',
+ 'pcode': 'dept',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '添加部门',
+ 'statusName': '启用',
+ 'id': '135',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_update',
+ 'pcode': 'dept',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '修改部门',
+ 'statusName': '启用',
+ 'id': '136',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_delete',
+ 'pcode': 'dept',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '删除部门',
+ 'statusName': '启用',
+ 'id': '137',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_add',
+ 'pcode': 'dict',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '添加字典',
+ 'statusName': '启用',
+ 'id': '138',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_update',
+ 'pcode': 'dict',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '修改字典',
+ 'statusName': '启用',
+ 'id': '139',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_delete',
+ 'pcode': 'dict',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '删除字典',
+ 'statusName': '启用',
+ 'id': '140',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_list',
+ 'pcode': 'menu',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '菜单列表',
+ 'statusName': '启用',
+ 'id': '151',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_list',
+ 'pcode': 'dept',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '部门列表',
+ 'statusName': '启用',
+ 'id': '153',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_detail',
+ 'pcode': 'dept',
+ 'num': 6,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/detail',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '部门详情',
+ 'statusName': '启用',
+ 'id': '154',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_list',
+ 'pcode': 'dict',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '字典列表',
+ 'statusName': '启用',
+ 'id': '156',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_detail',
+ 'pcode': 'dict',
+ 'num': 6,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/detail',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '字典详情',
+ 'statusName': '启用',
+ 'id': '157',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log_list',
+ 'pcode': 'log',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '128',
+ 'isMenu': '不是',
+ 'url': '/log/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'name': '日志列表',
+ 'statusName': '启用',
+ 'id': '158',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log_detail',
+ 'pcode': 'log',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '128',
+ 'isMenu': '不是',
+ 'url': '/log/detail',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'name': '日志详情',
+ 'statusName': '启用',
+ 'id': '159',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'del_login_log',
+ 'pcode': 'loginLog',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '133',
+ 'isMenu': '不是',
+ 'url': '/loginLog/delLoginLog',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'name': '清空登录日志',
+ 'statusName': '启用',
+ 'id': '160',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'login_log_list',
+ 'pcode': 'loginLog',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '133',
+ 'isMenu': '不是',
+ 'url': '/loginLog/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'name': '登录日志列表',
+ 'statusName': '启用',
+ 'id': '161',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_list',
+ 'pcode': 'role',
+ 'num': 7,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '角色列表',
+ 'statusName': '启用',
+ 'id': '164',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_list',
+ 'pcode': 'mgr',
+ 'num': 10,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': ' /mgr/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '用户列表',
+ 'statusName': '启用',
+ 'id': '167',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'data_author',
+ 'pcode': 'role',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/dataAuthor',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '数据权限',
+ 'statusName': '启用',
+ 'id': '1138364388198715393',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'AreaAdmin',
+ 'pcode': 'system',
+ 'num': 0,
+ 'icon': 'icon-base',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/area',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '区域管理',
+ 'statusName': '启用',
+ 'id': '1170945119300976642',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'sys',
+ 'pcode': '0',
+ 'num': 0,
+ 'icon': 'icon-setting',
+ 'pid': '0',
+ 'isMenu': '不是',
+ 'url': '/sys',
+ 'tips': '',
+ 'pcodes': '[0],',
+ 'name': '基础权限管理',
+ 'statusName': '启用',
+ 'id': '1189107859077373954',
+ 'ismenu': '0',
+ 'levels': 1,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '02'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_listPage',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/listPage',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '区域列表',
+ 'statusName': '启用',
+ 'id': '1191975090689810434',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_add',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '新增区域',
+ 'statusName': '启用',
+ 'id': '1191975312815955969',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_update',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '修改区域',
+ 'statusName': '启用',
+ 'id': '1191975427559530497',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_delete',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '区域删除',
+ 'statusName': '启用',
+ 'id': '1191975543687225346',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/resource/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: list
+ }
+ }
+ }
+ },
+
+ // mock get all roles form server
+ {
+ url: '/resource/tree',
+ type: 'get',
+ response: _ => {
+ return {
+ 'code': 200,
+ 'message': 'success',
+ 'data': {
+ 'list': tree
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/code/resourceType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '菜单',
+ 'id': '55',
+ 'value': '03'
+ },
+ {
+ 'name': '按钮',
+ 'id': '56',
+ 'value': '04'
+ }
+ ]
+ }
+ }
+ },
+ {
+ url: '/resource/treeListByRoleId',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {
+ 'list': tree
+ }
+ }
+ }
+ },
+ {
+ url: 'resource/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/resource/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/resource/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/system/role.js b/mock/system/role.js
new file mode 100644
index 0000000..508ac84
--- /dev/null
+++ b/mock/system/role.js
@@ -0,0 +1,207 @@
+const tree = [
+ {
+ "id":1,
+ "pid":"0",
+ "name":"超级管理员"
+ }
+]
+const list = [
+ {
+ "deptName":"顶级",
+ "pName":"",
+ "num":1,
+ "name":"超级管理员",
+ "deptid":"0",
+ "pid":"0",
+ "id":1,
+ "version":1,
+ "tips":"administrator"
+ },
+ {
+ "deptName":"高压管网分公司",
+ "pName":"超级管理员",
+ "num":2,
+ "name":"高压管网分公司系统管理员",
+ "deptid":"24",
+ "pid":1,
+ "id":2,
+ "version":"",
+ "tips":"rqadmin"
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/role/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: list
+ }
+ }
+ }
+ },
+
+ // mock get all roles form server
+ {
+ url: '/role/tree',
+ type: 'get',
+ response: _ => {
+ return {
+ 'code': 200,
+ 'message': 'success',
+ 'data': {
+ 'list': tree
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/code/roleType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '菜单',
+ 'id': '55',
+ 'value': '03'
+ },
+ {
+ 'name': '按钮',
+ 'id': '56',
+ 'value': '04'
+ }
+ ]
+ }
+ }
+ },
+ {
+ url: '/role/treeByUserId',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {
+ 'list': [
+ {
+ "id":1,
+ "pid":"0",
+ "name":"超级管理员",
+ "open":true,
+ "checked":false
+ }
+ ]
+ }
+ }
+ }
+ },
+ {
+ url: '/role/treeByRoleId',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {
+ 'list': [
+ {
+ "id":"26",
+ "pid":"24",
+ "name":"运行二所",
+ "open":true,
+ "checked":true
+ }
+ ]
+ }
+ }
+ }
+ },
+ {
+ url: '/role/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/role/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/role/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/role/funcAuthor',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/role/dataAuthor',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/code/dataScopeType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '全部',
+ 'id': '55',
+ 'value': '03'
+ },
+ {
+ 'name': '本部门',
+ 'id': '56',
+ 'value': '04'
+ },
+ {
+ 'name': '自定义',
+ 'id': '57',
+ 'value': '04'
+ }
+ ]
+ }
+ }
+ }
+]
diff --git a/mock/config.js b/mock/config.js
new file mode 100644
index 0000000..7d111e0
--- /dev/null
+++ b/mock/config.js
@@ -0,0 +1,15 @@
+// import { param2Obj } from './utils'
+
+const baseConfig = {
+ kaptcha: true
+}
+
+export default {
+ baseconfig: res => {
+ return {
+ code: 200,
+ success: true,
+ data: baseConfig
+ }
+ }
+}
diff --git a/mock/index.js b/mock/index.js
new file mode 100644
index 0000000..d2713dd
--- /dev/null
+++ b/mock/index.js
@@ -0,0 +1,70 @@
+const Mock = require('mockjs')
+const { param2Obj } = require('./utils')
+
+const user = require('./system/user')
+const resource = require('./system/resource')
+const dict = require('./system/dict')
+const dept = require('./system/dept')
+const area = require('./system/area')
+const role = require('./system/role')
+const log = require('./system/log')
+const config = require('./system/config')
+const search = require('./remote-search')
+
+const mocks = [
+ ...user,
+ ...resource,
+ ...dict,
+ ...area,
+ ...dept,
+ ...role,
+ ...log,
+ ...config,
+ ...search
+]
+
+// for front mock
+// please use it cautiously, it will redefine XMLHttpRequest,
+// which will cause many of your third-party libraries to be invalidated(like progress event).
+function mockXHR() {
+ // mock patch
+ // https://github.com/nuysoft/Mock/issues/300
+ Mock.XHR.prototype.proxy_send = Mock.XHR.prototype.send
+ Mock.XHR.prototype.send = function() {
+ if (this.custom.xhr) {
+ this.custom.xhr.withCredentials = this.withCredentials || false
+
+ if (this.responseType) {
+ this.custom.xhr.responseType = this.responseType
+ }
+ }
+ this.proxy_send(...arguments)
+ }
+
+ function XHR2ExpressReqWrap(respond) {
+ return function(options) {
+ let result = null
+ if (respond instanceof Function) {
+ const { body, type, url } = options
+ // https://expressjs.com/en/4x/api.html#req
+ result = respond({
+ method: type,
+ body: JSON.parse(body),
+ query: param2Obj(url)
+ })
+ } else {
+ result = respond
+ }
+ return Mock.mock(result)
+ }
+ }
+
+ for (const i of mocks) {
+ Mock.mock(new RegExp(i.url), i.type || 'get', XHR2ExpressReqWrap(i.response))
+ }
+}
+
+module.exports = {
+ mocks,
+ mockXHR
+}
diff --git a/mock/mock-server.js b/mock/mock-server.js
new file mode 100644
index 0000000..8941ec0
--- /dev/null
+++ b/mock/mock-server.js
@@ -0,0 +1,81 @@
+const chokidar = require('chokidar')
+const bodyParser = require('body-parser')
+const chalk = require('chalk')
+const path = require('path')
+const Mock = require('mockjs')
+
+const mockDir = path.join(process.cwd(), 'mock')
+
+function registerRoutes(app) {
+ let mockLastIndex
+ const { mocks } = require('./index.js')
+ const mocksForServer = mocks.map(route => {
+ return responseFake(route.url, route.type, route.response)
+ })
+ for (const mock of mocksForServer) {
+ app[mock.type](mock.url, mock.response)
+ mockLastIndex = app._router.stack.length
+ }
+ const mockRoutesLength = Object.keys(mocksForServer).length
+ return {
+ mockRoutesLength: mockRoutesLength,
+ mockStartIndex: mockLastIndex - mockRoutesLength
+ }
+}
+
+function unregisterRoutes() {
+ Object.keys(require.cache).forEach(i => {
+ if (i.includes(mockDir)) {
+ delete require.cache[require.resolve(i)]
+ }
+ })
+}
+
+// for mock server
+const responseFake = (url, type, respond) => {
+ return {
+ url: new RegExp(`${process.env.VUE_APP_BASE_API}${url}`),
+ type: type || 'get',
+ response(req, res) {
+ console.log('request invoke:' + req.path)
+ res.json(Mock.mock(respond instanceof Function ? respond(req, res) : respond))
+ }
+ }
+}
+
+module.exports = app => {
+ // parse app.body
+ // https://expressjs.com/en/4x/api.html#req.body
+ app.use(bodyParser.json())
+ app.use(bodyParser.urlencoded({
+ extended: true
+ }))
+
+ const mockRoutes = registerRoutes(app)
+ var mockRoutesLength = mockRoutes.mockRoutesLength
+ var mockStartIndex = mockRoutes.mockStartIndex
+
+ // watch files, hot reload mock server
+ chokidar.watch(mockDir, {
+ ignored: /mock-server/,
+ ignoreInitial: true
+ }).on('all', (event, path) => {
+ if (event === 'change' || event === 'add') {
+ try {
+ // remove mock routes stack
+ app._router.stack.splice(mockStartIndex, mockRoutesLength)
+
+ // clear routes cache
+ unregisterRoutes()
+
+ const mockRoutes = registerRoutes(app)
+ mockRoutesLength = mockRoutes.mockRoutesLength
+ mockStartIndex = mockRoutes.mockStartIndex
+
+ console.log(chalk.magentaBright(`\n > Mock Server hot reload success! changed ${path}`))
+ } catch (error) {
+ console.log(chalk.redBright(error))
+ }
+ }
+ })
+}
diff --git a/mock/remote-search.js b/mock/remote-search.js
new file mode 100644
index 0000000..b5164b1
--- /dev/null
+++ b/mock/remote-search.js
@@ -0,0 +1,51 @@
+const Mock = require('mockjs')
+
+const NameList = []
+const count = 100
+
+for (let i = 0; i < count; i++) {
+ NameList.push(Mock.mock({
+ name: '@first'
+ }))
+}
+NameList.push({ name: 'mock-Pan' })
+
+module.exports = [
+ // username search
+ {
+ url: '/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: '/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/mock/system/area.js b/mock/system/area.js
new file mode 100644
index 0000000..1586661
--- /dev/null
+++ b/mock/system/area.js
@@ -0,0 +1,130 @@
+const list = [
+ {
+ 'id': '11010100102',
+ 'lat': '',
+ 'level': 5,
+ 'levelName': '社区',
+ 'lng': '',
+ 'name': '测试社区3',
+ 'num': 1,
+ 'pid': '110101001',
+ 'pids': '[0],[110000],[110100],[110101],[110101001],',
+ 'simplename': '测试社区2'
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/area/listPage',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: list,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/area/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: [
+ {
+ 'id': '110000',
+ 'pid': '0',
+ 'name': '北京市',
+ 'level': 1,
+ 'pids': [0],
+ 'levelName': '省级',
+ 'simplename': '北京'
+ }
+ ]
+ }
+ }
+ },
+ {
+ url: '/area/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/area/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/area/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/code/levelType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '省级',
+ 'id': '166',
+ 'value': '1'
+ },
+ {
+ 'name': '市级',
+ 'id': '167',
+ 'value': '2'
+ },
+ {
+ 'name': '区级',
+ 'id': '168',
+ 'value': '3'
+ },
+ {
+ 'name': '街道',
+ 'id': '169',
+ 'value': '4'
+ },
+ {
+ 'name': '社区',
+ 'id': '170',
+ 'value': '5'
+ },
+ {
+ 'name': '网格',
+ 'id': '171',
+ 'value': '6'
+ },
+ {
+ 'name': '责任网格',
+ 'id': '172',
+ 'value': '7'
+ }
+ ]
+ }
+ }
+ }
+]
diff --git a/mock/system/config.js b/mock/system/config.js
new file mode 100644
index 0000000..652e41d
--- /dev/null
+++ b/mock/system/config.js
@@ -0,0 +1,18 @@
+module.exports = [
+ {
+ url: '/config/baseConfig',
+ type: 'get',
+ response: _ => {
+ return {
+ 'code': 200,
+ 'data': {
+ 'kaptcha': false,
+ 'publicKey': 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCu5k8gcTFJy5UtMfmtKiR3f/EcUe93kzfteRj6+sM5fHRvOib82+uqQMjgaRZiMcr3HiHIFY5vA6c+Rfb5R2COitoOhxyA9U2eLXknzxLUQIAqXAvKQO8KnerA1Qjcds7xhJB2XPhWFlY4RVtMT2wr2lMd29QDE4F/kzyDhNBpxwIDAQAB',
+ 'sid': 'f390b7d7-337b-431b-be22-fb860a6c04d4'
+ },
+ 'message': '请求成功',
+ 'success': true
+ }
+ }
+ }
+]
diff --git a/mock/system/dept.js b/mock/system/dept.js
new file mode 100644
index 0000000..2c19c94
--- /dev/null
+++ b/mock/system/dept.js
@@ -0,0 +1,88 @@
+const list = [
+ {
+ 'id': '1',
+ 'simplename': '二分公司',
+ 'fullname': '二分公司',
+ 'num': 1,
+ 'pid': '0',
+ 'pids': '[0,1,2]',
+ 'pName': '顶级',
+ 'version': '',
+ 'tips': ''
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/dept/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: list
+ }
+ }
+ }
+ },
+ {
+ url: '/dept/tree',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: [
+ {
+ 'id': '0',
+ 'pid': '',
+ 'name': '顶级',
+ 'open': 'false',
+ 'checked': ''
+ },
+ {
+ 'id': '26',
+ 'pid': '24',
+ 'name': '运行二所',
+ 'open': 'false',
+ 'checked': ''
+ }
+ ]
+ }
+ }
+ }
+ },
+ {
+ url: '/dept/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dept/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dept/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/system/dict.js b/mock/system/dict.js
new file mode 100644
index 0000000..60de4cd
--- /dev/null
+++ b/mock/system/dict.js
@@ -0,0 +1,69 @@
+const list = [
+ {
+ 'code': 'sysStatus',
+ 'num': 0,
+ 'name': '状态',
+ 'pid': '0',
+ 'id': '16',
+ 'detail': '1:启用:1;2:禁用:2',
+ 'tips': ''
+ },
+ {
+ 'code': 'sysSex',
+ 'num': 0,
+ 'name': '性别',
+ 'pid': '0',
+ 'id': '29',
+ 'detail': '1:男:1;2:女:2',
+ 'tips': ''
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/dict/listPage',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: list,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/system/log.js b/mock/system/log.js
new file mode 100644
index 0000000..9b6306e
--- /dev/null
+++ b/mock/system/log.js
@@ -0,0 +1,115 @@
+const logTypes = [
+ {
+ 'value': '0',
+ 'name': '业务日志'
+ },
+ {
+ 'value': '1',
+ 'name': '登录日志'
+ }
+]
+const loglist = [
+ {
+ 'id': 'c4cdba483fb1449aaad1e6c49353c6b3',
+ 'logtype': '业务日志',
+ 'createtime': '2019-04-04 14:23:31',
+ 'logname': '修改用户',
+ 'succeed': '成功',
+ 'deptid': '24',
+ 'deptName': '总公司',
+ 'message': '账号=yxssadmin...',
+ 'userName': 'bruser',
+ 'userid': '45'
+ }
+]
+const loginloglist = [
+ {
+ 'createtime': '2020-03-26 16:03:23',
+ 'logname': '登录日志',
+ 'succeed': '成功',
+ 'ip': '192.168.8.184',
+ 'deptid': '0',
+ 'message': '',
+ 'userName': '超级管理员',
+ 'userid': '1'
+ },
+ {
+ 'createtime': '2020-03-26 15:13:50',
+ 'logname': '登录日志',
+ 'succeed': '成功',
+ 'ip': '192.168.8.184',
+ 'deptid': '0',
+ 'message': '',
+ 'userName': '超级管理员',
+ 'userid': '1'
+ },
+ {
+ 'createtime': '2020-03-26 14:47:05',
+ 'logname': '登录日志',
+ 'succeed': '成功',
+ 'ip': '192.168.8.105',
+ 'deptid': '0',
+ 'message': '',
+ 'userName': '超级管理员',
+ 'userid': '1'
+ }]
+module.exports = [
+ {
+ url: '/loginLog/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: loginloglist,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/log/list',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: loglist,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/log/detail',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ 'createtime': '2020-03-26',
+ 'logtype': '业务日志',
+ 'classname': 'com.casic.missiles.modular.system.controller.RoleController',
+ 'method': 'dataAuthor',
+ 'logname': '数据权限配置',
+ 'succeed': '成功',
+ 'id': '1243081729056264193',
+ 'message': '角色名称=十一室管理员,资源名称=',
+ 'userName': '超级管理员',
+ 'regularMessage': '角色名称=十一室管理员,资源名称=',
+ 'userid': '1'
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/code/logType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: logTypes
+ }
+ }
+ }
+]
diff --git a/mock/system/resource.js b/mock/system/resource.js
new file mode 100644
index 0000000..1122ea8
--- /dev/null
+++ b/mock/system/resource.js
@@ -0,0 +1,1569 @@
+const tree = [
+ {
+ 'checked': false,
+ 'code': 'system',
+ 'id': '105',
+ 'name': '系统管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],',
+ 'pid': '1189107859077373954',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr',
+ 'id': '106',
+ 'name': '用户管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_add',
+ 'id': '107',
+ 'name': '添加用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_edit',
+ 'id': '108',
+ 'name': '修改用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_delete',
+ 'id': '109',
+ 'name': '删除用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_reset',
+ 'id': '110',
+ 'name': '重置密码',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_freeze',
+ 'id': '111',
+ 'name': '冻结用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_unfreeze',
+ 'id': '112',
+ 'name': '解除冻结用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_setRole',
+ 'id': '113',
+ 'name': '分配角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role',
+ 'id': '114',
+ 'name': '角色管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_add',
+ 'id': '115',
+ 'name': '添加角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_edit',
+ 'id': '116',
+ 'name': '修改角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_remove',
+ 'id': '117',
+ 'name': '删除角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_setAuthority',
+ 'id': '118',
+ 'name': '配置权限',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu',
+ 'id': '119',
+ 'name': '资源管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_add',
+ 'id': '120',
+ 'name': '添加菜单',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_edit',
+ 'id': '121',
+ 'name': '修改菜单',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_remove',
+ 'id': '122',
+ 'name': '删除菜单',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log',
+ 'id': '128',
+ 'name': '日志管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept',
+ 'id': '131',
+ 'name': '组织管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict',
+ 'id': '132',
+ 'name': '字典管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'loginLog',
+ 'id': '133',
+ 'name': '登录日志',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log_clean',
+ 'id': '134',
+ 'name': '清空日志',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'pid': '128',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_add',
+ 'id': '135',
+ 'name': '添加部门',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_update',
+ 'id': '136',
+ 'name': '修改部门',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_delete',
+ 'id': '137',
+ 'name': '删除部门',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_add',
+ 'id': '138',
+ 'name': '添加字典',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_update',
+ 'id': '139',
+ 'name': '修改字典',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_delete',
+ 'id': '140',
+ 'name': '删除字典',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_list',
+ 'id': '151',
+ 'name': '菜单列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_list',
+ 'id': '153',
+ 'name': '部门列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_detail',
+ 'id': '154',
+ 'name': '部门详情',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_list',
+ 'id': '156',
+ 'name': '字典列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_detail',
+ 'id': '157',
+ 'name': '字典详情',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log_list',
+ 'id': '158',
+ 'name': '日志列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'pid': '128',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log_detail',
+ 'id': '159',
+ 'name': '日志详情',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'pid': '128',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'del_login_log',
+ 'id': '160',
+ 'name': '清空登录日志',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'pid': '133',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'login_log_list',
+ 'id': '161',
+ 'name': '登录日志列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'pid': '133',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_list',
+ 'id': '164',
+ 'name': '角色列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_list',
+ 'id': '167',
+ 'name': '用户列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'data_author',
+ 'id': '1138364388198715393',
+ 'name': '数据权限',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'AreaAdmin',
+ 'id': '1170945119300976642',
+ 'name': '区域管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'sys',
+ 'id': '1189107859077373954',
+ 'name': '基础权限管理',
+ 'open': true,
+ 'pcodes': '[0],',
+ 'pid': '0',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_listPage',
+ 'id': '1191975090689810434',
+ 'name': '区域列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_add',
+ 'id': '1191975312815955969',
+ 'name': '新增区域',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_update',
+ 'id': '1191975427559530497',
+ 'name': '修改区域',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_delete',
+ 'id': '1191975543687225346',
+ 'name': '区域删除',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': true,
+ 'code': '',
+ 'id': '0',
+ 'name': '顶级',
+ 'open': true,
+ 'pcodes': '',
+ 'pid': '',
+ 'value': ''
+ }
+]
+const list = [
+ {
+ 'isopen': '1',
+ 'code': 'system',
+ 'pcode': 'sys',
+ 'num': 4,
+ 'icon': 'icon-setting',
+ 'pid': '1189107859077373954',
+ 'isMenu': '是',
+ 'url': '/system',
+ 'tips': '',
+ 'pcodes': '[0],[sys],',
+ 'name': '系统管理',
+ 'statusName': '启用',
+ 'id': '105',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': true,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr',
+ 'pcode': 'system',
+ 'num': 1,
+ 'icon': 'icon-user',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/mgr',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '用户管理',
+ 'statusName': '启用',
+ 'id': '106',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_add',
+ 'pcode': 'mgr',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '添加用户',
+ 'statusName': '启用',
+ 'id': '107',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_edit',
+ 'pcode': 'mgr',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '修改用户',
+ 'statusName': '启用',
+ 'id': '108',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_delete',
+ 'pcode': 'mgr',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '删除用户',
+ 'statusName': '启用',
+ 'id': '109',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_reset',
+ 'pcode': 'mgr',
+ 'num': 4,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/reset',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '重置密码',
+ 'statusName': '启用',
+ 'id': '110',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_freeze',
+ 'pcode': 'mgr',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/freeze',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '冻结用户',
+ 'statusName': '启用',
+ 'id': '111',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_unfreeze',
+ 'pcode': 'mgr',
+ 'num': 6,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/unfreeze',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '解除冻结用户',
+ 'statusName': '启用',
+ 'id': '112',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_setRole',
+ 'pcode': 'mgr',
+ 'num': 7,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/roleAssign',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '分配角色',
+ 'statusName': '启用',
+ 'id': '113',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role',
+ 'pcode': 'system',
+ 'num': 2,
+ 'icon': 'permission',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/role',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '角色管理',
+ 'statusName': '启用',
+ 'id': '114',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_add',
+ 'pcode': 'role',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '添加角色',
+ 'statusName': '启用',
+ 'id': '115',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_edit',
+ 'pcode': 'role',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '修改角色',
+ 'statusName': '启用',
+ 'id': '116',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_remove',
+ 'pcode': 'role',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '删除角色',
+ 'statusName': '启用',
+ 'id': '117',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_setAuthority',
+ 'pcode': 'role',
+ 'num': 4,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/funcAuthor',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '配置权限',
+ 'statusName': '启用',
+ 'id': '118',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu',
+ 'pcode': 'system',
+ 'num': 4,
+ 'icon': 'function',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/resource',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '资源管理',
+ 'statusName': '启用',
+ 'id': '119',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_add',
+ 'pcode': 'menu',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '添加菜单',
+ 'statusName': '启用',
+ 'id': '120',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_edit',
+ 'pcode': 'menu',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '修改菜单',
+ 'statusName': '启用',
+ 'id': '121',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_remove',
+ 'pcode': 'menu',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '删除菜单',
+ 'statusName': '启用',
+ 'id': '122',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log',
+ 'pcode': 'system',
+ 'num': 6,
+ 'icon': 'log',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/log',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '日志管理',
+ 'statusName': '启用',
+ 'id': '128',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept',
+ 'pcode': 'system',
+ 'num': 3,
+ 'icon': 'dept2',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/dept',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '组织管理',
+ 'statusName': '启用',
+ 'id': '131',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict',
+ 'pcode': 'system',
+ 'num': 4,
+ 'icon': 'icon-dict',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/dict',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '字典管理',
+ 'statusName': '启用',
+ 'id': '132',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'loginLog',
+ 'pcode': 'system',
+ 'num': 6,
+ 'icon': 'task',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/loginLog',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '登录日志',
+ 'statusName': '启用',
+ 'id': '133',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log_clean',
+ 'pcode': 'log',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '128',
+ 'isMenu': '不是',
+ 'url': '/log/delLog',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'name': '清空日志',
+ 'statusName': '启用',
+ 'id': '134',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_add',
+ 'pcode': 'dept',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '添加部门',
+ 'statusName': '启用',
+ 'id': '135',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_update',
+ 'pcode': 'dept',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '修改部门',
+ 'statusName': '启用',
+ 'id': '136',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_delete',
+ 'pcode': 'dept',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '删除部门',
+ 'statusName': '启用',
+ 'id': '137',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_add',
+ 'pcode': 'dict',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '添加字典',
+ 'statusName': '启用',
+ 'id': '138',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_update',
+ 'pcode': 'dict',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '修改字典',
+ 'statusName': '启用',
+ 'id': '139',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_delete',
+ 'pcode': 'dict',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '删除字典',
+ 'statusName': '启用',
+ 'id': '140',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_list',
+ 'pcode': 'menu',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '菜单列表',
+ 'statusName': '启用',
+ 'id': '151',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_list',
+ 'pcode': 'dept',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '部门列表',
+ 'statusName': '启用',
+ 'id': '153',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_detail',
+ 'pcode': 'dept',
+ 'num': 6,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/detail',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '部门详情',
+ 'statusName': '启用',
+ 'id': '154',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_list',
+ 'pcode': 'dict',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '字典列表',
+ 'statusName': '启用',
+ 'id': '156',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_detail',
+ 'pcode': 'dict',
+ 'num': 6,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/detail',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '字典详情',
+ 'statusName': '启用',
+ 'id': '157',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log_list',
+ 'pcode': 'log',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '128',
+ 'isMenu': '不是',
+ 'url': '/log/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'name': '日志列表',
+ 'statusName': '启用',
+ 'id': '158',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log_detail',
+ 'pcode': 'log',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '128',
+ 'isMenu': '不是',
+ 'url': '/log/detail',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'name': '日志详情',
+ 'statusName': '启用',
+ 'id': '159',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'del_login_log',
+ 'pcode': 'loginLog',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '133',
+ 'isMenu': '不是',
+ 'url': '/loginLog/delLoginLog',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'name': '清空登录日志',
+ 'statusName': '启用',
+ 'id': '160',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'login_log_list',
+ 'pcode': 'loginLog',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '133',
+ 'isMenu': '不是',
+ 'url': '/loginLog/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'name': '登录日志列表',
+ 'statusName': '启用',
+ 'id': '161',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_list',
+ 'pcode': 'role',
+ 'num': 7,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '角色列表',
+ 'statusName': '启用',
+ 'id': '164',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_list',
+ 'pcode': 'mgr',
+ 'num': 10,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': ' /mgr/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '用户列表',
+ 'statusName': '启用',
+ 'id': '167',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'data_author',
+ 'pcode': 'role',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/dataAuthor',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '数据权限',
+ 'statusName': '启用',
+ 'id': '1138364388198715393',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'AreaAdmin',
+ 'pcode': 'system',
+ 'num': 0,
+ 'icon': 'icon-base',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/area',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '区域管理',
+ 'statusName': '启用',
+ 'id': '1170945119300976642',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'sys',
+ 'pcode': '0',
+ 'num': 0,
+ 'icon': 'icon-setting',
+ 'pid': '0',
+ 'isMenu': '不是',
+ 'url': '/sys',
+ 'tips': '',
+ 'pcodes': '[0],',
+ 'name': '基础权限管理',
+ 'statusName': '启用',
+ 'id': '1189107859077373954',
+ 'ismenu': '0',
+ 'levels': 1,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '02'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_listPage',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/listPage',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '区域列表',
+ 'statusName': '启用',
+ 'id': '1191975090689810434',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_add',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '新增区域',
+ 'statusName': '启用',
+ 'id': '1191975312815955969',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_update',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '修改区域',
+ 'statusName': '启用',
+ 'id': '1191975427559530497',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_delete',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '区域删除',
+ 'statusName': '启用',
+ 'id': '1191975543687225346',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/resource/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: list
+ }
+ }
+ }
+ },
+
+ // mock get all roles form server
+ {
+ url: '/resource/tree',
+ type: 'get',
+ response: _ => {
+ return {
+ 'code': 200,
+ 'message': 'success',
+ 'data': {
+ 'list': tree
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/code/resourceType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '菜单',
+ 'id': '55',
+ 'value': '03'
+ },
+ {
+ 'name': '按钮',
+ 'id': '56',
+ 'value': '04'
+ }
+ ]
+ }
+ }
+ },
+ {
+ url: '/resource/treeListByRoleId',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {
+ 'list': tree
+ }
+ }
+ }
+ },
+ {
+ url: 'resource/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/resource/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/resource/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/system/role.js b/mock/system/role.js
new file mode 100644
index 0000000..508ac84
--- /dev/null
+++ b/mock/system/role.js
@@ -0,0 +1,207 @@
+const tree = [
+ {
+ "id":1,
+ "pid":"0",
+ "name":"超级管理员"
+ }
+]
+const list = [
+ {
+ "deptName":"顶级",
+ "pName":"",
+ "num":1,
+ "name":"超级管理员",
+ "deptid":"0",
+ "pid":"0",
+ "id":1,
+ "version":1,
+ "tips":"administrator"
+ },
+ {
+ "deptName":"高压管网分公司",
+ "pName":"超级管理员",
+ "num":2,
+ "name":"高压管网分公司系统管理员",
+ "deptid":"24",
+ "pid":1,
+ "id":2,
+ "version":"",
+ "tips":"rqadmin"
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/role/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: list
+ }
+ }
+ }
+ },
+
+ // mock get all roles form server
+ {
+ url: '/role/tree',
+ type: 'get',
+ response: _ => {
+ return {
+ 'code': 200,
+ 'message': 'success',
+ 'data': {
+ 'list': tree
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/code/roleType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '菜单',
+ 'id': '55',
+ 'value': '03'
+ },
+ {
+ 'name': '按钮',
+ 'id': '56',
+ 'value': '04'
+ }
+ ]
+ }
+ }
+ },
+ {
+ url: '/role/treeByUserId',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {
+ 'list': [
+ {
+ "id":1,
+ "pid":"0",
+ "name":"超级管理员",
+ "open":true,
+ "checked":false
+ }
+ ]
+ }
+ }
+ }
+ },
+ {
+ url: '/role/treeByRoleId',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {
+ 'list': [
+ {
+ "id":"26",
+ "pid":"24",
+ "name":"运行二所",
+ "open":true,
+ "checked":true
+ }
+ ]
+ }
+ }
+ }
+ },
+ {
+ url: '/role/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/role/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/role/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/role/funcAuthor',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/role/dataAuthor',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/code/dataScopeType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '全部',
+ 'id': '55',
+ 'value': '03'
+ },
+ {
+ 'name': '本部门',
+ 'id': '56',
+ 'value': '04'
+ },
+ {
+ 'name': '自定义',
+ 'id': '57',
+ 'value': '04'
+ }
+ ]
+ }
+ }
+ }
+]
diff --git a/mock/system/user.js b/mock/system/user.js
new file mode 100644
index 0000000..5601db9
--- /dev/null
+++ b/mock/system/user.js
@@ -0,0 +1,860 @@
+// 用户详情
+const userinfo = {
+ 'account': 'admin',
+ 'avatar': 'girl.gif',
+ 'dataScope': [
+ '0',
+ '1236854643826184194',
+ '1236856061500936193',
+ '1236856816081391617',
+ '1236856889875976194',
+ '1236856952987668481',
+ '1236857009937928194',
+ '1236857134915604482',
+ '1236857274443321346',
+ '1236857346400800770',
+ '1236857428776931330',
+ '1236857492744261633',
+ '1236857661695021057',
+ '1236857767731220481',
+ '1236857826057211905',
+ '1236857873113108481',
+ '1236857966566395906',
+ '1236858049731055618',
+ '1236858125752815618',
+ '1236858179561541633',
+ '1236858248830472194',
+ '1236858330946555905',
+ '1236858380556783617',
+ '1236858422894088194',
+ '1236858475780067330',
+ '1236858517333037058',
+ '1236858579396153346',
+ '1236858642176495618',
+ '1236858704961032194',
+ '1236858748544045057',
+ '1236858806672904193',
+ '1236858863296008193',
+ '1236858908317667330'
+ ],
+ 'deptId': '0',
+ 'deptName': '顶级',
+ 'devices': [],
+ 'id': '1',
+ 'ipAddr': '124.64.16.144',
+ 'name': '超超级管理员',
+ 'phone': '18200000000',
+ 'roleList': [
+ '1'
+ ],
+ 'roleNames': [
+ '超级管理员'
+ ],
+ 'roleTips': [
+ 'administrator'
+ ],
+ 'scopeType': '4',
+ 'targetId': '',
+ 'targetName': '',
+ 'tenantId': ''
+}
+const list = [
+ {
+ 'birthday': '2017-05-05 00:00:00',
+ 'deptName': '顶级',
+ 'createtime': '2016-01-29 08:49:53',
+ 'roleid': '1',
+ 'sex': '2',
+ 'deptid': '0',
+ 'avatar': 'girl.gif',
+ 'version': 25,
+ 'phone': '18200000000',
+ 'sexName': '女',
+ 'name': '超级管理员',
+ 'roleName': '超级管理员',
+ 'statusName': '启用',
+ 'id': '1',
+ 'account': 'admin',
+ 'email': 'sn93@qq.com',
+ 'status': '1'
+ }
+]
+// 权限列表
+const permisson = {
+ 'menus': [
+ {
+ 'children': '',
+ 'code': 'sys',
+ 'icon': 'icon-setting',
+ 'id': '1189107859077373954',
+ 'ismenu': '0',
+ 'levels': 1,
+ 'name': '基础权限管理',
+ 'num': 0,
+ 'parentId': '0',
+ 'resourceType': '02',
+ 'url': '/sys'
+ },
+ {
+ 'children': '',
+ 'code': 'data_author',
+ 'icon': '',
+ 'id': '1138364388198715393',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '数据权限',
+ 'num': 0,
+ 'parentId': '114',
+ 'resourceType': '0',
+ 'url': '/role/dataAuthor'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr',
+ 'icon': 'icon-user',
+ 'id': '106',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '用户管理',
+ 'num': 1,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/mgr'
+ },
+ {
+ 'children': '',
+ 'code': 'role',
+ 'icon': 'permission',
+ 'id': '114',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '角色管理',
+ 'num': 2,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/role'
+ },
+ {
+ 'children': '',
+ 'code': 'role_edit',
+ 'icon': '',
+ 'id': '116',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '修改角色',
+ 'num': 2,
+ 'parentId': '114',
+ 'resourceType': '0',
+ 'url': '/role/update'
+ },
+ {
+ 'children': '',
+ 'code': 'role_remove',
+ 'icon': '',
+ 'id': '117',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '删除角色',
+ 'num': 3,
+ 'parentId': '114',
+ 'resourceType': '0',
+ 'url': '/role/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'dept',
+ 'icon': 'dept2',
+ 'id': '131',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '组织管理',
+ 'num': 3,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/dept'
+ },
+ {
+ 'children': '',
+ 'code': 'menu',
+ 'icon': 'function',
+ 'id': '119',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '资源管理',
+ 'num': 4,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/resource'
+ },
+ {
+ 'children': '',
+ 'code': 'role_setAuthority',
+ 'icon': '',
+ 'id': '118',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '配置权限',
+ 'num': 4,
+ 'parentId': '114',
+ 'resourceType': '0',
+ 'url': '/role/funcAuthor'
+ },
+ {
+ 'children': '',
+ 'code': 'system',
+ 'icon': 'icon-setting',
+ 'id': '105',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '系统管理',
+ 'num': 4,
+ 'parentId': '1189107859077373954',
+ 'resourceType': '03',
+ 'url': '/system'
+ },
+ {
+ 'children': '',
+ 'code': 'menu_list',
+ 'icon': '',
+ 'id': '151',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '菜单列表',
+ 'num': 5,
+ 'parentId': '119',
+ 'resourceType': '0',
+ 'url': '/resource/list'
+ },
+ {
+ 'children': '',
+ 'code': 'loginLog',
+ 'icon': 'task',
+ 'id': '133',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '登录日志',
+ 'num': 6,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/loginLog'
+ },
+ {
+ 'children': '',
+ 'code': 'log',
+ 'icon': 'log',
+ 'id': '128',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '日志管理',
+ 'num': 6,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/log'
+ },
+ {
+ 'children': '',
+ 'code': 'AreaAdmin',
+ 'icon': 'icon-base',
+ 'id': '1170945119300976642',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'name': '区域管理',
+ 'num': 0,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/area'
+ },
+ {
+ 'children': '',
+ 'code': 'visitor_permission',
+ 'icon': '',
+ 'id': '1202403877222735874',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'name': '访客授权列表',
+ 'num': 0,
+ 'parentId': '1202403125913837569',
+ 'resourceType': '03',
+ 'url': '/acsPermission/listVisitorPerm'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_delete',
+ 'icon': '',
+ 'id': '137',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '删除部门',
+ 'num': 1,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'role_add',
+ 'icon': '',
+ 'id': '115',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加角色',
+ 'num': 1,
+ 'parentId': '114',
+ 'resourceType': '04',
+ 'url': '/role/add'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_add',
+ 'icon': '',
+ 'id': '138',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加字典',
+ 'num': 1,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/add'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_delete',
+ 'icon': '',
+ 'id': '140',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '删除字典',
+ 'num': 1,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_add',
+ 'icon': '',
+ 'id': '135',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加部门',
+ 'num': 1,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/add'
+ },
+ {
+ 'children': '',
+ 'code': 'del_login_log',
+ 'icon': '',
+ 'id': '160',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '清空登录日志',
+ 'num': 1,
+ 'parentId': '133',
+ 'resourceType': '04',
+ 'url': '/loginLog/delLoginLog'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_update',
+ 'icon': '',
+ 'id': '139',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '修改字典',
+ 'num': 1,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/update'
+ },
+ {
+ 'children': '',
+ 'code': 'menu_add',
+ 'icon': '',
+ 'id': '120',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加菜单',
+ 'num': 1,
+ 'parentId': '119',
+ 'resourceType': '04',
+ 'url': '/resource/add'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_add',
+ 'icon': '',
+ 'id': '107',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加用户',
+ 'num': 1,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/add'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_update',
+ 'icon': '',
+ 'id': '136',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '修改部门',
+ 'num': 1,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/update'
+ },
+ {
+ 'children': '',
+ 'code': 'menu_edit',
+ 'icon': '',
+ 'id': '121',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '修改菜单',
+ 'num': 2,
+ 'parentId': '119',
+ 'resourceType': '04',
+ 'url': '/resource/update'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_edit',
+ 'icon': '',
+ 'id': '108',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '修改用户',
+ 'num': 2,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/update'
+ },
+ {
+ 'children': '',
+ 'code': 'log_list',
+ 'icon': '',
+ 'id': '158',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '日志列表',
+ 'num': 2,
+ 'parentId': '128',
+ 'resourceType': '04',
+ 'url': '/log/list'
+ },
+ {
+ 'children': '',
+ 'code': 'login_log_list',
+ 'icon': '',
+ 'id': '161',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '登录日志列表',
+ 'num': 2,
+ 'parentId': '133',
+ 'resourceType': '04',
+ 'url': '/loginLog/list'
+ },
+ {
+ 'children': '',
+ 'code': 'log_clean',
+ 'icon': '',
+ 'id': '134',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '清空日志',
+ 'num': 3,
+ 'parentId': '128',
+ 'resourceType': '04',
+ 'url': '/log/delLog'
+ },
+ {
+ 'children': '',
+ 'code': 'log_detail',
+ 'icon': '',
+ 'id': '159',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '日志详情',
+ 'num': 3,
+ 'parentId': '128',
+ 'resourceType': '04',
+ 'url': '/log/detail'
+ },
+ {
+ 'children': '',
+ 'code': 'menu_remove',
+ 'icon': '',
+ 'id': '122',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '删除菜单',
+ 'num': 3,
+ 'parentId': '119',
+ 'resourceType': '04',
+ 'url': '/resource/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_delete',
+ 'icon': '',
+ 'id': '109',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '删除用户',
+ 'num': 3,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_reset',
+ 'icon': '',
+ 'id': '110',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '重置密码',
+ 'num': 4,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/reset'
+ },
+ {
+ 'children': '',
+ 'code': 'dict',
+ 'icon': 'icon-dict',
+ 'id': '132',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'name': '字典管理',
+ 'num': 4,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/user'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_list',
+ 'icon': '',
+ 'id': '153',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '部门列表',
+ 'num': 5,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/list'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_list',
+ 'icon': '',
+ 'id': '156',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '字典列表',
+ 'num': 5,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/list'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_freeze',
+ 'icon': '',
+ 'id': '111',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '冻结用户',
+ 'num': 5,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/freeze'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_detail',
+ 'icon': '',
+ 'id': '154',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '部门详情',
+ 'num': 6,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/detail'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_detail',
+ 'icon': '',
+ 'id': '157',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '字典详情',
+ 'num': 6,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/detail'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_unfreeze',
+ 'icon': '',
+ 'id': '112',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '解除冻结用户',
+ 'num': 6,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/unfreeze'
+ },
+ {
+ 'children': '',
+ 'code': 'role_list',
+ 'icon': '',
+ 'id': '164',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '角色列表',
+ 'num': 7,
+ 'parentId': '114',
+ 'resourceType': '04',
+ 'url': '/role/list'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_setRole',
+ 'icon': '',
+ 'id': '113',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '分配角色',
+ 'num': 7,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/roleAssign'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_list',
+ 'icon': '',
+ 'id': '167',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '用户列表',
+ 'num': 10,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': ' /mgr/list'
+ },
+ {
+ 'children': '',
+ 'code': 'area_add',
+ 'icon': '',
+ 'id': '1191975312815955969',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'name': '新增区域',
+ 'num': 0,
+ 'parentId': '1170945119300976642',
+ 'resourceType': '04',
+ 'url': '/area/add'
+ },
+ {
+ 'children': '',
+ 'code': 'area_delete',
+ 'icon': '',
+ 'id': '1191975543687225346',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'name': '区域删除',
+ 'num': 0,
+ 'parentId': '1170945119300976642',
+ 'resourceType': '04',
+ 'url': '/area/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'area_listPage',
+ 'icon': '',
+ 'id': '1191975090689810434',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'name': '区域列表',
+ 'num': 0,
+ 'parentId': '1170945119300976642',
+ 'resourceType': '04',
+ 'url': '/area/listPage'
+ },
+ {
+ 'children': '',
+ 'code': 'area_update',
+ 'icon': '',
+ 'id': '1191975427559530497',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'name': '修改区域',
+ 'num': 0,
+ 'parentId': '1170945119300976642',
+ 'resourceType': '04',
+ 'url': '/area/update'
+ }
+ ]
+}
+module.exports = [
+ {
+ url: '/user/login',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ success: true,
+ data: {
+ kaptcha: '',
+ token: '02deb42b-5298-431a-b690-d04573c18281'
+
+ }
+ }
+ }
+ },
+ {
+ url: '/user/info',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ success: true,
+ data: userinfo
+ }
+ }
+ },
+ {
+ url: '/user/permission',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ success: true,
+ data: permisson
+ }
+ }
+ },
+ {
+ url: '/user/logout',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ success: true
+ }
+ }
+ },
+ {
+ url: '/mgr/list',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: list,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/mgr/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/freeze',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/unfreeze',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/reset',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/roleAssign',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/changePwd',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/config.js b/mock/config.js
new file mode 100644
index 0000000..7d111e0
--- /dev/null
+++ b/mock/config.js
@@ -0,0 +1,15 @@
+// import { param2Obj } from './utils'
+
+const baseConfig = {
+ kaptcha: true
+}
+
+export default {
+ baseconfig: res => {
+ return {
+ code: 200,
+ success: true,
+ data: baseConfig
+ }
+ }
+}
diff --git a/mock/index.js b/mock/index.js
new file mode 100644
index 0000000..d2713dd
--- /dev/null
+++ b/mock/index.js
@@ -0,0 +1,70 @@
+const Mock = require('mockjs')
+const { param2Obj } = require('./utils')
+
+const user = require('./system/user')
+const resource = require('./system/resource')
+const dict = require('./system/dict')
+const dept = require('./system/dept')
+const area = require('./system/area')
+const role = require('./system/role')
+const log = require('./system/log')
+const config = require('./system/config')
+const search = require('./remote-search')
+
+const mocks = [
+ ...user,
+ ...resource,
+ ...dict,
+ ...area,
+ ...dept,
+ ...role,
+ ...log,
+ ...config,
+ ...search
+]
+
+// for front mock
+// please use it cautiously, it will redefine XMLHttpRequest,
+// which will cause many of your third-party libraries to be invalidated(like progress event).
+function mockXHR() {
+ // mock patch
+ // https://github.com/nuysoft/Mock/issues/300
+ Mock.XHR.prototype.proxy_send = Mock.XHR.prototype.send
+ Mock.XHR.prototype.send = function() {
+ if (this.custom.xhr) {
+ this.custom.xhr.withCredentials = this.withCredentials || false
+
+ if (this.responseType) {
+ this.custom.xhr.responseType = this.responseType
+ }
+ }
+ this.proxy_send(...arguments)
+ }
+
+ function XHR2ExpressReqWrap(respond) {
+ return function(options) {
+ let result = null
+ if (respond instanceof Function) {
+ const { body, type, url } = options
+ // https://expressjs.com/en/4x/api.html#req
+ result = respond({
+ method: type,
+ body: JSON.parse(body),
+ query: param2Obj(url)
+ })
+ } else {
+ result = respond
+ }
+ return Mock.mock(result)
+ }
+ }
+
+ for (const i of mocks) {
+ Mock.mock(new RegExp(i.url), i.type || 'get', XHR2ExpressReqWrap(i.response))
+ }
+}
+
+module.exports = {
+ mocks,
+ mockXHR
+}
diff --git a/mock/mock-server.js b/mock/mock-server.js
new file mode 100644
index 0000000..8941ec0
--- /dev/null
+++ b/mock/mock-server.js
@@ -0,0 +1,81 @@
+const chokidar = require('chokidar')
+const bodyParser = require('body-parser')
+const chalk = require('chalk')
+const path = require('path')
+const Mock = require('mockjs')
+
+const mockDir = path.join(process.cwd(), 'mock')
+
+function registerRoutes(app) {
+ let mockLastIndex
+ const { mocks } = require('./index.js')
+ const mocksForServer = mocks.map(route => {
+ return responseFake(route.url, route.type, route.response)
+ })
+ for (const mock of mocksForServer) {
+ app[mock.type](mock.url, mock.response)
+ mockLastIndex = app._router.stack.length
+ }
+ const mockRoutesLength = Object.keys(mocksForServer).length
+ return {
+ mockRoutesLength: mockRoutesLength,
+ mockStartIndex: mockLastIndex - mockRoutesLength
+ }
+}
+
+function unregisterRoutes() {
+ Object.keys(require.cache).forEach(i => {
+ if (i.includes(mockDir)) {
+ delete require.cache[require.resolve(i)]
+ }
+ })
+}
+
+// for mock server
+const responseFake = (url, type, respond) => {
+ return {
+ url: new RegExp(`${process.env.VUE_APP_BASE_API}${url}`),
+ type: type || 'get',
+ response(req, res) {
+ console.log('request invoke:' + req.path)
+ res.json(Mock.mock(respond instanceof Function ? respond(req, res) : respond))
+ }
+ }
+}
+
+module.exports = app => {
+ // parse app.body
+ // https://expressjs.com/en/4x/api.html#req.body
+ app.use(bodyParser.json())
+ app.use(bodyParser.urlencoded({
+ extended: true
+ }))
+
+ const mockRoutes = registerRoutes(app)
+ var mockRoutesLength = mockRoutes.mockRoutesLength
+ var mockStartIndex = mockRoutes.mockStartIndex
+
+ // watch files, hot reload mock server
+ chokidar.watch(mockDir, {
+ ignored: /mock-server/,
+ ignoreInitial: true
+ }).on('all', (event, path) => {
+ if (event === 'change' || event === 'add') {
+ try {
+ // remove mock routes stack
+ app._router.stack.splice(mockStartIndex, mockRoutesLength)
+
+ // clear routes cache
+ unregisterRoutes()
+
+ const mockRoutes = registerRoutes(app)
+ mockRoutesLength = mockRoutes.mockRoutesLength
+ mockStartIndex = mockRoutes.mockStartIndex
+
+ console.log(chalk.magentaBright(`\n > Mock Server hot reload success! changed ${path}`))
+ } catch (error) {
+ console.log(chalk.redBright(error))
+ }
+ }
+ })
+}
diff --git a/mock/remote-search.js b/mock/remote-search.js
new file mode 100644
index 0000000..b5164b1
--- /dev/null
+++ b/mock/remote-search.js
@@ -0,0 +1,51 @@
+const Mock = require('mockjs')
+
+const NameList = []
+const count = 100
+
+for (let i = 0; i < count; i++) {
+ NameList.push(Mock.mock({
+ name: '@first'
+ }))
+}
+NameList.push({ name: 'mock-Pan' })
+
+module.exports = [
+ // username search
+ {
+ url: '/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: '/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/mock/system/area.js b/mock/system/area.js
new file mode 100644
index 0000000..1586661
--- /dev/null
+++ b/mock/system/area.js
@@ -0,0 +1,130 @@
+const list = [
+ {
+ 'id': '11010100102',
+ 'lat': '',
+ 'level': 5,
+ 'levelName': '社区',
+ 'lng': '',
+ 'name': '测试社区3',
+ 'num': 1,
+ 'pid': '110101001',
+ 'pids': '[0],[110000],[110100],[110101],[110101001],',
+ 'simplename': '测试社区2'
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/area/listPage',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: list,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/area/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: [
+ {
+ 'id': '110000',
+ 'pid': '0',
+ 'name': '北京市',
+ 'level': 1,
+ 'pids': [0],
+ 'levelName': '省级',
+ 'simplename': '北京'
+ }
+ ]
+ }
+ }
+ },
+ {
+ url: '/area/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/area/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/area/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/code/levelType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '省级',
+ 'id': '166',
+ 'value': '1'
+ },
+ {
+ 'name': '市级',
+ 'id': '167',
+ 'value': '2'
+ },
+ {
+ 'name': '区级',
+ 'id': '168',
+ 'value': '3'
+ },
+ {
+ 'name': '街道',
+ 'id': '169',
+ 'value': '4'
+ },
+ {
+ 'name': '社区',
+ 'id': '170',
+ 'value': '5'
+ },
+ {
+ 'name': '网格',
+ 'id': '171',
+ 'value': '6'
+ },
+ {
+ 'name': '责任网格',
+ 'id': '172',
+ 'value': '7'
+ }
+ ]
+ }
+ }
+ }
+]
diff --git a/mock/system/config.js b/mock/system/config.js
new file mode 100644
index 0000000..652e41d
--- /dev/null
+++ b/mock/system/config.js
@@ -0,0 +1,18 @@
+module.exports = [
+ {
+ url: '/config/baseConfig',
+ type: 'get',
+ response: _ => {
+ return {
+ 'code': 200,
+ 'data': {
+ 'kaptcha': false,
+ 'publicKey': 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCu5k8gcTFJy5UtMfmtKiR3f/EcUe93kzfteRj6+sM5fHRvOib82+uqQMjgaRZiMcr3HiHIFY5vA6c+Rfb5R2COitoOhxyA9U2eLXknzxLUQIAqXAvKQO8KnerA1Qjcds7xhJB2XPhWFlY4RVtMT2wr2lMd29QDE4F/kzyDhNBpxwIDAQAB',
+ 'sid': 'f390b7d7-337b-431b-be22-fb860a6c04d4'
+ },
+ 'message': '请求成功',
+ 'success': true
+ }
+ }
+ }
+]
diff --git a/mock/system/dept.js b/mock/system/dept.js
new file mode 100644
index 0000000..2c19c94
--- /dev/null
+++ b/mock/system/dept.js
@@ -0,0 +1,88 @@
+const list = [
+ {
+ 'id': '1',
+ 'simplename': '二分公司',
+ 'fullname': '二分公司',
+ 'num': 1,
+ 'pid': '0',
+ 'pids': '[0,1,2]',
+ 'pName': '顶级',
+ 'version': '',
+ 'tips': ''
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/dept/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: list
+ }
+ }
+ }
+ },
+ {
+ url: '/dept/tree',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: [
+ {
+ 'id': '0',
+ 'pid': '',
+ 'name': '顶级',
+ 'open': 'false',
+ 'checked': ''
+ },
+ {
+ 'id': '26',
+ 'pid': '24',
+ 'name': '运行二所',
+ 'open': 'false',
+ 'checked': ''
+ }
+ ]
+ }
+ }
+ }
+ },
+ {
+ url: '/dept/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dept/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dept/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/system/dict.js b/mock/system/dict.js
new file mode 100644
index 0000000..60de4cd
--- /dev/null
+++ b/mock/system/dict.js
@@ -0,0 +1,69 @@
+const list = [
+ {
+ 'code': 'sysStatus',
+ 'num': 0,
+ 'name': '状态',
+ 'pid': '0',
+ 'id': '16',
+ 'detail': '1:启用:1;2:禁用:2',
+ 'tips': ''
+ },
+ {
+ 'code': 'sysSex',
+ 'num': 0,
+ 'name': '性别',
+ 'pid': '0',
+ 'id': '29',
+ 'detail': '1:男:1;2:女:2',
+ 'tips': ''
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/dict/listPage',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: list,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/system/log.js b/mock/system/log.js
new file mode 100644
index 0000000..9b6306e
--- /dev/null
+++ b/mock/system/log.js
@@ -0,0 +1,115 @@
+const logTypes = [
+ {
+ 'value': '0',
+ 'name': '业务日志'
+ },
+ {
+ 'value': '1',
+ 'name': '登录日志'
+ }
+]
+const loglist = [
+ {
+ 'id': 'c4cdba483fb1449aaad1e6c49353c6b3',
+ 'logtype': '业务日志',
+ 'createtime': '2019-04-04 14:23:31',
+ 'logname': '修改用户',
+ 'succeed': '成功',
+ 'deptid': '24',
+ 'deptName': '总公司',
+ 'message': '账号=yxssadmin...',
+ 'userName': 'bruser',
+ 'userid': '45'
+ }
+]
+const loginloglist = [
+ {
+ 'createtime': '2020-03-26 16:03:23',
+ 'logname': '登录日志',
+ 'succeed': '成功',
+ 'ip': '192.168.8.184',
+ 'deptid': '0',
+ 'message': '',
+ 'userName': '超级管理员',
+ 'userid': '1'
+ },
+ {
+ 'createtime': '2020-03-26 15:13:50',
+ 'logname': '登录日志',
+ 'succeed': '成功',
+ 'ip': '192.168.8.184',
+ 'deptid': '0',
+ 'message': '',
+ 'userName': '超级管理员',
+ 'userid': '1'
+ },
+ {
+ 'createtime': '2020-03-26 14:47:05',
+ 'logname': '登录日志',
+ 'succeed': '成功',
+ 'ip': '192.168.8.105',
+ 'deptid': '0',
+ 'message': '',
+ 'userName': '超级管理员',
+ 'userid': '1'
+ }]
+module.exports = [
+ {
+ url: '/loginLog/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: loginloglist,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/log/list',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: loglist,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/log/detail',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ 'createtime': '2020-03-26',
+ 'logtype': '业务日志',
+ 'classname': 'com.casic.missiles.modular.system.controller.RoleController',
+ 'method': 'dataAuthor',
+ 'logname': '数据权限配置',
+ 'succeed': '成功',
+ 'id': '1243081729056264193',
+ 'message': '角色名称=十一室管理员,资源名称=',
+ 'userName': '超级管理员',
+ 'regularMessage': '角色名称=十一室管理员,资源名称=',
+ 'userid': '1'
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/code/logType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: logTypes
+ }
+ }
+ }
+]
diff --git a/mock/system/resource.js b/mock/system/resource.js
new file mode 100644
index 0000000..1122ea8
--- /dev/null
+++ b/mock/system/resource.js
@@ -0,0 +1,1569 @@
+const tree = [
+ {
+ 'checked': false,
+ 'code': 'system',
+ 'id': '105',
+ 'name': '系统管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],',
+ 'pid': '1189107859077373954',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr',
+ 'id': '106',
+ 'name': '用户管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_add',
+ 'id': '107',
+ 'name': '添加用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_edit',
+ 'id': '108',
+ 'name': '修改用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_delete',
+ 'id': '109',
+ 'name': '删除用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_reset',
+ 'id': '110',
+ 'name': '重置密码',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_freeze',
+ 'id': '111',
+ 'name': '冻结用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_unfreeze',
+ 'id': '112',
+ 'name': '解除冻结用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_setRole',
+ 'id': '113',
+ 'name': '分配角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role',
+ 'id': '114',
+ 'name': '角色管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_add',
+ 'id': '115',
+ 'name': '添加角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_edit',
+ 'id': '116',
+ 'name': '修改角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_remove',
+ 'id': '117',
+ 'name': '删除角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_setAuthority',
+ 'id': '118',
+ 'name': '配置权限',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu',
+ 'id': '119',
+ 'name': '资源管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_add',
+ 'id': '120',
+ 'name': '添加菜单',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_edit',
+ 'id': '121',
+ 'name': '修改菜单',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_remove',
+ 'id': '122',
+ 'name': '删除菜单',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log',
+ 'id': '128',
+ 'name': '日志管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept',
+ 'id': '131',
+ 'name': '组织管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict',
+ 'id': '132',
+ 'name': '字典管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'loginLog',
+ 'id': '133',
+ 'name': '登录日志',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log_clean',
+ 'id': '134',
+ 'name': '清空日志',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'pid': '128',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_add',
+ 'id': '135',
+ 'name': '添加部门',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_update',
+ 'id': '136',
+ 'name': '修改部门',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_delete',
+ 'id': '137',
+ 'name': '删除部门',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_add',
+ 'id': '138',
+ 'name': '添加字典',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_update',
+ 'id': '139',
+ 'name': '修改字典',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_delete',
+ 'id': '140',
+ 'name': '删除字典',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_list',
+ 'id': '151',
+ 'name': '菜单列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_list',
+ 'id': '153',
+ 'name': '部门列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_detail',
+ 'id': '154',
+ 'name': '部门详情',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_list',
+ 'id': '156',
+ 'name': '字典列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_detail',
+ 'id': '157',
+ 'name': '字典详情',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log_list',
+ 'id': '158',
+ 'name': '日志列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'pid': '128',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log_detail',
+ 'id': '159',
+ 'name': '日志详情',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'pid': '128',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'del_login_log',
+ 'id': '160',
+ 'name': '清空登录日志',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'pid': '133',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'login_log_list',
+ 'id': '161',
+ 'name': '登录日志列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'pid': '133',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_list',
+ 'id': '164',
+ 'name': '角色列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_list',
+ 'id': '167',
+ 'name': '用户列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'data_author',
+ 'id': '1138364388198715393',
+ 'name': '数据权限',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'AreaAdmin',
+ 'id': '1170945119300976642',
+ 'name': '区域管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'sys',
+ 'id': '1189107859077373954',
+ 'name': '基础权限管理',
+ 'open': true,
+ 'pcodes': '[0],',
+ 'pid': '0',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_listPage',
+ 'id': '1191975090689810434',
+ 'name': '区域列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_add',
+ 'id': '1191975312815955969',
+ 'name': '新增区域',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_update',
+ 'id': '1191975427559530497',
+ 'name': '修改区域',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_delete',
+ 'id': '1191975543687225346',
+ 'name': '区域删除',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': true,
+ 'code': '',
+ 'id': '0',
+ 'name': '顶级',
+ 'open': true,
+ 'pcodes': '',
+ 'pid': '',
+ 'value': ''
+ }
+]
+const list = [
+ {
+ 'isopen': '1',
+ 'code': 'system',
+ 'pcode': 'sys',
+ 'num': 4,
+ 'icon': 'icon-setting',
+ 'pid': '1189107859077373954',
+ 'isMenu': '是',
+ 'url': '/system',
+ 'tips': '',
+ 'pcodes': '[0],[sys],',
+ 'name': '系统管理',
+ 'statusName': '启用',
+ 'id': '105',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': true,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr',
+ 'pcode': 'system',
+ 'num': 1,
+ 'icon': 'icon-user',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/mgr',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '用户管理',
+ 'statusName': '启用',
+ 'id': '106',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_add',
+ 'pcode': 'mgr',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '添加用户',
+ 'statusName': '启用',
+ 'id': '107',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_edit',
+ 'pcode': 'mgr',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '修改用户',
+ 'statusName': '启用',
+ 'id': '108',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_delete',
+ 'pcode': 'mgr',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '删除用户',
+ 'statusName': '启用',
+ 'id': '109',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_reset',
+ 'pcode': 'mgr',
+ 'num': 4,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/reset',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '重置密码',
+ 'statusName': '启用',
+ 'id': '110',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_freeze',
+ 'pcode': 'mgr',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/freeze',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '冻结用户',
+ 'statusName': '启用',
+ 'id': '111',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_unfreeze',
+ 'pcode': 'mgr',
+ 'num': 6,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/unfreeze',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '解除冻结用户',
+ 'statusName': '启用',
+ 'id': '112',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_setRole',
+ 'pcode': 'mgr',
+ 'num': 7,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/roleAssign',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '分配角色',
+ 'statusName': '启用',
+ 'id': '113',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role',
+ 'pcode': 'system',
+ 'num': 2,
+ 'icon': 'permission',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/role',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '角色管理',
+ 'statusName': '启用',
+ 'id': '114',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_add',
+ 'pcode': 'role',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '添加角色',
+ 'statusName': '启用',
+ 'id': '115',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_edit',
+ 'pcode': 'role',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '修改角色',
+ 'statusName': '启用',
+ 'id': '116',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_remove',
+ 'pcode': 'role',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '删除角色',
+ 'statusName': '启用',
+ 'id': '117',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_setAuthority',
+ 'pcode': 'role',
+ 'num': 4,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/funcAuthor',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '配置权限',
+ 'statusName': '启用',
+ 'id': '118',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu',
+ 'pcode': 'system',
+ 'num': 4,
+ 'icon': 'function',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/resource',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '资源管理',
+ 'statusName': '启用',
+ 'id': '119',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_add',
+ 'pcode': 'menu',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '添加菜单',
+ 'statusName': '启用',
+ 'id': '120',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_edit',
+ 'pcode': 'menu',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '修改菜单',
+ 'statusName': '启用',
+ 'id': '121',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_remove',
+ 'pcode': 'menu',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '删除菜单',
+ 'statusName': '启用',
+ 'id': '122',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log',
+ 'pcode': 'system',
+ 'num': 6,
+ 'icon': 'log',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/log',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '日志管理',
+ 'statusName': '启用',
+ 'id': '128',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept',
+ 'pcode': 'system',
+ 'num': 3,
+ 'icon': 'dept2',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/dept',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '组织管理',
+ 'statusName': '启用',
+ 'id': '131',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict',
+ 'pcode': 'system',
+ 'num': 4,
+ 'icon': 'icon-dict',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/dict',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '字典管理',
+ 'statusName': '启用',
+ 'id': '132',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'loginLog',
+ 'pcode': 'system',
+ 'num': 6,
+ 'icon': 'task',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/loginLog',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '登录日志',
+ 'statusName': '启用',
+ 'id': '133',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log_clean',
+ 'pcode': 'log',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '128',
+ 'isMenu': '不是',
+ 'url': '/log/delLog',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'name': '清空日志',
+ 'statusName': '启用',
+ 'id': '134',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_add',
+ 'pcode': 'dept',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '添加部门',
+ 'statusName': '启用',
+ 'id': '135',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_update',
+ 'pcode': 'dept',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '修改部门',
+ 'statusName': '启用',
+ 'id': '136',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_delete',
+ 'pcode': 'dept',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '删除部门',
+ 'statusName': '启用',
+ 'id': '137',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_add',
+ 'pcode': 'dict',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '添加字典',
+ 'statusName': '启用',
+ 'id': '138',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_update',
+ 'pcode': 'dict',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '修改字典',
+ 'statusName': '启用',
+ 'id': '139',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_delete',
+ 'pcode': 'dict',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '删除字典',
+ 'statusName': '启用',
+ 'id': '140',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_list',
+ 'pcode': 'menu',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '菜单列表',
+ 'statusName': '启用',
+ 'id': '151',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_list',
+ 'pcode': 'dept',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '部门列表',
+ 'statusName': '启用',
+ 'id': '153',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_detail',
+ 'pcode': 'dept',
+ 'num': 6,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/detail',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '部门详情',
+ 'statusName': '启用',
+ 'id': '154',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_list',
+ 'pcode': 'dict',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '字典列表',
+ 'statusName': '启用',
+ 'id': '156',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_detail',
+ 'pcode': 'dict',
+ 'num': 6,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/detail',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '字典详情',
+ 'statusName': '启用',
+ 'id': '157',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log_list',
+ 'pcode': 'log',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '128',
+ 'isMenu': '不是',
+ 'url': '/log/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'name': '日志列表',
+ 'statusName': '启用',
+ 'id': '158',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log_detail',
+ 'pcode': 'log',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '128',
+ 'isMenu': '不是',
+ 'url': '/log/detail',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'name': '日志详情',
+ 'statusName': '启用',
+ 'id': '159',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'del_login_log',
+ 'pcode': 'loginLog',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '133',
+ 'isMenu': '不是',
+ 'url': '/loginLog/delLoginLog',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'name': '清空登录日志',
+ 'statusName': '启用',
+ 'id': '160',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'login_log_list',
+ 'pcode': 'loginLog',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '133',
+ 'isMenu': '不是',
+ 'url': '/loginLog/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'name': '登录日志列表',
+ 'statusName': '启用',
+ 'id': '161',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_list',
+ 'pcode': 'role',
+ 'num': 7,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '角色列表',
+ 'statusName': '启用',
+ 'id': '164',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_list',
+ 'pcode': 'mgr',
+ 'num': 10,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': ' /mgr/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '用户列表',
+ 'statusName': '启用',
+ 'id': '167',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'data_author',
+ 'pcode': 'role',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/dataAuthor',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '数据权限',
+ 'statusName': '启用',
+ 'id': '1138364388198715393',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'AreaAdmin',
+ 'pcode': 'system',
+ 'num': 0,
+ 'icon': 'icon-base',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/area',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '区域管理',
+ 'statusName': '启用',
+ 'id': '1170945119300976642',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'sys',
+ 'pcode': '0',
+ 'num': 0,
+ 'icon': 'icon-setting',
+ 'pid': '0',
+ 'isMenu': '不是',
+ 'url': '/sys',
+ 'tips': '',
+ 'pcodes': '[0],',
+ 'name': '基础权限管理',
+ 'statusName': '启用',
+ 'id': '1189107859077373954',
+ 'ismenu': '0',
+ 'levels': 1,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '02'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_listPage',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/listPage',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '区域列表',
+ 'statusName': '启用',
+ 'id': '1191975090689810434',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_add',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '新增区域',
+ 'statusName': '启用',
+ 'id': '1191975312815955969',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_update',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '修改区域',
+ 'statusName': '启用',
+ 'id': '1191975427559530497',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_delete',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '区域删除',
+ 'statusName': '启用',
+ 'id': '1191975543687225346',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/resource/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: list
+ }
+ }
+ }
+ },
+
+ // mock get all roles form server
+ {
+ url: '/resource/tree',
+ type: 'get',
+ response: _ => {
+ return {
+ 'code': 200,
+ 'message': 'success',
+ 'data': {
+ 'list': tree
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/code/resourceType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '菜单',
+ 'id': '55',
+ 'value': '03'
+ },
+ {
+ 'name': '按钮',
+ 'id': '56',
+ 'value': '04'
+ }
+ ]
+ }
+ }
+ },
+ {
+ url: '/resource/treeListByRoleId',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {
+ 'list': tree
+ }
+ }
+ }
+ },
+ {
+ url: 'resource/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/resource/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/resource/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/system/role.js b/mock/system/role.js
new file mode 100644
index 0000000..508ac84
--- /dev/null
+++ b/mock/system/role.js
@@ -0,0 +1,207 @@
+const tree = [
+ {
+ "id":1,
+ "pid":"0",
+ "name":"超级管理员"
+ }
+]
+const list = [
+ {
+ "deptName":"顶级",
+ "pName":"",
+ "num":1,
+ "name":"超级管理员",
+ "deptid":"0",
+ "pid":"0",
+ "id":1,
+ "version":1,
+ "tips":"administrator"
+ },
+ {
+ "deptName":"高压管网分公司",
+ "pName":"超级管理员",
+ "num":2,
+ "name":"高压管网分公司系统管理员",
+ "deptid":"24",
+ "pid":1,
+ "id":2,
+ "version":"",
+ "tips":"rqadmin"
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/role/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: list
+ }
+ }
+ }
+ },
+
+ // mock get all roles form server
+ {
+ url: '/role/tree',
+ type: 'get',
+ response: _ => {
+ return {
+ 'code': 200,
+ 'message': 'success',
+ 'data': {
+ 'list': tree
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/code/roleType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '菜单',
+ 'id': '55',
+ 'value': '03'
+ },
+ {
+ 'name': '按钮',
+ 'id': '56',
+ 'value': '04'
+ }
+ ]
+ }
+ }
+ },
+ {
+ url: '/role/treeByUserId',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {
+ 'list': [
+ {
+ "id":1,
+ "pid":"0",
+ "name":"超级管理员",
+ "open":true,
+ "checked":false
+ }
+ ]
+ }
+ }
+ }
+ },
+ {
+ url: '/role/treeByRoleId',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {
+ 'list': [
+ {
+ "id":"26",
+ "pid":"24",
+ "name":"运行二所",
+ "open":true,
+ "checked":true
+ }
+ ]
+ }
+ }
+ }
+ },
+ {
+ url: '/role/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/role/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/role/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/role/funcAuthor',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/role/dataAuthor',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/code/dataScopeType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '全部',
+ 'id': '55',
+ 'value': '03'
+ },
+ {
+ 'name': '本部门',
+ 'id': '56',
+ 'value': '04'
+ },
+ {
+ 'name': '自定义',
+ 'id': '57',
+ 'value': '04'
+ }
+ ]
+ }
+ }
+ }
+]
diff --git a/mock/system/user.js b/mock/system/user.js
new file mode 100644
index 0000000..5601db9
--- /dev/null
+++ b/mock/system/user.js
@@ -0,0 +1,860 @@
+// 用户详情
+const userinfo = {
+ 'account': 'admin',
+ 'avatar': 'girl.gif',
+ 'dataScope': [
+ '0',
+ '1236854643826184194',
+ '1236856061500936193',
+ '1236856816081391617',
+ '1236856889875976194',
+ '1236856952987668481',
+ '1236857009937928194',
+ '1236857134915604482',
+ '1236857274443321346',
+ '1236857346400800770',
+ '1236857428776931330',
+ '1236857492744261633',
+ '1236857661695021057',
+ '1236857767731220481',
+ '1236857826057211905',
+ '1236857873113108481',
+ '1236857966566395906',
+ '1236858049731055618',
+ '1236858125752815618',
+ '1236858179561541633',
+ '1236858248830472194',
+ '1236858330946555905',
+ '1236858380556783617',
+ '1236858422894088194',
+ '1236858475780067330',
+ '1236858517333037058',
+ '1236858579396153346',
+ '1236858642176495618',
+ '1236858704961032194',
+ '1236858748544045057',
+ '1236858806672904193',
+ '1236858863296008193',
+ '1236858908317667330'
+ ],
+ 'deptId': '0',
+ 'deptName': '顶级',
+ 'devices': [],
+ 'id': '1',
+ 'ipAddr': '124.64.16.144',
+ 'name': '超超级管理员',
+ 'phone': '18200000000',
+ 'roleList': [
+ '1'
+ ],
+ 'roleNames': [
+ '超级管理员'
+ ],
+ 'roleTips': [
+ 'administrator'
+ ],
+ 'scopeType': '4',
+ 'targetId': '',
+ 'targetName': '',
+ 'tenantId': ''
+}
+const list = [
+ {
+ 'birthday': '2017-05-05 00:00:00',
+ 'deptName': '顶级',
+ 'createtime': '2016-01-29 08:49:53',
+ 'roleid': '1',
+ 'sex': '2',
+ 'deptid': '0',
+ 'avatar': 'girl.gif',
+ 'version': 25,
+ 'phone': '18200000000',
+ 'sexName': '女',
+ 'name': '超级管理员',
+ 'roleName': '超级管理员',
+ 'statusName': '启用',
+ 'id': '1',
+ 'account': 'admin',
+ 'email': 'sn93@qq.com',
+ 'status': '1'
+ }
+]
+// 权限列表
+const permisson = {
+ 'menus': [
+ {
+ 'children': '',
+ 'code': 'sys',
+ 'icon': 'icon-setting',
+ 'id': '1189107859077373954',
+ 'ismenu': '0',
+ 'levels': 1,
+ 'name': '基础权限管理',
+ 'num': 0,
+ 'parentId': '0',
+ 'resourceType': '02',
+ 'url': '/sys'
+ },
+ {
+ 'children': '',
+ 'code': 'data_author',
+ 'icon': '',
+ 'id': '1138364388198715393',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '数据权限',
+ 'num': 0,
+ 'parentId': '114',
+ 'resourceType': '0',
+ 'url': '/role/dataAuthor'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr',
+ 'icon': 'icon-user',
+ 'id': '106',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '用户管理',
+ 'num': 1,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/mgr'
+ },
+ {
+ 'children': '',
+ 'code': 'role',
+ 'icon': 'permission',
+ 'id': '114',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '角色管理',
+ 'num': 2,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/role'
+ },
+ {
+ 'children': '',
+ 'code': 'role_edit',
+ 'icon': '',
+ 'id': '116',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '修改角色',
+ 'num': 2,
+ 'parentId': '114',
+ 'resourceType': '0',
+ 'url': '/role/update'
+ },
+ {
+ 'children': '',
+ 'code': 'role_remove',
+ 'icon': '',
+ 'id': '117',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '删除角色',
+ 'num': 3,
+ 'parentId': '114',
+ 'resourceType': '0',
+ 'url': '/role/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'dept',
+ 'icon': 'dept2',
+ 'id': '131',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '组织管理',
+ 'num': 3,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/dept'
+ },
+ {
+ 'children': '',
+ 'code': 'menu',
+ 'icon': 'function',
+ 'id': '119',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '资源管理',
+ 'num': 4,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/resource'
+ },
+ {
+ 'children': '',
+ 'code': 'role_setAuthority',
+ 'icon': '',
+ 'id': '118',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '配置权限',
+ 'num': 4,
+ 'parentId': '114',
+ 'resourceType': '0',
+ 'url': '/role/funcAuthor'
+ },
+ {
+ 'children': '',
+ 'code': 'system',
+ 'icon': 'icon-setting',
+ 'id': '105',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '系统管理',
+ 'num': 4,
+ 'parentId': '1189107859077373954',
+ 'resourceType': '03',
+ 'url': '/system'
+ },
+ {
+ 'children': '',
+ 'code': 'menu_list',
+ 'icon': '',
+ 'id': '151',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '菜单列表',
+ 'num': 5,
+ 'parentId': '119',
+ 'resourceType': '0',
+ 'url': '/resource/list'
+ },
+ {
+ 'children': '',
+ 'code': 'loginLog',
+ 'icon': 'task',
+ 'id': '133',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '登录日志',
+ 'num': 6,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/loginLog'
+ },
+ {
+ 'children': '',
+ 'code': 'log',
+ 'icon': 'log',
+ 'id': '128',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '日志管理',
+ 'num': 6,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/log'
+ },
+ {
+ 'children': '',
+ 'code': 'AreaAdmin',
+ 'icon': 'icon-base',
+ 'id': '1170945119300976642',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'name': '区域管理',
+ 'num': 0,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/area'
+ },
+ {
+ 'children': '',
+ 'code': 'visitor_permission',
+ 'icon': '',
+ 'id': '1202403877222735874',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'name': '访客授权列表',
+ 'num': 0,
+ 'parentId': '1202403125913837569',
+ 'resourceType': '03',
+ 'url': '/acsPermission/listVisitorPerm'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_delete',
+ 'icon': '',
+ 'id': '137',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '删除部门',
+ 'num': 1,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'role_add',
+ 'icon': '',
+ 'id': '115',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加角色',
+ 'num': 1,
+ 'parentId': '114',
+ 'resourceType': '04',
+ 'url': '/role/add'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_add',
+ 'icon': '',
+ 'id': '138',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加字典',
+ 'num': 1,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/add'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_delete',
+ 'icon': '',
+ 'id': '140',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '删除字典',
+ 'num': 1,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_add',
+ 'icon': '',
+ 'id': '135',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加部门',
+ 'num': 1,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/add'
+ },
+ {
+ 'children': '',
+ 'code': 'del_login_log',
+ 'icon': '',
+ 'id': '160',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '清空登录日志',
+ 'num': 1,
+ 'parentId': '133',
+ 'resourceType': '04',
+ 'url': '/loginLog/delLoginLog'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_update',
+ 'icon': '',
+ 'id': '139',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '修改字典',
+ 'num': 1,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/update'
+ },
+ {
+ 'children': '',
+ 'code': 'menu_add',
+ 'icon': '',
+ 'id': '120',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加菜单',
+ 'num': 1,
+ 'parentId': '119',
+ 'resourceType': '04',
+ 'url': '/resource/add'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_add',
+ 'icon': '',
+ 'id': '107',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加用户',
+ 'num': 1,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/add'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_update',
+ 'icon': '',
+ 'id': '136',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '修改部门',
+ 'num': 1,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/update'
+ },
+ {
+ 'children': '',
+ 'code': 'menu_edit',
+ 'icon': '',
+ 'id': '121',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '修改菜单',
+ 'num': 2,
+ 'parentId': '119',
+ 'resourceType': '04',
+ 'url': '/resource/update'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_edit',
+ 'icon': '',
+ 'id': '108',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '修改用户',
+ 'num': 2,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/update'
+ },
+ {
+ 'children': '',
+ 'code': 'log_list',
+ 'icon': '',
+ 'id': '158',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '日志列表',
+ 'num': 2,
+ 'parentId': '128',
+ 'resourceType': '04',
+ 'url': '/log/list'
+ },
+ {
+ 'children': '',
+ 'code': 'login_log_list',
+ 'icon': '',
+ 'id': '161',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '登录日志列表',
+ 'num': 2,
+ 'parentId': '133',
+ 'resourceType': '04',
+ 'url': '/loginLog/list'
+ },
+ {
+ 'children': '',
+ 'code': 'log_clean',
+ 'icon': '',
+ 'id': '134',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '清空日志',
+ 'num': 3,
+ 'parentId': '128',
+ 'resourceType': '04',
+ 'url': '/log/delLog'
+ },
+ {
+ 'children': '',
+ 'code': 'log_detail',
+ 'icon': '',
+ 'id': '159',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '日志详情',
+ 'num': 3,
+ 'parentId': '128',
+ 'resourceType': '04',
+ 'url': '/log/detail'
+ },
+ {
+ 'children': '',
+ 'code': 'menu_remove',
+ 'icon': '',
+ 'id': '122',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '删除菜单',
+ 'num': 3,
+ 'parentId': '119',
+ 'resourceType': '04',
+ 'url': '/resource/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_delete',
+ 'icon': '',
+ 'id': '109',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '删除用户',
+ 'num': 3,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_reset',
+ 'icon': '',
+ 'id': '110',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '重置密码',
+ 'num': 4,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/reset'
+ },
+ {
+ 'children': '',
+ 'code': 'dict',
+ 'icon': 'icon-dict',
+ 'id': '132',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'name': '字典管理',
+ 'num': 4,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/user'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_list',
+ 'icon': '',
+ 'id': '153',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '部门列表',
+ 'num': 5,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/list'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_list',
+ 'icon': '',
+ 'id': '156',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '字典列表',
+ 'num': 5,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/list'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_freeze',
+ 'icon': '',
+ 'id': '111',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '冻结用户',
+ 'num': 5,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/freeze'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_detail',
+ 'icon': '',
+ 'id': '154',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '部门详情',
+ 'num': 6,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/detail'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_detail',
+ 'icon': '',
+ 'id': '157',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '字典详情',
+ 'num': 6,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/detail'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_unfreeze',
+ 'icon': '',
+ 'id': '112',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '解除冻结用户',
+ 'num': 6,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/unfreeze'
+ },
+ {
+ 'children': '',
+ 'code': 'role_list',
+ 'icon': '',
+ 'id': '164',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '角色列表',
+ 'num': 7,
+ 'parentId': '114',
+ 'resourceType': '04',
+ 'url': '/role/list'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_setRole',
+ 'icon': '',
+ 'id': '113',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '分配角色',
+ 'num': 7,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/roleAssign'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_list',
+ 'icon': '',
+ 'id': '167',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '用户列表',
+ 'num': 10,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': ' /mgr/list'
+ },
+ {
+ 'children': '',
+ 'code': 'area_add',
+ 'icon': '',
+ 'id': '1191975312815955969',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'name': '新增区域',
+ 'num': 0,
+ 'parentId': '1170945119300976642',
+ 'resourceType': '04',
+ 'url': '/area/add'
+ },
+ {
+ 'children': '',
+ 'code': 'area_delete',
+ 'icon': '',
+ 'id': '1191975543687225346',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'name': '区域删除',
+ 'num': 0,
+ 'parentId': '1170945119300976642',
+ 'resourceType': '04',
+ 'url': '/area/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'area_listPage',
+ 'icon': '',
+ 'id': '1191975090689810434',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'name': '区域列表',
+ 'num': 0,
+ 'parentId': '1170945119300976642',
+ 'resourceType': '04',
+ 'url': '/area/listPage'
+ },
+ {
+ 'children': '',
+ 'code': 'area_update',
+ 'icon': '',
+ 'id': '1191975427559530497',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'name': '修改区域',
+ 'num': 0,
+ 'parentId': '1170945119300976642',
+ 'resourceType': '04',
+ 'url': '/area/update'
+ }
+ ]
+}
+module.exports = [
+ {
+ url: '/user/login',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ success: true,
+ data: {
+ kaptcha: '',
+ token: '02deb42b-5298-431a-b690-d04573c18281'
+
+ }
+ }
+ }
+ },
+ {
+ url: '/user/info',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ success: true,
+ data: userinfo
+ }
+ }
+ },
+ {
+ url: '/user/permission',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ success: true,
+ data: permisson
+ }
+ }
+ },
+ {
+ url: '/user/logout',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ success: true
+ }
+ }
+ },
+ {
+ url: '/mgr/list',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: list,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/mgr/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/freeze',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/unfreeze',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/reset',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/roleAssign',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/changePwd',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/table.js b/mock/table.js
new file mode 100644
index 0000000..d3963f4
--- /dev/null
+++ b/mock/table.js
@@ -0,0 +1,20 @@
+import Mock from 'mockjs'
+
+module.exports = {
+ list: () => {
+ const items = Mock.mock({
+ 'items|30': [{
+ id: '@id',
+ title: '@sentence(10, 20)',
+ 'status|1': ['published', 'draft', 'deleted'],
+ author: 'name',
+ display_time: '@datetime',
+ pageviews: '@integer(300, 5000)'
+ }]
+ })
+ return {
+ code: 20000,
+ data: items
+ }
+ }
+}
diff --git a/mock/config.js b/mock/config.js
new file mode 100644
index 0000000..7d111e0
--- /dev/null
+++ b/mock/config.js
@@ -0,0 +1,15 @@
+// import { param2Obj } from './utils'
+
+const baseConfig = {
+ kaptcha: true
+}
+
+export default {
+ baseconfig: res => {
+ return {
+ code: 200,
+ success: true,
+ data: baseConfig
+ }
+ }
+}
diff --git a/mock/index.js b/mock/index.js
new file mode 100644
index 0000000..d2713dd
--- /dev/null
+++ b/mock/index.js
@@ -0,0 +1,70 @@
+const Mock = require('mockjs')
+const { param2Obj } = require('./utils')
+
+const user = require('./system/user')
+const resource = require('./system/resource')
+const dict = require('./system/dict')
+const dept = require('./system/dept')
+const area = require('./system/area')
+const role = require('./system/role')
+const log = require('./system/log')
+const config = require('./system/config')
+const search = require('./remote-search')
+
+const mocks = [
+ ...user,
+ ...resource,
+ ...dict,
+ ...area,
+ ...dept,
+ ...role,
+ ...log,
+ ...config,
+ ...search
+]
+
+// for front mock
+// please use it cautiously, it will redefine XMLHttpRequest,
+// which will cause many of your third-party libraries to be invalidated(like progress event).
+function mockXHR() {
+ // mock patch
+ // https://github.com/nuysoft/Mock/issues/300
+ Mock.XHR.prototype.proxy_send = Mock.XHR.prototype.send
+ Mock.XHR.prototype.send = function() {
+ if (this.custom.xhr) {
+ this.custom.xhr.withCredentials = this.withCredentials || false
+
+ if (this.responseType) {
+ this.custom.xhr.responseType = this.responseType
+ }
+ }
+ this.proxy_send(...arguments)
+ }
+
+ function XHR2ExpressReqWrap(respond) {
+ return function(options) {
+ let result = null
+ if (respond instanceof Function) {
+ const { body, type, url } = options
+ // https://expressjs.com/en/4x/api.html#req
+ result = respond({
+ method: type,
+ body: JSON.parse(body),
+ query: param2Obj(url)
+ })
+ } else {
+ result = respond
+ }
+ return Mock.mock(result)
+ }
+ }
+
+ for (const i of mocks) {
+ Mock.mock(new RegExp(i.url), i.type || 'get', XHR2ExpressReqWrap(i.response))
+ }
+}
+
+module.exports = {
+ mocks,
+ mockXHR
+}
diff --git a/mock/mock-server.js b/mock/mock-server.js
new file mode 100644
index 0000000..8941ec0
--- /dev/null
+++ b/mock/mock-server.js
@@ -0,0 +1,81 @@
+const chokidar = require('chokidar')
+const bodyParser = require('body-parser')
+const chalk = require('chalk')
+const path = require('path')
+const Mock = require('mockjs')
+
+const mockDir = path.join(process.cwd(), 'mock')
+
+function registerRoutes(app) {
+ let mockLastIndex
+ const { mocks } = require('./index.js')
+ const mocksForServer = mocks.map(route => {
+ return responseFake(route.url, route.type, route.response)
+ })
+ for (const mock of mocksForServer) {
+ app[mock.type](mock.url, mock.response)
+ mockLastIndex = app._router.stack.length
+ }
+ const mockRoutesLength = Object.keys(mocksForServer).length
+ return {
+ mockRoutesLength: mockRoutesLength,
+ mockStartIndex: mockLastIndex - mockRoutesLength
+ }
+}
+
+function unregisterRoutes() {
+ Object.keys(require.cache).forEach(i => {
+ if (i.includes(mockDir)) {
+ delete require.cache[require.resolve(i)]
+ }
+ })
+}
+
+// for mock server
+const responseFake = (url, type, respond) => {
+ return {
+ url: new RegExp(`${process.env.VUE_APP_BASE_API}${url}`),
+ type: type || 'get',
+ response(req, res) {
+ console.log('request invoke:' + req.path)
+ res.json(Mock.mock(respond instanceof Function ? respond(req, res) : respond))
+ }
+ }
+}
+
+module.exports = app => {
+ // parse app.body
+ // https://expressjs.com/en/4x/api.html#req.body
+ app.use(bodyParser.json())
+ app.use(bodyParser.urlencoded({
+ extended: true
+ }))
+
+ const mockRoutes = registerRoutes(app)
+ var mockRoutesLength = mockRoutes.mockRoutesLength
+ var mockStartIndex = mockRoutes.mockStartIndex
+
+ // watch files, hot reload mock server
+ chokidar.watch(mockDir, {
+ ignored: /mock-server/,
+ ignoreInitial: true
+ }).on('all', (event, path) => {
+ if (event === 'change' || event === 'add') {
+ try {
+ // remove mock routes stack
+ app._router.stack.splice(mockStartIndex, mockRoutesLength)
+
+ // clear routes cache
+ unregisterRoutes()
+
+ const mockRoutes = registerRoutes(app)
+ mockRoutesLength = mockRoutes.mockRoutesLength
+ mockStartIndex = mockRoutes.mockStartIndex
+
+ console.log(chalk.magentaBright(`\n > Mock Server hot reload success! changed ${path}`))
+ } catch (error) {
+ console.log(chalk.redBright(error))
+ }
+ }
+ })
+}
diff --git a/mock/remote-search.js b/mock/remote-search.js
new file mode 100644
index 0000000..b5164b1
--- /dev/null
+++ b/mock/remote-search.js
@@ -0,0 +1,51 @@
+const Mock = require('mockjs')
+
+const NameList = []
+const count = 100
+
+for (let i = 0; i < count; i++) {
+ NameList.push(Mock.mock({
+ name: '@first'
+ }))
+}
+NameList.push({ name: 'mock-Pan' })
+
+module.exports = [
+ // username search
+ {
+ url: '/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: '/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/mock/system/area.js b/mock/system/area.js
new file mode 100644
index 0000000..1586661
--- /dev/null
+++ b/mock/system/area.js
@@ -0,0 +1,130 @@
+const list = [
+ {
+ 'id': '11010100102',
+ 'lat': '',
+ 'level': 5,
+ 'levelName': '社区',
+ 'lng': '',
+ 'name': '测试社区3',
+ 'num': 1,
+ 'pid': '110101001',
+ 'pids': '[0],[110000],[110100],[110101],[110101001],',
+ 'simplename': '测试社区2'
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/area/listPage',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: list,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/area/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: [
+ {
+ 'id': '110000',
+ 'pid': '0',
+ 'name': '北京市',
+ 'level': 1,
+ 'pids': [0],
+ 'levelName': '省级',
+ 'simplename': '北京'
+ }
+ ]
+ }
+ }
+ },
+ {
+ url: '/area/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/area/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/area/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/code/levelType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '省级',
+ 'id': '166',
+ 'value': '1'
+ },
+ {
+ 'name': '市级',
+ 'id': '167',
+ 'value': '2'
+ },
+ {
+ 'name': '区级',
+ 'id': '168',
+ 'value': '3'
+ },
+ {
+ 'name': '街道',
+ 'id': '169',
+ 'value': '4'
+ },
+ {
+ 'name': '社区',
+ 'id': '170',
+ 'value': '5'
+ },
+ {
+ 'name': '网格',
+ 'id': '171',
+ 'value': '6'
+ },
+ {
+ 'name': '责任网格',
+ 'id': '172',
+ 'value': '7'
+ }
+ ]
+ }
+ }
+ }
+]
diff --git a/mock/system/config.js b/mock/system/config.js
new file mode 100644
index 0000000..652e41d
--- /dev/null
+++ b/mock/system/config.js
@@ -0,0 +1,18 @@
+module.exports = [
+ {
+ url: '/config/baseConfig',
+ type: 'get',
+ response: _ => {
+ return {
+ 'code': 200,
+ 'data': {
+ 'kaptcha': false,
+ 'publicKey': 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCu5k8gcTFJy5UtMfmtKiR3f/EcUe93kzfteRj6+sM5fHRvOib82+uqQMjgaRZiMcr3HiHIFY5vA6c+Rfb5R2COitoOhxyA9U2eLXknzxLUQIAqXAvKQO8KnerA1Qjcds7xhJB2XPhWFlY4RVtMT2wr2lMd29QDE4F/kzyDhNBpxwIDAQAB',
+ 'sid': 'f390b7d7-337b-431b-be22-fb860a6c04d4'
+ },
+ 'message': '请求成功',
+ 'success': true
+ }
+ }
+ }
+]
diff --git a/mock/system/dept.js b/mock/system/dept.js
new file mode 100644
index 0000000..2c19c94
--- /dev/null
+++ b/mock/system/dept.js
@@ -0,0 +1,88 @@
+const list = [
+ {
+ 'id': '1',
+ 'simplename': '二分公司',
+ 'fullname': '二分公司',
+ 'num': 1,
+ 'pid': '0',
+ 'pids': '[0,1,2]',
+ 'pName': '顶级',
+ 'version': '',
+ 'tips': ''
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/dept/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: list
+ }
+ }
+ }
+ },
+ {
+ url: '/dept/tree',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: [
+ {
+ 'id': '0',
+ 'pid': '',
+ 'name': '顶级',
+ 'open': 'false',
+ 'checked': ''
+ },
+ {
+ 'id': '26',
+ 'pid': '24',
+ 'name': '运行二所',
+ 'open': 'false',
+ 'checked': ''
+ }
+ ]
+ }
+ }
+ }
+ },
+ {
+ url: '/dept/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dept/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dept/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/system/dict.js b/mock/system/dict.js
new file mode 100644
index 0000000..60de4cd
--- /dev/null
+++ b/mock/system/dict.js
@@ -0,0 +1,69 @@
+const list = [
+ {
+ 'code': 'sysStatus',
+ 'num': 0,
+ 'name': '状态',
+ 'pid': '0',
+ 'id': '16',
+ 'detail': '1:启用:1;2:禁用:2',
+ 'tips': ''
+ },
+ {
+ 'code': 'sysSex',
+ 'num': 0,
+ 'name': '性别',
+ 'pid': '0',
+ 'id': '29',
+ 'detail': '1:男:1;2:女:2',
+ 'tips': ''
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/dict/listPage',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: list,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/system/log.js b/mock/system/log.js
new file mode 100644
index 0000000..9b6306e
--- /dev/null
+++ b/mock/system/log.js
@@ -0,0 +1,115 @@
+const logTypes = [
+ {
+ 'value': '0',
+ 'name': '业务日志'
+ },
+ {
+ 'value': '1',
+ 'name': '登录日志'
+ }
+]
+const loglist = [
+ {
+ 'id': 'c4cdba483fb1449aaad1e6c49353c6b3',
+ 'logtype': '业务日志',
+ 'createtime': '2019-04-04 14:23:31',
+ 'logname': '修改用户',
+ 'succeed': '成功',
+ 'deptid': '24',
+ 'deptName': '总公司',
+ 'message': '账号=yxssadmin...',
+ 'userName': 'bruser',
+ 'userid': '45'
+ }
+]
+const loginloglist = [
+ {
+ 'createtime': '2020-03-26 16:03:23',
+ 'logname': '登录日志',
+ 'succeed': '成功',
+ 'ip': '192.168.8.184',
+ 'deptid': '0',
+ 'message': '',
+ 'userName': '超级管理员',
+ 'userid': '1'
+ },
+ {
+ 'createtime': '2020-03-26 15:13:50',
+ 'logname': '登录日志',
+ 'succeed': '成功',
+ 'ip': '192.168.8.184',
+ 'deptid': '0',
+ 'message': '',
+ 'userName': '超级管理员',
+ 'userid': '1'
+ },
+ {
+ 'createtime': '2020-03-26 14:47:05',
+ 'logname': '登录日志',
+ 'succeed': '成功',
+ 'ip': '192.168.8.105',
+ 'deptid': '0',
+ 'message': '',
+ 'userName': '超级管理员',
+ 'userid': '1'
+ }]
+module.exports = [
+ {
+ url: '/loginLog/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: loginloglist,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/log/list',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: loglist,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/log/detail',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ 'createtime': '2020-03-26',
+ 'logtype': '业务日志',
+ 'classname': 'com.casic.missiles.modular.system.controller.RoleController',
+ 'method': 'dataAuthor',
+ 'logname': '数据权限配置',
+ 'succeed': '成功',
+ 'id': '1243081729056264193',
+ 'message': '角色名称=十一室管理员,资源名称=',
+ 'userName': '超级管理员',
+ 'regularMessage': '角色名称=十一室管理员,资源名称=',
+ 'userid': '1'
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/code/logType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: logTypes
+ }
+ }
+ }
+]
diff --git a/mock/system/resource.js b/mock/system/resource.js
new file mode 100644
index 0000000..1122ea8
--- /dev/null
+++ b/mock/system/resource.js
@@ -0,0 +1,1569 @@
+const tree = [
+ {
+ 'checked': false,
+ 'code': 'system',
+ 'id': '105',
+ 'name': '系统管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],',
+ 'pid': '1189107859077373954',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr',
+ 'id': '106',
+ 'name': '用户管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_add',
+ 'id': '107',
+ 'name': '添加用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_edit',
+ 'id': '108',
+ 'name': '修改用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_delete',
+ 'id': '109',
+ 'name': '删除用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_reset',
+ 'id': '110',
+ 'name': '重置密码',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_freeze',
+ 'id': '111',
+ 'name': '冻结用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_unfreeze',
+ 'id': '112',
+ 'name': '解除冻结用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_setRole',
+ 'id': '113',
+ 'name': '分配角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role',
+ 'id': '114',
+ 'name': '角色管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_add',
+ 'id': '115',
+ 'name': '添加角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_edit',
+ 'id': '116',
+ 'name': '修改角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_remove',
+ 'id': '117',
+ 'name': '删除角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_setAuthority',
+ 'id': '118',
+ 'name': '配置权限',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu',
+ 'id': '119',
+ 'name': '资源管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_add',
+ 'id': '120',
+ 'name': '添加菜单',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_edit',
+ 'id': '121',
+ 'name': '修改菜单',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_remove',
+ 'id': '122',
+ 'name': '删除菜单',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log',
+ 'id': '128',
+ 'name': '日志管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept',
+ 'id': '131',
+ 'name': '组织管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict',
+ 'id': '132',
+ 'name': '字典管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'loginLog',
+ 'id': '133',
+ 'name': '登录日志',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log_clean',
+ 'id': '134',
+ 'name': '清空日志',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'pid': '128',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_add',
+ 'id': '135',
+ 'name': '添加部门',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_update',
+ 'id': '136',
+ 'name': '修改部门',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_delete',
+ 'id': '137',
+ 'name': '删除部门',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_add',
+ 'id': '138',
+ 'name': '添加字典',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_update',
+ 'id': '139',
+ 'name': '修改字典',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_delete',
+ 'id': '140',
+ 'name': '删除字典',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_list',
+ 'id': '151',
+ 'name': '菜单列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_list',
+ 'id': '153',
+ 'name': '部门列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_detail',
+ 'id': '154',
+ 'name': '部门详情',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_list',
+ 'id': '156',
+ 'name': '字典列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_detail',
+ 'id': '157',
+ 'name': '字典详情',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log_list',
+ 'id': '158',
+ 'name': '日志列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'pid': '128',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log_detail',
+ 'id': '159',
+ 'name': '日志详情',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'pid': '128',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'del_login_log',
+ 'id': '160',
+ 'name': '清空登录日志',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'pid': '133',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'login_log_list',
+ 'id': '161',
+ 'name': '登录日志列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'pid': '133',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_list',
+ 'id': '164',
+ 'name': '角色列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_list',
+ 'id': '167',
+ 'name': '用户列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'data_author',
+ 'id': '1138364388198715393',
+ 'name': '数据权限',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'AreaAdmin',
+ 'id': '1170945119300976642',
+ 'name': '区域管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'sys',
+ 'id': '1189107859077373954',
+ 'name': '基础权限管理',
+ 'open': true,
+ 'pcodes': '[0],',
+ 'pid': '0',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_listPage',
+ 'id': '1191975090689810434',
+ 'name': '区域列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_add',
+ 'id': '1191975312815955969',
+ 'name': '新增区域',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_update',
+ 'id': '1191975427559530497',
+ 'name': '修改区域',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_delete',
+ 'id': '1191975543687225346',
+ 'name': '区域删除',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': true,
+ 'code': '',
+ 'id': '0',
+ 'name': '顶级',
+ 'open': true,
+ 'pcodes': '',
+ 'pid': '',
+ 'value': ''
+ }
+]
+const list = [
+ {
+ 'isopen': '1',
+ 'code': 'system',
+ 'pcode': 'sys',
+ 'num': 4,
+ 'icon': 'icon-setting',
+ 'pid': '1189107859077373954',
+ 'isMenu': '是',
+ 'url': '/system',
+ 'tips': '',
+ 'pcodes': '[0],[sys],',
+ 'name': '系统管理',
+ 'statusName': '启用',
+ 'id': '105',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': true,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr',
+ 'pcode': 'system',
+ 'num': 1,
+ 'icon': 'icon-user',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/mgr',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '用户管理',
+ 'statusName': '启用',
+ 'id': '106',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_add',
+ 'pcode': 'mgr',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '添加用户',
+ 'statusName': '启用',
+ 'id': '107',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_edit',
+ 'pcode': 'mgr',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '修改用户',
+ 'statusName': '启用',
+ 'id': '108',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_delete',
+ 'pcode': 'mgr',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '删除用户',
+ 'statusName': '启用',
+ 'id': '109',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_reset',
+ 'pcode': 'mgr',
+ 'num': 4,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/reset',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '重置密码',
+ 'statusName': '启用',
+ 'id': '110',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_freeze',
+ 'pcode': 'mgr',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/freeze',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '冻结用户',
+ 'statusName': '启用',
+ 'id': '111',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_unfreeze',
+ 'pcode': 'mgr',
+ 'num': 6,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/unfreeze',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '解除冻结用户',
+ 'statusName': '启用',
+ 'id': '112',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_setRole',
+ 'pcode': 'mgr',
+ 'num': 7,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/roleAssign',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '分配角色',
+ 'statusName': '启用',
+ 'id': '113',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role',
+ 'pcode': 'system',
+ 'num': 2,
+ 'icon': 'permission',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/role',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '角色管理',
+ 'statusName': '启用',
+ 'id': '114',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_add',
+ 'pcode': 'role',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '添加角色',
+ 'statusName': '启用',
+ 'id': '115',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_edit',
+ 'pcode': 'role',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '修改角色',
+ 'statusName': '启用',
+ 'id': '116',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_remove',
+ 'pcode': 'role',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '删除角色',
+ 'statusName': '启用',
+ 'id': '117',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_setAuthority',
+ 'pcode': 'role',
+ 'num': 4,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/funcAuthor',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '配置权限',
+ 'statusName': '启用',
+ 'id': '118',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu',
+ 'pcode': 'system',
+ 'num': 4,
+ 'icon': 'function',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/resource',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '资源管理',
+ 'statusName': '启用',
+ 'id': '119',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_add',
+ 'pcode': 'menu',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '添加菜单',
+ 'statusName': '启用',
+ 'id': '120',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_edit',
+ 'pcode': 'menu',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '修改菜单',
+ 'statusName': '启用',
+ 'id': '121',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_remove',
+ 'pcode': 'menu',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '删除菜单',
+ 'statusName': '启用',
+ 'id': '122',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log',
+ 'pcode': 'system',
+ 'num': 6,
+ 'icon': 'log',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/log',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '日志管理',
+ 'statusName': '启用',
+ 'id': '128',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept',
+ 'pcode': 'system',
+ 'num': 3,
+ 'icon': 'dept2',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/dept',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '组织管理',
+ 'statusName': '启用',
+ 'id': '131',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict',
+ 'pcode': 'system',
+ 'num': 4,
+ 'icon': 'icon-dict',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/dict',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '字典管理',
+ 'statusName': '启用',
+ 'id': '132',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'loginLog',
+ 'pcode': 'system',
+ 'num': 6,
+ 'icon': 'task',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/loginLog',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '登录日志',
+ 'statusName': '启用',
+ 'id': '133',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log_clean',
+ 'pcode': 'log',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '128',
+ 'isMenu': '不是',
+ 'url': '/log/delLog',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'name': '清空日志',
+ 'statusName': '启用',
+ 'id': '134',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_add',
+ 'pcode': 'dept',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '添加部门',
+ 'statusName': '启用',
+ 'id': '135',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_update',
+ 'pcode': 'dept',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '修改部门',
+ 'statusName': '启用',
+ 'id': '136',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_delete',
+ 'pcode': 'dept',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '删除部门',
+ 'statusName': '启用',
+ 'id': '137',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_add',
+ 'pcode': 'dict',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '添加字典',
+ 'statusName': '启用',
+ 'id': '138',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_update',
+ 'pcode': 'dict',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '修改字典',
+ 'statusName': '启用',
+ 'id': '139',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_delete',
+ 'pcode': 'dict',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '删除字典',
+ 'statusName': '启用',
+ 'id': '140',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_list',
+ 'pcode': 'menu',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '菜单列表',
+ 'statusName': '启用',
+ 'id': '151',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_list',
+ 'pcode': 'dept',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '部门列表',
+ 'statusName': '启用',
+ 'id': '153',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_detail',
+ 'pcode': 'dept',
+ 'num': 6,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/detail',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '部门详情',
+ 'statusName': '启用',
+ 'id': '154',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_list',
+ 'pcode': 'dict',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '字典列表',
+ 'statusName': '启用',
+ 'id': '156',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_detail',
+ 'pcode': 'dict',
+ 'num': 6,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/detail',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '字典详情',
+ 'statusName': '启用',
+ 'id': '157',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log_list',
+ 'pcode': 'log',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '128',
+ 'isMenu': '不是',
+ 'url': '/log/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'name': '日志列表',
+ 'statusName': '启用',
+ 'id': '158',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log_detail',
+ 'pcode': 'log',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '128',
+ 'isMenu': '不是',
+ 'url': '/log/detail',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'name': '日志详情',
+ 'statusName': '启用',
+ 'id': '159',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'del_login_log',
+ 'pcode': 'loginLog',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '133',
+ 'isMenu': '不是',
+ 'url': '/loginLog/delLoginLog',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'name': '清空登录日志',
+ 'statusName': '启用',
+ 'id': '160',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'login_log_list',
+ 'pcode': 'loginLog',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '133',
+ 'isMenu': '不是',
+ 'url': '/loginLog/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'name': '登录日志列表',
+ 'statusName': '启用',
+ 'id': '161',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_list',
+ 'pcode': 'role',
+ 'num': 7,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '角色列表',
+ 'statusName': '启用',
+ 'id': '164',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_list',
+ 'pcode': 'mgr',
+ 'num': 10,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': ' /mgr/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '用户列表',
+ 'statusName': '启用',
+ 'id': '167',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'data_author',
+ 'pcode': 'role',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/dataAuthor',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '数据权限',
+ 'statusName': '启用',
+ 'id': '1138364388198715393',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'AreaAdmin',
+ 'pcode': 'system',
+ 'num': 0,
+ 'icon': 'icon-base',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/area',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '区域管理',
+ 'statusName': '启用',
+ 'id': '1170945119300976642',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'sys',
+ 'pcode': '0',
+ 'num': 0,
+ 'icon': 'icon-setting',
+ 'pid': '0',
+ 'isMenu': '不是',
+ 'url': '/sys',
+ 'tips': '',
+ 'pcodes': '[0],',
+ 'name': '基础权限管理',
+ 'statusName': '启用',
+ 'id': '1189107859077373954',
+ 'ismenu': '0',
+ 'levels': 1,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '02'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_listPage',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/listPage',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '区域列表',
+ 'statusName': '启用',
+ 'id': '1191975090689810434',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_add',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '新增区域',
+ 'statusName': '启用',
+ 'id': '1191975312815955969',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_update',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '修改区域',
+ 'statusName': '启用',
+ 'id': '1191975427559530497',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_delete',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '区域删除',
+ 'statusName': '启用',
+ 'id': '1191975543687225346',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/resource/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: list
+ }
+ }
+ }
+ },
+
+ // mock get all roles form server
+ {
+ url: '/resource/tree',
+ type: 'get',
+ response: _ => {
+ return {
+ 'code': 200,
+ 'message': 'success',
+ 'data': {
+ 'list': tree
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/code/resourceType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '菜单',
+ 'id': '55',
+ 'value': '03'
+ },
+ {
+ 'name': '按钮',
+ 'id': '56',
+ 'value': '04'
+ }
+ ]
+ }
+ }
+ },
+ {
+ url: '/resource/treeListByRoleId',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {
+ 'list': tree
+ }
+ }
+ }
+ },
+ {
+ url: 'resource/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/resource/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/resource/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/system/role.js b/mock/system/role.js
new file mode 100644
index 0000000..508ac84
--- /dev/null
+++ b/mock/system/role.js
@@ -0,0 +1,207 @@
+const tree = [
+ {
+ "id":1,
+ "pid":"0",
+ "name":"超级管理员"
+ }
+]
+const list = [
+ {
+ "deptName":"顶级",
+ "pName":"",
+ "num":1,
+ "name":"超级管理员",
+ "deptid":"0",
+ "pid":"0",
+ "id":1,
+ "version":1,
+ "tips":"administrator"
+ },
+ {
+ "deptName":"高压管网分公司",
+ "pName":"超级管理员",
+ "num":2,
+ "name":"高压管网分公司系统管理员",
+ "deptid":"24",
+ "pid":1,
+ "id":2,
+ "version":"",
+ "tips":"rqadmin"
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/role/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: list
+ }
+ }
+ }
+ },
+
+ // mock get all roles form server
+ {
+ url: '/role/tree',
+ type: 'get',
+ response: _ => {
+ return {
+ 'code': 200,
+ 'message': 'success',
+ 'data': {
+ 'list': tree
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/code/roleType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '菜单',
+ 'id': '55',
+ 'value': '03'
+ },
+ {
+ 'name': '按钮',
+ 'id': '56',
+ 'value': '04'
+ }
+ ]
+ }
+ }
+ },
+ {
+ url: '/role/treeByUserId',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {
+ 'list': [
+ {
+ "id":1,
+ "pid":"0",
+ "name":"超级管理员",
+ "open":true,
+ "checked":false
+ }
+ ]
+ }
+ }
+ }
+ },
+ {
+ url: '/role/treeByRoleId',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {
+ 'list': [
+ {
+ "id":"26",
+ "pid":"24",
+ "name":"运行二所",
+ "open":true,
+ "checked":true
+ }
+ ]
+ }
+ }
+ }
+ },
+ {
+ url: '/role/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/role/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/role/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/role/funcAuthor',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/role/dataAuthor',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/code/dataScopeType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '全部',
+ 'id': '55',
+ 'value': '03'
+ },
+ {
+ 'name': '本部门',
+ 'id': '56',
+ 'value': '04'
+ },
+ {
+ 'name': '自定义',
+ 'id': '57',
+ 'value': '04'
+ }
+ ]
+ }
+ }
+ }
+]
diff --git a/mock/system/user.js b/mock/system/user.js
new file mode 100644
index 0000000..5601db9
--- /dev/null
+++ b/mock/system/user.js
@@ -0,0 +1,860 @@
+// 用户详情
+const userinfo = {
+ 'account': 'admin',
+ 'avatar': 'girl.gif',
+ 'dataScope': [
+ '0',
+ '1236854643826184194',
+ '1236856061500936193',
+ '1236856816081391617',
+ '1236856889875976194',
+ '1236856952987668481',
+ '1236857009937928194',
+ '1236857134915604482',
+ '1236857274443321346',
+ '1236857346400800770',
+ '1236857428776931330',
+ '1236857492744261633',
+ '1236857661695021057',
+ '1236857767731220481',
+ '1236857826057211905',
+ '1236857873113108481',
+ '1236857966566395906',
+ '1236858049731055618',
+ '1236858125752815618',
+ '1236858179561541633',
+ '1236858248830472194',
+ '1236858330946555905',
+ '1236858380556783617',
+ '1236858422894088194',
+ '1236858475780067330',
+ '1236858517333037058',
+ '1236858579396153346',
+ '1236858642176495618',
+ '1236858704961032194',
+ '1236858748544045057',
+ '1236858806672904193',
+ '1236858863296008193',
+ '1236858908317667330'
+ ],
+ 'deptId': '0',
+ 'deptName': '顶级',
+ 'devices': [],
+ 'id': '1',
+ 'ipAddr': '124.64.16.144',
+ 'name': '超超级管理员',
+ 'phone': '18200000000',
+ 'roleList': [
+ '1'
+ ],
+ 'roleNames': [
+ '超级管理员'
+ ],
+ 'roleTips': [
+ 'administrator'
+ ],
+ 'scopeType': '4',
+ 'targetId': '',
+ 'targetName': '',
+ 'tenantId': ''
+}
+const list = [
+ {
+ 'birthday': '2017-05-05 00:00:00',
+ 'deptName': '顶级',
+ 'createtime': '2016-01-29 08:49:53',
+ 'roleid': '1',
+ 'sex': '2',
+ 'deptid': '0',
+ 'avatar': 'girl.gif',
+ 'version': 25,
+ 'phone': '18200000000',
+ 'sexName': '女',
+ 'name': '超级管理员',
+ 'roleName': '超级管理员',
+ 'statusName': '启用',
+ 'id': '1',
+ 'account': 'admin',
+ 'email': 'sn93@qq.com',
+ 'status': '1'
+ }
+]
+// 权限列表
+const permisson = {
+ 'menus': [
+ {
+ 'children': '',
+ 'code': 'sys',
+ 'icon': 'icon-setting',
+ 'id': '1189107859077373954',
+ 'ismenu': '0',
+ 'levels': 1,
+ 'name': '基础权限管理',
+ 'num': 0,
+ 'parentId': '0',
+ 'resourceType': '02',
+ 'url': '/sys'
+ },
+ {
+ 'children': '',
+ 'code': 'data_author',
+ 'icon': '',
+ 'id': '1138364388198715393',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '数据权限',
+ 'num': 0,
+ 'parentId': '114',
+ 'resourceType': '0',
+ 'url': '/role/dataAuthor'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr',
+ 'icon': 'icon-user',
+ 'id': '106',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '用户管理',
+ 'num': 1,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/mgr'
+ },
+ {
+ 'children': '',
+ 'code': 'role',
+ 'icon': 'permission',
+ 'id': '114',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '角色管理',
+ 'num': 2,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/role'
+ },
+ {
+ 'children': '',
+ 'code': 'role_edit',
+ 'icon': '',
+ 'id': '116',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '修改角色',
+ 'num': 2,
+ 'parentId': '114',
+ 'resourceType': '0',
+ 'url': '/role/update'
+ },
+ {
+ 'children': '',
+ 'code': 'role_remove',
+ 'icon': '',
+ 'id': '117',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '删除角色',
+ 'num': 3,
+ 'parentId': '114',
+ 'resourceType': '0',
+ 'url': '/role/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'dept',
+ 'icon': 'dept2',
+ 'id': '131',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '组织管理',
+ 'num': 3,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/dept'
+ },
+ {
+ 'children': '',
+ 'code': 'menu',
+ 'icon': 'function',
+ 'id': '119',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '资源管理',
+ 'num': 4,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/resource'
+ },
+ {
+ 'children': '',
+ 'code': 'role_setAuthority',
+ 'icon': '',
+ 'id': '118',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '配置权限',
+ 'num': 4,
+ 'parentId': '114',
+ 'resourceType': '0',
+ 'url': '/role/funcAuthor'
+ },
+ {
+ 'children': '',
+ 'code': 'system',
+ 'icon': 'icon-setting',
+ 'id': '105',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '系统管理',
+ 'num': 4,
+ 'parentId': '1189107859077373954',
+ 'resourceType': '03',
+ 'url': '/system'
+ },
+ {
+ 'children': '',
+ 'code': 'menu_list',
+ 'icon': '',
+ 'id': '151',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '菜单列表',
+ 'num': 5,
+ 'parentId': '119',
+ 'resourceType': '0',
+ 'url': '/resource/list'
+ },
+ {
+ 'children': '',
+ 'code': 'loginLog',
+ 'icon': 'task',
+ 'id': '133',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '登录日志',
+ 'num': 6,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/loginLog'
+ },
+ {
+ 'children': '',
+ 'code': 'log',
+ 'icon': 'log',
+ 'id': '128',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '日志管理',
+ 'num': 6,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/log'
+ },
+ {
+ 'children': '',
+ 'code': 'AreaAdmin',
+ 'icon': 'icon-base',
+ 'id': '1170945119300976642',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'name': '区域管理',
+ 'num': 0,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/area'
+ },
+ {
+ 'children': '',
+ 'code': 'visitor_permission',
+ 'icon': '',
+ 'id': '1202403877222735874',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'name': '访客授权列表',
+ 'num': 0,
+ 'parentId': '1202403125913837569',
+ 'resourceType': '03',
+ 'url': '/acsPermission/listVisitorPerm'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_delete',
+ 'icon': '',
+ 'id': '137',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '删除部门',
+ 'num': 1,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'role_add',
+ 'icon': '',
+ 'id': '115',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加角色',
+ 'num': 1,
+ 'parentId': '114',
+ 'resourceType': '04',
+ 'url': '/role/add'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_add',
+ 'icon': '',
+ 'id': '138',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加字典',
+ 'num': 1,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/add'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_delete',
+ 'icon': '',
+ 'id': '140',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '删除字典',
+ 'num': 1,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_add',
+ 'icon': '',
+ 'id': '135',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加部门',
+ 'num': 1,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/add'
+ },
+ {
+ 'children': '',
+ 'code': 'del_login_log',
+ 'icon': '',
+ 'id': '160',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '清空登录日志',
+ 'num': 1,
+ 'parentId': '133',
+ 'resourceType': '04',
+ 'url': '/loginLog/delLoginLog'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_update',
+ 'icon': '',
+ 'id': '139',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '修改字典',
+ 'num': 1,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/update'
+ },
+ {
+ 'children': '',
+ 'code': 'menu_add',
+ 'icon': '',
+ 'id': '120',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加菜单',
+ 'num': 1,
+ 'parentId': '119',
+ 'resourceType': '04',
+ 'url': '/resource/add'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_add',
+ 'icon': '',
+ 'id': '107',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加用户',
+ 'num': 1,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/add'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_update',
+ 'icon': '',
+ 'id': '136',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '修改部门',
+ 'num': 1,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/update'
+ },
+ {
+ 'children': '',
+ 'code': 'menu_edit',
+ 'icon': '',
+ 'id': '121',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '修改菜单',
+ 'num': 2,
+ 'parentId': '119',
+ 'resourceType': '04',
+ 'url': '/resource/update'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_edit',
+ 'icon': '',
+ 'id': '108',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '修改用户',
+ 'num': 2,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/update'
+ },
+ {
+ 'children': '',
+ 'code': 'log_list',
+ 'icon': '',
+ 'id': '158',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '日志列表',
+ 'num': 2,
+ 'parentId': '128',
+ 'resourceType': '04',
+ 'url': '/log/list'
+ },
+ {
+ 'children': '',
+ 'code': 'login_log_list',
+ 'icon': '',
+ 'id': '161',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '登录日志列表',
+ 'num': 2,
+ 'parentId': '133',
+ 'resourceType': '04',
+ 'url': '/loginLog/list'
+ },
+ {
+ 'children': '',
+ 'code': 'log_clean',
+ 'icon': '',
+ 'id': '134',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '清空日志',
+ 'num': 3,
+ 'parentId': '128',
+ 'resourceType': '04',
+ 'url': '/log/delLog'
+ },
+ {
+ 'children': '',
+ 'code': 'log_detail',
+ 'icon': '',
+ 'id': '159',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '日志详情',
+ 'num': 3,
+ 'parentId': '128',
+ 'resourceType': '04',
+ 'url': '/log/detail'
+ },
+ {
+ 'children': '',
+ 'code': 'menu_remove',
+ 'icon': '',
+ 'id': '122',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '删除菜单',
+ 'num': 3,
+ 'parentId': '119',
+ 'resourceType': '04',
+ 'url': '/resource/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_delete',
+ 'icon': '',
+ 'id': '109',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '删除用户',
+ 'num': 3,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_reset',
+ 'icon': '',
+ 'id': '110',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '重置密码',
+ 'num': 4,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/reset'
+ },
+ {
+ 'children': '',
+ 'code': 'dict',
+ 'icon': 'icon-dict',
+ 'id': '132',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'name': '字典管理',
+ 'num': 4,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/user'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_list',
+ 'icon': '',
+ 'id': '153',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '部门列表',
+ 'num': 5,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/list'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_list',
+ 'icon': '',
+ 'id': '156',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '字典列表',
+ 'num': 5,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/list'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_freeze',
+ 'icon': '',
+ 'id': '111',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '冻结用户',
+ 'num': 5,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/freeze'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_detail',
+ 'icon': '',
+ 'id': '154',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '部门详情',
+ 'num': 6,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/detail'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_detail',
+ 'icon': '',
+ 'id': '157',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '字典详情',
+ 'num': 6,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/detail'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_unfreeze',
+ 'icon': '',
+ 'id': '112',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '解除冻结用户',
+ 'num': 6,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/unfreeze'
+ },
+ {
+ 'children': '',
+ 'code': 'role_list',
+ 'icon': '',
+ 'id': '164',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '角色列表',
+ 'num': 7,
+ 'parentId': '114',
+ 'resourceType': '04',
+ 'url': '/role/list'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_setRole',
+ 'icon': '',
+ 'id': '113',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '分配角色',
+ 'num': 7,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/roleAssign'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_list',
+ 'icon': '',
+ 'id': '167',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '用户列表',
+ 'num': 10,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': ' /mgr/list'
+ },
+ {
+ 'children': '',
+ 'code': 'area_add',
+ 'icon': '',
+ 'id': '1191975312815955969',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'name': '新增区域',
+ 'num': 0,
+ 'parentId': '1170945119300976642',
+ 'resourceType': '04',
+ 'url': '/area/add'
+ },
+ {
+ 'children': '',
+ 'code': 'area_delete',
+ 'icon': '',
+ 'id': '1191975543687225346',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'name': '区域删除',
+ 'num': 0,
+ 'parentId': '1170945119300976642',
+ 'resourceType': '04',
+ 'url': '/area/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'area_listPage',
+ 'icon': '',
+ 'id': '1191975090689810434',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'name': '区域列表',
+ 'num': 0,
+ 'parentId': '1170945119300976642',
+ 'resourceType': '04',
+ 'url': '/area/listPage'
+ },
+ {
+ 'children': '',
+ 'code': 'area_update',
+ 'icon': '',
+ 'id': '1191975427559530497',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'name': '修改区域',
+ 'num': 0,
+ 'parentId': '1170945119300976642',
+ 'resourceType': '04',
+ 'url': '/area/update'
+ }
+ ]
+}
+module.exports = [
+ {
+ url: '/user/login',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ success: true,
+ data: {
+ kaptcha: '',
+ token: '02deb42b-5298-431a-b690-d04573c18281'
+
+ }
+ }
+ }
+ },
+ {
+ url: '/user/info',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ success: true,
+ data: userinfo
+ }
+ }
+ },
+ {
+ url: '/user/permission',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ success: true,
+ data: permisson
+ }
+ }
+ },
+ {
+ url: '/user/logout',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ success: true
+ }
+ }
+ },
+ {
+ url: '/mgr/list',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: list,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/mgr/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/freeze',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/unfreeze',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/reset',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/roleAssign',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/changePwd',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/table.js b/mock/table.js
new file mode 100644
index 0000000..d3963f4
--- /dev/null
+++ b/mock/table.js
@@ -0,0 +1,20 @@
+import Mock from 'mockjs'
+
+module.exports = {
+ list: () => {
+ const items = Mock.mock({
+ 'items|30': [{
+ id: '@id',
+ title: '@sentence(10, 20)',
+ 'status|1': ['published', 'draft', 'deleted'],
+ author: 'name',
+ display_time: '@datetime',
+ pageviews: '@integer(300, 5000)'
+ }]
+ })
+ return {
+ code: 20000,
+ data: items
+ }
+ }
+}
diff --git a/mock/user.js b/mock/user.js
new file mode 100644
index 0000000..6edeeff
--- /dev/null
+++ b/mock/user.js
@@ -0,0 +1,70 @@
+import { param2Obj } from './utils'
+
+const tokens = {
+ admin: {
+ token: 'admin-token'
+ },
+ editor: {
+ token: 'editor-token'
+ }
+}
+
+const users = {
+ 'admin-token': {
+ roles: ['admin'],
+ btns: ['kaptcha'],
+ introduction: 'I am a 超级管理员',
+ avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif',
+ name: 'mock Admin'
+ },
+ 'editor-token': {
+ roles: ['editor'],
+ btns: [],
+ introduction: 'I am an editor',
+ avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif',
+ name: 'Normal Editor'
+ }
+}
+
+module.exports = {
+ login: res => {
+ const { username } = JSON.parse(res.body)
+ const data = tokens[username]
+
+ if (data) {
+ return {
+ code: 200,
+ success: true,
+ data
+ }
+ }
+ return {
+ code: 60204,
+ success: false,
+ message: '账号或密码错误.'
+ }
+ },
+ getInfo: res => {
+ const { token } = param2Obj(res.url)
+ const info = users[token]
+
+ if (info) {
+ return {
+ code: 200,
+ success: true,
+ data: info
+ }
+ }
+ return {
+ code: 50008,
+ success: false,
+ message: '登录失败,无法获取用户信息.'
+ }
+ },
+ logout: () => {
+ return {
+ code: 200,
+ success: true
+ }
+ }
+}
diff --git a/mock/config.js b/mock/config.js
new file mode 100644
index 0000000..7d111e0
--- /dev/null
+++ b/mock/config.js
@@ -0,0 +1,15 @@
+// import { param2Obj } from './utils'
+
+const baseConfig = {
+ kaptcha: true
+}
+
+export default {
+ baseconfig: res => {
+ return {
+ code: 200,
+ success: true,
+ data: baseConfig
+ }
+ }
+}
diff --git a/mock/index.js b/mock/index.js
new file mode 100644
index 0000000..d2713dd
--- /dev/null
+++ b/mock/index.js
@@ -0,0 +1,70 @@
+const Mock = require('mockjs')
+const { param2Obj } = require('./utils')
+
+const user = require('./system/user')
+const resource = require('./system/resource')
+const dict = require('./system/dict')
+const dept = require('./system/dept')
+const area = require('./system/area')
+const role = require('./system/role')
+const log = require('./system/log')
+const config = require('./system/config')
+const search = require('./remote-search')
+
+const mocks = [
+ ...user,
+ ...resource,
+ ...dict,
+ ...area,
+ ...dept,
+ ...role,
+ ...log,
+ ...config,
+ ...search
+]
+
+// for front mock
+// please use it cautiously, it will redefine XMLHttpRequest,
+// which will cause many of your third-party libraries to be invalidated(like progress event).
+function mockXHR() {
+ // mock patch
+ // https://github.com/nuysoft/Mock/issues/300
+ Mock.XHR.prototype.proxy_send = Mock.XHR.prototype.send
+ Mock.XHR.prototype.send = function() {
+ if (this.custom.xhr) {
+ this.custom.xhr.withCredentials = this.withCredentials || false
+
+ if (this.responseType) {
+ this.custom.xhr.responseType = this.responseType
+ }
+ }
+ this.proxy_send(...arguments)
+ }
+
+ function XHR2ExpressReqWrap(respond) {
+ return function(options) {
+ let result = null
+ if (respond instanceof Function) {
+ const { body, type, url } = options
+ // https://expressjs.com/en/4x/api.html#req
+ result = respond({
+ method: type,
+ body: JSON.parse(body),
+ query: param2Obj(url)
+ })
+ } else {
+ result = respond
+ }
+ return Mock.mock(result)
+ }
+ }
+
+ for (const i of mocks) {
+ Mock.mock(new RegExp(i.url), i.type || 'get', XHR2ExpressReqWrap(i.response))
+ }
+}
+
+module.exports = {
+ mocks,
+ mockXHR
+}
diff --git a/mock/mock-server.js b/mock/mock-server.js
new file mode 100644
index 0000000..8941ec0
--- /dev/null
+++ b/mock/mock-server.js
@@ -0,0 +1,81 @@
+const chokidar = require('chokidar')
+const bodyParser = require('body-parser')
+const chalk = require('chalk')
+const path = require('path')
+const Mock = require('mockjs')
+
+const mockDir = path.join(process.cwd(), 'mock')
+
+function registerRoutes(app) {
+ let mockLastIndex
+ const { mocks } = require('./index.js')
+ const mocksForServer = mocks.map(route => {
+ return responseFake(route.url, route.type, route.response)
+ })
+ for (const mock of mocksForServer) {
+ app[mock.type](mock.url, mock.response)
+ mockLastIndex = app._router.stack.length
+ }
+ const mockRoutesLength = Object.keys(mocksForServer).length
+ return {
+ mockRoutesLength: mockRoutesLength,
+ mockStartIndex: mockLastIndex - mockRoutesLength
+ }
+}
+
+function unregisterRoutes() {
+ Object.keys(require.cache).forEach(i => {
+ if (i.includes(mockDir)) {
+ delete require.cache[require.resolve(i)]
+ }
+ })
+}
+
+// for mock server
+const responseFake = (url, type, respond) => {
+ return {
+ url: new RegExp(`${process.env.VUE_APP_BASE_API}${url}`),
+ type: type || 'get',
+ response(req, res) {
+ console.log('request invoke:' + req.path)
+ res.json(Mock.mock(respond instanceof Function ? respond(req, res) : respond))
+ }
+ }
+}
+
+module.exports = app => {
+ // parse app.body
+ // https://expressjs.com/en/4x/api.html#req.body
+ app.use(bodyParser.json())
+ app.use(bodyParser.urlencoded({
+ extended: true
+ }))
+
+ const mockRoutes = registerRoutes(app)
+ var mockRoutesLength = mockRoutes.mockRoutesLength
+ var mockStartIndex = mockRoutes.mockStartIndex
+
+ // watch files, hot reload mock server
+ chokidar.watch(mockDir, {
+ ignored: /mock-server/,
+ ignoreInitial: true
+ }).on('all', (event, path) => {
+ if (event === 'change' || event === 'add') {
+ try {
+ // remove mock routes stack
+ app._router.stack.splice(mockStartIndex, mockRoutesLength)
+
+ // clear routes cache
+ unregisterRoutes()
+
+ const mockRoutes = registerRoutes(app)
+ mockRoutesLength = mockRoutes.mockRoutesLength
+ mockStartIndex = mockRoutes.mockStartIndex
+
+ console.log(chalk.magentaBright(`\n > Mock Server hot reload success! changed ${path}`))
+ } catch (error) {
+ console.log(chalk.redBright(error))
+ }
+ }
+ })
+}
diff --git a/mock/remote-search.js b/mock/remote-search.js
new file mode 100644
index 0000000..b5164b1
--- /dev/null
+++ b/mock/remote-search.js
@@ -0,0 +1,51 @@
+const Mock = require('mockjs')
+
+const NameList = []
+const count = 100
+
+for (let i = 0; i < count; i++) {
+ NameList.push(Mock.mock({
+ name: '@first'
+ }))
+}
+NameList.push({ name: 'mock-Pan' })
+
+module.exports = [
+ // username search
+ {
+ url: '/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: '/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/mock/system/area.js b/mock/system/area.js
new file mode 100644
index 0000000..1586661
--- /dev/null
+++ b/mock/system/area.js
@@ -0,0 +1,130 @@
+const list = [
+ {
+ 'id': '11010100102',
+ 'lat': '',
+ 'level': 5,
+ 'levelName': '社区',
+ 'lng': '',
+ 'name': '测试社区3',
+ 'num': 1,
+ 'pid': '110101001',
+ 'pids': '[0],[110000],[110100],[110101],[110101001],',
+ 'simplename': '测试社区2'
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/area/listPage',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: list,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/area/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: [
+ {
+ 'id': '110000',
+ 'pid': '0',
+ 'name': '北京市',
+ 'level': 1,
+ 'pids': [0],
+ 'levelName': '省级',
+ 'simplename': '北京'
+ }
+ ]
+ }
+ }
+ },
+ {
+ url: '/area/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/area/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/area/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/code/levelType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '省级',
+ 'id': '166',
+ 'value': '1'
+ },
+ {
+ 'name': '市级',
+ 'id': '167',
+ 'value': '2'
+ },
+ {
+ 'name': '区级',
+ 'id': '168',
+ 'value': '3'
+ },
+ {
+ 'name': '街道',
+ 'id': '169',
+ 'value': '4'
+ },
+ {
+ 'name': '社区',
+ 'id': '170',
+ 'value': '5'
+ },
+ {
+ 'name': '网格',
+ 'id': '171',
+ 'value': '6'
+ },
+ {
+ 'name': '责任网格',
+ 'id': '172',
+ 'value': '7'
+ }
+ ]
+ }
+ }
+ }
+]
diff --git a/mock/system/config.js b/mock/system/config.js
new file mode 100644
index 0000000..652e41d
--- /dev/null
+++ b/mock/system/config.js
@@ -0,0 +1,18 @@
+module.exports = [
+ {
+ url: '/config/baseConfig',
+ type: 'get',
+ response: _ => {
+ return {
+ 'code': 200,
+ 'data': {
+ 'kaptcha': false,
+ 'publicKey': 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCu5k8gcTFJy5UtMfmtKiR3f/EcUe93kzfteRj6+sM5fHRvOib82+uqQMjgaRZiMcr3HiHIFY5vA6c+Rfb5R2COitoOhxyA9U2eLXknzxLUQIAqXAvKQO8KnerA1Qjcds7xhJB2XPhWFlY4RVtMT2wr2lMd29QDE4F/kzyDhNBpxwIDAQAB',
+ 'sid': 'f390b7d7-337b-431b-be22-fb860a6c04d4'
+ },
+ 'message': '请求成功',
+ 'success': true
+ }
+ }
+ }
+]
diff --git a/mock/system/dept.js b/mock/system/dept.js
new file mode 100644
index 0000000..2c19c94
--- /dev/null
+++ b/mock/system/dept.js
@@ -0,0 +1,88 @@
+const list = [
+ {
+ 'id': '1',
+ 'simplename': '二分公司',
+ 'fullname': '二分公司',
+ 'num': 1,
+ 'pid': '0',
+ 'pids': '[0,1,2]',
+ 'pName': '顶级',
+ 'version': '',
+ 'tips': ''
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/dept/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: list
+ }
+ }
+ }
+ },
+ {
+ url: '/dept/tree',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: [
+ {
+ 'id': '0',
+ 'pid': '',
+ 'name': '顶级',
+ 'open': 'false',
+ 'checked': ''
+ },
+ {
+ 'id': '26',
+ 'pid': '24',
+ 'name': '运行二所',
+ 'open': 'false',
+ 'checked': ''
+ }
+ ]
+ }
+ }
+ }
+ },
+ {
+ url: '/dept/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dept/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dept/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/system/dict.js b/mock/system/dict.js
new file mode 100644
index 0000000..60de4cd
--- /dev/null
+++ b/mock/system/dict.js
@@ -0,0 +1,69 @@
+const list = [
+ {
+ 'code': 'sysStatus',
+ 'num': 0,
+ 'name': '状态',
+ 'pid': '0',
+ 'id': '16',
+ 'detail': '1:启用:1;2:禁用:2',
+ 'tips': ''
+ },
+ {
+ 'code': 'sysSex',
+ 'num': 0,
+ 'name': '性别',
+ 'pid': '0',
+ 'id': '29',
+ 'detail': '1:男:1;2:女:2',
+ 'tips': ''
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/dict/listPage',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: list,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/system/log.js b/mock/system/log.js
new file mode 100644
index 0000000..9b6306e
--- /dev/null
+++ b/mock/system/log.js
@@ -0,0 +1,115 @@
+const logTypes = [
+ {
+ 'value': '0',
+ 'name': '业务日志'
+ },
+ {
+ 'value': '1',
+ 'name': '登录日志'
+ }
+]
+const loglist = [
+ {
+ 'id': 'c4cdba483fb1449aaad1e6c49353c6b3',
+ 'logtype': '业务日志',
+ 'createtime': '2019-04-04 14:23:31',
+ 'logname': '修改用户',
+ 'succeed': '成功',
+ 'deptid': '24',
+ 'deptName': '总公司',
+ 'message': '账号=yxssadmin...',
+ 'userName': 'bruser',
+ 'userid': '45'
+ }
+]
+const loginloglist = [
+ {
+ 'createtime': '2020-03-26 16:03:23',
+ 'logname': '登录日志',
+ 'succeed': '成功',
+ 'ip': '192.168.8.184',
+ 'deptid': '0',
+ 'message': '',
+ 'userName': '超级管理员',
+ 'userid': '1'
+ },
+ {
+ 'createtime': '2020-03-26 15:13:50',
+ 'logname': '登录日志',
+ 'succeed': '成功',
+ 'ip': '192.168.8.184',
+ 'deptid': '0',
+ 'message': '',
+ 'userName': '超级管理员',
+ 'userid': '1'
+ },
+ {
+ 'createtime': '2020-03-26 14:47:05',
+ 'logname': '登录日志',
+ 'succeed': '成功',
+ 'ip': '192.168.8.105',
+ 'deptid': '0',
+ 'message': '',
+ 'userName': '超级管理员',
+ 'userid': '1'
+ }]
+module.exports = [
+ {
+ url: '/loginLog/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: loginloglist,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/log/list',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: loglist,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/log/detail',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ 'createtime': '2020-03-26',
+ 'logtype': '业务日志',
+ 'classname': 'com.casic.missiles.modular.system.controller.RoleController',
+ 'method': 'dataAuthor',
+ 'logname': '数据权限配置',
+ 'succeed': '成功',
+ 'id': '1243081729056264193',
+ 'message': '角色名称=十一室管理员,资源名称=',
+ 'userName': '超级管理员',
+ 'regularMessage': '角色名称=十一室管理员,资源名称=',
+ 'userid': '1'
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/code/logType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: logTypes
+ }
+ }
+ }
+]
diff --git a/mock/system/resource.js b/mock/system/resource.js
new file mode 100644
index 0000000..1122ea8
--- /dev/null
+++ b/mock/system/resource.js
@@ -0,0 +1,1569 @@
+const tree = [
+ {
+ 'checked': false,
+ 'code': 'system',
+ 'id': '105',
+ 'name': '系统管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],',
+ 'pid': '1189107859077373954',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr',
+ 'id': '106',
+ 'name': '用户管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_add',
+ 'id': '107',
+ 'name': '添加用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_edit',
+ 'id': '108',
+ 'name': '修改用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_delete',
+ 'id': '109',
+ 'name': '删除用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_reset',
+ 'id': '110',
+ 'name': '重置密码',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_freeze',
+ 'id': '111',
+ 'name': '冻结用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_unfreeze',
+ 'id': '112',
+ 'name': '解除冻结用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_setRole',
+ 'id': '113',
+ 'name': '分配角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role',
+ 'id': '114',
+ 'name': '角色管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_add',
+ 'id': '115',
+ 'name': '添加角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_edit',
+ 'id': '116',
+ 'name': '修改角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_remove',
+ 'id': '117',
+ 'name': '删除角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_setAuthority',
+ 'id': '118',
+ 'name': '配置权限',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu',
+ 'id': '119',
+ 'name': '资源管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_add',
+ 'id': '120',
+ 'name': '添加菜单',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_edit',
+ 'id': '121',
+ 'name': '修改菜单',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_remove',
+ 'id': '122',
+ 'name': '删除菜单',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log',
+ 'id': '128',
+ 'name': '日志管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept',
+ 'id': '131',
+ 'name': '组织管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict',
+ 'id': '132',
+ 'name': '字典管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'loginLog',
+ 'id': '133',
+ 'name': '登录日志',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log_clean',
+ 'id': '134',
+ 'name': '清空日志',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'pid': '128',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_add',
+ 'id': '135',
+ 'name': '添加部门',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_update',
+ 'id': '136',
+ 'name': '修改部门',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_delete',
+ 'id': '137',
+ 'name': '删除部门',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_add',
+ 'id': '138',
+ 'name': '添加字典',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_update',
+ 'id': '139',
+ 'name': '修改字典',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_delete',
+ 'id': '140',
+ 'name': '删除字典',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_list',
+ 'id': '151',
+ 'name': '菜单列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_list',
+ 'id': '153',
+ 'name': '部门列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_detail',
+ 'id': '154',
+ 'name': '部门详情',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_list',
+ 'id': '156',
+ 'name': '字典列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_detail',
+ 'id': '157',
+ 'name': '字典详情',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log_list',
+ 'id': '158',
+ 'name': '日志列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'pid': '128',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log_detail',
+ 'id': '159',
+ 'name': '日志详情',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'pid': '128',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'del_login_log',
+ 'id': '160',
+ 'name': '清空登录日志',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'pid': '133',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'login_log_list',
+ 'id': '161',
+ 'name': '登录日志列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'pid': '133',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_list',
+ 'id': '164',
+ 'name': '角色列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_list',
+ 'id': '167',
+ 'name': '用户列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'data_author',
+ 'id': '1138364388198715393',
+ 'name': '数据权限',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'AreaAdmin',
+ 'id': '1170945119300976642',
+ 'name': '区域管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'sys',
+ 'id': '1189107859077373954',
+ 'name': '基础权限管理',
+ 'open': true,
+ 'pcodes': '[0],',
+ 'pid': '0',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_listPage',
+ 'id': '1191975090689810434',
+ 'name': '区域列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_add',
+ 'id': '1191975312815955969',
+ 'name': '新增区域',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_update',
+ 'id': '1191975427559530497',
+ 'name': '修改区域',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_delete',
+ 'id': '1191975543687225346',
+ 'name': '区域删除',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': true,
+ 'code': '',
+ 'id': '0',
+ 'name': '顶级',
+ 'open': true,
+ 'pcodes': '',
+ 'pid': '',
+ 'value': ''
+ }
+]
+const list = [
+ {
+ 'isopen': '1',
+ 'code': 'system',
+ 'pcode': 'sys',
+ 'num': 4,
+ 'icon': 'icon-setting',
+ 'pid': '1189107859077373954',
+ 'isMenu': '是',
+ 'url': '/system',
+ 'tips': '',
+ 'pcodes': '[0],[sys],',
+ 'name': '系统管理',
+ 'statusName': '启用',
+ 'id': '105',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': true,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr',
+ 'pcode': 'system',
+ 'num': 1,
+ 'icon': 'icon-user',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/mgr',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '用户管理',
+ 'statusName': '启用',
+ 'id': '106',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_add',
+ 'pcode': 'mgr',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '添加用户',
+ 'statusName': '启用',
+ 'id': '107',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_edit',
+ 'pcode': 'mgr',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '修改用户',
+ 'statusName': '启用',
+ 'id': '108',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_delete',
+ 'pcode': 'mgr',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '删除用户',
+ 'statusName': '启用',
+ 'id': '109',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_reset',
+ 'pcode': 'mgr',
+ 'num': 4,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/reset',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '重置密码',
+ 'statusName': '启用',
+ 'id': '110',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_freeze',
+ 'pcode': 'mgr',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/freeze',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '冻结用户',
+ 'statusName': '启用',
+ 'id': '111',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_unfreeze',
+ 'pcode': 'mgr',
+ 'num': 6,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/unfreeze',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '解除冻结用户',
+ 'statusName': '启用',
+ 'id': '112',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_setRole',
+ 'pcode': 'mgr',
+ 'num': 7,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/roleAssign',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '分配角色',
+ 'statusName': '启用',
+ 'id': '113',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role',
+ 'pcode': 'system',
+ 'num': 2,
+ 'icon': 'permission',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/role',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '角色管理',
+ 'statusName': '启用',
+ 'id': '114',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_add',
+ 'pcode': 'role',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '添加角色',
+ 'statusName': '启用',
+ 'id': '115',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_edit',
+ 'pcode': 'role',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '修改角色',
+ 'statusName': '启用',
+ 'id': '116',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_remove',
+ 'pcode': 'role',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '删除角色',
+ 'statusName': '启用',
+ 'id': '117',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_setAuthority',
+ 'pcode': 'role',
+ 'num': 4,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/funcAuthor',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '配置权限',
+ 'statusName': '启用',
+ 'id': '118',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu',
+ 'pcode': 'system',
+ 'num': 4,
+ 'icon': 'function',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/resource',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '资源管理',
+ 'statusName': '启用',
+ 'id': '119',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_add',
+ 'pcode': 'menu',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '添加菜单',
+ 'statusName': '启用',
+ 'id': '120',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_edit',
+ 'pcode': 'menu',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '修改菜单',
+ 'statusName': '启用',
+ 'id': '121',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_remove',
+ 'pcode': 'menu',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '删除菜单',
+ 'statusName': '启用',
+ 'id': '122',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log',
+ 'pcode': 'system',
+ 'num': 6,
+ 'icon': 'log',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/log',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '日志管理',
+ 'statusName': '启用',
+ 'id': '128',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept',
+ 'pcode': 'system',
+ 'num': 3,
+ 'icon': 'dept2',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/dept',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '组织管理',
+ 'statusName': '启用',
+ 'id': '131',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict',
+ 'pcode': 'system',
+ 'num': 4,
+ 'icon': 'icon-dict',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/dict',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '字典管理',
+ 'statusName': '启用',
+ 'id': '132',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'loginLog',
+ 'pcode': 'system',
+ 'num': 6,
+ 'icon': 'task',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/loginLog',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '登录日志',
+ 'statusName': '启用',
+ 'id': '133',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log_clean',
+ 'pcode': 'log',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '128',
+ 'isMenu': '不是',
+ 'url': '/log/delLog',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'name': '清空日志',
+ 'statusName': '启用',
+ 'id': '134',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_add',
+ 'pcode': 'dept',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '添加部门',
+ 'statusName': '启用',
+ 'id': '135',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_update',
+ 'pcode': 'dept',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '修改部门',
+ 'statusName': '启用',
+ 'id': '136',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_delete',
+ 'pcode': 'dept',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '删除部门',
+ 'statusName': '启用',
+ 'id': '137',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_add',
+ 'pcode': 'dict',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '添加字典',
+ 'statusName': '启用',
+ 'id': '138',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_update',
+ 'pcode': 'dict',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '修改字典',
+ 'statusName': '启用',
+ 'id': '139',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_delete',
+ 'pcode': 'dict',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '删除字典',
+ 'statusName': '启用',
+ 'id': '140',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_list',
+ 'pcode': 'menu',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '菜单列表',
+ 'statusName': '启用',
+ 'id': '151',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_list',
+ 'pcode': 'dept',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '部门列表',
+ 'statusName': '启用',
+ 'id': '153',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_detail',
+ 'pcode': 'dept',
+ 'num': 6,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/detail',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '部门详情',
+ 'statusName': '启用',
+ 'id': '154',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_list',
+ 'pcode': 'dict',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '字典列表',
+ 'statusName': '启用',
+ 'id': '156',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_detail',
+ 'pcode': 'dict',
+ 'num': 6,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/detail',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '字典详情',
+ 'statusName': '启用',
+ 'id': '157',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log_list',
+ 'pcode': 'log',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '128',
+ 'isMenu': '不是',
+ 'url': '/log/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'name': '日志列表',
+ 'statusName': '启用',
+ 'id': '158',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log_detail',
+ 'pcode': 'log',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '128',
+ 'isMenu': '不是',
+ 'url': '/log/detail',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'name': '日志详情',
+ 'statusName': '启用',
+ 'id': '159',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'del_login_log',
+ 'pcode': 'loginLog',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '133',
+ 'isMenu': '不是',
+ 'url': '/loginLog/delLoginLog',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'name': '清空登录日志',
+ 'statusName': '启用',
+ 'id': '160',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'login_log_list',
+ 'pcode': 'loginLog',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '133',
+ 'isMenu': '不是',
+ 'url': '/loginLog/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'name': '登录日志列表',
+ 'statusName': '启用',
+ 'id': '161',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_list',
+ 'pcode': 'role',
+ 'num': 7,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '角色列表',
+ 'statusName': '启用',
+ 'id': '164',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_list',
+ 'pcode': 'mgr',
+ 'num': 10,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': ' /mgr/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '用户列表',
+ 'statusName': '启用',
+ 'id': '167',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'data_author',
+ 'pcode': 'role',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/dataAuthor',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '数据权限',
+ 'statusName': '启用',
+ 'id': '1138364388198715393',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'AreaAdmin',
+ 'pcode': 'system',
+ 'num': 0,
+ 'icon': 'icon-base',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/area',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '区域管理',
+ 'statusName': '启用',
+ 'id': '1170945119300976642',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'sys',
+ 'pcode': '0',
+ 'num': 0,
+ 'icon': 'icon-setting',
+ 'pid': '0',
+ 'isMenu': '不是',
+ 'url': '/sys',
+ 'tips': '',
+ 'pcodes': '[0],',
+ 'name': '基础权限管理',
+ 'statusName': '启用',
+ 'id': '1189107859077373954',
+ 'ismenu': '0',
+ 'levels': 1,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '02'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_listPage',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/listPage',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '区域列表',
+ 'statusName': '启用',
+ 'id': '1191975090689810434',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_add',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '新增区域',
+ 'statusName': '启用',
+ 'id': '1191975312815955969',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_update',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '修改区域',
+ 'statusName': '启用',
+ 'id': '1191975427559530497',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_delete',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '区域删除',
+ 'statusName': '启用',
+ 'id': '1191975543687225346',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/resource/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: list
+ }
+ }
+ }
+ },
+
+ // mock get all roles form server
+ {
+ url: '/resource/tree',
+ type: 'get',
+ response: _ => {
+ return {
+ 'code': 200,
+ 'message': 'success',
+ 'data': {
+ 'list': tree
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/code/resourceType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '菜单',
+ 'id': '55',
+ 'value': '03'
+ },
+ {
+ 'name': '按钮',
+ 'id': '56',
+ 'value': '04'
+ }
+ ]
+ }
+ }
+ },
+ {
+ url: '/resource/treeListByRoleId',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {
+ 'list': tree
+ }
+ }
+ }
+ },
+ {
+ url: 'resource/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/resource/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/resource/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/system/role.js b/mock/system/role.js
new file mode 100644
index 0000000..508ac84
--- /dev/null
+++ b/mock/system/role.js
@@ -0,0 +1,207 @@
+const tree = [
+ {
+ "id":1,
+ "pid":"0",
+ "name":"超级管理员"
+ }
+]
+const list = [
+ {
+ "deptName":"顶级",
+ "pName":"",
+ "num":1,
+ "name":"超级管理员",
+ "deptid":"0",
+ "pid":"0",
+ "id":1,
+ "version":1,
+ "tips":"administrator"
+ },
+ {
+ "deptName":"高压管网分公司",
+ "pName":"超级管理员",
+ "num":2,
+ "name":"高压管网分公司系统管理员",
+ "deptid":"24",
+ "pid":1,
+ "id":2,
+ "version":"",
+ "tips":"rqadmin"
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/role/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: list
+ }
+ }
+ }
+ },
+
+ // mock get all roles form server
+ {
+ url: '/role/tree',
+ type: 'get',
+ response: _ => {
+ return {
+ 'code': 200,
+ 'message': 'success',
+ 'data': {
+ 'list': tree
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/code/roleType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '菜单',
+ 'id': '55',
+ 'value': '03'
+ },
+ {
+ 'name': '按钮',
+ 'id': '56',
+ 'value': '04'
+ }
+ ]
+ }
+ }
+ },
+ {
+ url: '/role/treeByUserId',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {
+ 'list': [
+ {
+ "id":1,
+ "pid":"0",
+ "name":"超级管理员",
+ "open":true,
+ "checked":false
+ }
+ ]
+ }
+ }
+ }
+ },
+ {
+ url: '/role/treeByRoleId',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {
+ 'list': [
+ {
+ "id":"26",
+ "pid":"24",
+ "name":"运行二所",
+ "open":true,
+ "checked":true
+ }
+ ]
+ }
+ }
+ }
+ },
+ {
+ url: '/role/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/role/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/role/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/role/funcAuthor',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/role/dataAuthor',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/code/dataScopeType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '全部',
+ 'id': '55',
+ 'value': '03'
+ },
+ {
+ 'name': '本部门',
+ 'id': '56',
+ 'value': '04'
+ },
+ {
+ 'name': '自定义',
+ 'id': '57',
+ 'value': '04'
+ }
+ ]
+ }
+ }
+ }
+]
diff --git a/mock/system/user.js b/mock/system/user.js
new file mode 100644
index 0000000..5601db9
--- /dev/null
+++ b/mock/system/user.js
@@ -0,0 +1,860 @@
+// 用户详情
+const userinfo = {
+ 'account': 'admin',
+ 'avatar': 'girl.gif',
+ 'dataScope': [
+ '0',
+ '1236854643826184194',
+ '1236856061500936193',
+ '1236856816081391617',
+ '1236856889875976194',
+ '1236856952987668481',
+ '1236857009937928194',
+ '1236857134915604482',
+ '1236857274443321346',
+ '1236857346400800770',
+ '1236857428776931330',
+ '1236857492744261633',
+ '1236857661695021057',
+ '1236857767731220481',
+ '1236857826057211905',
+ '1236857873113108481',
+ '1236857966566395906',
+ '1236858049731055618',
+ '1236858125752815618',
+ '1236858179561541633',
+ '1236858248830472194',
+ '1236858330946555905',
+ '1236858380556783617',
+ '1236858422894088194',
+ '1236858475780067330',
+ '1236858517333037058',
+ '1236858579396153346',
+ '1236858642176495618',
+ '1236858704961032194',
+ '1236858748544045057',
+ '1236858806672904193',
+ '1236858863296008193',
+ '1236858908317667330'
+ ],
+ 'deptId': '0',
+ 'deptName': '顶级',
+ 'devices': [],
+ 'id': '1',
+ 'ipAddr': '124.64.16.144',
+ 'name': '超超级管理员',
+ 'phone': '18200000000',
+ 'roleList': [
+ '1'
+ ],
+ 'roleNames': [
+ '超级管理员'
+ ],
+ 'roleTips': [
+ 'administrator'
+ ],
+ 'scopeType': '4',
+ 'targetId': '',
+ 'targetName': '',
+ 'tenantId': ''
+}
+const list = [
+ {
+ 'birthday': '2017-05-05 00:00:00',
+ 'deptName': '顶级',
+ 'createtime': '2016-01-29 08:49:53',
+ 'roleid': '1',
+ 'sex': '2',
+ 'deptid': '0',
+ 'avatar': 'girl.gif',
+ 'version': 25,
+ 'phone': '18200000000',
+ 'sexName': '女',
+ 'name': '超级管理员',
+ 'roleName': '超级管理员',
+ 'statusName': '启用',
+ 'id': '1',
+ 'account': 'admin',
+ 'email': 'sn93@qq.com',
+ 'status': '1'
+ }
+]
+// 权限列表
+const permisson = {
+ 'menus': [
+ {
+ 'children': '',
+ 'code': 'sys',
+ 'icon': 'icon-setting',
+ 'id': '1189107859077373954',
+ 'ismenu': '0',
+ 'levels': 1,
+ 'name': '基础权限管理',
+ 'num': 0,
+ 'parentId': '0',
+ 'resourceType': '02',
+ 'url': '/sys'
+ },
+ {
+ 'children': '',
+ 'code': 'data_author',
+ 'icon': '',
+ 'id': '1138364388198715393',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '数据权限',
+ 'num': 0,
+ 'parentId': '114',
+ 'resourceType': '0',
+ 'url': '/role/dataAuthor'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr',
+ 'icon': 'icon-user',
+ 'id': '106',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '用户管理',
+ 'num': 1,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/mgr'
+ },
+ {
+ 'children': '',
+ 'code': 'role',
+ 'icon': 'permission',
+ 'id': '114',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '角色管理',
+ 'num': 2,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/role'
+ },
+ {
+ 'children': '',
+ 'code': 'role_edit',
+ 'icon': '',
+ 'id': '116',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '修改角色',
+ 'num': 2,
+ 'parentId': '114',
+ 'resourceType': '0',
+ 'url': '/role/update'
+ },
+ {
+ 'children': '',
+ 'code': 'role_remove',
+ 'icon': '',
+ 'id': '117',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '删除角色',
+ 'num': 3,
+ 'parentId': '114',
+ 'resourceType': '0',
+ 'url': '/role/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'dept',
+ 'icon': 'dept2',
+ 'id': '131',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '组织管理',
+ 'num': 3,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/dept'
+ },
+ {
+ 'children': '',
+ 'code': 'menu',
+ 'icon': 'function',
+ 'id': '119',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '资源管理',
+ 'num': 4,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/resource'
+ },
+ {
+ 'children': '',
+ 'code': 'role_setAuthority',
+ 'icon': '',
+ 'id': '118',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '配置权限',
+ 'num': 4,
+ 'parentId': '114',
+ 'resourceType': '0',
+ 'url': '/role/funcAuthor'
+ },
+ {
+ 'children': '',
+ 'code': 'system',
+ 'icon': 'icon-setting',
+ 'id': '105',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '系统管理',
+ 'num': 4,
+ 'parentId': '1189107859077373954',
+ 'resourceType': '03',
+ 'url': '/system'
+ },
+ {
+ 'children': '',
+ 'code': 'menu_list',
+ 'icon': '',
+ 'id': '151',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '菜单列表',
+ 'num': 5,
+ 'parentId': '119',
+ 'resourceType': '0',
+ 'url': '/resource/list'
+ },
+ {
+ 'children': '',
+ 'code': 'loginLog',
+ 'icon': 'task',
+ 'id': '133',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '登录日志',
+ 'num': 6,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/loginLog'
+ },
+ {
+ 'children': '',
+ 'code': 'log',
+ 'icon': 'log',
+ 'id': '128',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '日志管理',
+ 'num': 6,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/log'
+ },
+ {
+ 'children': '',
+ 'code': 'AreaAdmin',
+ 'icon': 'icon-base',
+ 'id': '1170945119300976642',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'name': '区域管理',
+ 'num': 0,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/area'
+ },
+ {
+ 'children': '',
+ 'code': 'visitor_permission',
+ 'icon': '',
+ 'id': '1202403877222735874',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'name': '访客授权列表',
+ 'num': 0,
+ 'parentId': '1202403125913837569',
+ 'resourceType': '03',
+ 'url': '/acsPermission/listVisitorPerm'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_delete',
+ 'icon': '',
+ 'id': '137',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '删除部门',
+ 'num': 1,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'role_add',
+ 'icon': '',
+ 'id': '115',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加角色',
+ 'num': 1,
+ 'parentId': '114',
+ 'resourceType': '04',
+ 'url': '/role/add'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_add',
+ 'icon': '',
+ 'id': '138',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加字典',
+ 'num': 1,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/add'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_delete',
+ 'icon': '',
+ 'id': '140',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '删除字典',
+ 'num': 1,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_add',
+ 'icon': '',
+ 'id': '135',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加部门',
+ 'num': 1,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/add'
+ },
+ {
+ 'children': '',
+ 'code': 'del_login_log',
+ 'icon': '',
+ 'id': '160',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '清空登录日志',
+ 'num': 1,
+ 'parentId': '133',
+ 'resourceType': '04',
+ 'url': '/loginLog/delLoginLog'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_update',
+ 'icon': '',
+ 'id': '139',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '修改字典',
+ 'num': 1,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/update'
+ },
+ {
+ 'children': '',
+ 'code': 'menu_add',
+ 'icon': '',
+ 'id': '120',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加菜单',
+ 'num': 1,
+ 'parentId': '119',
+ 'resourceType': '04',
+ 'url': '/resource/add'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_add',
+ 'icon': '',
+ 'id': '107',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加用户',
+ 'num': 1,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/add'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_update',
+ 'icon': '',
+ 'id': '136',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '修改部门',
+ 'num': 1,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/update'
+ },
+ {
+ 'children': '',
+ 'code': 'menu_edit',
+ 'icon': '',
+ 'id': '121',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '修改菜单',
+ 'num': 2,
+ 'parentId': '119',
+ 'resourceType': '04',
+ 'url': '/resource/update'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_edit',
+ 'icon': '',
+ 'id': '108',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '修改用户',
+ 'num': 2,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/update'
+ },
+ {
+ 'children': '',
+ 'code': 'log_list',
+ 'icon': '',
+ 'id': '158',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '日志列表',
+ 'num': 2,
+ 'parentId': '128',
+ 'resourceType': '04',
+ 'url': '/log/list'
+ },
+ {
+ 'children': '',
+ 'code': 'login_log_list',
+ 'icon': '',
+ 'id': '161',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '登录日志列表',
+ 'num': 2,
+ 'parentId': '133',
+ 'resourceType': '04',
+ 'url': '/loginLog/list'
+ },
+ {
+ 'children': '',
+ 'code': 'log_clean',
+ 'icon': '',
+ 'id': '134',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '清空日志',
+ 'num': 3,
+ 'parentId': '128',
+ 'resourceType': '04',
+ 'url': '/log/delLog'
+ },
+ {
+ 'children': '',
+ 'code': 'log_detail',
+ 'icon': '',
+ 'id': '159',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '日志详情',
+ 'num': 3,
+ 'parentId': '128',
+ 'resourceType': '04',
+ 'url': '/log/detail'
+ },
+ {
+ 'children': '',
+ 'code': 'menu_remove',
+ 'icon': '',
+ 'id': '122',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '删除菜单',
+ 'num': 3,
+ 'parentId': '119',
+ 'resourceType': '04',
+ 'url': '/resource/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_delete',
+ 'icon': '',
+ 'id': '109',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '删除用户',
+ 'num': 3,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_reset',
+ 'icon': '',
+ 'id': '110',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '重置密码',
+ 'num': 4,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/reset'
+ },
+ {
+ 'children': '',
+ 'code': 'dict',
+ 'icon': 'icon-dict',
+ 'id': '132',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'name': '字典管理',
+ 'num': 4,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/user'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_list',
+ 'icon': '',
+ 'id': '153',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '部门列表',
+ 'num': 5,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/list'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_list',
+ 'icon': '',
+ 'id': '156',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '字典列表',
+ 'num': 5,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/list'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_freeze',
+ 'icon': '',
+ 'id': '111',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '冻结用户',
+ 'num': 5,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/freeze'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_detail',
+ 'icon': '',
+ 'id': '154',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '部门详情',
+ 'num': 6,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/detail'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_detail',
+ 'icon': '',
+ 'id': '157',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '字典详情',
+ 'num': 6,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/detail'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_unfreeze',
+ 'icon': '',
+ 'id': '112',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '解除冻结用户',
+ 'num': 6,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/unfreeze'
+ },
+ {
+ 'children': '',
+ 'code': 'role_list',
+ 'icon': '',
+ 'id': '164',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '角色列表',
+ 'num': 7,
+ 'parentId': '114',
+ 'resourceType': '04',
+ 'url': '/role/list'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_setRole',
+ 'icon': '',
+ 'id': '113',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '分配角色',
+ 'num': 7,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/roleAssign'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_list',
+ 'icon': '',
+ 'id': '167',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '用户列表',
+ 'num': 10,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': ' /mgr/list'
+ },
+ {
+ 'children': '',
+ 'code': 'area_add',
+ 'icon': '',
+ 'id': '1191975312815955969',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'name': '新增区域',
+ 'num': 0,
+ 'parentId': '1170945119300976642',
+ 'resourceType': '04',
+ 'url': '/area/add'
+ },
+ {
+ 'children': '',
+ 'code': 'area_delete',
+ 'icon': '',
+ 'id': '1191975543687225346',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'name': '区域删除',
+ 'num': 0,
+ 'parentId': '1170945119300976642',
+ 'resourceType': '04',
+ 'url': '/area/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'area_listPage',
+ 'icon': '',
+ 'id': '1191975090689810434',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'name': '区域列表',
+ 'num': 0,
+ 'parentId': '1170945119300976642',
+ 'resourceType': '04',
+ 'url': '/area/listPage'
+ },
+ {
+ 'children': '',
+ 'code': 'area_update',
+ 'icon': '',
+ 'id': '1191975427559530497',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'name': '修改区域',
+ 'num': 0,
+ 'parentId': '1170945119300976642',
+ 'resourceType': '04',
+ 'url': '/area/update'
+ }
+ ]
+}
+module.exports = [
+ {
+ url: '/user/login',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ success: true,
+ data: {
+ kaptcha: '',
+ token: '02deb42b-5298-431a-b690-d04573c18281'
+
+ }
+ }
+ }
+ },
+ {
+ url: '/user/info',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ success: true,
+ data: userinfo
+ }
+ }
+ },
+ {
+ url: '/user/permission',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ success: true,
+ data: permisson
+ }
+ }
+ },
+ {
+ url: '/user/logout',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ success: true
+ }
+ }
+ },
+ {
+ url: '/mgr/list',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: list,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/mgr/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/freeze',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/unfreeze',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/reset',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/roleAssign',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/changePwd',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/table.js b/mock/table.js
new file mode 100644
index 0000000..d3963f4
--- /dev/null
+++ b/mock/table.js
@@ -0,0 +1,20 @@
+import Mock from 'mockjs'
+
+module.exports = {
+ list: () => {
+ const items = Mock.mock({
+ 'items|30': [{
+ id: '@id',
+ title: '@sentence(10, 20)',
+ 'status|1': ['published', 'draft', 'deleted'],
+ author: 'name',
+ display_time: '@datetime',
+ pageviews: '@integer(300, 5000)'
+ }]
+ })
+ return {
+ code: 20000,
+ data: items
+ }
+ }
+}
diff --git a/mock/user.js b/mock/user.js
new file mode 100644
index 0000000..6edeeff
--- /dev/null
+++ b/mock/user.js
@@ -0,0 +1,70 @@
+import { param2Obj } from './utils'
+
+const tokens = {
+ admin: {
+ token: 'admin-token'
+ },
+ editor: {
+ token: 'editor-token'
+ }
+}
+
+const users = {
+ 'admin-token': {
+ roles: ['admin'],
+ btns: ['kaptcha'],
+ introduction: 'I am a 超级管理员',
+ avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif',
+ name: 'mock Admin'
+ },
+ 'editor-token': {
+ roles: ['editor'],
+ btns: [],
+ introduction: 'I am an editor',
+ avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif',
+ name: 'Normal Editor'
+ }
+}
+
+module.exports = {
+ login: res => {
+ const { username } = JSON.parse(res.body)
+ const data = tokens[username]
+
+ if (data) {
+ return {
+ code: 200,
+ success: true,
+ data
+ }
+ }
+ return {
+ code: 60204,
+ success: false,
+ message: '账号或密码错误.'
+ }
+ },
+ getInfo: res => {
+ const { token } = param2Obj(res.url)
+ const info = users[token]
+
+ if (info) {
+ return {
+ code: 200,
+ success: true,
+ data: info
+ }
+ }
+ return {
+ code: 50008,
+ success: false,
+ message: '登录失败,无法获取用户信息.'
+ }
+ },
+ logout: () => {
+ return {
+ code: 200,
+ success: true
+ }
+ }
+}
diff --git a/mock/utils.js b/mock/utils.js
new file mode 100644
index 0000000..8fc4926
--- /dev/null
+++ b/mock/utils.js
@@ -0,0 +1,51 @@
+const Mock = require('mockjs')
+
+const NameList = []
+const count = 100
+
+for (let i = 0; i < count; i++) {
+ NameList.push(Mock.mock({
+ name: '@first'
+ }))
+}
+NameList.push({ name: 'mock-Pan' })
+
+module.exports = [
+ // 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/mock/config.js b/mock/config.js
new file mode 100644
index 0000000..7d111e0
--- /dev/null
+++ b/mock/config.js
@@ -0,0 +1,15 @@
+// import { param2Obj } from './utils'
+
+const baseConfig = {
+ kaptcha: true
+}
+
+export default {
+ baseconfig: res => {
+ return {
+ code: 200,
+ success: true,
+ data: baseConfig
+ }
+ }
+}
diff --git a/mock/index.js b/mock/index.js
new file mode 100644
index 0000000..d2713dd
--- /dev/null
+++ b/mock/index.js
@@ -0,0 +1,70 @@
+const Mock = require('mockjs')
+const { param2Obj } = require('./utils')
+
+const user = require('./system/user')
+const resource = require('./system/resource')
+const dict = require('./system/dict')
+const dept = require('./system/dept')
+const area = require('./system/area')
+const role = require('./system/role')
+const log = require('./system/log')
+const config = require('./system/config')
+const search = require('./remote-search')
+
+const mocks = [
+ ...user,
+ ...resource,
+ ...dict,
+ ...area,
+ ...dept,
+ ...role,
+ ...log,
+ ...config,
+ ...search
+]
+
+// for front mock
+// please use it cautiously, it will redefine XMLHttpRequest,
+// which will cause many of your third-party libraries to be invalidated(like progress event).
+function mockXHR() {
+ // mock patch
+ // https://github.com/nuysoft/Mock/issues/300
+ Mock.XHR.prototype.proxy_send = Mock.XHR.prototype.send
+ Mock.XHR.prototype.send = function() {
+ if (this.custom.xhr) {
+ this.custom.xhr.withCredentials = this.withCredentials || false
+
+ if (this.responseType) {
+ this.custom.xhr.responseType = this.responseType
+ }
+ }
+ this.proxy_send(...arguments)
+ }
+
+ function XHR2ExpressReqWrap(respond) {
+ return function(options) {
+ let result = null
+ if (respond instanceof Function) {
+ const { body, type, url } = options
+ // https://expressjs.com/en/4x/api.html#req
+ result = respond({
+ method: type,
+ body: JSON.parse(body),
+ query: param2Obj(url)
+ })
+ } else {
+ result = respond
+ }
+ return Mock.mock(result)
+ }
+ }
+
+ for (const i of mocks) {
+ Mock.mock(new RegExp(i.url), i.type || 'get', XHR2ExpressReqWrap(i.response))
+ }
+}
+
+module.exports = {
+ mocks,
+ mockXHR
+}
diff --git a/mock/mock-server.js b/mock/mock-server.js
new file mode 100644
index 0000000..8941ec0
--- /dev/null
+++ b/mock/mock-server.js
@@ -0,0 +1,81 @@
+const chokidar = require('chokidar')
+const bodyParser = require('body-parser')
+const chalk = require('chalk')
+const path = require('path')
+const Mock = require('mockjs')
+
+const mockDir = path.join(process.cwd(), 'mock')
+
+function registerRoutes(app) {
+ let mockLastIndex
+ const { mocks } = require('./index.js')
+ const mocksForServer = mocks.map(route => {
+ return responseFake(route.url, route.type, route.response)
+ })
+ for (const mock of mocksForServer) {
+ app[mock.type](mock.url, mock.response)
+ mockLastIndex = app._router.stack.length
+ }
+ const mockRoutesLength = Object.keys(mocksForServer).length
+ return {
+ mockRoutesLength: mockRoutesLength,
+ mockStartIndex: mockLastIndex - mockRoutesLength
+ }
+}
+
+function unregisterRoutes() {
+ Object.keys(require.cache).forEach(i => {
+ if (i.includes(mockDir)) {
+ delete require.cache[require.resolve(i)]
+ }
+ })
+}
+
+// for mock server
+const responseFake = (url, type, respond) => {
+ return {
+ url: new RegExp(`${process.env.VUE_APP_BASE_API}${url}`),
+ type: type || 'get',
+ response(req, res) {
+ console.log('request invoke:' + req.path)
+ res.json(Mock.mock(respond instanceof Function ? respond(req, res) : respond))
+ }
+ }
+}
+
+module.exports = app => {
+ // parse app.body
+ // https://expressjs.com/en/4x/api.html#req.body
+ app.use(bodyParser.json())
+ app.use(bodyParser.urlencoded({
+ extended: true
+ }))
+
+ const mockRoutes = registerRoutes(app)
+ var mockRoutesLength = mockRoutes.mockRoutesLength
+ var mockStartIndex = mockRoutes.mockStartIndex
+
+ // watch files, hot reload mock server
+ chokidar.watch(mockDir, {
+ ignored: /mock-server/,
+ ignoreInitial: true
+ }).on('all', (event, path) => {
+ if (event === 'change' || event === 'add') {
+ try {
+ // remove mock routes stack
+ app._router.stack.splice(mockStartIndex, mockRoutesLength)
+
+ // clear routes cache
+ unregisterRoutes()
+
+ const mockRoutes = registerRoutes(app)
+ mockRoutesLength = mockRoutes.mockRoutesLength
+ mockStartIndex = mockRoutes.mockStartIndex
+
+ console.log(chalk.magentaBright(`\n > Mock Server hot reload success! changed ${path}`))
+ } catch (error) {
+ console.log(chalk.redBright(error))
+ }
+ }
+ })
+}
diff --git a/mock/remote-search.js b/mock/remote-search.js
new file mode 100644
index 0000000..b5164b1
--- /dev/null
+++ b/mock/remote-search.js
@@ -0,0 +1,51 @@
+const Mock = require('mockjs')
+
+const NameList = []
+const count = 100
+
+for (let i = 0; i < count; i++) {
+ NameList.push(Mock.mock({
+ name: '@first'
+ }))
+}
+NameList.push({ name: 'mock-Pan' })
+
+module.exports = [
+ // username search
+ {
+ url: '/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: '/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/mock/system/area.js b/mock/system/area.js
new file mode 100644
index 0000000..1586661
--- /dev/null
+++ b/mock/system/area.js
@@ -0,0 +1,130 @@
+const list = [
+ {
+ 'id': '11010100102',
+ 'lat': '',
+ 'level': 5,
+ 'levelName': '社区',
+ 'lng': '',
+ 'name': '测试社区3',
+ 'num': 1,
+ 'pid': '110101001',
+ 'pids': '[0],[110000],[110100],[110101],[110101001],',
+ 'simplename': '测试社区2'
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/area/listPage',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: list,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/area/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: [
+ {
+ 'id': '110000',
+ 'pid': '0',
+ 'name': '北京市',
+ 'level': 1,
+ 'pids': [0],
+ 'levelName': '省级',
+ 'simplename': '北京'
+ }
+ ]
+ }
+ }
+ },
+ {
+ url: '/area/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/area/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/area/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/code/levelType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '省级',
+ 'id': '166',
+ 'value': '1'
+ },
+ {
+ 'name': '市级',
+ 'id': '167',
+ 'value': '2'
+ },
+ {
+ 'name': '区级',
+ 'id': '168',
+ 'value': '3'
+ },
+ {
+ 'name': '街道',
+ 'id': '169',
+ 'value': '4'
+ },
+ {
+ 'name': '社区',
+ 'id': '170',
+ 'value': '5'
+ },
+ {
+ 'name': '网格',
+ 'id': '171',
+ 'value': '6'
+ },
+ {
+ 'name': '责任网格',
+ 'id': '172',
+ 'value': '7'
+ }
+ ]
+ }
+ }
+ }
+]
diff --git a/mock/system/config.js b/mock/system/config.js
new file mode 100644
index 0000000..652e41d
--- /dev/null
+++ b/mock/system/config.js
@@ -0,0 +1,18 @@
+module.exports = [
+ {
+ url: '/config/baseConfig',
+ type: 'get',
+ response: _ => {
+ return {
+ 'code': 200,
+ 'data': {
+ 'kaptcha': false,
+ 'publicKey': 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCu5k8gcTFJy5UtMfmtKiR3f/EcUe93kzfteRj6+sM5fHRvOib82+uqQMjgaRZiMcr3HiHIFY5vA6c+Rfb5R2COitoOhxyA9U2eLXknzxLUQIAqXAvKQO8KnerA1Qjcds7xhJB2XPhWFlY4RVtMT2wr2lMd29QDE4F/kzyDhNBpxwIDAQAB',
+ 'sid': 'f390b7d7-337b-431b-be22-fb860a6c04d4'
+ },
+ 'message': '请求成功',
+ 'success': true
+ }
+ }
+ }
+]
diff --git a/mock/system/dept.js b/mock/system/dept.js
new file mode 100644
index 0000000..2c19c94
--- /dev/null
+++ b/mock/system/dept.js
@@ -0,0 +1,88 @@
+const list = [
+ {
+ 'id': '1',
+ 'simplename': '二分公司',
+ 'fullname': '二分公司',
+ 'num': 1,
+ 'pid': '0',
+ 'pids': '[0,1,2]',
+ 'pName': '顶级',
+ 'version': '',
+ 'tips': ''
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/dept/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: list
+ }
+ }
+ }
+ },
+ {
+ url: '/dept/tree',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: [
+ {
+ 'id': '0',
+ 'pid': '',
+ 'name': '顶级',
+ 'open': 'false',
+ 'checked': ''
+ },
+ {
+ 'id': '26',
+ 'pid': '24',
+ 'name': '运行二所',
+ 'open': 'false',
+ 'checked': ''
+ }
+ ]
+ }
+ }
+ }
+ },
+ {
+ url: '/dept/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dept/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dept/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/system/dict.js b/mock/system/dict.js
new file mode 100644
index 0000000..60de4cd
--- /dev/null
+++ b/mock/system/dict.js
@@ -0,0 +1,69 @@
+const list = [
+ {
+ 'code': 'sysStatus',
+ 'num': 0,
+ 'name': '状态',
+ 'pid': '0',
+ 'id': '16',
+ 'detail': '1:启用:1;2:禁用:2',
+ 'tips': ''
+ },
+ {
+ 'code': 'sysSex',
+ 'num': 0,
+ 'name': '性别',
+ 'pid': '0',
+ 'id': '29',
+ 'detail': '1:男:1;2:女:2',
+ 'tips': ''
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/dict/listPage',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: list,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/system/log.js b/mock/system/log.js
new file mode 100644
index 0000000..9b6306e
--- /dev/null
+++ b/mock/system/log.js
@@ -0,0 +1,115 @@
+const logTypes = [
+ {
+ 'value': '0',
+ 'name': '业务日志'
+ },
+ {
+ 'value': '1',
+ 'name': '登录日志'
+ }
+]
+const loglist = [
+ {
+ 'id': 'c4cdba483fb1449aaad1e6c49353c6b3',
+ 'logtype': '业务日志',
+ 'createtime': '2019-04-04 14:23:31',
+ 'logname': '修改用户',
+ 'succeed': '成功',
+ 'deptid': '24',
+ 'deptName': '总公司',
+ 'message': '账号=yxssadmin...',
+ 'userName': 'bruser',
+ 'userid': '45'
+ }
+]
+const loginloglist = [
+ {
+ 'createtime': '2020-03-26 16:03:23',
+ 'logname': '登录日志',
+ 'succeed': '成功',
+ 'ip': '192.168.8.184',
+ 'deptid': '0',
+ 'message': '',
+ 'userName': '超级管理员',
+ 'userid': '1'
+ },
+ {
+ 'createtime': '2020-03-26 15:13:50',
+ 'logname': '登录日志',
+ 'succeed': '成功',
+ 'ip': '192.168.8.184',
+ 'deptid': '0',
+ 'message': '',
+ 'userName': '超级管理员',
+ 'userid': '1'
+ },
+ {
+ 'createtime': '2020-03-26 14:47:05',
+ 'logname': '登录日志',
+ 'succeed': '成功',
+ 'ip': '192.168.8.105',
+ 'deptid': '0',
+ 'message': '',
+ 'userName': '超级管理员',
+ 'userid': '1'
+ }]
+module.exports = [
+ {
+ url: '/loginLog/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: loginloglist,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/log/list',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: loglist,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/log/detail',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ 'createtime': '2020-03-26',
+ 'logtype': '业务日志',
+ 'classname': 'com.casic.missiles.modular.system.controller.RoleController',
+ 'method': 'dataAuthor',
+ 'logname': '数据权限配置',
+ 'succeed': '成功',
+ 'id': '1243081729056264193',
+ 'message': '角色名称=十一室管理员,资源名称=',
+ 'userName': '超级管理员',
+ 'regularMessage': '角色名称=十一室管理员,资源名称=',
+ 'userid': '1'
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/code/logType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: logTypes
+ }
+ }
+ }
+]
diff --git a/mock/system/resource.js b/mock/system/resource.js
new file mode 100644
index 0000000..1122ea8
--- /dev/null
+++ b/mock/system/resource.js
@@ -0,0 +1,1569 @@
+const tree = [
+ {
+ 'checked': false,
+ 'code': 'system',
+ 'id': '105',
+ 'name': '系统管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],',
+ 'pid': '1189107859077373954',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr',
+ 'id': '106',
+ 'name': '用户管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_add',
+ 'id': '107',
+ 'name': '添加用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_edit',
+ 'id': '108',
+ 'name': '修改用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_delete',
+ 'id': '109',
+ 'name': '删除用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_reset',
+ 'id': '110',
+ 'name': '重置密码',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_freeze',
+ 'id': '111',
+ 'name': '冻结用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_unfreeze',
+ 'id': '112',
+ 'name': '解除冻结用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_setRole',
+ 'id': '113',
+ 'name': '分配角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role',
+ 'id': '114',
+ 'name': '角色管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_add',
+ 'id': '115',
+ 'name': '添加角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_edit',
+ 'id': '116',
+ 'name': '修改角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_remove',
+ 'id': '117',
+ 'name': '删除角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_setAuthority',
+ 'id': '118',
+ 'name': '配置权限',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu',
+ 'id': '119',
+ 'name': '资源管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_add',
+ 'id': '120',
+ 'name': '添加菜单',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_edit',
+ 'id': '121',
+ 'name': '修改菜单',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_remove',
+ 'id': '122',
+ 'name': '删除菜单',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log',
+ 'id': '128',
+ 'name': '日志管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept',
+ 'id': '131',
+ 'name': '组织管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict',
+ 'id': '132',
+ 'name': '字典管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'loginLog',
+ 'id': '133',
+ 'name': '登录日志',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log_clean',
+ 'id': '134',
+ 'name': '清空日志',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'pid': '128',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_add',
+ 'id': '135',
+ 'name': '添加部门',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_update',
+ 'id': '136',
+ 'name': '修改部门',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_delete',
+ 'id': '137',
+ 'name': '删除部门',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_add',
+ 'id': '138',
+ 'name': '添加字典',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_update',
+ 'id': '139',
+ 'name': '修改字典',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_delete',
+ 'id': '140',
+ 'name': '删除字典',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_list',
+ 'id': '151',
+ 'name': '菜单列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_list',
+ 'id': '153',
+ 'name': '部门列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_detail',
+ 'id': '154',
+ 'name': '部门详情',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_list',
+ 'id': '156',
+ 'name': '字典列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_detail',
+ 'id': '157',
+ 'name': '字典详情',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log_list',
+ 'id': '158',
+ 'name': '日志列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'pid': '128',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log_detail',
+ 'id': '159',
+ 'name': '日志详情',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'pid': '128',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'del_login_log',
+ 'id': '160',
+ 'name': '清空登录日志',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'pid': '133',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'login_log_list',
+ 'id': '161',
+ 'name': '登录日志列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'pid': '133',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_list',
+ 'id': '164',
+ 'name': '角色列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_list',
+ 'id': '167',
+ 'name': '用户列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'data_author',
+ 'id': '1138364388198715393',
+ 'name': '数据权限',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'AreaAdmin',
+ 'id': '1170945119300976642',
+ 'name': '区域管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'sys',
+ 'id': '1189107859077373954',
+ 'name': '基础权限管理',
+ 'open': true,
+ 'pcodes': '[0],',
+ 'pid': '0',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_listPage',
+ 'id': '1191975090689810434',
+ 'name': '区域列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_add',
+ 'id': '1191975312815955969',
+ 'name': '新增区域',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_update',
+ 'id': '1191975427559530497',
+ 'name': '修改区域',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_delete',
+ 'id': '1191975543687225346',
+ 'name': '区域删除',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': true,
+ 'code': '',
+ 'id': '0',
+ 'name': '顶级',
+ 'open': true,
+ 'pcodes': '',
+ 'pid': '',
+ 'value': ''
+ }
+]
+const list = [
+ {
+ 'isopen': '1',
+ 'code': 'system',
+ 'pcode': 'sys',
+ 'num': 4,
+ 'icon': 'icon-setting',
+ 'pid': '1189107859077373954',
+ 'isMenu': '是',
+ 'url': '/system',
+ 'tips': '',
+ 'pcodes': '[0],[sys],',
+ 'name': '系统管理',
+ 'statusName': '启用',
+ 'id': '105',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': true,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr',
+ 'pcode': 'system',
+ 'num': 1,
+ 'icon': 'icon-user',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/mgr',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '用户管理',
+ 'statusName': '启用',
+ 'id': '106',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_add',
+ 'pcode': 'mgr',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '添加用户',
+ 'statusName': '启用',
+ 'id': '107',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_edit',
+ 'pcode': 'mgr',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '修改用户',
+ 'statusName': '启用',
+ 'id': '108',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_delete',
+ 'pcode': 'mgr',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '删除用户',
+ 'statusName': '启用',
+ 'id': '109',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_reset',
+ 'pcode': 'mgr',
+ 'num': 4,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/reset',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '重置密码',
+ 'statusName': '启用',
+ 'id': '110',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_freeze',
+ 'pcode': 'mgr',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/freeze',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '冻结用户',
+ 'statusName': '启用',
+ 'id': '111',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_unfreeze',
+ 'pcode': 'mgr',
+ 'num': 6,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/unfreeze',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '解除冻结用户',
+ 'statusName': '启用',
+ 'id': '112',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_setRole',
+ 'pcode': 'mgr',
+ 'num': 7,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/roleAssign',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '分配角色',
+ 'statusName': '启用',
+ 'id': '113',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role',
+ 'pcode': 'system',
+ 'num': 2,
+ 'icon': 'permission',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/role',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '角色管理',
+ 'statusName': '启用',
+ 'id': '114',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_add',
+ 'pcode': 'role',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '添加角色',
+ 'statusName': '启用',
+ 'id': '115',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_edit',
+ 'pcode': 'role',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '修改角色',
+ 'statusName': '启用',
+ 'id': '116',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_remove',
+ 'pcode': 'role',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '删除角色',
+ 'statusName': '启用',
+ 'id': '117',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_setAuthority',
+ 'pcode': 'role',
+ 'num': 4,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/funcAuthor',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '配置权限',
+ 'statusName': '启用',
+ 'id': '118',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu',
+ 'pcode': 'system',
+ 'num': 4,
+ 'icon': 'function',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/resource',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '资源管理',
+ 'statusName': '启用',
+ 'id': '119',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_add',
+ 'pcode': 'menu',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '添加菜单',
+ 'statusName': '启用',
+ 'id': '120',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_edit',
+ 'pcode': 'menu',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '修改菜单',
+ 'statusName': '启用',
+ 'id': '121',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_remove',
+ 'pcode': 'menu',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '删除菜单',
+ 'statusName': '启用',
+ 'id': '122',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log',
+ 'pcode': 'system',
+ 'num': 6,
+ 'icon': 'log',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/log',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '日志管理',
+ 'statusName': '启用',
+ 'id': '128',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept',
+ 'pcode': 'system',
+ 'num': 3,
+ 'icon': 'dept2',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/dept',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '组织管理',
+ 'statusName': '启用',
+ 'id': '131',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict',
+ 'pcode': 'system',
+ 'num': 4,
+ 'icon': 'icon-dict',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/dict',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '字典管理',
+ 'statusName': '启用',
+ 'id': '132',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'loginLog',
+ 'pcode': 'system',
+ 'num': 6,
+ 'icon': 'task',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/loginLog',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '登录日志',
+ 'statusName': '启用',
+ 'id': '133',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log_clean',
+ 'pcode': 'log',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '128',
+ 'isMenu': '不是',
+ 'url': '/log/delLog',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'name': '清空日志',
+ 'statusName': '启用',
+ 'id': '134',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_add',
+ 'pcode': 'dept',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '添加部门',
+ 'statusName': '启用',
+ 'id': '135',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_update',
+ 'pcode': 'dept',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '修改部门',
+ 'statusName': '启用',
+ 'id': '136',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_delete',
+ 'pcode': 'dept',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '删除部门',
+ 'statusName': '启用',
+ 'id': '137',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_add',
+ 'pcode': 'dict',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '添加字典',
+ 'statusName': '启用',
+ 'id': '138',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_update',
+ 'pcode': 'dict',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '修改字典',
+ 'statusName': '启用',
+ 'id': '139',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_delete',
+ 'pcode': 'dict',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '删除字典',
+ 'statusName': '启用',
+ 'id': '140',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_list',
+ 'pcode': 'menu',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '菜单列表',
+ 'statusName': '启用',
+ 'id': '151',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_list',
+ 'pcode': 'dept',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '部门列表',
+ 'statusName': '启用',
+ 'id': '153',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_detail',
+ 'pcode': 'dept',
+ 'num': 6,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/detail',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '部门详情',
+ 'statusName': '启用',
+ 'id': '154',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_list',
+ 'pcode': 'dict',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '字典列表',
+ 'statusName': '启用',
+ 'id': '156',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_detail',
+ 'pcode': 'dict',
+ 'num': 6,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/detail',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '字典详情',
+ 'statusName': '启用',
+ 'id': '157',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log_list',
+ 'pcode': 'log',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '128',
+ 'isMenu': '不是',
+ 'url': '/log/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'name': '日志列表',
+ 'statusName': '启用',
+ 'id': '158',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log_detail',
+ 'pcode': 'log',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '128',
+ 'isMenu': '不是',
+ 'url': '/log/detail',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'name': '日志详情',
+ 'statusName': '启用',
+ 'id': '159',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'del_login_log',
+ 'pcode': 'loginLog',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '133',
+ 'isMenu': '不是',
+ 'url': '/loginLog/delLoginLog',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'name': '清空登录日志',
+ 'statusName': '启用',
+ 'id': '160',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'login_log_list',
+ 'pcode': 'loginLog',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '133',
+ 'isMenu': '不是',
+ 'url': '/loginLog/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'name': '登录日志列表',
+ 'statusName': '启用',
+ 'id': '161',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_list',
+ 'pcode': 'role',
+ 'num': 7,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '角色列表',
+ 'statusName': '启用',
+ 'id': '164',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_list',
+ 'pcode': 'mgr',
+ 'num': 10,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': ' /mgr/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '用户列表',
+ 'statusName': '启用',
+ 'id': '167',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'data_author',
+ 'pcode': 'role',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/dataAuthor',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '数据权限',
+ 'statusName': '启用',
+ 'id': '1138364388198715393',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'AreaAdmin',
+ 'pcode': 'system',
+ 'num': 0,
+ 'icon': 'icon-base',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/area',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '区域管理',
+ 'statusName': '启用',
+ 'id': '1170945119300976642',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'sys',
+ 'pcode': '0',
+ 'num': 0,
+ 'icon': 'icon-setting',
+ 'pid': '0',
+ 'isMenu': '不是',
+ 'url': '/sys',
+ 'tips': '',
+ 'pcodes': '[0],',
+ 'name': '基础权限管理',
+ 'statusName': '启用',
+ 'id': '1189107859077373954',
+ 'ismenu': '0',
+ 'levels': 1,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '02'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_listPage',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/listPage',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '区域列表',
+ 'statusName': '启用',
+ 'id': '1191975090689810434',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_add',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '新增区域',
+ 'statusName': '启用',
+ 'id': '1191975312815955969',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_update',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '修改区域',
+ 'statusName': '启用',
+ 'id': '1191975427559530497',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_delete',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '区域删除',
+ 'statusName': '启用',
+ 'id': '1191975543687225346',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/resource/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: list
+ }
+ }
+ }
+ },
+
+ // mock get all roles form server
+ {
+ url: '/resource/tree',
+ type: 'get',
+ response: _ => {
+ return {
+ 'code': 200,
+ 'message': 'success',
+ 'data': {
+ 'list': tree
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/code/resourceType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '菜单',
+ 'id': '55',
+ 'value': '03'
+ },
+ {
+ 'name': '按钮',
+ 'id': '56',
+ 'value': '04'
+ }
+ ]
+ }
+ }
+ },
+ {
+ url: '/resource/treeListByRoleId',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {
+ 'list': tree
+ }
+ }
+ }
+ },
+ {
+ url: 'resource/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/resource/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/resource/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/system/role.js b/mock/system/role.js
new file mode 100644
index 0000000..508ac84
--- /dev/null
+++ b/mock/system/role.js
@@ -0,0 +1,207 @@
+const tree = [
+ {
+ "id":1,
+ "pid":"0",
+ "name":"超级管理员"
+ }
+]
+const list = [
+ {
+ "deptName":"顶级",
+ "pName":"",
+ "num":1,
+ "name":"超级管理员",
+ "deptid":"0",
+ "pid":"0",
+ "id":1,
+ "version":1,
+ "tips":"administrator"
+ },
+ {
+ "deptName":"高压管网分公司",
+ "pName":"超级管理员",
+ "num":2,
+ "name":"高压管网分公司系统管理员",
+ "deptid":"24",
+ "pid":1,
+ "id":2,
+ "version":"",
+ "tips":"rqadmin"
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/role/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: list
+ }
+ }
+ }
+ },
+
+ // mock get all roles form server
+ {
+ url: '/role/tree',
+ type: 'get',
+ response: _ => {
+ return {
+ 'code': 200,
+ 'message': 'success',
+ 'data': {
+ 'list': tree
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/code/roleType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '菜单',
+ 'id': '55',
+ 'value': '03'
+ },
+ {
+ 'name': '按钮',
+ 'id': '56',
+ 'value': '04'
+ }
+ ]
+ }
+ }
+ },
+ {
+ url: '/role/treeByUserId',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {
+ 'list': [
+ {
+ "id":1,
+ "pid":"0",
+ "name":"超级管理员",
+ "open":true,
+ "checked":false
+ }
+ ]
+ }
+ }
+ }
+ },
+ {
+ url: '/role/treeByRoleId',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {
+ 'list': [
+ {
+ "id":"26",
+ "pid":"24",
+ "name":"运行二所",
+ "open":true,
+ "checked":true
+ }
+ ]
+ }
+ }
+ }
+ },
+ {
+ url: '/role/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/role/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/role/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/role/funcAuthor',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/role/dataAuthor',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/code/dataScopeType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '全部',
+ 'id': '55',
+ 'value': '03'
+ },
+ {
+ 'name': '本部门',
+ 'id': '56',
+ 'value': '04'
+ },
+ {
+ 'name': '自定义',
+ 'id': '57',
+ 'value': '04'
+ }
+ ]
+ }
+ }
+ }
+]
diff --git a/mock/system/user.js b/mock/system/user.js
new file mode 100644
index 0000000..5601db9
--- /dev/null
+++ b/mock/system/user.js
@@ -0,0 +1,860 @@
+// 用户详情
+const userinfo = {
+ 'account': 'admin',
+ 'avatar': 'girl.gif',
+ 'dataScope': [
+ '0',
+ '1236854643826184194',
+ '1236856061500936193',
+ '1236856816081391617',
+ '1236856889875976194',
+ '1236856952987668481',
+ '1236857009937928194',
+ '1236857134915604482',
+ '1236857274443321346',
+ '1236857346400800770',
+ '1236857428776931330',
+ '1236857492744261633',
+ '1236857661695021057',
+ '1236857767731220481',
+ '1236857826057211905',
+ '1236857873113108481',
+ '1236857966566395906',
+ '1236858049731055618',
+ '1236858125752815618',
+ '1236858179561541633',
+ '1236858248830472194',
+ '1236858330946555905',
+ '1236858380556783617',
+ '1236858422894088194',
+ '1236858475780067330',
+ '1236858517333037058',
+ '1236858579396153346',
+ '1236858642176495618',
+ '1236858704961032194',
+ '1236858748544045057',
+ '1236858806672904193',
+ '1236858863296008193',
+ '1236858908317667330'
+ ],
+ 'deptId': '0',
+ 'deptName': '顶级',
+ 'devices': [],
+ 'id': '1',
+ 'ipAddr': '124.64.16.144',
+ 'name': '超超级管理员',
+ 'phone': '18200000000',
+ 'roleList': [
+ '1'
+ ],
+ 'roleNames': [
+ '超级管理员'
+ ],
+ 'roleTips': [
+ 'administrator'
+ ],
+ 'scopeType': '4',
+ 'targetId': '',
+ 'targetName': '',
+ 'tenantId': ''
+}
+const list = [
+ {
+ 'birthday': '2017-05-05 00:00:00',
+ 'deptName': '顶级',
+ 'createtime': '2016-01-29 08:49:53',
+ 'roleid': '1',
+ 'sex': '2',
+ 'deptid': '0',
+ 'avatar': 'girl.gif',
+ 'version': 25,
+ 'phone': '18200000000',
+ 'sexName': '女',
+ 'name': '超级管理员',
+ 'roleName': '超级管理员',
+ 'statusName': '启用',
+ 'id': '1',
+ 'account': 'admin',
+ 'email': 'sn93@qq.com',
+ 'status': '1'
+ }
+]
+// 权限列表
+const permisson = {
+ 'menus': [
+ {
+ 'children': '',
+ 'code': 'sys',
+ 'icon': 'icon-setting',
+ 'id': '1189107859077373954',
+ 'ismenu': '0',
+ 'levels': 1,
+ 'name': '基础权限管理',
+ 'num': 0,
+ 'parentId': '0',
+ 'resourceType': '02',
+ 'url': '/sys'
+ },
+ {
+ 'children': '',
+ 'code': 'data_author',
+ 'icon': '',
+ 'id': '1138364388198715393',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '数据权限',
+ 'num': 0,
+ 'parentId': '114',
+ 'resourceType': '0',
+ 'url': '/role/dataAuthor'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr',
+ 'icon': 'icon-user',
+ 'id': '106',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '用户管理',
+ 'num': 1,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/mgr'
+ },
+ {
+ 'children': '',
+ 'code': 'role',
+ 'icon': 'permission',
+ 'id': '114',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '角色管理',
+ 'num': 2,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/role'
+ },
+ {
+ 'children': '',
+ 'code': 'role_edit',
+ 'icon': '',
+ 'id': '116',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '修改角色',
+ 'num': 2,
+ 'parentId': '114',
+ 'resourceType': '0',
+ 'url': '/role/update'
+ },
+ {
+ 'children': '',
+ 'code': 'role_remove',
+ 'icon': '',
+ 'id': '117',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '删除角色',
+ 'num': 3,
+ 'parentId': '114',
+ 'resourceType': '0',
+ 'url': '/role/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'dept',
+ 'icon': 'dept2',
+ 'id': '131',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '组织管理',
+ 'num': 3,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/dept'
+ },
+ {
+ 'children': '',
+ 'code': 'menu',
+ 'icon': 'function',
+ 'id': '119',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '资源管理',
+ 'num': 4,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/resource'
+ },
+ {
+ 'children': '',
+ 'code': 'role_setAuthority',
+ 'icon': '',
+ 'id': '118',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '配置权限',
+ 'num': 4,
+ 'parentId': '114',
+ 'resourceType': '0',
+ 'url': '/role/funcAuthor'
+ },
+ {
+ 'children': '',
+ 'code': 'system',
+ 'icon': 'icon-setting',
+ 'id': '105',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '系统管理',
+ 'num': 4,
+ 'parentId': '1189107859077373954',
+ 'resourceType': '03',
+ 'url': '/system'
+ },
+ {
+ 'children': '',
+ 'code': 'menu_list',
+ 'icon': '',
+ 'id': '151',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '菜单列表',
+ 'num': 5,
+ 'parentId': '119',
+ 'resourceType': '0',
+ 'url': '/resource/list'
+ },
+ {
+ 'children': '',
+ 'code': 'loginLog',
+ 'icon': 'task',
+ 'id': '133',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '登录日志',
+ 'num': 6,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/loginLog'
+ },
+ {
+ 'children': '',
+ 'code': 'log',
+ 'icon': 'log',
+ 'id': '128',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '日志管理',
+ 'num': 6,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/log'
+ },
+ {
+ 'children': '',
+ 'code': 'AreaAdmin',
+ 'icon': 'icon-base',
+ 'id': '1170945119300976642',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'name': '区域管理',
+ 'num': 0,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/area'
+ },
+ {
+ 'children': '',
+ 'code': 'visitor_permission',
+ 'icon': '',
+ 'id': '1202403877222735874',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'name': '访客授权列表',
+ 'num': 0,
+ 'parentId': '1202403125913837569',
+ 'resourceType': '03',
+ 'url': '/acsPermission/listVisitorPerm'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_delete',
+ 'icon': '',
+ 'id': '137',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '删除部门',
+ 'num': 1,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'role_add',
+ 'icon': '',
+ 'id': '115',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加角色',
+ 'num': 1,
+ 'parentId': '114',
+ 'resourceType': '04',
+ 'url': '/role/add'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_add',
+ 'icon': '',
+ 'id': '138',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加字典',
+ 'num': 1,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/add'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_delete',
+ 'icon': '',
+ 'id': '140',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '删除字典',
+ 'num': 1,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_add',
+ 'icon': '',
+ 'id': '135',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加部门',
+ 'num': 1,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/add'
+ },
+ {
+ 'children': '',
+ 'code': 'del_login_log',
+ 'icon': '',
+ 'id': '160',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '清空登录日志',
+ 'num': 1,
+ 'parentId': '133',
+ 'resourceType': '04',
+ 'url': '/loginLog/delLoginLog'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_update',
+ 'icon': '',
+ 'id': '139',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '修改字典',
+ 'num': 1,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/update'
+ },
+ {
+ 'children': '',
+ 'code': 'menu_add',
+ 'icon': '',
+ 'id': '120',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加菜单',
+ 'num': 1,
+ 'parentId': '119',
+ 'resourceType': '04',
+ 'url': '/resource/add'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_add',
+ 'icon': '',
+ 'id': '107',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加用户',
+ 'num': 1,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/add'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_update',
+ 'icon': '',
+ 'id': '136',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '修改部门',
+ 'num': 1,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/update'
+ },
+ {
+ 'children': '',
+ 'code': 'menu_edit',
+ 'icon': '',
+ 'id': '121',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '修改菜单',
+ 'num': 2,
+ 'parentId': '119',
+ 'resourceType': '04',
+ 'url': '/resource/update'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_edit',
+ 'icon': '',
+ 'id': '108',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '修改用户',
+ 'num': 2,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/update'
+ },
+ {
+ 'children': '',
+ 'code': 'log_list',
+ 'icon': '',
+ 'id': '158',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '日志列表',
+ 'num': 2,
+ 'parentId': '128',
+ 'resourceType': '04',
+ 'url': '/log/list'
+ },
+ {
+ 'children': '',
+ 'code': 'login_log_list',
+ 'icon': '',
+ 'id': '161',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '登录日志列表',
+ 'num': 2,
+ 'parentId': '133',
+ 'resourceType': '04',
+ 'url': '/loginLog/list'
+ },
+ {
+ 'children': '',
+ 'code': 'log_clean',
+ 'icon': '',
+ 'id': '134',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '清空日志',
+ 'num': 3,
+ 'parentId': '128',
+ 'resourceType': '04',
+ 'url': '/log/delLog'
+ },
+ {
+ 'children': '',
+ 'code': 'log_detail',
+ 'icon': '',
+ 'id': '159',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '日志详情',
+ 'num': 3,
+ 'parentId': '128',
+ 'resourceType': '04',
+ 'url': '/log/detail'
+ },
+ {
+ 'children': '',
+ 'code': 'menu_remove',
+ 'icon': '',
+ 'id': '122',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '删除菜单',
+ 'num': 3,
+ 'parentId': '119',
+ 'resourceType': '04',
+ 'url': '/resource/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_delete',
+ 'icon': '',
+ 'id': '109',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '删除用户',
+ 'num': 3,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_reset',
+ 'icon': '',
+ 'id': '110',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '重置密码',
+ 'num': 4,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/reset'
+ },
+ {
+ 'children': '',
+ 'code': 'dict',
+ 'icon': 'icon-dict',
+ 'id': '132',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'name': '字典管理',
+ 'num': 4,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/user'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_list',
+ 'icon': '',
+ 'id': '153',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '部门列表',
+ 'num': 5,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/list'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_list',
+ 'icon': '',
+ 'id': '156',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '字典列表',
+ 'num': 5,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/list'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_freeze',
+ 'icon': '',
+ 'id': '111',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '冻结用户',
+ 'num': 5,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/freeze'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_detail',
+ 'icon': '',
+ 'id': '154',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '部门详情',
+ 'num': 6,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/detail'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_detail',
+ 'icon': '',
+ 'id': '157',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '字典详情',
+ 'num': 6,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/detail'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_unfreeze',
+ 'icon': '',
+ 'id': '112',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '解除冻结用户',
+ 'num': 6,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/unfreeze'
+ },
+ {
+ 'children': '',
+ 'code': 'role_list',
+ 'icon': '',
+ 'id': '164',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '角色列表',
+ 'num': 7,
+ 'parentId': '114',
+ 'resourceType': '04',
+ 'url': '/role/list'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_setRole',
+ 'icon': '',
+ 'id': '113',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '分配角色',
+ 'num': 7,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/roleAssign'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_list',
+ 'icon': '',
+ 'id': '167',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '用户列表',
+ 'num': 10,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': ' /mgr/list'
+ },
+ {
+ 'children': '',
+ 'code': 'area_add',
+ 'icon': '',
+ 'id': '1191975312815955969',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'name': '新增区域',
+ 'num': 0,
+ 'parentId': '1170945119300976642',
+ 'resourceType': '04',
+ 'url': '/area/add'
+ },
+ {
+ 'children': '',
+ 'code': 'area_delete',
+ 'icon': '',
+ 'id': '1191975543687225346',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'name': '区域删除',
+ 'num': 0,
+ 'parentId': '1170945119300976642',
+ 'resourceType': '04',
+ 'url': '/area/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'area_listPage',
+ 'icon': '',
+ 'id': '1191975090689810434',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'name': '区域列表',
+ 'num': 0,
+ 'parentId': '1170945119300976642',
+ 'resourceType': '04',
+ 'url': '/area/listPage'
+ },
+ {
+ 'children': '',
+ 'code': 'area_update',
+ 'icon': '',
+ 'id': '1191975427559530497',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'name': '修改区域',
+ 'num': 0,
+ 'parentId': '1170945119300976642',
+ 'resourceType': '04',
+ 'url': '/area/update'
+ }
+ ]
+}
+module.exports = [
+ {
+ url: '/user/login',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ success: true,
+ data: {
+ kaptcha: '',
+ token: '02deb42b-5298-431a-b690-d04573c18281'
+
+ }
+ }
+ }
+ },
+ {
+ url: '/user/info',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ success: true,
+ data: userinfo
+ }
+ }
+ },
+ {
+ url: '/user/permission',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ success: true,
+ data: permisson
+ }
+ }
+ },
+ {
+ url: '/user/logout',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ success: true
+ }
+ }
+ },
+ {
+ url: '/mgr/list',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: list,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/mgr/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/freeze',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/unfreeze',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/reset',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/roleAssign',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/changePwd',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/table.js b/mock/table.js
new file mode 100644
index 0000000..d3963f4
--- /dev/null
+++ b/mock/table.js
@@ -0,0 +1,20 @@
+import Mock from 'mockjs'
+
+module.exports = {
+ list: () => {
+ const items = Mock.mock({
+ 'items|30': [{
+ id: '@id',
+ title: '@sentence(10, 20)',
+ 'status|1': ['published', 'draft', 'deleted'],
+ author: 'name',
+ display_time: '@datetime',
+ pageviews: '@integer(300, 5000)'
+ }]
+ })
+ return {
+ code: 20000,
+ data: items
+ }
+ }
+}
diff --git a/mock/user.js b/mock/user.js
new file mode 100644
index 0000000..6edeeff
--- /dev/null
+++ b/mock/user.js
@@ -0,0 +1,70 @@
+import { param2Obj } from './utils'
+
+const tokens = {
+ admin: {
+ token: 'admin-token'
+ },
+ editor: {
+ token: 'editor-token'
+ }
+}
+
+const users = {
+ 'admin-token': {
+ roles: ['admin'],
+ btns: ['kaptcha'],
+ introduction: 'I am a 超级管理员',
+ avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif',
+ name: 'mock Admin'
+ },
+ 'editor-token': {
+ roles: ['editor'],
+ btns: [],
+ introduction: 'I am an editor',
+ avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif',
+ name: 'Normal Editor'
+ }
+}
+
+module.exports = {
+ login: res => {
+ const { username } = JSON.parse(res.body)
+ const data = tokens[username]
+
+ if (data) {
+ return {
+ code: 200,
+ success: true,
+ data
+ }
+ }
+ return {
+ code: 60204,
+ success: false,
+ message: '账号或密码错误.'
+ }
+ },
+ getInfo: res => {
+ const { token } = param2Obj(res.url)
+ const info = users[token]
+
+ if (info) {
+ return {
+ code: 200,
+ success: true,
+ data: info
+ }
+ }
+ return {
+ code: 50008,
+ success: false,
+ message: '登录失败,无法获取用户信息.'
+ }
+ },
+ logout: () => {
+ return {
+ code: 200,
+ success: true
+ }
+ }
+}
diff --git a/mock/utils.js b/mock/utils.js
new file mode 100644
index 0000000..8fc4926
--- /dev/null
+++ b/mock/utils.js
@@ -0,0 +1,51 @@
+const Mock = require('mockjs')
+
+const NameList = []
+const count = 100
+
+for (let i = 0; i < count; i++) {
+ NameList.push(Mock.mock({
+ name: '@first'
+ }))
+}
+NameList.push({ name: 'mock-Pan' })
+
+module.exports = [
+ // 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/package-lock.json b/package-lock.json
index b780dad..63c2f82 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -305,6 +305,19 @@
"@babel/helper-validator-identifier": "^7.14.5",
"chalk": "^2.0.0",
"js-tokens": "^4.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"@babel/parser": {
@@ -1273,6 +1286,19 @@
"@jest/source-map": "^24.9.0",
"chalk": "^2.0.1",
"slash": "^2.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"@jest/core": {
@@ -1317,6 +1343,17 @@
"integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
"dev": true
},
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"strip-ansi": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
@@ -1380,6 +1417,17 @@
"string-length": "^2.0.0"
},
"dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -1454,6 +1502,17 @@
"write-file-atomic": "2.4.1"
},
"dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -1507,6 +1566,17 @@
"integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
"dev": true
},
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"is-fullwidth-code-point": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
@@ -2328,6 +2398,19 @@
"request": "^2.88.2",
"semver": "^6.1.0",
"strip-ansi": "^6.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"@vue/component-compiler-utils": {
@@ -3082,6 +3165,19 @@
"babel-preset-jest": "^24.9.0",
"chalk": "^2.4.2",
"slash": "^2.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"babel-loader": {
@@ -3940,14 +4036,54 @@
"dev": true
},
"chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
}
},
"chardet": {
@@ -4364,6 +4500,19 @@
"@types/q": "^1.5.1",
"chalk": "^2.4.1",
"q": "^1.1.2"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"code-point-at": {
@@ -5231,6 +5380,17 @@
"integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=",
"dev": true
},
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"commander": {
"version": "2.15.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
@@ -5823,6 +5983,12 @@
}
}
},
+ "domready": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/domready/-/domready-1.0.8.tgz",
+ "integrity": "sha1-kfJS5Ze2Wvd+dFriTdAYXV4m1Yw=",
+ "dev": true
+ },
"domutils": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
@@ -6195,6 +6361,17 @@
"v8-compile-cache": "^2.0.3"
},
"dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"eslint-scope": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
@@ -8218,6 +8395,12 @@
"integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
"dev": true
},
+ "image-size": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
+ "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=",
+ "dev": true
+ },
"import-cwd": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz",
@@ -9144,6 +9327,19 @@
"prompts": "^2.0.1",
"realpath-native": "^1.1.0",
"yargs": "^13.3.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
}
}
@@ -9182,6 +9378,19 @@
"micromatch": "^3.1.10",
"pretty-format": "^24.9.0",
"realpath-native": "^1.1.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-diff": {
@@ -9194,6 +9403,19 @@
"diff-sequences": "^24.9.0",
"jest-get-type": "^24.9.0",
"pretty-format": "^24.9.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-docblock": {
@@ -9216,6 +9438,19 @@
"jest-get-type": "^24.9.0",
"jest-util": "^24.9.0",
"pretty-format": "^24.9.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-environment-jsdom": {
@@ -9437,6 +9672,19 @@
"jest-util": "^24.9.0",
"pretty-format": "^24.9.0",
"throat": "^4.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-leak-detector": {
@@ -9459,6 +9707,19 @@
"jest-diff": "^24.9.0",
"jest-get-type": "^24.9.0",
"pretty-format": "^24.9.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-message-util": {
@@ -9475,6 +9736,19 @@
"micromatch": "^3.1.10",
"slash": "^2.0.0",
"stack-utils": "^1.0.1"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-mock": {
@@ -9509,6 +9783,19 @@
"chalk": "^2.0.1",
"jest-pnp-resolver": "^1.2.1",
"realpath-native": "^1.1.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-resolve-dependencies": {
@@ -9547,6 +9834,19 @@
"jest-worker": "^24.6.0",
"source-map-support": "^0.5.6",
"throat": "^4.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-runtime": {
@@ -9578,6 +9878,19 @@
"slash": "^2.0.0",
"strip-bom": "^3.0.0",
"yargs": "^13.3.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-serializer": {
@@ -9614,6 +9927,19 @@
"natural-compare": "^1.4.0",
"pretty-format": "^24.9.0",
"semver": "^6.2.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-transform-stub": {
@@ -9642,6 +9968,17 @@
"source-map": "^0.6.0"
},
"dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"ci-info": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
@@ -9684,6 +10021,17 @@
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
"dev": true
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
}
}
},
@@ -9711,6 +10059,17 @@
"type-fest": "^0.21.3"
}
},
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"slash": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
@@ -9764,6 +10123,17 @@
"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
"integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
"dev": true
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
}
}
},
@@ -9788,6 +10158,12 @@
}
}
},
+ "js-base64": {
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz",
+ "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==",
+ "dev": true
+ },
"js-beautify": {
"version": "1.14.0",
"resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.14.0.tgz",
@@ -9993,6 +10369,19 @@
"requires": {
"chalk": "^2.3.0",
"shell-quote": "^1.6.1"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"launch-editor-middleware": {
@@ -10499,6 +10888,19 @@
"dev": true,
"requires": {
"chalk": "^2.0.1"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"log-update": {
@@ -10646,6 +11048,23 @@
"integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
"dev": true
},
+ "merge-options": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-1.0.1.tgz",
+ "integrity": "sha512-iuPV41VWKWBIOpBsjoxjDZw8/GbSfZ2mk7N1453bwMrfzdrIk7EzBd+8UVR6rkw67th7xnk9Dytl3J+lHPdxvg==",
+ "dev": true,
+ "requires": {
+ "is-plain-obj": "^1.1"
+ },
+ "dependencies": {
+ "is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
+ "dev": true
+ }
+ }
+ },
"merge-source-map": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz",
@@ -10846,6 +11265,12 @@
"through2": "^2.0.0"
}
},
+ "mitt": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.1.2.tgz",
+ "integrity": "sha1-OA5hSA1qYVtmDwertg1R4KTkvtY=",
+ "dev": true
+ },
"mixin-deep": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
@@ -10876,6 +11301,12 @@
"minimist": "^1.2.5"
}
},
+ "mock": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/mock/-/mock-0.1.1.tgz",
+ "integrity": "sha1-5+NYnH5rM3bWn1o+RwtWYEQXxjM=",
+ "dev": true
+ },
"mockjs": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/mockjs/-/mockjs-1.1.0.tgz",
@@ -10943,6 +11374,12 @@
"thenify-all": "^1.0.0"
}
},
+ "nanoid": {
+ "version": "3.1.25",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz",
+ "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==",
+ "dev": true
+ },
"nanomatch": {
"version": "1.2.13",
"resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
@@ -11426,6 +11863,17 @@
"wcwidth": "^1.0.1"
},
"dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"strip-ansi": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
@@ -11877,6 +12325,28 @@
"supports-color": "^6.1.0"
},
"dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -12370,6 +12840,28 @@
}
}
},
+ "postcss-prefix-selector": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/postcss-prefix-selector/-/postcss-prefix-selector-1.10.0.tgz",
+ "integrity": "sha512-VcC/zCXVfFdGyn+Fo9+mxnxBu+hT61uMJJBdfWBbIeDrcE6g8s+26SUPTMpz8kc9wfoLpJGAZZ4QwbVqwxpNRA==",
+ "dev": true,
+ "requires": {
+ "postcss": "^8.2.10"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "8.3.6",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.6.tgz",
+ "integrity": "sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A==",
+ "dev": true,
+ "requires": {
+ "colorette": "^1.2.2",
+ "nanoid": "^3.1.23",
+ "source-map-js": "^0.6.2"
+ }
+ }
+ }
+ },
"postcss-reduce-initial": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz",
@@ -12448,6 +12940,104 @@
"integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
"dev": true
},
+ "posthtml": {
+ "version": "0.9.2",
+ "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.9.2.tgz",
+ "integrity": "sha1-9MBtufZ7Yf0XxOJW5+PZUVv3Jv0=",
+ "dev": true,
+ "requires": {
+ "posthtml-parser": "^0.2.0",
+ "posthtml-render": "^1.0.5"
+ }
+ },
+ "posthtml-parser": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.2.1.tgz",
+ "integrity": "sha1-NdUw3jhnQMK6JP8usvrznM3ycd0=",
+ "dev": true,
+ "requires": {
+ "htmlparser2": "^3.8.3",
+ "isobject": "^2.1.0"
+ },
+ "dependencies": {
+ "domhandler": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
+ "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1"
+ }
+ },
+ "entities": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
+ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
+ "dev": true
+ },
+ "htmlparser2": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
+ "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^1.3.1",
+ "domhandler": "^2.3.0",
+ "domutils": "^1.5.1",
+ "entities": "^1.1.1",
+ "inherits": "^2.0.1",
+ "readable-stream": "^3.1.1"
+ }
+ },
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ },
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ }
+ }
+ },
+ "posthtml-rename-id": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/posthtml-rename-id/-/posthtml-rename-id-1.0.12.tgz",
+ "integrity": "sha512-UKXf9OF/no8WZo9edRzvuMenb6AD5hDLzIepJW+a4oJT+T/Lx7vfMYWT4aWlGNQh0WMhnUx1ipN9OkZ9q+ddEw==",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "1.0.5"
+ }
+ },
+ "posthtml-render": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-1.4.0.tgz",
+ "integrity": "sha512-W1779iVHGfq0Fvh2PROhCe2QhB8mEErgqzo1wpIt36tCgChafP+hbXIhLDOM8ePJrZcFs0vkNEtdibEWVqChqw==",
+ "dev": true
+ },
+ "posthtml-svg-mode": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/posthtml-svg-mode/-/posthtml-svg-mode-1.0.3.tgz",
+ "integrity": "sha512-hEqw9NHZ9YgJ2/0G7CECOeuLQKZi8HjWLkBaSVtOWjygQ9ZD8P7tqeowYs7WrFdKsWEKG7o+IlsPY8jrr0CJpQ==",
+ "dev": true,
+ "requires": {
+ "merge-options": "1.0.1",
+ "posthtml": "^0.9.2",
+ "posthtml-parser": "^0.2.1",
+ "posthtml-render": "^1.0.6"
+ }
+ },
"prelude-ls": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
@@ -13853,6 +14443,12 @@
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
"dev": true
},
+ "source-map-js": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz",
+ "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==",
+ "dev": true
+ },
"source-map-resolve": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
@@ -14280,6 +14876,245 @@
"has-flag": "^3.0.0"
}
},
+ "svg-baker": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/svg-baker/-/svg-baker-1.7.0.tgz",
+ "integrity": "sha512-nibslMbkXOIkqKVrfcncwha45f97fGuAOn1G99YwnwTj8kF9YiM6XexPcUso97NxOm6GsP0SIvYVIosBis1xLg==",
+ "dev": true,
+ "requires": {
+ "bluebird": "^3.5.0",
+ "clone": "^2.1.1",
+ "he": "^1.1.1",
+ "image-size": "^0.5.1",
+ "loader-utils": "^1.1.0",
+ "merge-options": "1.0.1",
+ "micromatch": "3.1.0",
+ "postcss": "^5.2.17",
+ "postcss-prefix-selector": "^1.6.0",
+ "posthtml-rename-id": "^1.0",
+ "posthtml-svg-mode": "^1.0.3",
+ "query-string": "^4.3.2",
+ "traverse": "^0.6.6"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+ "dev": true
+ },
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
+ }
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.0.tgz",
+ "integrity": "sha512-3StSelAE+hnRvMs8IdVW7Uhk8CVed5tp+kLLGlBP6WiRAXS21GPGu/Nat4WNPXj2Eoc24B02SaeoyozPMfj0/g==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.2.2",
+ "define-property": "^1.0.0",
+ "extend-shallow": "^2.0.1",
+ "extglob": "^2.0.2",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^5.0.2",
+ "nanomatch": "^1.2.1",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ }
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "svg-baker-runtime": {
+ "version": "1.4.7",
+ "resolved": "https://registry.npmjs.org/svg-baker-runtime/-/svg-baker-runtime-1.4.7.tgz",
+ "integrity": "sha512-Zorfwwj5+lWjk/oxwSMsRdS2sPQQdTmmsvaSpzU+i9ZWi3zugHLt6VckWfnswphQP0LmOel3nggpF5nETbt6xw==",
+ "dev": true,
+ "requires": {
+ "deepmerge": "1.3.2",
+ "mitt": "1.1.2",
+ "svg-baker": "^1.7.0"
+ },
+ "dependencies": {
+ "deepmerge": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.3.2.tgz",
+ "integrity": "sha1-FmNpFinU2/42T6EqKk8KqGqjoFA=",
+ "dev": true
+ }
+ }
+ },
+ "svg-sprite-loader": {
+ "version": "6.0.9",
+ "resolved": "https://registry.npmjs.org/svg-sprite-loader/-/svg-sprite-loader-6.0.9.tgz",
+ "integrity": "sha512-V/F3iI1J/xWeO0cRXkEFvhujvBQ3deAPFlhip+AW00Hs+9gighu619mblucIWdRPmDMfcSWJD/ZuXf6HldIskw==",
+ "dev": true,
+ "requires": {
+ "bluebird": "^3.5.0",
+ "deepmerge": "1.3.2",
+ "domready": "1.0.8",
+ "escape-string-regexp": "1.0.5",
+ "loader-utils": "^1.1.0",
+ "svg-baker": "^1.5.0",
+ "svg-baker-runtime": "^1.4.7",
+ "url-slug": "2.0.0"
+ },
+ "dependencies": {
+ "deepmerge": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.3.2.tgz",
+ "integrity": "sha1-FmNpFinU2/42T6EqKk8KqGqjoFA=",
+ "dev": true
+ }
+ }
+ },
"svg-tags": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz",
@@ -14307,6 +15142,17 @@
"util.promisify": "~1.0.0"
},
"dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"util.promisify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz",
@@ -14727,6 +15573,12 @@
"punycode": "^2.1.0"
}
},
+ "traverse": {
+ "version": "0.6.6",
+ "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz",
+ "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=",
+ "dev": true
+ },
"tryer": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz",
@@ -14925,6 +15777,12 @@
"integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==",
"dev": true
},
+ "unidecode": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/unidecode/-/unidecode-0.1.8.tgz",
+ "integrity": "sha1-77swFTi8RSRqmsjFWdcvAVMFBT4=",
+ "dev": true
+ },
"union-value": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
@@ -15097,6 +15955,15 @@
"requires-port": "^1.0.0"
}
},
+ "url-slug": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/url-slug/-/url-slug-2.0.0.tgz",
+ "integrity": "sha1-p4nVrtSZXA2VrzM3etHVxo1NcCc=",
+ "dev": true,
+ "requires": {
+ "unidecode": "0.1.8"
+ }
+ },
"use": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
@@ -15263,6 +16130,19 @@
"source-map": "^0.5.6",
"tsconfig": "^7.0.0",
"vue-template-es2015-compiler": "^1.6.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"vue-loader": {
@@ -15671,6 +16551,17 @@
"integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
"dev": true
},
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
diff --git a/mock/config.js b/mock/config.js
new file mode 100644
index 0000000..7d111e0
--- /dev/null
+++ b/mock/config.js
@@ -0,0 +1,15 @@
+// import { param2Obj } from './utils'
+
+const baseConfig = {
+ kaptcha: true
+}
+
+export default {
+ baseconfig: res => {
+ return {
+ code: 200,
+ success: true,
+ data: baseConfig
+ }
+ }
+}
diff --git a/mock/index.js b/mock/index.js
new file mode 100644
index 0000000..d2713dd
--- /dev/null
+++ b/mock/index.js
@@ -0,0 +1,70 @@
+const Mock = require('mockjs')
+const { param2Obj } = require('./utils')
+
+const user = require('./system/user')
+const resource = require('./system/resource')
+const dict = require('./system/dict')
+const dept = require('./system/dept')
+const area = require('./system/area')
+const role = require('./system/role')
+const log = require('./system/log')
+const config = require('./system/config')
+const search = require('./remote-search')
+
+const mocks = [
+ ...user,
+ ...resource,
+ ...dict,
+ ...area,
+ ...dept,
+ ...role,
+ ...log,
+ ...config,
+ ...search
+]
+
+// for front mock
+// please use it cautiously, it will redefine XMLHttpRequest,
+// which will cause many of your third-party libraries to be invalidated(like progress event).
+function mockXHR() {
+ // mock patch
+ // https://github.com/nuysoft/Mock/issues/300
+ Mock.XHR.prototype.proxy_send = Mock.XHR.prototype.send
+ Mock.XHR.prototype.send = function() {
+ if (this.custom.xhr) {
+ this.custom.xhr.withCredentials = this.withCredentials || false
+
+ if (this.responseType) {
+ this.custom.xhr.responseType = this.responseType
+ }
+ }
+ this.proxy_send(...arguments)
+ }
+
+ function XHR2ExpressReqWrap(respond) {
+ return function(options) {
+ let result = null
+ if (respond instanceof Function) {
+ const { body, type, url } = options
+ // https://expressjs.com/en/4x/api.html#req
+ result = respond({
+ method: type,
+ body: JSON.parse(body),
+ query: param2Obj(url)
+ })
+ } else {
+ result = respond
+ }
+ return Mock.mock(result)
+ }
+ }
+
+ for (const i of mocks) {
+ Mock.mock(new RegExp(i.url), i.type || 'get', XHR2ExpressReqWrap(i.response))
+ }
+}
+
+module.exports = {
+ mocks,
+ mockXHR
+}
diff --git a/mock/mock-server.js b/mock/mock-server.js
new file mode 100644
index 0000000..8941ec0
--- /dev/null
+++ b/mock/mock-server.js
@@ -0,0 +1,81 @@
+const chokidar = require('chokidar')
+const bodyParser = require('body-parser')
+const chalk = require('chalk')
+const path = require('path')
+const Mock = require('mockjs')
+
+const mockDir = path.join(process.cwd(), 'mock')
+
+function registerRoutes(app) {
+ let mockLastIndex
+ const { mocks } = require('./index.js')
+ const mocksForServer = mocks.map(route => {
+ return responseFake(route.url, route.type, route.response)
+ })
+ for (const mock of mocksForServer) {
+ app[mock.type](mock.url, mock.response)
+ mockLastIndex = app._router.stack.length
+ }
+ const mockRoutesLength = Object.keys(mocksForServer).length
+ return {
+ mockRoutesLength: mockRoutesLength,
+ mockStartIndex: mockLastIndex - mockRoutesLength
+ }
+}
+
+function unregisterRoutes() {
+ Object.keys(require.cache).forEach(i => {
+ if (i.includes(mockDir)) {
+ delete require.cache[require.resolve(i)]
+ }
+ })
+}
+
+// for mock server
+const responseFake = (url, type, respond) => {
+ return {
+ url: new RegExp(`${process.env.VUE_APP_BASE_API}${url}`),
+ type: type || 'get',
+ response(req, res) {
+ console.log('request invoke:' + req.path)
+ res.json(Mock.mock(respond instanceof Function ? respond(req, res) : respond))
+ }
+ }
+}
+
+module.exports = app => {
+ // parse app.body
+ // https://expressjs.com/en/4x/api.html#req.body
+ app.use(bodyParser.json())
+ app.use(bodyParser.urlencoded({
+ extended: true
+ }))
+
+ const mockRoutes = registerRoutes(app)
+ var mockRoutesLength = mockRoutes.mockRoutesLength
+ var mockStartIndex = mockRoutes.mockStartIndex
+
+ // watch files, hot reload mock server
+ chokidar.watch(mockDir, {
+ ignored: /mock-server/,
+ ignoreInitial: true
+ }).on('all', (event, path) => {
+ if (event === 'change' || event === 'add') {
+ try {
+ // remove mock routes stack
+ app._router.stack.splice(mockStartIndex, mockRoutesLength)
+
+ // clear routes cache
+ unregisterRoutes()
+
+ const mockRoutes = registerRoutes(app)
+ mockRoutesLength = mockRoutes.mockRoutesLength
+ mockStartIndex = mockRoutes.mockStartIndex
+
+ console.log(chalk.magentaBright(`\n > Mock Server hot reload success! changed ${path}`))
+ } catch (error) {
+ console.log(chalk.redBright(error))
+ }
+ }
+ })
+}
diff --git a/mock/remote-search.js b/mock/remote-search.js
new file mode 100644
index 0000000..b5164b1
--- /dev/null
+++ b/mock/remote-search.js
@@ -0,0 +1,51 @@
+const Mock = require('mockjs')
+
+const NameList = []
+const count = 100
+
+for (let i = 0; i < count; i++) {
+ NameList.push(Mock.mock({
+ name: '@first'
+ }))
+}
+NameList.push({ name: 'mock-Pan' })
+
+module.exports = [
+ // username search
+ {
+ url: '/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: '/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/mock/system/area.js b/mock/system/area.js
new file mode 100644
index 0000000..1586661
--- /dev/null
+++ b/mock/system/area.js
@@ -0,0 +1,130 @@
+const list = [
+ {
+ 'id': '11010100102',
+ 'lat': '',
+ 'level': 5,
+ 'levelName': '社区',
+ 'lng': '',
+ 'name': '测试社区3',
+ 'num': 1,
+ 'pid': '110101001',
+ 'pids': '[0],[110000],[110100],[110101],[110101001],',
+ 'simplename': '测试社区2'
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/area/listPage',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: list,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/area/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: [
+ {
+ 'id': '110000',
+ 'pid': '0',
+ 'name': '北京市',
+ 'level': 1,
+ 'pids': [0],
+ 'levelName': '省级',
+ 'simplename': '北京'
+ }
+ ]
+ }
+ }
+ },
+ {
+ url: '/area/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/area/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/area/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/code/levelType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '省级',
+ 'id': '166',
+ 'value': '1'
+ },
+ {
+ 'name': '市级',
+ 'id': '167',
+ 'value': '2'
+ },
+ {
+ 'name': '区级',
+ 'id': '168',
+ 'value': '3'
+ },
+ {
+ 'name': '街道',
+ 'id': '169',
+ 'value': '4'
+ },
+ {
+ 'name': '社区',
+ 'id': '170',
+ 'value': '5'
+ },
+ {
+ 'name': '网格',
+ 'id': '171',
+ 'value': '6'
+ },
+ {
+ 'name': '责任网格',
+ 'id': '172',
+ 'value': '7'
+ }
+ ]
+ }
+ }
+ }
+]
diff --git a/mock/system/config.js b/mock/system/config.js
new file mode 100644
index 0000000..652e41d
--- /dev/null
+++ b/mock/system/config.js
@@ -0,0 +1,18 @@
+module.exports = [
+ {
+ url: '/config/baseConfig',
+ type: 'get',
+ response: _ => {
+ return {
+ 'code': 200,
+ 'data': {
+ 'kaptcha': false,
+ 'publicKey': 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCu5k8gcTFJy5UtMfmtKiR3f/EcUe93kzfteRj6+sM5fHRvOib82+uqQMjgaRZiMcr3HiHIFY5vA6c+Rfb5R2COitoOhxyA9U2eLXknzxLUQIAqXAvKQO8KnerA1Qjcds7xhJB2XPhWFlY4RVtMT2wr2lMd29QDE4F/kzyDhNBpxwIDAQAB',
+ 'sid': 'f390b7d7-337b-431b-be22-fb860a6c04d4'
+ },
+ 'message': '请求成功',
+ 'success': true
+ }
+ }
+ }
+]
diff --git a/mock/system/dept.js b/mock/system/dept.js
new file mode 100644
index 0000000..2c19c94
--- /dev/null
+++ b/mock/system/dept.js
@@ -0,0 +1,88 @@
+const list = [
+ {
+ 'id': '1',
+ 'simplename': '二分公司',
+ 'fullname': '二分公司',
+ 'num': 1,
+ 'pid': '0',
+ 'pids': '[0,1,2]',
+ 'pName': '顶级',
+ 'version': '',
+ 'tips': ''
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/dept/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: list
+ }
+ }
+ }
+ },
+ {
+ url: '/dept/tree',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: [
+ {
+ 'id': '0',
+ 'pid': '',
+ 'name': '顶级',
+ 'open': 'false',
+ 'checked': ''
+ },
+ {
+ 'id': '26',
+ 'pid': '24',
+ 'name': '运行二所',
+ 'open': 'false',
+ 'checked': ''
+ }
+ ]
+ }
+ }
+ }
+ },
+ {
+ url: '/dept/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dept/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dept/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/system/dict.js b/mock/system/dict.js
new file mode 100644
index 0000000..60de4cd
--- /dev/null
+++ b/mock/system/dict.js
@@ -0,0 +1,69 @@
+const list = [
+ {
+ 'code': 'sysStatus',
+ 'num': 0,
+ 'name': '状态',
+ 'pid': '0',
+ 'id': '16',
+ 'detail': '1:启用:1;2:禁用:2',
+ 'tips': ''
+ },
+ {
+ 'code': 'sysSex',
+ 'num': 0,
+ 'name': '性别',
+ 'pid': '0',
+ 'id': '29',
+ 'detail': '1:男:1;2:女:2',
+ 'tips': ''
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/dict/listPage',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: list,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/system/log.js b/mock/system/log.js
new file mode 100644
index 0000000..9b6306e
--- /dev/null
+++ b/mock/system/log.js
@@ -0,0 +1,115 @@
+const logTypes = [
+ {
+ 'value': '0',
+ 'name': '业务日志'
+ },
+ {
+ 'value': '1',
+ 'name': '登录日志'
+ }
+]
+const loglist = [
+ {
+ 'id': 'c4cdba483fb1449aaad1e6c49353c6b3',
+ 'logtype': '业务日志',
+ 'createtime': '2019-04-04 14:23:31',
+ 'logname': '修改用户',
+ 'succeed': '成功',
+ 'deptid': '24',
+ 'deptName': '总公司',
+ 'message': '账号=yxssadmin...',
+ 'userName': 'bruser',
+ 'userid': '45'
+ }
+]
+const loginloglist = [
+ {
+ 'createtime': '2020-03-26 16:03:23',
+ 'logname': '登录日志',
+ 'succeed': '成功',
+ 'ip': '192.168.8.184',
+ 'deptid': '0',
+ 'message': '',
+ 'userName': '超级管理员',
+ 'userid': '1'
+ },
+ {
+ 'createtime': '2020-03-26 15:13:50',
+ 'logname': '登录日志',
+ 'succeed': '成功',
+ 'ip': '192.168.8.184',
+ 'deptid': '0',
+ 'message': '',
+ 'userName': '超级管理员',
+ 'userid': '1'
+ },
+ {
+ 'createtime': '2020-03-26 14:47:05',
+ 'logname': '登录日志',
+ 'succeed': '成功',
+ 'ip': '192.168.8.105',
+ 'deptid': '0',
+ 'message': '',
+ 'userName': '超级管理员',
+ 'userid': '1'
+ }]
+module.exports = [
+ {
+ url: '/loginLog/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: loginloglist,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/log/list',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: loglist,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/log/detail',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ 'createtime': '2020-03-26',
+ 'logtype': '业务日志',
+ 'classname': 'com.casic.missiles.modular.system.controller.RoleController',
+ 'method': 'dataAuthor',
+ 'logname': '数据权限配置',
+ 'succeed': '成功',
+ 'id': '1243081729056264193',
+ 'message': '角色名称=十一室管理员,资源名称=',
+ 'userName': '超级管理员',
+ 'regularMessage': '角色名称=十一室管理员,资源名称=',
+ 'userid': '1'
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/code/logType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: logTypes
+ }
+ }
+ }
+]
diff --git a/mock/system/resource.js b/mock/system/resource.js
new file mode 100644
index 0000000..1122ea8
--- /dev/null
+++ b/mock/system/resource.js
@@ -0,0 +1,1569 @@
+const tree = [
+ {
+ 'checked': false,
+ 'code': 'system',
+ 'id': '105',
+ 'name': '系统管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],',
+ 'pid': '1189107859077373954',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr',
+ 'id': '106',
+ 'name': '用户管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_add',
+ 'id': '107',
+ 'name': '添加用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_edit',
+ 'id': '108',
+ 'name': '修改用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_delete',
+ 'id': '109',
+ 'name': '删除用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_reset',
+ 'id': '110',
+ 'name': '重置密码',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_freeze',
+ 'id': '111',
+ 'name': '冻结用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_unfreeze',
+ 'id': '112',
+ 'name': '解除冻结用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_setRole',
+ 'id': '113',
+ 'name': '分配角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role',
+ 'id': '114',
+ 'name': '角色管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_add',
+ 'id': '115',
+ 'name': '添加角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_edit',
+ 'id': '116',
+ 'name': '修改角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_remove',
+ 'id': '117',
+ 'name': '删除角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_setAuthority',
+ 'id': '118',
+ 'name': '配置权限',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu',
+ 'id': '119',
+ 'name': '资源管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_add',
+ 'id': '120',
+ 'name': '添加菜单',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_edit',
+ 'id': '121',
+ 'name': '修改菜单',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_remove',
+ 'id': '122',
+ 'name': '删除菜单',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log',
+ 'id': '128',
+ 'name': '日志管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept',
+ 'id': '131',
+ 'name': '组织管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict',
+ 'id': '132',
+ 'name': '字典管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'loginLog',
+ 'id': '133',
+ 'name': '登录日志',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log_clean',
+ 'id': '134',
+ 'name': '清空日志',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'pid': '128',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_add',
+ 'id': '135',
+ 'name': '添加部门',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_update',
+ 'id': '136',
+ 'name': '修改部门',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_delete',
+ 'id': '137',
+ 'name': '删除部门',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_add',
+ 'id': '138',
+ 'name': '添加字典',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_update',
+ 'id': '139',
+ 'name': '修改字典',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_delete',
+ 'id': '140',
+ 'name': '删除字典',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_list',
+ 'id': '151',
+ 'name': '菜单列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_list',
+ 'id': '153',
+ 'name': '部门列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_detail',
+ 'id': '154',
+ 'name': '部门详情',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_list',
+ 'id': '156',
+ 'name': '字典列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_detail',
+ 'id': '157',
+ 'name': '字典详情',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log_list',
+ 'id': '158',
+ 'name': '日志列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'pid': '128',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log_detail',
+ 'id': '159',
+ 'name': '日志详情',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'pid': '128',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'del_login_log',
+ 'id': '160',
+ 'name': '清空登录日志',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'pid': '133',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'login_log_list',
+ 'id': '161',
+ 'name': '登录日志列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'pid': '133',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_list',
+ 'id': '164',
+ 'name': '角色列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_list',
+ 'id': '167',
+ 'name': '用户列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'data_author',
+ 'id': '1138364388198715393',
+ 'name': '数据权限',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'AreaAdmin',
+ 'id': '1170945119300976642',
+ 'name': '区域管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'sys',
+ 'id': '1189107859077373954',
+ 'name': '基础权限管理',
+ 'open': true,
+ 'pcodes': '[0],',
+ 'pid': '0',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_listPage',
+ 'id': '1191975090689810434',
+ 'name': '区域列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_add',
+ 'id': '1191975312815955969',
+ 'name': '新增区域',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_update',
+ 'id': '1191975427559530497',
+ 'name': '修改区域',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_delete',
+ 'id': '1191975543687225346',
+ 'name': '区域删除',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': true,
+ 'code': '',
+ 'id': '0',
+ 'name': '顶级',
+ 'open': true,
+ 'pcodes': '',
+ 'pid': '',
+ 'value': ''
+ }
+]
+const list = [
+ {
+ 'isopen': '1',
+ 'code': 'system',
+ 'pcode': 'sys',
+ 'num': 4,
+ 'icon': 'icon-setting',
+ 'pid': '1189107859077373954',
+ 'isMenu': '是',
+ 'url': '/system',
+ 'tips': '',
+ 'pcodes': '[0],[sys],',
+ 'name': '系统管理',
+ 'statusName': '启用',
+ 'id': '105',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': true,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr',
+ 'pcode': 'system',
+ 'num': 1,
+ 'icon': 'icon-user',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/mgr',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '用户管理',
+ 'statusName': '启用',
+ 'id': '106',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_add',
+ 'pcode': 'mgr',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '添加用户',
+ 'statusName': '启用',
+ 'id': '107',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_edit',
+ 'pcode': 'mgr',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '修改用户',
+ 'statusName': '启用',
+ 'id': '108',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_delete',
+ 'pcode': 'mgr',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '删除用户',
+ 'statusName': '启用',
+ 'id': '109',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_reset',
+ 'pcode': 'mgr',
+ 'num': 4,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/reset',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '重置密码',
+ 'statusName': '启用',
+ 'id': '110',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_freeze',
+ 'pcode': 'mgr',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/freeze',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '冻结用户',
+ 'statusName': '启用',
+ 'id': '111',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_unfreeze',
+ 'pcode': 'mgr',
+ 'num': 6,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/unfreeze',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '解除冻结用户',
+ 'statusName': '启用',
+ 'id': '112',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_setRole',
+ 'pcode': 'mgr',
+ 'num': 7,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/roleAssign',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '分配角色',
+ 'statusName': '启用',
+ 'id': '113',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role',
+ 'pcode': 'system',
+ 'num': 2,
+ 'icon': 'permission',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/role',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '角色管理',
+ 'statusName': '启用',
+ 'id': '114',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_add',
+ 'pcode': 'role',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '添加角色',
+ 'statusName': '启用',
+ 'id': '115',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_edit',
+ 'pcode': 'role',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '修改角色',
+ 'statusName': '启用',
+ 'id': '116',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_remove',
+ 'pcode': 'role',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '删除角色',
+ 'statusName': '启用',
+ 'id': '117',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_setAuthority',
+ 'pcode': 'role',
+ 'num': 4,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/funcAuthor',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '配置权限',
+ 'statusName': '启用',
+ 'id': '118',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu',
+ 'pcode': 'system',
+ 'num': 4,
+ 'icon': 'function',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/resource',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '资源管理',
+ 'statusName': '启用',
+ 'id': '119',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_add',
+ 'pcode': 'menu',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '添加菜单',
+ 'statusName': '启用',
+ 'id': '120',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_edit',
+ 'pcode': 'menu',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '修改菜单',
+ 'statusName': '启用',
+ 'id': '121',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_remove',
+ 'pcode': 'menu',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '删除菜单',
+ 'statusName': '启用',
+ 'id': '122',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log',
+ 'pcode': 'system',
+ 'num': 6,
+ 'icon': 'log',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/log',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '日志管理',
+ 'statusName': '启用',
+ 'id': '128',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept',
+ 'pcode': 'system',
+ 'num': 3,
+ 'icon': 'dept2',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/dept',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '组织管理',
+ 'statusName': '启用',
+ 'id': '131',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict',
+ 'pcode': 'system',
+ 'num': 4,
+ 'icon': 'icon-dict',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/dict',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '字典管理',
+ 'statusName': '启用',
+ 'id': '132',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'loginLog',
+ 'pcode': 'system',
+ 'num': 6,
+ 'icon': 'task',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/loginLog',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '登录日志',
+ 'statusName': '启用',
+ 'id': '133',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log_clean',
+ 'pcode': 'log',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '128',
+ 'isMenu': '不是',
+ 'url': '/log/delLog',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'name': '清空日志',
+ 'statusName': '启用',
+ 'id': '134',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_add',
+ 'pcode': 'dept',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '添加部门',
+ 'statusName': '启用',
+ 'id': '135',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_update',
+ 'pcode': 'dept',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '修改部门',
+ 'statusName': '启用',
+ 'id': '136',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_delete',
+ 'pcode': 'dept',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '删除部门',
+ 'statusName': '启用',
+ 'id': '137',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_add',
+ 'pcode': 'dict',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '添加字典',
+ 'statusName': '启用',
+ 'id': '138',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_update',
+ 'pcode': 'dict',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '修改字典',
+ 'statusName': '启用',
+ 'id': '139',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_delete',
+ 'pcode': 'dict',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '删除字典',
+ 'statusName': '启用',
+ 'id': '140',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_list',
+ 'pcode': 'menu',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '菜单列表',
+ 'statusName': '启用',
+ 'id': '151',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_list',
+ 'pcode': 'dept',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '部门列表',
+ 'statusName': '启用',
+ 'id': '153',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_detail',
+ 'pcode': 'dept',
+ 'num': 6,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/detail',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '部门详情',
+ 'statusName': '启用',
+ 'id': '154',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_list',
+ 'pcode': 'dict',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '字典列表',
+ 'statusName': '启用',
+ 'id': '156',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_detail',
+ 'pcode': 'dict',
+ 'num': 6,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/detail',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '字典详情',
+ 'statusName': '启用',
+ 'id': '157',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log_list',
+ 'pcode': 'log',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '128',
+ 'isMenu': '不是',
+ 'url': '/log/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'name': '日志列表',
+ 'statusName': '启用',
+ 'id': '158',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log_detail',
+ 'pcode': 'log',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '128',
+ 'isMenu': '不是',
+ 'url': '/log/detail',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'name': '日志详情',
+ 'statusName': '启用',
+ 'id': '159',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'del_login_log',
+ 'pcode': 'loginLog',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '133',
+ 'isMenu': '不是',
+ 'url': '/loginLog/delLoginLog',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'name': '清空登录日志',
+ 'statusName': '启用',
+ 'id': '160',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'login_log_list',
+ 'pcode': 'loginLog',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '133',
+ 'isMenu': '不是',
+ 'url': '/loginLog/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'name': '登录日志列表',
+ 'statusName': '启用',
+ 'id': '161',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_list',
+ 'pcode': 'role',
+ 'num': 7,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '角色列表',
+ 'statusName': '启用',
+ 'id': '164',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_list',
+ 'pcode': 'mgr',
+ 'num': 10,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': ' /mgr/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '用户列表',
+ 'statusName': '启用',
+ 'id': '167',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'data_author',
+ 'pcode': 'role',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/dataAuthor',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '数据权限',
+ 'statusName': '启用',
+ 'id': '1138364388198715393',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'AreaAdmin',
+ 'pcode': 'system',
+ 'num': 0,
+ 'icon': 'icon-base',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/area',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '区域管理',
+ 'statusName': '启用',
+ 'id': '1170945119300976642',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'sys',
+ 'pcode': '0',
+ 'num': 0,
+ 'icon': 'icon-setting',
+ 'pid': '0',
+ 'isMenu': '不是',
+ 'url': '/sys',
+ 'tips': '',
+ 'pcodes': '[0],',
+ 'name': '基础权限管理',
+ 'statusName': '启用',
+ 'id': '1189107859077373954',
+ 'ismenu': '0',
+ 'levels': 1,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '02'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_listPage',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/listPage',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '区域列表',
+ 'statusName': '启用',
+ 'id': '1191975090689810434',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_add',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '新增区域',
+ 'statusName': '启用',
+ 'id': '1191975312815955969',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_update',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '修改区域',
+ 'statusName': '启用',
+ 'id': '1191975427559530497',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_delete',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '区域删除',
+ 'statusName': '启用',
+ 'id': '1191975543687225346',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/resource/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: list
+ }
+ }
+ }
+ },
+
+ // mock get all roles form server
+ {
+ url: '/resource/tree',
+ type: 'get',
+ response: _ => {
+ return {
+ 'code': 200,
+ 'message': 'success',
+ 'data': {
+ 'list': tree
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/code/resourceType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '菜单',
+ 'id': '55',
+ 'value': '03'
+ },
+ {
+ 'name': '按钮',
+ 'id': '56',
+ 'value': '04'
+ }
+ ]
+ }
+ }
+ },
+ {
+ url: '/resource/treeListByRoleId',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {
+ 'list': tree
+ }
+ }
+ }
+ },
+ {
+ url: 'resource/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/resource/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/resource/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/system/role.js b/mock/system/role.js
new file mode 100644
index 0000000..508ac84
--- /dev/null
+++ b/mock/system/role.js
@@ -0,0 +1,207 @@
+const tree = [
+ {
+ "id":1,
+ "pid":"0",
+ "name":"超级管理员"
+ }
+]
+const list = [
+ {
+ "deptName":"顶级",
+ "pName":"",
+ "num":1,
+ "name":"超级管理员",
+ "deptid":"0",
+ "pid":"0",
+ "id":1,
+ "version":1,
+ "tips":"administrator"
+ },
+ {
+ "deptName":"高压管网分公司",
+ "pName":"超级管理员",
+ "num":2,
+ "name":"高压管网分公司系统管理员",
+ "deptid":"24",
+ "pid":1,
+ "id":2,
+ "version":"",
+ "tips":"rqadmin"
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/role/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: list
+ }
+ }
+ }
+ },
+
+ // mock get all roles form server
+ {
+ url: '/role/tree',
+ type: 'get',
+ response: _ => {
+ return {
+ 'code': 200,
+ 'message': 'success',
+ 'data': {
+ 'list': tree
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/code/roleType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '菜单',
+ 'id': '55',
+ 'value': '03'
+ },
+ {
+ 'name': '按钮',
+ 'id': '56',
+ 'value': '04'
+ }
+ ]
+ }
+ }
+ },
+ {
+ url: '/role/treeByUserId',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {
+ 'list': [
+ {
+ "id":1,
+ "pid":"0",
+ "name":"超级管理员",
+ "open":true,
+ "checked":false
+ }
+ ]
+ }
+ }
+ }
+ },
+ {
+ url: '/role/treeByRoleId',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {
+ 'list': [
+ {
+ "id":"26",
+ "pid":"24",
+ "name":"运行二所",
+ "open":true,
+ "checked":true
+ }
+ ]
+ }
+ }
+ }
+ },
+ {
+ url: '/role/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/role/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/role/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/role/funcAuthor',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/role/dataAuthor',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/code/dataScopeType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '全部',
+ 'id': '55',
+ 'value': '03'
+ },
+ {
+ 'name': '本部门',
+ 'id': '56',
+ 'value': '04'
+ },
+ {
+ 'name': '自定义',
+ 'id': '57',
+ 'value': '04'
+ }
+ ]
+ }
+ }
+ }
+]
diff --git a/mock/system/user.js b/mock/system/user.js
new file mode 100644
index 0000000..5601db9
--- /dev/null
+++ b/mock/system/user.js
@@ -0,0 +1,860 @@
+// 用户详情
+const userinfo = {
+ 'account': 'admin',
+ 'avatar': 'girl.gif',
+ 'dataScope': [
+ '0',
+ '1236854643826184194',
+ '1236856061500936193',
+ '1236856816081391617',
+ '1236856889875976194',
+ '1236856952987668481',
+ '1236857009937928194',
+ '1236857134915604482',
+ '1236857274443321346',
+ '1236857346400800770',
+ '1236857428776931330',
+ '1236857492744261633',
+ '1236857661695021057',
+ '1236857767731220481',
+ '1236857826057211905',
+ '1236857873113108481',
+ '1236857966566395906',
+ '1236858049731055618',
+ '1236858125752815618',
+ '1236858179561541633',
+ '1236858248830472194',
+ '1236858330946555905',
+ '1236858380556783617',
+ '1236858422894088194',
+ '1236858475780067330',
+ '1236858517333037058',
+ '1236858579396153346',
+ '1236858642176495618',
+ '1236858704961032194',
+ '1236858748544045057',
+ '1236858806672904193',
+ '1236858863296008193',
+ '1236858908317667330'
+ ],
+ 'deptId': '0',
+ 'deptName': '顶级',
+ 'devices': [],
+ 'id': '1',
+ 'ipAddr': '124.64.16.144',
+ 'name': '超超级管理员',
+ 'phone': '18200000000',
+ 'roleList': [
+ '1'
+ ],
+ 'roleNames': [
+ '超级管理员'
+ ],
+ 'roleTips': [
+ 'administrator'
+ ],
+ 'scopeType': '4',
+ 'targetId': '',
+ 'targetName': '',
+ 'tenantId': ''
+}
+const list = [
+ {
+ 'birthday': '2017-05-05 00:00:00',
+ 'deptName': '顶级',
+ 'createtime': '2016-01-29 08:49:53',
+ 'roleid': '1',
+ 'sex': '2',
+ 'deptid': '0',
+ 'avatar': 'girl.gif',
+ 'version': 25,
+ 'phone': '18200000000',
+ 'sexName': '女',
+ 'name': '超级管理员',
+ 'roleName': '超级管理员',
+ 'statusName': '启用',
+ 'id': '1',
+ 'account': 'admin',
+ 'email': 'sn93@qq.com',
+ 'status': '1'
+ }
+]
+// 权限列表
+const permisson = {
+ 'menus': [
+ {
+ 'children': '',
+ 'code': 'sys',
+ 'icon': 'icon-setting',
+ 'id': '1189107859077373954',
+ 'ismenu': '0',
+ 'levels': 1,
+ 'name': '基础权限管理',
+ 'num': 0,
+ 'parentId': '0',
+ 'resourceType': '02',
+ 'url': '/sys'
+ },
+ {
+ 'children': '',
+ 'code': 'data_author',
+ 'icon': '',
+ 'id': '1138364388198715393',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '数据权限',
+ 'num': 0,
+ 'parentId': '114',
+ 'resourceType': '0',
+ 'url': '/role/dataAuthor'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr',
+ 'icon': 'icon-user',
+ 'id': '106',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '用户管理',
+ 'num': 1,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/mgr'
+ },
+ {
+ 'children': '',
+ 'code': 'role',
+ 'icon': 'permission',
+ 'id': '114',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '角色管理',
+ 'num': 2,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/role'
+ },
+ {
+ 'children': '',
+ 'code': 'role_edit',
+ 'icon': '',
+ 'id': '116',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '修改角色',
+ 'num': 2,
+ 'parentId': '114',
+ 'resourceType': '0',
+ 'url': '/role/update'
+ },
+ {
+ 'children': '',
+ 'code': 'role_remove',
+ 'icon': '',
+ 'id': '117',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '删除角色',
+ 'num': 3,
+ 'parentId': '114',
+ 'resourceType': '0',
+ 'url': '/role/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'dept',
+ 'icon': 'dept2',
+ 'id': '131',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '组织管理',
+ 'num': 3,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/dept'
+ },
+ {
+ 'children': '',
+ 'code': 'menu',
+ 'icon': 'function',
+ 'id': '119',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '资源管理',
+ 'num': 4,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/resource'
+ },
+ {
+ 'children': '',
+ 'code': 'role_setAuthority',
+ 'icon': '',
+ 'id': '118',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '配置权限',
+ 'num': 4,
+ 'parentId': '114',
+ 'resourceType': '0',
+ 'url': '/role/funcAuthor'
+ },
+ {
+ 'children': '',
+ 'code': 'system',
+ 'icon': 'icon-setting',
+ 'id': '105',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '系统管理',
+ 'num': 4,
+ 'parentId': '1189107859077373954',
+ 'resourceType': '03',
+ 'url': '/system'
+ },
+ {
+ 'children': '',
+ 'code': 'menu_list',
+ 'icon': '',
+ 'id': '151',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '菜单列表',
+ 'num': 5,
+ 'parentId': '119',
+ 'resourceType': '0',
+ 'url': '/resource/list'
+ },
+ {
+ 'children': '',
+ 'code': 'loginLog',
+ 'icon': 'task',
+ 'id': '133',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '登录日志',
+ 'num': 6,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/loginLog'
+ },
+ {
+ 'children': '',
+ 'code': 'log',
+ 'icon': 'log',
+ 'id': '128',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '日志管理',
+ 'num': 6,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/log'
+ },
+ {
+ 'children': '',
+ 'code': 'AreaAdmin',
+ 'icon': 'icon-base',
+ 'id': '1170945119300976642',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'name': '区域管理',
+ 'num': 0,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/area'
+ },
+ {
+ 'children': '',
+ 'code': 'visitor_permission',
+ 'icon': '',
+ 'id': '1202403877222735874',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'name': '访客授权列表',
+ 'num': 0,
+ 'parentId': '1202403125913837569',
+ 'resourceType': '03',
+ 'url': '/acsPermission/listVisitorPerm'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_delete',
+ 'icon': '',
+ 'id': '137',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '删除部门',
+ 'num': 1,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'role_add',
+ 'icon': '',
+ 'id': '115',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加角色',
+ 'num': 1,
+ 'parentId': '114',
+ 'resourceType': '04',
+ 'url': '/role/add'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_add',
+ 'icon': '',
+ 'id': '138',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加字典',
+ 'num': 1,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/add'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_delete',
+ 'icon': '',
+ 'id': '140',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '删除字典',
+ 'num': 1,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_add',
+ 'icon': '',
+ 'id': '135',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加部门',
+ 'num': 1,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/add'
+ },
+ {
+ 'children': '',
+ 'code': 'del_login_log',
+ 'icon': '',
+ 'id': '160',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '清空登录日志',
+ 'num': 1,
+ 'parentId': '133',
+ 'resourceType': '04',
+ 'url': '/loginLog/delLoginLog'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_update',
+ 'icon': '',
+ 'id': '139',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '修改字典',
+ 'num': 1,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/update'
+ },
+ {
+ 'children': '',
+ 'code': 'menu_add',
+ 'icon': '',
+ 'id': '120',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加菜单',
+ 'num': 1,
+ 'parentId': '119',
+ 'resourceType': '04',
+ 'url': '/resource/add'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_add',
+ 'icon': '',
+ 'id': '107',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加用户',
+ 'num': 1,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/add'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_update',
+ 'icon': '',
+ 'id': '136',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '修改部门',
+ 'num': 1,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/update'
+ },
+ {
+ 'children': '',
+ 'code': 'menu_edit',
+ 'icon': '',
+ 'id': '121',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '修改菜单',
+ 'num': 2,
+ 'parentId': '119',
+ 'resourceType': '04',
+ 'url': '/resource/update'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_edit',
+ 'icon': '',
+ 'id': '108',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '修改用户',
+ 'num': 2,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/update'
+ },
+ {
+ 'children': '',
+ 'code': 'log_list',
+ 'icon': '',
+ 'id': '158',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '日志列表',
+ 'num': 2,
+ 'parentId': '128',
+ 'resourceType': '04',
+ 'url': '/log/list'
+ },
+ {
+ 'children': '',
+ 'code': 'login_log_list',
+ 'icon': '',
+ 'id': '161',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '登录日志列表',
+ 'num': 2,
+ 'parentId': '133',
+ 'resourceType': '04',
+ 'url': '/loginLog/list'
+ },
+ {
+ 'children': '',
+ 'code': 'log_clean',
+ 'icon': '',
+ 'id': '134',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '清空日志',
+ 'num': 3,
+ 'parentId': '128',
+ 'resourceType': '04',
+ 'url': '/log/delLog'
+ },
+ {
+ 'children': '',
+ 'code': 'log_detail',
+ 'icon': '',
+ 'id': '159',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '日志详情',
+ 'num': 3,
+ 'parentId': '128',
+ 'resourceType': '04',
+ 'url': '/log/detail'
+ },
+ {
+ 'children': '',
+ 'code': 'menu_remove',
+ 'icon': '',
+ 'id': '122',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '删除菜单',
+ 'num': 3,
+ 'parentId': '119',
+ 'resourceType': '04',
+ 'url': '/resource/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_delete',
+ 'icon': '',
+ 'id': '109',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '删除用户',
+ 'num': 3,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_reset',
+ 'icon': '',
+ 'id': '110',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '重置密码',
+ 'num': 4,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/reset'
+ },
+ {
+ 'children': '',
+ 'code': 'dict',
+ 'icon': 'icon-dict',
+ 'id': '132',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'name': '字典管理',
+ 'num': 4,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/user'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_list',
+ 'icon': '',
+ 'id': '153',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '部门列表',
+ 'num': 5,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/list'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_list',
+ 'icon': '',
+ 'id': '156',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '字典列表',
+ 'num': 5,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/list'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_freeze',
+ 'icon': '',
+ 'id': '111',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '冻结用户',
+ 'num': 5,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/freeze'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_detail',
+ 'icon': '',
+ 'id': '154',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '部门详情',
+ 'num': 6,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/detail'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_detail',
+ 'icon': '',
+ 'id': '157',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '字典详情',
+ 'num': 6,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/detail'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_unfreeze',
+ 'icon': '',
+ 'id': '112',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '解除冻结用户',
+ 'num': 6,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/unfreeze'
+ },
+ {
+ 'children': '',
+ 'code': 'role_list',
+ 'icon': '',
+ 'id': '164',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '角色列表',
+ 'num': 7,
+ 'parentId': '114',
+ 'resourceType': '04',
+ 'url': '/role/list'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_setRole',
+ 'icon': '',
+ 'id': '113',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '分配角色',
+ 'num': 7,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/roleAssign'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_list',
+ 'icon': '',
+ 'id': '167',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '用户列表',
+ 'num': 10,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': ' /mgr/list'
+ },
+ {
+ 'children': '',
+ 'code': 'area_add',
+ 'icon': '',
+ 'id': '1191975312815955969',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'name': '新增区域',
+ 'num': 0,
+ 'parentId': '1170945119300976642',
+ 'resourceType': '04',
+ 'url': '/area/add'
+ },
+ {
+ 'children': '',
+ 'code': 'area_delete',
+ 'icon': '',
+ 'id': '1191975543687225346',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'name': '区域删除',
+ 'num': 0,
+ 'parentId': '1170945119300976642',
+ 'resourceType': '04',
+ 'url': '/area/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'area_listPage',
+ 'icon': '',
+ 'id': '1191975090689810434',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'name': '区域列表',
+ 'num': 0,
+ 'parentId': '1170945119300976642',
+ 'resourceType': '04',
+ 'url': '/area/listPage'
+ },
+ {
+ 'children': '',
+ 'code': 'area_update',
+ 'icon': '',
+ 'id': '1191975427559530497',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'name': '修改区域',
+ 'num': 0,
+ 'parentId': '1170945119300976642',
+ 'resourceType': '04',
+ 'url': '/area/update'
+ }
+ ]
+}
+module.exports = [
+ {
+ url: '/user/login',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ success: true,
+ data: {
+ kaptcha: '',
+ token: '02deb42b-5298-431a-b690-d04573c18281'
+
+ }
+ }
+ }
+ },
+ {
+ url: '/user/info',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ success: true,
+ data: userinfo
+ }
+ }
+ },
+ {
+ url: '/user/permission',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ success: true,
+ data: permisson
+ }
+ }
+ },
+ {
+ url: '/user/logout',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ success: true
+ }
+ }
+ },
+ {
+ url: '/mgr/list',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: list,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/mgr/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/freeze',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/unfreeze',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/reset',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/roleAssign',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/changePwd',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/table.js b/mock/table.js
new file mode 100644
index 0000000..d3963f4
--- /dev/null
+++ b/mock/table.js
@@ -0,0 +1,20 @@
+import Mock from 'mockjs'
+
+module.exports = {
+ list: () => {
+ const items = Mock.mock({
+ 'items|30': [{
+ id: '@id',
+ title: '@sentence(10, 20)',
+ 'status|1': ['published', 'draft', 'deleted'],
+ author: 'name',
+ display_time: '@datetime',
+ pageviews: '@integer(300, 5000)'
+ }]
+ })
+ return {
+ code: 20000,
+ data: items
+ }
+ }
+}
diff --git a/mock/user.js b/mock/user.js
new file mode 100644
index 0000000..6edeeff
--- /dev/null
+++ b/mock/user.js
@@ -0,0 +1,70 @@
+import { param2Obj } from './utils'
+
+const tokens = {
+ admin: {
+ token: 'admin-token'
+ },
+ editor: {
+ token: 'editor-token'
+ }
+}
+
+const users = {
+ 'admin-token': {
+ roles: ['admin'],
+ btns: ['kaptcha'],
+ introduction: 'I am a 超级管理员',
+ avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif',
+ name: 'mock Admin'
+ },
+ 'editor-token': {
+ roles: ['editor'],
+ btns: [],
+ introduction: 'I am an editor',
+ avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif',
+ name: 'Normal Editor'
+ }
+}
+
+module.exports = {
+ login: res => {
+ const { username } = JSON.parse(res.body)
+ const data = tokens[username]
+
+ if (data) {
+ return {
+ code: 200,
+ success: true,
+ data
+ }
+ }
+ return {
+ code: 60204,
+ success: false,
+ message: '账号或密码错误.'
+ }
+ },
+ getInfo: res => {
+ const { token } = param2Obj(res.url)
+ const info = users[token]
+
+ if (info) {
+ return {
+ code: 200,
+ success: true,
+ data: info
+ }
+ }
+ return {
+ code: 50008,
+ success: false,
+ message: '登录失败,无法获取用户信息.'
+ }
+ },
+ logout: () => {
+ return {
+ code: 200,
+ success: true
+ }
+ }
+}
diff --git a/mock/utils.js b/mock/utils.js
new file mode 100644
index 0000000..8fc4926
--- /dev/null
+++ b/mock/utils.js
@@ -0,0 +1,51 @@
+const Mock = require('mockjs')
+
+const NameList = []
+const count = 100
+
+for (let i = 0; i < count; i++) {
+ NameList.push(Mock.mock({
+ name: '@first'
+ }))
+}
+NameList.push({ name: 'mock-Pan' })
+
+module.exports = [
+ // 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/package-lock.json b/package-lock.json
index b780dad..63c2f82 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -305,6 +305,19 @@
"@babel/helper-validator-identifier": "^7.14.5",
"chalk": "^2.0.0",
"js-tokens": "^4.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"@babel/parser": {
@@ -1273,6 +1286,19 @@
"@jest/source-map": "^24.9.0",
"chalk": "^2.0.1",
"slash": "^2.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"@jest/core": {
@@ -1317,6 +1343,17 @@
"integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
"dev": true
},
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"strip-ansi": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
@@ -1380,6 +1417,17 @@
"string-length": "^2.0.0"
},
"dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -1454,6 +1502,17 @@
"write-file-atomic": "2.4.1"
},
"dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -1507,6 +1566,17 @@
"integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
"dev": true
},
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"is-fullwidth-code-point": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
@@ -2328,6 +2398,19 @@
"request": "^2.88.2",
"semver": "^6.1.0",
"strip-ansi": "^6.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"@vue/component-compiler-utils": {
@@ -3082,6 +3165,19 @@
"babel-preset-jest": "^24.9.0",
"chalk": "^2.4.2",
"slash": "^2.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"babel-loader": {
@@ -3940,14 +4036,54 @@
"dev": true
},
"chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
}
},
"chardet": {
@@ -4364,6 +4500,19 @@
"@types/q": "^1.5.1",
"chalk": "^2.4.1",
"q": "^1.1.2"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"code-point-at": {
@@ -5231,6 +5380,17 @@
"integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=",
"dev": true
},
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"commander": {
"version": "2.15.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
@@ -5823,6 +5983,12 @@
}
}
},
+ "domready": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/domready/-/domready-1.0.8.tgz",
+ "integrity": "sha1-kfJS5Ze2Wvd+dFriTdAYXV4m1Yw=",
+ "dev": true
+ },
"domutils": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
@@ -6195,6 +6361,17 @@
"v8-compile-cache": "^2.0.3"
},
"dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"eslint-scope": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
@@ -8218,6 +8395,12 @@
"integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
"dev": true
},
+ "image-size": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
+ "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=",
+ "dev": true
+ },
"import-cwd": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz",
@@ -9144,6 +9327,19 @@
"prompts": "^2.0.1",
"realpath-native": "^1.1.0",
"yargs": "^13.3.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
}
}
@@ -9182,6 +9378,19 @@
"micromatch": "^3.1.10",
"pretty-format": "^24.9.0",
"realpath-native": "^1.1.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-diff": {
@@ -9194,6 +9403,19 @@
"diff-sequences": "^24.9.0",
"jest-get-type": "^24.9.0",
"pretty-format": "^24.9.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-docblock": {
@@ -9216,6 +9438,19 @@
"jest-get-type": "^24.9.0",
"jest-util": "^24.9.0",
"pretty-format": "^24.9.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-environment-jsdom": {
@@ -9437,6 +9672,19 @@
"jest-util": "^24.9.0",
"pretty-format": "^24.9.0",
"throat": "^4.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-leak-detector": {
@@ -9459,6 +9707,19 @@
"jest-diff": "^24.9.0",
"jest-get-type": "^24.9.0",
"pretty-format": "^24.9.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-message-util": {
@@ -9475,6 +9736,19 @@
"micromatch": "^3.1.10",
"slash": "^2.0.0",
"stack-utils": "^1.0.1"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-mock": {
@@ -9509,6 +9783,19 @@
"chalk": "^2.0.1",
"jest-pnp-resolver": "^1.2.1",
"realpath-native": "^1.1.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-resolve-dependencies": {
@@ -9547,6 +9834,19 @@
"jest-worker": "^24.6.0",
"source-map-support": "^0.5.6",
"throat": "^4.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-runtime": {
@@ -9578,6 +9878,19 @@
"slash": "^2.0.0",
"strip-bom": "^3.0.0",
"yargs": "^13.3.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-serializer": {
@@ -9614,6 +9927,19 @@
"natural-compare": "^1.4.0",
"pretty-format": "^24.9.0",
"semver": "^6.2.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-transform-stub": {
@@ -9642,6 +9968,17 @@
"source-map": "^0.6.0"
},
"dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"ci-info": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
@@ -9684,6 +10021,17 @@
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
"dev": true
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
}
}
},
@@ -9711,6 +10059,17 @@
"type-fest": "^0.21.3"
}
},
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"slash": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
@@ -9764,6 +10123,17 @@
"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
"integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
"dev": true
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
}
}
},
@@ -9788,6 +10158,12 @@
}
}
},
+ "js-base64": {
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz",
+ "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==",
+ "dev": true
+ },
"js-beautify": {
"version": "1.14.0",
"resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.14.0.tgz",
@@ -9993,6 +10369,19 @@
"requires": {
"chalk": "^2.3.0",
"shell-quote": "^1.6.1"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"launch-editor-middleware": {
@@ -10499,6 +10888,19 @@
"dev": true,
"requires": {
"chalk": "^2.0.1"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"log-update": {
@@ -10646,6 +11048,23 @@
"integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
"dev": true
},
+ "merge-options": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-1.0.1.tgz",
+ "integrity": "sha512-iuPV41VWKWBIOpBsjoxjDZw8/GbSfZ2mk7N1453bwMrfzdrIk7EzBd+8UVR6rkw67th7xnk9Dytl3J+lHPdxvg==",
+ "dev": true,
+ "requires": {
+ "is-plain-obj": "^1.1"
+ },
+ "dependencies": {
+ "is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
+ "dev": true
+ }
+ }
+ },
"merge-source-map": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz",
@@ -10846,6 +11265,12 @@
"through2": "^2.0.0"
}
},
+ "mitt": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.1.2.tgz",
+ "integrity": "sha1-OA5hSA1qYVtmDwertg1R4KTkvtY=",
+ "dev": true
+ },
"mixin-deep": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
@@ -10876,6 +11301,12 @@
"minimist": "^1.2.5"
}
},
+ "mock": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/mock/-/mock-0.1.1.tgz",
+ "integrity": "sha1-5+NYnH5rM3bWn1o+RwtWYEQXxjM=",
+ "dev": true
+ },
"mockjs": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/mockjs/-/mockjs-1.1.0.tgz",
@@ -10943,6 +11374,12 @@
"thenify-all": "^1.0.0"
}
},
+ "nanoid": {
+ "version": "3.1.25",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz",
+ "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==",
+ "dev": true
+ },
"nanomatch": {
"version": "1.2.13",
"resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
@@ -11426,6 +11863,17 @@
"wcwidth": "^1.0.1"
},
"dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"strip-ansi": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
@@ -11877,6 +12325,28 @@
"supports-color": "^6.1.0"
},
"dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -12370,6 +12840,28 @@
}
}
},
+ "postcss-prefix-selector": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/postcss-prefix-selector/-/postcss-prefix-selector-1.10.0.tgz",
+ "integrity": "sha512-VcC/zCXVfFdGyn+Fo9+mxnxBu+hT61uMJJBdfWBbIeDrcE6g8s+26SUPTMpz8kc9wfoLpJGAZZ4QwbVqwxpNRA==",
+ "dev": true,
+ "requires": {
+ "postcss": "^8.2.10"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "8.3.6",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.6.tgz",
+ "integrity": "sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A==",
+ "dev": true,
+ "requires": {
+ "colorette": "^1.2.2",
+ "nanoid": "^3.1.23",
+ "source-map-js": "^0.6.2"
+ }
+ }
+ }
+ },
"postcss-reduce-initial": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz",
@@ -12448,6 +12940,104 @@
"integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
"dev": true
},
+ "posthtml": {
+ "version": "0.9.2",
+ "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.9.2.tgz",
+ "integrity": "sha1-9MBtufZ7Yf0XxOJW5+PZUVv3Jv0=",
+ "dev": true,
+ "requires": {
+ "posthtml-parser": "^0.2.0",
+ "posthtml-render": "^1.0.5"
+ }
+ },
+ "posthtml-parser": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.2.1.tgz",
+ "integrity": "sha1-NdUw3jhnQMK6JP8usvrznM3ycd0=",
+ "dev": true,
+ "requires": {
+ "htmlparser2": "^3.8.3",
+ "isobject": "^2.1.0"
+ },
+ "dependencies": {
+ "domhandler": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
+ "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1"
+ }
+ },
+ "entities": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
+ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
+ "dev": true
+ },
+ "htmlparser2": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
+ "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^1.3.1",
+ "domhandler": "^2.3.0",
+ "domutils": "^1.5.1",
+ "entities": "^1.1.1",
+ "inherits": "^2.0.1",
+ "readable-stream": "^3.1.1"
+ }
+ },
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ },
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ }
+ }
+ },
+ "posthtml-rename-id": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/posthtml-rename-id/-/posthtml-rename-id-1.0.12.tgz",
+ "integrity": "sha512-UKXf9OF/no8WZo9edRzvuMenb6AD5hDLzIepJW+a4oJT+T/Lx7vfMYWT4aWlGNQh0WMhnUx1ipN9OkZ9q+ddEw==",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "1.0.5"
+ }
+ },
+ "posthtml-render": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-1.4.0.tgz",
+ "integrity": "sha512-W1779iVHGfq0Fvh2PROhCe2QhB8mEErgqzo1wpIt36tCgChafP+hbXIhLDOM8ePJrZcFs0vkNEtdibEWVqChqw==",
+ "dev": true
+ },
+ "posthtml-svg-mode": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/posthtml-svg-mode/-/posthtml-svg-mode-1.0.3.tgz",
+ "integrity": "sha512-hEqw9NHZ9YgJ2/0G7CECOeuLQKZi8HjWLkBaSVtOWjygQ9ZD8P7tqeowYs7WrFdKsWEKG7o+IlsPY8jrr0CJpQ==",
+ "dev": true,
+ "requires": {
+ "merge-options": "1.0.1",
+ "posthtml": "^0.9.2",
+ "posthtml-parser": "^0.2.1",
+ "posthtml-render": "^1.0.6"
+ }
+ },
"prelude-ls": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
@@ -13853,6 +14443,12 @@
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
"dev": true
},
+ "source-map-js": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz",
+ "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==",
+ "dev": true
+ },
"source-map-resolve": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
@@ -14280,6 +14876,245 @@
"has-flag": "^3.0.0"
}
},
+ "svg-baker": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/svg-baker/-/svg-baker-1.7.0.tgz",
+ "integrity": "sha512-nibslMbkXOIkqKVrfcncwha45f97fGuAOn1G99YwnwTj8kF9YiM6XexPcUso97NxOm6GsP0SIvYVIosBis1xLg==",
+ "dev": true,
+ "requires": {
+ "bluebird": "^3.5.0",
+ "clone": "^2.1.1",
+ "he": "^1.1.1",
+ "image-size": "^0.5.1",
+ "loader-utils": "^1.1.0",
+ "merge-options": "1.0.1",
+ "micromatch": "3.1.0",
+ "postcss": "^5.2.17",
+ "postcss-prefix-selector": "^1.6.0",
+ "posthtml-rename-id": "^1.0",
+ "posthtml-svg-mode": "^1.0.3",
+ "query-string": "^4.3.2",
+ "traverse": "^0.6.6"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+ "dev": true
+ },
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
+ }
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.0.tgz",
+ "integrity": "sha512-3StSelAE+hnRvMs8IdVW7Uhk8CVed5tp+kLLGlBP6WiRAXS21GPGu/Nat4WNPXj2Eoc24B02SaeoyozPMfj0/g==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.2.2",
+ "define-property": "^1.0.0",
+ "extend-shallow": "^2.0.1",
+ "extglob": "^2.0.2",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^5.0.2",
+ "nanomatch": "^1.2.1",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ }
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "svg-baker-runtime": {
+ "version": "1.4.7",
+ "resolved": "https://registry.npmjs.org/svg-baker-runtime/-/svg-baker-runtime-1.4.7.tgz",
+ "integrity": "sha512-Zorfwwj5+lWjk/oxwSMsRdS2sPQQdTmmsvaSpzU+i9ZWi3zugHLt6VckWfnswphQP0LmOel3nggpF5nETbt6xw==",
+ "dev": true,
+ "requires": {
+ "deepmerge": "1.3.2",
+ "mitt": "1.1.2",
+ "svg-baker": "^1.7.0"
+ },
+ "dependencies": {
+ "deepmerge": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.3.2.tgz",
+ "integrity": "sha1-FmNpFinU2/42T6EqKk8KqGqjoFA=",
+ "dev": true
+ }
+ }
+ },
+ "svg-sprite-loader": {
+ "version": "6.0.9",
+ "resolved": "https://registry.npmjs.org/svg-sprite-loader/-/svg-sprite-loader-6.0.9.tgz",
+ "integrity": "sha512-V/F3iI1J/xWeO0cRXkEFvhujvBQ3deAPFlhip+AW00Hs+9gighu619mblucIWdRPmDMfcSWJD/ZuXf6HldIskw==",
+ "dev": true,
+ "requires": {
+ "bluebird": "^3.5.0",
+ "deepmerge": "1.3.2",
+ "domready": "1.0.8",
+ "escape-string-regexp": "1.0.5",
+ "loader-utils": "^1.1.0",
+ "svg-baker": "^1.5.0",
+ "svg-baker-runtime": "^1.4.7",
+ "url-slug": "2.0.0"
+ },
+ "dependencies": {
+ "deepmerge": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.3.2.tgz",
+ "integrity": "sha1-FmNpFinU2/42T6EqKk8KqGqjoFA=",
+ "dev": true
+ }
+ }
+ },
"svg-tags": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz",
@@ -14307,6 +15142,17 @@
"util.promisify": "~1.0.0"
},
"dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"util.promisify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz",
@@ -14727,6 +15573,12 @@
"punycode": "^2.1.0"
}
},
+ "traverse": {
+ "version": "0.6.6",
+ "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz",
+ "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=",
+ "dev": true
+ },
"tryer": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz",
@@ -14925,6 +15777,12 @@
"integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==",
"dev": true
},
+ "unidecode": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/unidecode/-/unidecode-0.1.8.tgz",
+ "integrity": "sha1-77swFTi8RSRqmsjFWdcvAVMFBT4=",
+ "dev": true
+ },
"union-value": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
@@ -15097,6 +15955,15 @@
"requires-port": "^1.0.0"
}
},
+ "url-slug": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/url-slug/-/url-slug-2.0.0.tgz",
+ "integrity": "sha1-p4nVrtSZXA2VrzM3etHVxo1NcCc=",
+ "dev": true,
+ "requires": {
+ "unidecode": "0.1.8"
+ }
+ },
"use": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
@@ -15263,6 +16130,19 @@
"source-map": "^0.5.6",
"tsconfig": "^7.0.0",
"vue-template-es2015-compiler": "^1.6.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"vue-loader": {
@@ -15671,6 +16551,17 @@
"integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
"dev": true
},
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
diff --git a/package.json b/package.json
index 25b0d78..defa84a 100644
--- a/package.json
+++ b/package.json
@@ -34,14 +34,19 @@
"@vue/eslint-config-standard": "^5.1.2",
"@vue/test-utils": "^1.0.3",
"babel-eslint": "^10.1.0",
+ "babel-plugin-dynamic-import-node": "^2.3.3",
+ "chalk": "^4.1.2",
+ "chokidar": "^3.5.2",
"eslint": "^6.7.2",
"eslint-plugin-import": "^2.20.2",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-promise": "^4.2.1",
"eslint-plugin-standard": "^4.0.0",
"eslint-plugin-vue": "^6.2.2",
+ "mock": "^0.1.1",
"sass": "^1.26.5",
"sass-loader": "^8.0.2",
+ "svg-sprite-loader": "^6.0.9",
"vue-template-compiler": "^2.6.11"
}
}
diff --git a/mock/config.js b/mock/config.js
new file mode 100644
index 0000000..7d111e0
--- /dev/null
+++ b/mock/config.js
@@ -0,0 +1,15 @@
+// import { param2Obj } from './utils'
+
+const baseConfig = {
+ kaptcha: true
+}
+
+export default {
+ baseconfig: res => {
+ return {
+ code: 200,
+ success: true,
+ data: baseConfig
+ }
+ }
+}
diff --git a/mock/index.js b/mock/index.js
new file mode 100644
index 0000000..d2713dd
--- /dev/null
+++ b/mock/index.js
@@ -0,0 +1,70 @@
+const Mock = require('mockjs')
+const { param2Obj } = require('./utils')
+
+const user = require('./system/user')
+const resource = require('./system/resource')
+const dict = require('./system/dict')
+const dept = require('./system/dept')
+const area = require('./system/area')
+const role = require('./system/role')
+const log = require('./system/log')
+const config = require('./system/config')
+const search = require('./remote-search')
+
+const mocks = [
+ ...user,
+ ...resource,
+ ...dict,
+ ...area,
+ ...dept,
+ ...role,
+ ...log,
+ ...config,
+ ...search
+]
+
+// for front mock
+// please use it cautiously, it will redefine XMLHttpRequest,
+// which will cause many of your third-party libraries to be invalidated(like progress event).
+function mockXHR() {
+ // mock patch
+ // https://github.com/nuysoft/Mock/issues/300
+ Mock.XHR.prototype.proxy_send = Mock.XHR.prototype.send
+ Mock.XHR.prototype.send = function() {
+ if (this.custom.xhr) {
+ this.custom.xhr.withCredentials = this.withCredentials || false
+
+ if (this.responseType) {
+ this.custom.xhr.responseType = this.responseType
+ }
+ }
+ this.proxy_send(...arguments)
+ }
+
+ function XHR2ExpressReqWrap(respond) {
+ return function(options) {
+ let result = null
+ if (respond instanceof Function) {
+ const { body, type, url } = options
+ // https://expressjs.com/en/4x/api.html#req
+ result = respond({
+ method: type,
+ body: JSON.parse(body),
+ query: param2Obj(url)
+ })
+ } else {
+ result = respond
+ }
+ return Mock.mock(result)
+ }
+ }
+
+ for (const i of mocks) {
+ Mock.mock(new RegExp(i.url), i.type || 'get', XHR2ExpressReqWrap(i.response))
+ }
+}
+
+module.exports = {
+ mocks,
+ mockXHR
+}
diff --git a/mock/mock-server.js b/mock/mock-server.js
new file mode 100644
index 0000000..8941ec0
--- /dev/null
+++ b/mock/mock-server.js
@@ -0,0 +1,81 @@
+const chokidar = require('chokidar')
+const bodyParser = require('body-parser')
+const chalk = require('chalk')
+const path = require('path')
+const Mock = require('mockjs')
+
+const mockDir = path.join(process.cwd(), 'mock')
+
+function registerRoutes(app) {
+ let mockLastIndex
+ const { mocks } = require('./index.js')
+ const mocksForServer = mocks.map(route => {
+ return responseFake(route.url, route.type, route.response)
+ })
+ for (const mock of mocksForServer) {
+ app[mock.type](mock.url, mock.response)
+ mockLastIndex = app._router.stack.length
+ }
+ const mockRoutesLength = Object.keys(mocksForServer).length
+ return {
+ mockRoutesLength: mockRoutesLength,
+ mockStartIndex: mockLastIndex - mockRoutesLength
+ }
+}
+
+function unregisterRoutes() {
+ Object.keys(require.cache).forEach(i => {
+ if (i.includes(mockDir)) {
+ delete require.cache[require.resolve(i)]
+ }
+ })
+}
+
+// for mock server
+const responseFake = (url, type, respond) => {
+ return {
+ url: new RegExp(`${process.env.VUE_APP_BASE_API}${url}`),
+ type: type || 'get',
+ response(req, res) {
+ console.log('request invoke:' + req.path)
+ res.json(Mock.mock(respond instanceof Function ? respond(req, res) : respond))
+ }
+ }
+}
+
+module.exports = app => {
+ // parse app.body
+ // https://expressjs.com/en/4x/api.html#req.body
+ app.use(bodyParser.json())
+ app.use(bodyParser.urlencoded({
+ extended: true
+ }))
+
+ const mockRoutes = registerRoutes(app)
+ var mockRoutesLength = mockRoutes.mockRoutesLength
+ var mockStartIndex = mockRoutes.mockStartIndex
+
+ // watch files, hot reload mock server
+ chokidar.watch(mockDir, {
+ ignored: /mock-server/,
+ ignoreInitial: true
+ }).on('all', (event, path) => {
+ if (event === 'change' || event === 'add') {
+ try {
+ // remove mock routes stack
+ app._router.stack.splice(mockStartIndex, mockRoutesLength)
+
+ // clear routes cache
+ unregisterRoutes()
+
+ const mockRoutes = registerRoutes(app)
+ mockRoutesLength = mockRoutes.mockRoutesLength
+ mockStartIndex = mockRoutes.mockStartIndex
+
+ console.log(chalk.magentaBright(`\n > Mock Server hot reload success! changed ${path}`))
+ } catch (error) {
+ console.log(chalk.redBright(error))
+ }
+ }
+ })
+}
diff --git a/mock/remote-search.js b/mock/remote-search.js
new file mode 100644
index 0000000..b5164b1
--- /dev/null
+++ b/mock/remote-search.js
@@ -0,0 +1,51 @@
+const Mock = require('mockjs')
+
+const NameList = []
+const count = 100
+
+for (let i = 0; i < count; i++) {
+ NameList.push(Mock.mock({
+ name: '@first'
+ }))
+}
+NameList.push({ name: 'mock-Pan' })
+
+module.exports = [
+ // username search
+ {
+ url: '/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: '/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/mock/system/area.js b/mock/system/area.js
new file mode 100644
index 0000000..1586661
--- /dev/null
+++ b/mock/system/area.js
@@ -0,0 +1,130 @@
+const list = [
+ {
+ 'id': '11010100102',
+ 'lat': '',
+ 'level': 5,
+ 'levelName': '社区',
+ 'lng': '',
+ 'name': '测试社区3',
+ 'num': 1,
+ 'pid': '110101001',
+ 'pids': '[0],[110000],[110100],[110101],[110101001],',
+ 'simplename': '测试社区2'
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/area/listPage',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: list,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/area/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: [
+ {
+ 'id': '110000',
+ 'pid': '0',
+ 'name': '北京市',
+ 'level': 1,
+ 'pids': [0],
+ 'levelName': '省级',
+ 'simplename': '北京'
+ }
+ ]
+ }
+ }
+ },
+ {
+ url: '/area/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/area/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/area/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/code/levelType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '省级',
+ 'id': '166',
+ 'value': '1'
+ },
+ {
+ 'name': '市级',
+ 'id': '167',
+ 'value': '2'
+ },
+ {
+ 'name': '区级',
+ 'id': '168',
+ 'value': '3'
+ },
+ {
+ 'name': '街道',
+ 'id': '169',
+ 'value': '4'
+ },
+ {
+ 'name': '社区',
+ 'id': '170',
+ 'value': '5'
+ },
+ {
+ 'name': '网格',
+ 'id': '171',
+ 'value': '6'
+ },
+ {
+ 'name': '责任网格',
+ 'id': '172',
+ 'value': '7'
+ }
+ ]
+ }
+ }
+ }
+]
diff --git a/mock/system/config.js b/mock/system/config.js
new file mode 100644
index 0000000..652e41d
--- /dev/null
+++ b/mock/system/config.js
@@ -0,0 +1,18 @@
+module.exports = [
+ {
+ url: '/config/baseConfig',
+ type: 'get',
+ response: _ => {
+ return {
+ 'code': 200,
+ 'data': {
+ 'kaptcha': false,
+ 'publicKey': 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCu5k8gcTFJy5UtMfmtKiR3f/EcUe93kzfteRj6+sM5fHRvOib82+uqQMjgaRZiMcr3HiHIFY5vA6c+Rfb5R2COitoOhxyA9U2eLXknzxLUQIAqXAvKQO8KnerA1Qjcds7xhJB2XPhWFlY4RVtMT2wr2lMd29QDE4F/kzyDhNBpxwIDAQAB',
+ 'sid': 'f390b7d7-337b-431b-be22-fb860a6c04d4'
+ },
+ 'message': '请求成功',
+ 'success': true
+ }
+ }
+ }
+]
diff --git a/mock/system/dept.js b/mock/system/dept.js
new file mode 100644
index 0000000..2c19c94
--- /dev/null
+++ b/mock/system/dept.js
@@ -0,0 +1,88 @@
+const list = [
+ {
+ 'id': '1',
+ 'simplename': '二分公司',
+ 'fullname': '二分公司',
+ 'num': 1,
+ 'pid': '0',
+ 'pids': '[0,1,2]',
+ 'pName': '顶级',
+ 'version': '',
+ 'tips': ''
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/dept/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: list
+ }
+ }
+ }
+ },
+ {
+ url: '/dept/tree',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: [
+ {
+ 'id': '0',
+ 'pid': '',
+ 'name': '顶级',
+ 'open': 'false',
+ 'checked': ''
+ },
+ {
+ 'id': '26',
+ 'pid': '24',
+ 'name': '运行二所',
+ 'open': 'false',
+ 'checked': ''
+ }
+ ]
+ }
+ }
+ }
+ },
+ {
+ url: '/dept/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dept/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dept/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/system/dict.js b/mock/system/dict.js
new file mode 100644
index 0000000..60de4cd
--- /dev/null
+++ b/mock/system/dict.js
@@ -0,0 +1,69 @@
+const list = [
+ {
+ 'code': 'sysStatus',
+ 'num': 0,
+ 'name': '状态',
+ 'pid': '0',
+ 'id': '16',
+ 'detail': '1:启用:1;2:禁用:2',
+ 'tips': ''
+ },
+ {
+ 'code': 'sysSex',
+ 'num': 0,
+ 'name': '性别',
+ 'pid': '0',
+ 'id': '29',
+ 'detail': '1:男:1;2:女:2',
+ 'tips': ''
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/dict/listPage',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: list,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/system/log.js b/mock/system/log.js
new file mode 100644
index 0000000..9b6306e
--- /dev/null
+++ b/mock/system/log.js
@@ -0,0 +1,115 @@
+const logTypes = [
+ {
+ 'value': '0',
+ 'name': '业务日志'
+ },
+ {
+ 'value': '1',
+ 'name': '登录日志'
+ }
+]
+const loglist = [
+ {
+ 'id': 'c4cdba483fb1449aaad1e6c49353c6b3',
+ 'logtype': '业务日志',
+ 'createtime': '2019-04-04 14:23:31',
+ 'logname': '修改用户',
+ 'succeed': '成功',
+ 'deptid': '24',
+ 'deptName': '总公司',
+ 'message': '账号=yxssadmin...',
+ 'userName': 'bruser',
+ 'userid': '45'
+ }
+]
+const loginloglist = [
+ {
+ 'createtime': '2020-03-26 16:03:23',
+ 'logname': '登录日志',
+ 'succeed': '成功',
+ 'ip': '192.168.8.184',
+ 'deptid': '0',
+ 'message': '',
+ 'userName': '超级管理员',
+ 'userid': '1'
+ },
+ {
+ 'createtime': '2020-03-26 15:13:50',
+ 'logname': '登录日志',
+ 'succeed': '成功',
+ 'ip': '192.168.8.184',
+ 'deptid': '0',
+ 'message': '',
+ 'userName': '超级管理员',
+ 'userid': '1'
+ },
+ {
+ 'createtime': '2020-03-26 14:47:05',
+ 'logname': '登录日志',
+ 'succeed': '成功',
+ 'ip': '192.168.8.105',
+ 'deptid': '0',
+ 'message': '',
+ 'userName': '超级管理员',
+ 'userid': '1'
+ }]
+module.exports = [
+ {
+ url: '/loginLog/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: loginloglist,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/log/list',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: loglist,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/log/detail',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ 'createtime': '2020-03-26',
+ 'logtype': '业务日志',
+ 'classname': 'com.casic.missiles.modular.system.controller.RoleController',
+ 'method': 'dataAuthor',
+ 'logname': '数据权限配置',
+ 'succeed': '成功',
+ 'id': '1243081729056264193',
+ 'message': '角色名称=十一室管理员,资源名称=',
+ 'userName': '超级管理员',
+ 'regularMessage': '角色名称=十一室管理员,资源名称=',
+ 'userid': '1'
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/code/logType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: logTypes
+ }
+ }
+ }
+]
diff --git a/mock/system/resource.js b/mock/system/resource.js
new file mode 100644
index 0000000..1122ea8
--- /dev/null
+++ b/mock/system/resource.js
@@ -0,0 +1,1569 @@
+const tree = [
+ {
+ 'checked': false,
+ 'code': 'system',
+ 'id': '105',
+ 'name': '系统管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],',
+ 'pid': '1189107859077373954',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr',
+ 'id': '106',
+ 'name': '用户管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_add',
+ 'id': '107',
+ 'name': '添加用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_edit',
+ 'id': '108',
+ 'name': '修改用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_delete',
+ 'id': '109',
+ 'name': '删除用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_reset',
+ 'id': '110',
+ 'name': '重置密码',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_freeze',
+ 'id': '111',
+ 'name': '冻结用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_unfreeze',
+ 'id': '112',
+ 'name': '解除冻结用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_setRole',
+ 'id': '113',
+ 'name': '分配角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role',
+ 'id': '114',
+ 'name': '角色管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_add',
+ 'id': '115',
+ 'name': '添加角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_edit',
+ 'id': '116',
+ 'name': '修改角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_remove',
+ 'id': '117',
+ 'name': '删除角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_setAuthority',
+ 'id': '118',
+ 'name': '配置权限',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu',
+ 'id': '119',
+ 'name': '资源管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_add',
+ 'id': '120',
+ 'name': '添加菜单',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_edit',
+ 'id': '121',
+ 'name': '修改菜单',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_remove',
+ 'id': '122',
+ 'name': '删除菜单',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log',
+ 'id': '128',
+ 'name': '日志管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept',
+ 'id': '131',
+ 'name': '组织管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict',
+ 'id': '132',
+ 'name': '字典管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'loginLog',
+ 'id': '133',
+ 'name': '登录日志',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log_clean',
+ 'id': '134',
+ 'name': '清空日志',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'pid': '128',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_add',
+ 'id': '135',
+ 'name': '添加部门',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_update',
+ 'id': '136',
+ 'name': '修改部门',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_delete',
+ 'id': '137',
+ 'name': '删除部门',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_add',
+ 'id': '138',
+ 'name': '添加字典',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_update',
+ 'id': '139',
+ 'name': '修改字典',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_delete',
+ 'id': '140',
+ 'name': '删除字典',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_list',
+ 'id': '151',
+ 'name': '菜单列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_list',
+ 'id': '153',
+ 'name': '部门列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_detail',
+ 'id': '154',
+ 'name': '部门详情',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_list',
+ 'id': '156',
+ 'name': '字典列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_detail',
+ 'id': '157',
+ 'name': '字典详情',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log_list',
+ 'id': '158',
+ 'name': '日志列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'pid': '128',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log_detail',
+ 'id': '159',
+ 'name': '日志详情',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'pid': '128',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'del_login_log',
+ 'id': '160',
+ 'name': '清空登录日志',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'pid': '133',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'login_log_list',
+ 'id': '161',
+ 'name': '登录日志列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'pid': '133',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_list',
+ 'id': '164',
+ 'name': '角色列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_list',
+ 'id': '167',
+ 'name': '用户列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'data_author',
+ 'id': '1138364388198715393',
+ 'name': '数据权限',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'AreaAdmin',
+ 'id': '1170945119300976642',
+ 'name': '区域管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'sys',
+ 'id': '1189107859077373954',
+ 'name': '基础权限管理',
+ 'open': true,
+ 'pcodes': '[0],',
+ 'pid': '0',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_listPage',
+ 'id': '1191975090689810434',
+ 'name': '区域列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_add',
+ 'id': '1191975312815955969',
+ 'name': '新增区域',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_update',
+ 'id': '1191975427559530497',
+ 'name': '修改区域',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_delete',
+ 'id': '1191975543687225346',
+ 'name': '区域删除',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': true,
+ 'code': '',
+ 'id': '0',
+ 'name': '顶级',
+ 'open': true,
+ 'pcodes': '',
+ 'pid': '',
+ 'value': ''
+ }
+]
+const list = [
+ {
+ 'isopen': '1',
+ 'code': 'system',
+ 'pcode': 'sys',
+ 'num': 4,
+ 'icon': 'icon-setting',
+ 'pid': '1189107859077373954',
+ 'isMenu': '是',
+ 'url': '/system',
+ 'tips': '',
+ 'pcodes': '[0],[sys],',
+ 'name': '系统管理',
+ 'statusName': '启用',
+ 'id': '105',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': true,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr',
+ 'pcode': 'system',
+ 'num': 1,
+ 'icon': 'icon-user',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/mgr',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '用户管理',
+ 'statusName': '启用',
+ 'id': '106',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_add',
+ 'pcode': 'mgr',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '添加用户',
+ 'statusName': '启用',
+ 'id': '107',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_edit',
+ 'pcode': 'mgr',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '修改用户',
+ 'statusName': '启用',
+ 'id': '108',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_delete',
+ 'pcode': 'mgr',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '删除用户',
+ 'statusName': '启用',
+ 'id': '109',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_reset',
+ 'pcode': 'mgr',
+ 'num': 4,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/reset',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '重置密码',
+ 'statusName': '启用',
+ 'id': '110',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_freeze',
+ 'pcode': 'mgr',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/freeze',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '冻结用户',
+ 'statusName': '启用',
+ 'id': '111',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_unfreeze',
+ 'pcode': 'mgr',
+ 'num': 6,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/unfreeze',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '解除冻结用户',
+ 'statusName': '启用',
+ 'id': '112',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_setRole',
+ 'pcode': 'mgr',
+ 'num': 7,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/roleAssign',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '分配角色',
+ 'statusName': '启用',
+ 'id': '113',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role',
+ 'pcode': 'system',
+ 'num': 2,
+ 'icon': 'permission',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/role',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '角色管理',
+ 'statusName': '启用',
+ 'id': '114',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_add',
+ 'pcode': 'role',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '添加角色',
+ 'statusName': '启用',
+ 'id': '115',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_edit',
+ 'pcode': 'role',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '修改角色',
+ 'statusName': '启用',
+ 'id': '116',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_remove',
+ 'pcode': 'role',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '删除角色',
+ 'statusName': '启用',
+ 'id': '117',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_setAuthority',
+ 'pcode': 'role',
+ 'num': 4,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/funcAuthor',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '配置权限',
+ 'statusName': '启用',
+ 'id': '118',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu',
+ 'pcode': 'system',
+ 'num': 4,
+ 'icon': 'function',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/resource',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '资源管理',
+ 'statusName': '启用',
+ 'id': '119',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_add',
+ 'pcode': 'menu',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '添加菜单',
+ 'statusName': '启用',
+ 'id': '120',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_edit',
+ 'pcode': 'menu',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '修改菜单',
+ 'statusName': '启用',
+ 'id': '121',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_remove',
+ 'pcode': 'menu',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '删除菜单',
+ 'statusName': '启用',
+ 'id': '122',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log',
+ 'pcode': 'system',
+ 'num': 6,
+ 'icon': 'log',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/log',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '日志管理',
+ 'statusName': '启用',
+ 'id': '128',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept',
+ 'pcode': 'system',
+ 'num': 3,
+ 'icon': 'dept2',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/dept',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '组织管理',
+ 'statusName': '启用',
+ 'id': '131',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict',
+ 'pcode': 'system',
+ 'num': 4,
+ 'icon': 'icon-dict',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/dict',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '字典管理',
+ 'statusName': '启用',
+ 'id': '132',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'loginLog',
+ 'pcode': 'system',
+ 'num': 6,
+ 'icon': 'task',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/loginLog',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '登录日志',
+ 'statusName': '启用',
+ 'id': '133',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log_clean',
+ 'pcode': 'log',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '128',
+ 'isMenu': '不是',
+ 'url': '/log/delLog',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'name': '清空日志',
+ 'statusName': '启用',
+ 'id': '134',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_add',
+ 'pcode': 'dept',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '添加部门',
+ 'statusName': '启用',
+ 'id': '135',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_update',
+ 'pcode': 'dept',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '修改部门',
+ 'statusName': '启用',
+ 'id': '136',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_delete',
+ 'pcode': 'dept',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '删除部门',
+ 'statusName': '启用',
+ 'id': '137',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_add',
+ 'pcode': 'dict',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '添加字典',
+ 'statusName': '启用',
+ 'id': '138',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_update',
+ 'pcode': 'dict',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '修改字典',
+ 'statusName': '启用',
+ 'id': '139',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_delete',
+ 'pcode': 'dict',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '删除字典',
+ 'statusName': '启用',
+ 'id': '140',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_list',
+ 'pcode': 'menu',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '菜单列表',
+ 'statusName': '启用',
+ 'id': '151',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_list',
+ 'pcode': 'dept',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '部门列表',
+ 'statusName': '启用',
+ 'id': '153',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_detail',
+ 'pcode': 'dept',
+ 'num': 6,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/detail',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '部门详情',
+ 'statusName': '启用',
+ 'id': '154',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_list',
+ 'pcode': 'dict',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '字典列表',
+ 'statusName': '启用',
+ 'id': '156',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_detail',
+ 'pcode': 'dict',
+ 'num': 6,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/detail',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '字典详情',
+ 'statusName': '启用',
+ 'id': '157',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log_list',
+ 'pcode': 'log',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '128',
+ 'isMenu': '不是',
+ 'url': '/log/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'name': '日志列表',
+ 'statusName': '启用',
+ 'id': '158',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log_detail',
+ 'pcode': 'log',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '128',
+ 'isMenu': '不是',
+ 'url': '/log/detail',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'name': '日志详情',
+ 'statusName': '启用',
+ 'id': '159',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'del_login_log',
+ 'pcode': 'loginLog',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '133',
+ 'isMenu': '不是',
+ 'url': '/loginLog/delLoginLog',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'name': '清空登录日志',
+ 'statusName': '启用',
+ 'id': '160',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'login_log_list',
+ 'pcode': 'loginLog',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '133',
+ 'isMenu': '不是',
+ 'url': '/loginLog/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'name': '登录日志列表',
+ 'statusName': '启用',
+ 'id': '161',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_list',
+ 'pcode': 'role',
+ 'num': 7,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '角色列表',
+ 'statusName': '启用',
+ 'id': '164',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_list',
+ 'pcode': 'mgr',
+ 'num': 10,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': ' /mgr/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '用户列表',
+ 'statusName': '启用',
+ 'id': '167',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'data_author',
+ 'pcode': 'role',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/dataAuthor',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '数据权限',
+ 'statusName': '启用',
+ 'id': '1138364388198715393',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'AreaAdmin',
+ 'pcode': 'system',
+ 'num': 0,
+ 'icon': 'icon-base',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/area',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '区域管理',
+ 'statusName': '启用',
+ 'id': '1170945119300976642',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'sys',
+ 'pcode': '0',
+ 'num': 0,
+ 'icon': 'icon-setting',
+ 'pid': '0',
+ 'isMenu': '不是',
+ 'url': '/sys',
+ 'tips': '',
+ 'pcodes': '[0],',
+ 'name': '基础权限管理',
+ 'statusName': '启用',
+ 'id': '1189107859077373954',
+ 'ismenu': '0',
+ 'levels': 1,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '02'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_listPage',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/listPage',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '区域列表',
+ 'statusName': '启用',
+ 'id': '1191975090689810434',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_add',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '新增区域',
+ 'statusName': '启用',
+ 'id': '1191975312815955969',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_update',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '修改区域',
+ 'statusName': '启用',
+ 'id': '1191975427559530497',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_delete',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '区域删除',
+ 'statusName': '启用',
+ 'id': '1191975543687225346',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/resource/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: list
+ }
+ }
+ }
+ },
+
+ // mock get all roles form server
+ {
+ url: '/resource/tree',
+ type: 'get',
+ response: _ => {
+ return {
+ 'code': 200,
+ 'message': 'success',
+ 'data': {
+ 'list': tree
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/code/resourceType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '菜单',
+ 'id': '55',
+ 'value': '03'
+ },
+ {
+ 'name': '按钮',
+ 'id': '56',
+ 'value': '04'
+ }
+ ]
+ }
+ }
+ },
+ {
+ url: '/resource/treeListByRoleId',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {
+ 'list': tree
+ }
+ }
+ }
+ },
+ {
+ url: 'resource/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/resource/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/resource/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/system/role.js b/mock/system/role.js
new file mode 100644
index 0000000..508ac84
--- /dev/null
+++ b/mock/system/role.js
@@ -0,0 +1,207 @@
+const tree = [
+ {
+ "id":1,
+ "pid":"0",
+ "name":"超级管理员"
+ }
+]
+const list = [
+ {
+ "deptName":"顶级",
+ "pName":"",
+ "num":1,
+ "name":"超级管理员",
+ "deptid":"0",
+ "pid":"0",
+ "id":1,
+ "version":1,
+ "tips":"administrator"
+ },
+ {
+ "deptName":"高压管网分公司",
+ "pName":"超级管理员",
+ "num":2,
+ "name":"高压管网分公司系统管理员",
+ "deptid":"24",
+ "pid":1,
+ "id":2,
+ "version":"",
+ "tips":"rqadmin"
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/role/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: list
+ }
+ }
+ }
+ },
+
+ // mock get all roles form server
+ {
+ url: '/role/tree',
+ type: 'get',
+ response: _ => {
+ return {
+ 'code': 200,
+ 'message': 'success',
+ 'data': {
+ 'list': tree
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/code/roleType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '菜单',
+ 'id': '55',
+ 'value': '03'
+ },
+ {
+ 'name': '按钮',
+ 'id': '56',
+ 'value': '04'
+ }
+ ]
+ }
+ }
+ },
+ {
+ url: '/role/treeByUserId',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {
+ 'list': [
+ {
+ "id":1,
+ "pid":"0",
+ "name":"超级管理员",
+ "open":true,
+ "checked":false
+ }
+ ]
+ }
+ }
+ }
+ },
+ {
+ url: '/role/treeByRoleId',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {
+ 'list': [
+ {
+ "id":"26",
+ "pid":"24",
+ "name":"运行二所",
+ "open":true,
+ "checked":true
+ }
+ ]
+ }
+ }
+ }
+ },
+ {
+ url: '/role/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/role/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/role/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/role/funcAuthor',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/role/dataAuthor',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/code/dataScopeType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '全部',
+ 'id': '55',
+ 'value': '03'
+ },
+ {
+ 'name': '本部门',
+ 'id': '56',
+ 'value': '04'
+ },
+ {
+ 'name': '自定义',
+ 'id': '57',
+ 'value': '04'
+ }
+ ]
+ }
+ }
+ }
+]
diff --git a/mock/system/user.js b/mock/system/user.js
new file mode 100644
index 0000000..5601db9
--- /dev/null
+++ b/mock/system/user.js
@@ -0,0 +1,860 @@
+// 用户详情
+const userinfo = {
+ 'account': 'admin',
+ 'avatar': 'girl.gif',
+ 'dataScope': [
+ '0',
+ '1236854643826184194',
+ '1236856061500936193',
+ '1236856816081391617',
+ '1236856889875976194',
+ '1236856952987668481',
+ '1236857009937928194',
+ '1236857134915604482',
+ '1236857274443321346',
+ '1236857346400800770',
+ '1236857428776931330',
+ '1236857492744261633',
+ '1236857661695021057',
+ '1236857767731220481',
+ '1236857826057211905',
+ '1236857873113108481',
+ '1236857966566395906',
+ '1236858049731055618',
+ '1236858125752815618',
+ '1236858179561541633',
+ '1236858248830472194',
+ '1236858330946555905',
+ '1236858380556783617',
+ '1236858422894088194',
+ '1236858475780067330',
+ '1236858517333037058',
+ '1236858579396153346',
+ '1236858642176495618',
+ '1236858704961032194',
+ '1236858748544045057',
+ '1236858806672904193',
+ '1236858863296008193',
+ '1236858908317667330'
+ ],
+ 'deptId': '0',
+ 'deptName': '顶级',
+ 'devices': [],
+ 'id': '1',
+ 'ipAddr': '124.64.16.144',
+ 'name': '超超级管理员',
+ 'phone': '18200000000',
+ 'roleList': [
+ '1'
+ ],
+ 'roleNames': [
+ '超级管理员'
+ ],
+ 'roleTips': [
+ 'administrator'
+ ],
+ 'scopeType': '4',
+ 'targetId': '',
+ 'targetName': '',
+ 'tenantId': ''
+}
+const list = [
+ {
+ 'birthday': '2017-05-05 00:00:00',
+ 'deptName': '顶级',
+ 'createtime': '2016-01-29 08:49:53',
+ 'roleid': '1',
+ 'sex': '2',
+ 'deptid': '0',
+ 'avatar': 'girl.gif',
+ 'version': 25,
+ 'phone': '18200000000',
+ 'sexName': '女',
+ 'name': '超级管理员',
+ 'roleName': '超级管理员',
+ 'statusName': '启用',
+ 'id': '1',
+ 'account': 'admin',
+ 'email': 'sn93@qq.com',
+ 'status': '1'
+ }
+]
+// 权限列表
+const permisson = {
+ 'menus': [
+ {
+ 'children': '',
+ 'code': 'sys',
+ 'icon': 'icon-setting',
+ 'id': '1189107859077373954',
+ 'ismenu': '0',
+ 'levels': 1,
+ 'name': '基础权限管理',
+ 'num': 0,
+ 'parentId': '0',
+ 'resourceType': '02',
+ 'url': '/sys'
+ },
+ {
+ 'children': '',
+ 'code': 'data_author',
+ 'icon': '',
+ 'id': '1138364388198715393',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '数据权限',
+ 'num': 0,
+ 'parentId': '114',
+ 'resourceType': '0',
+ 'url': '/role/dataAuthor'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr',
+ 'icon': 'icon-user',
+ 'id': '106',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '用户管理',
+ 'num': 1,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/mgr'
+ },
+ {
+ 'children': '',
+ 'code': 'role',
+ 'icon': 'permission',
+ 'id': '114',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '角色管理',
+ 'num': 2,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/role'
+ },
+ {
+ 'children': '',
+ 'code': 'role_edit',
+ 'icon': '',
+ 'id': '116',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '修改角色',
+ 'num': 2,
+ 'parentId': '114',
+ 'resourceType': '0',
+ 'url': '/role/update'
+ },
+ {
+ 'children': '',
+ 'code': 'role_remove',
+ 'icon': '',
+ 'id': '117',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '删除角色',
+ 'num': 3,
+ 'parentId': '114',
+ 'resourceType': '0',
+ 'url': '/role/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'dept',
+ 'icon': 'dept2',
+ 'id': '131',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '组织管理',
+ 'num': 3,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/dept'
+ },
+ {
+ 'children': '',
+ 'code': 'menu',
+ 'icon': 'function',
+ 'id': '119',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '资源管理',
+ 'num': 4,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/resource'
+ },
+ {
+ 'children': '',
+ 'code': 'role_setAuthority',
+ 'icon': '',
+ 'id': '118',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '配置权限',
+ 'num': 4,
+ 'parentId': '114',
+ 'resourceType': '0',
+ 'url': '/role/funcAuthor'
+ },
+ {
+ 'children': '',
+ 'code': 'system',
+ 'icon': 'icon-setting',
+ 'id': '105',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '系统管理',
+ 'num': 4,
+ 'parentId': '1189107859077373954',
+ 'resourceType': '03',
+ 'url': '/system'
+ },
+ {
+ 'children': '',
+ 'code': 'menu_list',
+ 'icon': '',
+ 'id': '151',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '菜单列表',
+ 'num': 5,
+ 'parentId': '119',
+ 'resourceType': '0',
+ 'url': '/resource/list'
+ },
+ {
+ 'children': '',
+ 'code': 'loginLog',
+ 'icon': 'task',
+ 'id': '133',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '登录日志',
+ 'num': 6,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/loginLog'
+ },
+ {
+ 'children': '',
+ 'code': 'log',
+ 'icon': 'log',
+ 'id': '128',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '日志管理',
+ 'num': 6,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/log'
+ },
+ {
+ 'children': '',
+ 'code': 'AreaAdmin',
+ 'icon': 'icon-base',
+ 'id': '1170945119300976642',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'name': '区域管理',
+ 'num': 0,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/area'
+ },
+ {
+ 'children': '',
+ 'code': 'visitor_permission',
+ 'icon': '',
+ 'id': '1202403877222735874',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'name': '访客授权列表',
+ 'num': 0,
+ 'parentId': '1202403125913837569',
+ 'resourceType': '03',
+ 'url': '/acsPermission/listVisitorPerm'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_delete',
+ 'icon': '',
+ 'id': '137',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '删除部门',
+ 'num': 1,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'role_add',
+ 'icon': '',
+ 'id': '115',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加角色',
+ 'num': 1,
+ 'parentId': '114',
+ 'resourceType': '04',
+ 'url': '/role/add'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_add',
+ 'icon': '',
+ 'id': '138',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加字典',
+ 'num': 1,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/add'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_delete',
+ 'icon': '',
+ 'id': '140',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '删除字典',
+ 'num': 1,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_add',
+ 'icon': '',
+ 'id': '135',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加部门',
+ 'num': 1,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/add'
+ },
+ {
+ 'children': '',
+ 'code': 'del_login_log',
+ 'icon': '',
+ 'id': '160',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '清空登录日志',
+ 'num': 1,
+ 'parentId': '133',
+ 'resourceType': '04',
+ 'url': '/loginLog/delLoginLog'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_update',
+ 'icon': '',
+ 'id': '139',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '修改字典',
+ 'num': 1,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/update'
+ },
+ {
+ 'children': '',
+ 'code': 'menu_add',
+ 'icon': '',
+ 'id': '120',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加菜单',
+ 'num': 1,
+ 'parentId': '119',
+ 'resourceType': '04',
+ 'url': '/resource/add'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_add',
+ 'icon': '',
+ 'id': '107',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加用户',
+ 'num': 1,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/add'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_update',
+ 'icon': '',
+ 'id': '136',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '修改部门',
+ 'num': 1,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/update'
+ },
+ {
+ 'children': '',
+ 'code': 'menu_edit',
+ 'icon': '',
+ 'id': '121',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '修改菜单',
+ 'num': 2,
+ 'parentId': '119',
+ 'resourceType': '04',
+ 'url': '/resource/update'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_edit',
+ 'icon': '',
+ 'id': '108',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '修改用户',
+ 'num': 2,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/update'
+ },
+ {
+ 'children': '',
+ 'code': 'log_list',
+ 'icon': '',
+ 'id': '158',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '日志列表',
+ 'num': 2,
+ 'parentId': '128',
+ 'resourceType': '04',
+ 'url': '/log/list'
+ },
+ {
+ 'children': '',
+ 'code': 'login_log_list',
+ 'icon': '',
+ 'id': '161',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '登录日志列表',
+ 'num': 2,
+ 'parentId': '133',
+ 'resourceType': '04',
+ 'url': '/loginLog/list'
+ },
+ {
+ 'children': '',
+ 'code': 'log_clean',
+ 'icon': '',
+ 'id': '134',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '清空日志',
+ 'num': 3,
+ 'parentId': '128',
+ 'resourceType': '04',
+ 'url': '/log/delLog'
+ },
+ {
+ 'children': '',
+ 'code': 'log_detail',
+ 'icon': '',
+ 'id': '159',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '日志详情',
+ 'num': 3,
+ 'parentId': '128',
+ 'resourceType': '04',
+ 'url': '/log/detail'
+ },
+ {
+ 'children': '',
+ 'code': 'menu_remove',
+ 'icon': '',
+ 'id': '122',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '删除菜单',
+ 'num': 3,
+ 'parentId': '119',
+ 'resourceType': '04',
+ 'url': '/resource/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_delete',
+ 'icon': '',
+ 'id': '109',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '删除用户',
+ 'num': 3,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_reset',
+ 'icon': '',
+ 'id': '110',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '重置密码',
+ 'num': 4,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/reset'
+ },
+ {
+ 'children': '',
+ 'code': 'dict',
+ 'icon': 'icon-dict',
+ 'id': '132',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'name': '字典管理',
+ 'num': 4,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/user'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_list',
+ 'icon': '',
+ 'id': '153',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '部门列表',
+ 'num': 5,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/list'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_list',
+ 'icon': '',
+ 'id': '156',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '字典列表',
+ 'num': 5,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/list'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_freeze',
+ 'icon': '',
+ 'id': '111',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '冻结用户',
+ 'num': 5,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/freeze'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_detail',
+ 'icon': '',
+ 'id': '154',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '部门详情',
+ 'num': 6,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/detail'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_detail',
+ 'icon': '',
+ 'id': '157',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '字典详情',
+ 'num': 6,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/detail'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_unfreeze',
+ 'icon': '',
+ 'id': '112',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '解除冻结用户',
+ 'num': 6,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/unfreeze'
+ },
+ {
+ 'children': '',
+ 'code': 'role_list',
+ 'icon': '',
+ 'id': '164',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '角色列表',
+ 'num': 7,
+ 'parentId': '114',
+ 'resourceType': '04',
+ 'url': '/role/list'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_setRole',
+ 'icon': '',
+ 'id': '113',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '分配角色',
+ 'num': 7,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/roleAssign'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_list',
+ 'icon': '',
+ 'id': '167',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '用户列表',
+ 'num': 10,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': ' /mgr/list'
+ },
+ {
+ 'children': '',
+ 'code': 'area_add',
+ 'icon': '',
+ 'id': '1191975312815955969',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'name': '新增区域',
+ 'num': 0,
+ 'parentId': '1170945119300976642',
+ 'resourceType': '04',
+ 'url': '/area/add'
+ },
+ {
+ 'children': '',
+ 'code': 'area_delete',
+ 'icon': '',
+ 'id': '1191975543687225346',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'name': '区域删除',
+ 'num': 0,
+ 'parentId': '1170945119300976642',
+ 'resourceType': '04',
+ 'url': '/area/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'area_listPage',
+ 'icon': '',
+ 'id': '1191975090689810434',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'name': '区域列表',
+ 'num': 0,
+ 'parentId': '1170945119300976642',
+ 'resourceType': '04',
+ 'url': '/area/listPage'
+ },
+ {
+ 'children': '',
+ 'code': 'area_update',
+ 'icon': '',
+ 'id': '1191975427559530497',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'name': '修改区域',
+ 'num': 0,
+ 'parentId': '1170945119300976642',
+ 'resourceType': '04',
+ 'url': '/area/update'
+ }
+ ]
+}
+module.exports = [
+ {
+ url: '/user/login',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ success: true,
+ data: {
+ kaptcha: '',
+ token: '02deb42b-5298-431a-b690-d04573c18281'
+
+ }
+ }
+ }
+ },
+ {
+ url: '/user/info',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ success: true,
+ data: userinfo
+ }
+ }
+ },
+ {
+ url: '/user/permission',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ success: true,
+ data: permisson
+ }
+ }
+ },
+ {
+ url: '/user/logout',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ success: true
+ }
+ }
+ },
+ {
+ url: '/mgr/list',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: list,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/mgr/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/freeze',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/unfreeze',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/reset',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/roleAssign',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/changePwd',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/table.js b/mock/table.js
new file mode 100644
index 0000000..d3963f4
--- /dev/null
+++ b/mock/table.js
@@ -0,0 +1,20 @@
+import Mock from 'mockjs'
+
+module.exports = {
+ list: () => {
+ const items = Mock.mock({
+ 'items|30': [{
+ id: '@id',
+ title: '@sentence(10, 20)',
+ 'status|1': ['published', 'draft', 'deleted'],
+ author: 'name',
+ display_time: '@datetime',
+ pageviews: '@integer(300, 5000)'
+ }]
+ })
+ return {
+ code: 20000,
+ data: items
+ }
+ }
+}
diff --git a/mock/user.js b/mock/user.js
new file mode 100644
index 0000000..6edeeff
--- /dev/null
+++ b/mock/user.js
@@ -0,0 +1,70 @@
+import { param2Obj } from './utils'
+
+const tokens = {
+ admin: {
+ token: 'admin-token'
+ },
+ editor: {
+ token: 'editor-token'
+ }
+}
+
+const users = {
+ 'admin-token': {
+ roles: ['admin'],
+ btns: ['kaptcha'],
+ introduction: 'I am a 超级管理员',
+ avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif',
+ name: 'mock Admin'
+ },
+ 'editor-token': {
+ roles: ['editor'],
+ btns: [],
+ introduction: 'I am an editor',
+ avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif',
+ name: 'Normal Editor'
+ }
+}
+
+module.exports = {
+ login: res => {
+ const { username } = JSON.parse(res.body)
+ const data = tokens[username]
+
+ if (data) {
+ return {
+ code: 200,
+ success: true,
+ data
+ }
+ }
+ return {
+ code: 60204,
+ success: false,
+ message: '账号或密码错误.'
+ }
+ },
+ getInfo: res => {
+ const { token } = param2Obj(res.url)
+ const info = users[token]
+
+ if (info) {
+ return {
+ code: 200,
+ success: true,
+ data: info
+ }
+ }
+ return {
+ code: 50008,
+ success: false,
+ message: '登录失败,无法获取用户信息.'
+ }
+ },
+ logout: () => {
+ return {
+ code: 200,
+ success: true
+ }
+ }
+}
diff --git a/mock/utils.js b/mock/utils.js
new file mode 100644
index 0000000..8fc4926
--- /dev/null
+++ b/mock/utils.js
@@ -0,0 +1,51 @@
+const Mock = require('mockjs')
+
+const NameList = []
+const count = 100
+
+for (let i = 0; i < count; i++) {
+ NameList.push(Mock.mock({
+ name: '@first'
+ }))
+}
+NameList.push({ name: 'mock-Pan' })
+
+module.exports = [
+ // 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/package-lock.json b/package-lock.json
index b780dad..63c2f82 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -305,6 +305,19 @@
"@babel/helper-validator-identifier": "^7.14.5",
"chalk": "^2.0.0",
"js-tokens": "^4.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"@babel/parser": {
@@ -1273,6 +1286,19 @@
"@jest/source-map": "^24.9.0",
"chalk": "^2.0.1",
"slash": "^2.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"@jest/core": {
@@ -1317,6 +1343,17 @@
"integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
"dev": true
},
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"strip-ansi": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
@@ -1380,6 +1417,17 @@
"string-length": "^2.0.0"
},
"dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -1454,6 +1502,17 @@
"write-file-atomic": "2.4.1"
},
"dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -1507,6 +1566,17 @@
"integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
"dev": true
},
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"is-fullwidth-code-point": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
@@ -2328,6 +2398,19 @@
"request": "^2.88.2",
"semver": "^6.1.0",
"strip-ansi": "^6.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"@vue/component-compiler-utils": {
@@ -3082,6 +3165,19 @@
"babel-preset-jest": "^24.9.0",
"chalk": "^2.4.2",
"slash": "^2.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"babel-loader": {
@@ -3940,14 +4036,54 @@
"dev": true
},
"chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
}
},
"chardet": {
@@ -4364,6 +4500,19 @@
"@types/q": "^1.5.1",
"chalk": "^2.4.1",
"q": "^1.1.2"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"code-point-at": {
@@ -5231,6 +5380,17 @@
"integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=",
"dev": true
},
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"commander": {
"version": "2.15.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
@@ -5823,6 +5983,12 @@
}
}
},
+ "domready": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/domready/-/domready-1.0.8.tgz",
+ "integrity": "sha1-kfJS5Ze2Wvd+dFriTdAYXV4m1Yw=",
+ "dev": true
+ },
"domutils": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
@@ -6195,6 +6361,17 @@
"v8-compile-cache": "^2.0.3"
},
"dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"eslint-scope": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
@@ -8218,6 +8395,12 @@
"integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
"dev": true
},
+ "image-size": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
+ "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=",
+ "dev": true
+ },
"import-cwd": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz",
@@ -9144,6 +9327,19 @@
"prompts": "^2.0.1",
"realpath-native": "^1.1.0",
"yargs": "^13.3.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
}
}
@@ -9182,6 +9378,19 @@
"micromatch": "^3.1.10",
"pretty-format": "^24.9.0",
"realpath-native": "^1.1.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-diff": {
@@ -9194,6 +9403,19 @@
"diff-sequences": "^24.9.0",
"jest-get-type": "^24.9.0",
"pretty-format": "^24.9.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-docblock": {
@@ -9216,6 +9438,19 @@
"jest-get-type": "^24.9.0",
"jest-util": "^24.9.0",
"pretty-format": "^24.9.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-environment-jsdom": {
@@ -9437,6 +9672,19 @@
"jest-util": "^24.9.0",
"pretty-format": "^24.9.0",
"throat": "^4.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-leak-detector": {
@@ -9459,6 +9707,19 @@
"jest-diff": "^24.9.0",
"jest-get-type": "^24.9.0",
"pretty-format": "^24.9.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-message-util": {
@@ -9475,6 +9736,19 @@
"micromatch": "^3.1.10",
"slash": "^2.0.0",
"stack-utils": "^1.0.1"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-mock": {
@@ -9509,6 +9783,19 @@
"chalk": "^2.0.1",
"jest-pnp-resolver": "^1.2.1",
"realpath-native": "^1.1.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-resolve-dependencies": {
@@ -9547,6 +9834,19 @@
"jest-worker": "^24.6.0",
"source-map-support": "^0.5.6",
"throat": "^4.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-runtime": {
@@ -9578,6 +9878,19 @@
"slash": "^2.0.0",
"strip-bom": "^3.0.0",
"yargs": "^13.3.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-serializer": {
@@ -9614,6 +9927,19 @@
"natural-compare": "^1.4.0",
"pretty-format": "^24.9.0",
"semver": "^6.2.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-transform-stub": {
@@ -9642,6 +9968,17 @@
"source-map": "^0.6.0"
},
"dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"ci-info": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
@@ -9684,6 +10021,17 @@
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
"dev": true
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
}
}
},
@@ -9711,6 +10059,17 @@
"type-fest": "^0.21.3"
}
},
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"slash": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
@@ -9764,6 +10123,17 @@
"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
"integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
"dev": true
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
}
}
},
@@ -9788,6 +10158,12 @@
}
}
},
+ "js-base64": {
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz",
+ "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==",
+ "dev": true
+ },
"js-beautify": {
"version": "1.14.0",
"resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.14.0.tgz",
@@ -9993,6 +10369,19 @@
"requires": {
"chalk": "^2.3.0",
"shell-quote": "^1.6.1"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"launch-editor-middleware": {
@@ -10499,6 +10888,19 @@
"dev": true,
"requires": {
"chalk": "^2.0.1"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"log-update": {
@@ -10646,6 +11048,23 @@
"integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
"dev": true
},
+ "merge-options": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-1.0.1.tgz",
+ "integrity": "sha512-iuPV41VWKWBIOpBsjoxjDZw8/GbSfZ2mk7N1453bwMrfzdrIk7EzBd+8UVR6rkw67th7xnk9Dytl3J+lHPdxvg==",
+ "dev": true,
+ "requires": {
+ "is-plain-obj": "^1.1"
+ },
+ "dependencies": {
+ "is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
+ "dev": true
+ }
+ }
+ },
"merge-source-map": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz",
@@ -10846,6 +11265,12 @@
"through2": "^2.0.0"
}
},
+ "mitt": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.1.2.tgz",
+ "integrity": "sha1-OA5hSA1qYVtmDwertg1R4KTkvtY=",
+ "dev": true
+ },
"mixin-deep": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
@@ -10876,6 +11301,12 @@
"minimist": "^1.2.5"
}
},
+ "mock": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/mock/-/mock-0.1.1.tgz",
+ "integrity": "sha1-5+NYnH5rM3bWn1o+RwtWYEQXxjM=",
+ "dev": true
+ },
"mockjs": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/mockjs/-/mockjs-1.1.0.tgz",
@@ -10943,6 +11374,12 @@
"thenify-all": "^1.0.0"
}
},
+ "nanoid": {
+ "version": "3.1.25",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz",
+ "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==",
+ "dev": true
+ },
"nanomatch": {
"version": "1.2.13",
"resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
@@ -11426,6 +11863,17 @@
"wcwidth": "^1.0.1"
},
"dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"strip-ansi": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
@@ -11877,6 +12325,28 @@
"supports-color": "^6.1.0"
},
"dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -12370,6 +12840,28 @@
}
}
},
+ "postcss-prefix-selector": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/postcss-prefix-selector/-/postcss-prefix-selector-1.10.0.tgz",
+ "integrity": "sha512-VcC/zCXVfFdGyn+Fo9+mxnxBu+hT61uMJJBdfWBbIeDrcE6g8s+26SUPTMpz8kc9wfoLpJGAZZ4QwbVqwxpNRA==",
+ "dev": true,
+ "requires": {
+ "postcss": "^8.2.10"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "8.3.6",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.6.tgz",
+ "integrity": "sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A==",
+ "dev": true,
+ "requires": {
+ "colorette": "^1.2.2",
+ "nanoid": "^3.1.23",
+ "source-map-js": "^0.6.2"
+ }
+ }
+ }
+ },
"postcss-reduce-initial": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz",
@@ -12448,6 +12940,104 @@
"integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
"dev": true
},
+ "posthtml": {
+ "version": "0.9.2",
+ "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.9.2.tgz",
+ "integrity": "sha1-9MBtufZ7Yf0XxOJW5+PZUVv3Jv0=",
+ "dev": true,
+ "requires": {
+ "posthtml-parser": "^0.2.0",
+ "posthtml-render": "^1.0.5"
+ }
+ },
+ "posthtml-parser": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.2.1.tgz",
+ "integrity": "sha1-NdUw3jhnQMK6JP8usvrznM3ycd0=",
+ "dev": true,
+ "requires": {
+ "htmlparser2": "^3.8.3",
+ "isobject": "^2.1.0"
+ },
+ "dependencies": {
+ "domhandler": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
+ "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1"
+ }
+ },
+ "entities": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
+ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
+ "dev": true
+ },
+ "htmlparser2": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
+ "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^1.3.1",
+ "domhandler": "^2.3.0",
+ "domutils": "^1.5.1",
+ "entities": "^1.1.1",
+ "inherits": "^2.0.1",
+ "readable-stream": "^3.1.1"
+ }
+ },
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ },
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ }
+ }
+ },
+ "posthtml-rename-id": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/posthtml-rename-id/-/posthtml-rename-id-1.0.12.tgz",
+ "integrity": "sha512-UKXf9OF/no8WZo9edRzvuMenb6AD5hDLzIepJW+a4oJT+T/Lx7vfMYWT4aWlGNQh0WMhnUx1ipN9OkZ9q+ddEw==",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "1.0.5"
+ }
+ },
+ "posthtml-render": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-1.4.0.tgz",
+ "integrity": "sha512-W1779iVHGfq0Fvh2PROhCe2QhB8mEErgqzo1wpIt36tCgChafP+hbXIhLDOM8ePJrZcFs0vkNEtdibEWVqChqw==",
+ "dev": true
+ },
+ "posthtml-svg-mode": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/posthtml-svg-mode/-/posthtml-svg-mode-1.0.3.tgz",
+ "integrity": "sha512-hEqw9NHZ9YgJ2/0G7CECOeuLQKZi8HjWLkBaSVtOWjygQ9ZD8P7tqeowYs7WrFdKsWEKG7o+IlsPY8jrr0CJpQ==",
+ "dev": true,
+ "requires": {
+ "merge-options": "1.0.1",
+ "posthtml": "^0.9.2",
+ "posthtml-parser": "^0.2.1",
+ "posthtml-render": "^1.0.6"
+ }
+ },
"prelude-ls": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
@@ -13853,6 +14443,12 @@
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
"dev": true
},
+ "source-map-js": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz",
+ "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==",
+ "dev": true
+ },
"source-map-resolve": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
@@ -14280,6 +14876,245 @@
"has-flag": "^3.0.0"
}
},
+ "svg-baker": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/svg-baker/-/svg-baker-1.7.0.tgz",
+ "integrity": "sha512-nibslMbkXOIkqKVrfcncwha45f97fGuAOn1G99YwnwTj8kF9YiM6XexPcUso97NxOm6GsP0SIvYVIosBis1xLg==",
+ "dev": true,
+ "requires": {
+ "bluebird": "^3.5.0",
+ "clone": "^2.1.1",
+ "he": "^1.1.1",
+ "image-size": "^0.5.1",
+ "loader-utils": "^1.1.0",
+ "merge-options": "1.0.1",
+ "micromatch": "3.1.0",
+ "postcss": "^5.2.17",
+ "postcss-prefix-selector": "^1.6.0",
+ "posthtml-rename-id": "^1.0",
+ "posthtml-svg-mode": "^1.0.3",
+ "query-string": "^4.3.2",
+ "traverse": "^0.6.6"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+ "dev": true
+ },
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
+ }
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.0.tgz",
+ "integrity": "sha512-3StSelAE+hnRvMs8IdVW7Uhk8CVed5tp+kLLGlBP6WiRAXS21GPGu/Nat4WNPXj2Eoc24B02SaeoyozPMfj0/g==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.2.2",
+ "define-property": "^1.0.0",
+ "extend-shallow": "^2.0.1",
+ "extglob": "^2.0.2",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^5.0.2",
+ "nanomatch": "^1.2.1",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ }
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "svg-baker-runtime": {
+ "version": "1.4.7",
+ "resolved": "https://registry.npmjs.org/svg-baker-runtime/-/svg-baker-runtime-1.4.7.tgz",
+ "integrity": "sha512-Zorfwwj5+lWjk/oxwSMsRdS2sPQQdTmmsvaSpzU+i9ZWi3zugHLt6VckWfnswphQP0LmOel3nggpF5nETbt6xw==",
+ "dev": true,
+ "requires": {
+ "deepmerge": "1.3.2",
+ "mitt": "1.1.2",
+ "svg-baker": "^1.7.0"
+ },
+ "dependencies": {
+ "deepmerge": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.3.2.tgz",
+ "integrity": "sha1-FmNpFinU2/42T6EqKk8KqGqjoFA=",
+ "dev": true
+ }
+ }
+ },
+ "svg-sprite-loader": {
+ "version": "6.0.9",
+ "resolved": "https://registry.npmjs.org/svg-sprite-loader/-/svg-sprite-loader-6.0.9.tgz",
+ "integrity": "sha512-V/F3iI1J/xWeO0cRXkEFvhujvBQ3deAPFlhip+AW00Hs+9gighu619mblucIWdRPmDMfcSWJD/ZuXf6HldIskw==",
+ "dev": true,
+ "requires": {
+ "bluebird": "^3.5.0",
+ "deepmerge": "1.3.2",
+ "domready": "1.0.8",
+ "escape-string-regexp": "1.0.5",
+ "loader-utils": "^1.1.0",
+ "svg-baker": "^1.5.0",
+ "svg-baker-runtime": "^1.4.7",
+ "url-slug": "2.0.0"
+ },
+ "dependencies": {
+ "deepmerge": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.3.2.tgz",
+ "integrity": "sha1-FmNpFinU2/42T6EqKk8KqGqjoFA=",
+ "dev": true
+ }
+ }
+ },
"svg-tags": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz",
@@ -14307,6 +15142,17 @@
"util.promisify": "~1.0.0"
},
"dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"util.promisify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz",
@@ -14727,6 +15573,12 @@
"punycode": "^2.1.0"
}
},
+ "traverse": {
+ "version": "0.6.6",
+ "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz",
+ "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=",
+ "dev": true
+ },
"tryer": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz",
@@ -14925,6 +15777,12 @@
"integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==",
"dev": true
},
+ "unidecode": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/unidecode/-/unidecode-0.1.8.tgz",
+ "integrity": "sha1-77swFTi8RSRqmsjFWdcvAVMFBT4=",
+ "dev": true
+ },
"union-value": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
@@ -15097,6 +15955,15 @@
"requires-port": "^1.0.0"
}
},
+ "url-slug": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/url-slug/-/url-slug-2.0.0.tgz",
+ "integrity": "sha1-p4nVrtSZXA2VrzM3etHVxo1NcCc=",
+ "dev": true,
+ "requires": {
+ "unidecode": "0.1.8"
+ }
+ },
"use": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
@@ -15263,6 +16130,19 @@
"source-map": "^0.5.6",
"tsconfig": "^7.0.0",
"vue-template-es2015-compiler": "^1.6.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"vue-loader": {
@@ -15671,6 +16551,17 @@
"integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
"dev": true
},
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
diff --git a/package.json b/package.json
index 25b0d78..defa84a 100644
--- a/package.json
+++ b/package.json
@@ -34,14 +34,19 @@
"@vue/eslint-config-standard": "^5.1.2",
"@vue/test-utils": "^1.0.3",
"babel-eslint": "^10.1.0",
+ "babel-plugin-dynamic-import-node": "^2.3.3",
+ "chalk": "^4.1.2",
+ "chokidar": "^3.5.2",
"eslint": "^6.7.2",
"eslint-plugin-import": "^2.20.2",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-promise": "^4.2.1",
"eslint-plugin-standard": "^4.0.0",
"eslint-plugin-vue": "^6.2.2",
+ "mock": "^0.1.1",
"sass": "^1.26.5",
"sass-loader": "^8.0.2",
+ "svg-sprite-loader": "^6.0.9",
"vue-template-compiler": "^2.6.11"
}
}
diff --git a/src/components/SvgIcon/index.vue b/src/components/SvgIcon/index.vue
index 27da76c..5c0f02a 100644
--- a/src/components/SvgIcon/index.vue
+++ b/src/components/SvgIcon/index.vue
@@ -1,10 +1,14 @@
-
diff --git a/mock/config.js b/mock/config.js
new file mode 100644
index 0000000..7d111e0
--- /dev/null
+++ b/mock/config.js
@@ -0,0 +1,15 @@
+// import { param2Obj } from './utils'
+
+const baseConfig = {
+ kaptcha: true
+}
+
+export default {
+ baseconfig: res => {
+ return {
+ code: 200,
+ success: true,
+ data: baseConfig
+ }
+ }
+}
diff --git a/mock/index.js b/mock/index.js
new file mode 100644
index 0000000..d2713dd
--- /dev/null
+++ b/mock/index.js
@@ -0,0 +1,70 @@
+const Mock = require('mockjs')
+const { param2Obj } = require('./utils')
+
+const user = require('./system/user')
+const resource = require('./system/resource')
+const dict = require('./system/dict')
+const dept = require('./system/dept')
+const area = require('./system/area')
+const role = require('./system/role')
+const log = require('./system/log')
+const config = require('./system/config')
+const search = require('./remote-search')
+
+const mocks = [
+ ...user,
+ ...resource,
+ ...dict,
+ ...area,
+ ...dept,
+ ...role,
+ ...log,
+ ...config,
+ ...search
+]
+
+// for front mock
+// please use it cautiously, it will redefine XMLHttpRequest,
+// which will cause many of your third-party libraries to be invalidated(like progress event).
+function mockXHR() {
+ // mock patch
+ // https://github.com/nuysoft/Mock/issues/300
+ Mock.XHR.prototype.proxy_send = Mock.XHR.prototype.send
+ Mock.XHR.prototype.send = function() {
+ if (this.custom.xhr) {
+ this.custom.xhr.withCredentials = this.withCredentials || false
+
+ if (this.responseType) {
+ this.custom.xhr.responseType = this.responseType
+ }
+ }
+ this.proxy_send(...arguments)
+ }
+
+ function XHR2ExpressReqWrap(respond) {
+ return function(options) {
+ let result = null
+ if (respond instanceof Function) {
+ const { body, type, url } = options
+ // https://expressjs.com/en/4x/api.html#req
+ result = respond({
+ method: type,
+ body: JSON.parse(body),
+ query: param2Obj(url)
+ })
+ } else {
+ result = respond
+ }
+ return Mock.mock(result)
+ }
+ }
+
+ for (const i of mocks) {
+ Mock.mock(new RegExp(i.url), i.type || 'get', XHR2ExpressReqWrap(i.response))
+ }
+}
+
+module.exports = {
+ mocks,
+ mockXHR
+}
diff --git a/mock/mock-server.js b/mock/mock-server.js
new file mode 100644
index 0000000..8941ec0
--- /dev/null
+++ b/mock/mock-server.js
@@ -0,0 +1,81 @@
+const chokidar = require('chokidar')
+const bodyParser = require('body-parser')
+const chalk = require('chalk')
+const path = require('path')
+const Mock = require('mockjs')
+
+const mockDir = path.join(process.cwd(), 'mock')
+
+function registerRoutes(app) {
+ let mockLastIndex
+ const { mocks } = require('./index.js')
+ const mocksForServer = mocks.map(route => {
+ return responseFake(route.url, route.type, route.response)
+ })
+ for (const mock of mocksForServer) {
+ app[mock.type](mock.url, mock.response)
+ mockLastIndex = app._router.stack.length
+ }
+ const mockRoutesLength = Object.keys(mocksForServer).length
+ return {
+ mockRoutesLength: mockRoutesLength,
+ mockStartIndex: mockLastIndex - mockRoutesLength
+ }
+}
+
+function unregisterRoutes() {
+ Object.keys(require.cache).forEach(i => {
+ if (i.includes(mockDir)) {
+ delete require.cache[require.resolve(i)]
+ }
+ })
+}
+
+// for mock server
+const responseFake = (url, type, respond) => {
+ return {
+ url: new RegExp(`${process.env.VUE_APP_BASE_API}${url}`),
+ type: type || 'get',
+ response(req, res) {
+ console.log('request invoke:' + req.path)
+ res.json(Mock.mock(respond instanceof Function ? respond(req, res) : respond))
+ }
+ }
+}
+
+module.exports = app => {
+ // parse app.body
+ // https://expressjs.com/en/4x/api.html#req.body
+ app.use(bodyParser.json())
+ app.use(bodyParser.urlencoded({
+ extended: true
+ }))
+
+ const mockRoutes = registerRoutes(app)
+ var mockRoutesLength = mockRoutes.mockRoutesLength
+ var mockStartIndex = mockRoutes.mockStartIndex
+
+ // watch files, hot reload mock server
+ chokidar.watch(mockDir, {
+ ignored: /mock-server/,
+ ignoreInitial: true
+ }).on('all', (event, path) => {
+ if (event === 'change' || event === 'add') {
+ try {
+ // remove mock routes stack
+ app._router.stack.splice(mockStartIndex, mockRoutesLength)
+
+ // clear routes cache
+ unregisterRoutes()
+
+ const mockRoutes = registerRoutes(app)
+ mockRoutesLength = mockRoutes.mockRoutesLength
+ mockStartIndex = mockRoutes.mockStartIndex
+
+ console.log(chalk.magentaBright(`\n > Mock Server hot reload success! changed ${path}`))
+ } catch (error) {
+ console.log(chalk.redBright(error))
+ }
+ }
+ })
+}
diff --git a/mock/remote-search.js b/mock/remote-search.js
new file mode 100644
index 0000000..b5164b1
--- /dev/null
+++ b/mock/remote-search.js
@@ -0,0 +1,51 @@
+const Mock = require('mockjs')
+
+const NameList = []
+const count = 100
+
+for (let i = 0; i < count; i++) {
+ NameList.push(Mock.mock({
+ name: '@first'
+ }))
+}
+NameList.push({ name: 'mock-Pan' })
+
+module.exports = [
+ // username search
+ {
+ url: '/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: '/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/mock/system/area.js b/mock/system/area.js
new file mode 100644
index 0000000..1586661
--- /dev/null
+++ b/mock/system/area.js
@@ -0,0 +1,130 @@
+const list = [
+ {
+ 'id': '11010100102',
+ 'lat': '',
+ 'level': 5,
+ 'levelName': '社区',
+ 'lng': '',
+ 'name': '测试社区3',
+ 'num': 1,
+ 'pid': '110101001',
+ 'pids': '[0],[110000],[110100],[110101],[110101001],',
+ 'simplename': '测试社区2'
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/area/listPage',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: list,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/area/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: [
+ {
+ 'id': '110000',
+ 'pid': '0',
+ 'name': '北京市',
+ 'level': 1,
+ 'pids': [0],
+ 'levelName': '省级',
+ 'simplename': '北京'
+ }
+ ]
+ }
+ }
+ },
+ {
+ url: '/area/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/area/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/area/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/code/levelType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '省级',
+ 'id': '166',
+ 'value': '1'
+ },
+ {
+ 'name': '市级',
+ 'id': '167',
+ 'value': '2'
+ },
+ {
+ 'name': '区级',
+ 'id': '168',
+ 'value': '3'
+ },
+ {
+ 'name': '街道',
+ 'id': '169',
+ 'value': '4'
+ },
+ {
+ 'name': '社区',
+ 'id': '170',
+ 'value': '5'
+ },
+ {
+ 'name': '网格',
+ 'id': '171',
+ 'value': '6'
+ },
+ {
+ 'name': '责任网格',
+ 'id': '172',
+ 'value': '7'
+ }
+ ]
+ }
+ }
+ }
+]
diff --git a/mock/system/config.js b/mock/system/config.js
new file mode 100644
index 0000000..652e41d
--- /dev/null
+++ b/mock/system/config.js
@@ -0,0 +1,18 @@
+module.exports = [
+ {
+ url: '/config/baseConfig',
+ type: 'get',
+ response: _ => {
+ return {
+ 'code': 200,
+ 'data': {
+ 'kaptcha': false,
+ 'publicKey': 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCu5k8gcTFJy5UtMfmtKiR3f/EcUe93kzfteRj6+sM5fHRvOib82+uqQMjgaRZiMcr3HiHIFY5vA6c+Rfb5R2COitoOhxyA9U2eLXknzxLUQIAqXAvKQO8KnerA1Qjcds7xhJB2XPhWFlY4RVtMT2wr2lMd29QDE4F/kzyDhNBpxwIDAQAB',
+ 'sid': 'f390b7d7-337b-431b-be22-fb860a6c04d4'
+ },
+ 'message': '请求成功',
+ 'success': true
+ }
+ }
+ }
+]
diff --git a/mock/system/dept.js b/mock/system/dept.js
new file mode 100644
index 0000000..2c19c94
--- /dev/null
+++ b/mock/system/dept.js
@@ -0,0 +1,88 @@
+const list = [
+ {
+ 'id': '1',
+ 'simplename': '二分公司',
+ 'fullname': '二分公司',
+ 'num': 1,
+ 'pid': '0',
+ 'pids': '[0,1,2]',
+ 'pName': '顶级',
+ 'version': '',
+ 'tips': ''
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/dept/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: list
+ }
+ }
+ }
+ },
+ {
+ url: '/dept/tree',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: [
+ {
+ 'id': '0',
+ 'pid': '',
+ 'name': '顶级',
+ 'open': 'false',
+ 'checked': ''
+ },
+ {
+ 'id': '26',
+ 'pid': '24',
+ 'name': '运行二所',
+ 'open': 'false',
+ 'checked': ''
+ }
+ ]
+ }
+ }
+ }
+ },
+ {
+ url: '/dept/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dept/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dept/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/system/dict.js b/mock/system/dict.js
new file mode 100644
index 0000000..60de4cd
--- /dev/null
+++ b/mock/system/dict.js
@@ -0,0 +1,69 @@
+const list = [
+ {
+ 'code': 'sysStatus',
+ 'num': 0,
+ 'name': '状态',
+ 'pid': '0',
+ 'id': '16',
+ 'detail': '1:启用:1;2:禁用:2',
+ 'tips': ''
+ },
+ {
+ 'code': 'sysSex',
+ 'num': 0,
+ 'name': '性别',
+ 'pid': '0',
+ 'id': '29',
+ 'detail': '1:男:1;2:女:2',
+ 'tips': ''
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/dict/listPage',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: list,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/system/log.js b/mock/system/log.js
new file mode 100644
index 0000000..9b6306e
--- /dev/null
+++ b/mock/system/log.js
@@ -0,0 +1,115 @@
+const logTypes = [
+ {
+ 'value': '0',
+ 'name': '业务日志'
+ },
+ {
+ 'value': '1',
+ 'name': '登录日志'
+ }
+]
+const loglist = [
+ {
+ 'id': 'c4cdba483fb1449aaad1e6c49353c6b3',
+ 'logtype': '业务日志',
+ 'createtime': '2019-04-04 14:23:31',
+ 'logname': '修改用户',
+ 'succeed': '成功',
+ 'deptid': '24',
+ 'deptName': '总公司',
+ 'message': '账号=yxssadmin...',
+ 'userName': 'bruser',
+ 'userid': '45'
+ }
+]
+const loginloglist = [
+ {
+ 'createtime': '2020-03-26 16:03:23',
+ 'logname': '登录日志',
+ 'succeed': '成功',
+ 'ip': '192.168.8.184',
+ 'deptid': '0',
+ 'message': '',
+ 'userName': '超级管理员',
+ 'userid': '1'
+ },
+ {
+ 'createtime': '2020-03-26 15:13:50',
+ 'logname': '登录日志',
+ 'succeed': '成功',
+ 'ip': '192.168.8.184',
+ 'deptid': '0',
+ 'message': '',
+ 'userName': '超级管理员',
+ 'userid': '1'
+ },
+ {
+ 'createtime': '2020-03-26 14:47:05',
+ 'logname': '登录日志',
+ 'succeed': '成功',
+ 'ip': '192.168.8.105',
+ 'deptid': '0',
+ 'message': '',
+ 'userName': '超级管理员',
+ 'userid': '1'
+ }]
+module.exports = [
+ {
+ url: '/loginLog/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: loginloglist,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/log/list',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: loglist,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/log/detail',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ 'createtime': '2020-03-26',
+ 'logtype': '业务日志',
+ 'classname': 'com.casic.missiles.modular.system.controller.RoleController',
+ 'method': 'dataAuthor',
+ 'logname': '数据权限配置',
+ 'succeed': '成功',
+ 'id': '1243081729056264193',
+ 'message': '角色名称=十一室管理员,资源名称=',
+ 'userName': '超级管理员',
+ 'regularMessage': '角色名称=十一室管理员,资源名称=',
+ 'userid': '1'
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/code/logType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: logTypes
+ }
+ }
+ }
+]
diff --git a/mock/system/resource.js b/mock/system/resource.js
new file mode 100644
index 0000000..1122ea8
--- /dev/null
+++ b/mock/system/resource.js
@@ -0,0 +1,1569 @@
+const tree = [
+ {
+ 'checked': false,
+ 'code': 'system',
+ 'id': '105',
+ 'name': '系统管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],',
+ 'pid': '1189107859077373954',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr',
+ 'id': '106',
+ 'name': '用户管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_add',
+ 'id': '107',
+ 'name': '添加用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_edit',
+ 'id': '108',
+ 'name': '修改用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_delete',
+ 'id': '109',
+ 'name': '删除用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_reset',
+ 'id': '110',
+ 'name': '重置密码',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_freeze',
+ 'id': '111',
+ 'name': '冻结用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_unfreeze',
+ 'id': '112',
+ 'name': '解除冻结用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_setRole',
+ 'id': '113',
+ 'name': '分配角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role',
+ 'id': '114',
+ 'name': '角色管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_add',
+ 'id': '115',
+ 'name': '添加角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_edit',
+ 'id': '116',
+ 'name': '修改角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_remove',
+ 'id': '117',
+ 'name': '删除角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_setAuthority',
+ 'id': '118',
+ 'name': '配置权限',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu',
+ 'id': '119',
+ 'name': '资源管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_add',
+ 'id': '120',
+ 'name': '添加菜单',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_edit',
+ 'id': '121',
+ 'name': '修改菜单',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_remove',
+ 'id': '122',
+ 'name': '删除菜单',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log',
+ 'id': '128',
+ 'name': '日志管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept',
+ 'id': '131',
+ 'name': '组织管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict',
+ 'id': '132',
+ 'name': '字典管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'loginLog',
+ 'id': '133',
+ 'name': '登录日志',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log_clean',
+ 'id': '134',
+ 'name': '清空日志',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'pid': '128',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_add',
+ 'id': '135',
+ 'name': '添加部门',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_update',
+ 'id': '136',
+ 'name': '修改部门',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_delete',
+ 'id': '137',
+ 'name': '删除部门',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_add',
+ 'id': '138',
+ 'name': '添加字典',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_update',
+ 'id': '139',
+ 'name': '修改字典',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_delete',
+ 'id': '140',
+ 'name': '删除字典',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_list',
+ 'id': '151',
+ 'name': '菜单列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_list',
+ 'id': '153',
+ 'name': '部门列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_detail',
+ 'id': '154',
+ 'name': '部门详情',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_list',
+ 'id': '156',
+ 'name': '字典列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_detail',
+ 'id': '157',
+ 'name': '字典详情',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log_list',
+ 'id': '158',
+ 'name': '日志列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'pid': '128',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log_detail',
+ 'id': '159',
+ 'name': '日志详情',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'pid': '128',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'del_login_log',
+ 'id': '160',
+ 'name': '清空登录日志',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'pid': '133',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'login_log_list',
+ 'id': '161',
+ 'name': '登录日志列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'pid': '133',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_list',
+ 'id': '164',
+ 'name': '角色列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_list',
+ 'id': '167',
+ 'name': '用户列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'data_author',
+ 'id': '1138364388198715393',
+ 'name': '数据权限',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'AreaAdmin',
+ 'id': '1170945119300976642',
+ 'name': '区域管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'sys',
+ 'id': '1189107859077373954',
+ 'name': '基础权限管理',
+ 'open': true,
+ 'pcodes': '[0],',
+ 'pid': '0',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_listPage',
+ 'id': '1191975090689810434',
+ 'name': '区域列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_add',
+ 'id': '1191975312815955969',
+ 'name': '新增区域',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_update',
+ 'id': '1191975427559530497',
+ 'name': '修改区域',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_delete',
+ 'id': '1191975543687225346',
+ 'name': '区域删除',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': true,
+ 'code': '',
+ 'id': '0',
+ 'name': '顶级',
+ 'open': true,
+ 'pcodes': '',
+ 'pid': '',
+ 'value': ''
+ }
+]
+const list = [
+ {
+ 'isopen': '1',
+ 'code': 'system',
+ 'pcode': 'sys',
+ 'num': 4,
+ 'icon': 'icon-setting',
+ 'pid': '1189107859077373954',
+ 'isMenu': '是',
+ 'url': '/system',
+ 'tips': '',
+ 'pcodes': '[0],[sys],',
+ 'name': '系统管理',
+ 'statusName': '启用',
+ 'id': '105',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': true,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr',
+ 'pcode': 'system',
+ 'num': 1,
+ 'icon': 'icon-user',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/mgr',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '用户管理',
+ 'statusName': '启用',
+ 'id': '106',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_add',
+ 'pcode': 'mgr',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '添加用户',
+ 'statusName': '启用',
+ 'id': '107',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_edit',
+ 'pcode': 'mgr',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '修改用户',
+ 'statusName': '启用',
+ 'id': '108',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_delete',
+ 'pcode': 'mgr',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '删除用户',
+ 'statusName': '启用',
+ 'id': '109',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_reset',
+ 'pcode': 'mgr',
+ 'num': 4,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/reset',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '重置密码',
+ 'statusName': '启用',
+ 'id': '110',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_freeze',
+ 'pcode': 'mgr',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/freeze',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '冻结用户',
+ 'statusName': '启用',
+ 'id': '111',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_unfreeze',
+ 'pcode': 'mgr',
+ 'num': 6,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/unfreeze',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '解除冻结用户',
+ 'statusName': '启用',
+ 'id': '112',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_setRole',
+ 'pcode': 'mgr',
+ 'num': 7,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/roleAssign',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '分配角色',
+ 'statusName': '启用',
+ 'id': '113',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role',
+ 'pcode': 'system',
+ 'num': 2,
+ 'icon': 'permission',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/role',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '角色管理',
+ 'statusName': '启用',
+ 'id': '114',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_add',
+ 'pcode': 'role',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '添加角色',
+ 'statusName': '启用',
+ 'id': '115',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_edit',
+ 'pcode': 'role',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '修改角色',
+ 'statusName': '启用',
+ 'id': '116',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_remove',
+ 'pcode': 'role',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '删除角色',
+ 'statusName': '启用',
+ 'id': '117',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_setAuthority',
+ 'pcode': 'role',
+ 'num': 4,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/funcAuthor',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '配置权限',
+ 'statusName': '启用',
+ 'id': '118',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu',
+ 'pcode': 'system',
+ 'num': 4,
+ 'icon': 'function',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/resource',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '资源管理',
+ 'statusName': '启用',
+ 'id': '119',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_add',
+ 'pcode': 'menu',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '添加菜单',
+ 'statusName': '启用',
+ 'id': '120',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_edit',
+ 'pcode': 'menu',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '修改菜单',
+ 'statusName': '启用',
+ 'id': '121',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_remove',
+ 'pcode': 'menu',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '删除菜单',
+ 'statusName': '启用',
+ 'id': '122',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log',
+ 'pcode': 'system',
+ 'num': 6,
+ 'icon': 'log',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/log',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '日志管理',
+ 'statusName': '启用',
+ 'id': '128',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept',
+ 'pcode': 'system',
+ 'num': 3,
+ 'icon': 'dept2',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/dept',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '组织管理',
+ 'statusName': '启用',
+ 'id': '131',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict',
+ 'pcode': 'system',
+ 'num': 4,
+ 'icon': 'icon-dict',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/dict',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '字典管理',
+ 'statusName': '启用',
+ 'id': '132',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'loginLog',
+ 'pcode': 'system',
+ 'num': 6,
+ 'icon': 'task',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/loginLog',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '登录日志',
+ 'statusName': '启用',
+ 'id': '133',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log_clean',
+ 'pcode': 'log',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '128',
+ 'isMenu': '不是',
+ 'url': '/log/delLog',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'name': '清空日志',
+ 'statusName': '启用',
+ 'id': '134',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_add',
+ 'pcode': 'dept',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '添加部门',
+ 'statusName': '启用',
+ 'id': '135',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_update',
+ 'pcode': 'dept',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '修改部门',
+ 'statusName': '启用',
+ 'id': '136',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_delete',
+ 'pcode': 'dept',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '删除部门',
+ 'statusName': '启用',
+ 'id': '137',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_add',
+ 'pcode': 'dict',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '添加字典',
+ 'statusName': '启用',
+ 'id': '138',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_update',
+ 'pcode': 'dict',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '修改字典',
+ 'statusName': '启用',
+ 'id': '139',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_delete',
+ 'pcode': 'dict',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '删除字典',
+ 'statusName': '启用',
+ 'id': '140',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_list',
+ 'pcode': 'menu',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '菜单列表',
+ 'statusName': '启用',
+ 'id': '151',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_list',
+ 'pcode': 'dept',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '部门列表',
+ 'statusName': '启用',
+ 'id': '153',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_detail',
+ 'pcode': 'dept',
+ 'num': 6,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/detail',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '部门详情',
+ 'statusName': '启用',
+ 'id': '154',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_list',
+ 'pcode': 'dict',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '字典列表',
+ 'statusName': '启用',
+ 'id': '156',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_detail',
+ 'pcode': 'dict',
+ 'num': 6,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/detail',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '字典详情',
+ 'statusName': '启用',
+ 'id': '157',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log_list',
+ 'pcode': 'log',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '128',
+ 'isMenu': '不是',
+ 'url': '/log/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'name': '日志列表',
+ 'statusName': '启用',
+ 'id': '158',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log_detail',
+ 'pcode': 'log',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '128',
+ 'isMenu': '不是',
+ 'url': '/log/detail',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'name': '日志详情',
+ 'statusName': '启用',
+ 'id': '159',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'del_login_log',
+ 'pcode': 'loginLog',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '133',
+ 'isMenu': '不是',
+ 'url': '/loginLog/delLoginLog',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'name': '清空登录日志',
+ 'statusName': '启用',
+ 'id': '160',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'login_log_list',
+ 'pcode': 'loginLog',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '133',
+ 'isMenu': '不是',
+ 'url': '/loginLog/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'name': '登录日志列表',
+ 'statusName': '启用',
+ 'id': '161',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_list',
+ 'pcode': 'role',
+ 'num': 7,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '角色列表',
+ 'statusName': '启用',
+ 'id': '164',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_list',
+ 'pcode': 'mgr',
+ 'num': 10,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': ' /mgr/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '用户列表',
+ 'statusName': '启用',
+ 'id': '167',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'data_author',
+ 'pcode': 'role',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/dataAuthor',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '数据权限',
+ 'statusName': '启用',
+ 'id': '1138364388198715393',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'AreaAdmin',
+ 'pcode': 'system',
+ 'num': 0,
+ 'icon': 'icon-base',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/area',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '区域管理',
+ 'statusName': '启用',
+ 'id': '1170945119300976642',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'sys',
+ 'pcode': '0',
+ 'num': 0,
+ 'icon': 'icon-setting',
+ 'pid': '0',
+ 'isMenu': '不是',
+ 'url': '/sys',
+ 'tips': '',
+ 'pcodes': '[0],',
+ 'name': '基础权限管理',
+ 'statusName': '启用',
+ 'id': '1189107859077373954',
+ 'ismenu': '0',
+ 'levels': 1,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '02'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_listPage',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/listPage',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '区域列表',
+ 'statusName': '启用',
+ 'id': '1191975090689810434',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_add',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '新增区域',
+ 'statusName': '启用',
+ 'id': '1191975312815955969',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_update',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '修改区域',
+ 'statusName': '启用',
+ 'id': '1191975427559530497',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_delete',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '区域删除',
+ 'statusName': '启用',
+ 'id': '1191975543687225346',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/resource/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: list
+ }
+ }
+ }
+ },
+
+ // mock get all roles form server
+ {
+ url: '/resource/tree',
+ type: 'get',
+ response: _ => {
+ return {
+ 'code': 200,
+ 'message': 'success',
+ 'data': {
+ 'list': tree
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/code/resourceType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '菜单',
+ 'id': '55',
+ 'value': '03'
+ },
+ {
+ 'name': '按钮',
+ 'id': '56',
+ 'value': '04'
+ }
+ ]
+ }
+ }
+ },
+ {
+ url: '/resource/treeListByRoleId',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {
+ 'list': tree
+ }
+ }
+ }
+ },
+ {
+ url: 'resource/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/resource/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/resource/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/system/role.js b/mock/system/role.js
new file mode 100644
index 0000000..508ac84
--- /dev/null
+++ b/mock/system/role.js
@@ -0,0 +1,207 @@
+const tree = [
+ {
+ "id":1,
+ "pid":"0",
+ "name":"超级管理员"
+ }
+]
+const list = [
+ {
+ "deptName":"顶级",
+ "pName":"",
+ "num":1,
+ "name":"超级管理员",
+ "deptid":"0",
+ "pid":"0",
+ "id":1,
+ "version":1,
+ "tips":"administrator"
+ },
+ {
+ "deptName":"高压管网分公司",
+ "pName":"超级管理员",
+ "num":2,
+ "name":"高压管网分公司系统管理员",
+ "deptid":"24",
+ "pid":1,
+ "id":2,
+ "version":"",
+ "tips":"rqadmin"
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/role/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: list
+ }
+ }
+ }
+ },
+
+ // mock get all roles form server
+ {
+ url: '/role/tree',
+ type: 'get',
+ response: _ => {
+ return {
+ 'code': 200,
+ 'message': 'success',
+ 'data': {
+ 'list': tree
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/code/roleType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '菜单',
+ 'id': '55',
+ 'value': '03'
+ },
+ {
+ 'name': '按钮',
+ 'id': '56',
+ 'value': '04'
+ }
+ ]
+ }
+ }
+ },
+ {
+ url: '/role/treeByUserId',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {
+ 'list': [
+ {
+ "id":1,
+ "pid":"0",
+ "name":"超级管理员",
+ "open":true,
+ "checked":false
+ }
+ ]
+ }
+ }
+ }
+ },
+ {
+ url: '/role/treeByRoleId',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {
+ 'list': [
+ {
+ "id":"26",
+ "pid":"24",
+ "name":"运行二所",
+ "open":true,
+ "checked":true
+ }
+ ]
+ }
+ }
+ }
+ },
+ {
+ url: '/role/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/role/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/role/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/role/funcAuthor',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/role/dataAuthor',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/code/dataScopeType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '全部',
+ 'id': '55',
+ 'value': '03'
+ },
+ {
+ 'name': '本部门',
+ 'id': '56',
+ 'value': '04'
+ },
+ {
+ 'name': '自定义',
+ 'id': '57',
+ 'value': '04'
+ }
+ ]
+ }
+ }
+ }
+]
diff --git a/mock/system/user.js b/mock/system/user.js
new file mode 100644
index 0000000..5601db9
--- /dev/null
+++ b/mock/system/user.js
@@ -0,0 +1,860 @@
+// 用户详情
+const userinfo = {
+ 'account': 'admin',
+ 'avatar': 'girl.gif',
+ 'dataScope': [
+ '0',
+ '1236854643826184194',
+ '1236856061500936193',
+ '1236856816081391617',
+ '1236856889875976194',
+ '1236856952987668481',
+ '1236857009937928194',
+ '1236857134915604482',
+ '1236857274443321346',
+ '1236857346400800770',
+ '1236857428776931330',
+ '1236857492744261633',
+ '1236857661695021057',
+ '1236857767731220481',
+ '1236857826057211905',
+ '1236857873113108481',
+ '1236857966566395906',
+ '1236858049731055618',
+ '1236858125752815618',
+ '1236858179561541633',
+ '1236858248830472194',
+ '1236858330946555905',
+ '1236858380556783617',
+ '1236858422894088194',
+ '1236858475780067330',
+ '1236858517333037058',
+ '1236858579396153346',
+ '1236858642176495618',
+ '1236858704961032194',
+ '1236858748544045057',
+ '1236858806672904193',
+ '1236858863296008193',
+ '1236858908317667330'
+ ],
+ 'deptId': '0',
+ 'deptName': '顶级',
+ 'devices': [],
+ 'id': '1',
+ 'ipAddr': '124.64.16.144',
+ 'name': '超超级管理员',
+ 'phone': '18200000000',
+ 'roleList': [
+ '1'
+ ],
+ 'roleNames': [
+ '超级管理员'
+ ],
+ 'roleTips': [
+ 'administrator'
+ ],
+ 'scopeType': '4',
+ 'targetId': '',
+ 'targetName': '',
+ 'tenantId': ''
+}
+const list = [
+ {
+ 'birthday': '2017-05-05 00:00:00',
+ 'deptName': '顶级',
+ 'createtime': '2016-01-29 08:49:53',
+ 'roleid': '1',
+ 'sex': '2',
+ 'deptid': '0',
+ 'avatar': 'girl.gif',
+ 'version': 25,
+ 'phone': '18200000000',
+ 'sexName': '女',
+ 'name': '超级管理员',
+ 'roleName': '超级管理员',
+ 'statusName': '启用',
+ 'id': '1',
+ 'account': 'admin',
+ 'email': 'sn93@qq.com',
+ 'status': '1'
+ }
+]
+// 权限列表
+const permisson = {
+ 'menus': [
+ {
+ 'children': '',
+ 'code': 'sys',
+ 'icon': 'icon-setting',
+ 'id': '1189107859077373954',
+ 'ismenu': '0',
+ 'levels': 1,
+ 'name': '基础权限管理',
+ 'num': 0,
+ 'parentId': '0',
+ 'resourceType': '02',
+ 'url': '/sys'
+ },
+ {
+ 'children': '',
+ 'code': 'data_author',
+ 'icon': '',
+ 'id': '1138364388198715393',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '数据权限',
+ 'num': 0,
+ 'parentId': '114',
+ 'resourceType': '0',
+ 'url': '/role/dataAuthor'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr',
+ 'icon': 'icon-user',
+ 'id': '106',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '用户管理',
+ 'num': 1,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/mgr'
+ },
+ {
+ 'children': '',
+ 'code': 'role',
+ 'icon': 'permission',
+ 'id': '114',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '角色管理',
+ 'num': 2,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/role'
+ },
+ {
+ 'children': '',
+ 'code': 'role_edit',
+ 'icon': '',
+ 'id': '116',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '修改角色',
+ 'num': 2,
+ 'parentId': '114',
+ 'resourceType': '0',
+ 'url': '/role/update'
+ },
+ {
+ 'children': '',
+ 'code': 'role_remove',
+ 'icon': '',
+ 'id': '117',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '删除角色',
+ 'num': 3,
+ 'parentId': '114',
+ 'resourceType': '0',
+ 'url': '/role/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'dept',
+ 'icon': 'dept2',
+ 'id': '131',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '组织管理',
+ 'num': 3,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/dept'
+ },
+ {
+ 'children': '',
+ 'code': 'menu',
+ 'icon': 'function',
+ 'id': '119',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '资源管理',
+ 'num': 4,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/resource'
+ },
+ {
+ 'children': '',
+ 'code': 'role_setAuthority',
+ 'icon': '',
+ 'id': '118',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '配置权限',
+ 'num': 4,
+ 'parentId': '114',
+ 'resourceType': '0',
+ 'url': '/role/funcAuthor'
+ },
+ {
+ 'children': '',
+ 'code': 'system',
+ 'icon': 'icon-setting',
+ 'id': '105',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '系统管理',
+ 'num': 4,
+ 'parentId': '1189107859077373954',
+ 'resourceType': '03',
+ 'url': '/system'
+ },
+ {
+ 'children': '',
+ 'code': 'menu_list',
+ 'icon': '',
+ 'id': '151',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '菜单列表',
+ 'num': 5,
+ 'parentId': '119',
+ 'resourceType': '0',
+ 'url': '/resource/list'
+ },
+ {
+ 'children': '',
+ 'code': 'loginLog',
+ 'icon': 'task',
+ 'id': '133',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '登录日志',
+ 'num': 6,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/loginLog'
+ },
+ {
+ 'children': '',
+ 'code': 'log',
+ 'icon': 'log',
+ 'id': '128',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '日志管理',
+ 'num': 6,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/log'
+ },
+ {
+ 'children': '',
+ 'code': 'AreaAdmin',
+ 'icon': 'icon-base',
+ 'id': '1170945119300976642',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'name': '区域管理',
+ 'num': 0,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/area'
+ },
+ {
+ 'children': '',
+ 'code': 'visitor_permission',
+ 'icon': '',
+ 'id': '1202403877222735874',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'name': '访客授权列表',
+ 'num': 0,
+ 'parentId': '1202403125913837569',
+ 'resourceType': '03',
+ 'url': '/acsPermission/listVisitorPerm'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_delete',
+ 'icon': '',
+ 'id': '137',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '删除部门',
+ 'num': 1,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'role_add',
+ 'icon': '',
+ 'id': '115',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加角色',
+ 'num': 1,
+ 'parentId': '114',
+ 'resourceType': '04',
+ 'url': '/role/add'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_add',
+ 'icon': '',
+ 'id': '138',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加字典',
+ 'num': 1,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/add'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_delete',
+ 'icon': '',
+ 'id': '140',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '删除字典',
+ 'num': 1,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_add',
+ 'icon': '',
+ 'id': '135',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加部门',
+ 'num': 1,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/add'
+ },
+ {
+ 'children': '',
+ 'code': 'del_login_log',
+ 'icon': '',
+ 'id': '160',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '清空登录日志',
+ 'num': 1,
+ 'parentId': '133',
+ 'resourceType': '04',
+ 'url': '/loginLog/delLoginLog'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_update',
+ 'icon': '',
+ 'id': '139',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '修改字典',
+ 'num': 1,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/update'
+ },
+ {
+ 'children': '',
+ 'code': 'menu_add',
+ 'icon': '',
+ 'id': '120',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加菜单',
+ 'num': 1,
+ 'parentId': '119',
+ 'resourceType': '04',
+ 'url': '/resource/add'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_add',
+ 'icon': '',
+ 'id': '107',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加用户',
+ 'num': 1,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/add'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_update',
+ 'icon': '',
+ 'id': '136',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '修改部门',
+ 'num': 1,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/update'
+ },
+ {
+ 'children': '',
+ 'code': 'menu_edit',
+ 'icon': '',
+ 'id': '121',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '修改菜单',
+ 'num': 2,
+ 'parentId': '119',
+ 'resourceType': '04',
+ 'url': '/resource/update'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_edit',
+ 'icon': '',
+ 'id': '108',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '修改用户',
+ 'num': 2,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/update'
+ },
+ {
+ 'children': '',
+ 'code': 'log_list',
+ 'icon': '',
+ 'id': '158',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '日志列表',
+ 'num': 2,
+ 'parentId': '128',
+ 'resourceType': '04',
+ 'url': '/log/list'
+ },
+ {
+ 'children': '',
+ 'code': 'login_log_list',
+ 'icon': '',
+ 'id': '161',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '登录日志列表',
+ 'num': 2,
+ 'parentId': '133',
+ 'resourceType': '04',
+ 'url': '/loginLog/list'
+ },
+ {
+ 'children': '',
+ 'code': 'log_clean',
+ 'icon': '',
+ 'id': '134',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '清空日志',
+ 'num': 3,
+ 'parentId': '128',
+ 'resourceType': '04',
+ 'url': '/log/delLog'
+ },
+ {
+ 'children': '',
+ 'code': 'log_detail',
+ 'icon': '',
+ 'id': '159',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '日志详情',
+ 'num': 3,
+ 'parentId': '128',
+ 'resourceType': '04',
+ 'url': '/log/detail'
+ },
+ {
+ 'children': '',
+ 'code': 'menu_remove',
+ 'icon': '',
+ 'id': '122',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '删除菜单',
+ 'num': 3,
+ 'parentId': '119',
+ 'resourceType': '04',
+ 'url': '/resource/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_delete',
+ 'icon': '',
+ 'id': '109',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '删除用户',
+ 'num': 3,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_reset',
+ 'icon': '',
+ 'id': '110',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '重置密码',
+ 'num': 4,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/reset'
+ },
+ {
+ 'children': '',
+ 'code': 'dict',
+ 'icon': 'icon-dict',
+ 'id': '132',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'name': '字典管理',
+ 'num': 4,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/user'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_list',
+ 'icon': '',
+ 'id': '153',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '部门列表',
+ 'num': 5,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/list'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_list',
+ 'icon': '',
+ 'id': '156',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '字典列表',
+ 'num': 5,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/list'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_freeze',
+ 'icon': '',
+ 'id': '111',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '冻结用户',
+ 'num': 5,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/freeze'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_detail',
+ 'icon': '',
+ 'id': '154',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '部门详情',
+ 'num': 6,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/detail'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_detail',
+ 'icon': '',
+ 'id': '157',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '字典详情',
+ 'num': 6,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/detail'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_unfreeze',
+ 'icon': '',
+ 'id': '112',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '解除冻结用户',
+ 'num': 6,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/unfreeze'
+ },
+ {
+ 'children': '',
+ 'code': 'role_list',
+ 'icon': '',
+ 'id': '164',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '角色列表',
+ 'num': 7,
+ 'parentId': '114',
+ 'resourceType': '04',
+ 'url': '/role/list'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_setRole',
+ 'icon': '',
+ 'id': '113',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '分配角色',
+ 'num': 7,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/roleAssign'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_list',
+ 'icon': '',
+ 'id': '167',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '用户列表',
+ 'num': 10,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': ' /mgr/list'
+ },
+ {
+ 'children': '',
+ 'code': 'area_add',
+ 'icon': '',
+ 'id': '1191975312815955969',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'name': '新增区域',
+ 'num': 0,
+ 'parentId': '1170945119300976642',
+ 'resourceType': '04',
+ 'url': '/area/add'
+ },
+ {
+ 'children': '',
+ 'code': 'area_delete',
+ 'icon': '',
+ 'id': '1191975543687225346',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'name': '区域删除',
+ 'num': 0,
+ 'parentId': '1170945119300976642',
+ 'resourceType': '04',
+ 'url': '/area/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'area_listPage',
+ 'icon': '',
+ 'id': '1191975090689810434',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'name': '区域列表',
+ 'num': 0,
+ 'parentId': '1170945119300976642',
+ 'resourceType': '04',
+ 'url': '/area/listPage'
+ },
+ {
+ 'children': '',
+ 'code': 'area_update',
+ 'icon': '',
+ 'id': '1191975427559530497',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'name': '修改区域',
+ 'num': 0,
+ 'parentId': '1170945119300976642',
+ 'resourceType': '04',
+ 'url': '/area/update'
+ }
+ ]
+}
+module.exports = [
+ {
+ url: '/user/login',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ success: true,
+ data: {
+ kaptcha: '',
+ token: '02deb42b-5298-431a-b690-d04573c18281'
+
+ }
+ }
+ }
+ },
+ {
+ url: '/user/info',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ success: true,
+ data: userinfo
+ }
+ }
+ },
+ {
+ url: '/user/permission',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ success: true,
+ data: permisson
+ }
+ }
+ },
+ {
+ url: '/user/logout',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ success: true
+ }
+ }
+ },
+ {
+ url: '/mgr/list',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: list,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/mgr/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/freeze',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/unfreeze',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/reset',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/roleAssign',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/changePwd',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/table.js b/mock/table.js
new file mode 100644
index 0000000..d3963f4
--- /dev/null
+++ b/mock/table.js
@@ -0,0 +1,20 @@
+import Mock from 'mockjs'
+
+module.exports = {
+ list: () => {
+ const items = Mock.mock({
+ 'items|30': [{
+ id: '@id',
+ title: '@sentence(10, 20)',
+ 'status|1': ['published', 'draft', 'deleted'],
+ author: 'name',
+ display_time: '@datetime',
+ pageviews: '@integer(300, 5000)'
+ }]
+ })
+ return {
+ code: 20000,
+ data: items
+ }
+ }
+}
diff --git a/mock/user.js b/mock/user.js
new file mode 100644
index 0000000..6edeeff
--- /dev/null
+++ b/mock/user.js
@@ -0,0 +1,70 @@
+import { param2Obj } from './utils'
+
+const tokens = {
+ admin: {
+ token: 'admin-token'
+ },
+ editor: {
+ token: 'editor-token'
+ }
+}
+
+const users = {
+ 'admin-token': {
+ roles: ['admin'],
+ btns: ['kaptcha'],
+ introduction: 'I am a 超级管理员',
+ avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif',
+ name: 'mock Admin'
+ },
+ 'editor-token': {
+ roles: ['editor'],
+ btns: [],
+ introduction: 'I am an editor',
+ avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif',
+ name: 'Normal Editor'
+ }
+}
+
+module.exports = {
+ login: res => {
+ const { username } = JSON.parse(res.body)
+ const data = tokens[username]
+
+ if (data) {
+ return {
+ code: 200,
+ success: true,
+ data
+ }
+ }
+ return {
+ code: 60204,
+ success: false,
+ message: '账号或密码错误.'
+ }
+ },
+ getInfo: res => {
+ const { token } = param2Obj(res.url)
+ const info = users[token]
+
+ if (info) {
+ return {
+ code: 200,
+ success: true,
+ data: info
+ }
+ }
+ return {
+ code: 50008,
+ success: false,
+ message: '登录失败,无法获取用户信息.'
+ }
+ },
+ logout: () => {
+ return {
+ code: 200,
+ success: true
+ }
+ }
+}
diff --git a/mock/utils.js b/mock/utils.js
new file mode 100644
index 0000000..8fc4926
--- /dev/null
+++ b/mock/utils.js
@@ -0,0 +1,51 @@
+const Mock = require('mockjs')
+
+const NameList = []
+const count = 100
+
+for (let i = 0; i < count; i++) {
+ NameList.push(Mock.mock({
+ name: '@first'
+ }))
+}
+NameList.push({ name: 'mock-Pan' })
+
+module.exports = [
+ // 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/package-lock.json b/package-lock.json
index b780dad..63c2f82 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -305,6 +305,19 @@
"@babel/helper-validator-identifier": "^7.14.5",
"chalk": "^2.0.0",
"js-tokens": "^4.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"@babel/parser": {
@@ -1273,6 +1286,19 @@
"@jest/source-map": "^24.9.0",
"chalk": "^2.0.1",
"slash": "^2.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"@jest/core": {
@@ -1317,6 +1343,17 @@
"integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
"dev": true
},
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"strip-ansi": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
@@ -1380,6 +1417,17 @@
"string-length": "^2.0.0"
},
"dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -1454,6 +1502,17 @@
"write-file-atomic": "2.4.1"
},
"dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -1507,6 +1566,17 @@
"integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
"dev": true
},
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"is-fullwidth-code-point": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
@@ -2328,6 +2398,19 @@
"request": "^2.88.2",
"semver": "^6.1.0",
"strip-ansi": "^6.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"@vue/component-compiler-utils": {
@@ -3082,6 +3165,19 @@
"babel-preset-jest": "^24.9.0",
"chalk": "^2.4.2",
"slash": "^2.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"babel-loader": {
@@ -3940,14 +4036,54 @@
"dev": true
},
"chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
}
},
"chardet": {
@@ -4364,6 +4500,19 @@
"@types/q": "^1.5.1",
"chalk": "^2.4.1",
"q": "^1.1.2"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"code-point-at": {
@@ -5231,6 +5380,17 @@
"integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=",
"dev": true
},
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"commander": {
"version": "2.15.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
@@ -5823,6 +5983,12 @@
}
}
},
+ "domready": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/domready/-/domready-1.0.8.tgz",
+ "integrity": "sha1-kfJS5Ze2Wvd+dFriTdAYXV4m1Yw=",
+ "dev": true
+ },
"domutils": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
@@ -6195,6 +6361,17 @@
"v8-compile-cache": "^2.0.3"
},
"dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"eslint-scope": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
@@ -8218,6 +8395,12 @@
"integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
"dev": true
},
+ "image-size": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
+ "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=",
+ "dev": true
+ },
"import-cwd": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz",
@@ -9144,6 +9327,19 @@
"prompts": "^2.0.1",
"realpath-native": "^1.1.0",
"yargs": "^13.3.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
}
}
@@ -9182,6 +9378,19 @@
"micromatch": "^3.1.10",
"pretty-format": "^24.9.0",
"realpath-native": "^1.1.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-diff": {
@@ -9194,6 +9403,19 @@
"diff-sequences": "^24.9.0",
"jest-get-type": "^24.9.0",
"pretty-format": "^24.9.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-docblock": {
@@ -9216,6 +9438,19 @@
"jest-get-type": "^24.9.0",
"jest-util": "^24.9.0",
"pretty-format": "^24.9.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-environment-jsdom": {
@@ -9437,6 +9672,19 @@
"jest-util": "^24.9.0",
"pretty-format": "^24.9.0",
"throat": "^4.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-leak-detector": {
@@ -9459,6 +9707,19 @@
"jest-diff": "^24.9.0",
"jest-get-type": "^24.9.0",
"pretty-format": "^24.9.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-message-util": {
@@ -9475,6 +9736,19 @@
"micromatch": "^3.1.10",
"slash": "^2.0.0",
"stack-utils": "^1.0.1"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-mock": {
@@ -9509,6 +9783,19 @@
"chalk": "^2.0.1",
"jest-pnp-resolver": "^1.2.1",
"realpath-native": "^1.1.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-resolve-dependencies": {
@@ -9547,6 +9834,19 @@
"jest-worker": "^24.6.0",
"source-map-support": "^0.5.6",
"throat": "^4.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-runtime": {
@@ -9578,6 +9878,19 @@
"slash": "^2.0.0",
"strip-bom": "^3.0.0",
"yargs": "^13.3.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-serializer": {
@@ -9614,6 +9927,19 @@
"natural-compare": "^1.4.0",
"pretty-format": "^24.9.0",
"semver": "^6.2.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-transform-stub": {
@@ -9642,6 +9968,17 @@
"source-map": "^0.6.0"
},
"dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"ci-info": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
@@ -9684,6 +10021,17 @@
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
"dev": true
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
}
}
},
@@ -9711,6 +10059,17 @@
"type-fest": "^0.21.3"
}
},
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"slash": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
@@ -9764,6 +10123,17 @@
"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
"integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
"dev": true
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
}
}
},
@@ -9788,6 +10158,12 @@
}
}
},
+ "js-base64": {
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz",
+ "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==",
+ "dev": true
+ },
"js-beautify": {
"version": "1.14.0",
"resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.14.0.tgz",
@@ -9993,6 +10369,19 @@
"requires": {
"chalk": "^2.3.0",
"shell-quote": "^1.6.1"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"launch-editor-middleware": {
@@ -10499,6 +10888,19 @@
"dev": true,
"requires": {
"chalk": "^2.0.1"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"log-update": {
@@ -10646,6 +11048,23 @@
"integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
"dev": true
},
+ "merge-options": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-1.0.1.tgz",
+ "integrity": "sha512-iuPV41VWKWBIOpBsjoxjDZw8/GbSfZ2mk7N1453bwMrfzdrIk7EzBd+8UVR6rkw67th7xnk9Dytl3J+lHPdxvg==",
+ "dev": true,
+ "requires": {
+ "is-plain-obj": "^1.1"
+ },
+ "dependencies": {
+ "is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
+ "dev": true
+ }
+ }
+ },
"merge-source-map": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz",
@@ -10846,6 +11265,12 @@
"through2": "^2.0.0"
}
},
+ "mitt": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.1.2.tgz",
+ "integrity": "sha1-OA5hSA1qYVtmDwertg1R4KTkvtY=",
+ "dev": true
+ },
"mixin-deep": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
@@ -10876,6 +11301,12 @@
"minimist": "^1.2.5"
}
},
+ "mock": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/mock/-/mock-0.1.1.tgz",
+ "integrity": "sha1-5+NYnH5rM3bWn1o+RwtWYEQXxjM=",
+ "dev": true
+ },
"mockjs": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/mockjs/-/mockjs-1.1.0.tgz",
@@ -10943,6 +11374,12 @@
"thenify-all": "^1.0.0"
}
},
+ "nanoid": {
+ "version": "3.1.25",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz",
+ "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==",
+ "dev": true
+ },
"nanomatch": {
"version": "1.2.13",
"resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
@@ -11426,6 +11863,17 @@
"wcwidth": "^1.0.1"
},
"dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"strip-ansi": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
@@ -11877,6 +12325,28 @@
"supports-color": "^6.1.0"
},
"dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -12370,6 +12840,28 @@
}
}
},
+ "postcss-prefix-selector": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/postcss-prefix-selector/-/postcss-prefix-selector-1.10.0.tgz",
+ "integrity": "sha512-VcC/zCXVfFdGyn+Fo9+mxnxBu+hT61uMJJBdfWBbIeDrcE6g8s+26SUPTMpz8kc9wfoLpJGAZZ4QwbVqwxpNRA==",
+ "dev": true,
+ "requires": {
+ "postcss": "^8.2.10"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "8.3.6",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.6.tgz",
+ "integrity": "sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A==",
+ "dev": true,
+ "requires": {
+ "colorette": "^1.2.2",
+ "nanoid": "^3.1.23",
+ "source-map-js": "^0.6.2"
+ }
+ }
+ }
+ },
"postcss-reduce-initial": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz",
@@ -12448,6 +12940,104 @@
"integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
"dev": true
},
+ "posthtml": {
+ "version": "0.9.2",
+ "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.9.2.tgz",
+ "integrity": "sha1-9MBtufZ7Yf0XxOJW5+PZUVv3Jv0=",
+ "dev": true,
+ "requires": {
+ "posthtml-parser": "^0.2.0",
+ "posthtml-render": "^1.0.5"
+ }
+ },
+ "posthtml-parser": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.2.1.tgz",
+ "integrity": "sha1-NdUw3jhnQMK6JP8usvrznM3ycd0=",
+ "dev": true,
+ "requires": {
+ "htmlparser2": "^3.8.3",
+ "isobject": "^2.1.0"
+ },
+ "dependencies": {
+ "domhandler": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
+ "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1"
+ }
+ },
+ "entities": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
+ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
+ "dev": true
+ },
+ "htmlparser2": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
+ "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^1.3.1",
+ "domhandler": "^2.3.0",
+ "domutils": "^1.5.1",
+ "entities": "^1.1.1",
+ "inherits": "^2.0.1",
+ "readable-stream": "^3.1.1"
+ }
+ },
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ },
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ }
+ }
+ },
+ "posthtml-rename-id": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/posthtml-rename-id/-/posthtml-rename-id-1.0.12.tgz",
+ "integrity": "sha512-UKXf9OF/no8WZo9edRzvuMenb6AD5hDLzIepJW+a4oJT+T/Lx7vfMYWT4aWlGNQh0WMhnUx1ipN9OkZ9q+ddEw==",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "1.0.5"
+ }
+ },
+ "posthtml-render": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-1.4.0.tgz",
+ "integrity": "sha512-W1779iVHGfq0Fvh2PROhCe2QhB8mEErgqzo1wpIt36tCgChafP+hbXIhLDOM8ePJrZcFs0vkNEtdibEWVqChqw==",
+ "dev": true
+ },
+ "posthtml-svg-mode": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/posthtml-svg-mode/-/posthtml-svg-mode-1.0.3.tgz",
+ "integrity": "sha512-hEqw9NHZ9YgJ2/0G7CECOeuLQKZi8HjWLkBaSVtOWjygQ9ZD8P7tqeowYs7WrFdKsWEKG7o+IlsPY8jrr0CJpQ==",
+ "dev": true,
+ "requires": {
+ "merge-options": "1.0.1",
+ "posthtml": "^0.9.2",
+ "posthtml-parser": "^0.2.1",
+ "posthtml-render": "^1.0.6"
+ }
+ },
"prelude-ls": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
@@ -13853,6 +14443,12 @@
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
"dev": true
},
+ "source-map-js": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz",
+ "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==",
+ "dev": true
+ },
"source-map-resolve": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
@@ -14280,6 +14876,245 @@
"has-flag": "^3.0.0"
}
},
+ "svg-baker": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/svg-baker/-/svg-baker-1.7.0.tgz",
+ "integrity": "sha512-nibslMbkXOIkqKVrfcncwha45f97fGuAOn1G99YwnwTj8kF9YiM6XexPcUso97NxOm6GsP0SIvYVIosBis1xLg==",
+ "dev": true,
+ "requires": {
+ "bluebird": "^3.5.0",
+ "clone": "^2.1.1",
+ "he": "^1.1.1",
+ "image-size": "^0.5.1",
+ "loader-utils": "^1.1.0",
+ "merge-options": "1.0.1",
+ "micromatch": "3.1.0",
+ "postcss": "^5.2.17",
+ "postcss-prefix-selector": "^1.6.0",
+ "posthtml-rename-id": "^1.0",
+ "posthtml-svg-mode": "^1.0.3",
+ "query-string": "^4.3.2",
+ "traverse": "^0.6.6"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+ "dev": true
+ },
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
+ }
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.0.tgz",
+ "integrity": "sha512-3StSelAE+hnRvMs8IdVW7Uhk8CVed5tp+kLLGlBP6WiRAXS21GPGu/Nat4WNPXj2Eoc24B02SaeoyozPMfj0/g==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.2.2",
+ "define-property": "^1.0.0",
+ "extend-shallow": "^2.0.1",
+ "extglob": "^2.0.2",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^5.0.2",
+ "nanomatch": "^1.2.1",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ }
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "svg-baker-runtime": {
+ "version": "1.4.7",
+ "resolved": "https://registry.npmjs.org/svg-baker-runtime/-/svg-baker-runtime-1.4.7.tgz",
+ "integrity": "sha512-Zorfwwj5+lWjk/oxwSMsRdS2sPQQdTmmsvaSpzU+i9ZWi3zugHLt6VckWfnswphQP0LmOel3nggpF5nETbt6xw==",
+ "dev": true,
+ "requires": {
+ "deepmerge": "1.3.2",
+ "mitt": "1.1.2",
+ "svg-baker": "^1.7.0"
+ },
+ "dependencies": {
+ "deepmerge": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.3.2.tgz",
+ "integrity": "sha1-FmNpFinU2/42T6EqKk8KqGqjoFA=",
+ "dev": true
+ }
+ }
+ },
+ "svg-sprite-loader": {
+ "version": "6.0.9",
+ "resolved": "https://registry.npmjs.org/svg-sprite-loader/-/svg-sprite-loader-6.0.9.tgz",
+ "integrity": "sha512-V/F3iI1J/xWeO0cRXkEFvhujvBQ3deAPFlhip+AW00Hs+9gighu619mblucIWdRPmDMfcSWJD/ZuXf6HldIskw==",
+ "dev": true,
+ "requires": {
+ "bluebird": "^3.5.0",
+ "deepmerge": "1.3.2",
+ "domready": "1.0.8",
+ "escape-string-regexp": "1.0.5",
+ "loader-utils": "^1.1.0",
+ "svg-baker": "^1.5.0",
+ "svg-baker-runtime": "^1.4.7",
+ "url-slug": "2.0.0"
+ },
+ "dependencies": {
+ "deepmerge": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.3.2.tgz",
+ "integrity": "sha1-FmNpFinU2/42T6EqKk8KqGqjoFA=",
+ "dev": true
+ }
+ }
+ },
"svg-tags": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz",
@@ -14307,6 +15142,17 @@
"util.promisify": "~1.0.0"
},
"dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"util.promisify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz",
@@ -14727,6 +15573,12 @@
"punycode": "^2.1.0"
}
},
+ "traverse": {
+ "version": "0.6.6",
+ "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz",
+ "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=",
+ "dev": true
+ },
"tryer": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz",
@@ -14925,6 +15777,12 @@
"integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==",
"dev": true
},
+ "unidecode": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/unidecode/-/unidecode-0.1.8.tgz",
+ "integrity": "sha1-77swFTi8RSRqmsjFWdcvAVMFBT4=",
+ "dev": true
+ },
"union-value": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
@@ -15097,6 +15955,15 @@
"requires-port": "^1.0.0"
}
},
+ "url-slug": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/url-slug/-/url-slug-2.0.0.tgz",
+ "integrity": "sha1-p4nVrtSZXA2VrzM3etHVxo1NcCc=",
+ "dev": true,
+ "requires": {
+ "unidecode": "0.1.8"
+ }
+ },
"use": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
@@ -15263,6 +16130,19 @@
"source-map": "^0.5.6",
"tsconfig": "^7.0.0",
"vue-template-es2015-compiler": "^1.6.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"vue-loader": {
@@ -15671,6 +16551,17 @@
"integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
"dev": true
},
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
diff --git a/package.json b/package.json
index 25b0d78..defa84a 100644
--- a/package.json
+++ b/package.json
@@ -34,14 +34,19 @@
"@vue/eslint-config-standard": "^5.1.2",
"@vue/test-utils": "^1.0.3",
"babel-eslint": "^10.1.0",
+ "babel-plugin-dynamic-import-node": "^2.3.3",
+ "chalk": "^4.1.2",
+ "chokidar": "^3.5.2",
"eslint": "^6.7.2",
"eslint-plugin-import": "^2.20.2",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-promise": "^4.2.1",
"eslint-plugin-standard": "^4.0.0",
"eslint-plugin-vue": "^6.2.2",
+ "mock": "^0.1.1",
"sass": "^1.26.5",
"sass-loader": "^8.0.2",
+ "svg-sprite-loader": "^6.0.9",
"vue-template-compiler": "^2.6.11"
}
}
diff --git a/src/components/SvgIcon/index.vue b/src/components/SvgIcon/index.vue
index 27da76c..5c0f02a 100644
--- a/src/components/SvgIcon/index.vue
+++ b/src/components/SvgIcon/index.vue
@@ -1,10 +1,14 @@
-
+
+
diff --git a/src/layout/components/Sidebar/FixiOSBug.js b/src/layout/components/Sidebar/FixiOSBug.js
new file mode 100644
index 0000000..bc14856
--- /dev/null
+++ b/src/layout/components/Sidebar/FixiOSBug.js
@@ -0,0 +1,26 @@
+export default {
+ computed: {
+ device() {
+ return this.$store.state.app.device
+ }
+ },
+ mounted() {
+ // In order to fix the click on menu on the ios device will trigger the mouseleave bug
+ // https://github.com/PanJiaChen/vue-element-admin/issues/1135
+ this.fixBugIniOS()
+ },
+ methods: {
+ fixBugIniOS() {
+ const $subMenu = this.$refs.subMenu
+ if ($subMenu) {
+ const handleMouseleave = $subMenu.handleMouseleave
+ $subMenu.handleMouseleave = (e) => {
+ if (this.device === 'mobile') {
+ return
+ }
+ handleMouseleave(e)
+ }
+ }
+ }
+ }
+}
diff --git a/mock/config.js b/mock/config.js
new file mode 100644
index 0000000..7d111e0
--- /dev/null
+++ b/mock/config.js
@@ -0,0 +1,15 @@
+// import { param2Obj } from './utils'
+
+const baseConfig = {
+ kaptcha: true
+}
+
+export default {
+ baseconfig: res => {
+ return {
+ code: 200,
+ success: true,
+ data: baseConfig
+ }
+ }
+}
diff --git a/mock/index.js b/mock/index.js
new file mode 100644
index 0000000..d2713dd
--- /dev/null
+++ b/mock/index.js
@@ -0,0 +1,70 @@
+const Mock = require('mockjs')
+const { param2Obj } = require('./utils')
+
+const user = require('./system/user')
+const resource = require('./system/resource')
+const dict = require('./system/dict')
+const dept = require('./system/dept')
+const area = require('./system/area')
+const role = require('./system/role')
+const log = require('./system/log')
+const config = require('./system/config')
+const search = require('./remote-search')
+
+const mocks = [
+ ...user,
+ ...resource,
+ ...dict,
+ ...area,
+ ...dept,
+ ...role,
+ ...log,
+ ...config,
+ ...search
+]
+
+// for front mock
+// please use it cautiously, it will redefine XMLHttpRequest,
+// which will cause many of your third-party libraries to be invalidated(like progress event).
+function mockXHR() {
+ // mock patch
+ // https://github.com/nuysoft/Mock/issues/300
+ Mock.XHR.prototype.proxy_send = Mock.XHR.prototype.send
+ Mock.XHR.prototype.send = function() {
+ if (this.custom.xhr) {
+ this.custom.xhr.withCredentials = this.withCredentials || false
+
+ if (this.responseType) {
+ this.custom.xhr.responseType = this.responseType
+ }
+ }
+ this.proxy_send(...arguments)
+ }
+
+ function XHR2ExpressReqWrap(respond) {
+ return function(options) {
+ let result = null
+ if (respond instanceof Function) {
+ const { body, type, url } = options
+ // https://expressjs.com/en/4x/api.html#req
+ result = respond({
+ method: type,
+ body: JSON.parse(body),
+ query: param2Obj(url)
+ })
+ } else {
+ result = respond
+ }
+ return Mock.mock(result)
+ }
+ }
+
+ for (const i of mocks) {
+ Mock.mock(new RegExp(i.url), i.type || 'get', XHR2ExpressReqWrap(i.response))
+ }
+}
+
+module.exports = {
+ mocks,
+ mockXHR
+}
diff --git a/mock/mock-server.js b/mock/mock-server.js
new file mode 100644
index 0000000..8941ec0
--- /dev/null
+++ b/mock/mock-server.js
@@ -0,0 +1,81 @@
+const chokidar = require('chokidar')
+const bodyParser = require('body-parser')
+const chalk = require('chalk')
+const path = require('path')
+const Mock = require('mockjs')
+
+const mockDir = path.join(process.cwd(), 'mock')
+
+function registerRoutes(app) {
+ let mockLastIndex
+ const { mocks } = require('./index.js')
+ const mocksForServer = mocks.map(route => {
+ return responseFake(route.url, route.type, route.response)
+ })
+ for (const mock of mocksForServer) {
+ app[mock.type](mock.url, mock.response)
+ mockLastIndex = app._router.stack.length
+ }
+ const mockRoutesLength = Object.keys(mocksForServer).length
+ return {
+ mockRoutesLength: mockRoutesLength,
+ mockStartIndex: mockLastIndex - mockRoutesLength
+ }
+}
+
+function unregisterRoutes() {
+ Object.keys(require.cache).forEach(i => {
+ if (i.includes(mockDir)) {
+ delete require.cache[require.resolve(i)]
+ }
+ })
+}
+
+// for mock server
+const responseFake = (url, type, respond) => {
+ return {
+ url: new RegExp(`${process.env.VUE_APP_BASE_API}${url}`),
+ type: type || 'get',
+ response(req, res) {
+ console.log('request invoke:' + req.path)
+ res.json(Mock.mock(respond instanceof Function ? respond(req, res) : respond))
+ }
+ }
+}
+
+module.exports = app => {
+ // parse app.body
+ // https://expressjs.com/en/4x/api.html#req.body
+ app.use(bodyParser.json())
+ app.use(bodyParser.urlencoded({
+ extended: true
+ }))
+
+ const mockRoutes = registerRoutes(app)
+ var mockRoutesLength = mockRoutes.mockRoutesLength
+ var mockStartIndex = mockRoutes.mockStartIndex
+
+ // watch files, hot reload mock server
+ chokidar.watch(mockDir, {
+ ignored: /mock-server/,
+ ignoreInitial: true
+ }).on('all', (event, path) => {
+ if (event === 'change' || event === 'add') {
+ try {
+ // remove mock routes stack
+ app._router.stack.splice(mockStartIndex, mockRoutesLength)
+
+ // clear routes cache
+ unregisterRoutes()
+
+ const mockRoutes = registerRoutes(app)
+ mockRoutesLength = mockRoutes.mockRoutesLength
+ mockStartIndex = mockRoutes.mockStartIndex
+
+ console.log(chalk.magentaBright(`\n > Mock Server hot reload success! changed ${path}`))
+ } catch (error) {
+ console.log(chalk.redBright(error))
+ }
+ }
+ })
+}
diff --git a/mock/remote-search.js b/mock/remote-search.js
new file mode 100644
index 0000000..b5164b1
--- /dev/null
+++ b/mock/remote-search.js
@@ -0,0 +1,51 @@
+const Mock = require('mockjs')
+
+const NameList = []
+const count = 100
+
+for (let i = 0; i < count; i++) {
+ NameList.push(Mock.mock({
+ name: '@first'
+ }))
+}
+NameList.push({ name: 'mock-Pan' })
+
+module.exports = [
+ // username search
+ {
+ url: '/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: '/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/mock/system/area.js b/mock/system/area.js
new file mode 100644
index 0000000..1586661
--- /dev/null
+++ b/mock/system/area.js
@@ -0,0 +1,130 @@
+const list = [
+ {
+ 'id': '11010100102',
+ 'lat': '',
+ 'level': 5,
+ 'levelName': '社区',
+ 'lng': '',
+ 'name': '测试社区3',
+ 'num': 1,
+ 'pid': '110101001',
+ 'pids': '[0],[110000],[110100],[110101],[110101001],',
+ 'simplename': '测试社区2'
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/area/listPage',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: list,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/area/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: [
+ {
+ 'id': '110000',
+ 'pid': '0',
+ 'name': '北京市',
+ 'level': 1,
+ 'pids': [0],
+ 'levelName': '省级',
+ 'simplename': '北京'
+ }
+ ]
+ }
+ }
+ },
+ {
+ url: '/area/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/area/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/area/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/code/levelType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '省级',
+ 'id': '166',
+ 'value': '1'
+ },
+ {
+ 'name': '市级',
+ 'id': '167',
+ 'value': '2'
+ },
+ {
+ 'name': '区级',
+ 'id': '168',
+ 'value': '3'
+ },
+ {
+ 'name': '街道',
+ 'id': '169',
+ 'value': '4'
+ },
+ {
+ 'name': '社区',
+ 'id': '170',
+ 'value': '5'
+ },
+ {
+ 'name': '网格',
+ 'id': '171',
+ 'value': '6'
+ },
+ {
+ 'name': '责任网格',
+ 'id': '172',
+ 'value': '7'
+ }
+ ]
+ }
+ }
+ }
+]
diff --git a/mock/system/config.js b/mock/system/config.js
new file mode 100644
index 0000000..652e41d
--- /dev/null
+++ b/mock/system/config.js
@@ -0,0 +1,18 @@
+module.exports = [
+ {
+ url: '/config/baseConfig',
+ type: 'get',
+ response: _ => {
+ return {
+ 'code': 200,
+ 'data': {
+ 'kaptcha': false,
+ 'publicKey': 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCu5k8gcTFJy5UtMfmtKiR3f/EcUe93kzfteRj6+sM5fHRvOib82+uqQMjgaRZiMcr3HiHIFY5vA6c+Rfb5R2COitoOhxyA9U2eLXknzxLUQIAqXAvKQO8KnerA1Qjcds7xhJB2XPhWFlY4RVtMT2wr2lMd29QDE4F/kzyDhNBpxwIDAQAB',
+ 'sid': 'f390b7d7-337b-431b-be22-fb860a6c04d4'
+ },
+ 'message': '请求成功',
+ 'success': true
+ }
+ }
+ }
+]
diff --git a/mock/system/dept.js b/mock/system/dept.js
new file mode 100644
index 0000000..2c19c94
--- /dev/null
+++ b/mock/system/dept.js
@@ -0,0 +1,88 @@
+const list = [
+ {
+ 'id': '1',
+ 'simplename': '二分公司',
+ 'fullname': '二分公司',
+ 'num': 1,
+ 'pid': '0',
+ 'pids': '[0,1,2]',
+ 'pName': '顶级',
+ 'version': '',
+ 'tips': ''
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/dept/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: list
+ }
+ }
+ }
+ },
+ {
+ url: '/dept/tree',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: [
+ {
+ 'id': '0',
+ 'pid': '',
+ 'name': '顶级',
+ 'open': 'false',
+ 'checked': ''
+ },
+ {
+ 'id': '26',
+ 'pid': '24',
+ 'name': '运行二所',
+ 'open': 'false',
+ 'checked': ''
+ }
+ ]
+ }
+ }
+ }
+ },
+ {
+ url: '/dept/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dept/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dept/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/system/dict.js b/mock/system/dict.js
new file mode 100644
index 0000000..60de4cd
--- /dev/null
+++ b/mock/system/dict.js
@@ -0,0 +1,69 @@
+const list = [
+ {
+ 'code': 'sysStatus',
+ 'num': 0,
+ 'name': '状态',
+ 'pid': '0',
+ 'id': '16',
+ 'detail': '1:启用:1;2:禁用:2',
+ 'tips': ''
+ },
+ {
+ 'code': 'sysSex',
+ 'num': 0,
+ 'name': '性别',
+ 'pid': '0',
+ 'id': '29',
+ 'detail': '1:男:1;2:女:2',
+ 'tips': ''
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/dict/listPage',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: list,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/system/log.js b/mock/system/log.js
new file mode 100644
index 0000000..9b6306e
--- /dev/null
+++ b/mock/system/log.js
@@ -0,0 +1,115 @@
+const logTypes = [
+ {
+ 'value': '0',
+ 'name': '业务日志'
+ },
+ {
+ 'value': '1',
+ 'name': '登录日志'
+ }
+]
+const loglist = [
+ {
+ 'id': 'c4cdba483fb1449aaad1e6c49353c6b3',
+ 'logtype': '业务日志',
+ 'createtime': '2019-04-04 14:23:31',
+ 'logname': '修改用户',
+ 'succeed': '成功',
+ 'deptid': '24',
+ 'deptName': '总公司',
+ 'message': '账号=yxssadmin...',
+ 'userName': 'bruser',
+ 'userid': '45'
+ }
+]
+const loginloglist = [
+ {
+ 'createtime': '2020-03-26 16:03:23',
+ 'logname': '登录日志',
+ 'succeed': '成功',
+ 'ip': '192.168.8.184',
+ 'deptid': '0',
+ 'message': '',
+ 'userName': '超级管理员',
+ 'userid': '1'
+ },
+ {
+ 'createtime': '2020-03-26 15:13:50',
+ 'logname': '登录日志',
+ 'succeed': '成功',
+ 'ip': '192.168.8.184',
+ 'deptid': '0',
+ 'message': '',
+ 'userName': '超级管理员',
+ 'userid': '1'
+ },
+ {
+ 'createtime': '2020-03-26 14:47:05',
+ 'logname': '登录日志',
+ 'succeed': '成功',
+ 'ip': '192.168.8.105',
+ 'deptid': '0',
+ 'message': '',
+ 'userName': '超级管理员',
+ 'userid': '1'
+ }]
+module.exports = [
+ {
+ url: '/loginLog/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: loginloglist,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/log/list',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: loglist,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/log/detail',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ 'createtime': '2020-03-26',
+ 'logtype': '业务日志',
+ 'classname': 'com.casic.missiles.modular.system.controller.RoleController',
+ 'method': 'dataAuthor',
+ 'logname': '数据权限配置',
+ 'succeed': '成功',
+ 'id': '1243081729056264193',
+ 'message': '角色名称=十一室管理员,资源名称=',
+ 'userName': '超级管理员',
+ 'regularMessage': '角色名称=十一室管理员,资源名称=',
+ 'userid': '1'
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/code/logType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: logTypes
+ }
+ }
+ }
+]
diff --git a/mock/system/resource.js b/mock/system/resource.js
new file mode 100644
index 0000000..1122ea8
--- /dev/null
+++ b/mock/system/resource.js
@@ -0,0 +1,1569 @@
+const tree = [
+ {
+ 'checked': false,
+ 'code': 'system',
+ 'id': '105',
+ 'name': '系统管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],',
+ 'pid': '1189107859077373954',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr',
+ 'id': '106',
+ 'name': '用户管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_add',
+ 'id': '107',
+ 'name': '添加用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_edit',
+ 'id': '108',
+ 'name': '修改用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_delete',
+ 'id': '109',
+ 'name': '删除用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_reset',
+ 'id': '110',
+ 'name': '重置密码',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_freeze',
+ 'id': '111',
+ 'name': '冻结用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_unfreeze',
+ 'id': '112',
+ 'name': '解除冻结用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_setRole',
+ 'id': '113',
+ 'name': '分配角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role',
+ 'id': '114',
+ 'name': '角色管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_add',
+ 'id': '115',
+ 'name': '添加角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_edit',
+ 'id': '116',
+ 'name': '修改角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_remove',
+ 'id': '117',
+ 'name': '删除角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_setAuthority',
+ 'id': '118',
+ 'name': '配置权限',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu',
+ 'id': '119',
+ 'name': '资源管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_add',
+ 'id': '120',
+ 'name': '添加菜单',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_edit',
+ 'id': '121',
+ 'name': '修改菜单',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_remove',
+ 'id': '122',
+ 'name': '删除菜单',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log',
+ 'id': '128',
+ 'name': '日志管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept',
+ 'id': '131',
+ 'name': '组织管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict',
+ 'id': '132',
+ 'name': '字典管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'loginLog',
+ 'id': '133',
+ 'name': '登录日志',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log_clean',
+ 'id': '134',
+ 'name': '清空日志',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'pid': '128',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_add',
+ 'id': '135',
+ 'name': '添加部门',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_update',
+ 'id': '136',
+ 'name': '修改部门',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_delete',
+ 'id': '137',
+ 'name': '删除部门',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_add',
+ 'id': '138',
+ 'name': '添加字典',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_update',
+ 'id': '139',
+ 'name': '修改字典',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_delete',
+ 'id': '140',
+ 'name': '删除字典',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_list',
+ 'id': '151',
+ 'name': '菜单列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_list',
+ 'id': '153',
+ 'name': '部门列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_detail',
+ 'id': '154',
+ 'name': '部门详情',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_list',
+ 'id': '156',
+ 'name': '字典列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_detail',
+ 'id': '157',
+ 'name': '字典详情',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log_list',
+ 'id': '158',
+ 'name': '日志列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'pid': '128',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log_detail',
+ 'id': '159',
+ 'name': '日志详情',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'pid': '128',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'del_login_log',
+ 'id': '160',
+ 'name': '清空登录日志',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'pid': '133',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'login_log_list',
+ 'id': '161',
+ 'name': '登录日志列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'pid': '133',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_list',
+ 'id': '164',
+ 'name': '角色列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_list',
+ 'id': '167',
+ 'name': '用户列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'data_author',
+ 'id': '1138364388198715393',
+ 'name': '数据权限',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'AreaAdmin',
+ 'id': '1170945119300976642',
+ 'name': '区域管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'sys',
+ 'id': '1189107859077373954',
+ 'name': '基础权限管理',
+ 'open': true,
+ 'pcodes': '[0],',
+ 'pid': '0',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_listPage',
+ 'id': '1191975090689810434',
+ 'name': '区域列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_add',
+ 'id': '1191975312815955969',
+ 'name': '新增区域',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_update',
+ 'id': '1191975427559530497',
+ 'name': '修改区域',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_delete',
+ 'id': '1191975543687225346',
+ 'name': '区域删除',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': true,
+ 'code': '',
+ 'id': '0',
+ 'name': '顶级',
+ 'open': true,
+ 'pcodes': '',
+ 'pid': '',
+ 'value': ''
+ }
+]
+const list = [
+ {
+ 'isopen': '1',
+ 'code': 'system',
+ 'pcode': 'sys',
+ 'num': 4,
+ 'icon': 'icon-setting',
+ 'pid': '1189107859077373954',
+ 'isMenu': '是',
+ 'url': '/system',
+ 'tips': '',
+ 'pcodes': '[0],[sys],',
+ 'name': '系统管理',
+ 'statusName': '启用',
+ 'id': '105',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': true,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr',
+ 'pcode': 'system',
+ 'num': 1,
+ 'icon': 'icon-user',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/mgr',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '用户管理',
+ 'statusName': '启用',
+ 'id': '106',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_add',
+ 'pcode': 'mgr',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '添加用户',
+ 'statusName': '启用',
+ 'id': '107',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_edit',
+ 'pcode': 'mgr',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '修改用户',
+ 'statusName': '启用',
+ 'id': '108',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_delete',
+ 'pcode': 'mgr',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '删除用户',
+ 'statusName': '启用',
+ 'id': '109',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_reset',
+ 'pcode': 'mgr',
+ 'num': 4,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/reset',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '重置密码',
+ 'statusName': '启用',
+ 'id': '110',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_freeze',
+ 'pcode': 'mgr',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/freeze',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '冻结用户',
+ 'statusName': '启用',
+ 'id': '111',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_unfreeze',
+ 'pcode': 'mgr',
+ 'num': 6,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/unfreeze',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '解除冻结用户',
+ 'statusName': '启用',
+ 'id': '112',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_setRole',
+ 'pcode': 'mgr',
+ 'num': 7,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/roleAssign',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '分配角色',
+ 'statusName': '启用',
+ 'id': '113',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role',
+ 'pcode': 'system',
+ 'num': 2,
+ 'icon': 'permission',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/role',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '角色管理',
+ 'statusName': '启用',
+ 'id': '114',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_add',
+ 'pcode': 'role',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '添加角色',
+ 'statusName': '启用',
+ 'id': '115',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_edit',
+ 'pcode': 'role',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '修改角色',
+ 'statusName': '启用',
+ 'id': '116',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_remove',
+ 'pcode': 'role',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '删除角色',
+ 'statusName': '启用',
+ 'id': '117',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_setAuthority',
+ 'pcode': 'role',
+ 'num': 4,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/funcAuthor',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '配置权限',
+ 'statusName': '启用',
+ 'id': '118',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu',
+ 'pcode': 'system',
+ 'num': 4,
+ 'icon': 'function',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/resource',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '资源管理',
+ 'statusName': '启用',
+ 'id': '119',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_add',
+ 'pcode': 'menu',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '添加菜单',
+ 'statusName': '启用',
+ 'id': '120',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_edit',
+ 'pcode': 'menu',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '修改菜单',
+ 'statusName': '启用',
+ 'id': '121',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_remove',
+ 'pcode': 'menu',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '删除菜单',
+ 'statusName': '启用',
+ 'id': '122',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log',
+ 'pcode': 'system',
+ 'num': 6,
+ 'icon': 'log',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/log',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '日志管理',
+ 'statusName': '启用',
+ 'id': '128',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept',
+ 'pcode': 'system',
+ 'num': 3,
+ 'icon': 'dept2',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/dept',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '组织管理',
+ 'statusName': '启用',
+ 'id': '131',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict',
+ 'pcode': 'system',
+ 'num': 4,
+ 'icon': 'icon-dict',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/dict',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '字典管理',
+ 'statusName': '启用',
+ 'id': '132',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'loginLog',
+ 'pcode': 'system',
+ 'num': 6,
+ 'icon': 'task',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/loginLog',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '登录日志',
+ 'statusName': '启用',
+ 'id': '133',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log_clean',
+ 'pcode': 'log',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '128',
+ 'isMenu': '不是',
+ 'url': '/log/delLog',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'name': '清空日志',
+ 'statusName': '启用',
+ 'id': '134',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_add',
+ 'pcode': 'dept',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '添加部门',
+ 'statusName': '启用',
+ 'id': '135',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_update',
+ 'pcode': 'dept',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '修改部门',
+ 'statusName': '启用',
+ 'id': '136',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_delete',
+ 'pcode': 'dept',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '删除部门',
+ 'statusName': '启用',
+ 'id': '137',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_add',
+ 'pcode': 'dict',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '添加字典',
+ 'statusName': '启用',
+ 'id': '138',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_update',
+ 'pcode': 'dict',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '修改字典',
+ 'statusName': '启用',
+ 'id': '139',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_delete',
+ 'pcode': 'dict',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '删除字典',
+ 'statusName': '启用',
+ 'id': '140',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_list',
+ 'pcode': 'menu',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '菜单列表',
+ 'statusName': '启用',
+ 'id': '151',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_list',
+ 'pcode': 'dept',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '部门列表',
+ 'statusName': '启用',
+ 'id': '153',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_detail',
+ 'pcode': 'dept',
+ 'num': 6,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/detail',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '部门详情',
+ 'statusName': '启用',
+ 'id': '154',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_list',
+ 'pcode': 'dict',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '字典列表',
+ 'statusName': '启用',
+ 'id': '156',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_detail',
+ 'pcode': 'dict',
+ 'num': 6,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/detail',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '字典详情',
+ 'statusName': '启用',
+ 'id': '157',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log_list',
+ 'pcode': 'log',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '128',
+ 'isMenu': '不是',
+ 'url': '/log/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'name': '日志列表',
+ 'statusName': '启用',
+ 'id': '158',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log_detail',
+ 'pcode': 'log',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '128',
+ 'isMenu': '不是',
+ 'url': '/log/detail',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'name': '日志详情',
+ 'statusName': '启用',
+ 'id': '159',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'del_login_log',
+ 'pcode': 'loginLog',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '133',
+ 'isMenu': '不是',
+ 'url': '/loginLog/delLoginLog',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'name': '清空登录日志',
+ 'statusName': '启用',
+ 'id': '160',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'login_log_list',
+ 'pcode': 'loginLog',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '133',
+ 'isMenu': '不是',
+ 'url': '/loginLog/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'name': '登录日志列表',
+ 'statusName': '启用',
+ 'id': '161',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_list',
+ 'pcode': 'role',
+ 'num': 7,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '角色列表',
+ 'statusName': '启用',
+ 'id': '164',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_list',
+ 'pcode': 'mgr',
+ 'num': 10,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': ' /mgr/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '用户列表',
+ 'statusName': '启用',
+ 'id': '167',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'data_author',
+ 'pcode': 'role',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/dataAuthor',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '数据权限',
+ 'statusName': '启用',
+ 'id': '1138364388198715393',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'AreaAdmin',
+ 'pcode': 'system',
+ 'num': 0,
+ 'icon': 'icon-base',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/area',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '区域管理',
+ 'statusName': '启用',
+ 'id': '1170945119300976642',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'sys',
+ 'pcode': '0',
+ 'num': 0,
+ 'icon': 'icon-setting',
+ 'pid': '0',
+ 'isMenu': '不是',
+ 'url': '/sys',
+ 'tips': '',
+ 'pcodes': '[0],',
+ 'name': '基础权限管理',
+ 'statusName': '启用',
+ 'id': '1189107859077373954',
+ 'ismenu': '0',
+ 'levels': 1,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '02'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_listPage',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/listPage',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '区域列表',
+ 'statusName': '启用',
+ 'id': '1191975090689810434',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_add',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '新增区域',
+ 'statusName': '启用',
+ 'id': '1191975312815955969',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_update',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '修改区域',
+ 'statusName': '启用',
+ 'id': '1191975427559530497',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_delete',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '区域删除',
+ 'statusName': '启用',
+ 'id': '1191975543687225346',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/resource/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: list
+ }
+ }
+ }
+ },
+
+ // mock get all roles form server
+ {
+ url: '/resource/tree',
+ type: 'get',
+ response: _ => {
+ return {
+ 'code': 200,
+ 'message': 'success',
+ 'data': {
+ 'list': tree
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/code/resourceType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '菜单',
+ 'id': '55',
+ 'value': '03'
+ },
+ {
+ 'name': '按钮',
+ 'id': '56',
+ 'value': '04'
+ }
+ ]
+ }
+ }
+ },
+ {
+ url: '/resource/treeListByRoleId',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {
+ 'list': tree
+ }
+ }
+ }
+ },
+ {
+ url: 'resource/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/resource/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/resource/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/system/role.js b/mock/system/role.js
new file mode 100644
index 0000000..508ac84
--- /dev/null
+++ b/mock/system/role.js
@@ -0,0 +1,207 @@
+const tree = [
+ {
+ "id":1,
+ "pid":"0",
+ "name":"超级管理员"
+ }
+]
+const list = [
+ {
+ "deptName":"顶级",
+ "pName":"",
+ "num":1,
+ "name":"超级管理员",
+ "deptid":"0",
+ "pid":"0",
+ "id":1,
+ "version":1,
+ "tips":"administrator"
+ },
+ {
+ "deptName":"高压管网分公司",
+ "pName":"超级管理员",
+ "num":2,
+ "name":"高压管网分公司系统管理员",
+ "deptid":"24",
+ "pid":1,
+ "id":2,
+ "version":"",
+ "tips":"rqadmin"
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/role/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: list
+ }
+ }
+ }
+ },
+
+ // mock get all roles form server
+ {
+ url: '/role/tree',
+ type: 'get',
+ response: _ => {
+ return {
+ 'code': 200,
+ 'message': 'success',
+ 'data': {
+ 'list': tree
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/code/roleType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '菜单',
+ 'id': '55',
+ 'value': '03'
+ },
+ {
+ 'name': '按钮',
+ 'id': '56',
+ 'value': '04'
+ }
+ ]
+ }
+ }
+ },
+ {
+ url: '/role/treeByUserId',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {
+ 'list': [
+ {
+ "id":1,
+ "pid":"0",
+ "name":"超级管理员",
+ "open":true,
+ "checked":false
+ }
+ ]
+ }
+ }
+ }
+ },
+ {
+ url: '/role/treeByRoleId',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {
+ 'list': [
+ {
+ "id":"26",
+ "pid":"24",
+ "name":"运行二所",
+ "open":true,
+ "checked":true
+ }
+ ]
+ }
+ }
+ }
+ },
+ {
+ url: '/role/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/role/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/role/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/role/funcAuthor',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/role/dataAuthor',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/code/dataScopeType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '全部',
+ 'id': '55',
+ 'value': '03'
+ },
+ {
+ 'name': '本部门',
+ 'id': '56',
+ 'value': '04'
+ },
+ {
+ 'name': '自定义',
+ 'id': '57',
+ 'value': '04'
+ }
+ ]
+ }
+ }
+ }
+]
diff --git a/mock/system/user.js b/mock/system/user.js
new file mode 100644
index 0000000..5601db9
--- /dev/null
+++ b/mock/system/user.js
@@ -0,0 +1,860 @@
+// 用户详情
+const userinfo = {
+ 'account': 'admin',
+ 'avatar': 'girl.gif',
+ 'dataScope': [
+ '0',
+ '1236854643826184194',
+ '1236856061500936193',
+ '1236856816081391617',
+ '1236856889875976194',
+ '1236856952987668481',
+ '1236857009937928194',
+ '1236857134915604482',
+ '1236857274443321346',
+ '1236857346400800770',
+ '1236857428776931330',
+ '1236857492744261633',
+ '1236857661695021057',
+ '1236857767731220481',
+ '1236857826057211905',
+ '1236857873113108481',
+ '1236857966566395906',
+ '1236858049731055618',
+ '1236858125752815618',
+ '1236858179561541633',
+ '1236858248830472194',
+ '1236858330946555905',
+ '1236858380556783617',
+ '1236858422894088194',
+ '1236858475780067330',
+ '1236858517333037058',
+ '1236858579396153346',
+ '1236858642176495618',
+ '1236858704961032194',
+ '1236858748544045057',
+ '1236858806672904193',
+ '1236858863296008193',
+ '1236858908317667330'
+ ],
+ 'deptId': '0',
+ 'deptName': '顶级',
+ 'devices': [],
+ 'id': '1',
+ 'ipAddr': '124.64.16.144',
+ 'name': '超超级管理员',
+ 'phone': '18200000000',
+ 'roleList': [
+ '1'
+ ],
+ 'roleNames': [
+ '超级管理员'
+ ],
+ 'roleTips': [
+ 'administrator'
+ ],
+ 'scopeType': '4',
+ 'targetId': '',
+ 'targetName': '',
+ 'tenantId': ''
+}
+const list = [
+ {
+ 'birthday': '2017-05-05 00:00:00',
+ 'deptName': '顶级',
+ 'createtime': '2016-01-29 08:49:53',
+ 'roleid': '1',
+ 'sex': '2',
+ 'deptid': '0',
+ 'avatar': 'girl.gif',
+ 'version': 25,
+ 'phone': '18200000000',
+ 'sexName': '女',
+ 'name': '超级管理员',
+ 'roleName': '超级管理员',
+ 'statusName': '启用',
+ 'id': '1',
+ 'account': 'admin',
+ 'email': 'sn93@qq.com',
+ 'status': '1'
+ }
+]
+// 权限列表
+const permisson = {
+ 'menus': [
+ {
+ 'children': '',
+ 'code': 'sys',
+ 'icon': 'icon-setting',
+ 'id': '1189107859077373954',
+ 'ismenu': '0',
+ 'levels': 1,
+ 'name': '基础权限管理',
+ 'num': 0,
+ 'parentId': '0',
+ 'resourceType': '02',
+ 'url': '/sys'
+ },
+ {
+ 'children': '',
+ 'code': 'data_author',
+ 'icon': '',
+ 'id': '1138364388198715393',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '数据权限',
+ 'num': 0,
+ 'parentId': '114',
+ 'resourceType': '0',
+ 'url': '/role/dataAuthor'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr',
+ 'icon': 'icon-user',
+ 'id': '106',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '用户管理',
+ 'num': 1,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/mgr'
+ },
+ {
+ 'children': '',
+ 'code': 'role',
+ 'icon': 'permission',
+ 'id': '114',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '角色管理',
+ 'num': 2,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/role'
+ },
+ {
+ 'children': '',
+ 'code': 'role_edit',
+ 'icon': '',
+ 'id': '116',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '修改角色',
+ 'num': 2,
+ 'parentId': '114',
+ 'resourceType': '0',
+ 'url': '/role/update'
+ },
+ {
+ 'children': '',
+ 'code': 'role_remove',
+ 'icon': '',
+ 'id': '117',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '删除角色',
+ 'num': 3,
+ 'parentId': '114',
+ 'resourceType': '0',
+ 'url': '/role/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'dept',
+ 'icon': 'dept2',
+ 'id': '131',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '组织管理',
+ 'num': 3,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/dept'
+ },
+ {
+ 'children': '',
+ 'code': 'menu',
+ 'icon': 'function',
+ 'id': '119',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '资源管理',
+ 'num': 4,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/resource'
+ },
+ {
+ 'children': '',
+ 'code': 'role_setAuthority',
+ 'icon': '',
+ 'id': '118',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '配置权限',
+ 'num': 4,
+ 'parentId': '114',
+ 'resourceType': '0',
+ 'url': '/role/funcAuthor'
+ },
+ {
+ 'children': '',
+ 'code': 'system',
+ 'icon': 'icon-setting',
+ 'id': '105',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '系统管理',
+ 'num': 4,
+ 'parentId': '1189107859077373954',
+ 'resourceType': '03',
+ 'url': '/system'
+ },
+ {
+ 'children': '',
+ 'code': 'menu_list',
+ 'icon': '',
+ 'id': '151',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '菜单列表',
+ 'num': 5,
+ 'parentId': '119',
+ 'resourceType': '0',
+ 'url': '/resource/list'
+ },
+ {
+ 'children': '',
+ 'code': 'loginLog',
+ 'icon': 'task',
+ 'id': '133',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '登录日志',
+ 'num': 6,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/loginLog'
+ },
+ {
+ 'children': '',
+ 'code': 'log',
+ 'icon': 'log',
+ 'id': '128',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '日志管理',
+ 'num': 6,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/log'
+ },
+ {
+ 'children': '',
+ 'code': 'AreaAdmin',
+ 'icon': 'icon-base',
+ 'id': '1170945119300976642',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'name': '区域管理',
+ 'num': 0,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/area'
+ },
+ {
+ 'children': '',
+ 'code': 'visitor_permission',
+ 'icon': '',
+ 'id': '1202403877222735874',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'name': '访客授权列表',
+ 'num': 0,
+ 'parentId': '1202403125913837569',
+ 'resourceType': '03',
+ 'url': '/acsPermission/listVisitorPerm'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_delete',
+ 'icon': '',
+ 'id': '137',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '删除部门',
+ 'num': 1,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'role_add',
+ 'icon': '',
+ 'id': '115',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加角色',
+ 'num': 1,
+ 'parentId': '114',
+ 'resourceType': '04',
+ 'url': '/role/add'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_add',
+ 'icon': '',
+ 'id': '138',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加字典',
+ 'num': 1,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/add'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_delete',
+ 'icon': '',
+ 'id': '140',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '删除字典',
+ 'num': 1,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_add',
+ 'icon': '',
+ 'id': '135',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加部门',
+ 'num': 1,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/add'
+ },
+ {
+ 'children': '',
+ 'code': 'del_login_log',
+ 'icon': '',
+ 'id': '160',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '清空登录日志',
+ 'num': 1,
+ 'parentId': '133',
+ 'resourceType': '04',
+ 'url': '/loginLog/delLoginLog'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_update',
+ 'icon': '',
+ 'id': '139',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '修改字典',
+ 'num': 1,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/update'
+ },
+ {
+ 'children': '',
+ 'code': 'menu_add',
+ 'icon': '',
+ 'id': '120',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加菜单',
+ 'num': 1,
+ 'parentId': '119',
+ 'resourceType': '04',
+ 'url': '/resource/add'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_add',
+ 'icon': '',
+ 'id': '107',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加用户',
+ 'num': 1,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/add'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_update',
+ 'icon': '',
+ 'id': '136',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '修改部门',
+ 'num': 1,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/update'
+ },
+ {
+ 'children': '',
+ 'code': 'menu_edit',
+ 'icon': '',
+ 'id': '121',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '修改菜单',
+ 'num': 2,
+ 'parentId': '119',
+ 'resourceType': '04',
+ 'url': '/resource/update'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_edit',
+ 'icon': '',
+ 'id': '108',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '修改用户',
+ 'num': 2,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/update'
+ },
+ {
+ 'children': '',
+ 'code': 'log_list',
+ 'icon': '',
+ 'id': '158',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '日志列表',
+ 'num': 2,
+ 'parentId': '128',
+ 'resourceType': '04',
+ 'url': '/log/list'
+ },
+ {
+ 'children': '',
+ 'code': 'login_log_list',
+ 'icon': '',
+ 'id': '161',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '登录日志列表',
+ 'num': 2,
+ 'parentId': '133',
+ 'resourceType': '04',
+ 'url': '/loginLog/list'
+ },
+ {
+ 'children': '',
+ 'code': 'log_clean',
+ 'icon': '',
+ 'id': '134',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '清空日志',
+ 'num': 3,
+ 'parentId': '128',
+ 'resourceType': '04',
+ 'url': '/log/delLog'
+ },
+ {
+ 'children': '',
+ 'code': 'log_detail',
+ 'icon': '',
+ 'id': '159',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '日志详情',
+ 'num': 3,
+ 'parentId': '128',
+ 'resourceType': '04',
+ 'url': '/log/detail'
+ },
+ {
+ 'children': '',
+ 'code': 'menu_remove',
+ 'icon': '',
+ 'id': '122',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '删除菜单',
+ 'num': 3,
+ 'parentId': '119',
+ 'resourceType': '04',
+ 'url': '/resource/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_delete',
+ 'icon': '',
+ 'id': '109',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '删除用户',
+ 'num': 3,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_reset',
+ 'icon': '',
+ 'id': '110',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '重置密码',
+ 'num': 4,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/reset'
+ },
+ {
+ 'children': '',
+ 'code': 'dict',
+ 'icon': 'icon-dict',
+ 'id': '132',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'name': '字典管理',
+ 'num': 4,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/user'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_list',
+ 'icon': '',
+ 'id': '153',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '部门列表',
+ 'num': 5,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/list'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_list',
+ 'icon': '',
+ 'id': '156',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '字典列表',
+ 'num': 5,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/list'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_freeze',
+ 'icon': '',
+ 'id': '111',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '冻结用户',
+ 'num': 5,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/freeze'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_detail',
+ 'icon': '',
+ 'id': '154',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '部门详情',
+ 'num': 6,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/detail'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_detail',
+ 'icon': '',
+ 'id': '157',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '字典详情',
+ 'num': 6,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/detail'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_unfreeze',
+ 'icon': '',
+ 'id': '112',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '解除冻结用户',
+ 'num': 6,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/unfreeze'
+ },
+ {
+ 'children': '',
+ 'code': 'role_list',
+ 'icon': '',
+ 'id': '164',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '角色列表',
+ 'num': 7,
+ 'parentId': '114',
+ 'resourceType': '04',
+ 'url': '/role/list'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_setRole',
+ 'icon': '',
+ 'id': '113',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '分配角色',
+ 'num': 7,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/roleAssign'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_list',
+ 'icon': '',
+ 'id': '167',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '用户列表',
+ 'num': 10,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': ' /mgr/list'
+ },
+ {
+ 'children': '',
+ 'code': 'area_add',
+ 'icon': '',
+ 'id': '1191975312815955969',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'name': '新增区域',
+ 'num': 0,
+ 'parentId': '1170945119300976642',
+ 'resourceType': '04',
+ 'url': '/area/add'
+ },
+ {
+ 'children': '',
+ 'code': 'area_delete',
+ 'icon': '',
+ 'id': '1191975543687225346',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'name': '区域删除',
+ 'num': 0,
+ 'parentId': '1170945119300976642',
+ 'resourceType': '04',
+ 'url': '/area/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'area_listPage',
+ 'icon': '',
+ 'id': '1191975090689810434',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'name': '区域列表',
+ 'num': 0,
+ 'parentId': '1170945119300976642',
+ 'resourceType': '04',
+ 'url': '/area/listPage'
+ },
+ {
+ 'children': '',
+ 'code': 'area_update',
+ 'icon': '',
+ 'id': '1191975427559530497',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'name': '修改区域',
+ 'num': 0,
+ 'parentId': '1170945119300976642',
+ 'resourceType': '04',
+ 'url': '/area/update'
+ }
+ ]
+}
+module.exports = [
+ {
+ url: '/user/login',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ success: true,
+ data: {
+ kaptcha: '',
+ token: '02deb42b-5298-431a-b690-d04573c18281'
+
+ }
+ }
+ }
+ },
+ {
+ url: '/user/info',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ success: true,
+ data: userinfo
+ }
+ }
+ },
+ {
+ url: '/user/permission',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ success: true,
+ data: permisson
+ }
+ }
+ },
+ {
+ url: '/user/logout',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ success: true
+ }
+ }
+ },
+ {
+ url: '/mgr/list',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: list,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/mgr/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/freeze',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/unfreeze',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/reset',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/roleAssign',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/changePwd',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/table.js b/mock/table.js
new file mode 100644
index 0000000..d3963f4
--- /dev/null
+++ b/mock/table.js
@@ -0,0 +1,20 @@
+import Mock from 'mockjs'
+
+module.exports = {
+ list: () => {
+ const items = Mock.mock({
+ 'items|30': [{
+ id: '@id',
+ title: '@sentence(10, 20)',
+ 'status|1': ['published', 'draft', 'deleted'],
+ author: 'name',
+ display_time: '@datetime',
+ pageviews: '@integer(300, 5000)'
+ }]
+ })
+ return {
+ code: 20000,
+ data: items
+ }
+ }
+}
diff --git a/mock/user.js b/mock/user.js
new file mode 100644
index 0000000..6edeeff
--- /dev/null
+++ b/mock/user.js
@@ -0,0 +1,70 @@
+import { param2Obj } from './utils'
+
+const tokens = {
+ admin: {
+ token: 'admin-token'
+ },
+ editor: {
+ token: 'editor-token'
+ }
+}
+
+const users = {
+ 'admin-token': {
+ roles: ['admin'],
+ btns: ['kaptcha'],
+ introduction: 'I am a 超级管理员',
+ avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif',
+ name: 'mock Admin'
+ },
+ 'editor-token': {
+ roles: ['editor'],
+ btns: [],
+ introduction: 'I am an editor',
+ avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif',
+ name: 'Normal Editor'
+ }
+}
+
+module.exports = {
+ login: res => {
+ const { username } = JSON.parse(res.body)
+ const data = tokens[username]
+
+ if (data) {
+ return {
+ code: 200,
+ success: true,
+ data
+ }
+ }
+ return {
+ code: 60204,
+ success: false,
+ message: '账号或密码错误.'
+ }
+ },
+ getInfo: res => {
+ const { token } = param2Obj(res.url)
+ const info = users[token]
+
+ if (info) {
+ return {
+ code: 200,
+ success: true,
+ data: info
+ }
+ }
+ return {
+ code: 50008,
+ success: false,
+ message: '登录失败,无法获取用户信息.'
+ }
+ },
+ logout: () => {
+ return {
+ code: 200,
+ success: true
+ }
+ }
+}
diff --git a/mock/utils.js b/mock/utils.js
new file mode 100644
index 0000000..8fc4926
--- /dev/null
+++ b/mock/utils.js
@@ -0,0 +1,51 @@
+const Mock = require('mockjs')
+
+const NameList = []
+const count = 100
+
+for (let i = 0; i < count; i++) {
+ NameList.push(Mock.mock({
+ name: '@first'
+ }))
+}
+NameList.push({ name: 'mock-Pan' })
+
+module.exports = [
+ // 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/package-lock.json b/package-lock.json
index b780dad..63c2f82 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -305,6 +305,19 @@
"@babel/helper-validator-identifier": "^7.14.5",
"chalk": "^2.0.0",
"js-tokens": "^4.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"@babel/parser": {
@@ -1273,6 +1286,19 @@
"@jest/source-map": "^24.9.0",
"chalk": "^2.0.1",
"slash": "^2.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"@jest/core": {
@@ -1317,6 +1343,17 @@
"integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
"dev": true
},
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"strip-ansi": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
@@ -1380,6 +1417,17 @@
"string-length": "^2.0.0"
},
"dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -1454,6 +1502,17 @@
"write-file-atomic": "2.4.1"
},
"dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -1507,6 +1566,17 @@
"integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
"dev": true
},
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"is-fullwidth-code-point": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
@@ -2328,6 +2398,19 @@
"request": "^2.88.2",
"semver": "^6.1.0",
"strip-ansi": "^6.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"@vue/component-compiler-utils": {
@@ -3082,6 +3165,19 @@
"babel-preset-jest": "^24.9.0",
"chalk": "^2.4.2",
"slash": "^2.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"babel-loader": {
@@ -3940,14 +4036,54 @@
"dev": true
},
"chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
}
},
"chardet": {
@@ -4364,6 +4500,19 @@
"@types/q": "^1.5.1",
"chalk": "^2.4.1",
"q": "^1.1.2"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"code-point-at": {
@@ -5231,6 +5380,17 @@
"integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=",
"dev": true
},
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"commander": {
"version": "2.15.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
@@ -5823,6 +5983,12 @@
}
}
},
+ "domready": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/domready/-/domready-1.0.8.tgz",
+ "integrity": "sha1-kfJS5Ze2Wvd+dFriTdAYXV4m1Yw=",
+ "dev": true
+ },
"domutils": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
@@ -6195,6 +6361,17 @@
"v8-compile-cache": "^2.0.3"
},
"dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"eslint-scope": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
@@ -8218,6 +8395,12 @@
"integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
"dev": true
},
+ "image-size": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
+ "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=",
+ "dev": true
+ },
"import-cwd": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz",
@@ -9144,6 +9327,19 @@
"prompts": "^2.0.1",
"realpath-native": "^1.1.0",
"yargs": "^13.3.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
}
}
@@ -9182,6 +9378,19 @@
"micromatch": "^3.1.10",
"pretty-format": "^24.9.0",
"realpath-native": "^1.1.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-diff": {
@@ -9194,6 +9403,19 @@
"diff-sequences": "^24.9.0",
"jest-get-type": "^24.9.0",
"pretty-format": "^24.9.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-docblock": {
@@ -9216,6 +9438,19 @@
"jest-get-type": "^24.9.0",
"jest-util": "^24.9.0",
"pretty-format": "^24.9.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-environment-jsdom": {
@@ -9437,6 +9672,19 @@
"jest-util": "^24.9.0",
"pretty-format": "^24.9.0",
"throat": "^4.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-leak-detector": {
@@ -9459,6 +9707,19 @@
"jest-diff": "^24.9.0",
"jest-get-type": "^24.9.0",
"pretty-format": "^24.9.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-message-util": {
@@ -9475,6 +9736,19 @@
"micromatch": "^3.1.10",
"slash": "^2.0.0",
"stack-utils": "^1.0.1"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-mock": {
@@ -9509,6 +9783,19 @@
"chalk": "^2.0.1",
"jest-pnp-resolver": "^1.2.1",
"realpath-native": "^1.1.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-resolve-dependencies": {
@@ -9547,6 +9834,19 @@
"jest-worker": "^24.6.0",
"source-map-support": "^0.5.6",
"throat": "^4.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-runtime": {
@@ -9578,6 +9878,19 @@
"slash": "^2.0.0",
"strip-bom": "^3.0.0",
"yargs": "^13.3.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-serializer": {
@@ -9614,6 +9927,19 @@
"natural-compare": "^1.4.0",
"pretty-format": "^24.9.0",
"semver": "^6.2.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-transform-stub": {
@@ -9642,6 +9968,17 @@
"source-map": "^0.6.0"
},
"dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"ci-info": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
@@ -9684,6 +10021,17 @@
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
"dev": true
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
}
}
},
@@ -9711,6 +10059,17 @@
"type-fest": "^0.21.3"
}
},
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"slash": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
@@ -9764,6 +10123,17 @@
"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
"integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
"dev": true
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
}
}
},
@@ -9788,6 +10158,12 @@
}
}
},
+ "js-base64": {
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz",
+ "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==",
+ "dev": true
+ },
"js-beautify": {
"version": "1.14.0",
"resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.14.0.tgz",
@@ -9993,6 +10369,19 @@
"requires": {
"chalk": "^2.3.0",
"shell-quote": "^1.6.1"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"launch-editor-middleware": {
@@ -10499,6 +10888,19 @@
"dev": true,
"requires": {
"chalk": "^2.0.1"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"log-update": {
@@ -10646,6 +11048,23 @@
"integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
"dev": true
},
+ "merge-options": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-1.0.1.tgz",
+ "integrity": "sha512-iuPV41VWKWBIOpBsjoxjDZw8/GbSfZ2mk7N1453bwMrfzdrIk7EzBd+8UVR6rkw67th7xnk9Dytl3J+lHPdxvg==",
+ "dev": true,
+ "requires": {
+ "is-plain-obj": "^1.1"
+ },
+ "dependencies": {
+ "is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
+ "dev": true
+ }
+ }
+ },
"merge-source-map": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz",
@@ -10846,6 +11265,12 @@
"through2": "^2.0.0"
}
},
+ "mitt": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.1.2.tgz",
+ "integrity": "sha1-OA5hSA1qYVtmDwertg1R4KTkvtY=",
+ "dev": true
+ },
"mixin-deep": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
@@ -10876,6 +11301,12 @@
"minimist": "^1.2.5"
}
},
+ "mock": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/mock/-/mock-0.1.1.tgz",
+ "integrity": "sha1-5+NYnH5rM3bWn1o+RwtWYEQXxjM=",
+ "dev": true
+ },
"mockjs": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/mockjs/-/mockjs-1.1.0.tgz",
@@ -10943,6 +11374,12 @@
"thenify-all": "^1.0.0"
}
},
+ "nanoid": {
+ "version": "3.1.25",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz",
+ "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==",
+ "dev": true
+ },
"nanomatch": {
"version": "1.2.13",
"resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
@@ -11426,6 +11863,17 @@
"wcwidth": "^1.0.1"
},
"dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"strip-ansi": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
@@ -11877,6 +12325,28 @@
"supports-color": "^6.1.0"
},
"dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -12370,6 +12840,28 @@
}
}
},
+ "postcss-prefix-selector": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/postcss-prefix-selector/-/postcss-prefix-selector-1.10.0.tgz",
+ "integrity": "sha512-VcC/zCXVfFdGyn+Fo9+mxnxBu+hT61uMJJBdfWBbIeDrcE6g8s+26SUPTMpz8kc9wfoLpJGAZZ4QwbVqwxpNRA==",
+ "dev": true,
+ "requires": {
+ "postcss": "^8.2.10"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "8.3.6",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.6.tgz",
+ "integrity": "sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A==",
+ "dev": true,
+ "requires": {
+ "colorette": "^1.2.2",
+ "nanoid": "^3.1.23",
+ "source-map-js": "^0.6.2"
+ }
+ }
+ }
+ },
"postcss-reduce-initial": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz",
@@ -12448,6 +12940,104 @@
"integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
"dev": true
},
+ "posthtml": {
+ "version": "0.9.2",
+ "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.9.2.tgz",
+ "integrity": "sha1-9MBtufZ7Yf0XxOJW5+PZUVv3Jv0=",
+ "dev": true,
+ "requires": {
+ "posthtml-parser": "^0.2.0",
+ "posthtml-render": "^1.0.5"
+ }
+ },
+ "posthtml-parser": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.2.1.tgz",
+ "integrity": "sha1-NdUw3jhnQMK6JP8usvrznM3ycd0=",
+ "dev": true,
+ "requires": {
+ "htmlparser2": "^3.8.3",
+ "isobject": "^2.1.0"
+ },
+ "dependencies": {
+ "domhandler": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
+ "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1"
+ }
+ },
+ "entities": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
+ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
+ "dev": true
+ },
+ "htmlparser2": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
+ "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^1.3.1",
+ "domhandler": "^2.3.0",
+ "domutils": "^1.5.1",
+ "entities": "^1.1.1",
+ "inherits": "^2.0.1",
+ "readable-stream": "^3.1.1"
+ }
+ },
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ },
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ }
+ }
+ },
+ "posthtml-rename-id": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/posthtml-rename-id/-/posthtml-rename-id-1.0.12.tgz",
+ "integrity": "sha512-UKXf9OF/no8WZo9edRzvuMenb6AD5hDLzIepJW+a4oJT+T/Lx7vfMYWT4aWlGNQh0WMhnUx1ipN9OkZ9q+ddEw==",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "1.0.5"
+ }
+ },
+ "posthtml-render": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-1.4.0.tgz",
+ "integrity": "sha512-W1779iVHGfq0Fvh2PROhCe2QhB8mEErgqzo1wpIt36tCgChafP+hbXIhLDOM8ePJrZcFs0vkNEtdibEWVqChqw==",
+ "dev": true
+ },
+ "posthtml-svg-mode": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/posthtml-svg-mode/-/posthtml-svg-mode-1.0.3.tgz",
+ "integrity": "sha512-hEqw9NHZ9YgJ2/0G7CECOeuLQKZi8HjWLkBaSVtOWjygQ9ZD8P7tqeowYs7WrFdKsWEKG7o+IlsPY8jrr0CJpQ==",
+ "dev": true,
+ "requires": {
+ "merge-options": "1.0.1",
+ "posthtml": "^0.9.2",
+ "posthtml-parser": "^0.2.1",
+ "posthtml-render": "^1.0.6"
+ }
+ },
"prelude-ls": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
@@ -13853,6 +14443,12 @@
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
"dev": true
},
+ "source-map-js": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz",
+ "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==",
+ "dev": true
+ },
"source-map-resolve": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
@@ -14280,6 +14876,245 @@
"has-flag": "^3.0.0"
}
},
+ "svg-baker": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/svg-baker/-/svg-baker-1.7.0.tgz",
+ "integrity": "sha512-nibslMbkXOIkqKVrfcncwha45f97fGuAOn1G99YwnwTj8kF9YiM6XexPcUso97NxOm6GsP0SIvYVIosBis1xLg==",
+ "dev": true,
+ "requires": {
+ "bluebird": "^3.5.0",
+ "clone": "^2.1.1",
+ "he": "^1.1.1",
+ "image-size": "^0.5.1",
+ "loader-utils": "^1.1.0",
+ "merge-options": "1.0.1",
+ "micromatch": "3.1.0",
+ "postcss": "^5.2.17",
+ "postcss-prefix-selector": "^1.6.0",
+ "posthtml-rename-id": "^1.0",
+ "posthtml-svg-mode": "^1.0.3",
+ "query-string": "^4.3.2",
+ "traverse": "^0.6.6"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+ "dev": true
+ },
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
+ }
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.0.tgz",
+ "integrity": "sha512-3StSelAE+hnRvMs8IdVW7Uhk8CVed5tp+kLLGlBP6WiRAXS21GPGu/Nat4WNPXj2Eoc24B02SaeoyozPMfj0/g==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.2.2",
+ "define-property": "^1.0.0",
+ "extend-shallow": "^2.0.1",
+ "extglob": "^2.0.2",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^5.0.2",
+ "nanomatch": "^1.2.1",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ }
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "svg-baker-runtime": {
+ "version": "1.4.7",
+ "resolved": "https://registry.npmjs.org/svg-baker-runtime/-/svg-baker-runtime-1.4.7.tgz",
+ "integrity": "sha512-Zorfwwj5+lWjk/oxwSMsRdS2sPQQdTmmsvaSpzU+i9ZWi3zugHLt6VckWfnswphQP0LmOel3nggpF5nETbt6xw==",
+ "dev": true,
+ "requires": {
+ "deepmerge": "1.3.2",
+ "mitt": "1.1.2",
+ "svg-baker": "^1.7.0"
+ },
+ "dependencies": {
+ "deepmerge": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.3.2.tgz",
+ "integrity": "sha1-FmNpFinU2/42T6EqKk8KqGqjoFA=",
+ "dev": true
+ }
+ }
+ },
+ "svg-sprite-loader": {
+ "version": "6.0.9",
+ "resolved": "https://registry.npmjs.org/svg-sprite-loader/-/svg-sprite-loader-6.0.9.tgz",
+ "integrity": "sha512-V/F3iI1J/xWeO0cRXkEFvhujvBQ3deAPFlhip+AW00Hs+9gighu619mblucIWdRPmDMfcSWJD/ZuXf6HldIskw==",
+ "dev": true,
+ "requires": {
+ "bluebird": "^3.5.0",
+ "deepmerge": "1.3.2",
+ "domready": "1.0.8",
+ "escape-string-regexp": "1.0.5",
+ "loader-utils": "^1.1.0",
+ "svg-baker": "^1.5.0",
+ "svg-baker-runtime": "^1.4.7",
+ "url-slug": "2.0.0"
+ },
+ "dependencies": {
+ "deepmerge": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.3.2.tgz",
+ "integrity": "sha1-FmNpFinU2/42T6EqKk8KqGqjoFA=",
+ "dev": true
+ }
+ }
+ },
"svg-tags": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz",
@@ -14307,6 +15142,17 @@
"util.promisify": "~1.0.0"
},
"dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"util.promisify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz",
@@ -14727,6 +15573,12 @@
"punycode": "^2.1.0"
}
},
+ "traverse": {
+ "version": "0.6.6",
+ "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz",
+ "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=",
+ "dev": true
+ },
"tryer": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz",
@@ -14925,6 +15777,12 @@
"integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==",
"dev": true
},
+ "unidecode": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/unidecode/-/unidecode-0.1.8.tgz",
+ "integrity": "sha1-77swFTi8RSRqmsjFWdcvAVMFBT4=",
+ "dev": true
+ },
"union-value": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
@@ -15097,6 +15955,15 @@
"requires-port": "^1.0.0"
}
},
+ "url-slug": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/url-slug/-/url-slug-2.0.0.tgz",
+ "integrity": "sha1-p4nVrtSZXA2VrzM3etHVxo1NcCc=",
+ "dev": true,
+ "requires": {
+ "unidecode": "0.1.8"
+ }
+ },
"use": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
@@ -15263,6 +16130,19 @@
"source-map": "^0.5.6",
"tsconfig": "^7.0.0",
"vue-template-es2015-compiler": "^1.6.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"vue-loader": {
@@ -15671,6 +16551,17 @@
"integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
"dev": true
},
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
diff --git a/package.json b/package.json
index 25b0d78..defa84a 100644
--- a/package.json
+++ b/package.json
@@ -34,14 +34,19 @@
"@vue/eslint-config-standard": "^5.1.2",
"@vue/test-utils": "^1.0.3",
"babel-eslint": "^10.1.0",
+ "babel-plugin-dynamic-import-node": "^2.3.3",
+ "chalk": "^4.1.2",
+ "chokidar": "^3.5.2",
"eslint": "^6.7.2",
"eslint-plugin-import": "^2.20.2",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-promise": "^4.2.1",
"eslint-plugin-standard": "^4.0.0",
"eslint-plugin-vue": "^6.2.2",
+ "mock": "^0.1.1",
"sass": "^1.26.5",
"sass-loader": "^8.0.2",
+ "svg-sprite-loader": "^6.0.9",
"vue-template-compiler": "^2.6.11"
}
}
diff --git a/src/components/SvgIcon/index.vue b/src/components/SvgIcon/index.vue
index 27da76c..5c0f02a 100644
--- a/src/components/SvgIcon/index.vue
+++ b/src/components/SvgIcon/index.vue
@@ -1,10 +1,14 @@
-
+
+
diff --git a/src/layout/components/Sidebar/FixiOSBug.js b/src/layout/components/Sidebar/FixiOSBug.js
new file mode 100644
index 0000000..bc14856
--- /dev/null
+++ b/src/layout/components/Sidebar/FixiOSBug.js
@@ -0,0 +1,26 @@
+export default {
+ computed: {
+ device() {
+ return this.$store.state.app.device
+ }
+ },
+ mounted() {
+ // In order to fix the click on menu on the ios device will trigger the mouseleave bug
+ // https://github.com/PanJiaChen/vue-element-admin/issues/1135
+ this.fixBugIniOS()
+ },
+ methods: {
+ fixBugIniOS() {
+ const $subMenu = this.$refs.subMenu
+ if ($subMenu) {
+ const handleMouseleave = $subMenu.handleMouseleave
+ $subMenu.handleMouseleave = (e) => {
+ if (this.device === 'mobile') {
+ return
+ }
+ handleMouseleave(e)
+ }
+ }
+ }
+ }
+}
diff --git a/src/layout/components/Sidebar/Link.vue b/src/layout/components/Sidebar/Link.vue
index eb4dd10..530b3d5 100644
--- a/src/layout/components/Sidebar/Link.vue
+++ b/src/layout/components/Sidebar/Link.vue
@@ -1,7 +1,5 @@
-
-
-
+
@@ -16,19 +14,28 @@
required: true
}
},
+ computed: {
+ isExternal() {
+ return isExternal(this.to)
+ },
+ type() {
+ if (this.isExternal) {
+ return 'a'
+ }
+ return 'router-link'
+ }
+ },
methods: {
- linkProps(url) {
- if (isExternal(url)) {
+ linkProps(to) {
+ if (this.isExternal) {
return {
- is: 'a',
- href: url,
+ href: to,
target: '_blank',
rel: 'noopener'
}
}
return {
- is: 'router-link',
- to: url
+ to: to
}
}
}
diff --git a/mock/config.js b/mock/config.js
new file mode 100644
index 0000000..7d111e0
--- /dev/null
+++ b/mock/config.js
@@ -0,0 +1,15 @@
+// import { param2Obj } from './utils'
+
+const baseConfig = {
+ kaptcha: true
+}
+
+export default {
+ baseconfig: res => {
+ return {
+ code: 200,
+ success: true,
+ data: baseConfig
+ }
+ }
+}
diff --git a/mock/index.js b/mock/index.js
new file mode 100644
index 0000000..d2713dd
--- /dev/null
+++ b/mock/index.js
@@ -0,0 +1,70 @@
+const Mock = require('mockjs')
+const { param2Obj } = require('./utils')
+
+const user = require('./system/user')
+const resource = require('./system/resource')
+const dict = require('./system/dict')
+const dept = require('./system/dept')
+const area = require('./system/area')
+const role = require('./system/role')
+const log = require('./system/log')
+const config = require('./system/config')
+const search = require('./remote-search')
+
+const mocks = [
+ ...user,
+ ...resource,
+ ...dict,
+ ...area,
+ ...dept,
+ ...role,
+ ...log,
+ ...config,
+ ...search
+]
+
+// for front mock
+// please use it cautiously, it will redefine XMLHttpRequest,
+// which will cause many of your third-party libraries to be invalidated(like progress event).
+function mockXHR() {
+ // mock patch
+ // https://github.com/nuysoft/Mock/issues/300
+ Mock.XHR.prototype.proxy_send = Mock.XHR.prototype.send
+ Mock.XHR.prototype.send = function() {
+ if (this.custom.xhr) {
+ this.custom.xhr.withCredentials = this.withCredentials || false
+
+ if (this.responseType) {
+ this.custom.xhr.responseType = this.responseType
+ }
+ }
+ this.proxy_send(...arguments)
+ }
+
+ function XHR2ExpressReqWrap(respond) {
+ return function(options) {
+ let result = null
+ if (respond instanceof Function) {
+ const { body, type, url } = options
+ // https://expressjs.com/en/4x/api.html#req
+ result = respond({
+ method: type,
+ body: JSON.parse(body),
+ query: param2Obj(url)
+ })
+ } else {
+ result = respond
+ }
+ return Mock.mock(result)
+ }
+ }
+
+ for (const i of mocks) {
+ Mock.mock(new RegExp(i.url), i.type || 'get', XHR2ExpressReqWrap(i.response))
+ }
+}
+
+module.exports = {
+ mocks,
+ mockXHR
+}
diff --git a/mock/mock-server.js b/mock/mock-server.js
new file mode 100644
index 0000000..8941ec0
--- /dev/null
+++ b/mock/mock-server.js
@@ -0,0 +1,81 @@
+const chokidar = require('chokidar')
+const bodyParser = require('body-parser')
+const chalk = require('chalk')
+const path = require('path')
+const Mock = require('mockjs')
+
+const mockDir = path.join(process.cwd(), 'mock')
+
+function registerRoutes(app) {
+ let mockLastIndex
+ const { mocks } = require('./index.js')
+ const mocksForServer = mocks.map(route => {
+ return responseFake(route.url, route.type, route.response)
+ })
+ for (const mock of mocksForServer) {
+ app[mock.type](mock.url, mock.response)
+ mockLastIndex = app._router.stack.length
+ }
+ const mockRoutesLength = Object.keys(mocksForServer).length
+ return {
+ mockRoutesLength: mockRoutesLength,
+ mockStartIndex: mockLastIndex - mockRoutesLength
+ }
+}
+
+function unregisterRoutes() {
+ Object.keys(require.cache).forEach(i => {
+ if (i.includes(mockDir)) {
+ delete require.cache[require.resolve(i)]
+ }
+ })
+}
+
+// for mock server
+const responseFake = (url, type, respond) => {
+ return {
+ url: new RegExp(`${process.env.VUE_APP_BASE_API}${url}`),
+ type: type || 'get',
+ response(req, res) {
+ console.log('request invoke:' + req.path)
+ res.json(Mock.mock(respond instanceof Function ? respond(req, res) : respond))
+ }
+ }
+}
+
+module.exports = app => {
+ // parse app.body
+ // https://expressjs.com/en/4x/api.html#req.body
+ app.use(bodyParser.json())
+ app.use(bodyParser.urlencoded({
+ extended: true
+ }))
+
+ const mockRoutes = registerRoutes(app)
+ var mockRoutesLength = mockRoutes.mockRoutesLength
+ var mockStartIndex = mockRoutes.mockStartIndex
+
+ // watch files, hot reload mock server
+ chokidar.watch(mockDir, {
+ ignored: /mock-server/,
+ ignoreInitial: true
+ }).on('all', (event, path) => {
+ if (event === 'change' || event === 'add') {
+ try {
+ // remove mock routes stack
+ app._router.stack.splice(mockStartIndex, mockRoutesLength)
+
+ // clear routes cache
+ unregisterRoutes()
+
+ const mockRoutes = registerRoutes(app)
+ mockRoutesLength = mockRoutes.mockRoutesLength
+ mockStartIndex = mockRoutes.mockStartIndex
+
+ console.log(chalk.magentaBright(`\n > Mock Server hot reload success! changed ${path}`))
+ } catch (error) {
+ console.log(chalk.redBright(error))
+ }
+ }
+ })
+}
diff --git a/mock/remote-search.js b/mock/remote-search.js
new file mode 100644
index 0000000..b5164b1
--- /dev/null
+++ b/mock/remote-search.js
@@ -0,0 +1,51 @@
+const Mock = require('mockjs')
+
+const NameList = []
+const count = 100
+
+for (let i = 0; i < count; i++) {
+ NameList.push(Mock.mock({
+ name: '@first'
+ }))
+}
+NameList.push({ name: 'mock-Pan' })
+
+module.exports = [
+ // username search
+ {
+ url: '/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: '/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/mock/system/area.js b/mock/system/area.js
new file mode 100644
index 0000000..1586661
--- /dev/null
+++ b/mock/system/area.js
@@ -0,0 +1,130 @@
+const list = [
+ {
+ 'id': '11010100102',
+ 'lat': '',
+ 'level': 5,
+ 'levelName': '社区',
+ 'lng': '',
+ 'name': '测试社区3',
+ 'num': 1,
+ 'pid': '110101001',
+ 'pids': '[0],[110000],[110100],[110101],[110101001],',
+ 'simplename': '测试社区2'
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/area/listPage',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: list,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/area/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: [
+ {
+ 'id': '110000',
+ 'pid': '0',
+ 'name': '北京市',
+ 'level': 1,
+ 'pids': [0],
+ 'levelName': '省级',
+ 'simplename': '北京'
+ }
+ ]
+ }
+ }
+ },
+ {
+ url: '/area/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/area/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/area/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/code/levelType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '省级',
+ 'id': '166',
+ 'value': '1'
+ },
+ {
+ 'name': '市级',
+ 'id': '167',
+ 'value': '2'
+ },
+ {
+ 'name': '区级',
+ 'id': '168',
+ 'value': '3'
+ },
+ {
+ 'name': '街道',
+ 'id': '169',
+ 'value': '4'
+ },
+ {
+ 'name': '社区',
+ 'id': '170',
+ 'value': '5'
+ },
+ {
+ 'name': '网格',
+ 'id': '171',
+ 'value': '6'
+ },
+ {
+ 'name': '责任网格',
+ 'id': '172',
+ 'value': '7'
+ }
+ ]
+ }
+ }
+ }
+]
diff --git a/mock/system/config.js b/mock/system/config.js
new file mode 100644
index 0000000..652e41d
--- /dev/null
+++ b/mock/system/config.js
@@ -0,0 +1,18 @@
+module.exports = [
+ {
+ url: '/config/baseConfig',
+ type: 'get',
+ response: _ => {
+ return {
+ 'code': 200,
+ 'data': {
+ 'kaptcha': false,
+ 'publicKey': 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCu5k8gcTFJy5UtMfmtKiR3f/EcUe93kzfteRj6+sM5fHRvOib82+uqQMjgaRZiMcr3HiHIFY5vA6c+Rfb5R2COitoOhxyA9U2eLXknzxLUQIAqXAvKQO8KnerA1Qjcds7xhJB2XPhWFlY4RVtMT2wr2lMd29QDE4F/kzyDhNBpxwIDAQAB',
+ 'sid': 'f390b7d7-337b-431b-be22-fb860a6c04d4'
+ },
+ 'message': '请求成功',
+ 'success': true
+ }
+ }
+ }
+]
diff --git a/mock/system/dept.js b/mock/system/dept.js
new file mode 100644
index 0000000..2c19c94
--- /dev/null
+++ b/mock/system/dept.js
@@ -0,0 +1,88 @@
+const list = [
+ {
+ 'id': '1',
+ 'simplename': '二分公司',
+ 'fullname': '二分公司',
+ 'num': 1,
+ 'pid': '0',
+ 'pids': '[0,1,2]',
+ 'pName': '顶级',
+ 'version': '',
+ 'tips': ''
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/dept/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: list
+ }
+ }
+ }
+ },
+ {
+ url: '/dept/tree',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: [
+ {
+ 'id': '0',
+ 'pid': '',
+ 'name': '顶级',
+ 'open': 'false',
+ 'checked': ''
+ },
+ {
+ 'id': '26',
+ 'pid': '24',
+ 'name': '运行二所',
+ 'open': 'false',
+ 'checked': ''
+ }
+ ]
+ }
+ }
+ }
+ },
+ {
+ url: '/dept/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dept/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dept/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/system/dict.js b/mock/system/dict.js
new file mode 100644
index 0000000..60de4cd
--- /dev/null
+++ b/mock/system/dict.js
@@ -0,0 +1,69 @@
+const list = [
+ {
+ 'code': 'sysStatus',
+ 'num': 0,
+ 'name': '状态',
+ 'pid': '0',
+ 'id': '16',
+ 'detail': '1:启用:1;2:禁用:2',
+ 'tips': ''
+ },
+ {
+ 'code': 'sysSex',
+ 'num': 0,
+ 'name': '性别',
+ 'pid': '0',
+ 'id': '29',
+ 'detail': '1:男:1;2:女:2',
+ 'tips': ''
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/dict/listPage',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: list,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/system/log.js b/mock/system/log.js
new file mode 100644
index 0000000..9b6306e
--- /dev/null
+++ b/mock/system/log.js
@@ -0,0 +1,115 @@
+const logTypes = [
+ {
+ 'value': '0',
+ 'name': '业务日志'
+ },
+ {
+ 'value': '1',
+ 'name': '登录日志'
+ }
+]
+const loglist = [
+ {
+ 'id': 'c4cdba483fb1449aaad1e6c49353c6b3',
+ 'logtype': '业务日志',
+ 'createtime': '2019-04-04 14:23:31',
+ 'logname': '修改用户',
+ 'succeed': '成功',
+ 'deptid': '24',
+ 'deptName': '总公司',
+ 'message': '账号=yxssadmin...',
+ 'userName': 'bruser',
+ 'userid': '45'
+ }
+]
+const loginloglist = [
+ {
+ 'createtime': '2020-03-26 16:03:23',
+ 'logname': '登录日志',
+ 'succeed': '成功',
+ 'ip': '192.168.8.184',
+ 'deptid': '0',
+ 'message': '',
+ 'userName': '超级管理员',
+ 'userid': '1'
+ },
+ {
+ 'createtime': '2020-03-26 15:13:50',
+ 'logname': '登录日志',
+ 'succeed': '成功',
+ 'ip': '192.168.8.184',
+ 'deptid': '0',
+ 'message': '',
+ 'userName': '超级管理员',
+ 'userid': '1'
+ },
+ {
+ 'createtime': '2020-03-26 14:47:05',
+ 'logname': '登录日志',
+ 'succeed': '成功',
+ 'ip': '192.168.8.105',
+ 'deptid': '0',
+ 'message': '',
+ 'userName': '超级管理员',
+ 'userid': '1'
+ }]
+module.exports = [
+ {
+ url: '/loginLog/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: loginloglist,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/log/list',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: loglist,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/log/detail',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ 'createtime': '2020-03-26',
+ 'logtype': '业务日志',
+ 'classname': 'com.casic.missiles.modular.system.controller.RoleController',
+ 'method': 'dataAuthor',
+ 'logname': '数据权限配置',
+ 'succeed': '成功',
+ 'id': '1243081729056264193',
+ 'message': '角色名称=十一室管理员,资源名称=',
+ 'userName': '超级管理员',
+ 'regularMessage': '角色名称=十一室管理员,资源名称=',
+ 'userid': '1'
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/code/logType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: logTypes
+ }
+ }
+ }
+]
diff --git a/mock/system/resource.js b/mock/system/resource.js
new file mode 100644
index 0000000..1122ea8
--- /dev/null
+++ b/mock/system/resource.js
@@ -0,0 +1,1569 @@
+const tree = [
+ {
+ 'checked': false,
+ 'code': 'system',
+ 'id': '105',
+ 'name': '系统管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],',
+ 'pid': '1189107859077373954',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr',
+ 'id': '106',
+ 'name': '用户管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_add',
+ 'id': '107',
+ 'name': '添加用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_edit',
+ 'id': '108',
+ 'name': '修改用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_delete',
+ 'id': '109',
+ 'name': '删除用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_reset',
+ 'id': '110',
+ 'name': '重置密码',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_freeze',
+ 'id': '111',
+ 'name': '冻结用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_unfreeze',
+ 'id': '112',
+ 'name': '解除冻结用户',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_setRole',
+ 'id': '113',
+ 'name': '分配角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role',
+ 'id': '114',
+ 'name': '角色管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_add',
+ 'id': '115',
+ 'name': '添加角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_edit',
+ 'id': '116',
+ 'name': '修改角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_remove',
+ 'id': '117',
+ 'name': '删除角色',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_setAuthority',
+ 'id': '118',
+ 'name': '配置权限',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu',
+ 'id': '119',
+ 'name': '资源管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_add',
+ 'id': '120',
+ 'name': '添加菜单',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_edit',
+ 'id': '121',
+ 'name': '修改菜单',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_remove',
+ 'id': '122',
+ 'name': '删除菜单',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log',
+ 'id': '128',
+ 'name': '日志管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept',
+ 'id': '131',
+ 'name': '组织管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict',
+ 'id': '132',
+ 'name': '字典管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'loginLog',
+ 'id': '133',
+ 'name': '登录日志',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log_clean',
+ 'id': '134',
+ 'name': '清空日志',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'pid': '128',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_add',
+ 'id': '135',
+ 'name': '添加部门',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_update',
+ 'id': '136',
+ 'name': '修改部门',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_delete',
+ 'id': '137',
+ 'name': '删除部门',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_add',
+ 'id': '138',
+ 'name': '添加字典',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_update',
+ 'id': '139',
+ 'name': '修改字典',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_delete',
+ 'id': '140',
+ 'name': '删除字典',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'menu_list',
+ 'id': '151',
+ 'name': '菜单列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'pid': '119',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_list',
+ 'id': '153',
+ 'name': '部门列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dept_detail',
+ 'id': '154',
+ 'name': '部门详情',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'pid': '131',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_list',
+ 'id': '156',
+ 'name': '字典列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'dict_detail',
+ 'id': '157',
+ 'name': '字典详情',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'pid': '132',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log_list',
+ 'id': '158',
+ 'name': '日志列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'pid': '128',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'log_detail',
+ 'id': '159',
+ 'name': '日志详情',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'pid': '128',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'del_login_log',
+ 'id': '160',
+ 'name': '清空登录日志',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'pid': '133',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'login_log_list',
+ 'id': '161',
+ 'name': '登录日志列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'pid': '133',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'role_list',
+ 'id': '164',
+ 'name': '角色列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'mgr_list',
+ 'id': '167',
+ 'name': '用户列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'pid': '106',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'data_author',
+ 'id': '1138364388198715393',
+ 'name': '数据权限',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'pid': '114',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'AreaAdmin',
+ 'id': '1170945119300976642',
+ 'name': '区域管理',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],',
+ 'pid': '105',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'sys',
+ 'id': '1189107859077373954',
+ 'name': '基础权限管理',
+ 'open': true,
+ 'pcodes': '[0],',
+ 'pid': '0',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_listPage',
+ 'id': '1191975090689810434',
+ 'name': '区域列表',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_add',
+ 'id': '1191975312815955969',
+ 'name': '新增区域',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_update',
+ 'id': '1191975427559530497',
+ 'name': '修改区域',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': false,
+ 'code': 'area_delete',
+ 'id': '1191975543687225346',
+ 'name': '区域删除',
+ 'open': false,
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'pid': '1170945119300976642',
+ 'value': ''
+ },
+ {
+ 'checked': true,
+ 'code': '',
+ 'id': '0',
+ 'name': '顶级',
+ 'open': true,
+ 'pcodes': '',
+ 'pid': '',
+ 'value': ''
+ }
+]
+const list = [
+ {
+ 'isopen': '1',
+ 'code': 'system',
+ 'pcode': 'sys',
+ 'num': 4,
+ 'icon': 'icon-setting',
+ 'pid': '1189107859077373954',
+ 'isMenu': '是',
+ 'url': '/system',
+ 'tips': '',
+ 'pcodes': '[0],[sys],',
+ 'name': '系统管理',
+ 'statusName': '启用',
+ 'id': '105',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': true,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr',
+ 'pcode': 'system',
+ 'num': 1,
+ 'icon': 'icon-user',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/mgr',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '用户管理',
+ 'statusName': '启用',
+ 'id': '106',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_add',
+ 'pcode': 'mgr',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '添加用户',
+ 'statusName': '启用',
+ 'id': '107',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_edit',
+ 'pcode': 'mgr',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '修改用户',
+ 'statusName': '启用',
+ 'id': '108',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_delete',
+ 'pcode': 'mgr',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '删除用户',
+ 'statusName': '启用',
+ 'id': '109',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_reset',
+ 'pcode': 'mgr',
+ 'num': 4,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/reset',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '重置密码',
+ 'statusName': '启用',
+ 'id': '110',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_freeze',
+ 'pcode': 'mgr',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/freeze',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '冻结用户',
+ 'statusName': '启用',
+ 'id': '111',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_unfreeze',
+ 'pcode': 'mgr',
+ 'num': 6,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/unfreeze',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '解除冻结用户',
+ 'statusName': '启用',
+ 'id': '112',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_setRole',
+ 'pcode': 'mgr',
+ 'num': 7,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': '/mgr/roleAssign',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '分配角色',
+ 'statusName': '启用',
+ 'id': '113',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role',
+ 'pcode': 'system',
+ 'num': 2,
+ 'icon': 'permission',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/role',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '角色管理',
+ 'statusName': '启用',
+ 'id': '114',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_add',
+ 'pcode': 'role',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '添加角色',
+ 'statusName': '启用',
+ 'id': '115',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_edit',
+ 'pcode': 'role',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '修改角色',
+ 'statusName': '启用',
+ 'id': '116',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_remove',
+ 'pcode': 'role',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '删除角色',
+ 'statusName': '启用',
+ 'id': '117',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_setAuthority',
+ 'pcode': 'role',
+ 'num': 4,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/funcAuthor',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '配置权限',
+ 'statusName': '启用',
+ 'id': '118',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu',
+ 'pcode': 'system',
+ 'num': 4,
+ 'icon': 'function',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/resource',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '资源管理',
+ 'statusName': '启用',
+ 'id': '119',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_add',
+ 'pcode': 'menu',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '添加菜单',
+ 'statusName': '启用',
+ 'id': '120',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_edit',
+ 'pcode': 'menu',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '修改菜单',
+ 'statusName': '启用',
+ 'id': '121',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_remove',
+ 'pcode': 'menu',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '删除菜单',
+ 'statusName': '启用',
+ 'id': '122',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log',
+ 'pcode': 'system',
+ 'num': 6,
+ 'icon': 'log',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/log',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '日志管理',
+ 'statusName': '启用',
+ 'id': '128',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept',
+ 'pcode': 'system',
+ 'num': 3,
+ 'icon': 'dept2',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/dept',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '组织管理',
+ 'statusName': '启用',
+ 'id': '131',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict',
+ 'pcode': 'system',
+ 'num': 4,
+ 'icon': 'icon-dict',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/dict',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '字典管理',
+ 'statusName': '启用',
+ 'id': '132',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'loginLog',
+ 'pcode': 'system',
+ 'num': 6,
+ 'icon': 'task',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/loginLog',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '登录日志',
+ 'statusName': '启用',
+ 'id': '133',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log_clean',
+ 'pcode': 'log',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '128',
+ 'isMenu': '不是',
+ 'url': '/log/delLog',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'name': '清空日志',
+ 'statusName': '启用',
+ 'id': '134',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_add',
+ 'pcode': 'dept',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '添加部门',
+ 'statusName': '启用',
+ 'id': '135',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_update',
+ 'pcode': 'dept',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '修改部门',
+ 'statusName': '启用',
+ 'id': '136',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_delete',
+ 'pcode': 'dept',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '删除部门',
+ 'statusName': '启用',
+ 'id': '137',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_add',
+ 'pcode': 'dict',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '添加字典',
+ 'statusName': '启用',
+ 'id': '138',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_update',
+ 'pcode': 'dict',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '修改字典',
+ 'statusName': '启用',
+ 'id': '139',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_delete',
+ 'pcode': 'dict',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '删除字典',
+ 'statusName': '启用',
+ 'id': '140',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'menu_list',
+ 'pcode': 'menu',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '119',
+ 'isMenu': '不是',
+ 'url': '/resource/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[menu],',
+ 'name': '菜单列表',
+ 'statusName': '启用',
+ 'id': '151',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_list',
+ 'pcode': 'dept',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '部门列表',
+ 'statusName': '启用',
+ 'id': '153',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dept_detail',
+ 'pcode': 'dept',
+ 'num': 6,
+ 'icon': '',
+ 'pid': '131',
+ 'isMenu': '不是',
+ 'url': '/dept/detail',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dept],',
+ 'name': '部门详情',
+ 'statusName': '启用',
+ 'id': '154',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_list',
+ 'pcode': 'dict',
+ 'num': 5,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '字典列表',
+ 'statusName': '启用',
+ 'id': '156',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'dict_detail',
+ 'pcode': 'dict',
+ 'num': 6,
+ 'icon': '',
+ 'pid': '132',
+ 'isMenu': '不是',
+ 'url': '/dict/detail',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[dict],',
+ 'name': '字典详情',
+ 'statusName': '启用',
+ 'id': '157',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log_list',
+ 'pcode': 'log',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '128',
+ 'isMenu': '不是',
+ 'url': '/log/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'name': '日志列表',
+ 'statusName': '启用',
+ 'id': '158',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'log_detail',
+ 'pcode': 'log',
+ 'num': 3,
+ 'icon': '',
+ 'pid': '128',
+ 'isMenu': '不是',
+ 'url': '/log/detail',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[log],',
+ 'name': '日志详情',
+ 'statusName': '启用',
+ 'id': '159',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'del_login_log',
+ 'pcode': 'loginLog',
+ 'num': 1,
+ 'icon': '',
+ 'pid': '133',
+ 'isMenu': '不是',
+ 'url': '/loginLog/delLoginLog',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'name': '清空登录日志',
+ 'statusName': '启用',
+ 'id': '160',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'login_log_list',
+ 'pcode': 'loginLog',
+ 'num': 2,
+ 'icon': '',
+ 'pid': '133',
+ 'isMenu': '不是',
+ 'url': '/loginLog/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[loginLog],',
+ 'name': '登录日志列表',
+ 'statusName': '启用',
+ 'id': '161',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'role_list',
+ 'pcode': 'role',
+ 'num': 7,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '角色列表',
+ 'statusName': '启用',
+ 'id': '164',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'mgr_list',
+ 'pcode': 'mgr',
+ 'num': 10,
+ 'icon': '',
+ 'pid': '106',
+ 'isMenu': '不是',
+ 'url': ' /mgr/list',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[mgr],',
+ 'name': '用户列表',
+ 'statusName': '启用',
+ 'id': '167',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'data_author',
+ 'pcode': 'role',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '114',
+ 'isMenu': '不是',
+ 'url': '/role/dataAuthor',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[role],',
+ 'name': '数据权限',
+ 'statusName': '启用',
+ 'id': '1138364388198715393',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '0'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'AreaAdmin',
+ 'pcode': 'system',
+ 'num': 0,
+ 'icon': 'icon-base',
+ 'pid': '105',
+ 'isMenu': '是',
+ 'url': '/area',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],',
+ 'name': '区域管理',
+ 'statusName': '启用',
+ 'id': '1170945119300976642',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'open': false,
+ 'resourceTypeName': '菜单',
+ 'status': '1',
+ 'resourceType': '03'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'sys',
+ 'pcode': '0',
+ 'num': 0,
+ 'icon': 'icon-setting',
+ 'pid': '0',
+ 'isMenu': '不是',
+ 'url': '/sys',
+ 'tips': '',
+ 'pcodes': '[0],',
+ 'name': '基础权限管理',
+ 'statusName': '启用',
+ 'id': '1189107859077373954',
+ 'ismenu': '0',
+ 'levels': 1,
+ 'open': false,
+ 'resourceTypeName': '',
+ 'status': '1',
+ 'resourceType': '02'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_listPage',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/listPage',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '区域列表',
+ 'statusName': '启用',
+ 'id': '1191975090689810434',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_add',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/add',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '新增区域',
+ 'statusName': '启用',
+ 'id': '1191975312815955969',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_update',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/update',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '修改区域',
+ 'statusName': '启用',
+ 'id': '1191975427559530497',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ },
+ {
+ 'isopen': '0',
+ 'code': 'area_delete',
+ 'pcode': 'AreaAdmin',
+ 'num': 0,
+ 'icon': '',
+ 'pid': '1170945119300976642',
+ 'isMenu': '不是',
+ 'url': '/area/delete',
+ 'tips': '',
+ 'pcodes': '[0],[sys],[system],[AreaAdmin],',
+ 'name': '区域删除',
+ 'statusName': '启用',
+ 'id': '1191975543687225346',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'open': false,
+ 'resourceTypeName': '按钮',
+ 'status': '1',
+ 'resourceType': '04'
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/resource/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: list
+ }
+ }
+ }
+ },
+
+ // mock get all roles form server
+ {
+ url: '/resource/tree',
+ type: 'get',
+ response: _ => {
+ return {
+ 'code': 200,
+ 'message': 'success',
+ 'data': {
+ 'list': tree
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/code/resourceType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '菜单',
+ 'id': '55',
+ 'value': '03'
+ },
+ {
+ 'name': '按钮',
+ 'id': '56',
+ 'value': '04'
+ }
+ ]
+ }
+ }
+ },
+ {
+ url: '/resource/treeListByRoleId',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {
+ 'list': tree
+ }
+ }
+ }
+ },
+ {
+ url: 'resource/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/resource/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/resource/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/system/role.js b/mock/system/role.js
new file mode 100644
index 0000000..508ac84
--- /dev/null
+++ b/mock/system/role.js
@@ -0,0 +1,207 @@
+const tree = [
+ {
+ "id":1,
+ "pid":"0",
+ "name":"超级管理员"
+ }
+]
+const list = [
+ {
+ "deptName":"顶级",
+ "pName":"",
+ "num":1,
+ "name":"超级管理员",
+ "deptid":"0",
+ "pid":"0",
+ "id":1,
+ "version":1,
+ "tips":"administrator"
+ },
+ {
+ "deptName":"高压管网分公司",
+ "pName":"超级管理员",
+ "num":2,
+ "name":"高压管网分公司系统管理员",
+ "deptid":"24",
+ "pid":1,
+ "id":2,
+ "version":"",
+ "tips":"rqadmin"
+ }
+]
+module.exports = [
+ // mock get all routes form server
+ {
+ url: '/role/list',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ list: list
+ }
+ }
+ }
+ },
+
+ // mock get all roles form server
+ {
+ url: '/role/tree',
+ type: 'get',
+ response: _ => {
+ return {
+ 'code': 200,
+ 'message': 'success',
+ 'data': {
+ 'list': tree
+ }
+ }
+ }
+ },
+ {
+ url: '/dict/code/roleType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '菜单',
+ 'id': '55',
+ 'value': '03'
+ },
+ {
+ 'name': '按钮',
+ 'id': '56',
+ 'value': '04'
+ }
+ ]
+ }
+ }
+ },
+ {
+ url: '/role/treeByUserId',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {
+ 'list': [
+ {
+ "id":1,
+ "pid":"0",
+ "name":"超级管理员",
+ "open":true,
+ "checked":false
+ }
+ ]
+ }
+ }
+ }
+ },
+ {
+ url: '/role/treeByRoleId',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {
+ 'list': [
+ {
+ "id":"26",
+ "pid":"24",
+ "name":"运行二所",
+ "open":true,
+ "checked":true
+ }
+ ]
+ }
+ }
+ }
+ },
+ {
+ url: '/role/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/role/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/role/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/role/funcAuthor',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/role/dataAuthor',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/dict/code/dataScopeType',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: [
+ {
+ 'name': '全部',
+ 'id': '55',
+ 'value': '03'
+ },
+ {
+ 'name': '本部门',
+ 'id': '56',
+ 'value': '04'
+ },
+ {
+ 'name': '自定义',
+ 'id': '57',
+ 'value': '04'
+ }
+ ]
+ }
+ }
+ }
+]
diff --git a/mock/system/user.js b/mock/system/user.js
new file mode 100644
index 0000000..5601db9
--- /dev/null
+++ b/mock/system/user.js
@@ -0,0 +1,860 @@
+// 用户详情
+const userinfo = {
+ 'account': 'admin',
+ 'avatar': 'girl.gif',
+ 'dataScope': [
+ '0',
+ '1236854643826184194',
+ '1236856061500936193',
+ '1236856816081391617',
+ '1236856889875976194',
+ '1236856952987668481',
+ '1236857009937928194',
+ '1236857134915604482',
+ '1236857274443321346',
+ '1236857346400800770',
+ '1236857428776931330',
+ '1236857492744261633',
+ '1236857661695021057',
+ '1236857767731220481',
+ '1236857826057211905',
+ '1236857873113108481',
+ '1236857966566395906',
+ '1236858049731055618',
+ '1236858125752815618',
+ '1236858179561541633',
+ '1236858248830472194',
+ '1236858330946555905',
+ '1236858380556783617',
+ '1236858422894088194',
+ '1236858475780067330',
+ '1236858517333037058',
+ '1236858579396153346',
+ '1236858642176495618',
+ '1236858704961032194',
+ '1236858748544045057',
+ '1236858806672904193',
+ '1236858863296008193',
+ '1236858908317667330'
+ ],
+ 'deptId': '0',
+ 'deptName': '顶级',
+ 'devices': [],
+ 'id': '1',
+ 'ipAddr': '124.64.16.144',
+ 'name': '超超级管理员',
+ 'phone': '18200000000',
+ 'roleList': [
+ '1'
+ ],
+ 'roleNames': [
+ '超级管理员'
+ ],
+ 'roleTips': [
+ 'administrator'
+ ],
+ 'scopeType': '4',
+ 'targetId': '',
+ 'targetName': '',
+ 'tenantId': ''
+}
+const list = [
+ {
+ 'birthday': '2017-05-05 00:00:00',
+ 'deptName': '顶级',
+ 'createtime': '2016-01-29 08:49:53',
+ 'roleid': '1',
+ 'sex': '2',
+ 'deptid': '0',
+ 'avatar': 'girl.gif',
+ 'version': 25,
+ 'phone': '18200000000',
+ 'sexName': '女',
+ 'name': '超级管理员',
+ 'roleName': '超级管理员',
+ 'statusName': '启用',
+ 'id': '1',
+ 'account': 'admin',
+ 'email': 'sn93@qq.com',
+ 'status': '1'
+ }
+]
+// 权限列表
+const permisson = {
+ 'menus': [
+ {
+ 'children': '',
+ 'code': 'sys',
+ 'icon': 'icon-setting',
+ 'id': '1189107859077373954',
+ 'ismenu': '0',
+ 'levels': 1,
+ 'name': '基础权限管理',
+ 'num': 0,
+ 'parentId': '0',
+ 'resourceType': '02',
+ 'url': '/sys'
+ },
+ {
+ 'children': '',
+ 'code': 'data_author',
+ 'icon': '',
+ 'id': '1138364388198715393',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '数据权限',
+ 'num': 0,
+ 'parentId': '114',
+ 'resourceType': '0',
+ 'url': '/role/dataAuthor'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr',
+ 'icon': 'icon-user',
+ 'id': '106',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '用户管理',
+ 'num': 1,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/mgr'
+ },
+ {
+ 'children': '',
+ 'code': 'role',
+ 'icon': 'permission',
+ 'id': '114',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '角色管理',
+ 'num': 2,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/role'
+ },
+ {
+ 'children': '',
+ 'code': 'role_edit',
+ 'icon': '',
+ 'id': '116',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '修改角色',
+ 'num': 2,
+ 'parentId': '114',
+ 'resourceType': '0',
+ 'url': '/role/update'
+ },
+ {
+ 'children': '',
+ 'code': 'role_remove',
+ 'icon': '',
+ 'id': '117',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '删除角色',
+ 'num': 3,
+ 'parentId': '114',
+ 'resourceType': '0',
+ 'url': '/role/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'dept',
+ 'icon': 'dept2',
+ 'id': '131',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '组织管理',
+ 'num': 3,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/dept'
+ },
+ {
+ 'children': '',
+ 'code': 'menu',
+ 'icon': 'function',
+ 'id': '119',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '资源管理',
+ 'num': 4,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/resource'
+ },
+ {
+ 'children': '',
+ 'code': 'role_setAuthority',
+ 'icon': '',
+ 'id': '118',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '配置权限',
+ 'num': 4,
+ 'parentId': '114',
+ 'resourceType': '0',
+ 'url': '/role/funcAuthor'
+ },
+ {
+ 'children': '',
+ 'code': 'system',
+ 'icon': 'icon-setting',
+ 'id': '105',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '系统管理',
+ 'num': 4,
+ 'parentId': '1189107859077373954',
+ 'resourceType': '03',
+ 'url': '/system'
+ },
+ {
+ 'children': '',
+ 'code': 'menu_list',
+ 'icon': '',
+ 'id': '151',
+ 'ismenu': '0',
+ 'levels': 2,
+ 'name': '菜单列表',
+ 'num': 5,
+ 'parentId': '119',
+ 'resourceType': '0',
+ 'url': '/resource/list'
+ },
+ {
+ 'children': '',
+ 'code': 'loginLog',
+ 'icon': 'task',
+ 'id': '133',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '登录日志',
+ 'num': 6,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/loginLog'
+ },
+ {
+ 'children': '',
+ 'code': 'log',
+ 'icon': 'log',
+ 'id': '128',
+ 'ismenu': '1',
+ 'levels': 2,
+ 'name': '日志管理',
+ 'num': 6,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/log'
+ },
+ {
+ 'children': '',
+ 'code': 'AreaAdmin',
+ 'icon': 'icon-base',
+ 'id': '1170945119300976642',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'name': '区域管理',
+ 'num': 0,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/area'
+ },
+ {
+ 'children': '',
+ 'code': 'visitor_permission',
+ 'icon': '',
+ 'id': '1202403877222735874',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'name': '访客授权列表',
+ 'num': 0,
+ 'parentId': '1202403125913837569',
+ 'resourceType': '03',
+ 'url': '/acsPermission/listVisitorPerm'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_delete',
+ 'icon': '',
+ 'id': '137',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '删除部门',
+ 'num': 1,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'role_add',
+ 'icon': '',
+ 'id': '115',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加角色',
+ 'num': 1,
+ 'parentId': '114',
+ 'resourceType': '04',
+ 'url': '/role/add'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_add',
+ 'icon': '',
+ 'id': '138',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加字典',
+ 'num': 1,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/add'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_delete',
+ 'icon': '',
+ 'id': '140',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '删除字典',
+ 'num': 1,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_add',
+ 'icon': '',
+ 'id': '135',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加部门',
+ 'num': 1,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/add'
+ },
+ {
+ 'children': '',
+ 'code': 'del_login_log',
+ 'icon': '',
+ 'id': '160',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '清空登录日志',
+ 'num': 1,
+ 'parentId': '133',
+ 'resourceType': '04',
+ 'url': '/loginLog/delLoginLog'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_update',
+ 'icon': '',
+ 'id': '139',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '修改字典',
+ 'num': 1,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/update'
+ },
+ {
+ 'children': '',
+ 'code': 'menu_add',
+ 'icon': '',
+ 'id': '120',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加菜单',
+ 'num': 1,
+ 'parentId': '119',
+ 'resourceType': '04',
+ 'url': '/resource/add'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_add',
+ 'icon': '',
+ 'id': '107',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '添加用户',
+ 'num': 1,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/add'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_update',
+ 'icon': '',
+ 'id': '136',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '修改部门',
+ 'num': 1,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/update'
+ },
+ {
+ 'children': '',
+ 'code': 'menu_edit',
+ 'icon': '',
+ 'id': '121',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '修改菜单',
+ 'num': 2,
+ 'parentId': '119',
+ 'resourceType': '04',
+ 'url': '/resource/update'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_edit',
+ 'icon': '',
+ 'id': '108',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '修改用户',
+ 'num': 2,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/update'
+ },
+ {
+ 'children': '',
+ 'code': 'log_list',
+ 'icon': '',
+ 'id': '158',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '日志列表',
+ 'num': 2,
+ 'parentId': '128',
+ 'resourceType': '04',
+ 'url': '/log/list'
+ },
+ {
+ 'children': '',
+ 'code': 'login_log_list',
+ 'icon': '',
+ 'id': '161',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '登录日志列表',
+ 'num': 2,
+ 'parentId': '133',
+ 'resourceType': '04',
+ 'url': '/loginLog/list'
+ },
+ {
+ 'children': '',
+ 'code': 'log_clean',
+ 'icon': '',
+ 'id': '134',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '清空日志',
+ 'num': 3,
+ 'parentId': '128',
+ 'resourceType': '04',
+ 'url': '/log/delLog'
+ },
+ {
+ 'children': '',
+ 'code': 'log_detail',
+ 'icon': '',
+ 'id': '159',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '日志详情',
+ 'num': 3,
+ 'parentId': '128',
+ 'resourceType': '04',
+ 'url': '/log/detail'
+ },
+ {
+ 'children': '',
+ 'code': 'menu_remove',
+ 'icon': '',
+ 'id': '122',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '删除菜单',
+ 'num': 3,
+ 'parentId': '119',
+ 'resourceType': '04',
+ 'url': '/resource/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_delete',
+ 'icon': '',
+ 'id': '109',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '删除用户',
+ 'num': 3,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_reset',
+ 'icon': '',
+ 'id': '110',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '重置密码',
+ 'num': 4,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/reset'
+ },
+ {
+ 'children': '',
+ 'code': 'dict',
+ 'icon': 'icon-dict',
+ 'id': '132',
+ 'ismenu': '1',
+ 'levels': 3,
+ 'name': '字典管理',
+ 'num': 4,
+ 'parentId': '105',
+ 'resourceType': '03',
+ 'url': '/user'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_list',
+ 'icon': '',
+ 'id': '153',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '部门列表',
+ 'num': 5,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/list'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_list',
+ 'icon': '',
+ 'id': '156',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '字典列表',
+ 'num': 5,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/list'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_freeze',
+ 'icon': '',
+ 'id': '111',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '冻结用户',
+ 'num': 5,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/freeze'
+ },
+ {
+ 'children': '',
+ 'code': 'dept_detail',
+ 'icon': '',
+ 'id': '154',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '部门详情',
+ 'num': 6,
+ 'parentId': '131',
+ 'resourceType': '04',
+ 'url': '/dept/detail'
+ },
+ {
+ 'children': '',
+ 'code': 'dict_detail',
+ 'icon': '',
+ 'id': '157',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '字典详情',
+ 'num': 6,
+ 'parentId': '132',
+ 'resourceType': '04',
+ 'url': '/user/detail'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_unfreeze',
+ 'icon': '',
+ 'id': '112',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '解除冻结用户',
+ 'num': 6,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/unfreeze'
+ },
+ {
+ 'children': '',
+ 'code': 'role_list',
+ 'icon': '',
+ 'id': '164',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '角色列表',
+ 'num': 7,
+ 'parentId': '114',
+ 'resourceType': '04',
+ 'url': '/role/list'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_setRole',
+ 'icon': '',
+ 'id': '113',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '分配角色',
+ 'num': 7,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': '/mgr/roleAssign'
+ },
+ {
+ 'children': '',
+ 'code': 'mgr_list',
+ 'icon': '',
+ 'id': '167',
+ 'ismenu': '0',
+ 'levels': 3,
+ 'name': '用户列表',
+ 'num': 10,
+ 'parentId': '106',
+ 'resourceType': '04',
+ 'url': ' /mgr/list'
+ },
+ {
+ 'children': '',
+ 'code': 'area_add',
+ 'icon': '',
+ 'id': '1191975312815955969',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'name': '新增区域',
+ 'num': 0,
+ 'parentId': '1170945119300976642',
+ 'resourceType': '04',
+ 'url': '/area/add'
+ },
+ {
+ 'children': '',
+ 'code': 'area_delete',
+ 'icon': '',
+ 'id': '1191975543687225346',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'name': '区域删除',
+ 'num': 0,
+ 'parentId': '1170945119300976642',
+ 'resourceType': '04',
+ 'url': '/area/delete'
+ },
+ {
+ 'children': '',
+ 'code': 'area_listPage',
+ 'icon': '',
+ 'id': '1191975090689810434',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'name': '区域列表',
+ 'num': 0,
+ 'parentId': '1170945119300976642',
+ 'resourceType': '04',
+ 'url': '/area/listPage'
+ },
+ {
+ 'children': '',
+ 'code': 'area_update',
+ 'icon': '',
+ 'id': '1191975427559530497',
+ 'ismenu': '0',
+ 'levels': 4,
+ 'name': '修改区域',
+ 'num': 0,
+ 'parentId': '1170945119300976642',
+ 'resourceType': '04',
+ 'url': '/area/update'
+ }
+ ]
+}
+module.exports = [
+ {
+ url: '/user/login',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ success: true,
+ data: {
+ kaptcha: '',
+ token: '02deb42b-5298-431a-b690-d04573c18281'
+
+ }
+ }
+ }
+ },
+ {
+ url: '/user/info',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ success: true,
+ data: userinfo
+ }
+ }
+ },
+ {
+ url: '/user/permission',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ success: true,
+ data: permisson
+ }
+ }
+ },
+ {
+ url: '/user/logout',
+ type: 'get',
+ response: _ => {
+ return {
+ code: 200,
+ success: true
+ }
+ }
+ },
+ {
+ url: '/mgr/list',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ data: {
+ rows: list,
+ total: 2
+ }
+ }
+ }
+ },
+ {
+ url: '/mgr/add',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/update',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/delete',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/freeze',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/unfreeze',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/reset',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/roleAssign',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ },
+ {
+ url: '/mgr/changePwd',
+ type: 'post',
+ response: _ => {
+ return {
+ code: 200,
+ message: 'success',
+ data: {}
+ }
+ }
+ }
+]
diff --git a/mock/table.js b/mock/table.js
new file mode 100644
index 0000000..d3963f4
--- /dev/null
+++ b/mock/table.js
@@ -0,0 +1,20 @@
+import Mock from 'mockjs'
+
+module.exports = {
+ list: () => {
+ const items = Mock.mock({
+ 'items|30': [{
+ id: '@id',
+ title: '@sentence(10, 20)',
+ 'status|1': ['published', 'draft', 'deleted'],
+ author: 'name',
+ display_time: '@datetime',
+ pageviews: '@integer(300, 5000)'
+ }]
+ })
+ return {
+ code: 20000,
+ data: items
+ }
+ }
+}
diff --git a/mock/user.js b/mock/user.js
new file mode 100644
index 0000000..6edeeff
--- /dev/null
+++ b/mock/user.js
@@ -0,0 +1,70 @@
+import { param2Obj } from './utils'
+
+const tokens = {
+ admin: {
+ token: 'admin-token'
+ },
+ editor: {
+ token: 'editor-token'
+ }
+}
+
+const users = {
+ 'admin-token': {
+ roles: ['admin'],
+ btns: ['kaptcha'],
+ introduction: 'I am a 超级管理员',
+ avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif',
+ name: 'mock Admin'
+ },
+ 'editor-token': {
+ roles: ['editor'],
+ btns: [],
+ introduction: 'I am an editor',
+ avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif',
+ name: 'Normal Editor'
+ }
+}
+
+module.exports = {
+ login: res => {
+ const { username } = JSON.parse(res.body)
+ const data = tokens[username]
+
+ if (data) {
+ return {
+ code: 200,
+ success: true,
+ data
+ }
+ }
+ return {
+ code: 60204,
+ success: false,
+ message: '账号或密码错误.'
+ }
+ },
+ getInfo: res => {
+ const { token } = param2Obj(res.url)
+ const info = users[token]
+
+ if (info) {
+ return {
+ code: 200,
+ success: true,
+ data: info
+ }
+ }
+ return {
+ code: 50008,
+ success: false,
+ message: '登录失败,无法获取用户信息.'
+ }
+ },
+ logout: () => {
+ return {
+ code: 200,
+ success: true
+ }
+ }
+}
diff --git a/mock/utils.js b/mock/utils.js
new file mode 100644
index 0000000..8fc4926
--- /dev/null
+++ b/mock/utils.js
@@ -0,0 +1,51 @@
+const Mock = require('mockjs')
+
+const NameList = []
+const count = 100
+
+for (let i = 0; i < count; i++) {
+ NameList.push(Mock.mock({
+ name: '@first'
+ }))
+}
+NameList.push({ name: 'mock-Pan' })
+
+module.exports = [
+ // 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/package-lock.json b/package-lock.json
index b780dad..63c2f82 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -305,6 +305,19 @@
"@babel/helper-validator-identifier": "^7.14.5",
"chalk": "^2.0.0",
"js-tokens": "^4.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"@babel/parser": {
@@ -1273,6 +1286,19 @@
"@jest/source-map": "^24.9.0",
"chalk": "^2.0.1",
"slash": "^2.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"@jest/core": {
@@ -1317,6 +1343,17 @@
"integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
"dev": true
},
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"strip-ansi": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
@@ -1380,6 +1417,17 @@
"string-length": "^2.0.0"
},
"dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -1454,6 +1502,17 @@
"write-file-atomic": "2.4.1"
},
"dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -1507,6 +1566,17 @@
"integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
"dev": true
},
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"is-fullwidth-code-point": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
@@ -2328,6 +2398,19 @@
"request": "^2.88.2",
"semver": "^6.1.0",
"strip-ansi": "^6.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"@vue/component-compiler-utils": {
@@ -3082,6 +3165,19 @@
"babel-preset-jest": "^24.9.0",
"chalk": "^2.4.2",
"slash": "^2.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"babel-loader": {
@@ -3940,14 +4036,54 @@
"dev": true
},
"chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
}
},
"chardet": {
@@ -4364,6 +4500,19 @@
"@types/q": "^1.5.1",
"chalk": "^2.4.1",
"q": "^1.1.2"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"code-point-at": {
@@ -5231,6 +5380,17 @@
"integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=",
"dev": true
},
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"commander": {
"version": "2.15.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
@@ -5823,6 +5983,12 @@
}
}
},
+ "domready": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/domready/-/domready-1.0.8.tgz",
+ "integrity": "sha1-kfJS5Ze2Wvd+dFriTdAYXV4m1Yw=",
+ "dev": true
+ },
"domutils": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
@@ -6195,6 +6361,17 @@
"v8-compile-cache": "^2.0.3"
},
"dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"eslint-scope": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
@@ -8218,6 +8395,12 @@
"integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
"dev": true
},
+ "image-size": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
+ "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=",
+ "dev": true
+ },
"import-cwd": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz",
@@ -9144,6 +9327,19 @@
"prompts": "^2.0.1",
"realpath-native": "^1.1.0",
"yargs": "^13.3.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
}
}
@@ -9182,6 +9378,19 @@
"micromatch": "^3.1.10",
"pretty-format": "^24.9.0",
"realpath-native": "^1.1.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-diff": {
@@ -9194,6 +9403,19 @@
"diff-sequences": "^24.9.0",
"jest-get-type": "^24.9.0",
"pretty-format": "^24.9.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-docblock": {
@@ -9216,6 +9438,19 @@
"jest-get-type": "^24.9.0",
"jest-util": "^24.9.0",
"pretty-format": "^24.9.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-environment-jsdom": {
@@ -9437,6 +9672,19 @@
"jest-util": "^24.9.0",
"pretty-format": "^24.9.0",
"throat": "^4.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-leak-detector": {
@@ -9459,6 +9707,19 @@
"jest-diff": "^24.9.0",
"jest-get-type": "^24.9.0",
"pretty-format": "^24.9.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-message-util": {
@@ -9475,6 +9736,19 @@
"micromatch": "^3.1.10",
"slash": "^2.0.0",
"stack-utils": "^1.0.1"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-mock": {
@@ -9509,6 +9783,19 @@
"chalk": "^2.0.1",
"jest-pnp-resolver": "^1.2.1",
"realpath-native": "^1.1.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-resolve-dependencies": {
@@ -9547,6 +9834,19 @@
"jest-worker": "^24.6.0",
"source-map-support": "^0.5.6",
"throat": "^4.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-runtime": {
@@ -9578,6 +9878,19 @@
"slash": "^2.0.0",
"strip-bom": "^3.0.0",
"yargs": "^13.3.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-serializer": {
@@ -9614,6 +9927,19 @@
"natural-compare": "^1.4.0",
"pretty-format": "^24.9.0",
"semver": "^6.2.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"jest-transform-stub": {
@@ -9642,6 +9968,17 @@
"source-map": "^0.6.0"
},
"dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"ci-info": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
@@ -9684,6 +10021,17 @@
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
"dev": true
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
}
}
},
@@ -9711,6 +10059,17 @@
"type-fest": "^0.21.3"
}
},
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"slash": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
@@ -9764,6 +10123,17 @@
"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
"integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
"dev": true
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
}
}
},
@@ -9788,6 +10158,12 @@
}
}
},
+ "js-base64": {
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz",
+ "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==",
+ "dev": true
+ },
"js-beautify": {
"version": "1.14.0",
"resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.14.0.tgz",
@@ -9993,6 +10369,19 @@
"requires": {
"chalk": "^2.3.0",
"shell-quote": "^1.6.1"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"launch-editor-middleware": {
@@ -10499,6 +10888,19 @@
"dev": true,
"requires": {
"chalk": "^2.0.1"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"log-update": {
@@ -10646,6 +11048,23 @@
"integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
"dev": true
},
+ "merge-options": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-1.0.1.tgz",
+ "integrity": "sha512-iuPV41VWKWBIOpBsjoxjDZw8/GbSfZ2mk7N1453bwMrfzdrIk7EzBd+8UVR6rkw67th7xnk9Dytl3J+lHPdxvg==",
+ "dev": true,
+ "requires": {
+ "is-plain-obj": "^1.1"
+ },
+ "dependencies": {
+ "is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
+ "dev": true
+ }
+ }
+ },
"merge-source-map": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz",
@@ -10846,6 +11265,12 @@
"through2": "^2.0.0"
}
},
+ "mitt": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.1.2.tgz",
+ "integrity": "sha1-OA5hSA1qYVtmDwertg1R4KTkvtY=",
+ "dev": true
+ },
"mixin-deep": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
@@ -10876,6 +11301,12 @@
"minimist": "^1.2.5"
}
},
+ "mock": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/mock/-/mock-0.1.1.tgz",
+ "integrity": "sha1-5+NYnH5rM3bWn1o+RwtWYEQXxjM=",
+ "dev": true
+ },
"mockjs": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/mockjs/-/mockjs-1.1.0.tgz",
@@ -10943,6 +11374,12 @@
"thenify-all": "^1.0.0"
}
},
+ "nanoid": {
+ "version": "3.1.25",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz",
+ "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==",
+ "dev": true
+ },
"nanomatch": {
"version": "1.2.13",
"resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
@@ -11426,6 +11863,17 @@
"wcwidth": "^1.0.1"
},
"dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"strip-ansi": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
@@ -11877,6 +12325,28 @@
"supports-color": "^6.1.0"
},
"dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -12370,6 +12840,28 @@
}
}
},
+ "postcss-prefix-selector": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/postcss-prefix-selector/-/postcss-prefix-selector-1.10.0.tgz",
+ "integrity": "sha512-VcC/zCXVfFdGyn+Fo9+mxnxBu+hT61uMJJBdfWBbIeDrcE6g8s+26SUPTMpz8kc9wfoLpJGAZZ4QwbVqwxpNRA==",
+ "dev": true,
+ "requires": {
+ "postcss": "^8.2.10"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "8.3.6",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.6.tgz",
+ "integrity": "sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A==",
+ "dev": true,
+ "requires": {
+ "colorette": "^1.2.2",
+ "nanoid": "^3.1.23",
+ "source-map-js": "^0.6.2"
+ }
+ }
+ }
+ },
"postcss-reduce-initial": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz",
@@ -12448,6 +12940,104 @@
"integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
"dev": true
},
+ "posthtml": {
+ "version": "0.9.2",
+ "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.9.2.tgz",
+ "integrity": "sha1-9MBtufZ7Yf0XxOJW5+PZUVv3Jv0=",
+ "dev": true,
+ "requires": {
+ "posthtml-parser": "^0.2.0",
+ "posthtml-render": "^1.0.5"
+ }
+ },
+ "posthtml-parser": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.2.1.tgz",
+ "integrity": "sha1-NdUw3jhnQMK6JP8usvrznM3ycd0=",
+ "dev": true,
+ "requires": {
+ "htmlparser2": "^3.8.3",
+ "isobject": "^2.1.0"
+ },
+ "dependencies": {
+ "domhandler": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
+ "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1"
+ }
+ },
+ "entities": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
+ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
+ "dev": true
+ },
+ "htmlparser2": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
+ "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^1.3.1",
+ "domhandler": "^2.3.0",
+ "domutils": "^1.5.1",
+ "entities": "^1.1.1",
+ "inherits": "^2.0.1",
+ "readable-stream": "^3.1.1"
+ }
+ },
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ },
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ }
+ }
+ },
+ "posthtml-rename-id": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/posthtml-rename-id/-/posthtml-rename-id-1.0.12.tgz",
+ "integrity": "sha512-UKXf9OF/no8WZo9edRzvuMenb6AD5hDLzIepJW+a4oJT+T/Lx7vfMYWT4aWlGNQh0WMhnUx1ipN9OkZ9q+ddEw==",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "1.0.5"
+ }
+ },
+ "posthtml-render": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-1.4.0.tgz",
+ "integrity": "sha512-W1779iVHGfq0Fvh2PROhCe2QhB8mEErgqzo1wpIt36tCgChafP+hbXIhLDOM8ePJrZcFs0vkNEtdibEWVqChqw==",
+ "dev": true
+ },
+ "posthtml-svg-mode": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/posthtml-svg-mode/-/posthtml-svg-mode-1.0.3.tgz",
+ "integrity": "sha512-hEqw9NHZ9YgJ2/0G7CECOeuLQKZi8HjWLkBaSVtOWjygQ9ZD8P7tqeowYs7WrFdKsWEKG7o+IlsPY8jrr0CJpQ==",
+ "dev": true,
+ "requires": {
+ "merge-options": "1.0.1",
+ "posthtml": "^0.9.2",
+ "posthtml-parser": "^0.2.1",
+ "posthtml-render": "^1.0.6"
+ }
+ },
"prelude-ls": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
@@ -13853,6 +14443,12 @@
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
"dev": true
},
+ "source-map-js": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz",
+ "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==",
+ "dev": true
+ },
"source-map-resolve": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
@@ -14280,6 +14876,245 @@
"has-flag": "^3.0.0"
}
},
+ "svg-baker": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/svg-baker/-/svg-baker-1.7.0.tgz",
+ "integrity": "sha512-nibslMbkXOIkqKVrfcncwha45f97fGuAOn1G99YwnwTj8kF9YiM6XexPcUso97NxOm6GsP0SIvYVIosBis1xLg==",
+ "dev": true,
+ "requires": {
+ "bluebird": "^3.5.0",
+ "clone": "^2.1.1",
+ "he": "^1.1.1",
+ "image-size": "^0.5.1",
+ "loader-utils": "^1.1.0",
+ "merge-options": "1.0.1",
+ "micromatch": "3.1.0",
+ "postcss": "^5.2.17",
+ "postcss-prefix-selector": "^1.6.0",
+ "posthtml-rename-id": "^1.0",
+ "posthtml-svg-mode": "^1.0.3",
+ "query-string": "^4.3.2",
+ "traverse": "^0.6.6"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+ "dev": true
+ },
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
+ }
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.0.tgz",
+ "integrity": "sha512-3StSelAE+hnRvMs8IdVW7Uhk8CVed5tp+kLLGlBP6WiRAXS21GPGu/Nat4WNPXj2Eoc24B02SaeoyozPMfj0/g==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.2.2",
+ "define-property": "^1.0.0",
+ "extend-shallow": "^2.0.1",
+ "extglob": "^2.0.2",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^5.0.2",
+ "nanomatch": "^1.2.1",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ }
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "svg-baker-runtime": {
+ "version": "1.4.7",
+ "resolved": "https://registry.npmjs.org/svg-baker-runtime/-/svg-baker-runtime-1.4.7.tgz",
+ "integrity": "sha512-Zorfwwj5+lWjk/oxwSMsRdS2sPQQdTmmsvaSpzU+i9ZWi3zugHLt6VckWfnswphQP0LmOel3nggpF5nETbt6xw==",
+ "dev": true,
+ "requires": {
+ "deepmerge": "1.3.2",
+ "mitt": "1.1.2",
+ "svg-baker": "^1.7.0"
+ },
+ "dependencies": {
+ "deepmerge": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.3.2.tgz",
+ "integrity": "sha1-FmNpFinU2/42T6EqKk8KqGqjoFA=",
+ "dev": true
+ }
+ }
+ },
+ "svg-sprite-loader": {
+ "version": "6.0.9",
+ "resolved": "https://registry.npmjs.org/svg-sprite-loader/-/svg-sprite-loader-6.0.9.tgz",
+ "integrity": "sha512-V/F3iI1J/xWeO0cRXkEFvhujvBQ3deAPFlhip+AW00Hs+9gighu619mblucIWdRPmDMfcSWJD/ZuXf6HldIskw==",
+ "dev": true,
+ "requires": {
+ "bluebird": "^3.5.0",
+ "deepmerge": "1.3.2",
+ "domready": "1.0.8",
+ "escape-string-regexp": "1.0.5",
+ "loader-utils": "^1.1.0",
+ "svg-baker": "^1.5.0",
+ "svg-baker-runtime": "^1.4.7",
+ "url-slug": "2.0.0"
+ },
+ "dependencies": {
+ "deepmerge": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.3.2.tgz",
+ "integrity": "sha1-FmNpFinU2/42T6EqKk8KqGqjoFA=",
+ "dev": true
+ }
+ }
+ },
"svg-tags": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz",
@@ -14307,6 +15142,17 @@
"util.promisify": "~1.0.0"
},
"dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"util.promisify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz",
@@ -14727,6 +15573,12 @@
"punycode": "^2.1.0"
}
},
+ "traverse": {
+ "version": "0.6.6",
+ "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz",
+ "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=",
+ "dev": true
+ },
"tryer": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz",
@@ -14925,6 +15777,12 @@
"integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==",
"dev": true
},
+ "unidecode": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/unidecode/-/unidecode-0.1.8.tgz",
+ "integrity": "sha1-77swFTi8RSRqmsjFWdcvAVMFBT4=",
+ "dev": true
+ },
"union-value": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
@@ -15097,6 +15955,15 @@
"requires-port": "^1.0.0"
}
},
+ "url-slug": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/url-slug/-/url-slug-2.0.0.tgz",
+ "integrity": "sha1-p4nVrtSZXA2VrzM3etHVxo1NcCc=",
+ "dev": true,
+ "requires": {
+ "unidecode": "0.1.8"
+ }
+ },
"use": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
@@ -15263,6 +16130,19 @@
"source-map": "^0.5.6",
"tsconfig": "^7.0.0",
"vue-template-es2015-compiler": "^1.6.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
}
},
"vue-loader": {
@@ -15671,6 +16551,17 @@
"integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
"dev": true
},
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
"lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
diff --git a/package.json b/package.json
index 25b0d78..defa84a 100644
--- a/package.json
+++ b/package.json
@@ -34,14 +34,19 @@
"@vue/eslint-config-standard": "^5.1.2",
"@vue/test-utils": "^1.0.3",
"babel-eslint": "^10.1.0",
+ "babel-plugin-dynamic-import-node": "^2.3.3",
+ "chalk": "^4.1.2",
+ "chokidar": "^3.5.2",
"eslint": "^6.7.2",
"eslint-plugin-import": "^2.20.2",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-promise": "^4.2.1",
"eslint-plugin-standard": "^4.0.0",
"eslint-plugin-vue": "^6.2.2",
+ "mock": "^0.1.1",
"sass": "^1.26.5",
"sass-loader": "^8.0.2",
+ "svg-sprite-loader": "^6.0.9",
"vue-template-compiler": "^2.6.11"
}
}
diff --git a/src/components/SvgIcon/index.vue b/src/components/SvgIcon/index.vue
index 27da76c..5c0f02a 100644
--- a/src/components/SvgIcon/index.vue
+++ b/src/components/SvgIcon/index.vue
@@ -1,10 +1,14 @@
-
+
+
diff --git a/src/layout/components/Sidebar/FixiOSBug.js b/src/layout/components/Sidebar/FixiOSBug.js
new file mode 100644
index 0000000..bc14856
--- /dev/null
+++ b/src/layout/components/Sidebar/FixiOSBug.js
@@ -0,0 +1,26 @@
+export default {
+ computed: {
+ device() {
+ return this.$store.state.app.device
+ }
+ },
+ mounted() {
+ // In order to fix the click on menu on the ios device will trigger the mouseleave bug
+ // https://github.com/PanJiaChen/vue-element-admin/issues/1135
+ this.fixBugIniOS()
+ },
+ methods: {
+ fixBugIniOS() {
+ const $subMenu = this.$refs.subMenu
+ if ($subMenu) {
+ const handleMouseleave = $subMenu.handleMouseleave
+ $subMenu.handleMouseleave = (e) => {
+ if (this.device === 'mobile') {
+ return
+ }
+ handleMouseleave(e)
+ }
+ }
+ }
+ }
+}
diff --git a/src/layout/components/Sidebar/Link.vue b/src/layout/components/Sidebar/Link.vue
index eb4dd10..530b3d5 100644
--- a/src/layout/components/Sidebar/Link.vue
+++ b/src/layout/components/Sidebar/Link.vue
@@ -1,7 +1,5 @@
-
-
-
+
@@ -16,19 +14,28 @@
required: true
}
},
+ computed: {
+ isExternal() {
+ return isExternal(this.to)
+ },
+ type() {
+ if (this.isExternal) {
+ return 'a'
+ }
+ return 'router-link'
+ }
+ },
methods: {
- linkProps(url) {
- if (isExternal(url)) {
+ linkProps(to) {
+ if (this.isExternal) {
return {
- is: 'a',
- href: url,
+ href: to,
target: '_blank',
rel: 'noopener'
}
}
return {
- is: 'router-link',
- to: url
+ to: to
}
}
}
diff --git a/src/layout/components/Sidebar/SidebarItem.vue b/src/layout/components/Sidebar/SidebarItem.vue
index ba5f62b..009ebab 100644
--- a/src/layout/components/Sidebar/SidebarItem.vue
+++ b/src/layout/components/Sidebar/SidebarItem.vue
@@ -1,48 +1,55 @@
-