จัดโค้ด

This commit is contained in:
setthawutttty 2023-12-08 14:26:16 +07:00
parent a5335df0b6
commit a42d7b91ba
12 changed files with 216 additions and 413 deletions

View file

@ -5,6 +5,7 @@ import PopupSendToNext from "@/modules/11_discipline/components/PopupSendToNext.
import { useRouter, useRoute } from "vue-router"; import { useRouter, useRoute } from "vue-router";
import { useQuasar } from "quasar"; import { useQuasar } from "quasar";
import type { QTableProps } from "quasar"; import type { QTableProps } from "quasar";
import config from "@/app.config"; import config from "@/app.config";
import http from "@/plugins/http"; import http from "@/plugins/http";
@ -17,17 +18,16 @@ import { useCounterMixin } from "@/stores/mixin";
import { useComplainstDataStore } from "@/modules/11_discipline/store/ComplaintsStore"; import { useComplainstDataStore } from "@/modules/11_discipline/store/ComplaintsStore";
import { useDisciplineMainStore } from "@/modules/11_discipline/store/main"; import { useDisciplineMainStore } from "@/modules/11_discipline/store/main";
const complainstStore = useComplainstDataStore();
const mainStore = useDisciplineMainStore(); const mainStore = useDisciplineMainStore();
const $q = useQuasar(); const $q = useQuasar();
const mixin = useCounterMixin(); const mixin = useCounterMixin();
const { const {
dialogConfirm, dialogConfirm,
showLoader, showLoader,
hideLoader, hideLoader,
success, success,
messageError, messageError
dialogMessageNotify,
} = mixin; } = mixin;
const router = useRouter(); const router = useRouter();
const route = useRoute(); const route = useRoute();
@ -164,6 +164,7 @@ const visibleColumns = ref<string[]>([
"organization", "organization",
]); ]);
/** ดึงข้อมูล */
async function getData() { async function getData() {
showLoader(); showLoader();
await http await http
@ -195,6 +196,7 @@ async function getData() {
hideLoader(); hideLoader();
}); });
} }
/** ฟังชั่น แก้ไข */ /** ฟังชั่น แก้ไข */
async function onSubmit(data: any) { async function onSubmit(data: any) {
showLoader(); showLoader();
@ -210,7 +212,6 @@ async function onSubmit(data: any) {
getData(); getData();
hideLoader(); hideLoader();
}); });
// router.push(`/discipline/complaints`);
} }
/** ยืนยัน มีมูลส่งไปสืบสวน */ /** ยืนยัน มีมูลส่งไปสืบสวน */
@ -227,6 +228,7 @@ function sentInvestigate() {
} }
} }
/** ส่งไปสืบสวน */
function sentConfirmNoPerson() { function sentConfirmNoPerson() {
showLoader(); showLoader();
http http
@ -244,6 +246,7 @@ function sentConfirmNoPerson() {
}); });
} }
/** ปิด dialog */
function closePopup() { function closePopup() {
modalPopup.value = false; modalPopup.value = false;
} }
@ -379,4 +382,4 @@ onMounted(() => {
/> />
</div> </div>
</template> </template>
@/modules/11_discipline/store/store @/modules/11_discipline/store/store

View file

@ -1,23 +1,21 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, onMounted, reactive, watch, watchEffect } from "vue"; import { ref, onMounted, reactive, watch, watchEffect } from "vue";
import { useQuasar } from "quasar"; import { useQuasar } from "quasar";
/** import Type */ /** import Type */
import type { DataOption } from "@/modules/11_discipline/interface/index/Main"; import type { DataOption } from "@/modules/11_discipline/interface/index/Main";
import type { import type { FormData, MyObjectComplaintsRef, ArrayFileList } from "@/modules/11_discipline/interface/request/complaint";
FormData,
MyObjectComplaintsRef,
ArrayFileList,
} from "@/modules/11_discipline/interface/request/complaint";
/** importStroe*/ /** importStroe*/
import { useCounterMixin } from "@/stores/mixin"; import { useCounterMixin } from "@/stores/mixin";
import { useComplainstDataStore } from "@/modules/11_discipline/store/ComplaintsStore"; import { useComplainstDataStore } from "@/modules/11_discipline/store/ComplaintsStore";
import { useDisciplineMainStore } from "@/modules/11_discipline/store/main"; import { useDisciplineMainStore } from "@/modules/11_discipline/store/main";
import DialogAddPersonal from "@/components/Dialogs/AddPersonal.vue";
import config from "@/app.config"; import config from "@/app.config";
import http from "@/plugins/http"; import http from "@/plugins/http";
import DialogAddPersonal from "@/components/Dialogs/AddPersonal.vue";
const $q = useQuasar(); const $q = useQuasar();
const fileDocDataUpload = ref<File[]>([]); const fileDocDataUpload = ref<File[]>([]);
@ -54,8 +52,8 @@ const resultRef = ref<Object | null>(null);
const isSave = ref<boolean>(false); // const isSave = ref<boolean>(false); //
const isReadonly = ref<boolean>(false); // const isReadonly = ref<boolean>(false); //
const fileList = ref<ArrayFileList[]>([]); const fileList = ref<ArrayFileList[]>([]);
/** รับ props มาจากหน้าหลัก */ /** รับ props มาจากหน้าหลัก */
const props = defineProps({ const props = defineProps({
data: { data: {
@ -340,7 +338,10 @@ function changeFormData() {
isSave.value = props.data != null ?? true; isSave.value = props.data != null ?? true;
} }
function inputEdit(val:boolean){ /** readonly
* @param val true/false
*/
function inputEdit(val: boolean) {
return { return {
"full-width cursor-pointer ": val, "full-width cursor-pointer ": val,
"full-width cursor-pointer inputgreen": !val, "full-width cursor-pointer inputgreen": !val,
@ -375,7 +376,7 @@ onMounted(() => {
<div class="col-xs-12 col-sm-12 row q-col-gutter-md"> <div class="col-xs-12 col-sm-12 row q-col-gutter-md">
<div class="col-xs-12 col-sm-4" id="respondentType"> <div class="col-xs-12 col-sm-4" id="respondentType">
<q-select <q-select
:class="inputEdit(isReadonly)" :class="inputEdit(isReadonly)"
for="SelectrespondentType" for="SelectrespondentType"
v-model="formData.respondentType" v-model="formData.respondentType"
ref="respondentTypeRef" ref="respondentTypeRef"
@ -413,7 +414,7 @@ onMounted(() => {
id="organizationId" id="organizationId"
> >
<q-select <q-select
:class="inputEdit(isReadonly)" :class="inputEdit(isReadonly)"
for="inputOffice" for="inputOffice"
name="organizationId" name="organizationId"
ref="organizationIdRef" ref="organizationIdRef"
@ -436,7 +437,7 @@ onMounted(() => {
<div class="col-xs-12 col-sm-4" id="consideredAgency"> <div class="col-xs-12 col-sm-4" id="consideredAgency">
<q-select <q-select
:class="inputEdit(isReadonly)" :class="inputEdit(isReadonly)"
ref="consideredAgencyRef" ref="consideredAgencyRef"
for="selectAgency" for="selectAgency"
dense dense
@ -467,6 +468,7 @@ onMounted(() => {
</template> </template>
</q-select> </q-select>
</div> </div>
<div <div
class="row col-12" class="row col-12"
v-if="formData.respondentType === 'PERSON'" v-if="formData.respondentType === 'PERSON'"
@ -495,6 +497,7 @@ onMounted(() => {
</q-btn> </q-btn>
</div> </div>
<div class="col-12"><q-separator /></div> <div class="col-12"><q-separator /></div>
<div class="col-xs-12 q-pa-sm"> <div class="col-xs-12 q-pa-sm">
<d-table <d-table
ref="table" ref="table"
@ -574,6 +577,7 @@ onMounted(() => {
</div> </div>
</q-card> </q-card>
</div> </div>
<div class="col-xs-12 col-sm-12" id="title"> <div class="col-xs-12 col-sm-12" id="title">
<q-input <q-input
for="inputTopicComplaint" for="inputTopicComplaint"
@ -595,7 +599,7 @@ onMounted(() => {
<div class="col-xs-12 col-sm-12" id="description"> <div class="col-xs-12 col-sm-12" id="description">
<q-input <q-input
:class="inputEdit(isReadonly)" :class="inputEdit(isReadonly)"
for="inputDetail" for="inputDetail"
ref="descriptionRef" ref="descriptionRef"
dense dense
@ -665,7 +669,7 @@ onMounted(() => {
<div class="col-xs-12 col-sm-3" id="levelConsideration"> <div class="col-xs-12 col-sm-3" id="levelConsideration">
<q-select <q-select
:class="inputEdit(isReadonly)" :class="inputEdit(isReadonly)"
for="selectConsiderationLevel" for="selectConsiderationLevel"
ref="levelConsiderationRef" ref="levelConsiderationRef"
dense dense
@ -743,7 +747,7 @@ onMounted(() => {
<div class="col-xs-12 col-sm-3" id="offenseDetails"> <div class="col-xs-12 col-sm-3" id="offenseDetails">
<q-select <q-select
:class="inputEdit(isReadonly)" :class="inputEdit(isReadonly)"
for="selectOffenseDescription" for="selectOffenseDescription"
ref="offenseDetailsRef" ref="offenseDetailsRef"
dense dense
@ -817,7 +821,7 @@ onMounted(() => {
<div class="col-xs-12 col-sm-3" id="complaintFrom"> <div class="col-xs-12 col-sm-3" id="complaintFrom">
<q-select <q-select
:class="inputEdit(isReadonly)" :class="inputEdit(isReadonly)"
for="selectReceivecomplaints" for="selectReceivecomplaints"
ref="complaintFromRef" ref="complaintFromRef"
dense dense
@ -841,7 +845,7 @@ onMounted(() => {
<div class="col-xs-12 col-sm-12" id="appellant"> <div class="col-xs-12 col-sm-12" id="appellant">
<q-input <q-input
:class="inputEdit(isReadonly)" :class="inputEdit(isReadonly)"
for="inputPetitioner" for="inputPetitioner"
ref="appellantRef" ref="appellantRef"
dense dense
@ -859,7 +863,7 @@ onMounted(() => {
</div> </div>
<div class="col-xs-12 col-sm-12"> <div class="col-xs-12 col-sm-12">
<q-input <q-input
:class="inputEdit(isReadonly)" :class="inputEdit(isReadonly)"
:readonly="isReadonly" :readonly="isReadonly"
for="result" for="result"
ref="resultRef" ref="resultRef"
@ -896,6 +900,7 @@ onMounted(() => {
</div> </div>
</form> </form>
</div> </div>
<!-- พโหลดไฟล --> <!-- พโหลดไฟล -->
<div class="col-sm-12 col-md-3"> <div class="col-sm-12 col-md-3">
<q-card flat class="q-pa-md" bordered> <q-card flat class="q-pa-md" bordered>

View file

@ -2,11 +2,14 @@
import { ref, onMounted, watch } from "vue"; import { ref, onMounted, watch } from "vue";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import { useQuasar } from "quasar"; import { useQuasar } from "quasar";
import { useCounterMixin } from "@/stores/mixin";
// importStroe // importStroe
import { useCounterMixin } from "@/stores/mixin";
import { useComplainstDataStore } from "@/modules/11_discipline/store/ComplaintsStore"; import { useComplainstDataStore } from "@/modules/11_discipline/store/ComplaintsStore";
// impoet Components // impoet Components
import TableComplaint from "@/modules/11_discipline/components/1_Complaint/TableComplaint.vue"; import TableComplaint from "@/modules/11_discipline/components/1_Complaint/TableComplaint.vue";
import config from "@/app.config"; import config from "@/app.config";
import http from "@/plugins/http"; import http from "@/plugins/http";
@ -89,7 +92,6 @@ onMounted(async () => {
><q-tooltip>เพมเรองรองเรยน </q-tooltip></q-btn ><q-tooltip>เพมเรองรองเรยน </q-tooltip></q-btn
> >
</div> </div>
<q-space /> <q-space />
<q-input <q-input

View file

@ -120,12 +120,6 @@ const visibleColumns = ref<string[]>([
"status", "status",
]); ]);
/** เริ่มโหลดหน้า page เอาข้อมูลไปเก็บ ใน store*/
onMounted(() => {
complainstStore.columns = columns.value;
complainstStore.visibleColumns = visibleColumns.value;
});
/** แสดงจำนวนในตาราง */ /** แสดงจำนวนในตาราง */
const pagination = ref({ const pagination = ref({
descending: true, descending: true,
@ -141,7 +135,7 @@ function OpenEdit(id: string) {
router.push(`/discipline/complaints/${id}`); router.push(`/discipline/complaints/${id}`);
} }
const updateProp = (newPagination: any, page: number) => { function updateProp(newPagination: any, page: number){
// event parent component props // event parent component props
emit("update:pagination", newPagination, page); emit("update:pagination", newPagination, page);
}; };
@ -160,6 +154,12 @@ watch(
updateProp(pagination.value.rowsPerPage, currentPage.value); updateProp(pagination.value.rowsPerPage, currentPage.value);
} }
); );
/** เริ่มโหลดหน้า page เอาข้อมูลไปเก็บ ใน store*/
onMounted(() => {
complainstStore.columns = columns.value;
complainstStore.visibleColumns = visibleColumns.value;
});
</script> </script>
<template> <template>

View file

@ -23,6 +23,11 @@ const { monthYear2Thai, showLoader, hideLoader, messageError, dateToISO } =
const $q = useQuasar(); const $q = useQuasar();
const title = ref("");
const fullCalendar = ref<any>(); //ref calendar
const modalCancel = ref(false);
const modeCancel = ref(true);
const props = defineProps({ const props = defineProps({
lists: { lists: {
type: Array as PropType<ExtendHistoryObject[]>, type: Array as PropType<ExtendHistoryObject[]>,
@ -38,7 +43,6 @@ const props = defineProps({
}, },
}); });
const fullCalendar = ref<any>(); //ref calendar
const calendarOptions = ref<CalendarOptions>({ const calendarOptions = ref<CalendarOptions>({
plugins: [ plugins: [
dayGridPlugin, dayGridPlugin,
@ -99,7 +103,7 @@ async function fetchCalendar() {
id: index.toString(), id: index.toString(),
title: e.name, title: e.name,
start: e.dateStart, start: e.dateStart,
end: moment(e.dateEnd).format("YYYY-MM-DD")+ " 23:59:59", end: moment(e.dateEnd).format("YYYY-MM-DD") + " 23:59:59",
allDay: false, allDay: false,
color: color:
props.lists.length > 1 && index > 0 props.lists.length > 1 && index > 0
@ -119,45 +123,6 @@ async function fetchCalendar() {
}, 1000); }, 1000);
} }
// async function fetchCalendar() {
// showLoader();
// await http
// .post(config.API.investigateCalendar(), {
// year: dateMonth.value.year,
// month: dateMonth.value.month,
// })
// .then((res) => {
// const data = res.data.result;
// const defaultColor = "#02A998";
// const gradientColors = generateGradientColors(data.length);
// const events = data.map((e: CaledarInvestigatefacts, index: number) => ({
// id: e.id,
// title: e.title,
// start: e.investigationDateStart,
// end: e.investigationDateEnd,
// allDay: true,
// color:
// data.length > 1 && index > 0 ? gradientColors[index] : defaultColor,
// }));
// calendarOptions.value.events = events;
// })
// .catch((err) => {
// messageError($q, err);
// })
// .finally(() => {
// setTimeout(() => {
// if (fullCalendar !== undefined) {
// const calen = fullCalendar.value.getApi();
// const date = new Date(dateMonth.value.year, dateMonth.value.month);
// calen.gotoDate(date);
// }
// hideLoader();
// }, 1000);
// });
// }
function generateGradientColors(length: number) { function generateGradientColors(length: number) {
const colors = []; const colors = [];
for (let i = 0; i < length; i++) { for (let i = 0; i < length; i++) {
@ -185,20 +150,6 @@ async function view(text: string) {
modeCancel.value = false; modeCancel.value = false;
} }
watch(
() => props.modal,
async () => {
props.modal && (await fetchCalendar());
}
);
/**
* วแปรทงหมด
*/
const modalCancel = ref(false);
const title = ref("");
const modeCancel = ref(true);
function gotoPrevMonth() { function gotoPrevMonth() {
const calen = fullCalendar.value.getApi(); const calen = fullCalendar.value.getApi();
calen.prev(); calen.prev();
@ -218,6 +169,13 @@ function updateDateMonth(date: Date) {
dateMonth.value.month = date.getMonth(); dateMonth.value.month = date.getMonth();
fetchCalendar(); fetchCalendar();
} }
watch(
() => props.modal,
async () => {
props.modal && (await fetchCalendar());
}
);
</script> </script>
<template> <template>
@ -245,40 +203,6 @@ function updateDateMonth(date: Date) {
<div class="col-12"> <div class="col-12">
<div class="row q-gutter-sm q-pb-sm main-content"> <div class="row q-gutter-sm q-pb-sm main-content">
<div class="demo-app-main q-mb-xl"> <div class="demo-app-main q-mb-xl">
<!-- <div class="row col-12 q-mb-sm">
<div class="col-xs-12 col-sm-3 col-md-2">
<datepicker
v-model="dateMonth"
:locale="'th'"
autoApply
month-picker
:enableTimePicker="false"
@update:modelValue="changCalendar"
>
<template #year="{ year }">{{ year + 543 }}</template>
<template #year-overlay-value="{ value }">{{
parseInt(value + 543)
}}</template>
<template #trigger>
<q-input
:model-value="monthYearThai(dateMonth)"
dense
outlined
style="width: 130px"
>
<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> -->
<div class="row q-mb-sm justify-between"> <div class="row q-mb-sm justify-between">
<q-btn <q-btn
size="12px" size="12px"
@ -316,22 +240,12 @@ function updateDateMonth(date: Date) {
class="row col-12 items-center no-wrap" class="row col-12 items-center no-wrap"
:style="`background: + ${arg.event.color}`" :style="`background: + ${arg.event.color}`"
> >
<!-- <b>{{ arg.timeText }}</b> -->
<div <div
class="textHover col-10" class="textHover col-10"
@click="view(arg.event.title)" @click="view(arg.event.title)"
> >
{{ arg.event.title }} {{ arg.event.title }}
</div> </div>
<!-- <q-btn
dense
v-if="arg.event.groupId == 1"
icon="mdi-close"
flat
round
size="8px"
@click="cancel(arg.event.title)"
/> -->
</div> </div>
</template> </template>
</FullCalendar> </FullCalendar>
@ -359,12 +273,9 @@ function updateDateMonth(date: Date) {
.demo-app-main { .demo-app-main {
flex-grow: 1; flex-grow: 1;
/* padding: 3em; */
} }
.fc { .fc {
/* the calendar root */
max-width: 1100px; max-width: 1100px;
margin: 0 auto; margin: 0 auto;
background-color: white; background-color: white;
@ -379,13 +290,6 @@ function updateDateMonth(date: Date) {
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
/* border: 2px solid #17a259; */
/* border-radius: 50%;
height: 25px;
width: 25px;
font-weight: bold;
color: white !important;
background: #17a259; */
} }
.fc-day-today .fc-daygrid-day-frame { .fc-day-today .fc-daygrid-day-frame {

View file

@ -198,6 +198,7 @@ const monthYearThai = (val: DataDateMonthObject) => {
</datepicker> </datepicker>
</div> </div>
</div> </div>
<FullCalendar <FullCalendar
ref="fullCalendar" ref="fullCalendar"
class="demo-app-calendar" class="demo-app-calendar"
@ -208,41 +209,14 @@ const monthYearThai = (val: DataDateMonthObject) => {
class="row col-12 items-center no-wrap" class="row col-12 items-center no-wrap"
:style="`background: + ${arg.event.color}`" :style="`background: + ${arg.event.color}`"
> >
<!-- <b>{{ arg.timeText }}</b> -->
<div class="textHover col-10" @click="view(arg.event.title)"> <div class="textHover col-10" @click="view(arg.event.title)">
{{ arg.event.title }} {{ arg.event.title }}
</div> </div>
<!-- <q-btn
dense
v-if="arg.event.groupId == 1"
icon="mdi-close"
flat
round
size="8px"
@click="cancel(arg.event.title)"
/> -->
</div> </div>
</template> </template>
</FullCalendar> </FullCalendar>
<div class="row q-col-gutter-lg justify-end q-pb-lg"> <div class="row q-col-gutter-lg justify-end q-pb-lg">
<!-- <div class="items-center row">
<q-icon
size="10px"
color="light-green"
name="mdi-circle"
class="q-mr-sm"
/>
<span class="text-caption text-grey-8">สถานะอน</span>
</div> -->
<!-- <div class="items-center row">
<q-icon
size="10px"
color="red-6"
name="mdi-circle"
class="q-mr-sm"
/>
<span class="text-caption text-grey-8">สถานะไมอน</span>
</div> -->
<div class="items-center row"> <div class="items-center row">
<q-icon <q-icon
size="10px" size="10px"
@ -252,15 +226,6 @@ const monthYearThai = (val: DataDateMonthObject) => {
/> />
<span class="text-caption text-grey-8">บสวน</span> <span class="text-caption text-grey-8">บสวน</span>
</div> </div>
<!-- <div class="items-center row">
<q-icon
size="10px"
color="orange"
name="mdi-circle"
class="q-mr-sm"
/>
<span class="text-caption text-grey-8">สถานะใหม</span>
</div> -->
</div> </div>
</div> </div>
</div> </div>
@ -287,6 +252,7 @@ const monthYearThai = (val: DataDateMonthObject) => {
/> />
</q-card-section> </q-card-section>
<q-separator /> <q-separator />
<q-card-section class="q-p-md row q-gutter-y-md"> <q-card-section class="q-p-md row q-gutter-y-md">
<div flat :class="modeCancel == true ? 'col-xs-6 col-sm-6' : 'col-12'"> <div flat :class="modeCancel == true ? 'col-xs-6 col-sm-6' : 'col-12'">
<div class="col-12 q-col-gutter-sm row items-center"> <div class="col-12 q-col-gutter-sm row items-center">
@ -306,6 +272,7 @@ const monthYearThai = (val: DataDateMonthObject) => {
<div class="col-6 text-black">{{ phone }}</div> <div class="col-6 text-black">{{ phone }}</div>
</div> </div>
</div> </div>
<div flat class="col-xs-6 col-sm-6" v-if="modeCancel == true"> <div flat class="col-xs-6 col-sm-6" v-if="modeCancel == true">
<q-input <q-input
v-model="reason" v-model="reason"
@ -329,6 +296,7 @@ const monthYearThai = (val: DataDateMonthObject) => {
</div> </div>
</q-card-section> </q-card-section>
<q-separator /> <q-separator />
<q-card-section <q-card-section
class="row items-center q-pa-sm" class="row items-center q-pa-sm"
v-if="modeCancel == true" v-if="modeCancel == true"
@ -381,13 +349,6 @@ const monthYearThai = (val: DataDateMonthObject) => {
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
/* border: 2px solid #17a259; */
/* border-radius: 50%;
height: 25px;
width: 25px;
font-weight: bold;
color: white !important;
background: #17a259; */
} }
.fc-day-today .fc-daygrid-day-frame { .fc-day-today .fc-daygrid-day-frame {

View file

@ -27,6 +27,7 @@ const { dialogConfirm, showLoader, success, hideLoader, messageError } = mixin;
const route = useRoute(); const route = useRoute();
const router = useRouter(); const router = useRouter();
const id = ref<string>(route.params.id as string); const id = ref<string>(route.params.id as string);
const modalPopup = ref<boolean>(false);
/** ข้อมูล v-model ของฟอร์มสืบสวน */ /** ข้อมูล v-model ของฟอร์มสืบสวน */
const data = reactive<FormData>({ const data = reactive<FormData>({
@ -161,7 +162,8 @@ function getData() {
data.investigationStatusResult = dataList.investigationStatusResult; data.investigationStatusResult = dataList.investigationStatusResult;
data.investigationExtendStatus = dataList.investigationExtendStatus; data.investigationExtendStatus = dataList.investigationExtendStatus;
data.investigationDaysExtend = dataList.investigationDaysExtend; data.investigationDaysExtend = dataList.investigationDaysExtend;
data.investigationExtendHistory = dataList.investigationExtendHistory ?? []; data.investigationExtendHistory =
dataList.investigationExtendHistory ?? [];
// console.log(dataList); // console.log(dataList);
}) })
.catch((e) => { .catch((e) => {
@ -195,7 +197,6 @@ async function onSubmit(data: any) {
// router.push(`/discipline/investigatefacts`); // router.push(`/discipline/investigatefacts`);
} }
const modalPopup = ref<boolean>(false);
/** ยืนยัน ส่งไปสอบสวน */ /** ยืนยัน ส่งไปสอบสวน */
function sentInvestigate() { function sentInvestigate() {
if (mainStore.rowsAdd.length > 0) { if (mainStore.rowsAdd.length > 0) {
@ -341,6 +342,7 @@ watch(
/> />
<div class="q-ma-none">แกไขรายการสบสวนขอเทจจร</div> <div class="q-ma-none">แกไขรายการสบสวนขอเทจจร</div>
<q-space /> <q-space />
<div class="q-gutter-x-sm"> <div class="q-gutter-x-sm">
<q-btn <q-btn
v-if="data.status === 'NEW'" v-if="data.status === 'NEW'"
@ -362,6 +364,7 @@ watch(
/> />
</div> </div>
</div> </div>
<q-card flat class="col-12"> <q-card flat class="col-12">
<q-tabs <q-tabs
v-model="store.tabMenu" v-model="store.tabMenu"

View file

@ -487,7 +487,9 @@ function calendarOpen() {
calendarModal.value = true; calendarModal.value = true;
} }
/** readonly
* @param val true/false
*/
function inputEdit(val:boolean){ function inputEdit(val:boolean){
return { return {
"full-width cursor-pointer ": val, "full-width cursor-pointer ": val,
@ -495,6 +497,9 @@ function inputEdit(val:boolean){
}; };
} }
/** readonly
* @param val true/false
*/
function inputEditExtend(val: boolean) { function inputEditExtend(val: boolean) {
if (formData.investigationExtendHistory.length > 0) { if (formData.investigationExtendHistory.length > 0) {
return { return {
@ -516,6 +521,7 @@ onMounted(async () => {
<template> <template>
<div class="row col-12 bg-white"> <div class="row col-12 bg-white">
<div class="col-sm-12 col-md-9"> <div class="col-sm-12 col-md-9">
<div v-if="isSave" class="q-pa-sm q-gutter-sm"> <div v-if="isSave" class="q-pa-sm q-gutter-sm">
<q-banner <q-banner
inline-actions inline-actions
@ -526,11 +532,13 @@ onMounted(async () => {
งไมไดนทกขอม งไมไดนทกขอม
</q-banner> </q-banner>
</div> </div>
<form @submit.prevent="validateForm"> <form @submit.prevent="validateForm">
<div class="col-12"> <div class="col-12">
<q-card bordered> <q-card bordered>
<div class="col-12 row q-pa-md q-col-gutter-md"> <div class="col-12 row q-pa-md q-col-gutter-md">
<div class="col-xs-12 row q-col-gutter-md"> <div class="col-xs-12 row q-col-gutter-md">
<div class="col-xs-12 col-sm-3" id="respondentType"> <div class="col-xs-12 col-sm-3" id="respondentType">
<q-select <q-select
:class="inputEdit(isReadonly)" :class="inputEdit(isReadonly)"
@ -621,6 +629,7 @@ onMounted(async () => {
</div> </div>
<div class="col-12"><q-separator /></div> <div class="col-12"><q-separator /></div>
<div class="col-xs-12 q-pa-sm"> <div class="col-xs-12 q-pa-sm">
<d-table <d-table
ref="table" ref="table"
:columns="mainStore.columnsRespondent" :columns="mainStore.columnsRespondent"

View file

@ -22,7 +22,9 @@ const { monthYear2Thai, showLoader, hideLoader, messageError, dateToISO } =
mixin; mixin;
const $q = useQuasar(); const $q = useQuasar();
const modalCancel = ref(false);
const title = ref("");
const modeCancel = ref(true);
const props = defineProps({ const props = defineProps({
lists: { lists: {
type: Array as PropType<ExtendHistoryObject[]>, type: Array as PropType<ExtendHistoryObject[]>,
@ -99,7 +101,7 @@ async function fetchCalendar() {
id: index.toString(), id: index.toString(),
title: e.name, title: e.name,
start: e.dateStart, start: e.dateStart,
end: moment(e.dateEnd).format("YYYY-MM-DD")+ " 23:59:59", end: moment(e.dateEnd).format("YYYY-MM-DD") + " 23:59:59",
allDay: false, allDay: false,
color: color:
props.lists.length > 1 && index > 0 props.lists.length > 1 && index > 0
@ -119,45 +121,6 @@ async function fetchCalendar() {
}, 1000); }, 1000);
} }
// async function fetchCalendar() {
// showLoader();
// await http
// .post(config.API.investigateCalendar(), {
// year: dateMonth.value.year,
// month: dateMonth.value.month,
// })
// .then((res) => {
// const data = res.data.result;
// const defaultColor = "#02A998";
// const gradientColors = generateGradientColors(data.length);
// const events = data.map((e: CaledarInvestigatefacts, index: number) => ({
// id: e.id,
// title: e.title,
// start: e.investigationDateStart,
// end: e.investigationDateEnd,
// allDay: true,
// color:
// data.length > 1 && index > 0 ? gradientColors[index] : defaultColor,
// }));
// calendarOptions.value.events = events;
// })
// .catch((err) => {
// messageError($q, err);
// })
// .finally(() => {
// setTimeout(() => {
// if (fullCalendar !== undefined) {
// const calen = fullCalendar.value.getApi();
// const date = new Date(dateMonth.value.year, dateMonth.value.month);
// calen.gotoDate(date);
// }
// hideLoader();
// }, 1000);
// });
// }
function generateGradientColors(length: number) { function generateGradientColors(length: number) {
const colors = []; const colors = [];
for (let i = 0; i < length; i++) { for (let i = 0; i < length; i++) {
@ -185,20 +148,6 @@ async function view(text: string) {
modeCancel.value = false; modeCancel.value = false;
} }
watch(
() => props.modal,
async () => {
props.modal && (await fetchCalendar());
}
);
/**
* วแปรทงหมด
*/
const modalCancel = ref(false);
const title = ref("");
const modeCancel = ref(true);
function gotoPrevMonth() { function gotoPrevMonth() {
const calen = fullCalendar.value.getApi(); const calen = fullCalendar.value.getApi();
calen.prev(); calen.prev();
@ -216,6 +165,13 @@ function updateDateMonth(date: Date) {
dateMonth.value.month = date.getMonth(); dateMonth.value.month = date.getMonth();
fetchCalendar(); fetchCalendar();
} }
watch(
() => props.modal,
async () => {
props.modal && (await fetchCalendar());
}
);
</script> </script>
<template> <template>
@ -243,40 +199,6 @@ function updateDateMonth(date: Date) {
<div class="col-12"> <div class="col-12">
<div class="row q-gutter-sm q-pb-sm main-content"> <div class="row q-gutter-sm q-pb-sm main-content">
<div class="demo-app-main q-mb-xl"> <div class="demo-app-main q-mb-xl">
<!-- <div class="row col-12 q-mb-sm">
<div class="col-xs-12 col-sm-3 col-md-2">
<datepicker
v-model="dateMonth"
:locale="'th'"
autoApply
month-picker
:enableTimePicker="false"
@update:modelValue="changCalendar"
>
<template #year="{ year }">{{ year + 543 }}</template>
<template #year-overlay-value="{ value }">{{
parseInt(value + 543)
}}</template>
<template #trigger>
<q-input
:model-value="monthYearThai(dateMonth)"
dense
outlined
style="width: 130px"
>
<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> -->
<div class="row q-mb-sm justify-between"> <div class="row q-mb-sm justify-between">
<q-btn <q-btn
size="12px" size="12px"
@ -292,7 +214,6 @@ function updateDateMonth(date: Date) {
<p class="q-ma-none text-center"> <p class="q-ma-none text-center">
{{ monthYearThai(dateMonth) }} {{ monthYearThai(dateMonth) }}
</p> </p>
<q-btn <q-btn
size="12px" size="12px"
dense dense
@ -304,6 +225,7 @@ function updateDateMonth(date: Date) {
<q-tooltip>เดอนถดไป</q-tooltip> <q-tooltip>เดอนถดไป</q-tooltip>
</q-btn> </q-btn>
</div> </div>
<FullCalendar <FullCalendar
ref="fullCalendar" ref="fullCalendar"
class="demo-app-calendar" class="demo-app-calendar"
@ -333,6 +255,7 @@ function updateDateMonth(date: Date) {
</div> </div>
</template> </template>
</FullCalendar> </FullCalendar>
</div> </div>
</div> </div>
</div> </div>
@ -377,13 +300,6 @@ function updateDateMonth(date: Date) {
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
/* border: 2px solid #17a259; */
/* border-radius: 50%;
height: 25px;
width: 25px;
font-weight: bold;
color: white !important;
background: #17a259; */
} }
.fc-day-today .fc-daygrid-day-frame { .fc-day-today .fc-daygrid-day-frame {

View file

@ -279,6 +279,7 @@ const monthYearThai = (val: DataDateMonthObject) => {
</datepicker> </datepicker>
</div> </div>
</div> </div>
<FullCalendar <FullCalendar
ref="fullCalendar" ref="fullCalendar"
class="demo-app-calendar" class="demo-app-calendar"
@ -305,25 +306,8 @@ const monthYearThai = (val: DataDateMonthObject) => {
</div> </div>
</template> </template>
</FullCalendar> </FullCalendar>
<div class="row q-col-gutter-lg justify-end q-pb-lg"> <div class="row q-col-gutter-lg justify-end q-pb-lg">
<!-- <div class="items-center row">
<q-icon
size="10px"
color="light-green"
name="mdi-circle"
class="q-mr-sm"
/>
<span class="text-caption text-grey-8">สถานะอน</span>
</div> -->
<!-- <div class="items-center row">
<q-icon
size="10px"
color="red-6"
name="mdi-circle"
class="q-mr-sm"
/>
<span class="text-caption text-grey-8">สถานะไมอน</span>
</div> -->
<div class="items-center row"> <div class="items-center row">
<q-icon <q-icon
size="10px" size="10px"
@ -333,15 +317,6 @@ const monthYearThai = (val: DataDateMonthObject) => {
/> />
<span class="text-caption text-grey-8">สอบสวน</span> <span class="text-caption text-grey-8">สอบสวน</span>
</div> </div>
<!-- <div class="items-center row">
<q-icon
size="10px"
color="orange"
name="mdi-circle"
class="q-mr-sm"
/>
<span class="text-caption text-grey-8">สถานะใหม</span>
</div> -->
</div> </div>
</div> </div>
</div> </div>

View file

@ -2,12 +2,15 @@
import { onMounted, reactive, ref, watch } from "vue"; import { onMounted, reactive, ref, watch } from "vue";
import { useQuasar } from "quasar"; import { useQuasar } from "quasar";
import { useRouter, useRoute } from "vue-router"; import { useRouter, useRoute } from "vue-router";
import http from "@/plugins/http"; import http from "@/plugins/http";
import config from "@/app.config"; import config from "@/app.config";
/**import component*/ /**import component*/
import FormComplaints from "@/modules/11_discipline/components/1_Complaint/Form.vue"; // import FormComplaints from "@/modules/11_discipline/components/1_Complaint/Form.vue"; //
import FormInvestigatefacts from "@/modules/11_discipline/components/2_InvestigateFacts/Form.vue"; // import FormInvestigatefacts from "@/modules/11_discipline/components/2_InvestigateFacts/Form.vue"; //
import FormDisciplinary from "@/modules/11_discipline/components/3_InvestigateDisciplinary/Form.vue"; // import FormDisciplinary from "@/modules/11_discipline/components/3_InvestigateDisciplinary/Form.vue"; //
import type { import type {
PersonsArray, PersonsArray,
Persons, Persons,
@ -17,10 +20,10 @@ import type {
ArrayPerson, ArrayPerson,
ArrayFileList, ArrayFileList,
} from "@/modules/11_discipline/interface/request/complaint"; } from "@/modules/11_discipline/interface/request/complaint";
import PopupSendToNext from "@/modules/11_discipline/components/PopupSendToNext.vue";
import type { FormData as FormInvestigateFact } from "@/modules/11_discipline/interface/request/investigateFact"; import type { FormData as FormInvestigateFact } from "@/modules/11_discipline/interface/request/investigateFact";
import PopupSendToNext from "@/modules/11_discipline/components/PopupSendToNext.vue";
/**import store*/ /**import store*/
import { useCounterMixin } from "@/stores/mixin"; import { useCounterMixin } from "@/stores/mixin";
import { useInvestigateDisStore } from "@/modules/11_discipline/store/InvestigateDisStore"; import { useInvestigateDisStore } from "@/modules/11_discipline/store/InvestigateDisStore";
@ -42,6 +45,80 @@ const status = ref<string>("");
const idInvestigate = ref<string>(""); const idInvestigate = ref<string>("");
const idComplaint = ref<string>(""); const idComplaint = ref<string>("");
const respondentRows = ref<Persons[]>();
const personObjComplaint = reactive<ArrayPerson>({
id: "",
personId: "",
idcard: "",
name: "",
prefix: "",
firstName: "",
lastName: "",
posNo: "",
position: "",
positionLevel: "",
salary: null,
organization: "",
});
const fileListObjComplaint = reactive<ArrayFileList>({
id: "",
pathName: "",
fileName: "",
});
const dataComplaints = reactive<FormDataComplaint>({
id: "",
respondentType: "",
organizationId: "",
consideredAgency: "",
title: "",
description: "",
dateReceived: null,
dateConsideration: null,
offenseDetails: "",
levelConsideration: "",
dateNotification: null,
complaintFrom: "",
appellant: "",
documentFile: null,
status: "",
persons: [personObjComplaint],
result: "",
disciplineComplaintDocs: [fileListObjComplaint],
});
/** ข้อมูล v-model ของฟอร์มสืบสวน */
const dataInvestigatefacts = reactive<FormInvestigateFact>({
id: "",
idComplaint: "",
investigationDetail: "",
complaint: "",
complaintdetail: "",
investigationDescription: "",
fault: "",
investigationDetailOther: "",
evidenceFiles: null,
fileComplaint: null,
investigationExtendStatus: false,
investigationDateStart: null,
investigationDateEnd: null,
investigationDaysExtend: null,
investigationStatusResult: "",
investigationCauseText: "",
complaintStatus: "",
result: "",
directors: [],
disciplineInvestigateDocs: [],
disciplineInvestigateRelevantDocs: [],
status: "",
documentFile: null,
respondentType: "",
organizationId: "",
persons: [],
investigationExtendHistory: [],
});
/** function fetchData สอบสวนความผิดทางวินัย*/ /** function fetchData สอบสวนความผิดทางวินัย*/
async function fetchDetailDisciplinary() { async function fetchDetailDisciplinary() {
showLoader(); showLoader();
@ -168,12 +245,11 @@ async function onSubmitDisciplinary(data: any) {
* นทกขอมลทเเกไข * นทกขอมลทเเกไข
* @param id ระบ คคล * @param id ระบ คคล
*/ */
const onSubmit = async (id: string) => { async function onSubmit(id: string) {
router.push(`/discipline/disciplinary`); router.push(`/discipline/disciplinary`);
}; }
/** ยืนยัน ส่งไปออกคำสั่ง */ /** ยืนยัน ส่งไปออกคำสั่ง */
const respondentRows = ref<Persons[]>();
async function sentIssue() { async function sentIssue() {
respondentRows.value = await store.rowSent.filter((x) => x.report === false); //x.report === false respondentRows.value = await store.rowSent.filter((x) => x.report === false); //x.report === false
modalPopup.value = true; modalPopup.value = true;
@ -197,7 +273,7 @@ function confirmSentIssueGate() {
messageError($q, e); messageError($q, e);
}) })
.finally(() => { .finally(() => {
router.push(`/discipline/disciplinary`) router.push(`/discipline/disciplinary`);
fetchDetailDisciplinary(); fetchDetailDisciplinary();
}); });
} }
@ -234,7 +310,6 @@ function confirmEndInvestigate() {
messageError($q, e); messageError($q, e);
}) })
.finally(() => { .finally(() => {
fetchDetailDisciplinary(); fetchDetailDisciplinary();
}); });
} }
@ -258,52 +333,6 @@ function closePopup() {
modalPopup.value = false; modalPopup.value = false;
} }
/** โหลดข้อมูลเมื่อเข้าหน้านี้ */
onMounted(async () => {
store.tabMenu = "disciplinary";
await fetchDetailDisciplinary();
});
watch(
() => store.tabMenu,
async () => {
const fetchFunction =
store.tabMenu === "disciplinary"
? fetchDetailDisciplinary
: store.tabMenu === "investigatefacts"
? fetchDetailInvestigate
: store.tabMenu === "complaints"
? fetchDetailComplaints
: null;
if (fetchFunction) {
await fetchFunction();
}
}
);
/** ข้อมูล v-model ของฟอร์มเรื่องร้องเรียน */
const personObjComplaint = reactive<ArrayPerson>({
id: "",
personId: "",
idcard: "",
name: "",
prefix: "",
firstName: "",
lastName: "",
posNo: "",
position: "",
positionLevel: "",
salary: null,
organization: "",
});
const fileListObjComplaint = reactive<ArrayFileList>({
id: "",
pathName: "",
fileName: "",
});
function emitPerson(data: PersonsArray[]) { function emitPerson(data: PersonsArray[]) {
const dataMapId = data.map((item: PersonsArray) => item.id); const dataMapId = data.map((item: PersonsArray) => item.id);
showLoader(); showLoader();
@ -324,62 +353,35 @@ function emitPerson(data: PersonsArray[]) {
}); });
} }
const dataComplaints = reactive<FormDataComplaint>({ watch(
id: "", () => store.tabMenu,
respondentType: "", async () => {
organizationId: "", const fetchFunction =
consideredAgency: "", store.tabMenu === "disciplinary"
title: "", ? fetchDetailDisciplinary
description: "", : store.tabMenu === "investigatefacts"
dateReceived: null, ? fetchDetailInvestigate
dateConsideration: null, : store.tabMenu === "complaints"
offenseDetails: "", ? fetchDetailComplaints
levelConsideration: "", : null;
dateNotification: null,
complaintFrom: "",
appellant: "",
documentFile: null,
status: "",
persons: [personObjComplaint],
result: "",
disciplineComplaintDocs: [fileListObjComplaint],
});
/** ข้อมูล v-model ของฟอร์มสืบสวน */ if (fetchFunction) {
const dataInvestigatefacts = reactive<FormInvestigateFact>({ await fetchFunction();
id: "", }
idComplaint: "", }
investigationDetail: "", );
complaint: "",
complaintdetail: "", /** โหลดข้อมูลเมื่อเข้าหน้านี้ */
investigationDescription: "", onMounted(async () => {
fault: "", store.tabMenu = "disciplinary";
investigationDetailOther: "", await fetchDetailDisciplinary();
evidenceFiles: null,
fileComplaint: null,
investigationExtendStatus: false,
investigationDateStart: null,
investigationDateEnd: null,
investigationDaysExtend: null,
investigationStatusResult: "",
investigationCauseText: "",
complaintStatus: "",
result: "",
directors: [],
disciplineInvestigateDocs: [],
disciplineInvestigateRelevantDocs: [],
status: "",
documentFile: null,
respondentType: "",
organizationId: "",
persons: [],
investigationExtendHistory:[]
}); });
</script> </script>
<template> <template>
<div class="col-xs-12 col-sm-12 col-md-11"> <div class="col-xs-12 col-sm-12 col-md-11">
<div class="toptitle col-12 row items-center"> <div class="toptitle col-12 row items-center">
<q-btn <q-btn
icon="mdi-arrow-left" icon="mdi-arrow-left"
unelevated unelevated
@ -392,6 +394,7 @@ const dataInvestigatefacts = reactive<FormInvestigateFact>({
/> />
<div class="q-ma-none">แกไขการสอบสวนความผดทางว</div> <div class="q-ma-none">แกไขการสอบสวนความผดทางว</div>
<q-space /> <q-space />
<div class="q-gutter-x-sm"> <div class="q-gutter-x-sm">
<q-btn <q-btn
v-if="status === 'NEW'" v-if="status === 'NEW'"
@ -419,6 +422,7 @@ const dataInvestigatefacts = reactive<FormInvestigateFact>({
/> />
</div> </div>
</div> </div>
<q-card flat class="col-12"> <q-card flat class="col-12">
<q-tabs <q-tabs
v-model="store.tabMenu" v-model="store.tabMenu"
@ -436,16 +440,19 @@ const dataInvestigatefacts = reactive<FormInvestigateFact>({
<q-tab name="disciplinary" label="สอบสวนความผิดทางวินัย" /> <q-tab name="disciplinary" label="สอบสวนความผิดทางวินัย" />
</q-tabs> </q-tabs>
<q-separator /> <q-separator />
<q-tab-panels v-model="store.tabMenu" animated> <q-tab-panels v-model="store.tabMenu" animated>
<q-tab-panel name="complaints"> <q-tab-panel name="complaints">
<FormComplaints :on-submit="onSubmit" :data="dataComplaints" /> <FormComplaints :on-submit="onSubmit" :data="dataComplaints" />
</q-tab-panel> </q-tab-panel>
<q-tab-panel name="investigatefacts"> <q-tab-panel name="investigatefacts">
<FormInvestigatefacts <FormInvestigatefacts
:on-submit="onSubmit" :on-submit="onSubmit"
:data="dataInvestigatefacts" :data="dataInvestigatefacts"
/> />
</q-tab-panel> </q-tab-panel>
<q-tab-panel name="disciplinary"> <q-tab-panel name="disciplinary">
<FormDisciplinary <FormDisciplinary
:on-submit="onSubmit" :on-submit="onSubmit"

View file

@ -463,6 +463,9 @@ function resetExtend() {
formData.daysExtend = 0; formData.daysExtend = 0;
} }
/** readonly
* @param val true/false
*/
function inputEdit(val: boolean) { function inputEdit(val: boolean) {
return { return {
"full-width cursor-pointer ": val, "full-width cursor-pointer ": val,
@ -470,6 +473,9 @@ function inputEdit(val: boolean) {
}; };
} }
/** readonly
* @param val true/false
*/
function inputEditExtend(val: boolean) { function inputEditExtend(val: boolean) {
if (formData.disciplinaryExtendHistory.length > 0) { if (formData.disciplinaryExtendHistory.length > 0) {
return { return {
@ -544,6 +550,7 @@ onMounted(async () => {
</template> </template>
</q-select> </q-select>
</div> </div>
<div <div
class="col-xs-12 col-sm-3" class="col-xs-12 col-sm-3"
v-if="formData.respondentType === 'ORGANIZATION'" v-if="formData.respondentType === 'ORGANIZATION'"
@ -629,6 +636,7 @@ onMounted(async () => {
</q-btn> </q-btn>
</div> </div>
<div class="col-12"><q-separator /></div> <div class="col-12"><q-separator /></div>
<div class="col-xs-12 q-pa-sm"> <div class="col-xs-12 q-pa-sm">
<d-table <d-table
ref="table" ref="table"
@ -765,6 +773,7 @@ onMounted(async () => {
</q-input> </q-input>
</template> </template>
</datepicker> </datepicker>
<datepicker <datepicker
:readonly="isReadonly" :readonly="isReadonly"
menu-class-name="modalfix" menu-class-name="modalfix"
@ -816,6 +825,7 @@ onMounted(async () => {
</template> </template>
</datepicker> </datepicker>
</div> </div>
<div class="row col-12"> <div class="row col-12">
<q-card <q-card
bordered bordered
@ -866,6 +876,7 @@ onMounted(async () => {
</div> </div>
<div class="col-12"><q-separator /></div> <div class="col-12"><q-separator /></div>
<div class="q-pa-sm"> <div class="q-pa-sm">
<div class="q-col-gutter-sm row col-12"> <div class="q-col-gutter-sm row col-12">
<div class="col-12"> <div class="col-12">
<div class="row q-col-gutter-sm"> <div class="row q-col-gutter-sm">
@ -967,6 +978,7 @@ onMounted(async () => {
</template> </template>
</datepicker> </datepicker>
</div> </div>
<div class="col-3"> <div class="col-3">
<datepicker <datepicker
menu-class-name="modalfix" menu-class-name="modalfix"
@ -1162,6 +1174,7 @@ onMounted(async () => {
</q-input> </q-input>
</template> </template>
</datepicker> </datepicker>
<div class="row col-12"> <div class="row col-12">
<q-card <q-card
bordered bordered
@ -1241,6 +1254,7 @@ onMounted(async () => {
</div> </div>
</q-card> </q-card>
</div> </div>
<div class="col-xs-12 col-sm-3"> <div class="col-xs-12 col-sm-3">
<q-input <q-input
:class="inputEdit(isReadonly)" :class="inputEdit(isReadonly)"
@ -1257,6 +1271,7 @@ onMounted(async () => {
@update:model-value="changeFormData()" @update:model-value="changeFormData()"
/> />
</div> </div>
<div class="col-xs-12 col-sm-3"> <div class="col-xs-12 col-sm-3">
<q-input <q-input
:class="inputEdit(isReadonly)" :class="inputEdit(isReadonly)"
@ -1300,6 +1315,7 @@ onMounted(async () => {
> >
</q-select> </q-select>
</div> </div>
<div class="col-xs-12 col-sm-3"> <div class="col-xs-12 col-sm-3">
<q-input <q-input
:class="inputEdit(isReadonly)" :class="inputEdit(isReadonly)"
@ -1318,6 +1334,7 @@ onMounted(async () => {
@update:model-value="changeFormData()" @update:model-value="changeFormData()"
/> />
</div> </div>
<div class="col-xs-12 col-sm-6"> <div class="col-xs-12 col-sm-6">
<q-input <q-input
:readonly="isReadonly" :readonly="isReadonly"
@ -1353,6 +1370,7 @@ onMounted(async () => {
@update:model-value="changeFormData()" @update:model-value="changeFormData()"
/> />
</div> </div>
<div class="col-xs-12 col-sm-6"> <div class="col-xs-12 col-sm-6">
<q-input <q-input
:readonly="isReadonly" :readonly="isReadonly"