绿通前台代码修改

master
gsy 2 years ago
parent 7c33ec3f4d
commit f633991753

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -5,8 +5,8 @@
<link rel="icon" href="/favicon.ico"/>
<title></title>
<script type="module" crossorigin src="./assets/index.1774c424.js"></script>
<link rel="stylesheet" href="./assets/index.a8b6c128.css">
<script type="module" crossorigin src="./assets/index.3715579c.js"></script>
<link rel="stylesheet" href="./assets/index.a4241367.css">
</head>
<body>
<div id="app">

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

2
package-lock.json generated

@ -1,5 +1,5 @@
{
"name": "whitelistmanagersysview",
"name": "greentrafficview",
"version": "0.0.0",
"lockfileVersion": 1,
"requires": true,

@ -1,5 +1,5 @@
{
"name": "whitelistmanagersysview",
"name": "greentrafficview",
"version": "0.0.0",
"private": true,
"scripts": {

@ -6,41 +6,6 @@ export function getUrlKey(name, url) {
return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(url) || [, ""])[1].replace(/\+/g, '%20')) || null
}
export const selectMenu = data => post("/SSMPBack/system/SysMenu/selectUseOnlyThirdMenu", data)
//权限检查
export const checkOrgOfPRMIS = data => post("/SSMPBack/system/SysMenu/checkOrgOfPRMIS", data)
//白名单管理
export const selectCarNoPage = data => post("/WhiteListManagerSys/Manager/selectCarNoPage", data)
export const ManagerOtherInfo = () => post("/WhiteListManagerSys/Manager/ManagerOtherInfo", {})
export const selectStaNoListByRoadNo = data => post("/WhiteListManagerSys/Manager/selectStaNoListByRoadNo", data)
export const checkACarNo = data => post("/WhiteListManagerSys/Manager/checkACarNo", data)
export const addCarNo = data => post("/WhiteListManagerSys/Manager/addCarNo", data)
export const deleteCarNo = data => post("/WhiteListManagerSys/Manager/deleteCarNo", data)
export const completeCarNo = data => post("/WhiteListManagerSys/Manager/completeCarNo", data)
export const getCarNoACountText = data => post("/WhiteListManagerSys/Manager/getCarNoACountText", data)
export const deleteCarNoACountText = data => post("/WhiteListManagerSys/Manager/deleteCarNoACountText", data)
export const insertCarNoACountText = data => post("/WhiteListManagerSys/Manager/insertCarNoACountText", data)
export const getVerNo = data => post("/WhiteListManagerSys/Manager/getVerNo", data)
export const toUpVerNo = data => post("/WhiteListManagerSys/Manager/toUpVerNo", data)
//所属单位管理
export const selectComNoPage = data => post("/WhiteListManagerSys/ComNo/selectComNoPage", data)
export const checkValue = data => post("/WhiteListManagerSys/ComNo/checkValue", data)
export const saveData = data => post("/WhiteListManagerSys/ComNo/saveData", data)
export const deleteComNo = data => post("/WhiteListManagerSys/ComNo/deleteComNo", data)
//微信车牌绑定
export const getUserPage = data => post("/WhiteListManagerSys/WxChatCarUser/getUserPage", data)
export const getCarColorList = data => post("/WhiteListManagerSys/WxChatCarUser/getCarColorList", data)
export const commitCarUser = data => post("/WhiteListManagerSys/WxChatCarUser/commitCarUser", data)
export const deleteCarUser = data => post("/WhiteListManagerSys/WxChatCarUser/deleteCarUser", data)
//收费运营状态
export const getNumAndCashOfType = data => post("/WhiteListManagerSys/StanEcharts/getNumAndCashOfType", data)
//下载模板
export const downloadFile = () => download("/WhiteListManagerSys/Manager/fileDownload", {})
// 绿通分页查询表格数据
export const getGreenTrafficPage = data => post("GreenTraffic/GreenTraffic/getGreenTrafficPage", data)
@ -65,70 +30,6 @@ export const getCheckResult = data => post("GreenTraffic/GreenTraffic/getGreenTr
export const exportGreenTrafficExcle = data => download("GreenTraffic/GreenTraffic/exportGreenTrafficExcle",data)
//岗位管理分页查询
export const getPositionList = data => post("StationBaseInfo/Position/getPositionList", data)
//保存岗位数据
export const savePosition = data => post("StationBaseInfo/Position/addPosition", data)
//批量删除岗位数据
export const deletePosition = data => post("StationBaseInfo/Position/deletePosition", data)
//分页查询运营人员数据
export const getOperationsList = data => post("StationBaseInfo/Operators/getOperatorsList", data)
//获取运营人员下拉数据
export const getOperationsFiterData = data => post("StationBaseInfo/Operators/getFiterData",data)
//新增运营人员数据
export const addOperators = data => post("StationBaseInfo/Operators/addOperators",data)
//修改运营人员数据
export const updateOperators = data => post("StationBaseInfo/Operators/updateOperators",data)
//删除运营人员数据
export const deleteOperators = data => post("StationBaseInfo/Operators/deleteOperators",data)
//统计运营人员数据
export const getOperatorsCollectionData = data => post("StationBaseInfo/Operators/getCollectionData",data)
//分页查询所站数据
export const getStationInfoList = data => post("StationBaseInfo/StationInfo/getStationInfoList", data)
//获取所站信息下拉数据
export const getStationFiterData = data => post("StationBaseInfo/StationInfo/getFiterData",data)
//新增所站信息
export const addStation = data => post("StationBaseInfo/StationInfo/addStation",data)
//获取需要提醒有到期数据
export const getOverMsg = data => post("StationBaseInfo/StationInfo/getOverMsg",data)
//删除所站信息
export const deleteStation = data => post("StationBaseInfo/StationInfo/deleteStation",data)
//分页查询车道信息
export const getSetUpList = data => post("StationBaseInfo/SetUp/getSetUpList",data)
//获取车道下拉数据
export const getSetUpFiterData = data => post("StationBaseInfo/SetUp/getFiterData",data)
//获取车道下拉数据
export const getSetUpCollectionData = data => post("StationBaseInfo/SetUp/getCollectionData",data)

@ -1,78 +1,21 @@
import * as vueRouter from "vue-router";
import Manager from '../../views/manager/Manager.vue';
import gpy from '../../views/manager/gpy/gpy.vue';
import comNo from '../../views/manager/comNo/comNo.vue';
import MenuIndex from '../../views/MenuIndex/MenuIndex.vue';
import NotFound from '../../views/ErrorPage/404.vue';
import wxCarUserInfo from '../../views/wxCharCarUser/wxCarUserInfo.vue';
import showStanEcharts from '../../views/showStanEcharts/showStanEcharts.vue';
import GreenTrafficQueryPage from '../..//views/greentraffic/greentrafficquerypage.vue';
import GreenTrafficPrintView from '../..//views/greentraffic/greentrafficChecPrint.vue';
const routes = [
// {
// path: '/WhiteListManagerSys',
// component: MenuIndex,
// meta: {
// keepAlive: true
// },
// children: [
// {
// path: 'Manager',
// component: Manager
// },
// {
// path: 'logManager',
// component: logManager
// },
// ]
// },
{
path: '/WhiteListManagerSys/gpy',
component: gpy
}, {
path: '/WhiteListManagerSys/comNo',
component: comNo
}, {
path: '/WhiteListManagerSys/Manager',
component: Manager
}, {
path: '/WhiteListManagerSys/showStanEcharts',
component: showStanEcharts
}, {
path: '/WhiteListManagerSys/wxCarUserInfo',
component: wxCarUserInfo
}, {
path: '/WhiteListManagerSys/404',
component: NotFound
}, {
path: '/WhiteListManagerSys:pathMatch(.*)',
redirect: '/WhiteListManagerSys/404'
}, {
path: '/greenTraffic/queryPage',
component: import("@/views/greentraffic/greentrafficquerypage.vue")
}, {
path: '/greenTraffic/printView',
component: import("@/views/greentraffic/greentrafficChecPrint.vue")
}, {
path: '/stationBaseInfo/positionManage',
component: import("@/views/stationBaseInfo/positionManage.vue")
}, {
path: '/stationBaseInfo/operatorsManage',
component: import("@/views/stationBaseInfo/operatorsManage/operatorsManage.vue")
{
path: '/GreenTraffic/queryPage',
component: GreenTrafficQueryPage
}, {
path: '/stationBaseInfo/stationManage',
component: import("@/views/stationBaseInfo/stationManage/stationManage.vue")
}
, {
path: '/stationBaseInfo/setupManage',
component: import("@/views/stationBaseInfo/setupManage/setupManage.vue")
},{
path: '/greenTraffic/eachersTest',
component: import("@/views/greentraffic/eachersTest.vue")
path: '/GreenTraffic/printView',
component: GreenTrafficPrintView
},
// 重定向
{
path: '/WhiteListManagerSys',
redirect: '/WhiteListManagerSys/MenuIndex'
path: '/GreenTraffic',
redirect: '/GreenTraffic/queryPage'
},
]

@ -1,190 +0,0 @@
<template>
<el-row class="tac">
<el-col :span="2" v-if="MenuType==0">
<el-menu
active-text-color="#ffd04b"
background-color="#545c64"
class="el-menu-vertical-demo"
default-active="2"
text-color="#fff"
@open="handleOpen"
@close="handleClose"
:style="menuStyle"
:collapse="isCollapse"
>
<el-menu-item v-for="item in menuList" :index="item.PRMISURL" @click="addTab(item)">
<el-icon>
<Menu/>
</el-icon>
<span>{{ item.PRMISNAME }}</span>
</el-menu-item>
</el-menu>
</el-col>
<el-col :span="MenuType==0?22:24">
<div v-if="MenuType==1">
<router-view v-slot="{ Component }">
<keep-alive>
<component :is="Component" :key="$route.path"/>
</keep-alive>
</router-view>
</div>
<el-tabs
v-model="editableTabsValue"
class="demo-tabs"
@tab-remove="removeTab"
@tab-click="clickTab"
v-if="MenuType==0"
>
<el-tab-pane
v-for="item in editableTabs"
:label="item.title"
:name="item.name"
:closable="true"
>
<!-- <div v-html="item.content"></div>-->
<router-view v-slot="{ Component }">
<keep-alive>
<component :is="Component" :key="$route.path"/>
</keep-alive>
</router-view>
<!-- <keep-alive>-->
<!-- <router-view v-if="$route.meta.keepAlive"></router-view>-->
<!-- </keep-alive>-->
</el-tab-pane>
</el-tabs>
</el-col>
</el-row>
</template>
<script>
import {selectMenu, getUrlKey, checkOrgOfPRMIS} from "../../util/api/api.js";
import {ElMessage} from "element-plus/es";
export default {
name: "MenuIndex",
data() {
return {
sysId: getUrlKey("sid", window.location.href),
manno: getUrlKey("id", window.location.href),
MenuType: getUrlKey("MenuType", window.location.href),
isFirst: true,
isCollapse: false,
menuList: [],
menuStyle: '',
editableTabsValue: {},
editableTabs: [],
activeName: [],
myHeight: '84%',
tabIndex: 0
}
},
computed: {},
methods: {
handleOpen(key, keyPath) {
// console.log(key, keyPath)
},
handleClose(key, keyPath) {
// console.log(key, keyPath)
},
selectMenu() {
selectMenu({
// SYSID: this.sysId
SYSID: 1100
}).then((res) => {
this.menuList = res;
if (res != null && res.length > 0) {
let item = res[0]
this.addTab(item)
}
})
},
addTab(item) {
let tabNum = 0;
const tabs = this.editableTabs;
let isAdd = true;
tabs.forEach((tab, index) => {
if (tab.title == item.PRMISNAME) {
tabNum++;
if (tabNum == 2) {
this.editableTabsValue = tab.name;
isAdd = false;
this.$router.push({path: tab.name.substring(tab.name.indexOf('-') + 1)});
return;
}
}
})
if (isAdd) {
checkOrgOfPRMIS({
// MANNO:'vp98+kUHT48',
MANNO: this.manno,
PRMISID: item.PRMISID,
MENUTYPE: '3-',
}).then((res) => {
if (res) {
const newTabName = `${++this.tabIndex}` + '-' + item.PRMISURL;
this.editableTabs.push({
title: item.PRMISNAME,
name: newTabName,
// content: '<iframe src="http://' + window.location.host + item.PRMISURL + '?sid='+item.SYSID+'" name="myiframe" frameborder="0" style="height:' + this.myHeight + ';visibility:inherit; width:100%;z-index:1;"></iframe>',
})
this.$router.push({
path: item.PRMISURL,
query: {sid: item.PRMISID}
});
this.editableTabsValue = newTabName
this.isFirst = false;
window.parent.insertUserLogControl('1100', '进入菜单' + item.PRMISNAME);
} else {
if (!this.isFirst) {
ElMessage.error("对不起,您没有此菜单的权限!")
} else {
this.isFirst = false;
}
}
})
}
},
clickTab(tab) {
this.tabIndex = tab.paneName;
this.$router.push({path: tab.props.name.substring(tab.props.name.indexOf('-') + 1)});
},
removeTab(targetName) {
const tabs = this.editableTabs
let activeName = this.editableTabsValue
if (activeName === targetName) {
tabs.forEach((tab, index) => {
if (tab.name === targetName) {
const nextTab = tabs[index + 1] || tabs[index - 1]
if (nextTab) {
this.$router.push({path: nextTab.name.substring(nextTab.name.indexOf('-') + 1)});
activeName = nextTab.name
}
}
})
}
this.editableTabsValue = activeName
this.editableTabs = tabs.filter((tab) => tab.name !== targetName)
},
},
mounted() {
if (this.MenuType == null || this.MenuType == '') {
this.MenuType = 0
}
this.selectMenu();
// this.menuStyle = 'height:100%';
this.menuStyle = 'height:' + (document.documentElement.clientHeight) * 0.999 + 'px';
this.myHeight = (document.documentElement.clientHeight) * 0.915 + 'px';
}
}
</script>
<style scoped>
.demo-tabs > .el-tabs__content {
padding: 32px;
color: #6b778c;
font-size: 32px;
font-weight: 600;
}
</style>

@ -121,56 +121,59 @@
<el-col :span="3" class="linetitle" style="border-left: none;">
<div>不合格原因</div>
<div class="title">不合格原因</div>
</el-col>
<el-col :span="21" class="lineValue" style="border-right: none;">
<div>{{ checkForm.reason }}</div>
<div style="height: 100%;align-items: center;display: flex;line-height: 20px;">{{ checkForm.reason }}</div>
</el-col>
<el-col :span="3" class="linetitle" style="border-left: none;">
<div style="height: 100%;align-items: center;display: flex;justify-content: center;">入口站</div>
<div class="title">入口站</div>
</el-col>
<el-col :span="5" class="lineValue">
<div style="height: 100%;align-items: center;display: flex;">{{
checkForm.entollStationName }}</div>
<div style="height: 100%;align-items: center;display: flex;;line-height: 20px;">{{
checkForm.entollStationName }}</div>
</el-col>
<el-col :span="3" class="linetitle" style="">
<div style="height: 100%;align-items: center;display: flex;justify-content: center;">出口站</div>
<div class="title">出口站</div>
</el-col>
<el-col :span="5" class="lineValue">
<div style="height: 100%;align-items: center;display: flex;">{{
checkForm.extollStationName }}</div>
<div style="height: 100%;align-items: center;display: flex;;line-height: 20px;">{{
checkForm.extollStationName }}</div>
</el-col>
<el-col :span="8" class="linetitle" style="border-left: none;border-right: none;">
<el-container>
<el-header style="height: 0.18421rem;padding: 0;border-top: none;border-right: none;" class="linetitle" >
<el-row>
<el-container style="height: 100%;">
<el-header style="height: 50%;padding: 0;border-top: none;border-right: none;"
class="linetitle">
<el-row style="height: 100%;">
<el-col :span="9" class="linetitle" style="border-left: none;border-top: none;">
<div>验收人</div>
<div class="title">验收人</div>
</el-col>
<el-col :span="15" class="lineValue" style="border-top: none;border-right: none;">
<div>{{ checkForm.inspector }}</div>
<div style="height: 100%;align-items: center;display: flex;font-weight: normal">{{ checkForm.inspector }}</div>
</el-col>
</el-row>
</el-header>
<el-footer style="height: 0.18421rem;;padding: 0;border-right: none;border-top: none;border-bottom: none;" class="linetitle">
<el-row>
<el-col :span="9" class="linetitle" style="border-left: none;border-top: none;border-bottom: none;">
<div>复核人</div>
<el-footer
style="height: 50%;padding: 0;border-right: none;border-top: none;border-bottom: none;"
class="linetitle">
<el-row style="height: 100%;">
<el-col :span="9" class="linetitle"
style="border-left: none;border-top: none;border-bottom: none;">
<div class="title">复核人</div>
</el-col>
<el-col :span="15" class="lineValue" style="border-right: none;border-bottom: none;">
<div>{{ checkForm.reviewer }}</div>
</el-col></el-row></el-footer>
<el-col :span="15" class="lineValue" style="border-right: none;border-bottom: none;font-weight: normal">
<div style="height: 100%;align-items: center;display: flex;">{{ checkForm.reviewer }}</div>
</el-col>
</el-row>
</el-footer>
</el-container>
</el-col>
@ -179,10 +182,10 @@
<el-col :span="3" class="linetitle" style="border-left: none;">
<div>备注</div>
<div class="title">备注</div>
</el-col>
<el-col :span="21" class="lineValue" style="border-right: none;">
<div>{{ checkForm.memo }}</div>
<div style="height: 100%;align-items: center;display: flex;line-height: 20px;">{{ checkForm.memo }}</div>
</el-col>
@ -190,7 +193,7 @@
<el-col :span="3" class="linetitle" style="border-left: none;">
<div style="height: 100%;align-items: center;display: flex;justify-content: center;">出口交易编号</div>
<div class="title">出口交易编号</div>
</el-col>
<el-col :span="13" class="lineValue">
<div style="height: 100%;align-items: center;display: flex;">{{
@ -198,46 +201,46 @@
</el-col>
<el-col :span="3" class="linetitle" style="">
<div style="height: 100%;align-items: center;display: flex;justify-content: center;">交易时间</div>
<div class="title">交易时间</div>
</el-col>
<el-col :span="5" class="lineValue">
<div style="height: 100%;align-items: center;display: flex;">{{
checkForm.dt }}</div>
checkForm.dt }}</div>
</el-col>
<el-col :span="3" class="linetitle" style="border-left: none;">
<div style="height: 100%;align-items: center;display: flex;justify-content: center;">通行交易码</div>
<div class="title">通行交易码</div>
</el-col>
<el-col :span="13" class="lineValue">
<div style="height: 100%;align-items: center;display: flex;">{{checkForm.passId }}</div>
<div style="height: 100%;align-items: center;display: flex;">{{ checkForm.passId }}</div>
</el-col>
<el-col :span="3" class="linetitle" style="">
<div style="height: 100%;align-items: center;display: flex;justify-content: center;">通行方式</div>
<div class="title">通行方式</div>
</el-col>
<el-col :span="5" class="lineValue">
<div style="height: 100%;align-items: center;display: flex;">{{checkForm.transactionType }}</div>
<div style="height: 100%;align-items: center;display: flex;">{{ checkForm.transactionType }}</div>
</el-col>
<el-col :span="3" class="linetitle" style="border-left: none;">
<div c>稽核结论</div>
<div class="title">稽核结论</div>
</el-col>
<el-col :span="21" class="lineValue" style="border-right: none;">
<div>{{ checkForm.greenCheckResult }}</div>
<div style="height: 100%;align-items: center;display: flex;line-height: 20px;">{{ checkForm.greenCheckResult }}</div>
</el-col>
<el-col :span="24" class="linetitle" style="border-left: none;border-right: none;">
<div style="border-bottom: 1px solid #303133;">车辆查验图片</div>
<div style="border-bottom: 1px solid #303133;line-height: 20px;">车辆查验图片</div>
</el-col>
<div v-for="(item, index) in images" class="demo-image">
<div :key="item[0]" class="block">
<span class="demonstration">{{ item[0] }}</span>
<el-image style="width: 200px; height: 150px" :src="'data:image/png;base64,' + item[1]"
<!-- <span class="demonstration">{{ item[0] }}</span> -->
<el-image style="width: 220px; height: 150px" :src="'data:image/png;base64,' + item[1]"
:fit="item[0]" :zoom-rate="1.2" :max-scale="7" :min-scale="0.2" />
</div>
</div>
@ -322,7 +325,7 @@ function getcheckForm(FreeStanViewData) {
if (typeof (res.checkFromData) !== "string") {
checkForm.value = res.checkFromData
getCheckResultData(FreeStanViewData);
}else{
} else {
ElMessage.warning("未找到查验信息,请重新点击打印预览按钮");
window.close();
}
@ -348,11 +351,12 @@ function getcheckPic(FreeStanViewData) {
if (typeof (res.checkPic) !== "string") {
//
images.value = res.checkPic
}
Loading.value = false;
});
}
// watch(images,(newValue,OldValue) => {
// // DOM
@ -386,6 +390,14 @@ window.addEventListener('afterprint', function (event) {
border: 1px solid #303133;
line-height: 35px;
text-align: center;
font-weight: bold;
}
.title {
height: 100%;
align-items: center;
display: flex;
justify-content: center;
}
.lineValue {
@ -396,7 +408,7 @@ window.addEventListener('afterprint', function (event) {
}
.demo-image .block {
padding: 10px 13px;
padding: 2px 0px 0px 5px;
text-align: center;
/*border-right: solid 1px var(--el-border-color);*/
display: inline-block;

@ -206,58 +206,93 @@
<el-col v-if="LoadingPic" :span="6">
<div class="demo-image">
<div class="demo-image__error">
<div class="block">
<span class="demonstration"></span>
<el-image style="width: 260px; height: 170px" />
<el-image>
<template #error>
<div class="image-slot">
<el-icon><icon-picture /></el-icon>
</div>
</template>
</el-image>
</div>
</div>
</el-col>
<el-col v-if="LoadingPic" :span="6">
<div class="demo-image">
<div class="demo-image__error">
<div class="block">
<span class="demonstration"></span>
<el-image style="width: 260px; height: 170px" />
<el-image>
<template #error>
<div class="image-slot">
<el-icon><icon-picture /></el-icon>
</div>
</template>
</el-image>
</div>
</div>
</el-col>
<el-col v-if="LoadingPic" :span="6">
<div class="demo-image">
<div class="demo-image__error">
<div class="block">
<span class="demonstration"></span>
<el-image style="width: 260px; height: 170px" />
<el-image>
<template #error>
<div class="image-slot">
<el-icon><icon-picture /></el-icon>
</div>
</template>
</el-image>
</div>
</div>
</el-col>
<el-col v-if="LoadingPic" :span="6">
<div class="demo-image">
<div class="demo-image__error">
<div class="block">
<span class="demonstration"></span>
<el-image style="width: 260px; height: 170px" />
<el-image>
<template #error>
<div class="image-slot">
<el-icon><icon-picture /></el-icon>
</div>
</template>
</el-image>
</div>
</div>
</el-col>
<el-col v-if="LoadingPic" :span="6">
<div class="demo-image">
<div class="demo-image__error">
<div class="block">
<span class="demonstration"></span>
<el-image style="width: 260px; height: 170px" />
<el-image>
<template #error>
<div class="image-slot">
<el-icon><icon-picture /></el-icon>
</div>
</template>
</el-image>
</div>
</div>
</el-col>
<el-col v-if="LoadingPic" :span="6">
<div class="demo-image">
<div class="demo-image__error">
<div class="block">
<span class="demonstration"></span>
<el-image style="width: 260px; height: 170px" />
<el-image>
<template #error>
<div class="image-slot">
<el-icon><icon-picture /></el-icon>
</div>
</template>
</el-image>
</div>
</div>
</el-col>
<el-col v-if="LoadingPic" :span="6">
<div class="demo-image">
<div class="demo-image__error">
<div class="block">
<span class="demonstration"></span>
<el-image style="width: 260px; height: 170px" />
<el-image>
<template #error>
<div class="image-slot">
<el-icon><icon-picture /></el-icon>
</div>
</template>
</el-image>
</div>
</div>
</el-col>
@ -265,7 +300,7 @@
<el-col v-for="(item, index) in images" :span="6">
<div class="demo-image">
<div :key="item[0]" class="block">
<span class="demonstration">{{ item[0] }}</span>
<!-- <span class="demonstration">{{ item[0] }}</span> -->
<el-image style="width: 260px; height: 170px" :src="'data:image/png;base64,' + item[1]"
:fit="item[0]" :zoom-rate="1.2" :max-scale="7" :min-scale="0.2"
:preview-src-list="imagesViews" :initial-index="index" />
@ -295,7 +330,7 @@ const emit = defineEmits(['updatetitle']);
import { onMounted, ref } from 'vue';
import { getGreenTrafficCheckForm, getGreenTrafficCheckPic, getCheckResult, saveOrUpdateCheckResult } from '@/util/api/api.js';
import { ElMessage } from "element-plus";
import { Picture as IconPicture } from '@element-plus/icons-vue'
import { useRouter } from 'vue-router'
const router = useRouter()
@ -379,16 +414,17 @@ function getCheckResultData() {
//
function getcheckPic() {
getGreenTrafficCheckPic(props.FreeStanViewData).then(res => {
debugger;
if (typeof (res.checkPic) !== "string") {
//
images.value = res.checkPic
for (let item of images.value) {
imagesViews.value.push("data:image/png;base64," + item[1]);
}
LoadingPic.value = false;
if (res.checkPic.length > 0) {
LoadingPic.value = false;
}
} else {
// if(res.checkPic == "{}"){
// //updateName
// emit("updatetitle", "-1");
@ -464,6 +500,47 @@ defineExpose({
margin-bottom: 20px;
}
.demo-image__error .block {
padding: 30px 0;
text-align: center;
/*border-right: solid 1px var(--el-border-color);*/
display: inline-block;
width: 100%;
box-sizing: border-box;
vertical-align: top;
}
.demo-image__error .demonstration {
display: block;
color: var(--el-text-color-secondary);
font-size: 14px;
margin-bottom: 20px;
}
.demo-image__error .el-image {
padding: 0 5px;
max-width: 300px;
max-height: 200px;
width: 100%;
height: 200px;
}
.demo-image__error .image-slot {
display: flex;
justify-content: center;
align-items: center;
width: 100%;
height: 100%;
background: var(--el-fill-color-light);
color: var(--el-text-color-secondary);
font-size: 30px;
}
.demo-image__error .image-slot .el-icon {
font-size: 30px;
}
::v-deep .el-input.is-disabled .el-input__inner {
height: 34px;

@ -18,7 +18,7 @@
</el-button>
</div>
<el-table :height=myHeight highlight-current-row="true" v-loading="tableLoading" :data="tableData" border
<el-table :height=myHeight highlight-current-row="true" v-loading.fullscreen.lock="tableLoading" :data="tableData" border
style="width: 100%;" @cell-dblclick="showRowInfo">
<el-table-column :resizable="false" fixed align="center" type="index" width="80" label="序号" />
<el-table-column :resizable="false" fixed align="center" prop="acarNo" label="车牌号码" />
@ -26,7 +26,7 @@
<el-table-column width="100" :resizable="false" fixed align="center" prop="kindValue" label="车种" />
<el-table-column width="170" :resizable="false" fixed align="center" prop="roadName" label="路段" />
<el-table-column :resizable="false" fixed align="center" prop="staName" label="收费站" />
<el-table-column width="170" :resizable="false" fixed align="center" prop="classDate" label="统计日期"
<el-table-column width="150" :resizable="false" fixed align="center" prop="classDate" label="统计日期"
:formatter="dateFormat" />
<el-table-column width="170" :resizable="false" fixed align="center" prop="dt" label="车道操作时间"
:formatter="dateFormat" />
@ -309,7 +309,7 @@ function getTableData() {
ElMessage.error('查询失败!')
}
//
myHeight.value = (document.documentElement.clientHeight) * 0.84;
myHeight.value = (document.documentElement.clientHeight) * 0.81;
})
}
@ -327,7 +327,7 @@ function reloadTableData(){
tableLoading.value = false;
//
myHeight.value = (document.documentElement.clientHeight) * 0.84;
myHeight.value = (document.documentElement.clientHeight) * 0.81;
})
}
@ -417,6 +417,9 @@ function searchData() {
return;
}
}
searchForm.pageSize = 20;
searchForm.pageNum = 1;
searchForm.total = 0;
//
reloadTableData();
@ -435,7 +438,9 @@ function resetSearchData() {
searchForm.roadNoQuery = null
//searchForm.staNameQuery = "";
searchForm.staNoQuery = null;
searchForm.pageSize = 20;
searchForm.pageNum = 1;
searchForm.total = 0;
//
reloadTableData();
}

@ -1,299 +0,0 @@
<template>
<el-form :model="managerForm" size="medium" :rules="managerRules" ref="managerForm">
<el-row>
<el-col :span="12">
<el-row>
<el-col :span="12">
<el-form-item label="车牌号码" :label-width="formLabelWidth" prop="aCarNo">
<el-input v-model="managerForm.aCarNo" autocomplete="off"
:disabled="!managerForm.isAdd||justShow"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="车牌颜色" :label-width="formLabelWidth" prop="color">
<el-select v-model="managerForm.color" class="m-2" clearable placeholder="请选择车牌颜色"
style="width: 100%;"
:disabled="!managerForm.isAdd||justShow"
>
<el-option
v-for="item in CarNoColorList"
:label="item.TEXT"
:value="item.VALUE+''"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="所属单位" :label-width="formLabelWidth" prop="comNo">
<el-select v-model="managerForm.comNo" class="m-2" clearable placeholder="请选择所属单位"
style="width: 100%;"
:disabled="justShow"
>
<el-option
v-for="item in ComNoList"
:label="item.TEXT"
:value="item.VALUE"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="启用日期" :label-width="formLabelWidth" prop="begDate">
<el-date-picker
v-model="managerForm.begDate"
type="datetime"
placeholder="启用日期"
style="width: 100%;"
:disabled="justShow"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="起始时间" :label-width="formLabelWidth" prop="begDt">
<el-date-picker
v-model="managerForm.begDt"
type="datetime"
placeholder="起始时间"
style="width: 100%;"
:disabled="justShow"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="终止时间" :label-width="formLabelWidth" prop="endDt">
<el-date-picker
v-model="managerForm.endDt"
type="datetime"
placeholder="终止时间"
style="width: 100%;"
:disabled="justShow"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="状态" :label-width="formLabelWidth" prop="dataFlag">
<el-radio-group v-model="managerForm.dataFlag" class="ml-4" style="width: 100%;"
:disabled="justShow"
>
<el-radio :label="1">在用</el-radio>
<el-radio :label="0">停用</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="车辆描述" :label-width="formLabelWidth" prop="desCrib">
<el-input
v-model="managerForm.desCrib"
:rows="4"
type="textarea"
:placeholder="justShow?'':'请输入车辆描述,最多输入32个汉字!'"
:disabled="justShow"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="免费类型" :label-width="formLabelWidth" prop="freeRoad">
<el-select v-model="managerForm.freeRoad" class="m-2" placeholder="请选择免费类型"
style="width: 100%;"
:disabled="justShow"
>
<el-option
v-for="item in FreeRoadList"
:label="item.TEXT"
:value="item.VALUE"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="免费方式" :label-width="formLabelWidth" prop="freeType">
<el-select v-model="managerForm.freeType" class="m-2" clearable placeholder="请选择免费方式"
style="width: 100%;"
:disabled="justShow"
>
<el-option
label="全免"
:value="1"
/>
<el-option
label="免费站"
:value="0"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="24" v-if="managerForm.freeType==0">
<el-form-item label="免费站" :label-width="formLabelWidth" prop="staNo">
<el-radio-group v-model="managerForm.staNo" class="ml-4" style="width: 100%;"
:disabled="justShow"
>
<el-radio :label="9691">台格</el-radio>
<el-radio :label="9692">嘎鲁图</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
</el-col>
<el-col :span="12">
<gpy ref="gpy"></gpy>
</el-col>
</el-row>
</el-form>
<el-dialog title="修改确认" v-model="isSavaData" width="20%"
draggable="true"
:close-on-click-modal="true">
<span>修改后需重新审核是否确认修改</span>
<template #footer>
<span class="dialog-footer">
<el-button @click="isSavaData=false"> </el-button>
<el-button type="primary" @click="toSaveData()"> </el-button>
</span>
</template>
</el-dialog>
</template>
<script>
import {Plus, Delete} from '@element-plus/icons-vue'
import {checkACarNo, addCarNo, getUrlKey} from "../../util/api/api.js";
import {ElMessage} from "element-plus";
import gpy from "./gpy/gpy.vue";
import qs from "qs";
export default {
name: "FreeStanView",
props: ['FreeStanViewData'],
components: {
gpy
},
data() {
return {
Plus,
Delete,
formLabelWidth: '100px',
CarNoColorList: [],
ComNoList: [],
FreeRoadList: [],
editThisRow: {},
managerForm: {
isAdd: true
},
justShow: false,
isSavaData: false,
managerRules: {
aCarNo: [{required: true, validator: this.checkACarNo, trigger: 'blur'}],
color: [{required: true, message: '请选择车牌颜色', trigger: 'blur'}],
begDate: [{required: true, message: '请填写启用日期', trigger: 'blur'}],
begDt: [{required: true, message: '请填写起始日期', trigger: 'blur'}],
endDt: [{required: true, message: '请填写终止日期', trigger: 'blur'}],
dataFlag: [{required: true, message: '请选择状态', trigger: 'blur'}],
desCrib: [{max: 32, message: '最多输入32个汉字', trigger: 'blur'}],
comNo: [{required: true, message: '请选择所属单位', trigger: 'blur'}],
freeType: [{required: true, message: '请选择免费方式', trigger: 'blur'}],
freeRoad: [{required: true, message: '请选择免费类型', trigger: 'blur'}],
staNo: [{required: true, validator: this.checkStaNo, trigger: 'blur'}],
}
}
},
methods: {
submitManagerForm() {
this.$refs['managerForm'].validate((valid) => {
let imgList = this.$refs.gpy.imgList
if (imgList != null && imgList.length > 0) {
for (let i = 0; i < imgList.length; i++) {
if (imgList[i] != null && imgList[i] != '') {
let imgName = 'imageSrc' + (i+1);
this.managerForm[imgName] = imgList[i].substring(imgList[i].indexOf(',') + 1, imgList[i].length);
}
}
}
if (valid) {
if (!this.managerForm.isAdd) {
this.isSavaData = true;
} else {
this.toSaveData();
}
}
})
},
toSaveData() {
addCarNo(this.managerForm).then((res) => {
if (res) {
ElMessage.success('操作成功!')
this.$parent.$parent.$parent.$parent.$parent.$parent.network();
this.$parent.$parent.$parent.$parent.$parent.$parent.closePage();
window.parent.insertUserLogControl('1110', (this.managerForm.isAdd ? "添加" : "修改") + '白名单成功');
} else {
ElMessage.error('操作失败!')
window.parent.insertUserLogControl('1110', (this.managerForm.isAdd ? "添加" : "修改") + '白名单失败');
}
return res;
})
},
checkStaNo(rule, value, callback) {
if (this.managerForm.freeType == 0 && (value == null || value == '')) {
callback(new Error('请选择免费的站'))
} else {
callback()
}
},
checkACarNo(rule, value, callback) {
if (value == null || value == '') {
callback(new Error('请输入车牌号'))
} else {
checkACarNo(qs.stringify({
aCarNo: value
})).then((res) => {
if (res) {
callback()
} else {
callback(new Error('请输入正确的车牌号'))
}
})
}
},
closePage() {
this.$refs.gpy.closePage();
}
},
mounted() {
this.CarNoColorList = this.$props.FreeStanViewData.CarNoColorList
this.FreeRoadList = this.$props.FreeStanViewData.FreeRoadList
this.ComNoList = this.$props.FreeStanViewData.ComNoList
if (this.$props.FreeStanViewData.editThisRow != null && this.$props.FreeStanViewData.editThisRow != {}) {
this.managerForm = this.$props.FreeStanViewData.editThisRow
const staNo = parseInt(this.managerForm.memo.substring(2, 6), 16);
if (staNo == 0) {
this.managerForm.freeType = 1;
} else {
this.managerForm.freeType = 0;
this.managerForm.staNo = staNo;
}
if (this.$props.FreeStanViewData.justShow != null && this.$props.FreeStanViewData.justShow) {
this.justShow = true
} else {
this.justShow = false
}
const memoList = this.managerForm.memo.match(/.{1,10}/g)
this.$refs.gpy.setImgSrc(this.managerForm.image1, this.managerForm.image2, this.managerForm.image3, this.managerForm.image4
, this.managerForm.image5, this.managerForm.image6, this.managerForm.image7, this.managerForm.image8
, this.managerForm.image9, this.managerForm.image10)
this.managerForm.isAdd = false;
} else {
this.managerForm.isAdd = true;
}
this.$refs.gpy.justShow = this.justShow;
}
}
</script>
<style scoped>
</style>

@ -1,314 +0,0 @@
<template>
<el-form :model="managerForm" size="medium" :rules="managerRules" ref="managerForm">
<el-row>
<el-col :span="12">
<el-form-item label="车牌号码" :label-width="formLabelWidth" prop="aCarNo">
<el-input v-model="managerForm.aCarNo" autocomplete="off"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="车牌颜色" :label-width="formLabelWidth" prop="color">
<el-select v-model="managerForm.color" class="m-2" clearable placeholder="请选择车牌颜色"
style="width: 100%;"
>
<el-option
v-for="item in CarNoColorList"
:label="item.TEXT"
:value="item.TEXT"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="所属单位" :label-width="formLabelWidth" prop="acCount">
<el-select v-model="managerForm.acCount" class="m-2" clearable placeholder="请选择所属单位"
style="width: 100%;">
<el-option
v-for="item in CompanyList"
:label="item.ACOUNTNAME"
:value="item.ACOUNTID"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="启用日期" :label-width="formLabelWidth" prop="begDate">
<el-date-picker
v-model="managerForm.begDate"
type="datetime"
placeholder="启用日期"
style="width: 100%;"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="起始时间" :label-width="formLabelWidth" prop="begDt">
<el-date-picker
v-model="managerForm.begDt"
type="datetime"
placeholder="起始时间"
style="width: 100%;"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="终止时间" :label-width="formLabelWidth" prop="endDt">
<el-date-picker
v-model="managerForm.endDt"
type="datetime"
placeholder="终止时间"
style="width: 100%;"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="免费车种类" :label-width="formLabelWidth" prop="freeRoad">
<el-select v-model="managerForm.freeRoad" class="m-2" clearable placeholder="请选择免费车种类"
style="width: 100%;"
>
<el-option
v-for="item in FreeRoadList"
:label="item.TEXT"
:value="item.VALUE"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="状态" :label-width="formLabelWidth" prop="dataFlag">
<el-radio-group v-model="managerForm.dataFlag" class="ml-4" style="width: 100%;">
<el-radio :label="1">在用</el-radio>
<el-radio :label="0">停用</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="车辆描述" :label-width="formLabelWidth" prop="desCrib">
<el-input
v-model="managerForm.desCrib"
:rows="4"
type="textarea"
placeholder="请输入车辆描述,最多输入32个汉字!"
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="免费站组合" :label-width="formLabelWidth" prop="freeStanList">
<el-row style="width: 100%">
<el-col :span="8">
<el-select v-model="managerForm.roadItem" value-key="ROADNO" class="m-2" placeholder="路段"
style="width: 100%;"
@change="getStaNo"
>
<el-option
v-for="item in RoadTableList"
:label="item.ROADNAME"
:value="item"
/>
</el-select>
</el-col>
<el-col :span="7">
<el-select v-model="managerForm.startSta" value-key="STANO" class="m-2" placeholder="起始站"
style="width: 100%;"
>
<el-option
v-for="item in StaNoList"
:label="item.STANAME+':'+item.STANO"
:value="item"
/>
</el-select>
</el-col>
<el-col :span="7">
<el-select v-model="managerForm.endSta" value-key="STANO" class="m-2" placeholder="结束站"
style="width: 100%;"
>
<el-option
v-for="item in StaNoList"
:label="item.STANAME+':'+item.STANO"
:value="item"
/>
</el-select>
</el-col>
<el-col :span="2" align="center">
<el-button type="success" :icon="Plus" size="small" circle style="margin-top: 0px" @click="addTableData"/>
</el-col>
</el-row>
</el-form-item>
<el-table :data="tableData" border
highlight-current-row="true"
style="width: 100%;"
v-if="tableData.length>0"
>
<el-table-column :resizable="false" fixed prop="roadInfo" label="路段" align="center"></el-table-column>
<el-table-column :resizable="false" fixed prop="startStaInfo" label="起始站" align="center"></el-table-column>
<el-table-column :resizable="false" fixed prop="endStaInfo" label="结束站" align="center"></el-table-column>
<el-table-column :resizable="false" prop="right" label="操作" width="60" align="center">
<template v-slot="scope">
<el-button style="width: 96%;margin-left: 2%;margin-top: 0px" @click="deleteRow(scope.row)" type="danger"
size="small" :icon="Delete">
</el-button>
</template>
</el-table-column>
</el-table>
</el-col>
</el-row>
</el-form>
</template>
<script>
import {Plus, Delete} from '@element-plus/icons-vue'
import {selectStaNoListByRoadNo, checkACarNo, addCarNo, getMemo, getUrlKey} from "../../util/api/api.js";
import {ElMessage} from "element-plus";
import qs from "qs";
export default {
name: "FreeStanView",
props: ['FreeStanViewData'],
data() {
return {
Plus,
Delete,
formLabelWidth: '100px',
CompanyList: [],
FreeRoadList: [],
CarNoColorList: [],
RoadTableList: [],
StaNoList: [],
EndStaNoList: [],
tableData: [],
editThisRow: {},
managerForm: {
isAdd: true
},
managerRules: {
aCarNo: [{required: true, validator: this.checkACarNo, trigger: 'blur'}],
color: [{required: true, message: '请选择车牌颜色', trigger: 'blur'}],
acCount: [{required: true, message: '请选择所属单位', trigger: 'blur'}],
begDate: [{required: true, message: '请填写启用日期', trigger: 'blur'}],
begDt: [{required: true, message: '请填写起始日期', trigger: 'blur'}],
endDt: [{required: true, message: '请填写终止日期', trigger: 'blur'}],
freeRoad: [{required: true, message: '请选择免费车种类', trigger: 'blur'}],
dataFlag: [{required: true, message: '请选择状态', trigger: 'blur'}],
desCrib: [{max: 32, message: '最多输入32个汉字', trigger: 'blur'}],
freeStanList: [{required: true, validator: this.checkFreeStan, trigger: 'blur'}],
}
}
},
methods: {
submitManagerForm() {
this.$refs['managerForm'].validate((valid) => {
this.managerForm.staNoList = this.tableData
if (valid) {
addCarNo(this.managerForm).then((res) => {
if (res) {
ElMessage.success('操作成功!')
this.$parent.$parent.$parent.$parent.$parent.$parent.network();
this.$parent.$parent.$parent.$parent.$parent.$parent.managerShow = false;
window.parent.insertUserLogControl('1110',(this.managerForm.isAdd?"添加":"修改")+'白名单成功');
} else {
ElMessage.error('操作失败!')
window.parent.insertUserLogControl('1110',(this.managerForm.isAdd?"添加":"修改")+'白名单失败');
}
return res;
})
}
})
},
getStaNo(val) {
selectStaNoListByRoadNo({
roadNo: val.ROADNO
}).then((res) => {
this.StaNoList = res;
this.managerForm.startSta = '';
this.managerForm.endSta = '';
})
},
addTableData() {
if (this.managerForm.roadItem != null && this.managerForm.roadItem != ''
&& this.managerForm.startSta != null && this.managerForm.startSta != ''
&& this.managerForm.endSta != null && this.managerForm.endSta != '') {
const roadInfo = this.managerForm.roadItem.ROADNAME + ':' + this.managerForm.roadItem.ROADNO
const roadNo = this.managerForm.roadItem.ROADNO
const startStaInfo = this.managerForm.startSta.STANAME + ':' + this.managerForm.startSta.STANO
const startStaNo = this.managerForm.startSta.STANO
const endStaInfo = this.managerForm.endSta.STANAME + ':' + this.managerForm.endSta.STANO
const endStaNo = this.managerForm.endSta.STANO
for (let i = 0; i < this.tableData.length; i++) {
if (this.tableData[i].roadNo == roadNo &&
(
(this.tableData[i].startStaNo == startStaNo && this.tableData[i].endStaNo == endStaNo) ||
(this.tableData[i].startStaNo == endStaNo && this.tableData[i].endStaNo == startStaNo)
)
) {
ElMessage.error('该组合已存在,不能重复添加!')
return;
}
}
this.tableData.push({
roadInfo: roadInfo,
roadNo: roadNo,
startStaInfo: startStaInfo,
startStaNo: startStaNo,
endStaInfo: endStaInfo,
endStaNo: endStaNo,
})
} else {
ElMessage.error('请选择站!')
}
},
checkACarNo(rule, value, callback) {
if (value == null || value == '') {
callback(new Error('请输入车牌号'))
} else {
checkACarNo(qs.stringify({
aCarNo: value
})).then((res) => {
if (res) {
callback()
} else {
callback(new Error('请输入正确的车牌号'))
}
})
}
// const plateNumber = /^([使A-Z]{1}[A-Z]{1}(([0-9]{5}[DF])|([DF]([A-HJ-NP-Z0-9])[0-9]{4})))|([使A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9]{1})$/
// if (plateNumber.test(value)) {
// callback()
// } else {
// callback(new Error(''))
// }
},
checkFreeStan(rule, value, callback) {
if (this.tableData.length == 0) {
callback(new Error('请添加免费站!'))
} else {
callback()
}
},
deleteRow(row) {
this.tableData = this.tableData.filter((o) => {
return o !== row
})
}
},
mounted() {
this.CarNoColorList = this.$props.FreeStanViewData.CarNoColorList
this.RoadTableList = this.$props.FreeStanViewData.RoadTableList
this.CompanyList = this.$props.FreeStanViewData.CompanyList
this.FreeRoadList = this.$props.FreeStanViewData.FreeRoadList
if (this.$props.FreeStanViewData.editThisRow != null && this.$props.FreeStanViewData.editThisRow != {}) {
this.managerForm = this.$props.FreeStanViewData.editThisRow
const memoList=this.managerForm.memo.match(/.{1,10}/g)
getMemo(memoList).then((res)=>{
this.tableData=res;
})
this.managerForm.isAdd = false;
} else {
this.managerForm.isAdd = true;
}
}
}
</script>
<style scoped>
</style>

@ -1,732 +0,0 @@
<template>
<el-row>
<el-col :span="24">
<div style="padding: 10px 0;display: flex">
<el-button type="primary" style="margin-left: 0.5%;margin-top: 0px;" @click="searchShow=true">
<el-icon style="vertical-align: middle;">
<search/>
</el-icon>
<span style="vertical-align: middle;"> 搜索 </span>
</el-button>
<el-button type="primary" style="margin-top: 0px;" @click="reNetwork">
<el-icon>
<Refresh/>
</el-icon>
<span style="vertical-align: middle;"> 重置 </span>
</el-button>
<el-button type="primary" style="margin-top: 0px;" @click="addItem">
<el-icon>
<plus/>
</el-icon>
<span style="vertical-align: middle;"> 新增 </span>
</el-button>
<el-button type="danger" style="margin-top: 0px;" @click="deleteSelect(null)">
<el-icon>
<delete/>
</el-icon>
<span style="vertical-align: middle;"> 删除 </span>
</el-button>
<el-button type="primary" style="margin-top: 0px;" @click="openVer">
<span style="vertical-align: middle;"> 批量更新版本 </span>
</el-button>
<el-button type="success" style="margin-top: 0px;" @click="completeSelect(null,'1')">
<span style="vertical-align: middle;"> 批量审核 </span>
</el-button>
<el-button type="success" style="margin-top: 0px;" @click="comNoShow=true">
<span style="vertical-align: middle;"> 所属单位管理 </span>
</el-button>
<el-button type="primary" style="margin-top: 0px;" @click="downloadExcel">
<el-icon class="el-icon--left"><Download /></el-icon>
</el-button>
<el-upload
id="upload"
ref="upload"
class="upload-demo"
:action="uploadUrl"
:with-credentials="true"
:headers="headers"
:accept="'.xls,.xlsx'"
:limit="1"
:show-file-list="false"
:on-change="uploadFileChange"
:on-success="uploadFileSuccess"
style="margin-left: 10px"
>
<el-button type="primary" style="margin-top: 0px;margin-left: 5%">
<el-icon class="el-icon--left"><Upload /></el-icon>EXCEL
</el-button>
</el-upload>
</div>
<el-table :data="tableData" border
highlight-current-row="true"
style="width: 100%;"
:height=myHeight
@selection-change="handleSelectionChange"
v-loading="tableLoading"
@cell-dblclick="showRowInfo"
>
<el-table-column :resizable="false" fixed type="selection" width="50" align="center"></el-table-column>
<el-table-column :resizable="false" fixed prop="begDate" label="启用日期" align="center" width="170"
:formatter="dateFormat"></el-table-column>
<el-table-column :resizable="false" fixed prop="aCarNo" label="车牌号码" align="center"
:formatter="ACARNOFormat">
<template v-slot="scope">
<p v-html='ACARNOFormat(scope.row)'></p>
</template>
</el-table-column>
<el-table-column :resizable="false" fixed prop="color" label="车牌颜色" align="center"
:formatter="colorFormat" width="100"></el-table-column>
<el-table-column :resizable="false" fixed prop="begDt" label="起始时间" align="center" width="170"
:formatter="dateFormat"></el-table-column>
<el-table-column :resizable="false" fixed prop="endDt" label="终止时间" align="center" width="170"
:formatter="dateFormat"></el-table-column>
<el-table-column :resizable="false" fixed prop="text" label="类型" align="center" width="70"></el-table-column>
<el-table-column :resizable="false" fixed prop="comNo" label="所属单位" align="center"
:formatter="comNoFormat"></el-table-column>
<el-table-column :resizable="false" fixed prop="dataFlag" label="状态" align="center"
:formatter="FLAGFormat"></el-table-column>
<el-table-column :resizable="false" fixed prop="desCrib" label="车辆描述" align="center"></el-table-column>
<el-table-column :resizable="false" fixed prop="dt" label="信息录入时间" align="center" width="170"
:formatter="dateFormat"></el-table-column>
<el-table-column :resizable="false" fixed label="是否审核" align="center">
<template v-slot="scope">
<p v-html='isCompleteShow(scope.row)'></p>
</template>
</el-table-column>
<el-table-column :resizable="false" fixed prop="verNo" label="版本" align="center"></el-table-column>
<el-table-column :resizable="false" fixed label="重点提示" align="center">
<template v-slot="scope">
<p v-html='tipFormat(scope.row)'></p>
</template>
</el-table-column>
<el-table-column :resizable="false" prop="right" label="操作" width="130" align="center">
<template v-slot="scope">
<el-button style="width: 48%;margin-left: 1%;margin-top: 2%" @click="editThis(scope.row)" type="warning"
v-if="isNormal"
size="default"
:icon="Edit">
</el-button>
<el-button style="width: 48%;margin-left: 2%;margin-top: 2%" @click="deleteSelect(scope.row)" type="danger"
v-if="isNormal"
size="default" :icon="Delete">
</el-button>
<el-button style="width: 48%;margin-left: 2%;margin-top: 0%;" @click="completeSelect(scope.row,'1')"
type="success"
size="default"
v-if="isComplete"
:icon="Select">
</el-button>
<el-button style="width: 48%;margin-left: 2%;margin-top: 0%;" @click="completeSelect(scope.row,'2')"
type="warning"
size="default"
v-if="isComplete"
:icon="CloseBold">
</el-button>
</template>
</el-table-column>
</el-table>
<el-config-provider :locale="locale">
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="searchForm.pageNum"
:page-sizes="[ 10, 50, 100]"
:page-size="searchForm.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="searchForm.total">
</el-pagination>
</el-config-provider>
</el-col>
</el-row>
<el-dialog title="车辆白名单操作" v-model="managerShow" width="80%" top="0.5%" :before-close="closePage"
destroy-on-close
draggable="true"
:close-on-click-modal="false">
<FreeStanView ref="FreeStanView" :FreeStanViewData="FreeStanViewData"></FreeStanView>
<template #footer v-if="!justShow">
<span class="dialog-footer">
<el-button @click="closePage(null)"> </el-button>
<el-button type="primary" @click="saveData()"> </el-button>
</span>
</template>
</el-dialog>
<el-dialog title="查找" v-model="searchShow" width="40%" top="0.5%" draggable :modal="false">
<el-form :model="searchForm" size="medium" ref="searchForm">
<el-row>
<el-col :span="24">
<el-form-item label="车牌号码" :label-width="formLabelWidth" prop="aCarNo">
<el-input v-model="searchForm.aCarNo" autocomplete="off"></el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="时间方式" :label-width="formLabelWidth" prop="dataFlag">
<el-radio-group v-model="searchForm.dateTimeFlag"
class="ml-4"
style="width: 100%;"
>
<el-radio label="1">交叉查询</el-radio>
<el-radio label="2">起止查询</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="24" v-if="searchForm.dateTimeFlag==1">
<el-form-item label="开始时间" :label-width="formLabelWidth" prop="begDate">
<el-date-picker
v-model="searchForm.begDt"
type="datetime"
format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss"
style="width: 100%;"
/>
</el-form-item>
</el-col>
<el-col :span="24" v-if="searchForm.dateTimeFlag==1">
<el-form-item label="结束时间" :label-width="formLabelWidth" prop="begDt">
<el-date-picker
v-model="searchForm.endDt"
type="datetime"
format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss"
style="width: 100%;"
/>
</el-form-item>
</el-col>
<el-col :span="24" v-if="searchForm.dateTimeFlag==2">
<el-form-item label="起始时间(起始)" :label-width="formLabelWidth" prop="endDt">
<el-date-picker
v-model="searchForm.begDt1"
type="datetime"
format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss"
style="width: 100%;"
/>
</el-form-item>
</el-col>
<el-col :span="24" v-if="searchForm.dateTimeFlag==2">
<el-form-item label="起始时间(终止)" :label-width="formLabelWidth" prop="endDt">
<el-date-picker
v-model="searchForm.begDt2"
type="datetime"
format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss"
style="width: 100%;"
/>
</el-form-item>
</el-col>
<el-col :span="24" v-if="searchForm.dateTimeFlag==2">
<el-form-item label="终止时间(起始)" :label-width="formLabelWidth" prop="endDt">
<el-date-picker
v-model="searchForm.endDt1"
type="datetime"
format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss"
style="width: 100%;"
/>
</el-form-item>
</el-col>
<el-col :span="24" v-if="searchForm.dateTimeFlag==2">
<el-form-item label="终止时间(终止)" :label-width="formLabelWidth" prop="endDt">
<el-date-picker
v-model="searchForm.endDt2"
type="datetime"
format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss"
style="width: 100%;"
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="操作时间(起始)" :label-width="formLabelWidth" prop="endDt">
<el-date-picker
v-model="searchForm.dt1"
type="datetime"
format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss"
style="width: 100%;"
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="操作时间(终止)" :label-width="formLabelWidth" prop="endDt">
<el-date-picker
v-model="searchForm.dt2"
type="datetime"
format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss"
style="width: 100%;"
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="状态" :label-width="formLabelWidth" prop="dataFlag">
<el-radio-group v-model="searchForm.dataFlag" class="ml-4" style="width: 100%;">
<el-radio label="1">在用</el-radio>
<el-radio label="0">停用</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="车辆描述" :label-width="formLabelWidth" prop="desCrib">
<el-input v-model="searchForm.desCrib" autocomplete="off"></el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="白名单状态" :label-width="formLabelWidth" prop="dataFlag">
<el-radio-group v-model="searchForm.effect" class="ml-4" style="width: 100%;">
<el-radio label="0">全部</el-radio>
<el-radio label="1">将到期</el-radio>
<el-radio label="2">已到期</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="searchShow=false"> </el-button>
<el-button type="primary" @click="reNetwork">
<el-icon>
<Refresh/>
</el-icon>
<span style="vertical-align: middle;"> 重置 </span>
</el-button>
<el-button type="primary" @click="network">
<el-icon style="vertical-align: middle;">
<search/>
</el-icon>
<span style="vertical-align: middle;"> 搜索 </span>
</el-button>
</span>
</template>
</el-dialog>
<el-dialog title="批量更新版本" v-model="upVerNoShow" width="40%" top="0.5%" destroy-on-close draggable
:close-on-click-modal="false">
<el-form-item label="启用日期" :label-width="formLabelWidth" prop="aCarNo">
<el-date-picker
v-model="verBegDate"
type="datetime"
placeholder="启用日期"
format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss"
style="width: 100%;"
/>
</el-form-item>
<el-form-item label="车牌号码" :label-width="formLabelWidth" prop="aCarNo">
<el-input v-model="verNo" autocomplete="off"></el-input>
</el-form-item>
<template #footer>
<span class="dialog-footer">
<el-button @click="upVerNoShow=false"> </el-button>
<el-button type="primary" @click="upVerNo()"> </el-button>
</span>
</template>
</el-dialog>
<el-dialog title="所属单位管理" v-model="comNoShow" width="50%" top="0.5%" destroy-on-close draggable
:close-on-click-modal="false">
<comNo ref="comNo" @reload="reload"></comNo>
<template #footer>
<span class="dialog-footer">
<el-button @click="comNoShow=false"></el-button>
</span>
</template>
</el-dialog>
</template>
<script>
import zhCn from 'element-plus/lib/locale/lang/zh-cn'
import {
getUrlKey, selectCarNoPage, ManagerOtherInfo, deleteCarNo, getVerNo,
toUpVerNo,
completeCarNo
} from "../../util/api/api.js";
import pro from '../../util/tool.js';
import moment from "moment";
import {Delete, Edit, Reading, ZoomIn, Select, CloseBold} from '@element-plus/icons-vue'
import {ElMessage} from "element-plus/es";
import FreeStanView from './FreeStanView.vue'
import comNo from './comNo/comNo.vue'
import {ElMessageBox} from "element-plus";
import qs from "qs";
import axios from "axios";
export default {
name: "Manager",
components: {
FreeStanView,
comNo
},
data() {
return {
Delete,
Edit,
Reading,
ZoomIn,
Select,
CloseBold,
locale: zhCn,
isComplete: localStorage.getItem("whiteIsComplete") == '1' || localStorage.getItem("whiteIsComplete") == '2',
isNormal: localStorage.getItem("whiteIsComplete") == '0' || localStorage.getItem("whiteIsComplete") == '2',
// isComplete:true,
// isNormal:true,
tableData: [],
searchForm: {
total: 0,
pageNum: 1,
pageSize: 10,
},
formLabelWidth: '130px',
verBegDate: '',
verNo: '',
myHeight: 500,
comNoShow: false,
tableLoading: false,
justShow: false,
searchShow: false,
CarNoColorList: [],
CarNoColorMap: {},
ComNoList: [],
ComNoMap: {},
CompanyList: [],
FreeRoadList: [],
RoadTableList: [],
multipleSelection: [],
managerShow: false,
comManagerShow: false,
upVerNoShow: false,
editThisRow: {},
FreeStanViewData: {},
uploadUrl: '',
headers: '',
}
},
methods: {
uploadFileChange(response, file, fileList) {
this.tableLoading=true;
},
downloadExcel(){
window.location.href = axios.defaults.baseURL + '/excel/Excel.xlsx';
},
// url
uploadFileSuccess(response, file, fileList) {
this.tableLoading=false;
this.$refs.upload.clearFiles();
this.reload();
if(typeof response==='boolean'&&response){
ElMessage.success("上传成功")
}else{
ElMessage.error(response)
}
},
openVer() {
getVerNo().then((res) => {
if (!res) {
ElMessage.error('当前版本号以最大,无法更新')
} else {
this.verNo = res;
this.upVerNoShow = true
}
})
},
upVerNo() {
toUpVerNo(qs.stringify({verBegDate: this.verBegDate, verNo: this.verNo})).then((res) => {
if (res) {
ElMessage.success("新版本发布成功")
this.upVerNoShow = false;
this.network()
// window.parent.insertUserLogControl('1110', '');
}
})
},
handleSelectionChange(row) { //
this.multipleSelection = row
},
deleteSelect(row) {
let carNoList = [];
if (row != null) {
carNoList[0] = row;
} else {
carNoList = this.multipleSelection;
}
if (carNoList.length == 0) {
ElMessage({
showClose: true,
message: '请选择要删除的数据!',
type: 'warning',
})
return;
}
ElMessageBox.confirm(
'是否批量删除' + carNoList.length + '条数据?',
'提示',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}
).then(() => {
deleteCarNo(carNoList).then((res) => {
if (res) {
ElMessage({
message: res + '条删除成功!',
type: 'success',
})
this.network()
// window.parent.insertUserLogControl('1110', ids.length + '');
} else {
ElMessage.error('删除失败!')
// window.parent.insertUserLogControl('1110', ids.length + '');
}
})
}).catch(() => {
ElMessage({
type: 'info',
message: '已取消!',
})
})
},
completeSelect(row, isComplete) {
let carNoList = [];
if (row != null) {
carNoList[0] = row;
} else {
carNoList = this.multipleSelection;
}
if (carNoList.length == 0) {
ElMessage({
showClose: true,
message: '请选择要审核通过的数据!',
type: 'warning',
})
return;
}
ElMessageBox.confirm(
'是否审核' + (isComplete == 1 ? "通过" : "不通过") + +carNoList.length + '条数据?',
'提示',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}
).then(() => {
completeCarNo({params: carNoList, isComplete: isComplete}).then((res) => {
if (res) {
ElMessage({
message: res + '条审核成功!',
type: 'success',
})
this.network()
// window.parent.insertUserLogControl('1110', ids.length + '');
} else {
ElMessage.error('审核失败!')
// window.parent.insertUserLogControl('1110', ids.length + '');
}
})
}).catch(() => {
ElMessage({
type: 'info',
message: '已取消!',
})
})
},
showRowInfo(row, column, cell, event) {
this.justShow = true
this.FreeStanViewData = {
RoadTableList: this.RoadTableList,
CompanyList: this.CompanyList,
CarNoColorList: this.CarNoColorList,
FreeRoadList: this.FreeRoadList,
ComNoList: this.ComNoList,
editThisRow: row,
justShow: this.justShow
}
this.managerShow = true;
},
editThis(row) {
this.justShow = false
this.FreeStanViewData = {
RoadTableList: this.RoadTableList,
CompanyList: this.CompanyList,
CarNoColorList: this.CarNoColorList,
ComNoList: this.ComNoList,
FreeRoadList: this.FreeRoadList,
editThisRow: row,
}
this.managerShow = true;
},
saveData() {
this.$refs.FreeStanView.submitManagerForm();
},
addItem() {
this.justShow = false
this.FreeStanViewData = {
RoadTableList: this.RoadTableList,
CompanyList: this.CompanyList,
CarNoColorList: this.CarNoColorList,
ComNoList: this.ComNoList,
FreeRoadList: this.FreeRoadList,
}
this.managerShow = true;
},
reNetwork() {
this.searchForm = {
total: 0,
pageNum: 1,
pageSize: 10,
};
this.network()
},
network() {
this.tableLoading = true;
selectCarNoPage(this.searchForm).then((res) => {
if (res.records != null) {
this.tableData = res.records;
this.searchForm.total = res.total;
this.searchForm.pageNum = res.current;
this.searchForm.pageSize = res.size;
} else {
ElMessage.error('查询失败!')
}
this.tableLoading = false;
// window.parent.insertUserLogControl('1110', '');
})
},
colorFormat(row, column) {
if (this.CarNoColorMap[row[column.property]] != null) {
return this.CarNoColorMap[row[column.property]];
} else {
return row[column.property];
}
},
comNoFormat(row, column) {
if (this.ComNoMap[row[column.property]] != null) {
return this.ComNoMap[row[column.property]];
} else {
return row[column.property];
}
},
FLAGFormat(row, column) {
if (row[column.property] == 1) {
return '在用';
} else {
return '停用';
}
},
tipFormat(row) {
let nowDate = new Date();
let myBegDtDate = new Date(row.begDt);
let myEndDtDate = new Date(row.endDt);
if (myBegDtDate > nowDate) {
return '<span>未开始</span>';
} else if (myEndDtDate > nowDate) {
const difference = Math.abs(myEndDtDate - nowDate);
const days = difference / (1000 * 3600 * 24);
if (days > 30) {
return '<span style="color: green">已开始</span>';
} else {
return '<span style="color: orange">即将过期</span>';
}
} else {
return '<span style="color: red">已过期</span>';
}
},
ACARNOFormat(row) {
let nowDate = new Date();
let myBegDtDate = new Date(row.begDt);
let myEndDtDate = new Date(row.endDt);
if (myBegDtDate > nowDate) {
return '<span>' + row.aCarNo + '</span>';
} else if (myEndDtDate > nowDate) {
if (myEndDtDate.getMonth() - nowDate.getMonth() >= 1) {
return '<span style="color: green">' + row.aCarNo + '</span>';
} else {
return '<span style="color: orange">' + row.aCarNo + '</span>';
}
} else {
return '<span style="color: red">' + row.aCarNo + '</span>';
}
},
isCompleteShow(row) {
if (row.isComplete == '0') {
return '<span style="color: orange">待审核</span>';
} else if (row.isComplete == '1') {
return '<span style="color: green">审核通过</span>';
} else if (row.isComplete == '2') {
return '<span style="color: red">审核未通过</span>';
}
},
dateFormat(row, column) {
return pro.dateFormat(row[column.property]);
},
handleSizeChange(val) { //
this.searchForm.pageSize = val
this.network()
},
handleCurrentChange(val) { //
this.searchForm.pageNum = val
this.network()
},
closePage(done) {
this.$refs.FreeStanView.closePage();
this.managerShow = false
if (done != null) {
done();
}
},
reload() {
ManagerOtherInfo().then((res) => {
this.CarNoColorList = res.CarNoColorList
for (let i = 0; i < res.CarNoColorList.length; i++) {
this.CarNoColorMap[res.CarNoColorList[i].VALUE] = res.CarNoColorList[i].TEXT
}
this.ComNoList = res.ComNoList
for (let i = 0; i < res.ComNoList.length; i++) {
this.ComNoMap[res.ComNoList[i].VALUE] = res.ComNoList[i].TEXT
}
this.CompanyList = res.CompanyList
this.FreeRoadList = res.FreeRoadList
this.RoadTableList = res.RoadTableList
this.network();
})
},
},
mounted() {
localStorage.setItem("whiteIsComplete","2")
this.uploadUrl = axios.defaults.baseURL + '/WhiteListManagerSys/Manager/intoWhiteListByExcel';
let post = {
"Access-Control-Allow-Origin-Type": "*",
}
// this.headers = {token: localStorage.getItem('token'), post};
this.headers = {token: 'test', post};
this.reload();
this.myHeight = (document.documentElement.clientHeight) * 0.81;
},
beforeUnmount() {
this.$refs.FreeStanView.closePage();
}
}
</script>
<style scoped>
</style>

@ -1,272 +0,0 @@
<template>
<el-row>
<el-col :span="24">
<div style="padding: 10px 0">
<el-input style="width: 150px;margin-left: 0.5%" placeholder="编号" v-model="searchForm.value"></el-input>
<el-input style="width: 150px;margin-left: 0.5%" placeholder="名称" v-model="searchForm.text"></el-input>
<el-button type="primary" style="margin-left: 0.5%;margin-top: 0px;" @click="network">
<el-icon style="vertical-align: middle;">
<search/>
</el-icon>
<span style="vertical-align: middle;"> 搜索 </span>
</el-button>
<el-button type="primary" style="margin-left: 0.5%;margin-top: 0px;" @click="reNetwork">
<el-icon>
<Refresh/>
</el-icon>
<span style="vertical-align: middle;"> 重置 </span>
</el-button>
<el-button type="primary" style="margin-top: 5px;margin-top: 0px;" @click="addItem">
<el-icon>
<plus/>
</el-icon>
<span style="vertical-align: middle;"> 新增 </span>
</el-button>
<el-button type="danger" style="margin-top: 5px;margin-top: 0px;" @click="deleteSelect(null)">
<el-icon>
<delete/>
</el-icon>
<span style="vertical-align: middle;"> 删除 </span>
</el-button>
</div>
<el-table :data="tableData" border
highlight-current-row="true"
style="width: 100%;"
:height=myHeight
@selection-change="handleSelectionChange"
v-loading="tableLoading"
>
<el-table-column :resizable="false" fixed type="selection" width="50" align="center"></el-table-column>
<el-table-column :resizable="false" fixed prop="value" label="编号" align="center"></el-table-column>
<el-table-column :resizable="false" fixed prop="text" label="名称" align="center"></el-table-column>
<el-table-column :resizable="false" prop="right" label="操作" width="130" align="center">
<template v-slot="scope">
<el-button style="width: 48%;margin-left: 1%;margin-top: 2%" @click="editThis(scope.row)" type="warning"
size="default"
:icon="Edit">
</el-button>
<el-button style="width: 48%;margin-left: 2%;margin-top: 2%" @click="deleteSelect(scope.row)" type="danger"
size="default" :icon="Delete">
</el-button>
</template>
</el-table-column>
</el-table>
<el-config-provider :locale="locale">
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="searchForm.pageNum"
:page-sizes="[ 10, 50, 100]"
:page-size="searchForm.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="searchForm.total">
</el-pagination>
</el-config-provider>
</el-col>
</el-row>
<el-dialog title="操作" v-model="managerShow" width="30%" top="5%"
destroy-on-close
draggable="true"
:close-on-click-modal="false">
<el-form :model="editThisRow" size="medium" :rules="rules" ref="editThisRow">
<el-row>
<el-col :span="24">
<el-form-item label="编号" :label-width="formLabelWidth" prop="value">
<el-input type="number" v-model="editThisRow.value" autocomplete="off"
:disabled="!editThisRow.isAdd"></el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="名称" :label-width="formLabelWidth" prop="text">
<el-input v-model="editThisRow.text" autocomplete="off"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="managerShow=false"> </el-button>
<el-button type="primary" @click="toSaveData()"> </el-button>
</span>
</template>
</el-dialog>
</template>
<script>
import zhCn from 'element-plus/lib/locale/lang/zh-cn'
import {
selectComNoPage,
checkValue,
saveData,
deleteComNo, checkACarNo, commitCarUser
} from "../../../util/api/api.js";
import {Delete, Edit} from '@element-plus/icons-vue'
import {ElMessage} from "element-plus/es";
import {ElMessageBox} from "element-plus";
import qs from "qs";
export default {
name: "Manager",
data() {
return {
Delete,
Edit,
locale: zhCn,
tableData: [],
searchForm: {
total: 0,
pageNum: 1,
pageSize: 10,
value: '',
text: ''
},
formLabelWidth: '130px',
myHeight: 500,
tableLoading: false,
managerShow: false,
comManagerShow: false,
editThisRow: {},
multipleSelection: [],
rules: {
value: [{required: true, validator: this.checkId, trigger: 'blur'}],
text: [{required: true, message: '请选择车牌颜色', trigger: 'blur'}],
}
}
},
methods: {
checkId(rule, value, callback) {
if (this.editThisRow.isAdd) {
if (value == null || value == '') {
callback(new Error('请输入编号'))
} else {
checkValue(qs.stringify({
value: value
})).then((res) => {
if (res) {
callback()
} else {
callback(new Error('该编号已存在'))
}
})
}
} else {
callback()
}
},
handleSelectionChange(row) { //
this.multipleSelection = row
},
deleteSelect(row) {
let ids = [];
if (row != null) {
ids[0] = row.value
} else {
ids = this.multipleSelection.map(v => v.value)
}
if (ids.length == 0) {
ElMessage({
showClose: true,
message: '请选择要删除的数据!',
type: 'warning',
})
return;
}
ElMessageBox.confirm(
'是否批量删除' + ids.length + '条数据?',
'提示',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}
).then(() => {
deleteComNo(ids).then((res) => {
if (res) {
ElMessage({
message: res + '条删除成功!',
type: 'success',
})
this.network()
this.$emit('reload')
} else {
ElMessage.error('删除失败!')
}
})
}).catch(() => {
ElMessage({
type: 'info',
message: '已取消!',
})
})
},
editThis(row) {
this.editThisRow = row
this.editThisRow.isAdd = false;
this.managerShow = true;
},
addItem() {
this.editThisRow.isAdd = true;
this.managerShow = true;
},
toSaveData() {
this.$refs['editThisRow'].validate((valid) => {
if (valid) {
saveData(this.editThisRow).then((res) => {
if (res) {
ElMessage.success('操作成功!')
this.managerShow = false;
this.editThisRow = {};
this.$emit('reload')
} else {
ElMessage.error('操作失败!')
}
this.network()
})
}
})
},
reNetwork() {
this.searchForm = {
total: 0,
pageNum: 1,
pageSize: 10,
value: '',
text: ''
};
this.network()
},
network() {
this.tableLoading = true;
selectComNoPage(this.searchForm).then((res) => {
if (res.records != null) {
this.tableData = res.records;
this.searchForm.total = res.total;
this.searchForm.pageNum = res.current;
this.searchForm.pageSize = res.size;
} else {
ElMessage.error('查询失败!')
}
this.tableLoading = false;
})
},
handleSizeChange(val) { //
this.searchForm.pageSize = val
this.network()
},
handleCurrentChange(val) { //
this.searchForm.pageNum = val
this.network()
},
},
mounted() {
this.network();
this.myHeight = (document.documentElement.clientHeight) * 0.5;
},
beforeUnmount() {
}
}
</script>
<style scoped>
</style>

@ -1,250 +0,0 @@
<template>
<el-row>
<el-col :span="8" v-if="!justShow">
<el-form-item label="设备列表" label-width="80px">
<el-select v-model="devName" class="m-2" clearable
@change="toConnectGPY"
style="width: 100%;">
<el-option
label="未连接"
value=""
/>
<el-option
v-for="(item,i) in devNameList"
:label="item"
:value="i"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="5" v-if="!justShow">
<el-button type="primary" style="margin-left: 5%;margin-top: 0px;" @click="connectGpy"
:disabled="gpyConnect"
>
<el-icon style="vertical-align: middle;">
<Link/>
</el-icon>
<span style="vertical-align: middle;"> 连接高拍仪 </span>
</el-button>
</el-col>
<el-col :span="5" v-if="!justShow">
<el-button type="primary" style="margin-left: 5%;margin-top: 0px;" @click="addImgList"
>
<el-icon style="vertical-align: middle;">
<Link/>
</el-icon>
<span style="vertical-align: middle;"> 增加图片 </span>
</el-button>
</el-col>
<el-col :span="24" v-if="!justShow" v-loading="gpyLoading">
<div style="width: 100%" align="center">
<div id='CameraCtl' :style="CameraStyle"></div>
</div>
</el-col>
<el-col :span="24">
<div style="height: 5px"></div>
</el-col>
<el-scrollbar ref="scrollbar" :height="scrollbarHeight" style="width: 100%">
<el-row ref="rowRef" style="width: 100%">
<el-col :span="12" v-for="(item,i) in imgList">
<div ref="imgRef">
<el-row>
<el-col :span="7" v-if="!justShow">
<div align="center">
<el-button type="primary" style="margin-left: 0.5%;margin-top: 5px;" @click="getImgStr(i)"
:disabled="!gpyConnect"
>
<el-icon style="vertical-align: middle;">
<CameraFilled/>
</el-icon>
<span style="vertical-align: middle;"> 拍照{{ i + 1 }} </span>
</el-button>
</div>
</el-col>
<el-col :span="7" v-if="!justShow">
<div align="center">
<el-upload
:limit="1"
accept=".jpg,.jpeg,.png,.gif,.bmp,.pdf,.JPG,.JPEG,.PBG,.GIF,.BMP,.PDF"
id="upload"
:show-file-list="false"
ref="upload"
class="upload-demo"
action="#"
:on-change="onUploadChange"
:auto-upload="false"
>
<template #trigger>
<el-button type="primary" style="margin-left: 10%;margin-top: 5px;" @click="onChange(i)">
<el-icon style="vertical-align: middle;">
<Upload/>
</el-icon>
<span style="vertical-align: middle;"> 上传 </span>
</el-button>
</template>
</el-upload>
</div>
</el-col>
<el-col :span="7" v-if="!justShow">
<div align="center">
<el-button type="danger" style="margin-left: 10%;margin-top: 5px;" @click="deleteImgStr(i)">
<el-icon>
<delete/>
</el-icon>
<span style="vertical-align: middle;"> 删除 </span>
</el-button>
</div>
</el-col>
<el-col :span="24">
<div style="height: 5px"></div>
</el-col>
<el-col :span="23">
<div align="center" class="imgDiv" :style="imgStyle">
<img :src="item" :style="imgStyle" :alt="'图片'+(i+1)" v-if="item!=''"/>
</div>
</el-col>
<el-col :span="1"></el-col>
</el-row>
</div>
</el-col>
</el-row>
</el-scrollbar>
</el-row>
</template>
<script>
import {
Cam_ControlInit,
Cam_Photo,
CloseConnect,
} from '@/plugins/kmGPY/gpyhs';
import {ElMessage} from "element-plus";
export default {
name: "gpy",
data() {
return {
justShow: false,
gpyConnect: false,
gpyLoading: false,
imgStrNum: 0,
imgIndex: 0,
scrollbarHeight:'220px',
CameraStyle: '',
imgStyle: '',
devNameList: [],
devName: '',
imgList: ['', ''],
imgSrc: '',
}
},
watch: {
imgSrc: {
deep: true,
handler(newValue, oldValue) {
this.imgList[this.imgStrNum] = newValue;
console.log("总合 sum 变化:", newValue, oldValue);
},
}
},
methods: {
addImgList() {
if (this.imgList.length < 10) {
this.imgList[this.imgList.length] = ''
this.$nextTick(() => {
// this.$refs.scrollbar.setScrollTop(this.$refs.rowRef.clientHeight)
this.$refs.scrollbar.setScrollTop(99999)
})
} else {
ElMessage.error('最多只能添加十张!')
}
},
getImgStr(num) {
this.imgStrNum = num;
Cam_Photo("");
},
onChange(num) {
this.imgIndex = num;
},
onUploadChange(file, fileList) {
const _this = this;
const reader = new FileReader();
reader.readAsDataURL(file.raw);
reader.onload = () => {
_this.imgList[_this.imgIndex] = reader.result;
};
},
showMessage(message) {
ElMessage.error(message)
},
deleteImgStr(num) {
this.imgList.splice(num,1);
},
setImgSrc(src1, src2, src3, src4, src5, src6, src7, src8, src9, src10) {
this.setImgList(src1, 0);
this.setImgList(src2, 1);
this.setImgList(src3, 2);
this.setImgList(src4, 3);
this.setImgList(src5, 4);
this.setImgList(src6, 5);
this.setImgList(src7, 6);
this.setImgList(src8, 7);
this.setImgList(src9, 8);
this.setImgList(src10, 9);
},
setImgList(src, i) {
if (src != null) {
this.imgList[i] = 'data:image/png;base64,' + src
}
},
closePage() {
CloseConnect();
},
toConnectGPY() {
if (this.devName != null && this.devName != '') {
this.gpyLoading = true
const height = document.documentElement.clientHeight * 0.4;
const width = height / 9 * 16;
this.imgStyle = 'height:' + height * 0.45 + 'px;';
this.CameraStyle = 'width:' + width + 'px;height:' + height + 'px';
Cam_ControlInit(document.getElementById("CameraCtl"), 0, 0, width, height, this, false);
}
},
connectGpy() {
this.gpyLoading = true
const height = document.documentElement.clientHeight * 0.4;
const width = height / 9 * 16;
Cam_ControlInit(document.getElementById("CameraCtl"), 0, 0, width, height, this, true);
},
},
mounted() {
if (!window.WebSocket) {
alert("浏览器不支持HTML5,请更新浏览器或者使用其它浏览器");
}
const height = document.documentElement.clientHeight * 0.4;
const width = height / 9 * 16;
this.imgStyle = 'height:' + height * 0.45 + 'px;';
this.CameraStyle = 'width:' + width + 'px;height:' + height + 'px';
this.$nextTick(() => {
if(this.justShow){
this.scrollbarHeight=(this.$refs.imgRef[0].clientHeight*2)+'px'
}else{
this.scrollbarHeight=(this.$refs.imgRef[0].clientHeight*1.3)+'px'
}
})
},
beforeUnmount() {
CloseConnect();
}
}
</script>
<style scoped>
.imgDiv {
border: 1px solid black;
}
</style>

@ -1,133 +0,0 @@
<template>
<div :id="echartsId" style="width:100%;height: 350px" v-loading="loading"></div>
</template>
<script>
import * as echarts from 'echarts'
import {getNumAndCashOfType} from "../../../util/api/api.js";
export default {
name: "carTypeFee",
data(){
return{
echartsId:'',
loading:false
}
},
props:['echartsId'],
methods: {
initOption(echartsData) {
let dataAxis = echartsData.dataAxis;
let data = echartsData.data;
let myChart = this.$echarts.init(document.getElementById(this.echartsId))
//
this.option = {
title: {
text: '各车型收费金额(万元)',
},
grid:{
left:'5%',
right:'5%'
},
tooltip: {
trigger: 'axis',
formatter: function (params) {
// var HTMLSTR = (params.seriesName == null ? "" : params.seriesName) + "<br/>";
var HTMLSTR = "";
HTMLSTR += "<table cellpadding='5px'>"
HTMLSTR += "<tr><td align='left'>" + params[0].marker + "</span>"
+ params[0].name + ':';
HTMLSTR += "</td><td align ='right'>"
+ params[0].value + "万元</td></tr>";
return HTMLSTR;
},
},
xAxis: {
data: dataAxis,
axisTick: {
show: true,
},
axisLine: {
show: true
},
z: 10,
axisLabel: { //x
show:true,
interval:0,//使x
// formatter: function (value, index) {
// return value;
// }
},
},
yAxis: {
axisLine: {
show: true
},
axisTick: {
show: true
},
axisLabel: {
color: '#999'
}
},
series: [
{
type: 'bar',
showBackground: true,
itemStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{offset: 0, color: '#83bff6'},
{offset: 0.5, color: '#188df0'},
{offset: 1, color: '#188df0'}
])
},
label: {
show: true,
fontSize:14,
color:'black',
formatter:'{c}万'
},
emphasis: {
label: {
show: true,
},
itemStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{offset: 0, color: '#2378f7'},
{offset: 0.5, color: '#2378f7'},
{offset: 1, color: '#83bff6'}
])
}
},
data: data
}
]
}
myChart.setOption(this.option);
},
initEcharts(echartsData) {
var dataAxis = [];
var data = [];
if (echartsData != null && echartsData.length > 0) {
for (var i = 0; i < echartsData.length; i++) {
let item = echartsData[i];
dataAxis[i] = item.TEXT
data[i] = (item.CASH / 1000000).toFixed(2)
}
} else {
dataAxis[i] = '无数据'
data[i] ='0.00'
}
this.echartsId = this.$props.echartsId
this.initOption({
dataAxis:dataAxis,
data:data
})
},
},
}
</script>
<style scoped>
</style>

