Commit 668e9078 authored by smallwei's avatar smallwei

chomd(cli): merge avue-cli2

parents
{
"presets": [
["env", { "modules": false }],
"stage-2"
],
"plugins": ["transform-runtime"],
"comments": false
}
> 1%
last 2 versions
not ie <= 8
\ No newline at end of file
# http://editorconfig.org
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 2
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
[*.md]
insert_final_newline = false
trim_trailing_whitespace = false
build/*.js
config/*.js
src/assets
module.exports = {
root: true,
env: {
node: true
},
'extends': [
'plugin:vue/essential',
'eslint:recommended'
],
rules: {
'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off'
},
parserOptions: {
parser: 'babel-eslint'
}
}
\ No newline at end of file
.DS_Store
node_modules
/dist
/tests/e2e/videos/
/tests/e2e/screenshots/
# local env files
.env.local
.env.*.local
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw*
module.exports = {
plugins: {
autoprefixer: {}
}
}
\ No newline at end of file
# avue-cli
这是基于vue-cli@3.0改的一个脚手架
## Run vueUI
* 1.npm install -g @vue/cli 全局安装vue脚手架最新版
* 2.vue --version 查看版本是否为3.x版本
* 3.vue-ui 运行管理工具,导入avue-cli项目
* 4.剩下的自己摸索吧,下面时图示
![图例1](https://gitee.wang/avue/avue-cli/raw/master/public/img/mock/cli/1.png)
![图例2](https://gitee.wang/avue/avue-cli/raw/master/public/img/mock/cli/2.png)
![图例3](https://gitee.wang/avue/avue-cli/raw/master/public/img/mock/cli/3.png)
## Run setup
```
cd avue-cli
```
## Project setup
```
npm install
```
### Compiles and hot-reloads for development
```
npm run serve
```
### Compiles and minifies for production
```
npm run build
```
### Lints and fixes files
```
npm run lint
```
### Run your unit tests
```
npm run test:unit
```
### Run your end-to-end tests
```
npm run test:e2e
```
module.exports = {
presets: [
'@vue/app'
]
}
\ No newline at end of file
{
"pluginsFile": "tests/e2e/plugins/index.js"
}
{
"name": "avue-cli",
"version": "2.0.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint",
"test:unit": "vue-cli-service test:unit",
"test:e2e": "vue-cli-service test:e2e"
},
"dependencies": {
"@smallwei/avue": "^1.1.17",
"avue-plugin-transfer": "^0.0.2",
"avue-plugin-ueditor": "^0.0.1",
"axios": "^0.18.0",
"babel-polyfill": "^6.26.0",
"classlist-polyfill": "^1.2.0",
"driver.js": "^0.6.2",
"element-ui": "^2.4.5",
"file-saver": "^1.3.8",
"html2canvas": "^1.0.0-alpha.12",
"js-cookie": "^2.2.0",
"mockjs": "^1.0.1-beta3",
"moment": "^2.22.2",
"nprogress": "^0.2.0",
"script-loader": "^0.7.2",
"vue": "^2.5.16",
"vue-axios": "^2.1.2",
"vue-clipboard2": "^0.2.1",
"vue-json-tree-view": "^2.1.4",
"vue-quill-editor": "^3.0.6",
"vue-router": "^3.0.1",
"vuedraggable": "^2.16.0",
"vuex": "^3.0.1",
"xlsx": "^0.13.3"
},
"devDependencies": {
"@vue/cli-plugin-babel": "^3.0.0",
"@vue/cli-plugin-e2e-cypress": "^3.0.0",
"@vue/cli-plugin-eslint": "^3.0.0",
"@vue/cli-plugin-unit-mocha": "^3.0.0",
"@vue/cli-service": "^3.0.0",
"@vue/test-utils": "^1.0.0-beta.20",
"chai": "^4.1.2",
"node-sass": "^4.9.0",
"sass-loader": "^7.0.1",
"vue-template-compiler": "^2.5.17"
},
"lint-staged": {
"*.js": [
"vue-cli-service lint",
"git add"
],
"*.vue": [
"vue-cli-service lint",
"git add"
]
}
}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
[class^="icon-"]{
font-family: "iconfont" !important;
/* 以下内容参照第三方图标库本身的规则 */
font-size: 18px !important;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.el-menu-item [class^=icon-] {
margin-right: 5px;
width: 24px;
text-align: center;
font-size: 18px;
vertical-align: middle;
}
.el-submenu [class^=icon-] {
vertical-align: middle;
margin-right: 5px;
width: 24px;
text-align: center;
font-size: 18px;
}
"use strict"
// Module export pattern from
// https://github.com/umdjs/umd/blob/master/returnExports.js
;(function (root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define([], factory);
} else if (typeof exports === 'object') {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory();
} else {
// Browser globals (root is window)
root.store = factory();
}
}(this, function () {
// Store.js
var store = {},
win = (typeof window != 'undefined' ? window : global),
doc = win.document,
localStorageName = 'localStorage',
scriptTag = 'script',
storage
store.disabled = false
store.version = '1.3.20'
store.set = function(key, value) {}
store.get = function(key, defaultVal) {}
store.has = function(key) { return store.get(key) !== undefined }
store.remove = function(key) {}
store.clear = function() {}
store.transact = function(key, defaultVal, transactionFn) {
if (transactionFn == null) {
transactionFn = defaultVal
defaultVal = null
}
if (defaultVal == null) {
defaultVal = {}
}
var val = store.get(key, defaultVal)
transactionFn(val)
store.set(key, val)
}
store.getAll = function() {}
store.forEach = function() {}
store.serialize = function(value) {
return JSON.stringify(value)
}
store.deserialize = function(value) {
if (typeof value != 'string') { return undefined }
try { return JSON.parse(value) }
catch(e) { return value || undefined }
}
// Functions to encapsulate questionable FireFox 3.6.13 behavior
// when about.config::dom.storage.enabled === false
// See https://github.com/marcuswestin/store.js/issues#issue/13
function isLocalStorageNameSupported() {
try { return (localStorageName in win && win[localStorageName]) }
catch(err) { return false }
}
if (isLocalStorageNameSupported()) {
storage = win[localStorageName]
store.set = function(key, val) {
if (val === undefined) { return store.remove(key) }
storage.setItem(key, store.serialize(val))
return val
}
store.get = function(key, defaultVal) {
var val = store.deserialize(storage.getItem(key))
return (val === undefined ? defaultVal : val)
}
store.remove = function(key) { storage.removeItem(key) }
store.clear = function() { storage.clear() }
store.getAll = function() {
var ret = {}
store.forEach(function(key, val) {
ret[key] = val
})
return ret
}
store.forEach = function(callback) {
for (var i=0; i<storage.length; i++) {
var key = storage.key(i)
callback(key, store.get(key))
}
}
} else if (doc && doc.documentElement.addBehavior) {
var storageOwner,
storageContainer
// Since #userData storage applies only to specific paths, we need to
// somehow link our data to a specific path. We choose /favicon.ico
// as a pretty safe option, since all browsers already make a request to
// this URL anyway and being a 404 will not hurt us here. We wrap an
// iframe pointing to the favicon in an ActiveXObject(htmlfile) object
// (see: http://msdn.microsoft.com/en-us/library/aa752574(v=VS.85).aspx)
// since the iframe access rules appear to allow direct access and
// manipulation of the document element, even for a 404 page. This
// document can be used instead of the current document (which would
// have been limited to the current path) to perform #userData storage.
try {
storageContainer = new ActiveXObject('htmlfile')
storageContainer.open()
storageContainer.write('<'+scriptTag+'>document.w=window</'+scriptTag+'><iframe src="/favicon.ico"></iframe>')
storageContainer.close()
storageOwner = storageContainer.w.frames[0].document
storage = storageOwner.createElement('div')
} catch(e) {
// somehow ActiveXObject instantiation failed (perhaps some special
// security settings or otherwse), fall back to per-path storage
storage = doc.createElement('div')
storageOwner = doc.body
}
var withIEStorage = function(storeFunction) {
return function() {
var args = Array.prototype.slice.call(arguments, 0)
args.unshift(storage)
// See http://msdn.microsoft.com/en-us/library/ms531081(v=VS.85).aspx
// and http://msdn.microsoft.com/en-us/library/ms531424(v=VS.85).aspx
storageOwner.appendChild(storage)
storage.addBehavior('#default#userData')
storage.load(localStorageName)
var result = storeFunction.apply(store, args)
storageOwner.removeChild(storage)
return result
}
}
// In IE7, keys cannot start with a digit or contain certain chars.
// See https://github.com/marcuswestin/store.js/issues/40
// See https://github.com/marcuswestin/store.js/issues/83
var forbiddenCharsRegex = new RegExp("[!\"#$%&'()*+,/\\\\:;<=>?@[\\]^`{|}~]", "g")
var ieKeyFix = function(key) {
return key.replace(/^d/, '___$&').replace(forbiddenCharsRegex, '___')
}
store.set = withIEStorage(function(storage, key, val) {
key = ieKeyFix(key)
if (val === undefined) { return store.remove(key) }
storage.setAttribute(key, store.serialize(val))
storage.save(localStorageName)
return val
})
store.get = withIEStorage(function(storage, key, defaultVal) {
key = ieKeyFix(key)
var val = store.deserialize(storage.getAttribute(key))
return (val === undefined ? defaultVal : val)
})
store.remove = withIEStorage(function(storage, key) {
key = ieKeyFix(key)
storage.removeAttribute(key)
storage.save(localStorageName)
})
store.clear = withIEStorage(function(storage) {
var attributes = storage.XMLDocument.documentElement.attributes
storage.load(localStorageName)
for (var i=attributes.length-1; i>=0; i--) {
storage.removeAttribute(attributes[i].name)
}
storage.save(localStorageName)
})
store.getAll = function(storage) {
var ret = {}
store.forEach(function(key, val) {
ret[key] = val
})
return ret
}
store.forEach = withIEStorage(function(storage, callback) {
var attributes = storage.XMLDocument.documentElement.attributes
for (var i=0, attr; attr=attributes[i]; ++i) {
callback(attr.name, store.deserialize(storage.getAttribute(attr.name)))
}
})
}
try {
var testKey = '__storejs__'
store.set(testKey, testKey)
if (store.get(testKey) != testKey) { store.disabled = true }
store.remove(testKey)
} catch(e) {
store.disabled = true
}
store.enabled = !store.disabled
return store
}));
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
/**
* vuex v2.4.1
* (c) 2017 Evan You
* @license MIT
*/
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.Vuex=e()}(this,function(){"use strict";function t(t){b&&(t._devtoolHook=b,b.emit("vuex:init",t),b.on("vuex:travel-to-state",function(e){t.replaceState(e)}),t.subscribe(function(t,e){b.emit("vuex:mutation",t,e)}))}function e(t,e){Object.keys(t).forEach(function(n){return e(t[n],n)})}function n(t){return null!==t&&"object"==typeof t}function o(t){return t&&"function"==typeof t.then}function i(t,e,n){if(e.update(n),n.modules)for(var o in n.modules){if(!e.getChild(o))return;i(t.concat(o),e.getChild(o),n.modules[o])}}function r(t,e){t._actions=Object.create(null),t._mutations=Object.create(null),t._wrappedGetters=Object.create(null),t._modulesNamespaceMap=Object.create(null);var n=t.state;a(t,n,[],t._modules.root,!0),s(t,n,e)}function s(t,n,o){var i=t._vm;t.getters={};var r={};e(t._wrappedGetters,function(e,n){r[n]=function(){return e(t)},Object.defineProperty(t.getters,n,{get:function(){return t._vm[n]},enumerable:!0})});var s=j.config.silent;j.config.silent=!0,t._vm=new j({data:{$$state:n},computed:r}),j.config.silent=s,t.strict&&l(t),i&&(o&&t._withCommit(function(){i._data.$$state=null}),j.nextTick(function(){return i.$destroy()}))}function a(t,e,n,o,i){var r=!n.length,s=t._modules.getNamespace(n);if(o.namespaced&&(t._modulesNamespaceMap[s]=o),!r&&!i){var u=d(e,n.slice(0,-1)),l=n[n.length-1];t._withCommit(function(){j.set(u,l,o.state)})}var m=o.context=c(t,s,n);o.forEachMutation(function(e,n){f(t,s+n,e,m)}),o.forEachAction(function(e,n){p(t,s+n,e,m)}),o.forEachGetter(function(e,n){h(t,s+n,e,m)}),o.forEachChild(function(o,r){a(t,e,n.concat(r),o,i)})}function c(t,e,n){var o=""===e,i={dispatch:o?t.dispatch:function(n,o,i){var r=m(n,o,i),s=r.payload,a=r.options,c=r.type;return a&&a.root||(c=e+c),t.dispatch(c,s)},commit:o?t.commit:function(n,o,i){var r=m(n,o,i),s=r.payload,a=r.options,c=r.type;a&&a.root||(c=e+c),t.commit(c,s,a)}};return Object.defineProperties(i,{getters:{get:o?function(){return t.getters}:function(){return u(t,e)}},state:{get:function(){return d(t.state,n)}}}),i}function u(t,e){var n={},o=e.length;return Object.keys(t.getters).forEach(function(i){if(i.slice(0,o)===e){var r=i.slice(o);Object.defineProperty(n,r,{get:function(){return t.getters[i]},enumerable:!0})}}),n}function f(t,e,n,o){(t._mutations[e]||(t._mutations[e]=[])).push(function(e){n.call(t,o.state,e)})}function p(t,e,n,i){(t._actions[e]||(t._actions[e]=[])).push(function(e,r){var s=n.call(t,{dispatch:i.dispatch,commit:i.commit,getters:i.getters,state:i.state,rootGetters:t.getters,rootState:t.state},e,r);return o(s)||(s=Promise.resolve(s)),t._devtoolHook?s.catch(function(e){throw t._devtoolHook.emit("vuex:error",e),e}):s})}function h(t,e,n,o){t._wrappedGetters[e]||(t._wrappedGetters[e]=function(t){return n(o.state,o.getters,t.state,t.getters)})}function l(t){t._vm.$watch(function(){return this._data.$$state},function(){},{deep:!0,sync:!0})}function d(t,e){return e.length?e.reduce(function(t,e){return t[e]},t):t}function m(t,e,o){return n(t)&&t.type&&(o=e,e=t,t=t.type),{type:t,payload:e,options:o}}function v(t){j&&t===j||w(j=t)}function _(t){return Array.isArray(t)?t.map(function(t){return{key:t,val:t}}):Object.keys(t).map(function(e){return{key:e,val:t[e]}})}function y(t){return function(e,n){return"string"!=typeof e?(n=e,e=""):"/"!==e.charAt(e.length-1)&&(e+="/"),t(e,n)}}function g(t,e,n){var o=t._modulesNamespaceMap[n];return o}var w=function(t){function e(){var t=this.$options;t.store?this.$store="function"==typeof t.store?t.store():t.store:t.parent&&t.parent.$store&&(this.$store=t.parent.$store)}if(Number(t.version.split(".")[0])>=2)t.mixin({beforeCreate:e});else{var n=t.prototype._init;t.prototype._init=function(t){void 0===t&&(t={}),t.init=t.init?[e].concat(t.init):e,n.call(this,t)}}},b="undefined"!=typeof window&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__,$=function(t,e){this.runtime=e,this._children=Object.create(null),this._rawModule=t;var n=t.state;this.state=("function"==typeof n?n():n)||{}},M={namespaced:{configurable:!0}};M.namespaced.get=function(){return!!this._rawModule.namespaced},$.prototype.addChild=function(t,e){this._children[t]=e},$.prototype.removeChild=function(t){delete this._children[t]},$.prototype.getChild=function(t){return this._children[t]},$.prototype.update=function(t){this._rawModule.namespaced=t.namespaced,t.actions&&(this._rawModule.actions=t.actions),t.mutations&&(this._rawModule.mutations=t.mutations),t.getters&&(this._rawModule.getters=t.getters)},$.prototype.forEachChild=function(t){e(this._children,t)},$.prototype.forEachGetter=function(t){this._rawModule.getters&&e(this._rawModule.getters,t)},$.prototype.forEachAction=function(t){this._rawModule.actions&&e(this._rawModule.actions,t)},$.prototype.forEachMutation=function(t){this._rawModule.mutations&&e(this._rawModule.mutations,t)},Object.defineProperties($.prototype,M);var O=function(t){this.register([],t,!1)};O.prototype.get=function(t){return t.reduce(function(t,e){return t.getChild(e)},this.root)},O.prototype.getNamespace=function(t){var e=this.root;return t.reduce(function(t,n){return e=e.getChild(n),t+(e.namespaced?n+"/":"")},"")},O.prototype.update=function(t){i([],this.root,t)},O.prototype.register=function(t,n,o){var i=this;void 0===o&&(o=!0);var r=new $(n,o);0===t.length?this.root=r:this.get(t.slice(0,-1)).addChild(t[t.length-1],r),n.modules&&e(n.modules,function(e,n){i.register(t.concat(n),e,o)})},O.prototype.unregister=function(t){var e=this.get(t.slice(0,-1)),n=t[t.length-1];e.getChild(n).runtime&&e.removeChild(n)};var j,C=function(e){var n=this;void 0===e&&(e={}),!j&&"undefined"!=typeof window&&window.Vue&&v(window.Vue);var o=e.plugins;void 0===o&&(o=[]);var i=e.strict;void 0===i&&(i=!1);var r=e.state;void 0===r&&(r={}),"function"==typeof r&&(r=r()),this._committing=!1,this._actions=Object.create(null),this._mutations=Object.create(null),this._wrappedGetters=Object.create(null),this._modules=new O(e),this._modulesNamespaceMap=Object.create(null),this._subscribers=[],this._watcherVM=new j;var c=this,u=this,f=u.dispatch,p=u.commit;this.dispatch=function(t,e){return f.call(c,t,e)},this.commit=function(t,e,n){return p.call(c,t,e,n)},this.strict=i,a(this,r,[],this._modules.root),s(this,r),o.forEach(function(t){return t(n)}),j.config.devtools&&t(this)},E={state:{configurable:!0}};E.state.get=function(){return this._vm._data.$$state},E.state.set=function(t){},C.prototype.commit=function(t,e,n){var o=this,i=m(t,e,n),r=i.type,s=i.payload,a=(i.options,{type:r,payload:s}),c=this._mutations[r];c&&(this._withCommit(function(){c.forEach(function(t){t(s)})}),this._subscribers.forEach(function(t){return t(a,o.state)}))},C.prototype.dispatch=function(t,e){var n=m(t,e),o=n.type,i=n.payload,r=this._actions[o];if(r)return r.length>1?Promise.all(r.map(function(t){return t(i)})):r[0](i)},C.prototype.subscribe=function(t){var e=this._subscribers;return e.indexOf(t)<0&&e.push(t),function(){var n=e.indexOf(t);n>-1&&e.splice(n,1)}},C.prototype.watch=function(t,e,n){var o=this;return this._watcherVM.$watch(function(){return t(o.state,o.getters)},e,n)},C.prototype.replaceState=function(t){var e=this;this._withCommit(function(){e._vm._data.$$state=t})},C.prototype.registerModule=function(t,e){"string"==typeof t&&(t=[t]),this._modules.register(t,e),a(this,this.state,t,this._modules.get(t)),s(this,this.state)},C.prototype.unregisterModule=function(t){var e=this;"string"==typeof t&&(t=[t]),this._modules.unregister(t),this._withCommit(function(){var n=d(e.state,t.slice(0,-1));j.delete(n,t[t.length-1])}),r(this)},C.prototype.hotUpdate=function(t){this._modules.update(t),r(this,!0)},C.prototype._withCommit=function(t){var e=this._committing;this._committing=!0,t(),this._committing=e},Object.defineProperties(C.prototype,E);var x=y(function(t,e){var n={};return _(e).forEach(function(e){var o=e.key,i=e.val;n[o]=function(){var e=this.$store.state,n=this.$store.getters;if(t){var o=g(this.$store,0,t);if(!o)return;e=o.context.state,n=o.context.getters}return"function"==typeof i?i.call(this,e,n):e[i]},n[o].vuex=!0}),n}),k=y(function(t,e){var n={};return _(e).forEach(function(e){var o=e.key,i=e.val;n[o]=function(){for(var e=[],n=arguments.length;n--;)e[n]=arguments[n];var o=this.$store.commit;if(t){var r=g(this.$store,0,t);if(!r)return;o=r.context.commit}return"function"==typeof i?i.apply(this,[o].concat(e)):o.apply(this.$store,[i].concat(e))}}),n}),G=y(function(t,e){var n={};return _(e).forEach(function(e){var o=e.key,i=e.val;i=t+i,n[o]=function(){if(!t||g(this.$store,0,t))return this.$store.getters[i]},n[o].vuex=!0}),n}),A=y(function(t,e){var n={};return _(e).forEach(function(e){var o=e.key,i=e.val;n[o]=function(){for(var e=[],n=arguments.length;n--;)e[n]=arguments[n];var o=this.$store.dispatch;if(t){var r=g(this.$store,0,t);if(!r)return;o=r.context.dispatch}return"function"==typeof i?i.apply(this,[o].concat(e)):o.apply(this.$store,[i].concat(e))}}),n});return{Store:C,install:v,version:"2.4.1",mapState:x,mapMutations:k,mapGetters:G,mapActions:A,createNamespacedHelpers:function(t){return{mapState:x.bind(null,t),mapGetters:G.bind(null,t),mapMutations:k.bind(null,t),mapActions:A.bind(null,t)}}}});
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="format-detection" content="telephone=no">
<meta http-equiv="X-UA-Compatible" content="chrome=1" />
<link rel="stylesheet" href="<%= BASE_URL %>cdn/element-ui/2.4.0/theme-chalk/index.css">
<link rel="stylesheet" href="<%= BASE_URL %>cdn/animate/3.5.2/animate.css">
<link rel="stylesheet" href="<%= BASE_URL %>cdn/iconfont/1.0.0/index.css">
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<title>Avue 通用管理 系统快速开发框架</title>
</head>
<body>
<noscript>
<strong>We're sorry but avue2.0 doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
<script src="<%= BASE_URL %>util/aes.js" charset="utf-8"></script>
<script src="<%= BASE_URL %>util/aes.js" charset="utf-8"></script>
<script src="<%= BASE_URL %>util/crypto-js.js" charset="utf-8"></script>
<script src="<%= BASE_URL %>util/mode-ecb.js" charset="utf-8"></script>
<script src="<%= BASE_URL %>util/pad-zeropadding.js" charset="utf-8"></script>
<script src="<%= BASE_URL %>cdn/vue/2.5.2/vue.min.js" charset="utf-8"></script>
<script src="<%= BASE_URL %>cdn/vuex/2.4.1/vuex.min.js" charset="utf-8"></script>
<script src="<%= BASE_URL %>cdn/vue-router/3.0.1/vue-router.js" charset="utf-8"></script>
<script src="<%= BASE_URL %>cdn/axios/1.0.0/axios.min.js" charset="utf-8"></script>
<script src="<%= BASE_URL %>cdn/element-ui/2.4.0/index.js" charset="utf-8"></script>
</body>
</html>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="圖層_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="186px" height="49.5px" viewBox="0 0 186 49.5" style="enable-background:new 0 0 186 49.5;" xml:space="preserve">
<style type="text/css">
.st0{fill:#333;}
</style>
<g>
<polygon class="st0" points="76.6,1.7 71.7,1.7 71.7,33 87.5,33 87.5,28.1 76.6,28.1 "/>
<path class="st0" d="M114.2,6.3c-3.1-3.1-6.8-4.6-11.1-4.6c-4.3,0-8,1.5-11.1,4.6C89,9.3,87.5,13,87.5,17.3c0,4.3,1.6,8,4.6,11
c3.1,3.1,6.8,4.6,11.1,4.6c4.3,0,8-1.5,11.1-4.6c3-3.1,4.6-6.8,4.6-11C118.8,13,117.3,9.3,114.2,6.3z M110.8,25
c-2.1,2.1-4.7,3.2-7.7,3.2c-3,0-5.5-1.1-7.6-3.2c-2.1-2.1-3.2-4.7-3.2-7.6c0-3,1.1-5.5,3.2-7.7c2.1-2.1,4.7-3.2,7.6-3.2
c3,0,5.5,1.1,7.7,3.2c2.1,2.1,3.2,4.7,3.2,7.7C114,20.3,112.9,22.9,110.8,25z"/>
<path class="st0" d="M181.4,28.4c3.1-3.1,4.6-6.8,4.6-11c0-4.3-1.5-8-4.6-11.1c-3.1-3.1-6.8-4.6-11.1-4.6c-4.3,0-8,1.5-11.1,4.6
c-3.1,3.1-4.6,6.8-4.6,11.1c0,4.3,1.6,8,4.6,11c3.1,3.1,6.8,4.6,11.1,4.6C174.6,33,178.4,31.4,181.4,28.4z M159.5,17.3
c0-3,1.1-5.5,3.2-7.7c2.1-2.1,4.7-3.2,7.6-3.2c3,0,5.5,1.1,7.7,3.2c2.1,2.1,3.2,4.7,3.2,7.7c0,3-1.1,5.5-3.2,7.6
c-2.1,2.1-4.7,3.2-7.7,3.2c-3,0-5.5-1.1-7.6-3.2C160.6,22.9,159.5,20.3,159.5,17.3z"/>
<path class="st0" d="M147.7,28.4c1.6-1.6,2.8-3.3,3.5-5.3c0.2-0.6,1.1-2.8,1.1-5.8c0-1-0.1-1.8-0.2-2.4c-5.2,0-10.3,0-15.5,0
c0,1.6,0,3.2,0,4.8h10.6c-0.4,2-1.4,3.7-2.9,5.2c-2.1,2.1-4.7,3.2-7.7,3.2c-3,0-5.5-1.1-7.6-3.2c-2.1-2.1-3.2-4.7-3.2-7.6
c0-3,1.1-5.5,3.2-7.7c2.1-2.1,4.7-3.2,7.6-3.2c2.2,0,4.2,0.6,6,1.8l3.5-3.5c-2.7-2.1-5.9-3.2-9.4-3.2c-4.3,0-8,1.5-11.1,4.6
c-3.1,3.1-4.6,6.8-4.6,11.1c0,4.3,1.6,8,4.6,11c3.1,3.1,6.8,4.6,11.1,4.6C140.9,33,144.6,31.4,147.7,28.4z"/>
</g>
</svg>
This diff is collapsed.
This diff is collapsed.
/*
CryptoJS v3.1.2
code.google.com/p/crypto-js
(c) 2009-2013 by Jeff Mott. All rights reserved.
code.google.com/p/crypto-js/wiki/License
*/
CryptoJS.mode.ECB=function(){var a=CryptoJS.lib.BlockCipherMode.extend();a.Encryptor=a.extend({processBlock:function(a,b){this._cipher.encryptBlock(a,b)}});a.Decryptor=a.extend({processBlock:function(a,b){this._cipher.decryptBlock(a,b)}});return a}();
/**
* Zero padding strategy.
*/
CryptoJS.pad.ZeroPadding = {
pad: function (data, blockSize) {
// Shortcut
var blockSizeBytes = blockSize * 4;
// Pad
data.clamp();
data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes);
},
unpad: function (data) {
// Shortcut
var dataWords = data.words;
// Unpad
var i = data.sigBytes - 1;
while (!((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) {
i--;
}
data.sigBytes = i + 1;
}
};
<template>
<div id="app">
<router-view />
</div>
</template>
<script>
export default {
name: 'app',
data () {
return {}
},
watch: {},
created () { },
methods: {},
computed: {}
}
</script>
<style lang="scss">
#app {
width: 100%;
height: 100%;
overflow: hidden;
}
</style>
\ No newline at end of file
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the pig4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
import request from '@/router/axios'
export function fetchList(query) {
return request({
url: '/admin/client/page',
method: 'get',
params: query
})
}
export function addObj(obj) {
return request({
url: '/admin/client/',
method: 'post',
data: obj
})
}
export function getObj(id) {
return request({
url: '/admin/client/' + id,
method: 'get'
})
}
export function delObj(id) {
return request({
url: '/admin/client/' + id,
method: 'delete'
})
}
export function putObj(obj) {
return request({
url: '/admin/client',
method: 'put',
data: obj
})
}
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the pig4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
import request from '@/router/axios'
export function fetchTree(query) {
return request({
url: '/admin/dept/tree',
method: 'get',
params: query
})
}
export function addObj(obj) {
return request({
url: '/admin/dept/',
method: 'post',
data: obj
})
}
export function getObj(id) {
return request({
url: '/admin/dept/' + id,
method: 'get'
})
}
export function delObj(id) {
return request({
url: '/admin/dept/' + id,
method: 'delete'
})
}
export function putObj(obj) {
return request({
url: '/admin/dept/',
method: 'put',
data: obj
})
}
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the pig4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
import request from '@/router/axios'
export function fetchList(query) {
return request({
url: '/admin/dict/dictPage',
method: 'get',
params: query
})
}
export function addObj(obj) {
return request({
url: '/admin/dict/',
method: 'post',
data: obj
})
}
export function getObj(id) {
return request({
url: '/admin/dict/' + id,
method: 'get'
})
}
export function delObj(row) {
return request({
url: '/admin/dict/' + row.id + '/' + row.type,
method: 'delete'
})
}
export function putObj(obj) {
return request({
url: '/admin/dict/',
method: 'put',
data: obj
})
}
export function remote(type) {
return request({
url: '/admin/dict/type/' + type,
method: 'get'
})
}
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the pig4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
import request from '@/router/axios'
export function fetchList(query) {
return request({
url: '/gen/generator/page',
method: 'get',
params: query
})
}
export function handleDown(table) {
request({
url: '/gen/generator/code',
method: 'post',
data: table,
responseType: 'arraybuffer'
}).then((response) => { // 处理返回的文件流
let blob = new Blob([response.data], { type: 'application/zip' } )
let link = document.createElement('a')
link.href = window.URL.createObjectURL(blob)
link.download = table.tableName + '.zip'
link.click()
})
}
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the pig4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
import request from '@/router/axios'
export function fetchList(query) {
return request({
url: '/admin/log/logPage',
method: 'get',
params: query
})
}
export function delObj(id) {
return request({
url: '/admin/log/' + id,
method: 'delete'
})
}
export function addObj(obj) {
return request({
url: '/admin/log/',
method: 'post',
data: obj
})
}
export function getObj(id) {
return request({
url: '/admin/log/' + id,
method: 'get'
})
}
export function putObj(obj) {
return request({
url: '/admin/log/',
method: 'put',
data: obj
})
}
export function sendLogs(logsList) {
return request({
url: '/admin/log/logs',
method: 'post',
data: logsList
})
}
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the pig4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
import request from '@/router/axios'
export const loginByUsername = (username, password, code, randomStr) => {
var grant_type = 'password'
var scope = 'server'
return request({
url: '/auth/oauth/token',
headers: {
'TENANT_ID': '1',
'Authorization': 'Basic cGlnOnBpZw=='
},
method: 'post',
params: { username, password, randomStr, code, grant_type, scope }
})
}
export const loginBySocial = (state, code) => {
var grant_type = 'mobile'
return request({
url: '/auth/mobile/token',
headers: {
'TENANT_ID': '1',
'Authorization': 'Basic cGlnOnBpZw=='
},
method: 'post',
params: { mobile: state + '@' + code, grant_type }
})
}
export const getUserInfo = () => {
return request({
url: '/admin/user/info',
method: 'get'
})
}
export const logout = () => {
return request({
url: '/auth/oauth/removeToken',
method: 'get'
})
}
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the pig4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
import request from '@/router/axios'
export function GetMenu() {
return request({
url: '/admin/menu/userMenu',
method: 'get'
})
}
export function fetchTree(query) {
return request({
url: '/admin/menu/allTree',
method: 'get',
params: query
})
}
export function addObj(obj) {
return request({
url: '/admin/menu/',
method: 'post',
data: obj
})
}
export function getObj(id) {
return request({
url: '/admin/menu/' + id,
method: 'get'
})
}
export function delObj(id) {
return request({
url: '/admin/menu/' + id,
method: 'delete'
})
}
export function putObj(obj) {
return request({
url: '/admin/menu/',
method: 'put',
data: obj
})
}
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the pig4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
import request from '@/router/axios'
export function getToken() {
return request({
url: '/zuul/admin/user/upload', // 假地址,自行替换
method: 'post'
})
}
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the pig4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
import request from '@/router/axios'
export function roleList() {
return request({
url: '/admin/role/roleList',
method: 'get'
})
}
export function fetchList(query) {
return request({
url: '/admin/role/rolePage',
method: 'get',
params: query
})
}
export function deptRoleList(deptId) {
return request({
url: '/admin/role/roleList/' + deptId,
method: 'get'
})
}
export function getObj(id) {
return request({
url: '/admin/role/' + id,
method: 'get'
})
}
export function addObj(obj) {
return request({
url: '/admin/role',
method: 'post',
data: obj
})
}
export function putObj(obj) {
return request({
url: '/admin/role',
method: 'put',
data: obj
})
}
export function delObj(id) {
return request({
url: '/admin/role/' + id,
method: 'delete'
})
}
export function permissionUpd(roleId, menuIds) {
return request({
url: '/admin/role/roleMenuUpd',
method: 'put',
params: {
roleId: roleId,
menuIds: menuIds
}
})
}
export function fetchRoleTree(roleName) {
return request({
url: '/admin/menu/roleTree/' + roleName,
method: 'get'
})
}
export function fetchDeptTree(query) {
return request({
url: '/admin/dept/tree',
method: 'get',
params: query
})
}
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the pig4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
import request from '@/router/axios'
export function fetchList(query) {
return request({
url: '/admin/route/page',
method: 'get',
params: query
})
}
export function addObj(obj) {
return request({
url: '/admin/route/',
method: 'post',
data: obj
})
}
export function getObj(id) {
return request({
url: '/admin/route/' + id,
method: 'get'
})
}
export function delObj(id) {
return request({
url: '/admin/route/' + id,
method: 'delete'
})
}
export function putObj(obj) {
return request({
url: '/admin/route',
method: 'put',
data: obj
})
}
export function applyObj() {
return request({
url: '/admin/route/apply',
method: 'get'
})
}
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the pig4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
import request from '@/router/axios'
export function fetchList(query) {
return request({
url: '/daemon/statustracelog/page',
method: 'get',
params: query
})
}
export function addObj(obj) {
return request({
url: '/daemon/statustracelog/',
method: 'post',
data: obj
})
}
export function getObj(id) {
return request({
url: '/daemon/statustracelog/' + id,
method: 'get'
})
}
export function delObj(id) {
return request({
url: '/daemon/statustracelog/' + id,
method: 'delete'
})
}
export function putObj(obj) {
return request({
url: '/daemon/statustracelog/',
method: 'put',
data: obj
})
}
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the pig4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
import request from '@/router/axios'
export function fetchList(query) {
return request({
url: '/admin/social/page',
method: 'get',
params: query
})
}
export function addObj(obj) {
return request({
url: '/admin/social/',
method: 'post',
data: obj
})
}
export function getObj(id) {
return request({
url: '/admin/social/' + id,
method: 'get'
})
}
export function delObj(id) {
return request({
url: '/admin/social/' + id,
method: 'delete'
})
}
export function putObj(obj) {
return request({
url: '/admin/social/',
method: 'put',
data: obj
})
}
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the pig4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
import request from '@/router/axios'
export function fetchList(query) {
return request({
url: '/admin/user/userPage',
method: 'get',
params: query
})
}
export function addObj(obj) {
return request({
url: '/admin/user/',
method: 'post',
data: obj
})
}
export function getObj(id) {
return request({
url: '/admin/user/' + id,
method: 'get'
})
}
export function delObj(id) {
return request({
url: '/admin/user/' + id,
method: 'delete'
})
}
export function putObj(obj) {
return request({
url: '/admin/user',
method: 'put',
data: obj
})
}
<template>
<div class="basic-container">
<el-card>
<slot></slot>
</el-card>
</div>
</template>
<script>
export default {
name: "basicContainer"
};
</script>
<style lang="scss">
.basic-container {
padding: 8px 10px;
border-radius: 10px;
box-sizing: border-box;
.el-card {
width: 100%;
}
&:first-child {
padding-top: 0;
}
}
</style>
<template>
<div class="error403">
<div class="error403-body-con">
<el-card class="box-card">
<div class="error403-body-con-title">4
<span class="error403-0-span">
<i class="icon-quanxian"></i>
</span>
<span class="error403-key-span">
<i class="icon-iconset0216"></i>
</span>
</div>
<p class="error403-body-con-message">You don't have permission</p>
<div class="error403-btn-con">
<el-button @click="goHome" size="large" style="width: 200px;" type="text">返回首页</el-button>
<el-button @click="backPage" size="large" style="width: 200px;margin-left: 40px;" type="primary">返回上一页</el-button>
</div>
</el-card>
</div>
</div>
</template>
<script>
export default {
name: "Error403",
methods: {
backPage() {
this.$router.go(-1);
},
goHome() {
this.$router.push({
path: "/"
});
}
}
};
</script>
<style lang="scss" scoped>
@keyframes error403animation {
0% {
transform: rotateZ(0deg);
}
40% {
transform: rotateZ(-20deg);
}
45% {
transform: rotateZ(-15deg);
}
50% {
transform: rotateZ(-20deg);
}
55% {
transform: rotateZ(-15deg);
}
60% {
transform: rotateZ(-20deg);
}
100% {
transform: rotateZ(0deg);
}
}
.error403 {
&-body-con {
width: 700px;
height: 500px;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
&-title {
text-align: center;
font-size: 240px;
font-weight: 700;
color: #2d8cf0;
height: 260px;
line-height: 260px;
margin-top: 40px;
.error403-0-span {
display: inline-block;
position: relative;
width: 170px;
height: 170px;
border-radius: 50%;
border: 20px solid #ed3f14;
color: #ed3f14;
margin-right: 10px;
i {
display: inline-block;
font-size: 120px !important;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
}
.error403-key-span {
display: inline-block;
position: relative;
width: 100px;
height: 190px;
border-radius: 50%;
margin-right: 10px;
i {
display: inline-block;
font-size: 190px !important;
position: absolute;
left: 20px;
transform: translate(-50%, -60%);
transform-origin: center bottom;
animation: error403animation 2.8s ease 0s infinite;
}
}
}
&-message {
display: block;
text-align: center;
font-size: 30px;
font-weight: 500;
letter-spacing: 4px;
color: #dddde2;
}
}
&-btn-con {
text-align: center;
padding: 20px 0;
margin-bottom: 40px;
}
}
</style>
<template>
<div class="error404">
<div class="error404-body-con">
<el-card class="box-card">
<div class="error404-body-con-title">4
<span>0</span>4</div>
<p class="error404-body-con-message">YOU&nbsp;&nbsp;LOOK&nbsp;&nbsp;LOST</p>
<div class="error404-btn-con">
<el-button @click="goHome" size="large" style="width: 200px;" type="text">返回首页</el-button>
<el-button @click="backPage" size="large" style="width: 200px;margin-left: 40px;" type="primary">返回上一页</el-button>
</div>
</el-card>
</div>
</div>
</template>
<script>
export default {
name: "Error404",
methods: {
backPage() {
this.$router.go(-1);
},
goHome() {
this.$router.push({
path: "/"
});
}
}
};
</script>
<style lang="scss" scoped>
@keyframes error404animation {
0% {
transform: rotateZ(0deg);
}
20% {
transform: rotateZ(-60deg);
}
40% {
transform: rotateZ(-10deg);
}
60% {
transform: rotateZ(50deg);
}
80% {
transform: rotateZ(-20deg);
}
100% {
transform: rotateZ(0deg);
}
}
.error404 {
&-body-con {
width: 700px;
height: 500px;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
&-title {
text-align: center;
font-size: 240px;
font-weight: 700;
color: #2d8cf0;
height: 260px;
line-height: 260px;
margin-top: 40px;
span {
display: inline-block;
color: #19be6b;
font-size: 230px;
animation: error404animation 3s ease 0s infinite alternate;
}
}
&-message {
display: block;
text-align: center;
font-size: 30px;
font-weight: 500;
letter-spacing: 12px;
color: #dddde2;
}
}
&-btn-con {
text-align: center;
padding: 20px 0;
margin-bottom: 40px;
}
}
</style>
<template>
<div class="error500">
<div class="error500-body-con">
<el-card class="box-card">
<div class="error500-body-con-title">
5
<span class="error500-0-span">
<i class="icon-debug"></i>
</span>
<span class="error500-0-span">
<i class="icon-debug"></i>
</span>
</div>
<p class="error500-body-con-message">Oops! the server is wrong</p>
<div class="error500-btn-con">
<el-button @click="goHome" size="large" style="width: 200px;" type="text">返回首页</el-button>
<el-button @click="backPage" size="large" style="width: 200px;margin-left: 40px;" type="primary">返回上一页</el-button>
</div>
</el-card>
</div>
</div>
</template>
<script>
export default {
name: "Error500",
methods: {
backPage() {
this.$router.go(-1);
},
goHome() {
this.$router.push({
path: "/"
});
}
}
};
</script>
<style lang="scss" scoped>
@keyframes error500animation {
0% {
transform: rotateZ(0deg);
}
20% {
transform: rotateZ(-10deg);
}
40% {
transform: rotateZ(5deg);
}
60% {
transform: rotateZ(-5deg);
}
80% {
transform: rotateZ(10deg);
}
100% {
transform: rotateZ(0deg);
}
}
.error500 {
&-body-con {
width: 700px;
height: 500px;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
&-title {
text-align: center;
font-size: 240px;
font-weight: 700;
color: #2d8cf0;
height: 260px;
line-height: 260px;
margin-top: 40px;
.error500-0-span {
display: inline-block;
position: relative;
width: 170px;
height: 170px;
border-radius: 50%;
border: 20px solid #ed3f14;
color: #ed3f14;
margin-right: 10px;
i {
display: inline-block;
font-size: 120px !important;
position: absolute;
bottom: -43px;
left: 20px;
transform-origin: center bottom;
animation: error500animation 3s ease 0s infinite alternate;
}
}
}
&-message {
display: block;
text-align: center;
font-size: 30px;
font-weight: 500;
letter-spacing: 4px;
color: #dddde2;
}
}
&-btn-con {
text-align: center;
padding: 20px 0;
margin-bottom: 40px;
}
}
</style>
<template>
<div>
<basic-container>
<iframe v-if="$route.query.src"
:src='$route.query.src'
class="iframe"
ref="iframe"></iframe>
<iframe v-else
:src="urlPath"
class="iframe"
ref="iframe"></iframe>
</basic-container>
</div>
</template>
<script>
import { mapGetters } from 'vuex'
import NProgress from 'nprogress' // progress bar
import 'nprogress/nprogress.css' // progress bar style
export default {
name: 'AvueIframe',
data () {
return {
urlPath: this.getUrlPath() //iframe src 路径
}
},
created () {
NProgress.configure({ showSpinner: false })
},
mounted () {
this.load()
this.resize()
},
props: ['routerPath'],
watch: {
$route: function () {
this.load()
},
routerPath: function () {
// 监听routerPath变化,改变src路径
this.urlPath = this.getUrlPath()
}
},
components: {
...mapGetters(['screen']),
},
methods: {
// 显示等待框
show () {
NProgress.start()
},
// 隐藏等待狂
hide () {
NProgress.done()
},
// 加载浏览器窗口变化自适应
resize () {
window.onresize = () => {
this.iframeInit()
}
},
// 加载组件
load () {
this.show()
var flag = true //URL是否包含问号
if (this.$route.query.src.indexOf('?') == -1) {
flag = false
}
var list = []
for (var key in this.$route.query) {
if (key != 'src' && key != 'name') {
list.push(`${key}= this.$route.query[key]`)
}
}
list = list.join('&').toString()
if (flag) {
this.$route.query.src = `${this.$route.query.src}${
list.length > 0 ? `&list` : ''
}`
} else {
this.$route.query.src = `${this.$route.query.src}${
list.length > 0 ? `?list` : ''
}`
}
//超时3s自动隐藏等待狂,加强用户体验
let time = 3
const timeFunc = setInterval(() => {
time--
if (time == 0) {
this.hide()
clearInterval(timeFunc)
}
}, 1000)
this.iframeInit()
},
//iframe窗口初始化
iframeInit () {
const iframe = this.$refs.iframe
const clientHeight = document.documentElement.clientHeight - (screen > 1 ? 200 : 130);
iframe.style.height = `${clientHeight}px`
if (iframe.attachEvent) {
iframe.attachEvent('onload', () => {
this.hide()
})
} else {
iframe.onload = () => {
this.hide()
}
}
},
getUrlPath: function () {
//获取 iframe src 路径
let url = window.location.href
url = url.replace('/myiframe', '')
return url
}
}
}
</script>
<style lang="scss">
.iframe {
width: 100%;
height: 100%;
border: 0;
overflow: hidden;
box-sizing: border-box;
}
</style>
\ No newline at end of file
// 配置编译环境和线上环境之间的切换
let baseUrl = '';
let iconfontVersion = ['567566_r22zi6t8noas8aor', '567566_qo5lxgtishg', '599693_dfa50fge714', '667895_2ek3wqcg8w1', '667895_w0ofbdzuuir']
let iconfontUrl = `//at.alicdn.com/t/font_$key.css`;
let codeUrl = `${baseUrl}/code`
const env = process.env
if (env.NODE_ENV == 'development') {
baseUrl = ``; // 开发环境地址
} else if (env.NODE_ENV == 'production') {
baseUrl = ``; //生产环境地址
} else if (env.NODE_ENV == 'test') {
baseUrl = ``; //测试环境地址
}
export {
baseUrl,
iconfontUrl,
iconfontVersion,
codeUrl,
env
}
\ No newline at end of file
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the pig4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
const DIC = {
vaild: [{
label: '否',
value: 'false'
}, {
label: '是',
value: 'true'
}]
}
export const tableOption = {
'border': true,
'index': true,
'indexLabel': '序号',
'stripe': true,
'menuAlign': 'center',
'align': 'center',
'editBtn': false,
'delBtn': false,
'dic': [],
'column': [{
width: 150,
label: '编号',
prop: 'clientId',
align: 'center',
sortable: true,
rules: [{
required: true,
message: '请输入clientId',
trigger: 'blur'
}]
}, {
width: 300,
label: '密钥',
prop: 'clientSecret',
align: 'center',
sortable: true,
rules: [{
required: true,
message: '请输入clientSecret',
trigger: 'blur'
}]
}, {
label: '域',
prop: 'scope',
align: 'center',
width: 150,
rules: [{
required: true,
message: '请输入scope',
trigger: 'blur'
}]
}, {
label: '授权模式',
prop: 'authorizedGrantTypes',
align: 'center',
width: 150,
hide: true,
rules: [{
required: true,
message: '请输入授权模式',
trigger: 'blur'
}]
}, {
label: '回调地址',
prop: 'webServerRedirectUri',
align: 'center',
width: 150,
hide: true
}, {
label: '权限',
prop: 'authorities',
align: 'center',
width: 150,
hide: true
}, {
label: '请求令牌',
prop: 'accessTokenValidity',
align: 'center',
width: 150,
hide: true
}, {
label: '刷新令牌',
prop: 'refreshTokenValidity',
align: 'center',
width: 150,
hide: true
}, {
label: '扩展信息',
prop: 'additionalInformation',
align: 'center',
width: 150,
hide: true
}, {
label: '自动放行',
prop: 'autoapprove',
align: 'center',
type: 'radio',
dicData: DIC.vaild,
width: 150,
rules: [{
required: true,
message: '请选择是否放行',
trigger: 'blur'
}]
}, {
label: '资源ID',
prop: 'resourceIds',
align: 'center',
width: 150
}]
}
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the pig4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
export const tableData = [{
username: 'lengleng',
name: 'lengleng',
number: 12,
type: '0',
stars: 'https://gitee.com/log4j/pig/badge/star.svg?theme=white',
git: 'https://gitee.com/log4j/pig',
address: 'https://gitee.com/log4j',
info: 'Pig是基于Spring Cloud、OAuth2.0,使用Vue前后分离的开发平台,支持账号、 短信、 SSO等多种登录。 '
}, {
username: 'smallwei',
name: 'smallwei',
number: 20,
type: '1',
stars: 'https://gitee.com/smallweigit/avue/badge/star.svg?theme=white',
git: 'https://gitee.com/smallweigit/avue',
address: 'https://gitee.com/smallweigit',
info: 'Avue是一个后台集成解决方案,它基于 Vue.js 和 element。 使用了最新的前端技术栈,支持权限验证,第三方网站嵌套等功能。'
}]
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the pig4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
export const tableOption = {
'border': true,
'index': true,
'indexLabel': '序号',
'stripe': true,
'menuAlign': 'center',
'align': 'center',
'refreshBtn': false,
'showClomnuBtn': false,
'searchSize': 'mini',
'editBtn': false,
'delBtn': false,
'dic': [],
'column': [{
width: 150,
label: '数据值',
prop: 'value',
rules: [{
required: true,
message: '请输入数据值',
trigger: 'blur'
}]
}, {
label: '标签名',
prop: 'label',
rules: [{
required: true,
message: '请输入标签名',
trigger: 'blur'
}]
}, {
label: '类型',
prop: 'type',
'search': true,
rules: [{
required: true,
message: '请输入字典类型',
trigger: 'blur'
}]
}, {
label: '描述',
prop: 'description',
rules: [{
required: true,
message: '请输入字典描述',
trigger: 'blur'
}]
}, {
label: '排序',
prop: 'sort',
rules: [{
required: true,
message: '请输入排序',
trigger: 'blur'
}]
}, {
label: '备注信息',
prop: 'remarks'
}]
}
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the pig4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
export const tableOption = {
'border': true,
'index': true,
'stripe': true,
'menuAlign': 'center',
'align': 'center',
'addBtn': false,
'editBtn': false,
'delBtn': false,
'column': [{
label: '表名称',
prop: 'tableName',
align: 'center',
search: true
}, {
label: '表注释',
prop: 'tableComment',
align: 'center'
}, {
label: '索引',
prop: 'engine',
align: 'center'
}, {
type: 'datetime',
valueFormat: 'timestamp',
format: 'yyyy-MM-dd hh:mm:ss',
label: '创建时间',
prop: 'createTime',
align: 'center'
}]
}
export const formOption = {
submitText: '生成',
column: [
{
label: '表名称',
prop: 'tableName',
disabled: true
}, {
label: '包名',
prop: 'packageName',
placeholder: '可为空,加载系统默认配置'
}, {
label: '作者',
prop: 'author',
placeholder: '可为空,加载系统默认配置'
}, {
label: '模块',
prop: 'moduleName',
placeholder: '可为空,加载系统默认配置'
}, {
label: '表前缀',
prop: 'tablePrefix',
placeholder: '可为空,加载系统默认配置'
}, {
label: '注释',
prop: 'comments',
placeholder: '可为空,加载表备注'
}
]
}
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the pig4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
export const tableOption = {
'border': true,
'index': true,
'indexLabel': '序号',
'stripe': true,
'menuAlign': 'center',
'menuWidth': 150,
'align': 'center',
'refreshBtn': true,
'showClomnuBtn': false,
'searchSize': 'mini',
'addBtn': false,
'editBtn': false,
'delBtn': false,
'dicUrl': '/admin/dict/type/log_type',
props: {
label: 'label',
value: 'value'
},
'column': [{
label: '类型',
prop: 'type',
type: 'select',
dicData: 'log_type',
search: true
}, {
label: '请求接口',
prop: 'requestUri'
}, {
label: 'IP地址',
prop: 'remoteAddr'
}, {
label: '请求方式',
prop: 'method'
}, {
label: '客户端',
prop: 'serviceId'
}, {
label: '请求时间',
prop: 'time'
}, {
label: '创建时间',
prop: 'createTime',
type: 'datetime',
format: 'yyyy-MM-dd HH:mm',
valueFormat: 'yyyy-MM-dd HH:mm:ss'
}]
}
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the pig4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
export const tableOption = {
'border': true,
'index': true,
'expand': true,
'stripe': true,
'selection': true,
'page': false,
'menuAlign': 'center',
'defaultSort': {
prop: 'username',
order: 'descending'
},
'align': 'center',
'dic': [],
'column': [{
'label': '用户名',
'prop': 'username',
'span': 24,
'solt': true,
'sortable': true,
'width': 120,
'rules': [{
'required': true,
'message': '请输入用户名',
'trigger': 'blur'
}]
}, {
'label': '类型',
'prop': 'type',
'width': 80,
'type': 'select',
'sortable': true,
'dicData': [{
'label': '后端',
'value': '0'
}, {
'label': '前端',
'value': '1'
}]
}, {
'label': 'stars',
'width': '150',
'prop': 'stars',
'sortable': true,
'solt': true
}, {
'label': '码云',
'solt': true,
'span': 24,
'prop': 'address',
'type': 'textarea',
'overHidden': true
}, {
'label': '项目介绍',
'width': '300',
'prop': 'info',
'editDisabled': true,
'type': 'textarea',
'span': 24,
'maxRow': 4,
'minRow': 4,
'overHidden': true
}]
}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
export default {
'401': '当前操作没有权限',
'403': '当前操作没有权限',
'404': '资源不存在',
'417': '未绑定登录账号,请使用密码登录后绑定',
'423': '演示环境不能操作,如需了解联系冷冷',
'426': '用户名不存在或密码错误',
'428': '验证码错误,请重新输入',
'429': '请求过频繁',
'479': '演示环境,没有权限操作',
'default': '系统未知错误,请反馈给管理员'
}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
export default {
title: "Avue",
logo: "A",
indexTitle: 'avue-cli By smallwei',
whiteList: ["/login", "/404", "/401", "/lock"], //配置无权限可以访问的页面
whiteTagList: ["/login", "/404", "/401", "/lock", ], //配置不添加tags页面 ('/advanced-router/mutative-detail/*'——*为通配符)
lockPage: '/lock',
tokenTime: 6000,
info: {
title: "Avue 通用管理系统快速开发框架",
list: [
'Avue 是一个基于vue+vuex+vue-router快速后台管理模板,采用token交互验证方式。',
'您可以 Avue 为基础,不只限制于vue的页面,你可以嵌入第三方网站,基于iframe框架。',
'Avue 构建简单上手快,最大程度上帮助企业节省时间成本和费用开支。',
]
},
//配置菜单的属性
menu: {
props: {
label: 'label',
path: 'path',
icon: 'icon',
children: 'children'
}
}
}
\ No newline at end of file
FROM nginx
VOLUME /tmp
ENV LANG en_US.UTF-8
ADD ./dist/ /usr/share/nginx/html/
EXPOSE 80
EXPOSE 443
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment