hrms-mgt/src/modules/05_placement/components/probation/FormAssign.vue

2937 lines
113 KiB
Vue
Raw Normal View History

<script setup lang="ts">
2023-08-09 12:09:46 +07:00
import { useRouter, useRoute } from "vue-router";
import { ref, computed, watch, onMounted } from "vue";
2023-07-27 16:54:05 +07:00
import { useQuasar } from "quasar";
2024-11-01 13:53:45 +07:00
import http from "@/plugins/http";
import config from "@/app.config";
2024-11-01 13:53:45 +07:00
import { useProbationDataStore } from "@/modules/05_placement/storeProbation";
import { useCounterMixin } from "@/stores/mixin";
2023-08-30 09:50:52 +07:00
import type {
AppointTopic,
AppointTopicMain,
} from "@/modules/05_placement/interface/index/Main";
2024-08-22 12:05:41 +07:00
2024-11-01 13:53:45 +07:00
import genReport from "@/plugins/genreport";
2023-07-27 16:54:05 +07:00
const $q = useQuasar();
2024-09-06 16:21:25 +07:00
const isEdit = ref<boolean>(false);
2023-07-13 14:33:04 +07:00
const router = useRouter();
2023-08-30 09:50:52 +07:00
const route = useRoute();
2024-11-01 13:53:45 +07:00
const probationStore = useProbationDataStore();
const checkRoutePermisson = ref<boolean>(route.name == "probationFormDetail");
2023-07-10 19:29:15 +07:00
const mixin = useCounterMixin();
2023-08-09 12:09:46 +07:00
const {
date2Thai,
dateToISO,
success,
messageError,
showLoader,
hideLoader,
dialogConfirm,
2023-08-09 12:09:46 +07:00
} = mixin;
const personalId = route.params.personalId as string;
2023-08-30 09:50:52 +07:00
const assignId = ref<string>(route.params.form as string);
const routeName = router.currentRoute.value.name;
const appointTopic = ref<AppointTopicMain>();
const appointOp = ref<AppointTopicMain[]>([]);
const appointAll = ref<AppointTopicMain[]>([]);
2024-10-31 14:54:02 +07:00
const reportPersonId = ref<AppointTopic[]>([]);
const reportPersonIdOp = ref<AppointTopic[]>([]);
2023-07-27 16:54:05 +07:00
const fullname = ref<string>();
2023-08-09 12:09:46 +07:00
const date_start = ref<Date>();
2023-08-29 14:56:06 +07:00
const date_finish = ref<any>();
const other_desc = ref<string>("");
2023-07-27 09:11:43 +07:00
const other4_desc = ref<string>();
const monthOp: MonthOption[] = [];
const other5_no1_desc = ref<string>("");
const group = ref<any | null>(null);
const group2 = ref<any | null>(null);
const group3 = ref<any | null>(null);
const main = ref<any>();
const main2 = ref<any>();
const main3 = ref<any>();
const main4 = ref<any>();
const main5 = ref<any>();
2023-08-29 14:56:06 +07:00
const commander = ref<any>("");
const chairman = ref<any>("");
const date1 = ref<any>();
const date2 = ref<any>();
const date3 = ref<any>();
const date4 = ref<any>();
const skill = ref<any>();
const skill2 = ref<any>();
const skill3 = ref<any>();
const skill4 = ref<any>();
const knowledgeCount = ref<number>(3);
const knowledge = ref<any[]>([]);
const position = ref<string>("");
const monthSelect = ref<any>();
const optionCaretaker2 = ref<any>([]);
const OPcommanderFn = ref<any>([]);
const OPchairmanFn = ref<any>([]);
const optionCaretaker = ref<any>([]);
const caretaker1 = ref<any>("");
const caretaker2 = ref<any>("");
const productivityCount = ref<number>(1);
const output_desc = ref<string[]>(Array(productivityCount.value).fill(""));
const indicator_desc = ref<string[]>(Array(productivityCount.value).fill(""));
const activityCount = ref<number>(2);
const activity_desc = ref<string[]>(Array(activityCount.value).fill(""));
const goal_desc = ref<string[]>(Array(activityCount.value).fill(""));
const checkRule = ref<CheckboxItem[]>([]);
const isDatePicker2Readonly = computed(() => {
return date_start.value === undefined;
});
const activityArray = computed(() => {
return Array(activityCount.value).fill("");
});
const knowledgeArray = computed(() => {
return Array(knowledgeCount.value).fill("");
});
const ProductivityArray = computed(() => {
return Array(productivityCount.value).fill("");
});
2023-09-28 14:22:25 +07:00
const OPmain = ref<
Array<{ id: number; naem: string; description: string; level: string }>
2023-09-28 14:22:25 +07:00
>([]);
const OPgroup = ref<
Array<{ id: number; title: string; description: string; level: number }>
>([]);
const OPcomputer = ref<
Array<{ id: number; title: string; level: number; level_description: string }>
>([]);
const OPenglish = ref<
Array<{ id: number; title: string; level: number; level_description: string }>
>([]);
const OPinfomation = ref<
Array<{ id: number; title: string; level: number; level_description: string }>
>([]);
const OPresourse = ref<
Array<{ id: number; title: string; level: number; level_description: string }>
>([]);
const OPknowledge = ref<
Array<{ id: number; title: number; description: string; level: string }>
>([]);
2024-09-02 10:22:58 +07:00
const OPknowledgeMain = ref<
Array<{ id: number; title: number; description: string; level: string }>
>([]);
2023-09-28 14:22:25 +07:00
const OPcaretaker = ref<
Array<{
id: string;
prefix: string;
firstName: string;
lastName: string;
name: string;
citizenId: number;
isDirector: boolean;
position: string;
positionLevel: string;
}>[]
>([]);
const OPcaretakerNew = ref<any[]>([]);
const OPcommander = ref<any[]>([]);
2023-09-28 14:22:25 +07:00
const OPchairman = ref<
Array<{
id: string;
prefix: string;
firstName: string;
lastName: string;
name: string;
citizenId: number;
isDirector: boolean;
position: string;
positionLevel: string;
}>[]
>([]);
2023-08-30 09:50:52 +07:00
interface MonthOption {
value: number;
label: string;
}
interface optionsValue {
id: string;
name: string;
}
interface CheckboxItem {
id: number;
parent_id: number;
description: string;
status_select: number;
checked: number;
}
/**
* update edit
* @param id personal id
*/
async function dataEdit(id: string) {
// await myForm.value.validate().then((result: boolean) => {
// if (result) {
2024-06-11 13:46:27 +07:00
showLoader();
const data = putDataEdit(id);
http
.put(config.API.saveEditAssign(id), data)
.then(() => {})
.catch(() => {})
.finally(async () => {
isEdit.value = false;
getAssign();
hideLoader();
});
// } else {
// dialogMessageNotify($q, "กรุณากรอกข้อมูลให้ครบ");
// }
// });
}
/**
* pop up confirm
* @param id personal id
*/
function saveEdit(id: string) {
2023-09-04 14:56:00 +07:00
dialogConfirm($q, async () => await dataEdit(id));
}
/** open dialog */
function edit() {
isEdit.value = true;
}
/** close dialog */
function cancel() {
isEdit.value = false;
2023-09-28 14:22:25 +07:00
getAssign();
}
2023-08-30 09:50:52 +07:00
/**
* งกนกรองขอม
* @param options อารเรยอมลทจะถกกรอง
* @param excludedGroups อารเรยของกลมทไมองการรวม
* @returns {any[]} อารเรยอมลทานการกรอง
*/
function filterData(options: any[], excludedGroups: any[]) {
2023-08-30 09:50:52 +07:00
return options.filter(
(item) => !excludedGroups.some((group) => group && group.id === item.id)
);
}
/**
* งกนกรองขอม
* @param options อารเรยอมลทจะถกกรอง
* @param excludedGroups อารเรยของกลมทไมองการรวม
* @returns {any[]} อารเรยอมลทานการกรอง
*/
function filtermantor(options: any[], excludedGroups: any[]) {
2023-08-30 09:50:52 +07:00
return options.filter(
(item) => !excludedGroups.some((group) => group && group.id === item.id)
);
}
/**
* งกนกรองขอม
* @param options อารเรยอมลทจะถกกรอง
* @param excludedGroups อารเรยของกลมทไมองการรวม
* @returns {any[]} อารเรยอมลทานการกรอง
*/
function filterMain(options: any[], excludedGroups: any[]) {
2023-08-30 09:50:52 +07:00
return options.filter(
(item) => !excludedGroups.some((group) => group && group.id === item.id)
);
}
2023-08-30 09:50:52 +07:00
/** reset ค่าวันที่เริ่ม */
function clearDateExam() {
date_start.value = undefined;
2023-08-09 12:09:46 +07:00
}
2023-08-09 17:12:37 +07:00
/** reset ค่าวันที่สิ้นสุด */
function clearDateExam2() {
date_finish.value = undefined;
}
/** เพิ่ม ผลการปฏิบัติงาน*/
function addActivity() {
activityCount.value++;
}
/**
* ลบ ผลการปฏงาน
* @param item ตำเเหนงของตวทลบ เปนตวเลข
*/
function deleteactivity(item: number) {
2023-07-27 16:54:05 +07:00
activity_desc.value.splice(item, 1);
goal_desc.value.splice(item, 1);
if (activityCount.value > 2) {
activityCount.value--;
}
}
/** เพิ่มความรู้ความสามารถ โดย สูงสุดที่ 6 item */
function addKnowledge() {
if (knowledgeCount.value < 6) {
knowledgeCount.value++;
}
}
2023-07-27 16:54:05 +07:00
/**
* ลบ ความรความสามารถ
* @param item ตำเเหนงของตวทลบ เปนตวเลข
*/
function deleteknowledge(item: number) {
knowledge.value.splice(item, 1);
if (knowledgeCount.value > 3) {
knowledgeCount.value--;
}
}
/** เพิ่ม ผลผลิตของงาน*/
function addProductivity() {
productivityCount.value++;
}
/**
* ลบ ผลผลตของงาน
* @param item ตำเเหนงของตวทลบ เปนตวเลข
*/
function deleteProductivitys(item: number) {
output_desc.value.splice(item, 1);
indicator_desc.value.splice(item, 1);
if (productivityCount.value > 1) {
productivityCount.value--;
}
2023-07-27 09:11:43 +07:00
}
/**
*งขอมลทไดบมอบหมาย
* @param id personal id
*/
async function getAssignNew(id: string) {
2023-08-09 12:09:46 +07:00
await http.get(config.API.newAssign(id)).then((res: any) => {
2024-11-01 19:53:48 +07:00
const data = res.data.result;
2023-08-09 12:09:46 +07:00
const monthOption = {
value: data.assign_month,
label: `${data.assign_month} เดือน`,
};
monthOp.push(monthOption);
monthSelect.value = `${data.assign_month} เดือน`;
fullname.value =
2024-06-11 13:46:27 +07:00
(data.person.prefixName == null ? "" : data.person.prefixName) +
data.person.firstName +
" " +
data.person.lastName;
position.value = data.person.positionName;
2023-08-09 12:09:46 +07:00
});
}
/**
* get อม สมรรถนะหล
* @param id personal id
*/
const assign_competencyMain = ref<any>();
async function getcompetency(id: string) {
http
.get(config.API.kpiCapacity + `/head`)
.then((res) => {
const data = res.data.result;
assign_competencyMain.value = data;
main.value = data[0];
main2.value = data[1];
main3.value = data[2];
main4.value = data[3];
main5.value = data[4];
})
.catch((err) => {
messageError($q, err);
});
}
/**
* get อม สมรรถนะประจากลมงาน
* @param id personal id
*/
const assign_competencyGroupMain = ref<any>();
async function getCompetencyGroup(id: string) {
http
.get(config.API.kpiCapacity + `/group?positionName=${position.value}`)
.then((res) => {
const data = res.data.result;
assign_competencyGroupMain.value = data;
OPgroup.value = data;
group.value = data[0];
group2.value = data[1];
group3.value = data[2];
})
.catch((err) => {
messageError($q, err);
});
// await http.get(config.API.competencyGroupOptions(id)).then((res: any) => {
2024-11-01 19:53:48 +07:00
// const data = res.data.result;
// OPgroup.value = data;
// group.value = data[0];
// group2.value = data[1];
// group3.value = data[2];
// });
}
/**
* get อม ความรความสามารถในการปฏงาน
* @param id personal id
*/
async function getKnowledge(id: string) {
await http.get(config.API.knowledgeOptions(id)).then((res: any) => {
2024-11-01 19:53:48 +07:00
OPknowledge.value = res.data.result;
});
}
/**
* get อม กษะ
* @param id personal id
*/
async function getSkill(id: string) {
await http.get(config.API.skillOptions(id)).then((res: any) => {
2024-11-01 19:53:48 +07:00
const skillData = res.data.result;
OPcomputer.value = [skillData.computer];
OPenglish.value = [skillData.english];
OPinfomation.value = [skillData.information];
OPresourse.value = [skillData.resourse];
skill.value = skillData.computer;
skill2.value = skillData.english;
skill3.value = skillData.information;
skill4.value = skillData.resourse;
});
}
/**
* get อม ความรเรองกฎหมายและกฎระเบยบ
* @param id personal id
*/
async function getLaw(id: string) {
await http.get(config.API.lawOptions(id)).then((res: any) => {
2024-11-01 19:53:48 +07:00
checkRule.value = res.data.result;
});
}
/** ฟังชั่นส่ง วันที่ไปคำนวณ */
async function postDateTime() {
2023-08-09 12:09:46 +07:00
await http
.post(config.API.calculateDate(), {
month: monthSelect.value !== null ? parseInt(monthSelect.value) : null,
start_date: dateToISO(date_start.value as Date),
})
.then(async (res) => {
const result = res.data;
date_finish.value = result.result.finish_date;
2023-08-09 12:09:46 +07:00
})
2023-09-28 14:22:25 +07:00
.catch((e) => {})
2023-08-09 12:09:46 +07:00
.finally(async () => {
hideLoader();
});
}
/**
* @param id personal
*/
function putDataEdit(id: string) {
2023-08-21 16:09:05 +07:00
const GUID = personalId;
const assign_job = activityArray.value.map((item, index) => {
const activityDesc = activity_desc.value[index]?.trim();
const goalDesc = goal_desc.value[index]?.trim();
if (activityDesc !== "" && goalDesc !== "") {
return {
activity_desc: activityDesc,
goal_desc: goalDesc,
};
} else {
return null;
}
});
2023-08-21 16:09:05 +07:00
const know_ledge = knowledge.value.map((item) => ({
2024-08-30 17:42:22 +07:00
id: item ? item.id : null,
2023-08-21 16:09:05 +07:00
level: item ? item.level : null,
}));
const Productivity_assign = ProductivityArray.value.map((item, index) => {
const outputDesc = output_desc.value[index]?.trim();
const indicatorDesc = indicator_desc.value[index]?.trim();
2023-08-09 12:09:46 +07:00
2023-08-21 16:09:05 +07:00
if (outputDesc !== "" && indicatorDesc !== "") {
return {
output_desc: outputDesc,
indicator_desc: indicatorDesc,
};
} else {
return null;
}
});
const allGroup = [];
if (group.value) allGroup.push({ level: group.value.level });
if (group2.value) allGroup.push({ level: group2.value.level });
if (group3.value) allGroup.push({ level: group3.value.level });
const allSkills = [];
if (skill.value) allSkills.push({ level: skill.value.level });
if (skill2.value) allSkills.push({ level: skill2.value.level });
if (skill3.value) allSkills.push({ level: skill3.value.level });
if (skill4.value) allSkills.push({ level: skill4.value.level });
const allCompetency = [];
if (main.value) allCompetency.push(main.value);
if (main2.value) allCompetency.push(main2.value);
if (main3.value) allCompetency.push(main3.value);
if (main4.value) allCompetency.push(main4.value);
if (main5.value) allCompetency.push(main5.value);
2023-08-21 16:09:05 +07:00
const assign_director = [
{
2023-09-06 10:16:43 +07:00
personal_id:
caretaker1.value.id != null
? caretaker1.value.id
: caretaker1.value.personal_id,
2023-08-21 16:09:05 +07:00
role: "mentor",
name: caretaker1.value.name,
position: caretaker1.value.position,
posType: caretaker1.value.posType,
posLevel: caretaker1.value.posLevel,
dated:
date2.value instanceof Date
? dateToISO(date2.value)
: dateToISO(new Date(date2.value)),
2023-08-21 16:09:05 +07:00
},
{
2023-09-06 10:16:43 +07:00
personal_id:
commander.value.id != null
? commander.value.id
: commander.value.personal_id,
2023-08-21 16:09:05 +07:00
role: "commander",
name: commander.value.name,
position: commander.value.position,
posType: commander.value.posType,
posLevel: commander.value.posLevel,
dated:
date4.value instanceof Date
? dateToISO(date4.value)
: dateToISO(new Date(date4.value)),
2023-08-21 16:09:05 +07:00
},
{
2023-09-06 10:16:43 +07:00
personal_id:
chairman.value.id != null
? chairman.value.id
: chairman.value.personal_id,
2023-08-21 16:09:05 +07:00
role: "chairman",
name: chairman.value.name,
position: chairman.value.position,
posType: chairman.value.posType,
posLevel: chairman.value.posLevel,
2023-08-21 16:09:05 +07:00
},
];
2023-09-04 14:56:00 +07:00
if (caretaker2.value) {
assign_director.push({
2023-09-06 10:16:43 +07:00
personal_id:
caretaker2.value.id != null
? caretaker2.value.id
: caretaker2.value.personal_id,
name: caretaker2.value.name,
position: caretaker2.value.position,
posType: caretaker2.value.posType,
posLevel: caretaker2.value.posLevel,
2023-09-04 14:56:00 +07:00
role: "mentor",
dated:
date3.value instanceof Date
? dateToISO(date3.value)
: dateToISO(new Date(date3.value)),
});
}
2023-08-21 16:09:05 +07:00
const data = {
2024-10-31 14:54:02 +07:00
reportPersonId: reportPersonId.value ? reportPersonId.value : "",
appointId: appointTopic.value ? appointTopic.value.id : "",
2023-08-21 16:09:05 +07:00
fullname: fullname.value,
position: position.value,
monthSelect:
monthSelect.value !== null ? parseInt(monthSelect.value) : null,
date_start:
date_start.value instanceof Date
? dateToISO(date_start.value)
: new Date(),
date_finish:
date_finish.value instanceof Date
? dateToISO(date_finish.value)
: dateToISO(new Date(date_finish.value)),
assign_knowledges: know_ledge,
assign_jobs: assign_job.filter((item) => item !== null),
other_desc: other_desc.value,
2023-08-21 16:09:05 +07:00
assign_skill: allSkills,
assign_competency: assign_competencyMain.value,
assign_competency_group: assign_competencyGroupMain.value,
other4_desc: other4_desc.value,
other5_no1_desc: other5_no1_desc.value,
2023-08-21 16:09:05 +07:00
assign_outputs: Productivity_assign.filter((item) => item !== null),
assign_director: assign_director,
experimenter_dated:
date1.value instanceof Date ? dateToISO(date1.value) : new Date(),
2023-08-21 16:09:05 +07:00
assign_law: checkRule.value
.filter((item) => item.checked === 1)
.map((item) => ({
id: item.id,
checked: item.checked,
})),
};
return data;
}
/**
* @param id personal
*/
function putData(id: string) {
2023-08-21 16:09:05 +07:00
const GUID = personalId;
const assign_job = activityArray.value.map((item, index) => {
const activityDesc = activity_desc.value[index]?.trim();
const goalDesc = goal_desc.value[index]?.trim();
if (activityDesc !== "" && goalDesc !== "") {
return {
activity_desc: activityDesc,
goal_desc: goalDesc,
};
} else {
2023-08-09 12:09:46 +07:00
return null;
}
});
const know_ledge = knowledge.value.map((item) => ({
2024-08-30 17:42:22 +07:00
id: item ? item.id : null,
level: item ? item.level : null,
}));
const Productivity_assign = ProductivityArray.value.map((item, index) => {
const outputDesc = output_desc.value[index]?.trim();
const indicatorDesc = indicator_desc.value[index]?.trim();
if (outputDesc !== "" && indicatorDesc !== "") {
return {
2023-08-09 12:09:46 +07:00
output_desc: outputDesc,
indicator_desc: indicatorDesc,
};
} else {
2023-08-09 12:09:46 +07:00
return null;
}
});
2023-08-09 12:09:46 +07:00
const allGroup = [];
if (group.value) allGroup.push({ level: group.value.level });
if (group2.value) allGroup.push({ level: group2.value.level });
if (group3.value) allGroup.push({ level: group3.value.level });
2023-08-09 12:09:46 +07:00
const allSkills = [];
if (skill.value) allSkills.push({ level: skill.value.level });
if (skill2.value) allSkills.push({ level: skill2.value.level });
if (skill3.value) allSkills.push({ level: skill3.value.level });
if (skill4.value) allSkills.push({ level: skill4.value.level });
2023-08-09 12:09:46 +07:00
const assign_director = [
{
personal_id: caretaker1.value.id,
name: caretaker1.value.name,
position: caretaker1.value.position,
posType: caretaker1.value.posType,
posLevel: caretaker1.value.posLevel,
2023-08-09 12:09:46 +07:00
role: "mentor",
dated:
date2.value instanceof Date
? dateToISO(date2.value)
: dateToISO(new Date(date2.value)),
2023-08-09 12:09:46 +07:00
},
{
personal_id: commander.value.id,
2023-08-09 12:09:46 +07:00
role: "commander",
name: commander.value.name,
position: commander.value.position,
posType: commander.value.posType,
posLevel: commander.value.posLevel,
dated:
date4.value instanceof Date
? dateToISO(date4.value)
: dateToISO(new Date(date4.value)),
2023-08-09 12:09:46 +07:00
},
2023-08-18 11:50:53 +07:00
{
personal_id: chairman.value.id,
role: "chairman",
name: chairman.value.name,
position: chairman.value.position,
posType: chairman.value.posType,
posLevel: chairman.value.posLevel,
2023-08-18 11:50:53 +07:00
},
2023-08-09 12:09:46 +07:00
];
2023-08-24 11:47:56 +07:00
if (caretaker2.value) {
assign_director.push({
personal_id: caretaker2.value.id,
name: caretaker2.value.name,
position: caretaker2.value.position,
posType: caretaker2.value.posType,
posLevel: caretaker2.value.posLevel,
role: "mentor",
dated:
date3.value instanceof Date
? dateToISO(date3.value)
: dateToISO(new Date(date3.value)),
});
}
2023-07-28 09:09:47 +07:00
const data = {
2024-10-31 14:54:02 +07:00
reportPersonId: reportPersonId.value ? reportPersonId.value : "",
appointId: appointTopic.value ? appointTopic.value.id : "",
2023-08-09 12:09:46 +07:00
personalId: GUID,
fullname: fullname.value,
position: position.value,
monthSelect:
monthSelect.value !== null ? parseInt(monthSelect.value) : null,
date_start:
date_start.value instanceof Date
? dateToISO(date_start.value)
: new Date(),
date_finish:
date_finish.value instanceof Date
? dateToISO(date_finish.value)
: dateToISO(new Date(date_finish.value)),
2023-08-29 14:56:06 +07:00
2023-08-09 12:09:46 +07:00
assign_knowledges: know_ledge,
assign_jobs: assign_job.filter((item) => item !== null),
other_desc: other_desc.value,
2023-08-09 12:09:46 +07:00
assign_skill: allSkills,
assign_competency: assign_competencyMain.value,
assign_competency_group: assign_competencyGroupMain.value,
other4_desc: other4_desc.value,
other5_no1_desc: other5_no1_desc.value,
2023-08-09 12:09:46 +07:00
assign_outputs: Productivity_assign.filter((item) => item !== null),
2023-08-29 14:56:06 +07:00
2023-08-09 12:09:46 +07:00
assign_director: assign_director,
experimenter_dated:
date1.value instanceof Date ? dateToISO(date1.value) : new Date(),
2023-08-29 14:56:06 +07:00
2023-08-09 12:09:46 +07:00
assign_law: checkRule.value
.filter((item) => item.checked === 1)
.map((item) => ({
id: item.id,
checked: item.checked,
})),
};
return data;
}
2023-07-27 16:54:05 +07:00
/**
* เชคขอมลกอนบนท
* @param id personal id
*/
async function saveData(id: string) {
dialogConfirm($q, async () => await DataSave(id));
}
2023-09-06 10:16:43 +07:00
/**
* นท
* @param id personal id
*/
async function DataSave(id: string) {
2023-09-06 10:16:43 +07:00
const data = putData(id);
await http
.post(config.API.saveFinish(id), data)
.then(() => {
router.push(`/probation/detail/${id}`);
success($q, "บันทึกข้อมูลสำเร็จ");
})
.catch((e) => {
messageError($q, e);
})
.finally(() => {
hideLoader();
});
}
/** get ข้อมูลรายการมอบหมาย */
async function getAssign() {
await http.get(config.API.probationsGetAssign(assignId.value)).then((res) => {
isEdit.value = false;
2024-11-01 19:53:48 +07:00
const data = res.data.result;
fullname.value = data.profile.name;
2024-11-06 10:11:05 +07:00
appointTopic.value = appointOp.value.find(
(item: AppointTopicMain) => item.id == data.assign.appointId
);
const dataMap = appointOp.value.find(
(item: AppointTopicMain) => item.id == data.assign.appointId
)?.directors;
const dataPerson = dataMap?.map((dataPerson: AppointTopic) => ({
...dataPerson,
name: `${dataPerson.name} (${dataPerson.position}${
dataPerson.positionLevel && dataPerson.positionType
? ", " + dataPerson.positionType + ": " + dataPerson.positionLevel
: ""
})`,
}));
reportPersonIdOp.value = dataPerson ?? [];
if (reportPersonIdOp.value.length !== 0) {
2024-12-25 15:26:56 +07:00
reportPersonId.value = data.assign.reportPersonId;
2024-11-06 10:11:05 +07:00
}
position.value = data.profile.positionName;
date_start.value = data.assign.date_start;
date_finish.value = data.assign.date_finish;
date1.value = data.assign.experimenter_dated;
if (data.mentors.length > 1) {
2023-09-04 14:56:00 +07:00
date2.value = data.mentors[0].dated;
caretaker1.value = data.mentors[0];
date3.value = data.mentors[1].dated;
caretaker2.value = data.mentors[1];
} else {
date2.value = data.mentors[0].dated;
caretaker1.value = data.mentors[0];
}
date4.value = data.commander.dated;
activity_desc.value = data.jobs.map((job: any) => job.activity_desc);
goal_desc.value = data.jobs.map((job: any) => job.goal_desc);
activityCount.value = data.jobs.length;
chairman.value = data.chairman;
commander.value = data.commander;
2024-08-30 17:42:22 +07:00
knowledge.value = data.knowledges.map((opItem: any) => {
2024-09-02 10:22:58 +07:00
return OPknowledge.value.find(
(dataItem: any) => dataItem.id === opItem.id
);
});
2024-08-30 17:42:22 +07:00
knowledgeCount.value = data.knowledges.length;
other_desc.value = data.assign.other_desc;
other4_desc.value = data.assign.other4_desc;
other5_no1_desc.value = data.assign.other5_no1_desc;
const skills = data.skills.map((skills: any) => ({
id: skills.id,
title: skills.title,
level: skills.level,
level_description: skills.description,
}));
[skill.value, skill2.value, skill3.value, skill4.value] = skills;
main.value = data.competencys[0];
main2.value = data.competencys[1];
main3.value = data.competencys[2];
main4.value = data.competencys[3];
main5.value = data.competencys[4];
group.value = data.competency_groups[0];
group2.value = data.competency_groups[1];
group3.value = data.competency_groups[2];
output_desc.value = data.outputs.map((output: any) => output.output_desc);
indicator_desc.value = data.outputs.map(
(output: any) => output.indicator_desc
);
productivityCount.value = data.outputs.length;
checkRule.value = data.laws.map((law: any) => ({
id: law.id,
checked: law.selected,
description: law.description,
status_select: law.status_select,
}));
});
}
/**
* download file
* @param response ไฟล
* @param filename อไฟล
*/
function downloadFile(response: any, filename: string) {
const link = document.createElement("a");
var fileName = filename;
link.href = window.URL.createObjectURL(new Blob([response.data]));
link.setAttribute("download", fileName);
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
/**
* download file
* @param type type file
*/
async function clickdownloadFile(type: string) {
showLoader();
await http
2024-08-22 12:05:41 +07:00
.get(config.API.reportAssign(type, assignId.value))
.then(async (res) => {
const data = res.data.result;
await genReport(
data,
`แบบมอบหมายงานการทดลองปฏิบัติหน้าที่ราชการ-${fullname.value}`,
type
2023-08-29 14:56:06 +07:00
);
2024-08-22 12:05:41 +07:00
hideLoader();
})
2024-06-14 11:06:31 +07:00
.catch(async (e) => {
messageError($q, JSON.parse(await e.response.data.text()));
hideLoader();
2024-08-22 12:05:41 +07:00
})
.finally(() => {});
}
2023-09-07 12:05:38 +07:00
/** เช็ค จำนวนเดือน เเละ วันที่เริ่ม ไม่เท่ากับ undefined*/
watch(
() => [monthSelect.value, date_start.value],
() => {
if (monthSelect.value !== undefined && date_start.value !== undefined) {
postDateTime();
}
}
);
/**
* ลเตอรเเลตาม กรอก
* @param val บค input
* @param update fn
*/
2023-09-28 14:22:25 +07:00
function filterFnCaretaker(val: string, update: any) {
const dataFilter = filtermantor(OPcaretakerNew.value, [
caretaker2.value,
]).filter((i: any) => i.id !== chairman.value.id);
2023-09-28 14:22:25 +07:00
if (val == "") {
update(() => {
2024-07-09 10:39:49 +07:00
optionCaretaker.value = dataFilter;
2023-09-28 14:22:25 +07:00
});
} else {
update(() => {
2024-07-09 10:39:49 +07:00
optionCaretaker.value = dataFilter.filter(
(e: any) => e.name.search(val) !== -1
);
2023-09-28 14:22:25 +07:00
});
}
}
/**
* ลเตอรเเลตาม กรอก
* @param val บค input
* @param update fn
*/
2023-09-28 14:22:25 +07:00
function filterFnCaretaker2(val: string, update: any) {
2024-07-09 10:39:49 +07:00
const dataFilter = filtermantor(OPcaretaker.value, [caretaker1.value]).filter(
(i: any) => i.id !== chairman.value.id
);
2023-09-28 14:22:25 +07:00
if (val == "") {
update(() => {
2024-07-09 10:39:49 +07:00
optionCaretaker2.value = dataFilter;
2023-09-28 14:22:25 +07:00
});
} else {
update(() => {
2024-07-09 10:39:49 +07:00
optionCaretaker2.value = dataFilter.filter(
(e: any) => e.name.search(val) !== -1
);
2023-09-28 14:22:25 +07:00
});
}
}
/**
* ลเตอรเเลตาม กรอก
* @param val บค input
* @param update fn
*/
2023-09-28 14:22:25 +07:00
function filterFnCommander(val: string, update: any) {
2024-07-09 10:39:49 +07:00
const dataFilter = OPcommander.value.filter(
(i: any) => i.id !== chairman.value.id
);
2023-09-28 14:22:25 +07:00
if (val == "") {
update(() => {
2024-07-09 10:39:49 +07:00
OPcommanderFn.value = dataFilter;
2023-09-28 14:22:25 +07:00
});
} else {
update(() => {
2024-07-09 10:39:49 +07:00
OPcommanderFn.value = dataFilter.filter(
2023-09-28 14:22:25 +07:00
(e: any) => e.name.search(val) !== -1
);
});
}
}
/**
* ลเตอรเเลตาม กรอก
* @param val บค input
* @param update fn
*/
2024-09-02 10:22:58 +07:00
/**
* ลเตอรเเลตาม กรอก
* @param val บค input
* @param update fn
*/
function filterFnKnowledge(val: string, update: any) {
const selectedIds = knowledge.value.map((item) => item.id);
const dataFilter = OPknowledge.value.filter(
(item) => !selectedIds.includes(item.id)
);
update(() => {
OPknowledgeMain.value = dataFilter;
});
}
async function getAppoint(id: string) {
http
.get(config.API.appointMainList(id))
.then((res) => {
2024-11-01 19:53:48 +07:00
const data = res.data.result;
appointOp.value = data;
appointAll.value = data;
})
.catch((e) => {
messageError($q, e);
})
.finally(() => {});
}
function updateAppointMent() {
if (appointTopic.value) {
const data = appointTopic.value.directors;
2024-10-31 14:54:02 +07:00
const dataPerson = data.map((dataPerson: AppointTopic) => ({
...dataPerson,
name: `${dataPerson.name} (${dataPerson.position}${
dataPerson.positionLevel && dataPerson.positionType
? ", " + dataPerson.positionType + ": " + dataPerson.positionLevel
: ""
})`,
}));
reportPersonIdOp.value = dataPerson;
const dataFindChairman = data.find(
(item: AppointTopic) => item.role === "chairman"
);
2024-10-25 15:57:17 +07:00
const dataFindCommittee = data.find(
(item: AppointTopic) => item.role === "committee"
);
const dataFindCaretaker1 = data.filter(
(item: AppointTopic) => item.role === "caregiver"
2024-10-31 14:54:02 +07:00
)[0];
2024-10-25 15:57:17 +07:00
const dataFindCaretaker2 = data.filter(
(item: AppointTopic) => item.role === "caregiver"
2024-10-31 14:54:02 +07:00
)[1];
2024-10-25 15:57:17 +07:00
const createChairmanObject = (dataPerson: AppointTopic) => ({
2024-11-05 14:01:13 +07:00
id: dataPerson.profileId,
2024-10-25 15:57:17 +07:00
name: dataPerson.name,
label: dataPerson.position
? `${dataPerson.name} (${dataPerson.position}${
dataPerson.positionLevel && dataPerson.positionType
? ", " + dataPerson.positionType + ": " + dataPerson.positionLevel
: ""
})`
2024-10-25 15:57:17 +07:00
: dataPerson.name,
posLevel: dataPerson.positionLevel,
posType: dataPerson.positionType,
position: dataPerson.position,
});
2024-10-25 15:57:17 +07:00
caretaker1.value = dataFindCaretaker1
? createChairmanObject(dataFindCaretaker1)
: null;
caretaker2.value = dataFindCaretaker2
? createChairmanObject(dataFindCaretaker2)
: null;
chairman.value = dataFindChairman
? createChairmanObject(dataFindChairman)
: null;
2024-10-25 15:57:17 +07:00
commander.value = dataFindCommittee
? createChairmanObject(dataFindCommittee)
: null;
}
}
/** เมื่อโหลดหน้า เรียกใช้งานฟังชั่น */
onMounted(async () => {
2024-11-04 13:48:11 +07:00
const promises = [
getAssignNew(personalId),
getLaw(personalId),
getSkill(personalId),
getKnowledge(personalId),
getcompetency(personalId),
getCompetencyGroup(personalId),
getAppoint(personalId),
];
if (assignId.value !== undefined) {
2024-11-04 13:48:11 +07:00
promises.push(getAssign());
}
2024-11-04 13:48:11 +07:00
showLoader();
await Promise.all(promises)
.then(() => {})
.catch((e) => {
messageError($q, e);
})
.finally(() => {
hideLoader();
});
});
</script>
<template>
<q-form
greedy
@submit.prevent
2024-06-11 13:46:27 +07:00
@validation-success="
assignId !== undefined ? saveEdit(assignId) : saveData(personalId)
"
>
<div class="q-pa-sm">
<div class="toptitle text-dark col-12 row items-center">
2023-09-28 14:22:25 +07:00
<q-btn
icon="mdi-arrow-left"
unelevated
round
dense
flat
color="primary"
class="q-mr-sm"
@click="router.go(-1)"
v-if="routeName == 'probationWorkAdd'"
/>
<div v-if="routeName == 'probationWorkAdd'">
เพมแบบมอบหมายงานการทดลองปฏหนาทราชการ
</div>
<div v-else class="col-12 row q-gutter-md">
<div>แบบมอบหมายงานการทดลองปฏหนาทราชการ</div>
2023-09-28 14:22:25 +07:00
<q-btn
2024-08-22 12:05:41 +07:00
v-if="!isEdit"
2023-09-28 14:22:25 +07:00
size="12px"
flat
dense
icon="mdi-download"
color="primary"
>
<q-tooltip>ดาวนโหลด</q-tooltip>
<q-menu>
<q-list style="min-width: 150px">
2023-09-28 14:22:25 +07:00
<q-item
clickable
v-close-popup
@click="clickdownloadFile('pdf')"
>
<q-item-section avatar
><q-icon color="red" name="mdi-file-pdf" />
2023-08-29 14:56:06 +07:00
</q-item-section>
2024-11-28 09:34:00 +07:00
<q-item-section>ไฟล .pdf</q-item-section>
</q-item>
2023-09-28 14:22:25 +07:00
<q-item
clickable
v-close-popup
@click="clickdownloadFile('docx')"
>
<q-item-section avatar
><q-icon color="blue" name="mdi-file-word"
/></q-item-section>
<q-item-section>ไฟล .docx</q-item-section>
</q-item>
</q-list>
</q-menu>
</q-btn>
<div v-if="!isEdit">
2023-09-28 14:22:25 +07:00
<q-btn
2024-11-01 13:53:45 +07:00
v-if="
!checkRoutePermisson &&
probationStore.dataPermissions?.tab1.isEdit
"
2023-09-28 14:22:25 +07:00
dense
flat
round
2024-08-20 17:34:22 +07:00
color="edit"
2023-09-28 14:22:25 +07:00
@click="edit()"
2024-08-20 17:34:22 +07:00
icon="edit"
2023-09-28 14:22:25 +07:00
>
<q-tooltip>แกไขขอม</q-tooltip>
</q-btn>
</div>
<div v-else>
2023-09-28 14:22:25 +07:00
<q-btn
2024-08-14 12:24:35 +07:00
v-if="!checkRoutePermisson"
2023-09-28 14:22:25 +07:00
dense
flat
round
color="red"
@click="cancel()"
icon="mdi-undo"
>
<q-tooltip>ยกเล</q-tooltip>
</q-btn>
<!-- @click="saveEdit(assignId)" -->
2023-09-28 14:22:25 +07:00
<q-btn
2024-08-14 12:24:35 +07:00
v-if="!checkRoutePermisson"
2023-09-28 14:22:25 +07:00
dense
flat
class="q-ml-md"
round
color="public"
type="submit"
2023-09-28 14:22:25 +07:00
icon="mdi-content-save-outline"
>
<q-tooltip>นทกขอม</q-tooltip>
</q-btn>
</div>
</div>
</div>
<div class="col-12 text-dark">
<div class="row col-12">
<div class="row col-12 q-gutter-lg">
2024-10-31 14:54:02 +07:00
<div class="col-12">
<div class="row q-col-gutter-sm q-mb-sm">
<div class="col-6">
<q-select
outlined
dense
label="เลือกคณะกรรมการประเมินผลการทดลองปฏิบัติหน้าที่ราชการ"
bg-color="white"
:rules="[(val:string) => !!val || 'กรุณาเลือกคณะกรรมการประเมินผลการทดลองปฏิบัติหน้าที่ราชการ']"
hide-bottom-space
:options="appointOp"
class="col-xs-12 col-sm-6"
:readonly="!isEdit && routeName !== 'probationWorkAdd'"
borderless
option-label="topic"
option-value="id"
v-model="appointTopic"
map-options
@update:model-value="updateAppointMent"
></q-select>
</div>
<div class="col-6">
<q-select
2024-11-01 14:25:49 +07:00
:readonly="!isEdit && routeName !== 'probationWorkAdd'"
2024-10-31 14:54:02 +07:00
outlined
dense
label="ผู้บันทึกแบบประเมินผล (คณะกรรมการ)"
bg-color="white"
2024-12-25 15:26:56 +07:00
:rules="[(val:any) => val && val.length > 0 || 'กรุณาเลือกผู้บันทึกแบบประเมินผล (คณะกรรมการ)']"
2024-10-31 14:54:02 +07:00
hide-bottom-space
:options="reportPersonIdOp"
class="col-xs-12 col-sm-6"
borderless
option-label="name"
2024-11-06 10:11:05 +07:00
option-value="profileId"
2024-10-31 14:54:02 +07:00
v-model="reportPersonId"
map-options
emit-value
></q-select>
</div>
</div>
2024-10-31 14:54:02 +07:00
<div class="col-12 text-top0 items-center">
<q-avatar class="bg-grey-2 q-mr-sm" size="28px">1</q-avatar>
ทดลองปฏหนาทราชการ
</div>
<div class="col-12 row q-col-gutter-md">
<div class="col-xs-12 col-sm-6">
2023-09-28 14:22:25 +07:00
<q-input
2024-09-27 16:56:52 +07:00
:rules="[(val:string) => !!val || 'กรุณากรอกชื่อ']"
2023-09-28 14:22:25 +07:00
hide-bottom-space
readonly
dense
borderless
outlined
v-model="fullname"
label="ชื่อ-นามสกุล"
bg-color="white"
2023-09-28 14:22:25 +07:00
/>
</div>
<div class="col-xs-12 col-sm-6">
2023-09-28 14:22:25 +07:00
<q-input
2024-09-27 16:56:52 +07:00
:rules="[(val:string) => !!val || 'กรุณากรอกตำเเหน่ง']"
2023-09-28 14:22:25 +07:00
hide-bottom-space
readonly
dense
borderless
outlined
v-model="position"
label="ตำแหน่ง"
bg-color="white"
2023-09-28 14:22:25 +07:00
/>
</div>
<div class="col-12 row">
<div class="col-12 text-top0 items-center">
ระยะเวลาการทดลองปฏหนาทราชการ
</div>
<div class="col-12 row q-col-gutter-md">
<div class="col-xs-12 col-sm-4">
2023-09-28 14:22:25 +07:00
<q-select
2024-09-27 16:56:52 +07:00
:rules="[(val:string) => !!val || 'กรุณาเลือกระยะเวลา']"
2023-09-28 14:22:25 +07:00
hide-bottom-space
:options="monthOp"
class="col-xs-12 col-sm-6"
2024-09-09 11:01:02 +07:00
:readonly="!isEdit && routeName !== 'probationWorkAdd'"
2023-09-28 14:22:25 +07:00
dense
borderless
option-label="label"
option-value="value"
2024-08-14 14:04:34 +07:00
outlined
2023-09-28 14:22:25 +07:00
v-model="monthSelect"
:label="`ระยะเวลา (เดือน)`"
bg-color="white"
2023-09-28 14:22:25 +07:00
/>
</div>
<div class="col-xs-12 col-sm-4">
2023-09-28 14:22:25 +07:00
<datepicker
menu-class-name="modalfix"
v-model="date_start"
:locale="'th'"
autoApply
borderless
:enableTimePicker="false"
week-start="0"
2024-09-09 11:01:02 +07:00
:readonly="!isEdit && routeName !== 'probationWorkAdd'"
2023-09-28 14:22:25 +07:00
>
<template #year="{ year }">
{{ year + 543 }}
</template>
<template #year-overlay-value="{ value }">
{{ parseInt(value + 543) }}
</template>
<template #trigger>
2023-09-28 14:22:25 +07:00
<q-input
dense
borderless
2024-08-14 14:04:34 +07:00
outlined
2024-09-09 11:01:02 +07:00
:readonly="
!isEdit && routeName !== 'probationWorkAdd'
"
2024-09-27 16:56:52 +07:00
:rules="[(val:string) => !!val || 'กรุณาเลือกวันที่']"
2023-09-28 14:22:25 +07:00
hide-bottom-space
class="full-width datepicker"
:model-value="
date_start != null
? date2Thai(date_start)
: undefined
2023-09-28 14:22:25 +07:00
"
:label="`${'ตั้งเเต่วันที่'}`"
bg-color="white"
2023-09-28 14:22:25 +07:00
>
2023-09-25 10:46:48 +07:00
</q-input>
</template>
</datepicker>
</div>
<div class="col-xs-12 col-sm-4">
2023-09-28 14:22:25 +07:00
<datepicker
menu-class-name="modalfix"
v-model="date_finish"
:locale="'th'"
autoApply
borderless
2024-08-14 14:04:34 +07:00
readonly
2023-09-28 14:22:25 +07:00
:enableTimePicker="false"
week-start="0"
>
<template #year="{ year }">
{{ year + 543 }}
</template>
<template #year-overlay-value="{ value }">
{{ parseInt(value + 543) }}
</template>
2023-09-25 10:46:48 +07:00
<template #trigger>
2023-09-28 14:22:25 +07:00
<q-input
hide-bottom-space
dense
2024-08-14 14:04:34 +07:00
outlined
2023-09-28 14:22:25 +07:00
readonly
class="full-width datepicker"
:model-value="
date_finish != null
? date2Thai(date_finish)
: undefined
2023-09-28 14:22:25 +07:00
"
:label="`${'ถึงวันที่'}`"
clearable
bg-color="white"
2023-09-28 14:22:25 +07:00
@clear="clearDateExam2"
>
</q-input>
2023-09-25 10:46:48 +07:00
</template>
</datepicker>
</div>
</div>
</div>
</div>
</div>
<div class="col-12">
<q-separator size="3px" color="grey-2" />
</div>
<div class="col-12 row">
<div class="col-12 text-top0 items-center">
<q-avatar class="bg-grey-2 q-mr-sm" size="28px">2</q-avatar>
แลการทดลองปฏหนาทราชการ ( อาจมไดมากกว 1 คน )
</div>
2024-10-25 15:57:17 +07:00
<div class="col-12 row q-col-gutter-md">
2023-09-28 14:22:25 +07:00
<q-select
2024-09-27 16:56:52 +07:00
:rules="[(val:string) => !!val || 'กรุณาเลือกผู้ดูเเล']"
2023-09-28 14:22:25 +07:00
option-value="id"
2024-10-25 15:57:17 +07:00
hide-dropdown-icon
readonly
:options="OPcaretakerNew"
2023-09-28 14:22:25 +07:00
class="col-xs-12 col-sm-6"
dense
hide-bottom-space
2024-08-14 14:04:34 +07:00
outlined
2023-09-28 14:22:25 +07:00
v-model="caretaker1"
:label="`ผู้ดูแลคนที่ 1`"
option-label="label"
2023-09-28 14:22:25 +07:00
@filter="filterFnCaretaker"
use-input
behavior="menu"
bg-color="white"
2023-09-28 14:22:25 +07:00
>
<template v-slot:no-option>
<q-item>
<q-item-section class="text-grey">
ไมอม
</q-item-section>
</q-item>
</template>
</q-select>
2023-09-28 14:22:25 +07:00
<q-select
clearable
:options="optionCaretaker2"
option-value="id"
option-label="label"
2023-09-28 14:22:25 +07:00
hide-bottom-space
class="col-xs-12 col-sm-6"
dense
2024-10-25 15:57:17 +07:00
hide-dropdown-icon
readonly
2023-09-28 14:22:25 +07:00
borderless
2024-08-14 14:04:34 +07:00
outlined
2023-09-28 14:22:25 +07:00
v-model="caretaker2"
:label="`ผู้ดูแลคนที่ 2`"
@filter="filterFnCaretaker2"
use-input
behavior="menu"
bg-color="white"
2023-09-28 14:22:25 +07:00
>
<template v-slot:no-option>
<q-item>
<q-item-section class="text-grey">
ไมอม
</q-item-section>
</q-item>
</template>
</q-select>
</div>
</div>
<div class="col-12">
<q-separator size="3px" color="grey-2" />
</div>
<!-- 3.1 -->
<div class="col-12 row">
<div class="col-12 text-top0 items-center">
<q-avatar class="bg-grey-2 q-mr-sm" size="28px">3</q-avatar>
ผลการปฏงาน
</div>
<div class="col-12 text-top2 row items-center">
<q-icon name="mdi-label" color="grey-4" class="q-pr-sm" />
2024-11-27 18:13:26 +07:00
3.1 องาน/ภารกจงานทมอบหมาย (ควรมมากกว 1 ภารกจงาน)
2023-09-28 14:22:25 +07:00
<q-btn
2024-09-09 11:01:02 +07:00
v-if="isEdit == true || routeName == 'probationWorkAdd'"
2023-09-28 14:22:25 +07:00
round
color="primary"
dense
icon="mdi-plus"
flat
class="q-ml-sm"
@click="addActivity"
/>
</div>
<div class="col-12 row q-gutter-sm">
2023-09-28 14:22:25 +07:00
<q-card
v-for="(item, index) in activityArray"
:key="index"
flat
bordered
class="col-12 q-pa-sm bg-grey-1"
>
<div class="col-12 row q-col-gutter-sm">
<div class="col-xs-12 col-sm-6">
2023-09-28 14:22:25 +07:00
<q-input
:rules="
2024-09-27 16:56:52 +07:00
index < 2 ? [(val:string) => !!val || 'กรุณากรอกข้อมูล'] : []
2023-09-28 14:22:25 +07:00
"
hide-bottom-space
2024-09-09 11:01:02 +07:00
:readonly="!isEdit && routeName !== 'probationWorkAdd'"
2023-09-28 14:22:25 +07:00
dense
borderless
2024-08-14 14:04:34 +07:00
outlined
2023-09-28 14:22:25 +07:00
class="bg-white"
type="textarea"
v-model="activity_desc[index]"
label="กิจกรรมของงาน/ขั้นตอนการปฏิบัติงาน (ไม่เกิน10บรรทัด)"
2023-09-28 14:22:25 +07:00
/>
</div>
<div class="col-xs-12 col-sm-5">
2023-09-28 14:22:25 +07:00
<q-input
:rules="
2024-09-27 16:56:52 +07:00
index < 2 ? [(val:string) => !!val || 'กรุณากรอกข้อมูล'] : []
2023-09-28 14:22:25 +07:00
"
hide-bottom-space
2024-09-09 11:01:02 +07:00
:readonly="!isEdit && routeName !== 'probationWorkAdd'"
2023-09-28 14:22:25 +07:00
dense
borderless
2024-08-14 14:04:34 +07:00
outlined
2023-09-28 14:22:25 +07:00
class="bg-white"
type="textarea"
v-model="goal_desc[index]"
label="เป้าหมายในการปฏิบัติงาน (ไม่เกิน10บรรทัด)"
2023-09-28 14:22:25 +07:00
/>
</div>
<!-- delete -->
2023-09-28 14:22:25 +07:00
<div
v-if="index > 1"
class="col-xs-12 col-sm-1 flex justify-center items-center"
>
<q-btn
flat
round
color="red"
icon="mdi-trash-can-outline"
@click="deleteactivity(index)"
2024-09-09 11:01:02 +07:00
v-if="isEdit == true || routeName == 'probationWorkAdd'"
2023-09-28 14:22:25 +07:00
/>
</div>
</div>
</q-card>
</div>
</div>
<!-- 3.2 -->
<div class="col-12 row">
<div class="col-12 text-top2">
<q-icon name="mdi-label" color="grey-4" class="q-pr-sm" />
3.2 ความรความสามารถและทกษะ (ตามท..าหนด)
</div>
<q-card bordered flat class="col-12 row q-pa-md bg-grey-1">
<div class="row col-12 q-gutter-lg">
<div class="col-12 row">
<div class="col-12 text-top2 row items-center">
ความรความสามารถในการปฏงาน
2023-09-28 14:22:25 +07:00
<q-btn
2024-09-09 11:01:02 +07:00
v-if="isEdit == true || routeName == 'probationWorkAdd'"
2023-09-28 14:22:25 +07:00
round
color="primary"
dense
icon="mdi-plus"
flat
class="q-ml-sm"
@click="addKnowledge"
/>
</div>
2023-09-28 14:22:25 +07:00
<div
v-for="(item, index) in knowledgeArray"
:key="index"
class="col-12 row q-col-gutter-sm"
>
<div class="col-11 q-my-xs">
2023-09-28 14:22:25 +07:00
<q-select
:option-label="
2024-09-27 16:56:52 +07:00
(item:any) => `${item.title}-${item.description}`
2023-09-28 14:22:25 +07:00
"
option-value="id"
map-options
:rules="
index < 3
2024-09-27 16:56:52 +07:00
? [(val:string) => !!val || 'กรุณาเลือกความสามารถ']
2023-09-28 14:22:25 +07:00
: []
"
hide-bottom-space
2024-09-02 10:22:58 +07:00
:options="OPknowledgeMain"
2023-09-28 14:22:25 +07:00
class="bg-white"
2024-09-09 11:01:02 +07:00
:readonly="
isEdit != true && routeName !== 'probationWorkAdd'
"
2023-09-28 14:22:25 +07:00
dense
borderless
2024-08-14 14:04:34 +07:00
outlined
2023-09-28 14:22:25 +07:00
v-model="knowledge[index]"
:label="`ความรู้ความสามารถในการปฏิบัติงาน ${
index + 1
}`"
2024-09-02 10:22:58 +07:00
@filter="filterFnKnowledge"
2023-09-28 14:22:25 +07:00
/>
</div>
2023-09-28 14:22:25 +07:00
<div
v-if="index > 2"
class="col-xs-12 col-sm-1 flex justify-center items-center"
>
<q-btn
2024-09-09 11:01:02 +07:00
v-if="
isEdit == true || routeName == 'probationWorkAdd'
"
2023-09-28 14:22:25 +07:00
flat
round
color="red"
icon="mdi-trash-can-outline"
@click="deleteknowledge(index)"
/>
</div>
</div>
</div>
<div class="col-12 row">
<div class="col-12 text-top2 row items-center">
ความรเรองกฎหมายและกฎระเบยบ (ไมเก 20 วข)
</div>
2023-09-28 14:22:25 +07:00
<q-card
flat
bordered
class="col-12 q-pa-md q-mt-sm"
style="max-height: 500px; overflow-y: scroll"
>
<div class="example-row-column-width">
<div class="bg-grey-3 q-py-xs">
2023-09-28 14:22:25 +07:00
<div
class="row"
v-for="(item, index) in checkRule"
:key="item.id"
>
<div v-if="index === 0" class="col-1 text-center">
2023-09-28 14:22:25 +07:00
<q-checkbox
2024-09-09 11:01:02 +07:00
v-if="item.status_select === 1"
2023-09-28 14:22:25 +07:00
:true-value="1"
:false-value="0"
v-model="item.checked"
dense
2024-09-09 11:01:02 +07:00
:disable="
isEdit != true &&
routeName !== 'probationWorkAdd'
"
2023-09-28 14:22:25 +07:00
/>
</div>
<div v-if="index === 0" class="col-11">
{{ item.description }}
</div>
</div>
</div>
<div v-for="(item, index) in checkRule" :key="item.id">
2023-09-28 14:22:25 +07:00
<div
v-if="index === 1"
class="row bg-grey-2 q-py-xs borderCheck"
>
<div class="col-1"></div>
<div class="col-10">
{{ item.description }}
</div>
</div>
</div>
<div v-for="(item, index) in checkRule" :key="item.id">
2023-09-28 14:22:25 +07:00
<div
v-if="index === 2"
class="row bg-grey-2 q-py-xs borderCheck"
>
<div class="col-1"></div>
<div class="col-10 q-pl-md">
{{ item.description }}
</div>
</div>
2023-09-28 14:22:25 +07:00
<div
v-else-if="index > 2 && index < 9"
class="row borderCheck border_y q-py-xs"
>
<div class="col-1 text-center">
2023-09-28 14:22:25 +07:00
<q-checkbox
:true-value="1"
:false-value="0"
v-model="item.checked"
dense
2024-09-09 11:01:02 +07:00
:disable="
isEdit != true &&
routeName !== 'probationWorkAdd'
"
2023-09-28 14:22:25 +07:00
/>
</div>
2023-09-07 12:05:38 +07:00
<div class="col-9 q-pl-xl">
{{ item.description }}
</div>
</div>
</div>
<div v-for="(item, index) in checkRule" :key="item.id">
2023-09-28 14:22:25 +07:00
<div
v-if="index === 9"
class="row bg-grey-2 q-py-xs borderCheck"
>
<div class="col-1"></div>
<div class="col-10 q-pl-md">
{{ item.description }}
</div>
</div>
2023-09-28 14:22:25 +07:00
<div
v-else-if="index > 9 && index < 16"
class="row borderCheck border_y q-py-xs"
>
<div class="col-1 text-center">
2023-09-28 14:22:25 +07:00
<q-checkbox
:true-value="1"
:false-value="0"
v-model="item.checked"
dense
2024-09-09 11:01:02 +07:00
:disable="
isEdit != true &&
routeName !== 'probationWorkAdd'
"
2023-09-28 14:22:25 +07:00
/>
</div>
<div class="col-9 q-pl-xl">
{{ item.description }}
</div>
</div>
</div>
<div v-for="(item, index) in checkRule" :key="item.id">
2023-09-28 14:22:25 +07:00
<div
v-if="index === 16"
class="row bg-grey-2 q-py-xs borderCheck"
>
<div class="col-1"></div>
<div class="col-10 q-pl-md">
{{ item.description }}
</div>
</div>
2023-09-28 14:22:25 +07:00
<div
v-else-if="index > 16 && index < 19"
class="row borderCheck border_y q-py-xs"
>
<div class="col-1 text-center">
2023-09-28 14:22:25 +07:00
<q-checkbox
:true-value="1"
:false-value="0"
v-model="item.checked"
dense
2024-09-09 11:01:02 +07:00
:disable="
isEdit != true &&
routeName !== 'probationWorkAdd'
"
2023-09-28 14:22:25 +07:00
/>
</div>
<div class="col-9 q-pl-xl">
{{ item.description }}
</div>
</div>
</div>
<div v-for="(item, index) in checkRule" :key="item.id">
2023-09-28 14:22:25 +07:00
<div
v-if="index === 19"
class="row bg-grey-2 q-py-xs borderCheck"
>
<div class="col-1"></div>
<div class="col-10 q-pl-md">
{{ item.description }}
</div>
</div>
2023-09-28 14:22:25 +07:00
<div
v-else-if="index > 19 && index < 30"
class="row borderCheck border_y q-py-xs"
>
<div class="col-1 text-center">
2023-09-28 14:22:25 +07:00
<q-checkbox
:true-value="1"
:false-value="0"
v-model="item.checked"
dense
2024-09-09 11:01:02 +07:00
:disable="
isEdit != true &&
routeName !== 'probationWorkAdd'
"
2023-09-28 14:22:25 +07:00
/>
</div>
<div class="col-9 q-pl-xl">
{{ item.description }}
</div>
</div>
</div>
</div>
</q-card>
</div>
<div class="col-12 row">
<div class="col-12 text-top2">
กฎหมายอ เกยวของกบการปฏงาน
</div>
<div class="col-12 row q-col-gutter-md">
<div class="col-12">
2023-09-28 14:22:25 +07:00
<q-input
class="bg-white"
2024-09-09 11:01:02 +07:00
:readonly="
isEdit != true && routeName !== 'probationWorkAdd'
"
2023-09-28 14:22:25 +07:00
dense
borderless
2024-08-14 14:04:34 +07:00
outlined
v-model="other_desc"
2023-09-28 14:22:25 +07:00
type="textarea"
/>
</div>
</div>
</div>
<div class="col-12 row">
<div class="col-12 text-top2">กษะ</div>
<div class="col-12 row q-col-gutter-sm">
<div class="col-xs-12 col-sm-6">
2023-09-28 14:22:25 +07:00
<q-select
:option-label="
2024-09-27 16:56:52 +07:00
(item:any) =>
2023-09-28 14:22:25 +07:00
`${item.title} - ${item.level_description}`
"
option-value="id"
hide-bottom-space
:rules="[
2024-09-27 16:56:52 +07:00
(val:string) => !!val || 'กรุณาเลือกความรู้ความสามารถ',
2023-09-28 14:22:25 +07:00
]"
:options="OPcomputer"
class="bg-white"
2024-09-09 11:01:02 +07:00
:readonly="
isEdit != true && routeName !== 'probationWorkAdd'
"
2023-09-28 14:22:25 +07:00
dense
borderless
map-options
2024-08-14 14:04:34 +07:00
outlined
2023-09-28 14:22:25 +07:00
v-model="skill"
label="ด้านที่ 1"
>
<template v-slot:selected-item="scope">
<div class="ellipsis-2-lines">
{{ scope.opt.title }} -
{{ scope.opt.level_description }}
</div>
2023-09-28 14:22:25 +07:00
</template></q-select
>
</div>
<div class="col-xs-12 col-sm-6">
2023-09-28 14:22:25 +07:00
<q-select
ellipsis-2-lines
:option-label="
2024-09-27 16:56:52 +07:00
(item:any) =>
2023-09-28 14:22:25 +07:00
`${item.title} - ${item.level_description}`
"
option-value="id"
map-options
hide-bottom-space
:rules="[
2024-09-27 16:56:52 +07:00
(val:string) => !!val || 'กรุณาเลือกความรู้ความสามารถ',
2023-09-28 14:22:25 +07:00
]"
:options="OPenglish"
class="bg-white"
2024-09-09 11:01:02 +07:00
:readonly="
isEdit != true && routeName !== 'probationWorkAdd'
"
2023-09-28 14:22:25 +07:00
dense
borderless
2024-08-14 14:04:34 +07:00
outlined
2023-09-28 14:22:25 +07:00
v-model="skill2"
label="ด้านที่ 2"
>
<template v-slot:selected-item="scope">
<div class="ellipsis-2-lines">
{{ scope.opt.title }} -
{{ scope.opt.level_description }}
</div>
2023-09-28 14:22:25 +07:00
</template></q-select
>
</div>
<div class="col-xs-12 col-sm-6">
2023-09-28 14:22:25 +07:00
<q-select
:option-label="
2024-09-27 16:56:52 +07:00
(item:any) =>
2023-09-28 14:22:25 +07:00
`${item.title} - ${item.level_description}`
"
option-value="id"
hide-bottom-space
:rules="[
2024-09-27 16:56:52 +07:00
(val:string) => !!val || 'กรุณาเลือกความรู้ความสามารถ',
2023-09-28 14:22:25 +07:00
]"
:options="OPinfomation"
class="bg-white"
2024-09-09 11:01:02 +07:00
:readonly="
isEdit != true && routeName !== 'probationWorkAdd'
"
2023-09-28 14:22:25 +07:00
dense
map-options
borderless
2024-08-14 14:04:34 +07:00
outlined
2023-09-28 14:22:25 +07:00
v-model="skill3"
label="ด้านที่ 3"
>
<template v-slot:selected-item="scope">
<div class="ellipsis-2-lines">
{{ scope.opt.title }} -
{{ scope.opt.level_description }}
</div>
2023-09-28 14:22:25 +07:00
</template></q-select
>
</div>
<div class="col-xs-12 col-sm-6">
2023-09-28 14:22:25 +07:00
<q-select
:option-label="
2024-09-27 16:56:52 +07:00
(item:any) =>
2023-09-28 14:22:25 +07:00
`${item.title} - ${item.level_description}`
"
option-value="id"
hide-bottom-space
:rules="[
2024-09-27 16:56:52 +07:00
(val:string) => !!val || 'กรุณาเลือกความรู้ความสามารถ',
2023-09-28 14:22:25 +07:00
]"
:options="OPresourse"
class="bg-white"
2024-09-09 11:01:02 +07:00
:readonly="
isEdit != true && routeName !== 'probationWorkAdd'
"
2023-09-28 14:22:25 +07:00
dense
map-options
borderless
2024-08-14 14:04:34 +07:00
outlined
2023-09-28 14:22:25 +07:00
v-model="skill4"
label="ด้านที่ 4"
>
<template v-slot:selected-item="scope">
<div class="ellipsis-2-lines">
{{ scope.opt.title }} -
{{ scope.opt.level_description }}
</div>
2023-09-28 14:22:25 +07:00
</template></q-select
>
</div>
</div>
</div>
</div>
</q-card>
</div>
<div class="col-12 row">
<div class="col-12 text-top2">
<q-icon name="mdi-label" color="grey-4" class="q-pr-sm" />
3.3 สมรรถนะ (ตามท .. าหนด)
</div>
<q-card bordered flat class="col-12 row q-pa-md bg-grey-1">
<div class="row col-12 q-gutter-lg">
<div class="col-12 row">
<div class="col-12 text-top2">สมรรถนะหล</div>
<div class="col-12 row q-col-gutter-sm">
<div class="col-xs-12 col-sm-6">
2023-09-28 14:22:25 +07:00
<q-select
:options-html="true"
2023-09-28 14:22:25 +07:00
:option-label="
2024-09-27 16:56:52 +07:00
(item:any) =>
`${item.name} - ระดับ:๑ ${item.description}`
2023-09-28 14:22:25 +07:00
"
option-value="id"
hide-bottom-space
2024-09-27 16:56:52 +07:00
:rules="[(val:string) => !!val || 'กรุณาเลือกสมรรถนะ']"
2023-09-28 14:22:25 +07:00
:options="
filterMain(OPmain, [main2, main3, main4, main5])
"
class="bg-white"
2024-09-09 11:01:02 +07:00
:readonly="
isEdit != true && routeName !== 'probationWorkAdd'
"
2023-09-28 14:22:25 +07:00
dense
borderless
map-options
2024-08-14 14:04:34 +07:00
outlined
2023-09-28 14:22:25 +07:00
v-model="main"
label="ตัวที่ 1"
>
<!-- <template v-slot:selected-item="scope">
<div class="ellipsis-2-lines">
{{ scope.opt.title }} -
{{ scope.opt.description }}
</div>
</template> -->
</q-select>
</div>
<div class="col-xs-12 col-sm-6">
2023-09-28 14:22:25 +07:00
<q-select
:options-html="true"
2023-09-28 14:22:25 +07:00
:option-label="
2024-09-27 16:56:52 +07:00
(item:any) =>
`${item.name} - ระดับ:๑ ${item.description}`
2023-09-28 14:22:25 +07:00
"
option-value="id"
hide-bottom-space
2024-09-27 16:56:52 +07:00
:rules="[(val:string) => !!val || 'กรุณาเลือกสมรรถนะ']"
2023-09-28 14:22:25 +07:00
:options="
filterMain(OPmain, [main, main3, main4, main5])
"
class="bg-white"
2024-09-09 11:01:02 +07:00
:readonly="
isEdit != true && routeName !== 'probationWorkAdd'
"
2023-09-28 14:22:25 +07:00
dense
borderless
map-options
2024-08-14 14:04:34 +07:00
outlined
2023-09-28 14:22:25 +07:00
v-model="main2"
label="ตัวที่ 2"
>
<!-- <template v-slot:selected-item="scope">
<div class="ellipsis-2-lines">
{{ scope.opt.title }} -
{{ scope.opt.description }}
</div>
</template> -->
</q-select>
</div>
<div class="col-xs-12 col-sm-6">
2023-09-28 14:22:25 +07:00
<q-select
:options-html="true"
2023-09-28 14:22:25 +07:00
:option-label="
2024-09-27 16:56:52 +07:00
(item:any) =>
`${item.name} - ระดับ:๑ ${item.description}`
2023-09-28 14:22:25 +07:00
"
option-value="id"
hide-bottom-space
2024-09-27 16:56:52 +07:00
:rules="[(val:string) => !!val || 'กรุณาเลือกสมรรถนะ']"
2023-09-28 14:22:25 +07:00
:options="
filterMain(OPmain, [main, main2, main4, main5])
"
class="bg-white"
2024-09-09 11:01:02 +07:00
:readonly="
isEdit != true && routeName !== 'probationWorkAdd'
"
2023-09-28 14:22:25 +07:00
dense
map-options
borderless
2024-08-14 14:04:34 +07:00
outlined
2023-09-28 14:22:25 +07:00
v-model="main3"
label="ตัวที่ 3"
>
<!-- <template v-slot:selected-item="scope">
<div class="ellipsis-2-lines">
{{ scope.opt.title }} -
{{ scope.opt.description }}
</div>
</template> -->
</q-select>
</div>
<div class="col-xs-12 col-sm-6">
2023-09-28 14:22:25 +07:00
<q-select
:options-html="true"
2023-09-28 14:22:25 +07:00
:option-label="
2024-09-27 16:56:52 +07:00
(item:any) =>
`${item.name} - ระดับ:๑ ${item.description}`
2023-09-28 14:22:25 +07:00
"
option-value="id"
hide-bottom-space
2024-09-27 16:56:52 +07:00
:rules="[(val:string) => !!val || 'กรุณาเลือกสมรรถนะ']"
2023-09-28 14:22:25 +07:00
:options="
filterMain(OPmain, [main, main2, main3, main5])
"
class="bg-white"
2024-09-09 11:01:02 +07:00
:readonly="
isEdit != true && routeName !== 'probationWorkAdd'
"
2023-09-28 14:22:25 +07:00
dense
borderless
map-options
2024-08-14 14:04:34 +07:00
outlined
2023-09-28 14:22:25 +07:00
v-model="main4"
label="ตัวที่ 4"
>
<!-- <template v-slot:selected-item="scope">
<div class="ellipsis-2-lines">
{{ scope.opt.title }} -
{{ scope.opt.description }}
</div>
</template> -->
</q-select>
</div>
2023-07-10 19:29:15 +07:00
<div class="col-xs-12 col-sm-6">
2023-09-28 14:22:25 +07:00
<q-select
hide-bottom-space
2024-09-27 16:56:52 +07:00
:rules="[(val:string) => !!val || 'กรุณาเลือกสมรรถนะ']"
2023-09-28 14:22:25 +07:00
:options="
filterMain(OPmain, [main, main2, main3, main4])
"
:options-html="true"
2023-09-28 14:22:25 +07:00
:option-label="
2024-09-27 16:56:52 +07:00
(item:any) =>
`${item.name} - ระดับ:๑ ${item.description}`
2023-09-28 14:22:25 +07:00
"
option-value="id"
class="bg-white"
2024-09-09 11:01:02 +07:00
:readonly="
isEdit != true && routeName !== 'probationWorkAdd'
"
2023-09-28 14:22:25 +07:00
dense
map-options
borderless
2024-08-14 14:04:34 +07:00
outlined
2023-09-28 14:22:25 +07:00
v-model="main5"
label="ตัวที่ 5"
>
<!-- <template v-slot:selected-item="scope">
<div class="ellipsis-2-lines">
{{ scope.opt.title }} -
{{ scope.opt.description }}
</div>
</template> -->
</q-select>
</div>
</div>
</div>
<div class="col-12 row">
<div class="col-12 text-top2">สมรรถนะประจากลมงาน</div>
<div class="col-12 row q-col-gutter-sm">
<div class="col-xs-12 col-sm-6">
2023-09-28 14:22:25 +07:00
<q-select
:options-html="true"
2023-09-28 14:22:25 +07:00
:option-label="
2024-09-27 16:56:52 +07:00
(item:any) =>
`${item.name} - ระดับ:๒ ${item.description}`
2023-09-28 14:22:25 +07:00
"
option-value="id"
hide-bottom-space
:rules="[
2024-09-27 16:56:52 +07:00
(val:string) => !!val || 'กรุณาเลือกสมรรถนะประจํากลุ่มงาน',
2023-09-28 14:22:25 +07:00
]"
:options="filterData(OPgroup, [group2, group3])"
class="bg-white"
2024-09-09 11:01:02 +07:00
:readonly="
isEdit != true && routeName !== 'probationWorkAdd'
"
2023-09-28 14:22:25 +07:00
dense
borderless
map-options
2024-08-14 14:04:34 +07:00
outlined
2023-09-28 14:22:25 +07:00
v-model="group"
label="ตัวที่ 1"
>
<!-- <template v-slot:selected-item="scope">
<div class="ellipsis-2-lines">
{{ scope.opt.title }} -
{{ scope.opt.description }}
</div>
</template> -->
</q-select>
</div>
<div class="col-xs-12 col-sm-6">
2023-09-28 14:22:25 +07:00
<q-select
:options-html="true"
2023-09-28 14:22:25 +07:00
:option-label="
2024-09-27 16:56:52 +07:00
(item:any) =>
`${item.name} - ระดับ:๒ ${item.description}`
2023-09-28 14:22:25 +07:00
"
option-value="id"
hide-bottom-space
:rules="[
2024-09-27 16:56:52 +07:00
(val:string) => !!val || 'กรุณาเลือกสมรรถนะประจํากลุ่มงาน',
2023-09-28 14:22:25 +07:00
]"
:options="filterData(OPgroup, [group, group3])"
class="bg-white"
2024-09-09 11:01:02 +07:00
:readonly="
isEdit != true && routeName !== 'probationWorkAdd'
"
2023-09-28 14:22:25 +07:00
dense
borderless
map-options
2024-08-14 14:04:34 +07:00
outlined
2023-09-28 14:22:25 +07:00
v-model="group2"
label="ตัวที่ 2"
>
<!-- <template v-slot:selected-item="scope">
<div class="ellipsis-2-lines">
{{ scope.opt.title }} -
{{ scope.opt.description }}
</div>
</template> -->
</q-select>
</div>
<div class="col-xs-12 col-sm-6">
2023-09-28 14:22:25 +07:00
<q-select
:options-html="true"
2023-09-28 14:22:25 +07:00
:option-label="
2024-09-27 16:56:52 +07:00
(item:any) =>
`${item.name} - ระดับ:๒ ${item.description}`
2023-09-28 14:22:25 +07:00
"
option-value="id"
map-options
hide-bottom-space
:rules="[
2024-09-27 16:56:52 +07:00
(val:string) => !!val || 'กรุณาเลือกสมรรถนะประจํากลุ่มงาน',
2023-09-28 14:22:25 +07:00
]"
:options="filterData(OPgroup, [group, group2])"
class="bg-white"
2024-09-09 11:01:02 +07:00
:readonly="
isEdit != true && routeName !== 'probationWorkAdd'
"
2023-09-28 14:22:25 +07:00
dense
borderless
2024-08-14 14:04:34 +07:00
outlined
2023-09-28 14:22:25 +07:00
v-model="group3"
label="ตัวที่ 3"
>
<!-- <template v-slot:selected-item="scope">
<div class="ellipsis-2-lines">
{{ scope.opt.title }} -
{{ scope.opt.description }}
</div>
</template> -->
</q-select>
</div>
</div>
</div>
</div>
</q-card>
</div>
<div class="col-12 row">
<div class="col-12 text-top2 row items-center">
<q-icon name="mdi-label" color="grey-4" class="q-pr-sm" />
2023-09-28 14:22:25 +07:00
3.4 พฤตกรรมทาเปนสาหรบการปฏงาน<span
class="text-weight-regular q-pl-sm"
>
( ไดแก ความประพฤต ความมณธรรมจรยธรรม การรกษาว
2023-09-28 14:22:25 +07:00
)</span
>
</div>
<q-card bordered flat class="col-12 row q-pa-md bg-grey-1">
<div class="row col-12 q-gutter-lg">
<div class="col-12 row">
<div class="col-12 text-top2">ความประพฤต ไดแก</div>
<div class="col-12 row q-col-gutter-md">
<div class="col-12 column q-ml-md">
<li>ใหบรการประชาชน หรอผบบรการดวยอธยาศยด</li>
<li>ความรบผดชอบในการปฏงาน</li>
<li>
ใหบรการประชาชน หรอผบบรการดวยความรวดเร
เอาใจใสเปนมาตรฐานเดยวก
</li>
<li>
งใจปฏหนาทราชการดวยความอตสาหะ
ขยนหมนเพยร
</li>
</div>
</div>
</div>
<div class="col-12 row">
<div class="col-12 text-top2">
ความมณธรรมจรยธรรม ไดแก
</div>
<div class="col-12 row q-col-gutter-md">
<div class="col-12 column q-ml-md">
<li>
ศตน และเสยสละเวลาในการปฏงานอยางเตมกำลงความสามารถ
</li>
<li>
ตสำนกท ปฏงานดวยความซอสตย จร
</li>
<li>
2024-11-28 13:44:28 +07:00
ดมนในสถาบนพระมหากษตร และไมกระทำการใดๆ
นจะกอใหเกดความเสยหายตอประเทศชาต ศาสนา
และพระมหากษตร
</li>
</div>
</div>
</div>
<div class="col-12 row">
<div class="col-12 text-top2">การรกษาว ไดแก</div>
<div class="col-12 row q-col-gutter-md">
<div class="col-12 column q-ml-md">
<li>ความรบผดชอบในการรกษาเวลาทำงาน</li>
<li>
แตงกายในการปฏงานไดอยางเหมาะสมกบการเปนขาราชการ
</li>
<li>
2024-11-28 13:44:28 +07:00
ไมกระทำการใดๆ
นเปนการเสอมเกยรต และศกดศรของความเปนขาราชการ
</li>
<li>
2024-11-28 13:44:28 +07:00
ไมกระทำการใดๆ
นอาจกอใหเกดความเสยหายแกอเสยงของหนวยงาน
</li>
<li>
ปฏหนาทอยางตรงไปตรงมาโดยยกหลกจรรยาบรรณวชาช
</li>
</div>
</div>
</div>
</div>
</q-card>
</div>
<div class="col-12 row">
<div class="col-12 text-top2">
<q-icon name="mdi-label" color="grey-4" class="q-pr-sm" />
3.5 (าม)
</div>
<div class="col-12 row q-col-gutter-md">
<div class="col-12">
2023-09-28 14:22:25 +07:00
<q-input
2024-09-09 11:01:02 +07:00
:readonly="
isEdit != true && routeName !== 'probationWorkAdd'
"
2023-09-28 14:22:25 +07:00
dense
borderless
2024-08-14 14:04:34 +07:00
outlined
v-model="other4_desc"
bg-color="white"
2023-09-28 14:22:25 +07:00
/>
</div>
</div>
</div>
<div class="col-12 row">
<div class="col-12 text-top2 row items-center">
<q-icon name="mdi-label" color="grey-4" class="q-pr-sm" />
3.6 ผลผลตของงานทคาดหวงและตวชดความสาเรจของงาน
2023-09-28 14:22:25 +07:00
<q-btn
2024-09-09 11:01:02 +07:00
v-if="isEdit == true || routeName == 'probationWorkAdd'"
2023-09-28 14:22:25 +07:00
round
color="primary"
dense
icon="mdi-plus"
flat
class="q-ml-sm"
@click="addProductivity"
/>
</div>
<div class="col-12 row q-gutter-md">
2023-09-28 14:22:25 +07:00
<q-card
v-for="(item, index) in ProductivityArray"
:key="index"
flat
bordered
class="col-12 q-pa-sm bg-grey-1"
>
<div class="col-12 row q-col-gutter-sm">
<div class="col-xs-12 col-sm-6">
2023-09-28 14:22:25 +07:00
<q-input
hide-bottom-space
:rules="
2024-09-27 16:56:52 +07:00
index < 1 ? [(val:string) => !!val || 'กรุณากรอกข้อมูล'] : []
2023-09-28 14:22:25 +07:00
"
type="textarea"
2024-09-09 11:01:02 +07:00
:readonly="
isEdit != true && routeName !== 'probationWorkAdd'
"
2023-09-28 14:22:25 +07:00
dense
borderless
2024-08-14 14:04:34 +07:00
outlined
2023-09-28 14:22:25 +07:00
v-model="output_desc[index]"
label="ผลผลิตของงานที่คาดหวัง (ไม่เกิน 10 บรรทัด)"
bg-color="white"
2023-09-28 14:22:25 +07:00
/>
</div>
<div class="col-xs-12 col-sm-5">
2023-09-28 14:22:25 +07:00
<q-input
:rules="
2024-09-27 16:56:52 +07:00
index < 1 ? [(val:string) => !!val || 'กรุณากรอกข้อมูล'] : []
2023-09-28 14:22:25 +07:00
"
hide-bottom-space
bg-color="white"
2023-09-28 14:22:25 +07:00
type="textarea"
2024-09-09 11:01:02 +07:00
:readonly="
isEdit != true && routeName !== 'probationWorkAdd'
"
2023-09-28 14:22:25 +07:00
dense
borderless
2024-08-14 14:04:34 +07:00
outlined
2023-09-28 14:22:25 +07:00
v-model="indicator_desc[index]"
label="ตัวชี้วัดความสําเร็จของงาน (ไม่เกิน 10 บรรทัด)"
/>
</div>
2023-09-28 14:22:25 +07:00
<div
v-if="index > 0"
class="col-xs-12 col-sm-1 flex justify-center items-center"
>
<q-btn
flat
2024-09-09 11:01:02 +07:00
v-if="isEdit == true || routeName == 'probationWorkAdd'"
2023-09-28 14:22:25 +07:00
round
color="red"
icon="mdi-trash-can-outline"
@click="deleteProductivitys(index)"
/>
</div>
</div>
</q-card>
</div>
</div>
<div class="col-12">
<q-separator size="3px" color="grey-2" />
</div>
<div class="col-12 row">
<div class="col-12 text-top0 items-center">
<q-avatar class="bg-grey-2 q-mr-sm" size="28px">4</q-avatar>
การพฒนาผทดลองปฏหนาทราชการ
</div>
<div class="col-12 row">
<div class="col-12 text-top2">
ทดลองปฏหนาทราชการตองเขารวมในการปฐมนเทศ และอบรมหลกสตรตาง
2024-12-25 15:26:56 +07:00
ภายในระยะเวลาทดลองปฏหนาทราชการ งน
</div>
<div class="col-12 text-top2 row items-center">
<q-icon name="mdi-label" color="grey-4" class="q-pr-sm" />
4.1 การปฐมนเทศเพอใหความรเกยวกบหนวยงาน/วนราชการ
</div>
<div class="col-12 text-top2 row items-center">
<q-icon name="mdi-label" color="grey-4" class="q-pr-sm" />
4.2
การเรยนรวยตนเองเพอใหความรเกยวกบกฎหมายกฎระเบยบแบบแผนของทางราชการ
</div>
<div class="col-12 text-top2 row items-center">
<q-icon name="mdi-label" color="grey-4" class="q-pr-sm" />
4.3
การอบรมสมมนารวมกนเพอปลกฝงการประพฤตปฏตนเปนขาราชการท
</div>
<div class="col-12 text-top2 row items-center">
<q-icon name="mdi-label" color="grey-4" class="q-pr-sm" />
4.4 การอบรมอ หนวยงานกำหนด (าม)
</div>
</div>
</div>
<div class="col-12">
<q-separator size="3px" color="grey-2" />
</div>
<div class="col-12 row">
<div class="col-12 text-top0 items-center">
<q-avatar class="bg-grey-2 q-mr-sm" size="28px">5</q-avatar>
การประเมนผลการทดลองปฏหนาทราชการ
</div>
<div class="col-12 text-top2 row items-center">
<q-icon name="mdi-label" color="grey-4" class="q-pr-sm" />
5.1
ประเมนผลการทดลองปฏหนาทราชการโดยคณะกรรมการประเมนผลการทดลองปฏหนาทราชการ
</div>
<div class="col-12 text-top2 row items-center">
<q-icon name="mdi-label" color="grey-4" class="q-pr-sm" />
5.2 รายละเอยดการประเมนประกอบดวย 2 วนค
</div>
<div class="col-12 row q-gutter-md">
<q-card flat bordered class="col-12 q-pa-md bg-grey-1">
<div class="col-12 text-top2">การรกษาว ไดแก</div>
<div class="col-12 row q-col-gutter-md">
<div class="col-12 column q-ml-md">
<li>ความรความสามารถท .. กำหนด</li>
<li>กษะท .. กำหนด</li>
<li>สมรรถนะตามท .. กำหนด</li>
<li>ความสามารถในการเรยนรงานในตำแหน</li>
<li>ความสามารถในการปรบใชความรบงานในหนาท</li>
<li>ความสำเรจของงานทไดบมอบหมาย</li>
<li>
(าม)
2023-09-28 14:22:25 +07:00
<q-input
2024-09-09 11:01:02 +07:00
:readonly="
isEdit != true && routeName !== 'probationWorkAdd'
"
2023-09-28 14:22:25 +07:00
dense
borderless
2024-08-14 14:04:34 +07:00
outlined
v-model="other5_no1_desc"
label="กรอกอื่น ๆ"
bg-color="white"
2023-09-28 14:22:25 +07:00
/>
</li>
</div>
</div>
</q-card>
</div>
</div>
<div class="col-12 row">
<div class="col-12 text-top2 row items-center">
<q-icon name="mdi-label" color="grey-4" class="q-pr-sm" />
5.3
อมลทใชประกอบการประเมนผลการทดลองปฏหนาทราชการประกอบดวย
</div>
<div class="col-12 row q-gutter-md">
<q-card flat bordered class="col-12 q-pa-md bg-grey-1">
<div class="col-12 row q-col-gutter-md">
<div class="col-12 column q-ml-md">
<li>
นทกผลการทดลองปฏหนาทราชการของผแลการทดลองปฏหนาทราชการ และผงคบบญา
</li>
<li>
แบบประเมนผลการทดลองปฏหนาทราชการของผงคบบญชา
</li>
<li>รายงานผลการพฒนาตามทสำนกงาน .. กำหนด</li>
</div>
</div>
</q-card>
</div>
</div>
<div class="col-12 row">
<div class="col-12 text-top2 row items-center">
<q-icon name="mdi-label" color="grey-4" class="q-pr-sm" />
5.3 ดสวนของคะแนน และมาตรฐานการประเม
</div>
<div class="col-12 row q-gutter-md">
<q-card flat bordered class="col-12 q-pa-md bg-grey-1">
<div class="col-12 row q-col-gutter-md">
<div class="col-12 column q-ml-md">
<li>ดสวนของคะแนนการทดลองปฏหนาทราชการ</li>
<div class="q-pl-lg">
วนท 1
คะแนนผลสมฤทธของการทดลองปฏหนาทราชการรอยละ 50
</div>
<div class="q-pl-lg">
วนท 2
คะแนนพฤตกรรมของผทดลองปฏหนาทราชการรอยละ 50
</div>
<div class="q-pl-lg">
มาตรฐานการประเมนแตละสวนตองไดคะแนนไมำกวารอยละ
60
</div>
<li>
ดสวนคะแนนการพฒนาขาราชการทอยระหวางการทดลองปฏหนาทราชการ
</li>
<div class="q-pl-lg">
คะแนนรวมของการพฒนาจะตองไมอยกวารอยละ 60
</div>
<div>
<span style="text-decoration: underline">หมายเหต</span>
ใหนำคะแนนรวมท 2
วนมารวมกนแลวตองไดคะแนนไมอยกวารอยละ 60
งถอวาผานการประเมนการทดลองปฏหนาทราชการ
</div>
</div>
</div>
</q-card>
</div>
</div>
<div class="col-12">
<q-separator size="3px" color="grey-2" />
</div>
<div class="col-12 row">
<div class="col-12 text-top0 items-center">
การลงชอเพอมอบหมายงานและรบมอบหมายงานในการทดลองปฏหนาทราชการ
</div>
<div class="col-12 row">
<div class="col-12 text-top2 row items-center">
<q-icon name="mdi-label" color="grey-4" class="q-pr-sm" />
ทดลองปฏหนาทราชการ
</div>
</div>
<div class="col-12 row q-col-gutter-md">
<div class="col-xs-12 col-sm-4">
2023-09-28 14:22:25 +07:00
<q-input
2024-09-09 11:01:02 +07:00
readonly
2023-09-28 14:22:25 +07:00
dense
borderless
2024-08-14 14:04:34 +07:00
outlined
2023-09-28 14:22:25 +07:00
v-model="fullname"
label="ชื่อ-นามสกุล"
bg-color="white"
2023-09-28 14:22:25 +07:00
/>
</div>
<div class="col-xs-12 col-sm-4">
2023-09-28 14:22:25 +07:00
<q-input
2024-09-09 11:01:02 +07:00
readonly
2023-09-28 14:22:25 +07:00
dense
borderless
2024-08-14 14:04:34 +07:00
outlined
2023-09-28 14:22:25 +07:00
v-model="position"
label="ตำแหน่ง"
bg-color="white"
2023-09-28 14:22:25 +07:00
/>
</div>
<div class="col-xs-12 col-sm-4">
2023-09-28 14:22:25 +07:00
<datepicker
v-model="date1"
:locale="'th'"
autoApply
2024-09-09 11:01:02 +07:00
:readonly="
isEdit != true && routeName !== 'probationWorkAdd'
"
2023-09-28 14:22:25 +07:00
:enableTimePicker="false"
week-start="0"
>
<template #year="{ year }">
{{ year + 543 }}
</template>
<template #year-overlay-value="{ value }">
{{ parseInt(value + 543) }}
</template>
<template #trigger>
2023-09-28 14:22:25 +07:00
<q-input
hide-bottom-space
2024-09-27 16:56:52 +07:00
:rules="[(val:string) => !!val || 'กรุณาเลือกวันที่']"
2024-09-09 11:01:02 +07:00
:readonly="
isEdit != true && routeName !== 'probationWorkAdd'
"
2023-09-28 14:22:25 +07:00
dense
2024-08-14 14:04:34 +07:00
outlined
2023-09-28 14:22:25 +07:00
:model-value="date1 != null ? date2Thai(date1) : null"
label="ลงวันที่"
bg-color="white"
2023-09-28 14:22:25 +07:00
>
<template v-slot:prepend>
2023-09-28 14:22:25 +07:00
<q-icon
name="event"
class="cursor-pointer"
style="color: var(--q-primary)"
>
</q-icon>
</template>
2023-09-25 10:46:48 +07:00
</q-input>
</template>
</datepicker>
</div>
</div>
</div>
<div class="col-12 row">
<div class="col-12 text-top2 row items-center">
<q-icon name="mdi-label" color="grey-4" class="q-pr-sm" />
แลการทดลองปฏหนาทราชการ
</div>
<div class="col-12 row q-col-gutter-md">
2023-09-28 14:22:25 +07:00
<q-select
:options="optionCaretaker"
option-label="label"
2023-09-28 14:22:25 +07:00
class="col-xs-12 col-sm-8"
dense
2024-10-25 15:57:17 +07:00
hide-dropdown-icon
readonly
2023-09-28 14:22:25 +07:00
borderless
2024-08-14 14:04:34 +07:00
outlined
2023-09-28 14:22:25 +07:00
v-model="caretaker1"
label="ผู้ดูแลคนที่ 1"
@filter="filterFnCaretaker"
use-input
behavior="menu"
bg-color="white"
2023-09-28 14:22:25 +07:00
>
<template v-slot:no-option>
<q-item>
<q-item-section class="text-grey">
ไมอม
</q-item-section>
</q-item>
</template>
</q-select>
<div class="col-xs-12 col-sm-4">
2023-09-28 14:22:25 +07:00
<datepicker
v-model="date2"
:locale="'th'"
autoApply
:enableTimePicker="false"
2024-09-09 11:01:02 +07:00
:readonly="
isEdit != true && routeName !== 'probationWorkAdd'
"
2023-09-28 14:22:25 +07:00
week-start="0"
>
<template #year="{ year }">
{{ year + 543 }}
</template>
<template #year-overlay-value="{ value }">
{{ parseInt(value + 543) }}
</template>
<template #trigger>
2023-09-28 14:22:25 +07:00
<q-input
hide-bottom-space
2024-09-27 16:56:52 +07:00
:rules="[(val:string) => !!val || 'กรุณาเลือกวันที่']"
2024-09-09 11:01:02 +07:00
:readonly="
isEdit != true && routeName !== 'probationWorkAdd'
"
2023-09-28 14:22:25 +07:00
dense
2024-08-14 14:04:34 +07:00
outlined
2023-09-28 14:22:25 +07:00
:model-value="date2 != null ? date2Thai(date2) : null"
label="ลงวันที่"
bg-color="white"
2023-09-28 14:22:25 +07:00
>
<template v-slot:prepend>
2023-09-28 14:22:25 +07:00
<q-icon
name="event"
class="cursor-pointer"
style="color: var(--q-primary)"
>
</q-icon>
</template>
2023-09-25 10:46:48 +07:00
</q-input>
</template>
</datepicker>
</div>
2023-09-28 14:22:25 +07:00
<q-select
clearable
:options="optionCaretaker2"
option-label="label"
2023-09-28 14:22:25 +07:00
class="col-xs-12 col-sm-8"
dense
borderless
2024-10-25 15:57:17 +07:00
hide-dropdown-icon
readonly
2024-08-14 14:04:34 +07:00
outlined
2023-09-28 14:22:25 +07:00
v-model="caretaker2"
label="ผู้ดูแลคนที่ 2"
@filter="filterFnCaretaker2"
use-input
behavior="menu"
bg-color="white"
2023-09-28 14:22:25 +07:00
><template v-slot:no-option>
<q-item>
<q-item-section class="text-grey">
ไมอม
</q-item-section>
</q-item>
</template>
</q-select>
<div class="col-xs-12 col-sm-4">
2023-09-28 14:22:25 +07:00
<datepicker
v-model="date3"
:locale="'th'"
autoApply
:enableTimePicker="false"
week-start="0"
2024-09-09 11:01:02 +07:00
:readonly="
(isEdit != true && routeName !== 'probationWorkAdd') ||
!caretaker2
"
2023-09-28 14:22:25 +07:00
>
<template #year="{ year }">
{{ year + 543 }}
</template>
<template #year-overlay-value="{ value }">
{{ parseInt(value + 543) }}
</template>
<template #trigger>
2023-09-28 14:22:25 +07:00
<q-input
hide-bottom-space
2024-09-09 11:01:02 +07:00
:readonly="
(isEdit != true &&
routeName !== 'probationWorkAdd') ||
!caretaker2
"
2023-09-28 14:22:25 +07:00
dense
:rules="
caretaker2
2024-09-27 16:56:52 +07:00
? [(val:string) => !!val || 'กรุณาเลือกวันที่']
2023-09-28 14:22:25 +07:00
: []
"
2024-08-14 14:04:34 +07:00
outlined
2023-09-28 14:22:25 +07:00
:model-value="
caretaker2 != null ? date2Thai(date3) : null
"
label="ลงวันที่"
bg-color="white"
2023-09-28 14:22:25 +07:00
>
<template v-slot:prepend>
2023-09-28 14:22:25 +07:00
<q-icon
name="event"
class="cursor-pointer"
style="color: var(--q-primary)"
>
</q-icon>
</template>
2023-09-25 10:46:48 +07:00
</q-input>
</template>
</datepicker>
</div>
</div>
</div>
<div class="col-12 row">
<div class="col-12 text-top2 row items-center">
<q-icon name="mdi-label" color="grey-4" class="q-pr-sm" />
งคบบญชาผมอบหมายงาน
</div>
<div class="col-12 row q-col-gutter-md">
2023-09-28 14:22:25 +07:00
<q-select
:options="OPcommanderFn"
option-label="label"
2023-09-28 14:22:25 +07:00
class="col-xs-12 col-sm-8"
2024-10-25 15:57:17 +07:00
hide-dropdown-icon
readonly
2023-09-28 14:22:25 +07:00
dense
borderless
2024-09-27 16:56:52 +07:00
:rules="[(val:string) => !!val || 'กรุณาเลือกผู้บังคับบัญชา']"
2024-08-14 14:04:34 +07:00
outlined
2023-09-28 14:22:25 +07:00
v-model="commander"
label="ผู้บังคับบัญชา"
use-input
behavior="menu"
@filter="filterFnCommander"
bg-color="white"
2023-09-28 14:22:25 +07:00
>
<template v-slot:no-option>
<q-item>
<q-item-section class="text-grey">
ไมอม
</q-item-section>
</q-item>
</template>
</q-select>
<div class="col-xs-12 col-sm-4">
2023-09-28 14:22:25 +07:00
<datepicker
v-model="date4"
:locale="'th'"
autoApply
borderless
2024-09-09 11:01:02 +07:00
:readonly="
isEdit != true && routeName !== 'probationWorkAdd'
"
2023-09-28 14:22:25 +07:00
:enableTimePicker="false"
week-start="0"
>
<template #year="{ year }">
{{ year + 543 }}
</template>
<template #year-overlay-value="{ value }">
{{ parseInt(value + 543) }}
</template>
<template #trigger>
2023-09-28 14:22:25 +07:00
<q-input
hide-bottom-space
2024-09-27 16:56:52 +07:00
:rules="[(val:string) => !!val || 'กรุณาเลือกวันที่']"
2024-09-09 11:01:02 +07:00
:readonly="
isEdit != true && routeName !== 'probationWorkAdd'
"
2023-09-28 14:22:25 +07:00
dense
2024-08-14 14:04:34 +07:00
outlined
2023-09-28 14:22:25 +07:00
:model-value="date4 != null ? date2Thai(date4) : null"
label="ลงวันที่"
bg-color="white"
2023-09-28 14:22:25 +07:00
>
<template v-slot:prepend>
2023-09-28 14:22:25 +07:00
<q-icon
name="event"
class="cursor-pointer"
style="color: var(--q-primary)"
>
</q-icon>
</template>
2023-09-25 10:46:48 +07:00
</q-input>
</template>
</datepicker>
</div>
</div>
</div>
2025-01-09 18:02:47 +07:00
<div class="col-12 row" style="display: none">
<div class="col-12 text-top2 row items-center">
<q-icon name="mdi-label" color="grey-4" class="q-pr-sm" />
ประธานกรรมการ
</div>
<div class="col-12 row q-col-gutter-md">
2023-09-28 14:22:25 +07:00
<q-select
:options="OPchairmanFn"
option-label="label"
2023-09-28 14:22:25 +07:00
class="col-xs-12 col-sm-8"
readonly
2023-09-28 14:22:25 +07:00
dense
borderless
2024-08-14 14:04:34 +07:00
outlined
2023-09-28 14:22:25 +07:00
v-model="chairman"
label="ประธานกรรมการ"
use-input
2024-10-25 15:57:17 +07:00
hide-dropdown-icon
2023-09-28 14:22:25 +07:00
behavior="menu"
bg-color="white"
2023-09-28 14:22:25 +07:00
>
<template v-slot:no-option>
<q-item>
<q-item-section class="text-grey">
ไมอม
</q-item-section>
</q-item>
</template>
</q-select>
</div>
</div>
</div>
</div>
<q-separator v-show="routeName == 'probationWorkAdd'" />
2023-09-28 14:22:25 +07:00
<div
v-show="routeName == 'probationWorkAdd'"
class="flex justify-end q-pa-sm q-gutter-sm"
>
<q-btn unelevated label="บันทึก" type="submit" color="public"
><q-tooltip>นทกขอม</q-tooltip></q-btn
>
</div>
<!-- @click="saveData(personalId)" -->
</div>
</div>
</q-form>
</template>
<style lang="scss" scoped>
.border_y {
border-left: 1px solid #d8d8d8;
border-right: 1px solid #d8d8d8;
2023-07-10 19:29:15 +07:00
}
.borderCheck {
border-bottom: 1px solid #d8d8d8;
}
.text-top2 {
font-weight: 500;
color: rgb(70, 68, 68);
}
.text-top0 {
font-weight: 600;
padding-bottom: 8px;
color: rgb(70, 68, 68);
}
.text-Hd {
font-weight: 600;
font-size: 1rem;
padding-bottom: 5px;
color: #02a998;
}
.bin {
align-items: center;
justify-content: center;
}
2023-08-09 12:09:46 +07:00
.q-item span {
white-space: normal;
display: -webkit-box;
// -webkit-line-clamp: 2;
2023-08-09 12:09:46 +07:00
-webkit-box-orient: vertical;
overflow: hidden;
text-overflow: ellipsis;
}
</style>