2 changed files with 376 additions and 63 deletions
@ -0,0 +1,274 @@ |
|||||
|
<!-- |
||||
|
@ 作者: 秦东 |
||||
|
@ 时间: 2025-08-11 14:11:11 |
||||
|
@ 备注: 公司值班 |
||||
|
--> |
||||
|
<script lang="ts" setup> |
||||
|
import { |
||||
|
companyDutyInit, |
||||
|
getYearMonthWorkMan, |
||||
|
delOneDayDuty, |
||||
|
} from "@/api/hr/paiban/index"; |
||||
|
|
||||
|
import SavePage from "@/views/hr/company/savePage.vue"; |
||||
|
|
||||
|
const pickMonth = ref(""); |
||||
|
const initConter = ref(""); |
||||
|
const isSelect = ref(false); |
||||
|
const saveOpen = ref(false); |
||||
|
const workManLsit = ref([]); |
||||
|
const saveInfo = reactive({ |
||||
|
id: 0, |
||||
|
orgid: 0, |
||||
|
orgname: "", |
||||
|
allDay: [], |
||||
|
baiTian: [], |
||||
|
days: 1, |
||||
|
holiday: 2, |
||||
|
month: 1, |
||||
|
night: [], |
||||
|
years: 2025, |
||||
|
isCompany: 0, |
||||
|
}); |
||||
|
const initInfo = () => { |
||||
|
companyDutyInit().then((res: any) => { |
||||
|
console.log("初始化数据:", res.data); |
||||
|
initConter.value = res.data; |
||||
|
getOrgList(res.data.currentOrg, res.data.year, res.data.month); |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
//获取行政组织列表 |
||||
|
const getOrgList = (orgid: any, years: any, months: any) => { |
||||
|
getYearMonthWorkMan({ |
||||
|
orgId: orgid, |
||||
|
years: years, |
||||
|
month: months, |
||||
|
}).then((resData) => { |
||||
|
console.log("排班数据数据:", resData); |
||||
|
workManLsit.value = resData.data.list; |
||||
|
initConter.value.titlePc = resData.data.title; |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
onMounted(() => { |
||||
|
initInfo(); |
||||
|
}); |
||||
|
//删除一设定人员 |
||||
|
const delTag = () => { |
||||
|
console.log("删除一设定人员"); |
||||
|
}; |
||||
|
//选中行政组织 |
||||
|
const pickOrg = (val: any) => { |
||||
|
getOrgList(val, initConter.value.year, initConter.value.month); |
||||
|
}; |
||||
|
//编辑数据 |
||||
|
const saveData = (ord: any, val: any) => { |
||||
|
console.log("编辑数据", ord, val); |
||||
|
saveInfo.id = val.id; |
||||
|
saveInfo.orgid = ord.id ? ord.id : ""; |
||||
|
saveInfo.orgname = ord.name ? ord.name : ""; |
||||
|
saveInfo.allDay = val.allDay ? val.allDay : []; |
||||
|
saveInfo.baiTian = val.baiTian ? val.baiTian : []; |
||||
|
saveInfo.days = val.days ? val.days : 1; |
||||
|
saveInfo.holiday = val.holiday ? val.holiday : 2; |
||||
|
saveInfo.month = val.month ? val.month : 1; |
||||
|
saveInfo.night = val.night ? val.night : []; |
||||
|
saveInfo.years = val.years ? val.years : 2025; |
||||
|
saveInfo.isCompany = ord.isCompany ? ord.isCompany : 0; |
||||
|
saveOpen.value = true; |
||||
|
console.log("编辑数据", saveInfo); |
||||
|
}; |
||||
|
|
||||
|
//清空值班人员 |
||||
|
const delOrgDuty = (ord: any, val: any) => { |
||||
|
console.log("清空值班人员", initConter.value, val); |
||||
|
delOneDayDuty({ id: val.id }).then(() => { |
||||
|
getOrgList(initConter.value.currentOrg, val.years, val.month); |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
//刷新 |
||||
|
const pickRefresh = (ordId: any, years: any, months: any) => { |
||||
|
console.log("数据刷新", ordId, years, months); |
||||
|
getOrgList(ordId, years, months); |
||||
|
}; |
||||
|
//监听日期变化 |
||||
|
watch( |
||||
|
() => pickMonth.value, |
||||
|
(val: any) => { |
||||
|
let newDay = new Date(val); |
||||
|
let yearVal = val.getFullYear(); |
||||
|
let monthVal = val.getMonth() + 1; |
||||
|
getOrgList(initConter.value.currentOrg, yearVal, monthVal); |
||||
|
}, |
||||
|
{ |
||||
|
deep: true, |
||||
|
} |
||||
|
); |
||||
|
</script> |
||||
|
<template> |
||||
|
<div class="comBox"> |
||||
|
<el-card shadow="always"> |
||||
|
<template #header> |
||||
|
<div class="card_header"> |
||||
|
<div> |
||||
|
<el-select |
||||
|
v-if="initConter.orgLevel == 5" |
||||
|
v-model="initConter.currentOrg" |
||||
|
placeholder="请选择行政组织" |
||||
|
style="width: 300px" |
||||
|
@change="pickOrg($event)" |
||||
|
> |
||||
|
<el-option |
||||
|
v-for="item in initConter.orgList" |
||||
|
:key="item.id" |
||||
|
:label="item.name + '(' + item.id + ')'" |
||||
|
:value="item.id" |
||||
|
/> |
||||
|
</el-select> |
||||
|
<div v-else> |
||||
|
<div v-for="item in initConter.orgList"> |
||||
|
<span v-if="item.id == initConter.currentOrg" |
||||
|
>{{ item.name }}({{ item.id }})</span |
||||
|
> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div>{{ initConter.titlePc }}</div> |
||||
|
<div> |
||||
|
<!-- <el-button type="primary">添加值班信息</el-button> --> |
||||
|
<el-date-picker v-model="pickMonth" type="month" placeholder="请选择月份" /> |
||||
|
</div> |
||||
|
</div> |
||||
|
</template> |
||||
|
<div class="deep_card__body"> |
||||
|
<table> |
||||
|
<tr class="tabelFirst"> |
||||
|
<td></td> |
||||
|
<td |
||||
|
align="center" |
||||
|
v-for="(item, index) in initConter.monthAllDay" |
||||
|
:key="index" |
||||
|
style="width: 300px" |
||||
|
> |
||||
|
{{ item }} |
||||
|
</td> |
||||
|
</tr> |
||||
|
<tr v-for="(item, index) in workManLsit" :key="index"> |
||||
|
<td>{{ item.orgInfo.name }}</td> |
||||
|
<td v-for="(us, usi) in item.dutyList" :key="usi"> |
||||
|
<div v-if="us.holiday == 1"> |
||||
|
<el-divider v-if="us.baiTian">白天</el-divider> |
||||
|
<el-space wrap> |
||||
|
<el-tag v-for="(mItem, mi) in us.baiTian" closable @close="delTag()">{{ |
||||
|
mItem.name |
||||
|
}}</el-tag> |
||||
|
</el-space> |
||||
|
<el-divider v-if="us.night">夜间</el-divider> |
||||
|
<el-space wrap> |
||||
|
<el-tag v-for="(mItem, mi) in us.night" closable @close="delTag()">{{ |
||||
|
mItem.name |
||||
|
}}</el-tag> |
||||
|
</el-space> |
||||
|
<el-divider v-if="us.allDay">全天</el-divider> |
||||
|
<el-space wrap> |
||||
|
<el-tag v-for="(mItem, mi) in us.allDay" closable @close="delTag()">{{ |
||||
|
mItem.name |
||||
|
}}</el-tag> |
||||
|
</el-space> |
||||
|
</div> |
||||
|
<div v-else> |
||||
|
<el-space wrap> |
||||
|
<el-tag v-for="(mItem, mi) in us.allDay" closable @close="delTag()">{{ |
||||
|
mItem.name |
||||
|
}}</el-tag> |
||||
|
</el-space> |
||||
|
</div> |
||||
|
|
||||
|
<div class="butBox"> |
||||
|
<el-button |
||||
|
type="primary" |
||||
|
text |
||||
|
size="small" |
||||
|
@click="saveData(item.orgInfo, us)" |
||||
|
>编辑</el-button |
||||
|
> |
||||
|
<el-button |
||||
|
:disabled="us.id == 0" |
||||
|
type="danger" |
||||
|
text |
||||
|
size="small" |
||||
|
@click="delOrgDuty(item.orgInfo, us)" |
||||
|
>清空</el-button |
||||
|
> |
||||
|
</div> |
||||
|
</td> |
||||
|
</tr> |
||||
|
</table> |
||||
|
</div> |
||||
|
</el-card> |
||||
|
<SavePage |
||||
|
v-model:is-open="saveOpen" |
||||
|
:duty-cont="saveInfo" |
||||
|
:cumpany-id="initConter.currentOrg" |
||||
|
@pickRefresh="pickRefresh" |
||||
|
/> |
||||
|
</div> |
||||
|
</template> |
||||
|
<style lang="scss" scoped> |
||||
|
.comBox { |
||||
|
padding: 10px 20px 0 20px; |
||||
|
:deep .el-card__header { |
||||
|
padding: 10px 15px; |
||||
|
} |
||||
|
.deep_card__body { |
||||
|
width: 100%; |
||||
|
overflow: auto; |
||||
|
} |
||||
|
.card_header { |
||||
|
display: flex; |
||||
|
justify-content: space-between; |
||||
|
image-rendering: css; |
||||
|
align-items: center; |
||||
|
} |
||||
|
.tableBox { |
||||
|
} |
||||
|
:deep table { |
||||
|
width: 100%; |
||||
|
border-collapse: collapse; |
||||
|
th: first-child; |
||||
|
td: first-child; |
||||
|
th:first-child { |
||||
|
z-index: 3; |
||||
|
/*左上角单元格z-index,切记要设置,不然表格纵向横向滚动时会被该单元格右方或者下方的单元格遮挡*/ |
||||
|
background: #f4f4f5; |
||||
|
} |
||||
|
th, |
||||
|
td { |
||||
|
border: 1px solid #ddd; |
||||
|
padding: 5px 0 0 0px; |
||||
|
} |
||||
|
th { |
||||
|
background-color: #2196f3; |
||||
|
color: white; |
||||
|
font-weight: bold; |
||||
|
} |
||||
|
td { |
||||
|
min-width: 160px; |
||||
|
color: #555; |
||||
|
} |
||||
|
} |
||||
|
.butBox { |
||||
|
display: flex; |
||||
|
justify-content: space-between; |
||||
|
border-top: 1px solid #ddd; |
||||
|
margin-top: 5px; |
||||
|
} |
||||
|
.tabelFirst { |
||||
|
position: sticky; |
||||
|
left: 0; |
||||
|
top: 0; |
||||
|
} |
||||
|
} |
||||
|
</style> |
||||
Loading…
Reference in new issue