พัฒนาบุคลากร

This commit is contained in:
STW_TTTY\stwtt 2024-08-05 16:33:05 +07:00
parent 7aa9782b7a
commit 1d1490a49b
12 changed files with 480 additions and 141 deletions

View file

@ -19,7 +19,9 @@ const mixin = useCounterMixin();
const { dialogConfirm, showLoader, hideLoader, messageError, success } = mixin;
const projectId = ref<string>(route.params.id.toLocaleString());
const checkRoutePermission = ref<boolean>(
route.name == "developmentDetailPage"
);
const formData = reactive<FormBasicinfo>({
year: new Date().getFullYear(),
projectName: "",
@ -147,7 +149,7 @@ onMounted(async () => {
<div class="col-12 row no-wrap">
<div class="col-12 q-py-sm q-px-sm q-gutter-sm">
<div class="text-subtitle2 text-bold">หนวยงาน/วนราชการ</div>
<q-input dense outlined v-model="filter" label="ค้นหา">
<q-input :readonly="checkRoutePermission" dense outlined v-model="filter" label="ค้นหา">
<template v-slot:append>
<q-icon
v-if="filter !== ''"
@ -168,10 +170,12 @@ onMounted(async () => {
:filter="filter"
no-results-label="ไม่พบข้อมูลที่ค้นหา"
no-nodes-label="ไม่มีข้อมูล"
:style="checkRoutePermission ? 'pointer-events: none !important;':''"
>
<template v-slot:default-header="prop">
<q-item
clickable
:disable="checkRoutePermission"
@click.stop="updateSelected(prop.node)"
:active="formData.nodeId === prop.node.orgTreeId"
active-class="my-list-link text-primary text-weight-medium"
@ -212,6 +216,7 @@ onMounted(async () => {
autoApply
year-picker
:enableTimePicker="false"
:readonly="checkRoutePermission"
>
<template #year="{ year }">{{ year + 543 }}</template>
<template #year-overlay-value="{ value }">{{
@ -220,6 +225,7 @@ onMounted(async () => {
<template #trigger>
<q-input
dense
:readonly="checkRoutePermission"
lazy-rules
outlined
class="inputgreen"
@ -244,6 +250,7 @@ onMounted(async () => {
outlined
class="inputgreen"
dense
:readonly="checkRoutePermission"
v-model="formData.projectName"
label="ชื่อโครงการ/กิจกรรม/หลักสูตร"
rows="6"
@ -260,6 +267,7 @@ onMounted(async () => {
outlined
class="inputgreen"
dense
:readonly="checkRoutePermission"
v-model="formData.reason"
label="หลักการและเหตุผล"
rows="6"
@ -272,6 +280,7 @@ onMounted(async () => {
outlined
class="inputgreen"
dense
:readonly="checkRoutePermission"
v-model="formData.objective"
label="วัตถุประสงค์"
rows="6"
@ -285,8 +294,8 @@ onMounted(async () => {
</div>
</q-card>
<q-separator />
<div class="text-right q-pa-sm">
<q-separator v-if="!checkRoutePermission"/>
<div class="text-right q-pa-sm" v-if="!checkRoutePermission">
<q-btn
unelevated
label="บันทึก"

View file

@ -51,7 +51,9 @@ const {
} = useCounterMixin();
const route = useRoute();
const projectId = ref<string>(route.params.id.toLocaleString());
const checkRoutePermission = ref<boolean>(
route.name == "developmentDetailPage"
);
/** หัวตาราง */
const rows = ref<DevelopmentEvaluations[]>([]); //
const columns = ref<QTableProps["columns"]>([
@ -283,6 +285,7 @@ onMounted(() => {
<div class="text-weight-medium bg-grey-1 q-py-sm q-px-md">
วชดความสำเร
<q-btn
v-if="!checkRoutePermission"
dense
flat
round
@ -310,18 +313,17 @@ onMounted(() => {
>
<template v-slot:header="props">
<q-tr :props="props">
<q-th auto-width />
<q-th auto-width />
<q-th v-for="col in props.cols" :key="col.name" :props="props">
<span class="text-weight-medium">{{ col.label }}</span>
</q-th>
</q-tr>
</template>
<template v-slot:body="props">
<q-tr :props="props" class="cursor-pointer">
<q-tr :props="props">
<q-td>
<q-btn
v-if="!checkRoutePermission"
dense
flat
round
@ -330,10 +332,9 @@ onMounted(() => {
@click="onClickAddIndicator(true, props.row)"
>
<q-tooltip>แกไขตวชดความสำเร</q-tooltip>
</q-btn></q-td
>
<q-td>
</q-btn>
<q-btn
v-if="!checkRoutePermission"
dense
flat
round
@ -344,12 +345,12 @@ onMounted(() => {
<q-tooltip>ลบ</q-tooltip>
</q-btn>
</q-td>
<q-td v-for="col in props.cols" :key="col.name" :props="props">
<div>
{{ col.value ? col.value : "-" }}
</div>
</q-td>
</q-tr>
</template>
</d-table>
@ -366,6 +367,7 @@ onMounted(() => {
<div class="row q-pa-md q-col-gutter-sm">
<div class="col-12 col-sm-6 col-md-4">
<q-select
:readonly="checkRoutePermission"
dense
outlined
label="ประเภทโครงการ"
@ -383,12 +385,14 @@ onMounted(() => {
<div class="row" v-if="formProject.project == 'OFFER'">
<div class="col-12">
<q-checkbox
:disable="checkRoutePermission"
v-model="formProject.isPassAllocate"
label="ผ่านการพิจาณา ได้รับการจัดสรรงบประมาณตามข้อบัญญัติ"
/>
</div>
<div class="col-12">
<q-checkbox
:disable="checkRoutePermission"
v-model="formProject.isPassNoAllocate"
label="ผ่านการพิจารณา ไม่ได้รับการจัดสรรงบประมาณตามข้อบัญญัติ แต่ได้รับการจัดสรรเงินนอกงบประมาณ"
/>
@ -396,6 +400,7 @@ onMounted(() => {
<div class="col-12">
<q-checkbox
:disable="checkRoutePermission"
v-model="formProject.isNoPass"
label="ไม่ผ่านการพิจารณา แต่ได้รับการจัดสรรเงินนอกงบประมาณ"
/>
@ -404,12 +409,14 @@ onMounted(() => {
<div class="row" v-else>
<div class="col-12">
<q-checkbox
:disable="checkRoutePermission"
v-model="formProject.isBudget"
label="แต่ได้รับการจัดสรรงบประมาณตามข้อบัญญัติ"
/>
</div>
<div class="col-12">
<q-checkbox
:disable="checkRoutePermission"
v-model="formProject.isOutBudget"
label="แต่ได้รับการจัดสรรเงินนอกงบประมาณ"
/>
@ -417,9 +424,10 @@ onMounted(() => {
</div>
</div>
</div>
<q-separator />
<q-separator v-if="!checkRoutePermission" />
<q-card-actions align="right">
<q-btn
v-if="!checkRoutePermission"
unelevated
label="บันทึก"
id="onSubmit"
@ -441,7 +449,7 @@ onMounted(() => {
:close="closeDialog"
/>
<q-separator />
<q-card-section >
<q-card-section>
<div class="row q-col-gutter-sm">
<div class="col-12">
<q-input
@ -479,7 +487,6 @@ onMounted(() => {
/>
</div>
<div class="col-6">
<q-input
dense

View file

@ -25,6 +25,7 @@ const store = useDevelopmentDataStore();
const { success, showLoader, hideLoader, messageError, dialogConfirm } =
useCounterMixin();
const checkRoutePermission = ref<boolean>(route.name == 'developmentDetailPage')
const title = ref<string>(route.params.id ? "แก้ไข" : "เพิ่ม");
const projectId = ref<string>(route.params.id.toLocaleString());
const tab = ref<string>("BasicInfo");
@ -90,10 +91,11 @@ onMounted(() => {
color="primary"
@click="router.push('/development')"
/>
{{ `${title}โครงการ/หลักสูตรการฝึกอบรม` }}
{{ checkRoutePermission ? 'รายละเอียดโครงการ/หลักสูตรการฝึกอบรม':`${title}โครงการ/หลักสูตรการฝึกอบรม` }}
<q-space />
<div v-if="!checkRoutePermission"></div>
<q-btn
v-if="status === 'ONGOING'"
v-if="status === 'ONGOING' && !checkRoutePermission"
unelevated
label="เสร็จสิ้นโครงการ"
color="green"
@ -101,7 +103,7 @@ onMounted(() => {
>
<q-tooltip>เสรจสนโครงการ</q-tooltip>
</q-btn>
<q-badge v-else outline color="primary" class="q-px-sm q-py-xs"
<q-badge v-else-if="status !== 'ONGOING' || !checkRoutePermission" outline color="primary" class="q-px-sm q-py-xs"
>เสรจสนโครงการ</q-badge
>
</div>
@ -131,9 +133,13 @@ onMounted(() => {
<BasicInfo />
</q-tab-panel>
<q-tab-panel name="Target"> <Target /></q-tab-panel>
<q-tab-panel name="ProjectDetail" style="padding: 0px"> <ProjectDetail /> </q-tab-panel>
<q-tab-panel name="ProjectDetail" style="padding: 0px">
<ProjectDetail />
</q-tab-panel>
<q-tab-panel name="FollowResult"> <FollowResult /> </q-tab-panel>
<q-tab-panel name="Other" style="padding: 0px"> <Other :status="status"/> </q-tab-panel>
<q-tab-panel name="Other" style="padding: 0px">
<Other :status="status" />
</q-tab-panel>
<!-- <q-tab-panel name="Record"> <Record /> </q-tab-panel> -->
</q-tab-panels>
</div>

View file

@ -22,8 +22,10 @@ const {
} = useCounterMixin();
const route = useRoute();
const projectId = ref<string>(route.params.id.toLocaleString());
const status = defineModel<string>('status',{required:true})
const checkRoutePermission = ref<boolean>(
route.name == "developmentDetailPage"
);
const status = defineModel<string>("status", { required: true });
const provinceOp = ref<DataOption[]>([]);
const provinceOpMain = ref<DataOption[]>([]);
const budgetOp = ref<DataOption[]>([
@ -262,6 +264,7 @@ onMounted(() => {
v-model="formData.dateStart"
:locale="'th'"
autoApply
:readonly="checkRoutePermission"
:enableTimePicker="false"
week-start="0"
@update:model-value="changeDateStart()"
@ -274,6 +277,7 @@ onMounted(() => {
<q-input
class="inputgreen"
dense
:readonly="checkRoutePermission"
outlined
:model-value="
formData.dateStart ? date2Thai(formData.dateStart) : null
@ -297,6 +301,7 @@ onMounted(() => {
menu-class-name="modalfix"
v-model="formData.dateEnd"
:locale="'th'"
:readonly="checkRoutePermission"
autoApply
:enableTimePicker="false"
week-start="0"
@ -310,6 +315,7 @@ onMounted(() => {
<template #trigger>
<q-input
dense
:readonly="checkRoutePermission"
outlined
class="inputgreen"
:model-value="
@ -332,6 +338,7 @@ onMounted(() => {
<div class="col-12 col-sm-6 col-md-3">
<q-input
dense
:readonly="checkRoutePermission"
outlined
class="inputgreen"
label="รวมระยะเวลา (วัน)"
@ -344,6 +351,7 @@ onMounted(() => {
<div class="col-12 q-mt-md">
<span class="text-weight-medium text-body1">สถานทดำเนนการ</span>
<q-btn
v-if="!checkRoutePermission"
dense
flat
round
@ -358,6 +366,7 @@ onMounted(() => {
<div class="row q-col-gutter-sm">
<div class="col-8">
<q-input
:readonly="checkRoutePermission"
outlined
dense
class="inputgreen"
@ -367,6 +376,7 @@ onMounted(() => {
</div>
<div class="col-3">
<q-select
:readonly="checkRoutePermission"
outlined
dense
v-model="formData.developmentAddresss[index].provinceId"
@ -394,7 +404,7 @@ onMounted(() => {
</div>
<div class="col-1 text-center">
<q-btn
v-if="index !== 0"
v-if="index !== 0 && !checkRoutePermission"
dense
flat
round
@ -413,6 +423,7 @@ onMounted(() => {
</div>
<div class="col-4">
<q-select
:readonly="checkRoutePermission"
outlined
dense
v-model="formData.budget"
@ -430,6 +441,7 @@ onMounted(() => {
v-if="formData.budget === 'OUTSIDEBUDGET'"
outlined
dense
:readonly="checkRoutePermission"
v-model="formData.budgetSub"
label="ประเภทย่อย"
:options="budgetSubOp"
@ -445,6 +457,7 @@ onMounted(() => {
<div class="col-3">
<q-input
outlined
:readonly="checkRoutePermission"
dense
class="inputgreen"
v-model="formData.accept"
@ -456,6 +469,7 @@ onMounted(() => {
<div class="col-3">
<q-input
outlined
:readonly="checkRoutePermission"
dense
class="inputgreen"
v-model="formData.receive"
@ -467,6 +481,7 @@ onMounted(() => {
<div class="col-3">
<q-input
outlined
:readonly="checkRoutePermission"
dense
class="inputgreen"
v-model="formData.approved"
@ -479,6 +494,7 @@ onMounted(() => {
<div class="col-3" v-if="status == 'FINISH'">
<q-input
outlined
:readonly="checkRoutePermission"
dense
class="inputgreen"
v-model="formData.budgetPay"
@ -496,6 +512,7 @@ onMounted(() => {
<div class="col-12">
<q-input
outlined
:readonly="checkRoutePermission"
dense
class="inputgreen"
v-model="formData.issues"
@ -508,6 +525,7 @@ onMounted(() => {
outlined
dense
class="inputgreen"
:readonly="checkRoutePermission"
v-model="formData.chance"
label="โอกาสที่จะเกิด"
:options="[1, 2, 3, 4]"
@ -516,6 +534,7 @@ onMounted(() => {
</div>
<div class="col-3">
<q-select
:readonly="checkRoutePermission"
outlined
dense
class="inputgreen"
@ -539,6 +558,7 @@ onMounted(() => {
<div class="col-12">
<q-input
outlined
:readonly="checkRoutePermission"
dense
class="inputgreen"
v-model="formData.riskManagement"
@ -554,6 +574,7 @@ onMounted(() => {
<div class="col-12">
<q-input
outlined
:readonly="checkRoutePermission"
dense
class="inputgreen"
v-model="formData.expect"
@ -568,6 +589,7 @@ onMounted(() => {
<q-input
outlined
dense
:readonly="checkRoutePermission"
class="inputgreen"
v-model="formData.topicAcademic"
label="หัวข้อ/ประเด็นการฝึกอบรม ศึกษาดูงาน"
@ -577,6 +599,7 @@ onMounted(() => {
<q-input
outlined
dense
:readonly="checkRoutePermission"
class="inputgreen"
v-model="formData.addressAcademic"
label="สถานที่ฝึกอบรม ศึกษาดูงาน"
@ -588,6 +611,7 @@ onMounted(() => {
dense
v-model="formData.provinceActualId"
label="จังหวัด"
:readonly="checkRoutePermission"
:options="provinceOp"
option-label="name"
option-value="id"
@ -607,8 +631,8 @@ onMounted(() => {
>
</div>
</div>
<q-separator />
<div class="text-right q-pa-sm">
<q-separator v-if="!checkRoutePermission"/>
<div class="text-right q-pa-sm" v-if="!checkRoutePermission">
<q-btn
unelevated
label="บันทึก"

View file

@ -49,7 +49,9 @@ const route = useRoute();
const projectId = ref<string>(route.params.id.toLocaleString());
const { showLoader, hideLoader, dialogConfirm, messageError, success } =
useCounterMixin();
const checkRoutePermission = ref<boolean>(
route.name == "developmentDetailPage"
);
const projectTypeOp = ref<String[]>([
"โครงการตามยุทธศาสตร์",
"โครงการตามภารกิจประจำของหน่วยงาน",
@ -187,13 +189,15 @@ function fetchData() {
formData.projectDayBackPlanned = data.projectDayBackPlanned;
formData.projectDayHoldPlanned = data.projectDayHoldPlanned;
formData.projectNigthHoldPlanned = data.projectNigthHoldPlanned;
formData.developmentProjectTechniquePlanneds = data.developmentProjectTechniquePlanneds;
formData.developmentProjectTechniquePlanneds =
data.developmentProjectTechniquePlanneds;
formData.isBackActual = data.isBackActual;
formData.isHoldActual = data.isHoldActual;
formData.projectDayBackActual = data.projectDayBackActual;
formData.projectDayHoldActual = data.projectDayHoldActual;
formData.projectNigthHoldActual = data.projectNigthHoldActual;
formData.developmentProjectTechniqueActuals = data.developmentProjectTechniqueActuals;
formData.developmentProjectTechniqueActuals =
data.developmentProjectTechniqueActuals;
formData.projectModalPlanned = data.projectModalPlanned;
formData.projectModalActual = data.projectModalActual;
@ -335,6 +339,7 @@ onMounted(() => {
<div class="row q-pa-sm">
<div class="col-12">
<q-select
:readonly="checkRoutePermission"
dense
outlined
v-model="formData.developmentProjectTypes"
@ -370,6 +375,7 @@ onMounted(() => {
<q-card-section class="q-pa-sm">
<q-input
:readonly="checkRoutePermission"
dense
outlined
v-model="filter"
@ -396,6 +402,7 @@ onMounted(() => {
:no-results-label="notFound"
:no-nodes-label="noData"
v-model:expanded="expanded"
:style="checkRoutePermission ? 'pointer-events: none;' : ''"
>
<template v-slot:default-header="prop">
<q-item
@ -429,6 +436,7 @@ onMounted(() => {
<q-card-section class="q-pa-sm">
<q-input
:readonly="checkRoutePermission"
dense
outlined
v-model="filter2"
@ -454,6 +462,7 @@ onMounted(() => {
:no-results-label="notFound"
:no-nodes-label="noData"
v-model:expanded="expanded2"
:style="checkRoutePermission ? 'pointer-events: none;' : ''"
>
<template v-slot:default-header="prop">
<q-item
@ -493,7 +502,9 @@ onMounted(() => {
<div class="row col-12 q-col-gutter-sm">
<div class="col-12 col-md-3">
<q-checkbox
:disable="store.projectStatus === 'FINISH'"
:disable="
store.projectStatus === 'FINISH' || checkRoutePermission
"
keep-color
color="primary"
dense
@ -504,7 +515,9 @@ onMounted(() => {
</div>
<div class="col-12 col-md-4">
<q-input
:readonly="store.projectStatus === 'FINISH'"
:readonly="
store.projectStatus === 'FINISH' || checkRoutePermission
"
dense
outlined
v-model="formData.projectDayBackPlanned"
@ -518,7 +531,9 @@ onMounted(() => {
<div class="row col-12 q-col-gutter-sm">
<div class="col-12 col-md-3">
<q-checkbox
:disable="store.projectStatus === 'FINISH'"
:disable="
store.projectStatus === 'FINISH' || checkRoutePermission
"
keep-color
color="primary"
dense
@ -529,7 +544,9 @@ onMounted(() => {
</div>
<div class="col-12 col-md-4">
<q-input
:readonly="store.projectStatus === 'FINISH'"
:readonly="
store.projectStatus === 'FINISH' || checkRoutePermission
"
dense
outlined
v-model="formData.projectDayHoldPlanned"
@ -541,7 +558,9 @@ onMounted(() => {
</div>
<div class="col-12 col-md-4">
<q-input
:readonly="store.projectStatus === 'FINISH'"
:readonly="
store.projectStatus === 'FINISH' || checkRoutePermission
"
dense
outlined
v-model="formData.projectNigthHoldPlanned"
@ -565,7 +584,9 @@ onMounted(() => {
>
<q-option-group
class="check_box q-mt-sm"
:disable="store.projectStatus === 'FINISH'"
:disable="
store.projectStatus === 'FINISH' || checkRoutePermission
"
keep-color
color="primary"
dense
@ -579,7 +600,10 @@ onMounted(() => {
<q-input
v-model="reasonPlanned70"
dense
:disable="store.projectStatus === 'FINISH'"
:readonly="
store.projectStatus === 'FINISH' ||
checkRoutePermission
"
outlined
class="inputgreen"
label="กรุณาระบุ"
@ -594,7 +618,9 @@ onMounted(() => {
>
<q-option-group
class="check_box q-mt-sm"
:disable="store.projectStatus === 'FINISH'"
:disable="
store.projectStatus === 'FINISH' || checkRoutePermission
"
keep-color
color="primary"
dense
@ -608,7 +634,10 @@ onMounted(() => {
<q-input
v-model="reasonPlanned20"
dense
:disable="store.projectStatus === 'FINISH'"
:readonly="
store.projectStatus === 'FINISH' ||
checkRoutePermission
"
outlined
class="inputgreen"
label="กรุณาระบุ"
@ -623,7 +652,9 @@ onMounted(() => {
>
<q-option-group
class="check_box q-mt-sm"
:disable="store.projectStatus === 'FINISH'"
:disable="
store.projectStatus === 'FINISH' || checkRoutePermission
"
keep-color
color="primary"
dense
@ -637,7 +668,10 @@ onMounted(() => {
<q-input
v-model="reasonPlanned10"
dense
:disable="store.projectStatus === 'FINISH'"
:readonly="
store.projectStatus === 'FINISH' ||
checkRoutePermission
"
outlined
class="inputgreen"
label="กรุณาระบุ"
@ -650,7 +684,9 @@ onMounted(() => {
</div>
<div class="col-12 col-sm-6 col-md-4">
<q-input
:disable="store.projectStatus === 'FINISH'"
:readonly="
store.projectStatus === 'FINISH' || checkRoutePermission
"
dense
outlined
v-model="formData.projectModalPlanned"
@ -670,6 +706,7 @@ onMounted(() => {
<div class="row col-12 q-col-gutter-sm">
<div class="col-md-3">
<q-checkbox
:disable="checkRoutePermission"
keep-color
color="primary"
dense
@ -680,6 +717,7 @@ onMounted(() => {
</div>
<div class="col-12 col-md-4">
<q-input
:readonly="checkRoutePermission"
class="inputgreen"
dense
outlined
@ -693,6 +731,7 @@ onMounted(() => {
<div class="row col-12 q-col-gutter-sm">
<div class="col-12 col-md-3">
<q-checkbox
:disable="checkRoutePermission"
keep-color
color="primary"
dense
@ -703,6 +742,7 @@ onMounted(() => {
</div>
<div class="col-12 col-md-4">
<q-input
:readonly="checkRoutePermission"
class="inputgreen"
dense
outlined
@ -714,6 +754,7 @@ onMounted(() => {
</div>
<div class="col-12 col-md-4">
<q-input
:readonly="checkRoutePermission"
class="inputgreen"
dense
outlined
@ -733,6 +774,7 @@ onMounted(() => {
<q-option-group
class="check_box q-mt-sm"
keep-color
:disable="checkRoutePermission"
color="primary"
dense
v-model="formData.developmentProjectTechniqueActuals"
@ -743,6 +785,7 @@ onMounted(() => {
<div class="offset-4 col-8 q-mt-sm relative-position">
<div class="other_custom_input">
<q-input
:readonly="checkRoutePermission"
v-model="reasonActual70"
dense
outlined
@ -761,6 +804,7 @@ onMounted(() => {
class="check_box q-mt-sm"
keep-color
color="primary"
:disable="checkRoutePermission"
dense
v-model="formData.developmentProjectTechniqueActuals"
:options="projectTechniquesOp2"
@ -770,6 +814,7 @@ onMounted(() => {
<div class="offset-4 col-8 q-mt-sm relative-position">
<div class="other_custom_input">
<q-input
:readonly="checkRoutePermission"
v-model="reasonActual20"
dense
outlined
@ -787,6 +832,7 @@ onMounted(() => {
<q-option-group
class="check_box q-mt-sm"
keep-color
:disable="checkRoutePermission"
color="primary"
dense
v-model="formData.developmentProjectTechniqueActuals"
@ -799,6 +845,7 @@ onMounted(() => {
<q-input
v-model="reasonActual10"
dense
:readonly="checkRoutePermission"
outlined
class="inputgreen"
label="กรุณาระบุ"
@ -813,6 +860,7 @@ onMounted(() => {
<q-input
dense
class="inputgreen"
:readonly="checkRoutePermission"
outlined
v-model="formData.projectModalActual"
label="จำนวน (รุ่น)"
@ -826,9 +874,9 @@ onMounted(() => {
</q-card-section>
</q-card>
</div>
<q-separator />
<q-separator v-if="!checkRoutePermission" />
<div class="text-right q-pa-sm">
<div class="text-right q-pa-sm" v-if="!checkRoutePermission">
<q-btn
unelevated
label="บันทึก"

View file

@ -21,14 +21,15 @@ import type {
import DialogHeader from "@/components/DialogHeader.vue";
import { useCounterMixin } from "@/stores/mixin";
const store = useDevelopmentDataStore();
const route = useRoute();
const projectId = ref<string>(route.params.id.toLocaleString());
const $q = useQuasar();
const mixin = useCounterMixin();
const { showLoader, hideLoader, messageError, success, dialogConfirm } = mixin;
const checkRoutePermission = ref<boolean>(
route.name == "developmentDetailPage"
);
const plannedGoals = ref<ResPlannedGoals[]>([]);
const plannedPeoples = ref<ResPeople[]>([]);
const actualGoals = ref<ResActualGoals[]>([]);
@ -482,7 +483,7 @@ onMounted(() => {
<div class="text-weight-medium bg-grey-1 q-py-sm q-px-md">
เปาหมายตามแผน
<q-btn
v-if="store.projectStatus !== 'FINISH'"
v-if="store.projectStatus !== 'FINISH' && !checkRoutePermission"
flat
round
dense
@ -542,10 +543,12 @@ onMounted(() => {
</q-tr>
</template>
<template v-slot:body="props">
<q-tr :props="props" class="cursor-pointer vertical-top">
<q-tr :props="props" class="vertical-top">
<q-td>
<q-btn
v-if="store.projectStatus !== 'FINISH'"
v-if="
store.projectStatus !== 'FINISH' && !checkRoutePermission
"
round
flat
color="primary"
@ -618,10 +621,12 @@ onMounted(() => {
</q-tr>
</template>
<template v-slot:body="props">
<q-tr :props="props" class="cursor-pointer">
<q-tr :props="props">
<q-td>
<q-btn
v-if="store.projectStatus !== 'FINISH'"
v-if="
store.projectStatus !== 'FINISH' && !checkRoutePermission
"
round
flat
color="primary"
@ -662,7 +667,14 @@ onMounted(() => {
>
<div class="text-weight-medium bg-grey-1 q-py-sm q-px-md">
เปาหมายตามจร
<q-btn flat round dense icon="add" color="primary">
<q-btn
v-if="!checkRoutePermission"
flat
round
dense
icon="add"
color="primary"
>
<q-menu>
<q-list style="min-width: 100px">
<q-item
@ -702,39 +714,17 @@ onMounted(() => {
>
<template v-slot:header="props">
<q-tr :props="props">
<q-th auto-width />
<q-th v-for="col in props.cols" :key="col.name" :props="props">
<span class="text-weight-medium">{{ col.label }}</span>
</q-th>
<q-th auto-width />
</q-tr>
</template>
<template v-slot:body="props">
<q-tr :props="props" class="cursor-pointer">
<q-td v-for="col in props.cols" :key="col.name" :props="props">
<div v-if="col.name === 'posTypeActualId'">
<div v-if="props.row.groupTarget !== 'OUTSIDERS'">
{{ `- ${props.row.position}`
}}{{
props.row.posType !== null || props.row.posLevel !== null
? ` (${props.row.posType ? props.row.posType : ""}${
props.row.posLevel ? " " + props.row.posLevel : ""
})`
: ""
}}
</div>
<div v-else>
{{ props.row.type ? props.row.type : "-" }}
</div>
</div>
<div v-else class="table_ellipsis">
{{ col.value ? col.value : "-" }}
</div>
<div v-else class="table_ellipsis">
{{ col.value ? col.value : "-" }}
</div>
</q-td>
<q-tr :props="props">
<q-td>
<q-btn
v-if="!checkRoutePermission"
round
flat
color="primary"
@ -759,6 +749,29 @@ onMounted(() => {
<q-tooltip>แกไขขอม</q-tooltip></q-btn
>
</q-td>
<q-td v-for="col in props.cols" :key="col.name" :props="props">
<div v-if="col.name === 'posTypeActualId'">
<div v-if="props.row.groupTarget !== 'OUTSIDERS'">
{{ `- ${props.row.position}`
}}{{
props.row.posType !== null || props.row.posLevel !== null
? ` (${props.row.posType ? props.row.posType : ""}${
props.row.posLevel ? " " + props.row.posLevel : ""
})`
: ""
}}
</div>
<div v-else>
{{ props.row.type ? props.row.type : "-" }}
</div>
</div>
<div v-else class="table_ellipsis">
{{ col.value ? col.value : "-" }}
</div>
<div v-else class="table_ellipsis">
{{ col.value ? col.value : "-" }}
</div>
</q-td>
</q-tr>
</template>
</d-table>
@ -779,21 +792,17 @@ onMounted(() => {
>
<template v-slot:header="props">
<q-tr :props="props">
<q-th auto-width />
<q-th v-for="col in props.cols" :key="col.name" :props="props">
<span class="text-weight-medium">{{ col.label }}</span>
</q-th>
<q-th auto-width />
</q-tr>
</template>
<template v-slot:body="props">
<q-tr :props="props" class="cursor-pointer">
<q-td v-for="col in props.cols" :key="col.name" :props="props">
<div class="table_ellipsis">
{{ col.value ? col.value : "-" }}
</div>
</q-td>
<q-tr :props="props">
<q-td>
<q-btn
v-if="!checkRoutePermission"
round
flat
color="primary"
@ -813,6 +822,11 @@ onMounted(() => {
<q-tooltip>แกไขขอม</q-tooltip></q-btn
>
</q-td>
<q-td v-for="col in props.cols" :key="col.name" :props="props">
<div class="table_ellipsis">
{{ col.value ? col.value : "-" }}
</div>
</q-td>
</q-tr>
</template>
</d-table>

View file

@ -19,6 +19,9 @@ const fileBackReceived = ref<string>("");
const $q = useQuasar();
const router = useRouter();
const route = useRoute();
const checkRouteDetail = ref<boolean>(
route.name == "developmentScholarshipidDetail"
);
const {
dialogConfirm,
showLoader,
@ -526,7 +529,11 @@ onMounted(() => {
color="primary"
@click="router.go(-1)"
/>
{{ `${title}ข้าราชการ ฯ ที่ได้รับทุนการศึกษา/ฝึกอบรม` }}
{{
checkRouteDetail
? "รายละเอียดข้าราชการ ฯ ที่ได้รับทุนการศึกษา/ฝึกอบรม"
: `${title}ข้าราชการ ฯ ที่ได้รับทุนการศึกษา/ฝึกอบรม`
}}
</div>
<q-space />
<q-btn
@ -543,12 +550,14 @@ onMounted(() => {
<div class="row q-ml-md" v-if="scholarshipId">
<div class="q-gutter-sm" v-if="isStatus === 'PENDING'">
<q-btn
v-if="!checkRouteDetail"
unelevated
color="green"
label="เรียนจบ"
@click="onClickUpdateStatus('GRADUATE')"
/>
<q-btn
v-if="!checkRouteDetail"
unelevated
color="red"
label="เรียนไม่จบ"
@ -561,13 +570,14 @@ onMounted(() => {
</div>
</div>
<q-form greedy @submit.prevent @validation-success="onSubmit">
<q-card flat bordered class="col-12">
<q-card flat bordered class="col-12">
<q-form greedy @submit.prevent @validation-success="onSubmit">
<div class="q-pa-md">
<q-card bordered tyle="border: 1px solid #d6dee1">
<div class="text-weight-medium bg-grey-1 q-py-sm q-px-md">
อมลราชการ
<q-btn
v-if="!checkRouteDetail"
flat
dense
icon="add"
@ -626,6 +636,7 @@ onMounted(() => {
<div class="row q-col-gutter-md q-pa-md" v-if="isGov">
<div class="col-9">
<q-select
:readonly="checkRouteDetail"
dense
outlined
hide-bottom-space
@ -653,6 +664,7 @@ onMounted(() => {
"
>
<q-select
:readonly="checkRouteDetail"
dense
outlined
hide-bottom-space
@ -674,6 +686,7 @@ onMounted(() => {
<div v-if="formBody.scholarshipType !== 'RESEARCH'" class="col-12">
<q-radio
:disable="checkRouteDetail"
v-model="formBody.planType"
checked-icon="task_alt"
unchecked-icon="panorama_fish_eye"
@ -682,6 +695,7 @@ onMounted(() => {
dense
/>
<q-radio
:disable="checkRouteDetail"
v-model="formBody.planType"
checked-icon="task_alt"
unchecked-icon="panorama_fish_eye"
@ -701,6 +715,7 @@ onMounted(() => {
autoApply
year-picker
:enableTimePicker="false"
:readonly="checkRouteDetail"
>
<template #year="{ year }">{{ year + 543 }}</template>
<template #year-overlay-value="{ value }">{{
@ -708,6 +723,7 @@ onMounted(() => {
}}</template>
<template #trigger>
<q-input
:readonly="checkRouteDetail"
dense
outlined
class="inputgreen"
@ -740,6 +756,7 @@ onMounted(() => {
</div>
<div v-if="formBody.scholarshipType !== 'RESEARCH'" class="col-3">
<q-select
:readonly="checkRouteDetail"
dense
outlined
class="inputgreen"
@ -759,6 +776,7 @@ onMounted(() => {
</div>
<div class="col-3">
<q-input
:readonly="checkRouteDetail"
dense
outlined
hide-bottom-space
@ -779,6 +797,7 @@ onMounted(() => {
</div>
<div class="col-3">
<q-checkbox
:disable="checkRouteDetail"
keep-color
color="primary"
v-model="formBody.isNoUseBudget"
@ -790,6 +809,7 @@ onMounted(() => {
<div class="row col-12 q-col-gutter-md">
<div class="col-3">
<q-input
:readonly="checkRouteDetail"
dense
outlined
class="inputgreen"
@ -809,6 +829,7 @@ onMounted(() => {
:locale="'th'"
autoApply
:enableTimePicker="false"
:readonly="checkRouteDetail"
>
<template #year="{ year }">{{ year + 543 }}</template>
<template #year-overlay-value="{ value }">{{
@ -816,6 +837,7 @@ onMounted(() => {
}}</template>
<template #trigger>
<q-input
:readonly="checkRouteDetail"
dense
outlined
class="inputgreen"
@ -847,6 +869,7 @@ onMounted(() => {
v-model="formBody.bookApproveDate"
:locale="'th'"
autoApply
:readonly="checkRouteDetail"
:enableTimePicker="false"
>
<template #year="{ year }">{{ year + 543 }}</template>
@ -856,6 +879,7 @@ onMounted(() => {
<template #trigger>
<q-input
dense
:readonly="checkRouteDetail"
outlined
class="inputgreen"
:model-value="
@ -884,6 +908,7 @@ onMounted(() => {
</div>
<div v-if="formBody.scholarshipType !== 'RESEARCH'" class="col-3">
<q-checkbox
:disable="checkRouteDetail"
keep-color
color="primary"
v-model="formBody.useOfficialTime"
@ -894,6 +919,7 @@ onMounted(() => {
<div v-if="formBody.scholarshipType !== 'RESEARCH'" class="col-12">
<q-input
:readonly="checkRouteDetail"
outlined
dense
class="inputgreen"
@ -913,6 +939,7 @@ onMounted(() => {
<div class="row col-12 q-col-gutter-md">
<div class="col-3">
<q-input
:readonly="checkRouteDetail"
dense
outlined
lazy-rules
@ -933,6 +960,7 @@ onMounted(() => {
:locale="'th'"
autoApply
:enableTimePicker="false"
:readonly="checkRouteDetail"
>
<template #year="{ year }">{{ year + 543 }}</template>
<template #year-overlay-value="{ value }">{{
@ -941,6 +969,7 @@ onMounted(() => {
<template #trigger>
<q-input
dense
:readonly="checkRouteDetail"
outlined
class="inputgreen"
:model-value="
@ -970,6 +999,7 @@ onMounted(() => {
<div v-if="formBody.scholarshipType !== 'RESEARCH'" class="col-3">
<q-input
dense
:readonly="checkRouteDetail"
outlined
hide-bottom-space
lazy-rules
@ -988,6 +1018,7 @@ onMounted(() => {
:locale="'th'"
autoApply
:enableTimePicker="false"
:readonly="checkRouteDetail"
>
<template #year="{ year }">{{ year + 543 }}</template>
<template #year-overlay-value="{ value }">{{
@ -995,6 +1026,7 @@ onMounted(() => {
}}</template>
<template #trigger>
<q-input
:readonly="checkRouteDetail"
dense
outlined
class="inputgreen"
@ -1029,6 +1061,7 @@ onMounted(() => {
:locale="'th'"
autoApply
:enableTimePicker="false"
:readonly="checkRouteDetail"
>
<template #year="{ year }">{{ year + 543 }}</template>
<template #year-overlay-value="{ value }">{{
@ -1036,6 +1069,7 @@ onMounted(() => {
}}</template>
<template #trigger>
<q-input
:readonly="checkRouteDetail"
dense
outlined
class="inputgreen"
@ -1068,6 +1102,7 @@ onMounted(() => {
<div class="text-weight-medium bg-grey-1 q-py-sm q-px-md">
อมลผำประก
<q-btn
v-if="!checkRouteDetail"
flat
dense
icon="add"
@ -1128,6 +1163,7 @@ onMounted(() => {
<div class="row q-col-gutter-md">
<div class="col-3">
<q-input
:readonly="checkRouteDetail"
dense
outlined
lazy-rules
@ -1143,6 +1179,7 @@ onMounted(() => {
</div>
<div class="col-3">
<q-input
:readonly="checkRouteDetail"
dense
outlined
lazy-rules
@ -1158,6 +1195,7 @@ onMounted(() => {
</div>
<div class="col-3">
<q-input
:readonly="checkRouteDetail"
dense
outlined
lazy-rules
@ -1174,6 +1212,7 @@ onMounted(() => {
<div class="col-3">
<q-input
dense
:readonly="checkRouteDetail"
outlined
lazy-rules
hide-bottom-space
@ -1189,6 +1228,7 @@ onMounted(() => {
<div class="col-6">
<q-input
dense
:readonly="checkRouteDetail"
outlined
lazy-rules
hide-bottom-space
@ -1209,6 +1249,7 @@ onMounted(() => {
autoApply
:enableTimePicker="false"
week-start="0"
:readonly="checkRouteDetail"
@update:model-value="changeStartDate('startDate')"
>
<template #year="{ year }">{{ year + 543 }}</template>
@ -1218,6 +1259,7 @@ onMounted(() => {
<template #trigger>
<q-input
dense
:readonly="checkRouteDetail"
outlined
class="inputgreen"
:model-value="
@ -1253,6 +1295,7 @@ onMounted(() => {
:enableTimePicker="false"
week-start="0"
:min-date="formBody.startDate"
:readonly="checkRouteDetail"
>
<template #year="{ year }">{{ year + 543 }}</template>
<template #year-overlay-value="{ value }">{{
@ -1261,6 +1304,7 @@ onMounted(() => {
<template #trigger>
<q-input
dense
:readonly="checkRouteDetail"
outlined
class="inputgreen"
:model-value="
@ -1289,6 +1333,7 @@ onMounted(() => {
<q-input
dense
outlined
:readonly="checkRouteDetail"
lazy-rules
hide-bottom-space
label="สถานที่ไปศึกษาดูงาน"
@ -1304,6 +1349,7 @@ onMounted(() => {
<q-input
dense
outlined
:readonly="checkRouteDetail"
lazy-rules
hide-bottom-space
label="หัวข้อการไปศึกษาดูงาน"
@ -1322,6 +1368,7 @@ onMounted(() => {
:locale="'th'"
autoApply
:enableTimePicker="false"
:readonly="checkRouteDetail"
week-start="0"
@update:model-value="changeStartDate('studyStartDate')"
>
@ -1333,6 +1380,7 @@ onMounted(() => {
<q-input
dense
outlined
:readonly="checkRouteDetail"
class="inputgreen"
:model-value="
formBody.studyStartDate
@ -1363,6 +1411,7 @@ onMounted(() => {
menu-class-name="modalfix"
v-model="formBody.studyEndDate"
:locale="'th'"
:readonly="checkRouteDetail"
autoApply
:enableTimePicker="false"
week-start="0"
@ -1376,6 +1425,7 @@ onMounted(() => {
<q-input
dense
outlined
:readonly="checkRouteDetail"
class="inputgreen"
:model-value="
formBody.studyEndDate
@ -1405,6 +1455,7 @@ onMounted(() => {
<div class="col-6">
<q-input
dense
:readonly="checkRouteDetail"
outlined
lazy-rules
hide-bottom-space
@ -1420,6 +1471,7 @@ onMounted(() => {
<div class="col-6">
<q-input
dense
:readonly="checkRouteDetail"
outlined
lazy-rules
hide-bottom-space
@ -1440,6 +1492,7 @@ onMounted(() => {
autoApply
:enableTimePicker="false"
week-start="0"
:readonly="checkRouteDetail"
@update:model-value="
changeStartDate('studyAbroadStartDate')
"
@ -1453,6 +1506,7 @@ onMounted(() => {
dense
outlined
class="inputgreen"
:readonly="checkRouteDetail"
:model-value="
formBody.studyAbroadStartDate
? date2Thai(formBody.studyAbroadStartDate)
@ -1484,6 +1538,7 @@ onMounted(() => {
:locale="'th'"
autoApply
:enableTimePicker="false"
:readonly="checkRouteDetail"
week-start="0"
:min-date="formBody.studyAbroadStartDate"
@update:model-value="
@ -1501,6 +1556,7 @@ onMounted(() => {
<q-input
dense
outlined
:readonly="checkRouteDetail"
class="inputgreen"
:model-value="
formBody.studyAbroadEndDate
@ -1530,6 +1586,7 @@ onMounted(() => {
<q-input
dense
outlined
:readonly="checkRouteDetail"
lazy-rules
hide-bottom-space
label="รวมระยะเวลาในการศึกษา"
@ -1554,6 +1611,7 @@ onMounted(() => {
<q-input
dense
outlined
:readonly="checkRouteDetail"
lazy-rules
hide-bottom-space
label="หลักสูตรการฝึกอบรม"
@ -1570,6 +1628,7 @@ onMounted(() => {
dense
outlined
lazy-rules
:readonly="checkRouteDetail"
hide-bottom-space
label="สาขา"
class="inputgreen"
@ -1584,6 +1643,7 @@ onMounted(() => {
<q-input
dense
outlined
:readonly="checkRouteDetail"
lazy-rules
hide-bottom-space
label="สถาบันการศึกษา/หน่วยงานผู้จัดการฝึกอบรม"
@ -1603,6 +1663,7 @@ onMounted(() => {
autoApply
:enableTimePicker="false"
week-start="0"
:readonly="checkRouteDetail"
@update:model-value="changeStartDate('startDate')"
>
<template #year="{ year }">{{ year + 543 }}</template>
@ -1613,6 +1674,7 @@ onMounted(() => {
<q-input
dense
outlined
:readonly="checkRouteDetail"
class="inputgreen"
:model-value="
formBody.startDate
@ -1643,6 +1705,7 @@ onMounted(() => {
menu-class-name="modalfix"
v-model="formBody.endDate"
:locale="'th'"
:readonly="checkRouteDetail"
autoApply
:enableTimePicker="false"
week-start="0"
@ -1656,6 +1719,7 @@ onMounted(() => {
<q-input
dense
outlined
:readonly="checkRouteDetail"
class="inputgreen"
:model-value="
formBody.endDate ? date2Thai(formBody.endDate) : null
@ -1684,6 +1748,7 @@ onMounted(() => {
dense
outlined
lazy-rules
:readonly="checkRouteDetail"
hide-bottom-space
label="สถานที่ไปศึกษาดูงาน"
class="inputgreen"
@ -1698,6 +1763,7 @@ onMounted(() => {
<q-input
dense
outlined
:readonly="checkRouteDetail"
lazy-rules
hide-bottom-space
label="หัวข้อการไปศึกษาดูงาน"
@ -1714,6 +1780,7 @@ onMounted(() => {
menu-class-name="modalfix"
v-model="formBody.studyStartDate"
:locale="'th'"
:readonly="checkRouteDetail"
autoApply
:enableTimePicker="false"
week-start="0"
@ -1726,6 +1793,7 @@ onMounted(() => {
<template #trigger>
<q-input
dense
:readonly="checkRouteDetail"
outlined
class="inputgreen"
:model-value="
@ -1758,6 +1826,7 @@ onMounted(() => {
v-model="formBody.studyEndDate"
:locale="'th'"
autoApply
:readonly="checkRouteDetail"
:enableTimePicker="false"
week-start="0"
:min-date="formBody.studyStartDate"
@ -1775,6 +1844,7 @@ onMounted(() => {
<template #trigger>
<q-input
dense
:readonly="checkRouteDetail"
outlined
class="inputgreen"
:model-value="
@ -1806,6 +1876,7 @@ onMounted(() => {
dense
outlined
lazy-rules
:readonly="checkRouteDetail"
hide-bottom-space
label="รวมระยะเวลาในการฝึกอบรม"
class="inputgreen"
@ -1829,6 +1900,7 @@ onMounted(() => {
<q-input
dense
outlined
:readonly="checkRouteDetail"
lazy-rules
hide-bottom-space
label="หลักสูตรการฝึกอบรม"
@ -1845,6 +1917,7 @@ onMounted(() => {
dense
outlined
lazy-rules
:readonly="checkRouteDetail"
hide-bottom-space
label="สาขา"
class="inputgreen"
@ -1860,6 +1933,7 @@ onMounted(() => {
dense
outlined
lazy-rules
:readonly="checkRouteDetail"
hide-bottom-space
label="สถาบันการศึกษา/หน่วยงานผู้จัดการฝึกอบรม"
class="inputgreen"
@ -1875,6 +1949,7 @@ onMounted(() => {
menu-class-name="modalfix"
v-model="formBody.startDate"
:locale="'th'"
:readonly="checkRouteDetail"
autoApply
:enableTimePicker="false"
week-start="0"
@ -1888,6 +1963,7 @@ onMounted(() => {
<q-input
dense
outlined
:readonly="checkRouteDetail"
class="inputgreen"
:model-value="
formBody.startDate
@ -1919,6 +1995,7 @@ onMounted(() => {
v-model="formBody.endDate"
:locale="'th'"
autoApply
:readonly="checkRouteDetail"
:enableTimePicker="false"
week-start="0"
:min-date="formBody.startDate"
@ -1930,6 +2007,7 @@ onMounted(() => {
<template #trigger>
<q-input
dense
:readonly="checkRouteDetail"
outlined
class="inputgreen"
:model-value="
@ -1958,6 +2036,7 @@ onMounted(() => {
<q-input
dense
outlined
:readonly="checkRouteDetail"
lazy-rules
hide-bottom-space
label="สถานที่ไปศึกษาดูงานในประเทศ"
@ -1974,6 +2053,7 @@ onMounted(() => {
dense
outlined
lazy-rules
:readonly="checkRouteDetail"
hide-bottom-space
label="หัวข้อการไปศึกษาดูงานในประเทศ"
class="inputgreen"
@ -1989,6 +2069,7 @@ onMounted(() => {
menu-class-name="modalfix"
v-model="formBody.studyStartDate"
:locale="'th'"
:readonly="checkRouteDetail"
autoApply
:enableTimePicker="false"
week-start="0"
@ -2003,6 +2084,7 @@ onMounted(() => {
dense
outlined
class="inputgreen"
:readonly="checkRouteDetail"
:model-value="
formBody.studyStartDate
? date2Thai(formBody.studyStartDate)
@ -2031,6 +2113,7 @@ onMounted(() => {
<datepicker
menu-class-name="modalfix"
v-model="formBody.studyEndDate"
:readonly="checkRouteDetail"
:locale="'th'"
autoApply
:enableTimePicker="false"
@ -2052,6 +2135,7 @@ onMounted(() => {
<q-input
dense
outlined
:readonly="checkRouteDetail"
class="inputgreen"
:model-value="
formBody.studyEndDate
@ -2082,6 +2166,7 @@ onMounted(() => {
<q-input
dense
outlined
:readonly="checkRouteDetail"
lazy-rules
hide-bottom-space
label="ประเทศที่เดินทางไปศึกษาดูงาน"
@ -2097,6 +2182,7 @@ onMounted(() => {
<q-input
dense
outlined
:readonly="checkRouteDetail"
lazy-rules
hide-bottom-space
label="หัวข้อการไปศึกษาดูงานต่างประเทศ"
@ -2115,6 +2201,7 @@ onMounted(() => {
:locale="'th'"
autoApply
:enableTimePicker="false"
:readonly="checkRouteDetail"
week-start="0"
@update:model-value="
changeStartDate('studyAbroadStartDate')
@ -2128,6 +2215,7 @@ onMounted(() => {
<q-input
dense
outlined
:readonly="checkRouteDetail"
class="inputgreen"
:model-value="
formBody.studyAbroadStartDate
@ -2160,6 +2248,7 @@ onMounted(() => {
:locale="'th'"
autoApply
:enableTimePicker="false"
:readonly="checkRouteDetail"
week-start="0"
:min-date="formBody.studyAbroadStartDate"
@update:model-value="
@ -2178,6 +2267,7 @@ onMounted(() => {
dense
outlined
class="inputgreen"
:readonly="checkRouteDetail"
:model-value="
formBody.studyAbroadEndDate
? date2Thai(formBody.studyAbroadEndDate)
@ -2206,6 +2296,7 @@ onMounted(() => {
<q-input
dense
outlined
:readonly="checkRouteDetail"
lazy-rules
hide-bottom-space
label="รวมระยะเวลาในการศึกษา"
@ -2230,6 +2321,7 @@ onMounted(() => {
<q-select
dense
outlined
:readonly="checkRouteDetail"
lazy-rules
hide-bottom-space
class="inputgreen"
@ -2254,6 +2346,7 @@ onMounted(() => {
dense
outlined
lazy-rules
:readonly="checkRouteDetail"
hide-bottom-space
label="ระดับปริญญา"
class="inputgreen"
@ -2270,6 +2363,7 @@ onMounted(() => {
dense
outlined
lazy-rules
:readonly="checkRouteDetail"
hide-bottom-space
class="inputgreen"
label="หลักสูตรการฝึกอบรม"
@ -2286,6 +2380,7 @@ onMounted(() => {
dense
outlined
lazy-rules
:readonly="checkRouteDetail"
hide-bottom-space
label="สาขาวิชา"
class="inputgreen"
@ -2302,6 +2397,7 @@ onMounted(() => {
dense
outlined
lazy-rules
:readonly="checkRouteDetail"
hide-bottom-space
label="คณะ"
class="inputgreen"
@ -2317,6 +2413,7 @@ onMounted(() => {
<q-input
dense
outlined
:readonly="checkRouteDetail"
lazy-rules
hide-bottom-space
label="สถาบันการศึกษา/หน่วยงานผู้จัด"
@ -2335,6 +2432,7 @@ onMounted(() => {
v-model="formBody.startDate"
:locale="'th'"
autoApply
:readonly="checkRouteDetail"
:enableTimePicker="false"
week-start="0"
@update:model-value="changeStartDate('startDate')"
@ -2347,6 +2445,7 @@ onMounted(() => {
<q-input
dense
outlined
:readonly="checkRouteDetail"
class="inputgreen"
:model-value="
formBody.startDate
@ -2378,6 +2477,7 @@ onMounted(() => {
v-model="formBody.endDate"
:locale="'th'"
autoApply
:readonly="checkRouteDetail"
:enableTimePicker="false"
week-start="0"
:min-date="formBody.startDate"
@ -2390,6 +2490,7 @@ onMounted(() => {
<q-input
dense
outlined
:readonly="checkRouteDetail"
class="inputgreen"
:model-value="
formBody.endDate ? date2Thai(formBody.endDate) : null
@ -2418,6 +2519,7 @@ onMounted(() => {
dense
outlined
lazy-rules
:readonly="checkRouteDetail"
hide-bottom-space
label="ประเทศที่ไปศึกษา ฝึกอบรม ประชุม ดูงาน และปฏิบัติการวิจัย"
class="inputgreen"
@ -2444,6 +2546,7 @@ onMounted(() => {
dense
outlined
lazy-rules
:readonly="checkRouteDetail"
hide-bottom-space
class="inputgreen"
label="หลักสูตรการฝึกอบรม"
@ -2459,6 +2562,7 @@ onMounted(() => {
dense
outlined
lazy-rules
:readonly="checkRouteDetail"
hide-bottom-space
class="inputgreen"
label="สถาบันการศึกษา/หน่วยงานผู้จัดการฝึกอบรม"
@ -2475,6 +2579,7 @@ onMounted(() => {
v-model="formBody.startDate"
:locale="'th'"
autoApply
:readonly="checkRouteDetail"
:enableTimePicker="false"
week-start="0"
@update:model-value="changeStartDate('startDate')"
@ -2489,6 +2594,7 @@ onMounted(() => {
dense
outlined
class="inputgreen"
:readonly="checkRouteDetail"
:model-value="
formBody.startDate ? date2Thai(formBody.startDate) : null
"
@ -2516,6 +2622,7 @@ onMounted(() => {
menu-class-name="modalfix"
v-model="formBody.endDate"
:locale="'th'"
:readonly="checkRouteDetail"
autoApply
:enableTimePicker="false"
week-start="0"
@ -2529,6 +2636,7 @@ onMounted(() => {
<q-input
dense
outlined
:readonly="checkRouteDetail"
class="inputgreen"
:model-value="
formBody.endDate ? date2Thai(formBody.endDate) : null
@ -2558,6 +2666,7 @@ onMounted(() => {
dense
outlined
lazy-rules
:readonly="checkRouteDetail"
hide-bottom-space
label="สถานที่ไปศึกษาดูงานในประเทศ"
class="inputgreen"
@ -2572,6 +2681,7 @@ onMounted(() => {
<q-input
dense
outlined
:readonly="checkRouteDetail"
lazy-rules
hide-bottom-space
label="หัวข้อการไปศึกษาดูงานในประเทศ"
@ -2588,6 +2698,7 @@ onMounted(() => {
menu-class-name="modalfix"
v-model="formBody.studyStartDate"
:locale="'th'"
:readonly="checkRouteDetail"
autoApply
:enableTimePicker="false"
week-start="0"
@ -2601,6 +2712,7 @@ onMounted(() => {
<q-input
dense
outlined
:readonly="checkRouteDetail"
class="inputgreen"
:model-value="
formBody.studyStartDate
@ -2633,6 +2745,7 @@ onMounted(() => {
:locale="'th'"
autoApply
:enableTimePicker="false"
:readonly="checkRouteDetail"
week-start="0"
:min-date="formBody.studyStartDate"
@update:model-value="
@ -2650,6 +2763,7 @@ onMounted(() => {
<q-input
dense
outlined
:readonly="checkRouteDetail"
class="inputgreen"
:model-value="
formBody.studyEndDate
@ -2681,6 +2795,7 @@ onMounted(() => {
dense
outlined
lazy-rules
:readonly="checkRouteDetail"
hide-bottom-space
label="ประเทศที่ไปศึกษาดูงาน"
class="inputgreen"
@ -2696,6 +2811,7 @@ onMounted(() => {
dense
outlined
lazy-rules
:readonly="checkRouteDetail"
hide-bottom-space
label="หัวข้อการไปศึกษาดูงานต่างประเทศ"
class="inputgreen"
@ -2712,6 +2828,7 @@ onMounted(() => {
v-model="formBody.studyAbroadStartDate"
:locale="'th'"
autoApply
:readonly="checkRouteDetail"
:enableTimePicker="false"
week-start="0"
@update:model-value="changeStartDate('studyAbroadStartDate')"
@ -2724,6 +2841,7 @@ onMounted(() => {
<q-input
dense
outlined
:readonly="checkRouteDetail"
class="inputgreen"
:model-value="
formBody.studyAbroadStartDate
@ -2756,6 +2874,7 @@ onMounted(() => {
:locale="'th'"
autoApply
:enableTimePicker="false"
:readonly="checkRouteDetail"
week-start="0"
:min-date="formBody.studyAbroadStartDate"
@update:model-value="
@ -2773,6 +2892,7 @@ onMounted(() => {
<q-input
dense
outlined
:readonly="checkRouteDetail"
class="inputgreen"
:model-value="
formBody.studyAbroadEndDate
@ -2803,6 +2923,7 @@ onMounted(() => {
dense
outlined
lazy-rules
:readonly="checkRouteDetail"
hide-bottom-space
label="รวมระยะเวลาในการฝึกอบรม "
class="inputgreen"
@ -2816,15 +2937,14 @@ onMounted(() => {
</div>
</div>
</div>
<q-separator v-if="isGov"/>
<q-card-actions align="right" v-if="isGov">
<q-btn label="บันทึก" color="secondary" type="submit"
><q-tooltip>นทกขอม</q-tooltip></q-btn
>
</q-card-actions>
<q-separator v-if="isGov && !checkRouteDetail" />
<q-card-actions align="right" v-if="isGov && !checkRouteDetail">
<q-btn label="บันทึก" color="secondary" type="submit"
><q-tooltip>นทกขอม</q-tooltip></q-btn
>
</q-card-actions>
</q-form>
</q-card>
</q-form>
<DialogGov v-model:modal="modalDialogGov" :up-date="upDate" />
</template>

View file

@ -1,6 +1,7 @@
const mainPage = () => import("@/modules/15_development/views/MainPage.vue");
const mainForm = () =>
import("@/modules/15_development/components/MainTab.vue");
const developmentHistory = () =>
import("@/modules/15_development/views/History.vue");
const employeeHistory = () =>
@ -17,6 +18,8 @@ const historyEmployeeEdit = () =>
import("@/modules/15_development/components/historyEmployee/AddPage.vue");
const ScholarshipDetail = () =>
import("@/modules/15_development/components/scholarship/DetailView.vue");
const ScholarshipDetailById = () =>
import("@/modules/15_development/components/scholarship/DetailView.vue");
// const historyAdd = () =>
// import("@/modules/15_development/components/history/AddPage.vue");
// const StrategicView = () =>
@ -24,6 +27,8 @@ const ScholarshipDetail = () =>
const RecordPage = () =>
import("@/modules/15_development/views/RecordPage.vue");
const mainFormDetail = () =>
import("@/modules/15_development/components/MainTab.vue");
export default [
{
path: "/development",
@ -55,6 +60,16 @@ export default [
Role: "STAFF",
},
},
{
path: "/development-detail/:id",
name: "developmentDetailPage",
component: mainFormDetail,
meta: {
Auth: true,
Key: "SYS_DEV_PROJECT",
Role: "STAFF",
},
},
{
path: "/development/record/:id",
name: "developmentRecordPage",
@ -135,6 +150,16 @@ export default [
Role: "STAFF",
},
},
{
path: "/development/scholarship-detail/:id",
name: "developmentScholarshipidDetail",
component: ScholarshipDetailById,
meta: {
Auth: true,
Key: "SYS_DEV_SCHOLARSHIP",
Role: "STAFF",
},
},
// {
// path: "/development/history/add",
// name: "developmentHistoryAdd",

View file

@ -4,7 +4,7 @@ import { useQuasar, type QTableProps } from "quasar";
import http from "@/plugins/http";
import config from "@/app.config";
import genReportXLSX from "@/plugins/genreportxlsx";
import { useRouter } from "vue-router";
import { useRoute, useRouter } from "vue-router";
import type {
NewPagination,
@ -14,9 +14,10 @@ import type {
/** importStore*/
import { useDevelopmentDataStore } from "@/modules/15_development/store/developmentStore";
import { useCounterMixin } from "@/stores/mixin";
import { checkPermission } from "@/utils/permissions";
/** use*/
const router = useRouter();
const route = useRoute();
const store = useDevelopmentDataStore();
const $q = useQuasar();
const { showLoader, hideLoader, messageError } = useCounterMixin();
@ -183,8 +184,10 @@ function onDownload(type: string) {
* @param id id ของ row
*/
function onEdit(id: string) {
store.statusEdit = true;
router.push(`/development/employee-history/${id}`);
if (checkPermission(route)?.attrIsUpdate !== false) {
store.statusEdit = true;
router.push(`/development/employee-history/${id}`);
}
}
/** ดึงข้อมูล */
@ -322,7 +325,10 @@ onMounted(() => {
<q-toolbar class="col-4 text-white q-pa-none q-gutter-x-sm">
<q-space />
<q-btn
v-if="formFilter.root !== null"
v-if="
formFilter.root !== null &&
checkPermission($route)?.attrIsGet !== false
"
flat
round
dense
@ -422,19 +428,27 @@ onMounted(() => {
</template>
<template v-slot:header="props">
<q-tr :props="props">
<q-th auto-width></q-th>
<q-th v-for="col in props.cols" :key="col.name" :props="props">
<span class="text-weight-medium">{{ col.label }}</span>
</q-th>
</q-tr>
</template>
<template v-slot:body="props">
<q-tr :props="props" class="cursor-pointer">
<q-td
v-for="col in props.cols"
:key="col.name"
:props="props"
@click="onEdit(props.row.id)"
>
<q-tr :props="props">
<q-td auto-width>
<q-btn
flat
round
dense
icon="mdi-eye"
color="info"
@click="onEdit(props.row.id)"
>
<q-tooltip>รายละเอยด</q-tooltip>
</q-btn>
</q-td>
<q-td v-for="col in props.cols" :key="col.name" :props="props">
<div class="table_ellipsis">
{{ col.value ? col.value : "-" }}
</div>

View file

@ -22,6 +22,7 @@ import type { ResHistory } from "@/modules/15_development/interface/response/Mai
*/
import { useDevelopmentDataStore } from "@/modules/15_development/store/developmentStore";
import { useCounterMixin } from "@/stores/mixin";
import { checkPermission } from "@/utils/permissions";
/** use*/
const router = useRouter();
@ -347,7 +348,7 @@ onMounted(() => {
<q-space />
<q-btn
v-if="formFilter.root !== null"
v-if="formFilter.root !== null && checkPermission($route)?.attrIsGet !== false"
flat
round
dense
@ -431,6 +432,7 @@ onMounted(() => {
>
<template v-slot:header="props">
<q-tr :props="props">
<q-th auto-width v-if="checkPermission($route)?.attrIsGet"></q-th>
<q-th v-for="col in props.cols" :key="col.name" :props="props">
<span class="text-weight-medium">{{ col.label }}</span>
</q-th>
@ -438,12 +440,23 @@ onMounted(() => {
</template>
<template v-slot:body="props">
<q-tr :props="props" class="cursor-pointer">
<q-tr :props="props">
<q-td auto-width v-if="checkPermission($route)?.attrIsGet">
<q-btn
flat
round
dense
icon="mdi-eye"
color="info"
@click="onEdit(props.row.id)"
>
<q-tooltip>รายละเอยด</q-tooltip>
</q-btn>
</q-td>
<q-td
v-for="col in props.cols"
:key="col.name"
:props="props"
@click="onEdit(props.row.id)"
>
<div class="table_ellipsis">
{{ col.value ? col.value : "-" }}

View file

@ -5,7 +5,7 @@ import { useRouter } from "vue-router";
import genReportXLSX from "@/plugins/genreportxlsx";
import http from "@/plugins/http";
import config from "@/app.config";
import { checkPermission } from "@/utils/permissions";
/**importType*/
import type {
DataOption,
@ -296,6 +296,14 @@ watch(
}
);
/**
* function redirect หนาบนทกผล
* @param id โครงการ
*/
function onDetail(id: string) {
router.push(`/development-detail/${id}`);
}
/** ดึงข้อมูลเมื่อโหลดหน้าเสร็จสิ้น */
onMounted(() => {
fetchActive();
@ -433,14 +441,23 @@ onMounted(() => {
@update:model-value="fetchListProjectNew"
/>
<q-toolbar-title>
<q-btn flat round dense icon="add" color="primary" @click="onAdd()">
<q-tooltip>เพ</q-tooltip>
<q-btn
v-if="checkPermission($route)?.attrIsCreate"
flat
round
dense
icon="add"
color="primary"
@click="onAdd()"
>
<q-tooltip>เพมขอม</q-tooltip>
</q-btn>
</q-toolbar-title>
<q-space />
<q-btn
v-if="checkPermission($route)?.attrIsGet"
flat
round
dense
@ -508,32 +525,57 @@ onMounted(() => {
>
<template v-slot:header="props">
<q-tr :props="props">
<q-th v-if="formQuery.status === 'FINISH'" auto-width />
<q-th auto-width />
<q-th v-for="col in props.cols" :key="col.name" :props="props">
<span class="text-weight-medium">{{ col.label }}</span>
</q-th>
</q-tr>
</template>
<template v-slot:body="props">
<q-tr :props="props" class="cursor-pointer">
<q-td v-if="formQuery.status === 'FINISH'">
<q-tr :props="props">
<q-td>
<q-btn
v-if="checkPermission($route)?.attrIsGet"
flat
round
dense
color="info"
icon="mdi-eye"
@click.pervent="onDetail(props.row.id)"
>
<q-tooltip>รายละเอยด</q-tooltip></q-btn
>
<q-btn
v-if="
checkPermission($route)?.attrIsUpdate &&
checkPermission($route)?.attrIsGet
"
flat
round
dense
color="edit"
icon="edit"
@click.pervent="onClickAddOrView(true, props.row.id)"
>
<q-tooltip>แกไขขอม</q-tooltip></q-btn
>
<q-btn
v-if="
formQuery.status === 'FINISH' &&
checkPermission($route)?.attrIsUpdate &&
checkPermission($route)?.attrIsGet
"
flat
round
dense
color="public"
icon="mdi-content-save-edit-outline"
size="12px"
@click.pervent="onRedirectToRecordPage(props.row.id)"
>
<q-tooltip>นทกผล</q-tooltip></q-btn
>
</q-td>
<q-td
v-for="col in props.cols"
:key="col.name"
:props="props"
@click.pervent="onClickAddOrView(true, props.row.id)"
>
<q-td v-for="col in props.cols" :key="col.name" :props="props">
<div class="table_ellipsis">
{{ col.value ? col.value : "-" }}
</div>

View file

@ -4,7 +4,7 @@ import { useQuasar, type QTableProps } from "quasar";
import { useRouter } from "vue-router";
import http from "@/plugins/http";
import config from "@/app.config";
import { checkPermission } from "@/utils/permissions";
import genReportXLSX from "@/plugins/genreportxlsx";
import type {
@ -202,6 +202,10 @@ watch(
}
);
function onDetail(id: string) {
router.push(`/development/scholarship-detail/${id}`);
}
/** ดึงข้อมูลเมื่ออยู่ในหน้า */
onMounted(() => {
fetchList();
@ -278,6 +282,7 @@ onMounted(() => {
</div>
<q-btn
v-if="checkPermission($route)?.attrIsCreate"
flat
round
dense
@ -285,22 +290,11 @@ onMounted(() => {
color="primary"
@click="onClickAddOrView()"
>
<q-tooltip>เพ</q-tooltip>
<q-tooltip>เพอม</q-tooltip>
</q-btn>
<q-space />
<div class="row q-gutter-sm">
<!-- <q-btn
flat
round
dense
icon="mdi-arrow-down-bold-circle-outline"
color="blue"
@click="onDownload"
>
<q-tooltip>ดาวนโหลด</q-tooltip>
</q-btn> -->
<q-input
standout
dense
@ -355,19 +349,42 @@ onMounted(() => {
>
<template v-slot:header="props">
<q-tr :props="props">
<q-th auto-width></q-th>
<q-th v-for="col in props.cols" :key="col.name" :props="props">
<span class="text-weight-medium">{{ col.label }}</span>
</q-th>
</q-tr>
</template>
<template v-slot:body="props">
<q-tr :props="props" class="cursor-pointer">
<q-td
v-for="col in props.cols"
:key="col.name"
:props="props"
@click="onClickAddOrView(true, props.row.id)"
>
<q-tr :props="props">
<q-td auto-width>
<q-btn
v-if="checkPermission($route)?.attrIsGet"
flat
dense
round
icon="mdi-eye"
color="info"
@click="onDetail(props.row.id)"
>
<q-tooltip>รายละเอยด</q-tooltip>
</q-btn>
<q-btn
v-if="
checkPermission($route)?.attrIsUpdate &&
checkPermission($route)?.attrIsGet
"
flat
dense
round
icon="edit"
color="edit"
@click="onClickAddOrView(true, props.row.id)"
>
<q-tooltip>แกไขขอม</q-tooltip>
</q-btn>
</q-td>
<q-td v-for="col in props.cols" :key="col.name" :props="props">
<div class="table_ellipsis">
{{ col.value ? col.value : "-" }}
</div>