ปรับ ui ระบบวินัยเพิ่มเติม

This commit is contained in:
Tanyalak 2024-01-30 15:07:25 +07:00
parent ea655acefb
commit b2d6f24547
6 changed files with 1599 additions and 1590 deletions

View file

@ -339,336 +339,340 @@ onMounted(() => {
</script>
<template>
<div class="row q-col-gutter-xs">
<div class="col-12">
<form @submit.prevent="validateForm">
<q-card bordered>
<div class="q-pa-md">
<div class="q-gutter-y-sm">
<div class="row q-gutter-x-sm">
<div class="col-3">
<q-select
ref="typeRef"
:class="inputEdit(isReadonly)"
v-model="formData.type"
label="ประเภท"
dense
outlined
emit-value
map-options
option-label="name"
option-value="id"
:options="dataStore.typeOptions"
:rules="[(val) => !!val || `${'กรุณาเลือกประเภท'}`]"
lazy-rules
hide-bottom-space
/>
<form @submit.prevent="validateForm" class="col-12 row">
<q-card bordered class="col-12 row">
<div class="col-12 row">
<div :class="isReadonly== true ? 'col-sm-12 col-md-9 row no-wrap': 'col-12'">
<div class=" col-12 q-pa-md">
<div class="q-gutter-y-sm">
<div class="row q-gutter-x-sm">
<div class="col-3">
<q-select
ref="typeRef"
:class="inputEdit(isReadonly)"
v-model="formData.type"
label="ประเภท"
dense
outlined
emit-value
map-options
option-label="name"
option-value="id"
:options="dataStore.typeOptions"
:rules="[(val) => !!val || `${'กรุณาเลือกประเภท'}`]"
lazy-rules
hide-bottom-space
/>
</div>
<div class="col-3" v-if="isReadonly">
<q-select
ref="statusRef"
v-model="formData.status"
:class="inputEdit(isReadonly)"
label="สถานะ"
dense
bg-color="white"
outlined
emit-value
:rules="[(val) => !!val || `${'กรุณาเลือกสถานะ'}`]"
map-options
hide-bottom-space
option-label="name"
option-value="id"
:options="dataStore.statusOptionsEdit"
/>
</div>
<div class="col-2 self-center" v-if="isReadonly">
<q-btn
size="16px"
flat
round
dense
color="info"
class="q-ml-sm"
icon="mdi-history"
@click="historyStatus"
>
<q-tooltip>ประวแกไขสถานะ</q-tooltip>
</q-btn>
</div>
</div>
<div class="col-3" v-if="isReadonly">
<q-select
ref="statusRef"
v-model="formData.status"
:class="inputEdit(isReadonly)"
label="สถานะ"
dense
bg-color="white"
outlined
emit-value
:rules="[(val) => !!val || `${'กรุณาเลือกสถานะ'}`]"
map-options
hide-bottom-space
option-label="name"
option-value="id"
:options="dataStore.statusOptionsEdit"
/>
</div>
<div class="col-2 self-center" v-if="isReadonly">
<q-btn
size="16px"
flat
round
dense
color="info"
class="q-ml-sm"
icon="mdi-history"
@click="historyStatus"
<div class="row col-12">
<q-card
bordered
class="row col-12"
style="border: 1px solid #d6dee1"
>
<q-tooltip>ประวแกไขสถานะ</q-tooltip>
</q-btn>
<div
class="col-xs-12 col-sm-12 text-weight-medium bg-grey-1 q-py-xs q-px-md"
>
นอทธณ/องทกข
<q-btn
v-if="!isReadonly"
size="12px"
flat
round
dense
color="add"
class="q-ml-sm"
icon="mdi-plus"
@click="toggleModal"
>
<q-tooltip>เพมผนอทธณ/องทกข</q-tooltip>
</q-btn>
</div>
<div class="col-12"><q-separator /></div>
<div class="col-xs-12 q-pa-sm">
<q-table
ref="table"
:columns="dataStore.columns"
:rows="dataStore.rowsAdd"
row-key="idcard"
flat
bordered
dense
hide-bottom
class="custom-header-table"
:visible-columns="dataStore.visibleColumns"
>
<template v-slot:header="props">
<q-tr :props="props">
<q-th
v-for="col in props.cols"
:key="col.name"
:props="props"
style="color: #000000; font-weight: 500"
>
<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"
>
<div v-if="col.name == 'no'">
{{ props.rowIndex + 1 }}
</div>
<div
v-else-if="col.name === 'oc'"
class="table_ellipsis"
>
{{ props.row.oc }}
</div>
<div v-else>
{{ col.value }}
</div>
</q-td>
</q-tr>
</template>
</q-table>
</div>
</q-card>
</div>
<div class="row col-12">
<div class="col-12" id="title">
<q-input
ref="titleRef"
dense
:class="inputEdit(isReadonly)"
outlined
hide-bottom-space
v-model="formData.title"
:rules="[(val) => !!val || 'กรุณากรอกเรื่องอุทธรณ์/ร้องทุกข์']"
lazy-rules
label="เรื่องอุทธรณ์/ร้องทุกข์"
/>
</div>
</div>
<div class="col-xs-12 col-sm-12" id="detail">
<q-input
ref="descriptionRef"
dense
:class="inputEdit(isReadonly)"
outlined
hide-bottom-space
v-model="formData.description"
:rules="[
(val) => !!val || 'กรุณากรอกรายละเอียดอุทธรณ์/ร้องทุกข์',
]"
lazy-rules
label="รายละเอียดอุทธรณ์/ร้องทุกข์"
type="textarea"
rows="5"
/>
</div>
<div class="row q-gutter-x-sm">
<div class="col-3">
<datepicker
menu-class-name="modalfix"
v-model="formData.year"
class="col-2"
:locale="'th'"
autoApply
year-picker
:enableTimePicker="false"
>
<template #year="{ year }">{{ year + 543 }}</template>
<template #year-overlay-value="{ value }">{{
parseInt(value + 543)
}}</template>
<template #trigger>
<q-input
dense
:class="inputEdit(isReadonly)"
lazy-rules
outlined
:model-value="Number(formData.year) + 543"
:label="`${'ปีงบประมาณ'}`"
>
<template v-slot:prepend>
<q-icon
name="event"
class="cursor-pointer"
style="color: var(--q-primary)"
>
</q-icon>
</template>
</q-input>
</template>
</datepicker>
</div>
<div class="col-3">
<q-input
ref="caseTypeRef"
:class="inputEdit(isReadonly)"
v-model="formData.caseType"
dense
outlined
:rules="[(val) => !!val || 'กรุณากรอกประเภทคดี']"
lazy-rules
hide-bottom-space
label="ประเภทคดี"
/>
</div>
<div class="col-3">
<q-input
ref="caseNumberRef"
:class="inputEdit(isReadonly)"
v-model="formData.caseNumber"
dense
outlined
:rules="[(val) => !!val || 'กรุณากรอกเลขที่คดี']"
lazy-rules
label="เลขที่คดี"
hide-bottom-space
/>
</div>
</div>
</div>
<div class="row col-12">
<q-card
bordered
class="row col-12"
style="border: 1px solid #d6dee1"
>
<div
class="col-xs-12 col-sm-12 text-weight-medium bg-grey-1 q-py-xs q-px-md"
</div>
<div class="row"><q-separator vertical /></div>
</div>
<!-- พโหลดไฟล -->
<div v-if="isReadonly" class="col-sm-12 col-md-3 q-pa-md">
<q-card bordered class="row col-12" style="border: 1px solid #d6dee1">
<div class="col-12 text-weight-medium bg-grey-1 q-py-sm q-px-md">
ปโหลดไฟลเอกสารหลกฐาน
</div>
<div class="col-12"><q-separator /></div>
<div class="row col-12 q-col-gutter-y-sm q-pa-sm">
<div class="col-12 row">
<q-file
for="inputFiles"
class="col-12"
outlined
dense
v-model="formData.file"
@added="uploadFile"
label="ไฟล์เอกสารหลักฐาน"
hide-bottom-space
lazy-rules
accept=".pdf,.xlsx,.doc"
clearable
>
นอทธณ/องทกข
<q-btn
v-if="!isReadonly"
size="12px"
<template v-slot:prepend>
<q-icon name="attach_file" color="primary" />
</template>
<template v-slot:after>
<q-btn
v-if="formData.file && isReadonly"
size="14px"
flat
round
dense
color="add"
class="q-ml-sm"
icon="mdi-plus"
@click="toggleModal"
>
<q-tooltip>เพมผนอทธณ/องทกข</q-tooltip>
</q-btn>
</div>
<div class="col-12"><q-separator /></div>
<div class="col-xs-12 q-pa-sm">
<q-table
ref="table"
:columns="dataStore.columns"
:rows="dataStore.rowsAdd"
row-key="idcard"
flat
bordered
dense
hide-bottom
class="custom-header-table"
:visible-columns="dataStore.visibleColumns"
>
<template v-slot:header="props">
<q-tr :props="props">
<q-th
v-for="col in props.cols"
:key="col.name"
:props="props"
style="color: #000000; font-weight: 500"
>
<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"
>
<div v-if="col.name == 'no'">
{{ props.rowIndex + 1 }}
</div>
<div
v-else-if="col.name === 'oc'"
class="table_ellipsis"
>
{{ props.row.oc }}
</div>
<div v-else>
{{ col.value }}
</div>
</q-td>
</q-tr>
</template>
</q-table>
</div>
</q-card>
</div>
<div class="row col-12">
<div class="col-12" id="title">
<q-input
ref="titleRef"
dense
:class="inputEdit(isReadonly)"
outlined
hide-bottom-space
v-model="formData.title"
:rules="[(val) => !!val || 'กรุณากรอกเรื่องอุทธรณ์/ร้องทุกข์']"
lazy-rules
label="เรื่องอุทธรณ์/ร้องทุกข์"
/>
</div>
</div>
<div class="col-xs-12 col-sm-12" id="detail">
<q-input
ref="descriptionRef"
dense
:class="inputEdit(isReadonly)"
outlined
hide-bottom-space
v-model="formData.description"
:rules="[
(val) => !!val || 'กรุณากรอกรายละเอียดอุทธรณ์/ร้องทุกข์',
]"
lazy-rules
label="รายละเอียดอุทธรณ์/ร้องทุกข์"
type="textarea"
rows="5"
/>
</div>
<div class="row q-gutter-x-sm">
<div class="col-3">
<datepicker
menu-class-name="modalfix"
v-model="formData.year"
class="col-2"
:locale="'th'"
autoApply
year-picker
:enableTimePicker="false"
>
<template #year="{ year }">{{ year + 543 }}</template>
<template #year-overlay-value="{ value }">{{
parseInt(value + 543)
}}</template>
<template #trigger>
<q-input
dense
:class="inputEdit(isReadonly)"
lazy-rules
outlined
:model-value="Number(formData.year) + 543"
:label="`${'ปีงบประมาณ'}`"
>
<template v-slot:prepend>
<q-icon
name="event"
class="cursor-pointer"
style="color: var(--q-primary)"
>
</q-icon>
</template>
</q-input>
icon="mdi-upload"
@click="uploadFile"
><q-tooltip>ปโหลดไฟล</q-tooltip></q-btn>
</template>
</datepicker>
</q-file>
</div>
<div class="col-3">
<q-input
ref="caseTypeRef"
:class="inputEdit(isReadonly)"
v-model="formData.caseType"
dense
outlined
:rules="[(val) => !!val || 'กรุณากรอกประเภทคดี']"
lazy-rules
hide-bottom-space
label="ประเภทคดี"
/>
<div
v-if="formData.disciplineComplaint_Appeal_Docs.length > 0"
class="col-xs-12 row"
>
<q-list
v-for="data in formData.disciplineComplaint_Appeal_Docs"
:key="data.id"
class="full-width"
bordered
separator
>
<q-item clickable v-ripple>
<q-item-section>{{ data.fileName }}</q-item-section>
<q-space />
<q-btn
size="12px"
flat
round
dense
color="blue"
icon="mdi-download"
@click="downloadFile(data.pathName)"
><q-tooltip>ดาวนโหลดไฟล</q-tooltip></q-btn
>
<q-btn
size="12px"
flat
round
dense
color="red"
class="q-ml-sm"
icon="mdi-delete-outline"
@click="deleteFile(data.id)"
><q-tooltip>ลบไฟล</q-tooltip></q-btn
>
</q-item>
</q-list>
</div>
<div class="col-3">
<q-input
ref="caseNumberRef"
:class="inputEdit(isReadonly)"
v-model="formData.caseNumber"
dense
outlined
:rules="[(val) => !!val || 'กรุณากรอกเลขที่คดี']"
lazy-rules
label="เลขที่คดี"
hide-bottom-space
/>
<div class="col-12" v-else>
<q-card class="q-pa-md" bordered> ไมรายการเอกสาร </q-card>
</div>
</div>
</div>
</q-card>
</div>
<q-separator />
<div class="col-12"><q-separator /></div>
<div class="row col-12 q-pa-sm">
<q-space />
<q-btn id="onSubmit" type="submit" label="บันทึก" color="secondary"
><q-tooltip>นทกขอม</q-tooltip></q-btn
>
</div>
</div>
</q-card>
</form>
</div>
<!-- พโหลดไฟล -->
<div v-if="isReadonly" class="col-sm-12 col-md-3">
<q-card bordered class="row col-12" style="border: 1px solid #d6dee1">
<div class="col-12 text-weight-medium bg-grey-1 q-py-sm q-px-md">
ปโหลดไฟลเอกสารหลกฐาน
</div>
<div class="col-12"><q-separator /></div>
<div class="col-12 q-pa-sm row">
<q-file
for="inputFiles"
class="col-11"
outlined
dense
v-model="formData.file"
@added="uploadFile"
label="ไฟล์เอกสารหลักฐาน"
hide-bottom-space
lazy-rules
accept=".pdf,.xlsx,.doc"
clearable
>
<template v-slot:prepend>
<q-icon name="attach_file" color="primary" />
</template>
</q-file>
<div class="col-1 self-center text-center">
<q-btn
v-if="formData.file && isReadonly"
size="14px"
flat
round
dense
color="add"
icon="mdi-upload"
@click="uploadFile"
><q-tooltip>ปโหลดไฟล</q-tooltip></q-btn
>
</div>
</div>
<div
v-if="formData.disciplineComplaint_Appeal_Docs.length > 0"
class="col-xs-12 q-pa-sm row"
>
<q-list
v-for="data in formData.disciplineComplaint_Appeal_Docs"
:key="data.id"
class="full-width"
bordered
separator
>
<q-item clickable v-ripple>
<q-item-section>{{ data.fileName }}</q-item-section>
<q-space />
<q-btn
size="12px"
flat
round
dense
color="blue"
icon="mdi-download"
@click="downloadFile(data.pathName)"
><q-tooltip>ดาวนโหลดไฟล</q-tooltip></q-btn
>
<q-btn
size="12px"
flat
round
dense
color="red"
class="q-ml-sm"
icon="mdi-delete-outline"
@click="deleteFile(data.id)"
><q-tooltip>ลบไฟล</q-tooltip></q-btn
>
</q-item>
</q-list>
</div>
<div class="col-12 q-pa-sm" v-else>
<q-card class="q-pa-md" bordered> ไมรายการเอกสาร </q-card>
</div>
</q-card>
</div>
</div>
<DialogAddPersonal