Merge branch 'develop' of github.com:Frappet/bma-ehr-frontend into develop

This commit is contained in:
Warunee Tamkoo 2024-08-08 16:45:16 +07:00
commit 48ea05608b
17 changed files with 328 additions and 143 deletions

View file

@ -81,7 +81,7 @@ onMounted(() => {
class="bg-white rounded-borders q-pa-sm"
style="border: 1px solid #ededed"
>
<div class="row items-center no-wrap">
<div class="row items-center no-wrap text-size">
{{ i.label }}
<q-space />
<q-badge :color="i.color" text-color="white" :label="i.total" />
@ -91,3 +91,32 @@ onMounted(() => {
</div>
</q-card>
</template>
<style scoped>
.text-size {
font-size: 14px;
}
@media (min-width: 1400px) {
.text-size {
font-size: 14px;
}
}
@media (min-width: 1350px) and (max-width: 1399px) {
.text-size {
font-size: 13px;
}
}
@media (min-width: 1050px) and (max-width: 1349px) {
.text-size {
font-size: 12px;
}
}
@media (min-width: 1024px) and (max-width: 1049px) {
.text-size {
font-size: 12px;
}
}
</style>

View file

@ -1045,7 +1045,7 @@ function filterOptionFnAgency(val: string, update: Function) {
dense
color="red"
class="q-ml-sm"
icon="mdi-delete-outline"
icon="mdi-delete"
@click="deleteFile(data.id)"
><q-tooltip>ลบไฟล</q-tooltip></q-btn
>

View file

@ -37,7 +37,7 @@ const store = useInvestigateDisStore();
const { dialogConfirm, success, messageError, showLoader, hideLoader } = mixin;
const router = useRouter();
const route = useRoute();
const checkRoutePermisson = ref<boolean>(route.name == "disciplineDisciplinaryDetail");
const modalPopup = ref<boolean>(false);
const id = ref<string>(route.params.id as string);
const data = ref<object>();
@ -396,9 +396,9 @@ onMounted(async () => {
class="q-mr-sm"
@click="$router.push(`/discipline/disciplinary`)"
/>
<div class="q-ma-none">แกไขการสอบสวนความผดทางว</div>
<div class="q-ma-none">{{ checkRoutePermisson ? 'รายละเอียดการสอบสวนความผิดทางวินัย':'แก้ไขการสอบสวนความผิดทางวินัย'}}</div>
<q-space />
<div class="q-gutter-x-sm">
<div class="q-gutter-x-sm" v-if="!checkRoutePermisson">
<q-btn
v-if="status === 'NEW'"
label="ส่งไปสรุปผลการพิจารณา"

View file

@ -61,7 +61,9 @@ const {
const route = useRoute();
const router = useRouter();
const $q = useQuasar();
const checkRoutePermisson = ref<boolean>(
route.name == "disciplineDisciplinaryDetail"
);
const organizationOption = ref<DataOption[]>([]);
/** query string*/
const page = ref<number>(1);
@ -684,7 +686,6 @@ function deletePerson(id: string) {
mainStore.rowsAdd = updatedRows;
}
/**
* function นหาขอมลใน option
* @param val คำคนหา
@ -698,7 +699,6 @@ function filterOptionFn(val: string, update: Function) {
});
}
/**
* function นหาขอมลใน option
* @param val คำคนหา
@ -712,7 +712,6 @@ function filterOptionFnOrganization(val: string, update: Function) {
});
}
/**
* function นหาขอมลใน option
* @param val คำคนหา
@ -726,7 +725,6 @@ function filterOptionFnFaultLevel(val: string, update: Function) {
});
}
/**
* function นหาขอมลใน option
* @param val คำคนหา
@ -770,7 +768,7 @@ onMounted(async () => {
<div class="col-xs-12 col-sm-3">
<q-select
:class="inputEdit(isReadonly)"
:readonly="isReadonly"
:readonly="isReadonly || checkRoutePermisson"
for="SelectrespondentType"
v-model="formData.respondentType"
ref="respondentTypeRef"
@ -808,7 +806,7 @@ onMounted(async () => {
id="organizationId"
>
<q-select
:readonly="isReadonly"
:readonly="isReadonly || checkRoutePermisson"
for="inputOffice"
name="organizationId"
ref="organizationIdRef"
@ -864,8 +862,7 @@ onMounted(async () => {
>
กรองเรยน
<q-btn
v-if="!isReadonly"
size="12px"
v-if="!isReadonly && !checkRoutePermisson"
flat
round
dense
@ -904,7 +901,7 @@ onMounted(async () => {
col.label
}}</span>
</q-th>
<q-th auto-width></q-th>
</q-tr>
</template>
<template v-slot:body="props">
@ -915,11 +912,26 @@ onMounted(async () => {
flat
round
color="info"
icon="info"
icon="mdi-eye"
@click="onclickViewinfo(props.row.personId)"
>
<q-tooltip>อมลในทะเบยนประว</q-tooltip>
</q-btn>
<q-btn
v-if="
!checkRoutePermisson &&
!isReadonly &&
props.row.isAncestorDNA === false
"
flat
round
dense
color="red"
class="q-ml-sm"
icon="mdi-delete"
@click="deletePerson(props.row.personId)"
><q-tooltip>ลบผกรองเรยน</q-tooltip></q-btn
>
</td>
<q-td
v-for="col in props.cols"
@ -942,22 +954,6 @@ onMounted(async () => {
{{ col.value }}
</div>
</q-td>
<q-td auto-width>
<q-btn
v-if="
!isReadonly && props.row.isAncestorDNA === false
"
size="12px"
flat
round
dense
color="red"
class="q-ml-sm"
icon="mdi-delete-outline"
@click="deletePerson(props.row.personId)"
><q-tooltip>ลบผกรองเรยน</q-tooltip></q-btn
>
</q-td>
</q-tr>
</template>
</d-table>
@ -967,7 +963,7 @@ onMounted(async () => {
<div class="row col-12 q-col-gutter-x-md">
<datepicker
:readonly="isReadonly"
:readonly="isReadonly || checkRoutePermisson"
menu-class-name="modalfix"
for="#dateAllegation"
v-model="formData.disciplinaryDateInvestigation"
@ -987,7 +983,7 @@ onMounted(async () => {
</template>
<template #trigger>
<q-input
:readonly="isReadonly"
:readonly="isReadonly || checkRoutePermisson"
outlined
dense
:class="inputEdit(isReadonly)"
@ -1010,7 +1006,7 @@ onMounted(async () => {
<template
v-if="
formData.disciplinaryDateInvestigation &&
isReadonly === false
isReadonly === false &&!checkRoutePermisson
"
v-slot:append
>
@ -1027,7 +1023,7 @@ onMounted(async () => {
</datepicker>
<datepicker
:readonly="isReadonly"
:readonly="isReadonly || checkRoutePermisson"
menu-class-name="modalfix"
for="#dateAllegation"
v-model="formData.disciplinaryDateAllegation"
@ -1047,7 +1043,7 @@ onMounted(async () => {
</template>
<template #trigger>
<q-input
:readonly="isReadonly"
:readonly="isReadonly || checkRoutePermisson"
ref="disciplinaryDateAllegationRef"
outlined
:class="inputEdit(isReadonly)"
@ -1071,7 +1067,7 @@ onMounted(async () => {
<template
v-if="
formData.disciplinaryDateAllegation &&
isReadonly === false
isReadonly === false &&!checkRoutePermisson
"
v-slot:append
>
@ -1102,7 +1098,8 @@ onMounted(async () => {
<q-checkbox
v-if="
formData.disciplinaryExtendHistory.length > 0 &&
!isReadonly
!isReadonly &&
!checkRoutePermisson
"
:disable="isReadonly"
for="#extendStatus"
@ -1124,7 +1121,6 @@ onMounted(async () => {
<q-btn
name="calendar"
round
size="12px"
flat
dense
icon="mdi-calendar-month"
@ -1144,7 +1140,7 @@ onMounted(async () => {
<div v-if="extendStatus" class="col-3">
<q-select
:class="inputEdit(isReadonly)"
:readonly="isReadonly"
:readonly="isReadonly||checkRoutePermisson"
for="#daysExtend"
outlined
dense
@ -1182,7 +1178,7 @@ onMounted(async () => {
<div v-if="!extendStatus" class="col-3">
<datepicker
menu-class-name="modalfix"
:readonly="
:readonly="checkRoutePermisson||
isReadonly ||
formData.disciplinaryExtendHistory.length > 0
"
@ -1205,7 +1201,7 @@ onMounted(async () => {
class="full-width cursor-pointer"
ref="dateRef"
:class="inputEditExtend(isReadonly)"
:readonly="
:readonly="checkRoutePermisson||
isReadonly ||
formData.disciplinaryExtendHistory.length >
0
@ -1233,6 +1229,7 @@ onMounted(async () => {
</template>
<template
v-if="
!checkRoutePermisson &&
formData.disciplinaryDateStart &&
isReadonly === false &&
formData.disciplinaryExtendHistory
@ -1259,7 +1256,7 @@ onMounted(async () => {
:class="isReadonly ? '' : dateEndInputStyle"
menu-class-name="modalfix"
v-model="formData.disciplinaryDateEnd"
:readonly="
:readonly="checkRoutePermisson||
formData.disciplinaryDateStart === null ||
isReadonly ||
formData.disciplinaryExtendHistory.length > 0
@ -1282,7 +1279,7 @@ onMounted(async () => {
for="#dateEnd"
:class="inputEditExtend(isReadonly)"
ref="dateEndRef"
:readonly="
:readonly="checkRoutePermisson||
formData.disciplinaryDateStart === null ||
isReadonly ||
formData.disciplinaryExtendHistory.length >
@ -1310,7 +1307,7 @@ onMounted(async () => {
</q-icon>
</template>
<template
v-if="
v-if="!checkRoutePermisson&&
formData.disciplinaryDateEnd &&
isReadonly === false &&
formData.disciplinaryExtendHistory
@ -1363,7 +1360,7 @@ onMounted(async () => {
</div>
<datepicker
:readonly="isReadonly"
:readonly="isReadonly||checkRoutePermisson"
menu-class-name="modalfix"
for="#dateEvident"
v-model="formData.disciplinaryDateEvident"
@ -1383,7 +1380,7 @@ onMounted(async () => {
</template>
<template #trigger>
<q-input
:readonly="isReadonly"
:readonly="isReadonly||checkRoutePermisson"
ref="disciplinaryDateEvidentRef"
outlined
dense
@ -1406,7 +1403,7 @@ onMounted(async () => {
</template>
<template
v-if="
formData.disciplinaryDateEvident && isReadonly === false
formData.disciplinaryDateEvident && isReadonly === false &&!checkRoutePermisson
"
v-slot:append
>
@ -1423,7 +1420,7 @@ onMounted(async () => {
</datepicker>
<datepicker
:readonly="isReadonly"
:readonly="isReadonly||checkRoutePermisson"
menu-class-name="modalfix"
for="#dateResult"
v-model="formData.disciplinaryDateResult"
@ -1444,7 +1441,7 @@ onMounted(async () => {
<template #trigger>
<q-input
:readonly="isReadonly"
:readonly="isReadonly||checkRoutePermisson"
ref="disciplinaryDateResultRef"
outlined
:class="inputEdit(isReadonly)"
@ -1467,7 +1464,7 @@ onMounted(async () => {
</template>
<template
v-if="
formData.disciplinaryDateResult && isReadonly === false
formData.disciplinaryDateResult && isReadonly === false &&!checkRoutePermisson
"
v-slot:append
>
@ -1494,8 +1491,7 @@ onMounted(async () => {
>
รายชอกรรมการเพอพจารณาความผดทางว
<q-btn
v-if="!isReadonly"
size="12px"
v-if="!isReadonly&&!checkRoutePermisson"
flat
round
dense
@ -1530,27 +1526,25 @@ onMounted(async () => {
<q-td class="text-right">
<!-- แกไขกรรมการ -->
<q-btn
v-if="!isReadonly && props.row.check === 'props'"
v-if="!isReadonly && props.row.check === 'props' &&!checkRoutePermisson"
dense
size="12px"
flat
round
color="blue"
color="edit"
@click="openEditDirector(props.row)"
icon="mdi-pencil-outline"
icon="edit"
>
<q-tooltip>แกไข</q-tooltip>
</q-btn>
<q-btn
v-if="!isReadonly"
v-if="!isReadonly&&!checkRoutePermisson"
dense
size="12px"
flat
round
color="red"
@click="deleteDirector(props.row.id)"
icon="mdi-delete-outline"
icon="mdi-delete"
>
<q-tooltip>ลบขอม</q-tooltip>
</q-btn>
@ -1570,7 +1564,6 @@ onMounted(async () => {
{{ col.value ? col.value : "-" }}
</div>
</q-td>
</q-tr>
</template>
</Table>
@ -1581,7 +1574,7 @@ onMounted(async () => {
<div class="col-xs-12 col-sm-3">
<q-input
:class="inputEdit(isReadonly)"
:readonly="isReadonly"
:readonly="isReadonly||checkRoutePermisson"
dense
outlined
ref="disciplinaryCaseFaultRef"
@ -1596,7 +1589,7 @@ onMounted(async () => {
<div class="col-xs-12 col-sm-3">
<q-input
:class="inputEdit(isReadonly)"
:readonly="isReadonly"
:readonly="isReadonly||checkRoutePermisson"
dense
hide-bottom-space
outlined
@ -1611,7 +1604,7 @@ onMounted(async () => {
<div class="col-xs-12 col-sm-3">
<q-select
:class="inputEdit(isReadonly)"
:readonly="isReadonly"
:readonly="isReadonly||checkRoutePermisson"
dense
outlined
for="#faultLevel"
@ -1654,7 +1647,7 @@ onMounted(async () => {
<div class="col-xs-12 col-sm-3">
<q-input
:class="inputEdit(isReadonly)"
:readonly="isReadonly"
:readonly="isReadonly||checkRoutePermisson"
dense
for="#refLaw"
hide-bottom-space
@ -1669,7 +1662,7 @@ onMounted(async () => {
<div class="col-xs-12 col-sm-6">
<q-input
:readonly="isReadonly"
:readonly="isReadonly||checkRoutePermisson"
:class="inputEdit(isReadonly)"
dense
outlined
@ -1685,7 +1678,7 @@ onMounted(async () => {
<div class="col-xs-12 col-sm-6">
<q-input
:readonly="isReadonly"
:readonly="isReadonly||checkRoutePermisson"
:class="inputEdit(isReadonly)"
dense
outlined
@ -1701,7 +1694,7 @@ onMounted(async () => {
<div class="col-xs-12 col-sm-6">
<q-input
:readonly="isReadonly"
:readonly="isReadonly||checkRoutePermisson"
:class="inputEdit(isReadonly)"
dense
outlined
@ -1717,7 +1710,7 @@ onMounted(async () => {
<div class="col-xs-12 col-sm-6">
<q-input
:readonly="isReadonly"
:readonly="isReadonly||checkRoutePermisson"
:class="inputEdit(isReadonly)"
dense
outlined
@ -1752,7 +1745,7 @@ onMounted(async () => {
for="#fault"
outlined
dense
:readonly="isReadonly"
:readonly="isReadonly||checkRoutePermisson"
ref="disciplinaryStatusResultRef"
v-model="formData.disciplinaryStatusResult"
:options="option"
@ -1780,7 +1773,7 @@ onMounted(async () => {
>
<q-select
:class="inputEdit(isReadonly)"
:readonly="isReadonly"
:readonly="isReadonly||checkRoutePermisson"
for="#fault"
outlined
dense
@ -1809,7 +1802,7 @@ onMounted(async () => {
<div class="col-12">
<q-input
:class="inputEdit(isReadonly)"
:readonly="isReadonly"
:readonly="isReadonly||checkRoutePermisson"
class="full-width cursor-pointer"
outlined
ref="disciplinaryResultRef"
@ -1841,7 +1834,7 @@ onMounted(async () => {
:id="id"
type="relevant"
:fetchData="props.fetchData"
:is-readonly="isReadonly"
:is-readonly="isReadonly||checkRoutePermisson"
:return-count="returnCount"
/>
</div>
@ -1853,7 +1846,7 @@ onMounted(async () => {
:id="id"
type="summaryEvidence"
:fetchData="props.fetchData"
:is-readonly="isReadonly"
:is-readonly="isReadonly||checkRoutePermisson"
:return-count="returnCount"
/>
</div>
@ -1865,7 +1858,7 @@ onMounted(async () => {
:id="id"
type="recordAccuser"
:fetchData="props.fetchData"
:is-readonly="isReadonly"
:is-readonly="isReadonly||checkRoutePermisson"
:return-count="returnCount"
/>
</div>
@ -1877,7 +1870,7 @@ onMounted(async () => {
:id="id"
type="witnesses"
:fetchData="props.fetchData"
:is-readonly="isReadonly"
:is-readonly="isReadonly||checkRoutePermisson"
:return-count="returnCount"
/>
</div>
@ -1889,7 +1882,7 @@ onMounted(async () => {
:id="id"
type="other"
:fetchData="props.fetchData"
:is-readonly="isReadonly"
:is-readonly="isReadonly||checkRoutePermisson"
:return-count="returnCount"
/>
</div>
@ -1897,7 +1890,7 @@ onMounted(async () => {
</div>
</div>
<div class="col-12"><q-separator /></div>
<div v-if="!isReadonly" class="row col-12 q-pa-sm">
<div v-if="!isReadonly&&!checkRoutePermisson" class="row col-12 q-pa-sm">
<q-space />
<q-btn
for="ButtonOnSubmit"

View file

@ -51,6 +51,13 @@ async function fetchListDisciplinary() {
function openEdit(id: string) {
router.push(`/discipline/disciplinary/${id}`);
}
/**
* ไปหนาแกไข
* @param id ไอดเฉพาะ รายบคคล
*/
function openDetail(id: string) {
router.push(`/discipline-detail/disciplinary/${id}`);
}
async function updatePagingProp(rowPerpage: number, pageCurrent: number) {
rowsPerPage.value = rowPerpage;
@ -95,6 +102,7 @@ onMounted(async () => {
:fetchListDisciplinary="fetchListDisciplinary"
@update:pagination="updatePagingProp"
v-model:open-edit="openEdit"
:open-detail="openDetail"
:filterStatus="filterStatus"
>
</Table>

View file

@ -3,6 +3,8 @@ import { ref, useAttrs, watch } from "vue";
import type { Pagination } from "@/modules/04_registry/interface/index/Main";
import { useInvestigateDisStore } from "@/modules/11_discipline/store/InvestigateDisStore";
import { checkPermission } from "@/utils/permissions";
const dataInvestigateDis = useInvestigateDisStore();
const table = ref<any>(null);
const filterRef = ref<any>(null);
@ -29,6 +31,10 @@ const props = defineProps({
type: Function,
default: () => console.log("not function"),
},
openDetail: {
type: Function,
default: () => console.log("not function"),
},
fetchListDisciplinary: {
type: Function,
default: () => console.log("not function"),
@ -169,11 +175,14 @@ function filterOptionFn(val: string, update: Function) {
<template v-if="statusFilter !== 'ALL'" v-slot:append>
<q-icon
name="cancel"
@click.stop.prevent="(option = dataInvestigateDis.statusOptions),(statusFilter = 'ALL'), dataUpdate()"
@click.stop.prevent="
(option = dataInvestigateDis.statusOptions),
(statusFilter = 'ALL'),
dataUpdate()
"
class="cursor-pointer"
/>
</template>
</q-select>
</div>
<q-space />
@ -242,6 +251,7 @@ function filterOptionFn(val: string, update: Function) {
</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" v-html="col.label" />
</q-th>
@ -249,12 +259,34 @@ function filterOptionFn(val: string, update: Function) {
</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="openEdit(props.row.id)"
>
<q-td auto-width>
<q-btn
v-if="checkPermission($route)?.attrIsGet"
flat
dense
round
icon="mdi-eye"
color="info"
@click="openDetail(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="openEdit(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 v-if="col.name == 'no'">
{{
(currentPage - 1) * Number(pagination.rowsPerPage) +

View file

@ -36,7 +36,7 @@ const modal = ref<boolean>(false);
const dataResult = ref<DataListRow[]>([]);
const filterKeyword = ref<string>("");
const dataDisciplinary = ref<object>([]);
const checkRoutePermisson = ref<boolean>(route.name == "disciplineResultDetail");
const dataInvestigatefacts = reactive<FormInvestigateFact>({
id: "",
idComplaint: "",
@ -285,9 +285,9 @@ onMounted(async () => {
class="q-mr-sm"
@click="$router.push(`/discipline-result`)"
/>
<div class="q-ma-none">แกไขผลการพจารณาทางว</div>
<div class="q-ma-none">{{checkRoutePermisson ? 'รายละเอียดผลการพิจารณาทางวินัย':'แก้ไขผลการพิจารณาทางวินัย'}}</div>
<q-space />
<div class="q-gutter-x-sm">
<div class="q-gutter-x-sm" v-if="!checkRoutePermisson">
<q-btn
v-if="status === 'DONE'"
label="ส่งไปออกคำสั่ง"

View file

@ -37,7 +37,9 @@ const {
} = mixin;
const router = useRouter();
const route = useRoute();
const checkRoutePermisson = ref<boolean>(
route.name == "disciplineResultDetail"
);
const $q = useQuasar();
const id = ref<string>(route.params.id as string);
const isSave = ref<boolean>(false); //
@ -382,24 +384,33 @@ function updatemodalPersonal(modal: boolean) {
</q-tr>
</template>
<template v-slot:body="props">
<q-tr :props="props" class="cursor-pointer">
<q-tr :props="props">
<td>
<q-btn
dense
flat
round
color="info"
icon="info"
icon="mdi-eye"
@click="onclickViewinfo(props.row.personId)"
>
<q-tooltip>อมลในทะเบยนประว</q-tooltip>
</q-btn>
<q-btn
dense
flat
round
color="deep-purple"
icon="mdi-history"
@click="openDetial(props.row.personId)"
>
<q-tooltip>ประว</q-tooltip>
</q-btn>
</td>
<q-td
v-for="col in props.cols"
:key="col.name"
:props="props"
@click="openDetial(props.row.personId)"
>
<div v-if="col.name == 'no'">
{{ props.rowIndex + 1 }}
@ -430,6 +441,7 @@ function updatemodalPersonal(modal: boolean) {
</div>
<div class="col-12">
<q-input
:readonly="checkRoutePermisson"
:class="inputEdit(isReadonly)"
type="textarea"
dense
@ -444,6 +456,7 @@ function updatemodalPersonal(modal: boolean) {
</div>
<div class="col-3">
<q-input
:readonly="checkRoutePermisson"
v-model="formData.disciplineType"
dense
:class="inputEdit(isReadonly)"
@ -453,6 +466,7 @@ function updatemodalPersonal(modal: boolean) {
</div>
<div class="col-3">
<q-input
:readonly="checkRoutePermisson"
v-model="formData.titleType"
dense
outlined
@ -462,6 +476,7 @@ function updatemodalPersonal(modal: boolean) {
</div>
<div class="col-4">
<q-input
:readonly="checkRoutePermisson"
v-model="formData.oc"
dense
outlined
@ -476,6 +491,7 @@ function updatemodalPersonal(modal: boolean) {
class="col-2"
:locale="'th'"
autoApply
:readonly="checkRoutePermisson"
year-picker
:enableTimePicker="false"
>
@ -487,6 +503,7 @@ function updatemodalPersonal(modal: boolean) {
<q-input
dense
:class="inputEdit(isReadonly)"
:readonly="checkRoutePermisson"
outlined
:model-value="
formData.year === 0 ? null : Number(formData.year) + 543
@ -501,7 +518,10 @@ function updatemodalPersonal(modal: boolean) {
>
</q-icon>
</template>
<template v-if="formData.year" v-slot:append>
<template
v-if="!checkRoutePermisson && formData.year"
v-slot:append
>
<q-icon
name="cancel"
@click.stop.prevent="formData.year = 0"
@ -524,7 +544,10 @@ function updatemodalPersonal(modal: boolean) {
ปโหลดไฟลเอกสารหลกฐาน
</div>
<div class="col-12"><q-separator /></div>
<div class="row col-12 q-col-gutter-y-sm q-pa-sm">
<div
class="row col-12 q-col-gutter-y-sm q-pa-sm"
v-if="!checkRoutePermisson"
>
<div class="col-12 row">
<q-file
for="inputFiles"
@ -581,6 +604,7 @@ function updatemodalPersonal(modal: boolean) {
><q-tooltip>ดาวนโหลดไฟล</q-tooltip></q-btn
>
<q-btn
v-if="!checkRoutePermisson"
size="12px"
flat
round
@ -600,8 +624,8 @@ function updatemodalPersonal(modal: boolean) {
</q-card>
</div>
<div class="col-12"><q-separator /></div>
<div class="row col-12 q-pa-sm">
<div class="col-12" v-if="!checkRoutePermisson"><q-separator /></div>
<div class="row col-12 q-pa-sm" v-if="!checkRoutePermisson">
<q-space />
<q-btn
for="ButtonOnSubmit"

View file

@ -64,6 +64,13 @@ async function updateQueryString(p: number, pS: number, key: string) {
function openEdit(id: string) {
router.push(`/discipline-result/${id}`);
}
/**
* ไปหนาแกไข
* @param id ไอดเฉพาะ รายบคคล
*/
function openDetail(id: string) {
router.push(`/discipline-result-detail/${id}`);
}
function filterStatus(statusReturn: string) {
status.value = statusReturn;
@ -102,6 +109,7 @@ onMounted(async () => {
:totalList="totalList"
@update:queryString="updateQueryString"
v-model:open-edit="openEdit"
v-model:open-detail="openDetail"
:filterStatus="filterStatus"
>
</Table>

View file

@ -2,6 +2,8 @@
import { ref, useAttrs, watch } from "vue";
import { useDisciplineResultStore } from "@/modules/11_discipline/store/ResultStore";
import { checkPermission } from "@/utils/permissions";
const store = useDisciplineResultStore();
const table = ref<any>(null);
const filterRef = ref<any>(null);
@ -33,6 +35,10 @@ const props = defineProps({
type: Function,
default: () => console.log("not function"),
},
openDetail: {
type: Function,
default: () => console.log("not function"),
},
filterStatus: {
type: Function,
default: () => console.log("not function"),
@ -155,7 +161,11 @@ function filterOptionFn(val: string, update: Function) {
<template v-if="statusFilter !== 'ALL'" v-slot:append>
<q-icon
name="cancel"
@click.stop.prevent="(option = store.statusOptions),(statusFilter = 'ALL'), dataUpdate()"
@click.stop.prevent="
(option = store.statusOptions),
(statusFilter = 'ALL'),
dataUpdate()
"
class="cursor-pointer"
/>
</template>
@ -213,6 +223,7 @@ function filterOptionFn(val: string, update: Function) {
>
<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" v-html="col.label" />
</q-th>
@ -220,12 +231,23 @@ function filterOptionFn(val: string, update: Function) {
</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="openEdit(props.row.id)"
>
<q-td auto-width>
<q-btn flat round dense icon="mdi-eye" color="info" @click="openDetail(props.row.id)" v-if="checkPermission($route)?.attrIsGet">
<q-tooltip>รายละเอยด</q-tooltip>
</q-btn>
<q-btn
v-if="checkPermission($route)?.attrIsUpdate && checkPermission($route)?.attrIsGet"
flat
round
dense
icon="edit"
color="edit"
@click="openEdit(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 v-if="col.name == 'no'">
{{
(currentPage - 1) * Number(pagination.rowsPerPage) +

View file

@ -184,7 +184,6 @@ function downloadFile(link: string) {
dense
flat
round
size="12px"
color="blue"
icon="mdi-download-outline"
@click="downloadFile(f.pathName)"
@ -198,9 +197,8 @@ function downloadFile(link: string) {
dense
flat
round
size="12px"
color="red"
icon="mdi-delete-outline"
icon="mdi-delete"
@click="popupRemove(f.id)"
><q-tooltip>ลบเอกสาร</q-tooltip></q-btn
>

View file

@ -16,6 +16,10 @@ const disciplinaryEdit = () =>
import(
"@/modules/11_discipline/components/3_InvestigateDisciplinary/EditPage.vue"
);
const disciplinaryDetail = () =>
import(
"@/modules/11_discipline/components/3_InvestigateDisciplinary/EditPage.vue"
);
// const report = () =>
// import("@/modules/11_discipline/components/5_Report/MainPage.vue");
const directorMain = () =>
@ -62,6 +66,8 @@ const resultMainPage = () =>
import("@/modules/11_discipline/components/4_Result/MainPage.vue");
const resultEditPage = () =>
import("@/modules/11_discipline/components/4_Result/EditPage.vue");
const resultDetailPage = () =>
import("@/modules/11_discipline/components/4_Result/EditPage.vue");
// รายชื่อผู้ถูกพักราชการ
const listSuspendMainPage = () =>
@ -183,6 +189,16 @@ export default [
Role: "STAFF",
},
},
{
path: "/discipline-detail/disciplinary/:id",
name: "disciplineDisciplinaryDetail",
component: disciplinaryDetail,
meta: {
Auth: true,
Key: "SYS_DISCIPLINE_INTERROGATE",
Role: "STAFF",
},
},
// {
// path: "/discipline/disciplinary/add",
// name: "disciplineInvestigateDisciplinaryAdd",
@ -213,6 +229,16 @@ export default [
Role: "STAFF",
},
},
{
path: "/discipline-result-detail/:id",
name: "disciplineResultDetail",
component: resultDetailPage,
meta: {
Auth: true,
Key: "SYS_DISCIPLINE_RESULT",
Role: "STAFF",
},
},
// {
// path: "/discipline/report",
// name: "disciplineReport",

View file

@ -68,7 +68,6 @@ const formIndicators = reactive<FormIndicators>({
results: "",
obstacles: "",
suggestions: "",
result: "",
});
/** ข้อมูล Table */
const rows = ref<DevelopmentEvaluations[]>([]); //
@ -120,11 +119,11 @@ const columns = ref<QTableProps["columns"]>([
style: "font-size: 14px ; ",
},
{
name: "result",
name: "results",
align: "left",
label: "ผลการดำเนินการ",
sortable: true,
field: "result",
field: "results",
headerStyle: "font-size: 14px",
style: "font-size: 14px ; ",
},
@ -233,7 +232,7 @@ function onSubmitIndicators() {
http
.put(config.API.developmentMainTab(path, id), {
...formIndicators,
result: status.value === "FINISH" ? formIndicators.result : undefined,
results: status.value === "FINISH" ? formIndicators.results : undefined,
})
.then(() => {
success($q, "บันทึกข้อมูลสำเร็จ");
@ -485,7 +484,13 @@ defineExpose({
<q-card style="width: 900px; max-width: 80vw">
<q-form greedy @submit.prevent @validation-success="onSubmitIndicators">
<DialogHeader
:tittle="isEdit ? 'แก้ไขตัวชี้วัด' : 'เพิ่มตัวชี้วัด'"
:tittle="
isEdit && typeAction === 'result'
? 'ผลการดำเนินการ'
: isEdit
? 'แก้ไขตัวชี้วัด'
: 'เพิ่มตัวชี้วัด'
"
:close="closeDialog"
/>
<q-separator />
@ -500,7 +505,7 @@ defineExpose({
outlined
class="inputgreen"
label="ผลการดำเนิดการ"
v-model="formIndicators.result"
v-model="formIndicators.results"
hide-bottom-space
lazy-rules
:rules="[

View file

@ -314,6 +314,7 @@ function onSubmit() {
http
.put(config.API.developmentMainTab("tab3", projectId.value), {
...formData,
totalDate: formData.totalDate === "" ? null : formData.totalDate,
reasonPlanned70: reasonPlanned70.value,
reasonPlanned20: reasonPlanned20.value,
reasonPlanned10: reasonPlanned10.value,
@ -376,14 +377,11 @@ const filterSelector = (val: string, update: Function) => {
});
};
watch(
() => [formData.dateStart, formData.dateEnd],
() => {
if (formData.dateStart && formData.dateEnd) {
formData.totalDate = diffDay(formData.dateStart, formData.dateEnd);
}
function updatetotalDate() {
if (formData.dateStart && formData.dateEnd) {
formData.totalDate = diffDay(formData.dateStart, formData.dateEnd);
}
);
}
/**
* function ไปย Tab อไป
@ -586,7 +584,9 @@ defineExpose({
:enableTimePicker="false"
week-start="0"
:max-date="formData.dateEnd"
@update:model-value="props.onCheckChangeData()"
@update:model-value="
props.onCheckChangeData(), updatetotalDate()
"
>
<template #year="{ year }">{{ year + 543 }}</template>
<template #year-overlay-value="{ value }">{{
@ -628,7 +628,9 @@ defineExpose({
:enableTimePicker="false"
week-start="0"
:min-date="formData.dateStart"
@update:model-value="props.onCheckChangeData()"
@update:model-value="
props.onCheckChangeData(), updatetotalDate()
"
>
<template #year="{ year }">{{ year + 543 }}</template>
<template #year-overlay-value="{ value }">{{

View file

@ -89,7 +89,7 @@ interface FormProjectDetail {
strategyChildActualNode: number | null; //node ยุทธศาสตร์เป้าหมายตามจริง
dateStart: Date | null; //วันที่เริ่มต้น
dateEnd: Date | null; //วันที่สิ้นสุด
totalDate: number | null; //รวมระยะเวลา (วัน)
totalDate: number | null | string; //รวมระยะเวลา (วัน)
developmentAddresss: [{ address: string; provinceId: string }]; //ที่อยู่ ,จังหวัด
}

View file

@ -7,7 +7,6 @@ interface FormIndicators {
results: string;
obstacles: string;
suggestions: string;
result: string;
}
interface FormProject {

View file

@ -1,6 +1,7 @@
<script setup lang="ts">
import { ref, onMounted, reactive, watch } from "vue";
import { ref, onMounted } from "vue";
import { useQuasar } from "quasar";
import { checkPermission } from "@/utils/permissions";
import http from "@/plugins/http";
import config from "@/app.config";
@ -27,7 +28,9 @@ const nodeTree = ref<DataTree[]>([]);
const posmasterId = ref<string>("");
const isAll = ref<boolean>(false);
/** function เรียกข้อมูลโครงสร้าง แบบปัจุบัน*/
/**
* function เรยกขอมลโครงสราง แบบป
*/
function fetchOrganizationActive() {
showLoader();
http
@ -140,7 +143,9 @@ const columns = ref<QTableProps["columns"]>([
]);
const keyword = ref<string>("");
/** function fetch รายชื่อ*/
/**
* function fetch รายช
*/
function fetchPosMaster() {
showLoader();
http
@ -185,11 +190,13 @@ function selectPosition(data: ListPerson) {
});
}
/** รายชื่อคนรักษาการ*/
/********** รายชื่อคนรักษาการ **************/
const rowListPerson = ref<ListPerson[]>([]);
const keywordAct = ref<string>("");
/** function fetch รายชื่อรักษาการ */
/**
* function fetch รายชอรกษาการ
*/
function fetchListAct() {
showLoader();
http
@ -254,6 +261,7 @@ onMounted(() => {
</div>
<q-card style="height: 100%">
<q-card-section :horizontal="$q.screen.gt.sm">
<!-- โครงสราง -->
<q-card-section class="col-lg-3 col-md-4 col-xs-12 q-gutter-sm">
<div>
<q-input dense outlined v-model="filter" label="ค้นหา">
@ -305,7 +313,7 @@ onMounted(() => {
<div v-if="prop.node.posMaster">
<q-list dense v-for="col in prop.node.posMaster">
<q-item
clickable
:clickable="checkPermission($route)?.attrIsGet"
:active="posmasterId == col.posmasterId"
:class="posmasterId !== col.posmasterId ? 'text-info' : ''"
active-class="my-list-link text-primary text-weight-medium"
@ -325,6 +333,7 @@ onMounted(() => {
<q-separator :vertical="$q.screen.gt.xs" />
<!-- รายช -->
<q-card-section
v-if="posmasterId"
class="col-lg-9 col-md-8 col-xs-12 scroll"
@ -390,12 +399,21 @@ onMounted(() => {
</q-tr>
</template>
<template v-slot:body="props">
<q-tr :props="props" class="cursor-pointer">
<q-tr
:props="props"
:class="
checkPermission($route)?.attrIsUpdate &&
'cursor-pointer'
"
>
<q-td
v-for="col in props.cols"
:key="col.name"
:props="props"
@click="selectPosition(props.row)"
@click="
checkPermission($route)?.attrIsUpdate &&
selectPosition(props.row)
"
>
<div v-if="col.name === 'no'">
{{ props.rowIndex + 1 }}
@ -464,8 +482,20 @@ onMounted(() => {
>
<template v-slot:header="props">
<q-tr :props="props">
<q-th auto-width v-if="rowListPerson.length !== 1" />
<q-th auto-width v-if="rowListPerson.length !== 1" />
<q-th
auto-width
v-if="
rowListPerson.length !== 1 &&
checkPermission($route)?.attrIsUpdate
"
/>
<q-th
auto-width
v-if="
rowListPerson.length !== 1 &&
checkPermission($route)?.attrIsUpdate
"
/>
<q-th auto-width />
<q-th
v-for="col in props.cols"
@ -479,11 +509,16 @@ onMounted(() => {
</q-tr>
</template>
<template v-slot:body="props">
<q-tr :props="props" class="cursor-pointer">
<q-td auto-width v-if="rowListPerson.length !== 1">
<q-tr :props="props">
<q-td
auto-width
v-if="
rowListPerson.length !== 1 &&
checkPermission($route)?.attrIsUpdate
"
>
<q-btn
dense
size="12px"
flat
round
:color="props.rowIndex + 1 == 1 ? 'grey' : 'green'"
@ -494,10 +529,15 @@ onMounted(() => {
<!-- <q-tooltip>เลอนลำดบข</q-tooltip> -->
</q-btn>
</q-td>
<q-td auto-width v-if="rowListPerson.length !== 1">
<q-td
auto-width
v-if="
rowListPerson.length !== 1 &&
checkPermission($route)?.attrIsUpdate
"
>
<q-btn
dense
size="12px"
flat
round
:color="
@ -514,10 +554,10 @@ onMounted(() => {
<!-- <q-tooltip>เลอนลำดบลง</q-tooltip> -->
</q-btn>
</q-td>
<q-td>
<q-td auto-width>
<q-btn
v-if="checkPermission($route)?.attrIsDelete"
dense
size="12px"
flat
round
color="red"
@ -539,7 +579,6 @@ onMounted(() => {
{{ col.value ? col.value : "-" }}
</div>
</q-td>
</q-tr>
</template>
<!-- <template v-slot:pagination="scope">