Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
video-monitoring
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
刘怀志
video-monitoring
Commits
9aa070f4
Commit
9aa070f4
authored
Aug 06, 2024
by
拾柒
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'dev-sunyu'
parents
f413bd43
2951a6d9
Changes
6
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
534 additions
and
443 deletions
+534
-443
index.vue
src/components/TopNav/index.vue
+18
-31
index.js
src/router/index.js
+121
-124
request.js
src/utils/request.js
+17
-10
index.vue
src/views/employee/index.vue
+69
-111
index.vue
src/views/history/index.vue
+237
-94
vue.config.js
vue.config.js
+72
-73
No files found.
src/components/TopNav/index.vue
View file @
9aa070f4
...
@@ -6,42 +6,29 @@
...
@@ -6,42 +6,29 @@
@
select=
"handleSelect"
@
select=
"handleSelect"
style=
"margin-right: 120px"
style=
"margin-right: 120px"
>
>
<template>
<template
v-for=
"(item, index) in newTopNev"
>
<el-menu-item
class=
"menuStyle"
<el-menu-item
class=
"menuStyle"
style=
"font-size: small;background-color: #F6F6FA;border-top-right-radius: 15px;border-top-left-radius: 15px;text-align: center;margin-left: 1px"
:index=
"item.path"
:key=
"index"
style=
"font-size: small;background-color: #F6F6FA;border-top-right-radius: 15px;border-top-left-radius: 15px;text-align: center;margin-left: 1px"
index=
"/monitoring/video"
>
>
<i
style=
"width: 10px;height: 10px;margin-top: -12px"
></i>
<i
:class=
"item.icon"
style=
"width: 10px;height: 10px;margin-top: -12px"
></i>
首页
</el-menu-item
{{
item
.
name
}}
</el-menu-item
>
<el-menu-item
class=
"menuStyle"
style=
"font-size: small;background-color: #F6F6FA;border-top-right-radius: 15px;border-top-left-radius: 15px;text-align: center;margin-left: 1px"
index=
"/employee/employee"
>
<i
style=
"width: 10px;height: 10px;margin-top: -12px"
></i>
员工信息
</el-menu-item
>
<el-menu-item
class=
"menuStyle"
style=
"font-size: small;background-color: #F6F6FA;border-top-right-radius: 15px;border-top-left-radius: 15px;text-align: center;margin-left: 1px"
index=
"/monitoringhistory/history"
>
<i
style=
"width: 10px;height: 10px;margin-top: -12px"
></i>
历史记录
</el-menu-item
>
>
</
template
>
</
template
>
<!-- 顶部菜单超出数量折叠 -->
<!-- 顶部菜单超出数量折叠 -->
<!-- <el-submenu :style="{'--theme': theme}" index="more" v-if="topMenus.length > visibleNumber">-->
<!-- <el-submenu :style="{'--theme': theme}" index="more" v-if="topMenus.length > visibleNumber">-->
<!-- <template slot="title">更多菜单</template>-->
<!-- <template slot="title">更多菜单</template>-->
<!-- <template v-for="(item, index) in topMenus">-->
<!-- <template v-for="(item, index) in topMenus">-->
<!-- <el-menu-item-->
<!-- <el-menu-item-->
<!-- :index="item.path"-->
<!-- :index="item.path"-->
<!-- :key="index"-->
<!-- :key="index"-->
<!-- v-if="index >= visibleNumber">-->
<!-- v-if="index >= visibleNumber">-->
<!-- <svg-icon-->
<!-- <svg-icon-->
<!-- v-if="item.meta && item.meta.icon && item.meta.icon !== '#'"-->
<!-- v-if="item.meta && item.meta.icon && item.meta.icon !== '#'"-->
<!-- :icon-class="item.meta.icon"/>-->
<!-- :icon-class="item.meta.icon"/>-->
<!-- {{ item.meta.title }}-->
<!-- {{ item.meta.title }}-->
<!-- </el-menu-item>-->
<!-- </el-menu-item>-->
<!-- </template>-->
<!-- </template>-->
<!-- </el-submenu>-->
<!-- </el-submenu>-->
</el-menu>
</el-menu>
</template>
</template>
...
...
src/router/index.js
View file @
9aa070f4
import
Vue
from
'vue'
import
Vue
from
"vue"
;
import
Router
from
'vue-router'
import
Router
from
"vue-router"
;
Vue
.
use
(
Router
)
Vue
.
use
(
Router
)
;
/* Layout */
/* Layout */
import
Layout
from
'@/layout'
import
Layout
from
"@/layout"
;
/**
/**
* Note: 路由配置项
* Note: 路由配置项
...
@@ -31,213 +31,210 @@ import Layout from '@/layout'
...
@@ -31,213 +31,210 @@ import Layout from '@/layout'
// 公共路由
// 公共路由
export
const
constantRoutes
=
[
export
const
constantRoutes
=
[
{
{
path
:
'/redirect'
,
path
:
"/redirect"
,
component
:
Layout
,
component
:
Layout
,
hidden
:
true
,
hidden
:
true
,
children
:
[
children
:
[
{
{
path
:
'/redirect/:path(.*)'
,
path
:
"/redirect/:path(.*)"
,
component
:
()
=>
import
(
'@/views/redirect'
)
component
:
()
=>
import
(
"@/views/redirect"
),
}
}
,
]
]
,
},
},
{
{
path
:
'/login'
,
path
:
"/login"
,
component
:
()
=>
import
(
'@/views/login'
),
component
:
()
=>
import
(
"@/views/login"
),
hidden
:
true
hidden
:
true
,
},
},
{
{
path
:
'/register'
,
path
:
"/register"
,
component
:
()
=>
import
(
'@/views/register'
),
component
:
()
=>
import
(
"@/views/register"
),
hidden
:
true
hidden
:
true
,
},
},
{
{
path
:
'/404'
,
path
:
"/404"
,
component
:
()
=>
import
(
'@/views/error/404'
),
component
:
()
=>
import
(
"@/views/error/404"
),
hidden
:
true
hidden
:
true
,
},
},
{
{
path
:
'/401'
,
path
:
"/401"
,
component
:
()
=>
import
(
'@/views/error/401'
),
component
:
()
=>
import
(
"@/views/error/401"
),
hidden
:
true
hidden
:
true
,
},
},
{
{
path
:
''
,
path
:
""
,
component
:
Layout
,
component
:
Layout
,
redirect
:
'index'
,
redirect
:
"index"
,
children
:
[
children
:
[
{
{
path
:
'index'
,
path
:
"index"
,
component
:
()
=>
import
(
'@/views/video/index'
),
component
:
()
=>
import
(
"@/views/video/index"
),
name
:
'Index'
,
name
:
"Index"
,
meta
:
{
title
:
'首页'
,
icon
:
'dashboard'
,
affix
:
true
}
meta
:
{
title
:
"首页"
,
icon
:
"dashboard"
,
affix
:
true
},
}
}
,
]
]
,
},
},
{
{
path
:
'/user'
,
path
:
"/user"
,
component
:
Layout
,
component
:
Layout
,
hidden
:
true
,
hidden
:
true
,
redirect
:
'noredirect'
,
redirect
:
"noredirect"
,
children
:
[
children
:
[
{
{
path
:
'profile'
,
path
:
"profile"
,
component
:
()
=>
import
(
'@/views/system/user/profile/index'
),
component
:
()
=>
import
(
"@/views/system/user/profile/index"
),
name
:
'Profile'
,
name
:
"Profile"
,
meta
:
{
title
:
'个人中心'
,
icon
:
'user'
}
meta
:
{
title
:
"个人中心"
,
icon
:
"user"
},
}
},
],
]
},
},
{
{
path
:
'/monitoring'
,
path
:
"/monitoring"
,
component
:
Layout
,
component
:
Layout
,
hidden
:
false
,
hidden
:
false
,
redirect
:
'/monitoring/video'
,
redirect
:
"/monitoring/video"
,
children
:
[
children
:
[
{
{
path
:
'video'
,
path
:
"video"
,
component
:
()
=>
import
(
'@/views/video/index'
),
component
:
()
=>
import
(
"@/views/video/index"
),
name
:
'Video'
,
name
:
"Video"
,
meta
:
{
title
:
'视频监控'
,
icon
:
'user'
}
meta
:
{
title
:
"视频监控"
,
icon
:
"user"
},
}
}
,
]
]
,
},
},
{
{
path
:
'/monitoringPlayback'
,
path
:
"/monitoringPlayback"
,
component
:
Layout
,
component
:
Layout
,
hidden
:
false
,
hidden
:
false
,
redirect
:
'monitoringPlayback/playback'
,
redirect
:
"monitoringPlayback/playback"
,
children
:
[
children
:
[
{
{
path
:
'playback'
,
path
:
"playback"
,
component
:
()
=>
import
(
'@/views/video/playback'
),
component
:
()
=>
import
(
"@/views/video/playback"
),
name
:
'Playback'
,
name
:
"Playback"
,
meta
:
{
title
:
'视频回放'
,
icon
:
'user'
}
meta
:
{
title
:
"视频回放"
,
icon
:
"user"
},
}
}
,
]
]
,
},
},
{
{
path
:
'/monitoringhistory'
,
path
:
"/monitoringhistory"
,
component
:
Layout
,
component
:
Layout
,
hidden
:
false
,
hidden
:
false
,
redirect
:
'monitoringhistory/history'
,
redirect
:
"monitoringhistory/history"
,
children
:
[
children
:
[
{
{
path
:
'history'
,
path
:
"history"
,
component
:
()
=>
import
(
'@/views/history/index'
),
component
:
()
=>
import
(
"@/views/history/index"
),
name
:
'History'
,
name
:
"History"
,
meta
:
{
title
:
'历史记录'
,
icon
:
'user'
}
meta
:
{
title
:
"历史记录"
,
icon
:
"user"
},
}
}
,
]
]
,
},
},
{
{
path
:
'/employee'
,
path
:
"/employee"
,
component
:
Layout
,
component
:
Layout
,
hidden
:
false
,
hidden
:
false
,
redirect
:
'employee'
,
redirect
:
"employee"
,
children
:
[
children
:
[
{
{
path
:
'employee'
,
path
:
"employee"
,
component
:
()
=>
import
(
'@/views/employee/index'
),
component
:
()
=>
import
(
"@/views/employee/index"
),
name
:
'employee'
,
name
:
"employee"
,
meta
:
{
title
:
'员工信息'
,
icon
:
'user'
}
meta
:
{
title
:
"员工信息"
,
icon
:
"user"
},
}
},
]
],
}
},
];
]
// 动态路由,基于用户权限动态去加载
// 动态路由,基于用户权限动态去加载
export
const
dynamicRoutes
=
[
export
const
dynamicRoutes
=
[
{
{
path
:
'/system/user-auth'
,
path
:
"/system/user-auth"
,
component
:
Layout
,
component
:
Layout
,
hidden
:
true
,
hidden
:
true
,
permissions
:
[
'system:user:edit'
],
permissions
:
[
"system:user:edit"
],
children
:
[
children
:
[
{
{
path
:
'role/:userId(
\\
d+)'
,
path
:
"role/:userId(
\\
d+)"
,
component
:
()
=>
import
(
'@/views/system/user/authRole'
),
component
:
()
=>
import
(
"@/views/system/user/authRole"
),
name
:
'AuthRole'
,
name
:
"AuthRole"
,
meta
:
{
title
:
'分配角色'
,
activeMenu
:
'/system/user'
}
meta
:
{
title
:
"分配角色"
,
activeMenu
:
"/system/user"
},
}
}
,
]
]
,
},
},
{
{
path
:
'/system/role-auth'
,
path
:
"/system/role-auth"
,
component
:
Layout
,
component
:
Layout
,
hidden
:
true
,
hidden
:
true
,
permissions
:
[
'system:role:edit'
],
permissions
:
[
"system:role:edit"
],
children
:
[
children
:
[
{
{
path
:
'user/:roleId(
\\
d+)'
,
path
:
"user/:roleId(
\\
d+)"
,
component
:
()
=>
import
(
'@/views/system/role/authUser'
),
component
:
()
=>
import
(
"@/views/system/role/authUser"
),
name
:
'AuthUser'
,
name
:
"AuthUser"
,
meta
:
{
title
:
'分配用户'
,
activeMenu
:
'/system/role'
}
meta
:
{
title
:
"分配用户"
,
activeMenu
:
"/system/role"
},
}
}
,
]
]
,
},
},
{
{
path
:
'/system/dict-data'
,
path
:
"/system/dict-data"
,
component
:
Layout
,
component
:
Layout
,
hidden
:
true
,
hidden
:
true
,
permissions
:
[
'system:dict:list'
],
permissions
:
[
"system:dict:list"
],
children
:
[
children
:
[
{
{
path
:
'index/:dictId(
\\
d+)'
,
path
:
"index/:dictId(
\\
d+)"
,
component
:
()
=>
import
(
'@/views/system/dict/data'
),
component
:
()
=>
import
(
"@/views/system/dict/data"
),
name
:
'Data'
,
name
:
"Data"
,
meta
:
{
title
:
'字典数据'
,
activeMenu
:
'/system/dict'
}
meta
:
{
title
:
"字典数据"
,
activeMenu
:
"/system/dict"
},
}
}
,
]
]
,
},
},
{
{
path
:
'/monitor/job-log'
,
path
:
"/monitor/job-log"
,
component
:
Layout
,
component
:
Layout
,
hidden
:
true
,
hidden
:
true
,
permissions
:
[
'monitor:job:list'
],
permissions
:
[
"monitor:job:list"
],
children
:
[
children
:
[
{
{
path
:
'index/:jobId(
\\
d+)'
,
path
:
"index/:jobId(
\\
d+)"
,
component
:
()
=>
import
(
'@/views/monitor/job/log'
),
component
:
()
=>
import
(
"@/views/monitor/job/log"
),
name
:
'JobLog'
,
name
:
"JobLog"
,
meta
:
{
title
:
'调度日志'
,
activeMenu
:
'/monitor/job'
}
meta
:
{
title
:
"调度日志"
,
activeMenu
:
"/monitor/job"
},
}
}
,
]
]
,
},
},
{
{
path
:
'/tool/gen-edit'
,
path
:
"/tool/gen-edit"
,
component
:
Layout
,
component
:
Layout
,
hidden
:
true
,
hidden
:
true
,
permissions
:
[
'tool:gen:edit'
],
permissions
:
[
"tool:gen:edit"
],
children
:
[
children
:
[
{
{
path
:
'index/:tableId(
\\
d+)'
,
path
:
"index/:tableId(
\\
d+)"
,
component
:
()
=>
import
(
'@/views/tool/gen/editTable'
),
component
:
()
=>
import
(
"@/views/tool/gen/editTable"
),
name
:
'GenEdit'
,
name
:
"GenEdit"
,
meta
:
{
title
:
'修改生成配置'
,
activeMenu
:
'/tool/gen'
}
meta
:
{
title
:
"修改生成配置"
,
activeMenu
:
"/tool/gen"
},
}
}
,
]
]
,
}
}
,
]
]
;
// 防止连续点击多次路由报错
// 防止连续点击多次路由报错
let
routerPush
=
Router
.
prototype
.
push
;
let
routerPush
=
Router
.
prototype
.
push
;
let
routerReplace
=
Router
.
prototype
.
replace
;
let
routerReplace
=
Router
.
prototype
.
replace
;
// push
// push
Router
.
prototype
.
push
=
function
push
(
location
)
{
Router
.
prototype
.
push
=
function
push
(
location
)
{
return
routerPush
.
call
(
this
,
location
).
catch
(
err
=>
err
)
return
routerPush
.
call
(
this
,
location
).
catch
(
(
err
)
=>
err
);
}
}
;
// replace
// replace
Router
.
prototype
.
replace
=
function
push
(
location
)
{
Router
.
prototype
.
replace
=
function
push
(
location
)
{
return
routerReplace
.
call
(
this
,
location
).
catch
(
err
=>
err
)
return
routerReplace
.
call
(
this
,
location
).
catch
(
(
err
)
=>
err
);
}
}
;
export
default
new
Router
({
export
default
new
Router
({
mode
:
'history'
,
// 去掉url中的#
mode
:
"history"
,
// 去掉url中的#
scrollBehavior
:
()
=>
({
y
:
0
}),
scrollBehavior
:
()
=>
({
y
:
0
}),
routes
:
constantRoutes
routes
:
constantRoutes
,
})
})
;
src/utils/request.js
View file @
9aa070f4
...
@@ -124,29 +124,36 @@ service.interceptors.response.use(res => {
...
@@ -124,29 +124,36 @@ service.interceptors.response.use(res => {
// 通用下载方法
// 通用下载方法
export
function
download
(
url
,
params
,
filename
,
config
)
{
export
function
download
(
url
,
params
,
filename
,
config
)
{
downloadLoadingInstance
=
Loading
.
service
({
text
:
"正在下载数据,请稍候"
,
spinner
:
"el-icon-loading"
,
background
:
"rgba(0, 0, 0, 0.7)"
,
})
downloadLoadingInstance
=
Loading
.
service
({
text
:
"正在下载数据,请稍候"
,
spinner
:
"el-icon-loading"
,
background
:
"rgba(0, 0, 0, 0.7)"
});
return
service
.
post
(
url
,
params
,
{
return
service
.
post
(
url
,
params
,
{
transformRequest
:
[(
params
)
=>
{
return
tansParams
(
params
)
}],
transformRequest
:
[
function
(
data
)
{
headers
:
{
'Content-Type'
:
'application/x-www-form-urlencoded'
},
return
JSON
.
stringify
(
data
);
// 将参数转换为 JSON 字符串
}],
headers
:
{
'Content-Type'
:
'application/json'
},
// 设置 Content-Type 为 application/json
responseType
:
'blob'
,
responseType
:
'blob'
,
...
config
...
config
}).
then
(
async
(
data
)
=>
{
}).
then
(
async
(
data
)
=>
{
const
isBlob
=
blobValidate
(
data
);
const
isBlob
=
blobValidate
(
data
);
if
(
isBlob
)
{
if
(
isBlob
)
{
const
blob
=
new
Blob
([
data
])
const
blob
=
new
Blob
([
data
])
;
saveAs
(
blob
,
filename
)
saveAs
(
blob
,
filename
)
;
}
else
{
}
else
{
const
resText
=
await
data
.
text
();
const
resText
=
await
data
.
text
();
const
rspObj
=
JSON
.
parse
(
resText
);
const
rspObj
=
JSON
.
parse
(
resText
);
const
errMsg
=
errorCode
[
rspObj
.
code
]
||
rspObj
.
msg
||
errorCode
[
'default'
]
const
errMsg
=
errorCode
[
rspObj
.
code
]
||
rspObj
.
msg
||
errorCode
[
'default'
]
;
Message
.
error
(
errMsg
);
Message
.
error
(
errMsg
);
}
}
downloadLoadingInstance
.
close
();
downloadLoadingInstance
.
close
();
}).
catch
((
r
)
=>
{
}).
catch
((
erro
r
)
=>
{
console
.
error
(
r
)
console
.
error
(
error
);
Message
.
error
(
'下载文件出现错误,请联系管理员!'
)
Message
.
error
(
'下载文件出现错误,请联系管理员!'
)
;
downloadLoadingInstance
.
close
();
downloadLoadingInstance
.
close
();
})
})
;
}
}
export
default
service
export
default
service
src/views/employee/index.vue
View file @
9aa070f4
This diff is collapsed.
Click to expand it.
src/views/history/index.vue
View file @
9aa070f4
This diff is collapsed.
Click to expand it.
vue.config.js
View file @
9aa070f4
'use strict'
"use strict"
;
const
path
=
require
(
'path'
)
const
path
=
require
(
"path"
);
function
resolve
(
dir
)
{
function
resolve
(
dir
)
{
return
path
.
join
(
__dirname
,
dir
)
return
path
.
join
(
__dirname
,
dir
)
;
}
}
const
CompressionPlugin
=
require
(
'compression-webpack-plugin'
)
const
CompressionPlugin
=
require
(
"compression-webpack-plugin"
);
const
name
=
process
.
env
.
VUE_APP_TITLE
||
'若依管理系统'
// 网页标题
const
name
=
process
.
env
.
VUE_APP_TITLE
||
"若依管理系统"
;
// 网页标题
const
port
=
process
.
env
.
port
||
process
.
env
.
npm_config_port
||
80
// 端口
const
port
=
process
.
env
.
port
||
process
.
env
.
npm_config_port
||
80
;
// 端口
// vue.config.js 配置说明
// vue.config.js 配置说明
//官方vue.config.js 参考文档 https://cli.vuejs.org/zh/config/#css-loaderoptions
//官方vue.config.js 参考文档 https://cli.vuejs.org/zh/config/#css-loaderoptions
...
@@ -20,16 +20,16 @@ module.exports = {
...
@@ -20,16 +20,16 @@ module.exports = {
// 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。
// 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。
publicPath
:
process
.
env
.
NODE_ENV
===
"production"
?
"/"
:
"/"
,
publicPath
:
process
.
env
.
NODE_ENV
===
"production"
?
"/"
:
"/"
,
// 在npm run build 或 yarn build 时 ,生成文件的目录名称(要和baseUrl的生产环境路径一致)(默认dist)
// 在npm run build 或 yarn build 时 ,生成文件的目录名称(要和baseUrl的生产环境路径一致)(默认dist)
outputDir
:
'dist'
,
outputDir
:
"dist"
,
// 用于放置生成的静态资源 (js、css、img、fonts) 的;(项目打包之后,静态资源会放在这个文件夹下)
// 用于放置生成的静态资源 (js、css、img、fonts) 的;(项目打包之后,静态资源会放在这个文件夹下)
assetsDir
:
'static'
,
assetsDir
:
"static"
,
// 是否开启eslint保存检测,有效值:ture | false | 'error'
// 是否开启eslint保存检测,有效值:ture | false | 'error'
lintOnSave
:
process
.
env
.
NODE_ENV
===
'development'
,
lintOnSave
:
process
.
env
.
NODE_ENV
===
"development"
,
// 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。
// 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。
productionSourceMap
:
false
,
productionSourceMap
:
false
,
// webpack-dev-server 相关配置
// webpack-dev-server 相关配置
devServer
:
{
devServer
:
{
host
:
'0.0.0.0'
,
host
:
"0.0.0.0"
,
port
:
port
,
port
:
port
,
open
:
true
,
open
:
true
,
proxy
:
{
proxy
:
{
...
@@ -38,93 +38,92 @@ module.exports = {
...
@@ -38,93 +38,92 @@ module.exports = {
target
:
`http://106.3.99.64:20004`
,
target
:
`http://106.3.99.64:20004`
,
changeOrigin
:
true
,
changeOrigin
:
true
,
pathRewrite
:
{
pathRewrite
:
{
[
'^'
+
process
.
env
.
VUE_APP_BASE_API
]:
''
[
"^"
+
process
.
env
.
VUE_APP_BASE_API
]:
""
,
}
}
,
}
}
,
},
},
disableHostCheck
:
true
disableHostCheck
:
true
,
},
},
css
:
{
css
:
{
loaderOptions
:
{
loaderOptions
:
{
sass
:
{
sass
:
{
sassOptions
:
{
outputStyle
:
"expanded"
}
sassOptions
:
{
outputStyle
:
"expanded"
}
,
}
}
,
}
}
,
},
},
configureWebpack
:
{
configureWebpack
:
{
name
:
name
,
name
:
name
,
resolve
:
{
resolve
:
{
alias
:
{
alias
:
{
'@'
:
resolve
(
'src'
)
"@"
:
resolve
(
"src"
),
}
}
,
},
},
plugins
:
[
plugins
:
[
// http://doc.ruoyi.vip/ruoyi-vue/other/faq.html#使用gzip解压缩静态文件
// http://doc.ruoyi.vip/ruoyi-vue/other/faq.html#使用gzip解压缩静态文件
new
CompressionPlugin
({
new
CompressionPlugin
({
cache
:
false
,
// 不启用文件缓存
cache
:
false
,
// 不启用文件缓存
test
:
/
\.(
js|css|html|jpe
?
g|png|gif|svg
)?
$/i
,
// 压缩文件格式
test
:
/
\.(
js|css|html|jpe
?
g|png|gif|svg
)?
$/i
,
// 压缩文件格式
filename
:
'[path][base].gz[query]'
,
// 压缩后的文件名
filename
:
"[path][base].gz[query]"
,
// 压缩后的文件名
algorithm
:
'gzip'
,
// 使用gzip压缩
algorithm
:
"gzip"
,
// 使用gzip压缩
minRatio
:
0.8
,
// 压缩比例,小于 80% 的文件不会被压缩
minRatio
:
0.8
,
// 压缩比例,小于 80% 的文件不会被压缩
deleteOriginalAssets
:
false
// 压缩后删除原文件
deleteOriginalAssets
:
false
,
// 压缩后删除原文件
})
})
,
],
],
},
},
chainWebpack
(
config
)
{
chainWebpack
(
config
)
{
config
.
plugins
.
delete
(
'preload'
)
// TODO: need test
config
.
plugins
.
delete
(
"preload"
);
// TODO: need test
config
.
plugins
.
delete
(
'prefetch'
)
// TODO: need test
config
.
plugins
.
delete
(
"prefetch"
);
// TODO: need test
// set svg-sprite-loader
// set svg-sprite-loader
config
.
module
.
rule
(
"svg"
).
exclude
.
add
(
resolve
(
"src/assets/icons"
)).
end
();
config
.
module
config
.
module
.
rule
(
'svg'
)
.
rule
(
"icons"
)
.
exclude
.
add
(
resolve
(
'src/assets/icons'
))
.
end
()
config
.
module
.
rule
(
'icons'
)
.
test
(
/
\.
svg$/
)
.
test
(
/
\.
svg$/
)
.
include
.
add
(
resolve
(
'src/assets/icons'
))
.
include
.
add
(
resolve
(
"src/assets/icons"
))
.
end
()
.
end
()
.
use
(
'svg-sprite-loader'
)
.
use
(
"svg-sprite-loader"
)
.
loader
(
'svg-sprite-loader'
)
.
loader
(
"svg-sprite-loader"
)
.
options
({
.
options
({
symbolId
:
'icon-[name]'
symbolId
:
"icon-[name]"
,
})
})
.
end
()
.
end
()
;
config
.
when
(
process
.
env
.
NODE_ENV
!==
'development'
,
config
=>
{
config
.
when
(
process
.
env
.
NODE_ENV
!==
"development"
,
(
config
)
=>
{
config
config
.
plugin
(
'ScriptExtHtmlWebpackPlugin'
)
.
plugin
(
"ScriptExtHtmlWebpackPlugin"
)
.
after
(
'html'
)
.
after
(
"html"
)
.
use
(
'script-ext-html-webpack-plugin'
,
[{
.
use
(
"script-ext-html-webpack-plugin"
,
[
{
// `runtime` must same as runtimeChunk name. default is `runtime`
// `runtime` must same as runtimeChunk name. default is `runtime`
inline
:
/runtime
\.
.*
\.
js$/
inline
:
/runtime
\.
.*
\.
js$/
,
}])
},
.
end
()
])
.
end
();
config
.
optimization
.
splitChunks
({
config
.
optimization
.
splitChunks
({
chunks
:
'all'
,
chunks
:
"all"
,
cacheGroups
:
{
cacheGroups
:
{
libs
:
{
libs
:
{
name
:
'chunk-libs'
,
name
:
"chunk-libs"
,
test
:
/
[\\/]
node_modules
[\\/]
/
,
test
:
/
[\\/]
node_modules
[\\/]
/
,
priority
:
10
,
priority
:
10
,
chunks
:
'initial'
// only package third parties that are initially dependent
chunks
:
"initial"
,
// only package third parties that are initially dependent
},
},
elementUI
:
{
elementUI
:
{
name
:
'chunk-elementUI'
,
// split elementUI into a single package
name
:
"chunk-elementUI"
,
// split elementUI into a single package
test
:
/
[\\/]
node_modules
[\\/]
_
?
element-ui
(
.*
)
/
,
// in order to adapt to cnpm
test
:
/
[\\/]
node_modules
[\\/]
_
?
element-ui
(
.*
)
/
,
// in order to adapt to cnpm
priority
:
20
// the weight needs to be larger than libs and app or it will be packaged into libs or app
priority
:
20
,
// the weight needs to be larger than libs and app or it will be packaged into libs or app
},
},
commons
:
{
commons
:
{
name
:
'chunk-commons'
,
name
:
"chunk-commons"
,
test
:
resolve
(
'src/components'
),
// can customize your rules
test
:
resolve
(
"src/components"
),
// can customize your rules
minChunks
:
3
,
// minimum common number
minChunks
:
3
,
// minimum common number
priority
:
5
,
priority
:
5
,
reuseExistingChunk
:
true
reuseExistingChunk
:
true
,
}
},
}
},
})
});
config
.
optimization
.
runtimeChunk
(
'single'
)
config
.
optimization
.
runtimeChunk
(
"single"
);
})
})
;
}
}
,
}
}
;
Write
Preview
Markdown
is supported
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