เลื่อนเงินเดือน => เพิ่ม remark

This commit is contained in:
DESKTOP-1R2VSQH\Lenovo ThinkPad E490 2024-07-08 11:04:00 +07:00
parent 5775054ef1
commit 80a69afd86
7 changed files with 125 additions and 19 deletions

View file

@ -23,12 +23,14 @@ const profileId = defineModel<string>("profileId", { required: true });
const props = defineProps({ const props = defineProps({
typeLevel: { type: String, required: true }, typeLevel: { type: String, required: true },
isReserve: { type: Boolean, required: true }, isReserve: { type: Boolean, required: true },
remark: { type: String, required: true },
fetchData: { fetchData: {
type: Function, type: Function,
}, },
}); });
const type = ref<string>(""); const type = ref<string>("");
const note = ref<string>("");
const typeRef = ref<any>(null); const typeRef = ref<any>(null);
const isReadonly = ref<boolean>(false); // const isReadonly = ref<boolean>(false); //
const isChange = ref<boolean>(false); // const isChange = ref<boolean>(false); //
@ -75,6 +77,7 @@ function onSubmit() {
profileId: profileId.value, profileId: profileId.value,
type: type.value, type: type.value,
isReserve: isReserve.value, isReserve: isReserve.value,
remark: type.value === "NONE" ? note.value : undefined,
}; };
http http
.post(config.API.salaryPeriodEmp() + `/change/type`, body) .post(config.API.salaryPeriodEmp() + `/change/type`, body)
@ -92,10 +95,15 @@ function onSubmit() {
}); });
} }
function chengType() {
note.value = props.typeLevel === "NONE" ? props.remark : "";
}
watch( watch(
() => modal.value, () => modal.value,
() => { () => {
type.value = props.typeLevel == "PENDING" ? "" : props.typeLevel; type.value = props.typeLevel == "PENDING" ? "" : props.typeLevel;
note.value = props.typeLevel === "NONE" ? props.remark : "";
isReserve.value = props.isReserve; isReserve.value = props.isReserve;
isChange.value = false; isChange.value = false;
} }
@ -132,7 +140,7 @@ function inputEdit(val: boolean) {
:rules="[(val) => !!val || `${'กรุณาเลือก ขั้น'}`]" :rules="[(val) => !!val || `${'กรุณาเลือก ขั้น'}`]"
lazy-rules lazy-rules
hide-bottom-space hide-bottom-space
@update:model-value="isChange = true" @update:model-value="(isChange = true), chengType()"
/> />
<!-- :options="typeRangeOps.filter((e) => e.id !== store.tabType)" --> <!-- :options="typeRangeOps.filter((e) => e.id !== store.tabType)" -->
@ -144,6 +152,17 @@ function inputEdit(val: boolean) {
v-model="isReserve" v-model="isReserve"
@update:model-value="isChange = true" @update:model-value="isChange = true"
/> />
<q-input
v-if="type === 'NONE'"
:class="inputEdit(isReadonly)"
outlined
dense
v-model="note"
label="หมายเหตุ"
type="textarea"
@update:model-value="isChange = true"
/>
</div> </div>
</q-card-section> </q-card-section>
<q-separator /> <q-separator />

View file

@ -541,6 +541,7 @@ const updateIsShowRetire = async () => {
v-model:formFilter="formFilter" v-model:formFilter="formFilter"
:fetchDataTable="fetchDataPeriodNew" :fetchDataTable="fetchDataPeriodNew"
:total="total" :total="total"
:type="item.type"
/> />
</q-tab-panel> </q-tab-panel>
</q-tab-panels> </q-tab-panels>

View file

@ -36,10 +36,14 @@ const props = defineProps({
total: { total: {
type: Number, type: Number,
}, },
type: {
type: String,
requird: true,
},
}); });
/** ข้อมูล Table*/ /** ข้อมูล Table*/
const columns = ref<QTableProps["columns"]>([ const baseColumns = ref<QTableProps["columns"]>([
{ {
name: "no", name: "no",
align: "left", align: "left",
@ -152,6 +156,15 @@ const columns = ref<QTableProps["columns"]>([
headerStyle: "font-size: 14px", headerStyle: "font-size: 14px",
style: "font-size: 14px", style: "font-size: 14px",
}, },
{
name: "remark",
align: "center",
label: "หมายเหตุ",
sortable: false,
field: "remark",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
]); ]);
const visibleColumns = ref<string[]>([ const visibleColumns = ref<string[]>([
@ -167,8 +180,18 @@ const visibleColumns = ref<string[]>([
"amountUse", "amountUse",
"positionSalaryAmount", "positionSalaryAmount",
"isRetired", "isRetired",
"remark",
]); ]);
const columns = computed(() => {
if (props.type !== "NONE") {
if (baseColumns.value) {
return baseColumns.value.filter((column) => column.name !== "remark");
}
}
return baseColumns.value;
});
/** modalDialog*/ /** modalDialog*/
const modalDialogAddPerson = ref<boolean>(false); const modalDialogAddPerson = ref<boolean>(false);
const modalDialogForm = ref<boolean>(false); const modalDialogForm = ref<boolean>(false);
@ -207,16 +230,24 @@ function onClickMovieGroup(id: string) {
const typeLevel = ref<string>(""); const typeLevel = ref<string>("");
const isReserve = ref<boolean>(false); const isReserve = ref<boolean>(false);
const remark = ref<string>("");
/** /**
* function openPopup ายกข * function openPopup ายกข
* @param id profileId * @param id profileId
* *
*/ */
function onClickMoveLevel(id: string, typeVal: string, isReserveVal: boolean) { function onClickMoveLevel(
id: string,
typeVal: string,
isReserveVal: boolean,
remarkVal: string = ""
) {
profileId.value = id; profileId.value = id;
modalDialogMoveLeve.value = !modalDialogMoveLeve.value; modalDialogMoveLeve.value = !modalDialogMoveLeve.value;
typeLevel.value = typeVal; typeLevel.value = typeVal;
isReserve.value = isReserveVal; isReserve.value = isReserveVal;
remark.value = typeVal === "NONE" ? remarkVal : "";
} }
/** /**
@ -306,7 +337,7 @@ watch(
store.roundMainCode === 'OCT' store.roundMainCode === 'OCT'
? columns ? columns
: columns : columns
? columns.slice(0, 11) ? columns.filter((e) => e.name !== 'isRetired')
: [] : []
" "
option-value="name" option-value="name"
@ -322,7 +353,7 @@ watch(
store.roundMainCode === 'OCT' store.roundMainCode === 'OCT'
? columns ? columns
: columns : columns
? columns.slice(0, 11) ? columns.filter((e) => e.name !== 'isRetired')
: [] : []
" "
:rows="props.rows" :rows="props.rows"
@ -416,7 +447,7 @@ watch(
/> />
</div> </div>
<div v-else> <div v-else class="table_ellipsis2">
{{ col.value ? col.value : "-" }} {{ col.value ? col.value : "-" }}
</div> </div>
</q-td> </q-td>
@ -446,7 +477,8 @@ watch(
? onClickMoveLevel( ? onClickMoveLevel(
props.row.id, props.row.id,
props.row.type, props.row.type,
props.row.isReserve props.row.isReserve,
props.row.remark
) )
: item.type === 'delete' : item.type === 'delete'
? onClickDelete(props.row.id) ? onClickDelete(props.row.id)
@ -510,6 +542,7 @@ watch(
v-model:profileId="profileId" v-model:profileId="profileId"
:fetchData="props.fetchDataTable" :fetchData="props.fetchDataTable"
:type="store.tabType" :type="store.tabType"
:remark="remark"
/> />
</template> </template>

View file

@ -29,12 +29,14 @@ const profileId = defineModel<string>("profileId", { required: true });
const props = defineProps({ const props = defineProps({
typeLevel: { type: String, required: true }, typeLevel: { type: String, required: true },
isReserve: { type: Boolean, required: true }, isReserve: { type: Boolean, required: true },
remark: { type: String, required: true },
fetchData: { fetchData: {
type: Function, type: Function,
}, },
}); });
const type = ref<string>(""); const type = ref<string>("");
const note = ref<string>("");
const typeRef = ref<any>(null); const typeRef = ref<any>(null);
const isReadonly = ref<boolean>(false); // const isReadonly = ref<boolean>(false); //
const isChange = ref<boolean>(false); // const isChange = ref<boolean>(false); //
@ -81,6 +83,7 @@ function onSubmit() {
profileId: profileId.value, profileId: profileId.value,
type: type.value, type: type.value,
isReserve: isReserve.value, isReserve: isReserve.value,
remark: type.value === "NONE" ? note.value : undefined,
}; };
http http
.post(config.API.salaryPeriod() + `/change/type`, body) .post(config.API.salaryPeriod() + `/change/type`, body)
@ -98,10 +101,15 @@ function onSubmit() {
}); });
} }
function chengType() {
note.value = props.typeLevel === "NONE" ? props.remark : "";
}
watch( watch(
() => modal.value, () => modal.value,
() => { () => {
type.value = props.typeLevel == "PENDING" ? "" : props.typeLevel; type.value = props.typeLevel == "PENDING" ? "" : props.typeLevel;
note.value = props.typeLevel === "NONE" ? props.remark : "";
isReserve.value = props.isReserve; isReserve.value = props.isReserve;
isChange.value = false; isChange.value = false;
} }
@ -138,9 +146,8 @@ function inputEdit(val: boolean) {
:rules="[(val) => !!val || `${'กรุณาเลือก ขั้น'}`]" :rules="[(val) => !!val || `${'กรุณาเลือก ขั้น'}`]"
lazy-rules lazy-rules
hide-bottom-space hide-bottom-space
@update:model-value="isChange = true" @update:model-value="(isChange = true), chengType()"
/> />
<!-- :options="typeRangeOps.filter((e) => e.id !== store.tabType)" -->
<q-checkbox <q-checkbox
v-if="type === 'FULL'" v-if="type === 'FULL'"
@ -150,12 +157,22 @@ function inputEdit(val: boolean) {
v-model="isReserve" v-model="isReserve"
@update:model-value="isChange = true" @update:model-value="isChange = true"
/> />
<q-input
v-if="type === 'NONE'"
outlined
dense
v-model="note"
label="หมายเหตุ"
type="textarea"
:class="inputEdit(isReadonly)"
@update:model-value="isChange = true"
/>
</div> </div>
</q-card-section> </q-card-section>
<q-separator /> <q-separator />
<form @submit.prevent="validateForm"> <form @submit.prevent="validateForm">
<q-card-actions align="right" class="bg-white text-teal"> <q-card-actions align="right" class="bg-white text-teal">
<!-- <q-btn flat label="OK" v-close-popup /> -->
<q-btn <q-btn
:disabled="!isChange" :disabled="!isChange"
type="submit" type="submit"

View file

@ -622,6 +622,7 @@ const updateIsShowRetire = async () => {
v-model:formFilter="formFilter" v-model:formFilter="formFilter"
:fetchDataTable="fetchDataPeriodNew" :fetchDataTable="fetchDataPeriodNew"
:total="total" :total="total"
:type="item.type"
/> />
</q-tab-panel> </q-tab-panel>
</q-tab-panels> </q-tab-panels>

View file

@ -36,10 +36,14 @@ const props = defineProps({
total: { total: {
type: Number, type: Number,
}, },
type: {
type: String,
required: true,
},
}); });
/** ข้อมูล Table*/ /** ข้อมูล Table*/
const columns = ref<QTableProps["columns"]>([ const baseColumns = ref<QTableProps["columns"]>([
{ {
name: "no", name: "no",
align: "left", align: "left",
@ -140,6 +144,15 @@ const columns = ref<QTableProps["columns"]>([
headerStyle: "font-size: 14px", headerStyle: "font-size: 14px",
style: "font-size: 14px", style: "font-size: 14px",
}, },
{
name: "remark",
align: "center",
label: "หมายเหตุ",
sortable: false,
field: "remark",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
]); ]);
const visibleColumns = ref<string[]>([ const visibleColumns = ref<string[]>([
@ -154,8 +167,20 @@ const visibleColumns = ref<string[]>([
"amountUse", "amountUse",
"positionSalaryAmount", "positionSalaryAmount",
"isRetired", "isRetired",
"remark",
]); ]);
const columns = computed(() => {
if (props.type !== "NONE") {
if (baseColumns.value) {
return baseColumns.value.filter((column) => column.name !== "remark");
}
}
console.log(baseColumns.value);
return baseColumns.value;
});
/** modalDialog*/ /** modalDialog*/
const modalDialogAddPerson = ref<boolean>(false); const modalDialogAddPerson = ref<boolean>(false);
const modalDialogForm = ref<boolean>(false); const modalDialogForm = ref<boolean>(false);
@ -194,16 +219,24 @@ function onClickMovieGroup(id: string) {
const typeLevel = ref<string>(""); const typeLevel = ref<string>("");
const isReserve = ref<boolean>(false); const isReserve = ref<boolean>(false);
const remark = ref<string>("");
/** /**
* function openPopup ายกข * function openPopup ายกข
* @param id profileId * @param id profileId
* *
*/ */
function onClickMoveLevel(id: string, typeVal: string, isReserveVal: boolean) { function onClickMoveLevel(
id: string,
typeVal: string,
isReserveVal: boolean,
remarkVal: string = ""
) {
profileId.value = id; profileId.value = id;
modalDialogMoveLeve.value = !modalDialogMoveLeve.value; modalDialogMoveLeve.value = !modalDialogMoveLeve.value;
typeLevel.value = typeVal; typeLevel.value = typeVal;
isReserve.value = isReserveVal; isReserve.value = isReserveVal;
remark.value = typeVal === "NONE" ? remarkVal : "";
} }
/** /**
@ -293,7 +326,7 @@ watch(
store.roundMainCode === 'OCT' store.roundMainCode === 'OCT'
? columns ? columns
: columns : columns
? columns.slice(0, 10) ? columns.filter((e) => e.name !== 'isRetired')
: [] : []
" "
option-value="name" option-value="name"
@ -309,7 +342,7 @@ watch(
store.roundMainCode === 'OCT' store.roundMainCode === 'OCT'
? columns ? columns
: columns : columns
? columns.slice(0, 10) ? columns.filter((e) => e.name !== 'isRetired')
: [] : []
" "
:rows="props.rows" :rows="props.rows"
@ -401,7 +434,7 @@ watch(
/> />
</div> </div>
<div v-else> <div v-else class="table_ellipsis2">
{{ col.value ? col.value : "-" }} {{ col.value ? col.value : "-" }}
</div> </div>
</q-td> </q-td>
@ -431,7 +464,8 @@ watch(
? onClickMoveLevel( ? onClickMoveLevel(
props.row.id, props.row.id,
props.row.type, props.row.type,
props.row.isReserve props.row.isReserve,
props.row.remark
) )
: item.type === 'delete' : item.type === 'delete'
? onClickDelete(props.row.id) ? onClickDelete(props.row.id)
@ -495,6 +529,7 @@ watch(
v-model:profileId="profileId" v-model:profileId="profileId"
:fetchData="props.fetchDataTable" :fetchData="props.fetchDataTable"
:type="store.tabType" :type="store.tabType"
:remark="remark"
/> />
</template> </template>

View file

@ -379,7 +379,7 @@ onMounted(async () => {
1 1
}} }}
</div> </div>
<div v-if="col.name == 'effectiveDate'"> <div v-else-if="col.name == 'effectiveDate'">
{{ date2Thai(props.row.effectiveDate) }} {{ date2Thai(props.row.effectiveDate) }}
</div> </div>
<div v-else-if="col.name == 'year'"> <div v-else-if="col.name == 'year'">
@ -403,10 +403,10 @@ onMounted(async () => {
/> />
</div> </div>
<div v-else-if="col.name == 'isClose'"> <div v-else-if="col.name == 'isClose'">
{{ props.row.isClose == false ? "" : "ปิดรอบแล้ว" }} {{ props.row.isClose == false ? "-" : "ปิดรอบแล้ว" }}
</div> </div>
<div v-else> <div v-else>
{{ col.value }} {{ col.value ?? "-" }}
</div> </div>
</q-td> </q-td>
<q-td> <q-td>