@ -1,87 +0,0 @@
<template>
<div :id="echartsId" style="width: 100%;height: 350px" v-loading="loading"></div>
</template>
<script>
import * as echarts from "echarts";
export default {
name: "carTypePie",
data() {
return {
echartsId: '',
loading:false
}
},
props: ['echartsId'],
methods: {
initOption(data) {
let myChart = this.$echarts.init(document.getElementById(this.echartsId))
//
this.option = {
tooltip: {
trigger: 'item'
},
legend: {
orient: 'vertical',
left: 'left'
},
series: [
{
name: '车型占比',
type: 'pie',
right: "-20%",
avoidLabelOverlap: true, //
radius: ['40%', '70%'],
itemStyle: {
borderRadius: 10,
borderColor: '#fff',
borderWidth: 2
},
label: {
show: true,
formatter:'{b}({c})',
// position: 'center'
},
emphasis: {
label: {
show: true,
// fontSize: 40,
// fontWeight: 'bold'
},
},
labelLine: {
show: true
},
data: data
}
]
};
myChart.setOption(this.option);
},
initEcharts(echartsData) {
var data = [];
if (echartsData != null && echartsData.length > 0) {
for (var i=0;i<echartsData.length;i++) {
let item = echartsData[i];
data.push({
value: item.CARCOUNT,
name: item.TEXT
})
}
}else{
data.push({
value: 0,
name: '无数据'
})
}
this.echartsId = this.$props.echartsId
this.initOption(data)
},
},
}
</script>
<style scoped>
</style>

