flx:修复bug 新金湾

This commit is contained in:
Rain_ 2025-08-22 18:04:55 +08:00
parent 3aa2ec1aa7
commit 5353c9d16a
9 changed files with 233 additions and 51 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 B

View File

@ -21,18 +21,34 @@
style="width: 100%; height: calc(100% - 49px)"
></InspectionLedger> -->
<AttendanceOverview
v-permission="{
key: 'attendanceOverview',
menuPath: '/project/labor/allAttendanceManage',
}"
v-if="activeIndex == '1'"
style="width: 100%; height: calc(100% - 49px)"
></AttendanceOverview>
<DayAttendanceReport
v-permission="{
key: 'dayAttendanceReport',
menuPath: '/project/labor/allAttendanceManage',
}"
v-if="activeIndex == '2'"
style="width: 100%; height: calc(100% - 49px)"
></DayAttendanceReport>
<MonthAttendanceReport
v-permission="{
key: 'monthAttendanceReport',
menuPath: '/project/labor/allAttendanceManage',
}"
v-if="activeIndex == '3'"
style="width: 100%; height: calc(100% - 49px)"
></MonthAttendanceReport>
<PunchCardRecord
v-permission="{
key: 'punchCardRecord',
menuPath: '/project/labor/allAttendanceManage',
}"
v-if="activeIndex == '4'"
style="width: 100%; height: calc(100% - 49px)"
></PunchCardRecord>

View File

