flx:优化页面

This commit is contained in:
Rain_ 2025-06-30 16:42:41 +08:00
parent a4168b5bd3
commit 8033850e36
5 changed files with 192 additions and 36 deletions

View File

@ -965,6 +965,7 @@ export default {
teamOptions: [], teamOptions: [],
departmentOptions: [], departmentOptions: [],
addPersonnelDialog: false, addPersonnelDialog: false,
selectListAll: [],
title: "", title: "",
}; };
}, },

View File

@ -444,11 +444,17 @@
<img <img
:src="fileUrl + scope.row.imageUrl" :src="fileUrl + scope.row.imageUrl"
style="width: 40px; height: 60px; cursor: pointer" style="width: 40px; height: 60px; cursor: pointer"
v-if="scope.row.imageUrl"
@click=" @click="
bigImageUrl = fileUrl + scope.row.imageUrl; bigImageUrl = fileUrl + scope.row.imageUrl;
bigImageDialog = true; bigImageDialog = true;
" "
/> />
<img
style="width: 40px; height: 60px; cursor: pointer"
src="@/assets/images/profile_photo.png"
v-else
/>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>

View File

@ -278,34 +278,39 @@
<div>根据不同工时段换算工日</div> <div>根据不同工时段换算工日</div>
<p>:可设置0~~6工时(包含6工时)算0.5工日:6~~24工时算1工日</p> <p>:可设置0~~6工时(包含6工时)算0.5工日:6~~24工时算1工日</p>
<div class="progress-time"> <div class="progress-time">
<div v-for="(item, index) in 25"> <div @click="onClickPitch(index, 1)" v-for="(item, index) in 25">
<div v-if="workerInfo.hour2dayStart == index || workerInfo.hour2dayEnd == index" class="progress-active">{{ index }}</div> <div v-if="activePitchUp(hour2dayList, index)" class="progress-active">{{ index }}</div>
<div class="progress-bj"></div> <div class="progress-bj"></div>
<div class="progress-wz">{{ index }}</div> <div class="progress-wz">{{ index }}</div>
</div> </div>
</div> </div>
<div class="rulebox"> <div class="rulebox" v-for="(item, index) in workerInfo.hour2dayJson">
<div>规则</div> <div>规则</div>
<el-input-number <el-input-number
v-model="workerInfo.hour2dayStart" :disabled="index == 0"
v-model="item.hourMin"
controls-position="right" controls-position="right"
@change="onHour2dayChange"
:min="0" :min="0"
:max="workerInfo.hour2dayEnd ? workerInfo.hour2dayEnd : 24" :max="item.hourMax ? item.hourMax : 24"
></el-input-number> ></el-input-number>
<p>工时至</p> <p>工时至</p>
<el-input-number <el-input-number
v-model="workerInfo.hour2dayEnd" :disabled="index == workerInfo.hour2dayJson.length - 1"
v-model="item.hourMax"
controls-position="right" controls-position="right"
:min="workerInfo.hour2dayStart ? workerInfo.hour2dayStart : 0" @change="onHour2dayChange"
:min="item.hourMin ? item.hourMin : 0"
:max="24" :max="24"
></el-input-number> ></el-input-number>
<p>工时等于</p> <p>工时等于</p>
<el-input-number <el-input-number
v-model="workerInfo.hour2dayDay" v-model="item.day"
controls-position="right" controls-position="right"
:min="0" :min="0"
></el-input-number> ></el-input-number>
<p>工日</p> <p>工日</p>
<i v-if="index != 0" @click="onDeletePitch(index, 1)" class="el-icon-error"></i>
</div> </div>
</div> </div>
</div> </div>
@ -380,13 +385,13 @@
<div class="timing"> <div class="timing">
<div>设置特定时间范围</div> <div>设置特定时间范围</div>
<el-time-picker <el-time-picker
format="HH:mm" value-format="HH:mm"
v-model="workerInfo.overtimeHourStart" v-model="workerInfo.overtimeHourStart"
placeholder="时间点"> placeholder="时间点">
</el-time-picker> </el-time-picker>
<p>-</p> <p>-</p>
<el-time-picker <el-time-picker
format="HH:mm" value-format="HH:mm"
v-model="workerInfo.overtimeHourEnd" v-model="workerInfo.overtimeHourEnd"
placeholder="时间点"> placeholder="时间点">
</el-time-picker> </el-time-picker>
@ -406,34 +411,39 @@
<div>根据不同工时段换算工日</div> <div>根据不同工时段换算工日</div>
<p>:可设置0~~6工时(包含6工时)算0.5工日:6~~24工时算1工日</p> <p>:可设置0~~6工时(包含6工时)算0.5工日:6~~24工时算1工日</p>
<div class="progress-time"> <div class="progress-time">
<div v-for="(item, index) in 25"> <div @click="onClickPitch(index, 2)" v-for="(item, index) in 25">
<div v-if="workerInfo.overtimeHour2dayStart == index || workerInfo.overtimeHour2dayEnd == index" class="progress-active">{{ index }}</div> <div v-if="activePitchUp(overtimeHour2dayList, index)" class="progress-active">{{ index }}</div>
<div class="progress-bj"></div> <div class="progress-bj"></div>
<div class="progress-wz">{{ index }}</div> <div class="progress-wz">{{ index }}</div>
</div> </div>
</div> </div>
<div class="rulebox"> <div class="rulebox" v-for="(item, index) in workerInfo.overtimeHour2dayJson">
<div>规则</div> <div>规则</div>
<el-input-number <el-input-number
v-model="workerInfo.overtimeHour2dayStart" :disabled="index == 0"
v-model="item.hourMin"
controls-position="right" controls-position="right"
:min="0" :min="0"
:max="workerInfo.overtimeHour2dayEnd ? workerInfo.overtimeHour2dayEnd : 24" @change="onOvertimeHour2dayChange"
:max="item.hourMax ? item.hourMax : 24"
></el-input-number> ></el-input-number>
<p>工时至</p> <p>工时至</p>
<el-input-number <el-input-number
v-model="workerInfo.overtimeHour2dayEnd" :disabled="index == workerInfo.overtimeHour2dayJson.length - 1"
v-model="item.hourMax"
@change="onOvertimeHour2dayChange"
controls-position="right" controls-position="right"
:min="workerInfo.overtimeHour2dayStart ? workerInfo.overtimeHour2dayStart : 0" :min="item.hourMin ? item.hourMin : 0"
:max="24" :max="24"
></el-input-number> ></el-input-number>
<p>工时等于</p> <p>工时等于</p>
<el-input-number <el-input-number
v-model="workerInfo.overtimeHour2dayDay" v-model="item.day"
controls-position="right" controls-position="right"
:min="0" :min="0"
></el-input-number> ></el-input-number>
<p>工日</p> <p>工日</p>
<i v-if="index != 0" @click="onDeletePitch(index, 2)" class="el-icon-error"></i>
</div> </div>
</div> </div>
</div> </div>
@ -513,6 +523,8 @@ import {
getProjectConfigListApi, getProjectConfigListApi,
editProjectConfigListApi, editProjectConfigListApi,
} from "@/assets/js/api/project.js"; } from "@/assets/js/api/project.js";
import { isJSON } from '@/util/nowDate';
import dayjs from "dayjs";
export default { export default {
data() { data() {
return { return {
@ -540,7 +552,7 @@ export default {
yesAdvance: "", yesAdvance: "",
}, },
rules: { rules: {
ruleName: [ planName: [
{ {
required: true, required: true,
message: this.$t("message.workType.placeholder"), message: this.$t("message.workType.placeholder"),
@ -569,6 +581,8 @@ export default {
}, },
workerAttendanceGroupList: [], workerAttendanceGroupList: [],
batchSettingType: "", batchSettingType: "",
hour2dayList: [0, 24],
overtimeHour2dayList: [0, 24],
}; };
}, },
mounted() { mounted() {
@ -577,6 +591,71 @@ export default {
this.getProjectDetailFn(); this.getProjectDetailFn();
}, },
methods: { methods: {
onHour2dayChange(currentValue, oldValue) {
const findIndex = this.hour2dayList.findIndex(item => item == oldValue);
if(findIndex != -1) {
this.hour2dayList.splice(findIndex, 1, currentValue);
this.generateHour2dayJson();
}
},
onOvertimeHour2dayChange(currentValue, oldValue) {
const findIndex = this.overtimeHour2dayList.findIndex(item => item == oldValue);
if(findIndex != -1) {
this.overtimeHour2dayList.splice(findIndex, 1, currentValue);
this.generateOvertimeHour2dayJson();
}
},
onClickPitch(item, type) {
if(type == 1) {
this.hour2dayList.push(item);
this.generateHour2dayJson();
} else if(type == 2) {
this.overtimeHour2dayList.push(item);
this.generateOvertimeHour2dayJson();
}
},
onDeletePitch(eIndex, type) {
if(type == 1) {
const findIndex = this.hour2dayList.findIndex(item => item == this.workerInfo.hour2dayJson[eIndex].hourMin);
if(findIndex != -1) {
this.hour2dayList.splice(findIndex, 1);
this.generateHour2dayJson();
}
} else if (type == 2) {
const findIndex = this.overtimeHour2dayList.findIndex(item => item == this.workerInfo.overtimeHour2dayJson[eIndex].hourMin);
if(findIndex != -1) {
this.overtimeHour2dayList.splice(findIndex, 1);
this.generateOvertimeHour2dayJson();
}
}
},
generateHour2dayJson() {
const resultSortList = this.hour2dayList.sort((a,b) => a - b);
const oldSelectionList = this.workerInfo.hour2dayJson;
this.workerInfo.hour2dayJson = [];
resultSortList.forEach((ele, index) => {
if(index == 0) return;
this.workerInfo.hour2dayJson.push({
hourMin: resultSortList[index-1],
hourMax: ele,
day: oldSelectionList[index-1] ? oldSelectionList[index-1].day : 0,
})
})
},
generateOvertimeHour2dayJson() {
const resultSortList = this.overtimeHour2dayList.sort((a,b) => a - b);
const oldSelectionList = this.workerInfo.overtimeHour2dayJson;
this.workerInfo.overtimeHour2dayJson = [];
resultSortList.forEach((ele, index) => {
if(index == 0) return;
this.workerInfo.overtimeHour2dayJson.push({
hourMin: resultSortList[index-1],
hourMax: ele,
day: oldSelectionList[index-1] ? oldSelectionList[index-1].day : 0,
})
})
},
getWorkerAttendanceGroupV2List() { getWorkerAttendanceGroupV2List() {
getWorkerAttendanceGroupV2ListApi({ getWorkerAttendanceGroupV2ListApi({
projectSn: this.$store.state.projectSn, projectSn: this.$store.state.projectSn,
@ -687,8 +766,18 @@ export default {
hour2dayStart: "", hour2dayStart: "",
hour2dayEnd: "", hour2dayEnd: "",
hour2dayDay: "", hour2dayDay: "",
hour2dayJson: [{
hourMin: 0,
hourMax: 24,
day: 0,
}],
ratio2dayHour: "", ratio2dayHour: "",
ratio2dayDay: "", ratio2dayDay: "",
overtimeHour2dayJson: [{
hourMin: 0,
hourMax: 24,
day: 0,
}],
ratio2dayLess1: "", ratio2dayLess1: "",
isOpenOvertime: false, isOpenOvertime: false,
overtimeHourType: "", overtimeHourType: "",
@ -701,6 +790,8 @@ export default {
overtimeRatio2dayHour: "", overtimeRatio2dayHour: "",
overtimeRatio2dayDay: "", overtimeRatio2dayDay: "",
} }
this.hour2dayList = [0, 24];
this.overtimeHour2dayList= [0, 24];
}, },
addBefore(type) { addBefore(type) {
this.batchSettingType = type; this.batchSettingType = type;
@ -735,10 +826,47 @@ export default {
// console.log('', worker) // console.log('', worker)
this.workerInfo = JSON.parse(JSON.stringify({ this.workerInfo = JSON.parse(JSON.stringify({
...worker, ...worker,
overtimeHourStart: worker.overtimeHourStart ? dayjs(worker.overtimeHourStart).format('HH:mm') : "",
overtimeHourEnd: worker.overtimeHourStart ? dayjs(worker.overtimeHourEnd).format('HH:mm') : "",
isOpenOvertime: worker.isOpenOvertime == 1 ? true : false, isOpenOvertime: worker.isOpenOvertime == 1 ? true : false,
ratio2dayLess1: worker.ratio2dayLess1 == 1 ? true : false, ratio2dayLess1: worker.ratio2dayLess1 == 1 ? true : false,
overtimeRatio2dayLess1: worker.overtimeRatio2dayLess1 == 1 ? true : false, overtimeRatio2dayLess1: worker.overtimeRatio2dayLess1 == 1 ? true : false,
hour2dayJson: isJSON(worker.hour2dayJson) && worker.hour2dayJson ? JSON.parse(worker.hour2dayJson) : [{
hourMin: 0,
hourMax: 24,
day: 0,
}],
overtimeHour2dayJson: isJSON(worker.overtimeHour2dayJson) && worker.overtimeHour2dayJson ? JSON.parse(worker.overtimeHour2dayJson) : [{
hourMin: 0,
hourMax: 24,
day: 0,
}],
})); }));
if(this.workerInfo.hour2dayJson.length > 2) {
this.workerInfo.hour2dayJson.forEach(item => {
if(!this.hour2dayList.includes(item.hourMin)) {
this.hour2dayList.push(item.hourMin)
}
if(!this.hour2dayList.includes(item.hourMax)) {
this.hour2dayList.push(item.hourMax)
}
})
} else {
this.hour2dayList = [0, 24];
}
if(this.workerInfo.overtimeHour2dayJson.length > 2) {
this.workerInfo.overtimeHour2dayJson.forEach(item => {
if(!this.overtimeHour2dayList.includes(item.hourMin)) {
this.overtimeHour2dayList.push(item.hourMin)
}
if(!this.overtimeHour2dayList.includes(item.hourMax)) {
this.overtimeHour2dayList.push(item.hourMax)
}
})
}else {
this.overtimeHour2dayList= [0, 24];
}
this.getWorkerAttendanceGroupV2List(); this.getWorkerAttendanceGroupV2List();
}, },
deleteBefore(worker) {}, deleteBefore(worker) {},
@ -775,9 +903,14 @@ export default {
Submit() { Submit() {
this.$refs.form.validate((valid) => { this.$refs.form.validate((valid) => {
if (valid) { if (valid) {
const defaultTime = dayjs().format('YYYY-MM-DD');
const params = { const params = {
...this.workerInfo, ...this.workerInfo,
projectSn : this.$store.state.projectSn, projectSn : this.$store.state.projectSn,
overtimeHourStart: this.workerInfo.overtimeHourStart ? dayjs(defaultTime + this.workerInfo.overtimeHourStart + ':00').format('YYYY-MM-DD HH:mm:ss') : "",
overtimeHourEnd: this.workerInfo.overtimeHourEnd ? dayjs(defaultTime + this.workerInfo.overtimeHourEnd + ':00').format('YYYY-MM-DD HH:mm:ss') : "",
hour2dayJson: JSON.stringify(this.workerInfo.hour2dayJson),
overtimeHour2dayJson: JSON.stringify(this.workerInfo.overtimeHour2dayJson),
isOpenOvertime: this.workerInfo.isOpenOvertime ? 1 : 0, isOpenOvertime: this.workerInfo.isOpenOvertime ? 1 : 0,
ratio2dayLess1: this.workerInfo.ratio2dayLess1 ? 1 : 0, ratio2dayLess1: this.workerInfo.ratio2dayLess1 ? 1 : 0,
overtimeRatio2dayLess1: this.workerInfo.overtimeRatio2dayLess1 ? 1 : 0, overtimeRatio2dayLess1: this.workerInfo.overtimeRatio2dayLess1 ? 1 : 0,
@ -806,6 +939,13 @@ export default {
}); });
}, },
}, },
computed: {
activePitchUp() {
return (dataList, index) => {
return dataList.includes(index);
}
}
}
}; };
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
@ -931,6 +1071,7 @@ export default {
} }
.rulebox { .rulebox {
display: flex; display: flex;
align-items: center;
margin-top: 10px; margin-top: 10px;
> div:first-child { > div:first-child {
margin-right: 10px; margin-right: 10px;
@ -942,9 +1083,16 @@ export default {
color: #a2a4af; color: #a2a4af;
margin-left: 10px; margin-left: 10px;
} }
> i {
color: #a2a4af;
margin-left: 10px;
}
/deep/ .el-input-number { /deep/ .el-input-number {
width: 80px; width: 80px;
line-height: 24px; line-height: 24px;
.el-input {
width: 80px !important;
}
.el-input-number__decrease { .el-input-number__decrease {
height: 12px; height: 12px;
line-height: 12px; line-height: 12px;

View File

@ -154,14 +154,14 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="checkWorkerNames" prop="totalHour"
show-overflow-tooltip show-overflow-tooltip
label="合计" label="合计"
align="center" align="center"
width="90" width="90"
> >
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.checkWorkerNames ? scope.row.checkWorkerNames : "--" }} {{ scope.row.totalHour ? scope.row.totalHour : "--" }}
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -425,7 +425,7 @@ export default {
let dataList = []; let dataList = [];
for (const key in dateTime) { for (const key in dateTime) {
dataList.push({ dataList.push({
date: dayjs(key).format("YYYY/MM/DD"), date: dayjs(key).format("YYYY-MM-DD"),
day: dayjs(key).format("DD"), day: dayjs(key).format("DD"),
}); });
} }

View File

@ -233,7 +233,8 @@
realTimeDevData.ranger realTimeDevData.ranger
? realTimeDevData.ranger ? realTimeDevData.ranger
: 0 : 0
}}° }}m
<!-- ° -->
</div> </div>
</div> </div>
</div> </div>