@ -1,134 +0,0 @@
<template>
<div :id="echartsId" style="width:100%;height: 350px" v-loading="loading"></div>
</template>
<script>
import * as echarts from 'echarts'
export default {
name: "portNumBar",
data() {
return {
echartsId: '',
loading:false
}
},
props: ['echartsId'],
methods: {
initOption(echartsData) {
let dataAxis = echartsData.dataAxis;
let data = echartsData.data;
let myChart = this.$echarts.init(document.getElementById(this.echartsId))
//
this.option = {
title: {
text: '车道车流量排名',
},
grid:{
left:'5%',
right:'5%'
},
tooltip: {
trigger: 'axis',
formatter: function (params) {
// var HTMLSTR = (params.seriesName == null ? "" : params.seriesName) + "<br/>";
var HTMLSTR = "";
HTMLSTR += "<table cellpadding='5px'>"
HTMLSTR += "<tr><td align='left'>" + params[0].marker + "</span>"
+ params[0].name + ':';
HTMLSTR += "</td><td align ='right'>"
+ params[0].value + "辆</td></tr>";
return HTMLSTR;
},
},
xAxis: {
data: dataAxis,
axisTick: {
show: true
},
axisLine: {
show: true
},
z: 10,
axisLabel: { //x
show:true,
interval:0,//使x
// formatter: function (value, index) {
// return value;
// }
},
},
yAxis: {
axisLine: {
show: true
},
axisTick: {
show: true
},
axisLabel: {
color: '#999'
}
},
series: [
{
type: 'bar',
showBackground: true,
itemStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{offset: 0, color: '#83bff6'},
{offset: 0.5, color: '#188df0'},
{offset: 1, color: '#188df0'}
])
},
label: {
show: true,
fontSize:14,
color:'black',
formatter:'{c}辆'
},
emphasis: {
label: {
show: true,
},
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)',
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{offset: 0, color: '#2378f7'},
{offset: 0.7, color: '#2378f7'},
{offset: 1, color: '#83bff6'}
])
}
},
data: data
}
]
}
myChart.setOption(this.option);
},
initEcharts(echartsData) {
var dataAxis = [];
var data = [];
if (echartsData != null && echartsData.length > 0) {
for (var i = 0; i < echartsData.length; i++) {
let item = echartsData[i];
dataAxis[i] = item.STANAME+'\n'+item.PORTNO+'车道'
data[i] = item.CARCOUNT
}
} else {
dataAxis[i] = '无数据'
data[i] ='0'
}
this.echartsId = this.$props.echartsId
this.initOption({
dataAxis:dataAxis,
data:data
})
},
},
}
</script>
<style scoped>
</style>

