首页完善

This commit is contained in:
BianLzhaoMin 2025-08-23 15:45:54 +08:00
parent d036cc36b8
commit 375aea5f5b
14 changed files with 309 additions and 56 deletions

View File

@ -104,6 +104,30 @@ export default {
type: [Number, String],
default: '',
},
proStatus: {
type: [Number, String],
default: '',
},
volLevel: {
type: [Number, String],
default: '',
},
proType: {
type: [Number, String],
default: '',
},
sex: {
type: [String],
default: '',
},
age: {
type: [Number, String],
default: '',
},
postId: {
type: [Number, String],
default: '',
},
},
data() {
return {
@ -326,6 +350,7 @@ export default {
label: j.postName,
})
})
item.value = this.postId
}
if (item.label === '红绿灯状态') {
@ -339,6 +364,12 @@ export default {
if (item.label === '分公司') {
item.value = this.selectCompany
}
if (item.label === '性别') {
item.value = this.sex
}
if (item.label === '年龄分布') {
item.value = this.age
}
setTimeout(() => {
if (item.label === '工程状态') {
@ -348,6 +379,8 @@ export default {
label: j.label,
})
})
item.value = this.proStatus
}
if (item.label === '工程类型') {
this.dict.type.project_type.forEach((j) => {
@ -356,6 +389,8 @@ export default {
label: j.label,
})
})
item.value = this.proType
}
if (item.label === '电压等级') {
this.dict.type.voltage_level.forEach((j) => {
@ -364,6 +399,7 @@ export default {
label: j.label,
})
})
item.value = this.volLevel
}
}, 500)
})

View File

