flx:修改新金湾

This commit is contained in:
Rain_ 2025-08-21 17:57:40 +08:00
parent e63da6ee01
commit 58faa5a460
23 changed files with 655 additions and 271 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 476 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 227 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 177 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 182 B

View File

@ -192,12 +192,12 @@ export default {
name: "selectedPersonnelAccount",
props: {
value: {
type: [String, Array],
default: [], //
type: [Array, String, Number],
default: () => [], //
},
enterpriseIds: {
type: Array,
default: [],
default: () => [],
}, // id,
enterpriseFlag: {
type: Boolean,
@ -430,7 +430,7 @@ export default {
departmentTeamName: this.dealForm.departmentTeamName,
};
getProjectChilderSystemUserPageListApi(data).then((res) => {
console.log(res);
console.log(res, this.childValue);
if (res.code == 200) {
this.tableData = res.result.records;
this.dealForm.total = res.result.total;
@ -492,7 +492,7 @@ export default {
this.childValue instanceof Array
? this.childValue.join(",")
: this.childValue;
if (!userIds) return;
if (!userIds) return this.selectedList = [];
let data = {
projectSn: this.$store.state.projectSn,
userIds: userIds,

View File

@ -254,6 +254,9 @@ export default {
</script>
<style lang="less" scoped>
/deep/ .el-collapse {
.el-collapse-item__arrow {
margin-right: 0;
}
.collapse-box1 {
display: flex;
font-size: 13px;

View File

@ -151,7 +151,7 @@
<div>
<div>
<span>风力</span>
<template v-if="dealType == 3 || dateTimeUp(dealForm.date)">
<template v-if="(dealType == 3 || dateTimeUp(dealForm.date)) && dealTypeShow">
{{ dealForm.weatherJson.win_speed }}
</template>
<el-select
@ -171,7 +171,7 @@
</div>
<div>
<span>气温</span>
<template v-if="dealType == 3 || dateTimeUp(dealForm.date)">
<template v-if="(dealType == 3 || dateTimeUp(dealForm.date)) && dealTypeShow">
{{ dealForm.weatherJson.tem_day }}
</template>
<el-input-number
@ -186,7 +186,7 @@
</div>
<div>
<span>天气</span>
<template v-if="dealType == 3 || dateTimeUp(dealForm.date)">
<template v-if="(dealType == 3 || dateTimeUp(dealForm.date)) && dealTypeShow">
{{ dealForm.weatherJson.wea }}
</template>
<el-input
@ -689,6 +689,7 @@ export default {
technicalBriefingMaterial: [],
weatherJson: {},
},
dealTypeShow: true,
dealFormRules: {
ocrType: [
{
@ -871,6 +872,8 @@ export default {
if (res.code == 200) {
this.dealForm.weatherJson = res.result;
}
}).catch((err) => {
this.dealTypeShow = false;
});
},
//

View File

@ -55,7 +55,7 @@ export default {
},
data() {
return {
activeIndex: "3",
activeIndex: "1",
};
},
methods: {

View File

@ -321,15 +321,16 @@ export default {
],
yAxis: [
{
type: "value",
splitNumber: 5,
type: "value",
axisLabel: {
formatter: "{value}",
},
},
{
max: 100,
min: 0,
type: "value",
splitNumber: 5,
axisLabel: {
formatter: "{value} %",
},
@ -603,7 +604,7 @@ export default {
}
}
.box-image2 {
background-color: #99DDFF;
background-color: #99ddff;
> div {
width: 50px;
height: 50px;

View File

@ -78,7 +78,7 @@
<div class="table-header">
<div class="table-header_left">
统计列表
<span>(当天工/工口无法计算出最终的,由第二天00:00G计算显示)</span>
<span>(当天工/工日无法计算出最终值, 由第二天00:00计算显示)</span>
</div>
<div class="table-header_right">
<div>
@ -112,15 +112,16 @@
</div>
</div>
</div>
<!-- @row-click="handleSelectionChange" -->
<el-table
ref="multipleTable"
:data="tableData"
style="width: 100%"
row-key="id"
class="tables"
height="calc(100% - 64px - 116px - 112px)"
max-height="calc(100% - 64px - 116px - 112px)"
@row-click="handleSelectionChange"
height="calc(100% - 64px - 78px - 122px)"
max-height="calc(100% - 64px - 78px - 122px)"
>
<el-table-column
type="selection"
@ -132,7 +133,11 @@
align="center"
label="姓名"
show-overflow-tooltip
></el-table-column>
>
<template slot-scope="scope">
<span style="cursor: pointer;" @click="handleSelectionChange(scope.row)">{{ scope.row.workerName }}</span>
</template>
</el-table-column>
<el-table-column
prop="deptName"
align="center"
@ -364,12 +369,12 @@
:model="exportSettingInfo"
:rules="exportSettingInfoRules"
size="medium"
label-width="210px"
label-width="100px"
class="exportSettingInfo"
>
<el-form-item label="选择日期" prop="value1">
<el-form-item label="选择日期" prop="startDate">
<el-date-picker
v-model="exportSettingInfo.value1"
v-model="exportSettingInfo.startDate"
type="daterange"
value-format="yyyy-MM-dd"
range-separator="至"
@ -378,62 +383,36 @@
>
</el-date-picker>
</el-form-item>
<el-form-item label="导出纬度" prop="radio1">
<el-radio-group v-model="exportSettingInfo.radio1">
<el-radio :label="1">按项目</el-radio>
<el-radio :label="2">按参建单位</el-radio>
<el-radio :label="3">按班组/部门</el-radio>
<el-radio :label="4">按人员</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item
v-if="exportSettingInfo.radio1 == 1"
label="展示类型"
prop="ocrType"
prop="downloadType"
>
<el-select
v-model="exportSettingInfo.ocrType"
v-model="exportSettingInfo.downloadType"
placeholder="请选择"
filterable
>
<el-option
v-for="(item, index) in videoTypeList"
v-for="(item, index) in downloadTypeList"
:key="item.id"
:label="item.title"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
<template v-else-if="exportSettingInfo.radio1 == 2">
<el-form-item label="参建单位" prop="ocrType">
<el-select
v-model="exportSettingInfo.ocrType"
placeholder="请选择"
filterable
>
<el-option
v-for="(item, index) in videoTypeList"
:key="item.id"
:label="item.title"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="有效工时" prop="ocrType">
<el-input-number
:controls="false"
v-model="exportSettingInfo.ocrType"
controls-position="right"
:min="0"
></el-input-number>
</el-form-item>
</template>
</el-form>
<div slot="footer" style="text-align: center">
<el-button type="primary" @click="exportSettingDialog = false"
<el-button
icon="el-icon-circle-close"
@click="exportSettingDialog = false"
>取消</el-button
>
<el-button @click="onSumbit">确定</el-button>
<el-button
icon="el-icon-circle-check"
type="primary"
@click="onSumbit"
>确定</el-button
>
</div>
</div>
</el-dialog>
@ -525,10 +504,35 @@ export default {
//
exportSettingDialog: false,
exportSettingInfo: {
radio1: 1,
value1: [],
startDate: [],
downloadType: "",
},
exportSettingInfoRules: {},
exportSettingInfoRules: {
startDate: [
{
required: true,
message: "请选择日期",
trigger: "change",
},
],
downloadType: [
{
required: true,
message: "请选择展示类型",
trigger: "change",
},
],
},
downloadTypeList: [
{
id: 1,
title: "上下午打卡",
},
{
id: 2,
title: "进出场打卡",
},
],
videoTypeList: [],
};
},
@ -537,7 +541,55 @@ export default {
},
mounted() {},
methods: {
onSumbit() {},
onSumbit() {
this.$refs.exportSettingInfo.validate((valid) => {
if (valid) {
const requestData = {
...this.exportSettingInfo,
startDate: this.exportSettingInfo.startDate[0],
endDate: this.exportSettingInfo.startDate[1],
projectSn: this.projectSn,
}
fetch(this.$http.defaults.baseURL + 'xmgl/workerDailyAttendanceStatisticsV2/exportWorkerDailyAttendancesStaticsByDateXls', {
method: "post",
headers: {
Authorization: this.$store.state.userInfo.token,
"Content-Type": "application/json", // JSON
},
body: JSON.stringify(requestData),
})
.then((response) => {
//
if (!response.ok) {
throw new Error("导出失败");
}
return response.blob();
})
.then((blob) => {
console.log("导出成功");
//
const url = window.URL.createObjectURL(blob);
// <a>
const link = document.createElement("a");
link.href = url;
link.download = '考勤日报.xlsx'; //
//
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
// URL
window.URL.revokeObjectURL(url);
//
// 使blob
this.exportSettingDialog = false; //
})
.catch((error) => {
//
console.error(error);
});
}
});
},
//
handleExportSetting() {
this.exportSettingDialog = true;
@ -651,7 +703,7 @@ export default {
data.containEnterpriseId = this.riskListDetail.originalId || "";
delete data.enterpriseId;
}
if (this.queryParams.exitPersonnelChecked) {
if (!this.queryParams.exitPersonnelChecked) {
data.inserviceType = 1;
}

View File

@ -2,7 +2,13 @@
<div class="fullHeight">
<div class="areaTreeBox fullHeight" id="videoTreeBox">
<div class="areaTreeInner whiteBlock fullHeight">
<p style="font-size: 14px">共有{{enterpriseDepartmentTeamInfo.enterpriseNum || 0}}个参建单位{{enterpriseDepartmentTeamInfo.teamNum || 0}}个班组{{enterpriseDepartmentTeamInfo.departmentNum || 0}}个部门</p>
<p style="font-size: 14px">
共有{{
enterpriseDepartmentTeamInfo.enterpriseNum || 0
}}个参建单位{{
enterpriseDepartmentTeamInfo.teamNum || 0
}}个班组{{ enterpriseDepartmentTeamInfo.departmentNum || 0 }}个部门
</p>
<el-form
size="medium"
class="flex-box"
@ -55,7 +61,7 @@
>
<span
style="
width: 56%;
width: 75%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
@ -66,8 +72,13 @@
'color_333 font-bold': data.type == 1,
}"
:title="data.name"
><span v-if="data.name != '全部组织'"
>{{ data.typeName }}</span
>{{ data.name }}</span
>
<span style="margin-right: 10px" v-if="data.children.length > 0"
>({{ data.children.length }})</span
>
</div>
</el-tree>
</vue-scroll>
@ -111,7 +122,7 @@ export default {
projectSn: "",
riskListDetailInfo: [],
companyTypeList: [],
enterpriseDepartmentTeamInfo:{},
enterpriseDepartmentTeamInfo: {},
};
},
created() {
@ -159,17 +170,18 @@ export default {
projectSn: this.$store.state.projectSn,
}).then((res) => {
if (res.success) {
this.level1CompanyData = res.result;
if (
this.level1CompanyData.length > 0 &&
this.level1CompanyData[0].children.length > 0
) {
this.$nextTick(() => {
const resultInfo = this.level1CompanyData[0].children[0];
this.$refs.tree.setCurrentKey(resultInfo);
this.handleNodeClick(resultInfo);
});
}
this.level1CompanyData = [
{
uniqueId: "",
name: "全部组织",
children: res.result,
},
];
this.$nextTick(() => {
const resultInfo = this.level1CompanyData[0];
this.$refs.tree.setCurrentKey(resultInfo);
this.handleNodeClick(resultInfo);
});
}
});
},
@ -255,6 +267,7 @@ export default {
color: #b3b3b3;
position: relative;
border: none;
background-color: #f7f7f7;
}
> .el-button:first-child::before {
content: " ";
@ -264,7 +277,7 @@ export default {
transform: translateY(-50%);
width: 1px;
height: 90%;
background-color: #d9d9d9;
// background-color: #d9d9d9;
}
> .el-button:hover {
color: #5181f6;
@ -308,6 +321,12 @@ export default {
&.is-current > .el-tree-node__content {
background-color: rgba(81, 129, 246, 0.14);
color: #5181f6;
.el-tree-node__expand-icon {
background-image: url(~@/assets/images/laborManage/open_active.png);
}
.el-tree-node__expand-icon.expanded {
background-image: url(~@/assets/images/laborManage/packup_active.png);
}
}
}
.el-tree-node__content {
@ -341,12 +360,29 @@ export default {
}
}
.el-tree-node__expand-icon {
font-size: 16px;
padding: 0 6px;
// font-size: 16px;
// padding: 0 6px;
width: 12px;
height: 12px;
background-image: url(~@/assets/images/laborManage/open.png);
background-size: 100% 100%;
background-repeat: no-repeat;
display: inline-block;
padding: 0;
margin: 6px;
&.is-leaf {
color: transparent !important;
background-image: none !important;
}
}
.el-tree-node__expand-icon.expanded {
background-image: url(~@/assets/images/laborManage/packup.png);
transform: rotate(0deg);
}
.el-icon-caret-right:before {
display: none;
}
.treeTitle {
background-color: #f7f7f7;
margin-bottom: 10px;
@ -356,6 +392,9 @@ export default {
.custom-tree-node {
width: 100%;
position: relative;
display: flex;
align-items: center;
justify-content: space-between;
}
.custom-tree-node_icon::before {
content: "";

View File

@ -75,7 +75,7 @@
<div class="table-header_left">
统计列表
<span
>(当天工/工口无法计算出最终的,由第二天00:00G计算显示)</span
>(当天工/工日无法计算出最终值, 由第二天00:00计算显示)</span
>
</div>
</div>
@ -125,8 +125,7 @@
class="tables"
:height="`calc(100% - 64px - ${
unfoldShow ? '274px' : '0px'
} - 58px - 34px)`"
@row-click="handleSelectionChange"
} - 58px - 20px)`"
:key="itemKey"
>
<el-table-column
@ -141,7 +140,15 @@
align="center"
label="姓名"
show-overflow-tooltip
></el-table-column>
>
<template slot-scope="scope">
<span
style="cursor: pointer"
@click="handleSelectionChange(scope.row)"
>{{ scope.row.workerName }}</span
>
</template>
</el-table-column>
<el-table-column
fixed
prop="enterpriseName"
@ -242,9 +249,9 @@
label-width="100px"
class="exportSettingInfo"
>
<el-form-item label="选择日期" prop="value1">
<el-form-item label="选择日期" prop="startDate">
<el-date-picker
v-model="exportSettingInfo.value1"
v-model="exportSettingInfo.startDate"
type="daterange"
value-format="yyyy-MM-dd"
range-separator="至"
@ -253,8 +260,8 @@
>
</el-date-picker>
</el-form-item>
<el-form-item label="导出纬度" prop="radio1">
<el-radio-group v-model="exportSettingInfo.radio1">
<el-form-item label="导出维度" prop="groupByType">
<el-radio-group v-model="exportSettingInfo.groupByType">
<el-radio :label="1">按项目</el-radio>
<el-radio :label="2">按参建单位</el-radio>
<el-radio :label="3">按班组/部门</el-radio>
@ -262,42 +269,46 @@
</el-radio-group>
</el-form-item>
<el-form-item
v-if="exportSettingInfo.radio1 == 1"
v-if="
exportSettingInfo.groupByType == 1 ||
exportSettingInfo.groupByType == 3
"
label="展示类型"
prop="ocrType"
prop="downloadType"
>
<el-select
v-model="exportSettingInfo.ocrType"
v-model="exportSettingInfo.downloadType"
placeholder="请选择"
filterable
>
<el-option
v-for="(item, index) in videoTypeList"
v-for="(item, index) in downloadTypeList"
:key="item.id"
:label="item.title"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
<template v-else-if="exportSettingInfo.radio1 == 2">
<el-form-item label="参建单位" prop="ocrType">
<template v-else-if="exportSettingInfo.groupByType == 2">
<el-form-item label="参建单位" prop="enterpriseId">
<el-select
v-model="exportSettingInfo.ocrType"
placeholder="请选择"
filterable
:clearable="true"
v-model="exportSettingInfo.enterpriseId"
placeholder="请选择"
>
<el-option
v-for="(item, index) in videoTypeList"
:key="item.id"
:label="item.title"
:label="item.enterpriseName"
:value="item.id"
v-for="item in enterpriseListData"
:key="item.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="有效工时" prop="ocrType">
<el-form-item label="有效工时" prop="hourValBegin">
<el-input-number
:controls="false"
v-model="exportSettingInfo.ocrType"
v-model="exportSettingInfo.hourValBegin"
controls-position="right"
:min="0"
></el-input-number>
@ -333,10 +344,9 @@ import EnterpriseTreeLeft from "./enterpriseTreeLeft.vue";
import CourseWriter from "./courseWriter.vue";
import DayAttendanceReportDetail from "./dayAttendanceReportDetail.vue";
import {
getWorkerDailyAttendancePageByDateApi,
getCountWorkerDailyAttendancesStaticsByDateApi,
getCountWorkerDailyAttendanceByDateApi,
getEnterpriseInfoList,
} from "@/assets/js/api/laborPerson";
import { getCountWorkerDailyAttendanceByDateApi } from "@/assets/js/api/laborPerson";
import {
getViewDayAttendancePageApi,
getCountDailyAttendanceByDateRangeApi,
@ -406,11 +416,68 @@ export default {
//
exportSettingDialog: false,
exportSettingInfo: {
radio1: 1,
value1: [],
groupByType: 1,
startDate: [],
downloadType: "",
enterpriseId: "",
hourValBegin: "",
},
exportSettingInfoRules: {},
videoTypeList: [],
exportSettingInfoRules: {
startDate: [
{
required: true,
message: "请选择日期",
trigger: "change",
},
],
groupByType: [
{
required: true,
message: "请选择导出维度",
trigger: "change",
},
],
downloadType: [
{
required: true,
message: "请选择展示类型",
trigger: "change",
},
],
enterpriseId: [
{
required: true,
message: "请选择参建单位",
trigger: "change",
},
],
hourValBegin: [
{
required: true,
message: "请输入有效工时",
trigger: "blur",
},
],
},
downloadTypeList: [
{
id: 1,
title: "每日明细(上下午打卡)",
},
{
id: 2,
title: "进出场打卡",
},
{
id: 3,
title: "每日工时",
},
{
id: 4,
title: "每日明细",
},
],
enterpriseListData: [],
showTime: [],
itemKey: "",
unfoldShow: true,
@ -420,9 +487,19 @@ export default {
},
created() {
this.projectSn = this.$store.state.projectSn;
this.getCompanyList();
},
mounted() {},
methods: {
//
getCompanyList() {
let data = {
projectSn: this.projectSn,
};
getEnterpriseInfoList(data).then((res) => {
this.enterpriseListData = res.result;
});
},
handleTimeChange(diffTime, type) {
return {
onPick: (pick) => {
@ -482,7 +559,7 @@ export default {
...data,
}).then((res) => {
if (res.code == 200) {
this.countWorkerDailyList= res.result;
this.countWorkerDailyList = res.result;
this.initRiskTrendLineCharts();
}
});
@ -557,7 +634,10 @@ export default {
]),
},
data: result.map(
(item) => (this.queryParams.isType == 1 ? item.hourValTotal : item.dayValTotal) || 0
(item) =>
(this.queryParams.isType == 1
? item.hourValTotal
: item.dayValTotal) || 0
),
},
],
@ -593,13 +673,60 @@ export default {
this.myChart.resize();
});
},
onSumbit() {},
onSumbit() {
this.$refs.exportSettingInfo.validate((valid) => {
if (valid) {
const requestData = {
...this.exportSettingInfo,
startDate: this.exportSettingInfo.startDate[0],
endDate: this.exportSettingInfo.startDate[1],
projectSn: this.projectSn,
}
fetch(this.$http.defaults.baseURL + 'xmgl/workerDailyAttendanceStatisticsV2/exportWorkerDailyAttendancesStaticsByMonthXls', {
method: "post",
headers: {
Authorization: this.$store.state.userInfo.token,
"Content-Type": "application/json", // JSON
},
body: JSON.stringify(requestData),
})
.then((response) => {
//
if (!response.ok) {
throw new Error("导出失败");
}
return response.blob();
})
.then((blob) => {
console.log("导出成功");
//
const url = window.URL.createObjectURL(blob);
// <a>
const link = document.createElement("a");
link.href = url;
link.download = '考勤月报.xlsx'; //
//
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
// URL
window.URL.revokeObjectURL(url);
//
// 使blob
this.exportSettingDialog = false; //
})
.catch((error) => {
//
console.error(error);
});
}
});
},
//
handleExportSetting() {
this.exportSettingDialog = true;
},
handleSelectionChange(row) {
return;
this.multipleSelection = row;
this.safetyRiskDetailShow = 1;
},
@ -749,7 +876,7 @@ export default {
bottom: 0 !important;
}
/deep/ .el-table__fixed::before {
background-color: transparent;
background-color: transparent;
}
/deep/ .el-dialog {
margin-top: 0 !important;

View File

@ -63,7 +63,7 @@
<div class="table-header_left">
统计列表
<span
>(当天工/工口无法计算出最终的,由第二天00:00G计算显示)</span
>(当天工/工日无法计算出最终值, 由第二天00:00计算显示)</span
>
</div>
</div>
@ -113,8 +113,7 @@
class="tables"
:height="`calc(100% - 64px - ${
unfoldShow ? '274px' : '0px'
} - 58px - 34px)`"
@row-click="handleSelectionChange"
} - 58px - 20px)`"
:key="itemKey"
>
<el-table-column
@ -139,7 +138,15 @@
align="center"
label="姓名"
show-overflow-tooltip
></el-table-column>
>
<template slot-scope="scope">
<span
style="cursor: pointer"
@click="handleSelectionChange(scope.row)"
>{{ scope.row.workerName }}</span
>
</template>
</el-table-column>
<el-table-column
prop="createTime"
align="center"
@ -189,7 +196,9 @@
<el-image
style="width: 30px; height: 34px"
:src="$store.state.FILEURL + scope.row.imageUrl"
:preview-src-list="[$store.state.FILEURL + scope.row.imageUrl]"
:preview-src-list="[
$store.state.FILEURL + scope.row.imageUrl,
]"
>
</el-image>
</template>
@ -568,7 +577,6 @@ export default {
this.exportSettingDialog = true;
},
handleSelectionChange(row) {
return;
this.multipleSelection = row;
this.safetyRiskDetailShow = 1;
},

View File

@ -293,6 +293,9 @@ export default {
</script>
<style lang="less" scoped>
/deep/ .el-collapse {
.el-collapse-item__arrow {
margin-right: 0;
}
.collapse-box1 {
display: flex;
font-size: 14px;

View File

@ -737,6 +737,24 @@
<span v-else>{{ workerInfo.workernaturename }}</span>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="考勤组:" prop="attendanceGroupV2Id">
<el-select
v-if="detailInfoStatus"
v-model="workerInfo.attendanceGroupV2Id"
:placeholder="$t('message.laborMange.pleaseChoose')"
style="width: 80%"
>
<el-option
v-for="(item, index) in workerAttendanceGroupList"
:key="index"
:label="item.groupName"
:value="item.id"
></el-option>
</el-select>
<span v-else>{{ workerInfo.attendanceGroupV2Name }}</span>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12" v-if="workerInfo.personType == 1">
@ -2464,6 +2482,7 @@ import {
checkfaceHikvisionApi,
getProjectUfaceConfigInfo,
getWorkerAttendanceRuleV2ChangeLogListApi,
getWorkerAttendanceGroupV2ListApi,
} from "@/assets/js/api/laborPerson.js";
import { getDictionaryItemApi } from "@/assets/js/api/companyDiagram.js";
import { getProjectConfigListApi } from "@/assets/js/api/project.js";
@ -2614,6 +2633,8 @@ export default {
],
},
isIscDevice: false, //isc
workerNatureList: [],
workerAttendanceGroupList: [],
};
},
@ -2631,6 +2652,8 @@ export default {
this.getAttendRuleList();
this.getProjectConfig();
this.getConfig(); //
this.getWorkerAttendanceGroupV2List();
this.getWorkerNatureList();
},
mounted() {
new QRCode("workerQRcode", {
@ -2643,6 +2666,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({

View File

@ -125,14 +125,15 @@
{{ $t("message.laborMange.crewInfo") }}
</div>
<div class="right-header_box">
<div class="mr-20">
<div class="header_box1">
<span>包含下级组织</span>
<el-checkbox
@change="handleQueryChange"
v-model="specialWorkerInfo.includingSubordinatesChecked"
>是否包含下级</el-checkbox
></el-checkbox
>
</div>
<div class="mr-20 header_box">
<div class="header_box">
<span>特殊工种</span>
<el-select
size="small"
@ -140,6 +141,7 @@
:placeholder="$t('message.laborMange.pleaseChoose')"
@change="handleQueryChange"
>
<el-option label="全部" value=""></el-option>
<el-option
v-for="item in specialWorkerTypeList"
:key="item.id"
@ -149,9 +151,9 @@
</el-select>
</div>
<div class="team_number flex2">
{{ $t("message.laborMange.section") }}
{{ $t("message.laborMange.team") }}
<span class="number" style="margin-right: 50px">{{
teamListData.totalDepartmentNum
teamListData.totalTeamNum
}}</span>
{{ $t("message.laborMange.crew") }}
<span class="number">{{ teamListData.totalWorkerNum }}</span>
@ -481,7 +483,7 @@
></el-option>
</el-select>
</el-form-item> -->
<el-form-item>
<el-form-item class="el-form_item">
<!-- 查询 -->
<el-button
v-permission="{
@ -4412,16 +4414,25 @@ export default {
@import "./laborPersonCommon.less";
.right-header_box {
display: flex;
.mr-20 {
margin-right: 20px;
.header_box1 {
font-size: 14px;
color: #272D45;
margin-right: 50px;
> span {
margin-right: 13px;
}
}
.header_box {
display: flex;
color: #262d47;
color: #272D45;
font-weight: 400;
font-size: 14px;
margin-right: 30px;
.el-select {
width: 150px;
}
> span {
margin-right: 12px;
margin-right: 13px;
}
}
}
@ -4448,13 +4459,14 @@ export default {
.left_list {
width: 100%;
text-align: center;
height: calc(100% - 61px);
height: calc(100% - 60px);
.list_content {
height: calc(100% - 114px);
height: calc(100% - 106px);
overflow-y: hidden;
margin: 0 13px 60px;
background-color: #f7f7f7;
font-size: 14px;
}
.list_content:hover {
@ -4487,11 +4499,11 @@ export default {
.addFirm {
position: absolute;
bottom: 0;
bottom: 13px;
left: 0;
right: 0;
height: 45px;
line-height: 45px;
// height: 45px;
// line-height: 45px;
color: rgba(81, 129, 246, 1);
font-size: 15px;
text-align: center;
@ -4533,7 +4545,7 @@ export default {
}
.right2 {
margin-left: 11px !important;
margin-left: 16px !important;
}
.fixed_title {
@ -4581,6 +4593,13 @@ export default {
width: 90%;
padding-right: 10px;
box-sizing: border-box;
> span {
width: 100%;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
text-align: left;
}
}
/deep/ .el-tree-node__content {

View File

@ -100,14 +100,14 @@
{{ $t("message.laborMange.crewInfo") }}
</div>
<div class="right-header_box">
<div class="mr-20">
<div class="header_box1">
<span>包含下级组织</span>
<el-checkbox
@change="handleQueryChange"
v-model="specialWorkerInfo.includingSubordinatesChecked"
>是否包含下级</el-checkbox
>
></el-checkbox>
</div>
<div class="mr-20 header_box">
<div class="header_box">
<span>特殊工种</span>
<el-select
size="small"
@ -443,7 +443,7 @@
></el-option>
</el-select>
</el-form-item> -->
<el-form-item>
<el-form-item class="el-form_item">
<!-- 查询 -->
<el-button
v-permission="{
@ -471,6 +471,7 @@
key: 'rygl_drive',
menuPath: '/project/labor/personManage',
}"
plain
type="primary"
@click="exportFn"
>{{ $t("message.laborMange.export") }}</el-button
@ -636,27 +637,37 @@
>查看下发详情</el-button
>
<!-- 退场 issueTeamDialog -->
<el-button
<div
v-permission="{
key: 'rygl_exit',
menuPath: '/project/labor/personManage',
}"
size="medium"
type="text"
class="operationText"
class="operationText exit-icon"
@click="workerExitBtn(scope.row, 1)"
v-if="scope.row.inserviceType == 1"
>{{ $t("message.laborMange.bowOutWith") }}</el-button
>
<img
src="@/assets/images/laborManage/exit-icon.png"
style="margin-right: 5px"
/>
<span>{{ $t("message.laborMange.bowOutWith") }}</span>
</div>
<!-- 再次进场 -->
<el-button
size="medium"
type="text"
class="operationText"
<div
v-permission="{
key: 'rygl_exit',
menuPath: '/project/labor/personManage',
}"
class="operationText exit-icon"
@click="editWorkerInfo(scope.row, 2)"
v-if="scope.row.inserviceType == 2"
>{{ $t("message.laborMange.toPlayAgain") }}</el-button
>
<img
src="@/assets/images/laborManage/exit-icon.png"
style="margin-right: 5px;transform: rotate(180deg);"
/>
<span>{{ $t("message.laborMange.toPlayAgain") }}</span>
</div>
<!-- 删除人员 -->
<div
v-permission="{
@ -5152,18 +5163,34 @@ export default {
</script>
<style lang="less" scoped>
@import "./laborPersonCommon.less";
.exit-icon {
margin-right: 16px !important;
img {
width: 16px;
height: 16px;
}
}
.right-header_box {
display: flex;
.mr-20 {
margin-right: 20px;
.header_box1 {
font-size: 14px;
color: #272d45;
margin-right: 50px;
> span {
margin-right: 13px;
}
}
.header_box {
display: flex;
color: #262d47;
color: #272d45;
font-weight: 400;
font-size: 14px;
margin-right: 30px;
.el-select {
width: 150px;
}
> span {
margin-right: 12px;
margin-right: 13px;
}
}
}
@ -5188,12 +5215,13 @@ export default {
.left_list {
width: 100%;
text-align: center;
height: calc(100% - 61px);
height: calc(100% - 60px);
.list_content {
height: calc(100% - 114px);
height: calc(100% - 106px);
overflow-y: hidden;
margin: 0 13px 60px;
background-color: #f7f7f7;
font-size: 14px;
}
.list_content:hover {
overflow-y: auto;
@ -5221,11 +5249,11 @@ export default {
}
.addFirm {
position: absolute;
bottom: 14px;
bottom: 13px;
left: 0;
right: 0;
height: 45px;
line-height: 45px;
// height: 45px;
// line-height: 45px;
color: rgba(81, 129, 246, 1);
font-size: 15px;
text-align: center;
@ -5388,6 +5416,13 @@ export default {
width: 90%;
padding-right: 10px;
box-sizing: border-box;
> span {
width: 100%;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
text-align: left;
}
}
/deep/ .el-tree-node__content {
height: 36px;

View File

@ -15,7 +15,7 @@
display: flex;
}
.right2{
margin-left: 20px;
margin-left: 16px;
width: calc(100% - 346px);
height: 100%;
box-sizing: border-box;
@ -45,16 +45,17 @@
.team_addBtn{
display: grid;
padding: 10px 0;
width: 70px;
width: 86px;
min-width: 70px;
height: 60px;
border-radius: 8px;
height: 70px;
border-radius: 3px;
color: #3390FF;
/deep/ i{
font-size: 13px;
font-size: 16px;
}
/deep/ span{
opacity: 0.7;
// opacity: 0.7;
font-size: 12px;
display: block;
width: 100%;
margin: 0;
@ -72,16 +73,16 @@
overflow: hidden;
cursor: pointer;
.list{
width: 70px;
height: 60px;
margin-left: 12px;
width: 86px;
height: 70px;
margin-left: 20px;
box-sizing: border-box;
padding: 7px 0;
font-size: 14px;
text-align: center;
border-radius: 3px;
background-color: #dce0ec;
color: #272D45;
background-color: #F7F7F7;
color: #1A1A1A;
display: flex;
flex-direction: column;
justify-content: center;
@ -98,7 +99,7 @@
}
}
.checkedTeam{
background-color: #3390FF!important;
background-color: #5181F6!important;
color: white;
}
}
@ -158,6 +159,12 @@
height: 79px;
}
}
.el-form_item {
margin-left: 20px;
.el-button:not(:last-child) {
margin-right: 20px;
}
}
.table-header_left {
display: flex;
align-items: center;

View File

@ -43,7 +43,8 @@
</el-table-column>
<el-table-column width="200">
<template slot-scope="scope">
<div class="tableBtns" v-if="scope.row.typeName != '特殊工种'">
<!-- v-if="scope.row.typeName != '特殊工种'" -->
<div class="tableBtns">
<!-- 编辑 -->
<div
v-permission="{

View File

@ -213,7 +213,7 @@
label="排查频次"
>
<template slot-scope="scope">
{{ scope.row.checkNum ? scope.row.checkNum : "--" }}
{{ scope.row.checkNum ? scope.row.checkNum : "--" }}/{{ scope.row.checkPeriod ? checkPeriodList[scope.row.checkPeriod - 1].checkPeriodName : '--' }}
</template>
</el-table-column>
<el-table-column show-overflow-tooltip align="center" prop="remark" label="备注">

View File

@ -319,6 +319,9 @@ export default {
</script>
<style lang="less" scoped>
/deep/ .el-collapse {
.el-collapse-item__arrow {
margin-right: 0;
}
.collapse-box1 {
display: flex;
font-size: 13px;

View File

@ -4,6 +4,24 @@
<vue-scroll style="height: 100%; width: 100%" class="scroll">
<div class="flex content">
<div class="left">
<div class="box-type">
<span>工程类别</span>
<el-select
@change="getDangerTypeRecordList"
v-model="projectClassify"
clearable
size="small"
placeholder="请选择"
>
<el-option label="全部" value=""></el-option>
<el-option
v-for="item in riskItemList"
:key="item.id"
:label="item.name"
:value="item.data"
></el-option>
</el-select>
</div>
<el-input
placeholder="请输入检查项名称"
prefix-icon="el-icon-search"
@ -13,7 +31,7 @@
style="margin-bottom: 15px"
>
</el-input>
<vue-scroll style="height: 87%; width: 100%; font-size: 14px">
<vue-scroll style="height: 79%; width: 100%; font-size: 14px">
<el-tree
class="filter-tree"
:highlight-current="true"
@ -28,7 +46,7 @@
<span class="custom-tree-node flex3" slot-scope="{ node, data }">
<span v-if="node.label.length <= 10">
<span class="stop" v-if="data.recordStatus == 1"
>{{ $t('message.quality.stop') }}</span
>{{ $t("message.quality.stop") }}</span
>{{ node.label }}</span
>
<el-tooltip
@ -40,7 +58,7 @@
>
<span class="ellipsis">
<span class="stop" v-if="data.recordStatus == 1"
>{{ $t('message.quality.stop') }}</span
>{{ $t("message.quality.stop") }}</span
>{{ node.label }}</span
>
</el-tooltip>
@ -49,32 +67,38 @@
type="text"
size="mini"
@click.stop="() => singleEditState(node, data, 0)"
v-permission="{key: 'criterion_stop_open', menuPath: '/project/safeSame/criterion'}"
v-permission="{
key: 'criterion_stop_open',
menuPath: '/project/safeSame/criterion',
}"
>
{{ $t('message.quality.click')
}}{{ $t('message.quality.startUsing') }}
{{ $t("message.quality.click")
}}{{ $t("message.quality.startUsing") }}
</el-button>
<el-button
v-if="data.recordStatus != 1"
v-if="data.recordStatus != 1"
type="text"
size="mini"
@click.stop="() => singleEditState(node, data, 1)"
v-permission="{key: 'criterion_stop_open', menuPath: '/project/safeSame/criterion'}"
v-permission="{
key: 'criterion_stop_open',
menuPath: '/project/safeSame/criterion',
}"
>
{{ $t('message.quality.click')
}}{{ $t('message.quality.forbidden') }}
{{ $t("message.quality.click")
}}{{ $t("message.quality.forbidden") }}
</el-button>
</span>
</el-tree>
</vue-scroll>
<div class="btn_wrap">
<el-button type="primary" size="small" @click="setCheckedNodes"
>{{ $t('message.quality.add')
}}{{ $t('message.quality.unfold') }}</el-button
>{{ $t("message.quality.add")
}}{{ $t("message.quality.unfold") }}</el-button
>
<el-button type="primary" size="small" @click="setCheckedKeys"
>{{ $t('message.quality.add')
}}{{ $t('message.quality.close') }}</el-button
>{{ $t("message.quality.add")
}}{{ $t("message.quality.close") }}</el-button
>
</div>
</div>
@ -120,9 +144,15 @@
</el-select>
</el-form-item>
<el-form-item>
<el-button v-permission="{key: 'criterion_query', menuPath: '/project/safeSame/criterion'}" type="primary" @click="onSubmit">{{
$t('message.quality.inquire')
}}</el-button>
<el-button
v-permission="{
key: 'criterion_query',
menuPath: '/project/safeSame/criterion',
}"
type="primary"
@click="onSubmit"
>{{ $t("message.quality.inquire") }}</el-button
>
</el-form-item>
</el-form>
</div>
@ -137,13 +167,14 @@
>
<el-table-column type="selection" width="55" align="center">
</el-table-column>
<el-table-column
label="项目类型"
align="center"
>
<template slot-scope="scope">
<span>{{ scope.row.projectType ? projectTypeList[scope.row.projectType - 1].title : '--'}}</span>
</template>
<el-table-column label="项目类型" align="center">
<template slot-scope="scope">
<span>{{
scope.row.projectType
? projectTypeList[scope.row.projectType - 1].title
: "--"
}}</span>
</template>
</el-table-column>
<el-table-column
:label="$t('message.quality.problemLevel')"
@ -185,20 +216,15 @@
>
<template slot-scope="scope">{{
scope.row.recordStatus == 0
? $t('message.quality.startUsing')
: $t('message.quality.forbidden')
? $t("message.quality.startUsing")
: $t("message.quality.forbidden")
}}</template>
</el-table-column>
<el-table-column
align="center"
prop="deductScore"
label="扣分"
>
<el-table-column align="center" prop="deductScore" label="扣分">
<template slot-scope="scope">{{
scope.row.deductScore || 0
}}</template>
</el-table-column>
</el-table>
<!-- <div class="tab_btn_wrap" v-if="tableData.length > 0">
<el-button
@ -232,106 +258,124 @@ import {
getSafeDangerTypeRecordApi,
getSafeDangerItemRecordApi,
editSafeStateApi,
singleSafeEditStateApi
} from '@/assets/js/api/quality'
singleSafeEditStateApi,
} from "@/assets/js/api/quality";
import { getDictionaryItemApi } from "@/assets/js/api/companyDiagram.js";
export default {
name: 'qualityProblemBank',
name: "qualityProblemBank",
data() {
return {
dangerName: '',
dangerName: "",
defaultProps: {
children: 'children',
label: 'dangerName',
id: 'id'
children: "children",
label: "dangerName",
id: "id",
},
projectSn: '',
projectSn: "",
checkedNodeData: {},
showExpand: true,
listData: [],
formInline: {
content: '',
recordStatus: 0
content: "",
recordStatus: 0,
},
tableData: [],
multipleSelection: [],
checkboxId: [],
showBatch: true,
projectTypeList: [{
id: 1,
title: "保证项目"
},{
id: 2,
title: "一般项目"
}]
}
projectTypeList: [
{
id: 1,
title: "保证项目",
},
{
id: 2,
title: "一般项目",
},
],
riskItemList: [],
projectClassify: "",
};
},
watch: {
dangerName(val) {
this.$refs.tree.filter(val)
}
this.$refs.tree.filter(val);
},
},
created() {
this.projectSn = this.$store.state.projectSn
this.getDangerTypeRecordList()
this.projectSn = this.$store.state.projectSn;
this.getDictionaryItem();
this.getDangerTypeRecordList();
},
methods: {
getDictionaryItem() {
getDictionaryItemApi({
dictionaryEncoding: "risk_list_project_type",
projectSn: this.projectSn,
}).then((res) => {
if (res.result.length > 0) {
this.riskItemList = res.result;
}
});
},
//---
getDangerTypeRecordList() {
console.log(22)
console.log(22);
let data = {
projectSn: this.projectSn,
dangerName: this.dangerName
}
dangerName: this.dangerName,
projectClassify: this.projectClassify,
};
getSafeDangerTypeRecordApi(data).then((res) => {
if (res.code == 200) {
if (res.result.length > 0) {
this.listData = res.result
this.listData = res.result;
} else {
this.listData = []
this.listData = [];
}
}
})
});
},
//
filterNode(value, data) {
if (!value) return true
return data.dangerName.indexOf(value) !== -1
if (!value) return true;
return data.dangerName.indexOf(value) !== -1;
},
// --
singleEditState(node, data, type) {
let newData = {
projectSn: this.projectSn,
recordStatus: type,
id: data.id
}
id: data.id,
};
singleSafeEditStateApi(newData).then((res) => {
console.log(res)
console.log(res);
if (res.code == 200) {
this.$message.success(res.message)
this.getDangerTypeRecordList()
this.getDangerItemRecord()
this.$message.success(res.message);
this.getDangerTypeRecordList();
this.getDangerItemRecord();
}
})
});
},
//
getCheckedNode(data) {
this.checkedNodeData = data
this.getDangerItemRecord()
this.checkedNodeData = data;
this.getDangerItemRecord();
},
//
setCheckedKeys() {
this.defaultExpand = false
this.defaultExpand = false;
for (var i = 0; i < this.$refs.tree.store._getAllNodes().length; i++) {
this.$refs.tree.store._getAllNodes()[i].expanded = this.defaultExpand
this.$refs.tree.store._getAllNodes()[i].expanded = this.defaultExpand;
}
},
//
setCheckedNodes() {
this.defaultExpand = true //
this.defaultExpand = true; //
for (var i = 0; i < this.$refs.tree.store._getAllNodes().length; i++) {
this.$refs.tree.store._getAllNodes()[i].expanded = this.defaultExpand
this.$refs.tree.store._getAllNodes()[i].expanded = this.defaultExpand;
}
},
@ -341,54 +385,61 @@ export default {
projectSn: this.projectSn,
dangerTypeId: this.checkedNodeData.id,
content: this.formInline.content,
recordStatus: this.formInline.recordStatus
}
recordStatus: this.formInline.recordStatus,
};
getSafeDangerItemRecordApi(data).then((res) => {
if (res.code == 200) {
this.tableData = res.result
this.tableData = res.result;
}
})
});
},
//--
onSubmit() {
this.getDangerItemRecord()
this.getDangerItemRecord();
},
//
editState(type) {
let data = {
projectSn: this.projectSn,
recordStatus: type,
idStr: this.checkboxId.join(',')
}
idStr: this.checkboxId.join(","),
};
editSafeStateApi(data).then((res) => {
console.log(data)
console.log(data);
if (res.code == 200) {
this.$message.success(res.message)
this.getDangerItemRecord()
this.getDangerTypeRecordList()
this.$message.success(res.message);
this.getDangerItemRecord();
this.getDangerTypeRecordList();
}
})
});
},
//
handleSelectionChange(value) {
if (value.length > 0) {
let arr = []
let arr = [];
for (let i = 0; i < value.length; i++) {
arr.push(value[i].id)
arr.push(value[i].id);
}
this.checkboxId = arr
this.showBatch = false
this.checkboxId = arr;
this.showBatch = false;
} else {
this.checkboxId = value
this.showBatch = true
this.checkboxId = value;
this.showBatch = true;
}
}
}
}
},
},
};
</script>
<style lang="less" scoped>
.box-type {
margin-bottom: 13px;
> span {
margin-right: 10px;
font-size: 14px;
}
}
.flex {
display: flex;
}
@ -459,8 +510,7 @@ export default {
}
}
.el-button--text{
.el-button--text {
padding-right: 10px;
}
</style>