@ -1,134 +0,0 @@
<template>
<div :id="echartsId" style="width:100%;height: 350px" v-loading="loading"></div>
</template>
<script>
import * as echarts from 'echarts'
export default {
name: "portSuccRate",
data() {
return {
echartsId: '',
loading:false
}
},
props: ['echartsId'],
methods: {
initOption(echartsData) {
let dataAxis = echartsData.dataAxis;
let data = echartsData.data;
let myChart = this.$echarts.init(document.getElementById(this.echartsId))
//
this.option = {
title: {
text: '车道车牌识别成功率排名',
},
grid:{
left:'5%',
right:'5%'
},
tooltip: {
trigger: 'axis',
formatter: function (params) {
// var HTMLSTR = (params.seriesName == null ? "" : params.seriesName) + "<br/>";
var HTMLSTR = "";
HTMLSTR += "<table cellpadding='5px'>"
HTMLSTR += "<tr><td align='left'>" + params[0].marker + "</span>"
+ params[0].name + ':';
HTMLSTR += "</td><td align ='right'>"
+ params[0].value + "%</td></tr>";
return HTMLSTR;
},
},
xAxis: {
data: dataAxis,
axisTick: {
show: true
},
axisLine: {
show: true
},
z: 10,
axisLabel: { //x
show:true,
interval:0,//使x
// formatter: function (value, index) {
// return value;
// }
},
},
yAxis: {
axisLine: {
show: true
},
axisTick: {
show: true
},
axisLabel: {
color: '#999'
}
},
series: [
{
type: 'bar',
showBackground: true,
itemStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{offset: 0, color: '#83bff6'},
{offset: 0.5, color: '#188df0'},
{offset: 1, color: '#188df0'}
])
},
label: {
show: true,
fontSize:14,
color:'black',
formatter:'{c}%'
},
emphasis: {
label: {
show: true,
},
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)',
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{offset: 0, color: '#2378f7'},
{offset: 0.7, color: '#2378f7'},
{offset: 1, color: '#83bff6'}
])
}
},
data: data
}
]
}
myChart.setOption(this.option);
},
initEcharts(echartsData) {
var dataAxis = [];
var data = [];
if (echartsData != null && echartsData.length > 0) {
for (var i = 0; i < echartsData.length; i++) {
let item = echartsData[i];
dataAxis[i] = item.STANAME+'\n'+item.PORTNO+'车道'
data[i] = item.SUCCESSRATE
}
} else {
dataAxis[i] = '无数据'
data[i] ='0'
}
this.echartsId = this.$props.echartsId
this.initOption({
dataAxis:dataAxis,
data:data
})
},
},
}
</script>
<style scoped>
</style>