@ -5,6 +5,9 @@
<FilterQueryModel
:isAtt="``"
:lightStatus="``"
:proStatus="proStatus"
:volLevel="volLevel"
:proType="proType"
:isPersonFilter="false"
:selectCompany="selectCompany"
@handelSettingQuery="handelSettingQueryProject"
@ -155,6 +158,9 @@
<template slot="outerContent">
<FilterQueryModel
:isPersonFilter="true"
:proStatus="proStatus"
:volLevel="volLevel"
:proType="proType"
:selectCompany="selectCompany"
:lightStatus="queryParamsPerson.lightStatus"
:isAtt="queryParamsPerson.isAtt"
@ -286,6 +292,18 @@ export default {
type: [Number, String],
default: '',
},
proStatus: {
type: [Number, String],
default: '',
},
volLevel: {
type: [Number, String],
default: '',
},
proType: {
type: [Number, String],
default: '',
},
},
components: {
TableModel,
@ -325,9 +343,9 @@ export default {
queryParamsProject: {
subCompanyId: this.selectCompany,
proStatus: '',
volLevel: '',
proType: '',
proStatus: this.proStatus,
volLevel: this.volLevel,
proType: this.proType,
},
//
subQueryParams: {

View File

@ -16,6 +16,9 @@
:isPersonFilter="true"
:lightStatus="lightStatus"
:selectCompany="selectCompany"
:sex="sex"
:age="age"
:postId="postId"
@handelSettingQuery="handelSettingQuery"
/>
<TableModel
@ -106,6 +109,18 @@ export default {
type: [Number, String],
default: 1,
},
sex: {
type: [Number, String],
default: '',
},
age: {
type: [Number, String],
default: '',
},
postId: {
type: [Number, String],
default: '',
},
// einStatus: {
// type: [Number, String],
// default: '',
@ -132,11 +147,11 @@ export default {
volLevel: '',
proType: '',
lightStatus: this.lightStatus,
startAge: '',
endAge: '',
sex: '',
startAge: this.age.split('-')[0],
endAge: this.age.split('-')[1],
sex: this.sex,
isAtt: this.isAtt,
postId: '',
postId: this.postId,
mainProId: this.selectCompany,
},
commonSlots: [

View File

@ -205,11 +205,13 @@ export default {
this.isAtt = '1'
this.lightStatus = 2
this.einStatus = ''
this.dialogConfig.outerTitle = '人员信息'
}
if (item.name === '在场人员') {
this.isAtt = ''
this.lightStatus = ''
this.einStatus = '1'
this.dialogConfig.outerTitle = '人员信息'
}
this.currentComponent = item.component
this.dialogConfig.outerVisible = true
@ -224,13 +226,16 @@ export default {
switch (type) {
case 0:
this.lightStatus = 1
this.dialogConfig.outerTitle = '人员信息'
break
case 1:
this.lightStatus = 3
this.dialogConfig.outerTitle = '人员信息'
break
case 2:
this.lightStatus = ''
this.dialogConfig.outerTitle =
'出场未上传《离场人员工资结算确认单》人员清单'
break
}
this.currentComponent = item.component

View File

@ -92,9 +92,9 @@ export default {
],
})
this.chart.on('click', (params) => {
this.$emit('handleOpenDialog', this.type)
})
// this.chart.on('click', (params) => {
// this.$emit('handleOpenDialog', this.type)
// })
},
},

View File

@ -5,7 +5,12 @@
<TitleTip :titleText="'人员考勤'" />
<div class="person-attendance-content">
<div class="item" v-for="item in personList" :key="item.name">
<div
class="item"
:key="item.name"
v-for="item in personList"
@click="handleOpenDialog(item)"
>
<div class="left">
<div>
{{ item.name }}
@ -41,24 +46,40 @@
<CirclePie
:type="item.type"
:pieColor="item.color"
@handleOpenDialog="handleOpenDialog"
:percentage="personAttendanceData[item.rateKey]"
/>
</div>
</div>
</div>
</el-card>
<DialogModel
:dialogConfig="dialogConfig"
@closeDialogOuter="handleCloseDialogOuter"
>
<template slot="outerContent">
<PersonList
:isAtt="isAtt"
:lightStatus="lightStatus"
:selectCompany="selectCompany"
/>
</template>
</DialogModel>
</div>
</template>
<script>
import CirclePie from './components/circlePie.vue'
import DialogModel from '@/components/DialogModel'
import PersonList from '../dataOverviewProject/components/person-list.vue' //
import { getPersonAttendanceAPI } from '@/api/home-index/index'
export default {
name: 'PersonAttendance',
components: {
CirclePie,
DialogModel,
PersonList,
},
props: {
selectCompany: {
@ -123,13 +144,28 @@ export default {
einAttPercentage: '0%', // ()
},
//
dialogConfig: {
outerVisible: false,
outerTitle: '人员信息',
outerWidth: '80%',
minHeight: '90vh',
maxHeight: '90vh',
},
lineCount: 0, //
attCountAll: 0, //
isAtt: '',
lightStatus: '',
}
},
methods: {
handleOpenDialog(type) {
// console.log(type, '----')
handleOpenDialog(item) {
this.dialogConfig.outerVisible = true
},
handleCloseDialogOuter() {
this.dialogConfig.outerVisible = false
},
//
@ -192,6 +228,7 @@ export default {
display: flex;
justify-content: space-between;
align-items: center;
cursor: pointer;
.left div:nth-child(2) {
padding: 10px 0;

View File

@ -224,6 +224,8 @@ export default {
//
this.chart.on('click', (params) => {
console.log(params.data.name, '打开弹框----')
this.$emit('handleOpenDialog', params.data.name)
})
},
},

View File

@ -82,6 +82,7 @@ export default {
},
onHandleOpenDialog(type) {
console.log(type, '打开弹框---')
this.$emit('handleOpenDialog', type)
},
//

View File

@ -180,7 +180,7 @@ export default {
},
value: 100,
symbol: symbols[0],
text: '男',
text: '男',
},
{
itemStyle: {
@ -201,7 +201,7 @@ export default {
},
value: 100,
symbol: symbols[1],
text: '女',
text: '女',
},
],
},
@ -210,7 +210,7 @@ export default {
this.chart.setOption(option)
this.chart.on('click', (params) => {
console.log(params.data.text, '打开弹框---')
this.$emit('handleOpenDialog', params.data.text)
})
},
},

View File

@ -7,35 +7,66 @@
<el-col :span="4">
<div class="item item-1">
<div class="item-title"> 性别分布 </div>
<SexRatio :sexRatioData="sexRatioData" />
<SexRatio
:sexRatioData="sexRatioData"
@handleOpenDialog="handleOpenDialogOne"
/>
</div>
</el-col>
<el-col :span="5">
<div class="item item-2">
<div class="item-title"> 工种分布 </div>
<ItemPie :configData="pieOneConfig" />
<ItemPie
:configData="pieOneConfig"
@handleOpenDialog="handleOpenDialogTwo"
/>
</div>
</el-col>
<el-col :span="5">
<div class="item item-3">
<div class="item-title"> 年龄分布 </div>
<ItemPie :configData="pieTwoConfig" />
<ItemPie
:configData="pieTwoConfig"
@handleOpenDialog="handleOpenDialogThree"
/>
</div>
</el-col>
<el-col :span="5">
<div class="item item-4">
<div class="item-title"> 红黄绿灯占比 </div>
<ItemPie :configData="pieThreeConfig" />
<ItemPie
:configData="pieThreeConfig"
@handleOpenDialog="handleOpenDialogFour"
/>
</div>
</el-col>
<el-col :span="5">
<div class="item item-5">
<div class="item-title"> 固定临时人员 </div>
<PersonRatio :selectCompany="selectCompany" />
<PersonRatio
:selectCompany="selectCompany"
@handleOpenDialog="handleOpenDialogFive"
/>
</div>
</el-col>
</el-row>
</el-card>
<DialogModel
:dialogConfig="dialogConfig"
@closeDialogOuter="handleCloseDialogOuter"
>
<template slot="outerContent">
<PersonList
:sex="sex"
:age="age"
:isAtt="isAtt"
:postId="postId"
:lightStatus="lightStatus"
:selectCompany="selectCompany"
/>
</template>
</DialogModel>
</div>
</template>
@ -44,8 +75,12 @@ import SexRatio from './components/sex-ratio.vue'
import ItemPie from './components/item-pie.vue'
import PersonRatio from './components/person-ratio.vue'
import { getPersonPresenceAPI } from '@/api/home-index/index'
import { getPostTypeSelectListCommonFun } from '@/utils/getCommonData'
import DialogModel from '@/components/DialogModel'
import PersonList from '../dataOverviewProject/components/person-list.vue' //
export default {
name: 'PersonPresence',
props: {
selectCompany: {
type: [Number, String],
@ -56,6 +91,8 @@ export default {
SexRatio,
ItemPie,
PersonRatio,
DialogModel,
PersonList,
},
data() {
@ -114,6 +151,21 @@ export default {
],
},
//
dialogConfig: {
outerVisible: false,
outerTitle: '人员信息',
outerWidth: '80%',
minHeight: '90vh',
maxHeight: '90vh',
},
isAtt: '',
lightStatus: '',
sex: '',
age: '',
postId: '',
sexRatioData: {
feMailNum: 0, //
mailNum: 0, //
@ -125,6 +177,43 @@ export default {
this.$emit('handleCheckOften')
},
handleCloseDialogOuter() {
this.dialogConfig.outerVisible = false
},
//
handleOpenDialogOne(text) {
console.log(text, 'text')
this.sex = text
this.dialogConfig.outerVisible = true
},
//
async handleOpenDialogTwo(text) {
const postList = await getPostTypeSelectListCommonFun()
const postId = postList.find((item) => item.postName === text)?.id
this.postId = postId
this.dialogConfig.outerVisible = true
},
//
handleOpenDialogThree(text) {
this.age = `${text - 10}-${text}`
this.dialogConfig.outerVisible = true
},
// 绿
handleOpenDialogFour(text) {
text == '绿灯' ? (this.lightStatus = 2) : (this.lightStatus = 1)
this.dialogConfig.outerVisible = true
},
//
handleOpenDialogFive(text) {
// this.isAtt = text
this.dialogConfig.outerVisible = true
},
async getPersonPresence() {
const { data: res } = await getPersonPresenceAPI({
companyId: this.selectCompany,

View File

@ -49,6 +49,7 @@ export default {
icon: 'line-project',
color: '82, 193, 245',
dataKey: 'buildProNum',
type: '0',
},
{
value: 0,
@ -56,6 +57,7 @@ export default {
color: '255, 169, 76',
icon: 'prepare-project',
dataKey: 'prepareProNum',
type: '2',
},
{
value: 0,
@ -63,6 +65,7 @@ export default {
color: '251,98,96',
icon: 'stop-project',
dataKey: 'stopProNum',
type: '1',
},
{
value: 0,
@ -70,6 +73,7 @@ export default {
color: '81, 211, 81',
icon: 'finish-project',
dataKey: 'completeProNum',
type: '4',
},
{
value: 0,
@ -77,6 +81,7 @@ export default {
icon: 'remain-project',
color: '160, 207, 255',
dataKey: 'legacyProNum',
type: '3',
},
],
}
@ -84,6 +89,7 @@ export default {
methods: {
onHandleOpenDialog(item) {
console.log(item.name, '打开弹框----')
this.$emit('handleOpenDialog', item.type)
},
initData() {

View File

@ -23,32 +23,38 @@ export default {
{
value: 0,
name: '基建线路',
type: '2',
dataKey: 'infrastructureLine',
},
{
name: '基建变电',
value: 0,
type: '1',
dataKey: 'infrastructureSubstation',
},
{
name: '生产线路',
value: 0,
type: '4',
dataKey: 'productionLine',
},
{
name: '生产变电',
value: 0,
type: '3',
dataKey: 'productionSubstation',
},
{
name: '配网',
value: 0,
type: '5',
dataKey: 'network',
},
{
name: '其他',
value: 0,
type: '6',
dataKey: 'proNum',
},
],
@ -249,7 +255,7 @@ export default {
//
this.chart.on('click', (params) => {
console.log(params.data.name, '打开弹框')
this.$emit('handleOpenDialog', params.data.type)
})
},
},

View File

@ -19,33 +19,6 @@ export default {
data() {
return {
chart: null,
chartData: [
{
name: '220kV',
value: 120,
},
{
name: '380kV',
value: 80,
},
{
name: '500kV',
value: 30,
},
{
name: '110kV',
value: 12,
},
{
name: '±800kV',
value: 12,
},
{
name: '1000kV及以上',
value: 12,
},
],
}
},
@ -96,7 +69,7 @@ export default {
{
type: 'bar',
barWidth: 12,
silent: true,
silent: false,
itemStyle: { color: '#e9eef4' },
barGap: '-100%', //
data: new Array(xAxisData.length).fill(
@ -144,7 +117,7 @@ export default {
this.chart.on('click', (params) => {
// name
const name = xAxisData[params.dataIndex]
console.log(name, '打开弹框')
this.$emit('handleOpenDialog', name)
})
},
},

View File

@ -6,21 +6,44 @@
<el-row :gutter="10" class="project-info-content">
<el-col :span="6">
<div class="item-1">
<ItemOne :oneInfo="oneInfo" />
<ItemOne
:oneInfo="oneInfo"
@handleOpenDialog="handleOpenDialogOne"
/>
</div>
</el-col>
<el-col :span="10">
<div class="item-2">
<ItemTwo :twoData="twoData" />
<ItemTwo
:twoData="twoData"
@handleOpenDialog="handleOpenDialogTwo"
/>
</div>
</el-col>
<el-col :span="8">
<div class="item-3">
<ItemThree :threeData="threeData" />
<ItemThree
:threeData="threeData"
@handleOpenDialog="handleOpenDialogThree"
/>
</div>
</el-col>
</el-row>
</el-card>
<DialogModel
:dialogConfig="dialogConfig"
@closeDialogOuter="handleCloseDialogOuter"
>
<template slot="outerContent">
<ProjectList
:selectCompany="selectCompany"
:proStatus="proStatus"
:volLevel="volLevel"
:proType="proType"
/>
</template>
</DialogModel>
</div>
</template>
@ -29,6 +52,10 @@ import ItemOne from './components/item-one.vue'
import ItemTwo from './components/item-two.vue'
import ItemThree from './components/item-three.vue'
import ProjectList from '../dataOverviewProject/components/item-two.vue'
import DialogModel from '@/components/DialogModel'
import { getProjectInfoAPI } from '@/api/home-index/index'
export default {
@ -38,6 +65,8 @@ export default {
ItemOne,
ItemTwo,
ItemThree,
DialogModel,
ProjectList,
},
props: {
selectCompany: {
@ -63,6 +92,19 @@ export default {
network: 0, //
proNum: 0,
},
//
dialogConfig: {
outerVisible: false,
outerTitle: '工程信息',
outerWidth: '80%',
minHeight: '90vh',
maxHeight: '90vh',
},
proStatus: '',
volLevel: '',
proType: '',
}
},
methods: {
@ -128,6 +170,29 @@ export default {
proNum,
}
},
handleCloseDialogOuter() {
this.dialogConfig.outerVisible = false
},
//
handleOpenDialogOne(type) {
this.proStatus = type
this.dialogConfig.outerVisible = true
this.dialogConfig.outerTitle = '工程信息'
},
handleOpenDialogTwo(name) {
this.volLevel = name
this.dialogConfig.outerVisible = true
this.dialogConfig.outerTitle = '工程信息'
},
handleOpenDialogThree(type) {
this.proType = type
this.dialogConfig.outerVisible = true
this.dialogConfig.outerTitle = '工程信息'
},
},
created() {