1
This commit is contained in:
376
package-lock.json
generated
376
package-lock.json
generated
@@ -11,10 +11,15 @@
|
||||
"dependencies": {
|
||||
"@vue/babel-preset-jsx": "^1.4.0",
|
||||
"brace": "^0.11.1",
|
||||
"codemirror": "^6.0.2",
|
||||
"cropperjs": "^2.0.1",
|
||||
"dayjs": "^1.10.0",
|
||||
"js-cookie": "^2.2.1",
|
||||
"simplemde": "^1.11.2",
|
||||
"uuid": "^13.0.0",
|
||||
"vue2-ace-editor": "^0.0.15",
|
||||
"vuex-persistedstate": "^4.0.0"
|
||||
"vuex-persistedstate": "^4.0.0",
|
||||
"wangeditor": "^4.7.15"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.12.0",
|
||||
@@ -1507,6 +1512,27 @@
|
||||
"@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/runtime": {
|
||||
"version": "7.28.4",
|
||||
"resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.28.4.tgz",
|
||||
"integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/runtime-corejs3": {
|
||||
"version": "7.28.4",
|
||||
"resolved": "https://registry.npmmirror.com/@babel/runtime-corejs3/-/runtime-corejs3-7.28.4.tgz",
|
||||
"integrity": "sha512-h7iEYiW4HebClDEhtvFObtPmIvrd1SSfpI9EhOeKk4CtIK/ngBWFpuhCzhdmRKtg71ylcue+9I6dv54XYO1epQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"core-js-pure": "^3.43.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/template": {
|
||||
"version": "7.27.2",
|
||||
"resolved": "https://registry.npmmirror.com/@babel/template/-/template-7.27.2.tgz",
|
||||
@@ -1552,6 +1578,207 @@
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@codemirror/autocomplete": {
|
||||
"version": "6.19.0",
|
||||
"resolved": "https://registry.npmmirror.com/@codemirror/autocomplete/-/autocomplete-6.19.0.tgz",
|
||||
"integrity": "sha512-61Hfv3cF07XvUxNeC3E7jhG8XNi1Yom1G0lRC936oLnlF+jrbrv8rc/J98XlYzcsAoTVupfsf5fLej1aI8kyIg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@codemirror/language": "^6.0.0",
|
||||
"@codemirror/state": "^6.0.0",
|
||||
"@codemirror/view": "^6.17.0",
|
||||
"@lezer/common": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@codemirror/commands": {
|
||||
"version": "6.9.0",
|
||||
"resolved": "https://registry.npmmirror.com/@codemirror/commands/-/commands-6.9.0.tgz",
|
||||
"integrity": "sha512-454TVgjhO6cMufsyyGN70rGIfJxJEjcqjBG2x2Y03Y/+Fm99d3O/Kv1QDYWuG6hvxsgmjXmBuATikIIYvERX+w==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@codemirror/language": "^6.0.0",
|
||||
"@codemirror/state": "^6.4.0",
|
||||
"@codemirror/view": "^6.27.0",
|
||||
"@lezer/common": "^1.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@codemirror/language": {
|
||||
"version": "6.11.3",
|
||||
"resolved": "https://registry.npmmirror.com/@codemirror/language/-/language-6.11.3.tgz",
|
||||
"integrity": "sha512-9HBM2XnwDj7fnu0551HkGdrUrrqmYq/WC5iv6nbY2WdicXdGbhR/gfbZOH73Aqj4351alY1+aoG9rCNfiwS1RA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@codemirror/state": "^6.0.0",
|
||||
"@codemirror/view": "^6.23.0",
|
||||
"@lezer/common": "^1.1.0",
|
||||
"@lezer/highlight": "^1.0.0",
|
||||
"@lezer/lr": "^1.0.0",
|
||||
"style-mod": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@codemirror/lint": {
|
||||
"version": "6.9.0",
|
||||
"resolved": "https://registry.npmmirror.com/@codemirror/lint/-/lint-6.9.0.tgz",
|
||||
"integrity": "sha512-wZxW+9XDytH3SKvS8cQzMyQCaaazH8XL1EMHleHe00wVzsv7NBQKVW2yzEHrRhmM7ZOhVdItPbvlRBvMp9ej7A==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@codemirror/state": "^6.0.0",
|
||||
"@codemirror/view": "^6.35.0",
|
||||
"crelt": "^1.0.5"
|
||||
}
|
||||
},
|
||||
"node_modules/@codemirror/search": {
|
||||
"version": "6.5.11",
|
||||
"resolved": "https://registry.npmmirror.com/@codemirror/search/-/search-6.5.11.tgz",
|
||||
"integrity": "sha512-KmWepDE6jUdL6n8cAAqIpRmLPBZ5ZKnicE8oGU/s3QrAVID+0VhLFrzUucVKHG5035/BSykhExDL/Xm7dHthiA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@codemirror/state": "^6.0.0",
|
||||
"@codemirror/view": "^6.0.0",
|
||||
"crelt": "^1.0.5"
|
||||
}
|
||||
},
|
||||
"node_modules/@codemirror/state": {
|
||||
"version": "6.5.2",
|
||||
"resolved": "https://registry.npmmirror.com/@codemirror/state/-/state-6.5.2.tgz",
|
||||
"integrity": "sha512-FVqsPqtPWKVVL3dPSxy8wEF/ymIEuVzF1PK3VbUgrxXpJUSHQWWZz4JMToquRxnkw+36LTamCZG2iua2Ptq0fA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@marijn/find-cluster-break": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@codemirror/view": {
|
||||
"version": "6.38.5",
|
||||
"resolved": "https://registry.npmmirror.com/@codemirror/view/-/view-6.38.5.tgz",
|
||||
"integrity": "sha512-SFVsNAgsAoou+BjRewMqN+m9jaztB9wCWN9RSRgePqUbq8UVlvJfku5zB2KVhLPgH/h0RLk38tvd4tGeAhygnw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@codemirror/state": "^6.5.0",
|
||||
"crelt": "^1.0.6",
|
||||
"style-mod": "^4.1.0",
|
||||
"w3c-keyname": "^2.2.4"
|
||||
}
|
||||
},
|
||||
"node_modules/@cropper/element": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmmirror.com/@cropper/element/-/element-2.0.1.tgz",
|
||||
"integrity": "sha512-Jn1hR7XWzWQM/QfXRGMGzdkJ2gG/UcLdQPZQ7OKs0JiFfRzKpzu4u/nYrXHeH3MM2iOslLqh2kqYju6mjZLMJQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@cropper/utils": "^2.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@cropper/element-canvas": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmmirror.com/@cropper/element-canvas/-/element-canvas-2.0.1.tgz",
|
||||
"integrity": "sha512-OKxq/O0HL9W2JegOsc2zh1NRpERZcLM5+M8aQ/eXdmMcfi1lzosPftag3Irp6pTsVpwV6B6ypIxKESzJ4ci9Fw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@cropper/element": "^2.0.1",
|
||||
"@cropper/utils": "^2.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@cropper/element-crosshair": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmmirror.com/@cropper/element-crosshair/-/element-crosshair-2.0.1.tgz",
|
||||
"integrity": "sha512-bS5msU9cTU/jf1/kDw+QJmEM9/rw8IgOdpolR85iMVUCR8sRcLa0wgom42MBHcpBYB6hvL5YfiOeXZ7lHIYMpw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@cropper/element": "^2.0.1",
|
||||
"@cropper/utils": "^2.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@cropper/element-grid": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmmirror.com/@cropper/element-grid/-/element-grid-2.0.1.tgz",
|
||||
"integrity": "sha512-ayqCvYQJ+GVT31HhFpttzHabW1T/LsIwLJY5PLTMG0cEZLw/E8ihg8mxctjZbo852D7oEePbz6/2SeuCb1018Q==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@cropper/element": "^2.0.1",
|
||||
"@cropper/utils": "^2.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@cropper/element-handle": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmmirror.com/@cropper/element-handle/-/element-handle-2.0.1.tgz",
|
||||
"integrity": "sha512-fdifyyPIaR9S2eQ7qPHuM8fX8uToAfBsi8vQlR9EM+oJkDNil0uO4rWyArLWEtlr0/q7U0OvsufcuJ7ffqfmpg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@cropper/element": "^2.0.1",
|
||||
"@cropper/utils": "^2.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@cropper/element-image": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmmirror.com/@cropper/element-image/-/element-image-2.0.1.tgz",
|
||||
"integrity": "sha512-gPj5Sl2T8Cno198Cz3F3TDfcYoALW3yJ3fV6PHXmhMnX8sBkL7J441do7Vwkg0mEd2CogCtTLAf+p7ljdV0kgA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@cropper/element": "^2.0.1",
|
||||
"@cropper/element-canvas": "^2.0.1",
|
||||
"@cropper/utils": "^2.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@cropper/element-selection": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmmirror.com/@cropper/element-selection/-/element-selection-2.0.1.tgz",
|
||||
"integrity": "sha512-atv+Aeq2N2eWawelIRPGh1kYFdNrpb0QkUPPheGxz1ImfxpLdcHO9gb9T5noQijizUW2G0pNvts4ZaITQ0I71Q==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@cropper/element": "^2.0.1",
|
||||
"@cropper/element-canvas": "^2.0.1",
|
||||
"@cropper/element-image": "^2.0.1",
|
||||
"@cropper/utils": "^2.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@cropper/element-shade": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmmirror.com/@cropper/element-shade/-/element-shade-2.0.1.tgz",
|
||||
"integrity": "sha512-YIYgJ690NdFQ6wJLRFh/EySNVxGFKArncQ4FrsJ3yHU+ShgtOKz4FpjFLpqJRJB9swoVbD3WKTimGyzXrwjZrQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@cropper/element": "^2.0.1",
|
||||
"@cropper/element-canvas": "^2.0.1",
|
||||
"@cropper/element-selection": "^2.0.1",
|
||||
"@cropper/utils": "^2.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@cropper/element-viewer": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmmirror.com/@cropper/element-viewer/-/element-viewer-2.0.1.tgz",
|
||||
"integrity": "sha512-HDj25l08pWi/AO6El/OqfQHBpBC4Lh5NEnQN1SOldsmxEwt27Ubv6ndDsF8LkTK7XPwjjZRpyQPyfig4w8L2JQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@cropper/element": "^2.0.1",
|
||||
"@cropper/element-canvas": "^2.0.1",
|
||||
"@cropper/element-image": "^2.0.1",
|
||||
"@cropper/element-selection": "^2.0.1",
|
||||
"@cropper/utils": "^2.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@cropper/elements": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmmirror.com/@cropper/elements/-/elements-2.0.1.tgz",
|
||||
"integrity": "sha512-paFbBLXTKXNngn1yDi2ZIf+FO1pIEQXyBntmqOjuxqtG73KuEKv633wsJPFpj958bgcfSakgBbF80j+3nHbPug==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@cropper/element": "^2.0.1",
|
||||
"@cropper/element-canvas": "^2.0.1",
|
||||
"@cropper/element-crosshair": "^2.0.1",
|
||||
"@cropper/element-grid": "^2.0.1",
|
||||
"@cropper/element-handle": "^2.0.1",
|
||||
"@cropper/element-image": "^2.0.1",
|
||||
"@cropper/element-selection": "^2.0.1",
|
||||
"@cropper/element-shade": "^2.0.1",
|
||||
"@cropper/element-viewer": "^2.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@cropper/utils": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmmirror.com/@cropper/utils/-/utils-2.0.1.tgz",
|
||||
"integrity": "sha512-A9RnAFmgNF5aZk5q2VZnFnHtXWu1kPyEN0LVsX8wJ2LBRu2nyETKwz+ZXVsVWliktToCaYojHKrS+6/HODyEZA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@discoveryjs/json-ext": {
|
||||
"version": "0.5.7",
|
||||
"resolved": "https://registry.npmmirror.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz",
|
||||
@@ -1618,6 +1845,36 @@
|
||||
"@jridgewell/sourcemap-codec": "^1.4.14"
|
||||
}
|
||||
},
|
||||
"node_modules/@lezer/common": {
|
||||
"version": "1.2.3",
|
||||
"resolved": "https://registry.npmmirror.com/@lezer/common/-/common-1.2.3.tgz",
|
||||
"integrity": "sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@lezer/highlight": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmmirror.com/@lezer/highlight/-/highlight-1.2.1.tgz",
|
||||
"integrity": "sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@lezer/common": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@lezer/lr": {
|
||||
"version": "1.4.2",
|
||||
"resolved": "https://registry.npmmirror.com/@lezer/lr/-/lr-1.4.2.tgz",
|
||||
"integrity": "sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@lezer/common": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@marijn/find-cluster-break": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmmirror.com/@marijn/find-cluster-break/-/find-cluster-break-1.0.2.tgz",
|
||||
"integrity": "sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/eslint": {
|
||||
"version": "9.6.1",
|
||||
"resolved": "https://registry.npmmirror.com/@types/eslint/-/eslint-9.6.1.tgz",
|
||||
@@ -2403,6 +2660,30 @@
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/codemirror": {
|
||||
"version": "6.0.2",
|
||||
"resolved": "https://registry.npmmirror.com/codemirror/-/codemirror-6.0.2.tgz",
|
||||
"integrity": "sha512-VhydHotNW5w1UGK0Qj96BwSk/Zqbp9WbnyK2W/eVMv4QyF41INRGpjUhFJY7/uDNuudSc33a/PKr4iDqRduvHw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@codemirror/autocomplete": "^6.0.0",
|
||||
"@codemirror/commands": "^6.0.0",
|
||||
"@codemirror/language": "^6.0.0",
|
||||
"@codemirror/lint": "^6.0.0",
|
||||
"@codemirror/search": "^6.0.0",
|
||||
"@codemirror/state": "^6.0.0",
|
||||
"@codemirror/view": "^6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/codemirror-spell-checker": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmmirror.com/codemirror-spell-checker/-/codemirror-spell-checker-1.1.2.tgz",
|
||||
"integrity": "sha512-2Tl6n0v+GJRsC9K3MLCdLaMOmvWL0uukajNJseorZJsslaxZyZMgENocPU8R0DyoTAiKsyqiemSOZo7kjGV0LQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"typo-js": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/colorette": {
|
||||
"version": "2.0.20",
|
||||
"resolved": "https://registry.npmmirror.com/colorette/-/colorette-2.0.20.tgz",
|
||||
@@ -2471,6 +2752,33 @@
|
||||
"url": "https://opencollective.com/core-js"
|
||||
}
|
||||
},
|
||||
"node_modules/core-js-pure": {
|
||||
"version": "3.45.1",
|
||||
"resolved": "https://registry.npmmirror.com/core-js-pure/-/core-js-pure-3.45.1.tgz",
|
||||
"integrity": "sha512-OHnWFKgTUshEU8MK+lOs1H8kC8GkTi9Z1tvNkxrCcw9wl3MJIO7q2ld77wjWn4/xuGrVu2X+nME1iIIPBSdyEQ==",
|
||||
"hasInstallScript": true,
|
||||
"license": "MIT",
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/core-js"
|
||||
}
|
||||
},
|
||||
"node_modules/crelt": {
|
||||
"version": "1.0.6",
|
||||
"resolved": "https://registry.npmmirror.com/crelt/-/crelt-1.0.6.tgz",
|
||||
"integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/cropperjs": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmmirror.com/cropperjs/-/cropperjs-2.0.1.tgz",
|
||||
"integrity": "sha512-hiJwk2SCPZqxMA7aR3byzLpYUqOrQo+ihMk8k/WRm/xe/LX8wNzAIzMwEB/NEGJYA6sbewxW9TUlrRUYi/2Ipg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@cropper/elements": "^2.0.1",
|
||||
"@cropper/utils": "^2.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/cross-spawn": {
|
||||
"version": "7.0.6",
|
||||
"resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.6.tgz",
|
||||
@@ -3377,6 +3685,18 @@
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/marked": {
|
||||
"version": "16.4.0",
|
||||
"resolved": "https://registry.npmmirror.com/marked/-/marked-16.4.0.tgz",
|
||||
"integrity": "sha512-CTPAcRBq57cn3R8n3hwc2REddc28hjR7RzDXQ+lXLmMJYqn20BaI2cGw6QjgZGIgVfp2Wdfw4aMzgNteQ6qJgQ==",
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
"marked": "bin/marked.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 20"
|
||||
}
|
||||
},
|
||||
"node_modules/merge-source-map": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmmirror.com/merge-source-map/-/merge-source-map-1.1.0.tgz",
|
||||
@@ -4020,6 +4340,17 @@
|
||||
"deprecated": "older versions vulnerable to prototype pollution",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/simplemde": {
|
||||
"version": "1.11.2",
|
||||
"resolved": "https://registry.npmmirror.com/simplemde/-/simplemde-1.11.2.tgz",
|
||||
"integrity": "sha512-AUXuHJ/tEEDEcN/MTitHIw3AuBcheizJt7SVwtyn00B0UK5RKZ3GB+JndmRcJ5wfYGCIL0O2yJm/uz0sJOFSLg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"codemirror": "*",
|
||||
"codemirror-spell-checker": "*",
|
||||
"marked": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/source-map": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz",
|
||||
@@ -4089,6 +4420,12 @@
|
||||
"url": "https://opencollective.com/webpack"
|
||||
}
|
||||
},
|
||||
"node_modules/style-mod": {
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmmirror.com/style-mod/-/style-mod-4.1.2.tgz",
|
||||
"integrity": "sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/supports-color": {
|
||||
"version": "8.1.1",
|
||||
"resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz",
|
||||
@@ -4259,9 +4596,14 @@
|
||||
"version": "2.8.1",
|
||||
"resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz",
|
||||
"integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
|
||||
"dev": true,
|
||||
"license": "0BSD"
|
||||
},
|
||||
"node_modules/typo-js": {
|
||||
"version": "1.3.1",
|
||||
"resolved": "https://registry.npmmirror.com/typo-js/-/typo-js-1.3.1.tgz",
|
||||
"integrity": "sha512-elJkpCL6Z77Ghw0Lv0lGnhBAjSTOQ5FhiVOCfOuxhaoTT2xtLVbqikYItK5HHchzPbHEUFAcjOH669T2ZzeCbg==",
|
||||
"license": "BSD-3-Clause"
|
||||
},
|
||||
"node_modules/undici-types": {
|
||||
"version": "7.14.0",
|
||||
"resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-7.14.0.tgz",
|
||||
@@ -4407,6 +4749,19 @@
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/uuid": {
|
||||
"version": "13.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/uuid/-/uuid-13.0.0.tgz",
|
||||
"integrity": "sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==",
|
||||
"funding": [
|
||||
"https://github.com/sponsors/broofa",
|
||||
"https://github.com/sponsors/ctavan"
|
||||
],
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
"uuid": "dist-node/bin/uuid"
|
||||
}
|
||||
},
|
||||
"node_modules/v-click-outside-x": {
|
||||
"version": "3.7.1",
|
||||
"resolved": "https://registry.npmmirror.com/v-click-outside-x/-/v-click-outside-x-3.7.1.tgz",
|
||||
@@ -4625,6 +4980,23 @@
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/w3c-keyname": {
|
||||
"version": "2.2.8",
|
||||
"resolved": "https://registry.npmmirror.com/w3c-keyname/-/w3c-keyname-2.2.8.tgz",
|
||||
"integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/wangeditor": {
|
||||
"version": "4.7.15",
|
||||
"resolved": "https://registry.npmmirror.com/wangeditor/-/wangeditor-4.7.15.tgz",
|
||||
"integrity": "sha512-aPTdREd8BxXVyJ5MI+LU83FQ7u1EPd341iXIorRNYSOvoimNoZ4nPg+yn3FGbB93/owEa6buLw8wdhYnMCJQLg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.11.2",
|
||||
"@babel/runtime-corejs3": "^7.11.2",
|
||||
"tslib": "^2.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/watchpack": {
|
||||
"version": "2.4.4",
|
||||
"resolved": "https://registry.npmmirror.com/watchpack/-/watchpack-2.4.4.tgz",
|
||||
|
||||
@@ -25,10 +25,15 @@
|
||||
"dependencies": {
|
||||
"@vue/babel-preset-jsx": "^1.4.0",
|
||||
"brace": "^0.11.1",
|
||||
"codemirror": "^6.0.2",
|
||||
"cropperjs": "^2.0.1",
|
||||
"dayjs": "^1.10.0",
|
||||
"js-cookie": "^2.2.1",
|
||||
"simplemde": "^1.11.2",
|
||||
"uuid": "^13.0.0",
|
||||
"vue2-ace-editor": "^0.0.15",
|
||||
"vuex-persistedstate": "^4.0.0"
|
||||
"vuex-persistedstate": "^4.0.0",
|
||||
"wangeditor": "^4.7.15"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.12.0",
|
||||
|
||||
227
src/index.js
227
src/index.js
@@ -1,66 +1,75 @@
|
||||
/**
|
||||
* Admin Framework - 通用后台管理系统框架
|
||||
* 版本: 1.0.0
|
||||
/**
|
||||
* Admin Framework - 閫氱敤鍚庡彴绠$悊绯荤粺妗嗘灦
|
||||
* 鐗堟湰: 1.0.0
|
||||
*
|
||||
* 功能包含:
|
||||
* - 系统管理功能 (sys_*)
|
||||
* - 用户登录和权限管理
|
||||
* - 动态路由管理
|
||||
* - 主布局和页面布局
|
||||
* - 全局组件
|
||||
* - 工具库
|
||||
* - Vuex 状态管理
|
||||
*/
|
||||
* 鍔熻兘鍖呭惈:
|
||||
* - 绯荤粺绠$悊鍔熻兘 (sys_*)
|
||||
* - 鐢ㄦ埛鐧诲綍鍜屾潈闄愮鐞? * - 鍔ㄦ€佽矾鐢辩鐞? * - 涓诲竷灞€鍜岄〉闈㈠竷灞€
|
||||
* - 鍏ㄥ眬缁勪欢
|
||||
* - 宸ュ叿搴? * - Vuex 鐘舵€佺鐞? */
|
||||
|
||||
// ==================== 样式文件 ====================
|
||||
// ==================== 鏍峰紡鏂囦欢 ====================
|
||||
import './assets/css/animate.css'
|
||||
import './assets/css/base.less'
|
||||
import './assets/css/ivewExpand.less'
|
||||
import './assets/icons/iconfont.css'
|
||||
|
||||
// ==================== 工具库 ====================
|
||||
// ==================== 宸ュ叿搴?====================
|
||||
import uiTool from './utils/uiTool'
|
||||
import http from './utils/http'
|
||||
import * as tools from './utils/tools'
|
||||
|
||||
// ==================== Store 模块 ====================
|
||||
// ==================== Store 妯″潡 ====================
|
||||
import storeModules, { userModule, appModule } from './store'
|
||||
|
||||
// ==================== 路由配置 ====================
|
||||
// ==================== 璺敱閰嶇疆 ====================
|
||||
import routerConfig, { createBaseRoutes, setupRouterGuards } from './router'
|
||||
|
||||
// ==================== 系统页面 ====================
|
||||
// 主页
|
||||
// ==================== 绯荤粺椤甸潰 ====================
|
||||
// 涓婚〉
|
||||
import HomePage from './views/home/index.vue'
|
||||
|
||||
// system 页面
|
||||
// system 椤甸潰
|
||||
import SysLog from './views/system/sys_log.vue'
|
||||
import SysParamSetup from './views/system/sys_param_setup.vue'
|
||||
import SysRole from './views/system/sys_role.vue'
|
||||
import SysUser from './views/system/sys_user.vue'
|
||||
|
||||
// system_high 页面
|
||||
// system_high 椤甸潰
|
||||
import SysControl from './views/system_high/sys_control.vue'
|
||||
import SysMenu from './views/system_high/sys_menu.vue'
|
||||
import SysTitle from './views/system_high/sys_title.vue'
|
||||
|
||||
// 登录和错误页面
|
||||
import LoginPage from './views/login/login.vue'
|
||||
// 鐧诲綍鍜岄敊璇〉闈?import LoginPage from './views/login/login.vue'
|
||||
import Page401 from './views/error-page/401.vue'
|
||||
import Page404 from './views/error-page/404.vue'
|
||||
import Page500 from './views/error-page/500.vue'
|
||||
|
||||
// 布局组件
|
||||
// 甯冨眬缁勪欢
|
||||
import Main from './components/main'
|
||||
import ParentView from './components/parent-view'
|
||||
|
||||
// ==================== 系统 API ====================
|
||||
|
||||
|
||||
// ==================== 鍏ㄥ眬缁勪欢 ====================
|
||||
import Tables from './components/tables'
|
||||
import UploadSingle from './components/upload/Single.vue'
|
||||
import UploadMultiple from './components/upload/Multiple.vue'
|
||||
import TreeGrid from './components/treeGrid'
|
||||
import AsyncModal from './components/asyncModal'
|
||||
import InfoCard from './components/info-card'
|
||||
import LoadFlower from './components/load-flower'
|
||||
import SplitPane from './components/split-pane'
|
||||
import TextArea from './components/text-area'
|
||||
import CommonIcon from './components/common-icon'
|
||||
|
||||
// ==================== 绯荤粺 API ====================
|
||||
// system API
|
||||
import * as systemApi from './api/system'
|
||||
// system_high API
|
||||
import * as systemHighApi from './api/system_high'
|
||||
|
||||
// ==================== 框架类 ====================
|
||||
// ==================== 妗嗘灦绫?====================
|
||||
class AdminFramework {
|
||||
constructor() {
|
||||
this.version = '1.0.0'
|
||||
@@ -69,21 +78,21 @@ class AdminFramework {
|
||||
this.store = null
|
||||
this.router = null
|
||||
|
||||
// 导出工具
|
||||
// 瀵煎嚭宸ュ叿
|
||||
this.tools = tools
|
||||
this.uiTool = uiTool
|
||||
this.http = http
|
||||
|
||||
// 导出 Store 模块
|
||||
// 瀵煎嚭 Store 妯″潡
|
||||
this.storeModules = storeModules
|
||||
this.userModule = userModule
|
||||
this.appModule = appModule
|
||||
|
||||
// 导出路由配置
|
||||
// 瀵煎嚭璺敱閰嶇疆
|
||||
this.createBaseRoutes = createBaseRoutes
|
||||
this.setupRouterGuards = setupRouterGuards
|
||||
|
||||
// 导出组件
|
||||
// 瀵煎嚭缁勪欢
|
||||
this.Main = Main
|
||||
this.ParentView = ParentView
|
||||
this.LoginPage = LoginPage
|
||||
@@ -91,7 +100,7 @@ class AdminFramework {
|
||||
this.Page404 = Page404
|
||||
this.Page500 = Page500
|
||||
|
||||
// 导出系统页面
|
||||
// 瀵煎嚭绯荤粺椤甸潰
|
||||
this.HomePage = HomePage
|
||||
this.SysLog = SysLog
|
||||
this.SysParamSetup = SysParamSetup
|
||||
@@ -101,21 +110,21 @@ class AdminFramework {
|
||||
this.SysMenu = SysMenu
|
||||
this.SysTitle = SysTitle
|
||||
|
||||
// 导出 API
|
||||
// 瀵煎嚭 API
|
||||
this.systemApi = systemApi
|
||||
this.systemHighApi = systemHighApi
|
||||
}
|
||||
|
||||
/**
|
||||
* Vue 插件安装方法 - 自动完成所有初始化
|
||||
* @param {Object} Vue - Vue 实例
|
||||
* @param {Object} options - 配置选项
|
||||
* @param {Object} options.config - 应用配置
|
||||
* @param {Object} options.ViewUI - ViewUI 实例(可选,框架会自动处理)
|
||||
* @param {Object} options.VueRouter - VueRouter 实例(可选)
|
||||
* @param {Object} options.Vuex - Vuex 实例(可选)
|
||||
* @param {Function} options.createPersistedState - vuex-persistedstate(可选)
|
||||
* @param {Object} options.componentMap - 自定义组件映射表(可选)
|
||||
* Vue 鎻掍欢瀹夎鏂规硶 - 鑷姩瀹屾垚鎵€鏈夊垵濮嬪寲
|
||||
* @param {Object} Vue - Vue 瀹炰緥
|
||||
* @param {Object} options - 閰嶇疆閫夐」
|
||||
* @param {Object} options.config - 搴旂敤閰嶇疆
|
||||
* @param {Object} options.ViewUI - ViewUI 瀹炰緥锛堝彲閫夛紝妗嗘灦浼氳嚜鍔ㄥ鐞嗭級
|
||||
* @param {Object} options.VueRouter - VueRouter 瀹炰緥锛堝彲閫夛級
|
||||
* @param {Object} options.Vuex - Vuex 瀹炰緥锛堝彲閫夛級
|
||||
* @param {Function} options.createPersistedState - vuex-persistedstate锛堝彲閫夛級
|
||||
* @param {Object} options.componentMap - 鑷畾涔夌粍浠舵槧灏勮〃锛堝彲閫夛級
|
||||
*/
|
||||
install(Vue, options = {}) {
|
||||
if (this.installed) return
|
||||
@@ -124,43 +133,42 @@ class AdminFramework {
|
||||
const { config = {}, ViewUI, VueRouter, Vuex, createPersistedState, componentMap } = options
|
||||
this.config = config
|
||||
|
||||
// 自动注册 ViewUI
|
||||
// 鑷姩娉ㄥ唽 ViewUI
|
||||
if (ViewUI) {
|
||||
Vue.use(ViewUI)
|
||||
}
|
||||
|
||||
// 自动注册 VueRouter
|
||||
// 鑷姩娉ㄥ唽 VueRouter
|
||||
if (VueRouter) {
|
||||
Vue.use(VueRouter)
|
||||
}
|
||||
|
||||
// 自动注册 Vuex
|
||||
// 鑷姩娉ㄥ唽 Vuex
|
||||
if (Vuex) {
|
||||
Vue.use(Vuex)
|
||||
}
|
||||
|
||||
// 挂载全局配置和工具
|
||||
Vue.prototype.$config = config
|
||||
// 鎸傝浇鍏ㄥ眬閰嶇疆鍜屽伐鍏? Vue.prototype.$config = config
|
||||
Vue.prototype.$http = http
|
||||
Vue.prototype.$tools = tools
|
||||
Vue.prototype.$uiTool = uiTool
|
||||
|
||||
// 自动注册全局组件
|
||||
// 鑷姩娉ㄥ唽鍏ㄥ眬缁勪欢
|
||||
this.registerGlobalComponents(Vue)
|
||||
|
||||
// 自动设置组件映射表(包含外部传入的映射)
|
||||
// 鑷姩璁剧疆缁勪欢鏄犲皠琛紙鍖呭惈澶栭儴浼犲叆鐨勬槧灏勶級
|
||||
this.setupComponentMap(componentMap)
|
||||
|
||||
// 如果提供了 Vuex,自动创建 Store
|
||||
// 濡傛灉鎻愪緵浜?Vuex锛岃嚜鍔ㄥ垱寤?Store
|
||||
if (Vuex && !this.store) {
|
||||
this.store = this.createStore(Vuex, {}, createPersistedState)
|
||||
// 自动初始化 HTTP
|
||||
// 鑷姩鍒濆鍖?HTTP
|
||||
http.init(config, this.store)
|
||||
}
|
||||
|
||||
// 如果提供了 VueRouter,自动创建 Router
|
||||
// 濡傛灉鎻愪緵浜?VueRouter锛岃嚜鍔ㄥ垱寤?Router
|
||||
if (VueRouter && !this.router) {
|
||||
// 获取主路由配置(从后端权限菜单生成)
|
||||
// 鑾峰彇涓昏矾鐢遍厤缃紙浠庡悗绔潈闄愯彍鍗曠敓鎴愶級
|
||||
const mainRoute = this.getRoutes({ Main, ParentView, Page404 })
|
||||
|
||||
this.router = this.createRouter(VueRouter, {
|
||||
@@ -175,28 +183,58 @@ class AdminFramework {
|
||||
}
|
||||
|
||||
/**
|
||||
* 自动注册全局组件
|
||||
* 鑷姩娉ㄥ唽鍏ㄥ眬缁勪欢
|
||||
*/
|
||||
registerGlobalComponents(Vue) {
|
||||
// 注册布局组件
|
||||
// 娉ㄥ唽甯冨眬缁勪欢
|
||||
Vue.component('Main', Main)
|
||||
Vue.component('ParentView', ParentView)
|
||||
|
||||
// 注册错误页面
|
||||
// 娉ㄥ唽閿欒椤甸潰
|
||||
Vue.component('Page401', Page401)
|
||||
Vue.component('Page404', Page404)
|
||||
Vue.component('Page500', Page500)
|
||||
|
||||
// 注册登录页面
|
||||
// 娉ㄥ唽鐧诲綍椤甸潰
|
||||
Vue.component('LoginPage', LoginPage)
|
||||
|
||||
// ==================== 娉ㄥ唽鍏ㄥ眬涓氬姟缁勪欢 ====================
|
||||
Vue.component('Tables', Tables)
|
||||
Vue.component('UploadSingle', UploadSingle)
|
||||
Vue.component('UploadMultiple', UploadMultiple)
|
||||
Vue.component('TreeGrid', TreeGrid)
|
||||
Vue.component('AsyncModal', AsyncModal)
|
||||
Vue.component('InfoCard', InfoCard)
|
||||
Vue.component('LoadFlower', LoadFlower)
|
||||
Vue.component('SplitPane', SplitPane)
|
||||
Vue.component('TextArea', TextArea)
|
||||
Vue.component('CommonIcon', CommonIcon)
|
||||
|
||||
// ==================== 娉ㄥ唽鍏ㄥ眬涓氬姟缁勪欢 ====================
|
||||
Vue.component('Tables', Tables)
|
||||
Vue.component('Editor', Editor)
|
||||
Vue.component('UploadSingle', UploadSingle)
|
||||
Vue.component('UploadMultiple', UploadMultiple)
|
||||
Vue.component('TreeGrid', TreeGrid)
|
||||
Vue.component('AsyncModal', AsyncModal)
|
||||
Vue.component('CronInput', CronInput)
|
||||
Vue.component('Cropper', Cropper)
|
||||
Vue.component('InfoCard', InfoCard)
|
||||
Vue.component('LoadFlower', LoadFlower)
|
||||
Vue.component('Markdown', Markdown)
|
||||
Vue.component('MdIcons', MdIcons)
|
||||
Vue.component('PasteEditor', PasteEditor)
|
||||
Vue.component('SplitPane', SplitPane)
|
||||
Vue.component('TextArea', TextArea)
|
||||
Vue.component('CommonIcon', CommonIcon)
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置组件映射表(将后端返回的路径映射到实际组件)
|
||||
* @param {Object} customMap - 外部传入的自定义组件映射
|
||||
* 璁剧疆缁勪欢鏄犲皠琛紙灏嗗悗绔繑鍥炵殑璺緞鏄犲皠鍒板疄闄呯粍浠讹級
|
||||
* @param {Object} customMap - 澶栭儴浼犲叆鐨勮嚜瀹氫箟缁勪欢鏄犲皠
|
||||
*/
|
||||
setupComponentMap(customMap = {}) {
|
||||
// 框架内置组件列表:路径 => 组件
|
||||
// 妗嗘灦鍐呯疆缁勪欢鍒楄〃锛氳矾寰?=> 缁勪欢
|
||||
const components = {
|
||||
'home/index': HomePage,
|
||||
'system/sys_log': SysLog,
|
||||
@@ -206,12 +244,10 @@ class AdminFramework {
|
||||
'system_high/sys_control': SysControl,
|
||||
'system_high/sys_menu': SysMenu,
|
||||
'system_high/sys_title': SysTitle,
|
||||
// 合并外部传入的组件映射
|
||||
...customMap
|
||||
// 鍚堝苟澶栭儴浼犲叆鐨勭粍浠舵槧灏? ...customMap
|
||||
}
|
||||
|
||||
// 自动生成带 .vue 和不带 .vue 的映射
|
||||
const map = {}
|
||||
// 鑷姩鐢熸垚甯?.vue 鍜屼笉甯?.vue 鐨勬槧灏? const map = {}
|
||||
Object.keys(components).forEach(path => {
|
||||
const cleanPath = path.replace(/\.vue$/, '')
|
||||
map[cleanPath] = components[path]
|
||||
@@ -222,9 +258,7 @@ class AdminFramework {
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加自定义组件映射
|
||||
* @param {Object} customMap - 自定义组件映射对象
|
||||
* @example
|
||||
* 娣诲姞鑷畾涔夌粍浠舵槧灏? * @param {Object} customMap - 鑷畾涔夌粍浠舵槧灏勫璞? * @example
|
||||
* AdminFramework.addComponentMap({
|
||||
* 'ball/games.vue': GamesComponent,
|
||||
* 'order/pay_orders.vue': PayOrdersComponent
|
||||
@@ -235,9 +269,9 @@ class AdminFramework {
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化 HTTP 配置
|
||||
* @param {Object} config - HTTP 配置
|
||||
* @param {Object} store - Vuex Store 实例
|
||||
* 鍒濆鍖?HTTP 閰嶇疆
|
||||
* @param {Object} config - HTTP 閰嶇疆
|
||||
* @param {Object} store - Vuex Store 瀹炰緥
|
||||
*/
|
||||
initHttp(config, store) {
|
||||
http.init(config, store)
|
||||
@@ -245,13 +279,11 @@ class AdminFramework {
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建路由实例
|
||||
* @param {Object} Router - VueRouter 类
|
||||
* @param {Object} components - 组件对象
|
||||
* @param {Array} customRoutes - 自定义路由
|
||||
* @param {Object} ViewUI - ViewUI 实例
|
||||
* @param {String} homeName - 首页名称
|
||||
* @returns {Object} router 实例
|
||||
* 鍒涘缓璺敱瀹炰緥
|
||||
* @param {Object} Router - VueRouter 绫? * @param {Object} components - 缁勪欢瀵硅薄
|
||||
* @param {Array} customRoutes - 鑷畾涔夎矾鐢? * @param {Object} ViewUI - ViewUI 瀹炰緥
|
||||
* @param {String} homeName - 棣栭〉鍚嶇О
|
||||
* @returns {Object} router 瀹炰緥
|
||||
*/
|
||||
createRouter(Router, components = {}, customRoutes = [], ViewUI, homeName = 'home') {
|
||||
const { LoginPage, Page401, Page404, Page500 } = components
|
||||
@@ -276,11 +308,9 @@ class AdminFramework {
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建 Store 实例
|
||||
* @param {Object} Vuex - Vuex 类
|
||||
* @param {Object} customModules - 自定义模块
|
||||
* @param {Object} createPersistedState - vuex-persistedstate 插件
|
||||
* @returns {Object} store 实例
|
||||
* 鍒涘缓 Store 瀹炰緥
|
||||
* @param {Object} Vuex - Vuex 绫? * @param {Object} customModules - 鑷畾涔夋ā鍧? * @param {Object} createPersistedState - vuex-persistedstate 鎻掍欢
|
||||
* @returns {Object} store 瀹炰緥
|
||||
*/
|
||||
createStore(Vuex, customModules = {}, createPersistedState) {
|
||||
const store = new Vuex.Store({
|
||||
@@ -301,10 +331,8 @@ class AdminFramework {
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取动态路由
|
||||
* @param {Object} components - 组件对象
|
||||
* @returns {Object} 主路由配置
|
||||
*/
|
||||
* 鑾峰彇鍔ㄦ€佽矾鐢? * @param {Object} components - 缁勪欢瀵硅薄
|
||||
* @returns {Object} 涓昏矾鐢遍厤缃? */
|
||||
getRoutes(components = {}) {
|
||||
const { Main, ParentView, Page404 } = components
|
||||
|
||||
@@ -317,9 +345,9 @@ class AdminFramework {
|
||||
}
|
||||
|
||||
/**
|
||||
* 注册全局组件
|
||||
* @param {Object} Vue - Vue 实例
|
||||
* @param {Object} components - 组件对象
|
||||
* 娉ㄥ唽鍏ㄥ眬缁勪欢
|
||||
* @param {Object} Vue - Vue 瀹炰緥
|
||||
* @param {Object} components - 缁勪欢瀵硅薄
|
||||
*/
|
||||
registerComponents(Vue, components = {}) {
|
||||
Object.keys(components).forEach(name => {
|
||||
@@ -328,29 +356,28 @@ class AdminFramework {
|
||||
}
|
||||
}
|
||||
|
||||
// ==================== 创建实例并导出 ====================
|
||||
// ==================== 鍒涘缓瀹炰緥骞跺鍑?====================
|
||||
const framework = new AdminFramework()
|
||||
|
||||
// 默认导出框架实例
|
||||
// 榛樿瀵煎嚭妗嗘灦瀹炰緥
|
||||
export default framework
|
||||
|
||||
// 按需导出
|
||||
// 鎸夐渶瀵煎嚭
|
||||
export {
|
||||
// 工具库
|
||||
tools,
|
||||
// 宸ュ叿搴? tools,
|
||||
uiTool,
|
||||
http,
|
||||
|
||||
// Store 模块
|
||||
// Store 妯″潡
|
||||
storeModules,
|
||||
userModule,
|
||||
appModule,
|
||||
|
||||
// 路由配置
|
||||
// 璺敱閰嶇疆
|
||||
createBaseRoutes,
|
||||
setupRouterGuards,
|
||||
|
||||
// 系统页面
|
||||
// 绯荤粺椤甸潰
|
||||
HomePage,
|
||||
SysLog,
|
||||
SysParamSetup,
|
||||
@@ -360,21 +387,19 @@ export {
|
||||
SysMenu,
|
||||
SysTitle,
|
||||
|
||||
// 登录和错误页面
|
||||
LoginPage,
|
||||
// 鐧诲綍鍜岄敊璇〉闈? LoginPage,
|
||||
Page401,
|
||||
Page404,
|
||||
Page500,
|
||||
|
||||
// 布局组件
|
||||
// 甯冨眬缁勪欢
|
||||
Main,
|
||||
ParentView,
|
||||
|
||||
// 系统 API
|
||||
// 绯荤粺 API
|
||||
systemApi,
|
||||
systemHighApi,
|
||||
|
||||
// 框架类
|
||||
AdminFramework
|
||||
// 妗嗘灦绫? AdminFramework
|
||||
}
|
||||
|
||||
|
||||
380
src/index.js.new
Normal file
380
src/index.js.new
Normal file
@@ -0,0 +1,380 @@
|
||||
/**
|
||||
* Admin Framework - 閫氱敤鍚庡彴绠$悊绯荤粺妗嗘灦
|
||||
* 鐗堟湰: 1.0.0
|
||||
*
|
||||
* 鍔熻兘鍖呭惈:
|
||||
* - 绯荤粺绠$悊鍔熻兘 (sys_*)
|
||||
* - 鐢ㄦ埛鐧诲綍鍜屾潈闄愮鐞? * - 鍔ㄦ€佽矾鐢辩鐞? * - 涓诲竷灞€鍜岄〉闈㈠竷灞€
|
||||
* - 鍏ㄥ眬缁勪欢
|
||||
* - 宸ュ叿搴? * - Vuex 鐘舵€佺鐞? */
|
||||
|
||||
// ==================== 鏍峰紡鏂囦欢 ====================
|
||||
import './assets/css/animate.css'
|
||||
import './assets/css/base.less'
|
||||
import './assets/css/ivewExpand.less'
|
||||
import './assets/icons/iconfont.css'
|
||||
|
||||
// ==================== 宸ュ叿搴?====================
|
||||
import uiTool from './utils/uiTool'
|
||||
import http from './utils/http'
|
||||
import * as tools from './utils/tools'
|
||||
|
||||
// ==================== Store 妯″潡 ====================
|
||||
import storeModules, { userModule, appModule } from './store'
|
||||
|
||||
// ==================== 璺敱閰嶇疆 ====================
|
||||
import routerConfig, { createBaseRoutes, setupRouterGuards } from './router'
|
||||
|
||||
// ==================== 绯荤粺椤甸潰 ====================
|
||||
// 涓婚〉
|
||||
import HomePage from './views/home/index.vue'
|
||||
|
||||
// system 椤甸潰
|
||||
import SysLog from './views/system/sys_log.vue'
|
||||
import SysParamSetup from './views/system/sys_param_setup.vue'
|
||||
import SysRole from './views/system/sys_role.vue'
|
||||
import SysUser from './views/system/sys_user.vue'
|
||||
|
||||
// system_high 椤甸潰
|
||||
import SysControl from './views/system_high/sys_control.vue'
|
||||
import SysMenu from './views/system_high/sys_menu.vue'
|
||||
import SysTitle from './views/system_high/sys_title.vue'
|
||||
|
||||
// 鐧诲綍鍜岄敊璇〉闈?import LoginPage from './views/login/login.vue'
|
||||
import Page401 from './views/error-page/401.vue'
|
||||
import Page404 from './views/error-page/404.vue'
|
||||
import Page500 from './views/error-page/500.vue'
|
||||
|
||||
// 甯冨眬缁勪欢
|
||||
import Main from './components/main'
|
||||
import ParentView from './components/parent-view'
|
||||
|
||||
// ==================== 全局组件 ====================
|
||||
import Tables from './components/tables'
|
||||
import Editor from './components/editor'
|
||||
import UploadSingle from './components/upload/Single.vue'
|
||||
import UploadMultiple from './components/upload/Multiple.vue'
|
||||
import UploadCustom from './components/upload/Custom.vue'
|
||||
import TreeGrid from './components/treeGrid'
|
||||
import AsyncModal from './components/asyncModal'
|
||||
import CronInput from './components/cron-input'
|
||||
import Cropper from './components/cropper'
|
||||
import InfoCard from './components/info-card'
|
||||
import LoadFlower from './components/load-flower'
|
||||
import Markdown from './components/markdown'
|
||||
import MdIcons from './components/md-icons'
|
||||
import PasteEditor from './components/paste-editor'
|
||||
import SplitPane from './components/split-pane'
|
||||
import TextArea from './components/text-area'
|
||||
import CommonIcon from './components/common-icon'
|
||||
|
||||
// ==================== 绯荤粺 API ====================
|
||||
// system API
|
||||
import * as systemApi from './api/system'
|
||||
// system_high API
|
||||
import * as systemHighApi from './api/system_high'
|
||||
|
||||
// ==================== 妗嗘灦绫?====================
|
||||
class AdminFramework {
|
||||
constructor() {
|
||||
this.version = '1.0.0'
|
||||
this.installed = false
|
||||
this.config = {}
|
||||
this.store = null
|
||||
this.router = null
|
||||
|
||||
// 瀵煎嚭宸ュ叿
|
||||
this.tools = tools
|
||||
this.uiTool = uiTool
|
||||
this.http = http
|
||||
|
||||
// 瀵煎嚭 Store 妯″潡
|
||||
this.storeModules = storeModules
|
||||
this.userModule = userModule
|
||||
this.appModule = appModule
|
||||
|
||||
// 瀵煎嚭璺敱閰嶇疆
|
||||
this.createBaseRoutes = createBaseRoutes
|
||||
this.setupRouterGuards = setupRouterGuards
|
||||
|
||||
// 瀵煎嚭缁勪欢
|
||||
this.Main = Main
|
||||
this.ParentView = ParentView
|
||||
this.LoginPage = LoginPage
|
||||
this.Page401 = Page401
|
||||
this.Page404 = Page404
|
||||
this.Page500 = Page500
|
||||
|
||||
// 瀵煎嚭绯荤粺椤甸潰
|
||||
this.HomePage = HomePage
|
||||
this.SysLog = SysLog
|
||||
this.SysParamSetup = SysParamSetup
|
||||
this.SysRole = SysRole
|
||||
this.SysUser = SysUser
|
||||
this.SysControl = SysControl
|
||||
this.SysMenu = SysMenu
|
||||
this.SysTitle = SysTitle
|
||||
|
||||
// 瀵煎嚭 API
|
||||
this.systemApi = systemApi
|
||||
this.systemHighApi = systemHighApi
|
||||
}
|
||||
|
||||
/**
|
||||
* Vue 鎻掍欢瀹夎鏂规硶 - 鑷姩瀹屾垚鎵€鏈夊垵濮嬪寲
|
||||
* @param {Object} Vue - Vue 瀹炰緥
|
||||
* @param {Object} options - 閰嶇疆閫夐」
|
||||
* @param {Object} options.config - 搴旂敤閰嶇疆
|
||||
* @param {Object} options.ViewUI - ViewUI 瀹炰緥锛堝彲閫夛紝妗嗘灦浼氳嚜鍔ㄥ鐞嗭級
|
||||
* @param {Object} options.VueRouter - VueRouter 瀹炰緥锛堝彲閫夛級
|
||||
* @param {Object} options.Vuex - Vuex 瀹炰緥锛堝彲閫夛級
|
||||
* @param {Function} options.createPersistedState - vuex-persistedstate锛堝彲閫夛級
|
||||
* @param {Object} options.componentMap - 鑷畾涔夌粍浠舵槧灏勮〃锛堝彲閫夛級
|
||||
*/
|
||||
install(Vue, options = {}) {
|
||||
if (this.installed) return
|
||||
this.installed = true
|
||||
|
||||
const { config = {}, ViewUI, VueRouter, Vuex, createPersistedState, componentMap } = options
|
||||
this.config = config
|
||||
|
||||
// 鑷姩娉ㄥ唽 ViewUI
|
||||
if (ViewUI) {
|
||||
Vue.use(ViewUI)
|
||||
}
|
||||
|
||||
// 鑷姩娉ㄥ唽 VueRouter
|
||||
if (VueRouter) {
|
||||
Vue.use(VueRouter)
|
||||
}
|
||||
|
||||
// 鑷姩娉ㄥ唽 Vuex
|
||||
if (Vuex) {
|
||||
Vue.use(Vuex)
|
||||
}
|
||||
|
||||
// 鎸傝浇鍏ㄥ眬閰嶇疆鍜屽伐鍏? Vue.prototype.$config = config
|
||||
Vue.prototype.$http = http
|
||||
Vue.prototype.$tools = tools
|
||||
Vue.prototype.$uiTool = uiTool
|
||||
|
||||
// 鑷姩娉ㄥ唽鍏ㄥ眬缁勪欢
|
||||
this.registerGlobalComponents(Vue)
|
||||
|
||||
// 鑷姩璁剧疆缁勪欢鏄犲皠琛紙鍖呭惈澶栭儴浼犲叆鐨勬槧灏勶級
|
||||
this.setupComponentMap(componentMap)
|
||||
|
||||
// 濡傛灉鎻愪緵浜?Vuex锛岃嚜鍔ㄥ垱寤?Store
|
||||
if (Vuex && !this.store) {
|
||||
this.store = this.createStore(Vuex, {}, createPersistedState)
|
||||
// 鑷姩鍒濆鍖?HTTP
|
||||
http.init(config, this.store)
|
||||
}
|
||||
|
||||
// 濡傛灉鎻愪緵浜?VueRouter锛岃嚜鍔ㄥ垱寤?Router
|
||||
if (VueRouter && !this.router) {
|
||||
// 鑾峰彇涓昏矾鐢遍厤缃紙浠庡悗绔潈闄愯彍鍗曠敓鎴愶級
|
||||
const mainRoute = this.getRoutes({ Main, ParentView, Page404 })
|
||||
|
||||
this.router = this.createRouter(VueRouter, {
|
||||
Main,
|
||||
ParentView,
|
||||
LoginPage,
|
||||
Page401,
|
||||
Page404,
|
||||
Page500
|
||||
}, mainRoute ? [mainRoute] : [], ViewUI)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 鑷姩娉ㄥ唽鍏ㄥ眬缁勪欢
|
||||
*/
|
||||
registerGlobalComponents(Vue) {
|
||||
// 娉ㄥ唽甯冨眬缁勪欢
|
||||
Vue.component('Main', Main)
|
||||
Vue.component('ParentView', ParentView)
|
||||
|
||||
// 娉ㄥ唽閿欒椤甸潰
|
||||
Vue.component('Page401', Page401)
|
||||
Vue.component('Page404', Page404)
|
||||
Vue.component('Page500', Page500)
|
||||
|
||||
// 娉ㄥ唽鐧诲綍椤甸潰
|
||||
Vue.component('LoginPage', LoginPage)
|
||||
}
|
||||
|
||||
/**
|
||||
* 璁剧疆缁勪欢鏄犲皠琛紙灏嗗悗绔繑鍥炵殑璺緞鏄犲皠鍒板疄闄呯粍浠讹級
|
||||
* @param {Object} customMap - 澶栭儴浼犲叆鐨勮嚜瀹氫箟缁勪欢鏄犲皠
|
||||
*/
|
||||
setupComponentMap(customMap = {}) {
|
||||
// 妗嗘灦鍐呯疆缁勪欢鍒楄〃锛氳矾寰?=> 缁勪欢
|
||||
const components = {
|
||||
'home/index': HomePage,
|
||||
'system/sys_log': SysLog,
|
||||
'system/sys_param_setup': SysParamSetup,
|
||||
'system/sys_role': SysRole,
|
||||
'system/sys_user': SysUser,
|
||||
'system_high/sys_control': SysControl,
|
||||
'system_high/sys_menu': SysMenu,
|
||||
'system_high/sys_title': SysTitle,
|
||||
// 鍚堝苟澶栭儴浼犲叆鐨勭粍浠舵槧灏? ...customMap
|
||||
}
|
||||
|
||||
// 鑷姩鐢熸垚甯?.vue 鍜屼笉甯?.vue 鐨勬槧灏? const map = {}
|
||||
Object.keys(components).forEach(path => {
|
||||
const cleanPath = path.replace(/\.vue$/, '')
|
||||
map[cleanPath] = components[path]
|
||||
map[cleanPath + '.vue'] = components[path]
|
||||
})
|
||||
|
||||
uiTool.setComponentMap(map)
|
||||
}
|
||||
|
||||
/**
|
||||
* 娣诲姞鑷畾涔夌粍浠舵槧灏? * @param {Object} customMap - 鑷畾涔夌粍浠舵槧灏勫璞? * @example
|
||||
* AdminFramework.addComponentMap({
|
||||
* 'ball/games.vue': GamesComponent,
|
||||
* 'order/pay_orders.vue': PayOrdersComponent
|
||||
* })
|
||||
*/
|
||||
addComponentMap(customMap) {
|
||||
uiTool.setComponentMap(customMap)
|
||||
}
|
||||
|
||||
/**
|
||||
* 鍒濆鍖?HTTP 閰嶇疆
|
||||
* @param {Object} config - HTTP 閰嶇疆
|
||||
* @param {Object} store - Vuex Store 瀹炰緥
|
||||
*/
|
||||
initHttp(config, store) {
|
||||
http.init(config, store)
|
||||
this.store = store
|
||||
}
|
||||
|
||||
/**
|
||||
* 鍒涘缓璺敱瀹炰緥
|
||||
* @param {Object} Router - VueRouter 绫? * @param {Object} components - 缁勪欢瀵硅薄
|
||||
* @param {Array} customRoutes - 鑷畾涔夎矾鐢? * @param {Object} ViewUI - ViewUI 瀹炰緥
|
||||
* @param {String} homeName - 棣栭〉鍚嶇О
|
||||
* @returns {Object} router 瀹炰緥
|
||||
*/
|
||||
createRouter(Router, components = {}, customRoutes = [], ViewUI, homeName = 'home') {
|
||||
const { LoginPage, Page401, Page404, Page500 } = components
|
||||
|
||||
if (!LoginPage || !Page401 || !Page404 || !Page500) {
|
||||
console.error('Missing required page components')
|
||||
return null
|
||||
}
|
||||
|
||||
const baseRoutes = createBaseRoutes(LoginPage, Page401, Page404, Page500)
|
||||
|
||||
const router = new Router({
|
||||
routes: [...baseRoutes, ...customRoutes],
|
||||
mode: 'hash'
|
||||
})
|
||||
|
||||
if (ViewUI) {
|
||||
setupRouterGuards(router, ViewUI, homeName)
|
||||
}
|
||||
|
||||
return router
|
||||
}
|
||||
|
||||
/**
|
||||
* 鍒涘缓 Store 瀹炰緥
|
||||
* @param {Object} Vuex - Vuex 绫? * @param {Object} customModules - 鑷畾涔夋ā鍧? * @param {Object} createPersistedState - vuex-persistedstate 鎻掍欢
|
||||
* @returns {Object} store 瀹炰緥
|
||||
*/
|
||||
createStore(Vuex, customModules = {}, createPersistedState) {
|
||||
const store = new Vuex.Store({
|
||||
modules: {
|
||||
user: userModule,
|
||||
app: appModule,
|
||||
...customModules
|
||||
},
|
||||
plugins: createPersistedState ? [
|
||||
createPersistedState({
|
||||
storage: window.localStorage
|
||||
})
|
||||
] : []
|
||||
})
|
||||
|
||||
this.store = store
|
||||
return store
|
||||
}
|
||||
|
||||
/**
|
||||
* 鑾峰彇鍔ㄦ€佽矾鐢? * @param {Object} components - 缁勪欢瀵硅薄
|
||||
* @returns {Object} 涓昏矾鐢遍厤缃? */
|
||||
getRoutes(components = {}) {
|
||||
const { Main, ParentView, Page404 } = components
|
||||
|
||||
if (!Main || !ParentView || !Page404) {
|
||||
console.error('Missing required layout components')
|
||||
return null
|
||||
}
|
||||
|
||||
return uiTool.getRoutes(Main, ParentView, Page404)
|
||||
}
|
||||
|
||||
/**
|
||||
* 娉ㄥ唽鍏ㄥ眬缁勪欢
|
||||
* @param {Object} Vue - Vue 瀹炰緥
|
||||
* @param {Object} components - 缁勪欢瀵硅薄
|
||||
*/
|
||||
registerComponents(Vue, components = {}) {
|
||||
Object.keys(components).forEach(name => {
|
||||
Vue.component(name, components[name])
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// ==================== 鍒涘缓瀹炰緥骞跺鍑?====================
|
||||
const framework = new AdminFramework()
|
||||
|
||||
// 榛樿瀵煎嚭妗嗘灦瀹炰緥
|
||||
export default framework
|
||||
|
||||
// 鎸夐渶瀵煎嚭
|
||||
export {
|
||||
// 宸ュ叿搴? tools,
|
||||
uiTool,
|
||||
http,
|
||||
|
||||
// Store 妯″潡
|
||||
storeModules,
|
||||
userModule,
|
||||
appModule,
|
||||
|
||||
// 璺敱閰嶇疆
|
||||
createBaseRoutes,
|
||||
setupRouterGuards,
|
||||
|
||||
// 绯荤粺椤甸潰
|
||||
HomePage,
|
||||
SysLog,
|
||||
SysParamSetup,
|
||||
SysRole,
|
||||
SysUser,
|
||||
SysControl,
|
||||
SysMenu,
|
||||
SysTitle,
|
||||
|
||||
// 鐧诲綍鍜岄敊璇〉闈? LoginPage,
|
||||
Page401,
|
||||
Page404,
|
||||
Page500,
|
||||
|
||||
// 甯冨眬缁勪欢
|
||||
Main,
|
||||
ParentView,
|
||||
|
||||
// 绯荤粺 API
|
||||
systemApi,
|
||||
systemHighApi,
|
||||
|
||||
// 妗嗘灦绫? AdminFramework
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user