รวมไฟล์แก้งานงวด2

This commit is contained in:
Kittapath 2023-07-10 10:10:46 +07:00
parent 79889c9464
commit 2249097b07
89 changed files with 11287 additions and 7048 deletions

View file

@ -11,14 +11,16 @@
class="q-mr-sm"
@click="router.go(-1)"
/>
รายชอผสมครสอบรอบ {{ name }} ครงท {{ round }}/{{ year }}
รายชอผสมครสอบแขงข {{ name }} ครงท {{ round }}/{{ year }}
<q-space />
<q-btn class="bg-teal-1" icon="mdi-download" round color="primary" flat>
<q-tooltip>ดาวนโหลดไฟล</q-tooltip>
<q-menu>
<q-list style="min-width: 100px">
<q-item clickable v-close-popup @click="downloadExam()">
<q-item-section class="text-blue">งออกขอมลผทธสอบ</q-item-section>
<q-item-section class="text-blue"
>งออกขอมลผทธสอบ</q-item-section
>
</q-item>
<q-item clickable v-close-popup @click="downloadPassExam()">
<q-item-section class="text-primary"
@ -158,7 +160,10 @@ const columns = ref<QTableProps["columns"]>([
headerStyle: "font-size: 14px; min-width: 20px",
style: "font-size: 14px",
sort: (a: string, b: string) =>
a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
a.localeCompare(b, undefined, {
numeric: true,
sensitivity: "base",
}),
},
{
name: "profileID",
@ -187,7 +192,10 @@ const columns = ref<QTableProps["columns"]>([
headerStyle: "font-size: 14px",
style: "font-size: 14px",
sort: (a: string, b: string) =>
a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
a.localeCompare(b, undefined, {
numeric: true,
sensitivity: "base",
}),
},
{
name: "gender",
@ -198,7 +206,10 @@ const columns = ref<QTableProps["columns"]>([
headerStyle: "font-size: 14px",
style: "font-size: 14px",
sort: (a: string, b: string) =>
a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
a.localeCompare(b, undefined, {
numeric: true,
sensitivity: "base",
}),
},
{
name: "position_name",
@ -209,7 +220,10 @@ const columns = ref<QTableProps["columns"]>([
headerStyle: "font-size: 14px",
style: "font-size: 14px",
sort: (a: string, b: string) =>
a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
a.localeCompare(b, undefined, {
numeric: true,
sensitivity: "base",
}),
},
{
name: "university",
@ -220,7 +234,10 @@ const columns = ref<QTableProps["columns"]>([
headerStyle: "font-size: 14px",
style: "font-size: 14px",
sort: (a: string, b: string) =>
a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
a.localeCompare(b, undefined, {
numeric: true,
sensitivity: "base",
}),
},
{
name: "degree",
@ -231,7 +248,10 @@ const columns = ref<QTableProps["columns"]>([
headerStyle: "font-size: 14px",
style: "font-size: 14px",
sort: (a: string, b: string) =>
a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
a.localeCompare(b, undefined, {
numeric: true,
sensitivity: "base",
}),
},
{
name: "major",
@ -242,7 +262,10 @@ const columns = ref<QTableProps["columns"]>([
headerStyle: "font-size: 14px",
style: "font-size: 14px",
sort: (a: string, b: string) =>
a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
a.localeCompare(b, undefined, {
numeric: true,
sensitivity: "base",
}),
},
{
name: "certificateNo",
@ -253,7 +276,10 @@ const columns = ref<QTableProps["columns"]>([
headerStyle: "font-size: 14px",
style: "font-size: 14px",
sort: (a: string, b: string) =>
a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
a.localeCompare(b, undefined, {
numeric: true,
sensitivity: "base",
}),
},
{
name: "certificateIssueDate",
@ -264,7 +290,10 @@ const columns = ref<QTableProps["columns"]>([
headerStyle: "font-size: 14px",
style: "font-size: 14px",
sort: (a: string, b: string) =>
a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
a.localeCompare(b, undefined, {
numeric: true,
sensitivity: "base",
}),
},
{
name: "examAttribute",
@ -275,7 +304,10 @@ const columns = ref<QTableProps["columns"]>([
headerStyle: "font-size: 14px",
style: "font-size: 14px",
sort: (a: string, b: string) =>
a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
a.localeCompare(b, undefined, {
numeric: true,
sensitivity: "base",
}),
},
{
name: "examScore",
@ -286,18 +318,24 @@ const columns = ref<QTableProps["columns"]>([
headerStyle: "font-size: 14px",
style: "font-size: 14px",
sort: (a: string, b: string) =>
a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
a.localeCompare(b, undefined, {
numeric: true,
sensitivity: "base",
}),
},
{
name: "examResult",
align: "left",
label: "ผลการสอบ",
label: "ผลคะแนนสอบ",
sortable: true,
field: "examResult",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
sort: (a: string, b: string) =>
a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
a.localeCompare(b, undefined, {
numeric: true,
sensitivity: "base",
}),
},
{
name: "applyDate",
@ -308,7 +346,10 @@ const columns = ref<QTableProps["columns"]>([
headerStyle: "font-size: 14px",
style: "font-size: 14px",
sort: (a: string, b: string) =>
a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
a.localeCompare(b, undefined, {
numeric: true,
sensitivity: "base",
}),
},
]);
@ -392,22 +433,29 @@ const fetchData = async () => {
examResult: "",
})
.then((res) => {
var header = res.data.result.header;
let header = res.data.result.header;
let period = res.data.result.period;
count.value = header.count;
pass.value = header.pass;
notpass.value = header.notpass;
// period information
name.value = period.name;
round.value = period.order as string;
year.value =
period.year >= 2500 ? period.year : ((period.year + 543) as string);
const data = res.data.result.data;
let result: RecruitDetailResponse[] = [];
if (data.length > 0) {
data.map((r: RecruitDetailResponse) => {
r.personName = `${r.prefix}${r.fullName}`;
result.push(r);
});
let result: RecruitDetailResponse[] = [];
if (data.length > 0) {
data.map((r: RecruitDetailResponse) => {
r.personName = `${r.prefix}${r.fullName}`;
result.push(r);
});
}
rows.value = result;
}
rows.value = result;
name.value = result[0].exam_name as string;
round.value = result[0].exam_order as string;
year.value = result[0].score_year as string;
})
.catch((e) => {
messageError($q, e);

View file

@ -27,7 +27,7 @@
</div>
<div class="col-6 text-grey-7" v-if="prefix !== null">
คำนำหนนาม
คำนำหนนาม
</div>
<div class="col-6 text-black" v-if="prefix !== null">
{{ prefix }}
@ -81,10 +81,10 @@
</div>
<div class="col-6 text-grey-7" v-if="major !== null">
จำนวนครงทสมครสอบ
ครงทประกาศรสมคร
</div>
<div class="col-6 text-black" v-if="major !== null">
{{ examCount }}
{{ examOrder }}
</div>
<div class="col-6 text-grey-7" v-if="cert_issuedate !== null">
@ -111,7 +111,7 @@
>
<div class="col-12 row q-col-gutter-sm">
<div class="col-12 text-weight-bold row items-center">
ผลการสอบ
ผลคะแนนสอบ
<q-space />
<q-btn
color="primary"
@ -265,7 +265,7 @@ const scoreCFull = ref<string>("");
const scoreC = ref<string>("");
const scoreSumFull = ref<string>("");
const scoreSum = ref<string>("");
const examCount = ref<string>("");
const examOrder = ref<string>("");
const number = ref<string>("");
const score_expired = ref<string>("");
const mixin = useCounterMixin();
@ -286,32 +286,33 @@ const fetchData = async () => {
.get(config.API.getExamDetail(importId.value, examId.value))
.then((res) => {
let data = res.data.result;
profile_id.value = data.profileID;
examID.value = data.examID;
prefix.value = data.prefix;
fullname.value = data.fullName;
birthdate.value = data.dateOfBirth;
gender.value = data.gender;
degree.value = data.degree;
major.value = data.major;
university.value = data.university;
position_name.value = data.positionName;
cert_issuedate.value = data.certificateIssueDate;
examAttribute.value = data.examAttribute;
number.value = data.number;
examCount.value = data.examCount;
score_expired.value = data.scoreExpire;
if (data.scoreResult != null) {
scoreAFull.value = data.scoreResult.scoreAFull;
scoreA.value = data.scoreResult.scoreA;
scoreBFull.value = data.scoreResult.scoreBFull;
scoreB.value = data.scoreResult.scoreB;
scoreCFull.value = data.scoreResult.scoreCFull;
scoreC.value = data.scoreResult.scoreC;
scoreSumFull.value = data.scoreResult.scoreSumFull;
scoreSum.value = data.scoreResult.scoreSum;
examResultinscore.value = data.scoreResult.examResult;
if (data != null) {
profile_id.value = data.profileID;
examID.value = data.examID;
prefix.value = data.prefix;
fullname.value = data.fullName;
birthdate.value = data.dateOfBirth;
gender.value = data.gender;
degree.value = data.degree;
major.value = data.major;
university.value = data.university;
position_name.value = data.positionName;
cert_issuedate.value = data.certificateIssueDate;
examAttribute.value = data.examAttribute;
number.value = data.number;
examOrder.value = data.examOrder;
score_expired.value = data.scoreExpire;
if (data.scoreResult != null) {
scoreAFull.value = data.scoreResult.scoreAFull;
scoreA.value = data.scoreResult.scoreA;
scoreBFull.value = data.scoreResult.scoreBFull;
scoreB.value = data.scoreResult.scoreB;
scoreCFull.value = data.scoreResult.scoreCFull;
scoreC.value = data.scoreResult.scoreC;
scoreSumFull.value = data.scoreResult.scoreSumFull;
scoreSum.value = data.scoreResult.scoreSum;
examResultinscore.value = data.scoreResult.examResult;
}
}
})
.catch((e) => {

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,7 +1,7 @@
<!-- page:ดการรอบการสอบ สรรหา -->
<template>
<div class="toptitle text-dark col-12 row items-center">
อมสถการสมครสอบแขงข
สถสมครสอบแขงข
</div>
<q-card flat bordered class="col-12 q-mt-sm q-px-md q-py-sm">
<iframe

View file

@ -29,7 +29,7 @@
</q-item>
<q-item clickable v-close-popup @click="downloadPassResultExam()">
<q-item-section class="text-amber-9"
>งออกขอมลผดเลอกการได</q-item-section
>งออกขอมลผดเลอกคนการได</q-item-section
>
</q-item>
</q-list>
@ -291,7 +291,7 @@ const columns = ref<QTableProps["columns"]>([
{
name: "examResult",
align: "left",
label: "ผลการสอบ",
label: "ผลคะแนนสอบ",
sortable: true,
field: "examResult",
headerStyle: "font-size: 14px",
@ -372,7 +372,7 @@ const downloadPassResultExam = async () => {
.then((res) => {
var a = document.createElement("a");
a.href = URL.createObjectURL(res.data);
a.download = `รายชื่อคัดเลือกผู้พิการได้.xlsx`;
a.download = `รายชื่อคัดเลือกคนพิการได้.xlsx`;
// start download
a.click();
})

View file

@ -26,12 +26,16 @@
{{ profile_id }}
</div>
<div class="col-6 text-grey-7" v-if="prefix !== null">คำนำหน้านาม</div>
<div class="col-6 text-grey-7" v-if="prefix !== null">
คำนำหนาชอนาม
</div>
<div class="col-6 text-black" v-if="prefix !== null">
{{ prefix }}
</div>
<div class="col-6 text-grey-7" v-if="fullname !== null">ชื่อ-นามสกุล</div>
<div class="col-6 text-grey-7" v-if="fullname !== null">
-นามสก
</div>
<div class="col-6 text-black" v-if="fullname !== null">
{{ fullname }}
</div>
@ -55,26 +59,32 @@
{{ position_name }}
</div>
<div class="col-6 text-grey-7" v-if="university !== null">สถานศึกษา</div>
<div class="col-6 text-grey-7" v-if="university !== null">
สถานศกษา
</div>
<div class="col-6 text-black" v-if="university !== null">
{{ university }}
</div>
<div class="col-6 text-grey-7" v-if="degree !== null">วุฒิการศึกษา</div>
<div class="col-6 text-grey-7" v-if="degree !== null">
การศกษา
</div>
<div class="col-6 text-black" v-if="degree !== null">
{{ degree }}
</div>
<div class="col-6 text-grey-7" v-if="major !== null">สาขาวิชาเอก</div>
<div class="col-6 text-grey-7" v-if="major !== null">
สาขาวชาเอก
</div>
<div class="col-6 text-black" v-if="major !== null">
{{ major }}
</div>
<div class="col-6 text-grey-7" v-if="major !== null">
จำนวนครงทสมครสอบ
ครงทประกาศรสมคร
</div>
<div class="col-6 text-black" v-if="major !== null">
{{ examCount }}
{{ examOrder }}
</div>
<div class="col-6 text-grey-7" v-if="cert_issuedate !== null">
@ -101,7 +111,7 @@
>
<div class="col-12 row q-col-gutter-sm">
<div class="col-12 text-weight-bold row items-center">
ผลการสอบ
ผลคะแนนสอบ
<q-space />
<q-btn
color="primary"
@ -118,7 +128,11 @@
>ดาวนโหลดผลคะแนน</q-item-section
>
</q-item>
<q-item clickable v-close-popup @click="downloadCertificate()">
<q-item
clickable
v-close-popup
@click="downloadCertificate()"
>
<q-item-section class="text-blue"
>ดาวนโหลดเอกสารรบรอง</q-item-section
>
@ -138,12 +152,18 @@
</q-btn>
</div>
<div class="row items-center q-gutter-y-sm col-12">
<div class="col-xs-4 col-sm-5 text-weight-medium text-grey-7">ประเภท</div>
<div class="col-xs-3 col-sm-2 text-primary text-weight-bold">คะแนนเต</div>
<div class="col-xs-4 col-sm-5 text-weight-medium text-grey-7">
ประเภท
</div>
<div class="col-xs-3 col-sm-2 text-primary text-weight-bold">
คะแนนเต
</div>
<div class="col-xs-3 col-sm-2 text-primary text-weight-bold">
คะแนนทได
</div>
<div class="col-xs-2 col-sm-2 text-primary text-weight-bold"></div>
<div
class="col-xs-2 col-sm-2 text-primary text-weight-bold"
></div>
<div class="col-xs-4 col-sm-5 text-grey-7">ภาค </div>
<div class="col-xs-3 col-sm-2 q-pr-xs">
@ -181,10 +201,16 @@
</div>
<div class="col-xs-2 col-sm-2 q-pr-xs text-grey-7">คะแนน</div>
<div class="col-xs-4 col-sm-5 text-weight-bold q-pt-sm">ผลการสอบ</div>
<div class="col-xs-8 col-sm-6 q-pr-xs text-weight-bold text-subtitle1">
<div class="col-xs-4 col-sm-5 text-weight-bold q-pt-sm">
ผลการสอบ
</div>
<div
class="col-xs-8 col-sm-6 q-pr-xs text-weight-bold text-subtitle1"
>
<span
:class="examResultinscore != 'ผ่าน' ? 'text-red' : 'text-positive'"
:class="
examResultinscore != 'ผ่าน' ? 'text-red' : 'text-positive'
"
>{{ examResultinscore }}</span
>
</div>
@ -195,7 +221,7 @@
</div>
<div class="col-xs-6 col-sm-5 text-grey-7">
นหมดอายญชดเลอกการ
นหมดอายญชดเลอกคนการ
</div>
<div class="col-xs-6 col-sm-7 q-pr-xs">
{{ score_expired }}
@ -245,7 +271,7 @@ const scoreCFull = ref<string>("");
const scoreC = ref<string>("");
const scoreSumFull = ref<string>("");
const scoreSum = ref<string>("");
const examCount = ref<string>("");
const examOrder = ref<string>("");
const number = ref<string>("");
const score_expired = ref<string>("");
const attachments = ref<any>([
@ -268,8 +294,7 @@ const fetchData = async () => {
.get(config.API.getDisableExamDetail(importId.value, examId.value))
.then((res) => {
let data = res.data.result.data;
if (res.data.result != null) {
examCount.value = res.data.result.examCount;
if (data != null) {
profile_id.value = data.profileID;
examID.value = data.examID;
prefix.value = data.prefix;
@ -284,7 +309,7 @@ const fetchData = async () => {
examAttribute.value = data.examAttribute;
number.value = data.number;
console.log(data);
examCount.value = data.examCount;
examOrder.value = data.examOrder;
score_expired.value = data.scoreExpire;
if (data.scoreResult != null) {
scoreAFull.value = data.scoreResult.scoreAFull;
@ -331,9 +356,12 @@ const downloadScore = async () => {
const downloadCertificate = async () => {
loaderPage(true);
await http
.get(config.API.downloadDisableExamReport(importId.value, examId.value, 2), {
responseType: "blob",
})
.get(
config.API.downloadDisableExamReport(importId.value, examId.value, 2),
{
responseType: "blob",
}
)
.then((res) => {
var a = document.createElement("a");
a.href = URL.createObjectURL(res.data);

File diff suppressed because it is too large Load diff

View file

@ -1,4 +1,4 @@
<!-- page:ดการรอบการดเลอกการ สรรหา -->
<!-- page:ดการรอบดเลอกคนการ สรรหา -->
<template>
<div class="toptitle text-dark col-12 row items-center">
<q-btn
@ -12,7 +12,7 @@
@click="clickBack"
/>
{{
edit ? "แก้ไขข้อมูลการคัดเลือกผู้พิการ" : "เพิ่มข้อมูลการคัดเลือกผู้พิการ"
edit ? "แก้ไขข้อมูลการคัดเลือกคนพิการ" : "เพิ่มข้อมูลการคัดเลือกคนพิการ"
}}
</div>
<q-card flat bordered class="col-12">
@ -24,13 +24,12 @@
<q-input
outlined
v-model="name"
label="ชื่อรอบการคัดเลือกผู้พิการ/ชื่อประกาศ"
label="ชื่อรอบคัดเลือกคนพิการ/ชื่อประกาศ"
dense
lazy-rules
:rules="[
(val) =>
!!val ||
`${'กรุณากรอกชื่อรอบการคัดเลือกผู้พิการ/ชื่อประกาศ'}`,
!!val || `${'กรุณากรอกชื่อรอบคัดเลือกคนพิการ/ชื่อประกาศ'}`,
]"
></q-input>
</div>
@ -836,7 +835,7 @@ const addData = async () => {
.then(async (res) => {
const data = res.data.result;
id.value = data;
success($q, "บันทึกรอบการสอบผู้พิการสำเร็จ");
success($q, "บันทึกรอบการสอบคนพิการสำเร็จ");
await uploadImgData();
await uploadDocData();
clickBack();
@ -854,7 +853,7 @@ const editData = async (id: string) => {
await http
.put(config.API.editDisablePeriod(id), sendData())
.then(async () => {
success($q, "แก้ไขรอบการสอบผู้พิการสำเร็จ");
success($q, "แก้ไขรอบการสอบคนพิการสำเร็จ");
await uploadImgData();
await uploadDocData();
clickBack();

View file

@ -108,7 +108,7 @@ const columns = ref<QTableProps["columns"]>([
{
name: "name",
align: "left",
label: "ชื่อรอบการคัดเลือก",
label: "ชื่อรอบคัดเลือก",
sortable: true,
field: "name",
headerStyle: "font-size: 14px",

View file

@ -1,79 +1,88 @@
<!-- page:ดการรอบการสอบ สรรหา -->
<template>
<div class="toptitle text-dark col-12 row items-center">
ดการรอบคดเลอก
</div>
<q-card flat bordered class="col-12 q-mt-sm q-pt-sm q-pa-md">
<div>
<Table
style="max-height: 80vh"
:rows="examData"
:columns="columns"
:filter="filter"
:visible-columns="visibleColumns"
v-model:inputfilter="filter"
v-model:inputvisible="visibleColumns"
:pagination="initialPagination"
:nornmalData="true"
:add="clickAdd"
:paging="true"
:titleText="''"
>
<template #columns="props">
<q-tr :props="props" class="cursor-pointer">
<q-td
v-for="col in props.cols"
:key="col.name"
:props="props"
@click="clickEdit(props.row)"
>
<div v-if="col.name == 'no'" class="table_ellipsis2">
{{ props.rowIndex + 1 }}
</div>
<div v-else-if="col.name == 'yearly'" class="table_ellipsis2">
{{ col.value + 543 }}
</div>
<div
v-else-if="
col.name == 'dateRegister' ||
col.name == 'datePayment' ||
col.name == 'dateAnnouncement'
"
class="table_ellipsis2"
>
{{ dateThaiRange(col.value) }}
</div>
<div
v-else-if="col.name == 'announcementExam'"
class="table_ellipsis2"
>
{{ col.value ? "ข่าวการสอบ" : "ข่าวทั่วไป" }}
</div>
<div v-else-if="col.name == 'category'" class="table_ellipsis2">
{{ typeCategoryExam(col.value) }}
</div>
<div v-else class="table_ellipsis2">
{{ col.value }}
</div>
</q-td>
<q-td>
<q-btn
dense
size="12px"
flat
round
color="red"
@click="clickDelete(props.row.id)"
icon="mdi-delete"
>
<q-tooltip>ลบขอม</q-tooltip>
</q-btn>
</q-td>
</q-tr>
</template>
</Table>
</div>
</q-card>
<div class="toptitle text-dark col-12 row items-center">
ดการรอบคดเลอก
</div>
<q-card flat bordered class="col-12 q-mt-sm q-pt-sm q-pa-md">
<div>
<Table
style="max-height: 80vh"
:rows="examData"
:columns="columns"
:filter="filter"
:visible-columns="visibleColumns"
v-model:inputfilter="filter"
v-model:inputvisible="visibleColumns"
:pagination="initialPagination"
:nornmalData="true"
:add="clickAdd"
:paging="true"
:titleText="''"
>
<template #columns="props">
<q-tr :props="props" class="cursor-pointer">
<q-td
v-for="col in props.cols"
:key="col.name"
:props="props"
@click="clickEdit(props.row)"
>
<div
v-if="col.name == 'no'"
class="table_ellipsis2"
>
{{ props.rowIndex + 1 }}
</div>
<div
v-else-if="col.name == 'yearly'"
class="table_ellipsis2"
>
{{ col.value + 543 }}
</div>
<div
v-else-if="
col.name == 'dateRegister' ||
col.name == 'datePayment' ||
col.name == 'dateAnnouncement'
"
class="table_ellipsis2"
>
{{ dateThaiRange(col.value) }}
</div>
<div
v-else-if="col.name == 'announcementExam'"
class="table_ellipsis2"
>
{{ col.value ? "ข่าวการสอบ" : "ข่าวทั่วไป" }}
</div>
<div
v-else-if="col.name == 'category'"
class="table_ellipsis2"
>
{{ typeCategoryExam(col.value) }}
</div>
<div v-else class="table_ellipsis2">
{{ col.value }}
</div>
</q-td>
<q-td>
<q-btn
dense
size="12px"
flat
round
color="red"
@click="clickDelete(props.row.id)"
icon="mdi-delete"
>
<q-tooltip>ลบขอม</q-tooltip>
</q-btn>
</q-td>
</q-tr>
</template>
</Table>
</div>
</q-card>
</template>
<script setup lang="ts">
import type { QTableProps } from "quasar";
@ -81,14 +90,14 @@ import { onMounted, ref } from "vue";
import { useQuasar } from "quasar";
import { useCounterMixin } from "@/stores/mixin";
import type {
RequestPeriodExam,
RequestPosition,
RequestPayment,
RequestPeriodExam,
RequestPosition,
RequestPayment,
} from "@/modules/03_recruiting/interface/request/Period";
import type {
ResponsePeriodExam,
ResponsePosition,
ResponsePayment,
ResponsePeriodExam,
ResponsePosition,
ResponsePayment,
} from "@/modules/03_recruiting/interface/response/Period";
import type { Pagination } from "@/modules/03_recruiting/interface/index/Main";
import Table from "@/modules/03_recruiting/components/Table.vue";
@ -105,254 +114,248 @@ const router = useRouter();
const { date2Thai, success, typeCategoryExam, messageError } = mixin;
const filter = ref<string>(""); //search data table
const initialPagination = ref<Pagination>({
rowsPerPage: 0,
rowsPerPage: 0,
});
const examData = ref<ResponsePeriodExam[]>([]);
const visibleColumns = ref<String[]>([
"no",
"announcementExam",
"yearly",
"category",
"name",
"document",
"dateAnnouncement",
"dateRegister",
"datePayment",
"fee",
"no",
"announcementExam",
"yearly",
"category",
"name",
"document",
"dateAnnouncement",
"dateRegister",
"datePayment",
"fee",
]);
const columns = ref<QTableProps["columns"]>([
{
name: "no",
align: "center",
label: "ลำดับ",
sortable: true,
field: "no",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
sort: (a: string, b: string) =>
a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
},
{
name: "announcementExam",
align: "left",
label: "ประเภทการประกาศ",
sortable: true,
field: "announcementExam",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
sort: (a: string, b: string) =>
a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
},
{
name: "yearly",
align: "center",
label: "ปีงบประมาณ",
sortable: true,
field: "yearly",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
sort: (a: string, b: string) =>
a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
},
{
name: "category",
align: "left",
label: "สังกัด",
sortable: true,
field: "category",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
sort: (a: string, b: string) =>
a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
},
{
name: "name",
align: "left",
label: "รายการประกาศ",
sortable: true,
field: "name",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
sort: (a: string, b: string) =>
a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
},
{
name: "fee",
align: "right",
label: "ค่าธรรมเนียม",
sortable: true,
field: "fee",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
sort: (a: string, b: string) =>
a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
},
{
name: "dateAnnouncement",
align: "left",
label: "วันที่สมัคร",
sortable: true,
field: "dateAnnouncement",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
sort: (a: string, b: string) =>
a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
},
{
name: "dateRegister",
align: "left",
label: "วันที่ชำระเงิน",
sortable: true,
field: "dateRegister",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
sort: (a: string, b: string) =>
a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
},
{
name: "datePayment",
align: "left",
label: "วันที่ประกาศ",
sortable: true,
field: "datePayment",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
sort: (a: string, b: string) =>
a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }),
},
{
name: "no",
align: "center",
label: "ลำดับ",
sortable: true,
field: "no",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "announcementExam",
align: "left",
label: "ประเภทการประกาศ",
sortable: true,
field: "announcementExam",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "yearly",
align: "center",
label: "ปีงบประมาณ",
sortable: true,
field: "yearly",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "category",
align: "left",
label: "สังกัด",
sortable: true,
field: "category",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "name",
align: "left",
label: "รายการประกาศ",
sortable: true,
field: "name",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "fee",
align: "right",
label: "ค่าธรรมเนียม",
sortable: true,
field: "fee",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "dateAnnouncement",
align: "left",
label: "วันที่สมัคร",
sortable: true,
field: "dateAnnouncement",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "dateRegister",
align: "left",
label: "วันที่ชำระเงิน",
sortable: true,
field: "dateRegister",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
{
name: "datePayment",
align: "left",
label: "วันที่ประกาศ",
sortable: true,
field: "datePayment",
headerStyle: "font-size: 14px",
style: "font-size: 14px",
},
]);
onMounted(async () => {
loaderPage(false);
await fetchData();
loaderPage(false);
await fetchData();
});
const fetchData = async () => {
loaderPage(true);
await http
.get(config.API.periodExamType("all"))
.then((res) => {
const data = res.data.result;
let result: ResponsePeriodExam[] = [];
if (data.length > 0) {
data.map((r: RequestPeriodExam) => {
const positionData: ResponsePosition[] = [];
r.positionExam.map((r: RequestPosition) => {
positionData.push({
id: r.id,
position: {
id: r.positionId,
name: r.positionName,
},
type: {
id: r.typeId,
name: r.typeName,
},
highDegree: r.highDegree,
});
});
const bankData: ResponsePayment[] = [];
r.bankExam.map((r: RequestPayment) => {
bankData.push({
id: r.id,
accountNumber: r.accountNumber,
bankName: r.bankName,
accountName: r.accountName,
});
});
result.push({
id: r.id,
dateAnnounce:
r.announcementDate !== null ? new Date(r.announcementDate) : null,
announcementExam: r.announcementExam,
name: r.name,
checkDocument: r.checkDocument,
checkDisability: r.checkDisability,
round: r.round,
yearly: r.year,
fee: r.fee,
dateAnnouncement:
r.announcementStartDate !== null && r.announcementEndDate !== null
? [
new Date(r.announcementStartDate),
new Date(r.announcementEndDate),
]
: null,
dateExam: r.examDate !== null ? new Date(r.examDate) : null,
dateRegister:
r.registerStartDate !== null && r.registerEndDate !== null
? [new Date(r.registerStartDate), new Date(r.registerEndDate)]
: null,
datePayment:
r.paymentStartDate !== null && r.paymentEndDate !== null
? [new Date(r.paymentStartDate), new Date(r.paymentEndDate)]
: null,
organizationName: {
id: r.organizationId,
name: r.organizationName,
},
organizationShortName: {
id: r.organizationCodeId,
name: r.organizationCodeName,
},
positionExam: positionData,
pay: r.bankExam.length > 0 ? "payment2" : "payment1",
bankExam: bankData,
editor: r.detail,
note: r.note,
category: r.category,
});
});
}
examData.value = result;
})
.catch((e) => {
messageError($q, e);
})
.finally(() => {
loaderPage(false);
});
loaderPage(true);
await http
.get(config.API.periodExamType("all"))
.then((res) => {
const data = res.data.result;
let result: ResponsePeriodExam[] = [];
if (data.length > 0) {
data.map((r: RequestPeriodExam) => {
const positionData: ResponsePosition[] = [];
r.positionExam.map((r: RequestPosition) => {
positionData.push({
id: r.id,
position: {
id: r.positionId,
name: r.positionName,
},
type: {
id: r.typeId,
name: r.typeName,
},
highDegree: r.highDegree,
});
});
const bankData: ResponsePayment[] = [];
r.bankExam.map((r: RequestPayment) => {
bankData.push({
id: r.id,
accountNumber: r.accountNumber,
bankName: r.bankName,
accountName: r.accountName,
});
});
result.push({
id: r.id,
dateAnnounce:
r.announcementDate !== null
? new Date(r.announcementDate)
: null,
announcementExam: r.announcementExam,
name: r.name,
checkDocument: r.checkDocument,
checkDisability: r.checkDisability,
round: r.round,
yearly: r.year,
fee: r.fee,
dateAnnouncement:
r.announcementStartDate !== null &&
r.announcementEndDate !== null
? [
new Date(r.announcementStartDate),
new Date(r.announcementEndDate),
]
: null,
dateExam:
r.examDate !== null ? new Date(r.examDate) : null,
dateRegister:
r.registerStartDate !== null &&
r.registerEndDate !== null
? [
new Date(r.registerStartDate),
new Date(r.registerEndDate),
]
: null,
datePayment:
r.paymentStartDate !== null &&
r.paymentEndDate !== null
? [
new Date(r.paymentStartDate),
new Date(r.paymentEndDate),
]
: null,
organizationName: {
id: r.organizationId,
name: r.organizationName,
},
organizationShortName: {
id: r.organizationCodeId,
name: r.organizationCodeName,
},
positionExam: positionData,
pay: r.bankExam.length > 0 ? "payment2" : "payment1",
bankExam: bankData,
editor: r.detail,
note: r.note,
category: r.category,
});
});
}
examData.value = result;
})
.catch((e) => {
messageError($q, e);
})
.finally(() => {
loaderPage(false);
});
};
const clickEdit = (col: ResponsePeriodExam) => {
router.push(`/qualify/period/${col.id}`);
router.push(`/qualify/period/${col.id}`);
};
const clickDelete = (id: string) => {
$q.dialog({
title: "ยืนยันการลบข้อมูล",
message: "ต้องการลบข้อมูลนี้ใช่หรือไม่?",
cancel: {
flat: true,
color: "negative",
},
persistent: true,
})
.onOk(async () => {
await deleteData(id);
})
.onCancel(() => {})
.onDismiss(() => {});
$q.dialog({
title: "ยืนยันการลบข้อมูล",
message: "ต้องการลบข้อมูลนี้ใช่หรือไม่?",
cancel: {
flat: true,
color: "negative",
},
persistent: true,
})
.onOk(async () => {
await deleteData(id);
})
.onCancel(() => {})
.onDismiss(() => {});
};
const clickAdd = () => {
router.push({ name: "qualifyPeriodAdd" });
router.push({ name: "qualifyPeriodAdd" });
};
const deleteData = async (id: string) => {
loaderPage(true);
await http
.delete(config.API.periodExamId(id))
.then((res) => {
success($q, "ลบข้อมูลสำเร็จ");
})
.catch((e) => {
messageError($q, e);
})
.finally(async () => {
loaderPage(false);
await fetchData();
});
loaderPage(true);
await http
.delete(config.API.periodExamId(id))
.then((res) => {
success($q, "ลบข้อมูลสำเร็จ");
})
.catch((e) => {
messageError($q, e);
})
.finally(async () => {
loaderPage(false);
await fetchData();
});
};
/**
@ -360,13 +363,13 @@ const deleteData = async (id: string) => {
* @param val วงวนท
*/
const dateThaiRange = (val: [Date, Date]) => {
if (val === null) {
return "";
} else if (date2Thai(val[0], true) === date2Thai(val[1], true)) {
return `${date2Thai(val[0], true)}`;
} else {
return `${date2Thai(val[0], true)} - ${date2Thai(val[1], true)}`;
}
if (val === null) {
return "";
} else if (date2Thai(val[0], true) === date2Thai(val[1], true)) {
return `${date2Thai(val[0], true)}`;
} else {
return `${date2Thai(val[0], true)} - ${date2Thai(val[1], true)}`;
}
};
</script>

View file

@ -11,7 +11,7 @@
class="q-mr-sm"
@click="clickBack"
/>
{{ edit ? `แก้ไข${nameRaw}` : "เพิ่มระยะเวลาการคัดเลือก" }}
{{ edit ? `แก้ไขรอบคัดเลือก` : "เพิ่มรอบคัดเลือก" }}
{{
edit && announcementExam
? `ครั้งที่ ${roundRaw}/${yearlyRaw == null ? "" : yearlyRaw + 543}`
@ -21,27 +21,26 @@
<q-card flat bordered class="col-12 q-my-sm q-pt-sm">
<q-form ref="myForm">
<q-card-section class="q-pa-md">
<div class="col-xs-12 col-sm-8 items-top q-pb-md" v-if="!edit">
<div class="col-xs-12 col-sm-8 items-top q-pb-md">
<q-toggle
v-model="announcementExam"
:false-value="true"
:true-value="false"
color="primary"
dense
class="text-weight-medium text-dark"
label="ประกาศข่าวทั่วไป"
v-if="!edit"
/>
</div>
<div class="col-12 row items-top q-col-gutter-x-sm">
<div class="col-xs-12 col-sm-6 col-sm-8">
<div class="col-xs-12 col-sm-6 col-sm-5">
<q-input
outlined
v-model="name"
label="ชื่อรอบการคัดเลือก/ชื่อประกาศ"
label="ชื่อรอบคัดเลือก/ชื่อประกาศ"
dense
lazy-rules
:rules="[
(val) => !!val || `${'กรุณากรอกชื่อรอบการคัดเลือก/ชื่อประกาศ'}`,
(val) => !!val || `${'กรุณากรอกชื่อรอบคัดเลือก/ชื่อประกาศ'}`,
]"
></q-input>
</div>
@ -70,7 +69,7 @@
]"
></q-input>
</div>
<div class="col-xs-12 col-sm-4 col-md-2" v-if="announcementExam">
<div class="col-xs-12 col-sm-4 col-md-1" v-if="announcementExam">
<datepicker
menu-class-name="modalfix"
v-model="yearly"
@ -105,7 +104,45 @@
</template>
</datepicker>
</div>
<div class="col-xs-12 col-sm-3 col-md-4">
<div class="col-xs-12 col-sm-3 col-md-3" v-if="announcementExam">
<datepicker
menu-class-name="modalfix"
v-model="dateExam"
:locale="'th'"
autoApply
borderless
:enableTimePicker="false"
week-start="0"
>
<template #year="{ year }">
{{ year + 543 }}
</template>
<template #year-overlay-value="{ value }">
{{ parseInt(value + 543) }}
</template>
<template #trigger>
<q-input
outlined
dense
class="full-width datepicker q-mb-md"
:model-value="dateExam != null ? date2Thai(dateExam) : null"
:label="`${'วันที่สอบ'}`"
clearable
@clear="clearDateExam"
>
<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-sm-3 col-md-3">
<datepicker
menu-class-name="modalfix"
v-model="dateAnnouncement"
@ -126,7 +163,7 @@
<q-input
outlined
dense
class="full-width datepicker "
class="full-width datepicker q-mb-md"
:model-value="dateThaiRange(dateAnnouncement)"
:label="`${'วันที่ประกาศ'}`"
:rules="[(val) => !!val || `${'กรุณาเลือกวันที่ประกาศ'}`]"
@ -143,7 +180,7 @@
</template>
</datepicker>
</div>
<div class="col-xs-12 col-sm-3 col-md-4" v-if="announcementExam">
<div class="col-xs-12 col-sm-3 col-md-3" v-if="announcementExam">
<datepicker
menu-class-name="modalfix"
v-model="dateRegister"
@ -165,7 +202,7 @@
<q-input
outlined
dense
class="full-width datepicker "
class="full-width datepicker q-mb-md"
:model-value="dateThaiRange(dateRegister)"
:label="`${'วันที่สมัคร'}`"
clearable
@ -183,7 +220,7 @@
</template>
</datepicker>
</div>
<div class="col-xs-12 col-sm-3 col-md-4" v-if="announcementExam">
<div class="col-xs-12 col-sm-3 col-md-3" v-if="announcementExam">
<datepicker
menu-class-name="modalfix"
v-model="datePayment"
@ -204,7 +241,7 @@
<q-input
outlined
dense
class="full-width datepicker "
class="full-width datepicker q-mb-md"
:model-value="dateThaiRange(datePayment)"
:label="`${'วันที่ชำระเงิน'}`"
clearable
@ -222,7 +259,7 @@
</template>
</datepicker>
</div>
<div class="col-xs-12 col-sm-2 col-md-2" v-if="announcementExam">
<div class="col-xs-12 col-sm-3 col-md-3" v-if="announcementExam">
<datepicker
menu-class-name="modalfix"
v-model="dateAnnounce"
@ -242,7 +279,7 @@
<q-input
outlined
dense
class="full-width datepicker "
class="full-width datepicker q-mb-md"
:model-value="
dateAnnounce != null ? date2Thai(dateAnnounce) : null
"
@ -262,45 +299,7 @@
</template>
</datepicker>
</div>
<div class="col-xs-12 col-sm-2 col-md-2" v-if="announcementExam">
<datepicker
menu-class-name="modalfix"
v-model="dateExam"
:locale="'th'"
autoApply
borderless
:enableTimePicker="false"
week-start="0"
>
<template #year="{ year }">
{{ year + 543 }}
</template>
<template #year-overlay-value="{ value }">
{{ parseInt(value + 543) }}
</template>
<template #trigger>
<q-input
outlined
dense
class="full-width datepicker "
:model-value="dateExam != null ? date2Thai(dateExam) : null"
:label="`${'วันที่สอบ'}`"
clearable
@clear="clearDateExam"
>
<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-sm-6 col-md-6">
<!-- <div class="col-xs-12 col-sm-3 col-md-3">
<selector
outlined
v-model="category"
@ -315,42 +314,44 @@
lazy-rules
:rules="[(val:any) => !!val || `${'กรุณาเลือกสังกัด'}`]"
></selector>
</div>
<div class="col-xs-12 col-sm-4 col-md-2" v-if="announcementExam">
<selector
outlined
v-model="organizationShortName"
:options="governmentCodeOption"
label="รหัสส่วนราชการ"
clearable
option-value="id"
option-label="name"
dense
lazy-rules
:rules="[(val:any) => !!val || `${'กรุณาเลือกรหัสส่วนราชการ'}`]"
@update:model-value="(value:any) => selectGovernmentCode(value)"
></selector>
</div>
<div class="col-xs-12 col-sm-6 col-md-6" v-if="announcementExam">
<selector
outlined
v-model="organizationName"
:options="organizationNameOptions"
label="หน่วยงาน"
clearable
option-value="id"
option-label="name"
dense
lazy-rules
:rules="[(val:any) => !!val || `${'กรุณาเลือกหน่วยงาน'}`]"
@update:model-value="(value:any) => selectOrganization(value)"
></selector>
</div>
<div class="col-12 q-mb-sm">
<q-separator size="5px" color="grey-2" />
</div>
<div class="col-12 row" v-if="announcementExam">
<q-form ref="myFormPosition" class="col-12">
</div> -->
<div class="col-12" v-if="announcementExam">
<div class="row q-col-gutter-x-sm">
<div class="col-xs-12 col-sm-6 col-md-6">
<selector
outlined
v-model="organizationShortName"
:options="governmentCodeOption"
label="รหัสส่วนราชการ"
clearable
option-value="id"
option-label="name"
dense
lazy-rules
:rules="[(val:any) => !!val || `${'กรุณาเลือกรหัสส่วนราชการ'}`]"
@update:model-value="(value:any) => selectGovernmentCode(value)"
></selector>
</div>
<div class="col-xs-12 col-sm-6 col-md-6">
<selector
outlined
v-model="organizationName"
:options="organizationNameOptions"
label="หน่วยงาน"
clearable
option-value="id"
option-label="name"
dense
lazy-rules
:rules="[(val:any) => !!val || `${'กรุณาเลือกหน่วยงาน'}`]"
@update:model-value="(value:any) => selectOrganization(value)"
></selector>
</div>
</div>
<div class="col-12 q-mb-sm">
<q-separator size="5px" color="grey-2" />
</div>
<q-form ref="myFormPosition">
<ProfileTable
:rows="rowsPosition"
:columns="columnsPosition"
@ -472,7 +473,7 @@
<div class="text-bold text-subtitle2 q-pb-md">
เลอกวการชำระเง
</div>
<div class="row col-12 q-gutter-y-md ">
<div class="row col-12 q-gutter-y-md q-mb-md">
<q-list dense bordered class="col-12 rounded-borders">
<q-item tag="label" v-ripple class="q-pa-md">
<q-radio
@ -1415,7 +1416,7 @@ const addData = async () => {
.then(async (res) => {
const data = res.data.result;
id.value = data;
success($q, "บันทึกรอบการคัดเลือกสำเร็จ");
success($q, "บันทึกรอบคัดเลือกสำเร็จ");
await uploadImgData();
await uploadDocData();
await clickBack();
@ -1433,7 +1434,7 @@ const editData = async (id: string) => {
await http
.put(config.API.periodExamId(id), sendData())
.then(async (res) => {
success($q, "แก้ไขรอบการคัดเลือกสำเร็จ");
success($q, "แก้ไขรอบคัดเลือกสำเร็จ");
await uploadImgData();
await uploadDocData();
await clickBack();

View file

@ -34,13 +34,13 @@
<q-slide-transition>
<q-card class="row col-12 q-mb-sm" v-show="visible">
<div class="col-12 row">
<div class="q-pb-md q-pt-sm row col-12 no-wrap">
<div class="q-py-md row col-12 no-wrap">
<!-- การดแสดงจำนวนขอม -->
<div class="col-12 row q-px-md ">
<div class="row items-center col-12 q-gutter-sm q-pb-sm">
<div class="text-weight-medium">สรปจำนวนผสมครคดเลอก</div>
<div class="col-12 row">
<div class="text-grey-7 row text-weight-medium col-12 q-pl-md">
สรปจำนวนผสมครคดเลอก
<datepicker
class="col-xs-12 col-sm-5 col-md-4"
class="q-pl-sm"
v-model="dateFilter"
:locale="'th'"
autoApply
@ -58,9 +58,9 @@
<q-input
class="full-width inputgreen cursor-pointer"
hide-bottom-space
outlined
dense
prefix="วันที่"
borderless
label="วันที่"
lazy-rules
:model-value="dateThaiRange(dateFilter)"
>
@ -75,10 +75,8 @@
</q-input>
</template>
</datepicker>
<q-space />
<q-btn
size="md"
dense
icon="mdi-download"
round
flat
@ -112,7 +110,7 @@
<q-tooltip>ดาวนโหลดรายชอผสอบแขงขนได</q-tooltip>
</q-btn>
</div>
<div class="row col-12 q-col-gutter-md">
<div class="row col-12 q-col-gutter-md fit q-pa-md">
<div
style="width: 25%"
v-for="(num, index) in dataNum"
@ -253,7 +251,7 @@
</TableCandidate>
</q-card>
<q-dialog v-model="modal" persistent>
<q-card style="min-width: 550px">
<q-card style="min-width: 600px">
<q-card-section class="row items-center q-py-sm">
<div class="text-bold">ตรประจำตวผสอบ</div>
<q-space />

View file

@ -455,8 +455,8 @@
lazy-rules
:readonly="!editvisible"
:borderless="!editvisible"
:rules="[(val) => !!val || `${'กรุณากรอก ื่อ'}`]"
label="ื่อ"
:rules="[(val) => !!val || `${'กรุณากรอก ื่อ'}`]"
label="ื่อ"
/>
<q-input
v-model="inputLink"
@ -493,55 +493,60 @@
<q-space />
<q-btn
v-if="!editvisible"
unelevated
label="ลบข้อมูล"
flat
round
:disabled="editvisible"
:color="editvisible ? 'grey-7' : 'red'"
@click="saveDelete()"
><!-- icon="mdi-delete-outline"
<q-tooltip>ลบขอม</q-tooltip> -->
icon="mdi-delete-outline"
>
<q-tooltip>ลบขอม</q-tooltip>
</q-btn>
<q-btn
v-if="!editvisible"
label="แก้ไขข้อมูล"
outline
flat
round
:disabled="editvisible"
:color="editvisible ? 'grey-7' : 'primary'"
@click="editDialog()"
><!-- icon="mdi-pencil-outline"
<q-tooltip>แกไขขอม</q-tooltip> -->
icon="mdi-pencil-outline"
>
<q-tooltip>แกไขขอม</q-tooltip>
</q-btn>
<div v-else>
<q-btn
flat
label="ยกเลิกแก้ไข"
round
:disabled="!editvisible"
:outline="!editvisible"
:color="!editvisible ? 'grey-7' : 'red'"
@click="editDialog()"
><!-- icon="mdi-undo"
<q-tooltip>ยกเล</q-tooltip> -->
icon="mdi-undo"
>
<q-tooltip>ยกเล</q-tooltip>
</q-btn>
<q-btn
unelevated
label="บันทึก"
flat
round
:disabled="!editvisible"
:color="!editvisible ? 'grey-7' : 'public'"
@click="saveEdit"
><!-- icon="mdi-content-save-outline"
<q-tooltip>นท</q-tooltip> -->
icon="mdi-content-save-outline"
>
<q-tooltip>นท</q-tooltip>
</q-btn>
</div>
</q-card-actions>
<q-card-actions class="text-primary q-py-sm" v-else>
<q-space />
<q-btn
unelevated
label="บันทึก"
flat
round
color="public"
@click="saveAdd"
><!-- icon="mdi-content-save-outline"
<q-tooltip>นท</q-tooltip> -->
icon="mdi-content-save-outline"
>
<q-tooltip>นท</q-tooltip>
</q-btn>
</q-card-actions>
</q-card>