@ -470,7 +470,7 @@ export default {
tableData: [],
countWorkerDailyInfo: [
{
title: "当日进场",
title: "当然在职",
countNum: 0,
content: "当日在职人数之和",
},
@ -674,7 +674,7 @@ export default {
// res.result
this.countWorkerDailyInfo = [
{
title: "当日进场",
title: "当然在职",
countNum: res.result.inServiceCount,
content: "当日在职人数之和",
},

View File

@ -78,6 +78,8 @@
>
<span style="margin-right: 10px" v-if="data.children.length > 0"
>({{ data.children.length }})</span
><span style="margin-right: 10px" v-else
>({{ data.workerNum || 0 }})</span
>
</div>
</el-tree>

View File

@ -580,8 +580,19 @@ export default {
// startDate: this.exportSettingInfo.startDate[0],
// endDate: this.exportSettingInfo.startDate[1],
projectSn: this.projectSn,
inserviceType: 1,
workerName: this.queryParams.workerName,
startTime: this.queryParams.constructionTime[0],
endTime: this.queryParams.constructionTime[1],
idList: this.$refs.multipleTable.selection.map((item) => item.id),
};
const categoryObj = {
1: "enterpriseId",
2: "departmentId",
3: "teamId",
};
requestData[categoryObj[this.riskListDetail.category]] =
this.riskListDetail.originalId || "";
fetch(
this.$http.defaults.baseURL + "xmgl/workerAttendance/exportXls",
{

View File

@ -130,8 +130,7 @@
<el-checkbox
@change="handleQueryChange"
v-model="specialWorkerInfo.includingSubordinatesChecked"
></el-checkbox
>
></el-checkbox>
</div>
<div class="header_box">
<span>特殊工种</span>
@ -267,11 +266,12 @@
v-if="showTeamList && teamListData.totalDepartmentNum > 0"
style="
position: absolute;
right: 10px;
top: 35%;
font-size: 26px;
right: 4px;
top: 50%;
font-size: 20px;
cursor: pointer;
color: #999;
transform: translateY(-50%);
"
></i>
</div>
@ -1492,6 +1492,23 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="考勤组" prop="attendanceGroupV2Id">
<el-select
v-model="personForm.attendanceGroupV2Id"
:placeholder="$t('message.laborMange.pleaseChoose')"
style="width: 100%"
:disabled="titleType == 'detail'"
>
<el-option
v-for="(item, index) in workerAttendanceGroupList"
:key="index"
:label="item.groupName"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-col>
<el-col :span="8">
@ -2296,6 +2313,7 @@ import {
getDangongWorkerFaceStatusPageList,
xmglXzHikvisionSyncRetryAPI,
checkfaceHikvisionApi,
getWorkerAttendanceGroupV2ListApi,
} from "@/assets/js/api/laborPerson";
import { selectUserDevAuthorityByUserIdApi } from "@/assets/js/api/configManage";
import { getProjectConfigListApi } from "@/assets/js/api/project.js";
@ -2436,6 +2454,7 @@ export default {
locationCardno: "",
personMail: "",
workerNature: "",
attendanceGroupV2Id: "",
},
//
personFormRules: this.$t("message.laborMange.personFormRules"),
@ -2525,6 +2544,7 @@ export default {
topicName: "topic",
userId: "",
workerNatureList: [],
workerAttendanceGroupList: [],
};
},
created() {
@ -2560,6 +2580,7 @@ export default {
this.getUGroupDevList();
this.getProjectConfig();
this.getWorkerNatureList();
this.getWorkerAttendanceGroupV2List();
},
beforeDestroy() {
if (client) {
@ -2584,6 +2605,16 @@ export default {
},
},
methods: {
getWorkerAttendanceGroupV2List() {
getWorkerAttendanceGroupV2ListApi({
projectSn: this.$store.state.projectSn,
// ruleIdIsNullOrRuleId: 1,
}).then((res) => {
if (res.code == 200) {
this.workerAttendanceGroupList = res.result;
}
});
},
getSpecialWorkerTypeList() {
getWorkerTypeList({
projectSn: this.projectSn,
@ -3279,6 +3310,7 @@ export default {
ufaceDevGroupId: [],
personSerial: "",
workerNature: "",
attendanceGroupV2Id: "",
enterDate: dayjs().format("YYYY-MM-DD"),
};
if (this.attendRulesList.length > 0) {
@ -3530,6 +3562,7 @@ export default {
ufaceDevGroupId: [],
personSerial: "",
workerNature: "",
attendanceGroupV2Id: "",
};
this.getUfaceDevList();
// this.goTwo()
@ -4418,7 +4451,7 @@ export default {
display: flex;
.header_box1 {
font-size: 14px;
color: #272D45;
color: #272d45;
margin-right: 50px;
> span {
margin-right: 13px;
@ -4426,7 +4459,7 @@ export default {
}
.header_box {
display: flex;
color: #272D45;
color: #272d45;
font-weight: 400;
font-size: 14px;
margin-right: 30px;

View File

@ -21,6 +21,7 @@
</el-form-item>
<el-form-item label="日期范围" prop="constructionTime">
<el-date-picker
@change="initQuery"
value-format="yyyy-MM-dd"
v-model="queryParams.constructionTime"
type="daterange"
@ -52,13 +53,14 @@
</div>
</div>
<div>
<el-radio-group v-model="queryParams.isType" size="medium">
<el-radio-group @change="getWorkerDailyAttendancePageForWorkerByDate" v-model="queryParams.isType" size="medium">
<el-radio-button :label="1">上下午打卡</el-radio-button>
<el-radio-button :label="2">进出场打卡</el-radio-button>
</el-radio-group>
</div>
</div>
<el-table
class="tables"
:data="dataList"
row-key="id"
:expand-row-keys="expands"
@ -69,27 +71,26 @@
<template slot="header" slot-scope="scope">
<div class="table-header">
<div>日期</div>
<!-- <el-popover
<el-popover
v-model="isParentVisible"
class="popover-bottom"
placement="bottom"
width="200"
trigger="click"
>
<div class="popover-box">
<el-checkbox-group v-model="queryParams.checkList">
<el-checkbox-group v-model="queryParams.attendanceStatus">
<el-checkbox label="正常出勤"></el-checkbox>
<el-checkbox label="异常出勤"></el-checkbox>
<el-checkbox label="未出勤"></el-checkbox>
</el-checkbox-group>
<el-button
icon="el-icon-circle-check"
type="primary"
size="medium"
>确定</el-button
>
<div class="box-btn">
<el-button @click="isParentVisible = false" size="mini">取消</el-button>
<el-button @click="hlandeQuery" type="primary" size="mini">确定</el-button>
</div>
<div slot="reference">图片</div>
</el-popover> -->
</div>
<div class="screen-icon" slot="reference"></div>
</el-popover>
</div>
</template>
</el-table-column>
@ -121,10 +122,17 @@
show-overflow-tooltip
>
<template slot-scope="scope">
<span v-if="scope.row.firstTimeAm">{{
<div class="box-time">
<i v-if="scope.row.firstTimeAm" class="el-icon-success"></i>
<i v-else class="el-icon-error"></i>
<span>{{
scope.row.firstTimeAm ? scope.row.firstTimeAm : "…"
}}</span>
</div>
<!-- <span v-if="scope.row.firstTimeAm">{{
scope.row.firstTimeAm
}}</span>
<span v-else class="attendance-fail"></span>
<span v-else class="attendance-fail"></span> -->
</template>
</el-table-column>
<el-table-column
@ -134,8 +142,13 @@
show-overflow-tooltip
>
<template slot-scope="scope">
<span v-if="scope.row.endTimePm">{{ scope.row.endTimePm }}</span>
<span v-else class="attendance-fail"></span>
<div class="box-time">
<i v-if="scope.row.endTimePm" class="el-icon-success"></i>
<i v-else class="el-icon-error"></i>
<span>{{ scope.row.endTimePm ? scope.row.endTimePm : "…" }}</span>
</div>
<!-- <span v-if="scope.row.endTimePm">{{ scope.row.endTimePm }}</span>
<span v-else class="attendance-fail"></span> -->
</template>
</el-table-column>
</template>
@ -147,10 +160,17 @@
show-overflow-tooltip
>
<template slot-scope="scope">
<span v-if="scope.row.firstInTime">{{
<div class="box-time">
<i v-if="scope.row.firstInTime" class="el-icon-success"></i>
<i v-else class="el-icon-error"></i>
<span>{{
scope.row.firstInTime ? scope.row.firstInTime : "…"
}}</span>
</div>
<!-- <span v-if="scope.row.firstInTime">{{
scope.row.firstInTime
}}</span>
<span v-else class="attendance-fail"></span>
<span v-else class="attendance-fail"></span> -->
</template>
</el-table-column>
<el-table-column
@ -160,8 +180,15 @@
show-overflow-tooltip
>
<template slot-scope="scope">
<span v-if="scope.row.endOutTime">{{ scope.row.endOutTime }}</span>
<span v-else class="attendance-fail"></span>
<div class="box-time">
<i v-if="scope.row.endOutTime" class="el-icon-success"></i>
<i v-else class="el-icon-error"></i>
<span>{{
scope.row.endOutTime ? scope.row.endOutTime : "…"
}}</span>
</div>
<!-- <span v-if="scope.row.endOutTime">{{ scope.row.endOutTime }}</span>
<span v-else class="attendance-fail"></span> -->
</template>
</el-table-column>
</template>
@ -169,7 +196,9 @@
<template slot-scope="props">
<div class="expand-box" v-if="viewDayAttendanceList.length > 0">
<div v-for="(item, index) in viewDayAttendanceList">
<span :class="item.passType == 1 ? 'passbox1' : 'passbox2'">({{ item.passType == 1 ? '进场' : '出场'}})</span>{{ item.createTime }}
<span :class="item.passType == 1 ? 'passbox1' : 'passbox2'"
>({{ item.passType == 1 ? "进场" : "出场" }})</span
>{{ item.createTime }}
<span v-if="index != viewDayAttendanceList.length - 1"></span>
</div>
<!-- viewDayAttendanceList -->
@ -233,7 +262,7 @@ export default {
calType: 1,
isType: 2,
tiemType: 2,
checkList: [],
attendanceStatus: [],
},
countWorkerDailyInfo: [
{
@ -255,11 +284,13 @@ export default {
dataList: [],
expands: [],
viewDayAttendanceList: [],
isParentVisible: false,
};
},
created() {
// this.pageSizeList = JSON.parse(JSON.stringify(this.$store.state.PAGESIZRS));
this.projectSn = this.$store.state.projectSn;
this.initQuery();
},
methods: {
expandRow(row) {
@ -279,7 +310,12 @@ export default {
queryTime: row.attendanceDate,
}).then((res) => {
if (res.code == 200) {
this.viewDayAttendanceList = res.result;
this.viewDayAttendanceList = res.result.map((item) => {
return {
...item,
createTime: dayjs(item.createTime).format("HH:mm:ss"),
};
});
}
});
},
@ -300,6 +336,9 @@ export default {
dayjs().format("YYYY-MM-DD"),
];
}
this.initQuery();
},
initQuery() {
this.getCountWorkerDailyAttendanceStatisticsV2();
this.getWorkerDailyAttendancePageForWorkerByDate();
},
@ -332,6 +371,11 @@ export default {
}
});
},
hlandeQuery(){
this.queryParams.pageNo = 1;
this.getWorkerDailyAttendancePageForWorkerByDate();
this.isParentVisible = false;
},
//
getWorkerDailyAttendancePageForWorkerByDate() {
let data = {
@ -342,6 +386,8 @@ export default {
attendanceDate_begin: this.queryParams.constructionTime[0],
attendanceDate_end: this.queryParams.constructionTime[1],
personSn: this.courseWriterInfo.personSn,
attendanceStatus: this.queryParams.attendanceStatus.join(','),
downloadType: this.queryParams.isType,
};
getWorkerDailyAttendancePageForWorkerByDateApi(data).then((res) => {
console.log(res);
@ -362,7 +408,6 @@ export default {
this.getWorkerDailyAttendancePageForWorkerByDate();
this.getCountWorkerDailyAttendanceStatisticsV2();
},
immediate: true,
deep: true,
},
},
@ -370,29 +415,68 @@ export default {
</script>
<style lang="less">
.el-popover {
width: calc(111px - 24px) !important;
width: calc(125px - 24px) !important;
min-width: initial;
}
.screen-icon {
width: 16px;
height: 16px;
background-color: #5181F6;
background-image: url(~@/assets/images/laborManage/screen-icon.png);
background-size: 75% 75%;
background-repeat: no-repeat;
background-position: center center;
cursor: pointer;
border-radius: 50%;
margin-left: 7px;
}
.popover-box {
// width: 111px;
font-size: 14px;
.el-checkbox-group .el-checkbox:not(:first-child) {
margin-top: 13px;
margin-top: 10px;
}
.box-btn {
margin-top: 10px;
display: flex;
align-items: center;
justify-content: space-between;
> .el-button {
margin-top: 13px;
margin-left: 0;
padding: 5px 10px;
}
}
}
</style>
<style lang="less" scoped>
.tables {
min-height: initial;
}
.box-time {
display: flex;
align-items: center;
justify-content: center;
font-size: 14px;
.el-icon-error {
color: #ff0000;
}
.el-icon-success {
color: #00af66;
}
> span {
margin-left: 5px;
color: #272d45;
}
}
.expand-box {
display: flex;
> div {
font-size: 14px;
color: #272D45;
color: #272d45;
.passbox1 {
color: #4181fe;
}
.passbox2 {
color: #FFA347;
color: #ffa347;
}
}
}

View File

@ -227,11 +227,12 @@
v-if="showTeamList && teamListData.totalTeamNum > 0"
style="
position: absolute;
right: 10px;
top: 35%;
font-size: 26px;
right: 4px;
top: 50%;
font-size: 20px;
cursor: pointer;
color: #999;
transform: translateY(-50%);
"
></i>
</div>
@ -664,7 +665,7 @@
>
<img
src="@/assets/images/laborManage/exit-icon.png"
style="margin-right: 5px;transform: rotate(180deg);"
style="margin-right: 5px; transform: rotate(180deg)"
/>
<span>{{ $t("message.laborMange.toPlayAgain") }}</span>
</div>
@ -1806,6 +1807,23 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="考勤组" prop="attendanceGroupV2Id">
<el-select
v-model="personForm.attendanceGroupV2Id"
:placeholder="$t('message.laborMange.pleaseChoose')"
style="width: 100%"
:disabled="titleType == 'detail'"
>
<el-option
v-for="(item, index) in workerAttendanceGroupList"
:key="index"
:label="item.groupName"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<div class="type-change">
<el-radio-group v-model="typeRadio">
@ -2556,6 +2574,7 @@ import {
getDangongWorkerFaceStatusPageList,
checkfaceHikvisionApi,
onBatchDeletionApi,
getWorkerAttendanceGroupV2ListApi
} from "@/assets/js/api/laborPerson";
import {
selectUserDevAuthorityByUserIdApi,
@ -2737,6 +2756,7 @@ export default {
locationCardno: "", //
personMail: "",
workerNature: "",
attendanceGroupV2Id: "",
},
//
personFormRules: this.$t("message.laborMange.personFormRules2"),
@ -2829,6 +2849,7 @@ export default {
topicName: "topic",
userId: "",
workerNatureList: [],
workerAttendanceGroupList: [],
};
},
created() {
@ -2863,6 +2884,7 @@ export default {
this.getUGroupDevList();
this.getProjectConfig();
this.getWorkerNatureList();
this.getWorkerAttendanceGroupV2List();
},
beforeDestroy() {
if (client) {
@ -2887,6 +2909,16 @@ export default {
},
},
methods: {
getWorkerAttendanceGroupV2List() {
getWorkerAttendanceGroupV2ListApi({
projectSn: this.$store.state.projectSn,
// ruleIdIsNullOrRuleId: 1,
}).then((res) => {
if (res.code == 200) {
this.workerAttendanceGroupList = res.result;
}
});
},
//
async getWorkerNatureList() {
const res = await getDictionaryItemApi({
@ -3858,6 +3890,7 @@ export default {
ufaceDevGroupId: [],
personSerial: "",
workerNature: "",
attendanceGroupV2Id: "",
};
if (this.attendRulesList.length > 0) {
this.personForm.ruleId = this.attendRulesList[0].id;
@ -4109,6 +4142,7 @@ export default {
ufaceDevGroupId: [],
personSerial: "",
workerNature: "",
attendanceGroupV2Id: "",
};
this.getUfaceDevList();
setTimeout(() => {

View File

@ -86,6 +86,7 @@
display: flex;
flex-direction: column;
justify-content: center;
margin-bottom: 10px;
div{
overflow: hidden;
text-overflow: ellipsis;
@ -147,6 +148,7 @@
float: left;
z-index: 1000;
position: absolute;
top: 10px;
left: 110px;
// top:7px;
background: #fff;
@ -156,7 +158,7 @@
// padding-right: 12px;
}
.height_79{
height: 79px;
height: 70px;
}
}
.el-form_item {