@ -1,182 +0,0 @@
<template>
<div class="demo-collapse">
<el-affix :offset="0">
<div style="padding: 10px 0">
<el-date-picker
v-model="timeSpan"
type="date"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
placeholder="日期"
style="width: 185px;margin-left: 0.5%"
/>
<el-button type="primary" style="margin-left: 0.5%;margin-top: 0px;" @click="collapseChange">
<el-icon style="vertical-align: middle;">
<search/>
</el-icon>
<span style="vertical-align: middle;"> 搜索 </span>
</el-button>
</div>
</el-affix>
<el-collapse v-model="activeNames" @change="collapseChange">
<el-collapse-item name="1">
<template #title>
<span class="collapseTitle">&nbsp;&nbsp;&nbsp;台格站车型</span>
</template>
<el-row :gutter="20">
<div style="width: 20px"></div>
<el-col :span="8">
<el-card style="width: 100%">
<template #header>
<div class="card-header">
<span>车型占比</span>
</div>
</template>
<carTypePie ref="taiGeCarTypePie" :echartsId="'taiGeCarTypePie'"></carTypePie>
</el-card>
</el-col>
<el-col :span="15">
<el-card style="width:100%">
<template #header>
<div class="card-header">
<span>各车型收费金额</span>
</div>
</template>
<carTypeFee ref="taiGeCarTypeFee" :echartsId="'taiGeCarTypeFee'"></carTypeFee>
</el-card>
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item name="2">
<template #title>
<span class="collapseTitle">&nbsp;&nbsp;&nbsp;嘎鲁图站车型</span>
</template>
<el-row :gutter="20">
<div style="width: 20px"></div>
<el-col :span="8">
<el-card style="width: 100%">
<template #header>
<div class="card-header">
<span>车型占比</span>
</div>
</template>
<carTypePie ref="gaLuTuCarTypePie" :echartsId="'gaLuTuCarTypePie'"></carTypePie>
</el-card>
</el-col>
<el-col :span="15">
<el-card style="width:100%">
<template #header>
<div class="card-header">
<span>各车型收费金额</span>
</div>
</template>
<carTypeFee ref="gaLuTuCarTypeFee" :echartsId="'gaLuTuTypeFee'"></carTypeFee>
</el-card>
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item name="3">
<template #title>
<span class="collapseTitle">&nbsp;&nbsp;&nbsp;车道车流量排名</span>
</template>
<el-row :gutter="20">
<div style="width: 20px"></div>
<el-col :span="23">
<el-card style="width:100%">
<portNumBar ref="portNumBar" :echartsId="'portNumBar'"></portNumBar>
</el-card>
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item name="4">
<template #title>
<span class="collapseTitle">&nbsp;&nbsp;&nbsp;车道车牌识别成功率排名</span>
</template>
<el-row :gutter="20">
<div style="width: 20px"></div>
<el-col :span="23">
<el-card style="width:100%">
<portSuccRate ref="portSuccRate" :echartsId="'portSuccRate'"></portSuccRate>
</el-card>
</el-col>
</el-row>
</el-collapse-item>
</el-collapse>
</div>
</template>
<script>
import carTypePie from './Echarts/carTypePie.vue';
import carTypeFee from './Echarts/carTypeFee.vue';
import portNumBar from './Echarts/portNumBar.vue';
import portSuccRate from './Echarts/portSuccRate.vue';
import {getNumAndCashOfType} from "../../util/api/api.js";
import moment from "moment";
export default {
name: "showStanEcharts",
data() {
return {
activeNames: ['0', '1', '2', '3', '4'],
timeSpan: moment(new Date()).format('YYYY-MM-DD'),
loading:false
}
},
methods: {
collapseChange() {
this.changeLoading(true);
let activeNames = this.activeNames;
getNumAndCashOfType({
timeSpan: this.timeSpan
}).then((res) => {
const carTypeMap = res.carTypeMap;
const CarNumOfPort = res.CarNumOfPort;
const SuccessRate = res.SuccessRate;
const taiGe = carTypeMap['9691'];
const gaLuTu = carTypeMap['9692'];
for (let name in activeNames) {
if (name == '0') {
this.$refs.taiGeCarTypePie.initEcharts(taiGe);
this.$refs.taiGeCarTypeFee.initEcharts(taiGe);
}
if (name == '1') {
this.$refs.gaLuTuCarTypePie.initEcharts(gaLuTu);
this.$refs.gaLuTuCarTypeFee.initEcharts(gaLuTu);
}
if (name == '2') {
this.$refs.portNumBar.initEcharts(CarNumOfPort);
}
if (name == '3') {
this.$refs.portSuccRate.initEcharts(SuccessRate);
}
}
this.changeLoading(false);
})
},
changeLoading(loading) {
this.$refs.taiGeCarTypePie.loading=loading;
this.$refs.taiGeCarTypeFee.loading=loading;
this.$refs.gaLuTuCarTypePie.loading=loading;
this.$refs.gaLuTuCarTypeFee.loading=loading;
this.$refs.portNumBar.loading=loading;
this.$refs.portSuccRate.loading=loading;
}
},
components: {
carTypePie,
carTypeFee,
portNumBar,
portSuccRate
},
mounted() {
this.collapseChange();
}
}
</script>
<style scoped>
.collapseTitle {
font-size: 20px;
font-weight: bolder;
}
</style>

@ -1,187 +0,0 @@
<template>
<el-form ref="formDom" :rules="addFormRules" :model="formData" size="medium" v-loading="loading">
<el-row>
<el-col :span="19" :offset="1">
<el-form-item label="分公司" :label-width="formLabelWidth" prop="subComNo">
<el-select style="width: 100%;" @change="changeSubCom" v-model="formData.subComNo" placeholder="请输入"
clearable filterable show-message="true">
<el-option v-for="(item, key, index) in addSubComList" :key="item.SUBCOMNO"
:label="item.SUBCOMNAME" :value="item.SUBCOMNO" :index="index" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="19" :offset="1">
<el-form-item label="收费站" :label-width="formLabelWidth" prop="staNo">
<el-select style="width: 100%;" filterable v-model="formData.staNo" placeholder="请输入" clearable>
<el-option v-for="(item, key, index) in addStaList" :label="item.STANAME" :value="item.STANO"
:index="index" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="19" :offset="1">
<el-form-item label="岗位" :label-width="formLabelWidth" prop="positionId">
<el-select style="width: 100%;" filterable v-model="formData.positionId" placeholder="请输入"
clearable>
<el-option v-for="(item, key, index) in addPositionList" :label="item.VALUE" :value="item.ID"
:index="index">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="19" :offset="1">
<el-form-item label="人员姓名" :label-width="formLabelWidth" prop="userName">
<el-input v-model="formData.userName" autocomplete="off"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</template>
<script setup>
import pro from '../../../util/tool.js';
import { onMounted, reactive, ref, toRefs, warn } from 'vue';
import { getOperationsFiterData, addOperators, updateOperators } from '@/util/api/api.js';
import { ElMessage, ElMessageBox } from "element-plus";
//
const props = defineProps(['rowData']);
debugger
//
const emit = defineEmits(['addReload']);
// label
const formLabelWidth = ref('130px');
//
const formData = ref({});
//
const addSubComList = ref([]);
//
const addPositionList = ref([]);
//
const addStaList = ref([]);
//
const loading = ref(false);
const formDom = ref(null);
//
const addFormRules = ref({
subComNo: [{ required: true, message: '请选择分公司', trigger: 'blur' }],
staNo: [{ required: true, message: '请选择收费站', trigger: 'blur' }],
positionId: [{ required: true, message: '请选择岗位', trigger: 'blur' }],
userName: [{ required: true, message: '请输入人员名称', trigger: 'blur' }],
})
onMounted(() => {
loading.value = true;
//
getOtherData();
});
function getOtherData() {
getOperationsFiterData({ subComNo: typeof (props.rowData.subComNo) != 'undefined' ? props.rowData.subComNo : null,isChange:"N" }).then(res => {
if (res.subComList != null) {
addSubComList.value = res.subComList;
}
if (res.positionList != null) {
addPositionList.value = res.positionList;
}
if (res.staList != null) {
addStaList.value = res.staList;
}
loading.value = false;
formData.value = props.rowData;
});
}
//
function changeSubCom() {
//
if (formData.value.subComNo != null && formData.value.subComNo !== "") {
formData.value.staNo = null;
} else if (formData.value.subComNo == "") {
formData.value.subComNo = null;
}
//,
getOperationsFiterData({ subComNo: formData.value.subComNo ,isChange:"Y" }).then(res => {
if (res.staList != null) {
addStaList.value = res.staList;
}
});
}
//
function saveData() {
addOperators(formData.value).then(res => {
if (res.result == 1) {
ElMessage.success("保存成功");
//
emit("addReload");
} else {
ElMessage.error("保存失败");
}
})
}
//
function updateData() {
updateOperators(formData.value).then(res => {
if (res.result == 1) {
ElMessage.success("修改成功");
//
emit("addReload");
} else {
ElMessage.error("修改失败");
}
})
}
//使
defineExpose({
formDom,
saveData,
updateData
});
</script>
<style scoped></style>

