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://139.9.66.234:20628";
// axios.defaults.baseURL = "http://jxj.zhgdyun.com:9500"; // axios.defaults.baseURL = "http://jxj.zhgdyun.com:9500";
// axios.defaults.baseURL = "http://jxj.zhgdyun.com:21000"; // 潮州 // axios.defaults.baseURL = "http://jxj.zhgdyun.com:21000"; // 潮州
// axios.defaults.baseURL = "http://gszhdz.crpower.com.cn:9809/"; // 敦煌 axios.defaults.baseURL = "http://gszhdz.crpower.com.cn:9809/"; // 敦煌
// axios.defaults.baseURL = "https://gszhdz.crpower.com.cn:9807/"; // 敦煌 // axios.defaults.baseURL = "https://gszhdz.crpower.com.cn:9807/"; // 敦煌
} else if (process.env.NODE_ENV == "debug") { } else if (process.env.NODE_ENV == "debug") {
axios.defaults.baseURL = "https://www.ceshi.com"; axios.defaults.baseURL = "https://www.ceshi.com";
} else if (process.env.NODE_ENV == "production") { } 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/',//郭圣雄远程 // FILEURL:'http://182.90.224.237:51234/image/',//郭圣雄远程
// UPLOADURL: 'http://42.180.188.17:11211/upload/image', //测试 // UPLOADURL: 'http://42.180.188.17:11211/upload/image', //测试
// FILEURL: 'http://42.180.188.17:11211/image/', //测试 // FILEURL: 'http://42.180.188.17:11211/image/', //测试
BASEURL: baseUrl ? // BASEURL: baseUrl ?
baseUrl : window.location.protocol + "//" + window.location.host + "/", //正式环境 // baseUrl : window.location.protocol + "//" + window.location.host + "/", //正式环境
UPLOADURL: window.location.protocol + "//" + window.location.host + "/upload/image", //正式环境 // UPLOADURL: window.location.protocol + "//" + window.location.host + "/upload/image", //正式环境
FILEURL: window.location.protocol + "//" + window.location.host + "/image/", //正式环境 // FILEURL: window.location.protocol + "//" + window.location.host + "/image/", //正式环境
// // WORKFLOWURL: 'http://47.93.215.234:19998/#/workspace/forms',//鞍钢平台工作流地址(弃用) // // WORKFLOWURL: 'http://47.93.215.234:19998/#/workspace/forms',//鞍钢平台工作流地址(弃用)
// // WORKFLOWURL: 'http://47.93.215.234:19098/#/workspace/forms',//鞍钢测试平台工作流地址(弃用) // // WORKFLOWURL: 'http://47.93.215.234:19098/#/workspace/forms',//鞍钢测试平台工作流地址(弃用)
// WORKFLOWURL: 'http://42.180.188.17:19998/#/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', //敦煌线上 // UPLOADURL: 'http://gszhdz.crpower.com.cn:9809/upload/image', //敦煌线上
// FILEURL: 'http://gszhdz.crpower.com.cn:9809/image/', //敦煌线上 // FILEURL: 'http://gszhdz.crpower.com.cn:9809/image/', //敦煌线上
// UPLOADURL: 'http://192.168.34.221:8111/upload/image', //演示平台 雄本地 UPLOADURL: 'http://192.168.34.221:8111/upload/image', //演示平台 雄本地
// FILEURL: 'http://192.168.34.221:8111/image/', //演示平台 雄本地 FILEURL: 'http://192.168.34.221:8111/image/', //演示平台 雄本地
// UPLOADURL: 'http://jxj.zhgdyun.com:100/upload/image', //演示平台 // UPLOADURL: 'http://jxj.zhgdyun.com:100/upload/image', //演示平台
// FILEURL: 'http://jxj.zhgdyun.com:100/image/', //演示平台 // FILEURL: 'http://jxj.zhgdyun.com:100/image/', //演示平台

View File

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

View File

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

View File

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

View File

