Compare commits

...

13 Commits

Author SHA1 Message Date
ffr 5711e52290 上线车辆 2024-04-05 09:51:54 +08:00
lijiayao 4847aee9ab fix: bug修改 2024-04-04 09:45:03 +08:00
lijiayao 60a872185b Merge remote-tracking branch 'origin/server_ui_fufanrui' into server_ui_xiaoyao 2024-04-02 17:04:41 +08:00
lijiayao 6bcfdfe8d5 feat: 电子围栏编辑 2024-04-02 17:04:27 +08:00
lijiayao 66c4e7ba29 Merge remote-tracking branch 'origin/server_ui_liuyunhu' into server_ui_xiaoyao 2024-04-01 19:52:23 +08:00
lijiayao c1dee2a715 Merge remote-tracking branch 'origin/server_ui_dongxiaodong' into server_ui_xiaoyao 2024-04-01 19:52:16 +08:00
lijiayao c2b04672ad feat: 电子围栏编辑 2024-04-01 19:51:11 +08:00
dongxiaodong c301a0d82b 完善代码 2024-03-31 22:29:33 +08:00
liuyunhu 00eb65d366 车辆管理完成功能 2024-03-31 22:13:49 +08:00
liuyunhu 25c8d16954 车辆管理模块 2024-03-31 15:56:17 +08:00
dongxiaodong fb9bd6f533 Merge branch 'server_five_ui' into server_ui_dongxiaodong 2024-03-31 15:07:18 +08:00
dongxiaodong 9ff5e6e6f5 Merge branch 'server_ui_xiaoyao' into server_ui_dongxiaodong 2024-03-31 14:46:13 +08:00
dongxiaodong bbe9cb3de2 dxd_3/31 2024-03-31 14:41:48 +08:00
19 changed files with 1028 additions and 179 deletions

View File

@ -1,5 +1,5 @@
# 页面标题 # 页面标题
VUE_APP_TITLE = 车联管理系统 VUE_APP_TITLE = 智能车联管理系统
# 开发环境配置 # 开发环境配置
ENV = 'development' ENV = 'development'

View File