@ -1,121 +0,0 @@
<template>
<el-row>
<el-col :span="24">
<el-table :height=myHeight highlight-current-row="true" v-loading="loading" :data="tableData" border
style="width: 100%;">
<el-table-column :resizable="false" fixed align="center" type="index" width="80" label="序号" />
<el-table-column v-if="props.checkList.includes('')" :resizable="false" align="center" prop="subComName" label="分公司" />
<el-table-column v-if="props.checkList.includes('')" :resizable="false" align="center" prop="staName" label="收费站" />
<el-table-column v-if="props.checkList.includes('')" :resizable="false" align="center" prop="positionName" label="岗位" />
<el-table-column v-if="true" :resizable="false" align="center" prop="totalCount" label="统计数" />
</el-table>
<el-config-provider :locale="locale">
<el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange"
:current-page="tablePageData.pageNum" :page-sizes="[20, 30, 50]" :page-size="tablePageData.pageSize"
layout="total, sizes, prev, pager, next, jumper" :total="tablePageData.total">
</el-pagination>
</el-config-provider>
</el-col>
</el-row>
</template>
<script setup>
import pro from '../../../util/tool.js';
import { onMounted, reactive, ref, toRefs, warn } from 'vue';
import { getOperatorsCollectionData } from '@/util/api/api.js';
import { ElMessage, ElMessageBox } from "element-plus";
//
const props = defineProps(['checkList']);
//
const emit = defineEmits(['getTableData']);
//
const loading = ref(false);
//
const tablePageData = reactive({
total: 0,
pageNum: 1,
pageSize: 20
});
//
const myHeight = ref(500);
//
const tableData = ref([]);
onMounted(() => {
loading.value = true;
getData();
});
function getData() {
//
if(props.checkList.includes('分公司')){
tablePageData.subComCheck = "subComCollection";
}
if(props.checkList.includes('收费站')){
tablePageData.staNoCheck = "staCollection";
}
if(props.checkList.includes('岗位')){
tablePageData.positionCheck = "positionCollection";
}
getOperatorsCollectionData(tablePageData).then(res =>{
if (res.records != null) {
tableData.value = res.records;
tablePageData.total = res.total;
tablePageData.pageNum = res.current;
tablePageData.pageSize = res.size;
} else {
ElMessage.error('查询失败!')
}
loading.value = false;
//
// myHeight.value = (document.documentElement.clientHeight) * 0.84;
});
}
//使
defineExpose({});
//
function handleSizeChange(pageSize) {
//
loading.value = true;
tablePageData.pageSize = pageSize;
getData();
}
//
function handleCurrentChange(pageNum) {
//
loading.value = true;
tablePageData.pageNum = pageNum;
getData()
}
</script>
<style scoped></style>

@ -1,596 +0,0 @@
<template>
<el-row>
<el-col :span="24">
<div style="padding: 10px 0;display: flex">
<el-button type="primary" style="margin-left: 0.5%;margin-top: 0px;" @click="addOperators">
<el-icon>
<plus />
</el-icon>
<span style="vertical-align: middle;"> 新增 </span>
</el-button>
<el-button type="primary" style="margin-top: 0px;" @click="updateOperators">
<el-icon>
<Edit />
</el-icon>
<span style="vertical-align: middle;"> 修改 </span>
</el-button>
<el-button type="danger" style="margin-top: 0px;" @click="del">
<el-icon>
<delete />
</el-icon>
<span style="vertical-align: middle;"> 删除 </span>
</el-button>
<el-button type="primary" style="margin-left: 0.5%;margin-top: 0px;" @click="searchShow = true">
<el-icon style="vertical-align: middle;">
<search />
</el-icon>
<span style="vertical-align: middle;"> 查找 </span>
</el-button>
<!-- <div style="border-left: 1px solid gray;"></div> -->
<div style="height: 20px;padding-top: 8px;margin-left: 1%;">统计条件</div>
<el-checkbox-group style="height: 20px;margin-top: -3px;" v-model="checkList">
<el-checkbox label="分公司" value="subComCheck" size="large" />
<el-checkbox label="收费站" value="staCheck" size="large" />
<el-checkbox label="岗位" value="positionCheck" size="large" />
</el-checkbox-group>
<el-button type="primary" style="margin-left: 1%;margin-top: 0px;" @click="showCollection">
<el-icon style="vertical-align: middle;">
<Collection />
</el-icon>
<span style="vertical-align: middle;"> 统计 </span>
</el-button>
</div>
<el-table :height=myHeight highlight-current-row="true" v-loading="tableLoading" :data="tableData" border
style="width: 100%;" @current-change="tableHandleCurrentChange"
@selection-change="handleSelectionChange">
<el-table-column :resizable="false" fixed type="selection" width="50" align="center"></el-table-column>
<el-table-column :resizable="false" fixed align="center" type="index" width="80" label="序号" />
<el-table-column :resizable="false" align="center" prop="id" label="人员编号" />
<el-table-column :resizable="false" align="center" prop="subComName" label="分公司" />
<el-table-column :resizable="false" align="center" prop="staName" label="收费站" />
<el-table-column :resizable="false" align="center" prop="positionName" label="岗位" />
<el-table-column :resizable="false" align="center" prop="userName" label="姓名" />
</el-table>
<el-config-provider :locale="locale">
<el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange"
:current-page="searchForm.pageNum" :page-sizes="[20, 30, 50]" :page-size="searchForm.pageSize"
layout="total, sizes, prev, pager, next, jumper" :total="searchForm.total">
</el-pagination>
</el-config-provider>
</el-col>
<el-dialog title="运营人员信息查找" v-model="searchShow" width="35%" top="0.5%" draggable :modal="false">
<el-form :model="searchForm" size="medium" ref="searchFormElement">
<el-row>
<el-col :span="19" :offset="1">
<el-form-item label="分公司" :label-width="formLabelWidth">
<el-select style="width: 100%;" @change="changeSubCom" v-model="searchForm.subComNoQuery"
placeholder="请输入" clearable filterable>
<el-option v-for="(item, key, index) in searchSubComList" :label="item.SUBCOMNAME"
:value="item.SUBCOMNO" :index="index" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="19" :offset="1">
<el-form-item label="收费站" :label-width="formLabelWidth">
<el-select style="width: 100%;" filterable v-model="searchForm.staNoQuery" placeholder="请输入"
clearable>
<el-option v-for="(item, key, index) in searchStaList" :label="item.STANAME"
:value="item.STANO" :index="index" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="19" :offset="1">
<el-form-item label="岗位" :label-width="formLabelWidth">
<el-select style="width: 100%;" filterable v-model="searchForm.positionIdQuery"
placeholder="请输入" clearable>
<el-option v-for="(item, key, index) in searchPositionList" :label="item.VALUE"
:value="item.ID" :index="index">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="19" :offset="1">
<el-form-item label="人员姓名" :label-width="formLabelWidth">
<el-input placeholder="请输入" v-model="searchForm.userNameQuery" autocomplete="off"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="searchShow = false"> 取消</el-button>
<el-button type="primary" @click="resetSearchData">
<el-icon>
<Refresh />
</el-icon>
<span style="vertical-align: middle;"> 重置 </span>
</el-button>
<el-button type="primary" @click="searchData">
<el-icon style="vertical-align: middle;">
<search />
</el-icon>
<span style="vertical-align: middle;"> 搜索 </span>
</el-button>
</span>
</template>
</el-dialog>
<el-dialog v-model="addOperatorsShow" width="40%" top="0.5%" :destroy-on-close="true"
:close-on-click-modal="false">
<!-- :before-close="addOperatorsShow = false" -->
<template #header="{ titleAdd, titleClass, titleUpdate }">
<div class="my-header">
<span v-if="addTitle" :id="titleAdd" :class="titleClass"></span>
<span v-if="updateTitle" :id="titleUpdate" :class="titleClass"></span>
</div>
</template>
<operatorAddUpdate ref="operatorAddUpdateDom" :rowData="addUpdateForm" @addReload="addReload">
</operatorAddUpdate>
<template #footer>
<span class="dialog-footer">
<el-button @click="addOperatorsShow = false"> 取消</el-button>
<el-button type="primary" @click="saveData()"> </el-button>
</span>
</template>
</el-dialog>
<el-dialog v-model="collectionShow" width="80%" top="0.5%" draggable :destroy-on-close="true"
:close-on-click-modal="false">
<!-- :before-close="addOperatorsShow = false" -->
<template #header="{ title, titleClass }">
<div class="my-header">
<span :id="title" :class="titleClass">运营人员统计</span>
</div>
</template>
<operatorCollection ref="operatorCollectionDom" :checkList="checkList"></operatorCollection>
<template #footer>
<span class="dialog-footer">
<el-button @click="collectionShow = false"> 取消</el-button>
<el-button type="primary" @click="collectionShow = false"> 确认</el-button>
</span>
</template>
</el-dialog>
</el-row>
</template>
<script lang="ts" setup>
import { Download, View } from '@element-plus/icons-vue';
import pro from '../../../util/tool.js';
import { onMounted, reactive, ref, toRefs, warn } from 'vue';
import { getOperationsList, getOperationsFiterData, deleteOperators } from '@/util/api/api.js';
import { ElMessage, ElMessageBox } from "element-plus";
import operatorAddUpdate from './operatorAddUpdate.vue'
import operatorCollection from './operatorCollection.vue'
//dom
const operatorAddUpdateDom = ref(null);
//
const props = defineProps(['checkForm', 'images']);
//
const tableLoading = ref(true);
// label
const formLabelWidth = ref('130px');
//
const myHeight = ref(500);
//
const searchForm = reactive({
total: 0,
pageNum: 1,
pageSize: 20,
userNameQuery: "", //
subComNoQuery: null,//
positionIdQuery: null,//
staNoQuery: null//
});
//
const addUpdateForm = ref({});
//
const tableData = ref([]);
//
const searchSubComList = ref([]);
//
const searchPositionList = ref([]);
//
const searchStaList = ref([]);
// false true
const addOperatorsShow = ref(false);
// false true
const searchShow = ref(false);
//
const addTitle = ref(false);
//
const updateTitle = ref(false);
//
const currentRow = ref(null);
//
const multipleSelection = ref(null);
//
const checkList = ref([]);
//
const collectionShow = ref(false);
onMounted(() => {
tableLoading.value = true;
//
getTableData();
//
getOtherData();
});
function getTableData() {
getOperationsList(searchForm).then(res => {
if (res.records != null) {
tableData.value = res.records;
searchForm.total = res.total;
searchForm.pageNum = res.current;
searchForm.pageSize = res.size;
} else {
ElMessage.error('查询失败!')
}
//
myHeight.value = (document.documentElement.clientHeight) * 0.84;
})
}
function reloadTableData(){
tableLoading.value = true;
getOperationsList(searchForm).then(res => {
if (res.records != null) {
tableData.value = res.records;
searchForm.total = res.total;
searchForm.pageNum = res.current;
searchForm.pageSize = res.size;
} else {
ElMessage.error('查询失败!')
}
tableLoading.value = false;
//
myHeight.value = (document.documentElement.clientHeight) * 0.84;
})
}
function getOtherData() {
getOperationsFiterData({ subComNo: null,isChange:"N" }).then(res => {
if (res.subComList != null) {
searchSubComList.value = res.subComList;
}
if (res.positionList != null) {
searchPositionList.value = res.positionList;
}
if (res.staList != null) {
searchStaList.value = res.staList;
}
tableLoading.value = false;
});
}
//
function addOperators() {
addOperatorsShow.value = true;
//
addTitle.value = true;
//
updateTitle.value = false;
//addUpdateForm
addUpdateForm.value = { id: "" };
}
//
function saveData() {
operatorAddUpdateDom.value.formDom.validate((valid) => {
if (valid) { // valid true;
//
if (addTitle.value) {
//
operatorAddUpdateDom.value.saveData();
}
//
if (updateTitle.value) {
//
operatorAddUpdateDom.value.updateData();
}
} else {
return false
}
});
}
//
function addReload() {
//
addOperatorsShow.value = false;
//
reloadTableData();
}
//
function updateOperators() {
//
if (currentRow.value == null) {
ElMessage({
showClose: true,
message: '请选择要修改的数据!',
type: 'warning',
})
return;
}
//idint
currentRow.value.positionId = parseInt(currentRow.value.positionId);
currentRow.value.subComNo = parseInt(currentRow.value.subComNo);
currentRow.value.staNo = parseInt(currentRow.value.staNo);
//退
addUpdateForm.value = {...currentRow.value};
addOperatorsShow.value = true;
//
addTitle.value = false;
//
updateTitle.value = true;
}
function showCollection() {
if (checkList.value.length == 0) {
ElMessage({
showClose: true,
message: '请至少选择分公司、收费站、岗位中一个统计条件',
type: 'warning',
})
return;
}
collectionShow.value = true;
}
//
function changeSubCom() {
//
if (searchForm.subComNoQuery != null && searchForm.subComNoQuery !== "") {
searchForm.staNoQuery = null;
} else if (searchForm.subComNoQuery == "") {
searchForm.subComNoQuery = null;
}
//,
getOperationsFiterData({ subComNo: searchForm.subComNoQuery ,isChange:"Y" }).then(res => {
if (res.staList != null) {
searchStaList.value = res.staList;
}
});
}
//
function searchData() {
// ,null.
if (searchForm.subComNoQuery != null && typeof (searchForm.subComNoQuery) == 'string') {
searchForm.subComNoQuery = null;
}
if (searchForm.staNoQuery != null && typeof (searchForm.staNoQuery) == 'string') {
searchForm.staNoQuery = null;
}
if (searchForm.positionIdQuery != null && typeof (searchForm.positionIdQuery) == 'string') {
searchForm.positionIdQuery = null;
}
//
reloadTableData();
}
//
function resetSearchData() {
//
searchForm.userNameQuery = "";
searchForm.subComNoQuery = null;
searchForm.staNoQuery = null
searchForm.positionIdQuery = null;
//
reloadTableData();
}
function del() {
if (null == currentRow.value && null == multipleSelection.value) {
ElMessage({
showClose: true,
message: '请选择要删除的数据!',
type: 'warning',
})
return;
}
let operatorList = [];
//
if (null != multipleSelection.value && multipleSelection.value.length > 0) {
operatorList = [...multipleSelection.value ] ;
if (null != currentRow.value) {
let isCanAdd = true;
for (let item of operatorList) {
if (item.id == currentRow.value.id) {
isCanAdd = false;
break;
}
}
if (isCanAdd) {
operatorList.push({...currentRow.value});
}
}
} else {
operatorList.push({...currentRow.value});
}
let msg = "";
if (operatorList.length == 1) {
msg = '是否确定删除该数据?';
} else {
msg = '是否批量删除' + operatorList.length + '条数据?';
}
ElMessageBox.confirm(
msg,
'提示',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}
).then(() => {
deleteOperators(operatorList).then((res) => {
if (res.result == 1) {
ElMessage.success(res.msg);
currentRow.value = null;
multipleSelection.value = null;
//
reloadTableData();
} else {
ElMessage.error(res.msg);
}
})
}).catch(() => {
})
}
//
function handleSizeChange(pageSize) {
searchForm.pageSize = pageSize;
reloadTableData();
}
//
function handleCurrentChange(pageNum) {
searchForm.pageNum = pageNum;
reloadTableData()
}
//
function tableHandleCurrentChange(row) {
currentRow.value = row;
}
//
function handleSelectionChange(row) {
multipleSelection.value = row
}
</script>
<style scoped></style>

@ -1,269 +0,0 @@
<template>
<el-row>
<el-col :span="24">
<div style="padding: 10px 0;display: flex">
<el-button type="primary" style="margin-left: 0.5%;margin-top: 0px;" @click="addPosition">
<el-icon>
<plus />
</el-icon>
<span style="vertical-align: middle;"> 新增 </span>
</el-button>
<el-button type="danger" style="margin-top: 0px;" @click="del">
<el-icon>
<delete />
</el-icon>
<span style="vertical-align: middle;"> 删除 </span>
</el-button>
</div>
<el-table :height=myHeight highlight-current-row="true" v-loading="tableLoading" :data="tableData" border
style="width: 100%;" @current-change="tableHandleCurrentChange"
@selection-change="handleSelectionChange">
<el-table-column :resizable="false" fixed type="selection" width="50" align="center"></el-table-column>
<el-table-column :resizable="false" fixed align="center" type="index" width="80" label="序号" />
<el-table-column :resizable="false" align="center" prop="value" label="岗位名称" />
</el-table>
<el-config-provider :locale="locale">
<el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange"
:current-page="searchForm.pageNum" :page-sizes="[20, 30, 50]" :page-size="searchForm.pageSize"
layout="total, sizes, prev, pager, next, jumper" :total="searchForm.total">
</el-pagination>
</el-config-provider>
</el-col>
<el-dialog title="岗位信息添加" v-model="addPositionShow" width="35%" top="0.5%" draggable :modal="false">
<el-form :rules="addFormRules" :model="addForm" size="medium" ref="addFormElement">
<el-row>
<el-col :span="19" :offset="1">
<el-form-item label="岗位名称" :label-width="formLabelWidth" prop="positionName">
<el-input clearable maxlength="25" placeholder="请输入" show-word-limit
v-model="addForm.positionName" autocomplete="off"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="addPositionShow = false"> 取消</el-button>
<el-button type="primary" @click="saveData()">
<span style="vertical-align: middle;"> 确认 </span>
</el-button>
</span>
</template>
</el-dialog>
</el-row>
</template>
<script lang="ts" setup>
import { Download, View } from '@element-plus/icons-vue';
import pro from '../../util/tool.js';
import { onMounted, reactive, ref, toRefs, warn } from 'vue';
import { getPositionList, savePosition, deletePosition } from '@/util/api/api.js';
import { ElMessage, ElMessageBox } from "element-plus";
//formdom
const addFormElement = ref(null);
//
const tableLoading = ref(true);
// label
const formLabelWidth = ref('130px');
//
const myHeight = ref(500);
//
const searchForm = reactive({
total: 0,
pageNum: 1,
pageSize: 20,
});
//
const addForm = ref({
positionName: ""
});
//
const tableData = ref([]);
// false true
const addPositionShow = ref(false);
//
const addFormRules = ref({ positionName: { required: true, message: '请输入岗位名称', trigger: 'blur' } })
//
const currentRow = ref(null);
//
const multipleSelection = ref(null);
onMounted(() => {
tableLoading.value = true;
//
getTableData();
});
function getTableData() {
getPositionList(searchForm).then(res => {
if (res.records != null) {
tableData.value = res.records;
searchForm.total = res.total;
searchForm.pageNum = res.current;
searchForm.pageSize = res.size;
} else {
ElMessage.error('查询失败!')
}
tableLoading.value = false;
//
myHeight.value = (document.documentElement.clientHeight) * 0.84;
})
}
//
function addPosition() {
addPositionShow.value = true;
}
//
function saveData() {
addFormElement.value.validate((valid) => {
if (valid) { // valid true;
//
savePosition({ value: addForm.value.positionName }).then(res => {
if (res.result == 1) {
ElMessage.success(res.msg);
//
addPositionShow.value = false;
//
addForm.value.positionName = "";
tableLoading.value = true;
//
getTableData();
} else {
ElMessage.error(res.msg);
}
});
} else {
return false
}
})
}
function del() {
if (null == currentRow.value && null == multipleSelection.value ) {
ElMessage({
showClose: true,
message: '请选择要删除的数据!',
type: 'warning',
})
return;
}
let positionList = [];
//
if(null != multipleSelection.value && multipleSelection.value.length > 0){
positionList = [...multipleSelection.value ];
if(null != currentRow.value){
let isCanAdd = true;
for(let item of positionList){
if(item.id == currentRow.value.id){
isCanAdd = false;
break;
}
}
if(isCanAdd){
positionList.push({...currentRow.value});
}
}
}else{
positionList.push({...currentRow.value});
}
let msg = "";
if(positionList.length == 1){
msg = '是否确定删除该数据?';
}else{
msg = '是否批量删除' + positionList.length + '条数据?';
}
ElMessageBox.confirm(
msg ,
'提示',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}
).then(() => {
deletePosition(positionList).then((res) => {
if (res.result == 1) {
ElMessage.success(res.msg);
//
getTableData();
currentRow.value = null;
} else {
ElMessage.error(res.msg);
}
})
}).catch(() => {
})
}
function tableHandleCurrentChange(row) {
currentRow.value = row;
}
//
function handleSizeChange(pageSize) {
//
tableLoading.value = true;
searchForm.pageSize = pageSize;
getTableData();
}
//
function handleCurrentChange(pageNum) {
//
tableLoading.value = true;
searchForm.pageNum = pageNum;
getTableData()
}
//
function handleSelectionChange(row) {
multipleSelection.value = row
}
</script>
<style scoped></style>

