Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
jinli gu
Litemall
Commits
6f0ebe3e
Commit
6f0ebe3e
authored
Nov 17, 2018
by
Junling Bu
Browse files
chore[litemall-admin]: 管理后台基于的vue-element-admin框架更新至3.9.3
parent
cffdc561
Changes
156
Hide whitespace changes
Inline
Side-by-side
litemall-admin/.babelrc
View file @
6f0ebe3e
...
@@ -8,5 +8,10 @@
...
@@ -8,5 +8,10 @@
}],
}],
"stage-2"
"stage-2"
],
],
"plugins": ["transform-vue-jsx", "transform-runtime"]
"plugins": ["transform-vue-jsx", "transform-runtime"],
"env": {
"development":{
"plugins": ["dynamic-import-node"]
}
}
}
}
litemall-admin/.eslintrc.js
View file @
6f0ebe3e
module
.
exports
=
{
module
.
exports
=
{
root
:
true
,
root
:
true
,
parser
:
'
babel-eslint
'
,
parserOptions
:
{
parserOptions
:
{
parser
:
'
babel-eslint
'
,
sourceType
:
'
module
'
sourceType
:
'
module
'
},
},
env
:
{
env
:
{
...
@@ -9,22 +9,19 @@ module.exports = {
...
@@ -9,22 +9,19 @@ module.exports = {
node
:
true
,
node
:
true
,
es6
:
true
,
es6
:
true
,
},
},
extends
:
'
eslint:recommended
'
,
extends
:
[
'
plugin:vue/recommended
'
,
'
eslint:recommended
'
],
// required to lint *.vue files
plugins
:
[
'
html
'
],
// check if imports actually resolve
'
settings
'
:
{
'
import/resolver
'
:
{
'
webpack
'
:
{
'
config
'
:
'
build/webpack.base.conf.js
'
}
}
},
// add your custom rules here
// add your custom rules here
//it is base on https://github.com/vuejs/eslint-config-vue
//it is base on https://github.com/vuejs/eslint-config-vue
'
rules
'
:
{
rules
:
{
"
vue/max-attributes-per-line
"
:
[
2
,
{
"
singleline
"
:
10
,
"
multiline
"
:
{
"
max
"
:
1
,
"
allowFirstLine
"
:
false
}
}],
"
vue/name-property-casing
"
:
[
"
error
"
,
"
PascalCase
"
],
'
accessor-pairs
'
:
2
,
'
accessor-pairs
'
:
2
,
'
arrow-spacing
'
:
[
2
,
{
'
arrow-spacing
'
:
[
2
,
{
'
before
'
:
true
,
'
before
'
:
true
,
...
@@ -196,4 +193,3 @@ module.exports = {
...
@@ -196,4 +193,3 @@ module.exports = {
'
array-bracket-spacing
'
:
[
2
,
'
never
'
]
'
array-bracket-spacing
'
:
[
2
,
'
never
'
]
}
}
}
}
litemall-admin/.gitignore
View file @
6f0ebe3e
...
@@ -4,6 +4,7 @@ dist/
...
@@ -4,6 +4,7 @@ dist/
npm-debug.log*
npm-debug.log*
yarn-debug.log*
yarn-debug.log*
yarn-error.log*
yarn-error.log*
**/*.log
test/unit/coverage
test/unit/coverage
test/e2e/reports
test/e2e/reports
...
@@ -17,3 +18,4 @@ selenium-debug.log
...
@@ -17,3 +18,4 @@ selenium-debug.log
*.njsproj
*.njsproj
*.sln
*.sln
package-lock.json
litemall-admin/build/build.js
View file @
6f0ebe3e
...
@@ -8,9 +8,12 @@ const chalk = require('chalk')
...
@@ -8,9 +8,12 @@ const chalk = require('chalk')
const
webpack
=
require
(
'
webpack
'
)
const
webpack
=
require
(
'
webpack
'
)
const
config
=
require
(
'
../config
'
)
const
config
=
require
(
'
../config
'
)
const
webpackConfig
=
require
(
'
./webpack.prod.conf
'
)
const
webpackConfig
=
require
(
'
./webpack.prod.conf
'
)
const
server
=
require
(
'
pushstate-server
'
)
var
connect
=
require
(
'
connect
'
)
var
serveStatic
=
require
(
'
serve-static
'
)
var
spinner
=
ora
(
'
building for
'
+
process
.
env
.
env_config
+
'
environment...
'
)
const
spinner
=
ora
(
'
building for
'
+
process
.
env
.
env_config
+
'
environment...
'
)
spinner
.
start
()
spinner
.
start
()
rm
(
path
.
join
(
config
.
build
.
assetsRoot
,
config
.
build
.
assetsSubDirectory
),
err
=>
{
rm
(
path
.
join
(
config
.
build
.
assetsRoot
,
config
.
build
.
assetsSubDirectory
),
err
=>
{
...
@@ -18,31 +21,47 @@ rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => {
...
@@ -18,31 +21,47 @@ rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => {
webpack
(
webpackConfig
,
(
err
,
stats
)
=>
{
webpack
(
webpackConfig
,
(
err
,
stats
)
=>
{
spinner
.
stop
()
spinner
.
stop
()
if
(
err
)
throw
err
if
(
err
)
throw
err
process
.
stdout
.
write
(
stats
.
toString
({
process
.
stdout
.
write
(
colors
:
true
,
stats
.
toString
({
modules
:
false
,
colors
:
true
,
children
:
false
,
modules
:
false
,
chunks
:
false
,
children
:
false
,
chunkModules
:
false
chunks
:
false
,
})
+
'
\n\n
'
)
chunkModules
:
false
})
+
'
\n\n
'
)
if
(
stats
.
hasErrors
())
{
if
(
stats
.
hasErrors
())
{
console
.
log
(
chalk
.
red
(
'
Build failed with errors.
\n
'
))
console
.
log
(
chalk
.
red
(
'
Build failed with errors.
\n
'
))
process
.
exit
(
1
)
process
.
exit
(
1
)
}
}
console
.
log
(
chalk
.
cyan
(
'
Build complete.
\n
'
))
console
.
log
(
chalk
.
cyan
(
'
Build complete.
\n
'
))
console
.
log
(
chalk
.
yellow
(
console
.
log
(
'
Tip: built files are meant to be served over an HTTP server.
\n
'
+
chalk
.
yellow
(
'
Opening index.html over file:// won
\'
t work.
\n
'
'
Tip: built files are meant to be served over an HTTP server.
\n
'
+
))
"
Opening index.html over file:// won't work.
\n
"
if
(
process
.
env
.
npm_config_preview
){
)
server
.
start
({
)
port
:
9526
,
directory
:
'
./dist
'
,
if
(
process
.
env
.
npm_config_preview
)
{
file
:
'
/index.html
'
const
port
=
9526
});
const
host
=
'
http://localhost:
'
+
port
console
.
log
(
'
> Listening at
'
+
'
http://localhost:9526
'
+
'
\n
'
)
const
basePath
=
config
.
build
.
assetsPublicPath
const
app
=
connect
()
app
.
use
(
basePath
,
serveStatic
(
'
./dist
'
,
{
index
:
[
'
index.html
'
,
'
/
'
]
})
)
app
.
listen
(
port
,
function
()
{
console
.
log
(
chalk
.
green
(
`> Listening at http://localhost:
${
port
}${
basePath
}
`
)
)
})
}
}
})
})
})
})
litemall-admin/build/check-versions.js
View file @
6f0ebe3e
...
@@ -4,8 +4,11 @@ const semver = require('semver')
...
@@ -4,8 +4,11 @@ const semver = require('semver')
const
packageConfig
=
require
(
'
../package.json
'
)
const
packageConfig
=
require
(
'
../package.json
'
)
const
shell
=
require
(
'
shelljs
'
)
const
shell
=
require
(
'
shelljs
'
)
function
exec
(
cmd
)
{
function
exec
(
cmd
)
{
return
require
(
'
child_process
'
).
execSync
(
cmd
).
toString
().
trim
()
return
require
(
'
child_process
'
)
.
execSync
(
cmd
)
.
toString
()
.
trim
()
}
}
const
versionRequirements
=
[
const
versionRequirements
=
[
...
@@ -24,23 +27,30 @@ if (shell.which('npm')) {
...
@@ -24,23 +27,30 @@ if (shell.which('npm')) {
})
})
}
}
module
.
exports
=
function
()
{
module
.
exports
=
function
()
{
const
warnings
=
[]
const
warnings
=
[]
for
(
let
i
=
0
;
i
<
versionRequirements
.
length
;
i
++
)
{
for
(
let
i
=
0
;
i
<
versionRequirements
.
length
;
i
++
)
{
const
mod
=
versionRequirements
[
i
]
const
mod
=
versionRequirements
[
i
]
if
(
!
semver
.
satisfies
(
mod
.
currentVersion
,
mod
.
versionRequirement
))
{
if
(
!
semver
.
satisfies
(
mod
.
currentVersion
,
mod
.
versionRequirement
))
{
warnings
.
push
(
mod
.
name
+
'
:
'
+
warnings
.
push
(
chalk
.
red
(
mod
.
currentVersion
)
+
'
should be
'
+
mod
.
name
+
chalk
.
green
(
mod
.
versionRequirement
)
'
:
'
+
chalk
.
red
(
mod
.
currentVersion
)
+
'
should be
'
+
chalk
.
green
(
mod
.
versionRequirement
)
)
)
}
}
}
}
if
(
warnings
.
length
)
{
if
(
warnings
.
length
)
{
console
.
log
(
''
)
console
.
log
(
''
)
console
.
log
(
chalk
.
yellow
(
'
To use this template, you must update following to modules:
'
))
console
.
log
(
chalk
.
yellow
(
'
To use this template, you must update following to modules:
'
)
)
console
.
log
()
console
.
log
()
for
(
let
i
=
0
;
i
<
warnings
.
length
;
i
++
)
{
for
(
let
i
=
0
;
i
<
warnings
.
length
;
i
++
)
{
...
...
litemall-admin/build/utils.js
View file @
6f0ebe3e
'
use strict
'
'
use strict
'
const
path
=
require
(
'
path
'
)
const
path
=
require
(
'
path
'
)
const
config
=
require
(
'
../config
'
)
const
config
=
require
(
'
../config
'
)
const
Extract
Text
Plugin
=
require
(
'
extract-text-webpack
-plugin
'
)
const
MiniCss
ExtractPlugin
=
require
(
'
mini-css-extract
-plugin
'
)
const
packageConfig
=
require
(
'
../package.json
'
)
const
packageConfig
=
require
(
'
../package.json
'
)
exports
.
assetsPath
=
function
(
_path
)
{
exports
.
assetsPath
=
function
(
_path
)
{
const
assetsSubDirectory
=
process
.
env
.
NODE_ENV
===
'
production
'
const
assetsSubDirectory
=
?
config
.
build
.
assetsSubDirectory
process
.
env
.
NODE_ENV
===
'
production
'
:
config
.
dev
.
assetsSubDirectory
?
config
.
build
.
assetsSubDirectory
:
config
.
dev
.
assetsSubDirectory
return
path
.
posix
.
join
(
assetsSubDirectory
,
_path
)
return
path
.
posix
.
join
(
assetsSubDirectory
,
_path
)
}
}
exports
.
cssLoaders
=
function
(
options
)
{
exports
.
cssLoaders
=
function
(
options
)
{
options
=
options
||
{}
options
=
options
||
{}
const
cssLoader
=
{
const
cssLoader
=
{
...
@@ -30,8 +31,22 @@ exports.cssLoaders = function (options) {
...
@@ -30,8 +31,22 @@ exports.cssLoaders = function (options) {
}
}
// generate loader string to be used with extract text plugin
// generate loader string to be used with extract text plugin
function
generateLoaders
(
loader
,
loaderOptions
)
{
function
generateLoaders
(
loader
,
loaderOptions
)
{
const
loaders
=
options
.
usePostCSS
?
[
cssLoader
,
postcssLoader
]
:
[
cssLoader
]
const
loaders
=
[]
// Extract CSS when that option is specified
// (which is the case during production build)
if
(
options
.
extract
)
{
loaders
.
push
(
MiniCssExtractPlugin
.
loader
)
}
else
{
loaders
.
push
(
'
vue-style-loader
'
)
}
loaders
.
push
(
cssLoader
)
if
(
options
.
usePostCSS
)
{
loaders
.
push
(
postcssLoader
)
}
if
(
loader
)
{
if
(
loader
)
{
loaders
.
push
({
loaders
.
push
({
...
@@ -42,24 +57,16 @@ exports.cssLoaders = function (options) {
...
@@ -42,24 +57,16 @@ exports.cssLoaders = function (options) {
})
})
}
}
// Extract CSS when that option is specified
return
loaders
// (which is the case during production build)
if
(
options
.
extract
)
{
return
ExtractTextPlugin
.
extract
({
use
:
loaders
,
fallback
:
'
vue-style-loader
'
})
}
else
{
return
[
'
vue-style-loader
'
].
concat
(
loaders
)
}
}
}
// https://vue-loader.vuejs.org/en/configurations/extract-css.html
// https://vue-loader.vuejs.org/en/configurations/extract-css.html
return
{
return
{
css
:
generateLoaders
(),
css
:
generateLoaders
(),
postcss
:
generateLoaders
(),
postcss
:
generateLoaders
(),
less
:
generateLoaders
(
'
less
'
),
less
:
generateLoaders
(
'
less
'
),
sass
:
generateLoaders
(
'
sass
'
,
{
indentedSyntax
:
true
}),
sass
:
generateLoaders
(
'
sass
'
,
{
indentedSyntax
:
true
}),
scss
:
generateLoaders
(
'
sass
'
),
scss
:
generateLoaders
(
'
sass
'
),
stylus
:
generateLoaders
(
'
stylus
'
),
stylus
:
generateLoaders
(
'
stylus
'
),
styl
:
generateLoaders
(
'
stylus
'
)
styl
:
generateLoaders
(
'
stylus
'
)
...
@@ -67,7 +74,7 @@ exports.cssLoaders = function (options) {
...
@@ -67,7 +74,7 @@ exports.cssLoaders = function (options) {
}
}
// Generate loaders for standalone style files (outside of .vue)
// Generate loaders for standalone style files (outside of .vue)
exports
.
styleLoaders
=
function
(
options
)
{
exports
.
styleLoaders
=
function
(
options
)
{
const
output
=
[]
const
output
=
[]
const
loaders
=
exports
.
cssLoaders
(
options
)
const
loaders
=
exports
.
cssLoaders
(
options
)
...
...
litemall-admin/build/vue-loader.conf.js
View file @
6f0ebe3e
'
use strict
'
'
use strict
'
const
utils
=
require
(
'
./utils
'
)
const
config
=
require
(
'
../config
'
)
const
isProduction
=
process
.
env
.
NODE_ENV
===
'
production
'
const
sourceMapEnabled
=
isProduction
?
config
.
build
.
productionSourceMap
:
config
.
dev
.
cssSourceMap
module
.
exports
=
{
module
.
exports
=
{
loaders
:
utils
.
cssLoaders
({
//You can set the vue-loader configuration by yourself.
sourceMap
:
sourceMapEnabled
,
extract
:
isProduction
}),
cssSourceMap
:
sourceMapEnabled
,
cacheBusting
:
config
.
dev
.
cacheBusting
,
transformToRequire
:
{
video
:
[
'
src
'
,
'
poster
'
],
source
:
'
src
'
,
img
:
'
src
'
,
image
:
'
xlink:href
'
}
}
}
litemall-admin/build/webpack.base.conf.js
View file @
6f0ebe3e
...
@@ -2,9 +2,10 @@
...
@@ -2,9 +2,10 @@
const
path
=
require
(
'
path
'
)
const
path
=
require
(
'
path
'
)
const
utils
=
require
(
'
./utils
'
)
const
utils
=
require
(
'
./utils
'
)
const
config
=
require
(
'
../config
'
)
const
config
=
require
(
'
../config
'
)
const
{
VueLoaderPlugin
}
=
require
(
'
vue-loader
'
)
const
vueLoaderConfig
=
require
(
'
./vue-loader.conf
'
)
const
vueLoaderConfig
=
require
(
'
./vue-loader.conf
'
)
function
resolve
(
dir
)
{
function
resolve
(
dir
)
{
return
path
.
join
(
__dirname
,
'
..
'
,
dir
)
return
path
.
join
(
__dirname
,
'
..
'
,
dir
)
}
}
...
@@ -27,15 +28,15 @@ module.exports = {
...
@@ -27,15 +28,15 @@ module.exports = {
output
:
{
output
:
{
path
:
config
.
build
.
assetsRoot
,
path
:
config
.
build
.
assetsRoot
,
filename
:
'
[name].js
'
,
filename
:
'
[name].js
'
,
publicPath
:
process
.
env
.
NODE_ENV
===
'
production
'
publicPath
:
?
config
.
build
.
assetsPublicPath
process
.
env
.
NODE_ENV
===
'
production
'
:
config
.
dev
.
assetsPublicPath
?
config
.
build
.
assetsPublicPath
:
config
.
dev
.
assetsPublicPath
},
},
resolve
:
{
resolve
:
{
extensions
:
[
'
.js
'
,
'
.vue
'
,
'
.json
'
],
extensions
:
[
'
.js
'
,
'
.vue
'
,
'
.json
'
],
alias
:
{
alias
:
{
'
vue$
'
:
'
vue/dist/vue.esm.js
'
,
'
@
'
:
resolve
(
'
src
'
)
'
@
'
:
resolve
(
'
src
'
),
}
}
},
},
module
:
{
module
:
{
...
@@ -49,7 +50,11 @@ module.exports = {
...
@@ -49,7 +50,11 @@ module.exports = {
{
{
test
:
/
\.
js$/
,
test
:
/
\.
js$/
,
loader
:
'
babel-loader?cacheDirectory
'
,
loader
:
'
babel-loader?cacheDirectory
'
,
include
:
[
resolve
(
'
src
'
),
resolve
(
'
test
'
),
resolve
(
'
node_modules/webpack-dev-server/client
'
)]
include
:
[
resolve
(
'
src
'
),
resolve
(
'
test
'
),
resolve
(
'
node_modules/webpack-dev-server/client
'
)
]
},
},
{
{
test
:
/
\.
svg$/
,
test
:
/
\.
svg$/
,
...
@@ -86,6 +91,7 @@ module.exports = {
...
@@ -86,6 +91,7 @@ module.exports = {
}
}
]
]
},
},
plugins
:
[
new
VueLoaderPlugin
()],
node
:
{
node
:
{
// prevent webpack from injecting useless setImmediate polyfill because Vue
// prevent webpack from injecting useless setImmediate polyfill because Vue
// source contains it (although only uses it if it's native).
// source contains it (although only uses it if it's native).
...
...
litemall-admin/build/webpack.dev.conf.js
View file @
6f0ebe3e
...
@@ -9,7 +9,7 @@ const HtmlWebpackPlugin = require('html-webpack-plugin')
...
@@ -9,7 +9,7 @@ const HtmlWebpackPlugin = require('html-webpack-plugin')
const
FriendlyErrorsPlugin
=
require
(
'
friendly-errors-webpack-plugin
'
)
const
FriendlyErrorsPlugin
=
require
(
'
friendly-errors-webpack-plugin
'
)
const
portfinder
=
require
(
'
portfinder
'
)
const
portfinder
=
require
(
'
portfinder
'
)
function
resolve
(
dir
)
{
function
resolve
(
dir
)
{
return
path
.
join
(
__dirname
,
'
..
'
,
dir
)
return
path
.
join
(
__dirname
,
'
..
'
,
dir
)
}
}
...
@@ -17,8 +17,12 @@ const HOST = process.env.HOST
...
@@ -17,8 +17,12 @@ const HOST = process.env.HOST
const
PORT
=
process
.
env
.
PORT
&&
Number
(
process
.
env
.
PORT
)
const
PORT
=
process
.
env
.
PORT
&&
Number
(
process
.
env
.
PORT
)
const
devWebpackConfig
=
merge
(
baseWebpackConfig
,
{
const
devWebpackConfig
=
merge
(
baseWebpackConfig
,
{
mode
:
'
development
'
,
module
:
{
module
:
{
rules
:
utils
.
styleLoaders
({
sourceMap
:
config
.
dev
.
cssSourceMap
,
usePostCSS
:
true
})
rules
:
utils
.
styleLoaders
({
sourceMap
:
config
.
dev
.
cssSourceMap
,
usePostCSS
:
true
})
},
},
// cheap-module-eval-source-map is faster for development
// cheap-module-eval-source-map is faster for development
devtool
:
config
.
dev
.
devtool
,
devtool
:
config
.
dev
.
devtool
,
...
@@ -39,7 +43,7 @@ const devWebpackConfig = merge(baseWebpackConfig, {
...
@@ -39,7 +43,7 @@ const devWebpackConfig = merge(baseWebpackConfig, {
proxy
:
config
.
dev
.
proxyTable
,
proxy
:
config
.
dev
.
proxyTable
,
quiet
:
true
,
// necessary for FriendlyErrorsPlugin
quiet
:
true
,
// necessary for FriendlyErrorsPlugin
watchOptions
:
{
watchOptions
:
{
poll
:
config
.
dev
.
poll
,
poll
:
config
.
dev
.
poll
}
}
},
},
plugins
:
[
plugins
:
[
...
@@ -47,16 +51,16 @@ const devWebpackConfig = merge(baseWebpackConfig, {
...
@@ -47,16 +51,16 @@ const devWebpackConfig = merge(baseWebpackConfig, {
'
process.env
'
:
require
(
'
../config/dev.env
'
)
'
process.env
'
:
require
(
'
../config/dev.env
'
)
}),
}),
new
webpack
.
HotModuleReplacementPlugin
(),
new
webpack
.
HotModuleReplacementPlugin
(),
new
webpack
.
NamedModulesPlugin
(),
// HMR shows correct file names in console on update.
new
webpack
.
NoEmitOnErrorsPlugin
(),
// https://github.com/ampedandwired/html-webpack-plugin
// https://github.com/ampedandwired/html-webpack-plugin
new
HtmlWebpackPlugin
({
new
HtmlWebpackPlugin
({
filename
:
'
index.html
'
,
filename
:
'
index.html
'
,
template
:
'
index.html
'
,
template
:
'
index.html
'
,
inject
:
true
,
inject
:
true
,
favicon
:
resolve
(
'
favicon.ico
'
),
favicon
:
resolve
(
'
favicon.ico
'
),
title
:
'
litemall-admin
'
,
title
:
'
vue-element-admin
'
,
path
:
config
.
dev
.
assetsPublicPath
+
config
.
dev
.
assetsSubDirectory
templateParameters
:
{
BASE_URL
:
config
.
dev
.
assetsPublicPath
+
config
.
dev
.
assetsSubDirectory
,
},
}),
}),
]
]
})
})
...
@@ -73,14 +77,20 @@ module.exports = new Promise((resolve, reject) => {
...
@@ -73,14 +77,20 @@ module.exports = new Promise((resolve, reject) => {
devWebpackConfig
.
devServer
.
port
=
port
devWebpackConfig
.
devServer
.
port
=
port
// Add FriendlyErrorsPlugin
// Add FriendlyErrorsPlugin
devWebpackConfig
.
plugins
.
push
(
new
FriendlyErrorsPlugin
({
devWebpackConfig
.
plugins
.
push
(
compilationSuccessInfo
:
{
new
FriendlyErrorsPlugin
({
messages
:
[
`Your application is running here: http://
${
devWebpackConfig
.
devServer
.
host
}
:
${
port
}
`
],
compilationSuccessInfo
:
{
},
messages
:
[
onErrors
:
config
.
dev
.
notifyOnErrors
`Your application is running here: http://
${
?
utils
.
createNotifierCallback
()
devWebpackConfig
.
devServer
.
host
:
undefined
}
:
${
port
}
`
}))
]
},
onErrors
:
config
.
dev
.
notifyOnErrors
?
utils
.
createNotifierCallback
()
:
undefined
})
)
resolve
(
devWebpackConfig
)
resolve
(
devWebpackConfig
)
}
}
...
...
litemall-admin/build/webpack.prod.conf.js
View file @
6f0ebe3e
...
@@ -7,17 +7,23 @@ const merge = require('webpack-merge')
...
@@ -7,17 +7,23 @@ const merge = require('webpack-merge')
const
baseWebpackConfig
=
require
(
'
./webpack.base.conf
'
)
const
baseWebpackConfig
=
require
(
'
./webpack.base.conf
'
)
const
CopyWebpackPlugin
=
require
(
'
copy-webpack-plugin
'
)
const
CopyWebpackPlugin
=
require
(
'
copy-webpack-plugin
'
)
const
HtmlWebpackPlugin
=
require
(
'
html-webpack-plugin
'
)
const
HtmlWebpackPlugin
=
require
(
'
html-webpack-plugin
'
)
const
ExtractTextPlugin
=
require
(
'
extract-text-webpack-plugin
'
)
const
ScriptExtHtmlWebpackPlugin
=
require
(
'
script-ext-html-webpack-plugin
'
)
const
OptimizeCSSPlugin
=
require
(
'
optimize-css-assets-webpack-plugin
'
)
const
MiniCssExtractPlugin
=
require
(
'
mini-css-extract-plugin
'
)
const
OptimizeCSSAssetsPlugin
=
require
(
'
optimize-css-assets-webpack-plugin
'
)
const
UglifyJsPlugin
=
require
(
'
uglifyjs-webpack-plugin
'
)
const
UglifyJsPlugin
=
require
(
'
uglifyjs-webpack-plugin
'
)
function
resolve
(
dir
)
{
function
resolve
(
dir
)
{
return
path
.
join
(
__dirname
,
'
..
'
,
dir
)
return
path
.
join
(
__dirname
,
'
..
'
,
dir
)
}
}
const
env
=
require
(
'
../config/
'
+
process
.
env
.
env_config
+
'
.env
'
)
const
env
=
require
(
'
../config/
'
+
process
.
env
.
env_config
+
'
.env
'
)
// For NamedChunksPlugin
const
seen
=
new
Set
()
const
nameLength
=
4
const
webpackConfig
=
merge
(
baseWebpackConfig
,
{
const
webpackConfig
=
merge
(
baseWebpackConfig
,
{
mode
:
'
production
'
,
module
:
{
module
:
{
rules
:
utils
.
styleLoaders
({
rules
:
utils
.
styleLoaders
({
sourceMap
:
config
.
build
.
productionSourceMap
,
sourceMap
:
config
.
build
.
productionSourceMap
,
...
@@ -28,37 +34,18 @@ const webpackConfig = merge(baseWebpackConfig, {
...
@@ -28,37 +34,18 @@ const webpackConfig = merge(baseWebpackConfig, {
devtool
:
config
.
build
.
productionSourceMap
?
config
.
build
.
devtool
:
false
,
devtool
:
config
.
build
.
productionSourceMap
?
config
.
build
.
devtool
:
false
,
output
:
{
output
:
{
path
:
config
.
build
.
assetsRoot
,
path
:
config
.
build
.
assetsRoot
,
filename
:
utils
.
assetsPath
(
'
js/[name].[chunkhash].js
'
),
filename
:
utils
.
assetsPath
(
'
js/[name].[chunkhash
:8
].js
'
),
chunkFilename
:
utils
.
assetsPath
(
'
js/[
id
].[chunkhash].js
'
)
chunkFilename
:
utils
.
assetsPath
(
'
js/[
name
].[chunkhash
:8
].js
'
)
},
},
plugins
:
[
plugins
:
[
// http://vuejs.github.io/vue-loader/en/workflow/production.html
// http://vuejs.github.io/vue-loader/en/workflow/production.html
new
webpack
.
DefinePlugin
({
new
webpack
.
DefinePlugin
({
'
process.env
'
:
env
'
process.env
'
:
env
}),
}),
new
UglifyJsPlugin
({
uglifyOptions
:
{
compress
:
{
warnings
:
false
}
},
sourceMap
:
config
.
build
.
productionSourceMap
,
parallel
:
true
}),
// extract css into its own file
// extract css into its own file
new
ExtractTextPlugin
({
new
MiniCssExtractPlugin
({
filename
:
utils
.
assetsPath
(
'
css/[name].[contenthash].css
'
),
filename
:
utils
.
assetsPath
(
'
css/[name].[contenthash:8].css
'
),
// Setting the following option to `false` will not extract CSS from codesplit chunks.
chunkFilename
:
utils
.
assetsPath
(
'
css/[name].[contenthash:8].css
'
)
// Their CSS will instead be inserted dynamically with style-loader when the codesplit chunk has been loaded by webpack.
// increasing file size: https://github.com/vuejs-templates/webpack/issues/1110
allChunks
:
false
,
}),
// Compress extracted CSS. We are using this plugin so that possible
// duplicated CSS from different components can be deduped.
new
OptimizeCSSPlugin
({
cssProcessorOptions
:
config
.
build
.
productionSourceMap
?
{
safe
:
true
,
map
:
{
inline
:
false
}
}
:
{
safe
:
true
}
}),
}),
// generate dist index.html with correct asset hash for caching.
// generate dist index.html with correct asset hash for caching.
// you can customize output by editing /index.html
// you can customize output by editing /index.html
...
@@ -69,75 +56,43 @@ const webpackConfig = merge(baseWebpackConfig, {
...
@@ -69,75 +56,43 @@ const webpackConfig = merge(baseWebpackConfig, {
inject
:
true
,
inject
:
true
,
favicon
:
resolve
(
'
favicon.ico
'
),
favicon
:
resolve
(
'
favicon.ico
'
),
title
:
'
vue-element-admin
'
,
title
:
'
vue-element-admin
'
,
path
:
config
.
build
.
assetsPublicPath
+
config
.
build
.
assetsSubDirectory
,
templateParameters
:
{
BASE_URL
:
config
.
build
.
assetsPublicPath
+
config
.
build
.
assetsSubDirectory
,
},
minify
:
{
minify
:
{
removeComments
:
true
,
removeComments
:
true
,
collapseWhitespace
:
true
,
collapseWhitespace
:
true
,
removeAttributeQuotes
:
true
removeAttributeQuotes
:
true
// more options:
// more options:
// https://github.com/kangax/html-minifier#options-quick-reference
// https://github.com/kangax/html-minifier#options-quick-reference
},
// necessary to consistently work with multiple chunks via CommonsChunkPlugin
chunksSortMode
:
'
dependency
'
}),
// keep module.id stable when vender modules does not change
new
webpack
.
HashedModuleIdsPlugin
(),
// enable scope hoisting
new
webpack
.
optimize
.
ModuleConcatenationPlugin
(),
// split vendor js into its own file
new
webpack
.
optimize
.
CommonsChunkPlugin
({
name
:
'
vendor
'
,
minChunks
(
module
)
{
// any required modules inside node_modules are extracted to vendor
return
(
module
.
resource
&&
/
\.
js$/
.
test
(
module
.
resource
)
&&
module
.
resource
.
indexOf
(
path
.
join
(
__dirname
,
'
../node_modules
'
)
)
===
0
)
}
}
// default sort mode uses toposort which cannot handle cyclic deps
// in certain cases, and in webpack 4, chunk order in HTML doesn't
// matter anyway
}),
}),
// extract webpack runtime and module manifest to its own file in order to
new
ScriptExtHtmlWebpackPlugin
({
// prevent vendor hash from being updated whenever app bundle is updated
//`runtime` must same as runtimeChunk name. default is `runtime`
new
webpack
.
optimize
.
CommonsChunkPlugin
({
inline
:
/runtime
\.
.*
\.
js$/
name
:
'
manifest
'
,
minChunks
:
Infinity
}),
}),
// This instance extracts shared chunks from code splitted chunks and bundles them
// keep chunk.id stable when chunk has no name
// in a separate chunk, similar to the vendor chunk
new
webpack
.
NamedChunksPlugin
(
chunk
=>
{
// see: https://webpack.js.org/plugins/commons-chunk-plugin/#extra-async-commons-chunk
if
(
chunk
.
name
)
{
new
webpack
.
optimize
.
CommonsChunkPlugin
({
return
chunk
.
name
name
:
'
app
'
,
async
:
'
vendor-async
'
,
children
:
true
,
minChunks
:
3
}),
// split echarts into its own file
new
webpack
.
optimize
.
CommonsChunkPlugin
({
async
:
'
echarts
'
,
minChunks
(
module
)
{
var
context
=
module
.
context
;
return
context
&&
(
context
.
indexOf
(
'
echarts
'
)
>=
0
||
context
.
indexOf
(
'
zrender
'
)
>=
0
);
}
}),
// split xlsx into its own file
new
webpack
.
optimize
.
CommonsChunkPlugin
({
async
:
'
xlsx
'
,
minChunks
(
module
)
{
var
context
=
module
.
context
;
return
context
&&
(
context
.
indexOf
(
'
xlsx
'
)
>=
0
);
}
}
}),
const
modules
=
Array
.
from
(
chunk
.
modulesIterable
)
// split codemirror into its own file
if
(
modules
.
length
>
1
)
{
new
webpack
.
optimize
.
CommonsChunkPlugin
({
const
hash
=
require
(
'
hash-sum
'
)
async
:
'
codemirror
'
,
const
joinedHash
=
hash
(
modules
.
map
(
m
=>
m
.
id
).
join
(
'
_
'
))
minChunks
(
module
)
{
let
len
=
nameLength
var
context
=
module
.
context
;
while
(
seen
.
has
(
joinedHash
.
substr
(
0
,
len
)))
len
++
return
context
&&
(
context
.
indexOf
(
'
codemirror
'
)
>=
0
);
seen
.
add
(
joinedHash
.
substr
(
0
,
len
))
return
`chunk-
${
joinedHash
.
substr
(
0
,
len
)}
`
}
else
{
return
modules
[
0
].
id
}
}
}),
}),
// keep module.id stable when vender modules does not change
new
webpack
.
HashedModuleIdsPlugin
(),
// copy custom static assets
// copy custom static assets
new
CopyWebpackPlugin
([
new
CopyWebpackPlugin
([
{
{
...
@@ -146,7 +101,48 @@ const webpackConfig = merge(baseWebpackConfig, {
...
@@ -146,7 +101,48 @@ const webpackConfig = merge(baseWebpackConfig, {
ignore
:
[
'
.*
'
]
ignore
:
[
'
.*
'
]
}
}
])
])
]
],
optimization
:
{
splitChunks
:
{
chunks
:
'
all
'
,
cacheGroups
:
{
libs
:
{
name
:
'
chunk-libs
'
,
test
:
/
[\\/]
node_modules
[\\/]
/
,
priority
:
10
,
chunks
:
'
initial
'
// 只打包初始时依赖的第三方
},
elementUI
:
{
name
:
'
chunk-elementUI
'
,
// 单独将 elementUI 拆包
priority
:
20
,
// 权重要大于 libs 和 app 不然会被打包进 libs 或者 app
test
:
/
[\\/]
node_modules
[\\/]
element-ui
[\\/]
/
},
commons
:
{
name
:
'
chunk-commons
'
,
test
:
resolve
(
'
src/components
'
),
// 可自定义拓展你的规则
minChunks
:
3
,
// 最小公用次数
priority
:
5
,
reuseExistingChunk
:
true
}
}
},
runtimeChunk
:
'
single
'
,
minimizer
:
[
new
UglifyJsPlugin
({
uglifyOptions
:
{
mangle
:
{
safari10
:
true
}
},
sourceMap
:
config
.
build
.
productionSourceMap
,
cache
:
true
,
parallel
:
true
}),
// Compress extracted CSS. We are using this plugin so that possible
// duplicated CSS from different components can be deduped.
new
OptimizeCSSAssetsPlugin
()
]
}
})
})
if
(
config
.
build
.
productionGzip
)
{
if
(
config
.
build
.
productionGzip
)
{
...
@@ -157,9 +153,7 @@ if (config.build.productionGzip) {
...
@@ -157,9 +153,7 @@ if (config.build.productionGzip) {
asset
:
'
[path].gz[query]
'
,
asset
:
'
[path].gz[query]
'
,
algorithm
:
'
gzip
'
,
algorithm
:
'
gzip
'
,
test
:
new
RegExp
(
test
:
new
RegExp
(
'
\\
.(
'
+
'
\\
.(
'
+
config
.
build
.
productionGzipExtensions
.
join
(
'
|
'
)
+
'
)$
'
config
.
build
.
productionGzipExtensions
.
join
(
'
|
'
)
+
'
)$
'
),
),
threshold
:
10240
,
threshold
:
10240
,
minRatio
:
0.8
minRatio
:
0.8
...
@@ -167,9 +161,28 @@ if (config.build.productionGzip) {
...
@@ -167,9 +161,28 @@ if (config.build.productionGzip) {
)
)
}
}
if
(
config
.
build
.
bundleAnalyzerReport
)
{
if
(
config
.
build
.
generateAnalyzerReport
||
config
.
build
.
bundleAnalyzerReport
)
{
const
BundleAnalyzerPlugin
=
require
(
'
webpack-bundle-analyzer
'
).
BundleAnalyzerPlugin
const
BundleAnalyzerPlugin
=
require
(
'
webpack-bundle-analyzer
'
)
webpackConfig
.
plugins
.
push
(
new
BundleAnalyzerPlugin
())
.
BundleAnalyzerPlugin
if
(
config
.
build
.
bundleAnalyzerReport
)
{
webpackConfig
.
plugins
.
push
(
new
BundleAnalyzerPlugin
({
analyzerPort
:
8080
,
generateStatsFile
:
false
})
)
}
if
(
config
.
build
.
generateAnalyzerReport
)
{
webpackConfig
.
plugins
.
push
(
new
BundleAnalyzerPlugin
({
analyzerMode
:
'
static
'
,
reportFilename
:
'
bundle-report.html
'
,
openAnalyzer
:
false
})
)
}
}
}
module
.
exports
=
webpackConfig
module
.
exports
=
webpackConfig
litemall-admin/config/index.js
View file @
6f0ebe3e
...
@@ -6,14 +6,16 @@ const path = require('path')
...
@@ -6,14 +6,16 @@ const path = require('path')
module
.
exports
=
{
module
.
exports
=
{
dev
:
{
dev
:
{
// Paths
// Paths
assetsSubDirectory
:
'
static
'
,
assetsSubDirectory
:
'
static
'
,
assetsPublicPath
:
'
/
'
,
assetsPublicPath
:
'
/
'
,
proxyTable
:
{},
proxyTable
:
{},
// Various Dev Server settings
// Various Dev Server settings
host
:
'
localhost
'
,
// can be overwritten by process.env.HOST
// can be overwritten by process.env.HOST
// if you want dev by ip, please set host: '0.0.0.0'
host
:
'
localhost
'
,
port
:
9527
,
// can be overwritten by process.env.PORT, if port is in use, a free one will be determined
port
:
9527
,
// can be overwritten by process.env.PORT, if port is in use, a free one will be determined
autoOpenBrowser
:
true
,
autoOpenBrowser
:
true
,
errorOverlay
:
true
,
errorOverlay
:
true
,
...
@@ -33,19 +35,14 @@ module.exports = {
...
@@ -33,19 +35,14 @@ module.exports = {
*/
*/
// https://webpack.js.org/configuration/devtool/#development
// https://webpack.js.org/configuration/devtool/#development
devtool
:
'
#cheap-source-map
'
,
devtool
:
'
cheap-source-map
'
,
// If you have problems debugging vue-files in devtools,
// set this to false - it *may* help
// https://vue-loader.vuejs.org/en/options.html#cachebusting
cacheBusting
:
true
,
// CSS Sourcemaps off by default because relative paths are "buggy"
// CSS Sourcemaps off by default because relative paths are "buggy"
// with this option, according to the CSS-Loader README
// with this option, according to the CSS-Loader README
// (https://github.com/webpack/css-loader#sourcemaps)
// (https://github.com/webpack/css-loader#sourcemaps)
// In our experience, they generally work as expected,
// In our experience, they generally work as expected,
// just be aware of this issue when enabling this option.
// just be aware of this issue when enabling this option.
cssSourceMap
:
false
,
cssSourceMap
:
false
},
},
build
:
{
build
:
{
...
@@ -56,16 +53,21 @@ module.exports = {
...
@@ -56,16 +53,21 @@ module.exports = {
assetsRoot
:
path
.
resolve
(
__dirname
,
'
../dist
'
),
assetsRoot
:
path
.
resolve
(
__dirname
,
'
../dist
'
),
assetsSubDirectory
:
'
static
'
,
assetsSubDirectory
:
'
static
'
,
// you can set by youself according to actual condition
/**
assetsPublicPath
:
'
./
'
,
* You can set by youself according to actual condition
* You will need to set this if you plan to deploy your site under a sub path,
* for example GitHub pages. If you plan to deploy your site to https://foo.github.io/bar/,
* then assetsPublicPath should be set to "/bar/".
* In most cases please use '/' !!!
*/
assetsPublicPath
:
'
/
'
,
/**
/**
* Source Maps
* Source Maps
*/
*/
productionSourceMap
:
false
,
productionSourceMap
:
false
,
// https://webpack.js.org/configuration/devtool/#production
// https://webpack.js.org/configuration/devtool/#production
devtool
:
'
#
source-map
'
,
devtool
:
'
source-map
'
,
// Gzip off by default as many popular static hosts such as
// Gzip off by default as many popular static hosts such as
// Surge or Netlify already gzip all static assets for you.
// Surge or Netlify already gzip all static assets for you.
...
@@ -76,8 +78,11 @@ module.exports = {
...
@@ -76,8 +78,11 @@ module.exports = {
// Run the build command with an extra argument to
// Run the build command with an extra argument to
// View the bundle analyzer report after build finishes:
// View the bundle analyzer report after build finishes:
// `npm run build --report`
// `npm run build
:prod
--report`
// Set to `true` or `false` to always turn it on or off
// Set to `true` or `false` to always turn it on or off
bundleAnalyzerReport
:
process
.
env
.
npm_config_report
bundleAnalyzerReport
:
process
.
env
.
npm_config_report
||
false
,
// `npm run build:prod --generate_report`
generateAnalyzerReport
:
process
.
env
.
npm_config_generate_report
||
false
}
}
}
}
litemall-admin/index.html
View file @
6f0ebe3e
<!DOCTYPE html>
<!DOCTYPE html>
<html>
<html>
<head>
<head>
<meta
charset=
"utf-8"
>
<meta
charset=
"utf-8"
>
<meta
http-equiv=
"X-UA-Compatible"
content=
"IE=edge,chrome=1"
>
<meta
http-equiv=
"X-UA-Compatible"
content=
"IE=edge,chrome=1"
>
<meta
name=
"renderer"
content=
"webkit"
>
<meta
name=
"renderer"
content=
"webkit"
>
<meta
name=
"viewport"
content=
"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"
>
<meta
name=
"viewport"
content=
"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"
>
<title>
litemall-admin
</title>
<title>
litemall-admin
</title>
</head>
</head>
<script
src=
<%=
htmlWebpackPlugin.options.path
%
>
/
tinymce4
.
7.5
/
tinymce
.
min
.
js
>
</script
>
<body
>
<body
>
<script
src=
<%=
BASE_URL
%
>
/
tinymce4
.
7.5
/
tinymce
.
min
.
js
>
</script
>
<div
id=
"app"
></div>
<div
id=
"app"
></div>
<!-- built files will be auto injected -->
<!-- built files will be auto injected -->
</body>
</body>
</html>
</html>
litemall-admin/package.json
View file @
6f0ebe3e
{
{
"name"
:
"litemall-admin"
,
"name"
:
"litemall-admin"
,
"version"
:
"0.1.0"
,
"version"
:
"0.1.0"
,
"description"
:
"litemall-admin basing on vue-element-admin 3.
6.2
"
,
"description"
:
"litemall-admin basing on vue-element-admin 3.
9.3
"
,
"author"
:
"linlinjava <linlinjava@163.com>"
,
"author"
:
"linlinjava <linlinjava@163.com>"
,
"license"
:
"MIT"
,
"license"
:
"MIT"
,
"private"
:
true
,
"private"
:
true
,
"scripts"
:
{
"scripts"
:
{
"dev"
:
"webpack-dev-server --inline --progress --config build/webpack.dev.conf.js"
,
"dev"
:
"
cross-env BABEL_ENV=development
webpack-dev-server --inline --progress --config build/webpack.dev.conf.js"
,
"build:dep"
:
"cross-env NODE_ENV=production env_config=dep node build/build.js"
,
"build:dep"
:
"cross-env NODE_ENV=production env_config=dep node build/build.js"
,
"build:prod"
:
"cross-env NODE_ENV=production env_config=prod node build/build.js"
,
"build:prod"
:
"cross-env NODE_ENV=production env_config=prod node build/build.js"
,
"lint"
:
"eslint --ext .js,.vue src"
,
"lint"
:
"eslint --ext .js,.vue src"
,
"test"
:
"npm run lint"
"test"
:
"npm run lint"
,
"precommit"
:
"lint-staged"
,
"svgo"
:
"svgo -f src/icons/svg --config=src/icons/svgo.yml"
},
"lint-staged"
:
{
"src/**/*.{js,vue}"
:
[
"eslint --fix"
,
"git add"
]
},
},
"dependencies"
:
{
"dependencies"
:
{
"@tinymce/tinymce-vue"
:
"^1.0.8"
,
"@tinymce/tinymce-vue"
:
"1.1.0"
,
"axios"
:
"0.17.1"
,
"v-charts"
:
"1.19.0"
,
"axios"
:
"0.18.0"
,
"clipboard"
:
"1.7.1"
,
"clipboard"
:
"1.7.1"
,
"echarts"
:
"^4.1.0"
,
"connect"
:
"3.6.6"
,
"element-ui"
:
"2.0.8"
,
"echarts"
:
"4.1.0"
,
"file-saver"
:
"1.3.3"
,
"element-ui"
:
"2.4.6"
,
"file-saver"
:
"1.3.8"
,
"font-awesome"
:
"4.7.0"
,
"font-awesome"
:
"4.7.0"
,
"js-cookie"
:
"2.2.0"
,
"js-cookie"
:
"2.2.0"
,
"
mockjs"
:
"1.0.1-beta3
"
,
"
jszip"
:
"3.1.5
"
,
"normalize.css"
:
"7.0.0"
,
"normalize.css"
:
"7.0.0"
,
"nprogress"
:
"0.2.0"
,
"nprogress"
:
"0.2.0"
,
"qs"
:
"^6.5.2"
,
"screenfull"
:
"3.3.3"
,
"screenfull"
:
"3.3.2"
,
"vue"
:
"2.5.17"
,
"v-charts"
:
"^1.16.19"
,
"vue"
:
"2.5.10"
,
"vue-count-to"
:
"1.0.13"
,
"vue-count-to"
:
"1.0.13"
,
"vue-i18n"
:
"7.3.2"
,
"vue-router"
:
"3.0.1"
,
"vue-router"
:
"3.0.1"
,
"vue-splitpane"
:
"1.0.2"
,
"vuex"
:
"3.0.1"
,
"vuex"
:
"3.0.1"
,
"xlsx"
:
"^0.11.16"
"xlsx"
:
"^0.11.16"
},
},
"devDependencies"
:
{
"devDependencies"
:
{
"autoprefixer"
:
"
7.2.3
"
,
"autoprefixer"
:
"
8.5.0
"
,
"babel-core"
:
"6.26.
0
"
,
"babel-core"
:
"6.26.
3
"
,
"babel-eslint"
:
"8.
0.3
"
,
"babel-eslint"
:
"8.
2.6
"
,
"babel-helper-vue-jsx-merge-props"
:
"2.0.3"
,
"babel-helper-vue-jsx-merge-props"
:
"2.0.3"
,
"babel-loader"
:
"7.1.2"
,
"babel-loader"
:
"7.1.5"
,
"babel-plugin-dynamic-import-node"
:
"2.0.0"
,
"babel-plugin-syntax-jsx"
:
"6.18.0"
,
"babel-plugin-syntax-jsx"
:
"6.18.0"
,
"babel-plugin-transform-runtime"
:
"6.23.0"
,
"babel-plugin-transform-runtime"
:
"6.23.0"
,
"babel-plugin-transform-vue-jsx"
:
"3.
5
.0"
,
"babel-plugin-transform-vue-jsx"
:
"3.
7
.0"
,
"babel-preset-env"
:
"1.
6.1
"
,
"babel-preset-env"
:
"1.
7.0
"
,
"babel-preset-stage-2"
:
"6.24.1"
,
"babel-preset-stage-2"
:
"6.24.1"
,
"chalk"
:
"2.3.0"
,
"chalk"
:
"2.4.1"
,
"copy-webpack-plugin"
:
"4.3.0"
,
"copy-webpack-plugin"
:
"4.5.2"
,
"cross-env"
:
"5.1.1"
,
"cross-env"
:
"5.2.0"
,
"css-loader"
:
"0.28.7"
,
"css-loader"
:
"1.0.0"
,
"eslint"
:
"4.13.1"
,
"eslint"
:
"4.19.1"
,
"eslint-friendly-formatter"
:
"3.0.0"
,
"eslint-friendly-formatter"
:
"4.0.1"
,
"eslint-loader"
:
"1.9.0"
,
"eslint-loader"
:
"2.0.0"
,
"eslint-plugin-html"
:
"4.0.1"
,
"eslint-plugin-vue"
:
"4.7.1"
,
"extract-text-webpack-plugin"
:
"3.0.2"
,
"file-loader"
:
"1.1.11"
,
"file-loader"
:
"1.1.5"
,
"friendly-errors-webpack-plugin"
:
"1.7.0"
,
"friendly-errors-webpack-plugin"
:
"1.6.1"
,
"hash-sum"
:
"1.0.2"
,
"html-webpack-plugin"
:
"2.30.1"
,
"html-webpack-plugin"
:
"4.0.0-alpha"
,
"node-notifier"
:
"5.1.2"
,
"husky"
:
"0.14.3"
,
"lint-staged"
:
"7.2.2"
,
"mini-css-extract-plugin"
:
"0.4.1"
,
"node-notifier"
:
"5.2.1"
,
"node-sass"
:
"^4.7.2"
,
"node-sass"
:
"^4.7.2"
,
"optimize-css-assets-webpack-plugin"
:
"3.2.0"
,
"optimize-css-assets-webpack-plugin"
:
"5.0.0"
,
"ora"
:
"1.3.0"
,
"ora"
:
"3.0.0"
,
"path-to-regexp"
:
"2.4.0"
,
"portfinder"
:
"1.0.13"
,
"portfinder"
:
"1.0.13"
,
"postcss-import"
:
"11.0.0"
,
"postcss-import"
:
"11.1.0"
,
"postcss-loader"
:
"2.0.9"
,
"postcss-loader"
:
"2.1.6"
,
"postcss-url"
:
"7.3.0"
,
"postcss-url"
:
"7.3.2"
,
"pushstate-server"
:
"3.0.1"
,
"rimraf"
:
"2.6.2"
,
"rimraf"
:
"2.6.2"
,
"sass-loader"
:
"6.0.6"
,
"sass-loader"
:
"7.0.3"
,
"script-ext-html-webpack-plugin"
:
"2.0.1"
,
"script-loader"
:
"0.7.2"
,
"script-loader"
:
"0.7.2"
,
"semver"
:
"5.4.1"
,
"semver"
:
"5.5.0"
,
"shelljs"
:
"0.7.8"
,
"serve-static"
:
"1.13.2"
,
"svg-sprite-loader"
:
"3.5.2"
,
"shelljs"
:
"0.8.2"
,
"uglifyjs-webpack-plugin"
:
"1.1.3"
,
"svg-sprite-loader"
:
"3.8.0"
,
"url-loader"
:
"0.6.2"
,
"svgo"
:
"1.0.5"
,
"vue-loader"
:
"13.5.0"
,
"uglifyjs-webpack-plugin"
:
"1.2.7"
,
"vue-style-loader"
:
"3.0.3"
,
"url-loader"
:
"1.0.1"
,
"vue-template-compiler"
:
"2.5.10"
,
"vue-loader"
:
"15.3.0"
,
"webpack"
:
"3.10.0"
,
"vue-style-loader"
:
"4.1.2"
,
"webpack-bundle-analyzer"
:
"2.9.1"
,
"vue-template-compiler"
:
"2.5.17"
,
"webpack-dev-server"
:
"2.9.7"
,
"webpack"
:
"4.16.5"
,
"webpack-merge"
:
"4.1.1"
"webpack-bundle-analyzer"
:
"2.13.1"
,
"webpack-cli"
:
"3.1.0"
,
"webpack-dev-server"
:
"3.1.5"
,
"webpack-merge"
:
"4.1.4"
},
},
"engines"
:
{
"engines"
:
{
"node"
:
">=
4
.0.0"
,
"node"
:
">=
6
.0.0"
,
"npm"
:
">= 3.0.0"
"npm"
:
">= 3.0.0"
},
},
"browserslist"
:
[
"browserslist"
:
[
...
...
litemall-admin/src/App.vue
View file @
6f0ebe3e
<
template
>
<
template
>
<div
id=
"app"
>
<div
id=
"app"
>
<router-view
></router-view
>
<router-view
/
>
</div>
</div>
</
template
>
</
template
>
<
script
>
<
script
>
export
default
{
export
default
{
name
:
'
A
PP
'
name
:
'
A
pp
'
}
}
</
script
>
</
script
>
litemall-admin/src/assets/custom-theme/fonts/element-icons.ttf
0 → 100644
View file @
6f0ebe3e
File added
litemall-admin/src/assets/custom-theme/fonts/element-icons.woff
0 → 100644
View file @
6f0ebe3e
File added
litemall-admin/src/assets/custom-theme/index.css
0 → 100644
View file @
6f0ebe3e
This source diff could not be displayed because it is too large. You can
view the blob
instead.
litemall-admin/src/assets/echarts-macarons.js
deleted
100644 → 0
View file @
cffdc561
/* eslint-disable */
(
function
(
root
,
factory
)
{
if
(
typeof
define
===
'
function
'
&&
define
.
amd
)
{
// AMD. Register as an anonymous module.
define
([
'
exports
'
,
'
echarts
'
],
factory
);
}
else
if
(
typeof
exports
===
'
object
'
&&
typeof
exports
.
nodeName
!==
'
string
'
)
{
// CommonJS
factory
(
exports
,
require
(
'
echarts
'
));
}
else
{
// Browser globals
factory
({},
root
.
echarts
);
}
}(
this
,
function
(
exports
,
echarts
)
{
var
log
=
function
(
msg
)
{
if
(
typeof
console
!==
'
undefined
'
)
{
console
&&
console
.
error
&&
console
.
error
(
msg
);
}
};
if
(
!
echarts
)
{
log
(
'
ECharts is not Loaded
'
);
return
;
}
var
colorPalette
=
[
'
#2ec7c9
'
,
'
#b6a2de
'
,
'
#5ab1ef
'
,
'
#ffb980
'
,
'
#d87a80
'
,
'
#8d98b3
'
,
'
#e5cf0d
'
,
'
#97b552
'
,
'
#95706d
'
,
'
#dc69aa
'
,
'
#07a2a4
'
,
'
#9a7fd1
'
,
'
#588dd5
'
,
'
#f5994e
'
,
'
#c05050
'
,
'
#59678c
'
,
'
#c9ab00
'
,
'
#7eb00a
'
,
'
#6f5553
'
,
'
#c14089
'
];
var
theme
=
{
color
:
colorPalette
,
title
:
{
textStyle
:
{
fontWeight
:
'
normal
'
,
color
:
'
#008acd
'
}
},
visualMap
:
{
itemWidth
:
15
,
color
:
[
'
#5ab1ef
'
,
'
#e0ffff
'
]
},
toolbox
:
{
iconStyle
:
{
normal
:
{
borderColor
:
colorPalette
[
0
]
}
}
},
tooltip
:
{
backgroundColor
:
'
rgba(50,50,50,0.5)
'
,
axisPointer
:
{
type
:
'
line
'
,
lineStyle
:
{
color
:
'
#008acd
'
},
crossStyle
:
{
color
:
'
#008acd
'
},
shadowStyle
:
{
color
:
'
rgba(200,200,200,0.2)
'
}
}
},
dataZoom
:
{
dataBackgroundColor
:
'
#efefff
'
,
fillerColor
:
'
rgba(182,162,222,0.2)
'
,
handleColor
:
'
#008acd
'
},
grid
:
{
borderColor
:
'
#eee
'
},
categoryAxis
:
{
axisLine
:
{
lineStyle
:
{
color
:
'
#008acd
'
}
},
splitLine
:
{
lineStyle
:
{
color
:
[
'
#eee
'
]
}
}
},
valueAxis
:
{
axisLine
:
{
lineStyle
:
{
color
:
'
#008acd
'
}
},
splitArea
:
{
show
:
true
,
areaStyle
:
{
color
:
[
'
rgba(250,250,250,0.1)
'
,
'
rgba(200,200,200,0.1)
'
]
}
},
splitLine
:
{
lineStyle
:
{
color
:
[
'
#eee
'
]
}
}
},
timeline
:
{
lineStyle
:
{
color
:
'
#008acd
'
},
controlStyle
:
{
normal
:
{
color
:
'
#008acd
'
},
emphasis
:
{
color
:
'
#008acd
'
}
},
symbol
:
'
emptyCircle
'
,
symbolSize
:
3
},
line
:
{
smooth
:
true
,
symbol
:
'
emptyCircle
'
,
symbolSize
:
3
},
candlestick
:
{
itemStyle
:
{
normal
:
{
color
:
'
#d87a80
'
,
color0
:
'
#2ec7c9
'
,
lineStyle
:
{
color
:
'
#d87a80
'
,
color0
:
'
#2ec7c9
'
}
}
}
},
scatter
:
{
symbol
:
'
circle
'
,
symbolSize
:
4
},
map
:
{
label
:
{
normal
:
{
textStyle
:
{
color
:
'
#d87a80
'
}
}
},
itemStyle
:
{
normal
:
{
borderColor
:
'
#eee
'
,
areaColor
:
'
#ddd
'
},
emphasis
:
{
areaColor
:
'
#fe994e
'
}
}
},
graph
:
{
color
:
colorPalette
},
gauge
:
{
axisLine
:
{
lineStyle
:
{
color
:
[[
0.2
,
'
#2ec7c9
'
],[
0.8
,
'
#5ab1ef
'
],[
1
,
'
#d87a80
'
]],
width
:
10
}
},
axisTick
:
{
splitNumber
:
10
,
length
:
15
,
lineStyle
:
{
color
:
'
auto
'
}
},
splitLine
:
{
length
:
22
,
lineStyle
:
{
color
:
'
auto
'
}
},
pointer
:
{
width
:
5
}
}
};
echarts
.
registerTheme
(
'
macarons
'
,
theme
);
}));
litemall-admin/src/components/BackToTop/index.vue
View file @
6f0ebe3e
<
template
>
<
template
>
<transition
:name=
"transitionName"
>
<transition
:name=
"transitionName"
>
<div
class=
"back-to-ceiling"
@
click=
"backToTop"
v-show=
"visible"
:style=
"customStyle"
>
<div
v-show=
"visible"
:style=
"customStyle"
class=
"back-to-ceiling"
@
click=
"backToTop"
>
<svg
width=
"16"
height=
"16"
viewBox=
"0 0 17 17"
xmlns=
"http://www.w3.org/2000/svg"
class=
"Icon Icon--backToTopArrow"
aria-hidden=
"true"
style=
"height: 16px; width: 16px;"
>
<svg
width=
"16"
height=
"16"
viewBox=
"0 0 17 17"
xmlns=
"http://www.w3.org/2000/svg"
class=
"Icon Icon--backToTopArrow"
aria-hidden=
"true"
style=
"height: 16px; width: 16px;"
>
<title>
回到顶部
</title>
<title>
回到顶部
</title>
<g>
<g>
<path
d=
"M12.036 15.59c0 .55-.453.995-.997.995H5.032c-.55 0-.997-.445-.997-.996V8.584H1.03c-1.1 0-1.36-.633-.578-1.416L7.33.29c.39-.39 1.026-.385 1.412 0l6.878 6.88c.782.78.523 1.415-.58 1.415h-3.004v7.004z"
fill-rule=
"evenodd"
></path
>
<path
d=
"M12.036 15.59c0 .55-.453.995-.997.995H5.032c-.55 0-.997-.445-.997-.996V8.584H1.03c-1.1 0-1.36-.633-.578-1.416L7.33.29c.39-.39 1.026-.385 1.412 0l6.878 6.88c.782.78.523 1.415-.58 1.415h-3.004v7.004z"
fill-rule=
"evenodd"
/
>
</g>
</g>
</svg>
</svg>
</div>
</div>
...
@@ -45,7 +45,8 @@ export default {
...
@@ -45,7 +45,8 @@ export default {
data
()
{
data
()
{
return
{
return
{
visible
:
false
,
visible
:
false
,
interval
:
null
interval
:
null
,
isMoving
:
false
}
}
},
},
mounted
()
{
mounted
()
{
...
@@ -62,13 +63,16 @@ export default {
...
@@ -62,13 +63,16 @@ export default {
this
.
visible
=
window
.
pageYOffset
>
this
.
visibilityHeight
this
.
visible
=
window
.
pageYOffset
>
this
.
visibilityHeight
},
},
backToTop
()
{
backToTop
()
{
if
(
this
.
isMoving
)
return
const
start
=
window
.
pageYOffset
const
start
=
window
.
pageYOffset
let
i
=
0
let
i
=
0
this
.
isMoving
=
true
this
.
interval
=
setInterval
(()
=>
{
this
.
interval
=
setInterval
(()
=>
{
const
next
=
Math
.
floor
(
this
.
easeInOutQuad
(
10
*
i
,
start
,
-
start
,
500
))
const
next
=
Math
.
floor
(
this
.
easeInOutQuad
(
10
*
i
,
start
,
-
start
,
500
))
if
(
next
<=
this
.
backPosition
)
{
if
(
next
<=
this
.
backPosition
)
{
window
.
scrollTo
(
0
,
this
.
backPosition
)
window
.
scrollTo
(
0
,
this
.
backPosition
)
clearInterval
(
this
.
interval
)
clearInterval
(
this
.
interval
)
this
.
isMoving
=
false
}
else
{
}
else
{
window
.
scrollTo
(
0
,
next
)
window
.
scrollTo
(
0
,
next
)
}
}
...
...
litemall-admin/src/components/Breadcrumb/index.vue
View file @
6f0ebe3e
<
template
>
<
template
>
<el-breadcrumb
class=
"app-breadcrumb"
separator=
"/"
>
<el-breadcrumb
class=
"app-breadcrumb"
separator=
"/"
>
<transition-group
name=
"breadcrumb"
>
<transition-group
name=
"breadcrumb"
>
<el-breadcrumb-item
v-for=
"(item,index)
in levelList"
:key=
"item.path"
v-if=
'
item.meta.title
'
>
<el-breadcrumb-item
v-for=
"(item,index) in levelList"
v-if=
"
item.meta.title
"
:key=
"item.path"
>
<span
v-if=
'
item.redirect===
"
noredirect
"
||index==levelList.length-1
'
class=
"no-redirect"
>
{{
item
.
meta
.
title
}}
</span>
<span
v-if=
"
item.redirect===
'
noredirect
'
||index==levelList.length-1
"
class=
"no-redirect"
>
{{
generateTitle
(
item
.
meta
.
title
)
}}
</span>
<router-link
v-else
:to=
"item.redirect||item.path"
>
{{
item
.
meta
.
title
}}
</router-link>
<router-link
v-else
:to=
"item.redirect||item.path"
>
{{
generateTitle
(
item
.
meta
.
title
)
}}
</router-link>
</el-breadcrumb-item>
</el-breadcrumb-item>
</transition-group>
</transition-group>
</el-breadcrumb>
</el-breadcrumb>
</
template
>
</
template
>
<
script
>
<
script
>
import
{
generateTitle
}
from
'
@/utils/i18n
'
import
pathToRegexp
from
'
path-to-regexp
'
export
default
{
export
default
{
created
()
{
this
.
getBreadcrumb
()
},
data
()
{
data
()
{
return
{
return
{
levelList
:
null
levelList
:
null
...
@@ -25,12 +24,24 @@ export default {
...
@@ -25,12 +24,24 @@ export default {
this
.
getBreadcrumb
()
this
.
getBreadcrumb
()
}
}
},
},
created
()
{
this
.
getBreadcrumb
()
},
methods
:
{
methods
:
{
generateTitle
,
getBreadcrumb
()
{
getBreadcrumb
()
{
let
matched
=
this
.
$route
.
matched
.
filter
(
item
=>
item
.
name
)
const
{
params
}
=
this
.
$route
let
matched
=
this
.
$route
.
matched
.
filter
(
item
=>
{
if
(
item
.
name
)
{
// To solve this problem https://github.com/PanJiaChen/vue-element-admin/issues/561
var
toPath
=
pathToRegexp
.
compile
(
item
.
path
)
item
.
path
=
toPath
(
params
)
return
true
}
})
const
first
=
matched
[
0
]
const
first
=
matched
[
0
]
if
(
first
&&
first
.
name
!==
'
d
ashboard
'
)
{
if
(
first
&&
first
.
name
.
trim
().
toLocaleLowerCase
()
!==
'
D
ashboard
'
.
toLocaleLowerCase
()
)
{
matched
=
[{
path
:
'
/dashboard
'
,
meta
:
{
title
:
'
主页
'
}}].
concat
(
matched
)
matched
=
[{
path
:
'
/dashboard
'
,
meta
:
{
title
:
'
dashboard
'
}}].
concat
(
matched
)
}
}
this
.
levelList
=
matched
this
.
levelList
=
matched
}
}
...
...
Prev
1
2
3
4
5
…
8
Next
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment