|
|
@@ -1,7 +1,6 @@
|
|
|
<template>
|
|
|
<div style="height: 100%">
|
|
|
<el-row style="display: flex; width: 100%;height: 100%">
|
|
|
- <!--设备树-->
|
|
|
<div class="tree-card" style="
|
|
|
display: flex;
|
|
|
width: 240px;
|
|
|
@@ -16,20 +15,6 @@
|
|
|
<el-tab-pane label="设备-流" name="first">
|
|
|
<span slot="label">
|
|
|
<span>摄像机-视频流</span>
|
|
|
-<!-- <el-dropdown size="mini" trigger="click" style="margin-left: 10px;">-->
|
|
|
-<!-- <i class="el-icon-refresh" style="color: #ffffff; font-size: 14px">{{ getSelectType }}</i>-->
|
|
|
-<!-- <el-dropdown-menu slot="dropdown">-->
|
|
|
-<!-- <el-dropdown-item icon="el-icon-refresh" @click.native="clickDownItem(2)">-->
|
|
|
-<!-- 默认-->
|
|
|
-<!-- </el-dropdown-item>-->
|
|
|
-<!-- <el-dropdown-item icon="el-icon-refresh" @click.native="clickDownItem(1)">-->
|
|
|
-<!-- 硬存储-->
|
|
|
-<!-- </el-dropdown-item>-->
|
|
|
-<!-- <el-dropdown-item icon="el-icon-refresh" @click.native="clickDownItem(0)">-->
|
|
|
-<!-- 流媒体-->
|
|
|
-<!-- </el-dropdown-item>-->
|
|
|
-<!-- </el-dropdown-menu>-->
|
|
|
-<!-- </el-dropdown>-->
|
|
|
</span>
|
|
|
|
|
|
<el-tree :data="streamOptions" :props="defaultProps" :expand-on-click-node="true" ref="tree1"
|
|
|
@@ -44,7 +29,6 @@
|
|
|
" slot-scope="{ node, data }">
|
|
|
<div style="display: flex; align-items: center">
|
|
|
<v-icon name="oi-git-merge" scale="1.2" fill="#ffffff"></v-icon>
|
|
|
-<!-- <el-tooltip :content="data.label" placement="top">-->
|
|
|
<span style="font-size: 14px; margin-left: 5px;
|
|
|
width: 160px;
|
|
|
display: inline-block;
|
|
|
@@ -53,7 +37,6 @@
|
|
|
text-overflow: ellipsis;">{{
|
|
|
data.label
|
|
|
}}</span>
|
|
|
-<!-- </el-tooltip>-->
|
|
|
</div>
|
|
|
</span>
|
|
|
</el-tree>
|
|
|
@@ -63,28 +46,17 @@
|
|
|
<div class="head-container bottom-head-class" >
|
|
|
<el-tabs v-model="activeName" :stretch="true">
|
|
|
<el-tab-pane label="日历" name="first">
|
|
|
- <Calendar :sundayStart="false" v-on:choseDay="clickDay" :markDate="markDay"
|
|
|
+ <Calendar :key="calendarKey" :sundayStart="false" v-on:choseDay="clickDay" :markDate="markDay"
|
|
|
v-on:changeMonth="changeMonth"></Calendar>
|
|
|
- <!-- <vue-quick-calendar showPrepNext startYearMonth='2021-01' :markDate="markDate" :checkedDate='checkedDate'
|
|
|
- @clickDate="clickDate" @changeMonth="changeMonth" /> -->
|
|
|
- <!-- <el-calendar v-model="month" style="flex: 1;flex-shrink: 1;">
|
|
|
- <template slot="dateCell" slot-scope="{date,data}">
|
|
|
- <p v-if="isCurrentMonth(data)" :class="getDateClass(data)" @click="clickDay(data)">
|
|
|
- {{ data.day.split('-').slice(2).join('-') }}
|
|
|
- </p>
|
|
|
- </template>
|
|
|
-</el-calendar> -->
|
|
|
</el-tab-pane>
|
|
|
</el-tabs>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <!--监控预览-->
|
|
|
<el-card class="tree-card" style="flex: 1; margin-left: 10px" :body-style="{
|
|
|
display: 'flex',
|
|
|
flexDirection: 'column',
|
|
|
height: '100%',
|
|
|
}">
|
|
|
- <!--播放器盒子-->
|
|
|
<div style="
|
|
|
height: calc(88vh);
|
|
|
aspect-ratio: 16/9;
|
|
|
@@ -113,7 +85,6 @@
|
|
|
<span slot="description" style="color: white">当前无可播放的录像资源</span>
|
|
|
</el-empty>
|
|
|
<div style="position: absolute;bottom: 0;right: 0;">
|
|
|
- <!-- 点击弹出播放速度调整栏 -->
|
|
|
<el-dropdown @command="handleChangeSpeed">
|
|
|
<span class="el-dropdown-link">
|
|
|
<v-icon name="ri-speed-fill" scale="1.5"/>
|
|
|
@@ -137,7 +108,6 @@
|
|
|
|
|
|
</div>
|
|
|
|
|
|
- <!--时间线-->
|
|
|
<div style="display: flex; margin-bottom: 5px">
|
|
|
<TimelineCanvas style="flex-grow: 1" ref="time_line" @change="changeTimeline" @click="clickTimeline"
|
|
|
:time-range="time" :mark-time="markTime" :isAutoPlay="isAutoPlay" :startMeddleTime="startMeddleTime">
|
|
|
@@ -149,7 +119,6 @@
|
|
|
<el-button class="button-class"
|
|
|
@click="downloadVideo">下载</el-button>
|
|
|
</div>
|
|
|
- <!-- 下载对话框 -->
|
|
|
<el-dialog :visible.sync="openDownload" width="300px" append-to-body>
|
|
|
<div style="text-align: center">
|
|
|
是否确认下载通道{{ equipmentInfo.app }}从{{ downloadTime[0] }}至{{
|
|
|
@@ -182,8 +151,9 @@ import TimelineCanvas from "@/components/TimelineCanvas";
|
|
|
import { formatDate, formatDate2, } from "../../utils";
|
|
|
import { getPlayUrl, selectStreamProxyItem } from "../../api/service/streamProxy";
|
|
|
import { addIcons } from "oh-vue-icons";
|
|
|
-import { OiGitMerge,RiSpeedFill } from "oh-vue-icons/icons";
|
|
|
-addIcons(OiGitMerge,RiSpeedFill);
|
|
|
+import { OiGitMerge, RiSpeedFill } from "oh-vue-icons/icons";
|
|
|
+
|
|
|
+addIcons(OiGitMerge, RiSpeedFill);
|
|
|
|
|
|
export default {
|
|
|
components: {
|
|
|
@@ -191,7 +161,7 @@ export default {
|
|
|
player,
|
|
|
TimelineCanvas,
|
|
|
},
|
|
|
- props:{
|
|
|
+ props: {
|
|
|
streamOptions: {
|
|
|
type: Object,
|
|
|
required: true
|
|
|
@@ -199,7 +169,7 @@ export default {
|
|
|
},
|
|
|
data() {
|
|
|
return {
|
|
|
- emptyImg:emptyIcon,
|
|
|
+ emptyImg: emptyIcon,
|
|
|
// 遮罩层
|
|
|
loading: true,
|
|
|
// 分组数据
|
|
|
@@ -248,8 +218,16 @@ export default {
|
|
|
endMonth: "",
|
|
|
// 日历
|
|
|
markDay: [],
|
|
|
+ // 日历刷新Key,用于强制重置日历状态
|
|
|
+ calendarKey: 0,
|
|
|
+
|
|
|
+ jessibucaSpeed: '1.0',
|
|
|
|
|
|
- jessibucaSpeed:'1.0',
|
|
|
+ // 【新增】双击控制变量
|
|
|
+ lastTreeClickTime: 0,
|
|
|
+ lastTreeData: null,
|
|
|
+ lastClickTime: 0,
|
|
|
+ lastClickDate: null,
|
|
|
};
|
|
|
},
|
|
|
watch: {
|
|
|
@@ -293,33 +271,31 @@ export default {
|
|
|
// this.getStreamOptions();
|
|
|
},
|
|
|
methods: {
|
|
|
- handleChangeSpeed(command){
|
|
|
- if(command==='4'){
|
|
|
- setRecordVideoSpeed({id: this.equipmentInfo.id,startTime: this.startMeddleTime,type: 4,}).then(
|
|
|
+ handleChangeSpeed(command) {
|
|
|
+ if (command === '4') {
|
|
|
+ setRecordVideoSpeed({ id: this.equipmentInfo.id, startTime: this.startMeddleTime, type: 4, }).then(
|
|
|
(res) => {
|
|
|
this.jessibucaSpeed = '2.0'
|
|
|
// 调整时间轴
|
|
|
- this.playStatus("play",2)
|
|
|
- // 调整视频
|
|
|
-
|
|
|
+ this.playStatus("play", 2)
|
|
|
this.$message.success('倍速成功')
|
|
|
}
|
|
|
)
|
|
|
}
|
|
|
- if(command==='5'){
|
|
|
- setRecordVideoSpeed({id: this.equipmentInfo.id,startTime: this.startMeddleTime,type: 5,}).then(
|
|
|
+ if (command === '5') {
|
|
|
+ setRecordVideoSpeed({ id: this.equipmentInfo.id, startTime: this.startMeddleTime, type: 5, }).then(
|
|
|
(res) => {
|
|
|
this.jessibucaSpeed = '0.5'
|
|
|
- this.playStatus("play",0.5)
|
|
|
+ this.playStatus("play", 0.5)
|
|
|
this.$message.success('倍速成功')
|
|
|
}
|
|
|
)
|
|
|
}
|
|
|
- if(command==='6'){
|
|
|
- setRecordVideoSpeed({id: this.equipmentInfo.id,startTime: this.startMeddleTime,type: 6,}).then(
|
|
|
+ if (command === '6') {
|
|
|
+ setRecordVideoSpeed({ id: this.equipmentInfo.id, startTime: this.startMeddleTime, type: 6, }).then(
|
|
|
(res) => {
|
|
|
this.jessibucaSpeed = '1.0'
|
|
|
- this.playStatus("play",1)
|
|
|
+ this.playStatus("play", 1)
|
|
|
this.$message.success('倍速成功')
|
|
|
}
|
|
|
)
|
|
|
@@ -328,8 +304,22 @@ export default {
|
|
|
clickDownItem(val) {
|
|
|
this.selectType = Number(val);
|
|
|
},
|
|
|
+ // 【修改】日历双击逻辑
|
|
|
clickDay(data) {
|
|
|
- console.log(formatDate(data));
|
|
|
+ const now = Date.now();
|
|
|
+ // 判断是否为双击(间隔 < 300ms 且是同一日期)
|
|
|
+ // 注意:data 可能是一个对象或字符串,使用 JSON.stringify 比较内容
|
|
|
+ const isDblClick =
|
|
|
+ now - this.lastClickTime < 300 &&
|
|
|
+ JSON.stringify(data) === JSON.stringify(this.lastClickDate);
|
|
|
+
|
|
|
+ this.lastClickTime = now;
|
|
|
+ this.lastClickDate = data;
|
|
|
+
|
|
|
+ // 只有双击时才执行后续逻辑
|
|
|
+ if (!isDblClick) return;
|
|
|
+
|
|
|
+ console.log("双击日历日期:", formatDate(data));
|
|
|
if (this.equipmentInfo.id === "") {
|
|
|
return;
|
|
|
}
|
|
|
@@ -348,7 +338,6 @@ export default {
|
|
|
item.cameraName = this.equipmentInfo.cameraName;
|
|
|
item.groupName = this.equipmentInfo.groupName;
|
|
|
});
|
|
|
- // this.videoList = res.data;
|
|
|
// 时间轴标记
|
|
|
this.startMeddleTime = res.data[0].Start;
|
|
|
this.markTime = res.data.map((item) => ({
|
|
|
@@ -361,24 +350,35 @@ export default {
|
|
|
this.getPlayUrl(this.equipmentInfo.id, res.data[0].Start)
|
|
|
} else {
|
|
|
this.videoList = [];
|
|
|
+ this.markTime = []; // 清空标记
|
|
|
+ this.$message.info("该日期无录像数据");
|
|
|
}
|
|
|
});
|
|
|
},
|
|
|
+ // 【优化】播放地址获取,增大时间窗口至120分钟
|
|
|
getPlayUrl(id, startTime) {
|
|
|
- // 将字符串转换为Date对象
|
|
|
const dateObj = new Date(startTime);
|
|
|
let endTime
|
|
|
- // 检查并处理可能的解析错误
|
|
|
if (isNaN(dateObj)) {
|
|
|
console.error('Invalid date');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 优化:改为请求 120 分钟,减少播放中断
|
|
|
+ dateObj.setMinutes(dateObj.getMinutes() + 120);
|
|
|
+
|
|
|
+ // 边界处理:不跨天(可选,视后端支持情况,通常建议不跨天)
|
|
|
+ const endOfDay = new Date(startTime);
|
|
|
+ endOfDay.setHours(23, 59, 59, 999);
|
|
|
+ if (dateObj > endOfDay) {
|
|
|
+ endTime = formatDate(endOfDay);
|
|
|
} else {
|
|
|
- // 加上半个小时
|
|
|
- dateObj.setMinutes(dateObj.getMinutes() + 30);
|
|
|
- // 将新的Date对象转换回字符串
|
|
|
endTime = formatDate(dateObj);
|
|
|
- this.endTimeMark = endTime;
|
|
|
- console.log(endTime);
|
|
|
}
|
|
|
+
|
|
|
+ this.endTimeMark = endTime;
|
|
|
+ console.log(`请求播放区间: ${startTime} ~ ${endTime}`);
|
|
|
+
|
|
|
selectRecordVideo({
|
|
|
id: id,
|
|
|
startTime: startTime,
|
|
|
@@ -420,7 +420,6 @@ export default {
|
|
|
});
|
|
|
}
|
|
|
this.markDay = s1;
|
|
|
- console.log(this.markDay);
|
|
|
});
|
|
|
},
|
|
|
getStreamOptions() {
|
|
|
@@ -452,7 +451,6 @@ export default {
|
|
|
});
|
|
|
},
|
|
|
getGroupOptions() {
|
|
|
- // 获取分组
|
|
|
cameraGroupSelect().then((res) => {
|
|
|
this.groupOptions = res.map((item) => ({
|
|
|
...item,
|
|
|
@@ -462,10 +460,9 @@ export default {
|
|
|
}));
|
|
|
});
|
|
|
},
|
|
|
- // 获取设备分组下的设备
|
|
|
handleTabClick(tab) {
|
|
|
if (tab.name === "second") {
|
|
|
- this.groupOptions.forEach(function (item) {
|
|
|
+ this.groupOptions.forEach(function(item) {
|
|
|
listCamera({ groupId: item.id }).then((res) => {
|
|
|
const children = res.rows.map((item) => ({
|
|
|
...item,
|
|
|
@@ -477,21 +474,36 @@ export default {
|
|
|
});
|
|
|
}
|
|
|
},
|
|
|
- // 筛选节点
|
|
|
filterNode(value, data) {
|
|
|
if (!value) return true;
|
|
|
return data.label.indexOf(value) !== -1;
|
|
|
},
|
|
|
+ // 【修改】设备树双击逻辑 + 状态重置
|
|
|
handleNodeClick(data) {
|
|
|
- // 初始化时间轴
|
|
|
+ // 1. 双击检测
|
|
|
+ const now = Date.now();
|
|
|
+ const isDblClick =
|
|
|
+ (now - this.lastTreeClickTime < 300) &&
|
|
|
+ (this.lastTreeData && this.lastTreeData.id === data.id);
|
|
|
+
|
|
|
+ this.lastTreeClickTime = now;
|
|
|
+ this.lastTreeData = data;
|
|
|
+
|
|
|
+ // 非双击则只更新选中状态,不加载数据
|
|
|
+ if (!isDblClick) return;
|
|
|
+
|
|
|
+ // 2. 执行加载逻辑
|
|
|
this.isAutoPlay = false;
|
|
|
this.startMeddleTime = "";
|
|
|
this.startTime = "";
|
|
|
this.endTime = "";
|
|
|
this.markTime = [];
|
|
|
|
|
|
+ // 【关键】切换摄像头时,重置日历选中状态
|
|
|
+ this.time = "";
|
|
|
+ this.calendarKey++; // 强制重置日历组件
|
|
|
+
|
|
|
if (data.isLeaf) {
|
|
|
- this.time = "";
|
|
|
this.videoUrl = "";
|
|
|
this.equipmentInfo = data;
|
|
|
if (this.startMonth === "") {
|
|
|
@@ -504,6 +516,7 @@ export default {
|
|
|
new Date(new Date().getFullYear(), new Date().getMonth() + 1, 1)
|
|
|
);
|
|
|
}
|
|
|
+ // 查询该月哪些天有录像,用于日历打点
|
|
|
selectRecordList({
|
|
|
id: data.id,
|
|
|
startTime: this.startMonth,
|
|
|
@@ -517,18 +530,15 @@ export default {
|
|
|
let endDate = new Date(item.End.split(' ')[0]);
|
|
|
|
|
|
while (startDate <= endDate) {
|
|
|
- // 使用 formatDate2 来格式化日期
|
|
|
let currentDateStr = formatDate2(startDate);
|
|
|
if (!s1.includes(currentDateStr)) {
|
|
|
s1.push(currentDateStr);
|
|
|
}
|
|
|
- // 日期加一天
|
|
|
startDate.setDate(startDate.getDate() + 1);
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
this.markDay = s1;
|
|
|
- console.log(this.markDay);
|
|
|
});
|
|
|
} else {
|
|
|
this.equipmentInfo = {
|
|
|
@@ -555,26 +565,16 @@ export default {
|
|
|
this.$modal.msgWarning("请选择设备和日期!");
|
|
|
return;
|
|
|
}
|
|
|
- console.log(new Date(this.time + " " + this.downloadTime[0]));
|
|
|
- if (
|
|
|
- parseInt(
|
|
|
- (new Date(this.time + " " + this.downloadTime[1]).getTime() -
|
|
|
- new Date(this.time + " " + this.downloadTime[0]).getTime()) /
|
|
|
- 1000 /
|
|
|
- 60
|
|
|
- ) > 120
|
|
|
- ) {
|
|
|
+ // 简单计算时间差
|
|
|
+ let start = new Date(this.time + " " + this.downloadTime[0]).getTime();
|
|
|
+ let end = new Date(this.time + " " + this.downloadTime[1]).getTime();
|
|
|
+ let diffMins = (end - start) / 1000 / 60;
|
|
|
+
|
|
|
+ if (diffMins > 120) {
|
|
|
this.$modal.msgWarning("时长大于2小时,请重新选择!");
|
|
|
return;
|
|
|
}
|
|
|
- if (
|
|
|
- parseInt(
|
|
|
- (new Date(this.time + " " + this.downloadTime[1]).getTime() -
|
|
|
- new Date(this.time + " " + this.downloadTime[0]).getTime()) /
|
|
|
- 1000 /
|
|
|
- 60
|
|
|
- ) < 1
|
|
|
- ) {
|
|
|
+ if (diffMins < 1) {
|
|
|
this.$modal.msgWarning("时长低于1分钟,请重新选择!");
|
|
|
return;
|
|
|
}
|
|
|
@@ -603,50 +603,52 @@ export default {
|
|
|
clearTreeSelected() {
|
|
|
this.$store.commit("updateSelectedTreeData", {});
|
|
|
this.$store.commit("updateSelectedMonitor", {});
|
|
|
- // this.selectedTree = []
|
|
|
},
|
|
|
changeTimeline(date, status) {
|
|
|
- // console.log("选择时间:"+date+"播放状态:"+status)
|
|
|
this.startMeddleTime = date;
|
|
|
},
|
|
|
- // 鼠标拖动时间轴的抬起事件
|
|
|
+ // 【优化】时间轴点击事件:本地计算,去除网络请求
|
|
|
+ // 修复问题:播放状态下鼠标悬停跳动问题(因为移除了会导致重绘的网络请求)
|
|
|
clickTimeline(date) {
|
|
|
if (this.equipmentInfo.id === "") {
|
|
|
return;
|
|
|
}
|
|
|
+
|
|
|
+ let finalStartTime = date;
|
|
|
+
|
|
|
+ // 智能吸附逻辑 (本地计算)
|
|
|
if (this.equipmentInfo.isYuhang === "0") {
|
|
|
- // 查list获取第一个录像段的开始时间
|
|
|
- selectRecordList({
|
|
|
- id: this.equipmentInfo.id,
|
|
|
- startTime: date,
|
|
|
- endTime: this.endTime,
|
|
|
- selectType: this.selectType
|
|
|
- }).then((res) => {
|
|
|
- if (res.data.length > 0) {
|
|
|
- console.log(res.data);
|
|
|
- this.startMeddleTime = res.data[0].Start;
|
|
|
+ const clickTime = new Date(date).getTime();
|
|
|
+
|
|
|
+ // 1. 检查是否点击在已有录像段内
|
|
|
+ const insideSegment = this.markTime.find(item => {
|
|
|
+ const s = new Date(item.beginTime).getTime();
|
|
|
+ const e = new Date(item.endTime).getTime();
|
|
|
+ return clickTime >= s && clickTime <= e;
|
|
|
+ });
|
|
|
+
|
|
|
+ if (insideSegment) {
|
|
|
+ finalStartTime = date;
|
|
|
+ } else {
|
|
|
+ // 2. 点击空白处,寻找下一段录像开始
|
|
|
+ const nextSegment = this.markTime.find(item => {
|
|
|
+ return new Date(item.beginTime).getTime() > clickTime;
|
|
|
+ });
|
|
|
+
|
|
|
+ if (nextSegment) {
|
|
|
+ finalStartTime = nextSegment.beginTime;
|
|
|
} else {
|
|
|
- this.startMeddleTime = date;
|
|
|
+ // 后面没录像了,保持原位置或不做处理
|
|
|
+ finalStartTime = date;
|
|
|
}
|
|
|
- this.getPlayUrl(this.equipmentInfo.id, this.startMeddleTime)
|
|
|
- });
|
|
|
- } else {
|
|
|
- this.startMeddleTime = date;
|
|
|
- this.getPlayUrl(this.equipmentInfo.id, this.startMeddleTime)
|
|
|
+ }
|
|
|
}
|
|
|
- // 获取播放链接
|
|
|
-
|
|
|
- // selectRecordVideo({
|
|
|
- // id: this.equipmentInfo.id,
|
|
|
- // startTime: date,
|
|
|
- // endTime: this.endTime,
|
|
|
- // selectType: this.selectType
|
|
|
- // }).then((res) => {
|
|
|
- // this.videoUrl = res.data;
|
|
|
- // });
|
|
|
+
|
|
|
+ // 直接更新播放时间,无延迟
|
|
|
+ this.startMeddleTime = finalStartTime;
|
|
|
+ this.getPlayUrl(this.equipmentInfo.id, this.startMeddleTime);
|
|
|
},
|
|
|
playStatus(str, speed) {
|
|
|
- console.log(str);
|
|
|
switch (str) {
|
|
|
case "play":
|
|
|
this.$refs.time_line.play(this.startMeddleTime, speed);
|
|
|
@@ -658,7 +660,6 @@ export default {
|
|
|
},
|
|
|
setIsAutoPlay(b) {
|
|
|
if (b) {
|
|
|
- console.log(b);
|
|
|
this.isAutoPlay = true;
|
|
|
this.$refs.time_line.play();
|
|
|
} else {
|
|
|
@@ -675,7 +676,6 @@ export default {
|
|
|
<style scoped>
|
|
|
.app-container {
|
|
|
padding: 10px 10px;
|
|
|
- /*background: #1a1a2e;*/
|
|
|
}
|
|
|
|
|
|
::v-deep .top-head-class .el-tree-node__content {
|
|
|
@@ -689,11 +689,11 @@ export default {
|
|
|
color: #FFFFFF;
|
|
|
}
|
|
|
|
|
|
-::v-deep .el-tree-node:focus>.el-tree-node__content {
|
|
|
+::v-deep .el-tree-node:focus > .el-tree-node__content {
|
|
|
background-color: transparent;
|
|
|
}
|
|
|
|
|
|
-.el-tree--highlight-current>>>.el-tree-node.is-current>.el-tree-node__content {
|
|
|
+.el-tree--highlight-current >>> .el-tree-node.is-current > .el-tree-node__content {
|
|
|
background-image: linear-gradient(to right, #acb3bb, #304156 100%);
|
|
|
font-weight: bold;
|
|
|
}
|
|
|
@@ -707,35 +707,36 @@ export default {
|
|
|
|
|
|
::v-deep .el-tabs__header {
|
|
|
margin: 0 0 0px;
|
|
|
- /*background-color: #304156;*/
|
|
|
}
|
|
|
|
|
|
-.head-container{
|
|
|
+.head-container {
|
|
|
margin-bottom: 5px;
|
|
|
- .el-tabs{
|
|
|
+
|
|
|
+ .el-tabs {
|
|
|
background: none;
|
|
|
}
|
|
|
+
|
|
|
background-image: url("../../assets/images/kuang-2.png") !important;
|
|
|
background-repeat: no-repeat !important;
|
|
|
background-size: 240px 100% !important;
|
|
|
}
|
|
|
+
|
|
|
::v-deep .top-head-class .el-tabs__content {
|
|
|
height: 54.7vh !important;
|
|
|
flex-grow: 1;
|
|
|
- /*background-color: #1a2c43;*/
|
|
|
overflow-y: auto;
|
|
|
|
|
|
- /* 滚动槽 */
|
|
|
&::-webkit-scrollbar-track {
|
|
|
background-color: transparent;
|
|
|
}
|
|
|
}
|
|
|
-::v-deep .bottom-head-class .el-tabs__content{
|
|
|
+
|
|
|
+::v-deep .bottom-head-class .el-tabs__content {
|
|
|
height: 100% !important;
|
|
|
flex-grow: 1;
|
|
|
- /*background-color: #1a2c43;*/
|
|
|
overflow-y: auto;
|
|
|
}
|
|
|
+
|
|
|
::v-deep .el-tabs__item {
|
|
|
font-size: 16px;
|
|
|
color: #ffffff;
|
|
|
@@ -763,7 +764,6 @@ export default {
|
|
|
|
|
|
::v-deep .el-input__inner {
|
|
|
border: none;
|
|
|
- /*background-color: #6e7a89;*/
|
|
|
background-color: #0d1a2b;
|
|
|
color: #ffffff;
|
|
|
}
|
|
|
@@ -773,31 +773,20 @@ export default {
|
|
|
color: #aaaaaa;
|
|
|
background-color: #0d1a2b;
|
|
|
}
|
|
|
-::v-deep .el-range-separator{
|
|
|
- color: #9b9b9b;
|
|
|
-}
|
|
|
-.cell-player {
|
|
|
- flex: 1;
|
|
|
- display: flex;
|
|
|
- width: 100%;
|
|
|
- flex-wrap: wrap;
|
|
|
- justify-content: space-between;
|
|
|
-}
|
|
|
|
|
|
-.cell-player-1 {
|
|
|
- width: 100%;
|
|
|
- min-height: 150px;
|
|
|
- aspect-ratio: 16/9;
|
|
|
- border: 1px solid #fff;
|
|
|
- box-sizing: border-box;
|
|
|
+::v-deep .el-range-separator {
|
|
|
+ color: #9b9b9b;
|
|
|
}
|
|
|
|
|
|
+/* 日历样式 */
|
|
|
::v-deep .wh_top_change li {
|
|
|
color: #ffffff;
|
|
|
}
|
|
|
-::v-deep .wh_content{
|
|
|
+
|
|
|
+::v-deep .wh_content {
|
|
|
margin-top: 3px
|
|
|
}
|
|
|
+
|
|
|
::v-deep .wh_content_all {
|
|
|
background-color: #03111e !important;
|
|
|
border: none;
|
|
|
@@ -810,19 +799,21 @@ export default {
|
|
|
}
|
|
|
|
|
|
::v-deep .wh_content_item .wh_isMark {
|
|
|
- background-color: #6e7a89 !important; /* 这是您原来的背景色,可以保留或修改 */
|
|
|
- color: #26e847 !important; /* 将字体颜色修改为绿色 */
|
|
|
- font-weight: bold; /* 可以加粗以突出显示 */
|
|
|
+ background-color: #6e7a89 !important;
|
|
|
+ color: #26e847 !important;
|
|
|
+ font-weight: bold;
|
|
|
}
|
|
|
|
|
|
::v-deep .wh_item_date:hover {
|
|
|
background: #409eff !important;
|
|
|
color: #fff;
|
|
|
}
|
|
|
-::v-deep .wh_item_date{
|
|
|
+
|
|
|
+::v-deep .wh_item_date {
|
|
|
height: 30px !important;
|
|
|
width: 30px !important;
|
|
|
}
|
|
|
+
|
|
|
::v-deep .wh_content_item .wh_other_dayhide {
|
|
|
color: transparent;
|
|
|
pointer-events: none;
|
|
|
@@ -847,7 +838,8 @@ export default {
|
|
|
border-top: 2px solid #ffffff;
|
|
|
border-right: 2px solid #ffffff;
|
|
|
}
|
|
|
-::v-deep .button-class{
|
|
|
+
|
|
|
+::v-deep .button-class {
|
|
|
margin-left: 5px;
|
|
|
height: 36px;
|
|
|
color: #ffffff;
|
|
|
@@ -861,54 +853,61 @@ export default {
|
|
|
|
|
|
</style>
|
|
|
<style lang="scss">
|
|
|
-.time-class{
|
|
|
+.time-class {
|
|
|
color: white;
|
|
|
background: #051c38 !important;
|
|
|
border: 1px solid #387cf8;
|
|
|
}
|
|
|
-.el-time-spinner__item.active:not(.disabled){
|
|
|
+
|
|
|
+.el-time-spinner__item.active:not(.disabled) {
|
|
|
color: white;
|
|
|
}
|
|
|
-.el-time-spinner__item{
|
|
|
+
|
|
|
+.el-time-spinner__item {
|
|
|
font-size: 16px;
|
|
|
}
|
|
|
-.el-time-range-picker__header{
|
|
|
+
|
|
|
+.el-time-range-picker__header {
|
|
|
font-size: 18px;
|
|
|
}
|
|
|
-.el-time-panel__btn{
|
|
|
+
|
|
|
+.el-time-panel__btn {
|
|
|
font-size: 16px;
|
|
|
}
|
|
|
-.cancel{
|
|
|
+
|
|
|
+.cancel {
|
|
|
color: #a1a1a1;
|
|
|
}
|
|
|
-.el-time-range-picker__body{
|
|
|
+
|
|
|
+.el-time-range-picker__body {
|
|
|
border: 1px solid #474747;
|
|
|
}
|
|
|
-.el-time-panel__footer{
|
|
|
- border-top:1px solid #474747;
|
|
|
+
|
|
|
+.el-time-panel__footer {
|
|
|
+ border-top: 1px solid #474747;
|
|
|
}
|
|
|
-::v-deep .time-class> .popper__arrow::after{
|
|
|
- border-top-color:#032046 !important;
|
|
|
+
|
|
|
+::v-deep .time-class > .popper__arrow::after {
|
|
|
+ border-top-color: #032046 !important;
|
|
|
}
|
|
|
-.el-time-spinner__item:hover:not(.disabled):not(.active){
|
|
|
+
|
|
|
+.el-time-spinner__item:hover:not(.disabled):not(.active) {
|
|
|
background: #042555;
|
|
|
}
|
|
|
-.el-time-spinner__wrapper{
|
|
|
+
|
|
|
+.el-time-spinner__wrapper {
|
|
|
border-bottom: 1px solid #474747;
|
|
|
}
|
|
|
+
|
|
|
.time-class *, *:before, *:after {
|
|
|
box-sizing: content-box !important;
|
|
|
}
|
|
|
-.el-time-range-picker__cell{
|
|
|
+
|
|
|
+.el-time-range-picker__cell {
|
|
|
width: 45%;
|
|
|
}
|
|
|
-.el-time-panel__content::after, .el-time-panel__content::before{
|
|
|
+
|
|
|
+.el-time-panel__content::after, .el-time-panel__content::before {
|
|
|
height: 23px;
|
|
|
}
|
|
|
-//::v-deep .el-tree{
|
|
|
-// white-space: nowrap !important;
|
|
|
-// overflow: hidden !important;
|
|
|
-// text-overflow: ellipsis !important;
|
|
|
-// max-width: 80% !important;
|
|
|
-//}
|
|
|
</style>
|