@ -1,8 +1,8 @@
{ {
"name": "muyu", "name": "muyu",
"version": "3.6.3", "version": "3.6.3",
"description": "车联管理系统", "description": "智能车联管理系统",
"author": "车联", "author": "智能车联",
"license": "MIT", "license": "MIT",
"scripts": { "scripts": {
"dev": "vue-cli-service serve", "dev": "vue-cli-service serve",

View File

@ -0,0 +1,8 @@
import request from "@/utils/request";
export function detectionList() {
return request({
url: '/business/detection/detectionList',
method: 'post',
})
}

View File

@ -2,7 +2,7 @@ import request from "@/utils/request";
export function listEmployes(query) { export function listEmployes(query) {
return request({ return request({
url: '/coupletEnterprisemanagement/employee/employeeList', url: '/business/employee/employeeList',
method: 'post', method: 'post',
data: query data: query
}) })

View File

@ -3,7 +3,7 @@ import request from '@/utils/request'
// 查询电子围栏列表 // 查询电子围栏列表
export function fenceList(data) { export function fenceList(data) {
return request({ return request({
url: '/couplet/fence/fenceList', url: '/business/fence/fenceList',
method: 'post', method: 'post',
data data
}) })
@ -14,7 +14,7 @@ export function fenceList(data) {
*/ */
export function fenceAdd(data) { export function fenceAdd(data) {
return request({ return request({
url: '/couplet/fence/fenceAdd', url: '/business/fence/fenceAdd',
method: 'post', method: 'post',
data data
}) })
@ -24,7 +24,7 @@ export function fenceAdd(data) {
*/ */
export function fenceUpdate(data) { export function fenceUpdate(data) {
return request({ return request({
url: '/couplet/fence/fenceUpdate', url: '/business/fence/fenceUpdate',
method: 'post', method: 'post',
data data
}) })
@ -37,7 +37,7 @@ export function fenceUpdate(data) {
*/ */
export function fenceDelete(data) { export function fenceDelete(data) {
return request({ return request({
url: '/couplet/fence/'+data, url: '/business/fence/'+data,
method: 'delete' method: 'delete'
}) })
} }
@ -48,7 +48,7 @@ export function fenceDelete(data) {
*/ */
export function changeFenceStatus(data) { export function changeFenceStatus(data) {
return request({ return request({
url: '/couplet/fence/fenceState/', url: '/business/fence/fenceState',
method: 'post', method: 'post',
data data
}) })
@ -60,7 +60,7 @@ export function changeFenceStatus(data) {
*/ */
export function queryByLogo() { export function queryByLogo() {
return request({ return request({
url: '/couplet/logo/queryByLogo', url: '/business/logo/queryByLogo',
method: 'post' method: 'post'
}) })
} }

View File

@ -3,7 +3,7 @@ import request from '@/utils/request'
// 查询部门列表 // 查询部门列表
export function listManage(query) { export function listManage(query) {
return request({ return request({
url: '/coupletEnterprisemanagement/manage/manageList', url: '/business/manage/manageList',
method: 'POST', method: 'POST',
params: query params: query
}) })
@ -12,7 +12,7 @@ export function listManage(query) {
// 查询部门列表(排除节点) // 查询部门列表(排除节点)
export function listManageExcludeChild(deptId) { export function listManageExcludeChild(deptId) {
return request({ return request({
url: '/coupletEnterprisemanagement/manage/list/exclude/' + deptId, url: '/business/manage/list/exclude/' + deptId,
method: 'get' method: 'get'
}) })
} }
@ -20,7 +20,7 @@ export function listManageExcludeChild(deptId) {
// 查询部门详细 // 查询部门详细
export function getManage(deptId) { export function getManage(deptId) {
return request({ return request({
url: '/coupletEnterprisemanagement/manage/' + deptId, url: '/business/manage/' + deptId,
method: 'get' method: 'get'
}) })
} }
@ -28,7 +28,7 @@ export function getManage(deptId) {
// 新增部门 // 新增部门
export function addManage(data) { export function addManage(data) {
return request({ return request({
url: '/coupletEnterprisemanagement/manage', url: '/business/manage',
method: 'post', method: 'post',
data: data data: data
}) })
@ -36,7 +36,7 @@ export function addManage(data) {
// 修改部门 // 修改部门
export function updateManage(data) { export function updateManage(data) {
return request({ return request({
url: '/coupletEnterprisemanagement/manage ', url: '/business/manage ',
method: 'put', method: 'put',
data: data data: data
}) })
@ -45,7 +45,7 @@ export function updateManage(data) {
// 删除部门 // 删除部门
export function delManage(deptId) { export function delManage(deptId) {
return request({ return request({
url: '/coupletEnterprisemanagement/manage/' + deptId, url: '/business/manage/' + deptId,
method: 'delete' method: 'delete'
}) })
} }

View File

@ -0,0 +1,52 @@
import request from '@/utils/request'
// 查询故障码数据列表
export function listTrouble(data) {
return request({
url: '/business/trouble/troubleList',
method: 'post',
data: data
})
}
// 查询故障类型
export function getTroubleType() {
return request({
url: '/business/trouble/troubleTypeList',
method: 'get'
})
}
// 查询故障等级
export function getTroubleGrade() {
return request({
url: '/business/trouble/troubleGradeList',
method: 'get'
})
}
// 添加故障码数据
export function getAddTrouble(data) {
return request({
url: '/business/trouble/insertTrouble',
method: 'post',
data: data
})
}
// 修改故障码数据信息
export function getUpdateTrouble(data) {
return request({
url: '/business/trouble/updateTrouble',
method: 'post',
data: data
})
}
// 删除故障码数据信息
export function getDelTrouble(troubleId) {
return request({
url: '/business/trouble/remove/' + troubleId,
method: 'get'
})
}

View File

@ -0,0 +1,53 @@
import request from '@/utils/request'
// 查询车辆列表
export function list(vehicleListParams) {
return request({
url: '/business/vehicle/list',
method: 'post',
data: vehicleListParams
})
}
//根据车辆id进行删除
export function deleteById(vehicleId) {
return request({
url: '/business/vehicle/deleteById/' + vehicleId,
method: 'get'
})
}
//获取车辆类型
export function getVehicleTypes() {
return request({
url: '/business/vehicleType/list',
method: 'get'
})
}
//编辑车辆
export function editById(vehicle) {
return request({
url: '/business/vehicle/editById',
method: 'post',
data:vehicle
})
}
//新增车辆
export function insert(vehicle) {
return request({
url: '/business/vehicle/insert',
method: 'post',
data:vehicle
})
}
//获取绑定当前车辆的标识
export function getBindLogoByVehicleId(vehicleId) {
return request({
url: '/business/vehicle/getBindLogoById/'+vehicleId,
method: 'get'
})
}

View File

@ -1,19 +0,0 @@
import request from '@/utils/request'
// 查询车辆列表
export function list(vehicleListParams) {
return request({
url: '/vehicle/vehicle/list',
method: 'post',
data: vehicleListParams
})
}
//根据车辆id进行删除
export function deleteById(vehicleId) {
return request({
url: '/vehicle/vehicle/deleteById/' + vehicleId,
method: 'get'
})
}

View File

@ -73,6 +73,20 @@ export const constantRoutes = [
} }
] ]
}, },
{
path: '/business/fence',
component: Layout,
redirect: 'container',
children: [
{
path: '/business/fence/container',
component: () => import('@/views/couplet/fence/container.vue'),
name: 'fenMap',
meta: {title: '地图', icon: 'rate'}
}
]
},
{ {
path: '/user', path: '/user',

View File

@ -0,0 +1,165 @@
<template>
<div>
<h1>车辆监控页面</h1>
<!-- 列表-->
<el-table :data="vehicleList" style="width: 100%" border>
<el-table-column label="车辆id" width="90" align="center">
<template slot-scope="scope">
<span style="margin-left: 10px">{{ scope.row.vehicleId }}</span>
</template>
</el-table-column>
<el-table-column label="车辆类型" width="90" align="center">
<template slot-scope="scope">
<span style="margin-left: 10px">{{ scope.row.vehicleTypeName }}</span>
</template>
</el-table-column>
<el-table-column label="电机厂商" width="150" align="center">
<template slot-scope="scope">
<span style="margin-left: 10px">{{ scope.row.motorManufacturer }}</span>
</template>
</el-table-column>
<el-table-column label="电池厂商" width="150" align="center">
<template slot-scope="scope">
<span style="margin-left: 10px">{{ scope.row.batteryManufacturer }}</span>
</template>
</el-table-column>
<el-table-column label="电机编号" width="180" align="center">
<template slot-scope="scope">
<span style="margin-left: 10px">{{ scope.row.motorNumber }}</span>
</template>
</el-table-column>
<el-table-column label="电池编号" width="180" align="center">
<template slot-scope="scope">
<span style="margin-left: 10px">{{ scope.row.batteryNumber }}</span>
</template>
</el-table-column>
<el-table-column label="vin码" width="180" align="center">
<template slot-scope="scope">
<span style="margin-left: 10px">{{ scope.row.vin }}</span>
</template>
</el-table-column>
<!-- <el-table-column label="vin码" width="180" align="center">-->
<!-- <template slot-scope="scope">-->
<!-- <span style="margin-left: 10px">{{ scope.row.vin }}</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column label="车辆状态" width="120" align="center">
<template slot-scope="scope">
<span style="margin-left: 10px" v-if="1==scope.row.vehicleState">
<el-tag type="success">在线</el-tag>
</span>
<span style="margin-left: 10px" v-if="0==scope.row.vehicleState">
<el-tag type="danger">离线</el-tag>
</span>
</template>
</el-table-column>
<el-table-column label="操作" width="180" align="center">
<template slot-scope="scope">
<el-button size="mini" type="danger" @click="findByVehicle(scope.row.vin)"></el-button>
</template>
</el-table-column>
</el-table>
</div>
</template>
<script>
//jsjsjson,
//import from ',
import {getVehicleTypes} from "@/api/couplet/vehicle";
import {detectionList} from "@/api/couplet/VehicleDetection";
export default {
//import使"
components: {},
props: {},
data() {
//"
return {
//
vehicleList: [],
//
total: 0,
//
vehicleTypes: [],
//
formLabelWidth: '120px',
dialogEdit: false,
dialogInsert: false,
//
title: ""
};
},
// data",
computed: {},
//data",
watch: {},
//",
methods: {
//
getVehicleList() {
detectionList().then(
res => {
this.vehicleList = res.data;
}
)
},
//
handleSizeChange(val) {
this.vehicleListParams.pageSize = val;
this.getVehicleList();
},
handleCurrentChange(val) {
this.vehicleListParams.pageNum = val;
this.getVehicleList();
},
//
getVehicleTypes() {
getVehicleTypes().then(
res => {
this.vehicleTypes = res.data;
}
)
},
findByVehicle(vin){
}
},
// - 访this",
created() {
//
this.getVehicleList ()
//
this.getVehicleTypes()
},
// - 访DOM",
mounted() {
},
beforeCreate() {
}, // - ",
beforeMount() {
}, // - ",
beforeUpdate() {
}, // - ",
updated() {
}, // - ",
beforeDestroy() {
}, // - ",
destroyed() {
}, // - ",
activated() {
} //keep-alive",
};
</script>
<style scoped>
</style>

View File

@ -0,0 +1,155 @@
<template>
<div>
<el-button class="btn" @click="drawGraph()" style="margin-bottom: 6px">绘制多边形</el-button>
<div id="container">
</div>
</div>
</template>
<script>
//jsjsjson,
//import from ',
import AMapLoader from "@amap/amap-jsapi-loader";
import {fenceUpdate} from "@/api/couplet/fence";
export default {
//import使"
name:"map-view",
components: {AMap},
props: {},
data() {
//"
return {
map:null,
mouseTool: null, // mouseTool
_AMap: null,
// drawGraph:{}
drawnPoints:{},
points:{}
};
},
// data",
computed: {
},
//data",
watch: {},
//",
methods: {
initAMap(){
AMapLoader.load({
key: "b5f283177b02e0bdd7f4981f4f219432", // WebKey load
version: "2.0", // JSAPI 1.4.15
plugins: ["AMap.Scale","AMap.MouseTool"], //使'AMap.Scale'['...','...']
}).then((AMap) => {
this.map=new AMap.Map("container",{
viewMode:"3D",
zoom:11,
center:[116.39, 39.9],
})
//
this.mouseTool = new AMap.MouseTool(this.map);
setTimeout(()=>{
if (this.drawnPoints.fenceLongitudeLatitude && typeof this.drawnPoints.fenceLongitudeLatitude === 'string') {
this.draw1()
}
},100)
this.mouseTool.on("draw", this.drawReady);
}).catch((e)=>{
console.log(e)
})
},
draw1(){
const pathArray = this.drawnPoints.fenceLongitudeLatitude.split(';').map(coordStr => {
const [lng, lat] = coordStr.split(',');
return { lng: parseFloat(lng), lat: parseFloat(lat) };
});
//
//pathArray.every(coord => coord.lng && coord.lat)
if (pathArray.length > 2 && pathArray.every(coord => coord.lng && coord.lat)) {
const polygon = this.mouseTool.Polygon({
path: pathArray,
strokeColor: "#FF33FF",
strokeOpacity: 1,
strokeWeight: 6,
fillColor: '#1791fc',
fillOpacity: 0.4,
strokeStyle: "solid",
});
polygon.setMap(this.map);
}
// } else {
// //
// this.drawGraph()
// }
},
drawGraph(){
this.mouseTool.polygon({
strokeColor: "#FF33FF",
strokeOpacity: 1,
strokeWeight: 6,
fillColor: '#1791fc',
fillOpacity: 0.4,
// 线 'dashed'
strokeStyle: "solid",
// strokeStyledashed
// strokeDasharray: [30,10],
})
},
drawReady(event){
//
let path = event.obj.getPath();
//
const coordinatesString = path.map(point => `${point.lng},${point.lat}`).join('; ');
this.drawnPoints.fenceLongitudeLatitude=coordinatesString
this.$message("覆盖物对象绘制完成");
fenceUpdate(this.drawnPoints).then(res=>{
this.$message.success("编辑成功")
this.$router.push({path: '/business/fence/fence'})
})
}
},
// - 访this",
created() {
},
// - 访DOM",
mounted() {
this.initAMap()
this.drawnPoints=this.$route.query.drawGraph
},
unmounted(){
},
beforeCreate() {
}, // - ",
beforeMount() {
}, // - ",
beforeUpdate() {
}, // - ",
updated() {
}, // - ",
beforeDestroy() {
}, // - ",
destroyed() {
}, // - ",
activated() {
} //keep-alive",
};
</script>
<style scoped>
#container{
padding:0px;
margin: 0px;
width: 100%;
height: 800px;
}
</style>

View File

@ -1,16 +1,23 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html>
<head> <head>
<meta charset="UTF-8"> <meta charset="utf-8" />
<title>Title</title> <meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta
name="viewport"
content="initial-scale=1.0, user-scalable=no, width=device-width"
/>
<title>HELLO, AMAP!</title>
<style>
html,
body,
#container {
width: 100%;
height: 100%;
}
</style>
</head> </head>
<body> <body>
<div id="container"></div>
<!-- 设置高德地图安全密钥 -->
<script type="text/javascript">
window._AMapSecurityConfig = {
securityJsCode: 'd4afcbb16c37bab037fe756ffb063e51', // 你的密钥
}
</script>
</body> </body>
</html> </html>

View File

@ -33,14 +33,11 @@
<el-table-column label="围栏名称" prop="fenceName" width="120"/> <el-table-column label="围栏名称" prop="fenceName" width="120"/>
<el-table-column label="围栏经纬度" prop="fenceLongitudeLatitude" width="150"/> <el-table-column label="围栏经纬度" prop="fenceLongitudeLatitude" width="150"/>
<el-table-column label="围栏描述" prop="fenceDescription" width="150"/> <el-table-column label="围栏描述" prop="fenceDescription" width="150"/>
<el-table-column align="center" label="状态" width="100"> <el-table-column
label="围栏状态">
<template slot-scope="scope"> <template slot-scope="scope">
<el-switch <span style="margin-left: 10px" v-if="scope.row.fenceState == 0"></span>
v-model="scope.row.fenceState" <span style="margin-left: 10px" v-if="scope.row.fenceState == 1"></span>
active-value="0"
inactive-value="1"
@change="handleFenceStateChange(scope.row)"
></el-switch>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column align="center" label="创建时间" prop="createTime" width="180"> <el-table-column align="center" label="创建时间" prop="createTime" width="180">
@ -59,15 +56,41 @@
<el-table-column align="center" class-name="small-padding fixed-width" label="操作"> <el-table-column align="center" class-name="small-padding fixed-width" label="操作">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
v-hasPermi="['system:role:edit']" v-hasPermi="['business:fence:fenceUpdate']"
icon="el-icon-edit" icon="el-icon-edit"
size="mini" size="mini"
type="text" type="text"
@click="handleUpdate(scope.row)" @click="handleQueryFence(scope.row)"
>修改 >查询围栏
</el-button> </el-button>
<el-button <el-button
v-hasPermi="['system:role:remove']" v-hasPermi="['business:fence:fenceUpdate']"
icon="el-icon-edit"
size="mini"
type="text"
@click="handleFenceUpdate(scope.row)"
>编辑电子围栏
</el-button>
<el-button
v-hasPermi="['business:fence:fenceState']"
v-if="scope.row.fenceState==1"
icon="el-icon-check"
size="mini"
type="text"
@click="handleStateChange(scope.row)"
>启用
</el-button>
<el-button
v-hasPermi="['business:fence:fenceState']"
v-if="scope.row.fenceState==0"
icon="el-icon-close"
size="mini"
type="text"
@click="handleFenceStateChange(scope.row)"
>停用
</el-button>
<el-button
v-hasPermi="['business:fence:fenceDelete']"
icon="el-icon-delete" icon="el-icon-delete"
size="mini" size="mini"
type="text" type="text"
@ -89,7 +112,6 @@
</el-pagination> </el-pagination>
</div> </div>
<!-- Form --> <!-- Form -->
<el-dialog title="新增电子围栏" :visible.sync="dialogFormVisible"> <el-dialog title="新增电子围栏" :visible.sync="dialogFormVisible">
<el-form :model="fenceInsertRequest"> <el-form :model="fenceInsertRequest">
<el-form-item label="围栏名称" :label-width="formLabelWidth"> <el-form-item label="围栏名称" :label-width="formLabelWidth">
@ -105,8 +127,35 @@
<template> <template>
<el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" @change="handleCheckAllChange"></el-checkbox> <el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" @change="handleCheckAllChange"></el-checkbox>
<div style="margin: 15px 0;"></div> <div style="margin: 15px 0;"></div>
<el-checkbox-group v-model="logoIds" @change="handleCheckedCitiesChange">
<el-checkbox v-for="logo in logo" :label="logo.logoName" :key="logo.logoId">{{logo.logoName}}</el-checkbox> <el-checkbox-group v-model="fenceInsertRequest.logoIds" @change="handleChange">
<el-checkbox v-for="item in logo" :key="item.logoId" :label="item.logoId" >{{item.logoName}}</el-checkbox>
</el-checkbox-group>
</template>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisible = false"> </el-button>
<el-button type="primary" @click="addFence"> </el-button>
</div>
</el-dialog>
<el-dialog title="修改电子围栏" :visible.sync="dialogFormVisible">
<el-form :model="fenceInsertRequest">
<el-form-item label="围栏名称" :label-width="formLabelWidth">
<el-input v-model="fenceInsertRequest.fenceName" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="电子围栏描述信息" :label-width="formLabelWidth">
<el-input v-model="fenceInsertRequest.fenceDescription" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="维护负责人" :label-width="formLabelWidth">
<el-input v-model="fenceInsertRequest.maintainerName" autocomplete="off"></el-input>
</el-form-item>
<template>
<el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" @change="handleCheckAllChange"></el-checkbox>
<div style="margin: 15px 0;"></div>
<el-checkbox-group v-model="fenceInsertRequest.logoIds" @change="handleChange">
<el-checkbox v-for="item in logo" :key="item.logoId" :label="item.logoId" >{{item.logoName}}</el-checkbox>
</el-checkbox-group> </el-checkbox-group>
</template> </template>
</el-form> </el-form>
@ -116,71 +165,36 @@
</div> </div>
</el-dialog> </el-dialog>
<div class="mapBox">
<!-- 使用高德地图的组件-->
<el-amap vid="amapDemo" :zoom="zoom" :center="center" style="height: 600px">
<!-- el-amap-marker>: 通过v-for指令循环遍历markers数组-->
<!-- 并为每个标记创建一个el-amap-marker组件将标记的位置(position)绑定到数组中的相应数据-->
<el-amap-marker
v-for="marker in markers"
:position="marker.position"
:events="marker.events"
:key="marker.index"
></el-amap-marker>
<el-amap-info-window
v-for="window in windows"
:offset="window.offset"
:position="window.position"
:content="window.content"
:open="window.open"
:key="window.index"
></el-amap-info-window>
</el-amap>
</div> </div>
</div>
</template> </template>
<script> <script>
import {fenceList, changeFenceStatus, queryByLogo, fenceDelete, fenceAdd} from "@/api/couplet/fence"; import {fenceList, changeFenceStatus, queryByLogo, fenceDelete, fenceAdd} from "@/api/couplet/fence";
import {changeRoleStatus} from "@/api/system/role"; import path from "path";
import log from "@/views/monitor/job/log.vue";
export default { export default {
components: {}, components: {},
data() { data() {
return { return {
//
loading: true,
//
unit: "xxxxx政府司法局",
address: "xx省xx市xxxxx大道东433号",
// markerswindows
markers: [],
windows: [],
center: [116.39, 39.9],
zoom: 16,
// currentPosition: null, //
label: {
content: "自定义标题",
offset: [10, 12],
},
// //
queryParams: {}, queryParams: {},
fence: [{}], fence: [{}],
fenceUpdateRequest:{}, fenceUpdateRequest:{},
fenceInsertRequest:{}, fenceInsertRequest:{
logoIds:[]
},
dialogFormVisible: false, dialogFormVisible: false,
formLabelWidth: '120px', formLabelWidth: '120px',
checkAll: false, checkAll: false,
logo: [], logo: [
logoIds:{}, {
// cities: cityOptions, logoId:'',
logoName:'',
}
],
checkedLogo: [],
isIndeterminate: true, isIndeterminate: true,
fenceChangeState:{} fenceChangeState:{}
}; };
}, },
methods: { methods: {
@ -222,10 +236,10 @@ export default {
this.checkedCities = val ? this.logo : []; this.checkedCities = val ? this.logo : [];
this.isIndeterminate = false; this.isIndeterminate = false;
}, },
handleCheckedCitiesChange(value) { handleChange(value) {
let checkedCount = value.length; // let checkedCount = value.length;
this.checkAll = checkedCount === this.logo.length; // this.checkAll = checkedCount === this.logo.length;
this.isIndeterminate = checkedCount > 0 && checkedCount < this.logo.length; // this.isIndeterminate = checkedCount > 0 && checkedCount < this.logo.length;
}, },
/** /**
* 分页 * 分页
@ -242,12 +256,12 @@ export default {
* 新增数据 * 新增数据
*/ */
addFence(){ addFence(){
this.dialogFormVisible = false;
fenceAdd(this.fenceInsertRequest).then( fenceAdd(this.fenceInsertRequest).then(
res=>{ res=>{
this.$message.success("新增成功") this.$message.success("新增成功")
} }
) )
this.dialogFormVisible = false;
}, },
/** /**
* 查询多选框 * 查询多选框
@ -257,30 +271,40 @@ export default {
queryByLogo().then( queryByLogo().then(
res=>{ res=>{
this.logo=res.data this.logo=res.data
console.log(res)
} }
) )
}, },
// //
handleFenceStateChange(row) { handleFenceStateChange(row) {
// let text = row.status === "0" ? "" : ""; debugger
// this.$modal.confirm('"' + text + '"').then(function () { if (row.fenceState === 0){
this.$modal.confirm('确认要修改状态吗?').then(function () { row.fenceState = 1
this.$modal.confirm('确认要停用状态吗?').then(function () {
return changeFenceStatus(row); return changeFenceStatus(row);
}).then(() => { }).then(() => {
this.$modal.msgSuccess( "成功"); this.$modal.msgSuccess( "停用成功");
// this.$modal.msgSuccess(text + ""); })
}).catch(function () { }
row.status = row.status === "0" ? "1" : "0"; },
}); handleStateChange(row) {
/**
* 启用
*/
if (row.fenceState === 1) {
row.fenceState = 0
this.$modal.confirm('确认要启用状态吗?').then(function () {
return changeFenceStatus(row);
}).then(() => {
this.$modal.msgSuccess("启用成功");
})
}
}, },
/** /**
* 电子围栏删除 * 电子围栏删除
* @param map * @param map
*/ */
handleFenceDelete(row){ handleFenceDelete(row){
console.log(row)
var fenceId = row.fenceId; var fenceId = row.fenceId;
this.$modal.confirm('确认要修改编号为'+fenceId+'的信息吗?').then(function () { this.$modal.confirm('确认要修改编号为'+fenceId+'的信息吗?').then(function () {
return fenceDelete(fenceId) return fenceDelete(fenceId)
@ -291,39 +315,15 @@ export default {
this.$modal.msgError("删除失败"); this.$modal.msgError("删除失败");
}) })
}, },
/**
// parseTime, * 编辑电子围栏图形
// */
initMap(map) { handleFenceUpdate(row){
this.markers.push({ this.$router.push({path: '/business/fence/container', query: {drawGraph: row}})
position: [116.39, 39.9],
});
this.windows.push({
position: [116.39, 39.9],
// position: this.currentPosition,
content:
"<h2 style='font-weight: bold;width: 400px;margin: 10px'>" +
this.unit +
"</h2>" +
"<div style='margin: 10px'>" +
"地址:" +
this.address +
"</div>",
offset: [0, -20],
open: true,
});
// var map = new AMap.Map("container", {
// zoomEnable: true, //
// zoom: 12, //
// dragEnable: false, //
// cursor: "hand", //
// });
// //
// map.plugin(["AMap.ToolBar"], function () {
// map.addControl(new AMap.ToolBar());
// });
}, },
handleQueryFence(){
}
}, },
created() { created() {
this.queryByFenceList() this.queryByFenceList()
@ -331,7 +331,7 @@ export default {
}, },
// - 访DOM", // - 访DOM",
mounted() { mounted() {
this.initMap();
}, },
}; };
</script> </script>

View File

@ -18,7 +18,7 @@
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button icon="el-icon-search" size="mini" type="primary" @click="handleQuery"></el-button> <el-button icon="el-icon-search" size="mini" type="primary" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button> <el-button icon="el-icon-refresh" size="mini" @click="resetTroubleQuery"></el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -71,11 +71,29 @@
<el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
<el-table-column align="center" type="selection" width="55"/> <el-table-column align="center" type="selection" width="55"/>
<el-table-column align="center" label="故障码" prop="troubleCode"/> <el-table-column align="center" label="故障码" prop="troubleCode"/>
<el-table-column align="center" label="故障类型" prop="typeName"/> <!-- <el-table-column align="center" label="故障类型" prop="typeName"/>-->
<el-table-column align="center" label="故障类型">
<template slot-scope="scope">
<div slot="reference" class="name-wrapper">
<el-tag size="medium" v-if="scope.row.typeId===1"></el-tag>
<el-tag size="medium" v-if="scope.row.typeId===2"></el-tag>
<el-tag size="medium" v-if="scope.row.typeId===3"></el-tag>
<el-tag size="medium" v-if="scope.row.typeId===4"></el-tag>
</div>
</template>
</el-table-column>
<el-table-column align="center" label="故障位" prop="troublePosition"/> <el-table-column align="center" label="故障位" prop="troublePosition"/>
<el-table-column align="center" label="故障值" prop="troubleValue"/> <el-table-column align="center" label="故障值" prop="troubleValue"/>
<el-table-column align="center" label="故障标签" prop="troubleTag"/> <el-table-column align="center" label="故障标签" prop="troubleTag"/>
<el-table-column align="center" label="故障等级" prop="gradeName"/> <el-table-column align="center" label="故障等级">
<template slot-scope="scope">
<div slot="reference" class="name-wrapper">
<el-tag size="medium" v-if="scope.row.gradeId===1"></el-tag>
<el-tag size="medium" v-if="scope.row.gradeId===2"></el-tag>
<el-tag size="medium" v-if="scope.row.gradeId===3"></el-tag>
</div>
</template>
</el-table-column>
<el-table-column align="center" class-name="small-padding fixed-width" label="操作"> <el-table-column align="center" class-name="small-padding fixed-width" label="操作">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
@ -89,19 +107,101 @@
icon="el-icon-delete" icon="el-icon-delete"
size="mini" size="mini"
type="text" type="text"
@click="handleDelete(scope.row)" @click="handleDelet(scope.row.troubleId)"
>删除 >删除
</el-button> </el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<!-- 添加对话框 -->
<el-dialog :visible.sync="opens" append-to-body width="500px">
<el-form ref="form" :model="form" label-width="80px">
<el-form-item label="故障码">
<el-input v-model="form.troubleCode"/>
</el-form-item>
<el-form-item label="故障码位" prop="troublePosition">
<el-input v-model="form.troublePosition"/>
</el-form-item>
<el-form-item label="故障码值" prop="troubleValue">
<el-input v-model="form.troubleValue"/>
</el-form-item>
<el-form-item label="故障码标签" prop="troubleTag">
<el-input v-model="form.troubleTag"/>
</el-form-item>
<el-form-item label="故障码类型" prop="typeId">
<el-select v-model="form.typeId" placeholder="请选择故障类型">
<el-option v-for="item in type" :key="item.typeId" :label="item.typeName" :value="item.typeId"></el-option>
</el-select>
</el-form-item>
<el-form-item label="故障码等级" prop="gradeId">
<el-select v-model="form.gradeId">
<el-option v-for="item in grade" :key="item.gradeId" :label="item.gradeName" :value="item.gradeId"></el-option>
</el-select>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitAdd"> </el-button>
<el-button @click="cance"> </el-button>
</div>
</el-dialog>
<!--修改对话框-->
<el-dialog :visible.sync="open" append-to-body width="500px">
<el-form ref="fore" :model="fore" label-width="80px">
<el-form-item label="故障码">
<el-input v-model="fore.troubleCode"/>
</el-form-item>
<el-form-item label="故障码位" prop="troublePosition">
<el-input v-model="fore.troublePosition"/>
</el-form-item>
<el-form-item label="故障码值" prop="troubleValue">
<el-input v-model="fore.troubleValue"/>
</el-form-item>
<el-form-item label="故障码标签" prop="troubleTag">
<el-input v-model="fore.troubleTag"/>
</el-form-item>
<el-form-item label="故障码类型" prop="typeId">
<el-select v-model="form.typeId" placeholder="请选择故障类型">
<el-option v-for="item in type" :key="item.typeId" :label="item.typeName" :value="item.typeId"></el-option>
</el-select>
</el-form-item>
<el-form-item label="故障码等级" prop="gradeId">
<el-select v-model="form.gradeId">
<el-option v-for="item in grade" :key="item.gradeId" :label="item.gradeName" :value="item.gradeId"></el-option>
</el-select>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitUpd"> </el-button>
<el-button @click="cance"> </el-button>
</div>
</el-dialog>
<el-pagination
@size-change="handleSize"
@current-change="handleCurrent"
:current-page="queryParams.pageNum"
:page-sizes = "[2, 3 , 5, 10]"
:page-size="queryParams.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="100"></el-pagination>
</div> </div>
</template> </template>
<script> <script>
//jsjsjson, //jsjsjson,
//import from ', //import from ',
export default { import {
getAddTrouble,
getDelTrouble,
getTroubleGrade,
getTroubleType,
getUpdateTrouble,
listTrouble
} from '@/api/couplet/trouble'
export default {
//import使" //import使"
components: {}, components: {},
props: {}, props: {},
@ -109,13 +209,34 @@
//" //"
return { return {
queryParams:{troubleCode:'',troublePosition:''}, queryParams:{
pageNum : 1,
pageSize : 10,
troubleCode:'',
troublePosition:''
},
typeList1:[],
loading: true,
// //
showSearch:true, showSearch:true,
// //
single:true, single:true,
// //
multiple:true multiple:true,
//
dataList:[],
//
total: 0,
//
ids:[],
//
open: false,
opens: false,
//
form: {},
fore:{},
type:[],
grade:[]
}; };
}, },
// data", // data",
@ -124,27 +245,94 @@
watch: {}, watch: {},
//", //",
methods: { methods: {
getList() {
this.loading =true;
listTrouble(this.addDateRange(this.queryParams)).then(res =>{
this.dataList = res.data.list;
this.total = res.data.total;
this.loading = false;
})
},
handleSelectionChange(selection) {
this.ids = selection.map(item => item.troubleId)
this.single = selection.length !=1
this.multiple = !selection.length
},
handleQuery() { handleQuery() {
this.queryParams.pageNum = 1; this.queryParams.pageNum = 1;
this.getList()
}, },
resetQuery() { resetTroubleQuery() {
this.resetForm("queryForm")
this.handleQuery() this.handleQuery()
}, },
/** 新增按钮操作 */
handleAdd() { handleAdd() {
this.opens = true;
}, },
handleUpd() { handleUpd() {
this.open = true;
},
cance() {
this.open = false;
this.reset();
},
handleUpdate(data) {
this.fore = data
this.open = true
},
submitAdd() {
getAddTrouble(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.opens = false;
this.getList();
});
this.opens = true;
},
submitUpd() {
getUpdateTrouble(this.fore).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
this.open = true;
}, },
handleDel() { handleDel() {
},
handleDelet(troubleId) {
getDelTrouble(troubleId).then(res =>{
this.$modal.msgSuccess("删除成功");
this.getList();
})
}, },
handleExe(){ handleExe(){
},
changTypeId() {
getTroubleType().then(res => {
this.type = res
})
},
changGradeId() {
getTroubleGrade().then(res => {
this.grade = res
})
},
handleSize(val) {
this.queryParams.pageSize = val
this.getList()
},
handleCurrent(val) {
this.queryParams.pageNum = val
this.getList()
} }
}, },
// - 访this", // - 访this",
created() { created() {
this.getList()
this.changTypeId()
this.changGradeId()
}, },
// - 访DOM", // - 访DOM",
mounted() { mounted() {

View File

@ -3,14 +3,33 @@
<h1>车辆管理页面</h1> <h1>车辆管理页面</h1>
<!-- {{ vehicleList }}--> <!-- {{ vehicleList }}-->
<!-- 列表表单-->
<el-form ref="form" :model="vehicleListParams" label-width="80px">
<el-form-item label="类型">
<el-select v-model="vehicleListParams.vehicleType" clearable placeholder="车辆类型" @change="getVehicleList">
<el-option v-for="item in vehicleTypes" :key="item.vehicleTypeId" :label="item.vehicleTypeName"
:value="item.vehicleTypeId"></el-option>
</el-select>
</el-form-item>
<el-form-item label="状态">
<el-select v-model="vehicleListParams.vehicleState" clearable placeholder="车辆状态" @change="getVehicleList">
<el-option key="1" label="在线" value="1"></el-option>
<el-option key="0" label="离线" value="0"></el-option>
</el-select>
</el-form-item>
</el-form>
<el-button type="primary" icon="el-icon-edit" @click="toInsert"></el-button>
<!-- 列表-->
<el-table :data="vehicleList" style="width: 100%" border> <el-table :data="vehicleList" style="width: 100%" border>
<el-table-column label="车辆id" width="90" align="center"> <el-table-column label="车辆id" width="90" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<span style="margin-left: 10px">{{ scope.row.vehicleId }}</span> <span style="margin-left: 10px">{{ scope.row.vehicleId }}</span>
</template> </template>
</el-table-column> </el-table-column>
<!-- TODO 暂时显示车辆类型id待处理-->
<el-table-column label="车辆类型" width="90" align="center"> <el-table-column label="车辆类型" width="90" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<span style="margin-left: 10px">{{ scope.row.vehicleTypeName }}</span> <span style="margin-left: 10px">{{ scope.row.vehicleTypeName }}</span>
@ -36,11 +55,11 @@
<span style="margin-left: 10px">{{ scope.row.batteryNumber }}</span> <span style="margin-left: 10px">{{ scope.row.batteryNumber }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="vin码" width="180" align="center"> <!-- <el-table-column label="vin码" width="180" align="center">-->
<template slot-scope="scope"> <!-- <template slot-scope="scope">-->
<span style="margin-left: 10px">{{ scope.row.vin }}</span> <!-- <span style="margin-left: 10px">{{ scope.row.vin }}</span>-->0
</template> <!-- </template>-->
</el-table-column> <!-- </el-table-column>-->
<el-table-column label="车辆状态" width="120" align="center"> <el-table-column label="车辆状态" width="120" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<span style="margin-left: 10px" v-if="1==scope.row.vehicleState"> <span style="margin-left: 10px" v-if="1==scope.row.vehicleState">
@ -53,11 +72,93 @@
</el-table-column> </el-table-column>
<el-table-column label="操作" width="180" align="center"> <el-table-column label="操作" width="180" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button size="mini" @click="">编辑</el-button> <el-button size="mini" @click="toEdit(scope.row)"></el-button>
<el-button size="mini" type="danger" @click="deleteById(scope.row.vehicleId)"></el-button> <el-button size="mini" type="danger" @click="deleteById(scope.row.vehicleId)"></el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<!-- 分页-->
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="vehicleListParams.pageNum"
:page-sizes="[5,7,10,20]"
:page-size="vehicleListParams.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total">
</el-pagination>
<!-- 编辑对话框-->
<el-dialog :title=title :visible.sync="dialogEdit">
<el-form :model="vehicle">
<el-form-item label="车辆类型" :label-width="formLabelWidth">
<el-select v-model="vehicle.vehicleType" placeholder="车辆类型">
<el-option v-for="item in vehicleTypes" :key="item.vehicleTypeId" :label="item.vehicleTypeName"
:value="item.vehicleTypeId"></el-option>
</el-select>
</el-form-item>
<el-form-item label="电机厂商" :label-width="formLabelWidth">
<el-input v-model="vehicle.motorManufacturer" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="电池厂商" :label-width="formLabelWidth">
<el-input v-model="vehicle.batteryManufacturer" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="电机编号" :label-width="formLabelWidth">
<el-input v-model="vehicle.motorNumber" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="电池编号" :label-width="formLabelWidth">
<el-input v-model="vehicle.batteryNumber" autocomplete="off"></el-input>
</el-form-item>
<!-- 标签复选框 需要在点击编辑框的时候查询当前车说绑定的标识-->
<el-checkbox-group v-model="vehicle.logoIds">
<el-checkbox :label=1>标识1</el-checkbox>
<el-checkbox :label=2>标识2</el-checkbox>
<el-checkbox :label=3>标识3</el-checkbox>
</el-checkbox-group>
</el-form>
<!-- {{ vehicle }}-->
<div slot="footer" class="dialog-footer">
<el-button @click="reset()"> </el-button>
<el-button type="primary" @click="editById"> </el-button>
</div>
</el-dialog>
<!-- 新增对话框-->
<el-dialog :title=title :visible.sync="dialogInsert">
<el-form :model="vehicle">
<el-form-item label="车辆类型" :label-width="formLabelWidth">
<el-select v-model="vehicle.vehicleType" placeholder="车辆类型">
<el-option v-for="item in vehicleTypes" :key="item.vehicleTypeId" :label="item.vehicleTypeName"
:value="item.vehicleTypeId"></el-option>
</el-select>
</el-form-item>
<el-form-item label="电机厂商" :label-width="formLabelWidth">
<el-input v-model="vehicle.motorManufacturer" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="电池厂商" :label-width="formLabelWidth">
<el-input v-model="vehicle.batteryManufacturer" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="电机编号" :label-width="formLabelWidth">
<el-input v-model="vehicle.motorNumber" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="电池编号" :label-width="formLabelWidth">
<el-input v-model="vehicle.batteryNumber" autocomplete="off"></el-input>
</el-form-item>
<!-- 标签复选框-->
<el-checkbox-group v-model="vehicle.logoIds">
<el-checkbox :label=1>标识1</el-checkbox>
<el-checkbox :label=2>标识2</el-checkbox>
<el-checkbox :label=3>标识3</el-checkbox>
</el-checkbox-group>
</el-form>
<!-- {{ vehicle }}-->
<div slot="footer" class="dialog-footer">
<el-button @click="reset()"> </el-button>
<el-button type="primary" @click="insert"> </el-button>
</div>
</el-dialog>
</div> </div>
@ -66,7 +167,7 @@
<script> <script>
//jsjsjson, //jsjsjson,
//import from ', //import from ',
import {deleteById, list} from "@/api/system/vehicle"; import {deleteById, editById, getBindLogoByVehicleId, getVehicleTypes, insert, list} from "@/api/couplet/vehicle";
export default { export default {
//import使" //import使"
@ -78,6 +179,12 @@ export default {
// //
vehicleList: [], vehicleList: [],
//
total: 0,
//
vehicleTypes: [],
// //
vehicleListParams: { vehicleListParams: {
// //
@ -85,6 +192,10 @@ export default {
// 0线 1线 // 0线 1线
vehicleState: '', vehicleState: '',
pageNum: 1,
pageSize: 5,
}, },
// //
@ -107,9 +218,18 @@ export default {
// //
batteryNumber: '', batteryNumber: '',
//
logoIds: [],
}, },
//
formLabelWidth: '120px',
dialogEdit: false,
dialogInsert: false,
//
title: ""
}; };
}, },
@ -123,7 +243,27 @@ export default {
getVehicleList() { getVehicleList() {
list(this.vehicleListParams).then( list(this.vehicleListParams).then(
res => { res => {
this.vehicleList = res.data; this.vehicleList = res.data.list;
this.total = res.data.total;
}
)
},
//
handleSizeChange(val) {
this.vehicleListParams.pageSize = val;
this.getVehicleList();
},
handleCurrentChange(val) {
this.vehicleListParams.pageNum = val;
this.getVehicleList();
},
//
getVehicleTypes() {
getVehicleTypes().then(
res => {
this.vehicleTypes = res.data;
} }
) )
}, },
@ -159,11 +299,97 @@ export default {
}) })
}) })
}, },
//
toEdit(row) {
this.reset()
//
this.vehicle.vehicleId = row.vehicleId;
this.vehicle.vehicleType = row.vehicleType;
this.vehicle.motorManufacturer = row.motorManufacturer;
this.vehicle.batteryManufacturer = row.batteryManufacturer;
this.vehicle.motorNumber = row.motorNumber;
this.vehicle.batteryNumber = row.batteryNumber;
//
getBindLogoByVehicleId(row.vehicleId).then(
res => {
//
this.vehicle.logoIds = res.data;
}
)
this.title = "编辑车辆"
this.dialogEdit = true;
},
//
reset() {
this.dialogEdit = false
this.dialogInsert = false
this.vehicle = {
//id
vehicleId: '',
//
vehicleType: '',
//
motorManufacturer: '',
//
batteryManufacturer: '',
//
motorNumber: '',
//
batteryNumber: '',
//
logoIds: [],
}
// this.$message.info("")
},
//
editById() {
editById(this.vehicle).then(
res => {
if (res.code == 200) {
this.dialogEdit = false;
this.getVehicleList();
this.$message.success("编辑成功");
} else {
this.$message.error("编辑失败");
}
}
);
},
//
toInsert() {
this.reset()
this.title = "新增车辆"
this.dialogInsert = true;
},
//
insert() {
insert(this.vehicle).then(
res => {
if (res.code == 200) {
this.dialogInsert = false;
this.getVehicleList();
this.$message.success("新增成功");
} else {
this.$message.error("新增失败");
}
}
)
},
}, },
// - 访this", // - 访this",
created() { created() {
// //
this.getVehicleList() this.getVehicleList()
//
this.getVehicleTypes()
}, },
// - 访DOM", // - 访DOM",
mounted() { mounted() {

View File

@ -44,7 +44,7 @@
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :lg="12" :sm="24" style="padding-left: 20px"> <el-col :lg="12" :sm="24" style="padding-left: 20px">
<h2>车联后台管理框架</h2> <h2>智能车联后台管理框架</h2>
<p> <p>
一直想做一款后台管理系统看了很多优秀的开源项目但是发现没有合适自己的于是利用空闲休息时间开始自己写一套后台系统如此有了若依管理系统她可以用于所有的Web应用程序如网站管理后台网站会员中心CMSCRMOA等等当然您也可以对她进行深度定制以做出更强系统所有前端后台代码封装过后十分精简易上手出错概率低同时支持移动客户端访问系统会陆续更新一些实用功能 一直想做一款后台管理系统看了很多优秀的开源项目但是发现没有合适自己的于是利用空闲休息时间开始自己写一套后台系统如此有了若依管理系统她可以用于所有的Web应用程序如网站管理后台网站会员中心CMSCRMOA等等当然您也可以对她进行深度定制以做出更强系统所有前端后台代码封装过后十分精简易上手出错概率低同时支持移动客户端访问系统会陆续更新一些实用功能
</p> </p>

View File

@ -91,7 +91,7 @@ export default {
// //
captchaEnabled: true, captchaEnabled: true,
// //
register: false, register: true,
redirect: undefined redirect: undefined
}; };
}, },

View File

@ -7,7 +7,7 @@ function resolve(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 // 端口