This commit is contained in:
andy 2026-05-25 14:00:55 +08:00
parent bf08b8b3f0
commit 901761fed6
43 changed files with 1493 additions and 247 deletions

View File

@ -5,8 +5,8 @@ VITE_APP_TITLE = 智慧换电管理系统
VITE_APP_ENV = 'development'
# 开发环境
#VITE_APP_BASE_API = 'http://192.168.5.213:9100/gateway'
VITE_APP_BASE_API = 'http://192.168.5.14:9100/gateway'
VITE_APP_BASE_API = 'http://192.168.5.213:9100/gateway'
#VITE_APP_BASE_API = 'http://192.168.5.230:9100/gateway'
#VITE_APP_BASE_API = '/dev-api'
#VITE_APP_BASE_API = 'https://api.evo-techina.com'

View File

@ -7,17 +7,22 @@ import appStore from "@/stores/app";
import { ElMessage } from 'element-plus'
import Login from './views/components/login.vue'
import { storeToRefs } from 'pinia'
const TIEM = 1000*60*10
let openpop = ref(false)
watch(() => appStore().isEffecti,(v) => {
let { isEffecti,loginPage } = storeToRefs(appStore())
watch(isEffecti,(v) => {
openpop.value = false
if(!v && getToken() && !appStore().loginPage){
if(!v && getToken() && !loginPage){
openpop.value = true
}
})
watch(() => appStore().loginPage,(v) => {
watch(() => loginPage,(v) => {
if(v){
openpop.value = false
}
@ -34,6 +39,13 @@ import Login from './views/components/login.vue'
})
openpop.value = true
}
}).catch(() => {
removeToken()
ElMessage({
type: 'warning',
message: '登录失效请重新登录'
})
openpop.value = true
})
}
}, TIEM)

View File