@ -1,122 +0,0 @@
<template>
<el-row>
<el-col :span="24">
<el-table :height=myHeight highlight-current-row="true" v-loading="loading" :data="tableData" border
style="width: 100%;">
<el-table-column :resizable="false" fixed align="center" type="index" width="80" label="序号" />
<el-table-column v-if="props.checkList.includes('')" :resizable="false" align="center" prop="roadName" label="路段" />
<el-table-column v-if="props.checkList.includes('')" :resizable="false" align="center" prop="staName" label="收费站" />
<el-table-column width="170" v-if="props.checkList.includes('')" :resizable="false" align="center" prop="portTypeName" label="车道类型" />
<el-table-column v-if="true" :resizable="false" align="center" prop="totalCount" label="统计数" />
</el-table>
<el-config-provider :locale="locale">
<el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange"
:current-page="tablePageData.pageNum" :page-sizes="[20, 30, 50]" :page-size="tablePageData.pageSize"
layout="total, sizes, prev, pager, next, jumper" :total="tablePageData.total">
</el-pagination>
</el-config-provider>
</el-col>
</el-row>
</template>
<script setup>
import pro from '../../../util/tool.js';
import { onMounted, reactive, ref, toRefs, warn } from 'vue';
import { getSetUpCollectionData } from '@/util/api/api.js';
import { ElMessage, ElMessageBox } from "element-plus";
//
const props = defineProps(['checkList']);
//
const emit = defineEmits(['getTableData']);
//
const loading = ref(false);
//
const tablePageData = reactive({
total: 0,
pageNum: 1,
pageSize: 20
});
//
const myHeight = ref(600);
//
const tableData = ref([]);
onMounted(() => {
loading.value = true;
getData();
});
function getData() {
//
if(props.checkList.includes('路段')){
tablePageData.roadCheck = "roadCollection";
}
if(props.checkList.includes('收费站')){
tablePageData.staNoCheck = "staCollection";
}
if(props.checkList.includes('车道类型')){
tablePageData.portTypeCheck = "portTypeCollection";
}
getSetUpCollectionData(tablePageData).then(res =>{
if (res.records != null) {
tableData.value = res.records;
debugger;
tablePageData.total = res.total;
tablePageData.pageNum = res.current;
tablePageData.pageSize = res.size;
} else {
ElMessage.error('查询失败!')
}
loading.value = false;
//
// myHeight.value = (document.documentElement.clientHeight) * 0.84;
});
}
//使
defineExpose({});
//
function handleSizeChange(pageSize) {
//
loading.value = true;
tablePageData.pageSize = pageSize;
getData();
}
//
function handleCurrentChange(pageNum) {
//
loading.value = true;
tablePageData.pageNum = pageNum;
getData()
}
</script>
<style scoped></style>

@ -1,366 +0,0 @@
<template>
<el-row>
<el-col :span="24">
<div style="padding: 10px 0;display: flex">
<el-button type="primary" style="margin-left: 0.5%;margin-top: 0px;" @click="searchShow = true">
<el-icon style="vertical-align: middle;">
<search />
</el-icon>
<span style="vertical-align: middle;"> 查找 </span>
</el-button>
<div style="height: 20px;padding-top: 8px;margin-left: 1%;">统计条件</div>
<el-checkbox-group style="height: 20px;margin-top: -3px;" v-model="checkList">
<el-checkbox label="路段" value="roadCheck" size="large" />
<el-checkbox label="收费站" value="staCheck" size="large" />
<!-- <el-checkbox label="车道类型" value="portTypeCheck" size="large" /> -->
</el-checkbox-group>
<el-button type="primary" style="margin-left: 1%;margin-top: 0px;" @click="showCollection">
<el-icon style="vertical-align: middle;">
<Collection />
</el-icon>
<span style="vertical-align: middle;"> 统计 </span>
</el-button>
</div>
<el-table :height=myHeight highlight-current-row="true" v-loading="tableLoading" :data="tableData" border
style="width: 100%;">
<el-table-column :resizable="false" fixed align="center" type="index" width="80" label="序号" />
<el-table-column :resizable="false" align="center" prop="roadName" label="路段" />
<el-table-column :resizable="false" align="center" prop="staName" label="收费站" />
<el-table-column :resizable="false" align="center" prop="portNo" label="车道号" />
<el-table-column :resizable="false" align="center" prop="portIp" label="车道IP" />
<!-- <el-table-column :resizable="false" align="center" prop="portTypeName" label="车道类型" /> -->
</el-table>
<el-config-provider :locale="locale">
<el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange"
:current-page="searchForm.pageNum" :page-sizes="[20, 30, 50]" :page-size="searchForm.pageSize"
layout="total, sizes, prev, pager, next, jumper" :total="searchForm.total">
</el-pagination>
</el-config-provider>
</el-col>
<el-dialog title="车道信息查找" v-model="searchShow" width="35%" top="0.5%" draggable :modal="false">
<el-form :model="searchForm" size="medium" ref="searchFormElement">
<el-row>
<el-col :span="19" :offset="1">
<el-form-item label="路段" :label-width="formLabelWidth">
<el-select style="width: 100%;" @change="changeRoad" filterable
v-model="searchForm.roadNoQuery" placeholder="请输入" clearable>
<el-option v-for="(item, key, index) in searchRoadList" :label="item.ROADNAME"
:value="item.ROADNO" :index="index">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="19" :offset="1">
<el-form-item label="收费站" :label-width="formLabelWidth">
<el-select style="width: 100%;" filterable v-model="searchForm.staNoQuery" placeholder="请输入"
clearable>
<el-option v-for="(item, key, index) in searchStaList" :label="item.STANAME"
:value="item.STANO" :index="index" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="19" :offset="1">
<el-form-item label="车道号" :label-width="formLabelWidth">
<el-input placeholder="请输入" clearable v-model="searchForm.portNoQuery" autocomplete="off"></el-input>
</el-form-item>
</el-col>
<!-- <el-col :span="19" :offset="1">
<el-form-item label="车道类型" :label-width="formLabelWidth">
<el-select style="width: 100%;" v-model="searchForm.portTypeQuery" placeholder="请输入"
clearable filterable>
<el-option v-for="(item, key, index) in searchPortTypeList" :label="item.TEXT"
:value="item.VALUE" :index="index" />
</el-select>
</el-form-item>
</el-col> -->
</el-row>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="searchShow = false"> 取消</el-button>
<el-button type="primary" @click="resetSearchData">
<el-icon>
<Refresh />
</el-icon>
<span style="vertical-align: middle;"> 重置 </span>
</el-button>
<el-button type="primary" @click="searchData">
<el-icon style="vertical-align: middle;">
<search />
</el-icon>
<span style="vertical-align: middle;"> 搜索 </span>
</el-button>
</span>
</template>
</el-dialog>
<el-dialog v-model="collectionShow" width="80%" top="0.5%" draggable :destroy-on-close="true"
:close-on-click-modal="false">
<!-- :before-close="addOperatorsShow = false" -->
<template #header="{ title, titleClass }">
<div class="my-header">
<span :id="title" :class="titleClass">车道统计</span>
</div>
</template>
<setupCollection ref="setupCollectionDom" :checkList="checkList"></setupCollection>
<template #footer>
<span class="dialog-footer">
<el-button @click="collectionShow = false"> 取消</el-button>
<el-button type="primary" @click="collectionShow = false"> 确认</el-button>
</span>
</template>
</el-dialog>
</el-row>
</template>
<script setup>
import { Download, View } from '@element-plus/icons-vue';
import pro from '../../../util/tool.js';
import { onMounted, reactive, ref, toRefs, warn } from 'vue';
import { getSetUpList, getSetUpFiterData } from '@/util/api/api.js';
import { ElMessage, ElMessageBox } from "element-plus";
import setupCollection from './setupCollection.vue';
//
const tableLoading = ref(true);
// label
const formLabelWidth = ref('130px');
//
const myHeight = ref(500);
//
const searchForm = reactive({
total: 0,
pageNum: 1,
pageSize: 20,
roadNoQuery: null,
staNoQuery: null,
portNoQuery: "",
portTypeQuery: null,
});
//
const tableData = ref([]);
//
const searchShow = ref(false);
//
const searchPortTypeList = ref([]);
//
const searchRoadList = ref([]);
//
const searchStaList = ref([]);
//
const checkList = ref([]);
//
const collectionShow = ref(false);
onMounted(() => {
tableLoading.value = true;
//
getTableData();
//
getOtherData();
});
function getTableData() {
getSetUpList(searchForm).then(res => {
if (res.records != null) {
tableData.value = res.records;
searchForm.total = res.total;
searchForm.pageNum = res.current;
searchForm.pageSize = res.size;
} else {
ElMessage.error('查询失败!')
}
//
myHeight.value = (document.documentElement.clientHeight) * 0.84;
})
}
function reloadTableData(){
tableLoading.value = true;
getSetUpList(searchForm).then(res => {
if (res.records != null) {
tableData.value = res.records;
searchForm.total = res.total;
searchForm.pageNum = res.current;
searchForm.pageSize = res.size;
} else {
ElMessage.error('查询失败!')
}
tableLoading.value = false;
//
myHeight.value = (document.documentElement.clientHeight) * 0.84;
})
}
function getOtherData() {
getSetUpFiterData({ roadNo: null ,isChange:"N"}).then(res => {
if (res.portTypeList != null) {
searchPortTypeList.value = res.portTypeList;
}
if (res.roadList != null) {
searchRoadList.value = res.roadList;
}
if (res.staList != null) {
searchStaList.value = res.staList;
}
tableLoading.value = false;
});
}
//
function changeRoad() {
//
if (searchForm.roadNoQuery != null && searchForm.roadNoQuery !== "") {
searchForm.staNoQuery = null;
}
if (searchForm.roadNoQuery == "") {
searchForm.roadNoQuery = null;
}
//,
getSetUpFiterData({ roadNo: searchForm.roadNoQuery,isChange:"Y" }).then(res => {
if (res.staList != null) {
searchStaList.value = res.staList;
}
});
}
//
function searchData() {
// ,null.
if (searchForm.portTypeQuery != null && typeof (searchForm.portTypeQuery) == 'string') {
searchForm.portTypeQuery = null;
}
if (searchForm.staNoQuery != null && typeof (searchForm.staNoQuery) == 'string') {
searchForm.staNoQuery = null;
}
if (searchForm.roadNoQuery != null && typeof (searchForm.roadNoQuery) == 'string') {
searchForm.roadNoQuery = null;
}
//
reloadTableData();
}
//
function resetSearchData() {
//
searchForm.portNoQuery = "";
searchForm.portTypeQuery = null;
searchForm.staNoQuery = null
searchForm.roadNoQuery = null;
//
reloadTableData();
}
function showCollection() {
if (checkList.value.length == 0) {
ElMessage({
showClose: true,
// message: '',
message: '请至少选择路段、收费站中一个统计条件',
type: 'warning',
})
return;
}
collectionShow.value = true;
}
//
function handleSizeChange(pageSize) {
searchForm.pageSize = pageSize;
reloadTableData();
}
//
function handleCurrentChange(pageNum) {
searchForm.pageNum = pageNum;
reloadTableData()
}
</script>
<style></style>

@ -1,273 +0,0 @@
<template>
<el-form ref="formDom" :rules="addFormRules" :model="formData" size="medium" v-loading="loading">
<el-row>
<el-col :span="19" :offset="1">
<el-form-item label="分公司" :label-width="formLabelWidth" prop="subComNo">
<el-select style="width: 100%;" @change="changeSubCom" v-model="formData.subComNo" placeholder="请输入"
clearable filterable show-message="true">
<el-option v-for="(item, key, index) in addSubComList" :key="item.SUBCOMNO"
:label="item.SUBCOMNAME" :value="item.SUBCOMNO" :index="index" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="19" :offset="1">
<el-form-item label="路段" :label-width="formLabelWidth" prop="roadNo">
<el-select style="width: 100%;" @change="changeRoad" filterable v-model="formData.roadNo" placeholder="请输入"
clearable>
<el-option v-for="(item, key, index) in addRoadList" :label="item.ROADNAME" :value="item.ROADNO"
:index="index">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="19" :offset="1">
<el-form-item label="收费站" :label-width="formLabelWidth" prop="staNo">
<el-select style="width: 100%;" filterable v-model="formData.staNo" placeholder="请输入" clearable>
<el-option v-for="(item, key, index) in addStaList" :label="item.STANAME" :value="item.STANO"
:index="index" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="19" :offset="1">
<el-form-item label="里程(KM)" :label-width="formLabelWidth" prop="mileAge">
<el-input oninput="if(!/^[0-9]+$/.test(value)) value=value.replace(/\D/g,'');if(value<0) value=0;" v-model="formData.mileAge" autocomplete="off"></el-input>
</el-form-item>
</el-col>
<el-col :span="19" :offset="1">
<el-form-item label="桩号" :label-width="formLabelWidth" prop="stakeNo">
<el-input v-model="formData.stakeNo" autocomplete="off"></el-input>
</el-form-item>
</el-col>
<el-col :span="19" :offset="1">
<el-form-item label="收费开通时间" :label-width="formLabelWidth" prop="startDate">
<el-date-picker v-model="formData.startDate" type="datetime" format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss" style="width: 100%;" />
</el-form-item>
</el-col>
<el-col :span="19" :offset="1">
<el-form-item label="收费截止时间" :label-width="formLabelWidth" prop="endDate">
<el-date-picker v-model="formData.endDate" type="datetime" format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss" style="width: 100%;" />
</el-form-item>
</el-col>
</el-row>
</el-form>
</template>
<script setup>
import pro from '../../../util/tool.js';
import { onMounted, reactive, ref, toRefs, warn } from 'vue';
import { addStation, getStationFiterData } from '@/util/api/api.js';
import { ElMessage, ElMessageBox } from "element-plus";
//
const props = defineProps(['rowData']);
//
const emit = defineEmits(['reloadData']);
// label
const formLabelWidth = ref('130px');
//
const formData = ref({});
//
const addSubComList = ref([]);
//
const addRoadList = ref([]);
//
const addStaList = ref([]);
//
const loading = ref(false);
const formDom = ref(null);
//
const addFormRules = ref({
subComNo: [{ required: true, message: '请选择分公司', trigger: 'change' }],
staNo: [{ required: true, message: '请选择收费站', trigger: 'change' }],
roadNo: [{ required: true, message: '请选择路段', trigger: 'change' }],
mileAge: [{ required: true, message: '请输入里程', trigger: 'blur' }],
stakeNo: [{ required: true, message: '请输入桩号', trigger: 'blur' }],
startDate: [{ required: true, message: '请选择收费起始时间', trigger: 'blur' }],
endDate: [{ required: true, message: '请选择收费结束时间', trigger: 'blur' }],
})
onMounted(() => {
loading.value = true;
//
getOtherData();
});
function getOtherData() {
getStationFiterData(
{ subComNo: typeof (props.rowData.subComNo) != 'undefined' ? props.rowData.subComNo : null ,
roadNo: typeof (props.rowData.roadNo) != 'undefined' ? props.rowData.roadNo : null ,
isChange:"N"
}).then(res => {
if (res.subComList != null) {
addSubComList.value = res.subComList;
}
if (res.roadList != null) {
addRoadList.value = res.roadList;
}
if (res.staList != null) {
addStaList.value = res.staList;
}
loading.value = false;
formData.value = props.rowData;
});
}
//
function changeSubCom() {
//
if (formData.value.subComNo != null && formData.value.subComNo !== "") {
formData.value.staNo = null;
} else if (formData.value.subComNo == "") {
formData.value.subComNo = null;
}
//,
getStationFiterData({ subComNo: formData.value.subComNo ,isChange:"Y" }).then(res => {
if (res.staList != null) {
addStaList.value = res.staList;
}
});
}
//
function changeRoad() {
//
if (formData.value.roadNo != null && formData.value.roadNo !== "") {
formData.value.staNo = null;
}
if (formData.value.roadNo == "") {
formData.value.roadNo = null;
}
//,
getStationFiterData({ subComNo: formData.value.subComNo, roadNo: formData.value.roadNo,isChange:"Y" }).then(res => {
if (res.staList != null) {
addStaList.value = res.staList;
}
});
}
//
function saveData() {
//0
if(formData.value.mileAge.indexOf("0") === 0){
formData.value.mileAge = formData.value.mileAge.substring(1);
}
//
let result = compareDates(formData.value.startDate, formData.value.endDate);
if (result == -1) {
ElMessage.warning("收费开通时间 不能大于 收费截止时间");
return;
}
//
result = compareDates(pro.dateFormat(new Date()), formData.value.endDate);
if (result == -1) {
ElMessage.warning("收费截止时间不能小于当前时间");
return;
}
addStation(formData.value).then(res => {
if (res.result == 1) {
ElMessage.success("保存成功");
//
emit("reloadData");
}else if(res.result == -2){
ElMessage.warning("该收费站已经添加,不能重复添加");
} else {
ElMessage.error("保存失败");
}
})
}
//
function updateData() {
addOrUpdateOperators(formData.value).then(res => {
if (res.result == 1) {
ElMessage.success("修改成功");
//
emit("reloadData");
} else {
ElMessage.error("修改失败");
}
})
}
//使
defineExpose({
formDom,
saveData,
updateData
});
//
function compareDates(beginDate, endDate) {
let beginTime = new Date(beginDate);
let endTime = new Date(endDate);
// -1
if (beginTime > endTime) {
return -1;
//
} else if (beginTime <= endTime) {
return 0;
}
}
</script>
<style scoped></style>

