Browse Source

整理

master
huxinglu 4 years ago
parent
commit
38fe1568cb
24 changed files with 376 additions and 92 deletions
  1. +9
    -6
      build/webpack.prod.conf.js
  2. +2
    -2
      config/index.js
  3. +2
    -1
      package.json
  4. +23
    -0
      src/api/app/list.js
  5. +1
    -1
      src/components/driverAreaSelect.vue
  6. +0
    -1
      src/components/imageList.vue
  7. +0
    -1
      src/components/report.vue
  8. +42
    -2
      src/components/trajectoryDialog.vue
  9. +0
    -24
      src/router/index.js
  10. +223
    -0
      src/views/app/list/index.vue
  11. +0
    -1
      src/views/business/inspectDriver/table.vue
  12. +0
    -1
      src/views/command/ask/hpDetailWin.vue
  13. +0
    -1
      src/views/command/date/dateRight.vue
  14. +0
    -3
      src/views/command/problem/problemLeft.vue
  15. +0
    -1
      src/views/command/quality/qualityLeft.vue
  16. +56
    -0
      src/views/index/filterMenu.vue
  17. +7
    -37
      src/views/index/index.vue
  18. +0
    -1
      src/views/main/cake.vue
  19. +0
    -1
      src/views/main/index.vue
  20. +0
    -1
      src/views/main/main.vue
  21. +0
    -2
      src/views/permission/authgroup/index.vue
  22. +0
    -2
      src/views/permission/dep/index.vue
  23. +0
    -2
      src/views/problem/detailDialog.vue
  24. +11
    -1
      yarn.lock

+ 9
- 6
build/webpack.prod.conf.js View File

@@ -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

+ 2
- 2
config/index.js View File

@@ -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

+ 2
- 1
package.json View File

@@ -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",

+ 23
- 0
src/api/app/list.js View File

@@ -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
})
}

}



+ 1
- 1
src/components/driverAreaSelect.vue View File

@@ -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>

+ 0
- 1
src/components/imageList.vue View File

@@ -71,7 +71,6 @@
this.boxHeight = document.body.clientHeight - 240
},
mounted() {
console.log(this.documentList)
},
methods: {
mainClick() {

+ 0
- 1
src/components/report.vue View File

@@ -357,7 +357,6 @@
direction: 'right' //设置文本标注方位
});
marker.setMap(this.map);
console.log(center)
if(center){
me.map.setZoomAndCenter(10,point)
}

+ 42
- 2
src/components/trajectoryDialog.vue View File

@@ -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

+ 0
- 24
src/router/index.js View File

@@ -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)
}

+ 223
- 0
src/views/app/list/index.vue View File

@@ -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>

+ 0
- 1
src/views/business/inspectDriver/table.vue View File

@@ -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

+ 0
- 1
src/views/command/ask/hpDetailWin.vue View File

@@ -67,7 +67,6 @@
},
watch:{
askChild(){
console.log(this.askChild)
}
},
components:{dVideo},

+ 0
- 1
src/views/command/date/dateRight.vue View File

@@ -102,7 +102,6 @@
count += item.questionNum
})
this.count = count
console.log(inspectQuestionCategoryList)
}
}
},

+ 0
- 3
src/views/command/problem/problemLeft.vue View File

@@ -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 => {

+ 0
- 1
src/views/command/quality/qualityLeft.vue View File

@@ -257,7 +257,6 @@
driverIdList: []
}
this.time = this.defaTime
console.log(this.ruleForm)
this.$emit('qualityClear')
if (this.activeType == 1) {
this.searchOne()

+ 56
- 0
src/views/index/filterMenu.vue View File

@@ -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>

+ 7
- 37
src/views/index/index.vue View File

@@ -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>

+ 0
- 1
src/views/main/cake.vue View File

@@ -50,7 +50,6 @@ export default {
}
total+=obj.value
});
console.log(total)
// 自定义 other 的图形,增加两条线
G2.Shape.registerShape("interval", "sliceShape", {
draw(cfg, container) {

+ 0
- 1
src/views/main/index.vue View File

@@ -275,7 +275,6 @@
}
}
this.questionDriverList = questionDriverList ? questionDriverList.reverse() : []
console.log(questionDriverList)
}).catch(e => {
this.inspectQuestionInfo = {}
this.questionDriverAreaList = []

+ 0
- 1
src/views/main/main.vue View File

@@ -258,7 +258,6 @@
};
},
created() {
console.log(this.roles)
},
mounted() {
this.getDetail();

+ 0
- 2
src/views/permission/authgroup/index.vue View File

@@ -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()
// 设置弹窗不可见

+ 0
- 2
src/views/permission/dep/index.vue View File

@@ -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()
// 设置弹窗不可见

+ 0
- 2
src/views/problem/detailDialog.vue View File

@@ -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 => {

+ 11
- 1
yarn.lock View File

@@ -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"

Loading…
Cancel
Save