@@ -35,7 +35,10 @@ const webpackConfig = merge(baseWebpackConfig, { | |||
new UglifyJsPlugin({ | |||
uglifyOptions: { | |||
compress: { | |||
warnings: false | |||
warnings: false, | |||
// =====以下是新增的===== | |||
drop_console: true, // 删除页面中的 console.log | |||
pure_funcs: ['console.log'] | |||
} | |||
}, | |||
sourceMap: config.build.productionSourceMap, | |||
@@ -52,11 +55,11 @@ const webpackConfig = merge(baseWebpackConfig, { | |||
}), | |||
// 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 } | |||
}), | |||
// new OptimizeCSSPlugin({ | |||
// cssProcessorOptions: config.build.productionSourceMap | |||
// ? { safe: true, map: { inline: false } } | |||
// : { safe: true } | |||
// }), | |||
// generate dist index.html with correct asset hash for caching. | |||
// you can customize output by editing /index.html | |||
// see https://github.com/ampedandwired/html-webpack-plugin |
@@ -60,7 +60,7 @@ module.exports = { | |||
* Source Maps | |||
*/ | |||
productionSourceMap: true, | |||
productionSourceMap: false, | |||
// https://webpack.js.org/configuration/devtool/#production | |||
devtool: '#source-map', | |||
@@ -68,7 +68,7 @@ module.exports = { | |||
// Surge or Netlify already gzip all static assets for you. | |||
// Before setting to `true`, make sure to: | |||
// npm install --save-dev compression-webpack-plugin | |||
productionGzip: false, | |||
productionGzip: true, | |||
productionGzipExtensions: ['js', 'css'], | |||
// Run the build command with an extra argument to |
@@ -11,13 +11,13 @@ | |||
}, | |||
"dependencies": { | |||
"@antv/g2": "^3.5.11", | |||
"compression-webpack-plugin": "1.1.12", | |||
"element-ui": "^2.13.0", | |||
"vue": "^2.5.2", | |||
"vue-router": "^3.0.1", | |||
"vuex": "^3.1.2" | |||
}, | |||
"devDependencies": { | |||
"vue2-editor": "^2.10.2", | |||
"autoprefixer": "^7.1.2", | |||
"axios": "^0.19.0", | |||
"babel-core": "^6.22.1", | |||
@@ -66,6 +66,7 @@ | |||
"vue-template-compiler": "^2.5.2", | |||
"vue-video-player": "^5.0.2", | |||
"vue-wechat-title": "^2.0.5", | |||
"vue2-editor": "^2.10.2", | |||
"webpack": "^3.6.0", | |||
"webpack-bundle-analyzer": "^2.9.0", | |||
"webpack-dev-server": "^2.9.1", |
@@ -0,0 +1,23 @@ | |||
import axios from '../api' | |||
export default { | |||
getAllList(params) { | |||
return axios({ | |||
method: "GET", | |||
url: '/api/front/app/list', | |||
params:{ | |||
...params | |||
} | |||
}) | |||
}, | |||
getPoints(id) { | |||
return axios({ | |||
method: "GET", | |||
url: '/api/front/app/getPoints/'+id | |||
}) | |||
} | |||
} | |||
@@ -6,7 +6,7 @@ | |||
:disabled="disabled" | |||
size="small" | |||
placeholder="" | |||
:props="{ checkStrictly: true,value:'id', | |||
:props="{ value:'id', | |||
label:'name' ,emitPath:false}" | |||
clearable></el-cascader> | |||
</template> |
@@ -71,7 +71,6 @@ | |||
this.boxHeight = document.body.clientHeight - 240 | |||
}, | |||
mounted() { | |||
console.log(this.documentList) | |||
}, | |||
methods: { | |||
mainClick() { |
@@ -357,7 +357,6 @@ | |||
direction: 'right' //设置文本标注方位 | |||
}); | |||
marker.setMap(this.map); | |||
console.log(center) | |||
if(center){ | |||
me.map.setZoomAndCenter(10,point) | |||
} |
@@ -1,10 +1,11 @@ | |||
<template> | |||
<div class="index-map" id="indexMap"></div> | |||
<div class="index-map" id="indexMap"></div> | |||
</template> | |||
<script> | |||
import AMap from "AMap"; | |||
import inspectApi from '@/api/business/inspect' | |||
import appApi from '@/api/app/list' | |||
export default { | |||
name: "trajectory-dialog", | |||
@@ -14,6 +15,12 @@ | |||
} | |||
}, | |||
props: { | |||
isApp:{ | |||
type:Boolean, | |||
default(){ | |||
return false | |||
} | |||
}, | |||
driverId: { | |||
type: Number, | |||
default() { | |||
@@ -30,7 +37,11 @@ | |||
}); | |||
let me = this | |||
this.map.on("complete", function() { | |||
me.point() | |||
if(me.isApp){ | |||
me.appPoint() | |||
}else{ | |||
me.point() | |||
} | |||
}); | |||
}, | |||
methods: { | |||
@@ -85,6 +96,35 @@ | |||
marker.moveAlong(pathList, 6000); | |||
this.map.setCenter(point) | |||
}, | |||
appPoint(){ | |||
appApi.getPoints(this.driverId).then(res => { | |||
let me = this | |||
let polygons = null; | |||
var bounds = res.data.pointList; | |||
if (bounds && bounds.length > 0) { | |||
let path = [] | |||
for (let i = 0, l = bounds.length; i < l; i++) { | |||
path.push( | |||
new AMap.LngLat(bounds[i].x, bounds[i].y) | |||
) | |||
} | |||
polygons = new AMap.Polygon({ | |||
zIndex: 11, | |||
path: path, | |||
strokeColor: "#09EBE0", //线颜色 | |||
strokeOpacity: 1, //线透明度 | |||
strokeWeight: 1, //线宽 | |||
strokeStyle: "solid", //线样式 | |||
strokeDasharray: [10, 5], //补充线样式 | |||
fillColor: "#17ABA3", | |||
fillOpacity: 1 | |||
}); | |||
this.map.add(polygons) | |||
this.initRouters(path,bounds) | |||
} | |||
}).catch(e => { | |||
}) | |||
}, | |||
point(){ | |||
inspectApi.point(this.driverId).then(res => { | |||
let me = this |
@@ -36,29 +36,6 @@ const routes = [ | |||
meta: { | |||
'title': '无权限' | |||
} | |||
}, | |||
{ | |||
path: '/menu', | |||
name: 'menu', | |||
component: (resolve) => require(['@/views/permission/authrule'], resolve), | |||
meta: { | |||
'title': '菜单管理' | |||
} | |||
} | |||
] | |||
}, | |||
{ | |||
path: '/permission', | |||
name: 'permission', | |||
component: Main, | |||
children: [ | |||
{ | |||
path: '/authrule', | |||
name: 'authrule', | |||
component: (resolve) => require(['@/views/permission/authrule'], resolve), | |||
meta: { | |||
'title': '菜单管理' | |||
} | |||
} | |||
] | |||
}, | |||
@@ -142,7 +119,6 @@ router.beforeEach(async (to, from, next) => { | |||
btnRule[item.permission]=true | |||
}) | |||
store.dispatch('user/setTtnRule', btnRule) | |||
console.log(btnRule) | |||
addDynamicMenuAndRoutes(to, from) | |||
next(to.path) | |||
} |
@@ -0,0 +1,223 @@ | |||
<template> | |||
<div class="app-list"> | |||
<el-form :inline="true" :model="searchParam" class="demo-form-inline"> | |||
<el-form-item label="区划"> | |||
<driverAreaSelect v-model="searchParam.area"></driverAreaSelect> | |||
</el-form-item> | |||
<el-form-item label="河湖名称"> | |||
<el-input | |||
clearable | |||
v-model="searchParam.driverName" | |||
size="small" | |||
placeholder="请输入河湖名称" | |||
style="width: 150px" | |||
/> | |||
</el-form-item> | |||
<el-form-item label="日期"> | |||
<el-date-picker | |||
style="width: 220px" | |||
placeholder="日期" | |||
clearable | |||
size="small" | |||
value-format="yyyy-MM-dd" | |||
v-model="searchParam.time" | |||
type="daterange" | |||
range-separator="至" | |||
start-placeholder="开始日期" | |||
end-placeholder="结束日期" | |||
></el-date-picker> | |||
</el-form-item> | |||
<el-form-item> | |||
<el-button | |||
:loading="tableLoading" | |||
icon="el-icon-search" | |||
@click="search" | |||
size="small" | |||
type="primary" | |||
>搜索 | |||
</el-button> | |||
<el-button | |||
icon="el-icon-refresh-right" | |||
@click="initSearchParam();search()" | |||
type="primary" | |||
size="small" | |||
style="background-color: #fff; border: 1px solid #ccc ; color: #666" | |||
>清空 | |||
</el-button> | |||
</el-form-item> | |||
</el-form> | |||
<el-table | |||
stripe | |||
ref="table" | |||
:height="tableHeight" | |||
v-loading="tableLoading" | |||
:data="dataList" | |||
border | |||
size="medium" | |||
row-key="id" | |||
> | |||
<el-table-column :index="indexMethod" label="序号" type="index" width="80" align="center"/> | |||
<el-table-column width="120" show-overflow-tooltip prop="inspectNo" label="任务单号" align="center"> | |||
<template slot-scope="scoped"> | |||
<!-- <a v-if="btnRule.usernotice_add" href="javascript:void(0);" @click="detailNo(scoped.row)">{{scoped.row.inspectNo}}</a>--> | |||
<span>{{scoped.row.inspectNo}}</span> | |||
</template> | |||
</el-table-column> | |||
<el-table-column width="60" show-overflow-tooltip prop="num" label="行号" align="center"/> | |||
<el-table-column show-overflow-tooltip prop="driverName" label="河湖名称" align="center"/> | |||
<el-table-column show-overflow-tooltip prop="areaName" label="区划" align="center"/> | |||
<el-table-column show-overflow-tooltip prop="beginTime" label="巡检日期" min-width="120" align="center"> | |||
</el-table-column> | |||
<el-table-column width="80" v-if="btnRule.front_app_getPoints" show-overflow-tooltip | |||
prop="driverLength" label="巡检轨迹" align="center"> | |||
<template slot-scope="{row}"> | |||
<el-button type="primary" size="mini" | |||
@click="pointClick(row)">查看 | |||
</el-button> | |||
</template> | |||
</el-table-column> | |||
<el-table-column width="80" show-overflow-tooltip prop="createUserName" label="巡查人" align="center"/> | |||
<el-table-column width="160" show-overflow-tooltip prop="beginTime" label="巡查时间" align="center"/> | |||
<el-table-column width="60" show-overflow-tooltip prop="" | |||
label="报告" align="center"> | |||
<!-- <template slot-scope="{row}">--> | |||
<!-- <el-tooltip v-if="row.reportId" class="item" effect="dark" content="查看报告" placement="bottom">--> | |||
<!-- <el-button @click="getDetail(row.reportId)" type="primary" size="mini" icon="el-icon-document"/>--> | |||
<!-- </el-tooltip>--> | |||
<!-- </template>--> | |||
</el-table-column> | |||
<el-table-column width="80" show-overflow-tooltip prop="" | |||
label="图像资料" align="center"> | |||
<!-- <template slot-scope="{row}">--> | |||
<!-- <el-tooltip v-if="row.status==4" class="item" effect="dark" content="查看图像" placement="bottom">--> | |||
<!-- <el-button @click="setMark(row)" type="primary" size="mini" icon="el-icon-picture"/>--> | |||
<!-- </el-tooltip>--> | |||
<!-- </template>--> | |||
</el-table-column> | |||
</el-table> | |||
<div class="page-current"> | |||
<el-pagination | |||
:current-page="currentPage" | |||
:page-size="pageSize" | |||
prev-text="上一页" | |||
next-text="下一页" | |||
background | |||
layout="total, prev, pager, next, jumper" | |||
style="display: inline-block;" | |||
:total="count" | |||
@current-change="handleCurrentChange" | |||
/> | |||
</div> | |||
<el-drawer | |||
title="巡航轨迹" | |||
:visible.sync="trajectoryVisible" | |||
:direction="direction" | |||
:size="drawerWidth" | |||
:before-close="handleRrajectoryClose"> | |||
<trajectory-dialog :isApp="true" :driverId="driverId" v-if="trajectoryVisible"></trajectory-dialog> | |||
</el-drawer> | |||
</div> | |||
</template> | |||
<script> | |||
import api from "@/api/app/list"; | |||
import driverAreaSelect from "@/components/driverAreaSelect"; | |||
import {mapGetters} from "vuex"; | |||
import trajectoryDialog from '@/components/trajectoryDialog' | |||
export default { | |||
name: "app-list", | |||
data() { | |||
return { | |||
trajectoryVisible:false, | |||
visible: false, | |||
dataList: [], | |||
currentPage: 1, | |||
count: 0, | |||
driverId:'', | |||
pageSize: parseInt((document.body.clientHeight - 250 - 43) / 43), | |||
tableHeight: document.body.clientHeight - 250, | |||
drawerWidth: (document.body.clientWidth - 190) + 'px', | |||
direction: 'rtl', | |||
tableLoading: false, | |||
searchParam: { | |||
area: "", | |||
driverName: "", | |||
time: "" | |||
} | |||
}; | |||
}, | |||
computed: { | |||
...mapGetters(["btnRule"]) | |||
}, | |||
components: {driverAreaSelect,trajectoryDialog}, | |||
created() { | |||
}, | |||
mounted() { | |||
this.tableLoading = true; | |||
this.getAllList(); | |||
}, | |||
methods: { | |||
handleRrajectoryClose(){ | |||
this.trajectoryVisible=false | |||
}, | |||
pointClick(row) { | |||
this.driverId=row.id | |||
this.trajectoryVisible=true | |||
}, | |||
indexMethod(index) { | |||
return index + 1 + (this.currentPage - 1) * this.pageSize; | |||
}, | |||
initSearchParam() { | |||
this.searchParam = { | |||
area: "", | |||
driverName: "", | |||
time: "" | |||
}; | |||
}, | |||
search() { | |||
this.currentPage = 1; | |||
this.tableLoading = true; | |||
this.$refs.table.bodyWrapper.scrollTop = 0; | |||
this.getAllList(); | |||
}, | |||
handleCurrentChange(val) { | |||
this.tableLoading = true; | |||
this.currentPage = val; | |||
this.$refs.table.bodyWrapper.scrollTop = 0; | |||
this.getAllList(); | |||
}, | |||
getAllList() { | |||
let searchParam = JSON.parse(JSON.stringify(this.searchParam)); | |||
if (searchParam.time && searchParam.time.length > 0) { | |||
searchParam.beginTime = searchParam.time[0] | |||
searchParam.endTime = searchParam.time[1] | |||
} else { | |||
searchParam.beginTime = '' | |||
searchParam.endTime = '' | |||
} | |||
searchParam.page = this.currentPage; | |||
searchParam.pageSize = this.pageSize; | |||
api.getAllList(searchParam).then(res => { | |||
this.dataList = res.data.records ? res.data.records : []; | |||
this.count = res.data.total; | |||
this.tableLoading = false; | |||
}).catch(e => { | |||
this.dataList = []; | |||
this.tableLoading = false; | |||
}); | |||
} | |||
} | |||
}; | |||
</script> | |||
<style lang="less"> | |||
.app-list { | |||
height: fit-content; | |||
background-color: #fff; | |||
box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), 0 0 6px 0 rgba(0, 0, 0, 0.04); | |||
padding: 15px; | |||
} | |||
</style> |
@@ -373,7 +373,6 @@ | |||
searchParam.page = this.currentPage | |||
searchParam.pageSize = this.pageSize | |||
inspectApi.getInspectDriverList(searchParam).then(res => { | |||
console.log(res.data) | |||
this.dataList = res.data.records ? res.data.records : [] | |||
this.count = res.data.total | |||
this.tableLoading = false |
@@ -67,7 +67,6 @@ | |||
}, | |||
watch:{ | |||
askChild(){ | |||
console.log(this.askChild) | |||
} | |||
}, | |||
components:{dVideo}, |
@@ -102,7 +102,6 @@ | |||
count += item.questionNum | |||
}) | |||
this.count = count | |||
console.log(inspectQuestionCategoryList) | |||
} | |||
} | |||
}, |
@@ -123,9 +123,7 @@ | |||
let ruleForm=JSON.parse(JSON.stringify(this.ruleForm)) | |||
ruleForm.driverArea = '' | |||
ruleForm.driverId = this.driverId | |||
console.log(this.driverDataList.find(item=>item.id== ruleForm.driverId)) | |||
this.ruleForm=Object.assign({},ruleForm) | |||
console.log(this.ruleForm) | |||
this.search() | |||
}, | |||
driverArea(){ | |||
@@ -203,7 +201,6 @@ | |||
delete ruleForm.date | |||
api.getQuestionList(ruleForm).then(res => { | |||
this.dataList=res.data?res.data:[] | |||
console.log(this.dataList) | |||
me.$emit('problemSearch', this.dataList,this.ruleForm.driverArea,this.ruleForm.driverId) | |||
me.searchLoading = false | |||
}).catch(e => { |
@@ -257,7 +257,6 @@ | |||
driverIdList: [] | |||
} | |||
this.time = this.defaTime | |||
console.log(this.ruleForm) | |||
this.$emit('qualityClear') | |||
if (this.activeType == 1) { | |||
this.searchOne() |
@@ -0,0 +1,56 @@ | |||
<template> | |||
<el-submenu v-if="menuList.filter(item=>item.pid==menu.id).length>0" :key="menu.id" :index="path"> | |||
<template slot="title"> | |||
<svg-icon v-if="menu.icon" :iconClass='menu.icon' className='icon'></svg-icon> | |||
<span>{{menu.title}}</span> | |||
</template> | |||
<filter-menus :menuList="menuList" :key="index" v-for="(child,index) in menuList.filter(item=>item.pid==menu.id)" :menu="child" :path="path+child.name"></filter-menus> | |||
</el-submenu> | |||
<el-menu-item v-else :key="menu.id" :index="path"> | |||
<template slot="title"> | |||
<svg-icon v-if="menu.icon" :iconClass='menu.icon' className='icon'></svg-icon> | |||
<span>{{menu.title}}</span> | |||
</template> | |||
</el-menu-item> | |||
</template> | |||
<script> | |||
export default { | |||
name: "filterMenus", | |||
props: { | |||
path: { | |||
type:String, | |||
default() { | |||
return ''; | |||
} | |||
}, | |||
menu: { | |||
type:Object, | |||
default() { | |||
return {}; | |||
} | |||
}, | |||
menuList:{ | |||
type:Array, | |||
default() { | |||
return []; | |||
} | |||
}, | |||
}, | |||
data() { | |||
return { | |||
} | |||
}, | |||
computed: { | |||
// 是否还有子列表需要渲染,作为v-if的判断条件 | |||
isFolder() { | |||
return this.menu.childTree && this.menu.childTree.length | |||
} | |||
}, | |||
methods: {} | |||
} | |||
</script> | |||
<style scoped> | |||
</style> |
@@ -19,22 +19,9 @@ | |||
<svg-icon iconClass='home' className='icon'></svg-icon> | |||
<span>首页</span></el-menu-item> | |||
</el-tooltip> | |||
<el-menu-item @click="command"> | |||
<svg-icon iconClass='eye-open' className='icon'></svg-icon> | |||
<span>指挥大屏</span> | |||
</el-menu-item> | |||
<el-submenu :key="index" v-for="(item,index) in filterMenuList" :index="item.name"> | |||
<template slot="title"> | |||
<svg-icon :iconClass='item.icon' className='icon'></svg-icon> | |||
<span>{{item.title}}</span> | |||
</template> | |||
<el-menu-item v-if="item.children" :key="index" v-for="(child,index) in item.children" :index="child.name"> | |||
<template slot="title"> | |||
<svg-icon v-if="child.icon" :iconClass='child.icon' className='icon'></svg-icon> | |||
<span>{{child.title}}</span> | |||
</template> | |||
</el-menu-item> | |||
</el-submenu> | |||
<filterMenu :menuList="filterMenuList" :key="index" | |||
v-for="(menu,index) in filterMenuList.filter(item=>item.pid==0)" :menu="menu" :path="menu.name"> | |||
</filterMenu> | |||
</el-menu> | |||
<div class="box-right"> | |||
<div class="box-right-head"> | |||
@@ -120,6 +107,7 @@ | |||
<script> | |||
import store from '../../vuex' | |||
import filterMenu from './filterMenu' | |||
import userApi from '@/api/user/user' | |||
export default { | |||
@@ -202,7 +190,7 @@ | |||
} | |||
}, | |||
watch: {}, | |||
components: {}, | |||
components: {filterMenu}, | |||
methods: { | |||
command(){ | |||
window.open('/command') | |||
@@ -340,32 +328,14 @@ | |||
let filterMenuList = [] | |||
let roles = JSON.parse(JSON.stringify(store.state.user.roles)) | |||
if (roles.length > 0) { | |||
let rootMenu = roles.filter(item => item.pid === 0 && item.type == 2 && item.status == 1) | |||
let rootMenu = roles.filter(item =>item.type == 2 && item.status == 1) | |||
rootMenu.sort(function (a, b) { | |||
return a.sort - b.sort | |||
}) | |||
if (rootMenu.length > 0) { | |||
rootMenu.map(item => { | |||
let child = item | |||
this.childMenu(item, roles, child, item.name) | |||
filterMenuList.push(child) | |||
}) | |||
} | |||
filterMenuList=Object.assign([],rootMenu) | |||
} | |||
this.filterMenuList = filterMenuList | |||
}, | |||
childMenu(item, roles, child, name) { | |||
let list = roles.filter(role => role.pid === item.id && role.type == 2 && role.status == 1) | |||
if (list.length > 0) { | |||
list.sort(function (a, b) { | |||
return a.sort - b.sort | |||
}) | |||
child.children = list | |||
child.children.map(cc => { | |||
cc.name = name + cc.name | |||
}) | |||
} | |||
}, | |||
} | |||
} | |||
</script> |
@@ -50,7 +50,6 @@ export default { | |||
} | |||
total+=obj.value | |||
}); | |||
console.log(total) | |||
// 自定义 other 的图形,增加两条线 | |||
G2.Shape.registerShape("interval", "sliceShape", { | |||
draw(cfg, container) { |
@@ -275,7 +275,6 @@ | |||
} | |||
} | |||
this.questionDriverList = questionDriverList ? questionDriverList.reverse() : [] | |||
console.log(questionDriverList) | |||
}).catch(e => { | |||
this.inspectQuestionInfo = {} | |||
this.questionDriverAreaList = [] |
@@ -258,7 +258,6 @@ | |||
}; | |||
}, | |||
created() { | |||
console.log(this.roles) | |||
}, | |||
mounted() { | |||
this.getDetail(); |
@@ -205,7 +205,6 @@ | |||
data.driverArea=[] | |||
} | |||
this.infoForm = Object.assign({},data) | |||
console.log(this.infoForm) | |||
this.tableLoading=false | |||
this.addDialogVisible = true | |||
}).catch(e => { | |||
@@ -319,7 +318,6 @@ | |||
}, | |||
// 关闭窗体 | |||
closeWin() { | |||
console.log("关闭") | |||
// 调用初始化表单方法 | |||
this.initRuleForm() | |||
// 设置弹窗不可见 |
@@ -101,7 +101,6 @@ | |||
this.agencyList = data | |||
this.filterAgencyList=data | |||
this.tableLoading = false | |||
console.log(this.agencyList) | |||
}).catch(e => { | |||
this.agencyList = [] | |||
this.filterAgencyList=[] | |||
@@ -173,7 +172,6 @@ | |||
}, | |||
// 关闭窗体 | |||
closeWin() { | |||
console.log("关闭") | |||
// 调用初始化表单方法 | |||
this.initInfoForm() | |||
// 设置弹窗不可见 |
@@ -147,12 +147,10 @@ export default { | |||
api | |||
.getDetail(this.id) | |||
.then(res => { | |||
console.log(res.data.status) | |||
if (res.data.status == 3) { | |||
res.data.status = 4; | |||
} | |||
this.childData = res.data; | |||
console.log(this.childData) | |||
this.initMap(); | |||
}) | |||
.catch(err => { |
@@ -1225,7 +1225,7 @@ bytes@3.1.0: | |||
version "3.1.0" | |||
resolved "https://registry.npm.taobao.org/bytes/download/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" | |||
cacache@^10.0.4: | |||
cacache@^10.0.1, cacache@^10.0.4: | |||
version "10.0.4" | |||
resolved "https://registry.npm.taobao.org/cacache/download/cacache-10.0.4.tgz#6452367999eff9d4188aefd9a14e9d7c6a263460" | |||
dependencies: | |||
@@ -1579,6 +1579,16 @@ compressible@~2.0.16: | |||
dependencies: | |||
mime-db ">= 1.43.0 < 2" | |||
compression-webpack-plugin@1.1.12: | |||
version "1.1.12" | |||
resolved "https://registry.npm.taobao.org/compression-webpack-plugin/download/compression-webpack-plugin-1.1.12.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcompression-webpack-plugin%2Fdownload%2Fcompression-webpack-plugin-1.1.12.tgz#becd2aec620ace96bb3fe9a42a55cf48acc8b4d4" | |||
dependencies: | |||
cacache "^10.0.1" | |||
find-cache-dir "^1.0.0" | |||
neo-async "^2.5.0" | |||
serialize-javascript "^1.4.0" | |||
webpack-sources "^1.0.1" | |||
compression@^1.7.3: | |||
version "1.7.4" | |||
resolved "https://registry.npm.taobao.org/compression/download/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" |