@ -1,540 +0,0 @@
<template>
<el-row>
<el-col :span="24">
<div style="padding: 10px 0;display: flex">
<el-button type="primary" style="margin-top: 0px;" @click="addStation">
<el-icon>
<plus />
</el-icon>
<span style="vertical-align: middle;"> 新增 </span>
</el-button>
<el-button type="danger" style="margin-top: 0px;" @click="del">
<el-icon>
<delete />
</el-icon>
<span style="vertical-align: middle;"> 删除 </span>
</el-button>
<el-button type="primary" style="margin-left: 0.5%;margin-top: 0px;" @click="searchShow = true">
<el-icon style="vertical-align: middle;">
<search />
</el-icon>
<span style="vertical-align: middle;"> 查找 </span>
</el-button>
</div>
<el-table :height=myHeight highlight-current-row="true" v-loading="tableLoading" :data="tableData" border
style="width: 100%;" @current-change="tableHandleCurrentChange"
@selection-change="handleSelectionChange" :cell-style="cellStyle">
<el-table-column :resizable="false" fixed type="selection" width="50" align="center"></el-table-column>
<el-table-column :resizable="false" fixed align="center" type="index" width="80" label="序号" />
<el-table-column :resizable="false" align="center" prop="subComName" label="分公司" />
<el-table-column :resizable="false" align="center" prop="roadName" label="路段" />
<el-table-column :resizable="false" align="center" prop="staName" label="收费站" />
<el-table-column :resizable="false" align="center" prop="mileAge" label="里程(KM)" width="100" />
<el-table-column :resizable="false" align="center" prop="stakeNo" label="桩号" width="100" />
<el-table-column :resizable="false" align="center" prop="startDate" label="收费开通时间" width="170" />
<el-table-column :resizable="false" align="center" prop="endDate" label="收费截止时间" width="170" />
</el-table>
<el-config-provider :locale="locale">
<el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange"
:current-page="searchForm.pageNum" :page-sizes="[20, 30, 50]" :page-size="searchForm.pageSize"
layout="total, sizes, prev, pager, next, jumper" :total="searchForm.total">
</el-pagination>
</el-config-provider>
</el-col>
<el-dialog title="所站信息查找" v-model="searchShow" width="35%" top="0.5%" draggable :modal="false">
<el-form :model="searchForm" size="medium" ref="searchFormElement">
<el-row>
<el-col :span="19" :offset="1">
<el-form-item label="分公司" :label-width="formLabelWidth">
<el-select style="width: 100%;" @change="changeSubCom" v-model="searchForm.subComNoQuery"
placeholder="请输入" clearable filterable>
<el-option v-for="(item, key, index) in searchSubComList" :label="item.SUBCOMNAME"
:value="item.SUBCOMNO" :index="index" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="19" :offset="1">
<el-form-item label="路段" :label-width="formLabelWidth">
<el-select style="width: 100%;" @change="changeRoad" filterable
v-model="searchForm.roadNoQuery" placeholder="请输入" clearable>
<el-option v-for="(item, key, index) in searchRoadList" :label="item.ROADNAME"
:value="item.ROADNO" :index="index">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="19" :offset="1">
<el-form-item label="收费站" :label-width="formLabelWidth">
<el-select style="width: 100%;" filterable v-model="searchForm.staNoQuery" placeholder="请输入"
clearable>
<el-option v-for="(item, key, index) in searchStaList" :label="item.STANAME"
:value="item.STANO" :index="index" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="19" :offset="1">
<el-form-item label="桩号" :label-width="formLabelWidth">
<el-input placeholder="请输入" v-model="searchForm.stakeNoQuery" autocomplete="off"></el-input>
</el-form-item>
</el-col>
<el-col :span="19" :offset="1">
<el-form-item label="即将到期收费站" :label-width="formLabelWidth">
<el-checkbox v-model="searchForm.isOverDateQuery"></el-checkbox>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="searchShow = false"> 取消</el-button>
<el-button type="primary" @click="resetSearchData">
<el-icon>
<Refresh />
</el-icon>
<span style="vertical-align: middle;"> 重置 </span>
</el-button>
<el-button type="primary" @click="searchData">
<el-icon style="vertical-align: middle;">
<search />
</el-icon>
<span style="vertical-align: middle;"> 搜索 </span>
</el-button>
</span>
</template>
</el-dialog>
<el-dialog v-model="addStationShow" width="40%" top="0.5%" draggable :destroy-on-close="true"
:close-on-click-modal="false">
<!-- :before-close="addOperatorsShow = false" -->
<template #header="{ titleAdd, titleClass, titleUpdate }">
<div class="my-header">
<span v-if="true" :id="titleAdd" :class="titleClass"></span>
<!-- <span v-if="updateTitle" :id="titleUpdate" :class="titleClass"></span> -->
</div>
</template>
<stationAddUpdate ref="stationAddUpdateDom" :rowData="addUpdateForm" @reloadData="reloadData">
</stationAddUpdate>
<template #footer>
<span class="dialog-footer">
<el-button @click="addStationShow = false"> 取消</el-button>
<el-button type="primary" @click="saveData()"> </el-button>
</span>
</template>
</el-dialog>
</el-row>
</template>
<script setup>
import { Download, View } from '@element-plus/icons-vue';
import pro from '../../../util/tool.js';
import { onMounted, reactive, ref, toRefs, warn } from 'vue';
import { getStationInfoList, getStationFiterData, getOverMsg, deleteStation } from '@/util/api/api.js';
import { ElMessage, ElMessageBox, ElNotification } from "element-plus";
import stationAddUpdate from './stationAddUpdate.vue';
//
const tableLoading = ref(false);
// label
const formLabelWidth = ref('130px');
//
const tableData = ref([]);
//
const myHeight = ref(500);
//
const searchForm = reactive({
total: 0,
pageNum: 1,
pageSize: 20,
stakeNoQuery: "", //
subComNoQuery: null,//
roadNoQuery: null,//
staNoQuery: null,//
isOverDateQuery: false,//
nowDataStartQuery: "",
nowDataEndQuery: "",
});
//
const searchShow = ref(false);
//
const searchSubComList = ref([]);
//
const searchRoadList = ref([]);
//
const searchStaList = ref([]);
//
const addStationShow = ref(false);
//
const addUpdateForm = ref({});
//
const stationAddUpdateDom = ref(null);
//
const currentRow = ref(null);
//
const multipleSelection = ref(null);
onMounted(() => {
tableLoading.value = true;
//
getTableData();
//
getOtherData();
//
showMsg();
});
function getTableData() {
getStationInfoList(searchForm).then(res => {
if (res.records != null) {
tableData.value = res.records;
searchForm.total = res.total;
searchForm.pageNum = res.current;
searchForm.pageSize = res.size;
} else {
ElMessage.error('查询失败!')
}
//
myHeight.value = (document.documentElement.clientHeight) * 0.84;
})
}
function getOtherData() {
getStationFiterData({ subComNo: null, roadNo: null ,isChange:"N"}).then(res => {
if (res.subComList != null) {
searchSubComList.value = res.subComList;
}
if (res.roadList != null) {
searchRoadList.value = res.roadList;
}
if (res.staList != null) {
searchStaList.value = res.staList;
}
tableLoading.value = false;
});
}
function showMsg() {
getOverMsg({}).then(res => {
if (res == 1) {
ElNotification({
title: '注意',
message: "有即将到收费截止时间的收费站,请在查询功能中查询",
position: 'bottom-right',
type: 'warning',
});
}
});
}
//
function reloadData() {
//table
tableLoading.value = true;
//
addStationShow.value = false;
//
getStationInfoList(searchForm).then(res => {
if (res.records != null) {
tableData.value = res.records;
searchForm.total = res.total;
searchForm.pageNum = res.current;
searchForm.pageSize = res.size;
} else {
ElMessage.error('查询失败!')
}
tableLoading.value = false;
//
myHeight.value = (document.documentElement.clientHeight) * 0.84;
})
}
//
function changeSubCom() {
//
if (searchForm.subComNoQuery != null && searchForm.subComNoQuery !== "") {
searchForm.staNoQuery = null;
}
if (searchForm.subComNoQuery == "") {
searchForm.subComNoQuery = null;
}
//,
getStationFiterData({ subComNo: searchForm.subComNoQuery, roadNo: searchForm.roadNoQuery,isChange:"Y" }).then(res => {
if (res.staList != null) {
searchStaList.value = res.staList;
}
});
}
//
function changeRoad() {
//
if (searchForm.roadNoQuery != null && searchForm.roadNoQuery !== "") {
searchForm.staNoQuery = null;
}
if (searchForm.roadNoQuery == "") {
searchForm.roadNoQuery = null;
}
//,
getStationFiterData({ subComNo: searchForm.subComNoQuery, roadNo: searchForm.roadNoQuery,isChange:"Y" }).then(res => {
if (res.staList != null) {
searchStaList.value = res.staList;
}
});
}
//
function searchData() {
// ,null.
if (searchForm.subComNoQuery != null && typeof (searchForm.subComNoQuery) == 'string') {
searchForm.subComNoQuery = null;
}
if (searchForm.staNoQuery != null && typeof (searchForm.staNoQuery) == 'string') {
searchForm.staNoQuery = null;
}
if (searchForm.roadNoQuery != null && typeof (searchForm.roadNoQuery) == 'string') {
searchForm.roadNoQuery = null;
}
//
if (searchForm.isOverDateQuery) {
searchForm.nowDataStartQuery = pro.dateFormat(new Date());
searchForm.nowDataEndQuery = pro.dateFormat(pro.MonthAdd(new Date(),1));
} else {
searchForm.nowDataStartQuery = "";
searchForm.nowDataEndQuery = "";
}
//
tableLoading.value = true;
//
reloadData();
}
//
function resetSearchData() {
//
searchForm.stakeNoQuery = "";
searchForm.subComNoQuery = null;
searchForm.staNoQuery = null
searchForm.roadNoQuery = null;
searchForm.isOverDateQuery = false;
searchForm.nowDataStartQuery = "";
searchForm.nowDataEndQuery = "";
//
tableLoading.value = true;
//
reloadData();
}
function addStation() {
addStationShow.value = true;
addUpdateForm.value = {};
}
//
function saveData() {
stationAddUpdateDom.value.formDom.validate((valid) => {
if (valid) { // valid true;
//
// if (addTitle.value) {
//
stationAddUpdateDom.value.saveData();
//}
//
// if (updateTitle.value) {
// //
// stationAddUpdateDom.value.updateData();
// }
} else {
return false
}
});
}
function del() {
if (null == currentRow.value && null == multipleSelection.value) {
ElMessage({
showClose: true,
message: '请选择要删除的数据!',
type: 'warning',
})
return;
}
let stationList = [];
//
if (null != multipleSelection.value && multipleSelection.value.length > 0) {
//
stationList = [...multipleSelection.value];
if (null != currentRow.value) {
let isCanAdd = true;
for (let item of stationList) {
if (item.subComNo == currentRow.value.subComNo && item.staNo == currentRow.value.staNo) {
isCanAdd = false;
break;
}
}
if (isCanAdd) {
stationList.push({ ...currentRow.value });
}
}
} else {
stationList.push({ ...currentRow.value });
}
let msg = "";
if (stationList.length == 1) {
msg = '是否确定删除该数据?';
} else {
msg = '是否批量删除' + stationList.length + '条数据?';
}
ElMessageBox.confirm(msg,'提示', { confirmButtonText: '确定',cancelButtonText: '取消', type: 'warning',}).then(() => {
deleteStation(stationList).then((res) => {
if (res.result == 1) {
ElMessage.success(res.msg);
//
reloadData();
currentRow.value = null;
} else {
ElMessage.error(res.msg);
}
})
}).catch(() => {
})
}
const cellStyle = ({ row, column, rowIndex, columnIndex }) => {
if (column.property == "endDate") {
//
var endDate = new Date(row.endDate);
//
var nowDate = new Date();
//
var oneMonthLastDate = pro.MonthAdd(new Date(),1);
//, #F56C6C
if(endDate < nowDate){
//return { backgroundColor: "#F56C6C", color: "#F56C6C" };
return { color: "#F56C6C" };
}
//#E6A23C
else if(endDate >= nowDate && endDate <= oneMonthLastDate){
return { color: "#E6A23C" };
}
//绿#67C23A
else if(endDate > oneMonthLastDate){
return { color: "#67C23A" };
}
}
};
//
function handleSizeChange(pageSize) {
//
tableLoading.value = true;
searchForm.pageSize = pageSize;
reloadData();
}
//
function handleCurrentChange(pageNum) {
//
tableLoading.value = true;
searchForm.pageNum = pageNum;
reloadData()
}
//
function tableHandleCurrentChange(row) {
currentRow.value = row;
}
//
function handleSelectionChange(row) {
multipleSelection.value = row
}
</script>
<style scoped></style>

@ -1,341 +0,0 @@
<template>
<el-row>
<el-col :span="24">
<div style="padding: 10px 0">
<el-input style="width: 150px;margin-left: 0.5%" placeholder="车主姓名" v-model="searchForm.carName"></el-input>
<el-input style="width: 150px;margin-left: 0.5%" placeholder="车牌号" v-model="searchForm.carNo"></el-input>
<el-select v-model="searchForm.carType" class="m-2" clearable placeholder="车牌颜色"
style="width: 150px;margin-left: 0.5%">
<el-option
v-for="item in CarColorList"
:label="item.TEXT"
:value="item.VALUE"
/>
</el-select>
<el-date-picker
v-model="searchForm.timeSpan1"
type="datetime"
format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss"
placeholder="过期时间开始"
style="width: 185px;margin-left: 0.5%"
/>
-
<el-date-picker
v-model="searchForm.timeSpan2"
type="datetime"
format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss"
placeholder="过期时间结束"
style="width: 185px;"
/>
<el-button type="primary" style="margin-left: 0.5%;margin-top: 0px;" @click="network">
<el-icon style="vertical-align: middle;">
<search/>
</el-icon>
<span style="vertical-align: middle;"> 搜索 </span>
</el-button>
<el-button type="primary" style="margin-left: 0.5%;margin-top: 0px;" @click="reNetwork">
<el-icon>
<Refresh/>
</el-icon>
<span style="vertical-align: middle;"> 重置 </span>
</el-button>
<el-button type="primary" style="margin-top: 5px;margin-top: 0px;" @click="addItem">
<el-icon>
<plus/>
</el-icon>
<span style="vertical-align: middle;"> 新增 </span>
</el-button>
<el-button type="danger" style="margin-top: 5px;margin-top: 0px;" @click="deleteSelect(null)">
<el-icon>
<delete/>
</el-icon>
<span style="vertical-align: middle;"> 删除 </span>
</el-button>
</div>
<el-table :data="tableData" border
highlight-current-row="true"
style="width: 100%;"
:height=myHeight
@selection-change="handleSelectionChange"
v-loading="tableLoading"
>
<el-table-column :resizable="false" fixed type="selection" width="50" align="center"></el-table-column>
<el-table-column prop="openId" label="机型识别ID" align="center"></el-table-column>
<el-table-column prop="carName" label="车主姓名" align="center"></el-table-column>
<el-table-column prop="carNo" label="车牌号码" align="center"></el-table-column>
<el-table-column prop="carType" label="车牌颜色" align="center" :formatter="carColor"></el-table-column>
<el-table-column prop="mobileCode" label="机型名称" align="center"></el-table-column>
<el-table-column prop="timeSpan" label="过期时间" align="center" :formatter="dateFormat"></el-table-column>
<el-table-column :resizable="false" prop="right" label="操作" width="130" align="center">
<template v-slot="scope">
<el-button style="width: 48%;margin-left: 1%;margin-top: 2%" @click="editThis(scope.row)" type="warning"
size="default"
:icon="Edit">
</el-button>
<el-button style="width: 48%;margin-left: 2%;margin-top: 2%" @click="deleteSelect(scope.row)" type="danger"
size="default" :icon="Delete">
</el-button>
</template>
</el-table-column>
</el-table>
<el-config-provider :locale="locale">
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="searchForm.pageNum"
:page-sizes="[ 10, 50, 100]"
:page-size="searchForm.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="searchForm.total">
</el-pagination>
</el-config-provider>
</el-col>
</el-row>
<el-dialog title="车辆白名单操作" v-model="editShow" width="40%" top="0.5%" destroy-on-close
:close-on-click-modal="false">
<el-form :model="editThisRow" size="medium" :rules="editRules" ref="editThisRow">
<el-row>
<el-col :span="12">
<el-form-item label="机型识别ID" :label-width="formLabelWidth" prop="openId">
<el-input v-model="editThisRow.openId" autocomplete="off" :disabled="!editThisRow.isAdd"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="车主姓名" :label-width="formLabelWidth" prop="carName">
<el-input v-model="editThisRow.carName" autocomplete="off"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="车牌号码" :label-width="formLabelWidth" prop="carNo">
<el-input v-model="editThisRow.carNo" autocomplete="off" :disabled="!editThisRow.isAdd"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="车牌颜色" :label-width="formLabelWidth" prop="carType">
<el-select v-model="editThisRow.carType" class="m-2" placeholder="请选择车牌颜色"
style="width: 100%;"
>
<el-option
v-for="item in CarColorList"
:label="item.TEXT"
:value="item.VALUE"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="机型名称" :label-width="formLabelWidth" prop="mobileCode">
<el-input v-model="editThisRow.mobileCode" autocomplete="off"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="过期时间" :label-width="formLabelWidth" prop="timeSpan">
<el-date-picker
v-model="editThisRow.timeSpan"
type="datetime"
:clearable="false"
style="width: 100%;"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="editShow=false"> </el-button>
<el-button type="primary" @click="commit()"> </el-button>
</span>
</template>
</el-dialog>
</template>
<script>
import zhCn from 'element-plus/lib/locale/lang/zh-cn'
import {getUrlKey, getUserPage, getCarColorList, checkACarNo, commitCarUser, deleteCarUser} from "../../util/api/api.js";
import pro from '../../util/tool.js';
import moment from "moment";
import {Delete, Edit, Reading, ZoomIn, Search} from '@element-plus/icons-vue'
import {ElMessage} from "element-plus/es";
import {ElMessageBox} from "element-plus";
import qs from "qs";
export default {
name: "logManager",
components: {},
data() {
return {
Delete,
Edit,
Reading,
ZoomIn,
locale: zhCn,
tableData: [],
CarColorList: [],
multipleSelection: [],
searchForm: {
total: 0,
pageNum: 1,
pageSize: 10,
},
formLabelWidth: '130px',
myHeight: 500,
tableLoading: false,
editShow: false,
editThisRow: {},
editRules: {
openId: [{required: true, message: '请输入机型识别ID', trigger: 'blur'}],
carName: [{required: true, message: '请输入车主姓名', trigger: 'blur'}],
carNo: [{required: true, validator: this.checkACarNo, trigger: 'blur'}],
carType: [{required: true, message: '请选择车牌颜色', trigger: 'blur'}],
}
}
},
methods: {
commit() {
this.$refs['editThisRow'].validate((valid) => {
if (valid) {
commitCarUser(this.editThisRow).then((res) => {
if (res) {
ElMessage.success('操作成功!')
this.network();
this.editShow = false;
// window.parent.insertUserLogControl('1110',(this.managerForm.isAdd?"":"")+'');
} else {
ElMessage.error('操作失败!')
// window.parent.insertUserLogControl('1110',(this.managerForm.isAdd?"":"")+'');
}
return res;
})
}
})
},
addItem() {
this.editThisRow = {};
this.editThisRow.isAdd = true;
this.editThisRow.timeSpan = pro.MonthAdd(new Date(),6);
this.editShow = true;
},
editThis(row) {
this.editThisRow = JSON.parse(JSON.stringify(row));
this.editThisRow.isAdd = false;
this.editShow = true;
},
checkACarNo(rule, value, callback) {
if (value == null || value == '') {
callback(new Error('请输入车牌号'))
} else {
checkACarNo(qs.stringify({
aCarNo: value
})).then((res) => {
if (res) {
callback()
} else {
callback(new Error('请输入正确的车牌号'))
}
})
}
},
deleteSelect(row) {
let carNoList = [];
if (row != null) {
carNoList[0] = row;
} else {
carNoList = this.multipleSelection;
}
if (carNoList.length == 0) {
ElMessage({
showClose: true,
message: '请选择要删除的数据!',
type: 'warning',
})
return;
}
ElMessageBox.confirm(
'是否批量删除' + carNoList.length + '条数据?',
'提示',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}
).then(() => {
deleteCarUser(carNoList).then((res) => {
if (res) {
ElMessage({
message: res + '条删除成功!',
type: 'success',
})
this.network()
// window.parent.insertUserLogControl('1110', ids.length + '');
} else {
ElMessage.error('删除失败!')
// window.parent.insertUserLogControl('1110', ids.length + '');
}
})
}).catch(() => {
ElMessage({
type: 'info',
message: '已取消!',
})
})
},
handleSelectionChange(row) { //
this.multipleSelection = row
},
reNetwork() {
this.searchForm = {
total: 0,
pageNum: 1,
pageSize: 10,
};
this.network()
},
network() {
this.tableLoading = true;
getUserPage(this.searchForm).then((res) => {
if (res.records != null) {
this.tableData = res.records;
this.searchForm.total = res.total;
this.searchForm.pageNum = res.current;
this.searchForm.pageSize = res.size;
} else {
ElMessage.error('查询失败!')
}
this.tableLoading = false;
// window.parent.insertUserLogControl('1111','');
})
},
carColor(row, column) {
for (let i = 0; i < this.CarColorList.length; i++) {
if (row[column.property] == this.CarColorList[i].VALUE) {
return this.CarColorList[i].TEXT;
}
}
},
dateFormat(row, column) {
return pro.dateFormat(row[column.property]);
},
handleSizeChange(val) { //
this.searchForm.pageSize = val
this.network()
},
handleCurrentChange(val) { //
this.searchForm.pageNum = val
this.network()
},
},
mounted() {
getCarColorList().then((res) => {
this.CarColorList = res;
})
this.network();
this.myHeight = (document.documentElement.clientHeight) * 0.81;
}
}
</script>
<style scoped>
</style>

@ -9,7 +9,7 @@ import PkgConfig from 'vite-plugin-package-config'
export default defineConfig({
build: {
outDir: 'WhiteListManagerSys', // 指定输出路径
outDir: 'GreenTraffic', // 指定输出路径
},
plugins: [
vue(),

Loading…
Cancel
Save