@ -163,3 +163,8 @@ export function dzdzd(params:any) {
export function downdzdz(params:any) {
return server.download('/cloud/order/swap/bill/download',params,'电子对账单.xlsx')
}
//导出订单
export function orderept(params:any) {
return server.download('/cloud/order/swap/export',params,'订单.xlsx')
}

View File

@ -11,9 +11,13 @@ interface Addobj{
productionDate?:String //生产日期
registrationDate?:String //注册时间
sourceCode?:String //站码或车牌照
stationCode?:String //换电站编码
stationName:String //换电站名称
// stationCode?:String //换电站编码
// stationName:String //换电站名称
soc?:String|Number //当前电量
dccNo?:String //电池仓序号
pointType:String|Number //轨迹点类型 1-站2-车
pointCode:String //轨迹点编码
pointName:String //轨迹点名称
}
export function addhdz(data:Addobj) {
@ -89,3 +93,20 @@ export function addzhuis(data:Addzs) {
}
//电池数据/
// type:1 近一周 2近半个月 3近一个月 4近半年 5 近一年
// batCode: 电池编码
export function getdcsj(batCode:any,beginTime:any,endTime:any) {
return server.request({
headers:{
'content-type':'application/json;charset=utf-8'
},
url: '/cloud/battery/station/dc/dynamic/detail',
method: 'post',
data:{
batCode,
beginTime,
endTime
}
})
}

View File

@ -10,7 +10,7 @@ interface Addobj{
eachKmFee?:String|Number //每公里收费
eachSocFee?:String|Number //每SOC收费
eachKwhFee?:String|Number //每度电收费
timeServiceFee?:String|Number //谷段服务费
serviceFee?:String|Number //谷段服务费
}
export function addhdz(data:Addobj) {

View File

@ -16,4 +16,13 @@ export function mqttlist(params:Querydata) {
method: 'get',
params
})
}
//在线记录
export function onlinelist(params:any) {
return server.request({
url: '/cloud/mqtt/client/list',
method: 'get',
params
})
}

View File

@ -0,0 +1,51 @@
import server from '@/utils/request'
//查询
interface Query{
pageSize:string|number //每页条数
pageNo:string|number //页数
path:string //路径
}
export function getadlist(params:Query) {
return server.request({
url: '/cloud/alarm/list',
method: 'get',
params
})
}
//新增
interface Addata{
id?:string
recipientIds:string //通知人员
path:string //路径
}
export function addyctz(data:Addata) {
return server.request({
url: '/cloud/alarm/add',
method: 'post',
data
})
}
//修改
export function updateab(data:Addata) {
return server.request({
url: '/cloud/alarm/update',
method: 'post',
data
})
}
//删除
export function delab(id:String) {
return server.request({
url: '/cloud/alarm/del',
method: 'post',
data:{
id
}
})
}

View File

@ -19,6 +19,15 @@ export function getyyslist(params:Query) {
})
}
//下拉菜单查询
export function optionyyslist() {
return server.request({
url: '/resource/proxyoperater/option/list',
method: 'get'
})
}
//新增
interface Addata{
division:String //区划名称

View File

@ -54,7 +54,7 @@ export function updateuser(data:User) {
}
//删除
export function deleteuser(data:String) {
export function deleteuser(data:any) {
return server.request({
url: '/resource/user/del',
method: 'post',

View File

@ -2,14 +2,15 @@
<div class="sidebar">
<!--background-color="#324157"-->
<!--text-color="#bfcbd9"-->
<!--:collapse="collapse"-->
<el-menu
class="sidebar-el-menu"
:default-active="onRoutes"
:collapse="collapse"
background-color="#fff"
text-color="#242f42"
active-text-color="#20a0ff"
unique-opened
:collapse="collapse"
router
>
<template v-for="item in menu">
@ -73,6 +74,8 @@ const onRoutes = computed(() => {
const menu = computed(() => pStore.sidebarMenu);
const collapse = computed(() => pStore.sidebarIsCollapsed);
console.log(menu.value,'menu')
</script>
<style>
.el-menu-item:hover {
@ -96,7 +99,7 @@ const collapse = computed(() => pStore.sidebarIsCollapsed);
}
.sidebar-el-menu:not(.el-menu--collapse) {
width: 210px;
width: 210px;
}
// .el-sub-menu {

View File

@ -288,6 +288,9 @@ const store = defineStore({
//this.tagsRouterPaths = getTagsRouterPath(this.tagsRouters);
//全部路由
//this.routes = concatRouter(this.tagsRouters, constantRoutes);
console.log(this.sidebarMenu)
resolve(this.routes);
}).catch(err => {
if(err == 'S0405'){

View File

@ -299,6 +299,44 @@ export class Service {
downloadLoading.close();
});
}
public downloadget<T>(url: string, params: T, filename: string, config: AxiosRequestConfig = {}) {
const downloadLoading = ElLoading.service({
text: "正在下载数据,请稍候",
spinner: "el-icon-loading",
background: "rgba(0, 0, 0, 0.7)",
});
return this.instance
.get<T, Blob>(url, {
params,
// transformRequest: [
// (params) => {
// return tansParams(params);
// },
// ],
headers: { "Content-Type": "application/x-www-form-urlencoded" },
responseType: "blob",
//...config,
})
.then(async (data) => {
const isLogin = await blobValidate(data);
if (isLogin) {
const blob = new Blob([data]);
saveAs(blob, filename);
} else {
const resText = await data.text();
const rspObj = JSON.parse(resText);
const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode["default"];
ElMessage.error(errMsg);
}
downloadLoading.close();
})
.catch((r) => {
console.error(r);
ElMessage.error("下载文件出现错误,请联系管理员!");
downloadLoading.close();
});
}
}
// 默认导出Request实例

View File

@ -584,6 +584,7 @@ onMounted(() => {
}
})
initChart4()
xdata.value = (rps.data as any).trendList.map((n:any) => {

View File

@ -17,14 +17,15 @@
</el-col> -->
<el-col :span="5">
<el-form-item label="经度">
<el-input v-model="lat" readonly style="width: 100%" />
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="维度">
<el-input v-model="lng" readonly style="width: 100%" />
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="纬度">
<el-input v-model="lat" readonly style="width: 100%" />
</el-form-item>
</el-col>
<el-col :span="4" style="padding-left:20px;">
<el-button type="primary" @click="save">确定</el-button>
</el-col>
@ -37,11 +38,11 @@
import { jsonp } from 'vue-jsonp'
import {ref,nextTick } from 'vue'
const props = withDefaults(defineProps<{
lng?:string|number,
lat?:string|number
lng?:string|number
}>(), {
lat:39.916527,
lng:116.397128
lng:116.397128,
lat:39.916527
})
const emit = defineEmits<{
chang: [latlng?:string]
@ -149,7 +150,7 @@
})
function save() {
emit('chang',lat.value?`${lat.value},${lng.value}`:'')
emit('chang',lat.value?`${lng.value},${lat.value}`:'')
}
</script>

View File

@ -9,7 +9,7 @@
</div>
<!--large / default / small-->
<el-form-item prop="username" size="large">
<el-input size="large" v-model="loginForm.username" type="text" auto-complete="off" placeholder="账号">
<el-input size="large" v-model="loginForm.username" type="text" clearable auto-complete="off" placeholder="账号">
<template #prefix>
<el-icon>
<myUser />
@ -18,7 +18,7 @@
</el-input>
</el-form-item>
<el-form-item size="large" prop="password">
<el-input size="large" v-model="loginForm.password" type="password" auto-complete="off" placeholder="密码" @keyup.enter="handleLogin">
<el-input size="large" v-model="loginForm.password" type="password" clearable auto-complete="off" placeholder="密码" @keyup.enter="handleLogin">
<template #prefix>
<el-icon>
<myPassword />
@ -27,7 +27,7 @@
</el-input>
</el-form-item>
<el-form-item size="large" v-if="captchaEnabled" prop="code">
<el-input size="large" v-model="loginForm.code" auto-complete="off" placeholder="验证码" style="width: 63%" @keyup.enter="handleLogin">
<el-input size="large" v-model="loginForm.code" auto-complete="off" clearable placeholder="验证码" style="width: 63%" @keyup.enter="handleLogin">
<template #prefix>
<el-icon>
<myValidCode />
@ -85,8 +85,8 @@
const codeUrl = ref<string>("");
const loginForm = ref<LoginReq>({
username: "admin",
password: "admin123",
username: "",
password: "",
rememberMe: false,
code: "",
uuid: "",
@ -119,6 +119,7 @@
*/
let ipcode = ref<string>("");
const getCode = () => {
loginForm.value.code = ''
getCodeImg().then( res => {
let data = res.data as any
if(data){

View File

@ -1,18 +1,18 @@
<template>
<div>
<div style="padding:10px 0 20px;">
<div>
<!-- <el-button
type="primary"
plain
icon="Plus"
@click="showpop(1)">新增</el-button> -->
<el-table
style="width:100%;margin-top: 10px;"
style="width:100%;"
:data="yysList"
border
stripe
highlight-current-row
max-height="620px"
:max-height="total>10?'330px':'380px'"
>
<el-table-column label="交易编码" min-width="280" align="center" prop="tradeNo" :show-overflow-tooltip="true" />
@ -81,7 +81,7 @@
</el-table>
</div>
<div v-if="total > 10" style="display: flex;justify-content: right;">
<div v-if="total > 10" style="display: flex;padding-top: 10px;justify-content: right;">
<el-pagination
v-model:current-page="queryParams.pageNo"
v-model:page-size="queryParams.pageSize"

View File

@ -6,31 +6,33 @@
:model="queryParams"
:inline="true"
>
<el-form-item label="户主类型" prop="ownerType">
<!-- <el-form-item label="户主类型" prop="ownerType">
<el-select v-model="queryParams.ownerType" placeholder="请选择类型" style="width: 200px;">
<el-option label="个人" value="1" />
<el-option label="企业" value="2" />
</el-select>
</el-form-item>
</el-form-item> -->
<el-form-item label="户主名称" prop="accName">
<el-input
v-model="queryParams.accName"
placeholder="请输入户主名称"
maxlength="50"
maxlength="20"
clearable
style="width: 200px;"
/>
</el-form-item>
<el-form-item label="联系电话" prop="phone">
<!-- <el-form-item label="联系电话" prop="phone">
<el-input
v-model="queryParams.phone"
placeholder="请输入联系电话"
maxlength="50"
/>
</el-form-item>
<el-form-item label="引入站点" prop="stationCode">
</el-form-item> -->
<!-- <el-form-item label="引入站点" prop="stationCode">
<el-select v-model="queryParams.stationCode" placeholder="请选择换电站" style="width: 200px;">
<el-option v-for="n in yunList" :label="n.name" :value="n.code" />
</el-select>
</el-form-item>
</el-form-item> -->
<el-form-item>
<el-button type="primary" icon="Search" @click="handBtnqu">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
@ -69,7 +71,7 @@
</el-table-column>
<el-table-column label="账户编码" min-width="300" align="center" prop="code" :show-overflow-tooltip="true" />
<el-table-column label="引入站点" min-width="250" align="center" prop="stationName" :show-overflow-tooltip="true" />
<el-table-column label="引入站点" min-width="220" align="center" prop="stationName" :show-overflow-tooltip="true" />
<el-table-column label="账户总金额(元)" min-width="120" align="left" prop="totalAmount" :show-overflow-tooltip="true">
<template #default="scope">
<div>{{scope.row.totalAmount/100}}</div>
@ -334,7 +336,7 @@
<el-input
disabled
v-model="addata.totalAmount"
placeholder="请输入总金额"
placeholder=""
maxlength="50"
/>
</el-form-item>
@ -344,7 +346,7 @@
<el-input
disabled
v-model="addata.rechargeAmount"
placeholder="请输入充值金额"
placeholder=""
maxlength="50"
/>
</el-form-item>
@ -354,7 +356,7 @@
<el-input
disabled
v-model="addata.giftAmount"
placeholder="请输入赠送金额"
placeholder=""
maxlength="50"
/>
</el-form-item>
@ -364,7 +366,7 @@
<el-input
disabled
v-model="addata.point"
placeholder="请输入积分余额"
placeholder=""
maxlength="50"
/>
</el-form-item>
@ -374,7 +376,7 @@
<el-input
disabled
v-model="addata.deposit"
placeholder="请输入押金"
placeholder=""
maxlength="50"
/>
</el-form-item>
@ -393,7 +395,7 @@
<el-input
disabled
v-model="addata.rent"
placeholder="请输入租金"
placeholder=""
maxlength="50"
/>
</el-form-item>
@ -412,7 +414,7 @@
<div class="mktit">余额明细</div>
<baldetails
v-if="drawer"
style="padding: 20px;"
style="padding: 20px 20px 0;"
:code='code'
/>
</div>
@ -469,7 +471,7 @@
let total = ref(0)
let yysList = ref<any>([])
function handBtnqu(){
//queryParams.pageNo = 1
queryParams.pageNo = 1
getyys()
}

View File

@ -13,7 +13,7 @@
<el-input v-model="queryParams.plateNum" placeholder="请输入车牌号" clearable />
</el-form-item>
<el-form-item label="订单状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择状态" style="width: 200px;">
<el-select v-model="queryParams.status" placeholder="请选择状态" style="width: 193px;">
<el-option label="已创建" value="1" />
<el-option label="换电中" value="2" />
<el-option label="换电完成" value="3" />
@ -21,6 +21,7 @@
<el-option label="充电完成" value="5" />
<el-option label="待结算" value="6" />
<el-option label="已完成" value="7" />
<el-option label="支付中" value="8" />
<el-option label="已取消" value="9" />
</el-select>
</el-form-item>
@ -42,8 +43,13 @@
placeholder="请选择时间"
/>
</el-form-item>
<el-form-item label="运营商" prop="proCode">
<el-select v-model="queryParams.proCode" placeholder="请选择运营商" style="width: 193px;">
<el-option v-for="n in yunysList" :label="n.label" :value="n.value" />
</el-select>
</el-form-item>
<el-form-item label="换电站" prop="stationCode">
<el-select v-model="queryParams.stationCode" placeholder="请选择换电站" style="width: 200px;">
<el-select v-model="queryParams.stationCode" placeholder="请选择换电站" style="width: 193px;">
<el-option v-for="n in yunList" :label="n.name" :value="n.code" />
</el-select>
</el-form-item>
@ -53,6 +59,8 @@
<el-form-item>
<el-button type="primary" icon="Search" @click="handBtnqu">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
<el-button type="warning" plain icon="Download" @click="eptdd">导出</el-button>
</el-form-item>
</el-form>
</div>
@ -723,9 +731,14 @@
delhdz,
jsfeiy,
gethdbz,
oderdetails
oderdetails,
orderept
} from '@/api/order/replabatt'
import {
optionyyslist
} from '@/api/systemSet/operator'
import {
getwxlist
} from '@/api/operation/wxuser'
@ -844,7 +857,8 @@
stationName:'', //
userId:'', //ID
tradeNo:'', //
status:''
status:'',
proCode:''
})
//
@ -855,10 +869,23 @@
getyys()
}
function eptdd(){
orderept(queryParams)
}
//
let yunysList = ref<any>([])
optionyyslist().then(rps => {
if(rps.data){
//let list = (rps.data as any).records
yunysList.value = rps.data
}
})
//
let yunList = ref<any>([])
gethdzlist({
pageSize:20, //
pageSize:200, //
pageNo:1, //
proxyId:'', //ID
name:'', //

View File

@ -181,7 +181,7 @@
>
<div style="width: 100%;padding: 25px;text-align: center;">
<div style="padding-bottom: 15px;font-size: 22px;">请打开微信扫一扫完成支付</div>
<div v-if="qscode" style="display: flex;padding-bottom: 15px;align-items: center;justify-content: center;">
<div v-if="qscode && !issx" style="display: flex;padding-bottom: 15px;align-items: center;justify-content: center;">
<div style="padding-right: 10px;">剩余支付时间</div>
<div style="padding-right: 6px;color: #ff6000;"><span style="font-size: 22px;">{{tmminute}} </span></div>
@ -436,8 +436,13 @@
let qscode = ref('')
function zfclose() {
payqs.attach = JSON.parse(payqs.attach)
clearInterval(timer)
//payqs.attach = JSON.parse(payqs.attach)
if(timer){
clearInterval(timer)
}
if(djstimet){
clearInterval(djstimet)
}
}
@ -452,6 +457,13 @@
//
let issx = ref(false)
function payment(type?:number) {
minute.value = 29
second.value = 59
tmminute.value = 29
tmsecond.value = 59
// if(dzarr.value.length > 0){
//
@ -484,7 +496,7 @@
payqs.ccode = queryParams.companyCode
payqs.orderTimeEnd = queryParams.orderTimeEnd
if(type == 1){
payqs.attach = JSON.stringify(payqs.attach)
//payqs.attach = JSON.stringify(payqs.attach)
}else{
issx.value = false
}
@ -500,18 +512,23 @@
clearInterval(djstimet)
}
batchpayment(payqs).then(rps => {
batchpayment(Object.assign({},payqs,{
attach:JSON.stringify(payqs.attach)
}
)).then(rps => {
qscode.value = JSON.parse(rps.data as any).codeUrl
djstimet = setInterval(() => {
second.value--
tmsecond.value = second.value
console.log(second.value,minute.value)
if(second.value == 0 && minute.value == 0) {
tmminute.value = '00'
tmsecond.value = '00'
// tmminute.value = '00'
// tmsecond.value = '00'
issx.value = true
clearInterval(djstimet)
}
if(second.value == 0) {
second.value = 59
@ -519,17 +536,19 @@
tmsecond.value = 59
minute.value--
if(minute.value < 10){
tmminute.value = '0'+ minute.value
}else{
tmminute.value = minute.value
}
}
if(second.value < 10){
tmsecond.value = '0' + second.value
}else{
tmsecond.value = second.value
// if(minute.value < 10 && minute.value > 0){
// tmminute.value = '0'+ minute.value
// }else{
// tmminute.value = minute.value
// }
tmminute.value = minute.value
}
// if(second.value < 10){
// tmsecond.value = '0' + second.value
// }else{
// tmsecond.value = second.value
// }
tmsecond.value = second.value
}, 1000)
@ -538,10 +557,11 @@
rps.data = JSON.parse(rps.data as any)
if((rps.data as any).tradeState == 'SUCCESS'){ //'NOTPAY'
ElMessage({
type: 'warning',
type: 'success',
message: '支付成功'
})
openpop.value = false
zfclose()
handBtnqu()
}

View File

@ -416,9 +416,9 @@
stationCode:[
{ required: true, message: "请选择换电站", trigger: "blur" }
],
swapDuration:[
{ required: true, message: "请选择换电时间段", trigger: "blur" }
],
// swapDuration:[
// { required: true, message: "", trigger: "blur" }
// ],
plateNum:[
{ required: true, message: "请输入车牌号", trigger: "blur" },
{ validator:carNum, trigger: "blur"}

View File

@ -70,7 +70,7 @@
<el-table-column label="订单数量" min-width="120" align="center" prop="orderCount" :show-overflow-tooltip="true" />
<el-table-column label="交易金额(元)" min-width="120" align="center" prop="tradeAmount" :show-overflow-tooltip="true">
<template #default="scope">
<div v-if="scope.row.tradeAmount">{{scope.row.tradeAmount?scope.row.tradeAmount/100:''}}</div>
<div>{{scope.row.tradeAmount?scope.row.tradeAmount/100:''}}</div>
</template>
</el-table-column>
<el-table-column label="交易凭证" min-width="120" align="center" prop="pingz" :show-overflow-tooltip="true">
@ -306,7 +306,7 @@
addObj.tradeMessage = ''
addObj.pkId = row.pkId
popshow.value = true
xqlist.value = row
xqlist.value = {...row}
xqlist.value.tradeAmount = xqlist.value.tradeAmount?xqlist.value.tradeAmount/100:''
}
@ -363,9 +363,10 @@
let shpopshow = ref(false)
let shobj = ref<any>({})
function showsh(row:any) {
console.log(row,'row')
shpopshow.value = true
shobj.value = row
shobj.value.tradeAmount = xqlist.value.tradeAmount?xqlist.value.tradeAmount/100:''
shobj.value = {...row}
shobj.value.tradeAmount = shobj.value.tradeAmount?shobj.value.tradeAmount/100:''
}
function shcancel() {
shpopshow.value = false

View File

@ -75,11 +75,12 @@
<!-- <el-table-column label="站码或车牌照" min-width="110" align="center" prop="sourceCode" :show-overflow-tooltip="true" /> -->
<el-table-column v-if="zjtype == 1" label="换电站" min-width="130" align="center" prop="pointName" :show-overflow-tooltip="true" />
<el-table-column v-if="zjtype == 1" label="当前位置" min-width="130" align="center" prop="pointName" :show-overflow-tooltip="true" />
<!-- <el-table-column v-if="zjtype == 1" label="换电站编码" min-width="130" align="center" prop="stationCode" :show-overflow-tooltip="true" /> -->
<el-table-column label="当前电量" min-width="80" align="center" prop="soc" :show-overflow-tooltip="true" />
<el-table-column label="操作" align="center" width="160" fixed="right">
<el-table-column label="操作" align="center" width="240" fixed="right">
<template #default="scope">
<el-button link type="primary" icon="SetUp" @click="dcsjhand(scope.row.batCode)">实时数据</el-button>
<el-button link type="primary" icon="Tickets" @click="zhuixpop(scope.row.batCode)">追溯</el-button>
<el-button link type="danger" icon="Delete" @click="handleDelete(scope.row)">删除</el-button>
</template>
@ -125,14 +126,26 @@
<el-input v-model="addata.batCode" placeholder="请输入电池编码" clearable />
</el-form-item>
</el-col>
<el-col :span="24">
<el-col v-if="zjtype == 1" :span="24">
<el-form-item label="初始来源" prop="sourceFrom">
<el-radio-group v-model="addata.sourceFrom">
<el-radio-group v-model="addata.sourceFrom" @input="sourcechang">
<el-radio value="1"></el-radio>
<el-radio value="2"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-col>
<el-col v-if="zjtype == 1 && addata.sourceFrom == '1'" :span="24">
<el-form-item label="换电站" prop="sourceCode">
<el-select v-model="addata.sourceCode" placeholder="请选择换电站">
<el-option @click.native="gethdzname(n.name)" v-for="n in yunList" :label="n.name" :value="n.code" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="24" v-if="addata.sourceFrom == '2'">
<el-form-item label="车牌号" prop="sourceCode">
<el-input v-model="addata.sourceCode" placeholder="请输入车牌号" clearable />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="状态" prop="status">
<el-select v-model="addata.status" placeholder="请选择状态">
@ -167,16 +180,9 @@
/>
</el-form-item>
</el-col>
<el-col :span="24" v-if="addata.sourceFrom == '2'">
<el-form-item label="站码或车牌照" prop="sourceCode">
<el-input v-model="addata.sourceCode" placeholder="请输入站码或车牌照" clearable />
</el-form-item>
</el-col>
<el-col v-if="zjtype == 1" :span="24">
<el-form-item label="换电站" prop="stationCode">
<el-select v-model="addata.stationCode" placeholder="请选择换电站">
<el-option @click.native="gethdzname(n.name)" v-for="n in yunList" :label="n.name" :value="n.code" />
</el-select>
<el-col :span="24">
<el-form-item label="电池仓序号" prop="dccNo">
<el-input v-model="addata.dccNo" placeholder="请输入电池仓序号" clearable />
</el-form-item>
</el-col>
<el-col :span="24">
@ -223,11 +229,11 @@
<el-form ref="dczsRef" :model="addzsdata" :rules="zsrules" label-width="130px">
<el-row>
<el-col :span="24">
<!-- <el-col :span="24">
<el-form-item label="电池编码" prop="batCode">
<el-input v-model="addzsdata.batCode" placeholder="请输入电池编码" clearable />
</el-form-item>
</el-col>
</el-col> -->
<el-col :span="24">
<el-form-item label="轨迹点类型" prop="pointType">
<el-radio-group v-model="addzsdata.pointType">
@ -280,6 +286,91 @@
</div>
</template>
</el-dialog>
<!--实时数据-->
<el-dialog
v-model="realdatapop"
title=""
width="850px"
fullscreen
append-to-body
:close-on-click-modal="false"
>
<template #header>
<div style="font-size: 20px;">
电池编码{{diancode}}
</div>
</template>
<el-date-picker
v-model="times"
type="daterange"
value-format="YYYY-MM-DD"
@calendar-change="handleCalendarChange"
:disabled-date="disabledDate"
unlink-panels
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
@clear="cleardate"
/>
<!--:shortcuts="shortcuts"-->
<el-button type="primary" @click="getdcdata" style="margin-left: 30px;">查询</el-button>
<el-row :gutter="30">
<el-col :span="24">
<div ref="refChart" class="chart-cont2" style="height: 400px;margin-top: 20px;padding:10px;border-radius: 10px;box-shadow: 0 0 20px -5px rgba(84, 151, 232, 0.5);background: #fff;"></div>
</el-col>
<el-col :span="24">
<div ref="refChart1" class="chart-cont2" style="height: 400px;margin-top: 20px;padding:10px;border-radius: 10px;box-shadow: 0 0 20px -5px rgba(84, 151, 232, 0.5);background: #fff;"></div>
</el-col>
<el-col :span="24">
<div ref="refChart2" class="chart-cont2" style="height: 400px;margin-top: 20px;padding:10px;border-radius: 10px;box-shadow: 0 0 20px -5px rgba(84, 151, 232, 0.5);background: #fff;"></div>
</el-col>
<el-col :span="24">
<div ref="refChart3" class="chart-cont2" style="height: 400px;margin-top: 20px;padding:10px;border-radius: 10px;box-shadow: 0 0 20px -5px rgba(84, 151, 232, 0.5);background: #fff;"></div>
</el-col>
<el-col :span="24">
<div ref="refChart4" class="chart-cont2" style="height: 400px;margin-top: 20px;padding:10px;border-radius: 10px;box-shadow: 0 0 20px -5px rgba(84, 151, 232, 0.5);background: #fff;"></div>
</el-col>
<el-col :span="24">
<div ref="refChart5" class="chart-cont2" style="height: 400px;margin-top: 20px;padding:10px;border-radius: 10px;box-shadow: 0 0 20px -5px rgba(84, 151, 232, 0.5);background: #fff;"></div>
</el-col>
<el-col :span="24">
<div ref="refChart6" class="chart-cont2" style="height: 400px;margin-top: 20px;padding:10px;border-radius: 10px;box-shadow: 0 0 20px -5px rgba(84, 151, 232, 0.5);background: #fff;"></div>
</el-col>
<el-col :span="24">
<div ref="refChart7" class="chart-cont2" style="height: 400px;margin-top: 20px;padding:10px;border-radius: 10px;box-shadow: 0 0 20px -5px rgba(84, 151, 232, 0.5);background: #fff;"></div>
</el-col>
<el-col :span="24">
<div ref="refChart8" class="chart-cont2" style="height: 400px;margin-top: 20px;padding:10px;border-radius: 10px;box-shadow: 0 0 20px -5px rgba(84, 151, 232, 0.5);background: #fff;"></div>
</el-col>
<el-col :span="24">
<div ref="refChart9" class="chart-cont2" style="height: 400px;margin-top: 20px;padding:10px;border-radius: 10px;box-shadow: 0 0 20px -5px rgba(84, 151, 232, 0.5);background: #fff;"></div>
</el-col>
<el-col :span="24">
<div ref="refChart10" class="chart-cont2" style="height: 400px;margin-top: 20px;padding:10px;border-radius: 10px;box-shadow: 0 0 20px -5px rgba(84, 151, 232, 0.5);background: #fff;"></div>
</el-col>
<el-col :span="24">
<div ref="refChart11" class="chart-cont2" style="height: 400px;margin-top: 20px;padding:10px;border-radius: 10px;box-shadow: 0 0 20px -5px rgba(84, 151, 232, 0.5);background: #fff;"></div>
</el-col>
<el-col :span="24">
<div ref="refChart12" class="chart-cont2" style="height: 400px;margin-top: 20px;padding:10px;border-radius: 10px;box-shadow: 0 0 20px -5px rgba(84, 151, 232, 0.5);background: #fff;"></div>
</el-col>
<!-- <el-col :span="24">
<div ref="refChart13" class="chart-cont2" style="height: 400px;margin-top: 20px;padding:10px;border-radius: 10px;box-shadow: 0 0 20px -5px rgba(84, 151, 232, 0.5);background: #fff;"></div>
</el-col>
<el-col :span="24">
<div ref="refChart14" class="chart-cont2" style="height: 400px;margin-top: 20px;padding:10px;border-radius: 10px;box-shadow: 0 0 20px -5px rgba(84, 151, 232, 0.5);background: #fff;"></div>
</el-col>
<el-col :span="24">
<div ref="refChart15" class="chart-cont2" style="height: 400px;margin-top: 20px;padding:10px;border-radius: 10px;box-shadow: 0 0 20px -5px rgba(84, 151, 232, 0.5);background: #fff;"></div>
</el-col> -->
</el-row>
</el-dialog>
</div>
</template>
<script setup lang="ts" name="UserPage">
@ -293,7 +384,8 @@
update,
delhdz,
getzhuis,
addzhuis
addzhuis,
getdcsj
} from '@/api/swapstation/battery'
import {
@ -302,16 +394,20 @@
// import {
// getdict
// } from '@/api/systemSet/dict'
import { ref,reactive,computed} from 'vue'
import { ref,reactive,computed,watch} from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import * as echarts from 'echarts'
const props = withDefaults(defineProps<{
zjtype?:string|number
stationCode?:string
stationName?:string
list:any[]
}>(), {
zjtype:1,
stationCode:'',
stationName:'',
list:() => []
})
@ -319,6 +415,26 @@
update: []
}>()
let firstSelectedDate = ref<any>('')
const handleCalendarChange = (val:any) => {
firstSelectedDate.value = val[0]
}
const disabledDate = (time:any) => {
if (!firstSelectedDate.value) return false
// 7
const startTime = firstSelectedDate.value.getTime() - 7 * 24 * 3600 * 1000
const endTime = firstSelectedDate.value.getTime() + 7 * 24 * 3600 * 1000
return time.getTime() < startTime || time.getTime() > endTime
}
const cleardate = () => {
firstSelectedDate.value = ''
}
let search = ref(true)
let theight = computed(() => {
if(props.zjtype == 1 && !search.value){
@ -363,8 +479,7 @@
//
let yunList = ref<any>([])
if(props.zjtype == 1){
gethdzlist({
gethdzlist({
pageSize:20, //
pageNo:1, //
proxyId:'', //ID
@ -380,6 +495,8 @@
//getyys()
}
})
if(props.zjtype == 1){
getyys()
}else{
if(props.list.length > 0){
@ -397,6 +514,7 @@
function getyys() {
yysList.value.splice(0)
total.value = 0
getjqrlist(queryParams).then(rps => {
if(rps.data){
yysList.value = (rps.data as any).records
@ -424,26 +542,40 @@
let yysRef = ref()
let slecas = ref('')
let addata = reactive({
typeCode:'', //
typeName:'', //
batCode:'', //
sourceFrom:'', //1-2-
status:'', //1-2-3-4-5-
typeCode:'', //
typeName:'', //
batCode:'', //
sourceFrom:'1', //1-2-
sourceCode:'', //
status:'', //1-2-3-4-5-
pkId:'',
productionDate:'', //
registrationDate:'', //
sourceCode:'', //
stationCode:'', //
stationName:'', //
soc:'' //
productionDate:'', //
registrationDate:'', //
//stationCode:'', //
//stationName:'', //
soc:'', //
dccNo:'', //
pointType:'', // 1-2-
pointCode:'', //
pointName:'' //
})
// watch(() => addata.sourceFrom,() => {
// addata.sourceCode = ''
// })
function sourcechang() {
addata.sourceCode = ''
console.log(addata.sourceCode,'chang')
}
function getdcname(n:string) {
addata.typeName = n
}
function gethdzname(n:string) {
addata.stationName = n
addata.pointName = n
}
const rules = ref({
@ -456,6 +588,21 @@
sourceFrom:[
{ required: true, message: "请选择初始来源", trigger: "blur" }
],
sourceCode:[
{ required: true,validator:(rule:any, value:any, callback:any) => {
if(value.length == ''){
if (addata.sourceFrom == '1') {
return callback(new Error('请选择换电站'))
}
return callback(new Error('请输入车牌号'))
}
return callback()
}, trigger: "blur"
}
],
// stationCode:[
// { required: true, message: "", trigger: "blur" }
// ],
status:[
{ required: true, message: "请选择状态", trigger: "blur" }
]
@ -476,26 +623,39 @@
addata.pkId = row.pkId
addata.productionDate = row.productionDate?row.productionDate:''
addata.registrationDate = row.registrationDate?row.registrationDate:''
addata.sourceCode = row.sourceCode?row.sourceCode:''
addata.stationCode = row.pointCode?row.pointCode:''
addata.stationName = row.pointName?row.pointName:''
addata.sourceCode = row.sourceCode?row.sourceCode:''
addata.pointCode = row.sourceCode?row.sourceCode:''
addata.pointName = row.pointName?row.pointName:''
// addata.stationCode = row.pointCode?row.pointCode:''
// addata.stationName = row.pointName?row.pointName:''
addata.soc = row.soc
addata.dccNo = row.dccNo?row.dccNo:''
}else{
addata.typeCode = ''
addata.batCode = ''
addata.sourceFrom = ''
addata.sourceFrom = '1'
addata.status = ''
addata.pkId = ''
addata.productionDate = ''
addata.registrationDate = ''
addata.sourceCode = ''
addata.stationCode = props.zjtype == 1?'':props.stationCode
addata.stationName = ''
addata.soc = ''
addata.sourceCode = props.zjtype == 1?'':props.stationCode
// addata.stationCode = props.zjtype == 1?'':props.stationCode
// addata.stationName = ''
addata.pointCode = props.zjtype == 1?'':props.stationCode
addata.pointName = props.zjtype == 1?'':props.stationName
addata.soc = ''
addata.dccNo = ''
}
}
function savehand() {
addata.pointType = addata.sourceFrom
addata.pointCode = addata.sourceCode
if(type.value == 1){
return addhdz(addata)
}
@ -507,9 +667,9 @@
yysRef.value?.validate((valid:Boolean) => {
if (valid) {
if(addata.sourceFrom == '1'){
addata.sourceCode = addata.stationCode
}
// if(addata.sourceFrom == '1'){
// addata.sourceCode = addata.stationCode
// }
savehand().then(() => {
ElMessage({
type: 'success',
@ -556,14 +716,8 @@
let zspop = ref(false)
let dccode = ref('')
let gjlist = ref<any[]>([])
function zhuixpop(code:string) {
dccode.value = code
getzhuis(dccode.value).then(rps => {
gjlist.value = rps.data as any
})
zspop.value = true
}
//
let dczspop = ref(false)
let addzsdata = reactive({
@ -574,7 +728,10 @@
pointName:'', //
endTime:'' //,(yyyy-MM-dd HH:mm:ss)
})
watch(() => addzsdata.pointType,() => {
addzsdata.pointCode = ''
})
const zsrules = ref({
batCode:[
{ required: true, message: "请输入电池编码", trigger: "blur" }
@ -584,13 +741,31 @@
],
pointCode:[
{ required: true, message: "请选择轨迹点", trigger: "blur" }
{ required: true, validator:(rule:any, value:any, callback:any) => {
if(value.length == ''){
if (addzsdata.pointType == '1') {
return callback(new Error('请选择换电站'))
}
return callback(new Error('请输入车牌号'))
}
return callback()
}, trigger: "blur" }
],
beginTime:[
{ required: true, message: "请选择开始时间", trigger: "blur" }
]
})
function zhuixpop(code:string) {
addzsdata.batCode = code
dccode.value = code
getzhuis(dccode.value).then(rps => {
gjlist.value = rps.data as any
})
zspop.value = true
}
let dczsRef = ref()
function zhuishand() {
@ -602,11 +777,15 @@
dczsRef.value?.validate((valid:Boolean) => {
if (valid) {
if(addzsdata.pointType == '2'){
addzsdata.pointName = addzsdata.pointCode
}
addzhuis(addzsdata).then(() => {
ElMessage({
type: 'success',
message: '添加成功'
})
dczspop.value = false
getzhuis(dccode.value).then(rps => {
gjlist.value = rps.data as any
})
@ -618,6 +797,300 @@
function getgjdname(name:string) {
addzsdata.pointName = name
}
//
let realdatapop = ref(false)
let diancode = ref('')
let times = ref<any>([])
const shortcuts = [
{
text: '最近一周',
value: () => {
const end = new Date()
const start = new Date()
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7)
return [start, end]
},
},
{
text: '最近一个月',
value: () => {
const end = new Date()
const start = new Date()
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30)
return [start, end]
},
},
{
text: '最近三个月',
value: () => {
const end = new Date()
const start = new Date()
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90)
return [start, end]
},
},
]
function dcsjhand(code:any){
realdatapop.value = true
firstSelectedDate.value = ''
times.value = []
diancode.value = code
let date = new Date()
let year = date.getFullYear()
let month = String(date.getMonth() + 1).padStart(2, '0')
let day = String(date.getDate()).padStart(2, '0')
let start = new Date()
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7)
let syear = start.getFullYear()
let smonth = String(start.getMonth() + 1).padStart(2, '0')
let sday = String(start.getDate()).padStart(2, '0')
getrealdata(`${syear}-${smonth}-${sday}`,`${year}-${month}-${day}`)
}
function getdcdata() {
if(times.value){
getrealdata(times.value[0],times.value[1])
}
}
function getrealdata(beginTime:any,endTime:any) {
getdcsj(diancode.value,`${beginTime} 00:00:00`,`${endTime} 59:59:59`).then((rps:any) => {
if(rps.data && rps.data.batData.length > 0){
let xdata = rps.data.batData.map((n:any) => {
let time = new Date(n.id*1)
let year = time.getFullYear()
let month = String(time.getMonth() + 1).padStart(2, '0')
let day = String(time.getDate()).padStart(2, '0')
let h = String(time.getHours()).padStart(2, '0')
let m = String(time.getMinutes()).padStart(2, '0')
let s = String(time.getSeconds()).padStart(2, '0')
return `${year}-${month}-${day} ${h}:${m}:${s}`
})
//SOH
let sohdata = rps.data.batData.map((n:any) => {
return n.soh
})
//
let batTotalcurr = rps.data.batData.map((n:any) => {
return n.batTotalCurr
})
//
let batCellVoltCnt = rps.data.batData.map((n:any) => {
return n.batCellVoltCnt
})
//
let probeTempCnt = rps.data.batData.map((n:any) => {
return n.probeTempCnt
})
//
let batPosiInsu = rps.data.batData.map((n:any) => {
return n.batPosiinsu
})
//
let batNegaInsu = rps.data.batData.map((n:any) => {
return n.batNegainsu
})
setdcwdchart(refChart.value,xdata,sohdata,'电池包SOH','#2363a5','%')
setdcwdchart(refChart1.value,xdata,batTotalcurr,'电池包总电流','#2363a5','A')
setdcwdchart(refChart2.value,xdata,batCellVoltCnt,'单体电压总个数','#2363a5','')
setdcwdchart(refChart3.value,xdata,probeTempCnt,'探针温度总个数','#2363a5','')
setdcwdchart(refChart4.value,xdata,batPosiInsu,'电池包正极绝缘值','#2363a5','Kohm')
setdcwdchart(refChart5.value,xdata,batNegaInsu,'电池包负极绝缘值','#2363a5','Kohm')
// setdcwdchart(refChart4.value,xdata,testdata,'','#2363a5','')
// setdcwdchart(refChart5.value,xdata,testdata,'','#2363a5','')
// setdcwdchart(refChart6.value,xdata,testdata,'','#2363a5','')
// setdcwdchart(refChart7.value,xdata,testdata,'','#2363a5','')
// setdcwdchart(refChart8.value,xdata,testdata,'','#2363a5','')
// setdcwdchart(refChart9.value,xdata,testdata,'','#2363a5','')
// setdcwdchart(refChart10.value,xdata,testdata,'','#2363a5','')
// setdcwdchart(refChart11.value,xdata,testdata,'','#2363a5','')
// setdcwdchart(refChart12.value,xdata,testdata,'','#2363a5','')
// setdcwdchart(refChart13.value,xdata,testdata,'','#2363a5','')
// setdcwdchart(refChart14.value,xdata,testdata,'','#2363a5','V')
// setdcwdchart(refChart15.value,xdata,testdata,'','#2363a5','A')
}
if(rps.data && rps.data.chargingData.length > 0){
let x2data = rps.data.chargingData.map((n:any) => {
let time = new Date(n.id*1)
let year = time.getFullYear()
let month = String(time.getMonth() + 1).padStart(2, '0')
let day = String(time.getDate()).padStart(2, '0')
let h = String(time.getHours()).padStart(2, '0')
let m = String(time.getMinutes()).padStart(2, '0')
let s = String(time.getSeconds()).padStart(2, '0')
return `${year}-${month}-${day} ${h}:${m}:${s}`
})
let cddl = rps.data.chargingData.map((n:any) => {
return n.chgQty
})
let batMaxVolt = rps.data.chargingData.map((n:any) => {
return n.batMaxVolt
})
let batMinvolt = rps.data.chargingData.map((n:any) => {
return n.batMinvolt
})
let batMaxTemp = rps.data.chargingData.map((n:any) => {
return n.batMaxTemp
})
let batMinTemp = rps.data.chargingData.map((n:any) => {
return n.batMinTemp
})
let voltDemand = rps.data.chargingData.map((n:any) => {
return n.voltDemand
})
let currDemand = rps.data.chargingData.map((n:any) => {
return n.currDemand
})
setdcwdchart(refChart6.value,x2data,cddl,'充电电量','#2363a5','kWh')
setdcwdchart(refChart7.value,x2data,batMaxVolt,'最高单体电压','#2363a5','V')
setdcwdchart(refChart8.value,x2data,batMinvolt,'最低单体电压','#2363a5','V')
setdcwdchart(refChart9.value,x2data,batMaxTemp,'最高单体温度','#2363a5','℃')
setdcwdchart(refChart10.value,x2data,batMinTemp,'最低单体温度','#2363a5','℃')
setdcwdchart(refChart11.value,x2data,voltDemand,'电池电压需求','#2363a5','V')
setdcwdchart(refChart12.value,x2data,currDemand,'电池电流需求','#2363a5','A')
}
})
// setTimeout(() => {
// let testdata = [
// [20,65,80,60,90,100,45,20,65,80,60,90,100,45],
// [30,75,50,60,80,100,45,30,75,50,60,80,100,45],
// [80,75,100,50,20,60,35,80,75,100,50,20,60,35],
// [20,65,80,60,90,100,45,20,65,80,60,90,100,45],
// [30,75,50,60,80,100,45,30,75,50,60,80,100,45],
// [80,75,100,50,20,60,35,80,75,100,50,20,60,35],
// [10,65,90,40,10,70,55,90,85,76,60,30,40,65]
// ]
// setdcwdchart(refChart.value,testdata,'SOH','#2363a5','%')
// setdcwdchart(refChart1.value,[[20,65,80,60,90,100,45],[30,75,50,60,80,100,45],[80,75,100,50,20,60,35],[20,65,80,60,90,100,45],[30,75,50,60,80,100,45],[80,75,100,50,20,60,35]],'','#2363a5','V')
// setdcwdchart(refChart2.value,[[20,65,80,60,90,100,45],[30,75,50,60,80,100,45],[80,75,100,50,20,60,35],[20,65,80,60,90,100,45],[30,75,50,60,80,100,45],[80,75,100,50,20,60,35]],'','#2363a5','')
// setdcwdchart(refChart3.value,[[20,65,80,60,90,100,45],[30,75,50,60,80,100,45],[80,75,100,50,20,60,35],[20,65,80,60,90,100,45],[30,75,50,60,80,100,45],[80,75,100,50,20,60,35]],'SOH','#2363a5','%')
// setdcwdchart(refChart4.value,[[20,65,80,60,90,100,45],[30,75,50,60,80,100,45],[80,75,100,50,20,60,35],[20,65,80,60,90,100,45],[30,75,50,60,80,100,45],[80,75,100,50,20,60,35]],'','#2363a5','V')
// setdcwdchart(refChart5.value,[[20,65,80,60,90,100,45],[30,75,50,60,80,100,45],[80,75,100,50,20,60,35],[20,65,80,60,90,100,45],[30,75,50,60,80,100,45],[80,75,100,50,20,60,35]],'','#2363a5','')
// },1000)
}
const refChart = ref()
const refChart1 = ref()
const refChart2 = ref()
const refChart3 = ref()
const refChart4 = ref()
const refChart5 = ref()
const refChart6 = ref()
const refChart7 = ref()
const refChart8 = ref()
const refChart9 = ref()
const refChart10 = ref()
const refChart11 = ref()
const refChart12 = ref()
const refChart13 = ref()
const refChart14 = ref()
const refChart15 = ref()
let myChart: echarts.EChartsType
function setdcwdchart(e:any,xdata:any,ydata:any,tit:any,tcol:any,dw:string) {
if (e) {
myChart = echarts.init(e)
let option
option = {
title: {
text: tit,
left: 'center',
textStyle: {
color: tcol,//'#2363a5',
fontSize: 18
}
},
grid: {
left: '3%',
top:'15%',
right: '4%',
bottom: '3%',
containLabel: true
},
xAxis: {
type: 'category',
axisPointer: {
type: "shadow",
},
data:xdata
},
yAxis: {
type: 'value',
axisLabel: {
formatter: `{value} ${dw}`,
}
},
tooltip: {
trigger: "axis",
axisPointer: {
type: "cross",
crossStyle: {
color: "#999",
},
},
},
series: [
{
data: ydata,
symbol: 'none',
type: 'line',
//smooth: true,
seriesLayoutBy: 'row',
emphasis: { focus: 'series' },
endLabel: {
show: true,
formatter: '{a}',
distance: 2000
}
}
]
};
option && myChart.setOption(option);
}
}
</script>
<style scoped>
.el-divider--horizontal{

View File

@ -94,7 +94,9 @@
list:any[]
}>()
const emit = defineEmits<{
updata:[]
}>()
//
let yysList = ref<any>([])
@ -186,6 +188,7 @@
setTimeout(()=> {
openpop.value = false
getyys()
emit('updata')
},600)
})
}
@ -214,6 +217,7 @@
message: '删除成功'
})
getyys()
emit('updata')
})
})
}

View File

@ -188,6 +188,7 @@
:stationName="stationName"
:strategyId="strategyId"
:list="mxlist"
@updata="getyys"
/>
</el-col>
</el-row>

View File

@ -268,7 +268,7 @@
//
let type = ref(1)
let openpop = ref(false)
let ystit = ref('添加电机')
let ystit = ref('添加电机')
let yysRef = ref()
let slecas = ref('')
let addata = reactive({
@ -307,7 +307,7 @@
function showpop(num:any,row?:any){
type.value = num
openpop.value = true
ystit.value = num == 1?'添加电机':'修改电机'
ystit.value = num == 1?'添加电机':'修改电机'
yysRef.value?.resetFields()
if(row){
addata.pkId = row.pkId

View File

@ -18,22 +18,22 @@
<el-table-column min-width="100" label="结束时间" align="center" prop="timeEnd" :show-overflow-tooltip="true" />
<el-table-column min-width="100" label="每公里收费(元)" align="center" prop="eachKmFee" :show-overflow-tooltip="true">
<template #default="scope">
<div>{{scope.row.eachKmFee/100}}</div>
<div>{{scope.row.eachKmFee?scope.row.eachKmFee/100:''}}</div>
</template>
</el-table-column>
<el-table-column min-width="100" label="每SOC收费(元)" align="center" prop="eachSocFee" :show-overflow-tooltip="true">
<template #default="scope">
<div>{{scope.row.eachSocFee/100}}</div>
<div>{{scope.row.eachSocFee?scope.row.eachSocFee/100:''}}</div>
</template>
</el-table-column>
<el-table-column min-width="100" label="每度电收费(元)" align="center" prop="eachKwhFee" :show-overflow-tooltip="true">
<template #default="scope">
<div>{{scope.row.eachKwhFee/100}}</div>
<div>{{scope.row.eachKwhFee?scope.row.eachKwhFee/100:''}}</div>
</template>
</el-table-column>
<el-table-column min-width="100" label="谷段服务费(元)" align="center" prop="timeServiceFee" :show-overflow-tooltip="true">
<el-table-column min-width="100" label="谷段服务费(元)" align="center" prop="serviceFee" :show-overflow-tooltip="true">
<template #default="scope">
<div>{{scope.row.timeServiceFee/100}}</div>
<div>{{scope.row.serviceFee?scope.row.serviceFee/100:''}}</div>
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="150" fixed="right">
@ -121,9 +121,9 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="时段服务费(元)" prop="timeServiceFee">
<el-form-item label="谷段服务费(元)" prop="serviceFee">
<el-input
v-model="addata.timeServiceFee"
v-model="addata.serviceFee"
placeholder="请输入谷段服务费"
maxlength="50"
/>
@ -191,7 +191,7 @@
eachKmFee:'', //
eachSocFee:'', //SOC
eachKwhFee:'', //
timeServiceFee:'' //
serviceFee:'' //
})
watch(() => addata.eachKmFee, v => {
@ -206,8 +206,8 @@
addata.eachKwhFee = setNum(v)
})
watch(() => addata.timeServiceFee, v => {
addata.timeServiceFee = setNum(v)
watch(() => addata.serviceFee, v => {
addata.serviceFee = setNum(v)
})
const rules = ref({
@ -252,7 +252,7 @@
addata.eachKmFee = row.eachKmFee?row.eachKmFee/100:0
addata.eachSocFee = row.eachSocFee?row.eachSocFee/100:0
addata.eachKwhFee = row.eachKwhFee?row.eachKwhFee/100:0
addata.timeServiceFee = row.timeServiceFee?row.timeServiceFee/100:0
addata.serviceFee = row.serviceFee?row.serviceFee/100:0
}else{
tiem.value.splice(0)
@ -262,7 +262,7 @@
addata.eachKmFee = ''
addata.eachSocFee = ''
addata.eachKwhFee = ''
addata.timeServiceFee = ''
addata.serviceFee = ''
}
}
function savehand() {
@ -270,7 +270,7 @@
eachKmFee:addata.eachKmFee*100,
eachSocFee:addata.eachSocFee*100,
eachKwhFee:addata.eachKwhFee*100,
timeServiceFee:addata.timeServiceFee*100
serviceFee:addata.serviceFee*100
})
if(type.value == 1){
return addhdz(addObj)

View File

@ -11,7 +11,7 @@
</el-form-item> -->
<el-form-item label="运营商" prop="proxyId">
<el-select v-model="queryParams.proxyId" placeholder="请选择运营商" style="width: 200px;">
<el-option v-for="n in yunList" :label="n.poname" :value="n.pocode" />
<el-option v-for="n in yunList" :label="n.label" :value="n.value" />
</el-select>
</el-form-item>
<el-form-item label="站点名称" prop="name">
@ -80,7 +80,7 @@
</template>
</el-table-column>
<el-table-column label="站点编码" min-width="300" align="center" prop="code" :show-overflow-tooltip="true" />
<el-table-column label="运营商" min-width="200" align="center" prop="proxyId" :show-overflow-tooltip="true" />
<el-table-column label="运营商" min-width="200" align="center" prop="poname" :show-overflow-tooltip="true" />
<el-table-column label="状态" min-width="100" align="center" prop="status" :show-overflow-tooltip="true">
<template #default="scope">
<div v-if="scope.row.status == 1">正常营业</div>
@ -151,7 +151,7 @@
<el-col :span="12">
<el-form-item label="运营商" prop="proxyId">
<el-select v-model="addata.proxyId" placeholder="请选择运营商">
<el-option v-for="n in yunList" :label="n.poname" :value="n.pocode" />
<el-option v-for="n in yunList" :label="n.label" :value="n.value" />
</el-select>
</el-form-item>
</el-col>
@ -410,7 +410,7 @@
<el-col :span="12">
<el-form-item label="运营商" prop="proxyId">
<el-select v-model="addata.proxyId" placeholder="请选择运营商">
<el-option v-for="n in yunList" :label="n.poname" :value="n.pocode" />
<el-option v-for="n in yunList" :label="n.label" :value="n.value" />
</el-select>
</el-form-item>
</el-col>
@ -636,6 +636,17 @@
@update="getyys"
/>
</div>
<div style="margin-bottom: 20px;border: 1px solid #98c3ef; border-radius: 10px;">
<div class="mktit">电池仓</div>
<dcc
v-if="drawer"
zjtype="2"
:stationCode="addata.code"
:stationName="addata.name"
:list="dcclist"
@update="getyys"
/>
</div>
<div style="margin-bottom: 20px;;border: 1px solid #98c3ef; border-radius: 10px;">
<div class="mktit">充电机</div>
<electmach
@ -647,23 +658,13 @@
@update="getyys"
/>
</div>
<div style="margin-bottom: 20px;border: 1px solid #98c3ef; border-radius: 10px;">
<div class="mktit">电池仓</div>
<dcc
v-if="drawer"
zjtype="2"
:stationCode="addata.code"
:stationName="addata.name"
:list="dcclist"
@update="getyys"
/>
</div>
<div style="margin-bottom: 20px;border: 1px solid #98c3ef; border-radius: 10px;">
<div class="mktit">电池</div>
<battery
v-if="drawer"
zjtype="2"
:stationCode="addata.code"
:stationName="addata.name"
:list="batlist"
@update="getyys"
/>
@ -699,7 +700,7 @@
getqrcode
} from '@/api/swapstation/hdz'
import {
getyyslist
optionyyslist
} from '@/api/systemSet/operator'
import {
getArea
@ -747,13 +748,10 @@
//
let yunList = ref<any>([])
getyyslist({
pageSize:200,
pageNo:1
}).then(rps => {
optionyyslist().then(rps => {
if(rps.data){
let list = (rps.data as any).records
yunList.value = list?list:[]
//let list = (rps.data as any).records
yunList.value = rps.data
}
})
@ -934,8 +932,12 @@
addata.carTypeCode = row.carTypeCode?row.carTypeCode.split(','):''
if(addata.locationPoint){
let latlng = addata.locationPoint.split(',')
lat.value = latlng[0]
lng.value = latlng[1]
lng.value = latlng[0]
lat.value = latlng[1]
}else{
lng.value = ''
lat.value = ''
}

View File

@ -7,7 +7,7 @@
:inline="true"
>
<el-form-item label="换电站" prop="stationCode">
<el-select v-model="queryParams.stationCode" placeholder="请选择换电站" style="width: 200px;">
<el-select v-model="queryParams.stationCode" placeholder="请选择换电站" style="width: 240px;">
<el-option v-for="n in yunList" :label="n.name" :value="n.code" />
</el-select>
</el-form-item>
@ -57,7 +57,7 @@
<div>{{(queryParams.pageNo - 1) * queryParams.pageSize+ $index + 1}}</div>
</template>
</el-table-column>
<el-table-column label="换电站" min-width="100" align="center" prop="stationCode" :show-overflow-tooltip="true" />
<el-table-column label="换电站" min-width="150" align="center" prop="stationName" :show-overflow-tooltip="true" />
<el-table-column label="传送方向" min-width="100" align="center" prop="direction" :show-overflow-tooltip="true" />
<el-table-column label="消息类型" min-width="100" align="center" prop="type" :show-overflow-tooltip="true" />
<el-table-column label="方法" min-width="120" align="center" prop="messageFunction" :show-overflow-tooltip="true" />

View File

@ -0,0 +1,190 @@
<template>
<div>
<div class="app-container" style="margin-bottom: 12px;padding-bottom: 5px;border-radius: 10px;">
<el-form
ref="querform"
:model="queryParams"
:inline="true"
>
<el-form-item label="换电站" prop="stationCode">
<el-select v-model="queryParams.stationCode" placeholder="请选择换电站" style="width: 240px;">
<el-option v-for="n in yunList" :label="n.name" :value="n.code" />
</el-select>
</el-form-item>
<!-- <el-form-item label="传送方向" prop="direction">
<el-select v-model="queryParams.direction" placeholder="请选择传送方向" style="width: 200px;">
<el-option
v-for="n in direction"
:value="n.dictValue"
:label="n.dictName"
/>
</el-select>
</el-form-item>
<el-form-item label="消息类型" prop="type">
<el-select v-model="queryParams.type" placeholder="请选择信息类型" style="width: 200px;">
<el-option
v-for="n in msgtype"
:value="n.dictValue"
:label="n.dictName"
/>
</el-select>
</el-form-item>
<el-form-item label="方法" prop="messageFunction">
<el-input v-model="queryParams.messageFunction" placeholder="请输入方法" clearable style="width: 160px" />
</el-form-item> -->
<el-form-item>
<el-button type="primary" icon="Search" @click="handBtnqu">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
</div>
<div class="app-container" style="margin-bottom: 12px;border-radius: 10px;">
<!-- <el-tooltip class="item" effect="dark" :content="search? '隐藏搜索' : '显示搜索'" placement="top">
<el-button size="mini" circle icon="Search" @click="search = !search" />
</el-tooltip> -->
<el-table
style="width:100%;margin-top: 10px;"
:data="yysList"
border
stripe
max-height="620px"
>
<!-- {{ (queryParams.pageNo - 1) * queryParams.pageSize + index + 1 }} -->
<el-table-column type="index" min-width="50" align="center">
<template #default="{ $index }">
<div>{{(queryParams.pageNo - 1) * queryParams.pageSize+ $index + 1}}</div>
</template>
</el-table-column>
<el-table-column label="换电站" min-width="150" align="center" prop="stationName" :show-overflow-tooltip="true" />
<el-table-column label="状态" min-width="100" align="center" prop="state" :show-overflow-tooltip="true" />
<!-- <el-table-column label="http消息" min-width="100" align="center" prop="type" :show-overflow-tooltip="true" /> -->
<!-- <el-table-column label="方法" min-width="120" align="center" prop="messageFunction" :show-overflow-tooltip="true" /> -->
<el-table-column label="变化时间" min-width="120" align="center" prop="lineTime" :show-overflow-tooltip="true" />
<el-table-column label="内容" min-width="500" prop="content">
<template #default="scope">
<div style="word-wrap: break-word;">{{scope.row.httpContent}}</div>
</template>
</el-table-column>
</el-table>
<div v-if="total > 10" style="display: flex;justify-content: right;padding-top:20px;">
<el-pagination
v-model:current-page="queryParams.pageNo"
v-model:page-size="queryParams.pageSize"
:page-sizes="[10, 20, 30, 40]"
background
size="small"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
@size-change="handleSizeChange"
@current-change="getyys"
/>
</div>
</div>
</div>
</template>
<script setup lang="ts">
import {
gethdzlist
} from '@/api/swapstation/hdz'
import {
onlinelist
} from '@/api/swapstation/mqtt'
// import {
// getdict
// } from '@/api/systemSet/dict'
import { ref,reactive} from 'vue'
let search = ref(true)
let queryParams = reactive({
pageSize:20, //
pageNo:1, //
stationCode:'', //
//direction:'', //
//type:'', //
//messageFunction:'' // stationInfo
})
//
let total = ref(0)
let yysList = ref<any>([])
function handBtnqu(){
queryParams.pageNo = 1
total.value = 0
getyys()
}
// //
// let direction = ref<any>([])
// getdict({
// typeCode:'mqttcsfx'
// }).then(rps => {
// direction.value = rps.data
// })
// //
// let msgtype = ref<any>([])
// getdict({
// typeCode:'mqttxxtype'
// }).then(rps => {
// msgtype.value = rps.data
// })
//
let yunList = ref<any>([])
gethdzlist({
pageSize:100, //
pageNo:1, //
proxyId:'', //ID
name:'', //
code:'', //
status:'', //1-2-3-4-9-
type:'', //ID
}).then(rps => {
if(rps.data){
let list = (rps.data as any).records
yunList.value = list?list:[]
//queryParams.stationCode = list[0].code
//getyys()
}
})
getyys()
function getyys() {
yysList.value.splice(0)
onlinelist(queryParams).then(rps => {
if(rps.data){
yysList.value = (rps.data as any).records
total.value = (rps.data as any).total
}
})
}
function handleSizeChange(val:number) {
queryParams.pageSize = val
getyys()
}
//
let querform = ref()
function resetQuery() {
querform.value?.resetFields()
}
</script>
<style scoped>
.el-divider--horizontal{
border-color:#5b98cd;
}
</style>

View File

@ -0,0 +1,355 @@
<template>
<div>
<div class="app-container" style="margin-bottom: 12px;padding-bottom: 5px;border-radius: 10px;">
<el-form
ref="querform"
:model="queryParams"
:inline="true"
>
<el-form-item label="路径" prop="path">
<el-input v-model="queryParams.path" placeholder="请输入路径" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handBtnqu">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
</div>
<div class="app-container" style="margin-bottom: 12px;border-radius: 10px;">
<el-button
type="primary"
plain
icon="Plus"
@click="showpop(1)">新增</el-button>
<el-table
style="width:100%;margin-top: 10px;"
:data="yysList"
border
stripe
highlight-current-row
max-height="600px"
>
<el-table-column label="路径" min-width="200" align="center" prop="path" :show-overflow-tooltip="true" />
<el-table-column label="通知人员" min-width="200" align="center" prop="recipientNames" :show-overflow-tooltip="true" />
<el-table-column label="操作" align="center" width="150" fixed="right">
<template #default="scope">
<el-button link type="primary" icon="Edit" @click="showpop(2,scope.row)">修改</el-button>
<el-button link type="danger" icon="Delete" @click="handleDelete(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<div v-if="total > 10" style="display: flex;justify-content: right;padding-top:20px;">
<el-pagination
v-model:current-page="queryParams.pageNo"
v-model:page-size="queryParams.pageSize"
:page-sizes="[10, 20, 30, 40]"
background
size="small"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
@size-change="handleSizeChange"
@current-change="getyys"
/>
</div>
</div>
<!-- 添加或修改用户配置对话框 -->
<el-dialog
v-model="openpop"
:title="ystit"
width="500px"
append-to-body
:close-on-click-modal="false"
>
<el-form ref="yysRef" :model="addata" :rules="rules" label-width="110px">
<el-row>
<el-col :span="24">
<el-form-item label="路径" prop="path">
<!-- <el-cascader
ref="cascader"
v-model="slecas"
style="width: 100%;"
:options="options"
clearable
:props="{
label:'admdvsName',
value:'admdvsNo',
children:'subAdmdvsInfoList'
}"
@change="change"
/> -->
<el-input v-model="addata.path" placeholder="请输入路径" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="通知人员" prop="recipientIds">
<!-- <el-autocomplete
multiple
style="width: 100%"
v-model="wxuser"
:fetch-suggestions="querySearchAsync"
placeholder="请输入手机号查询"
clearable
@blur="autoblur"
@select="handleSelect"
@clear="autoclear"
/> -->
<!-- @focus="wxfocus"-->
<el-select
v-model="wxuser"
multiple
filterable
remote
reserve-keyword
value-key="value"
placeholder="请输入手机号查询"
:remote-method="remoteMethod"
:loading="loading"
@focus="wxfocus"
@change="wxchange"
style="width: 100%"
>
<el-option
v-for="n in userlist"
:key="n.wuid"
:label="`${n.name?n.name:'暂未设置'}, ${n.phoneNumber?n.phoneNumber:'暂未设置'}`"
:value="n.wuid"
/>
</el-select>
<!-- <el-input v-model="addata.recipientIds" placeholder="请选择人员" /> -->
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="handleAdd"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup lang="ts">
import { ref,reactive,watch } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import {
getadlist,
addyctz,
updateab,
delab
} from '@/api/systemSet/abnormal'
import {
getwxlist
} from '@/api/operation/wxuser'
//
let wxuser = ref<any>([])
let userlist = ref<any>([])
let loading = ref<any>(false)
function remoteMethod (queryString: string) {
//if(queryString !== ''){
loading.value = true
userlist.value.splice(0)
getwxlist({
pageSize:1000, //
pageNo:1, //
phoneNumber:queryString, //
// nickName:queryString, //
// name:queryString //
}).then((res:any) => {
loading.value = false
if (res.data && res.data.records.length > 0) {
// mapList.value = res.data;
userlist.value = res.data.records
}
}).catch(() => {
loading.value = false
})
//}
}
let queryParams = reactive({
pageSize:20, //
pageNo:1, //
path:'' //
})
//
let total = ref(0)
let yysList = ref([])
function handBtnqu(){
queryParams.pageNo = 1
getyys()
}
function getyys() {
yysList.value.splice(0)
getadlist(queryParams).then(rps => {
if(rps.data){
total.value = (rps.data as any).total
let list = (rps.data as any).records
yysList.value = list?list:[]
}
})
}
function handleSizeChange(val:number) {
queryParams.pageSize = val
getyys()
}
//
let querform = ref()
function resetQuery() {
querform.value?.resetFields()
}
//
let type = ref(1)
let openpop = ref(false)
let ystit = ref('')
let yysRef = ref()
let slecas = ref('')
let addata = reactive({
path:'', //
recipientIds:'' //
})
const rules = ref({
path:[
{ required: true, message: "请输入路径", trigger: "blur" },
],
recipientIds:[
{ required: true, message: "请选择通知人员", trigger: "blur" },
]
})
let pkId = ''
function showpop(num:any,row?:any){
type.value = num
openpop.value = true
ystit.value = num == 1?'添加异常':'修改异常'
yysRef.value?.resetFields()
wxuser.value = []
if(row){
pkId = row.pkId
addata.path = row.path
addata.recipientIds = row.recipientIds
if(row.recipientIds){
wxuser.value = row.recipientIds?row.recipientIds.split(','):[]
}
getwxlist({
pageSize:1000, //
pageNo:1, //
phoneNumber:'', //
// nickName:queryString, //
// name:queryString //
}).then((res:any) => {
if (res.data && res.data.records.length > 0) {
// mapList.value = res.data;
userlist.value = res.data.records
}
})
}else{
addata.path = ''
addata.recipientIds = ''
}
console.log(wxuser.value,'wxuser1')
}
function savehand() {
if(type.value == 1){
return addyctz(addata)
}
return updateab(Object.assign({},addata,{
pkId
}))
}
//
function handleAdd() {
yysRef.value?.validate((valid:Boolean) => {
if (valid) {
savehand().then(() => {
ElMessage({
type: 'success',
message: type.value == 1?'添加成功':'修改成功'
})
setTimeout(()=> {
openpop.value = false
getyys()
},600)
})
}
})
}
//
function cancel() {
openpop.value = false
}
//
function handleDelete(row:any) {
ElMessageBox.confirm(
`确定删除:路径为${row.path}的异常?`,
'温馨提示',
{
// confirmButtonText: '',
// cancelButtonText: 'Cancel',
type: 'warning',
}
).then(() => {
delab(row.pkId).then(() => {
ElMessage({
type: 'success',
message: '删除成功'
})
setTimeout(() => {
getyys()
},600)
})
})
}
function wxchange(v:any) {
console.log(v)
console.log(wxuser.value,'wxuser.value')
if(v.length > 0){
addata.recipientIds = v.join()
}
}
function wxfocus() {
// userlist.value.splice(0)
//wxuser.value = []
//addata.recipientIds = ''
}
getyys()
</script>
<style scoped>
.el-divider--horizontal{
border-color:#5b98cd;
}
</style>

View File

@ -303,7 +303,7 @@
//
function handleDelete(row:any) {
ElMessageBox.confirm(
`确定删除:${row.typeName}`,
`确定删除:${row.title}`,
'温馨提示',
{
// confirmButtonText: '',

View File

@ -312,6 +312,7 @@
let zhidval = ref('')
let zidform = reactive({
pkId:'',
typeId:'', //ID
typeCode:'', //code
dictName:'', //
@ -332,6 +333,7 @@
zhidval.value = '修改字典值'
}
if(row){
zidform.pkId = row.pkId
zidform.typeId = row.typeId
zidform.typeCode = row.typeCode
zidform.dictName = row.dictName
@ -339,6 +341,7 @@
zidform.dictValue = row.dictValue
zidform.sort = row.sort
}else{
zidform.pkId = ''
zidform.typeId = typeId.value
zidform.typeCode = typecode.value
zidform.dictName = ''

View File

@ -40,14 +40,14 @@
<el-table-column min-width="150" label="仓位数量下限" align="center" prop="dccNumMin" />
<el-table-column min-width="150" label="仓位数量上限" align="center" prop="dccNumMax" />
<el-table-column min-width="100" label="服务能力" align="center" prop="serviceCapability" />
<el-table-column min-width="100" label="充电机功率" align="center" prop="chargerPower" />
<el-table-column min-width="130" label="充电机功率(kW)" align="center" prop="chargerPower" />
<el-table-column min-width="150" label="自动化级别" align="center" prop="autoLevel">
<template #default="scope">
<div v-if="scope.row.autoLevel == 1">人值守</div>
<div v-if="scope.row.autoLevel == 2">人值守</div>
<div v-if="scope.row.autoLevel == 1">人值守</div>
<div v-if="scope.row.autoLevel == 2">人值守</div>
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="280" class-name="small-padding fixed-width">
<el-table-column label="操作" align="center" width="150" class-name="small-padding fixed-width">
<template #default="scope">
<el-button link type="primary" icon="Edit" @click="showpop(2,scope.row)">修改</el-button>
<el-button link type="danger" icon="Delete" @click="handleDelete(scope.row)">删除</el-button>
@ -84,7 +84,7 @@
append-to-body
align-center
>
<el-form ref="typeform" :model="addObj" :rules="rules" label-width="120px">
<el-form ref="typeform" :model="addObj" :rules="rules" label-width="150px">
<el-form-item label="型号名称" prop="name">
<el-input v-model="addObj.name" placeholder="请输入型号名称" />
</el-form-item>
@ -97,13 +97,13 @@
<el-form-item label="服务能力" prop="serviceCapability">
<el-input v-model="addObj.serviceCapability" placeholder="请输入服务能力" />
</el-form-item>
<el-form-item label="充电机功率" prop="chargerPower">
<el-form-item label="充电机功率(kW)" prop="chargerPower">
<el-input v-model="addObj.chargerPower" placeholder="请输入充电机功率" />
</el-form-item>
<el-form-item label="自动化级别" prop="serviceCapability">
<el-radio-group v-model="addObj.serviceCapability">
<el-radio value="1">无人值守</el-radio>
<el-radio value="2">有人值守</el-radio>
<el-form-item label="自动化级别" prop="autoLevel">
<el-radio-group v-model="addObj.autoLevel">
<el-radio :value="1">无人值守</el-radio>
<el-radio :value="2">有人值守</el-radio>
</el-radio-group>
</el-form-item>

View File

@ -102,8 +102,8 @@
</el-form-item>
<el-form-item label="电池材料" prop="material">
<el-radio-group v-model="addObj.material">
<el-radio value="1">三元铁锂</el-radio>
<el-radio value="2">磷酸铁锂</el-radio>
<el-radio :value="1">三元铁锂</el-radio>
<el-radio :value="2">磷酸铁锂</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="连接方式" prop="connectionMode">

View File

@ -67,18 +67,18 @@
max-height="600px"
>
<el-table-column label="运营商名称" width="200" align="center" prop="poname" :show-overflow-tooltip="true">
<el-table-column label="运营商名称" min-width="200" align="center" prop="poname" :show-overflow-tooltip="true">
<template #default="scope">
<div @click="showpop(2,scope.row)" style="display: inline-block;color:#16599d;border-bottom: 1px solid #417ebb;cursor:pointer">{{scope.row.poname}}</div>
</template>
</el-table-column>
<el-table-column label="运营商组织机构代码" width="200" align="center" prop="pocode" :show-overflow-tooltip="true" />
<el-table-column label="区划" width="200" align="center" prop="division" :show-overflow-tooltip="true" />
<el-table-column label="详细地址" width="400" align="center" prop="address" :show-overflow-tooltip="true" />
<el-table-column label="联系人" width="130" align="center" prop="contacts" :show-overflow-tooltip="true" />
<el-table-column label="联系电话" width="160" align="center" prop="phone" :show-overflow-tooltip="true" />
<el-table-column label="换电站数量" width="100" align="center" prop="stationCount" :show-overflow-tooltip="true" />
<el-table-column label="状态" width="100" align="center" prop="status">
<el-table-column label="运营商组织机构代码" min-width="200" align="center" prop="pocode" :show-overflow-tooltip="true" />
<el-table-column label="区划" min-width="200" align="center" prop="division" :show-overflow-tooltip="true" />
<el-table-column label="详细地址" min-width="400" align="center" prop="address" :show-overflow-tooltip="true" />
<el-table-column label="联系人" min-width="130" align="center" prop="contacts" :show-overflow-tooltip="true" />
<el-table-column label="联系电话" min-width="160" align="center" prop="phone" :show-overflow-tooltip="true" />
<el-table-column label="换电站数量" min-width="100" align="center" prop="stationCount" :show-overflow-tooltip="true" />
<el-table-column label="状态" min-width="100" align="center" prop="status">
<template #default="scope">
<div v-if="scope.row.status == 1">启用</div>
<div v-else style="color: #ccc;">禁用</div>

View File

@ -27,7 +27,7 @@
<el-table-column label="角色编码" align="center" prop="rcode" />
<el-table-column label="状态" align="center" prop="status">
<template #default="scope">
<div v-if="scope.row.type == 1">启用</div>
<div v-if="scope.row.status == 1">启用</div>
<div v-else>禁用</div>
</template>
</el-table-column>
@ -187,7 +187,10 @@
function querytype() {
dictlist.value.splice(0)
getjslist('').then(rps => {
dictlist.value = rps.data
if(rps.data){
dictlist.value = rps.data
}
})
}
@ -341,7 +344,9 @@
jklist.value.splice(0)
jkobj.sourceIds = ''
getInter(n.pkId).then(rps => {
jklist.value = rps.data
if(rps.data){
jklist.value = rps.data
}
return getinter({
rcode:quanxpar.rcode,
resourceType:'PER'

View File

@ -151,7 +151,7 @@
<el-form-item label="运营商" prop="businessCode">
<el-select v-model="userform.businessCode" placeholder="请选择运营商">
<el-option v-for="n in yunList" :label="n.poname" :value="n.pocode" />
<el-option v-for="n in yunList" :label="n.label" :value="n.value" />
</el-select>
</el-form-item>
@ -317,7 +317,7 @@
import { getjslist } from '@/api/systemSet/role'
import {
getyyslist
optionyyslist
} from '@/api/systemSet/operator'
import {
getlist
@ -350,13 +350,10 @@
let qyuserList = ref<any>([])
if(userType.value == 1){
//
getyyslist({
pageSize:200,
pageNo:1
}).then(rps => {
optionyyslist().then(rps => {
if(rps.data){
let list = (rps.data as any).records
yunList.value = list?list:[]
// let list = (rps.data as any).records
yunList.value = rps.data
}
})
@ -586,11 +583,12 @@
type: 'warning',
}
).then(() => {
deleteuser('123').then(rps => {
deleteuser({uid:row.pkId}).then(rps => {
ElMessage({
type: 'success',
message: '删除成功'
})
handleQuery()
})
})
}
@ -653,6 +651,7 @@
type: 'success',
message: '分配成功'
})
handleQuery()
})
}else{
ElMessage({

View File

@ -190,7 +190,7 @@
</el-col>
<el-col :span="12">
<el-form-item label="组织机构代码" prop="ccode">
<el-input v-model="addata.ccode" maxlength="30" disabled placeholder="请输入组织机构代码" clearable />
<el-input v-model="addata.ccode" maxlength="30" disabled placeholder="" clearable />
</el-form-item>
</el-col>
</template>
@ -202,7 +202,7 @@
</el-col>
<el-col :span="12">
<el-form-item label="车牌号" prop="plateNum">
<el-input v-model="addata.plateNum" disabled placeholder="请输入车牌号" clearable />
<el-input v-model="addata.plateNum" maxlength="8" disabled placeholder="请输入车牌号" clearable />
</el-form-item>
</el-col>
<el-col :span="12">
@ -413,8 +413,8 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="组织机构代码" prop="ccode">
<el-input v-model="addata.ccode" maxlength="20" disabled placeholder="请输入组织机构代码" clearable />
<el-form-item label="组织机构代码">
<el-input v-model="addata.ccode" maxlength="20" disabled placeholder="" clearable />
</el-form-item>
</el-col>
</template>
@ -426,7 +426,7 @@
</el-col>
<el-col :span="12">
<el-form-item label="车牌号" prop="plateNum">
<el-input v-model="addata.plateNum" placeholder="请输入车牌号" clearable />
<el-input v-model="addata.plateNum" maxlength="8" placeholder="请输入车牌号" clearable />
</el-form-item>
</el-col>
<el-col :span="12">

View File

@ -5,7 +5,7 @@
ref="yysRef"
:model="addata"
:rules="rules"
label-width="110px">
label-width="120px">
<el-row :gutter="30">
<el-col :span="12">
<el-form-item label="户主类型" prop="ownerType">
@ -45,6 +45,7 @@
<el-col :span="12">
<el-form-item label="账户总金额(元)" prop="totalAmount">
<el-input
disabled
v-model="addata.totalAmount"
placeholder="请输入总金额"
maxlength="50"
@ -129,7 +130,7 @@
ref="yysRef"
:model="addata"
:rules="rules"
label-width="90px">
label-width="110px">
<el-row :gutter="30">
<el-col :span="24">
<el-form-item label="户主类型" prop="ownerType">
@ -167,8 +168,9 @@
</el-col>
<el-col :span="24">
<el-form-item label="账户总金额" prop="totalAmount">
<el-form-item label="账户总金额(元)" prop="totalAmount">
<el-input
disabled
v-model="addata.totalAmount"
placeholder="请输入总金额"
maxlength="50"
@ -176,7 +178,7 @@
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="充值金额" prop="rechargeAmount">
<el-form-item label="充值金额(元)" prop="rechargeAmount">
<el-input
v-model="addata.rechargeAmount"
placeholder="请输入充值金额"
@ -185,7 +187,7 @@
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="赠送金额" prop="giftAmount">
<el-form-item label="赠送金额(元)" prop="giftAmount">
<el-input
v-model="addata.giftAmount"
placeholder="请输入赠送金额"
@ -194,7 +196,7 @@
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="积分余额" prop="point">
<el-form-item label="积分余额(元)" prop="point">
<el-input
v-model="addata.point"
placeholder="请输入积分余额"
@ -203,7 +205,7 @@
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="押金" prop="deposit">
<el-form-item label="押金(元)" prop="deposit">
<el-input
v-model="addata.deposit"
placeholder="请输入押金"
@ -221,7 +223,7 @@
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="租金" prop="rent">
<el-form-item label="租金(元)" prop="rent">
<el-input
v-model="addata.rent"
placeholder="请输入租金"
@ -344,10 +346,12 @@
watch(() => addata.rechargeAmount,v => {
addata.rechargeAmount = setNum(addata.rechargeAmount)
addata.totalAmount = addata.rechargeAmount*1 + addata.giftAmount*1
})
watch(() => addata.giftAmount,v => {
addata.giftAmount = setNum(addata.giftAmount)
addata.totalAmount = addata.rechargeAmount*1 + addata.giftAmount*1
})
watch(() => addata.point,v => {
@ -414,10 +418,15 @@
addata.rent = ''
}
function savehand() {
let newobj = Object.assign({},addata,{
totalAmount:addata.totalAmount*100,
rechargeAmount:addata.rechargeAmount*100,
giftAmount:addata.giftAmount*100
})
if(type.value == 1){
return addhdz(addata)
return addhdz(newobj)
}
return update(addata)
return update(newobj)
}
//
@ -425,10 +434,10 @@
yysRef.value?.validate((valid:Boolean) => {
if (valid) {
addata.totalAmount = addata.totalAmount*100
// addata.totalAmount = addata.totalAmount*100
addata.rechargeAmount = addata.rechargeAmount*100
addata.giftAmount = addata.giftAmount*100
// addata.rechargeAmount = addata.rechargeAmount*100
// addata.giftAmount = addata.giftAmount*100
// addata.point = addata.point*100
// addata.deposit = addata.deposit*100

View File

@ -453,7 +453,7 @@
addressArea:'', //-
contacts:'', //
phone:'', //
status:'', //1-0-
status:'1', //1-0-
logo:'', //logo
delFlag:'' //1-0-
// accountBalance:'' //
@ -500,7 +500,7 @@
addata.addressArea = ''
addata.contacts = ''
addata.phone = ''
addata.status = ''
addata.status = '1'
addata.logo = ''
//addata.accountBalance = ''
}
@ -587,6 +587,7 @@
addata.addressArea = ''
}
console.log(addata.division,'区划')
}
getArea({}).then(rps => {
options.value = rps.data

View File

@ -15,7 +15,7 @@
<el-form-item label="运营商" prop="proxyId">
<el-select v-model="queryParams.proxyId" placeholder="请选择运营商" style="width: 200px;">
<el-option v-for="n in yunList" :label="n.poname" :value="n.pkId" />
<el-option v-for="n in yunList" :label="n.label" :value="n.value" />
</el-select>
</el-form-item>
<el-form-item label="分账状态">
@ -50,32 +50,32 @@
<el-table-column label="订单数量" min-width="150" align="left" prop="orderCount" :show-overflow-tooltip="true" />
<el-table-column label="分账总金额(元)" min-width="150" align="left" prop="accountTotalAmount" :show-overflow-tooltip="true">
<template #default="scope">
<div>{{scope.row.accountTotalAmount/100}}</div>
<div>{{scope.row.accountTotalAmount}}</div>
</template>
</el-table-column>
<el-table-column label="应分金额(元)" min-width="150" align="left" prop="orderTotalAmount" :show-overflow-tooltip="true">
<template #default="scope">
<div>{{scope.row.orderTotalAmount/100}}</div>
<div>{{scope.row.orderTotalAmount}}</div>
</template>
</el-table-column>
<el-table-column label="税点总金额(元)" min-width="150" align="left" prop="taxPointTotalAmount" :show-overflow-tooltip="true">
<template #default="scope">
<div>{{scope.row.taxPointTotalAmount/100}}</div>
<div>{{scope.row.taxPointTotalAmount}}</div>
</template>
</el-table-column>
<el-table-column label="手续费" min-width="150" align="left" prop="totalHandlingFee" :show-overflow-tooltip="true">
<template #default="scope">
<div>{{scope.row.totalHandlingFee/100}}</div>
<div>{{scope.row.totalHandlingFee}}</div>
</template>
</el-table-column>
<el-table-column label="实际分账金额(元)" min-width="150" align="left" prop="totalAmount" :show-overflow-tooltip="true">
<template #default="scope">
<div>{{scope.row.totalAmount/100}}</div>
<div>{{scope.row.totalAmount}}</div>
</template>
</el-table-column>
<el-table-column label="分账开始时间" min-width="150" align="left" prop="independentAccountBegin" :show-overflow-tooltip="true" />
<el-table-column label="分账结束时间" min-width="150" align="left" prop="independentAccountEnd" :show-overflow-tooltip="true" />
<el-table-column label="分账状态" min-width="100" align="left" prop="status" :show-overflow-tooltip="true">
<el-table-column label="分账开始时间" min-width="150" align="center" prop="independentAccountBegin" :show-overflow-tooltip="true" />
<el-table-column label="分账结束时间" min-width="150" align="center" prop="independentAccountEnd" :show-overflow-tooltip="true" />
<el-table-column label="分账状态" min-width="100" align="center" prop="status" :show-overflow-tooltip="true">
<template #default="scope">
<div v-if="scope.row.status == 0">待分账</div>
<div v-else-if="scope.row.status == 1" style="color: #237d00;">已分账</div>
@ -107,7 +107,7 @@
getyysfz
} from '@/api/order/account'
import {
getyyslist
optionyyslist
} from '@/api/systemSet/operator'
import { ref,reactive,watch,h} from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
@ -123,13 +123,10 @@
//
let yunList = ref<any>([])
getyyslist({
pageSize:200,
pageNo:1
}).then(rps => {
optionyyslist().then(rps => {
if(rps.data){
let list = (rps.data as any).records
yunList.value = list?list:[]
//let list = (rps.data as any).records
yunList.value = rps.data
}
})
@ -177,15 +174,15 @@
}else if(i == 1) {
sums[i] = sumtotal.value.orderCount
}else if(i == 2){
sums[i] = sumtotal.value.accountTotalAmount/100
sums[i] = sumtotal.value.accountTotalAmount
}else if(i == 3){
sums[i] = sumtotal.value.orderTotalAmount/100
sums[i] = sumtotal.value.orderTotalAmount
}else if(i == 4){
sums[i] = sumtotal.value.taxPointTotalAmount/100
sums[i] = sumtotal.value.taxPointTotalAmount
}else if(i == 5){
sums[i] = sumtotal.value.handlingFee/100
sums[i] = sumtotal.value.handlingFee
}else if(i == 6){
sums[i] = sumtotal.value.totalAmount/100
sums[i] = sumtotal.value.totalAmount
}else {
sums[i] = ''
}

View File

@ -351,6 +351,9 @@
message: '绑定成功'
})
bdgspop.value = false
setTimeout(()=> {
getyys()
},600)
})
}else{
ElMessage({

View File

@ -5,7 +5,7 @@ export default defineConfig({
envPrefix: "VITE_", //环境变量默认前缀
server: {
// 服务器主机名,默认是 localhost
host: "localhost",
host: "192.168.5.231",
// 是否开启自动打开浏览器
open: true,
// proxy: {