api ระบบ รอบการปฏิบัติงาน

This commit is contained in:
DESKTOP-1R2VSQH\Lenovo ThinkPad E490 2023-11-10 13:28:42 +07:00
parent aeaa8c8df2
commit 48e8037099
7 changed files with 383 additions and 235 deletions

View file

@ -1,39 +1,71 @@
<script setup lang="ts">
import { ref, reactive, watchEffect, watch } from "vue";
import { ref, reactive, watch } from "vue";
import http from "@/plugins/http";
import config from "@/app.config";
/** ImportType */
import type {
dataRowRound,
FormData,
MyObjectRoundRef,
} from "@/modules/09_leave/interface/response/round";
/** ImportComponents */
import DialogHeader from "@/components/DialogHeader.vue";
import { useCounterMixin } from "@/stores/mixin";
import { useQuasar } from "quasar";
const $q = useQuasar();
const mixin = useCounterMixin();
const { dialogConfirm } = mixin;
const { showLoader, dialogConfirm, success, messageError } = mixin;
/** propsData จาก RoundMain */
const props = defineProps({
modal: {
type: Boolean,
require: true,
},
editCheck: {
type: String,
require: true,
},
fetchData: {
type: Function,
require: true,
},
closeDialog: {
type: Function,
require: true,
},
detailData: {
type: Object,
require: false,
},
});
/** Ref INPUT เวลา*/
const amRef = ref<Object | null>(null);
const amOutRef = ref<Object | null>(null);
const pmRef = ref<Object | null>(null);
const pmOutRef = ref<Object | null>(null);
const formData = reactive<dataRowRound>({
am: "",
amOut: "",
pm: "",
pmOut: "",
note: "",
status: false,
isDefault: false,
});
const objectRound: MyObjectRoundRef = {
am: amRef,
amOut: amOutRef,
pm: pmRef,
pmOut: pmOutRef,
startTimeMorning: amRef,
endTimeMorning: amOutRef,
startTimeAfternoon: pmRef,
endTimeAfternoon: pmOutRef,
};
/** Form ข้อมูล */
const formData = reactive<FormData>({
startTimeMorning: "",
endTimeMorning: "",
startTimeAfternoon: "",
endTimeAfternoon: "",
description: "",
isDefault: false,
isActive: false,
});
/** Function validateForm*/
function validateForm() {
const hasError = [];
for (const key in objectRound) {
@ -51,48 +83,82 @@ function validateForm() {
console.log(hasError);
}
}
/** Function ยืนยันการบันทึกข้อมูล*/
function onSubmit() {
dialogConfirm(
$q,
async () => {
props.closeDialog?.();
const dataId = props.detailData?.id;
props.editCheck === "add" ? postRoundDuty() : putRoundDuty(dataId);
},
"ยืนยันการบันทึกข้อมูล",
"ต้องการยืนยันการบันทึกข้อมูลนี้หรือไม่ ?"
);
}
const props = defineProps({
modal: Boolean,
editCheck: String,
closeDialog: Function,
detailData: Object,
});
/** Function สร้างรอบการปฏิบัติงาน*/
async function postRoundDuty() {
await http
.post(config.API.roundDutytime(), formData)
.then(() => {
success($q, "บันทึกข้อมูล");
})
.catch((err) => {
messageError($q, err);
})
.finally(() => {
props.fetchData?.();
props.closeDialog?.();
});
}
/** Functiom แก้ไข้รอบการปฏิบัติงาน*/
async function putRoundDuty(id: string) {
const data = {
description: formData.description,
isDefault: formData.isDefault,
isActive: formData.isActive,
};
await http
.put(config.API.roundDutytimeByid(id), data)
.then(() => {
success($q, "บันทึกข้อมูล");
})
.catch((err) => {
messageError($q, err);
})
.finally(() => {
props.fetchData?.();
props.closeDialog?.();
});
}
function close() {
if (props.closeDialog) {
props.closeDialog();
}
props.closeDialog?.();
}
/***/
watch(
() => props.modal,
(newDetailData, oldDetailData) => {
if (props.editCheck === "add") {
formData.am = "";
formData.amOut = "";
formData.pm = "";
formData.pmOut = "";
formData.note = "";
formData.startTimeMorning = "";
formData.endTimeMorning = "";
formData.startTimeAfternoon = "";
formData.endTimeAfternoon = "";
formData.description = "";
formData.isDefault = false;
formData.status = false;
} else if(props.editCheck === "edit"){
formData.isActive = false;
} else if (props.editCheck === "edit") {
if (props.detailData) {
formData.am = props.detailData.am;
formData.amOut = props.detailData.amOut;
formData.pm = props.detailData.pm;
formData.pmOut = props.detailData.pmOut;
formData.note = props.detailData.note;
formData.startTimeMorning = props.detailData.startTimeMorning;
formData.endTimeMorning = props.detailData.endTimeMorning;
formData.startTimeAfternoon = props.detailData.startTimeAfternoon;
formData.endTimeAfternoon = props.detailData.endTimeAfternoon;
formData.description = props.detailData.description;
formData.isDefault = props.detailData.isDefault;
formData.status = props.detailData.status;
formData.isActive = props.detailData.isActive;
}
}
}
@ -129,21 +195,23 @@ watch(
dense
lazy-rules
borderless
v-model="formData.am"
v-model="formData.startTimeMorning"
:rules="[
(val) => !!val || 'กรุณากรอกเวลาเข้างาน',
(val) => {
if (val && formData.amOut) {
if (val > formData.amOut) {
if (val && formData.endTimeMorning) {
if (val > formData.endTimeMorning) {
return 'ต้องน้อยกว่าเวลาออกงาน';
}
if (val >= formData.pm && val <= formData.pmOut) {
if (
val >= formData.startTimeAfternoon &&
val <= formData.endTimeAfternoon
) {
return 'ช่วงเวลาทับซ้อนกับช่วงบ่าย';
}
if(val === formData.amOut){
return 'เวลาเข้างานช่วงเช้าต้องไม่ซ้ำกับออกงานเช้า'
if (val === formData.endTimeAfternoon) {
return 'เวลาเข้างานช่วงเช้าต้องไม่ซ้ำกับออกงานเช้า';
}
}
return true;
},
@ -162,21 +230,24 @@ watch(
:readonly="props.editCheck === 'edit'"
:outlined="props.editCheck === 'add'"
dense
v-model="formData.amOut"
v-model="formData.endTimeMorning"
lazy-rules
borderless
:rules="[
(val) => !!val || 'กรุณากรอกเวลาออกงาน',
(val) => {
if (val && formData.am) {
if (val < formData.am) {
if (val && formData.startTimeMorning) {
if (val < formData.startTimeMorning) {
return 'ต้องมากกว่าเวลาเข้างาน';
}
if (val >= formData.pm && val <= formData.pmOut) {
if (
val >= formData.startTimeAfternoon &&
val <= formData.endTimeAfternoon
) {
return 'ช่วงเวลาทับซ้อนกับช่วงบ่าย';
}
if(val === formData.am){
return 'เวลาออกงานช่วงเช้าต้องไม่ซ้ำกับเข้างานเช้า'
if (val === formData.startTimeMorning) {
return 'เวลาออกงานช่วงเช้าต้องไม่ซ้ำกับเข้างานเช้า';
}
}
return true;
@ -199,15 +270,18 @@ watch(
:rules="[
(val) => !!val || 'กรุณากรอกเวลาเข้างาน',
(val) => {
if (val && formData.pmOut) {
if (val > formData.pmOut) {
if (val && formData.endTimeAfternoon) {
if (val > formData.endTimeAfternoon) {
return 'ต้องน้อยกว่าเวลาออกงาน';
}
if (val >= formData.am && val <= formData.amOut) {
if (
val >= formData.startTimeMorning &&
val <= formData.endTimeMorning
) {
return 'ช่วงเวลาทับซ้อนกับช่วงเช้า';
}
if(val === formData.pmOut){
return 'เวลาเข้างานช่วงบ่ายต้องไม่ซ้ำกับออกงานช่วงบ่าย'
if (val === formData.endTimeAfternoon) {
return 'เวลาเข้างานช่วงบ่ายต้องไม่ซ้ำกับออกงานช่วงบ่าย';
}
}
return true;
@ -219,7 +293,7 @@ watch(
dense
lazy-rules
borderless
v-model="formData.pm"
v-model="formData.startTimeAfternoon"
hide-bottom-space
type="time"
style="width: 140px"
@ -233,15 +307,18 @@ watch(
:rules="[
(val) => !!val || 'กรุณากรอกเวลาออกงาน',
(val) => {
if (val && formData.pm) {
if (val < formData.pm) {
if (val && formData.startTimeAfternoon) {
if (val < formData.startTimeAfternoon) {
return 'ต้องมากกว่าเวลาเข้างาน';
}
if (val >= formData.am && val <= formData.amOut) {
if (
val >= formData.startTimeMorning &&
val <= formData.endTimeMorning
) {
return 'ช่วงเวลาทับซ้อนกับช่วงเช้า';
}
if(val === formData.pm){
return 'เวลาออกงานช่วงบ่ายต้องไม่ซ้ำกับเข้างานช่วงบ่าย'
if (val === formData.startTimeAfternoon) {
return 'เวลาออกงานช่วงบ่ายต้องไม่ซ้ำกับเข้างานช่วงบ่าย';
}
}
return true;
@ -251,7 +328,7 @@ watch(
:readonly="props.editCheck === 'edit'"
:outlined="props.editCheck === 'add'"
dense
v-model="formData.pmOut"
v-model="formData.endTimeAfternoon"
lazy-rules
borderless
hide-bottom-space
@ -264,7 +341,7 @@ watch(
class="col-12 bg-white q-ma-md"
outlined
stack-label
v-model="formData.note"
v-model="formData.description"
label="คำอธิบาย"
hide-bottom-space
type="textarea"
@ -286,7 +363,7 @@ watch(
<div class="row items-center q-my-sm justify-between">
<p class="q-ma-none">สถานะการใชงาน</p>
<label class="toggle-control">
<input type="checkbox" v-model="formData.status" />
<input type="checkbox" v-model="formData.isActive" />
<span class="control"></span>
</label>
</div>