ออกคำสั่งเลื่อนเงินเดือน/ค่าจ้าง

This commit is contained in:
DESKTOP-1R2VSQH\Lenovo ThinkPad E490 2024-04-25 12:06:07 +07:00
parent 5febe188a2
commit 23be6c5fb8
5 changed files with 699 additions and 557 deletions

View file

@ -32,7 +32,7 @@ const $q = useQuasar(); //ใช้ noti quasar
const route = useRoute();
const router = useRouter();
const orderId = route.params.orderid;
const orderId = route.params.id;
const orderId_paramsName = route.name;
const props = defineProps({
@ -50,8 +50,11 @@ const next = () => props.next();
const myForm = ref<QForm>();
//option
const typeOrderOption = ref<DataOption1[]>([]);
const byOrderOptionMain = ref<DataOption1[]>([]);
const byOrderOption = ref<DataOption1[]>([]);
const CommandOption = ref<DataOption1[]>([]);
const salaryRoundOptionMain = ref<DataOption1[]>([]);
const salaryRoundOption = ref<DataOption1[]>([]);
//Main
const typeOrder = ref<any>([]);
@ -62,6 +65,8 @@ const dateCommand = ref<Date>(new Date());
const byOrder = ref<string>("");
const nameCommand = ref<any>([]);
const positionCommand = ref<string>("");
const year = ref<number>(0);
const SalaryRound = ref<string>("");
// 33-34-35
const input33 = ref<string>("");
@ -78,6 +83,9 @@ onMounted(async () => {
} else {
await fecthTypeOption("noData");
}
if (year.value !== 0) {
fetchSalaryRound();
}
});
//
watch(byOrder, async () => {
@ -97,9 +105,17 @@ watch(nameCommand, async () => {
}
});
const commandCodes = ref<string[]>(["C-PM-33", "C-PM-34", "C-PM-35","C-PM-36","C-PM-37"]);
const commandCodes = ref<string[]>([
"C-PM-33",
"C-PM-34",
"C-PM-35",
"C-PM-36",
"C-PM-37",
]);
//
const fecthTypeOption = async (actions: string) => {
console.log(actions);
showLoader();
await http
.get(config.API.typeOrder())
@ -149,6 +165,8 @@ const fetchdetailOrder = async () => {
.then(async (res: any) => {
const data = res.data.result;
console.log(data);
const orderTypeCode = await data.orderTypeCode.toUpperCase();
typeOrder.value = typeOrderOption.value.find(
@ -175,6 +193,7 @@ const fecthCommand = async () => {
await http
.get(config.API.organizationsOrder())
.then((res) => {
byOrderOptionMain.value = res.data.result;
byOrderOption.value = res.data.result;
})
.catch((e) => {
@ -182,30 +201,32 @@ const fecthCommand = async () => {
});
};
function casePm(val: string){
switch (val) {
case "C-PM-33":
return "เลื่อนเงินเดือนและให้ข้าราชการกรุงเทพมหานครสามัญ ได้รับเงินเดือนสูงกว่าขั้นสูงของตำแหน่งที่ได้รับแต่งตั้ง";
case "C-PM-34":
return "ให้ข้าราชการกรุงเทพมหานครสามัญได้รับค่าตอบแทนพิเศษ";
case "C-PM-35":
return `เลื่อนเงินเดือนและให้ข้าราชการกรุงเทพมหานครสามัญที่เกษียณอายุราชการ ในสิ้นปีงบประมาณ พ.ศ. ${new Date().getFullYear()+543} ได้รับเงินเดือนสูงกว่าชั้นสูงของตำแหน่งที่ได้รับแต่งตั้ง`;
case "C-PM-36":
return "เลื่อนขั้นค่าจ้างและให้ลูกจ้างประจำกรุงเทพมหานครได้รับอัตราค่าจ้าง สูงกว่าอัตราค่าจ้างขั้นสูงของตำแหน่งที่ได้รับแต่งตั้งในแต่ละระดับ";
case "C-PM-37":
return "ให้ลูกจ้างประจำกรุงเทพมหานครได้รับค่าตอบแทนพิเศษ";
default:
return null;
}}
function casePm(val: string) {
switch (val) {
case "C-PM-33":
return "เลื่อนเงินเดือนและให้ข้าราชการกรุงเทพมหานครสามัญ ได้รับเงินเดือนสูงกว่าขั้นสูงของตำแหน่งที่ได้รับแต่งตั้ง";
case "C-PM-34":
return "ให้ข้าราชการกรุงเทพมหานครสามัญได้รับค่าตอบแทนพิเศษ";
case "C-PM-35":
return `เลื่อนเงินเดือนและให้ข้าราชการกรุงเทพมหานครสามัญที่เกษียณอายุราชการ ในสิ้นปีงบประมาณ พ.ศ. ${
new Date().getFullYear() + 543
} ไดบเงนเดอนสงกวาชนสงของตำแหนงทไดบแตงต`;
case "C-PM-36":
return "เลื่อนขั้นค่าจ้างและให้ลูกจ้างประจำกรุงเทพมหานครได้รับอัตราค่าจ้าง สูงกว่าอัตราค่าจ้างขั้นสูงของตำแหน่งที่ได้รับแต่งตั้งในแต่ละระดับ";
case "C-PM-37":
return "ให้ลูกจ้างประจำกรุงเทพมหานครได้รับค่าตอบแทนพิเศษ";
default:
return null;
}
}
async function selectCMP(selectOrder: OrederResult) {
if (selectOrder != null) {
const orderTypeCode = await selectOrder.commandCode.toUpperCase();
nameOrder.value = casePm(orderTypeCode)
nameOrder.value = casePm(orderTypeCode);
}
}
//
const submit = async () => {
let signBy = null;
@ -237,6 +258,8 @@ const submit = async () => {
registerPosition: "",
signatoryBy: signBy === "" ? nameCommand.value : signBy,
signatoryPosition: positionCommand.value,
year: year.value,
period: SalaryRound.value,
};
if (
typeOrder.value.commandCode == "C-PM-33" ||
@ -307,11 +330,33 @@ const updateOrder = async (formData: Object, orderId: string, type: string) => {
};
function filterSelector(val: any, update: Function, fullname: any) {
update(() => {
typeOrderOption.value = typeOrderFilter.value.filter(
(v: any) => v.fullname.toLowerCase().indexOf(val.toLowerCase()) > -1
);
});
switch (fullname) {
case "typeOrderOption":
update(() => {
typeOrderOption.value = typeOrderFilter.value.filter(
(v: any) => v.fullname.toLowerCase().indexOf(val.toLowerCase()) > -1
);
});
break;
case "byOrderOption":
update(() => {
byOrderOption.value = byOrderOptionMain.value.filter(
(v: any) => v.name.toLowerCase().indexOf(val.toLowerCase()) > -1
);
});
break;
case "SalaryRound":
update(() => {
salaryRoundOption.value = salaryRoundOptionMain.value.filter(
(v: any) => v.name.toLowerCase().indexOf(val.toLowerCase()) > -1
);
});
break;
default:
break;
}
}
/**
@ -324,6 +369,40 @@ function getClass(val: boolean) {
"full-width cursor-pointer": !val,
};
}
function updateYear() {}
/** ดึงข้อมูลเริ่มต้น */
function fetchSalaryRound() {
showLoader();
http
.get(
config.API.salaryPeriod() +
`?page=${1}&pageSise=${10}&keyword=${""}&year=${year.value}`
)
.then((res) => {
const data = res.data.result.data;
const list = data.map((e: any) => ({
id: e.id,
name:
e.period === "SPECIAL"
? "รอบพิเศษ"
: e.period === "APR"
? "รอบเมษายน"
: e.period === "OCT"
? "รอบตุลาคม"
: "-",
}));
salaryRoundOptionMain.value = list;
// salaryRoundOption.value = list;
})
.catch((err) => {
messageError($q, err);
})
.finally(() => {
hideLoader();
});
}
</script>
<template>
<div style="max-height: 68vh; overflow-y: scroll">
@ -391,6 +470,7 @@ function getClass(val: boolean) {
}}</template>
<template #trigger>
<q-input
class="inputgreen"
:model-value="dateYear + 543"
:rules="[(val) => !!val || `${'กรุณากรอก พ.ศ.'}`]"
:label="`${'พ.ศ.'}`"
@ -422,7 +502,7 @@ function getClass(val: boolean) {
<q-input
outlined
dense
class="full-width datepicker"
class="inputgreen"
:model-value="
dateCommand != null ? date2Thai(dateCommand) : null
"
@ -458,6 +538,9 @@ function getClass(val: boolean) {
use-input
input-debounce="0"
@update:model-value="(nameCommand = ''), (positionCommand = '')"
@filter="(inputValue:any,
doneFn:Function) => filterSelector(inputValue, doneFn,'byOrderOption'
) "
/>
</div>
<div
@ -531,6 +614,63 @@ function getClass(val: boolean) {
hide-bottom-space
/>
</div>
<div class="col-xs-12 col-md-2">
<datepicker
menu-class-name="modalfix"
v-model="year"
:locale="'th'"
autoApply
year-picker
:enableTimePicker="false"
@update:model-value="fetchSalaryRound(), (SalaryRound = '')"
>
<template #year="{ year }">{{ year + 543 }}</template>
<template #year-overlay-value="{ value }">{{
parseInt(value + 543)
}}</template>
<template #trigger>
<q-input
dense
lazy-rules
outlined
:model-value="year === 0 ? null : Number(year) + 543"
:label="`${'ปีงบประมาณ'}`"
class="inputgreen"
>
<template v-slot:prepend>
<q-icon
name="event"
class="cursor-pointer"
style="color: var(--q-primary)"
>
</q-icon>
</template>
</q-input>
</template>
</datepicker>
</div>
<div class="col-xs-12 col-md-4">
<q-select
class="inputgreen"
outlined
dense
v-model="SalaryRound"
:rules="[(val: string) => !!val || `${'กรุณาเลือกรอบการขึ้นเงินเดือน'}`]"
hide-bottom-space
:label="`${'รอบการขึ้นเงินเดือน'}`"
map-options
option-label="name"
:options="salaryRoundOption"
option-value="id"
use-input
input-debounce="0"
map-value
@filter="(inputValue:any,
doneFn:Function) => filterSelector(inputValue, doneFn,'SalaryRound'
) "
/>
</div>
</div>
</q-form>
</div>

View file

@ -103,8 +103,8 @@ onMounted(async () => {
});
const conditionData = async () => {
const id = route.params.orderid
? route.params.orderid.toString()
const id = route.params.id
? route.params.id.toString()
: localStorage.getItem("orderId")
? localStorage.getItem("orderId")
: null;
@ -336,8 +336,8 @@ const putSalary = async (salary: any) => {
const modalAddChange = async () => {
modalAdd.value = !modalAdd.value;
if (modalAdd.value == true) {
const id = route.params.orderid
? route.params.orderid.toString()
const id = route.params.id
? route.params.id.toString()
: localStorage.getItem("orderId")
? localStorage.getItem("orderId")
: null;
@ -394,8 +394,8 @@ const saveModalAdd = () => {
};
// API
const addlist = async (data: Object) => {
const id = route.params.orderid
? route.params.orderid.toString()
const id = route.params.id
? route.params.id.toString()
: localStorage.getItem("orderId")
? localStorage.getItem("orderId")
: null;

View file

@ -190,8 +190,8 @@ const listModal = async (id: string) => {
};
// orderid
const conditionId = async () => {
const id = route.params.orderid
? route.params.orderid.toString()
const id = route.params.id
? route.params.id.toString()
: localStorage.getItem("orderId")
? localStorage.getItem("orderId")
: null;
@ -245,8 +245,8 @@ const getData = async (id: string) => {
};
//
const saveData = async () => {
const id = route.params.orderid
? route.params.orderid.toString()
const id = route.params.id
? route.params.id.toString()
: localStorage.getItem("orderId")
? localStorage.getItem("orderId")
: null;

File diff suppressed because it is too large Load diff

View file

@ -18,7 +18,7 @@ import { useOrderStore } from "@/modules/11_discipline/store/OrderStore";
import { useCounterMixin } from "@/stores/mixin";
import { useOrderPlacementDataStore } from "@/modules/10_order/store";
const rows = ref<any>([])
const rows = ref<any>([]);
const $q = useQuasar(); // noti quasar
const mixin = useCounterMixin();
const DataStore = useOrderPlacementDataStore();
@ -31,7 +31,13 @@ const pagination = ref({
rowsPerPage: 10,
});
const commandCodes = ref<string[]>(["C-PM-33", "C-PM-34", "C-PM-35", "C-PM-36", "C-PM-37"]);
const commandCodes = ref<string[]>([
"C-PM-33",
"C-PM-34",
"C-PM-35",
"C-PM-36",
"C-PM-37",
]);
/** ข้อมูลที่เเสดงใน คอลัม */
const columns = ref<QTableProps["columns"]>([
@ -153,6 +159,8 @@ async function fetchOrderlist() {
);
stroe.fetchOrder(filterListOrder);
rows.value = stroe.mainData;
})
.catch((e: any) => {
messageError($q, e);
@ -217,7 +225,7 @@ async function OrderTypeFilter() {
await http
.get(config.API.typeOrder())
.then((res) => {
console.log(res)
console.log(res);
const response = res.data.result;
const filterRes = response.filter((e: any) =>
commandCodes.value.includes(e.commandCode)
@ -294,7 +302,7 @@ function filterSelector(val: any, update: Function, refData: string) {
}
}
function redirectToPage(id:string,status:string){
function redirectToPage(id: string, status: string) {
let step = 1;
switch (status) {
case "จัดทำร่างคำสั่ง":
@ -500,9 +508,7 @@ function redirectToPage(id:string,status:string){
v-for="col in props.cols"
:key="col.name"
:props="props"
@click="
redirectToPage(props.row.id, props.row.status)
"
@click="redirectToPage(props.row.orderId, props.row.status)"
>
<div v-if="col.name === 'no'">
{{ props.rowIndex + 1 }}