数通互联化工云平台
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

471 lines
13 KiB

<!--
@ 作者: 秦东
@ 时间: 2025-01-15 14:13:24
@ 备注: 排班管理
-->
<script lang="ts" setup>
import DateClass from "@/api/calendar/DateClass";
import { clockFactory } from "@/api/calendar/utils";
import { accordRoleGiveOrg, gainShiftRules } from "@/api/hr/people/index";
import MonthPage from "@/views/hr/teams/classTime/monthPage.vue";
import WeekPage from "@/views/hr/teams/classTime/weekPage.vue";
import DayPage from "@/views/hr/teams/classTime/dayPage.vue";
import SetupShiftRules from "@/views/hr/teams/classTime/setupShiftRules.vue";
const orgTreeLoading = ref(false);
const orgTreeList = ref([]); //行政组织树数据
const orgTreeProps = {
children: "child",
label: "name",
}; //行政组织树对照值
const monthPageRef = ref(null);
const weekPageRef = ref(null);
const dayPageRef = ref(null);
const cureeOrgName = ref("");
const cureeOrgId = ref(0);
const taday = ref<any>([]); //当前日期
const curtteDayType = ref(1);
const curtteDay = ref(1);
const shiftRulesOpen = ref(false);
const teamRulerIsm = ref({
begainTime: "",
id: "",
orgId: "",
periodName: "",
periodid: "",
rules: "",
rulesTime: "长白班(1)",
starttime: "",
time: "",
typeIdStr: "",
typeName: "",
typeid: "",
});
/**
@ 作者: 秦东
@ 时间: 2025-01-16 09:46:35
@ 功能: 获取行政组织树
*/
const gainOrgTree = () => {
orgTreeLoading.value = true;
accordRoleGiveOrg()
.then((dada) => {
console.log("获取行政组织树", dada);
orgTreeList.value = dada.data.orgTree;
if (dada.data.orgName != "") {
cureeOrgName.value = dada.data.orgName;
cureeOrgId.value = dada.data.orgId;
} else if (dada.data.maindeparmentName != "") {
cureeOrgName.value = dada.data.maindeparmentName;
cureeOrgId.value = dada.data.maindeparment;
} else if (dada.data.companyName != "") {
cureeOrgName.value = dada.data.companyName;
cureeOrgId.value = dada.data.company;
}
getCurrOrgRules(cureeOrgId.value.toString());
})
.finally(() => {
orgTreeLoading.value = false;
});
};
/**
@ 作者: 秦东
@ 时间: 2025-01-16 09:57:20
@ 功能: 选中行政组织
*/
const handleOrgTreeNodeClick = (val: any) => {
// console.log("选中行政组织", val);
cureeOrgName.value = val.name;
cureeOrgId.value = val.id;
getCurrOrgRules(val.id.toString());
switch (curtteDayType.value) {
case 1:
monthPageRef.value.analyban(val.id.toString());
break;
case 2:
weekPageRef.value.analysisWeek(val.id.toString());
break;
case 3:
dayPageRef.value.analysisDays(val.id.toString());
break;
default:
}
// monthPageRef.value.analyban(val.id.toString());
};
//当前月
const curtteMonth = computed(() => {
if (taday.value.length <= 0) {
taday.value = DateClass.getCurrent();
}
// console.log("当前月", taday.value);
if (curtteDayType.value != 2) {
if (taday.value.length >= 2) {
return taday.value[0] + "年" + taday.value[1] + "月";
}
} else {
if (taday.value.start != undefined) {
return taday.value.start[0] + "年";
} else {
return taday.value[0] + "年" + taday.value[1] + "月";
}
}
});
//当前星期
const curttWeek = computed(() => {
if (taday.value.length <= 0) {
taday.value = DateClass.getCurrent();
}
// console.log("当前星期", taday.value);
if (curtteDayType.value != 2) {
return DateClass.getWeek(
DateClass.solarWeek(taday.value[0], taday.value[1], taday.value[2])
);
} else {
return (
taday.value.start[1] +
"月" +
taday.value.start[2] +
"-" +
taday.value.end[1] +
"月" +
taday.value.end[2]
);
}
});
/**
@ 作者: 秦东
@ 时间: 2024-07-12 11:12:12
@ 功能: 后退时间
*/
const backTime = () => {
if (taday.value.length <= 0) {
taday.value = DateClass.getCurrent();
}
// console.log("后退时间", taday.value);
if (curtteDayType.value != 2) {
taday.value = DateClass.gobackTime(
taday.value[0],
taday.value[1],
taday.value[2],
curtteDayType.value,
-1
);
} else {
let weekObject = DateClass.gobackTime(
taday.value.start[0],
taday.value.start[1],
taday.value.start[2],
curtteDayType.value,
-1
);
taday.value = weekObject;
}
console.log("curtteDayType.value--------->", curtteDayType.value);
nextTick(() => {
switch (curtteDayType.value) {
case 1:
console.log("curtteDayType.value-----1---->", curtteDayType.value);
monthPageRef.value.analyban();
break;
case 2:
console.log("curtteDayType.value---2------>", curtteDayType.value);
weekPageRef.value.analysisWeek();
break;
case 3:
console.log("curtteDayType.value---3------>", curtteDayType.value);
dayPageRef.value.analysisDays();
break;
default:
console.log("curtteDayType.value---4------>", curtteDayType.value);
}
});
};
/**
@ 作者: 秦东
@ 时间: 2024-07-12 14:04:06
@ 功能: 前进时间
*/
const forwardTime = () => {
// console.log("前进时间", curtteDayType.value);
if (taday.value.length <= 0) {
taday.value = DateClass.getCurrent();
}
if (curtteDayType.value != 2) {
taday.value = DateClass.moveTime(
taday.value[0],
taday.value[1],
taday.value[2],
curtteDayType.value
);
} else {
let weekObject = DateClass.moveTime(
taday.value.start[0],
taday.value.start[1],
taday.value.start[2],
curtteDayType.value
);
taday.value = weekObject;
}
console.log("curtteDayType.value--------->", curtteDayType.value);
nextTick(() => {
switch (curtteDayType.value) {
case 1:
console.log("curtteDayType.value-----1---->", curtteDayType.value);
monthPageRef.value.analyban();
break;
case 2:
console.log("curtteDayType.value---2------>", curtteDayType.value);
weekPageRef.value.analysisWeek();
break;
case 3:
console.log("curtteDayType.value---3------>", curtteDayType.value);
dayPageRef.value.analysisDays();
break;
default:
console.log("curtteDayType.value---4------>", curtteDayType.value);
}
});
};
/**
@ 作者: 秦东
@ 时间: 2024-07-13 16:58:07
@ 功能: 回到今日
*/
const goTady = () => {
taday.value = DateClass.getCurrent();
};
/**
@ 作者: 秦东
@ 时间: 2024-07-13 08:33:01
@ 功能: 选择时间
*/
const pickTime = (val: number) => {
curtteDayType.value = val;
switch (val) {
case 2:
taday.value = DateClass.getCurrent();
let weekObject = DateClass.gobackTime(
taday.value[0],
taday.value[1],
taday.value[2],
curtteDayType.value
);
taday.value = weekObject;
break;
case 3:
taday.value = DateClass.getCurrent();
break;
default:
taday.value = DateClass.getCurrent();
break;
}
};
/**
@ 作者: 秦东
@ 时间: 2025-01-16 16:39:32
@ 功能: 获取当前行政组织排班制度
*/
const getCurrOrgRules = (orgId: any) => {
gainShiftRules({ id: orgId }).then((data: any) => {
console.log("获取当前行政组织排班制度", data, data.code == 0);
if (data.code == 0) {
teamRulerIsm.value.begainTime = data.data.begainTime;
teamRulerIsm.value.id = data.data.id.toString();
teamRulerIsm.value.orgId = data.data.orgId.toString();
teamRulerIsm.value.periodName = data.data.periodName;
teamRulerIsm.value.periodid = data.data.periodid.toString();
teamRulerIsm.value.rules = data.data.rules.toString();
teamRulerIsm.value.rulesTime = data.data.rulesTime;
teamRulerIsm.value.starttime = data.data.starttime;
teamRulerIsm.value.time = data.data.time;
teamRulerIsm.value.typeIdStr = data.data.typeIdStr;
teamRulerIsm.value.typeName = data.data.typeName;
teamRulerIsm.value.typeid = data.data.typeid;
} else {
teamRulerIsm.value.begainTime = "";
teamRulerIsm.value.id = "";
teamRulerIsm.value.orgId = "";
teamRulerIsm.value.periodName = "";
teamRulerIsm.value.periodid = "";
teamRulerIsm.value.rules = "";
teamRulerIsm.value.rulesTime = "";
teamRulerIsm.value.starttime = "";
teamRulerIsm.value.time = "";
teamRulerIsm.value.typeIdStr = "";
teamRulerIsm.value.typeName = "";
teamRulerIsm.value.typeid = "";
}
});
};
/**
@ 作者: 秦东
@ 时间: 2025-01-16 15:30:43
@ 功能: 更新倒班制度及源点
*/
const updateShiftRules = (val?: any) => {
getCurrOrgRules(cureeOrgId.value.toString());
};
onMounted(() => {
gainOrgTree();
if (taday.value.length <= 0) {
taday.value = DateClass.getCurrent();
}
});
/**
@ 作者: 秦东
@ 时间: 2025-01-16 16:50:12
@ 功能: 设置执行倒班制度及源点数据
*/
const setupOrgRules = () => {
shiftRulesOpen.value = true;
};
</script>
<template>
<div class="app-container">
<el-container>
<el-aside width="300px" style="border-right: solid 1px #f0f0f0">
<el-scrollbar class="orgTreeBox">
<el-tree
ref="orgTreeRef"
v-loading="orgTreeLoading"
node-key="id"
class="orgTree"
:data="orgTreeList"
:props="orgTreeProps"
:expand-on-click-node="false"
:check-on-click-node="true"
:check-strictly="true"
:default-expand-all="false"
@node-click="handleOrgTreeNodeClick"
/>
</el-scrollbar>
</el-aside>
<el-container>
<el-header
class="contentBetween"
style="border-bottom: solid 1px #f0f0f0; padding-top: 5px"
>
<el-text>当前行政组织:{{ cureeOrgName }}</el-text>
<div>
<el-text
>执行倒班制度及源点:{{ teamRulerIsm.typeName }} [
{{ teamRulerIsm.begainTime }}]</el-text
>
<el-button type="primary" text @click="setupOrgRules">设置</el-button>
</div>
</el-header>
<el-main>
<div class="calBox">
<!--日历头部-->
<div class="calHead">
<div>
<i class="fa fa-calendar icont"></i>
<el-text class="day">{{ curtteMonth }}</el-text>
<el-text class="week">{{ curttWeek }}</el-text>
</div>
<div>
<el-button-group class="ml-4">
<el-button size="small" @click="goTady()">今天</el-button>
<el-button
:color="curtteDayType == 1 ? '#a0cfff' : ''"
@click="pickTime(1)"
size="small"
>月</el-button
>
<el-button
:color="curtteDayType == 2 ? '#a0cfff' : ''"
@click="pickTime(2)"
size="small"
>周</el-button
>
<el-button
:color="curtteDayType == 3 ? '#a0cfff' : ''"
@click="pickTime(3)"
size="small"
>日</el-button
>
<el-button
size="small"
class="fa fa-angle-left"
@click="backTime()"
></el-button>
<el-button
size="small"
class="fa fa-angle-right"
@click="forwardTime()"
></el-button>
</el-button-group>
</div>
</div>
<div class="weekNumber">
<MonthPage
ref="monthPageRef"
v-if="curtteDayType == 1"
:ta-day="taday"
:org-id="cureeOrgId"
/>
<WeekPage
ref="weekPageRef"
v-if="curtteDayType == 2"
:ta-day="taday"
:org-id="cureeOrgId"
/>
<DayPage
ref="dayPageRef"
v-if="curtteDayType == 3"
:ta-day="taday"
:org-id="cureeOrgId"
/>
</div>
</div>
<SetupShiftRules
v-model:open="shiftRulesOpen"
:org-id="cureeOrgId"
:org-name="cureeOrgName"
:ruler-info="teamRulerIsm"
@updateShiftRules="updateShiftRules"
/>
</el-main>
</el-container>
</el-container>
</div>
</template>
<style lang="scss" scoped>
.app-container {
:deep .el-tree-node__content {
padding: 16px 0;
}
}
.orgTreeBox {
height: calc(100vh - 210px);
}
.contentBetween {
display: flex;
justify-content: space-between;
align-items: center;
}
.calBox {
width: 100%;
height: calc(100vh - 290px);
.calHead {
padding: 10px 0;
border-bottom: 1px solid #ccc;
display: flex;
align-items: center;
justify-content: space-between;
.icont {
font-size: 20px;
}
.day {
font-size: 20px;
padding: 0 10px;
font-weight: bold;
}
}
}
</style>