Compare commits
11 Commits
Author | SHA1 | Date |
---|---|---|
|
ddcda5494c | |
|
d72c65b2a0 | |
|
891152c5fc | |
|
cf58cb0dc3 | |
|
e5ca476f0f | |
|
87e9200466 | |
|
dbf878c819 | |
|
f1fe1a348a | |
|
73fd29b308 | |
|
1e6509846d | |
|
97acceb830 |
|
@ -36,11 +36,12 @@
|
|||
"url": "https://gitee.com/y_project/MuYu-Cloud.git"
|
||||
},
|
||||
"dependencies": {
|
||||
"@amap/amap-jsapi-loader": "^1.0.1",
|
||||
"@riophae/vue-treeselect": "0.4.0",
|
||||
"axios": "0.24.0",
|
||||
"chart.js": "^4.4.3",
|
||||
"clipboard": "2.0.8",
|
||||
"core-js": "3.25.3",
|
||||
"echarts": "5.4.0",
|
||||
"element-ui": "2.15.13",
|
||||
"file-saver": "2.0.5",
|
||||
"fuse.js": "6.4.3",
|
||||
|
@ -69,6 +70,7 @@
|
|||
"chalk": "4.1.0",
|
||||
"compression-webpack-plugin": "5.0.2",
|
||||
"connect": "3.6.6",
|
||||
"echarts": "^4.9.0",
|
||||
"eslint": "7.15.0",
|
||||
"eslint-plugin-vue": "7.2.0",
|
||||
"lint-staged": "10.5.3",
|
||||
|
|
|
@ -7,6 +7,9 @@
|
|||
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
|
||||
<link href="<%= BASE_URL %>favicon.ico" rel="icon">
|
||||
<title><%= webpackConfig.name %></title>
|
||||
<!-- <script src="https://webapi.amap.com/maps?v=2.0&key=0e95def81c998806b1a63910f7f51f3c&plugin=AMap.MouseTool"></script>-->
|
||||
<script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=0e95def81c998806b1a63910f7f51f3c"></script>
|
||||
<script src="https://a.amap.com/jsapi_demos/static/demo-center/js/demoutils.js"></script>
|
||||
<!--[if lt IE 11]>
|
||||
<script>window.location.href = '/html/ie.html';</script><![endif]-->
|
||||
<style>
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
// 查询测试信息列表
|
||||
export function listBreakdown(query) {
|
||||
return request({
|
||||
url: '/rule/breakdown/list',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function pies(data) {
|
||||
return request({
|
||||
url: '/rule/breakdown/pies',
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
// 查询企业列表
|
||||
export function listEnterprise() {
|
||||
return request({
|
||||
url: '/rule/client/listEnterprise',
|
||||
method: 'post'
|
||||
})
|
||||
|
||||
}
|
|
@ -0,0 +1,82 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
// 查询车辆信息列表
|
||||
export function listCar(query) {
|
||||
return request({
|
||||
url: '/rule/car/list',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 查询车辆信息详细
|
||||
export function getCar(carId) {
|
||||
return request({
|
||||
url: '/rule/car/' + carId,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
// 查询车辆信息详细
|
||||
export function query(carId) {
|
||||
return request({
|
||||
url: '/rule/car/query/' + carId,
|
||||
method: 'post'
|
||||
})
|
||||
}
|
||||
|
||||
// 新增车辆信息
|
||||
export function addCar(data) {
|
||||
return request({
|
||||
url: '/rule/car',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 修改车辆信息
|
||||
export function updateCar(data) {
|
||||
return request({
|
||||
url: '/rule/car',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
// 删除车辆信息
|
||||
export function delCar(carId) {
|
||||
return request({
|
||||
url: '/rule/car/' + carId,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
export function read() {
|
||||
return request({
|
||||
url: '/rule/car/read',
|
||||
method: 'post'
|
||||
})
|
||||
}
|
||||
|
||||
export function open() {
|
||||
return request({
|
||||
// url: 'http://129.211.23.219:9100/manage/open/JAV0VJUJYOTOK9KSY/1',
|
||||
url: 'rule/car/open',
|
||||
method: 'post'
|
||||
})
|
||||
}
|
||||
|
||||
export function close() {
|
||||
return request({
|
||||
// url: 'http://129.211.23.219:9100/mange/close/JAV0VJUJYOTOK9KSY/1',
|
||||
url: 'rule/car/close',
|
||||
method: 'post'
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,77 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
// 查询企业列表
|
||||
export function listEnterprise(query) {
|
||||
return request({
|
||||
url: '/goods/enterprise/list',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function lists(data) {
|
||||
return request({
|
||||
url: '/goods/enterprise/lists',
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
// 查询企业详细
|
||||
export function getEnterprise(id) {
|
||||
return request({
|
||||
url: '/goods/enterprise/' + id,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
// 新增企业
|
||||
export function addEnterprise(data) {
|
||||
return request({
|
||||
url: '/goods/enterprise',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 修改企业
|
||||
export function updateEnterprise(data) {
|
||||
return request({
|
||||
url: '/goods/enterprise',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 企业认证
|
||||
export function authentication(id) {
|
||||
return request({
|
||||
url: '/goods/enterprise/authentication?id=' + id,
|
||||
method: 'post'
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 删除企业
|
||||
export function delEnterprise(id) {
|
||||
return request({
|
||||
url: '/goods/enterprise/enterprise/' + id,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
export function sysUsers(data) {
|
||||
return request({
|
||||
url: '/goods/enterprise/sysUsers/',
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
// 选择服务
|
||||
export function getLevel(id,serviceLevel) {
|
||||
return request({
|
||||
url: '/goods/enterprise/getLevel?id=' + id + "&&serviceLevel=" + serviceLevel,
|
||||
method: 'post'
|
||||
})
|
||||
}
|
|
@ -0,0 +1,59 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
// 查询围栏组列表
|
||||
export function standard(data) {
|
||||
return request({
|
||||
url: '/rule/forewarn/standard',
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增报文
|
||||
* @param data
|
||||
* @returns {AxiosPromise}
|
||||
*/
|
||||
export function indexDataFormat(data,vin) {
|
||||
return request({
|
||||
url: '/rule/forewarn/indexDataFormat?vin=' + vin,
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询报文
|
||||
* @param vin
|
||||
* @returns {AxiosPromise}
|
||||
*/
|
||||
export function selectDataFormatById(vin) {
|
||||
return request({
|
||||
url: '/rule/forewarn/selectDataFormatById?vin=' + vin,
|
||||
method: 'post'
|
||||
})
|
||||
}
|
||||
|
||||
//删除报文
|
||||
export function deleteDataFormatById(vin) {
|
||||
return request({
|
||||
url: '/rule/forewarn/deleteDataFormatById/' + vin,
|
||||
method: 'post'
|
||||
})
|
||||
}
|
||||
|
||||
// 指标预警
|
||||
export function listWarningInfoById(vin) {
|
||||
return request({
|
||||
url: '/rule/forewarn/listWarningInfoById/' + vin,
|
||||
method: 'post'
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,70 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
// 查询围栏组列表
|
||||
export function selectFenceGroups(data) {
|
||||
return request({
|
||||
url: '/rule/map/selectFenceGroups',
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
// 查询围栏列表
|
||||
export function selectFence(data) {
|
||||
return request({
|
||||
url: '/rule/map/selectFence',
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
// 查询车辆绑定围栏组及下属围栏
|
||||
export function selectFenceGroupsById(carId) {
|
||||
return request({
|
||||
url: '/rule/map/selectFenceGroupsById/' + carId,
|
||||
method: 'post'
|
||||
})
|
||||
}
|
||||
|
||||
// 将坐标传输给电子围栏
|
||||
export function getSel(data) {
|
||||
return request({
|
||||
url: '/rule/map/getSel',
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
//删除电子围栏
|
||||
export function deleteFence(fenceId) {
|
||||
return request({
|
||||
url: '/rule/map/deleteFence/' + fenceId,
|
||||
method: 'post'
|
||||
})
|
||||
}
|
||||
|
||||
//查看详情
|
||||
export function queryFence(fenceId) {
|
||||
return request({
|
||||
url: '/rule/map/queryFence/' + fenceId,
|
||||
method: 'post'
|
||||
})
|
||||
}
|
||||
|
||||
// 修改围栏状态
|
||||
export function updateFence(fenceId) {
|
||||
return request({
|
||||
url: '/rule/map/updateFence/' + fenceId,
|
||||
method: 'post'
|
||||
})
|
||||
}
|
||||
|
||||
export function dbx(data) {
|
||||
return request({
|
||||
url: 'https://tsapi.amap.com/v1/track/geofence/add/polygon',
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,82 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
// 查询所属滑窗
|
||||
export function selectDataSpecificationDev(vin) {
|
||||
return request({
|
||||
url: '/rule/forewarn/selectDataSpecificationDev?vin=' + vin,
|
||||
method: 'post'
|
||||
})
|
||||
}
|
||||
// 添加新滑动
|
||||
export function indexDataSpecification(data,vin) {
|
||||
return request({
|
||||
url: '/rule/forewarn/indexDataSpecification?vin=' + vin,
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
// 获取指定值
|
||||
export function selectDataSpecificationById(id) {
|
||||
return request({
|
||||
url: '/rule/forewarn/selectDataSpecificationById/' + id,
|
||||
method: 'post'
|
||||
})
|
||||
}
|
||||
|
||||
// 修改滑窗
|
||||
export function updataDataSpecification(data) {
|
||||
return request({
|
||||
url: '/rule/forewarn/updataDataSpecification',
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
// 删除滑窗
|
||||
export function deleteDataSpecification(id) {
|
||||
return request({
|
||||
url: '/rule/forewarn/deleteDataSpecification?id=' + id,
|
||||
method: 'post'
|
||||
})
|
||||
}
|
||||
|
||||
// 获取滑行长度
|
||||
export function listLength(data) {
|
||||
return request({
|
||||
url: '/rule/forewarn/listLength',
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
// 获取滑窗范围
|
||||
export function listRadius(data) {
|
||||
return request({
|
||||
url: '/rule/forewarn/listRadius',
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
// 获取相应的编码
|
||||
export function listDateType(vin) {
|
||||
return request({
|
||||
url: '/rule/forewarn/listDateType?vin=' + vin,
|
||||
method: 'post'
|
||||
})
|
||||
}
|
||||
|
||||
// 获取相应的编码
|
||||
export function selectDateType(data) {
|
||||
return request({
|
||||
url: '/rule/forewarn/selectDateType',
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
'use strict';(function(m,p){"object"===typeof exports&&"undefined"!==typeof module?module.exports=p():"function"===typeof define&&define.amd?define(p):(m=m||self,m.AMapLoader=p())})(this,function(){function m(a){var b=[];a.AMapUI&&b.push(p(a.AMapUI));a.Loca&&b.push(r(a.Loca));return Promise.all(b)}function p(a){return new Promise(function(h,c){var f=[];if(a.plugins)for(var e=0;e<a.plugins.length;e+=1)-1==d.AMapUI.plugins.indexOf(a.plugins[e])&&f.push(a.plugins[e]);if(g.AMapUI===b.failed)c("\u524d\u6b21\u8bf7\u6c42 AMapUI \u5931\u8d25");
|
||||
else if(g.AMapUI===b.notload){g.AMapUI=b.loading;d.AMapUI.version=a.version||d.AMapUI.version;e=d.AMapUI.version;var l=document.body||document.head,k=document.createElement("script");k.type="text/javascript";k.src="https://webapi.amap.com/ui/"+e+"/main.js";k.onerror=function(a){g.AMapUI=b.failed;c("\u8bf7\u6c42 AMapUI \u5931\u8d25")};k.onload=function(){g.AMapUI=b.loaded;if(f.length)window.AMapUI.loadUI(f,function(){for(var a=0,b=f.length;a<b;a++){var c=f[a].split("/").slice(-1)[0];window.AMapUI[c]=
|
||||
arguments[a]}for(h();n.AMapUI.length;)n.AMapUI.splice(0,1)[0]()});else for(h();n.AMapUI.length;)n.AMapUI.splice(0,1)[0]()};l.appendChild(k)}else g.AMapUI===b.loaded?a.version&&a.version!==d.AMapUI.version?c("\u4e0d\u5141\u8bb8\u591a\u4e2a\u7248\u672c AMapUI \u6df7\u7528"):f.length?window.AMapUI.loadUI(f,function(){for(var a=0,b=f.length;a<b;a++){var c=f[a].split("/").slice(-1)[0];window.AMapUI[c]=arguments[a]}h()}):h():a.version&&a.version!==d.AMapUI.version?c("\u4e0d\u5141\u8bb8\u591a\u4e2a\u7248\u672c AMapUI \u6df7\u7528"):
|
||||
n.AMapUI.push(function(a){a?c(a):f.length?window.AMapUI.loadUI(f,function(){for(var a=0,b=f.length;a<b;a++){var c=f[a].split("/").slice(-1)[0];window.AMapUI[c]=arguments[a]}h()}):h()})})}function r(a){return new Promise(function(h,c){if(g.Loca===b.failed)c("\u524d\u6b21\u8bf7\u6c42 Loca \u5931\u8d25");else if(g.Loca===b.notload){g.Loca=b.loading;d.Loca.version=a.version||d.Loca.version;var f=d.Loca.version,e=d.AMap.version.startsWith("2"),l=f.startsWith("2");if(e&&!l||!e&&l)c("JSAPI \u4e0e Loca \u7248\u672c\u4e0d\u5bf9\u5e94\uff01\uff01");
|
||||
else{e=d.key;l=document.body||document.head;var k=document.createElement("script");k.type="text/javascript";k.src="https://webapi.amap.com/loca?v="+f+"&key="+e;k.onerror=function(a){g.Loca=b.failed;c("\u8bf7\u6c42 AMapUI \u5931\u8d25")};k.onload=function(){g.Loca=b.loaded;for(h();n.Loca.length;)n.Loca.splice(0,1)[0]()};l.appendChild(k)}}else g.Loca===b.loaded?a.version&&a.version!==d.Loca.version?c("\u4e0d\u5141\u8bb8\u591a\u4e2a\u7248\u672c Loca \u6df7\u7528"):h():a.version&&a.version!==d.Loca.version?
|
||||
c("\u4e0d\u5141\u8bb8\u591a\u4e2a\u7248\u672c Loca \u6df7\u7528"):n.Loca.push(function(a){a?c(a):c()})})}if(!window)throw Error("AMap JSAPI can only be used in Browser.");var b;(function(a){a.notload="notload";a.loading="loading";a.loaded="loaded";a.failed="failed"})(b||(b={}));var d={key:"",AMap:{version:"1.4.15",plugins:[]},AMapUI:{version:"1.1",plugins:[]},Loca:{version:"1.3.2"}},g={AMap:b.notload,AMapUI:b.notload,Loca:b.notload},n={AMap:[],AMapUI:[],Loca:[]},q=[],t=function(a){"function"==typeof a&&
|
||||
(g.AMap===b.loaded?a(window.AMap):q.push(a))};return{load:function(a){return new Promise(function(h,c){if(g.AMap==b.failed)c("");else if(g.AMap==b.notload){var f=a.key,e=a.version,l=a.plugins;f?(window.AMap&&"lbs.amap.com"!==location.host&&c("\u7981\u6b62\u591a\u79cdAPI\u52a0\u8f7d\u65b9\u5f0f\u6df7\u7528"),d.key=f,d.AMap.version=e||d.AMap.version,d.AMap.plugins=l||d.AMap.plugins,g.AMap=b.loading,e=document.body||document.head,window.___onAPILoaded=function(d){delete window.___onAPILoaded;if(d)g.AMap=
|
||||
b.failed,c(d);else for(g.AMap=b.loaded,m(a).then(function(){h(window.AMap)})["catch"](c);q.length;)q.splice(0,1)[0]()},l=document.createElement("script"),l.type="text/javascript",l.src="https://webapi.amap.com/maps?callback=___onAPILoaded&v="+d.AMap.version+"&key="+f+"&plugin="+d.AMap.plugins.join(","),l.onerror=function(a){g.AMap=b.failed;c(a)},e.appendChild(l)):c("\u8bf7\u586b\u5199key")}else if(g.AMap==b.loaded)if(a.key&&a.key!==d.key)c("\u591a\u4e2a\u4e0d\u4e00\u81f4\u7684 key");else if(a.version&&
|
||||
a.version!==d.AMap.version)c("\u4e0d\u5141\u8bb8\u591a\u4e2a\u7248\u672c JSAPI \u6df7\u7528");else{f=[];if(a.plugins)for(e=0;e<a.plugins.length;e+=1)-1==d.AMap.plugins.indexOf(a.plugins[e])&&f.push(a.plugins[e]);if(f.length)window.AMap.plugin(f,function(){m(a).then(function(){h(window.AMap)})["catch"](c)});else m(a).then(function(){h(window.AMap)})["catch"](c)}else if(a.key&&a.key!==d.key)c("\u591a\u4e2a\u4e0d\u4e00\u81f4\u7684 key");else if(a.version&&a.version!==d.AMap.version)c("\u4e0d\u5141\u8bb8\u591a\u4e2a\u7248\u672c JSAPI \u6df7\u7528");
|
||||
else{var k=[];if(a.plugins)for(e=0;e<a.plugins.length;e+=1)-1==d.AMap.plugins.indexOf(a.plugins[e])&&k.push(a.plugins[e]);t(function(){if(k.length)window.AMap.plugin(k,function(){m(a).then(function(){h(window.AMap)})["catch"](c)});else m(a).then(function(){h(window.AMap)})["catch"](c)})}})},reset:function(){delete window.AMap;delete window.AMapUI;delete window.Loca;d={key:"",AMap:{version:"1.4.15",plugins:[]},AMapUI:{version:"1.1",plugins:[]},Loca:{version:"1.3.2"}};g={AMap:b.notload,AMapUI:b.notload,
|
||||
Loca:b.notload};n={AMap:[],AMapUI:[],Loca:[]}}}})
|
|
@ -73,32 +73,6 @@ export const constantRoutes = [
|
|||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
path: '/admin',
|
||||
component: Layout,
|
||||
redirect: 'index',
|
||||
children: [
|
||||
{
|
||||
path: 'index',
|
||||
component: () => import('@/views/goods/admin/index'),
|
||||
name: '测试用户',
|
||||
meta: {title: '测试用户', icon: 'form', affix: true}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
path: '/source',
|
||||
component: Layout,
|
||||
redirect: 'index',
|
||||
children: [
|
||||
{
|
||||
path: 'index',
|
||||
component: () => import('@/views/assets/source/index.vue'),
|
||||
name: '资产接入',
|
||||
meta: {title: '资产接入', icon: 'form', affix: true}
|
||||
}
|
||||
]
|
||||
},
|
||||
// {
|
||||
// path: '/access',
|
||||
// component: Layout,
|
||||
|
|
|
@ -1,509 +0,0 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="接入源名称" prop="name">
|
||||
<el-input
|
||||
v-model="queryParams.name"
|
||||
placeholder="请输入接入源名称"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="数据来源系统名称" prop="systemName">
|
||||
<el-input
|
||||
v-model="queryParams.systemName"
|
||||
placeholder="请输入数据来源系统名称"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="主机地址" prop="host">
|
||||
<el-input
|
||||
v-model="queryParams.host"
|
||||
placeholder="请输入主机地址"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="端口号" prop="port">
|
||||
<el-input
|
||||
v-model="queryParams.port"
|
||||
placeholder="请输入端口号"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="数据库名称" prop="databaseName">
|
||||
<el-input
|
||||
v-model="queryParams.databaseName"
|
||||
placeholder="请输入数据库名称"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="数据连接参数" prop="connectionParam">
|
||||
<el-input
|
||||
v-model="queryParams.connectionParam"
|
||||
placeholder="请输入数据连接参数"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['system:access:add']"
|
||||
>新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
icon="el-icon-edit"
|
||||
size="mini"
|
||||
:disabled="single"
|
||||
@click="handleUpdate"
|
||||
v-hasPermi="['system:access:edit']"
|
||||
>修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['system:access:remove']"
|
||||
>删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['system:access:export']"
|
||||
>导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="accessList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="接入源名称" align="center" prop="name" />
|
||||
<el-table-column label="数据来源系统名称" align="center" prop="systemName" />
|
||||
<el-table-column label="数据接入类型" align="center" prop="type" />
|
||||
<el-table-column label="主机地址" align="center" prop="host" />
|
||||
<el-table-column label="端口号" align="center" prop="port" />
|
||||
<el-table-column label="数据库名称" align="center" prop="databaseName" />
|
||||
<el-table-column label="数据连接参数" align="center" prop="connectionParam" />
|
||||
<el-table-column label="介绍" align="center" prop="intor" />
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:access:edit']"
|
||||
>修改</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['system:access:remove']"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 添加或修改数据接入对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="80%" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-card>
|
||||
<div clot="header" class="clearfix">
|
||||
<span>基础信息</span>
|
||||
</div>
|
||||
<el-row>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="接入源名称" prop="name">
|
||||
<el-input v-model="form.name" placeholder="请输入接入源名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="数据来源系统名称" prop="systemName">
|
||||
<el-input v-model="form.systemName" placeholder="请输入数据来源系统名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="主机地址" prop="host">
|
||||
<el-input v-model="form.host" placeholder="请输入主机地址" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="端口号" prop="port">
|
||||
<el-input v-model="form.port" placeholder="请输入端口号" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="数据库名称" prop="databaseName">
|
||||
<el-input v-model="form.databaseName" placeholder="请输入数据库名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="数据接入类型" prop="type">
|
||||
<el-select v-model="form.type">
|
||||
<el-option v-for="item in types"
|
||||
:key="item.value"
|
||||
:label="item.lable"
|
||||
:value="item.value">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
|
||||
<el-card>
|
||||
<div slot="header" class="clearfix">
|
||||
<span>数据连接参数</span>
|
||||
</div>
|
||||
<el-col :sm="24">
|
||||
<el-form-item label="数据连接参数" prop="connectionParam">
|
||||
<el-input v-model="form.connectionParam" placeholder="请输入数据连接参数" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-row :gutter="10" style="margin: 10px 0">
|
||||
<el-col :span="2">
|
||||
<el-button type="primary" @click="addParam()">新增参数</el-button>
|
||||
</el-col>
|
||||
<el-col :span="2">
|
||||
<el-button type="danger" @click="deleteParam(null)">清空参数</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="10">
|
||||
<el-col :md="8" :xs="12" style="margin: 10px 0" v-for="(dataSourceParam, dataSourceParamIndex) in dataSourceParamList">
|
||||
<el-col :span="10">
|
||||
<el-input v-model="dataSourceParam.name" placeholder="请输入参数建" @keyup.native="processParam"></el-input>
|
||||
</el-col>
|
||||
<el-col :span="1"><span style="font-size: 28px; margin: 0 3px 0 0;">:</span></el-col>
|
||||
<el-col :span="10">
|
||||
<el-input v-model="dataSourceParam.val" placeholder="请输入参数值" @keyup.native="processParam"/>
|
||||
</el-col>
|
||||
<el-col :span="3">
|
||||
<el-button type="danger" @click="deleteParam(dataSourceParamIndex)">删除</el-button>
|
||||
</el-col>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
<el-card>
|
||||
<div clot="header" class="clearfix">
|
||||
<span>线程池</span>
|
||||
</div>
|
||||
<el-row :gutter="10" style="margin: 10px 0">
|
||||
<el-col :sm="24">
|
||||
<el-form-item label="初始连接数量" prop="initNum">
|
||||
<el-input v-model="form.initNum" placeholder="请输入初始连接数量" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :sm="24">
|
||||
<el-form-item label="最大连接数量" prop="maxNum">
|
||||
<el-input v-model="form.maxNum" placeholder="请输入最大连接数量" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :sm="24">
|
||||
<el-form-item label="最大等待时间" prop="maxWaitTime">
|
||||
<el-input v-model="form.maxWaitTime" placeholder="请输入最大等待时间" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :sm="24">
|
||||
<el-form-item label="最大等待次数" prop="maxWaitSize">
|
||||
<el-input v-model="form.maxWaitSize" placeholder="请输入最大等待次数" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
<el-card>
|
||||
<div clot="header" class="clearfix">
|
||||
<span>简介</span>
|
||||
</div>
|
||||
<el-form-item label="介绍" prop="intor">
|
||||
<el-input v-model="form.intor" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
</el-card>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listAccess, getAccess, delAccess, addAccess, updateAccess } from "@/api/system/access";
|
||||
|
||||
export default {
|
||||
name: "Access",
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 数据接入表格数据
|
||||
accessList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
name: null,
|
||||
systemName: null,
|
||||
type: null,
|
||||
host: null,
|
||||
port: null,
|
||||
databaseName: null,
|
||||
connectionParam: null,
|
||||
initNum: null,
|
||||
maxNum: null,
|
||||
maxWaitTime: null,
|
||||
maxWaitSize: null,
|
||||
intor: null
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
types: [{
|
||||
value: 'MySql',
|
||||
lable: 'MySql',
|
||||
},{
|
||||
value: 'Oracle',
|
||||
lable: 'Oracle',
|
||||
},],
|
||||
rules: {
|
||||
name: [
|
||||
{ required: true, message: "接入源名称不能为空", trigger: "blur" }
|
||||
],
|
||||
systemName: [
|
||||
{ required: true, message: "数据来源系统名称不能为空", trigger: "blur" }
|
||||
],
|
||||
type: [
|
||||
{ required: true, message: "数据接入类型不能为空", trigger: "change" }
|
||||
],
|
||||
host: [
|
||||
{ required: true, message: "主机地址不能为空", trigger: "blur" }
|
||||
],
|
||||
port: [
|
||||
{ required: true, message: "端口号不能为空", trigger: "blur" }
|
||||
],
|
||||
databaseName: [
|
||||
{ required: true, message: "数据库名称不能为空", trigger: "blur" }
|
||||
],
|
||||
connectionParam: [
|
||||
{ required: true, message: "数据连接参数不能为空", trigger: "blur" }
|
||||
],
|
||||
initNum: [
|
||||
{ required: true, message: "初始连接数量不能为空", trigger: "blur" }
|
||||
],
|
||||
maxNum: [
|
||||
{ required: true, message: "最大连接数量不能为空", trigger: "blur" }
|
||||
],
|
||||
maxWaitTime: [
|
||||
{ required: true, message: "最大等待时间不能为空", trigger: "blur" }
|
||||
],
|
||||
maxWaitSize: [
|
||||
{ required: true, message: "最大等待次数不能为空", trigger: "blur" }
|
||||
],
|
||||
intor: [
|
||||
{ required: true, message: "简介", trigger: "blur" }
|
||||
],
|
||||
},
|
||||
dataSourceParamList: [
|
||||
{
|
||||
name: null,
|
||||
val: null
|
||||
}
|
||||
]
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
// 添加参数
|
||||
addParam(){
|
||||
this.dataSourceParamList.push({
|
||||
name: null,
|
||||
val: null
|
||||
})
|
||||
},
|
||||
// 删除参数
|
||||
deleteParam(index){
|
||||
if (index != null){
|
||||
this.dataSourceParamList.splice(index, 1);
|
||||
}else {
|
||||
this.dataSourceParamList = []
|
||||
}
|
||||
this.processParam();
|
||||
},
|
||||
// 处理参数
|
||||
processParam(){
|
||||
this.form.connectionParam = this.dataSourceParamList
|
||||
.filter(item => item.name != null || item.val != null)
|
||||
.map(item => {
|
||||
return item.name + "=" + item.val;
|
||||
}).join("&")
|
||||
console.log(this.form.connectionParam)
|
||||
},
|
||||
/** 查询数据接入列表 */
|
||||
getList() {
|
||||
this.loading = true;
|
||||
listAccess(this.queryParams).then(response => {
|
||||
this.accessList = response.data.rows;
|
||||
this.total = response.data.total;
|
||||
this.loading = false;
|
||||
});
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false;
|
||||
this.reset();
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
id: null,
|
||||
name: null,
|
||||
systemName: null,
|
||||
type: null,
|
||||
host: null,
|
||||
port: null,
|
||||
databaseName: null,
|
||||
connectionParam: null,
|
||||
initNum: null,
|
||||
maxNum: null,
|
||||
maxWaitTime: null,
|
||||
maxWaitSize: null,
|
||||
intor: null
|
||||
};
|
||||
this.resetForm("form");
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1;
|
||||
this.getList();
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm");
|
||||
this.handleQuery();
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.id)
|
||||
this.single = selection.length!==1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset();
|
||||
this.open = true;
|
||||
this.title = "添加数据接入";
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset();
|
||||
const id = row.id || this.ids
|
||||
getAccess(id).then(response => {
|
||||
this.form = response.data;
|
||||
this.dataSourceParamList = [];
|
||||
this.form.connectionParam.split("&").forEach(res => {
|
||||
let arr = res.split("=");
|
||||
this.dataSourceParamList.push({
|
||||
name: arr[0],
|
||||
val: arr[1]
|
||||
})
|
||||
})
|
||||
this.open = true;
|
||||
this.title = "修改数据接入";
|
||||
});
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.id != null) {
|
||||
updateAccess(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功");
|
||||
this.open = false;
|
||||
this.getList();
|
||||
});
|
||||
} else {
|
||||
addAccess(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功");
|
||||
this.open = false;
|
||||
this.getList();
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const ids = row.id || this.ids;
|
||||
this.$modal.confirm('是否确认删除数据接入编号为"' + ids + '"的数据项?').then(function() {
|
||||
return delAccess(ids);
|
||||
}).then(() => {
|
||||
this.getList();
|
||||
this.$modal.msgSuccess("删除成功");
|
||||
}).catch(() => {});
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
this.download('system/access/export', {
|
||||
...this.queryParams
|
||||
}, `access_${new Date().getTime()}.xlsx`)
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
|
@ -1,461 +0,0 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="链接名" prop="dataSourceName">
|
||||
<el-input
|
||||
v-model="queryParams.dataSourceName"
|
||||
placeholder="请输入链接名"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="数据库来源系统名称" prop="dataSourceSystemName">
|
||||
<el-input
|
||||
v-model="queryParams.dataSourceSystemName"
|
||||
placeholder="请输入数据库来源系统名称"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="ip地址" prop="ip">
|
||||
<el-input
|
||||
v-model="queryParams.ip"
|
||||
placeholder="请输入ip地址"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="端口号" prop="port">
|
||||
<el-input
|
||||
v-model="queryParams.port"
|
||||
placeholder="请输入端口号"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['system:source:add']"
|
||||
>新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
icon="el-icon-edit"
|
||||
size="mini"
|
||||
:disabled="single"
|
||||
@click="handleUpdate"
|
||||
v-hasPermi="['system:source:edit']"
|
||||
>修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['system:source:remove']"
|
||||
>删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['system:source:export']"
|
||||
>导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="sourceList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="编号" align="center" prop="id" />
|
||||
<el-table-column label="链接名" align="center" prop="dataSourceName" />
|
||||
<el-table-column label="数据库来源系统名称" align="center" prop="dataSourceSystemName" />
|
||||
<el-table-column label="数据库类型" align="center" prop="databaseType" />
|
||||
<el-table-column label="ip地址" align="center" prop="ip" />
|
||||
<el-table-column label="端口号" align="center" prop="port" />
|
||||
<el-table-column label="用户名" align="center" prop="username" />
|
||||
<el-table-column label="密码" align="center" prop="password" />
|
||||
<el-table-column label="类型 '查询'/'存储'" align="center" prop="type" />
|
||||
<el-table-column label="拼接的连接参数" align="center" prop="createBy" />
|
||||
<el-table-column label="拼接的连接配置" align="center" prop="updateBy" />
|
||||
<el-table-column label="状态 'Y'/'N'" align="center" prop="status" />
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:source:edit']"
|
||||
>修改</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['system:source:remove']"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 添加或修改获取信息对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="80%" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-card>
|
||||
<div clot="header" class="clearfix">
|
||||
<span>基础信息</span>
|
||||
</div>
|
||||
<el-row>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="链接名" prop="dataSourceName">
|
||||
<el-input v-model="form.dataSourceName" placeholder="请输入链接名" />
|
||||
</el-form-item>
|
||||
<el-form-item label="数据库来源系统名称" prop="dataSourceSystemName">
|
||||
<el-input v-model="form.dataSourceSystemName" placeholder="请输入数据库来源系统名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="数据库类型" prop="dataSourceSystemName">
|
||||
<el-select v-model="form.databaseType" clearable placeholder="请选择">
|
||||
<el-option key="1" label="mysql" value="1"></el-option>
|
||||
<el-option key="2" label="redis" value="2"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="ip地址" prop="ip">
|
||||
<el-input v-model="form.ip" placeholder="请输入ip地址" />
|
||||
</el-form-item>
|
||||
<el-form-item label="端口号" prop="port">
|
||||
<el-input v-model="form.port" placeholder="请输入端口号" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="用户名" prop="username">
|
||||
<el-input v-model="form.username" placeholder="请输入用户名" />
|
||||
</el-form-item>
|
||||
<el-form-item label="密码" prop="password">
|
||||
<el-input v-model="form.password" placeholder="请输入密码" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="类型" prop="connectionParameter">
|
||||
<el-select v-model="form.type" clearable placeholder="请选择">
|
||||
<el-option key="查询" label="查询" value="查询"></el-option>
|
||||
<el-option key="存储" label="存储" value="存储"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="connectionConfig">
|
||||
<el-radio v-model="form.status" label="Y">Y</el-radio>
|
||||
<el-radio v-model="form.status" label="N">N</el-radio>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
<el-card>
|
||||
<div slot="header" class="clearfix">
|
||||
<span>数据连接参数</span>
|
||||
</div>
|
||||
<el-col :sm="24">
|
||||
<el-form-item label="数据连接参数" prop="connectionParam">
|
||||
<el-input v-model="form.createBy" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-row :gutter="10" style="margin: 10px 0">
|
||||
<el-col :span="2">
|
||||
<el-button type="primary" @click="addParam()">新增参数</el-button>
|
||||
</el-col>
|
||||
<el-col :span="2">
|
||||
<el-button type="danger" @click="deleteParam(null)">清空参数</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="10">
|
||||
<el-col :md="8" :xs="12" style="margin: 10px 0" v-for="(dataSourceParam, dataSourceParamIndex) in dataSourceParamList">
|
||||
<el-col :span="10">
|
||||
<el-input v-model="dataSourceParam.name" placeholder="请输入参数键" @keyup.native="processParam"/>
|
||||
</el-col>
|
||||
<el-col :span="1"><span style="font-size: 28px; margin: 0 3px 0 0;">:</span></el-col>
|
||||
<el-col :span="10">
|
||||
<el-input v-model="dataSourceParam.val" placeholder="请输入参数值" @keyup.native="processParam"/>
|
||||
</el-col>
|
||||
<el-col :span="3">
|
||||
<el-button type="danger" @click="deleteParam(dataSourceParamIndex)">删除</el-button>
|
||||
</el-col>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listSource, getSource, delSource, addSource, updateSource } from "@/api/system/source";
|
||||
|
||||
export default {
|
||||
name: "Source",
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 获取信息表格数据
|
||||
sourceList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
dataSourceName: null,
|
||||
dataSourceSystemName: null,
|
||||
databaseType: null,
|
||||
ip: null,
|
||||
port: null,
|
||||
username: null,
|
||||
password: null,
|
||||
type: null,
|
||||
connectionParameter: null,
|
||||
connectionConfig: null,
|
||||
status: null,
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
dataSourceName: [
|
||||
{ required: true, message: "链接名不能为空", trigger: "blur" }
|
||||
],
|
||||
dataSourceSystemName: [
|
||||
{ required: true, message: "数据库来源系统名称不能为空", trigger: "blur" }
|
||||
],
|
||||
databaseType: [
|
||||
{ required: true, message: "数据库类型不能为空", trigger: "change" }
|
||||
],
|
||||
ip: [
|
||||
{ required: true, message: "ip地址不能为空", trigger: "blur" }
|
||||
],
|
||||
port: [
|
||||
{ required: true, message: "端口号不能为空", trigger: "blur" }
|
||||
],
|
||||
username: [
|
||||
{ required: true, message: "用户名不能为空", trigger: "blur" }
|
||||
],
|
||||
password: [
|
||||
{ required: true, message: "密码不能为空", trigger: "blur" }
|
||||
],
|
||||
type: [
|
||||
{ required: true, message: "类型 '查询'/'存储'不能为空", trigger: "change" }
|
||||
],
|
||||
status: [
|
||||
{ required: true, message: "状态 'Y'/'N'不能为空", trigger: "change" }
|
||||
],
|
||||
createBy: [
|
||||
{ required: true, message: "连接数据参数不能为空", trigger: "change" }
|
||||
]
|
||||
},
|
||||
//条件参数内容
|
||||
dataSourceParamList: [
|
||||
{
|
||||
name: null,
|
||||
val: null
|
||||
}
|
||||
]
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
// 添加参数
|
||||
addParam(){
|
||||
this.dataSourceParamList.push({
|
||||
name: null,
|
||||
val: null
|
||||
})
|
||||
},
|
||||
// 删除参数
|
||||
deleteParam(index){
|
||||
if (index != null){
|
||||
this.dataSourceParamList.splice(index, 1);
|
||||
}else {
|
||||
this.dataSourceParamList = []
|
||||
}
|
||||
this.processParam();
|
||||
},
|
||||
// 处理参数
|
||||
processParam(){
|
||||
this.form.createBy = this.dataSourceParamList
|
||||
.filter(item => item.name != null || item.val != null)
|
||||
.map(item => {
|
||||
return item.name + "=" + item.val;
|
||||
}).join("&")
|
||||
console.log(this.form.connectionParam)
|
||||
},
|
||||
/** 查询获取信息列表 */
|
||||
getList() {
|
||||
this.loading = true;
|
||||
listSource(this.queryParams).then(response => {
|
||||
this.sourceList = response.data.rows;
|
||||
this.total = response.data.total;
|
||||
this.loading = false;
|
||||
});
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false;
|
||||
this.reset();
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
id: null,
|
||||
dataSourceName: null,
|
||||
dataSourceSystemName: null,
|
||||
databaseType: null,
|
||||
ip: null,
|
||||
port: null,
|
||||
username: null,
|
||||
password: null,
|
||||
type: null,
|
||||
connectionParameter: null,
|
||||
connectionConfig: null,
|
||||
status: null,
|
||||
createBy: null,
|
||||
createTime: null,
|
||||
updateBy: null,
|
||||
updateTime: null
|
||||
};
|
||||
this.resetForm("form");
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1;
|
||||
this.getList();
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm");
|
||||
this.handleQuery();
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.id)
|
||||
this.single = selection.length!==1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset();
|
||||
this.open = true;
|
||||
this.title = "添加获取信息";
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset();
|
||||
const id = row.id || this.ids
|
||||
getSource(id).then(response => {
|
||||
this.form = response.data;
|
||||
this.dataSourceParamList = [];
|
||||
this.form.createBy.split("&").forEach(param => {
|
||||
let paramArr = param.split("=");
|
||||
this.dataSourceParamList.push({
|
||||
name: paramArr[0],
|
||||
val: paramArr[1]
|
||||
})
|
||||
})
|
||||
this.open = true;
|
||||
this.title = "修改获取信息";
|
||||
});
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.id != null) {
|
||||
updateSource(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功");
|
||||
this.open = false;
|
||||
this.getList();
|
||||
});
|
||||
} else {
|
||||
addSource(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功");
|
||||
this.open = false;
|
||||
this.getList();
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const ids = row.id || this.ids;
|
||||
this.$modal.confirm('是否确认删除获取信息编号为"' + ids + '"的数据项?').then(function() {
|
||||
return delSource(ids);
|
||||
}).then(() => {
|
||||
this.getList();
|
||||
this.$modal.msgSuccess("删除成功");
|
||||
}).catch(() => {});
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
this.download('system/source/export', {
|
||||
...this.queryParams
|
||||
}, `source_${new Date().getTime()}.xlsx`)
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
|
@ -1,465 +0,0 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="130px">
|
||||
<el-form-item label="接入源名称" prop="name">
|
||||
<el-input
|
||||
v-model="queryParams.name"
|
||||
placeholder="请输入接入源名称"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="数据来源系统名称" prop="systemName">
|
||||
<el-input
|
||||
v-model="queryParams.systemName"
|
||||
placeholder="请输入数据来源系统名称"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="数据库名称" prop="databaseName">
|
||||
<el-input
|
||||
v-model="queryParams.databaseName"
|
||||
placeholder="请输入数据库名称"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['system:access:add']"
|
||||
>新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['system:access:remove']"
|
||||
>删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['system:access:export']"
|
||||
>导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="accessList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="接入源名称" align="center" prop="name" />
|
||||
<el-table-column label="数据来源系统名称" align="center" prop="systemName" />
|
||||
<el-table-column label="主机地址" align="center" prop="host" />
|
||||
<el-table-column label="主机地址" align="center" prop="port" />
|
||||
<el-table-column label="数据接入类型" align="center" prop="type" />
|
||||
<el-table-column label="数据库名称" align="center" prop="databaseName" />
|
||||
<el-table-column label="备注" align="center" prop="remark" />
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:access:edit']"
|
||||
>修改</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['system:access:remove']"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 添加或修改数据接入对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="80%" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="140px">
|
||||
<el-card>
|
||||
<div slot="header" class="clearfix">
|
||||
<span>基础配置信息</span>
|
||||
</div>
|
||||
<el-row>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="接入源名称" prop="name">
|
||||
<el-input v-model="form.name" placeholder="请输入接入源名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="数据来源系统名称" prop="systemName">
|
||||
<el-input v-model="form.systemName" placeholder="请输入数据来源系统名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="主机地址" prop="host">
|
||||
<el-input v-model="form.host" placeholder="请输入主机地址" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="主机地址" prop="port">
|
||||
<el-input v-model="form.port" placeholder="请输入主机地址" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="数据接入类型" prop="type">
|
||||
<el-select style="width: 100%" v-model="form.type">
|
||||
<el-option label="MySql" value="MySql">MySql</el-option>
|
||||
<el-option label="Oracle" value="Oracle">Oracle</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="数据库名称" prop="databaseName">
|
||||
<el-input v-model="form.databaseName" placeholder="请输入数据库名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-card>
|
||||
<div slot="header" class="clearfix">
|
||||
<span>数据连接参数</span>
|
||||
</div>
|
||||
<el-col :sm="24">
|
||||
<el-form-item label="数据连接参数" prop="connectionParam">
|
||||
<el-input v-model="form.connectionParam" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-row :gutter="10" style="margin: 10px 0">
|
||||
<el-col :span="2">
|
||||
<el-button type="primary" @click="addParam()">新增参数</el-button>
|
||||
</el-col>
|
||||
<el-col :span="2">
|
||||
<el-button type="danger" @click="deleteParam(null)">清空参数</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="10">
|
||||
<el-col :md="8" :xs="12" style="margin: 10px 0" v-for="(dataSourceParam, dataSourceParamIndex) in dataSourceParamList">
|
||||
<el-col :span="10">
|
||||
<el-input v-model="dataSourceParam.name" placeholder="请输入参数键" @keyup.native="processParam"/>
|
||||
</el-col>
|
||||
<el-col :span="1"><span style="font-size: 28px; margin: 0 3px 0 0;">:</span></el-col>
|
||||
<el-col :span="10">
|
||||
<el-input v-model="dataSourceParam.val" placeholder="请输入参数值" @keyup.native="processParam"/>
|
||||
</el-col>
|
||||
<el-col :span="3">
|
||||
<el-button type="danger" @click="deleteParam(dataSourceParamIndex)">删除</el-button>
|
||||
</el-col>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
</el-row>
|
||||
</el-card>
|
||||
<el-card style="margin-top: 20px">
|
||||
<div slot="header" class="clearfix">
|
||||
<span>连接池配置</span>
|
||||
</div>
|
||||
<el-row>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="初始连接数量" prop="initNum">
|
||||
<el-input v-model="form.initNum" placeholder="请输入初始连接数量" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="最大连接数量" prop="maxNum">
|
||||
<el-input v-model="form.maxNum" placeholder="请输入最大连接数量" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="最大等待时间" prop="maxWaitTime">
|
||||
<el-input v-model="form.maxWaitTime" placeholder="请输入最大等待时间" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="最大等待次数" prop="maxWaitSize">
|
||||
<el-input v-model="form.maxWaitSize" placeholder="请输入最大等待次数" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
|
||||
<el-card style="margin-top: 20px">
|
||||
<div slot="header" class="clearfix">
|
||||
<span>其他信息</span>
|
||||
</div>
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
</el-card>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
export default {
|
||||
name: "Access",
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 数据接入表格数据
|
||||
accessList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
name: null,
|
||||
systemName: null,
|
||||
databaseName: null
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
name: [
|
||||
{required: true, message: "接入源名称不能为空", trigger: "blur"}
|
||||
],
|
||||
systemName: [
|
||||
{required: true, message: "数据来源系统名称不能为空", trigger: "blur"}
|
||||
],
|
||||
type: [
|
||||
{required: true, message: "数据接入类型不能为空", trigger: "blur"}
|
||||
],
|
||||
host: [
|
||||
{required: true, message: "主机地址不能为空", trigger: "blur"}
|
||||
],
|
||||
port: [
|
||||
{required: true, message: "主机地址不能为空", trigger: "blur"}
|
||||
],
|
||||
databaseName: [
|
||||
{required: true, message: "数据库名称不能为空", trigger: "blur"}
|
||||
],
|
||||
connectionParam: [
|
||||
{required: true, message: "数据连接参数不能为空", trigger: "blur"}
|
||||
],
|
||||
initNum: [
|
||||
{required: true, message: "初始连接数量不能为空", trigger: "blur"}
|
||||
],
|
||||
maxNum: [
|
||||
{required: true, message: "最大连接数量不能为空", trigger: "blur"}
|
||||
],
|
||||
maxWaitTime: [
|
||||
{required: true, message: "最大等待时间不能为空", trigger: "blur"}
|
||||
],
|
||||
maxWaitSize: [
|
||||
{required: true, message: "最大等待次数不能为空", trigger: "blur"}
|
||||
]
|
||||
},
|
||||
// 条件参数内容
|
||||
dataSourceParamList: [
|
||||
{
|
||||
name: null,
|
||||
val: null
|
||||
}
|
||||
]
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
// 添加参数
|
||||
addParam(){
|
||||
this.dataSourceParamList.push({
|
||||
name: null,
|
||||
val: null
|
||||
})
|
||||
},
|
||||
// 删除参数
|
||||
deleteParam(index){
|
||||
if (index != null){
|
||||
this.dataSourceParamList.splice(index, 1);
|
||||
}else {
|
||||
this.dataSourceParamList = []
|
||||
}
|
||||
this.processParam();
|
||||
},
|
||||
// 处理参数
|
||||
processParam(){
|
||||
this.form.connectionParam = this.dataSourceParamList
|
||||
.filter(item => item.name != null || item.val != null)
|
||||
.map(item => {
|
||||
return item.name + "=" + item.val;
|
||||
}).join("&")
|
||||
console.log(this.form.connectionParam)
|
||||
},
|
||||
/** 查询数据接入列表 */
|
||||
getList() {
|
||||
this.loading = true;
|
||||
let response = {
|
||||
"code": 200,
|
||||
"msg": "查询成功",
|
||||
"data": {
|
||||
"total": 1,
|
||||
"rows": [
|
||||
{
|
||||
id: null,
|
||||
name: "测试",
|
||||
type: "MySql",
|
||||
systemName: "云计算业务系统",
|
||||
host: "125.36.25.36",
|
||||
port: 6536,
|
||||
databaseName: "yunjisuan-server",
|
||||
connectionParam: "useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8",
|
||||
initNum: 5,
|
||||
maxNum: 20,
|
||||
maxWaitTime: 3000,
|
||||
maxWaitSize: 3,
|
||||
remark: "云计算业务系统,开展云计算详细业务,教学,作业等工作"
|
||||
}
|
||||
]
|
||||
}
|
||||
};
|
||||
this.accessList = response.data.rows;
|
||||
this.total = response.data.total;
|
||||
this.loading = false;
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false;
|
||||
this.reset();
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
id: null,
|
||||
name: null,
|
||||
type: null,
|
||||
systemName: null,
|
||||
host: null,
|
||||
port: null,
|
||||
databaseName: null,
|
||||
connectionParam: null,
|
||||
initNum: 5,
|
||||
maxNum: 20,
|
||||
maxWaitTime: 3000,
|
||||
maxWaitSize: 3,
|
||||
createBy: null,
|
||||
createTime: null,
|
||||
updateBy: null,
|
||||
updateTime: null,
|
||||
remark: null
|
||||
};
|
||||
this.resetForm("form");
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1;
|
||||
this.getList();
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm");
|
||||
this.handleQuery();
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.id)
|
||||
this.single = selection.length !== 1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset();
|
||||
this.open = true;
|
||||
this.title = "添加数据接入";
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset();
|
||||
this.form = row;
|
||||
this.dataSourceParamList = [];
|
||||
this.form.connectionParam.split("&").forEach(param => {
|
||||
let paramArr = param.split("=");
|
||||
this.dataSourceParamList.push({
|
||||
name: paramArr[0],
|
||||
val: paramArr[1]
|
||||
})
|
||||
})
|
||||
this.open = true;
|
||||
this.title = "修改数据接入";
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.id != null) {
|
||||
this.$modal.msgSuccess("修改成功");
|
||||
this.open = false;
|
||||
} else {
|
||||
this.$modal.msgSuccess("新增成功");
|
||||
this.open = false;
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const ids = row.id || this.ids;
|
||||
this.$modal.confirm('是否确认删除数据接入编号为"' + ids + '"的数据项?').then(() => {
|
||||
this.$modal.msgSuccess("删除成功");
|
||||
});
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
this.$modal.msgSuccess("导出成功");
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
|
@ -1,461 +0,0 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="链接名" prop="dataSourceName">
|
||||
<el-input
|
||||
v-model="queryParams.dataSourceName"
|
||||
placeholder="请输入链接名"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="数据库来源系统名称" prop="dataSourceSystemName">
|
||||
<el-input
|
||||
v-model="queryParams.dataSourceSystemName"
|
||||
placeholder="请输入数据库来源系统名称"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="ip地址" prop="ip">
|
||||
<el-input
|
||||
v-model="queryParams.ip"
|
||||
placeholder="请输入ip地址"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="端口号" prop="port">
|
||||
<el-input
|
||||
v-model="queryParams.port"
|
||||
placeholder="请输入端口号"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['system:source:add']"
|
||||
>新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
icon="el-icon-edit"
|
||||
size="mini"
|
||||
:disabled="single"
|
||||
@click="handleUpdate"
|
||||
v-hasPermi="['system:source:edit']"
|
||||
>修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['system:source:remove']"
|
||||
>删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['system:source:export']"
|
||||
>导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="sourceList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="编号" align="center" prop="id" />
|
||||
<el-table-column label="链接名" align="center" prop="dataSourceName" />
|
||||
<el-table-column label="数据库来源系统名称" align="center" prop="dataSourceSystemName" />
|
||||
<el-table-column label="数据库类型" align="center" prop="databaseType" />
|
||||
<el-table-column label="ip地址" align="center" prop="ip" />
|
||||
<el-table-column label="端口号" align="center" prop="port" />
|
||||
<el-table-column label="用户名" align="center" prop="username" />
|
||||
<el-table-column label="密码" align="center" prop="password" />
|
||||
<el-table-column label="类型 '查询'/'存储'" align="center" prop="type" />
|
||||
<el-table-column label="拼接的连接参数" align="center" prop="createBy" />
|
||||
<el-table-column label="拼接的连接配置" align="center" prop="updateBy" />
|
||||
<el-table-column label="状态 'Y'/'N'" align="center" prop="status" />
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['system:source:edit']"
|
||||
>修改</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['system:source:remove']"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 添加或修改获取信息对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="80%" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-card>
|
||||
<div clot="header" class="clearfix">
|
||||
<span>基础信息</span>
|
||||
</div>
|
||||
<el-row>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="链接名" prop="dataSourceName">
|
||||
<el-input v-model="form.dataSourceName" placeholder="请输入链接名" />
|
||||
</el-form-item>
|
||||
<el-form-item label="数据库来源系统名称" prop="dataSourceSystemName">
|
||||
<el-input v-model="form.dataSourceSystemName" placeholder="请输入数据库来源系统名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="数据库类型" prop="dataSourceSystemName">
|
||||
<el-select v-model="form.databaseType" clearable placeholder="请选择">
|
||||
<el-option key="1" label="mysql" value="1"></el-option>
|
||||
<el-option key="2" label="redis" value="2"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="ip地址" prop="ip">
|
||||
<el-input v-model="form.ip" placeholder="请输入ip地址" />
|
||||
</el-form-item>
|
||||
<el-form-item label="端口号" prop="port">
|
||||
<el-input v-model="form.port" placeholder="请输入端口号" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="用户名" prop="username">
|
||||
<el-input v-model="form.username" placeholder="请输入用户名" />
|
||||
</el-form-item>
|
||||
<el-form-item label="密码" prop="password">
|
||||
<el-input v-model="form.password" placeholder="请输入密码" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="类型" prop="connectionParameter">
|
||||
<el-select v-model="form.type" clearable placeholder="请选择">
|
||||
<el-option key="查询" label="查询" value="查询"></el-option>
|
||||
<el-option key="存储" label="存储" value="存储"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="connectionConfig">
|
||||
<el-radio v-model="form.status" label="Y">Y</el-radio>
|
||||
<el-radio v-model="form.status" label="N">N</el-radio>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
<el-card>
|
||||
<div slot="header" class="clearfix">
|
||||
<span>数据连接参数</span>
|
||||
</div>
|
||||
<el-col :sm="24">
|
||||
<el-form-item label="数据连接参数" prop="connectionParam">
|
||||
<el-input v-model="form.createBy" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-row :gutter="10" style="margin: 10px 0">
|
||||
<el-col :span="2">
|
||||
<el-button type="primary" @click="addParam()">新增参数</el-button>
|
||||
</el-col>
|
||||
<el-col :span="2">
|
||||
<el-button type="danger" @click="deleteParam(null)">清空参数</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="10">
|
||||
<el-col :md="8" :xs="12" style="margin: 10px 0" v-for="(dataSourceParam, dataSourceParamIndex) in dataSourceParamList">
|
||||
<el-col :span="10">
|
||||
<el-input v-model="dataSourceParam.name" placeholder="请输入参数键" @keyup.native="processParam"/>
|
||||
</el-col>
|
||||
<el-col :span="1"><span style="font-size: 28px; margin: 0 3px 0 0;">:</span></el-col>
|
||||
<el-col :span="10">
|
||||
<el-input v-model="dataSourceParam.val" placeholder="请输入参数值" @keyup.native="processParam"/>
|
||||
</el-col>
|
||||
<el-col :span="3">
|
||||
<el-button type="danger" @click="deleteParam(dataSourceParamIndex)">删除</el-button>
|
||||
</el-col>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listSource, getSource, delSource, addSource, updateSource } from "@/api/system/source";
|
||||
|
||||
export default {
|
||||
name: "Source",
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 获取信息表格数据
|
||||
sourceList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
dataSourceName: null,
|
||||
dataSourceSystemName: null,
|
||||
databaseType: null,
|
||||
ip: null,
|
||||
port: null,
|
||||
username: null,
|
||||
password: null,
|
||||
type: null,
|
||||
connectionParameter: null,
|
||||
connectionConfig: null,
|
||||
status: null,
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
dataSourceName: [
|
||||
{ required: true, message: "链接名不能为空", trigger: "blur" }
|
||||
],
|
||||
dataSourceSystemName: [
|
||||
{ required: true, message: "数据库来源系统名称不能为空", trigger: "blur" }
|
||||
],
|
||||
databaseType: [
|
||||
{ required: true, message: "数据库类型不能为空", trigger: "change" }
|
||||
],
|
||||
ip: [
|
||||
{ required: true, message: "ip地址不能为空", trigger: "blur" }
|
||||
],
|
||||
port: [
|
||||
{ required: true, message: "端口号不能为空", trigger: "blur" }
|
||||
],
|
||||
username: [
|
||||
{ required: true, message: "用户名不能为空", trigger: "blur" }
|
||||
],
|
||||
password: [
|
||||
{ required: true, message: "密码不能为空", trigger: "blur" }
|
||||
],
|
||||
type: [
|
||||
{ required: true, message: "类型 '查询'/'存储'不能为空", trigger: "change" }
|
||||
],
|
||||
status: [
|
||||
{ required: true, message: "状态 'Y'/'N'不能为空", trigger: "change" }
|
||||
],
|
||||
createBy: [
|
||||
{ required: true, message: "连接数据参数不能为空", trigger: "change" }
|
||||
]
|
||||
},
|
||||
//条件参数内容
|
||||
dataSourceParamList: [
|
||||
{
|
||||
name: null,
|
||||
val: null
|
||||
}
|
||||
]
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
// 添加参数
|
||||
addParam(){
|
||||
this.dataSourceParamList.push({
|
||||
name: null,
|
||||
val: null
|
||||
})
|
||||
},
|
||||
// 删除参数
|
||||
deleteParam(index){
|
||||
if (index != null){
|
||||
this.dataSourceParamList.splice(index, 1);
|
||||
}else {
|
||||
this.dataSourceParamList = []
|
||||
}
|
||||
this.processParam();
|
||||
},
|
||||
// 处理参数
|
||||
processParam(){
|
||||
this.form.createBy = this.dataSourceParamList
|
||||
.filter(item => item.name != null || item.val != null)
|
||||
.map(item => {
|
||||
return item.name + "=" + item.val;
|
||||
}).join("&")
|
||||
console.log(this.form.connectionParam)
|
||||
},
|
||||
/** 查询获取信息列表 */
|
||||
getList() {
|
||||
this.loading = true;
|
||||
listSource(this.queryParams).then(response => {
|
||||
this.sourceList = response.data.rows;
|
||||
this.total = response.data.total;
|
||||
this.loading = false;
|
||||
});
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false;
|
||||
this.reset();
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
id: null,
|
||||
dataSourceName: null,
|
||||
dataSourceSystemName: null,
|
||||
databaseType: null,
|
||||
ip: null,
|
||||
port: null,
|
||||
username: null,
|
||||
password: null,
|
||||
type: null,
|
||||
connectionParameter: null,
|
||||
connectionConfig: null,
|
||||
status: null,
|
||||
createBy: null,
|
||||
createTime: null,
|
||||
updateBy: null,
|
||||
updateTime: null
|
||||
};
|
||||
this.resetForm("form");
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1;
|
||||
this.getList();
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm");
|
||||
this.handleQuery();
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.id)
|
||||
this.single = selection.length!==1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset();
|
||||
this.open = true;
|
||||
this.title = "添加获取信息";
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset();
|
||||
const id = row.id || this.ids
|
||||
getSource(id).then(response => {
|
||||
this.form = response.data;
|
||||
this.dataSourceParamList = [];
|
||||
this.form.createBy.split("&").forEach(param => {
|
||||
let paramArr = param.split("=");
|
||||
this.dataSourceParamList.push({
|
||||
name: paramArr[0],
|
||||
val: paramArr[1]
|
||||
})
|
||||
})
|
||||
this.open = true;
|
||||
this.title = "修改获取信息";
|
||||
});
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.id != null) {
|
||||
updateSource(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功");
|
||||
this.open = false;
|
||||
this.getList();
|
||||
});
|
||||
} else {
|
||||
addSource(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功");
|
||||
this.open = false;
|
||||
this.getList();
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const ids = row.id || this.ids;
|
||||
this.$modal.confirm('是否确认删除获取信息编号为"' + ids + '"的数据项?').then(function() {
|
||||
return delSource(ids);
|
||||
}).then(() => {
|
||||
this.getList();
|
||||
this.$modal.msgSuccess("删除成功");
|
||||
}).catch(() => {});
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
this.download('system/source/export', {
|
||||
...this.queryParams
|
||||
}, `source_${new Date().getTime()}.xlsx`)
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
|
@ -0,0 +1,415 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<span v-if="enterprise == null">
|
||||
|
||||
</span>
|
||||
<span v-else>
|
||||
<span v-if="enterprise.authentication != 1 ">
|
||||
<h2>企业信息尚未完善,请先补充完善后通知管理员审核</h2>
|
||||
<!-- 添加或修改企业对话框 -->
|
||||
<el-dialog title="补充企业信息" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="enterprise" :rules="enterprise" label-width="80px">
|
||||
<el-form-item label="企业名称" prop="enterpriseName">
|
||||
<el-input v-model="enterprise.enterpriseName" placeholder="请输入企业名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="法定代表人" prop="legalPerson">
|
||||
<el-input v-model="enterprise.legalPerson" placeholder="请输入法定代表人" />
|
||||
</el-form-item>
|
||||
<el-form-item label="经营执照凭证号码" prop="businessLincenseNumber">
|
||||
<el-input v-model="enterprise.businessLincenseNumber" placeholder="请输入经营执照凭证号码" />
|
||||
</el-form-item>
|
||||
<el-form-item label="企业成立日期" prop="estabinessDate">
|
||||
<el-date-picker clearable
|
||||
v-model="enterprise.estabinessDate"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择企业成立日期">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="经营范围" prop="businessScope">
|
||||
<el-input v-model="enterprise.businessScope" placeholder="请输入经营范围" />
|
||||
</el-form-item>
|
||||
<el-form-item label="注册地址" prop="address">
|
||||
<el-input v-model="enterprise.address" placeholder="请输入注册地址" />
|
||||
</el-form-item>
|
||||
<el-form-item label="企业联系方式" prop="contactPhone">
|
||||
<el-input v-model="enterprise.contactPhone" placeholder="请输入企业联系方式" />
|
||||
</el-form-item>
|
||||
<el-form-item label="公司邮箱" prop="email">
|
||||
<el-input v-model="enterprise.email" placeholder="请输入公司邮箱" />
|
||||
</el-form-item>
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="enterprise.remark" placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="open = false">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</span>
|
||||
<span v-else>
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="车辆识别码" prop="vin">
|
||||
<el-input
|
||||
v-model="queryParams.vin"
|
||||
placeholder="请输入车辆识别码"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="车牌号" prop="registrationNumber">
|
||||
<el-input
|
||||
v-model="queryParams.registrationNumber"
|
||||
placeholder="请输入车牌号"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
>新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
icon="el-icon-edit"
|
||||
size="mini"
|
||||
:disabled="single"
|
||||
@click="handleUpdate"
|
||||
>修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
>删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport"
|
||||
>导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="carList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="车辆唯一标识" align="center" prop="carId" />
|
||||
<el-table-column label="车辆识别码" align="center" prop="vin" />
|
||||
<el-table-column label="品牌" align="center" prop="brand" />
|
||||
<el-table-column label="型号" align="center" prop="model" />
|
||||
<el-table-column label="生产年份" align="center" prop="manufactureYear" />
|
||||
<el-table-column label="车辆颜色" align="center" prop="color" />
|
||||
<el-table-column label="发动机排量" align="center" prop="engineCapacity" />
|
||||
<el-table-column label="燃油类型" align="center" prop="fuelType" />
|
||||
<el-table-column label="变速器类型" align="center" prop="transmission" />
|
||||
<el-table-column label="驱动类型" align="center" prop="driveType" />
|
||||
<el-table-column label="注册日期" align="center" prop="registrationDate" width="180">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.registrationDate, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="车牌号" align="center" prop="registrationNumber" />
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
>修改</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="查看服务">
|
||||
<span slot-scope="scope">
|
||||
<el-button type="text" @click="fence(scope.row.carId)">查看围栏</el-button>
|
||||
<el-button type="text" @click="breakdown(scope.row.vin)">故障报警</el-button>
|
||||
<el-button type="text" @click="warning(scope.row.vin)">指标预警</el-button>
|
||||
</span>
|
||||
</el-table-column>
|
||||
<el-table-column label="查看车辆检测规则">
|
||||
<span slot-scope="scope">
|
||||
<el-button type="text" @click="windows(scope.row.vin)">滑窗规则</el-button>
|
||||
<el-button type="text" @click="readFormat(scope.row.vin)">车辆报文</el-button>
|
||||
</span>
|
||||
</el-table-column>
|
||||
<el-table-column label="查看实时坐标">
|
||||
<span slot-scope="scope">
|
||||
<el-button type="text" @click="realTime(scope.row.vin)">查看实时坐标</el-button>
|
||||
</span>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 添加或修改车辆信息对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="品牌" prop="brand">
|
||||
<el-input v-model="form.brand" placeholder="请输入品牌" />
|
||||
</el-form-item>
|
||||
<el-form-item label="型号" prop="model">
|
||||
<el-input v-model="form.model" placeholder="请输入型号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="生产年份" prop="manufactureYear">
|
||||
<el-input v-model="form.manufactureYear" placeholder="请输入生产年份" />
|
||||
</el-form-item>
|
||||
<el-form-item label="车辆颜色" prop="color">
|
||||
<el-input v-model="form.color" placeholder="请输入车辆颜色" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发动机排量" prop="engineCapacity">
|
||||
<el-input v-model="form.engineCapacity" placeholder="请输入发动机排量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="燃油类型" prop="fuelType">
|
||||
<el-select v-model="form.fuelType">
|
||||
<el-option label="Petrol" value="Petrol"></el-option>
|
||||
<el-option label="Diesel" value="Diesel"></el-option>
|
||||
<el-option label="Electric" value="Electric"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="变速器类型" prop="transmission">
|
||||
<el-select v-model="form.transmission">
|
||||
<el-option label="Automatic" value="Automatic"></el-option>
|
||||
<el-option label="Manual" value="Manual"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="驱动类型" prop="driveType">
|
||||
<el-select v-model="form.driveType">
|
||||
<el-option label="FWD" value="FWD"></el-option>
|
||||
<el-option label="RWD" value="RWD"></el-option>
|
||||
<el-option label="AWD" value="AWD"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="注册日期" prop="registrationDate">
|
||||
<el-date-picker clearable
|
||||
v-model="form.registrationDate"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择注册日期">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="车牌号" prop="registrationNumber">
|
||||
<el-input v-model="form.registrationNumber" placeholder="请输入车牌号" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listCar, getCar, delCar, addCar, updateCar, query } from "@/api/goods/car";
|
||||
import {listEnterprise} from "@/api/goods/business";
|
||||
|
||||
export default {
|
||||
name: "Car",
|
||||
data() {
|
||||
return {
|
||||
enterprise: {},
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 车辆信息表格数据
|
||||
carList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
vin: null,
|
||||
registrationNumber: null,
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
}
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
bulk() {
|
||||
alert("信息已发送,等待处理")
|
||||
},
|
||||
fence(carId) {// 查看围栏
|
||||
this.$router.push({path: '/client/sever/fence',query:{carId:carId}})
|
||||
},
|
||||
breakdown(vin) {// 查看故障报警
|
||||
this.$router.push({path: '/client/sever/breakdown',query:{vin:vin}})
|
||||
},
|
||||
warning(vin) {// 查看指标预警
|
||||
this.$router.push({path: '/client/sever/forewarning',query:{vin:vin}})
|
||||
},
|
||||
realTime(vin) {// 查看实时坐标
|
||||
this.$router.push({path: '/client/sever/random',query:{vin:vin}})
|
||||
},
|
||||
readFormat(vin) {// 查看车辆报文
|
||||
this.$router.push({path: '/client/sever/message',query:{vin:vin}})
|
||||
},
|
||||
windows(vin) {// 查看滑窗规则
|
||||
this.$router.push({path: '/client/sever/window',query:{vin:vin}})
|
||||
},
|
||||
/** 查询车辆信息列表 */
|
||||
getList() {
|
||||
this.loading = true;
|
||||
listCar(this.queryParams).then(response => {
|
||||
console.log(response)
|
||||
this.carList = response.data.rows;
|
||||
this.total = response.data.total;
|
||||
this.loading = false;
|
||||
});
|
||||
listEnterprise().then(res => {
|
||||
this.enterprise = res.data
|
||||
console.log(res.data)
|
||||
})
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false;
|
||||
this.reset();
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
carId: null,
|
||||
vin: null,
|
||||
brand: null,
|
||||
model: null,
|
||||
manufactureYear: null,
|
||||
bodyType: null,
|
||||
color: null,
|
||||
engineCapacity: null,
|
||||
fuelType: null,
|
||||
transmission: null,
|
||||
driveType: null,
|
||||
mileage: null,
|
||||
registrationDate: null,
|
||||
registrationNumber: null,
|
||||
ownerId: null
|
||||
};
|
||||
this.resetForm("form");
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1;
|
||||
this.getList();
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm");
|
||||
this.handleQuery();
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.carId)
|
||||
this.single = selection.length!==1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset();
|
||||
this.open = true;
|
||||
this.title = "添加车辆信息";
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset();
|
||||
const carId = row.carId || this.ids
|
||||
getCar(carId).then(response => {
|
||||
this.form = response.data;
|
||||
this.open = true;
|
||||
this.title = "修改车辆信息";
|
||||
});
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.carId != null) {
|
||||
updateCar(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功");
|
||||
this.open = false;
|
||||
this.getList();
|
||||
});
|
||||
} else {
|
||||
addCar(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功");
|
||||
this.open = false;
|
||||
this.getList();
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const carIds = row.carId || this.ids;
|
||||
this.$modal.confirm('是否确认删除车辆信息编号为"' + carIds + '"的数据项?').then(function() {
|
||||
return delCar(carIds);
|
||||
}).then(() => {
|
||||
this.getList();
|
||||
this.$modal.msgSuccess("删除成功");
|
||||
}).catch(() => {});
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
this.download('rule/car/export', {
|
||||
...this.queryParams
|
||||
}, `car_${new Date().getTime()}.xlsx`)
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
|
@ -0,0 +1,148 @@
|
|||
<template>
|
||||
<div>
|
||||
<span v-if="enterprise == null">
|
||||
|
||||
</span>
|
||||
<span v-else>
|
||||
<span v-if="enterprise.authentication != 1 ">
|
||||
<h2>企业信息尚未完善,请先补充完善后通知管理员审核</h2>
|
||||
<el-button @click="bulk">通知补充企业信息</el-button>
|
||||
|
||||
<!-- 添加或修改企业对话框 -->
|
||||
<el-dialog title="补充企业信息" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="enterprise" :rules="rules" label-width="80px">
|
||||
<el-form-item label="企业名称" prop="enterpriseName">
|
||||
<el-input v-model="enterprise.enterpriseName" placeholder="请输入企业名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="法定代表人" prop="legalPerson">
|
||||
<el-input v-model="enterprise.legalPerson" placeholder="请输入法定代表人" />
|
||||
</el-form-item>
|
||||
<el-form-item label="经营执照凭证号码" prop="businessLincenseNumber">
|
||||
<el-input v-model="enterprise.businessLincenseNumber" placeholder="请输入经营执照凭证号码" />
|
||||
</el-form-item>
|
||||
<el-form-item label="企业成立日期" prop="estabinessDate">
|
||||
<el-date-picker clearable
|
||||
v-model="enterprise.estabinessDate"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择企业成立日期">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="经营范围" prop="businessScope">
|
||||
<el-input v-model="enterprise.businessScope" placeholder="请输入经营范围" />
|
||||
</el-form-item>
|
||||
<el-form-item label="注册地址" prop="address">
|
||||
<el-input v-model="enterprise.address" placeholder="请输入注册地址" />
|
||||
</el-form-item>
|
||||
<el-form-item label="企业联系方式" prop="contactPhone">
|
||||
<el-input v-model="enterprise.contactPhone" placeholder="请输入企业联系方式" />
|
||||
</el-form-item>
|
||||
<el-form-item label="公司邮箱" prop="email">
|
||||
<el-input v-model="enterprise.email" placeholder="请输入公司邮箱" />
|
||||
</el-form-item>
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="enterprise.remark" placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="open = false">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</span>
|
||||
<span v-else>
|
||||
<el-descriptions class="margin-top" title="企业详情" :data="enterprise" :column="3" :size="size" border>
|
||||
<el-descriptions-item label="企业名称">{{enterprise.enterpriseName}}</el-descriptions-item>
|
||||
<el-descriptions-item label="法定代表人">{{enterprise.legalPerson}}</el-descriptions-item>
|
||||
<el-descriptions-item label="企业联系方式">{{enterprise.contactPhone}}</el-descriptions-item>
|
||||
<el-descriptions-item label="公司邮箱">{{enterprise.email}}</el-descriptions-item>
|
||||
<el-descriptions-item label="是否认证">
|
||||
<span v-if="enterprise.authentication == 0">未认证</span>
|
||||
<span v-if="enterprise.authentication == 1">已认证</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="服务等级">
|
||||
<span v-if="enterprise.serviceLevel === 0">初级</span>
|
||||
<span v-if="enterprise.serviceLevel === 1">中级</span>
|
||||
<span v-if="enterprise.serviceLevel === 2">高级</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="备注">{{enterprise.remark}}</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</span>
|
||||
</span>
|
||||
<el-button @click="stand()">查看</el-button>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listEnterprise } from "@/api/goods/business";
|
||||
import { standard } from "@/api/goods/forewarn";
|
||||
import { getEnterprise, updateEnterprise } from "@/api/goods/enterprise";
|
||||
// 这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等),
|
||||
// 例如:import 《组件名称》 from '《组件路径》,
|
||||
export default {
|
||||
// import引入的组件需要注入到对象中才能使用"
|
||||
components: {},
|
||||
props: {},
|
||||
data() {
|
||||
// 这里存放数据"
|
||||
return {
|
||||
open: false,
|
||||
enterprise:{},
|
||||
// 表单校验
|
||||
rules: {}
|
||||
}
|
||||
},
|
||||
// 计算属性 类似于data概念",
|
||||
computed: {},
|
||||
// 监控data中的数据变化",
|
||||
watch: {},
|
||||
// 方法集合",
|
||||
methods: {
|
||||
bulk() {
|
||||
this.open = true
|
||||
},
|
||||
getInfo() {
|
||||
listEnterprise().then(res => {
|
||||
this.enterprise = res.data
|
||||
console.log(res.data)
|
||||
})
|
||||
},
|
||||
stand() {
|
||||
standard().then(res => {
|
||||
console.log(res)
|
||||
})
|
||||
},
|
||||
submitForm() {
|
||||
updateEnterprise(this.enterprise).then(res => {
|
||||
this.$message.success("申请已发送,请审核")
|
||||
this.open = false
|
||||
this.getInfo();
|
||||
})
|
||||
}
|
||||
},
|
||||
// 生命周期 - 创建完成(可以访问当前this实例)",
|
||||
created() {
|
||||
this.getInfo()
|
||||
},
|
||||
// 生命周期 - 挂载完成(可以访问DOM元素)",
|
||||
mounted() {
|
||||
},
|
||||
beforeCreate() {
|
||||
}, // 生命周期 - 创建之前",
|
||||
beforeMount() {
|
||||
}, // 生命周期 - 挂载之前",
|
||||
beforeUpdate() {
|
||||
}, // 生命周期 - 更新之前",
|
||||
updated() {
|
||||
}, // 生命周期 - 更新之后",
|
||||
beforeDestroy() {
|
||||
}, // 生命周期 - 销毁之前",
|
||||
destroyed() {
|
||||
}, // 生命周期 - 销毁完成",
|
||||
activated() {
|
||||
} // 如果页面有keep-alive缓存功能,这个函数会触发",
|
||||
}
|
||||
</script>
|
||||
<style scoped>
|
||||
|
||||
</style>
|
|
@ -0,0 +1,297 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="故障码" prop="faultCode">
|
||||
<el-input
|
||||
v-model="queryParams.vin"
|
||||
placeholder="请输入故障码"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="故障产生时间" prop="faultStartTime">
|
||||
<el-date-picker clearable
|
||||
v-model="queryParams.faultStartTime"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd HH:mm:ss"
|
||||
placeholder="请开始时间区间">
|
||||
</el-date-picker>-------------
|
||||
<el-date-picker clearable
|
||||
v-model="queryParams.faultEndTime"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd HH:mm:ss"
|
||||
placeholder="请结束时间区间">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-form :inline="true" :model="formInline" class="demo-form-inline">
|
||||
<el-date-picker
|
||||
v-model="formInline.faultStartTime"
|
||||
type="datetime"
|
||||
placeholder="选择日期时间"
|
||||
align="right">
|
||||
</el-date-picker>-----
|
||||
<el-date-picker
|
||||
v-model="formInline.faultEndTime"
|
||||
type="datetime"
|
||||
placeholder="选择日期时间"
|
||||
align="right">
|
||||
</el-date-picker>
|
||||
<el-button @click="look()">观看</el-button>
|
||||
</el-form>
|
||||
|
||||
<!-- <el-button @click="par()">柱状图</el-button>-->
|
||||
<!-- <el-button @click="pie()">饼状图</el-button>-->
|
||||
<el-table v-loading="loading" :data="breakdownList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="主键" align="center" prop="id" />
|
||||
<el-table-column label="故障码" align="center" prop="faultCode" />
|
||||
<el-table-column label="车辆标识" align="center" prop="vin" />
|
||||
<el-table-column label="故障状态" align="center" prop="faultState" />
|
||||
<el-table-column label="故障产生时间" align="center" prop="faultStartTime" width="180">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.faultStartTime, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="故障解决时间" align="center" prop="faultEndTime" width="180">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.faultEndTime, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="故障等级" align="center" prop="faultLevel" width="180"></el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
<div class="container">
|
||||
<div id="main" rel="stylesheet" style="height: 400px;width: 400px;display: flex;
|
||||
align-items: center;justify-content: center"></div>
|
||||
<div id="main2" rel="stylesheet" style="height: 400px;width: 400px;display: flex;
|
||||
align-items: center;justify-content: center"></div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listBreakdown, pies } from "@/api/goods/breakdown";
|
||||
import * as echarts from "echarts";
|
||||
// 这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等),
|
||||
// 例如:import 《组件名称》 from '《组件路径》,
|
||||
export default {
|
||||
// import引入的组件需要注入到对象中才能使用"
|
||||
components: {},
|
||||
props: {},
|
||||
data() {
|
||||
// 这里存放数据"
|
||||
return {
|
||||
a: [],
|
||||
b: [],
|
||||
c: [],
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
vin: this.$route.query.vin,
|
||||
faultStartTime: null,
|
||||
faultEndTime: null
|
||||
},
|
||||
formInline: {
|
||||
vin: this.$route.query.vin,
|
||||
faultStartTime: null,
|
||||
faultEndTime: null
|
||||
},
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1;
|
||||
this.getList();
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm");
|
||||
this.handleQuery();
|
||||
},
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 故障列表
|
||||
breakdownList: [],
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.id)
|
||||
this.single = selection.length!==1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
}
|
||||
},
|
||||
// 计算属性 类似于data概念",
|
||||
computed: {},
|
||||
// 监控data中的数据变化",
|
||||
watch: {},
|
||||
// 方法集合",
|
||||
methods: {
|
||||
look() {
|
||||
this.getPers()
|
||||
this.par()
|
||||
this.pie()
|
||||
},
|
||||
/** 查询企业列表 */
|
||||
getList() {
|
||||
this.loading = true;
|
||||
listBreakdown(this.queryParams).then(response => {
|
||||
this.breakdownList = response.data.rows;
|
||||
this.total = response.data.total;
|
||||
this.loading = false;
|
||||
console.log(response)
|
||||
});
|
||||
},
|
||||
getPers() {
|
||||
pies(this.formInline).then(res => {
|
||||
let a1 = []
|
||||
let b1 = []
|
||||
res.data.forEach(ren => {
|
||||
a1.push(ren.name)
|
||||
b1.push(ren.value)
|
||||
this.a = a1;
|
||||
this.b = b1;
|
||||
})
|
||||
this.c = res.data
|
||||
})
|
||||
|
||||
|
||||
},
|
||||
//柱状图
|
||||
par() {
|
||||
// 基本柱状图
|
||||
const option = {
|
||||
title: {
|
||||
text: '平面展示'
|
||||
},
|
||||
tooltip: {
|
||||
trigger: 'axis',
|
||||
axisPointer: {
|
||||
type: 'shadow'
|
||||
}
|
||||
},
|
||||
legend: {},
|
||||
grid: {
|
||||
left: '3%',
|
||||
right: '4%',
|
||||
bottom: '3%',
|
||||
containLabel: true
|
||||
},
|
||||
xAxis: {
|
||||
type: 'value',
|
||||
boundaryGap: [0, 0.01]
|
||||
},
|
||||
yAxis: {
|
||||
type: 'category',
|
||||
data: this.a
|
||||
},
|
||||
series: [
|
||||
{
|
||||
type: 'bar',
|
||||
data: this.b,
|
||||
// itemStyle: {
|
||||
// color:
|
||||
// }
|
||||
},
|
||||
]
|
||||
};
|
||||
|
||||
const myChart = echarts.init(document.getElementById("main"));
|
||||
myChart.setOption(option);
|
||||
//随着屏幕大小调节图表
|
||||
// window.addEventListener("resize", () => {
|
||||
// myChart.resize();
|
||||
// });
|
||||
},
|
||||
//饼状图
|
||||
pie() {
|
||||
const option = {
|
||||
title: {
|
||||
text: '百分比展示',
|
||||
subtext: '占比',
|
||||
left: 'center'
|
||||
},
|
||||
tooltip: {
|
||||
trigger: 'item'
|
||||
},
|
||||
legend: {
|
||||
orient: 'vertical',
|
||||
left: 'left'
|
||||
},
|
||||
series: [
|
||||
{
|
||||
name: 'Access From',
|
||||
type: 'pie',
|
||||
radius: '50%',
|
||||
data: this.c
|
||||
,
|
||||
emphasis: {
|
||||
itemStyle: {
|
||||
shadowBlur: 10,
|
||||
shadowOffsetX: 0,
|
||||
shadowColor: 'rgba(0, 0, 0, 0.5)'
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
const myChart = echarts.init(document.getElementById("main2"));
|
||||
myChart.setOption(option);
|
||||
}
|
||||
},
|
||||
// 生命周期 - 创建完成(可以访问当前this实例)",
|
||||
created() {
|
||||
},
|
||||
// 生命周期 - 挂载完成(可以访问DOM元素)",
|
||||
mounted() {
|
||||
this.getList()
|
||||
this.getPers()
|
||||
},
|
||||
beforeCreate() {
|
||||
}, // 生命周期 - 创建之前",
|
||||
beforeMount() {
|
||||
}, // 生命周期 - 挂载之前",
|
||||
beforeUpdate() {
|
||||
}, // 生命周期 - 更新之前",
|
||||
updated() {
|
||||
}, // 生命周期 - 更新之后",
|
||||
beforeDestroy() {
|
||||
}, // 生命周期 - 销毁之前",
|
||||
destroyed() {
|
||||
}, // 生命周期 - 销毁完成",
|
||||
activated() {
|
||||
} // 如果页面有keep-alive缓存功能,这个函数会触发",
|
||||
}
|
||||
</script>
|
||||
<style scoped>
|
||||
.container {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: start;
|
||||
}
|
||||
|
||||
.centered-box {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
/* 如果需要间隔,可以添加 margin */
|
||||
margin-right: 10px; /* 右侧间隔,最后一个元素可以设置为0或者使用margin-left在左侧元素上 */
|
||||
}
|
||||
|
||||
</style>
|
|
@ -0,0 +1,135 @@
|
|||
<template>
|
||||
<div>
|
||||
<el-button type="text" @click="addGroups(dialogFormVisible = true)">增加围栏组</el-button>
|
||||
<el-button type="text" @click="mapFence()">增加围栏</el-button>
|
||||
<el-table :data="fenceGroups">
|
||||
<el-table-column prop="groupsName" label="围栏组名称"></el-table-column>
|
||||
<el-table-column prop="fenceName" label="围栏名称"></el-table-column>
|
||||
<el-table-column prop="fenceType" label="围栏类型"></el-table-column>
|
||||
<el-table-column prop="eventType" label="驶入驶出">
|
||||
<span slot-scope="scope">
|
||||
<span v-if="scope.row.eventType === 'Y'">驶入</span>
|
||||
<span v-if="scope.row.eventType === 'N'">驶出</span>
|
||||
</span>
|
||||
</el-table-column>
|
||||
<el-table-column prop="staut" label="围栏状态">
|
||||
<span slot-scope="scope">
|
||||
<span v-if="scope.row.staut === 'Y'">启用</span>
|
||||
<span v-if="scope.row.staut === 'N'">禁止</span>
|
||||
</span>
|
||||
</el-table-column>
|
||||
<el-table-column prop="polygonPoints" label="坐标"></el-table-column>
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<span slot-scope="scope">
|
||||
<span v-if="scope.row.staut === 'Y'">
|
||||
<el-button type="text" icon="el-icon-edit" @click="query(scope.row.fenceId)">禁止</el-button>
|
||||
</span>
|
||||
<span v-if="scope.row.staut === 'N'">
|
||||
<el-button type="text" icon="el-icon-edit" @click="query(scope.row.fenceId)">启用</el-button>
|
||||
</span>
|
||||
<br>
|
||||
<el-button size="mini" icon="el-icon-delete" type="text" @click="del(scope.row.fenceId)">删除</el-button>
|
||||
</span>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<el-dialog title="新增围栏组" :visible.sync="dialogFormVisible">
|
||||
<el-form :model="groups">
|
||||
<el-form-item label="围栏名称" :label-width="formLabelWidth">
|
||||
<el-input v-model="groups.groupsName" autocomplete="off"></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="dialogFormVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="dialogFormVisible = false">确 定</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {selectFenceGroupsById, deleteFence, updateFence} from "@/api/goods/map";
|
||||
// 这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等),
|
||||
// 例如:import 《组件名称》 from '《组件路径》,
|
||||
export default {
|
||||
// import引入的组件需要注入到对象中才能使用"
|
||||
components: {},
|
||||
props: {},
|
||||
data() {
|
||||
// 这里存放数据"
|
||||
return {
|
||||
carId: this.$route.query.carId,
|
||||
groups: {
|
||||
carId: this.$route.query.carId,
|
||||
groupsName: ''
|
||||
},
|
||||
fenceGroups:[],
|
||||
dialogFormVisible: false,
|
||||
formLabelWidth: '120px'
|
||||
}
|
||||
},
|
||||
// 计算属性 类似于data概念",
|
||||
computed: {},
|
||||
// 监控data中的数据变化",
|
||||
watch: {},
|
||||
// 方法集合",
|
||||
methods: {
|
||||
//初始化
|
||||
getInfo() {
|
||||
selectFenceGroupsById(this.carId).then(res => {
|
||||
this.fenceGroups = res.data
|
||||
console.log(1)
|
||||
console.log(this.fenceGroups)
|
||||
})
|
||||
},
|
||||
//删除
|
||||
del(fenceId) {
|
||||
deleteFence(fenceId).then(res => {
|
||||
this.$message.success(res.data)
|
||||
this.getInfo()
|
||||
})
|
||||
},
|
||||
// 添加
|
||||
addGroups() {},
|
||||
//前往地图增加围栏
|
||||
add(groupsId) {
|
||||
// this.$router.push({path:'/client/sever/map',query:{groupsId:groupsId}})
|
||||
},
|
||||
//修改围栏状态
|
||||
query(fenceId) {
|
||||
updateFence(fenceId).then(res => {
|
||||
this.$message.success(res.data)
|
||||
this.getInfo()
|
||||
})
|
||||
},
|
||||
//围栏
|
||||
mapFence() {
|
||||
this.$router.push({path: '/client/sever/map'})
|
||||
}
|
||||
},
|
||||
// 生命周期 - 创建完成(可以访问当前this实例)",
|
||||
created() {
|
||||
this.getInfo()
|
||||
},
|
||||
// 生命周期 - 挂载完成(可以访问DOM元素)",
|
||||
mounted() {
|
||||
},
|
||||
beforeCreate() {
|
||||
}, // 生命周期 - 创建之前",
|
||||
beforeMount() {
|
||||
}, // 生命周期 - 挂载之前",
|
||||
beforeUpdate() {
|
||||
}, // 生命周期 - 更新之前",
|
||||
updated() {
|
||||
}, // 生命周期 - 更新之后",
|
||||
beforeDestroy() {
|
||||
}, // 生命周期 - 销毁之前",
|
||||
destroyed() {
|
||||
}, // 生命周期 - 销毁完成",
|
||||
activated() {
|
||||
} // 如果页面有keep-alive缓存功能,这个函数会触发",
|
||||
}
|
||||
</script>
|
||||
<style scoped>
|
||||
|
||||
</style>
|
|
@ -0,0 +1,64 @@
|
|||
<template>
|
||||
<div>
|
||||
<el-table :data="warningInfo">
|
||||
<el-table-column prop="vin" label="车辆编码"></el-table-column>
|
||||
<el-table-column prop="field" label="预警编码"></el-table-column>
|
||||
<el-table-column prop="abnormalType" label="异常状态"></el-table-column>
|
||||
<el-table-column prop="time" label="预警时间"></el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listWarningInfoById } from "@/api/goods/forewarn";
|
||||
// 这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等),
|
||||
// 例如:import 《组件名称》 from '《组件路径》,
|
||||
export default {
|
||||
// import引入的组件需要注入到对象中才能使用"
|
||||
components: {},
|
||||
props: {},
|
||||
data() {
|
||||
// 这里存放数据"
|
||||
return {
|
||||
vin: this.$route.query.vin,
|
||||
warningInfo: []
|
||||
}
|
||||
},
|
||||
// 计算属性 类似于data概念",
|
||||
computed: {},
|
||||
// 监控data中的数据变化",
|
||||
watch: {},
|
||||
// 方法集合",
|
||||
methods: {
|
||||
getInfo() {
|
||||
listWarningInfoById(this.vin).then(res => {
|
||||
this.warningInfo = res.data
|
||||
})
|
||||
}
|
||||
},
|
||||
// 生命周期 - 创建完成(可以访问当前this实例)",
|
||||
created() {
|
||||
this.getInfo()
|
||||
},
|
||||
// 生命周期 - 挂载完成(可以访问DOM元素)",
|
||||
mounted() {
|
||||
},
|
||||
beforeCreate() {
|
||||
}, // 生命周期 - 创建之前",
|
||||
beforeMount() {
|
||||
}, // 生命周期 - 挂载之前",
|
||||
beforeUpdate() {
|
||||
}, // 生命周期 - 更新之前",
|
||||
updated() {
|
||||
}, // 生命周期 - 更新之后",
|
||||
beforeDestroy() {
|
||||
}, // 生命周期 - 销毁之前",
|
||||
destroyed() {
|
||||
}, // 生命周期 - 销毁完成",
|
||||
activated() {
|
||||
} // 如果页面有keep-alive缓存功能,这个函数会触发",
|
||||
}
|
||||
</script>
|
||||
<style scoped>
|
||||
|
||||
</style>
|
|
@ -0,0 +1,182 @@
|
|||
<template>
|
||||
<div class="index">
|
||||
<el-button type="primary" @click="drawRectangle">绘制多边形</el-button>
|
||||
<el-button type="primary" @click="editRectangle">编辑多边形</el-button>
|
||||
<el-button type="primary" @click="deleRectangle">删除多边形</el-button>
|
||||
<el-button type="primary" @click="sel">将电子围栏上传</el-button>
|
||||
<div id="amapContainer"></div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getSel, dbx } from "@/api/goods/map";
|
||||
// 这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等),
|
||||
// 例如:import 《组件名称》 from '《组件路径》,
|
||||
export default {
|
||||
// import引入的组件需要注入到对象中才能使用"
|
||||
components: {},
|
||||
props: {
|
||||
paths: {} //编辑
|
||||
},
|
||||
data() {
|
||||
// 这里存放数据"
|
||||
return {
|
||||
// groupsId: this.$route.query.groupsId,
|
||||
path: [], //当前绘制多边形经纬度数组
|
||||
polygonItem: [], // 地图上绘制所有的多边形对象
|
||||
polyEditors: [], //所有编辑对象的数组
|
||||
pences:{
|
||||
list: []
|
||||
} //传输
|
||||
}
|
||||
},
|
||||
// 计算属性 类似于data概念",
|
||||
computed: {},
|
||||
// 监控data中的数据变化",
|
||||
watch: {},
|
||||
// 方法集合",
|
||||
methods: {
|
||||
sel() {// 获取坐标传输给电子围栏
|
||||
this.pences.list = this.polygonItem[0].w.path;
|
||||
getSel(this.pences.list).then(res => {
|
||||
console.log(res)
|
||||
})
|
||||
console.log(this.pences.list)
|
||||
},
|
||||
// 地图初始化
|
||||
intAmap (callBack) {
|
||||
this.AMap = window.AMap;
|
||||
this.AMap.plugin(['AMap.MouseTool', 'AMap.PolyEditor', 'AMap.ControlBar'], function () {
|
||||
//TODO 创建控件并添加
|
||||
});
|
||||
this.map = new this.AMap.Map("amapContainer", {
|
||||
center: [116.409753, 39.921925],
|
||||
zoom: 14,
|
||||
// mapStyle: "amap://styles/darkblue",
|
||||
pitch: 80,
|
||||
rotation: -15,
|
||||
viewMode: '3D',//开启3D视图,默认为关闭
|
||||
buildingAnimation: true,//楼块出现是否带动画
|
||||
});
|
||||
this.map.addControl(new this.AMap.ControlBar());
|
||||
if (callBack && typeof callBack == 'function') {
|
||||
callBack();
|
||||
}
|
||||
},
|
||||
// 编辑围栏
|
||||
editRectangle (paths) {
|
||||
const path = paths;
|
||||
const AMap = window.AMap;
|
||||
var polygon = new this.AMap.Polygon({
|
||||
path: path,
|
||||
strokeColor: "#FF33FF",
|
||||
strokeWeight: 6,
|
||||
strokeOpacity: 0.2,
|
||||
fillOpacity: 0.4,
|
||||
fillColor: '#1791fc',
|
||||
zIndex: 50,
|
||||
});
|
||||
|
||||
this.map.add(polygon);
|
||||
this.polygonItem.push(polygon);
|
||||
// 缩放地图到合适的视野级别
|
||||
this.map.setFitView([polygon]);
|
||||
|
||||
this.polyEditor = new AMap.PolyEditor(this.map, polygon);
|
||||
this.polyEditor.open();
|
||||
this.polyEditors.push(this.polyEditor);
|
||||
|
||||
this.polyEditor.on('addnode', function (event) {
|
||||
console.info('触发事件:addnode', event)
|
||||
console.info('修改后的经纬度:', polygon.getPath())
|
||||
});
|
||||
|
||||
this.polyEditor.on('adjust', function (event) {
|
||||
console.info('触发事件:adjust', event)
|
||||
console.info('修改后的经纬度:', polygon.getPath())
|
||||
});
|
||||
|
||||
this.polyEditor.on('removenode', function (event) {
|
||||
console.info('触发事件:removenode', event)
|
||||
console.info('修改后的经纬度:', polygon.getPath())
|
||||
});
|
||||
|
||||
this.polyEditor.on('end', function (event) {
|
||||
console.info('触发事件: end', event)
|
||||
console.info('修改后的经纬度:', polygon.getPath())
|
||||
// event.target 即为编辑后的多边形对象
|
||||
});
|
||||
},
|
||||
// 绘制多边形
|
||||
drawRectangle () {
|
||||
const vm = this;
|
||||
this.mouseTool = new this.AMap.MouseTool(this.map);
|
||||
const polygon = this.mouseTool.polygon({
|
||||
strokeColor: 'red',
|
||||
strokeOpacity: 0.5,
|
||||
strokeWeight: 6,
|
||||
fillColor: 'blue',
|
||||
fillOpacity: 0.5,
|
||||
// strokeStyle还支持 solid
|
||||
strokeStyle: 'solid',
|
||||
// strokeDasharray: [30,10],
|
||||
});
|
||||
this.mouseTool.on('draw', function (event) {
|
||||
// event.obj 为绘制出来的覆盖物对象
|
||||
var polygonItem = event.obj;
|
||||
var paths = polygonItem.getPath();//取得绘制的多边形的每一个点坐标
|
||||
console.log('覆盖物对象绘制完成各个点的坐标', paths);
|
||||
var path = []; // 编辑的路径
|
||||
paths.forEach(v => {
|
||||
path.push([v.lng, v.lat])
|
||||
});
|
||||
vm.path = path;
|
||||
vm.editRectangle(vm.path);
|
||||
vm.polygonItem.push(event.obj);
|
||||
vm.map.remove(event.obj); // 删除多边形
|
||||
console.log("覆盖物对象绘制完成的坐标点",event.obj.getPath())
|
||||
});
|
||||
},
|
||||
// 批量删除多边形
|
||||
deleRectangle () {
|
||||
// 取消编辑状态
|
||||
this.polyEditors.forEach(v => {
|
||||
v.close();
|
||||
});
|
||||
this.map.clearMap(); // 删除地图所有覆盖物
|
||||
},
|
||||
},
|
||||
// 生命周期 - 创建完成(可以访问当前this实例)",
|
||||
created() {
|
||||
},
|
||||
// 生命周期 - 挂载完成(可以访问DOM元素)",
|
||||
mounted() {
|
||||
this.intAmap(() => {
|
||||
if (this.paths) {
|
||||
this.editRectangle(this.paths);
|
||||
}
|
||||
})
|
||||
},
|
||||
beforeCreate() {
|
||||
}, // 生命周期 - 创建之前",
|
||||
beforeMount() {
|
||||
}, // 生命周期 - 挂载之前",
|
||||
beforeUpdate() {
|
||||
}, // 生命周期 - 更新之前",
|
||||
updated() {
|
||||
}, // 生命周期 - 更新之后",
|
||||
beforeDestroy() {
|
||||
}, // 生命周期 - 销毁之前",
|
||||
destroyed() {
|
||||
}, // 生命周期 - 销毁完成",
|
||||
activated() {
|
||||
} // 如果页面有keep-alive缓存功能,这个函数会触发",
|
||||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
#amapContainer {
|
||||
height: 800px;
|
||||
width: 1000px;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,215 @@
|
|||
<template>
|
||||
<div class="container">
|
||||
<div class="left">
|
||||
<div class="top">
|
||||
基本信息:
|
||||
<div v-for="(item, index) in basic" :key="index" class="item-container">
|
||||
<label>
|
||||
<input type="checkbox" :value="item" v-model="selectedOptions" disabled>
|
||||
{{item.label}}
|
||||
</label>
|
||||
<div v-if="isSelected(index)">
|
||||
<label>Start:<input type="number" v-model="item.start" min="1" disabled/></label>
|
||||
<label>End:<input type="number" v-model="item.end" min="1" disabled/></label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="middle">
|
||||
车辆详情:
|
||||
<div v-for="(item, index) in standard" :key="index">
|
||||
<label>
|
||||
<input type="checkbox" :value="item" v-model="selectedOptions">
|
||||
{{item.label}}
|
||||
</label>
|
||||
<div v-if="isSelected2(index)">
|
||||
<label>Start:<input type="number" v-model="item.start" min="1"/></label>
|
||||
<label>End:<input type="number" v-model="item.end" min="1"/></label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="boolean">
|
||||
故障状态<br>
|
||||
<div v-for="(item,index) in breakdown" :key="index">
|
||||
<label>
|
||||
<input type="checkbox" :value="item" v-model="selectedOptions">
|
||||
{{item.label}}
|
||||
</label>
|
||||
<div v-if="isSelected3(index)">
|
||||
<label>Start:<input type="number" v-model="item.start" min="1"/></label>
|
||||
<label>End:<input type="number" v-model="item.end" min="1"/></label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="right">
|
||||
<el-button @click="dian">点击</el-button>
|
||||
<br>
|
||||
<div v-for="(option, index) in selectedOptions" :key="index">
|
||||
{{option}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { indexDataFormat, selectDataFormatById, deleteDataFormatById } from "@/api/goods/forewarn"
|
||||
// 这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等),
|
||||
// 例如:import 《组件名称》 from '《组件路径》,
|
||||
export default {
|
||||
// import引入的组件需要注入到对象中才能使用"
|
||||
components: {},
|
||||
props: {},
|
||||
data() {
|
||||
// 这里存放数据"
|
||||
return {
|
||||
vin: this.$route.query.vin,
|
||||
// 基本信息
|
||||
basic: [
|
||||
{dataCode:"vin",label:"车辆标识",start:1,end:17},
|
||||
{dataCode:"time",label:"时间",start:18,end:30},
|
||||
{dataCode:"longitude",label:"经度",start:31,end:40},
|
||||
{dataCode:"latitude",label:"纬度",start:41,end:50},
|
||||
{dataCode:"speed",label:"车速",start:52,end:57},
|
||||
{dataCode:"totalMileage",label:"总里程",start:58,end:68},
|
||||
{dataCode:"gears",label:"档位",start:89,end:89}
|
||||
],
|
||||
// 标准信息
|
||||
standard: [
|
||||
{dataCode:"totalVoltage",label:"总电压",start:69,end:74},
|
||||
{dataCode:"totalCurrent",label:"总电流",start:75,end:79},
|
||||
{dataCode:"insulationResistance",label:"绝缘电阻",start:80,end:87},
|
||||
{dataCode:"acceleratorPedal",label:"加速踏板行程值",start:90,end:91},
|
||||
{dataCode:"brakePedal",label:"制动踏板行程值",start:92,end:93},
|
||||
{dataCode:"fuelConsumptionRate",label:"燃料消耗率",start:94,end:98},
|
||||
{dataCode:"MotorControllerTemperature",label:"电机控制器温度",start:99,end:104},
|
||||
{dataCode:"motorSpeed",label:"电机转速",start:104,end:109},
|
||||
{dataCode:"motorTorque",label:"电机转矩",start:110,end:113},
|
||||
{dataCode:"motorTemperature",label:"电机温度",start:114,end:119},
|
||||
{dataCode:"motorVoltage",label:"电机电压",start:120,end:124},
|
||||
{dataCode:"motorCurrent",label:"电机电流",start:125,end:132},
|
||||
{dataCode:"remainingPower",label:"动力电池剩余电量SOC",start:133,end:138},
|
||||
{dataCode:"maximumFeedbackPower",label:"当前状态允许的最大反馈功率",start:139,end:144},
|
||||
{dataCode:"maximumDischargePower",label:"当前状态允许最大放电功率",start:145,end:150},
|
||||
{dataCode:"selfTestCounter",label:"BMS自检计数器",start:151,end:152},
|
||||
{dataCode:"batteryChargeOrDischargeCurrent",label:"动力电池充放电电流",start:153,end:157},
|
||||
{dataCode:"totalVoltageV3",label:"动力电池负载端总电压V3",start:158,end:163},
|
||||
{dataCode:"maximumVoltage",label:"单次最大电压",start:164,end:167},
|
||||
{dataCode:"minimumBatteryVoltage",label:"单体电池最低电压",start:168,end:171},
|
||||
{dataCode:"maximumBatteryTemperature",label:"单体电池最高温度",start:172,end:177},
|
||||
{dataCode:"minimumBatteryTemperature",label:"单体电池最低温度",start:178,end:183},
|
||||
{dataCode:"usableBatteryCapacity",label:"动力电池可用容量",start:184,end:189},
|
||||
],
|
||||
// 故障状态
|
||||
breakdown: [
|
||||
{dataCode:"vehicleStatus",label:"车辆状态",start:190,end:190},
|
||||
{dataCode:"chargeStatus",label:"充电状态",start:191,end:191},
|
||||
{dataCode:"operationalStatus",label:"运行状态",start:192,end:192},
|
||||
{dataCode:"soc",label:"SOC",start:193,end:193},
|
||||
{dataCode:"energyStorageDeviceWorkingStatus",label:"可充电储能装置工作状态",start:194,end:194},
|
||||
{dataCode:"driveMotorStatus",label:"驱动电机状态",start:195,end:195},
|
||||
{dataCode:"positioningIsOrNotEffective",label:"定位是否有效",start:196,end:196},
|
||||
{dataCode:"eas",label:"EAS",start:197,end:197},
|
||||
{dataCode:"ptc",label:"PTC",start:198,end:198},
|
||||
{dataCode:"eps",label:"EPS",start:198,end:198},
|
||||
{dataCode:"abs",label:"ABS",start:200,end:200},
|
||||
{dataCode:"mcu",label:"mcu",start:201,end:201},
|
||||
{dataCode:"batteryHeatingStatus",label:"动力电池加热状态",start:202,end:202},
|
||||
{dataCode:"batteryCurrentStatus",label:"动力电池当前状态",start:203,end:203},
|
||||
{dataCode:"batteryInsulationStatus",label:"动力电池保温状态",start:204,end:204},
|
||||
{dataCode:"dcdc",label:"DCDC",start:205,end:205},
|
||||
{dataCode:"chg",label:"CHG",start:206,end:206}
|
||||
],
|
||||
//接收
|
||||
selectedOptions: [
|
||||
{dataCode:"vin",label:"车辆标识",start:1,end:17},
|
||||
{dataCode:"time",label:"时间",start:18,end:27},
|
||||
{dataCode:"longitude",label:"经度",start:31,end:40},
|
||||
{dataCode:"latitude",label:"纬度",start:41,end:50},
|
||||
{dataCode:"speed",label:"车速",start:52,end:57},
|
||||
{dataCode:"totalMileage",label:"总里程",start:58,end:68},
|
||||
{dataCode:"gears",label:"档位",start:89,end:89}
|
||||
],
|
||||
}
|
||||
},
|
||||
// 计算属性 类似于data概念",
|
||||
computed: {},
|
||||
// 监控data中的数据变化",
|
||||
watch: {},
|
||||
// 方法集合",
|
||||
methods: {
|
||||
//起始值和计数值显示
|
||||
isSelected(index) {
|
||||
return this.selectedOptions.some(item => item.dataCode === this.basic[index].dataCode);
|
||||
},
|
||||
isSelected2(index) {
|
||||
return this.selectedOptions.some(item => item.dataCode === this.standard[index].dataCode);
|
||||
},
|
||||
isSelected3(index) {
|
||||
return this.selectedOptions.some(item => item.dataCode === this.breakdown[index].dataCode);
|
||||
},
|
||||
//添加内容
|
||||
dian() {
|
||||
indexDataFormat(this.selectedOptions,this.vin).then(res => {
|
||||
console.log(res)
|
||||
if (res.data != 0){
|
||||
this.$modal.msgSuccess("新增成功")
|
||||
}else{
|
||||
this.$modal.msgSuccess("新增失败")
|
||||
}
|
||||
})
|
||||
this.getInfo()
|
||||
},
|
||||
getInfo() {
|
||||
selectDataFormatById(this.vin).then(res => {
|
||||
if (res.data != null) {
|
||||
this.selectedOptions = res.data
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
// 生命周期 - 创建完成(可以访问当前this实例)",
|
||||
created() {
|
||||
this.getInfo()
|
||||
},
|
||||
// 生命周期 - 挂载完成(可以访问DOM元素)",
|
||||
mounted() {
|
||||
},
|
||||
beforeCreate() {
|
||||
}, // 生命周期 - 创建之前",
|
||||
beforeMount() {
|
||||
}, // 生命周期 - 挂载之前",
|
||||
beforeUpdate() {
|
||||
}, // 生命周期 - 更新之前",
|
||||
updated() {
|
||||
}, // 生命周期 - 更新之后",
|
||||
beforeDestroy() {
|
||||
}, // 生命周期 - 销毁之前",
|
||||
destroyed() {
|
||||
}, // 生命周期 - 销毁完成",
|
||||
activated() {
|
||||
} // 如果页面有keep-alive缓存功能,这个函数会触发",
|
||||
}
|
||||
</script>
|
||||
<style scoped>
|
||||
.container {
|
||||
display: flex;
|
||||
}
|
||||
.left {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.left > div {
|
||||
flex: 0 0 auto;
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
||||
|
||||
.right .bottom {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.right {
|
||||
flex: 1;
|
||||
}
|
||||
</style>
|
|
@ -0,0 +1,296 @@
|
|||
<template>
|
||||
<div>
|
||||
<div class="index">
|
||||
<div id="map" style="width: 100%; height: 400px;"></div>
|
||||
</div>
|
||||
|
||||
<el-descriptions title="实时数据" direction="vertical" :column="4" :model="VehicleInfo" border>
|
||||
<el-descriptions-item label="vin">{{VehicleInfo.vin}}</el-descriptions-item>
|
||||
<el-descriptions-item label="时间">{{VehicleInfo.time}}</el-descriptions-item>
|
||||
<el-descriptions-item label="经度">{{VehicleInfo.longitude}}</el-descriptions-item>
|
||||
<el-descriptions-item label="纬度">{{VehicleInfo.latitude}}</el-descriptions-item>
|
||||
<el-descriptions-item label="车速">{{VehicleInfo.speed}}</el-descriptions-item>
|
||||
<el-descriptions-item label="总里程">{{VehicleInfo.totalMileage}}</el-descriptions-item>
|
||||
<el-descriptions-item label="总电压">{{VehicleInfo.totalVoltage}}</el-descriptions-item>
|
||||
<el-descriptions-item label="总电流">{{VehicleInfo.totalCurrent}}</el-descriptions-item>
|
||||
<!-- <el-descriptions-item label="绝缘电阻">{{VehicleInfo.insulationResistance}}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="档位">{{VehicleInfo.gears}}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="加速踏板行程值">{{VehicleInfo.acceleratorPedal}}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="制动踏板行程值">{{VehicleInfo.brakePedal}}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="燃料消耗率">{{VehicleInfo.fuelConsumptionRate}}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="电机控制器温度">{{VehicleInfo.MotorControllerTemperature}}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="电机转速">{{VehicleInfo.motorSpeed}}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="电机转矩">{{VehicleInfo.motorTorque}}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="电机温度">{{VehicleInfo.motorTemperature}}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="电机电压">{{VehicleInfo.motorVoltage}}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="电机电流">{{VehicleInfo.motorCurrent}}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="动力电池剩余电量SOC">{{VehicleInfo.remainingPower}}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="当前状态允许的最大反馈功率">{{VehicleInfo.maximumFeedbackPower}}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="当前状态允许最大放电功率">{{VehicleInfo.maximumDischargePower}}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="BMS自检计数器">{{VehicleInfo.selfTestCounter}}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="动力电池充放电电流">{{VehicleInfo.batteryChargeOrDischargeCurrent}}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="动力电池负载端总电压V3">{{VehicleInfo.totalVoltageV3}}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="单次最大电压">{{VehicleInfo.maximumVoltage}}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="单体电池最低电压">{{VehicleInfo.minimumBatteryVoltage}}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="单体电池最高温度">{{VehicleInfo.maximumBatteryTemperature}}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="单体电池最低温度">{{VehicleInfo.minimumBatteryTemperature}}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="动力电池可用容量">{{VehicleInfo.usableBatteryCapacity}}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="车辆状态">{{VehicleInfo.vehicleStatus}}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="充电状态">{{VehicleInfo.chargeStatus}}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="运行状态">{{VehicleInfo.operationalStatus}}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="SOC">{{VehicleInfo.soc}}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="可充电储能装置工作状态">{{VehicleInfo.energyStorageDeviceWorkingStatus}}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="驱动电机状态">{{VehicleInfo.driveMotorStatus}}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="定位是否有效">{{VehicleInfo.positioningIsOrNotEffective}}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="EAS">{{VehicleInfo.eas}}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="PTC">{{VehicleInfo.ptc}}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="EPS">{{VehicleInfo.eps}}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="ABS">{{VehicleInfo.abs}}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="MCU">{{VehicleInfo.mcu}}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="动力电池加热状态">{{VehicleInfo.batteryHeatingStatus}}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="动力电池当前状态">{{VehicleInfo.batteryCurrentStatus}}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="动力电池保温状态">{{VehicleInfo.batteryInsulationStatus}}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="DCDC">{{VehicleInfo.dcdc}}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="CHG">{{VehicleInfo.chg}}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="校验位">{{VehicleInfo.checkDigit}}</el-descriptions-item>-->
|
||||
|
||||
</el-descriptions>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { read, open, close } from "@/api/goods/car";
|
||||
|
||||
// 这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等),
|
||||
// 例如:import 《组件名称》 from '《组件路径》,
|
||||
export default {
|
||||
// import引入的组件需要注入到对象中才能使用"
|
||||
components: {},
|
||||
props: {
|
||||
paths: {}, //编辑
|
||||
},
|
||||
data() {
|
||||
// 这里存放数据"
|
||||
return {
|
||||
map: null, // 地图实例
|
||||
path: [], //当前绘制多边形经纬度数组
|
||||
VehicleInfo: {
|
||||
// vin
|
||||
vin: '',
|
||||
// 时间
|
||||
time: '',
|
||||
// 经度
|
||||
longitude: '',
|
||||
// 纬度
|
||||
latitude: '',
|
||||
// 车速
|
||||
speed: '',
|
||||
// 总里程
|
||||
totalMileage: '',
|
||||
// 总电压
|
||||
totalVoltage: '',
|
||||
// 总电流
|
||||
totalCurrent: '',
|
||||
// 绝缘电阻
|
||||
insulationResistance: '',
|
||||
// 档位
|
||||
gears: '',
|
||||
// 加速踏板行程值
|
||||
acceleratorPedal: '',
|
||||
// 制动踏板行程值
|
||||
brakePedal: '',
|
||||
// 燃料消耗率
|
||||
fuelConsumptionRate: '',
|
||||
// 电机控制器温度
|
||||
MotorControllerTemperature: '',
|
||||
// 电机转速
|
||||
motorSpeed: '',
|
||||
// 电机转矩
|
||||
motorTorque: '',
|
||||
// 电机温度
|
||||
motorTemperature: '',
|
||||
// 电机电压
|
||||
motorVoltage: '',
|
||||
// 电机电流
|
||||
motorCurrent: '',
|
||||
// 动力电池剩余电量SOC
|
||||
remainingPower: '',
|
||||
// 当前状态允许的最大反馈功率
|
||||
maximumFeedbackPower: '',
|
||||
// 当前状态允许最大放电功率
|
||||
maximumDischargePower: '',
|
||||
// BMS自检计数器
|
||||
selfTestCounter: '',
|
||||
// 动力电池充放电电流
|
||||
batteryChargeOrDischargeCurrent: '',
|
||||
// 动力电池负载端总电压V3
|
||||
totalVoltageV3: '',
|
||||
// 单次最大电压
|
||||
maximumVoltage: '',
|
||||
// 单体电池最低电压
|
||||
minimumBatteryVoltage: '',
|
||||
// 单体电池最高温度
|
||||
maximumBatteryTemperature: '',
|
||||
// 单体电池最低温度
|
||||
minimumBatteryTemperature: '',
|
||||
// 动力电池可用容量
|
||||
usableBatteryCapacity: '',
|
||||
// 车辆状态
|
||||
vehicleStatus: '',
|
||||
// 充电状态
|
||||
chargeStatus: '',
|
||||
// 运行状态
|
||||
operationalStatus: '',
|
||||
// SOC
|
||||
soc: '',
|
||||
// 可充电储能装置工作状态
|
||||
energyStorageDeviceWorkingStatus: '',
|
||||
// 驱动电机状态
|
||||
driveMotorStatus: '',
|
||||
// 定位是否有效
|
||||
positioningIsOrNotEffective: '',
|
||||
// EAS
|
||||
eas: '',
|
||||
// PTC
|
||||
ptc: '',
|
||||
// EPS
|
||||
eps: '',
|
||||
// ABS
|
||||
abs: '',
|
||||
// MCU
|
||||
mcu: '',
|
||||
// 动力电池加热状态
|
||||
batteryHeatingStatus: '',
|
||||
// 动力电池当前状态
|
||||
batteryCurrentStatus: '',
|
||||
// 动力电池保温状态
|
||||
batteryInsulationStatus: '',
|
||||
// DCDC
|
||||
dcdc: '',
|
||||
// CHG
|
||||
chg: '',
|
||||
// 校验位
|
||||
checkDigit: '',
|
||||
},
|
||||
vin: this.$route.query.vin,
|
||||
carMarker: null, // 车辆标记实例
|
||||
carPath: null, // 车辆行驶路径(注意:此处代码并未初始化路径)
|
||||
carPosition: { // 车辆当前位置
|
||||
longitude: 116.663817, // 经度
|
||||
latitude: 39.53177, // 纬度
|
||||
},
|
||||
}
|
||||
},
|
||||
// 计算属性 类似于data概念",
|
||||
computed: {},
|
||||
// 监控data中的数据变化",
|
||||
watch: {},
|
||||
// 方法集合",
|
||||
methods: {
|
||||
// 地图初始化
|
||||
initMap() {
|
||||
// 初始化地图,设置初始中心点和缩放级别
|
||||
this.map = new AMap.Map('map', {
|
||||
zoom: 15, // 缩放级别
|
||||
center: [this.carPosition.longitude, this.carPosition.latitude], // 中心点经纬度
|
||||
});
|
||||
},
|
||||
createCar() {
|
||||
// 创建车辆标记,设置车辆图标、位置等
|
||||
const icon = new AMap.Icon({
|
||||
size: new AMap.Size(50, 50), // 图标尺寸
|
||||
image: 'https://s1.4sai.com/src/img/png/37/3760fd545ff848c2b241b7cf400b3dd7.png?imageView2/2/w/256&e=1735488000&token=1srnZGLKZ0Aqlz6dk7yF4SkiYf4eP-YrEOdM1sob:F5xvrYJwsejuj9uCJhs70CQ7-mg=', // 图标图片链接
|
||||
imageSize: new AMap.Size(50, 50), // 图标所用图片尺寸
|
||||
});
|
||||
|
||||
this.carMarker = new AMap.Marker({
|
||||
map: this.map, // 标记添加到哪个地图上
|
||||
position: [this.carPosition.longitude, this.carPosition.latitude], // 标记位置
|
||||
icon: icon, // 使用的图标
|
||||
offset: new AMap.Pixel(-26, -13), // 相对于定位点的偏移量
|
||||
});
|
||||
},
|
||||
startSimulation() {
|
||||
// 开始模拟车辆移动,每秒调用一次 moveCar 方法
|
||||
setInterval(() => {
|
||||
this.moveCar();
|
||||
}, 1000);
|
||||
},
|
||||
moveCar() {
|
||||
// 模拟车辆移动,随机改变经纬度
|
||||
const newLng = this.VehicleInfo.longitude; // 经度增加0.001
|
||||
// const newLng = this.carPosition.longitude + 0.001; // 经度增加0.001
|
||||
const newLat = this.VehicleInfo.latitude; // 纬度随机增加0.0005到0.001
|
||||
// const newLat = this.carPosition.latitude + 0.001 * Math.random() * 0.5; // 纬度随机增加0.0005到0.001
|
||||
// 注意:此处 carPath 并未初始化或用于显示路径,可能会报错
|
||||
// 如果你需要记录或显示行驶路径,请初始化 carPath 并使用 AMap.Polyline 等相关 API
|
||||
// this.carPath.push([newLng, newLat]); // 假设 carPath 是一个 Polyline 实例
|
||||
this.carMarker.setPosition([newLng, newLat]); // 设置车辆标记的新位置
|
||||
this.carPosition = { longitude: newLng, latitude: newLat }; // 更新车辆位置
|
||||
},
|
||||
open() {
|
||||
open().then(res =>{
|
||||
console.log(res)
|
||||
})
|
||||
}
|
||||
},
|
||||
// 生命周期 - 创建完成(可以访问当前this实例)",
|
||||
created() {
|
||||
this.open()
|
||||
this.timer = setInterval(() => {
|
||||
read().then(res => {
|
||||
this.VehicleInfo = res.data
|
||||
})
|
||||
},2000)
|
||||
},
|
||||
// 生命周期 - 挂载完成(可以访问DOM元素)",
|
||||
mounted() {
|
||||
this.initMap(); // 初始化地图
|
||||
this.createCar(); // 创建车辆标记
|
||||
this.startSimulation(); // 开始模拟车辆移动
|
||||
this.intAmap(() => {
|
||||
if (this.paths) {
|
||||
this.editRectangle(this.paths);
|
||||
}
|
||||
})
|
||||
},
|
||||
beforeCreate() {
|
||||
}, // 生命周期 - 创建之前",
|
||||
beforeMount() {
|
||||
}, // 生命周期 - 挂载之前",
|
||||
beforeUpdate() {
|
||||
}, // 生命周期 - 更新之前",
|
||||
updated() {
|
||||
}, // 生命周期 - 更新之后",
|
||||
beforeDestroy() {
|
||||
// 组件销毁前清理资源
|
||||
if (this.carPath) {
|
||||
this.carPath.setMap(null); // 如果 carPath 是 Polyline 实例,则移除它
|
||||
}
|
||||
if (this.carMarker) {
|
||||
this.carMarker.setMap(null); // 移除车辆标记
|
||||
}
|
||||
if (this.map) {
|
||||
this.map.destroy(); // 销毁地图实例
|
||||
}
|
||||
//定时器
|
||||
if (this.timer) {
|
||||
close().then(res => {
|
||||
console.log(res)
|
||||
})
|
||||
clearInterval(this.timer)
|
||||
}
|
||||
}, // 生命周期 - 销毁之前",
|
||||
destroyed() {
|
||||
}, // 生命周期 - 销毁完成",
|
||||
activated() {
|
||||
} // 如果页面有keep-alive缓存功能,这个函数会触发",
|
||||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
#amapContainer {
|
||||
height: 400px;
|
||||
width: 1200px;
|
||||
}
|
||||
|
||||
</style>
|
|
@ -0,0 +1,113 @@
|
|||
<template>
|
||||
<div id="map" style="width: 100%; height: 400px;"></div>
|
||||
<!-- 地图容器,设置了宽度和高度 -->
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'GaodeMap', // 组件名称
|
||||
data() {
|
||||
return {
|
||||
map: null, // 地图实例
|
||||
carMarker: null, // 车辆标记实例
|
||||
carPath: null, // 车辆行驶路径(注意:此处代码并未初始化路径)
|
||||
carPosition: { // 车辆当前位置
|
||||
longitude: 116.397428, // 经度
|
||||
latitude: 39.90923, // 纬度
|
||||
},
|
||||
path: []
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.initMap(); // 初始化地图
|
||||
this.createCar(); // 创建车辆标记
|
||||
this.startSimulation(); // 开始模拟车辆移动
|
||||
},
|
||||
methods: {
|
||||
initMap() {
|
||||
// 初始化地图,设置初始中心点和缩放级别
|
||||
this.map = new AMap.Map('map', {
|
||||
zoom: 15, // 缩放级别
|
||||
center: [this.carPosition.longitude, this.carPosition.latitude], // 中心点经纬度
|
||||
});
|
||||
this.polyline = new AMap.Polyline({
|
||||
map: this.map,
|
||||
path: [],
|
||||
strokeColor: "#FF0000",
|
||||
strokeWeight: 5,
|
||||
});
|
||||
},
|
||||
createCar() {
|
||||
// 创建车辆标记,设置车辆图标、位置等
|
||||
const icon = new AMap.Icon({
|
||||
size: new AMap.Size(50, 50), // 图标尺寸
|
||||
image: 'https://s1.4sai.com/src/img/png/37/3760fd545ff848c2b241b7cf400b3dd7.png?imageView2/2/w/256&e=1735488000&token=1srnZGLKZ0Aqlz6dk7yF4SkiYf4eP-YrEOdM1sob:F5xvrYJwsejuj9uCJhs70CQ7-mg=', // 图标图片链接
|
||||
imageSize: new AMap.Size(50, 50), // 图标所用图片尺寸
|
||||
});
|
||||
|
||||
this.carMarker = new AMap.Marker({
|
||||
map: this.map, // 标记添加到哪个地图上
|
||||
position: [this.carPosition.longitude, this.carPosition.latitude], // 标记位置
|
||||
icon: icon, // 使用的图标
|
||||
offset: new AMap.Pixel(-26, -13), // 相对于定位点的偏移量
|
||||
});
|
||||
|
||||
// 初始化轨迹线,但先不添加到地图上
|
||||
this.polyline = new AMap.Polyline({
|
||||
path: this.path,
|
||||
isOutline: true,
|
||||
outlineColor: '#000000',
|
||||
borderWeight: 1,
|
||||
lineJoin: 'round',
|
||||
lineCap: 'round',
|
||||
strokeColor: '#0091ff',
|
||||
strokeWeight: 6,
|
||||
// 可以在这里设置更多的 Polyline 样式
|
||||
});
|
||||
},
|
||||
startSimulation() {
|
||||
// 开始模拟车辆移动,每秒调用一次 moveCar 方法
|
||||
setInterval(() => {
|
||||
this.moveCar();
|
||||
}, 1000);
|
||||
},
|
||||
moveCar() {
|
||||
// 模拟车辆移动,随机改变经纬度
|
||||
const newLng = this.carPosition.longitude + 0.001; // 经度增加0.001
|
||||
const newLat = this.carPosition.latitude + 0.001 * Math.random() * 0.5; // 纬度随机增加0.0005到0.001
|
||||
// 注意:此处 carPath 并未初始化或用于显示路径,可能会报错
|
||||
// 如果你需要记录或显示行驶路径,请初始化 carPath 并使用 AMap.Polyline 等相关 API
|
||||
// this.carPath.push([newLng, newLat]); // 假设 carPath 是一个 Polyline 实例
|
||||
this.carMarker.setPosition([newLng, newLat]); // 设置车辆标记的新位置
|
||||
this.carPosition = { longitude: newLng, latitude: newLat }; // 更新车辆位置
|
||||
// 更新轨迹点
|
||||
this.path.push(this.carPosition);
|
||||
// 更新车辆标记的位置
|
||||
this.carMarker.setPosition(this.carPosition);
|
||||
|
||||
// 如果还没有将轨迹线添加到地图上,现在添加
|
||||
if (!this.polyline.getMap()) {
|
||||
this.polyline.setMap(this.map);
|
||||
}
|
||||
// 更新轨迹线
|
||||
this.polyline.setPath(this.path);
|
||||
|
||||
},
|
||||
},
|
||||
beforeDestroy() {
|
||||
// 组件销毁前清理资源
|
||||
if (this.carPath) {
|
||||
this.carPath.setMap(null); // 如果 carPath 是 Polyline 实例,则移除它
|
||||
}
|
||||
if (this.carMarker) {
|
||||
this.carMarker.setMap(null); // 移除车辆标记
|
||||
}
|
||||
if (this.map) {
|
||||
this.map.destroy(); // 销毁地图实例
|
||||
}
|
||||
if (this.polyline) {
|
||||
this.polyline.setMap(null); // 移除轨迹线
|
||||
}
|
||||
},
|
||||
};
|
||||
</script>
|
|
@ -0,0 +1,200 @@
|
|||
<template>
|
||||
<div>
|
||||
<el-button @click="index()">新增</el-button>
|
||||
<el-table :data="specification">
|
||||
<el-table-column prop="vin" label="车辆标识"></el-table-column>
|
||||
<el-table-column prop="dataCode" label="数据编码"></el-table-column>
|
||||
<el-table-column prop="label" label="标签"></el-table-column>
|
||||
<el-table-column prop="floating" label="浮动数据"></el-table-column>
|
||||
<el-table-column prop="standardData" label="标准数据"></el-table-column>
|
||||
<el-table-column prop="radiusName" label="滑窗范围"></el-table-column>
|
||||
<el-table-column prop="lengthName" label="滑动长度"></el-table-column>
|
||||
<el-table-column label="操作">
|
||||
<span slot-scope="scope">
|
||||
<el-button @click="update(scope.row.id)">修改</el-button>
|
||||
<el-button @click="deleteDate(scope.row.id)">删除</el-button>
|
||||
</span>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :fication="fication" label-width="80px">
|
||||
<el-form-item label="指向编码">
|
||||
<span v-if="form.id != null">
|
||||
<el-select v-model="form.dateTypeId" placeholder="请选择指向" disabled>
|
||||
<el-option v-for="daty in dateType2" :key="daty.dateTypeId" :label="daty.label" :value="daty.dateTypeId"></el-option>
|
||||
</el-select>
|
||||
</span>
|
||||
<span v-else>
|
||||
<el-select v-model="form.dateTypeId" placeholder="请选择指向">
|
||||
<el-option v-for="daty in dateType" :key="daty.dateTypeId" :label="daty.label" :value="daty.dateTypeId"></el-option>
|
||||
</el-select>
|
||||
</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="滑窗范围" prop="radiusId">
|
||||
<el-select v-model="form.radiusId" placeholder="请选择滑窗范围">
|
||||
<el-option v-for="rad in radius" :key="rad.radiusId" :label="rad.radiusName" :value="rad.radiusId"/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="滑行长度" prop="lengthId">
|
||||
<el-select v-model="form.lengthId" placeholder="请选择滑动长度">
|
||||
<el-option v-for="item in length" :key="item.lengthId" :label="item.lengthName" :value="item.lengthId"/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="浮动数据" prop="floating">
|
||||
<el-input v-model="form.floating " placeholder="请输入浮动数据" />
|
||||
</el-form-item>
|
||||
<el-form-item label="标准数据" prop="standardData">
|
||||
<el-input v-model="form.standardData " placeholder="请输入标准数据" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { selectDataSpecificationDev, listRadius, listLength, listDateType, selectDateType, selectDataSpecificationById, indexDataSpecification, updataDataSpecification,deleteDataSpecification } from "@/api/goods/window";
|
||||
// 这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等),
|
||||
// 例如:import 《组件名称》 from '《组件路径》,
|
||||
export default {
|
||||
// import引入的组件需要注入到对象中才能使用"
|
||||
components: {},
|
||||
props: {},
|
||||
data() {
|
||||
// 这里存放数据"
|
||||
return {
|
||||
vin: this.$route.query.vin,
|
||||
// 列表
|
||||
specification: [],
|
||||
// 滑行长度
|
||||
length: [],
|
||||
// 滑窗范围
|
||||
radius: [],
|
||||
//指定选择添加
|
||||
dateType: [],
|
||||
//指定选择修改
|
||||
dateType2: [],
|
||||
title: '',// 弹窗标题
|
||||
open: false,//是否弹窗
|
||||
form: {},
|
||||
fication: {}
|
||||
}
|
||||
},
|
||||
// 计算属性 类似于data概念",
|
||||
computed: {},
|
||||
// 监控data中的数据变化",
|
||||
watch: {},
|
||||
// 方法集合",
|
||||
methods: {
|
||||
reset() {
|
||||
// 表单重置
|
||||
this.form = {
|
||||
vin: null,
|
||||
dataCode: null,
|
||||
label: null,
|
||||
standardData: null,
|
||||
dateTypeId: null,
|
||||
radiusId: null,
|
||||
lengthId: null
|
||||
};
|
||||
this.resetForm("form");
|
||||
},
|
||||
// 初始化
|
||||
getList() {
|
||||
selectDataSpecificationDev(this.vin).then(res => {
|
||||
this.specification = res.data
|
||||
})
|
||||
listDateType(this.vin).then(res => {
|
||||
this.dateType = res.data
|
||||
})
|
||||
selectDateType().then(res => {
|
||||
this.dateType2 = res.data
|
||||
})
|
||||
listLength().then(res => {
|
||||
this.length = res.data
|
||||
})
|
||||
listRadius().then(res => {
|
||||
this.radius = res.data
|
||||
})
|
||||
},
|
||||
index() {
|
||||
this.reset()
|
||||
this.open = true;
|
||||
this.title = "新增滑窗规则"
|
||||
},
|
||||
update(id) {
|
||||
this.reset();
|
||||
selectDataSpecificationById(id).then(res => {
|
||||
this.form = res.data
|
||||
this.open = true;
|
||||
this.title = "报文修改信息"
|
||||
})
|
||||
},
|
||||
// 删除
|
||||
deleteDate(id) {
|
||||
deleteDataSpecification(id).then(res => {
|
||||
console.log(res)
|
||||
if (res.data>0) {
|
||||
this.$message.success("成功")
|
||||
this.getList()
|
||||
} else {
|
||||
this.$message.error("失败")
|
||||
}
|
||||
})
|
||||
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false;
|
||||
this.reset();
|
||||
},
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.id != null) {
|
||||
updataDataSpecification(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功")
|
||||
this.open = false;
|
||||
this.getList()
|
||||
})
|
||||
} else {
|
||||
indexDataSpecification(this.form,this.vin).then(res => {
|
||||
this.$modal.msgSuccess("新增成功")
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
// 生命周期 - 创建完成(可以访问当前this实例)",
|
||||
created() {
|
||||
this.getList()
|
||||
},
|
||||
// 生命周期 - 挂载完成(可以访问DOM元素)",
|
||||
mounted() {
|
||||
},
|
||||
beforeCreate() {
|
||||
}, // 生命周期 - 创建之前",
|
||||
beforeMount() {
|
||||
}, // 生命周期 - 挂载之前",
|
||||
beforeUpdate() {
|
||||
}, // 生命周期 - 更新之前",
|
||||
updated() {
|
||||
}, // 生命周期 - 更新之后",
|
||||
beforeDestroy() {
|
||||
}, // 生命周期 - 销毁之前",
|
||||
destroyed() {
|
||||
}, // 生命周期 - 销毁完成",
|
||||
activated() {
|
||||
} // 如果页面有keep-alive缓存功能,这个函数会触发",
|
||||
}
|
||||
</script>
|
||||
<style scoped>
|
||||
|
||||
</style>
|
|
@ -1,287 +0,0 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="用户名" prop="username">
|
||||
<el-input
|
||||
v-model="queryParams.username"
|
||||
placeholder="请输入用户名"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="密码" prop="password">
|
||||
<el-input
|
||||
v-model="queryParams.password"
|
||||
placeholder="请输入密码"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="号码" prop="tel">
|
||||
<el-input
|
||||
v-model="queryParams.tel"
|
||||
placeholder="请输入号码"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="角色" prop="typeId">
|
||||
<el-input
|
||||
v-model="queryParams.typeId"
|
||||
placeholder="请输入角色"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['goods:admin:add']"
|
||||
>新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
icon="el-icon-edit"
|
||||
size="mini"
|
||||
:disabled="single"
|
||||
@click="handleUpdate"
|
||||
v-hasPermi="['goods:admin:edit']"
|
||||
>修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['goods:admin:remove']"
|
||||
>删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['goods:admin:export']"
|
||||
>导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="adminList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="主键" align="center" prop="id" />
|
||||
<el-table-column label="用户名" align="center" prop="username" />
|
||||
<el-table-column label="密码" align="center" prop="password" />
|
||||
<el-table-column label="号码" align="center" prop="tel" />
|
||||
<el-table-column label="角色" align="center" prop="typeId" />
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['goods:admin:edit']"
|
||||
>修改</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['goods:admin:remove']"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 添加或修改测试信息对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="用户名" prop="username">
|
||||
<el-input v-model="form.username" placeholder="请输入用户名" />
|
||||
</el-form-item>
|
||||
<el-form-item label="密码" prop="password">
|
||||
<el-input v-model="form.password" placeholder="请输入密码" />
|
||||
</el-form-item>
|
||||
<el-form-item label="号码" prop="tel">
|
||||
<el-input v-model="form.tel" placeholder="请输入号码" />
|
||||
</el-form-item>
|
||||
<el-form-item label="角色" prop="typeId">
|
||||
<el-input v-model="form.typeId" placeholder="请输入角色" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listAdmin, getAdmin, delAdmin, addAdmin, updateAdmin } from "@/api/goods/admin";
|
||||
|
||||
export default {
|
||||
name: "Admin",
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 测试信息表格数据
|
||||
adminList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
username: null,
|
||||
password: null,
|
||||
tel: null,
|
||||
typeId: null
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
}
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
/** 查询测试信息列表 */
|
||||
getList() {
|
||||
this.loading = true;
|
||||
listAdmin(this.queryParams).then(response => {
|
||||
this.adminList = response.rows;
|
||||
this.total = response.total;
|
||||
this.loading = false;
|
||||
});
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false;
|
||||
this.reset();
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
id: null,
|
||||
username: null,
|
||||
password: null,
|
||||
tel: null,
|
||||
typeId: null
|
||||
};
|
||||
this.resetForm("form");
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1;
|
||||
this.getList();
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm");
|
||||
this.handleQuery();
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.id)
|
||||
this.single = selection.length!==1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset();
|
||||
this.open = true;
|
||||
this.title = "添加测试信息";
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset();
|
||||
const id = row.id || this.ids
|
||||
getAdmin(id).then(response => {
|
||||
this.form = response.data;
|
||||
this.open = true;
|
||||
this.title = "修改测试信息";
|
||||
});
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.id != null) {
|
||||
updateAdmin(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功");
|
||||
this.open = false;
|
||||
this.getList();
|
||||
});
|
||||
} else {
|
||||
addAdmin(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功");
|
||||
this.open = false;
|
||||
this.getList();
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const ids = row.id || this.ids;
|
||||
this.$modal.confirm('是否确认删除测试信息编号为"' + ids + '"的数据项?').then(function() {
|
||||
return delAdmin(ids);
|
||||
}).then(() => {
|
||||
this.getList();
|
||||
this.$modal.msgSuccess("删除成功");
|
||||
}).catch(() => {});
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
this.download('goods/admin/export', {
|
||||
...this.queryParams
|
||||
}, `admin_${new Date().getTime()}.xlsx`)
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
|
@ -1,883 +1,9 @@
|
|||
<template>
|
||||
<div class="app-container home">
|
||||
<el-row :gutter="20">
|
||||
<el-col :lg="24" :sm="24">
|
||||
<blockquote class="text-warning" style="font-size: 14px">
|
||||
领取阿里云通用云产品1888优惠券
|
||||
<br/>
|
||||
<el-link
|
||||
href="https://www.aliyun.com/minisite/goods?userCode=brki8iof"
|
||||
target="_blank"
|
||||
type="primary"
|
||||
>https://www.aliyun.com/minisite/goods?userCode=brki8iof
|
||||
</el-link
|
||||
>
|
||||
<br/>
|
||||
领取腾讯云通用云产品2860优惠券
|
||||
<br/>
|
||||
<el-link
|
||||
href="https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console"
|
||||
target="_blank"
|
||||
type="primary"
|
||||
>https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console
|
||||
</el-link
|
||||
>
|
||||
<br/>
|
||||
阿里云服务器折扣区
|
||||
<el-link href="http://aly.muyu.vip" target="_blank" type="primary"
|
||||
>>☛☛点我进入☚☚
|
||||
</el-link
|
||||
>
|
||||
腾讯云服务器秒杀区
|
||||
<el-link href="http://txy.muyu.vip" target="_blank" type="primary"
|
||||
>>☛☛点我进入☚☚
|
||||
</el-link
|
||||
>
|
||||
<br/>
|
||||
<h4 class="text-danger">
|
||||
云产品通用红包,可叠加官网常规优惠使用。(仅限新用户)
|
||||
</h4>
|
||||
</blockquote>
|
||||
|
||||
<hr/>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :lg="12" :sm="24" style="padding-left: 20px">
|
||||
<h2>若依后台管理框架</h2>
|
||||
<p>
|
||||
一直想做一款后台管理系统,看了很多优秀的开源项目但是发现没有合适自己的。于是利用空闲休息时间开始自己写一套后台系统。如此有了若依管理系统,她可以用于所有的Web应用程序,如网站管理后台,网站会员中心,CMS,CRM,OA等等,当然,您也可以对她进行深度定制,以做出更强系统。所有前端后台代码封装过后十分精简易上手,出错概率低。同时支持移动客户端访问。系统会陆续更新一些实用功能。
|
||||
</p>
|
||||
<p>
|
||||
<b>当前版本:</b> <span>v{{ version }}</span>
|
||||
</p>
|
||||
<p>
|
||||
<el-tag type="danger">¥免费开源</el-tag>
|
||||
</p>
|
||||
<p>
|
||||
<el-button
|
||||
icon="el-icon-cloudy"
|
||||
plain
|
||||
size="mini"
|
||||
type="primary"
|
||||
@click="goTarget('https://gitee.com/y_project/MuYu-Cloud')"
|
||||
>访问码云
|
||||
</el-button
|
||||
>
|
||||
<el-button
|
||||
icon="el-icon-s-home"
|
||||
plain
|
||||
size="mini"
|
||||
@click="goTarget('http://muyu.vip')"
|
||||
>访问主页
|
||||
</el-button
|
||||
>
|
||||
</p>
|
||||
</el-col>
|
||||
|
||||
<el-col :lg="12" :sm="24" style="padding-left: 50px">
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<h2>技术选型</h2>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="6">
|
||||
<h4>后端技术</h4>
|
||||
<ul>
|
||||
<li>SpringBoot</li>
|
||||
<li>SpringCloud</li>
|
||||
<li>Nacos</li>
|
||||
<li>Sentinel</li>
|
||||
<li>Seata</li>
|
||||
<li>Minio</li>
|
||||
<li>...</li>
|
||||
</ul>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<h4>前端技术</h4>
|
||||
<ul>
|
||||
<li>Vue</li>
|
||||
<li>Vuex</li>
|
||||
<li>Element-ui</li>
|
||||
<li>Axios</li>
|
||||
<li>Echarts</li>
|
||||
<li>Quill</li>
|
||||
<li>...</li>
|
||||
</ul>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-divider/>
|
||||
<el-row :gutter="20">
|
||||
<el-col :lg="8" :md="12" :sm="24" :xs="24">
|
||||
<el-card class="update-log">
|
||||
<div slot="header" class="clearfix">
|
||||
<span>联系信息</span>
|
||||
</div>
|
||||
<div class="body">
|
||||
<p>
|
||||
<i class="el-icon-s-promotion"></i> 官网:
|
||||
<el-link
|
||||
href="http://www.muyu.vip"
|
||||
target="_blank"
|
||||
>http://www.muyu.vip
|
||||
</el-link
|
||||
>
|
||||
</p>
|
||||
<p>
|
||||
<i class="el-icon-user-solid"></i> QQ群: <s> 满42799195 </s> <s> 满170157040 </s>
|
||||
<s> 满130643120 </s> <s> 满225920371 </s> <s> 满201705537 </s> <s> 满236543183 </s>
|
||||
<s> 满213618602 </s> <s> 满148794840 </s> <s> 满118752664 </s> <s> 满101038945</s>
|
||||
<a
|
||||
href="http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=pHuELvQ01AXiVC_CH9HNq-hL6qd6EbIb&authKey=k5nCvwTnimKrFBbJpFEfaQabjBHzZhMAbvsZAjAXiOIekreMrmJzjjTVuoMsZgB%2F&noverify=0&group_code=128355254"
|
||||
target="_blank"
|
||||
>128355254</a
|
||||
>
|
||||
</p>
|
||||
<p>
|
||||
<i class="el-icon-chat-dot-round"></i> 微信:<a
|
||||
href="javascript:"
|
||||
>/ *若依</a
|
||||
>
|
||||
</p>
|
||||
<p>
|
||||
<i class="el-icon-money"></i> 支付宝:<a
|
||||
class="支付宝信息"
|
||||
href="javascript:"
|
||||
>/ *若依</a
|
||||
>
|
||||
</p>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
<el-col :lg="8" :md="12" :sm="24" :xs="24">
|
||||
<el-card class="update-log">
|
||||
<div slot="header" class="clearfix">
|
||||
<span>更新日志</span>
|
||||
</div>
|
||||
<el-collapse accordion>
|
||||
<el-collapse-item title="v3.6.3 - 2023-07-07">
|
||||
<ol>
|
||||
<li>支持登录IP黑名单限制</li>
|
||||
<li>操作日志新增消耗时间属性</li>
|
||||
<li>屏蔽定时任务bean违规的字符</li>
|
||||
<li>日志管理使用索引提升查询性能</li>
|
||||
<li>日志注解支持排除指定的请求参数</li>
|
||||
<li>支持自定义隐藏属性列过滤子对象</li>
|
||||
<li>升级spring-boot到最新版本2.7.13</li>
|
||||
<li>升级spring-cloud到最新版2021.0.8</li>
|
||||
<li>升级spring-cloud-alibaba到最新版2021.0.5.0</li>
|
||||
<li>升级druid到最新版本1.2.16</li>
|
||||
<li>升级fastjson到最新版2.0.34</li>
|
||||
<li>升级pagehelper到最新版1.4.7</li>
|
||||
<li>升级transmittable-thread-local到最新版本2.14.3</li>
|
||||
<li>升级element-ui到最新版本2.15.13</li>
|
||||
<li>移除apache/commons-fileupload依赖</li>
|
||||
<li>修复页面切换时布局错乱的问题</li>
|
||||
<li>修复用户多角色数据权限可能出现权限抬升的情况</li>
|
||||
<li>修复导入用户时无法更新存在用户数据的问题</li>
|
||||
<li>修复开启TopNav后一级菜单路由参数设置无效问题</li>
|
||||
<li>优化文件下载出现的异常</li>
|
||||
<li>优化选择图标组件高亮回显</li>
|
||||
<li>优化修改密码日志存储明文问题</li>
|
||||
<li>优化排序属性orderBy参数限制长度</li>
|
||||
<li>优化页签栏关闭其他出现的异常问题</li>
|
||||
<li>优化页签关闭左侧选项排除首页选项</li>
|
||||
<li>优化关闭当前tab页跳转最右侧tab页</li>
|
||||
<li>优化文件上传服务关闭InputStream</li>
|
||||
<li>优化页签在Firefox浏览器被遮挡的问题</li>
|
||||
<li>优化侧边栏的平台标题与VUE_APP_TITLE保持同步</li>
|
||||
<li>优化DictTag组件value没有匹配的值时则展示value</li>
|
||||
<li>优化去除@EnableCustomSwagger注解后会启动失败问题</li>
|
||||
<li>优化upload接口在文件过大和文件名过长的情况返回提示信息</li>
|
||||
<li>优化异步保存日志发生报错不进RemoteLogFallbackFactory问题</li>
|
||||
<li>其他细节优化</li>
|
||||
</ol>
|
||||
</el-collapse-item>
|
||||
<el-collapse-item title="v3.6.2 - 2023-01-16">
|
||||
<ol>
|
||||
<li>重置时取消部门选中</li>
|
||||
<li>新增返回警告消息提示</li>
|
||||
<li>忽略不必要的属性数据返回</li>
|
||||
<li>修改参数键名时移除前缓存配置</li>
|
||||
<li>开启TopNav没有子菜单隐藏侧边栏</li>
|
||||
<li>删除fuse无效选项maxPatternLength</li>
|
||||
<li>兼容Excel下拉框内容过多无法显示的问题</li>
|
||||
<li>修复文件上传组件格式验证问题</li>
|
||||
<li>修复回显数据字典数组异常问题</li>
|
||||
<li>修复sheet超出最大行数异常问题</li>
|
||||
<li>修复Log注解GET请求记录不到参数问题</li>
|
||||
<li>修复gateway流控规则生效但不显示问题</li>
|
||||
<li>修复主题颜色在Drawer组件不会加载问题</li>
|
||||
<li>修复调度日志点击多次数据不变化的问题</li>
|
||||
<li>修复用户编辑时角色和部门存在无法修改情况</li>
|
||||
<li>修复使用透明底png图片时,自动填充黑色背景</li>
|
||||
<li>修复table中更多按钮切换主题色未生效修复问题</li>
|
||||
<li>修复某些特性的环境生成代码变乱码TXT文件问题</li>
|
||||
<li>修复代码生成图片/文件/单选时选择必填无法校验问题</li>
|
||||
<li>升级spring-cloud到最新版2021.0.5</li>
|
||||
<li>升级spring-boot到最新版本2.7.7</li>
|
||||
<li>升级spring-boot-admin到最新版2.7.10</li>
|
||||
<li>升级kaptcha到最新版2.3.3</li>
|
||||
<li>升级druid到最新版本1.2.15</li>
|
||||
<li>升级fastjson到最新版2.0.22</li>
|
||||
<li>升级pagehelper到最新版1.4.6</li>
|
||||
<li>升级transmittable-thread-local到最新版本2.14.2</li>
|
||||
<li>升级echarts到最新版本5.4.0</li>
|
||||
<li>升级core-js到最新版本3.25.3</li>
|
||||
<li>升级element-ui到最新版本2.15.12</li>
|
||||
<li>移除commons-collections多余的依赖</li>
|
||||
<li>优化弹窗内容过多展示不全问题</li>
|
||||
<li>优化导出对象的子列表为空会出现[]问题</li>
|
||||
<li>优化字符未使用下划线不进行驼峰式处理</li>
|
||||
<li>优化nacos修改xss开关时同步过滤器验证</li>
|
||||
<li>优化修改头像在小屏幕上页面布局错位的问题</li>
|
||||
<li>其他细节优化</li>
|
||||
</ol>
|
||||
</el-collapse-item>
|
||||
<el-collapse-item title="v3.6.1 - 2022-10-01">
|
||||
<ol>
|
||||
<li>数据逻辑删除不进行唯一验证</li>
|
||||
<li>支持多权限字符匹配角色数据权限</li>
|
||||
<li>页面内嵌iframe切换tab不刷新数据</li>
|
||||
<li>新增密码最大错误次数/锁定时间</li>
|
||||
<li>登录日志新增解锁账户功能</li>
|
||||
<li>通用下载方法新增config配置选项</li>
|
||||
<li>操作日志记录支持排除敏感属性字段</li>
|
||||
<li>Excel注解支持导出对象的子列表方法</li>
|
||||
<li>Excel注解支持自定义隐藏属性列</li>
|
||||
<li>Excel注解支持backgroundColor属性设置背景色</li>
|
||||
<li>升级spring-cloud-alibaba到最新版2021.0.4.0</li>
|
||||
<li>升级spring-cloud到最新版2021.0.4</li>
|
||||
<li>升级spring-boot到最新版本2.7.3</li>
|
||||
<li>升级spring-boot-admin到最新版2.7.5</li>
|
||||
<li>升级seata到最新版1.5.2</li>
|
||||
<li>升级druid到最新版本1.2.12</li>
|
||||
<li>升级fastjson到最新版2.0.14</li>
|
||||
<li>升级pagehelper到最新版1.4.5</li>
|
||||
<li>升级core-js到最新版本3.25.2</li>
|
||||
<li>升级dynamic-ds到最新版本3.5.2</li>
|
||||
<li>升级element-ui到最新版本2.15.10</li>
|
||||
<li>修复多文件上传报错出现的异常问题</li>
|
||||
<li>修复图片预览组件src属性为null值控制台报错问题</li>
|
||||
<li>修复使用FastDFS上传头像失败提示文件名没有后缀问题</li>
|
||||
<li>优化seata单独依赖模块</li>
|
||||
<li>优化任务过期不执行调度</li>
|
||||
<li>优化字典数据使用store存取</li>
|
||||
<li>优化代码生成同步后值NULL问题</li>
|
||||
<li>优化定时任务支持执行父类方法</li>
|
||||
<li>优化修改资料头像被覆盖的问题</li>
|
||||
<li>优化修改用户登录账号重复验证</li>
|
||||
<li>优化用户个人信息接口防止修改部门</li>
|
||||
<li>优化布局设置使用el-drawer抽屉显示</li>
|
||||
<li>优化日志注解记录限制请求地址的长度</li>
|
||||
<li>优化导入更新用户数据前校验数据权限</li>
|
||||
<li>优化excel/scale属性导出单元格数值类型</li>
|
||||
<li>优化日志操作中重置按钮时重复查询的问题</li>
|
||||
<li>优化多个相同角色数据导致权限SQL重复问题</li>
|
||||
<li>优化表格上右侧工具条(搜索按钮显隐&右侧样式凸出)</li>
|
||||
<li>其他细节优化</li>
|
||||
</ol>
|
||||
</el-collapse-item>
|
||||
<el-collapse-item title="v3.6.0 - 2022-07-16">
|
||||
<ol>
|
||||
<li>Excel注解支持color字体颜色</li>
|
||||
<li>用户头像上传限制只能为图片格式</li>
|
||||
<li>检查定时任务bean所在包名是否为白名单配置</li>
|
||||
<li>字典类型必须以字母开头,且只能为(小写字母,数字,下滑线)</li>
|
||||
<li>升级spring-cloud-alibaba到最新版2021.0.1.0</li>
|
||||
<li>升级spring-cloud到最新版2021.0.3</li>
|
||||
<li>升级spring-boot到最新版本2.7.1</li>
|
||||
<li>升级spring-boot-admin到最新版2.7.2</li>
|
||||
<li>升级seata到最新版1.5.1</li>
|
||||
<li>升级pagehelper到最新版1.4.3</li>
|
||||
<li>升级dynamic-ds到最新版本3.5.1</li>
|
||||
<li>升级fastjson到最新版2.0.9</li>
|
||||
<li>升级druid到最新版本1.2.11</li>
|
||||
<li>升级transmittable-thread-local到最新版本2.13.2</li>
|
||||
<li>升级element-ui到最新版本2.15.9</li>
|
||||
<li>修复字典数据显示不全问题</li>
|
||||
<li>修复操作日志查询类型条件为0时会查到所有数据</li>
|
||||
<li>优化验证码开关变量名</li>
|
||||
<li>优化设置分页参数默认值</li>
|
||||
<li>优化对空字符串参数处理的过滤</li>
|
||||
<li>优化Maven使用阿里云镜像站加速</li>
|
||||
<li>优化用户列表查询不显示密码字段</li>
|
||||
<li>优化表单构建按钮不显示正则校验</li>
|
||||
<li>优化字典类型删除多余的mapper注解</li>
|
||||
<li>优化字典数据回显样式下拉框显示值</li>
|
||||
<li>优化用户管理左侧树型组件增加选中高亮保持</li>
|
||||
<li>优化新增用户与角色信息&用户与岗位信息逻辑</li>
|
||||
<li>优化数据监控Spring Security权限认证过时代码</li>
|
||||
<li>优化岗位长主键溢出问题将查询返回类型改为Long</li>
|
||||
<li>优化删除无用admin-client依赖声明,避免造成误解</li>
|
||||
<li>优化默认不启用压缩文件缓存防止node_modules过大</li>
|
||||
<li>优化获取body请求数据缓存过滤器CacheRequestFilter</li>
|
||||
<li>优化网关通过注解解决循环引用及Bean重复问题删除allow配置</li>
|
||||
<li>其他细节优化</li>
|
||||
</ol>
|
||||
</el-collapse-item>
|
||||
<el-collapse-item title="v3.5.0 - 2022-04-11">
|
||||
<ol>
|
||||
<li>开启TopNav没有子菜单情况隐藏侧边栏</li>
|
||||
<li>侧边栏菜单名称过长悬停显示标题</li>
|
||||
<li>用户访问控制时校验数据权限,防止越权</li>
|
||||
<li>导出Excel时屏蔽公式,防止CSV注入风险</li>
|
||||
<li>组件ImageUpload支持多图同时选择上传</li>
|
||||
<li>组件FileUpload支持多文件同时选择上传</li>
|
||||
<li>代码生成树表新增(展开/折叠)</li>
|
||||
<li>代码生成子表支持日期/字典配置</li>
|
||||
<li>代码生成编辑修改打开新页签</li>
|
||||
<li>添加页签openPage支持传递参数</li>
|
||||
<li>添加清理分页的线程变量方法</li>
|
||||
<li>修改npm即将过期的注册源地址</li>
|
||||
<li>用户缓存信息添加部门ancestors祖级列表</li>
|
||||
<li>升级spring-cloud到最新版2021.0.1</li>
|
||||
<li>升级spring-boot到最新版本2.6.6</li>
|
||||
<li>升级spring-boot-admin到最新版2.6.6</li>
|
||||
<li>升级spring-boot-mybatis到最新版2.2.2</li>
|
||||
<li>降级jsencrypt版本兼容IE浏览器</li>
|
||||
<li>修复分页组件请求两次问题</li>
|
||||
<li>修复表单清除元素位置未垂直居中问题</li>
|
||||
<li>修复Excel注解prompt/combo同时使用不生效问题</li>
|
||||
<li>修复导入Excel时字典字段类型为Long转义为空问题</li>
|
||||
<li>修复登录超时刷新页面跳转登录页面还提示重新登录问题</li>
|
||||
<li>修复Xss注解字段值为空时的异常问题</li>
|
||||
<li>优化IP地址获取到多个的问题</li>
|
||||
<li>优化文件上传兼容Weblogic环境</li>
|
||||
<li>代码生成同步保留必填/类型选项</li>
|
||||
<li>优化Excel格式化不同类型的日期对象</li>
|
||||
<li>优化菜单表关键字导致的插件报错问题</li>
|
||||
<li>优化Oracle用户头像列为空时不显示问题</li>
|
||||
<li>优化页面若未匹配到字典标签则返回原字典值</li>
|
||||
<li>优化修复登录失效后多次请求提示多次弹窗问题</li>
|
||||
<li>其他细节优化</li>
|
||||
</ol>
|
||||
</el-collapse-item>
|
||||
<el-collapse-item title="v3.4.0 - 2022-01-24">
|
||||
<ol>
|
||||
<li>新增Vue3前端代码生成模板</li>
|
||||
<li>新增图片预览组件</li>
|
||||
<li>新增压缩插件实现打包Gzip</li>
|
||||
<li>新增docker一键复制的脚本</li>
|
||||
<li>自定义xss校验注解实现</li>
|
||||
<li>路由支持单独配置菜单或角色权限</li>
|
||||
<li>前端支持设置是否需要防止数据重复提交</li>
|
||||
<li>预览组件支持多图显示</li>
|
||||
<li>代码生成列表图片支持预览</li>
|
||||
<li>代码生成新增Java类型Boolean</li>
|
||||
<li>定时任务目标字符串过滤特殊字符</li>
|
||||
<li>定时任务目标字符串验证包名白名单</li>
|
||||
<li>升级nacos到最新版2.0.4</li>
|
||||
<li>升级spring-cloud到最新版2021.0.0</li>
|
||||
<li>升级spring-boot到最新版本2.6.3</li>
|
||||
<li>升级spring-boot-admin到最新版2.6.1</li>
|
||||
<li>升级pagehelper到最新版1.4.1</li>
|
||||
<li>升级fastjson到最新版1.2.79</li>
|
||||
<li>SQL工具类新增检查关键字方法</li>
|
||||
<li>修复打包后字体图标偶现的乱码问题</li>
|
||||
<li>修复版本差异导致的懒加载报错问题</li>
|
||||
<li>修复选项卡点击右键刷新丢失参数问题</li>
|
||||
<li>修复登录失效后多次请求提示多次弹窗问题</li>
|
||||
<li>优化加载字典缓存数据</li>
|
||||
<li>优化代码生成同步更新字段</li>
|
||||
<li>优化代码生成字典组重复问题</li>
|
||||
<li>优化空值不进行回显数据字典</li>
|
||||
<li>优化用户导入提示溢出则显示滚动条</li>
|
||||
<li>优化定时任务cron表达式小时设置24</li>
|
||||
<li>优化部门修改缩放后出现的错位问题</li>
|
||||
<li>优化分页方法设置成通用方便灵活调用</li>
|
||||
<li>优化用户管理部门查询选择节点后分页参数初始</li>
|
||||
<li>其他细节优化</li>
|
||||
</ol>
|
||||
</el-collapse-item>
|
||||
<el-collapse-item title="v3.3.0 - 2021-12-13">
|
||||
<ol>
|
||||
<li>新增配套并同步的Vue3前端版本</li>
|
||||
<li>新增认证对象简化权限验证</li>
|
||||
<li>新增tab对象简化页签操作</li>
|
||||
<li>修改获取缓存信息方式</li>
|
||||
<li>修改权限认证注解实现</li>
|
||||
<li>自定义文字复制剪贴指令</li>
|
||||
<li>升级axios到最新版本0.24.0</li>
|
||||
<li>升级core-js到最新版本3.19.1</li>
|
||||
<li>升级jsencrypt到最新版本3.2.1</li>
|
||||
<li>升级js-cookie到最新版本3.0.1</li>
|
||||
<li>升级clipboard到最新版本2.0.8</li>
|
||||
<li>升级velocity到最新版本2.3</li>
|
||||
<li>升级spring-boot到最新版本2.5.6</li>
|
||||
<li>升级spring-boot-admin到最新版2.5.4</li>
|
||||
<li>升级dynamic-ds到最新版本3.5.0</li>
|
||||
<li>代码生成预览支持复制内容</li>
|
||||
<li>修复五级以上菜单出现的404问题</li>
|
||||
<li>生产环境使用路由懒加载提升页面响应速度</li>
|
||||
<li>任务屏蔽违规字符&参数忽略双引号中的逗号</li>
|
||||
<li>优化用户个人信息接口防止修改用户名</li>
|
||||
<li>优化登录/验证码请求headers不设置token</li>
|
||||
<li>优化注册成功提示消息类型success</li>
|
||||
<li>优化下载解析blob响应是否登录失效</li>
|
||||
<li>修复字符串无法被反转义问题</li>
|
||||
<li>修复响应体过大出现的乱码问题</li>
|
||||
<li>修复回显数据字典组的键值错误</li>
|
||||
<li>修复代码生成复选框字典遗漏问题</li>
|
||||
<li>修复代码生成模板主子表删除缺少事务</li>
|
||||
<li>其他细节优化</li>
|
||||
</ol>
|
||||
</el-collapse-item>
|
||||
<el-collapse-item title="v3.2.0 - 2021-10-12">
|
||||
<ol>
|
||||
<li>菜单管理支持配置路由参数</li>
|
||||
<li>定时任务支持在线生成cron表达式</li>
|
||||
<li>自定义弹层溢出滚动样式</li>
|
||||
<li>自定义可拖动弹窗宽度指令</li>
|
||||
<li>自定义可拖动弹窗高度指令</li>
|
||||
<li>修改时检查用户数据权限范围</li>
|
||||
<li>修复保存配置主题颜色失效问题</li>
|
||||
<li>新增暗色菜单风格主题</li>
|
||||
<li>菜单&部门新增展开/折叠功能</li>
|
||||
<li>页签新增关闭左侧&添加图标</li>
|
||||
<li>代码生成主子表多选行数据</li>
|
||||
<li>日期范围支持添加多组</li>
|
||||
<li>Excel导入支持@Excels注解</li>
|
||||
<li>Excel注解支持导入导出标题信息</li>
|
||||
<li>Excel注解支持自定义数据处理器</li>
|
||||
<li>日志注解新增是否保存响应参数</li>
|
||||
<li>定时任务对检查异常进行事务回滚</li>
|
||||
<li>补充定时任务表字段注释</li>
|
||||
<li>定时任务屏蔽ldap远程调用</li>
|
||||
<li>新增通用方法简化下载使用</li>
|
||||
<li>新增通用方法简化模态/缓存使用</li>
|
||||
<li>新增data-dict组件简化数据字典使用</li>
|
||||
<li>禁用dict-tag组件的渐变动画</li>
|
||||
<li>默认首页使用keep-alive缓存</li>
|
||||
<li>升级springcloud到最新版2020.0.4</li>
|
||||
<li>升级spring-boot到最新版本2.5.5</li>
|
||||
<li>升级spring-boot-admin到最新版2.5.2</li>
|
||||
<li>升级pagehelper到最新版1.4.0</li>
|
||||
<li>升级fastjson到最新版1.2.78</li>
|
||||
<li>升级druid到最新版1.2.8</li>
|
||||
<li>升级element-ui到最新版本2.15.6</li>
|
||||
<li>升级sass-loader到最新版本10.1.1</li>
|
||||
<li>升级dart-sass到版本1.32.13</li>
|
||||
<li>升级file-saver到最新版本2.0.5</li>
|
||||
<li>优化异常处理信息</li>
|
||||
<li>验证码默认20s超时</li>
|
||||
<li>优化代码生成导入表按创建时间排序</li>
|
||||
<li>优化代码生成点击预览重置激活tab</li>
|
||||
<li>修复主子表代码模板方法名错误问题</li>
|
||||
<li>修复xss过滤后格式出现的异常</li>
|
||||
<li>修复多图组件验证失败被删除问题</li>
|
||||
<li>请求参数新增reasonable分页合理化属性</li>
|
||||
<li>修复代码生成页面数据编辑保存之后总是跳转第一页的问题</li>
|
||||
<li>修复带safari浏览器无法格式化utc日期格式yyyy-MM-dd'T'HH:mm:ss.SSS问题</li>
|
||||
<li>其他细节优化</li>
|
||||
</ol>
|
||||
</el-collapse-item>
|
||||
<el-collapse-item title="v3.1.0 - 2021-08-02">
|
||||
<ol>
|
||||
<li>支持配置XSS跨站脚本过滤</li>
|
||||
<li>支持配置验证码开关&类型</li>
|
||||
<li>新增是否开启用户注册功能</li>
|
||||
<li>用户管理新增分配角色功能</li>
|
||||
<li>角色管理新增分配用户功能</li>
|
||||
<li>系统布局配置支持动态标题开关</li>
|
||||
<li>增加字典标签样式回显dict组件</li>
|
||||
<li>FileUpload组件支持多文件上传</li>
|
||||
<li>ImageUpload组件支持多图片上传</li>
|
||||
<li>封装通用iframe组件</li>
|
||||
<li>菜单路由配置支持内链访问</li>
|
||||
<li>全局注册通用组件</li>
|
||||
<li>富文本默认上传返回url类型</li>
|
||||
<li>富文本新增上传文件大小限制</li>
|
||||
<li>增加自定义弹窗拖拽指令</li>
|
||||
<li>顶部菜单排除隐藏的默认路由</li>
|
||||
<li>跳转路由高亮相对应的菜单栏</li>
|
||||
<li>日志列表支持排序操作</li>
|
||||
<li>分页组件新增pagerCount属性</li>
|
||||
<li>定时任务屏蔽http(s)远程调用</li>
|
||||
<li>文件服务本地资源允许跨域访问</li>
|
||||
<li>升级spring-boot到最新版本2.5.3</li>
|
||||
<li>升级spring-boot-admin到最新版2.4.3</li>
|
||||
<li>升级spring-boot-mybatis到最新版2.2.0</li>
|
||||
<li>升级nacos到最新版2.0.3</li>
|
||||
<li>升级pagehelper到最新版1.3.1</li>
|
||||
<li>升级minio到最新版本8.2.2</li>
|
||||
<li>升级tobato到最新版本1.27.2</li>
|
||||
<li>升级dynamic-ds到最新版本3.4.1</li>
|
||||
<li>升级commons.io到最新版本v2.11.0</li>
|
||||
<li>升级common-pool到最新版本2.10.0</li>
|
||||
<li>升级commons.fileupload到最新版本v1.4</li>
|
||||
<li>升级element-ui到最新版本2.15.3</li>
|
||||
<li>优化统一网关错误码响应</li>
|
||||
<li>修复导出含params属性对象参数问题</li>
|
||||
<li>修复任意账户越权问题</li>
|
||||
<li>修复定时任务日志执行状态显示</li>
|
||||
<li>修改登录失效返回值code401</li>
|
||||
<li>用户信息长度校验限制</li>
|
||||
<li>角色&菜单新增字段属性提示信息</li>
|
||||
<li>修复用户搜索分页变量错误</li>
|
||||
<li>优化部门父级启用状态</li>
|
||||
<li>启用部门状态排除顶级节点</li>
|
||||
<li>定时任务新增更多操作</li>
|
||||
<li>优化代码生成模板</li>
|
||||
<li>优化顶部菜单显示样式</li>
|
||||
<li>优化导入用户显示样式</li>
|
||||
<li>优化用户不能删除自己</li>
|
||||
<li>密码框新增显示切换密码图标</li>
|
||||
<li>BLOB下载时清除URL对象引用</li>
|
||||
<li>其他细节优化</li>
|
||||
</ol>
|
||||
</el-collapse-item>
|
||||
<el-collapse-item title="v3.0.0 - 2021-06-10">
|
||||
<ol>
|
||||
<li>新增菜单导航显示风格TopNav(false为左侧导航菜单,true为顶部导航菜单)</li>
|
||||
<li>布局设置支持保存&重置配置</li>
|
||||
<li>富文本编辑器支持自定义上传地址</li>
|
||||
<li>富文本编辑组件新增readOnly属性</li>
|
||||
<li>优化参数&字典缓存操作</li>
|
||||
<li>新增IE浏览器版本过低提示页面</li>
|
||||
<li>页签TagsView新增关闭右侧功能</li>
|
||||
<li>显隐列组件加载初始默认隐藏列</li>
|
||||
<li>关闭头像上传窗口还原默认图片</li>
|
||||
<li>个人信息添加手机&邮箱重复验证</li>
|
||||
<li>代码生成模板树表操作列添加新增按钮</li>
|
||||
<li>代码生成模板修复主子表字段重名问题</li>
|
||||
<li>支持docker部署项目</li>
|
||||
<li>升级springcloud到最新版2020.0.3</li>
|
||||
<li>升级spring-boot-alibaba到最新版2021.1</li>
|
||||
<li>升级nacos到最新版2.0.1 性能提升</li>
|
||||
<li>升级spring-boot到最新版本2.5.0</li>
|
||||
<li>升级spring-boot-admin到最新版2.4.1</li>
|
||||
<li>升级swagger到最新版本3.0.0</li>
|
||||
<li>升级mybatis到最新版3.5.6</li>
|
||||
<li>升级dynamic-ds到最新版本3.3.2</li>
|
||||
<li>升级minio到最新版本8.2.1</li>
|
||||
<li>升级fastjson到最新版1.2.76</li>
|
||||
<li>升级druid到最新版本v1.2.6</li>
|
||||
<li>修复四级菜单无法显示问题</li>
|
||||
<li>修复树表数据显示不全&加载慢问题</li>
|
||||
<li>修复关闭confirm提示框控制台报错问题</li>
|
||||
<li>上传媒体类型添加视频格式</li>
|
||||
<li>增加feign客户端IP头部信息</li>
|
||||
<li>修复两处存在SQL注入漏洞问题</li>
|
||||
<li>优化图片工具类读取文件,防止异常</li>
|
||||
<li>修复导出角色数据范围翻译缺少仅本人</li>
|
||||
<li>修复表单构建选择下拉选择控制台报错问题</li>
|
||||
<li>修复请求形参未传值记录日志异常问题</li>
|
||||
<li>调整sql默认为当前时间</li>
|
||||
<li>修改ip字段长度防止ipv6地址长度不够</li>
|
||||
<li>删除操作日志记录信息</li>
|
||||
<li>修复firefox下表单构建拖拽会新打卡一个选项卡</li>
|
||||
<li>用户&角色单条删除时使其逻辑删除</li>
|
||||
<li>优化树表代码生成模板</li>
|
||||
<li>修正通知公告日志记录类型</li>
|
||||
<li>修正后端导入表权限标识</li>
|
||||
<li>过滤BindingResult对象,防止异常</li>
|
||||
<li>Redis设置HashKey序列化</li>
|
||||
<li>优化Excel导入增加空行判断</li>
|
||||
<li>树级结构更新子节点使用replaceFirst</li>
|
||||
<li>富文本工具栏配置视频</li>
|
||||
<li>修正模板字符编码</li>
|
||||
<li>优化通用下载完成后删除节点</li>
|
||||
<li>角色非自定义权限范围清空选择值</li>
|
||||
<li>修改主题后mini类型按钮无效问题</li>
|
||||
<li>其他细节优化</li>
|
||||
</ol>
|
||||
</el-collapse-item>
|
||||
<el-collapse-item title="v2.5.0 - 2021-02-02">
|
||||
<ol>
|
||||
<li>增加分布式事务seata支持</li>
|
||||
<li>代码生成模板支持主子表</li>
|
||||
<li>表格右侧工具栏组件支持显隐列</li>
|
||||
<li>图片组件添加预览&移除功能</li>
|
||||
<li>Excel注解支持Image图片导出</li>
|
||||
<li>操作按钮组调整为朴素按钮样式</li>
|
||||
<li>代码生成支持文件上传组件</li>
|
||||
<li>代码生成日期控件区分范围</li>
|
||||
<li>代码生成数据库文本类型生成表单文本域</li>
|
||||
<li>用户手机邮箱&菜单组件修改允许空字符串</li>
|
||||
<li>修复header获取username中文情况下乱码</li>
|
||||
<li>修复角色管理-编辑角色-功能权限显示异常</li>
|
||||
<li>修正操作日志删除接口路径</li>
|
||||
<li>修复IE11浏览器报错问题</li>
|
||||
<li>修复sentinel流量告警前端不响应</li>
|
||||
<li>修正侧边栏静态路由丢失问题</li>
|
||||
<li>修复导入数据为负浮点数时丢失精度问题</li>
|
||||
<li>修复Get请求参数特殊值无法正确的传参</li>
|
||||
<li>更换过期的共享配置属性</li>
|
||||
<li>添加启动执行脚本</li>
|
||||
<li>升级element-ui到最新版本2.15.0</li>
|
||||
<li>升级spring-boot到最新版本2.3.7</li>
|
||||
<li>升级spring-cloud到Hoxton.SR9</li>
|
||||
<li>升级spring-boot-alibaba到最新版2.2.5</li>
|
||||
<li>升级spring-boot-admin到最新版2.3.1</li>
|
||||
<li>升级druid到最新版本v1.2.4</li>
|
||||
<li>升级fastjson到最新版1.2.75</li>
|
||||
<li>其他细节优化</li>
|
||||
</ol>
|
||||
</el-collapse-item>
|
||||
<el-collapse-item title="v2.4.0 - 2020-12-22">
|
||||
<ol>
|
||||
<li>增加分布式文件Minio支持</li>
|
||||
<li>支持多数据源切换</li>
|
||||
<li>修复多级菜单之间切换无法缓存的问题</li>
|
||||
<li>三级菜单自动配置组件</li>
|
||||
<li>支持主题风格配置</li>
|
||||
<li>服务之间feign调用传递用户信息</li>
|
||||
<li>删除用户和角色解绑关联</li>
|
||||
<li>去除用户手机邮箱部门必填验证</li>
|
||||
<li>代码生成预览支持高亮显示</li>
|
||||
<li>获取请求token方法移至权限工具类</li>
|
||||
<li>代码生成预览提供滚动机制</li>
|
||||
<li>权限工具类增加管理员判断</li>
|
||||
<li>日志记录增加过滤多文件场景</li>
|
||||
<li>修改用户头像预览宽高</li>
|
||||
<li>Excel支持注解align对齐方式</li>
|
||||
<li>项目添加robots.txt 防止系统被搜索引擎收录</li>
|
||||
<li>移除path-to-regexp正则匹配插件</li>
|
||||
<li>修改Set可能导致嵌套的问题</li>
|
||||
<li>调整代码生成页列宽</li>
|
||||
<li>回显数据字典防止空值报错</li>
|
||||
<li>支持get请求映射params参数</li>
|
||||
<li>登录后push添加catch防止出现检查错误</li>
|
||||
<li>防止安全扫描YUI出现的风险提示</li>
|
||||
<li>代码生成删除多余的数字float类型</li>
|
||||
<li>Excel支持导入Boolean型数据</li>
|
||||
<li>修正转换字符串的目标字符集属性</li>
|
||||
<li>删除多余的依赖</li>
|
||||
<li>修改node-sass为dart-sass</li>
|
||||
<li>升级poi到最新版本4.1.2</li>
|
||||
<li>升级axios到最新版本0.21.0</li>
|
||||
<li>升级element-ui到最新版本2.14.1</li>
|
||||
<li>升级vue到最新版本2.6.12</li>
|
||||
<li>升级vuex到最新版本3.6.0</li>
|
||||
<li>升级vue-cli到版本4.5.9</li>
|
||||
<li>升级vue-router到最新版本3.4.9</li>
|
||||
<li>升级vue-cli到最新版本4.4.6</li>
|
||||
<li>升级vue-cropper到最新版本0.5.5</li>
|
||||
<li>升级clipboard到最新版本2.0.6</li>
|
||||
<li>升级core-js到最新版本3.8.1</li>
|
||||
<li>升级echarts到最新版本4.9.0</li>
|
||||
<li>升级file-saver到最新版本2.0.4</li>
|
||||
<li>升级fuse.js到最新版本6.4.3</li>
|
||||
<li>升级js-beautify到最新版本1.13.0</li>
|
||||
<li>升级js-cookie到最新版本2.2.1</li>
|
||||
<li>升级path-to-regexp到最新版本6.2.0</li>
|
||||
<li>升级quill到最新版本1.3.7</li>
|
||||
<li>升级screenfull到最新版本5.0.2</li>
|
||||
<li>升级sortablejs到最新版本1.10.2</li>
|
||||
<li>升级vuedraggable到最新版本2.24.3</li>
|
||||
<li>升级chalk到最新版本4.1.0</li>
|
||||
<li>升级eslint到最新版本7.15.0</li>
|
||||
<li>升级eslint-plugin-vue到最新版本7.2.0</li>
|
||||
<li>升级lint-staged到最新版本10.5.3</li>
|
||||
<li>升级runjs到最新版本4.4.2</li>
|
||||
<li>升级sass-loader到最新版本10.1.0</li>
|
||||
<li>升级script-ext-html-webpack-plugin到最新版本2.1.5</li>
|
||||
<li>升级svg-sprite-loader到最新版本5.1.1</li>
|
||||
<li>升级vue-template-compiler到最新版本2.6.12</li>
|
||||
<li>其他细节优化</li>
|
||||
</ol>
|
||||
</el-collapse-item>
|
||||
<el-collapse-item title="v2.3.0 - 2020-11-20">
|
||||
<ol>
|
||||
<li>新增文件服务应用(支持本地、FastDFS)</li>
|
||||
<li>优化头像样式,鼠标移入悬停遮罩</li>
|
||||
<li>AjaxResult重写put方法,以方便链式调用</li>
|
||||
<li>代码生成支持上传控件</li>
|
||||
<li>新增图片上传组件</li>
|
||||
<li>支持用户头像更新</li>
|
||||
<li>调整默认首页</li>
|
||||
<li>角色权限验证hasRole匹配改为equals</li>
|
||||
<li>修正数组权限为空判断</li>
|
||||
<li>修正注释选中节点和半选节点获取</li>
|
||||
<li>升级pagehelper到最新版1.3.0</li>
|
||||
<li>升级fastjson到最新版1.2.74</li>
|
||||
<li>修正定时任务执行一次权限标识</li>
|
||||
<li>修复页签关闭所有固定标签路由不刷新问题</li>
|
||||
<li>表单构建布局型组件新增按钮</li>
|
||||
<li>调整日志路径到模块目录</li>
|
||||
<li>修正菜单提示信息错误</li>
|
||||
<li>其他细节优化</li>
|
||||
</ol>
|
||||
</el-collapse-item>
|
||||
<el-collapse-item title="v2.2.0 - 2020-10-10">
|
||||
<ol>
|
||||
<li>移除 OAuth2 改为 Redis</li>
|
||||
<li>升级SpringCloud到最新版本Hoxton.SR8</li>
|
||||
<li>升级SpringCloud Alibaba到最新版本2.2.3</li>
|
||||
<li>升级SpringBoot Admin到最新版本2.3.0</li>
|
||||
<li>升级Fastjson到最新版1.2.73</li>
|
||||
<li>新增在线用户会话管理</li>
|
||||
<li>修改用户个人资料/密码同步缓存信息</li>
|
||||
<li>修复前端通用导出方法参数传值请求方式问题</li>
|
||||
<li>菜单新增是否缓存keep-alive</li>
|
||||
<li>菜单&数据权限新增(展开/折叠 全选/全不选 父子联动)</li>
|
||||
<li>Job与Gen模块增加Redis默认配置</li>
|
||||
<li>新增表格右侧工具栏组件right-toolbar</li>
|
||||
<li>代码生成支持同步数据库</li>
|
||||
<li>代码生成支持富文本控件</li>
|
||||
<li>代码生成树模板去掉多余双引号</li>
|
||||
<li>代码生成添加select必填选项</li>
|
||||
<li>代码生成页面时不忽略remark属性</li>
|
||||
<li>修复代码生成下载路径错误</li>
|
||||
<li>左侧菜单文字过长显示省略号</li>
|
||||
<li>表格操作列间距调整</li>
|
||||
<li>Excel注解支持自动统计数据总和</li>
|
||||
<li>Excel注解支持设置BigDecimal精度&舍入规则</li>
|
||||
<li>导入Excel整形值校验优化</li>
|
||||
<li>导出Excel类型NUMERIC支持精度浮点类型</li>
|
||||
<li>导出Excel调整targetAttr获取值方法,防止get方法不规范</li>
|
||||
<li>Token续期调整为后端刷新</li>
|
||||
<li>Token设置默认有效期时长12小时</li>
|
||||
<li>网关白名单放入nacos配置&支持模糊匹配</li>
|
||||
<li>修复富文本工具栏样式不对齐问题</li>
|
||||
<li>Editor组件优化,支持自定义高度&图片冲突问题</li>
|
||||
<li>
|
||||
修复富文本空格和缩进保存后不生效问题&删除重复的placeholder
|
||||
</li>
|
||||
<li>限制系统内置参数不允许删除</li>
|
||||
<li>修正调用目标字符串最大长度</li>
|
||||
<li>修改自定义权限实现</li>
|
||||
<li>优化递归菜单&部门子节点</li>
|
||||
<li>修改sass为node-sass,避免el-icon图标乱码</li>
|
||||
<li>修复根节点为子部门时,树状结构显示问题</li>
|
||||
<li>全局异常状态汉化拦截处理</li>
|
||||
<li>唯一限制条件只返回单条数据</li>
|
||||
<li>其他细节优化</li>
|
||||
</ol>
|
||||
</el-collapse-item>
|
||||
|
||||
<el-collapse-item title="v2.1.0 - 2020-08-02">
|
||||
<ol>
|
||||
<li>表格工具栏右侧添加刷新&显隐查询栏</li>
|
||||
<li>OAuth自动刷新续签Token</li>
|
||||
<li>网关支持黑名单配置</li>
|
||||
<li>权限配置自动注册</li>
|
||||
<li>Feign配置自动注册</li>
|
||||
<li>代码生成支持选择上级菜单</li>
|
||||
<li>代码生成支持复选框</li>
|
||||
<li>代码生成支持自定义路径</li>
|
||||
<li>验证码类型支持(数组计算、字符验证)</li>
|
||||
<li>Excel支持sort导出排序</li>
|
||||
<li>Excel支持分割字符串组内容</li>
|
||||
<li>excel 导入数字不需要格式化 ,导入允许列和属性个数不一致</li>
|
||||
<li>新增菜单默认主类目</li>
|
||||
<li>升级vue-cli版本到4.4.4</li>
|
||||
<li>修改 node-sass 为 dart-sass</li>
|
||||
<li>升级element-ui版本到2.13.2</li>
|
||||
<li>删除babel,提高编译速度</li>
|
||||
<li>修复验证码异常时network面板的中文会出现乱码问题</li>
|
||||
<li>修复 utils/index.js 中不包含 parseTime 函数的 bug</li>
|
||||
<li>优化selectDictLabel方法,数组迭代器换为some</li>
|
||||
<li>修复客户端模式认证会出现错误</li>
|
||||
<li>检查字符支持小数点&降级改成异常提醒</li>
|
||||
<li>定时任务添加cron表达式验证</li>
|
||||
<li>代码生成查询条件修正</li>
|
||||
<li>修正角色管理导出权限权限字符</li>
|
||||
<li>修正防止切换权限用户后登录出现404</li>
|
||||
<li>终端设置安全码加密&更新缓存</li>
|
||||
<li>修复头像上传成功二次打开无法改变裁剪框大小和位置问题</li>
|
||||
<li>修复布局为small者mini用户表单显示错位问题</li>
|
||||
<li>修复代码生成点击多次表修改数据不变化的问题</li>
|
||||
<li>修复代码生成导入表结构出现异常页面不提醒问题</li>
|
||||
<li>修复角色权限修改时已有权限未自动勾选异常</li>
|
||||
<li>创建用户不允许选择系统管理员角色</li>
|
||||
<li>添加全局异常处理(网关异常&业务异常)</li>
|
||||
<li>修复终端查询Enter键搜索时是刷新页面而不是查询列表</li>
|
||||
<li>删除job重复表单参数</li>
|
||||
<li>代码生成浮点型改用BigDecimal</li>
|
||||
<li>表单类型为Integer/Long设置整形默认值</li>
|
||||
<li>修改用户管理复选框宽度,防止部分浏览器出现省略号</li>
|
||||
<li>
|
||||
RedisCache中所有方法参数添加final,并优化list取出效率,添加其它常用redis方法
|
||||
</li>
|
||||
<li>修正定时任务日志权限字符</li>
|
||||
<li>添加Jackson时区配置</li>
|
||||
<li>代码生成相关问题修复</li>
|
||||
<li>自定义oauth2返回异常信息</li>
|
||||
<li>升级nacos到最新版1.3.0 全新内核构建</li>
|
||||
<li>修正【代码生成】功能无法下载的问题</li>
|
||||
<li>其他细节优化</li>
|
||||
</ol>
|
||||
</el-collapse-item>
|
||||
|
||||
<el-collapse-item title="v2.0.0 - 2019-12-02">
|
||||
<ol>
|
||||
<li>新增代码生成</li>
|
||||
<li>新增@RepeatSubmit注解,防止重复提交</li>
|
||||
<li>新增菜单主目录添加/删除操作</li>
|
||||
<li>日志记录过滤特殊对象,防止转换异常</li>
|
||||
<li>修改代码生成路由脚本错误</li>
|
||||
<li>用户上传头像实时同步缓存,无需重新登录</li>
|
||||
<li>调整切换页签后不重新加载数据</li>
|
||||
<li>添加jsencrypt实现参数的前端加密</li>
|
||||
<li>系统退出删除用户缓存记录</li>
|
||||
<li>其他细节优化</li>
|
||||
</ol>
|
||||
</el-collapse-item>
|
||||
<el-collapse-item title="v2.0.0 - 2020-06-10">
|
||||
<ol>
|
||||
<li>使用Sentinel代替Hystrix</li>
|
||||
<li>菜单新增终端管理配置</li>
|
||||
<li>菜单新增Nacos&Sentinel控制台</li>
|
||||
<li>代码生成适配Cloud</li>
|
||||
<li>记录登录退出日志信息</li>
|
||||
<li>网关验证码过滤器添加放行校验</li>
|
||||
<li>个性化的定制自动加载类</li>
|
||||
<li>定时任务调整label-width,防止部署出现错位</li>
|
||||
<li>调整表头固定列默认样式</li>
|
||||
<li>代码生成模板调整,字段为String并且必填则加空串条件</li>
|
||||
<li>代码生成字典Integer/Long使用parseInt</li>
|
||||
<li>修复退出登录重定向到登录页,登录后参数丢失。</li>
|
||||
<li>修正岗位导出权限注解</li>
|
||||
<li>修复首页搜索菜单外链无法点击跳转问题</li>
|
||||
<li>修复菜单管理选择图标,backspace删除时不过滤数据</li>
|
||||
<li>用户管理部门分支节点不可检查&显示计数</li>
|
||||
<li>数据范围过滤属性调整</li>
|
||||
<li>字典管理添加缓存读取</li>
|
||||
<li>参数管理支持缓存操作</li>
|
||||
<li>升级fastjson到最新版1.2.70 修复高危安全漏洞</li>
|
||||
<li>dev启动默认打开浏览器</li>
|
||||
<li>使用vue-cli默认source-map</li>
|
||||
<li>slidebar eslint报错优化</li>
|
||||
<li>当tags-view滚动关闭右键菜单</li>
|
||||
<li>支持一级菜单(和主页同级)在main区域显示</li>
|
||||
<li>限制外链地址必须以http(s)😕/开头</li>
|
||||
<li>tagview & sidebar 主题颜色与element ui(全局)同步</li>
|
||||
<li>
|
||||
修复dict_sort不可update为0的问题&查询返回增加dict_sort升序排序
|
||||
</li>
|
||||
<li>权限部分代码调整</li>
|
||||
<li>其他细节优化</li>
|
||||
</ol>
|
||||
</el-collapse-item>
|
||||
<el-collapse-item title="v1.0.0 - 2020-05-20">
|
||||
<ol>
|
||||
<li>若依微服务系统正式发布</li>
|
||||
</ol>
|
||||
</el-collapse-item>
|
||||
</el-collapse>
|
||||
</el-card>
|
||||
</el-col>
|
||||
<el-col :lg="8" :md="12" :sm="24" :xs="24">
|
||||
<el-card class="update-log">
|
||||
<div slot="header" class="clearfix">
|
||||
<span>捐赠支持</span>
|
||||
</div>
|
||||
<div class="body">
|
||||
<img
|
||||
alt="donate"
|
||||
src="@/assets/images/pay.png"
|
||||
width="100%"
|
||||
/>
|
||||
<span style="display: inline-block; height: 30px; line-height: 30px"
|
||||
>你可以请作者喝杯咖啡表示鼓励</span
|
||||
>
|
||||
</div>
|
||||
</el-card>
|
||||
<h2>车联网客户业务系统</h2>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
|
|
|
@ -9,7 +9,7 @@ const CompressionPlugin = require('compression-webpack-plugin')
|
|||
|
||||
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 || 8081 // 端口
|
||||
|
||||
// vue.config.js 配置说明
|
||||
//官方vue.config.js 参考文档 https://cli.vuejs.org/zh/config/#css-loaderoptions
|
||||
|
|
Loading…
Reference in New Issue