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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ + + 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 @@ + + diff --git a/src/views/system/log/listLog.vue b/src/views/system/log/listLog.vue index 5cc7764..db723a1 100644 --- a/src/views/system/log/listLog.vue +++ b/src/views/system/log/listLog.vue @@ -71,7 +71,7 @@ width: 150 }, { - text: '账户', + text: '账号', value: 'userName' }, { 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 @@ + + diff --git a/src/views/system/log/listLog.vue b/src/views/system/log/listLog.vue index 5cc7764..db723a1 100644 --- a/src/views/system/log/listLog.vue +++ b/src/views/system/log/listLog.vue @@ -71,7 +71,7 @@ width: 150 }, { - text: '账户', + text: '账号', value: 'userName' }, { diff --git a/src/views/system/log/loginLog.vue b/src/views/system/log/loginLog.vue index a85709e..25b34e6 100644 --- a/src/views/system/log/loginLog.vue +++ b/src/views/system/log/loginLog.vue @@ -57,7 +57,7 @@ width: 150 }, { - text: '账户', + text: '用户', value: 'userName' }, { @@ -69,7 +69,7 @@ value: 'succeed' }, { - text: '时间', + text: '操作时间', value: 'createtime' } ], 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 @@ + + diff --git a/src/views/system/log/listLog.vue b/src/views/system/log/listLog.vue index 5cc7764..db723a1 100644 --- a/src/views/system/log/listLog.vue +++ b/src/views/system/log/listLog.vue @@ -71,7 +71,7 @@ width: 150 }, { - text: '账户', + text: '账号', value: 'userName' }, { diff --git a/src/views/system/log/loginLog.vue b/src/views/system/log/loginLog.vue index a85709e..25b34e6 100644 --- a/src/views/system/log/loginLog.vue +++ b/src/views/system/log/loginLog.vue @@ -57,7 +57,7 @@ width: 150 }, { - text: '账户', + text: '用户', value: 'userName' }, { @@ -69,7 +69,7 @@ value: 'succeed' }, { - text: '时间', + text: '操作时间', value: 'createtime' } ], diff --git a/src/views/system/resource/editResource.vue b/src/views/system/resource/editResource.vue index 0de0047..a86dcf3 100644 --- a/src/views/system/resource/editResource.vue +++ b/src/views/system/resource/editResource.vue @@ -94,14 +94,9 @@ children: 'children' }, resourceTypeList: [ - { - value: '03', - name: '菜单' - }, - { - value: '04', - name: '按钮' - } + { value: '02', name: '系统' }, + { value: '03', name: '菜单' }, + { value: '04', name: '按钮' } ], // 资源类型 resourceTreeList: null, // 资源树列表数据 textMap: { @@ -114,7 +109,7 @@ pid: [{ required: true, message: '父资源必选', trigger: ['blur', 'change'] }], num: [{ required: true, message: '排序不能为空' }, { type: 'number', message: '必须为数字值' }], resourceType: [{ required: true, message: '资源类型必选', trigger: ['blur', 'change'] }], - url: [{ required: true, message: 'url不能为空', trigger: ['blur', 'change'] }] + url: [{ required: true, message: '资源路径不能为空', trigger: ['blur', 'change'] }] } // 前端校验规则 } }, @@ -130,9 +125,9 @@ }, methods: { // 初始化对话框 - initDialog: function(dialogStatus, dialogFormVisible, row = null) { + initDialog: function(dialogStatus, row = null) { this.dialogStatus = dialogStatus - this.dialogFormVisible = dialogFormVisible + this.dialogFormVisible = true this.btnLoading = false this.fetchPcode() this.fetchResourceType() @@ -157,7 +152,6 @@ // 加载父资源树形下拉菜单 fetchPcode: function() { getResourceTreeList(this.listQuery).then(response => { - console.log('fetchPcode:') console.log(response.data) if (response.data.list) { this.resourceTreeList = toTreeList(response.data.list, '0', true) @@ -170,7 +164,6 @@ getResourceTypeList(this.listQuery).then(response => { if (response.data) { this.resourceTypeList = response.data - console.log(this.resourceTreeList) } }) }, 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 @@ + + diff --git a/src/views/system/log/listLog.vue b/src/views/system/log/listLog.vue index 5cc7764..db723a1 100644 --- a/src/views/system/log/listLog.vue +++ b/src/views/system/log/listLog.vue @@ -71,7 +71,7 @@ width: 150 }, { - text: '账户', + text: '账号', value: 'userName' }, { diff --git a/src/views/system/log/loginLog.vue b/src/views/system/log/loginLog.vue index a85709e..25b34e6 100644 --- a/src/views/system/log/loginLog.vue +++ b/src/views/system/log/loginLog.vue @@ -57,7 +57,7 @@ width: 150 }, { - text: '账户', + text: '用户', value: 'userName' }, { @@ -69,7 +69,7 @@ value: 'succeed' }, { - text: '时间', + text: '操作时间', value: 'createtime' } ], diff --git a/src/views/system/resource/editResource.vue b/src/views/system/resource/editResource.vue index 0de0047..a86dcf3 100644 --- a/src/views/system/resource/editResource.vue +++ b/src/views/system/resource/editResource.vue @@ -94,14 +94,9 @@ children: 'children' }, resourceTypeList: [ - { - value: '03', - name: '菜单' - }, - { - value: '04', - name: '按钮' - } + { value: '02', name: '系统' }, + { value: '03', name: '菜单' }, + { value: '04', name: '按钮' } ], // 资源类型 resourceTreeList: null, // 资源树列表数据 textMap: { @@ -114,7 +109,7 @@ pid: [{ required: true, message: '父资源必选', trigger: ['blur', 'change'] }], num: [{ required: true, message: '排序不能为空' }, { type: 'number', message: '必须为数字值' }], resourceType: [{ required: true, message: '资源类型必选', trigger: ['blur', 'change'] }], - url: [{ required: true, message: 'url不能为空', trigger: ['blur', 'change'] }] + url: [{ required: true, message: '资源路径不能为空', trigger: ['blur', 'change'] }] } // 前端校验规则 } }, @@ -130,9 +125,9 @@ }, methods: { // 初始化对话框 - initDialog: function(dialogStatus, dialogFormVisible, row = null) { + initDialog: function(dialogStatus, row = null) { this.dialogStatus = dialogStatus - this.dialogFormVisible = dialogFormVisible + this.dialogFormVisible = true this.btnLoading = false this.fetchPcode() this.fetchResourceType() @@ -157,7 +152,6 @@ // 加载父资源树形下拉菜单 fetchPcode: function() { getResourceTreeList(this.listQuery).then(response => { - console.log('fetchPcode:') console.log(response.data) if (response.data.list) { this.resourceTreeList = toTreeList(response.data.list, '0', true) @@ -170,7 +164,6 @@ getResourceTypeList(this.listQuery).then(response => { if (response.data) { this.resourceTypeList = response.data - console.log(this.resourceTreeList) } }) }, diff --git a/src/views/system/resource/listResource.vue b/src/views/system/resource/listResource.vue index 8bbd886..d7768e4 100644 --- a/src/views/system/resource/listResource.vue +++ b/src/views/system/resource/listResource.vue @@ -11,11 +11,13 @@ + + @@ -54,43 +56,14 @@ resourceUrl: '' // 资源路径 }, // 查询条件 columns: [ - { - text: '资源名称', - value: 'name', - type: 'expand' - }, - { - text: '资源编号', - value: 'code' - }, - { - text: '资源父编号', - value: 'pcode' - }, - { - text: '请求地址', - value: 'url' - }, - { - text: '排序', - value: 'num', - width: 50 - }, - { - text: '层级', - value: 'levels', - width: 50 - }, - { - text: '资源类型', - value: 'resourceTypeName', - width: 80 - }, - { - text: '状态', - value: 'status', - width: 70 - } + { text: '资源名称', value: 'name', type: 'expand', align: 'left' }, + { text: '资源编号', value: 'code' }, + { text: '父资源编号', value: 'pcode' }, + { text: '资源路径', value: 'url' }, + { text: '排序', value: 'num', width: 50 }, + { text: '层级', value: 'levels', width: 50 }, + { text: '资源类型', value: 'resourceTypeName', width: 80 }, + // { text: '状态', value: 'status', width: 70 } ], // 动态加载的表头 list: [], // 资源数据列表 listLoading: true, // 列表加载动画是否显示 @@ -109,13 +82,13 @@ methods: { add() { this.dialogStatus = 'create' - this.dialogFormVisible = true - this.$refs.editResource.initDialog(this.dialogStatus, this.dialogFormVisible) + // this.dialogFormVisible = true + this.$refs.editResource.initDialog(this.dialogStatus) }, edit(row) { this.dialogStatus = 'update' - this.dialogFormVisible = true - this.$refs.editResource.initDialog(this.dialogStatus, this.dialogFormVisible, row) + // this.dialogFormVisible = true + this.$refs.editResource.initDialog(this.dialogStatus, row) }, del(row) { this.$confirm( @@ -145,19 +118,6 @@ this.list = toTreeList(response.data.list, '0', false) this.listLoading = false }) - }, - // 在嵌套列表list中删除指定元素 - deleteItem(list, des) { - list.forEach((value, index) => { - if (value.id === des.id) { - console.log('findit') - list.splice(index, 1) - } else { - if (value.children && value.children.length > 0) { - this.deleteItem(value.children, des) - } - } - }) } } } 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 @@ + + diff --git a/src/views/system/log/listLog.vue b/src/views/system/log/listLog.vue index 5cc7764..db723a1 100644 --- a/src/views/system/log/listLog.vue +++ b/src/views/system/log/listLog.vue @@ -71,7 +71,7 @@ width: 150 }, { - text: '账户', + text: '账号', value: 'userName' }, { diff --git a/src/views/system/log/loginLog.vue b/src/views/system/log/loginLog.vue index a85709e..25b34e6 100644 --- a/src/views/system/log/loginLog.vue +++ b/src/views/system/log/loginLog.vue @@ -57,7 +57,7 @@ width: 150 }, { - text: '账户', + text: '用户', value: 'userName' }, { @@ -69,7 +69,7 @@ value: 'succeed' }, { - text: '时间', + text: '操作时间', value: 'createtime' } ], diff --git a/src/views/system/resource/editResource.vue b/src/views/system/resource/editResource.vue index 0de0047..a86dcf3 100644 --- a/src/views/system/resource/editResource.vue +++ b/src/views/system/resource/editResource.vue @@ -94,14 +94,9 @@ children: 'children' }, resourceTypeList: [ - { - value: '03', - name: '菜单' - }, - { - value: '04', - name: '按钮' - } + { value: '02', name: '系统' }, + { value: '03', name: '菜单' }, + { value: '04', name: '按钮' } ], // 资源类型 resourceTreeList: null, // 资源树列表数据 textMap: { @@ -114,7 +109,7 @@ pid: [{ required: true, message: '父资源必选', trigger: ['blur', 'change'] }], num: [{ required: true, message: '排序不能为空' }, { type: 'number', message: '必须为数字值' }], resourceType: [{ required: true, message: '资源类型必选', trigger: ['blur', 'change'] }], - url: [{ required: true, message: 'url不能为空', trigger: ['blur', 'change'] }] + url: [{ required: true, message: '资源路径不能为空', trigger: ['blur', 'change'] }] } // 前端校验规则 } }, @@ -130,9 +125,9 @@ }, methods: { // 初始化对话框 - initDialog: function(dialogStatus, dialogFormVisible, row = null) { + initDialog: function(dialogStatus, row = null) { this.dialogStatus = dialogStatus - this.dialogFormVisible = dialogFormVisible + this.dialogFormVisible = true this.btnLoading = false this.fetchPcode() this.fetchResourceType() @@ -157,7 +152,6 @@ // 加载父资源树形下拉菜单 fetchPcode: function() { getResourceTreeList(this.listQuery).then(response => { - console.log('fetchPcode:') console.log(response.data) if (response.data.list) { this.resourceTreeList = toTreeList(response.data.list, '0', true) @@ -170,7 +164,6 @@ getResourceTypeList(this.listQuery).then(response => { if (response.data) { this.resourceTypeList = response.data - console.log(this.resourceTreeList) } }) }, diff --git a/src/views/system/resource/listResource.vue b/src/views/system/resource/listResource.vue index 8bbd886..d7768e4 100644 --- a/src/views/system/resource/listResource.vue +++ b/src/views/system/resource/listResource.vue @@ -11,11 +11,13 @@ + + @@ -54,43 +56,14 @@ resourceUrl: '' // 资源路径 }, // 查询条件 columns: [ - { - text: '资源名称', - value: 'name', - type: 'expand' - }, - { - text: '资源编号', - value: 'code' - }, - { - text: '资源父编号', - value: 'pcode' - }, - { - text: '请求地址', - value: 'url' - }, - { - text: '排序', - value: 'num', - width: 50 - }, - { - text: '层级', - value: 'levels', - width: 50 - }, - { - text: '资源类型', - value: 'resourceTypeName', - width: 80 - }, - { - text: '状态', - value: 'status', - width: 70 - } + { text: '资源名称', value: 'name', type: 'expand', align: 'left' }, + { text: '资源编号', value: 'code' }, + { text: '父资源编号', value: 'pcode' }, + { text: '资源路径', value: 'url' }, + { text: '排序', value: 'num', width: 50 }, + { text: '层级', value: 'levels', width: 50 }, + { text: '资源类型', value: 'resourceTypeName', width: 80 }, + // { text: '状态', value: 'status', width: 70 } ], // 动态加载的表头 list: [], // 资源数据列表 listLoading: true, // 列表加载动画是否显示 @@ -109,13 +82,13 @@ methods: { add() { this.dialogStatus = 'create' - this.dialogFormVisible = true - this.$refs.editResource.initDialog(this.dialogStatus, this.dialogFormVisible) + // this.dialogFormVisible = true + this.$refs.editResource.initDialog(this.dialogStatus) }, edit(row) { this.dialogStatus = 'update' - this.dialogFormVisible = true - this.$refs.editResource.initDialog(this.dialogStatus, this.dialogFormVisible, row) + // this.dialogFormVisible = true + this.$refs.editResource.initDialog(this.dialogStatus, row) }, del(row) { this.$confirm( @@ -145,19 +118,6 @@ this.list = toTreeList(response.data.list, '0', false) this.listLoading = false }) - }, - // 在嵌套列表list中删除指定元素 - deleteItem(list, des) { - list.forEach((value, index) => { - if (value.id === des.id) { - console.log('findit') - list.splice(index, 1) - } else { - if (value.children && value.children.length > 0) { - this.deleteItem(value.children, des) - } - } - }) } } } diff --git a/src/views/system/role/dataPerm.vue b/src/views/system/role/dataPerm.vue index b5fb946..fe881dc 100644 --- a/src/views/system/role/dataPerm.vue +++ b/src/views/system/role/dataPerm.vue @@ -10,6 +10,7 @@ :default-checked-keys="defaultChecked" show-checkbox node-key="id" + check-strictly @check-change="handleCheckChange" /> 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 @@ + + diff --git a/src/views/system/log/listLog.vue b/src/views/system/log/listLog.vue index 5cc7764..db723a1 100644 --- a/src/views/system/log/listLog.vue +++ b/src/views/system/log/listLog.vue @@ -71,7 +71,7 @@ width: 150 }, { - text: '账户', + text: '账号', value: 'userName' }, { diff --git a/src/views/system/log/loginLog.vue b/src/views/system/log/loginLog.vue index a85709e..25b34e6 100644 --- a/src/views/system/log/loginLog.vue +++ b/src/views/system/log/loginLog.vue @@ -57,7 +57,7 @@ width: 150 }, { - text: '账户', + text: '用户', value: 'userName' }, { @@ -69,7 +69,7 @@ value: 'succeed' }, { - text: '时间', + text: '操作时间', value: 'createtime' } ], diff --git a/src/views/system/resource/editResource.vue b/src/views/system/resource/editResource.vue index 0de0047..a86dcf3 100644 --- a/src/views/system/resource/editResource.vue +++ b/src/views/system/resource/editResource.vue @@ -94,14 +94,9 @@ children: 'children' }, resourceTypeList: [ - { - value: '03', - name: '菜单' - }, - { - value: '04', - name: '按钮' - } + { value: '02', name: '系统' }, + { value: '03', name: '菜单' }, + { value: '04', name: '按钮' } ], // 资源类型 resourceTreeList: null, // 资源树列表数据 textMap: { @@ -114,7 +109,7 @@ pid: [{ required: true, message: '父资源必选', trigger: ['blur', 'change'] }], num: [{ required: true, message: '排序不能为空' }, { type: 'number', message: '必须为数字值' }], resourceType: [{ required: true, message: '资源类型必选', trigger: ['blur', 'change'] }], - url: [{ required: true, message: 'url不能为空', trigger: ['blur', 'change'] }] + url: [{ required: true, message: '资源路径不能为空', trigger: ['blur', 'change'] }] } // 前端校验规则 } }, @@ -130,9 +125,9 @@ }, methods: { // 初始化对话框 - initDialog: function(dialogStatus, dialogFormVisible, row = null) { + initDialog: function(dialogStatus, row = null) { this.dialogStatus = dialogStatus - this.dialogFormVisible = dialogFormVisible + this.dialogFormVisible = true this.btnLoading = false this.fetchPcode() this.fetchResourceType() @@ -157,7 +152,6 @@ // 加载父资源树形下拉菜单 fetchPcode: function() { getResourceTreeList(this.listQuery).then(response => { - console.log('fetchPcode:') console.log(response.data) if (response.data.list) { this.resourceTreeList = toTreeList(response.data.list, '0', true) @@ -170,7 +164,6 @@ getResourceTypeList(this.listQuery).then(response => { if (response.data) { this.resourceTypeList = response.data - console.log(this.resourceTreeList) } }) }, diff --git a/src/views/system/resource/listResource.vue b/src/views/system/resource/listResource.vue index 8bbd886..d7768e4 100644 --- a/src/views/system/resource/listResource.vue +++ b/src/views/system/resource/listResource.vue @@ -11,11 +11,13 @@ + + @@ -54,43 +56,14 @@ resourceUrl: '' // 资源路径 }, // 查询条件 columns: [ - { - text: '资源名称', - value: 'name', - type: 'expand' - }, - { - text: '资源编号', - value: 'code' - }, - { - text: '资源父编号', - value: 'pcode' - }, - { - text: '请求地址', - value: 'url' - }, - { - text: '排序', - value: 'num', - width: 50 - }, - { - text: '层级', - value: 'levels', - width: 50 - }, - { - text: '资源类型', - value: 'resourceTypeName', - width: 80 - }, - { - text: '状态', - value: 'status', - width: 70 - } + { text: '资源名称', value: 'name', type: 'expand', align: 'left' }, + { text: '资源编号', value: 'code' }, + { text: '父资源编号', value: 'pcode' }, + { text: '资源路径', value: 'url' }, + { text: '排序', value: 'num', width: 50 }, + { text: '层级', value: 'levels', width: 50 }, + { text: '资源类型', value: 'resourceTypeName', width: 80 }, + // { text: '状态', value: 'status', width: 70 } ], // 动态加载的表头 list: [], // 资源数据列表 listLoading: true, // 列表加载动画是否显示 @@ -109,13 +82,13 @@ methods: { add() { this.dialogStatus = 'create' - this.dialogFormVisible = true - this.$refs.editResource.initDialog(this.dialogStatus, this.dialogFormVisible) + // this.dialogFormVisible = true + this.$refs.editResource.initDialog(this.dialogStatus) }, edit(row) { this.dialogStatus = 'update' - this.dialogFormVisible = true - this.$refs.editResource.initDialog(this.dialogStatus, this.dialogFormVisible, row) + // this.dialogFormVisible = true + this.$refs.editResource.initDialog(this.dialogStatus, row) }, del(row) { this.$confirm( @@ -145,19 +118,6 @@ this.list = toTreeList(response.data.list, '0', false) this.listLoading = false }) - }, - // 在嵌套列表list中删除指定元素 - deleteItem(list, des) { - list.forEach((value, index) => { - if (value.id === des.id) { - console.log('findit') - list.splice(index, 1) - } else { - if (value.children && value.children.length > 0) { - this.deleteItem(value.children, des) - } - } - }) } } } diff --git a/src/views/system/role/dataPerm.vue b/src/views/system/role/dataPerm.vue index b5fb946..fe881dc 100644 --- a/src/views/system/role/dataPerm.vue +++ b/src/views/system/role/dataPerm.vue @@ -10,6 +10,7 @@ :default-checked-keys="defaultChecked" show-checkbox node-key="id" + check-strictly @check-change="handleCheckChange" /> diff --git a/src/views/system/role/editRole.vue b/src/views/system/role/editRole.vue index 244cc2b..a06c6be 100644 --- a/src/views/system/role/editRole.vue +++ b/src/views/system/role/editRole.vue @@ -1,6 +1,6 @@