|
|
@@ -215,15 +215,15 @@
|
|
|
</template>
|
|
|
</el-dialog>
|
|
|
<!--设备详情弹窗-->
|
|
|
- <el-dialog v-model="viewDialog.visible" :title="viewDialog.title" width="900px" style="height: 650px"
|
|
|
- append-to-body>
|
|
|
+ <el-dialog v-model="viewDialog.visible" :title="viewDialog.title" width="900px" style="height: 680px"
|
|
|
+ append-to-body>
|
|
|
<el-tabs v-model="activeName" style="height: 500px" @tab-click="handleClickTab">
|
|
|
<el-tab-pane label="设备详情" name="info">
|
|
|
<div>
|
|
|
<span>设备名称:{{ deviceRunInfo.deviceBase.name }}</span>
|
|
|
<span style="margin-left: 50px">SN:{{ deviceRunInfo.deviceBase.serialNumber }}</span>
|
|
|
<span style="margin-left: 50px">MAC:{{ deviceRunInfo.deviceBase.mac }}</span>
|
|
|
- <br />
|
|
|
+ <br/>
|
|
|
</div>
|
|
|
<div style="margin-top: 20px">
|
|
|
<span>分辨率:{{ deviceRunInfo.deviceBase.width }}*{{ deviceRunInfo.deviceBase.height }}</span>
|
|
|
@@ -312,14 +312,49 @@
|
|
|
</el-table-column>
|
|
|
<el-table-column label="告警类型" align="center" prop="errorType" width="100">
|
|
|
<template #default="scope">
|
|
|
- <dict-tag :options="smsb_device_error_type" :value="scope.row.errorType" />
|
|
|
+ <dict-tag :options="smsb_device_error_type" :value="scope.row.errorType"/>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column label="创建时间" align="left" prop="createTime" width="160" />
|
|
|
+ <el-table-column label="创建时间" align="left" prop="createTime" width="160"/>
|
|
|
</el-table>
|
|
|
</div>
|
|
|
<pagination v-show="alarmTotal > 0" v-model:page="dialogQueryParams.pageNum"
|
|
|
- v-model:limit="dialogQueryParams.pageSize" :total="alarmTotal" @pagination="getAlarmList" />
|
|
|
+ v-model:limit="dialogQueryParams.pageSize" :total="alarmTotal" @pagination="getAlarmList"/>
|
|
|
+ </el-tab-pane>
|
|
|
+ <el-tab-pane label="电源控制" name="power">
|
|
|
+ <div style="margin-top: 10px">
|
|
|
+ <el-button :loading="buttonLoading" type="primary" @click="handlePower('on')">一键开启</el-button>
|
|
|
+ <el-button :loading="buttonLoading" type="primary" @click="handlePower('off')">一键关闭</el-button>
|
|
|
+ <el-button :loading="buttonLoading" type="primary" @click="handleSchedule">定时新增</el-button>
|
|
|
+ <!-- <el-button :loading="buttonLoading" type="primary" @click="handleRead">定时回读</el-button>-->
|
|
|
+ </div>
|
|
|
+ <el-divider border-style="double"/>
|
|
|
+ <el-table :data="powerScheduleList">
|
|
|
+ <el-table-column label="电源类型" align="center" prop="powerType">
|
|
|
+ <template #default="scope">
|
|
|
+ <dict-tag :options="smsb_multi_card_type" :value="scope.row.powerType"/>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="开始日期" align="center" prop="startDate"/>
|
|
|
+ <el-table-column label="结束日期" align="center" prop="endDate"/>
|
|
|
+ <el-table-column label="亮屏时间" align="center" prop="powerOnTime"/>
|
|
|
+ <el-table-column label="息屏时间" align="center" prop="powerOffTime"/>
|
|
|
+ <el-table-column label="状态" align="center" prop="status">
|
|
|
+ <template #default="scope">
|
|
|
+ <dict-tag :options="smsb_multi_card_status" :value="scope.row.status"/>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
|
|
+ <template #default="scope">
|
|
|
+ <el-tooltip content="修改" placement="top">
|
|
|
+ <el-button link type="primary" icon="Edit" @click="handleUpdateSchedule(scope.row)"></el-button>
|
|
|
+ </el-tooltip>
|
|
|
+ <el-tooltip content="删除" placement="top">
|
|
|
+ <el-button link type="primary" icon="Delete" @click="handleDeleteSchedule(scope.row)"></el-button>
|
|
|
+ </el-tooltip>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
</el-tab-pane>
|
|
|
</el-tabs>
|
|
|
<template #footer>
|
|
|
@@ -360,7 +395,7 @@
|
|
|
</el-dialog>
|
|
|
<!--亮度调节弹窗-->
|
|
|
<el-dialog v-model="brightDialog.visible" :title="brightDialog.title" width="700px" append-to-body>
|
|
|
- <el-slider style="margin: 20px" v-model="brightnessValue" :min="0" :max="255" :step="1" />
|
|
|
+ <el-slider style="margin: 20px" v-model="brightnessValue" :min="0" :max="255" :step="1"/>
|
|
|
<template #footer>
|
|
|
<div class="dialog-footer">
|
|
|
<el-button :loading="buttonLoading" type="primary" @click="brightSubmit">确 定</el-button>
|
|
|
@@ -368,6 +403,41 @@
|
|
|
</div>
|
|
|
</template>
|
|
|
</el-dialog>
|
|
|
+ <!--电源开关弹窗-->
|
|
|
+ <el-dialog v-model="powerDialog.visible" :title="powerDialog.title" width="600px" append-to-body>
|
|
|
+ <el-form ref="powerFormRef" :model="powerForm" :rules="powerRules" label-width="70px">
|
|
|
+ <el-form-item label="电源类型" prop="powerType">
|
|
|
+ <el-select v-model="powerForm.powerType" placeholder="请选择电源类型" style="width: 150px">
|
|
|
+ <el-option v-for="dict in smsb_multi_card_type" :key="dict.value" :label="dict.label"
|
|
|
+ :value="dict.value"/>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="日期范围" prop="dateRange">
|
|
|
+ <el-date-picker v-model="powerForm.dateRange" value-format="YYYY-MM-DD" type="daterange" range-separator="-"
|
|
|
+ start-placeholder="开始日期" end-placeholder="结束日期" style="width: 100px"
|
|
|
+ :default-time="[new Date(2025, 1, 1, 0, 0, 0), new Date(2025, 1, 1, 23, 59, 59)]"/>
|
|
|
+
|
|
|
+ </el-form-item>
|
|
|
+ <el-row :gutter="20">
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="亮屏时间" prop="powerOnTime">
|
|
|
+ <el-time-picker clearable v-model="powerForm.powerOnTime" value-format="HH:mm:ss" placeholder="请选择亮屏时间"/>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="息屏时间" prop="powerOffTime">
|
|
|
+ <el-time-picker clearable v-model="powerForm.powerOffTime" value-format="HH:mm:ss" placeholder="请选择息屏时间"/>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </el-form>
|
|
|
+ <template #footer>
|
|
|
+ <div class="dialog-footer">
|
|
|
+ <el-button :loading="buttonLoading" type="primary" @click="submitPowerForm">确 定</el-button>
|
|
|
+ <el-button @click="powerCancel">取 消</el-button>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-dialog>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
@@ -382,6 +452,7 @@ import {
|
|
|
getDeviceRunInfo,
|
|
|
getDeviceScreenshot,
|
|
|
listDevice,
|
|
|
+ powerSet,
|
|
|
reboot,
|
|
|
restartApp,
|
|
|
shutdown,
|
|
|
@@ -402,10 +473,17 @@ import {DeviceErrorRecordQuery, DeviceErrorRecordVO} from '@/api/smsb/device/err
|
|
|
import {listDeviceErrorRecord} from '@/api/smsb/device/errorRecord';
|
|
|
import {storeToRefs} from 'pinia';
|
|
|
import useScreenshotStore from '@/store/modules/screenshot';
|
|
|
+import {DevicePowerScheduleForm, DevicePowerScheduleVO} from "@/api/smsb/device/device_power_schedule_type";
|
|
|
+import {
|
|
|
+ addDevicePowerSchedule, delDevicePowerSchedule,
|
|
|
+ getDevicePowerSchedule,
|
|
|
+ listPowerScheduleByDevice, updateDevicePowerSchedule
|
|
|
+} from "@/api/smsb/device/device_power_schedule";
|
|
|
|
|
|
const screenshotStore = storeToRefs(useScreenshotStore());
|
|
|
const screenshotImageUrl = ref<string>();
|
|
|
const alarmList = ref<DeviceErrorRecordVO[]>([]);
|
|
|
+const powerScheduleList = ref<DevicePowerScheduleVO[]>([]);
|
|
|
const {proxy} = getCurrentInstance() as ComponentInternalInstance;
|
|
|
const {
|
|
|
sys_device_online,
|
|
|
@@ -431,6 +509,7 @@ const multiple = ref(true);
|
|
|
const total = ref(0);
|
|
|
const queryFormRef = ref<ElFormInstance>();
|
|
|
const deviceFormRef = ref<ElFormInstance>();
|
|
|
+const powerFormRef = ref<ElFormInstance>();
|
|
|
const deviceId = ref<string | number>();
|
|
|
const totalNum = ref(0);
|
|
|
const alarmTotal = ref(0);
|
|
|
@@ -440,6 +519,14 @@ const streamDeviceId = ref<string | number>();
|
|
|
const initNum = ref(0);
|
|
|
const volumeValue = ref(0);
|
|
|
const brightnessValue = ref(0);
|
|
|
+const powerForm = ref<DevicePowerScheduleForm>({
|
|
|
+ id: null,
|
|
|
+ powerType: "1",
|
|
|
+ dateRange: null,
|
|
|
+ powerOnTime: null,
|
|
|
+ powerOffTime: null,
|
|
|
+ deviceId: null
|
|
|
+});
|
|
|
const deviceRunInfo = reactive<DeviceRunInfoVO>({
|
|
|
deviceBase: undefined,
|
|
|
id: undefined,
|
|
|
@@ -476,6 +563,10 @@ const brightDialog = reactive<DialogOption>({
|
|
|
visible: false,
|
|
|
title: ''
|
|
|
});
|
|
|
+const powerDialog = reactive<DialogOption>({
|
|
|
+ visible: false,
|
|
|
+ title: ''
|
|
|
+});
|
|
|
// 播放器实例引用
|
|
|
const flvPlayer = ref<flvjs.Player | null>(null);
|
|
|
const flvPlayerRef = ref<HTMLVideoElement | null>(null);
|
|
|
@@ -548,9 +639,21 @@ const dialogData = reactive<DialogPageData<DeviceErrorRecordQuery>>({
|
|
|
}
|
|
|
});
|
|
|
|
|
|
-const { queryParams, form, rules } = toRefs(data);
|
|
|
-const { dialogQueryParams } = toRefs(dialogData);
|
|
|
-
|
|
|
+const {queryParams, form, rules} = toRefs(data);
|
|
|
+const {dialogQueryParams} = toRefs(dialogData);
|
|
|
+const submitPowerForm = async () => {
|
|
|
+ buttonLoading.value = true;
|
|
|
+ if (powerForm.value.id){
|
|
|
+ await updateDevicePowerSchedule(powerForm.value).finally(() => (buttonLoading.value = false));
|
|
|
+ }else {
|
|
|
+ await addDevicePowerSchedule(powerForm.value).finally(() => (buttonLoading.value = false));
|
|
|
+ }
|
|
|
+ await getPowerScheduleList();
|
|
|
+ powerDialog.visible = false;
|
|
|
+};
|
|
|
+const powerCancel = () => {
|
|
|
+ powerDialog.visible = false;
|
|
|
+};
|
|
|
/** 查询设备列表 */
|
|
|
const getList = async () => {
|
|
|
loading.value = true;
|
|
|
@@ -594,6 +697,41 @@ const brightCancel = () => {
|
|
|
brightDialog.visible = false;
|
|
|
buttonLoading.value = false;
|
|
|
}
|
|
|
+const handleSchedule = async () => {
|
|
|
+ const deviceId = deviceRunInfo.deviceId;
|
|
|
+ powerForm.value.dateRange = [];
|
|
|
+ powerForm.value.powerOffTime = null;
|
|
|
+ powerForm.value.powerOnTime = null;
|
|
|
+ powerForm.value.deviceId = deviceId;
|
|
|
+ powerDialog.visible = true;
|
|
|
+ powerDialog.title = '定时设置';
|
|
|
+}
|
|
|
+const handleUpdateSchedule = async (row?: DevicePowerScheduleVO) => {
|
|
|
+ const _id = row?.id
|
|
|
+ powerForm.value.dateRange = [];
|
|
|
+ powerForm.value.powerOffTime = null;
|
|
|
+ powerForm.value.powerOnTime = null;
|
|
|
+ const res = await getDevicePowerSchedule(_id);
|
|
|
+ Object.assign(powerForm.value, res.data);
|
|
|
+ powerForm.value.dateRange.push(res.data.startDate);
|
|
|
+ powerForm.value.dateRange.push(res.data.endDate);
|
|
|
+ powerDialog.visible = true;
|
|
|
+ powerDialog.title = "定时设置";
|
|
|
+}
|
|
|
+const handleDeleteSchedule = async (row?: DevicePowerScheduleVO) => {
|
|
|
+ const _ids = row?.id
|
|
|
+ await proxy?.$modal.confirm('是否确认删除定时配置ID为"' + _ids + '"的数据项?').finally(() => loading.value = false);
|
|
|
+ await delDevicePowerSchedule(_ids);
|
|
|
+ proxy?.$modal.msgSuccess("删除成功");
|
|
|
+ await getPowerScheduleList();
|
|
|
+}
|
|
|
+const handlePower = async (type: string) => {
|
|
|
+ buttonLoading.value = true;
|
|
|
+ const deviceId = deviceRunInfo.deviceId;
|
|
|
+ await powerSet(deviceId, type).finally(() => buttonLoading.value = false);
|
|
|
+ buttonLoading.value = false;
|
|
|
+ proxy?.$modal.msgSuccess('命令下发成功');
|
|
|
+}
|
|
|
const handleVoice = () => {
|
|
|
// console.log("volume num = " + deviceRunInfo.volume)
|
|
|
voiceDialog.visible = true;
|
|
|
@@ -843,7 +981,17 @@ const handleClickTab = (tab: TabsPaneContext, event: Event) => {
|
|
|
if (tab.props.name === 'alarm') {
|
|
|
getAlarmList();
|
|
|
}
|
|
|
+ if (tab.props.name === 'power') {
|
|
|
+ getPowerScheduleList();
|
|
|
+ }
|
|
|
};
|
|
|
+
|
|
|
+const getPowerScheduleList = async () => {
|
|
|
+ const deviceId = deviceRunInfo.deviceId;
|
|
|
+ const res = await listPowerScheduleByDevice(deviceId);
|
|
|
+ powerScheduleList.value = res.data;
|
|
|
+};
|
|
|
+
|
|
|
// 组件卸载前清理
|
|
|
onBeforeUnmount(() => {
|
|
|
destroyPlayer();
|