首页完善

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -180,7 +180,7 @@ export default {
}, },
value: 100, value: 100,
symbol: symbols[0], symbol: symbols[0],
text: '男', text: '男',
}, },
{ {
itemStyle: { itemStyle: {
@ -201,7 +201,7 @@ export default {
}, },
value: 100, value: 100,
symbol: symbols[1], symbol: symbols[1],
text: '女', text: '女',
}, },
], ],
}, },
@ -210,7 +210,7 @@ export default {
this.chart.setOption(option) this.chart.setOption(option)
this.chart.on('click', (params) => { 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"> <el-col :span="4">
<div class="item item-1"> <div class="item item-1">
<div class="item-title"> 性别分布 </div> <div class="item-title"> 性别分布 </div>
<SexRatio :sexRatioData="sexRatioData" /> <SexRatio
:sexRatioData="sexRatioData"
@handleOpenDialog="handleOpenDialogOne"
/>
</div> </div>
</el-col> </el-col>
<el-col :span="5"> <el-col :span="5">
<div class="item item-2"> <div class="item item-2">
<div class="item-title"> 工种分布 </div> <div class="item-title"> 工种分布 </div>
<ItemPie :configData="pieOneConfig" /> <ItemPie
:configData="pieOneConfig"
@handleOpenDialog="handleOpenDialogTwo"
/>
</div> </div>
</el-col> </el-col>
<el-col :span="5"> <el-col :span="5">
<div class="item item-3"> <div class="item item-3">
<div class="item-title"> 年龄分布 </div> <div class="item-title"> 年龄分布 </div>
<ItemPie :configData="pieTwoConfig" /> <ItemPie
:configData="pieTwoConfig"
@handleOpenDialog="handleOpenDialogThree"
/>
</div> </div>
</el-col> </el-col>
<el-col :span="5"> <el-col :span="5">
<div class="item item-4"> <div class="item item-4">
<div class="item-title"> 红黄绿灯占比 </div> <div class="item-title"> 红黄绿灯占比 </div>
<ItemPie :configData="pieThreeConfig" /> <ItemPie
:configData="pieThreeConfig"
@handleOpenDialog="handleOpenDialogFour"
/>
</div> </div>
</el-col> </el-col>
<el-col :span="5"> <el-col :span="5">
<div class="item item-5"> <div class="item item-5">
<div class="item-title"> 固定临时人员 </div> <div class="item-title"> 固定临时人员 </div>
<PersonRatio :selectCompany="selectCompany" /> <PersonRatio
:selectCompany="selectCompany"
@handleOpenDialog="handleOpenDialogFive"
/>
</div> </div>
</el-col> </el-col>
</el-row> </el-row>
</el-card> </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> </div>
</template> </template>
@ -44,8 +75,12 @@ import SexRatio from './components/sex-ratio.vue'
import ItemPie from './components/item-pie.vue' import ItemPie from './components/item-pie.vue'
import PersonRatio from './components/person-ratio.vue' import PersonRatio from './components/person-ratio.vue'
import { getPersonPresenceAPI } from '@/api/home-index/index' 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 { export default {
name: 'PersonPresence', name: 'PersonPresence',
props: { props: {
selectCompany: { selectCompany: {
type: [Number, String], type: [Number, String],
@ -56,6 +91,8 @@ export default {
SexRatio, SexRatio,
ItemPie, ItemPie,
PersonRatio, PersonRatio,
DialogModel,
PersonList,
}, },
data() { data() {
@ -114,6 +151,21 @@ export default {
], ],
}, },
//
dialogConfig: {
outerVisible: false,
outerTitle: '人员信息',
outerWidth: '80%',
minHeight: '90vh',
maxHeight: '90vh',
},
isAtt: '',
lightStatus: '',
sex: '',
age: '',
postId: '',
sexRatioData: { sexRatioData: {
feMailNum: 0, // feMailNum: 0, //
mailNum: 0, // mailNum: 0, //
@ -125,6 +177,43 @@ export default {
this.$emit('handleCheckOften') 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() { async getPersonPresence() {
const { data: res } = await getPersonPresenceAPI({ const { data: res } = await getPersonPresenceAPI({
companyId: this.selectCompany, companyId: this.selectCompany,

View File

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

View File

@ -23,32 +23,38 @@ export default {
{ {
value: 0, value: 0,
name: '基建线路', name: '基建线路',
type: '2',
dataKey: 'infrastructureLine', dataKey: 'infrastructureLine',
}, },
{ {
name: '基建变电', name: '基建变电',
value: 0, value: 0,
type: '1',
dataKey: 'infrastructureSubstation', dataKey: 'infrastructureSubstation',
}, },
{ {
name: '生产线路', name: '生产线路',
value: 0, value: 0,
type: '4',
dataKey: 'productionLine', dataKey: 'productionLine',
}, },
{ {
name: '生产变电', name: '生产变电',
value: 0, value: 0,
type: '3',
dataKey: 'productionSubstation', dataKey: 'productionSubstation',
}, },
{ {
name: '配网', name: '配网',
value: 0, value: 0,
type: '5',
dataKey: 'network', dataKey: 'network',
}, },
{ {
name: '其他', name: '其他',
value: 0, value: 0,
type: '6',
dataKey: 'proNum', dataKey: 'proNum',
}, },
], ],
@ -249,7 +255,7 @@ export default {
// //
this.chart.on('click', (params) => { 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() { data() {
return { return {
chart: null, 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', type: 'bar',
barWidth: 12, barWidth: 12,
silent: true, silent: false,
itemStyle: { color: '#e9eef4' }, itemStyle: { color: '#e9eef4' },
barGap: '-100%', // barGap: '-100%', //
data: new Array(xAxisData.length).fill( data: new Array(xAxisData.length).fill(
@ -144,7 +117,7 @@ export default {
this.chart.on('click', (params) => { this.chart.on('click', (params) => {
// name // name
const name = xAxisData[params.dataIndex] 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-row :gutter="10" class="project-info-content">
<el-col :span="6"> <el-col :span="6">
<div class="item-1"> <div class="item-1">
<ItemOne :oneInfo="oneInfo" /> <ItemOne
:oneInfo="oneInfo"
@handleOpenDialog="handleOpenDialogOne"
/>
</div> </div>
</el-col> </el-col>
<el-col :span="10"> <el-col :span="10">
<div class="item-2"> <div class="item-2">
<ItemTwo :twoData="twoData" /> <ItemTwo
:twoData="twoData"
@handleOpenDialog="handleOpenDialogTwo"
/>
</div> </div>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<div class="item-3"> <div class="item-3">
<ItemThree :threeData="threeData" /> <ItemThree
:threeData="threeData"
@handleOpenDialog="handleOpenDialogThree"
/>
</div> </div>
</el-col> </el-col>
</el-row> </el-row>
</el-card> </el-card>
<DialogModel
:dialogConfig="dialogConfig"
@closeDialogOuter="handleCloseDialogOuter"
>
<template slot="outerContent">
<ProjectList
:selectCompany="selectCompany"
:proStatus="proStatus"
:volLevel="volLevel"
:proType="proType"
/>
</template>
</DialogModel>
</div> </div>
</template> </template>
@ -29,6 +52,10 @@ import ItemOne from './components/item-one.vue'
import ItemTwo from './components/item-two.vue' import ItemTwo from './components/item-two.vue'
import ItemThree from './components/item-three.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' import { getProjectInfoAPI } from '@/api/home-index/index'
export default { export default {
@ -38,6 +65,8 @@ export default {
ItemOne, ItemOne,
ItemTwo, ItemTwo,
ItemThree, ItemThree,
DialogModel,
ProjectList,
}, },
props: { props: {
selectCompany: { selectCompany: {
@ -63,6 +92,19 @@ export default {
network: 0, // network: 0, //
proNum: 0, proNum: 0,
}, },
//
dialogConfig: {
outerVisible: false,
outerTitle: '工程信息',
outerWidth: '80%',
minHeight: '90vh',
maxHeight: '90vh',
},
proStatus: '',
volLevel: '',
proType: '',
} }
}, },
methods: { methods: {
@ -128,6 +170,29 @@ export default {
proNum, 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() { created() {