<template>
<el-dialog
:title="!dataForm.id ? '新增电池信息' : '修改电池信息'"
:close-on-click-modal="false"
:visible.sync="visible"
width="80%"
top="5vh"
class="custom-dialog"
@close="resetForm"
>
<el-tabs v-model="activeTab" type="border-card">
<el-tab-pane label="基础信息" name="basic">
<el-form
:model="dataForm"
:rules="dataRule"
ref="dataForm"
label-width="180px"
size="small"
>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="电池ID" prop="batteryId">
<el-input v-model="dataForm.batteryId" placeholder="请输入电池ID"></el-input>
</el-form-item>
<el-form-item label="电池类型" prop="batteryKind">
<el-select
v-model="dataForm.batteryKind"
placeholder="请选择电池类型"
clearable
style="width:100%"
>
<el-option label="运营" :value="0"></el-option>
<el-option label="售后" :value="1"></el-option>
<el-option label="内测" :value="2"></el-option>
<el-option label="报废" :value="3"></el-option>
</el-select>
</el-form-item>
<el-form-item label="电池电压(V)" prop="batteryVoltage">
<el-input-number
v-model="dataForm.batteryVoltage"
:min="0"
:precision="2"
controls-position="right"
style="width:100%"
></el-input-number>
</el-form-item>
<el-form-item label="电池电流(A)" prop="batteryCurrent">
<el-input-number
v-model="dataForm.batteryCurrent"
:min="0"
:precision="2"
controls-position="right"
style="width:100%"
></el-input-number>
</el-form-item>
<el-form-item label="电池SOC(%)" prop="batterySoc">
<el-input-number
v-model="dataForm.batterySoc"
:min="0"
:max="100"
:precision="0"
controls-position="right"
style="width:100%"
></el-input-number>
</el-form-item>
<el-form-item label="工作模式" prop="batteryWorkMode">
<el-select
v-model="dataForm.batteryWorkMode"
placeholder="请选择工作模式"
clearable
style="width:100%"
>
<el-option label="放电模式(0x01)" :value="1"></el-option>
<el-option label="充电模式(0x10)" :value="16"></el-option>
<el-option label="保护模式(0x21)" :value="33"></el-option>
<el-option label="待机无输出模式(0x30)" :value="48"></el-option>
<el-option label="待机预放电模式(0x31)" :value="49"></el-option>
<el-option label="故障需返厂(0xFF)" :value="255"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="最高温度(℃)" prop="batteryTemperatureMax">
<el-input-number
v-model="dataForm.batteryTemperatureMax"
:min="-50"
:max="100"
:precision="1"
controls-position="right"
style="width:100%"
></el-input-number>
</el-form-item>
<el-form-item label="最低温度(℃)" prop="batteryTemperatureMin">
<el-input-number
v-model="dataForm.batteryTemperatureMin"
:min="-50"
:max="100"
:precision="1"
controls-position="right"
style="width:100%"
></el-input-number>
</el-form-item>
<el-form-item label="最高电压(V)" prop="batteryVoltageMax">
<el-input-number
v-model="dataForm.batteryVoltageMax"
:min="0"
:precision="2"
controls-position="right"
style="width:100%"
></el-input-number>
</el-form-item>
<el-form-item label="最低电压(V)" prop="batteryVoltageMin">
<el-input-number
v-model="dataForm.batteryVoltageMin"
:min="0"
:precision="2"
controls-position="right"
style="width:100%"
></el-input-number>
</el-form-item>
<el-form-item label="循环次数" prop="batteryCycleTimes">
<el-input-number
v-model="dataForm.batteryCycleTimes"
:min="0"
:precision="0"
controls-position="right"
style="width:100%"
></el-input-number>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-tab-pane>
<el-tab-pane label="状态信息" name="status">
<el-form
:model="dataForm"
:rules="dataRule"
ref="dataForm"
label-width="180px"
size="small"
>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="保护状态码" prop="batteryProtectCode">
<el-input v-model="dataForm.batteryProtectCode" placeholder="16位二进制保护状态码">
<el-tooltip slot="append" content="保护状态 bit16~bit 31 保留 bit15:Gsensor 故障 bit14:BMS 与 Tracker通讯超时 bit13: 预放电失败 bit12: IC保护 bit11: 智能充电通信超时 bit10:压差过大 bit9:温差过大 bit8:短路 bit7:充电过压 bit6:充电过流 bit5:放电欠压 bit4:放电过流 bit3:充电低温 bit2:充电高温 bit1:放电高温 bit0:放电低温" placement="top" :open-delay="500">
<el-button icon="el-icon-question"></el-button>
</el-tooltip>
</el-input>
</el-form-item>
<el-form-item label="故障状态码" prop="batteryErrorCode">
<el-input v-model="dataForm.batteryErrorCode" placeholder="16位二进制故障状态码">
<el-tooltip slot="append" content="转成2进制, 总共为16位,高8位为电池包工作状态,低8位为故障状态码 bit9BMS 与 Tracker通讯故障,bit8BMS 板 G sensor损坏,(8/9无效)bit7:失效,bit6:失衡,bit5:放电 MOS 损坏,bit4:充电 MOS 损坏,bit3IC 损坏,bit2:温度传感器损坏,bit1:采样线断线,虚焊等故障 保留,置 0,bit0:保留" placement="top" :open-delay="500">
<el-button icon="el-icon-question"></el-button>
</el-tooltip>
</el-input>
</el-form-item>
<el-form-item label="MOS状态" prop="mosStatus">
<el-input v-model="dataForm.mosStatus" placeholder="MOS状态"></el-input>
</el-form-item>
<el-form-item label="MOS温度(℃)" prop="mosTemp">
<el-input-number
v-model="dataForm.mosTemp"
:min="-50"
:max="150"
:precision="1"
controls-position="right"
style="width:100%"
></el-input-number>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="稳定状态" prop="steadyStatus">
<el-input v-model="dataForm.steadyStatus" placeholder="稳定状态"></el-input>
</el-form-item>
<el-form-item label="单体电压(V)" prop="cellVoltage">
<el-input-number
v-model="dataForm.cellVoltage"
:min="0"
:precision="2"
controls-position="right"
style="width:100%"
></el-input-number>
</el-form-item>
<el-form-item label="业务模式" prop="businessmode">
<el-select
v-model="dataForm.businessmode"
placeholder="请选择业务模式"
clearable
style="width:100%"
>
<el-option label="关机模式(1)" :value="1"></el-option>
<el-option label="运营模式(2)" :value="2"></el-option>
<el-option label="运输模式(3)" :value="3"></el-option>
<el-option label="通讯充电模式(4)" :value="4"></el-option>
<el-option label="盲充模式(5)" :value="5"></el-option>
<el-option label="存储模式(6)" :value="6"></el-option>
<el-option label="搜寻模式(7)" :value="7"></el-option>
<el-option label="返厂模式(8)" :value="8"></el-option>
</el-select>
</el-form-item>
<el-form-item label="数据标志" prop="flag">
<el-select
v-model="dataForm.flag"
placeholder="请选择数据标志"
clearable
style="width:100%"
>
<el-option label="设备主动上报(1)" :value="1"></el-option>
<el-option label="平台主动推送(2)" :value="2"></el-option>
<el-option label="平台指令反馈(3)" :value="3"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-tab-pane>
<el-tab-pane label="设备信息" name="device">
<el-form
:model="dataForm"
:rules="dataRule"
ref="dataForm"
label-width="180px"
size="small"
>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="设备型号" prop="model">
<el-input v-model="dataForm.model" placeholder="设备型号"></el-input>
</el-form-item>
<el-form-item label="制造商" prop="manufacture">
<el-input v-model="dataForm.manufacture" placeholder="制造商"></el-input>
</el-form-item>
<el-form-item label="IMEI" prop="imei">
<el-input v-model="dataForm.imei" placeholder="IMEI"></el-input>
</el-form-item>
<el-form-item label="IMSI" prop="imsi">
<el-input v-model="dataForm.imsi" placeholder="IMSI"></el-input>
</el-form-item>
<el-form-item label="ICCID" prop="iccid">
<el-input v-model="dataForm.iccid" placeholder="ICCID"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="硬件版本" prop="trackerHardwareVersion">
<el-input v-model="dataForm.trackerHardwareVersion" placeholder="硬件版本"></el-input>
</el-form-item>
<el-form-item label="软件版本" prop="trackerSoftwareVersion">
<el-input v-model="dataForm.trackerSoftwareVersion" placeholder="软件版本"></el-input>
</el-form-item>
<el-form-item label="上报原因" prop="reportreason">
<el-input v-model="dataForm.reportreason" placeholder="上报原因"></el-input>
</el-form-item>
<el-form-item label="检测状态" prop="detstatus">
<el-input v-model="dataForm.detstatus" placeholder="检测状态"></el-input>
</el-form-item>
<el-form-item label="信号强度" prop="csq">
<el-input-number
v-model="dataForm.csq"
:min="0"
:max="31"
:precision="0"
controls-position="right"
style="width:100%"
></el-input-number>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-tab-pane>
<el-tab-pane label="位置信息" name="location">
<el-form
:model="dataForm"
:rules="dataRule"
ref="dataForm"
label-width="180px"
size="small"
>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="网络类型" prop="networkType">
<el-input v-model="dataForm.networkType" placeholder="网络类型"></el-input>
</el-form-item>
<el-form-item label="定位模式" prop="locationMode">
<el-input v-model="dataForm.locationMode" placeholder="定位模式"></el-input>
</el-form-item>
<el-form-item label="经度" prop="longitude">
<el-input-number
v-model="dataForm.longitude"
:min="-180"
:max="180"
:precision="6"
controls-position="right"
style="width:100%"
></el-input-number>
</el-form-item>
<el-form-item label="经度方向" prop="longitudeDirection">
<el-select
v-model="dataForm.longitudeDirection"
placeholder="请选择方向"
clearable
style="width:100%"
>
<el-option label="东经(E)" value="E"></el-option>
<el-option label="西经(W)" value="W"></el-option>
</el-select>
</el-form-item>
<el-form-item label="纬度" prop="latitude">
<el-input-number
v-model="dataForm.latitude"
:min="-90"
:max="90"
:precision="6"
controls-position="right"
style="width:100%"
></el-input-number>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="纬度方向" prop="latitudeDirection">
<el-select
v-model="dataForm.latitudeDirection"
placeholder="请选择方向"
clearable
style="width:100%"
>
<el-option label="北纬(N)" value="N"></el-option>
<el-option label="南纬(S)" value="S"></el-option>
</el-select>
</el-form-item>
<el-form-item label="GPS速度(km/h)" prop="gpsSpeed">
<el-input-number
v-model="dataForm.gpsSpeed"
:min="0"
:precision="2"
controls-position="right"
style="width:100%"
></el-input-number>
</el-form-item>
<el-form-item label="GPS信号" prop="gpsSignal">
<el-input-number
v-model="dataForm.gpsSignal"
:min="0"
:precision="0"
controls-position="right"
style="width:100%"
></el-input-number>
</el-form-item>
<el-form-item label="卫星数量" prop="satelliteNum">
<el-input-number
v-model="dataForm.satelliteNum"
:min="0"
:max="32"
:precision="0"
controls-position="right"
style="width:100%"
></el-input-number>
</el-form-item>
<el-form-item label="定位精度(m)" prop="accuracy">
<el-input-number
v-model="dataForm.accuracy"
:min="0"
:precision="2"
controls-position="right"
style="width:100%"
></el-input-number>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-tab-pane>
</el-tabs>
<span slot="footer" class="dialog-footer">
<el-button @click="visible = false">取消</el-button>
<el-button type="primary" @click="dataFormSubmit()">确定</el-button>
</span>
</el-dialog>
</template>
<script>
export default {
data () {
// 验证16位二进制码的自定义规则
const validateBinary16 = (rule, value, callback) => {
if (!value) {
callback(new Error('不能为空'));
} else if (!/^[01]{16}$/.test(value)) {
callback(new Error('必须是16位二进制数(由0和1组成)'));
} else {
callback();
}
};
return {
visible: false,
activeTab: 'basic', // 当前激活的标签页
dataForm: {
id: 0,
batteryKind: null, // 新增的电池类型字段
batteryId: '',
batteryVoltage: '',
batteryCurrent: '',
batterySoc: '',
batteryHardVersion: '',
batterySoftVersion: '',
batteryWorkMode: '',
batteryProtectCode: '',
batteryErrorCode: '',
batteryTemperatureMax: '',
batteryTemperatureMin: '',
batteryVoltageMax: '',
batteryVoltageMin: '',
mosStatus: '',
mosTemp: '',
batteryCycleTimes: '',
steadyStatus: '',
cellVoltage: '',
model: '',
manufacture: '',
imei: '',
imsi: '',
iccid: '',
trackerHardwareVersion: '',
trackerSoftwareVersion: '',
reportreason: '',
detstatus: '',
csq: '',
networkType: '',
locationMode: '',
longitude: '',
longitudeDirection: '',
latitude: '',
latitudeDirection: '',
gpsSpeed: '',
gpsSignal: '',
satelliteNum: '',
accuracy: '',
businessmode: '',
flag: '',
uploadTime: '',
createTime: '',
updateTime: ''
},
dataRule: {
batteryId: [
{ required: true, message: '请输入电池ID', trigger: 'blur' }
],
batteryKind: [
{ required: true, message: '请选择电池类型', trigger: 'change' }
],
batteryVoltage: [
{ required: true, message: '请输入电池电压', trigger: 'blur' },
{ type: 'number', message: '必须为数字值' }
],
batteryCurrent: [
{ required: true, message: '请输入电池电流', trigger: 'blur' },
{ type: 'number', message: '必须为数字值' }
],
batterySoc: [
{ required: true, message: '请输入电池SOC', trigger: 'blur' },
{ type: 'number', message: '必须为数字值', min: 0, max: 100 }
],
batteryWorkMode: [
{ required: true, message: '请选择工作模式', trigger: 'change' }
],
batteryProtectCode: [
{ required: true, validator: validateBinary16, trigger: 'blur' }
],
batteryErrorCode: [
{ required: true, validator: validateBinary16, trigger: 'blur' }
],
batteryTemperatureMax: [
{ required: true, message: '请输入最高温度', trigger: 'blur' },
{ type: 'number', message: '必须为数字值', min: -50, max: 100 }
],
batteryTemperatureMin: [
{ required: true, message: '请输入最低温度', trigger: 'blur' },
{ type: 'number', message: '必须为数字值', min: -50, max: 100 }
],
batteryVoltageMax: [
{ required: true, message: '请输入最高电压', trigger: 'blur' },
{ type: 'number', message: '必须为数字值', min: 0 }
],
batteryVoltageMin: [
{ required: true, message: '请输入最低电压', trigger: 'blur' },
{ type: 'number', message: '必须为数字值', min: 0 }
],
mosStatus: [
{ required: true, message: '请输入MOS状态', trigger: 'blur' }
],
mosTemp: [
{ required: true, message: '请输入MOS温度', trigger: 'blur' },
{ type: 'number', message: '必须为数字值', min: -50, max: 150 }
],
batteryCycleTimes: [
{ required: true, message: '请输入循环次数', trigger: 'blur' },
{ type: 'number', message: '必须为数字值', min: 0 }
],
steadyStatus: [
{ required: true, message: '请输入稳定状态', trigger: 'blur' }
],
cellVoltage: [
{ required: true, message: '请输入单体电压', trigger: 'blur' },
{ type: 'number', message: '必须为数字值', min: 0 }
],
model: [
{ required: true, message: '请输入设备型号', trigger: 'blur' }
],
manufacture: [
{ required: true, message: '请输入制造商', trigger: 'blur' }
],
imei: [
{ required: true, message: '请输入IMEI', trigger: 'blur' }
],
imsi: [
{ required: true, message: '请输入IMSI', trigger: 'blur' }
],
iccid: [
{ required: true, message: '请输入ICCID', trigger: 'blur' }
],
trackerHardwareVersion: [
{ required: true, message: '请输入硬件版本', trigger: 'blur' }
],
trackerSoftwareVersion: [
{ required: true, message: '请输入软件版本', trigger: 'blur' }
],
reportreason: [
{ required: true, message: '请输入上报原因', trigger: 'blur' }
],
detstatus: [
{ required: true, message: '请输入检测状态', trigger: 'blur' }
],
csq: [
{ required: true, message: '请输入信号强度', trigger: 'blur' },
{ type: 'number', message: '必须为数字值', min: 0, max: 31 }
],
networkType: [
{ required: true, message: '请输入网络类型', trigger: 'blur' }
],
locationMode: [
{ required: true, message: '请输入定位模式', trigger: 'blur' }
],
longitude: [
{ required: true, message: '请输入经度', trigger: 'blur' },
{ type: 'number', message: '必须为数字值', min: -180, max: 180 }
],
longitudeDirection: [
{ required: true, message: '请选择经度方向', trigger: 'change' }
],
latitude: [
{ required: true, message: '请输入纬度', trigger: 'blur' },
{ type: 'number', message: '必须为数字值', min: -90, max: 90 }
],
latitudeDirection: [
{ required: true, message: '请选择纬度方向', trigger: 'change' }
],
gpsSpeed: [
{ required: true, message: '请输入GPS速度', trigger: 'blur' },
{ type: 'number', message: '必须为数字值', min: 0 }
],
gpsSignal: [
{ required: true, message: '请输入GPS信号', trigger: 'blur' },
{ type: 'number', message: '必须为数字值', min: 0 }
],
satelliteNum: [
{ required: true, message: '请输入卫星数量', trigger: 'blur' },
{ type: 'number', message: '必须为数字值', min: 0, max: 32 }
],
accuracy: [
{ required: true, message: '请输入定位精度', trigger: 'blur' },
{ type: 'number', message: '必须为数字值', min: 0 }
],
businessmode: [
{ required: true, message: '请选择业务模式', trigger: 'change' }
],
flag: [
{ required: true, message: '请选择数据标志', trigger: 'change' }
],
uploadTime: [
{ required: true, message: '请选择上传时间', trigger: 'change' }
],
createTime: [
{ required: true, message: '请选择创建时间', trigger: 'change' }
],
updateTime: [
{ required: true, message: '请选择更新时间', trigger: 'change' }
]
}
}
},
methods: {
init (id) {
this.dataForm.id = id || 0
this.visible = true
this.$nextTick(() => {
this.$refs['dataForm'].resetFields()
if (this.dataForm.id) {
this.$http({
url: this.$http.adornUrl(`/maya/mybatteryinfolastest/info/${this.dataForm.id}`),
method: 'get',
params: this.$http.adornParams()
}).then(({data}) => {
if (data && data.code === 0) {
this.dataForm = {
...this.dataForm,
...data.myBatteryInfoLastest
}
}
})
}
})
},
// 重置表单
resetForm() {
if (this.$refs['dataForm']) {
this.$refs['dataForm'].resetFields();
this.activeTab = 'basic';
}
},
// 表单提交
dataFormSubmit () {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
this.$http({
url: this.$http.adornUrl(`/maya/mybatteryinfolastest/${!this.dataForm.id ? 'save' : 'update'}`),
method: 'post',
data: this.$http.adornData({
...this.dataForm
})
}).then(({data}) => {
if (data && data.code === 0) {
this.$message({
message: '操作成功',
type: 'success',
duration: 1500,
onClose: () => {
this.visible = false
this.$emit('refreshDataList')
}
})
} else {
this.$message.error(data.msg)
}
})
}
})
}
}
}
</script>
<style scoped>
.custom-dialog >>> .el-dialog__body {
padding: 20px 30px;
max-height: 70vh;
overflow-y: auto;
}
.custom-dialog >>> .el-tabs--border-card {
box-shadow: none;
border: none;
}
.custom-dialog >>> .el-tabs__content {
padding: 15px;
}
.custom-dialog >>> .el-tabs__item {
font-weight: bold;
}
.custom-dialog >>> .el-tabs__item.is-active {
color: #409EFF;
background-color: #f5f7fa;
}
.custom-dialog >>> .el-tabs--border-card > .el-tabs__header {
background-color: #f5f7fa;
border-bottom: 1px solid #e4e7ed;
}
.custom-dialog >>> .el-form-item {
margin-bottom: 20px;
}
.custom-dialog >>> .el-input-number {
width: 100%;
}
.custom-dialog >>> .el-select {
width: 100%;
}
</style>
根据这些Map<String, Object> mapinfo = new HashMap<String, Object>();
mapinfo.put("battery_id", device_id); //device_id
mapinfo.put("upload_time", uploadtime);
mapinfo.put("payload", data);
mapinfo.put("create_time", DateUtils.getCurrentDateTime());
//mapinfo.put("topic", topic);
if("getBatteryInfo".equals(topic_arr[5].trim())){ // 查询电池数据
//mapinfo.put("battery_id", data_arr[0]); //device_id
//mapinfo.put("upload_time", uploadtime);
//mapinfo.put("payload", data);
mapinfo.put("imei", data_arr[1]);
mapinfo.put("iccid", data_arr[2]);
mapinfo.put("longitude_direction", data_arr[3]);
mapinfo.put("longitude", data_arr[4]);
mapinfo.put("latitude_direction", data_arr[5]);
mapinfo.put("latitude", data_arr[6]);
mapinfo.put("gpsSpeed", data_arr[7]);
mapinfo.put("battery_soft_version", data_arr[8]);
mapinfo.put("tracker_software_version", data_arr[9]);
mapinfo.put("gps_signal", data_arr[10]);
mapinfo.put("satellite_num", data_arr[11]);
mapinfo.put("soc", data_arr[12]);
mapinfo.put("battery_cycle_times", data_arr[13]);
mapinfo.put("battery_temperature_max", data_arr[14]);
mapinfo.put("battery_temperature_min", data_arr[15]);
mapinfo.put("mos_temp", data_arr[16]);
mapinfo.put("battery_voltage", data_arr[17]);
mapinfo.put("battery_voltage_max", data_arr[18]);
mapinfo.put("battery_voltage_min", data_arr[19]);
mapinfo.put("battery_work_mode", data_arr[20]);
mapinfo.put("mos_status", data_arr[21]);
mapinfo.put("battery_current", data_arr[22]);
mapinfo.put("cell_voltage", data_arr[23]);
mapinfo.put("steady_status", data_arr[24]);
mapinfo.put("battery_error_code", data_arr[25]);
//mapinfo.put("create_time", DateUtils.getCurrentDateTime());
mapinfo.put("flag", 3); // 1:设备主动请求或上报 2:平台主动推送或下指令 3:平台指令反馈的结果
Integer batteryKind=(Integer) SqlUtils.queryInfoOne(Config.getConfigBean().getDatasourcesBean().getDatasourceBean().get(0).getAlias()
, "getBatteryKindByImei", mapinfo);
mapinfo.put("battery_kind",Objects.isNull(batteryKind)?2:batteryKind);有的字段全部判断为不可编辑,除了电池类型,帮我修改该页面