数通互联化工云平台
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.
 
 
 
 
 
 

398 lines
10 KiB

<!--
@ 作者: 秦东
@ 时间: 2025-01-14 13:33:45
@ 备注: 添加班组轮询规则
-->
<script lang="ts" setup>
import { workTimeInfo, ruleInfo, TimesClassInfo } from "@/api/hr/people/type";
import { teamcontlist } from "@/api/hr/org/index";
import { addTeamTime } from "@/api/hr/people/index";
const props = defineProps({
open: {
type: Boolean,
default: false,
},
teamInfo: {
type: Object,
default() {
return {};
},
},
});
const tiemList = ref<string[]>([]);
const emits = defineEmits(["update:open", "restdata"]);
const sunmitBut = ref(false);
const formInfo = reactive({
name: "",
});
const worktimeList = ref<workTimeInfo[]>([
{
title: "",
startTime: "",
endTime: "",
},
]);
let countNum = 1;
const ruleList = ref<ruleInfo[]>([
{
teamid: "",
sort: countNum,
},
]);
/**
* 弹窗显示控制
*/
const isShow = computed({
get: () => {
if (props.open) {
getTimeClassList();
}
return props.open;
},
set: (val) => {
emits("update:open", val);
},
});
/**
@ 作者: 秦东
@ 时间: 2025-01-14 13:57:36
@ 功能: 关闭弹窗
*/
const closeDialog = () => {
emits("update:open", false);
countNum = 1;
worktimeList.value = [
{
title: "",
startTime: "",
endTime: "",
},
];
ruleList.value = [
{
teamid: "",
sort: countNum,
},
];
formInfo.name = "";
sunmitBut.value = false;
emits("restdata");
};
/**
@ 作者: 秦东
@ 时间: 2025-01-14 11:34:57
@ 功能: 获取班次列表
*/
const getTimeClassList = () => {
teamcontlist().then((data: any) => {
tiemList.value = data.data.list;
});
};
/**
@ 作者: 秦东
@ 时间: 2025-01-14 15:16:33
@ 功能: 添加工作时间段安排
*/
const addTimeSet = () => {
worktimeList.value.push({
title: "",
startTime: "",
endTime: "",
});
};
/**
@ 作者: 秦东
@ 时间: 2025-01-14 15:34:42
@ 功能: 删除时间片段
*/
const delTimeSet = (val: any) => {
console.log("删除时间片段", val.$index, worktimeList.value.length);
if (worktimeList.value.length > 1) {
worktimeList.value.splice(val.$index, 1);
console.log("删除时间片段", val.$index);
} else {
val.title = "";
val.startTime = "";
val.title = "";
}
};
/**
@ 作者: 秦东
@ 时间: 2025-01-14 16:00:54
@ 功能: 添加轮询规则
*/
const addTimeRuleSet = () => {
countNum++;
ruleList.value.push({
sort: countNum,
teamid: "",
});
};
/**
@ 作者: 秦东
@ 时间: 2025-01-14 16:06:44
@ 功能: 删除轮询规则
*/
const delTimeRuleSet = (val: any) => {
if (ruleList.value.length > 1) {
ruleList.value.splice(val.$index, 1);
} else {
val.sort = 1;
val.titteamidle = "";
}
};
/**
@ 作者: 秦东
@ 时间: 2025-01-14 16:19:51
@ 功能: 提交数据
*/
const addContsubmit = () => {
sunmitBut.value = true;
if (!formInfo.name) {
ElMessage.error("请输入名称");
sunmitBut.value = false;
return false;
} else {
if (formInfo.name == "" || formInfo.name == null) {
ElMessage.error("请输入名称");
sunmitBut.value = false;
return false;
}
}
let workList = new Array();
let ruleAry = new Array();
if (worktimeList.value.length < 1) {
ElMessage.error("请输入工作时间安排!");
sunmitBut.value = false;
return false;
} else {
let isTrue = false;
worktimeList.value.forEach((item: any) => {
if (!item.title) {
isTrue = true;
} else {
if (item.title == "" || item.title == null) {
isTrue = true;
}
}
if (!item.startTime) {
isTrue = true;
} else {
if (item.startTime == "" || item.startTime == null) {
isTrue = true;
}
}
if (!item.endTime) {
isTrue = true;
} else {
if (item.endTime == "" || item.endTime == null) {
isTrue = true;
}
}
workList.push(item);
});
if (isTrue) {
ElMessage.error("请输入工作时间安排!");
sunmitBut.value = false;
return false;
}
}
if (ruleList.value.length < 1) {
ElMessage.error("请输入轮询规则!");
sunmitBut.value = false;
return false;
} else {
let isOk = false;
ruleList.value.forEach((item: any) => {
// if (!item.id) {
// isOk = true;
// } else {
// if (item.id == "" || item.id == null) {
// isOk = true;
// }
// }
if (!item.teamid) {
isOk = true;
} else {
if (item.teamid == "" || item.teamid == null) {
isOk = true;
}
}
ruleAry.push({
sort: item.sort,
teamid: item.teamid.toString(),
});
});
if (isOk) {
ElMessage.error("请输入轮询规则!");
sunmitBut.value = false;
return false;
}
}
var sendData = {
name: formInfo.name,
rule: ruleAry,
list: workList,
};
console.log("上传规则", sendData);
addTeamTime(sendData)
.then((data) => {
console.log("上传规则-------<", data);
if (data.code == 0) {
ElMessageBox.confirm("新增成功!是否继续添加?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
countNum = 1;
worktimeList.value = [
{
title: "",
startTime: "",
endTime: "",
},
];
ruleList.value = [
{
teamid: "",
sort: countNum,
},
];
formInfo.name = "";
sunmitBut.value = false;
})
.catch(() => {
closeDialog();
});
} else {
ElMessage.error(data.msg || "添加失败!");
closeDialog();
}
})
.finally(() => {
sunmitBut.value = false;
});
};
</script>
<template>
<el-dialog
v-model="isShow"
width="60%"
title="添加班组轮询规则"
append-to-body
:before-close="closeDialog"
>
<el-form ref="addForm" :model="formInfo" label-width="120px" class="demo-ruleForm">
<el-form-item label="名称" prop="name">
<el-input v-model="formInfo.name" placeholder="请输入名称"></el-input>
</el-form-item>
<el-form-item label="工作时间段安排" prop="rule">
<el-table :data="worktimeList" border style="width: 100%">
<el-table-column align="center" prop="title" label="时段名称" width="180">
<template #default="scope">
<el-input v-model="scope.row.title" placeholder="请输入时段名称"></el-input>
</template>
</el-table-column>
<el-table-column align="center" label="开始与结束时间">
<template #default="scope">
<el-time-select
style="width: 120px"
placeholder="起始时间"
v-model="scope.row.startTime"
start="00:00"
step="00:01"
end="23:59"
>
</el-time-select>
<el-time-select
style="width: 120px"
placeholder="结束时间"
v-model="scope.row.endTime"
:min-time="scope.row.startTime"
start="00:00"
step="00:01"
end="23:59"
>
</el-time-select>
</template>
</el-table-column>
<el-table-column align="center" width="100">
<template #header>
<el-button type="primary" size="small" @click="addTimeSet()"
><i class="fa fa-plus iconLeft"></i> 新增</el-button
>
</template>
<template #default="scope">
<el-button
v-if="worktimeList.length > 1"
type="danger"
size="small"
@click="delTimeSet(scope)"
><i class="fa fa-trash-o iconLeft"></i>删除</el-button
>
</template>
</el-table-column>
</el-table>
</el-form-item>
<el-form-item label="轮询规则" prop="rule">
<el-table :data="ruleList" border style="width: 100%">
<el-table-column align="center" prop="sort" label="排序" width="180">
<template #default="scope">
<el-input
v-model="scope.row.sort"
placeholder="请输入序号"
disabled
></el-input>
</template>
</el-table-column>
<el-table-column align="center" prop="name" label="班组">
<template #default="scope">
<el-select v-model="scope.row.teamid" clearable placeholder="请选择">
<el-option
v-for="item in tiemList"
:key="item.id"
:label="item.name"
:value="item.id"
>
</el-option>
</el-select>
</template>
</el-table-column>
<el-table-column align="center" width="100">
<template #header>
<el-button type="primary" size="small" @click="addTimeRuleSet()"
><i class="fa fa-plus iconLeft"></i> 新增</el-button
>
</template>
<template #default="scope">
<el-button
v-if="ruleList.length > 1"
type="danger"
size="small"
@click="delTimeRuleSet(scope)"
><i class="fa fa-trash-o iconLeft"></i>删除</el-button
>
</template>
</el-table-column>
</el-table>
</el-form-item>
</el-form>
<template #footer class="el_dialog__footer">
<div class="dialog-footer">
<el-button size="small" type="primary" @click="addContsubmit" :loading="sunmitBut"
>确 定</el-button
>
<el-button size="small" @click="closeDialog"> </el-button>
</div>
</template>
</el-dialog>
</template>
<style lang="scss" scoped>
.iconLeft {
margin-right: 10px;
}
</style>