首页接口调试

This commit is contained in:
BianLzhaoMin 2025-08-22 18:16:39 +08:00
parent a37fc23018
commit 88400b2c3f
6 changed files with 403 additions and 267 deletions

View File

@ -74,3 +74,28 @@ export const getWorkerProjectListAPI = (data) => {
params: data,
})
}
// 首页 三级页面 人员详情
export const getWorkerDetailsAPI = (data) => {
return request({
url: '/bmw/homePageSub/getWorkerMsgById',
method: 'GET',
params: data,
})
}
// 首页 三级页面 人员考勤信息
export const getWorkerAttendanceAPI = (data) => {
return request({
url: '/bmw/homePageSub/getWorkerLightMsg',
method: 'GET',
params: data,
})
}
// 首页 三级页面 人员合同信息
export const getWorkerContractAPI = (data) => {
return request({
url: '/bmw/homePageSub/getWorkerNotFileMsg',
method: 'GET',
params: data,
})
}

View File

@ -21,9 +21,11 @@
>
<el-radio-button
:key="tag.value"
:label="tag.label"
:label="tag.value"
v-for="tag in item.valueList"
/>
>
{{ tag.label }}
</el-radio-button>
</el-radio-group>
</el-col>
<el-col :span="2">
@ -78,8 +80,13 @@
</template>
<script>
import {
getSubCompanySelectListCommonFun,
getPostTypeSelectListCommonFun,
} from '@/utils/getCommonData'
export default {
name: 'FilterQueryModel',
dicts: ['voltage_level', 'project_type', 'project_status'],
props: {
isPersonFilter: {
type: Boolean,
@ -91,8 +98,8 @@ export default {
filterQueryListTemp: [
{
label: '分公司',
value: '全部',
queryKey: 'companyId',
value: '',
queryKey: 'subCompanyId',
isPersonFilter: 'all',
radioGroupHeight: 0,
radioGroupShowHeight: 38,
@ -100,30 +107,14 @@ export default {
valueList: [
{
label: '全部',
value: '全部',
},
{
label: '分公司1',
value: '分公司1',
},
{
label: '分公司2',
value: '分公司2',
},
{
label: '分公司3',
value: '分公司3',
},
{
label: '红灯超三天',
value: '分公司5',
value: '',
},
],
},
{
label: '工程状态',
value: '全部',
queryKey: 'workStatus',
value: '',
queryKey: 'proStatus',
isPersonFilter: false,
radioGroupHeight: 0,
radioGroupShowHeight: 38,
@ -131,34 +122,14 @@ export default {
valueList: [
{
label: '全部',
value: '全部',
},
{
label: '在建',
value: '在建',
},
{
label: '完工',
value: '完工',
},
{
label: '筹建',
value: '筹建',
},
{
label: '停工',
value: '停工',
},
{
label: '遗留收尾',
value: '遗留收尾',
value: '',
},
],
},
{
label: '电压等级',
value: '全部',
queryKey: 'voltageLevel',
value: '',
queryKey: 'volLevel',
isPersonFilter: false,
radioGroupHeight: 0,
radioGroupShowHeight: 38,
@ -166,38 +137,14 @@ export default {
valueList: [
{
label: '全部',
value: '全部',
},
{
label: '110kV',
value: '110kV',
},
{
label: '220kV',
value: '220kV',
},
{
label: '500kV',
value: '500kV',
},
{
label: '±800kV',
value: '±800kV',
},
{
label: '1000kV及以上',
value: '1000kV及以上',
},
{
label: '其它',
value: '其它',
value: '',
},
],
},
{
label: '工程类型',
value: '全部',
queryKey: 'projectType',
value: '',
queryKey: 'proType',
isPersonFilter: false,
radioGroupHeight: 0,
radioGroupShowHeight: 38,
@ -205,38 +152,14 @@ export default {
valueList: [
{
label: '全部',
value: '全部',
},
{
label: '基建线路',
value: '基建线路',
},
{
label: '基建变电',
value: '基建变电',
},
{
label: '生产线路',
value: '生产线路',
},
{
label: '生产变电',
value: '生产变电',
},
{
label: '变电改扩建',
value: '变电改扩建',
},
{
label: '其它',
value: '其它',
value: '',
},
],
},
{
label: '红绿灯状态',
value: '全部',
queryKey: 'redLightStatus',
value: '',
queryKey: 'lightStatus',
isPersonFilter: true,
radioGroupHeight: 0,
radioGroupShowHeight: 38,
@ -244,53 +167,27 @@ export default {
valueList: [
{
label: '全部',
value: '全部',
value: '',
},
{
label: '绿灯',
value: '绿灯',
value: 2,
},
{
label: '黄灯',
value: '黄灯',
value: 1,
},
{
label: '红灯',
value: '红灯',
},
{
label: '红灯超三天',
value: '红灯超三天',
},
],
},
{
label: '用工类型',
value: '全部',
queryKey: 'workType',
isPersonFilter: true,
radioGroupHeight: 0,
radioGroupShowHeight: 38,
isExpand: false,
valueList: [
{
label: '全部',
value: '全部',
},
{
label: '固定用工',
value: '固定用工',
},
{
label: '临时用工',
value: '临时用工',
label: '黄灯超七天',
value: 3,
},
],
},
{
label: '年龄分布',
value: '全部',
queryKey: 'ageRange',
value: '',
queryKey: 'age',
isPersonFilter: true,
radioGroupHeight: 0,
radioGroupShowHeight: 38,
@ -298,11 +195,11 @@ export default {
valueList: [
{
label: '全部',
value: '全部',
value: '',
},
{
label: '<20',
value: '<20',
value: '0-20',
},
{
label: '20-30',
@ -324,7 +221,7 @@ export default {
},
{
label: '性别',
value: '全部',
value: '',
queryKey: 'sex',
isPersonFilter: true,
radioGroupHeight: 0,
@ -333,7 +230,7 @@ export default {
valueList: [
{
label: '全部',
value: '全部',
value: '',
},
{
label: '男',
@ -347,8 +244,8 @@ export default {
},
{
label: '考勤状态',
value: '全部',
queryKey: 'attendanceStatus',
value: '',
queryKey: 'isAtt',
isPersonFilter: true,
radioGroupHeight: 0,
radioGroupShowHeight: 38,
@ -356,45 +253,23 @@ export default {
valueList: [
{
label: '全部',
value: '全部',
value: '',
},
{
label: '已考勤',
value: '已考勤',
value: '1',
},
{
label: '未考勤',
value: '未考勤',
},
],
},
{
label: '作业打卡',
value: '全部',
queryKey: 'jobClock',
isPersonFilter: true,
radioGroupHeight: 0,
radioGroupShowHeight: 38,
isExpand: false,
valueList: [
{
label: '全部',
value: '全部',
},
{
label: '日计划打卡',
value: '日计划打卡',
},
{
label: '非日计划打卡',
value: '非日计划打卡',
value: '0',
},
],
},
{
label: '工种',
value: '全部',
queryKey: 'jobType',
value: '',
queryKey: 'proName',
isPersonFilter: true,
radioGroupHeight: 0,
radioGroupShowHeight: 38,
@ -402,43 +277,7 @@ export default {
valueList: [
{
label: '全部',
value: '全部',
},
{
label: '项目经理(专业分包)',
value: '项目经理(专业分包)',
},
{
label: '项目总工(专业分包)',
value: '项目总工(专业分包)',
},
{
label: '专职安全员(专业分包)',
value: '专职安全员(专业分包)',
},
{
label: '专职质检员(专业分包)',
value: '专职质检员(专业分包)',
},
{
label: '项目总共(专业分包)',
value: '项目总共(专业分包)',
},
{
label: '项目总共(专业分包)',
value: '项目总共(专业分包)',
},
{
label: '项目总共(专业分包)',
value: '项目总共(专业分包)',
},
{
label: '项目总共(专业分包)',
value: '项目总共(专业分包)',
},
{
label: '项目总共(专业分包)',
value: '项目总共(专业分包)',
value: '',
},
],
},
@ -452,6 +291,51 @@ export default {
})
},
async created() {
const subCom = await getSubCompanySelectListCommonFun()
const postType = await getPostTypeSelectListCommonFun()
if (subCom.length > 0) {
this.filterQueryListTemp.forEach((item) => {
if (item.label === '分公司') {
subCom.forEach((j) => {
item.valueList.push({
value: j.id,
label: j.subCompanyName,
})
})
}
if (item.label === '工程状态') {
this.dict.type.project_status.forEach((j) => {
item.valueList.push({
value: j.value,
label: j.label,
})
})
}
if (item.label === '电压等级') {
this.dict.type.voltage_level.forEach((j) => {
item.valueList.push({
value: j.value,
label: j.label,
})
})
}
if (item.label === '工种') {
postType.forEach((j) => {
item.valueList.push({
value: j.id,
label: j.postName,
})
})
}
})
console.log(this.filterQueryListTemp, '分公司')
}
},
methods: {
//
onHandleClear(tag) {
@ -466,14 +350,24 @@ export default {
//
onHandleClearAll() {
this.filterQueryList.forEach((item) => {
item.value = '全部'
item.value = ''
})
this.onHandleQuery()
},
//
onHandleQuery() {
const query = {}
const query = {
age: '',
sex: '',
isAtt: '',
proName: '',
proType: '',
volLevel: '',
proStatus: '',
lightStatus: '',
subCompanyId: '',
}
this.filterQueryList.forEach((item) => {
query[item.queryKey] = item.value
})
@ -532,10 +426,12 @@ export default {
},
selectList() {
return this.filterQueryList
.filter((item) => item.value !== '全部')
.filter((item) => item.value != '')
.map((item) => {
return {
label: item.label,
label: item.valueList.find(
(j) => j.value === item.value,
).label,
value: item.value,
}
})

View File

@ -555,6 +555,19 @@ export default {
}
},
},
watch: {
queryParams: {
handler(nv, ov) {
if (nv) {
for (let key in nv) {
this.$set(this.queryParams, key, this.sendParams[key])
}
}
},
deep: true,
},
},
}
</script>

View File

@ -135,19 +135,19 @@ export const teamColumnsList = [
export const personFormLabel = [
{
f_label: '姓名',
f_model: 'projectName',
f_model: 'workerName',
f_type: 'ipt',
isShow: false, // 是否展示label
},
{
f_label: '分包工程',
f_model: 'projectName',
f_label: '分包名称',
f_model: 'subName',
f_type: 'ipt',
isShow: false, // 是否展示label
},
{
f_label: '工程名称',
f_model: 'projectName',
f_model: 'proName',
f_type: 'ipt',
isShow: false, // 是否展示label
},
@ -155,19 +155,18 @@ export const personFormLabel = [
// 人员信息列表字段
export const personColumnsList = [
{ t_props: 'userName', t_label: '姓名', t_slot: 'userName' },
{ t_props: 'projectName', t_label: '工种' },
{ t_label: '姓名', t_slot: 'workerName' },
{ t_props: 'postName', t_label: '工种' },
{
t_props: 'redLightStatus',
t_label: '红绿灯状态',
t_slot: 'redLightStatus',
t_slot: 'lightStatus',
},
{ t_props: 'projectName', t_label: '考勤状态' },
{ t_props: 'projectName', t_label: '性别' },
{ t_props: 'projectName', t_label: '年龄' },
{ t_props: 'projectName', t_label: '联系方式' },
{ t_props: 'projectName', t_label: '所属分包' },
{ t_props: 'projectName', t_label: '所属工程' },
{ t_slot: 'isAtt', t_label: '考勤状态' },
{ t_props: 'sex', t_label: '性别' },
{ t_props: 'age', t_label: '年龄' },
{ t_props: 'phone', t_label: '联系方式' },
{ t_props: 'subName', t_label: '所属分包' },
{ t_props: 'proName', t_label: '所属工程' },
]
// 弹框公共配置

View File

@ -26,7 +26,7 @@
</el-col>
<el-col :span="19">
<div class="basic-info-item-value">
{{ item.value }}
{{ baseInfo[item.dataKey] }}
</div>
</el-col>
</el-row>
@ -45,8 +45,28 @@
</div>
</el-col>
<el-col :span="19">
<div class="basic-info-item-value">
{{ item.value }}
<div
class="basic-info-item-value"
v-if="item.dataKey != 'lightStatus'"
>
{{ baseInfo[item.dataKey] }}
</div>
<div class="basic-info-item-value" v-else>
<el-tag
size="mini"
type="warning"
v-if="baseInfo[item.dataKey] == 1"
>
黄灯
</el-tag>
<el-tag
size="mini"
type="success"
v-if="baseInfo[item.dataKey] == 2"
>
绿灯
</el-tag>
</div>
</el-col>
</el-row>
@ -134,12 +154,27 @@
{{ item.value }}
</div>
<div class="basic-info-item-value" v-else>
<el-button
<!-- <el-button
type="text"
@click="handleClickContractAttachment"
>
{{ item.value }}
</el-button>
</el-button> -->
<span
:class="
contractAttachmentList.length > 0
? 'cursor-blue'
: ''
"
@click="handleClickContractAttachment"
>
{{
contractAttachmentList.length > 0
? contractAttachmentList.length
: '暂无'
}}
</span>
</div>
</el-col>
</el-row>
@ -178,17 +213,44 @@
<div class="light-img-detail">
<div class="light-1">
<span> 当前状态 </span>
<span :style="{ color: textColor }"> 黄灯 </span>
<span :style="{ color: textColor }">
{{ baseInfo.lightStatus == 1 ? '黄灯' : '绿灯' }}
</span>
</div>
<div class="light-2">
<div
class="light-2"
:key="item.key"
v-for="item in lightDetails"
:style="{
backgroundColor:
item.value == 1 ? '#e3f7e3' : '#fae0e3',
}"
>
<i
class="el-icon-warning"
style="color: #ff3b30; font-size: 32px"
:style="{
color: item.value == 1 ? '#67c23a' : '#ff3b30',
fontSize: '32px',
}"
/>
<span> 合同见证 </span>
<span> 未上传 </span>
<span
:style="{
color: item.value == 1 ? '#67c23a' : '#ff3b30',
}"
>
{{ item.key }}
</span>
<span
:style="{
backgroundColor:
item.value == 1 ? '#67c23a' : '#ff3b30',
color: '#fff',
}"
>
{{ item.value == 1 ? '已上传' : '未上传' }}
</span>
</div>
<div class="light-2" style="background-color: #e3f7e3">
<!-- <div class="light-2" style="background-color: #e3f7e3">
<i
class="el-icon-warning"
style="color: #67c23a; font-size: 32px"
@ -197,7 +259,7 @@
<span style="background-color: #67c23a; color: #fff">
已上传
</span>
</div>
</div> -->
<div class="light-3">
<div>
1.黄灯状态合同见证工资卡见证未全部上传
@ -221,14 +283,14 @@
class="contract-attachment-item"
>
<el-image
:src="url"
:src="item"
style="width: 100%; height: 200px"
:preview-src-list="contractAttachmentList"
/>
</div>
</div>
<div class="upload-time"> 上传时间2025-05-06 101010 </div>
<div class="upload-time"> 上传时间{{ uploadTime }}</div>
</template>
</DialogModel>
</div>
@ -236,48 +298,58 @@
<script>
import DialogModel from '@/components/DialogModel'
import {
getWorkerDetailsAPI,
getWorkerAttendanceAPI,
getWorkerContractAPI,
} from '@/api/home-index/index'
export default {
name: 'PersonDetails',
props: {
workerId: {
type: [Number, String],
default: '',
},
},
components: {
DialogModel,
},
data() {
return {
url: 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg',
leftInfoList: [
{
label: '姓名',
value: '张三',
dataKey: 'name',
},
{
label: '工种',
value: '高空作业人员',
dataKey: 'postName',
},
{
label: '所在分包',
value: '云南清辉建设有限公司',
dataKey: 'subName',
},
{
label: '所在工程',
value: '安徽省合肥市蜀山区---xxx110kV工程',
dataKey: 'proName',
},
],
rightInfoList: [
{
label: '红绿灯状态',
value: '黄灯',
dataKey: 'lightStatus',
},
{
label: '联系方式',
value: '15656235623',
dataKey: 'phone',
},
{
label: '所属班组',
value: '云南清辉建设有限公司----李元霸班组',
dataKey: 'teamName',
},
{
label: '入场时间',
value: '2025-05-06 101010',
dataKey: 'einTime',
},
],
@ -351,12 +423,24 @@ export default {
lightType: 'yellow',
//
contractAttachmentList: [
'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg',
'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg',
'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg',
'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg',
],
contractAttachmentList: [],
baseInfo: {
name: '',
phone: '',
einTime: '',
subName: '',
proName: '',
teamName: '',
postName: '',
lightStatus: '',
},
attendanceInfo: {},
// 绿
lightDetails: [],
uploadTime: '',
url: '',
}
},
methods: {
@ -375,18 +459,81 @@ export default {
handleCloseDialogOuterTwo() {
this.dialogConfigTwo.outerVisible = false
},
//
async getWorkerDetails() {
const { data: res } = await getWorkerDetailsAPI({
id: this.workerId,
})
//
const { data: result } = await getWorkerAttendanceAPI({
id: this.workerId,
})
this.lightDetails = result
console.log(result, '考勤信息')
console.log(res, '人员详情')
const {
name,
lightStatus,
postName,
phone,
subName,
teamName,
proName,
einTime,
files,
} = res
this.baseInfo = {
name,
lightStatus,
postName,
phone,
subName,
teamName,
proName,
einTime,
}
if (files.length > 0) {
this.contractAttachmentList = files.map((item) => {
return item.lsUrl
})
this.uploadTime = files[0].createTime
}
console.log(this.contractAttachmentList, '合同附件')
},
},
computed: {
textColor() {
if (this.lightType === 'yellow') {
if (this.baseInfo.lightStatus === 1) {
return '#e6a23c'
} else if (this.lightType === 'red') {
return '#f56c6c'
} else if (this.lightType === 'green') {
} else if (this.baseInfo.lightStatus === 2) {
return '#67c23a'
} else if (this.baseInfo.lightStatus === 3) {
return '#f56c6c'
}
},
},
watch: {
workerId: {
handler() {
if (this.workerId) {
this.getWorkerDetails()
}
},
deep: true,
immediate: true,
},
},
}
</script>

View File

@ -20,19 +20,33 @@
:formLabel="personFormLabel"
:columnsList="personColumnsList"
:request-api="getWorkerProjectListAPI"
:sendParams="{ mainProId: selectCompany }"
:sendParams="{ mainProId: selectCompany, ...queryParams }"
>
<!-- 人员姓名 -->
<template slot="userName" slot-scope="{ data }">
<template slot="workerName" slot-scope="{ data }">
<span class="cursor-blue" @click="onHandleCheckUserName(data)">
{{ data.userName }}
{{ data.workerName }}
</span>
</template>
<!-- 红绿灯状态 -->
<template slot="redLightStatus">
<span style="color: #ff0000; font-size: 14px; cursor: pointer">
红灯
</span>
<template slot="lightStatus" slot-scope="{ data }">
<el-tag size="mini" type="warning" v-if="data.lightStatus == 1">
黄灯
</el-tag>
<el-tag size="mini" type="success" v-if="data.lightStatus == 2">
绿灯
</el-tag>
</template>
<!-- 考勤状态 -->
<template slot="isAtt" slot-scope="{ data }">
<el-tag size="mini" type="danger" v-if="data.isAtt == 0">
未考勤
</el-tag>
<el-tag size="mini" type="success" v-if="data.isAtt == 1">
已考勤
</el-tag>
</template>
</TableModel>
@ -42,7 +56,7 @@
@closeDialogOuter="handleCloseDialogOuterFive"
>
<template slot="outerContent">
<PersonDetails />
<PersonDetails :workerId="workerId" />
</template>
</DialogModel>
</div>
@ -88,12 +102,25 @@ export default {
dialogConfigFour,
dialogConfigFive,
getWorkerProjectListAPI,
queryParams: {},
queryParams: {
subCompanyId: '',
proStatus: '',
volLevel: '',
proType: '',
lightStatus: '',
startAge: '',
endAge: '',
sex: '',
isAtt: '',
proName: '',
},
commonSlots: [
'onSiteCount',
'todayAttendanceCount',
'redLightCount',
],
workerId: '',
}
},
methods: {
@ -106,7 +133,7 @@ export default {
//
onHandleCheckUserName(data) {
console.log('查看人员详情', data)
this.workerId = data.workerId
this.dialogConfigFive.outerTitle = '人员详情'
this.dialogConfigFive.outerVisible = true
},
@ -116,7 +143,36 @@ export default {
},
//
handelSettingQuery() {},
handelSettingQuery(query) {
const {
subCompanyId,
proStatus,
volLevel,
proType,
lightStatus,
age,
sex,
isAtt,
proName,
} = query
if (age) {
this.queryParams.startAge = age.split('-')[0]
this.queryParams.endAge = age.split('-')[1]
} else {
this.queryParams.startAge = ''
this.queryParams.endAge = ''
}
this.queryParams.subCompanyId = subCompanyId
this.queryParams.proStatus = proStatus
this.queryParams.volLevel = volLevel
this.queryParams.proType = proType
this.queryParams.lightStatus = lightStatus
this.queryParams.sex = sex
this.queryParams.isAtt = isAtt
this.queryParams.proName = proName
},
},
watch: {