@ -22,17 +22,40 @@
<div class="header-video" @click.stop="playAllVideo(treeData)"></div> <div class="header-video" @click.stop="playAllVideo(treeData)"></div>
</el-tooltip> --> </el-tooltip> -->
</div> </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"> <div class="treeBox">
<!-- :class="{ <!-- :class="{
control_scroll: videoConfigInfo.enableNotPlugin == 1 && isDragging, control_scroll: videoConfigInfo.enableNotPlugin == 1 && isDragging,
control_scrolloff: control_scrolloff:
videoConfigInfo.enableNotPlugin == 1 && !isDragging, videoConfigInfo.enableNotPlugin == 1 && !isDragging,
}" --> }" -->
<vue-scroll v-if="treeData.length > 0 || videoType != 1"> <vue-scroll v-if="filterTreeData.length > 0 || videoType != 1">
<el-tree <el-tree
:data="treeData" :data="filterTreeData"
@node-click="handleNodeClick" @node-click="handleNodeClick"
:props="defaultProps" :props="defaultProps"
:filter-node-method="filterNode"
node-key="itemId" node-key="itemId"
ref="tree" ref="tree"
> >
@ -66,9 +89,10 @@
content="播放项目所有视频" content="播放项目所有视频"
placement="top" placement="top"
> >
<!-- data.type == 'project' && -->
<span <span
class="playAllBtn" class="playAllBtn"
v-show="data.type == 'project' && data.children.length > 0" v-if="data.children.length > 0"
@click.stop="playAllVideo(data.children)" @click.stop="playAllVideo(data.children)"
></span> ></span>
</el-tooltip> </el-tooltip>
@ -117,7 +141,7 @@
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import { getstandardDevListApi } from "@/assets/js/api/markingRoom"; import { getstandardDevListApi } from "@/assets/js/api/markingRoom";
import { import {
getTreeVideoProjectListApi, getTreeVideoProjectListApi,
@ -142,6 +166,10 @@ export default {
data() { data() {
return { return {
treeData: [], treeData: [],
searchInfo: {
videoName: "",
deviceState: 0,
},
defaultProps: { defaultProps: {
children: "children", children: "children",
label: "name", label: "name",
@ -158,6 +186,7 @@ export default {
gaugeValue: 10, gaugeValue: 10,
isDragging: false, isDragging: false,
shrinkCloseFlag: false, shrinkCloseFlag: false,
defaultExpand: false,
}; };
}, },
mounted() { mounted() {
@ -165,6 +194,26 @@ export default {
this.loadData(); this.loadData();
}, },
methods: { 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() { shrinkCloseFlagFn() {
this.shrinkCloseFlag = !this.shrinkCloseFlag; this.shrinkCloseFlag = !this.shrinkCloseFlag;
this.$emit("shrinkCloseChange", this.shrinkCloseFlag); this.$emit("shrinkCloseChange", this.shrinkCloseFlag);
@ -197,6 +246,10 @@ export default {
this.markRoomDevList = res.result; this.markRoomDevList = res.result;
}); });
}, },
onRefresh() {
this.searchInfo.videoName = "";
// this.loadData();
},
loadData() { loadData() {
console.log(isDockingToWoer); console.log(isDockingToWoer);
console.log(this.$props.videoSn); console.log(this.$props.videoSn);
@ -459,8 +512,51 @@ export default {
data.allvideolist 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: { watch: {
"searchInfo.videoName": {
handler(val) {
this.$refs.tree.filter(val);
},
deep: true,
},
selectPlayVideoInfo: { selectPlayVideoInfo: {
handler(val) { handler(val) {
console.log("进来了", val); console.log("进来了", val);
@ -472,6 +568,79 @@ export default {
}; };
</script> </script>
<style lang="less" scoped> <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 { .top-container {
height: 100%; height: 100%;
background: linear-gradient(180deg, #082a68 0%, #001e53 100%); background: linear-gradient(180deg, #082a68 0%, #001e53 100%);
@ -703,7 +872,7 @@ export default {
// margin-right: 12px; // margin-right: 12px;
} }
.treeBox { .treeBox {
height: calc(100% - 78px); height: calc(100% - 78px - 103px);
// width: 306px; // width: 306px;
// margin-left: -15px; // margin-left: -15px;
} }

View File

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

View File

@ -51,6 +51,23 @@
<el-radio :label="0"></el-radio> <el-radio :label="0"></el-radio>
</el-radio-group> </el-radio-group>
</div> </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>
<div class="table_wrap whiteBlock"> <div class="table_wrap whiteBlock">
<vue-scroll> <vue-scroll>
@ -249,6 +266,7 @@ export default {
return { return {
radioVal: 0, radioVal: 0,
isMobileAttendance: 0, isMobileAttendance: 0,
ignoreWorkerMonthAttendanceInOut: 0,
title: "", title: "",
dialogVisible: false, dialogVisible: false,
workerList: [], workerList: [],
@ -326,6 +344,7 @@ export default {
}); });
if (res.success) { if (res.success) {
this.isMobileAttendance = res.result[0].isMobileAttendance || 0; this.isMobileAttendance = res.result[0].isMobileAttendance || 0;
this.ignoreWorkerMonthAttendanceInOut = res.result[0].ignoreWorkerMonthAttendanceInOut || 0;
} }
}, },
async changeConfig() { async changeConfig() {
@ -337,6 +356,15 @@ export default {
this.$message.success("操作成功"); this.$message.success("操作成功");
} }
}, },
async changeMobileAttendance() {
const res = await editProjectConfigListApi({
projectSn: this.$store.state.projectSn,
ignoreWorkerMonthAttendanceInOut: this.ignoreWorkerMonthAttendanceInOut,
});
if (res.success) {
this.$message.success("操作成功");
}
},
// //
operateClear(){ operateClear(){
// promptToDelete tips determine cancel // promptToDelete tips determine cancel