flx:新增人员考勤忽略打卡 视频大屏优化

This commit is contained in:
Rain_ 2025-11-07 16:07:27 +08:00
parent 1ab601058b
commit 12682e22e3
15 changed files with 225 additions and 23 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 863 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 827 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 761 B

View File

@ -208,8 +208,8 @@ if (process.env.NODE_ENV == "development") {
// axios.defaults.baseURL = "http://139.9.66.234:20628";
// axios.defaults.baseURL = "http://jxj.zhgdyun.com:9500";
// axios.defaults.baseURL = "http://jxj.zhgdyun.com:21000"; // 潮州
// axios.defaults.baseURL = "http://gszhdz.crpower.com.cn:9809/"; // 敦煌
// axios.defaults.baseURL = "https://gszhdz.crpower.com.cn:9807/"; // 敦煌
axios.defaults.baseURL = "http://gszhdz.crpower.com.cn:9809/"; // 敦煌
// axios.defaults.baseURL = "https://gszhdz.crpower.com.cn:9807/"; // 敦煌
} else if (process.env.NODE_ENV == "debug") {
axios.defaults.baseURL = "https://www.ceshi.com";
} else if (process.env.NODE_ENV == "production") {

View File

@ -94,10 +94,10 @@ export default new Vuex.Store({
// FILEURL:'http://182.90.224.237:51234/image/',//郭圣雄远程
// UPLOADURL: 'http://42.180.188.17:11211/upload/image', //测试
// FILEURL: 'http://42.180.188.17:11211/image/', //测试
BASEURL: baseUrl ?
baseUrl : window.location.protocol + "//" + window.location.host + "/", //正式环境
UPLOADURL: window.location.protocol + "//" + window.location.host + "/upload/image", //正式环境
FILEURL: window.location.protocol + "//" + window.location.host + "/image/", //正式环境
// BASEURL: baseUrl ?
// baseUrl : window.location.protocol + "//" + window.location.host + "/", //正式环境
// UPLOADURL: window.location.protocol + "//" + window.location.host + "/upload/image", //正式环境
// FILEURL: window.location.protocol + "//" + window.location.host + "/image/", //正式环境
// // WORKFLOWURL: 'http://47.93.215.234:19998/#/workspace/forms',//鞍钢平台工作流地址(弃用)
// // WORKFLOWURL: 'http://47.93.215.234:19098/#/workspace/forms',//鞍钢测试平台工作流地址(弃用)
// WORKFLOWURL: 'http://42.180.188.17:19998/#/workspace/forms', //鞍钢平台工作流地址
@ -108,8 +108,8 @@ export default new Vuex.Store({
// UPLOADURL: 'http://gszhdz.crpower.com.cn:9809/upload/image', //敦煌线上
// FILEURL: 'http://gszhdz.crpower.com.cn:9809/image/', //敦煌线上
// UPLOADURL: 'http://192.168.34.221:8111/upload/image', //演示平台 雄本地
// FILEURL: 'http://192.168.34.221:8111/image/', //演示平台 雄本地
UPLOADURL: 'http://192.168.34.221:8111/upload/image', //演示平台 雄本地
FILEURL: 'http://192.168.34.221:8111/image/', //演示平台 雄本地
// UPLOADURL: 'http://jxj.zhgdyun.com:100/upload/image', //演示平台
// FILEURL: 'http://jxj.zhgdyun.com:100/image/', //演示平台

View File

@ -1,18 +1,17 @@
<template>
<div class="header-wrap">
<div class="left-text">
<div class="weather-box">
<!-- <span>{{ weatherInfo.wea }}</span> -->
<!-- <div class="weather-box">
<img :src="weatherInfo.url" alt="" />
<span>
<img src="@/assets/images/videoSurveillance/header-icon4.png" />
{{ weatherInfo.tem || "" }}
</span>
<div class="line"></div>
</div>
<span class="time">{{ nowTime }}</span>
</div> -->
<span class="time">{{ nowDate }}</span>
<span class="time">{{ getChineseWeekday() }}</span>
<span class="time">{{ nowTime }}</span>
</div>
<div class="center-text">
<div class="left-text_title">
@ -221,10 +220,10 @@ export default {
font-family: Alibaba PuHuiTi, Alibaba PuHuiTi;
font-weight: bold;
font-size: 32px;
color: #ffffff;
color: #FFFFFF;
text-shadow: 0px 0px 6px #06bdfb;
line-height: 32px;
letter-spacing: 9px;
letter-spacing: 8px;
.left-text_title {
position: relative;
&:hover {

View File

@ -86,7 +86,7 @@ export default {
...res.result.videoInfo,
...res.result.config,
serialNumber: res.result.videoInfo.monitoringNumber,
defaultStreamType: 2,
// defaultStreamType: 2,
},
];
console.log("播放视频2222", dataList);

View File

@ -177,6 +177,10 @@
<div>工作票编号</div>
<div>{{ workTicketDetail.workTicketNumber }}</div>
</div>
<div class="box1">
<div>当前绑定监控</div>
<div>{{ itemListDevNameUp }}</div>
</div>
<div class="box1">
<div>施工区域</div>
<div>{{ workTicketDetail.constructionAreaNames }}</div>
@ -1009,7 +1013,9 @@ const updateStatus = computed(() => {
return find ? find.label : "--";
};
});
const itemListDevNameUp = computed(() => {
return workTicketDetail.value.itemList ? workTicketDetail.value.itemList.map(item => item.devName).join('、') : ""
})
const workTicketTypeTreeList = ref([]);
//
const getWorkTicketTypeTreePage = () => {

View File

@ -22,17 +22,40 @@
<div class="header-video" @click.stop="playAllVideo(treeData)"></div>
</el-tooltip> -->
</div>
<div class="header-search">
<div>
<el-input
v-model="searchInfo.videoName"
prefix-icon="el-icon-search"
placeholder="请输入关键字"
></el-input>
<div class="input-right">
<div class="bg-icon" @click="onRefresh">
<div class="refresh-icon"></div>
</div>
<div class="bg-icon" @click="onExpand">
<div class="shrink-icon"></div>
</div>
</div>
</div>
<div class="header-box1">
<div @click="onDeviceState(0)" :class="{'bg-active': searchInfo.deviceState == 0}">全部(10)</div>
<div @click="onDeviceState(1)" :class="{'bg-active': searchInfo.deviceState == 1}">在线(10)</div>
<div @click="onDeviceState(2)" :class="{'bg-active': searchInfo.deviceState == 2}">离线(10)</div>
</div>
</div>
<div class="treeBox">
<!-- :class="{
control_scroll: videoConfigInfo.enableNotPlugin == 1 && isDragging,
control_scrolloff:
videoConfigInfo.enableNotPlugin == 1 && !isDragging,
}" -->
<vue-scroll v-if="treeData.length > 0 || videoType != 1">
<vue-scroll v-if="filterTreeData.length > 0 || videoType != 1">
<el-tree
:data="treeData"
:data="filterTreeData"
@node-click="handleNodeClick"
:props="defaultProps"
:filter-node-method="filterNode"
node-key="itemId"
ref="tree"
>
@ -66,9 +89,10 @@
content="播放项目所有视频"
placement="top"
>
<!-- data.type == 'project' && -->
<span
class="playAllBtn"
v-show="data.type == 'project' && data.children.length > 0"
v-if="data.children.length > 0"
@click.stop="playAllVideo(data.children)"
></span>
</el-tooltip>
@ -117,7 +141,7 @@
</div>
</div>
</template>
<script>
<script>
import { getstandardDevListApi } from "@/assets/js/api/markingRoom";
import {
getTreeVideoProjectListApi,
@ -142,6 +166,10 @@ export default {
data() {
return {
treeData: [],
searchInfo: {
videoName: "",
deviceState: 0,
},
defaultProps: {
children: "children",
label: "name",
@ -158,6 +186,7 @@ export default {
gaugeValue: 10,
isDragging: false,
shrinkCloseFlag: false,
defaultExpand: false,
};
},
mounted() {
@ -165,6 +194,26 @@ export default {
this.loadData();
},
methods: {
onDeviceState(state) {
this.searchInfo.deviceState = state;
},
onExpand() {
this.defaultExpand = !this.defaultExpand;
console.log("this.defaultExpand", this.defaultExpand);
this.changeTreeNodeStatus(this.$refs.tree.store.root);
},
//
changeTreeNodeStatus(node) {
node.expanded = this.defaultExpand;
for (let i = 0; i < node.childNodes.length; i++) {
// expanded
node.childNodes[i].expanded = this.defaultExpand;
//
if (node.childNodes[i].childNodes.length > 0) {
this.changeTreeNodeStatus(node.childNodes[i]);
}
}
},
shrinkCloseFlagFn() {
this.shrinkCloseFlag = !this.shrinkCloseFlag;
this.$emit("shrinkCloseChange", this.shrinkCloseFlag);
@ -197,6 +246,10 @@ export default {
this.markRoomDevList = res.result;
});
},
onRefresh() {
this.searchInfo.videoName = "";
// this.loadData();
},
loadData() {
console.log(isDockingToWoer);
console.log(this.$props.videoSn);
@ -459,8 +512,51 @@ export default {
data.allvideolist
);
},
filterNode(value, data) {
this.defaultExpand = true;
if (!value) return true;
return data.name.indexOf(value) !== -1;
},
recursion(array) {
return array.filter((item) => {
if (
item.children &&
Array.isArray(item.children) &&
item.children.length > 0
) {
const resultList = this.recursion(item.children);
return resultList.length > 0;
}
return item.deviceState === this.searchInfo.deviceState;
});
},
},
computed: {
filterTreeData() {
if (!this.searchInfo.deviceState) return this.treeData;
return this.treeData.map((item) => {
let children = [];
if (
item.children &&
Array.isArray(item.children) &&
item.children.length > 0
) {
children = this.recursion(item.children);
}
return {
...item,
children,
};
});
},
},
watch: {
"searchInfo.videoName": {
handler(val) {
this.$refs.tree.filter(val);
},
deep: true,
},
selectPlayVideoInfo: {
handler(val) {
console.log("进来了", val);
@ -472,6 +568,79 @@ export default {
};
</script>
<style lang="less" scoped>
.header-search {
padding: 10px 15px;
.header-box1 {
margin-top: 20px;
> div {
padding: 5px 24px;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 15px;
color: rgba(255, 255, 255, 0.6);
background-image: url("~@/assets/images/videoSurveillance/bg-icon1.png");
background-size: 100% 100%;
background-repeat: no-repeat;
}
>.bg-active {
background-image: url("~@/assets/images/videoSurveillance/bg-icon1_active.png");
color: #ffffff;
}
}
> div {
display: flex;
align-items: center;
justify-content: space-between;
}
.input-right {
display: flex;
margin-left: 17px;
> div:last-child {
margin-left: 15px;
}
.bg-icon {
width: 32px;
height: 32px;
background-image: url("~@/assets/images/videoSurveillance/bg-icon.png");
background-size: 100% 100%;
background-repeat: no-repeat;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
> div {
width: 16px;
height: 16px;
background-size: 100% 100%;
background-repeat: no-repeat;
}
.refresh-icon {
background-image: url("~@/assets/images/videoSurveillance/refresh-icon.png");
}
.shrink-icon {
background-image: url("~@/assets/images/videoSurveillance/shrink-icon.png");
}
}
}
:deep(.el-input) {
width: 250px;
background-image: url("~@/assets/images/videoSurveillance/bg-input.png");
background-size: 100% 100%;
background-repeat: no-repeat;
.el-input__icon {
line-height: 32px;
color: #65d7f9;
}
.el-input__inner {
height: 32px;
line-height: 32px;
font-size: 15px;
color: #8490ae;
background-color: transparent;
border: none;
}
}
}
.top-container {
height: 100%;
background: linear-gradient(180deg, #082a68 0%, #001e53 100%);
@ -703,7 +872,7 @@ export default {
// margin-right: 12px;
}
.treeBox {
height: calc(100% - 78px);
height: calc(100% - 78px - 103px);
// width: 306px;
// margin-left: -15px;
}

View File

@ -77,8 +77,8 @@ export default {
<style lang="less" scoped>
.headerNoise {
width: calc(100% - 20px - 40px);
height: calc(100% - 132px - 10px - 25px);
margin: 130px 10px 0;
height: calc(100% - 96px - 10px - 25px);
margin: 94px 10px 0;
padding: 15px 20px 10px;
background-image: url("~@/assets/images/companyBigScreen/terminalOperation/index-bg.png");
background-size: 100% 100%;

View File

@ -51,6 +51,23 @@
<el-radio :label="0"></el-radio>
</el-radio-group>
</div>
<div class="search-box">
<div>
<span>是否忽略员工打卡方向标识</span>
<el-popover
placement="bottom-start"
width="365"
:visible-arrow="false"
trigger="hover"
content="统计考勤时是否忽略员工打卡时的“进/出”方向标识">
<div slot="reference" class="question-icon">?</div>
</el-popover>
</div>
<el-radio-group v-model="ignoreWorkerMonthAttendanceInOut" @change="changeMobileAttendance">
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
</div>
</div>
<div class="table_wrap whiteBlock">
<vue-scroll>
@ -249,6 +266,7 @@ export default {
return {
radioVal: 0,
isMobileAttendance: 0,
ignoreWorkerMonthAttendanceInOut: 0,
title: "",
dialogVisible: false,
workerList: [],
@ -326,6 +344,7 @@ export default {
});
if (res.success) {
this.isMobileAttendance = res.result[0].isMobileAttendance || 0;
this.ignoreWorkerMonthAttendanceInOut = res.result[0].ignoreWorkerMonthAttendanceInOut || 0;
}
},
async changeConfig() {
@ -337,6 +356,15 @@ export default {
this.$message.success("操作成功");
}
},
async changeMobileAttendance() {
const res = await editProjectConfigListApi({
projectSn: this.$store.state.projectSn,
ignoreWorkerMonthAttendanceInOut: this.ignoreWorkerMonthAttendanceInOut,
});
if (res.success) {
this.$message.success("操作成功");
}
},
//
operateClear(){
// promptToDelete tips determine cancel