This commit is contained in:
DESKTOP-1R2VSQH\Lenovo ThinkPad E490 2024-11-22 16:56:40 +07:00
parent 7f3eb5225f
commit 4c35662eed
22 changed files with 632 additions and 343 deletions

View file

@ -193,7 +193,7 @@ watch(
dense
v-model="qurey.searchField"
:options="store.searchFieldOption"
label="เลือกที่ต้องการค้นหา"
label="ค้นหาจาก"
emit-value
map-options
option-label="name"
@ -206,7 +206,7 @@ watch(
outlined
dense
v-model="qurey.searchKeyword"
label="คำค้นหา"
label="คำค้น"
clearable
>
<template v-slot:append v-if="!qurey.searchKeyword">

View file

@ -315,8 +315,8 @@ watch(
</script>
<template>
<q-dialog v-model="modal" persistent full-width>
<q-card>
<q-dialog v-model="modal" persistent>
<q-card style="min-width: 80vw">
<q-form greedy @submit.prevent @validation-success="onSubmit">
<DialogHeader
:tittle="isStatusEdit ? 'แก้ไขผู้ใช้งาน' : 'เพิ่มผู้ใช้งาน'"
@ -324,219 +324,222 @@ watch(
/>
<q-separator />
<q-card-section :horizontal="$q.screen.gt.xs">
<!-- รายช -->
<q-card-section class="col-md-8 col-xs-12">
<div class="row q-col-gutter-sm">
<div class="col-12 col-sm-6 col-md-3">
<q-select
label="ค้นหาจาก"
v-model="searchType"
:options="searchTypeOption"
outlined
emit-value
dense
emit-option
option-label="name"
option-value="id"
map-options
/>
</div>
<div class="col-12 col-sm-6 col-md-9">
<q-input
ref="searchRef"
v-model="keyword"
outlined
clearable
hide-bottom-space
dense
label="คำค้น"
>
<template v-slot:after>
<q-btn
color="primary"
icon="search"
label="ค้นหา"
class="full-width q-py-sm q-px-md"
@click="(query.page = 1), fetchListUser()"
>
</q-btn>
</template>
</q-input>
</div>
</div>
<div class="col-12 q-pt-sm">
<d-table
ref="table"
:columns="columns"
:rows="rows"
row-key="id"
flat
bordered
:paging="true"
dense
:rows-per-page-options="[10, 25, 50, 100]"
selection="single"
v-model:selected="selected"
@update:pagination="updatePagination"
>
<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>
<q-checkbox
keep-color
<q-card-section :horizontal="$q.screen.gt.md" style="padding: 0px">
<div class="row col-12 q-gutter-sm">
<!-- รายช -->
<div class="q-pa-md col-md-8 col-xs-12">
<div class="row q-col-gutter-sm">
<div class="col-12 col-sm-6 col-md-3">
<q-select
label="ค้นหาจาก"
v-model="searchType"
:options="searchTypeOption"
outlined
emit-value
dense
emit-option
option-label="name"
option-value="id"
map-options
/>
</div>
<div class="col-12 col-sm-6 col-md-9">
<q-input
ref="searchRef"
v-model="keyword"
outlined
clearable
hide-bottom-space
dense
label="คำค้น"
>
<template v-slot:after>
<q-btn
color="primary"
dense
v-model="props.selected"
/>
</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>
<template v-slot:pagination="scope">
งหมด {{ total }} รายการ
<q-pagination
v-model="query.page"
active-color="primary"
color="dark"
:max="Number(maxPage)"
size="sm"
boundary-links
direction-links
:max-pages="5"
@update:model-value="fetchListUser"
></q-pagination>
</template>
</d-table>
</div>
</q-card-section>
<q-separator vertical />
<!-- input -->
<q-card-section class="col-md-4 col-xs-12">
<div class="row q-col-gutter-md">
<div class="col-12">
<q-input
v-model="formData.username"
outlined
dense
:rules="[(val:string) => !!val || `${'กรุณากรอกชื่อผู้ใช้งาน'}`,]"
lazy-rules
hide-bottom-space
class="inputgreen"
label="ชื่อผู้ใช้งาน"
readonly
>
</q-input>
icon="search"
label="ค้นหา"
class="full-width q-py-sm q-px-md"
@click="(query.page = 1), fetchListUser()"
>
</q-btn>
</template>
</q-input>
</div>
</div>
<div class="col-12" v-if="!isStatusEdit">
<q-input
v-model="formData.password"
outlined
<div class="col-12 q-pt-sm">
<d-table
ref="table"
:columns="columns"
:rows="rows"
row-key="id"
flat
bordered
:paging="true"
dense
:type="isPwd ? 'password' : 'text'"
:rules="[(val:string) => !!val || `${'กรุณากรอกรหัสผู้ใช้งาน'}`,]"
lazy-rules
label="รหัสผู้ใช้งาน"
hide-bottom-space
class="inputgreen"
:rows-per-page-options="[10, 25, 50, 100]"
selection="single"
v-model:selected="selected"
@update:pagination="updatePagination"
>
<template v-slot:append>
<q-icon
:name="isPwd ? 'visibility_off' : 'visibility'"
class="cursor-pointer"
@click="isPwd = !isPwd"
/>
<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>
</q-input>
</div>
<div class="col-12">
<q-input
v-model="formData.firstName"
outlined
dense
:rules="[(val:string) => !!val || `${'กรุณากรอกชื่อ'}`,]"
lazy-rules
hide-bottom-space
class="inputgreen"
label="ชื่อ"
readonly
>
</q-input>
</div>
<div class="col-12">
<q-input
v-model="formData.lastName"
outlined
dense
:rules="[(val:string) => !!val || `${'กรุณากรอกนามสกุล'}`,]"
lazy-rules
hide-bottom-space
class="inputgreen"
label="นามสกุล"
readonly
>
</q-input>
</div>
<div class="col-12">
<q-input
v-model="formData.email"
outlined
dense
:rules="[(val:string) => !!val || `${'กรุณากรอก Email'}`,]"
lazy-rules
hide-bottom-space
class="inputgreen"
label="Email"
type="email"
>
</q-input>
</div>
<div class="col-12" v-if="!isStatusEdit">
<q-select
v-model="roles"
outlined
label="role"
dense
option-label="name"
option-value="id"
:options="roleOptions"
class="inputgreen"
map-options
hide-bottom-space
lazy-rules
use-chips
multiple
use-input
:rules="[(val:string) => !!val && val.length > 0|| `${'กรุณาเลือก Role'}`,]"
/>
<template v-slot:body="props">
<q-tr :props="props" class="cursor-pointer">
<q-td>
<q-checkbox
keep-color
color="primary"
dense
v-model="props.selected"
/>
</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>
<template v-slot:pagination="scope">
งหมด {{ total }} รายการ
<q-pagination
v-model="query.page"
active-color="primary"
color="dark"
:max="Number(maxPage)"
size="sm"
boundary-links
direction-links
:max-pages="5"
@update:model-value="fetchListUser"
></q-pagination>
</template>
</d-table>
</div>
</div>
</q-card-section>
<q-separator vertical />
<!-- input -->
<div class="q-pa-md col">
<div class="row q-col-gutter-md">
<div class="col-12">
<q-input
v-model="formData.username"
outlined
dense
:rules="[(val:string) => !!val || `${'กรุณากรอกชื่อผู้ใช้งาน'}`,]"
lazy-rules
hide-bottom-space
class="inputgreen"
label="ชื่อผู้ใช้งาน"
readonly
>
</q-input>
</div>
<div class="col-12" v-if="!isStatusEdit">
<q-input
v-model="formData.password"
outlined
dense
:type="isPwd ? 'password' : 'text'"
:rules="[(val:string) => !!val || `${'กรุณากรอกรหัสผู้ใช้งาน'}`,]"
lazy-rules
label="รหัสผู้ใช้งาน"
hide-bottom-space
class="inputgreen"
>
<template v-slot:append>
<q-icon
:name="isPwd ? 'visibility_off' : 'visibility'"
class="cursor-pointer"
@click="isPwd = !isPwd"
/>
</template>
</q-input>
</div>
<div class="col-12">
<q-input
v-model="formData.firstName"
outlined
dense
:rules="[(val:string) => !!val || `${'กรุณากรอกชื่อ'}`,]"
lazy-rules
hide-bottom-space
class="inputgreen"
label="ชื่อ"
readonly
>
</q-input>
</div>
<div class="col-12">
<q-input
v-model="formData.lastName"
outlined
dense
:rules="[(val:string) => !!val || `${'กรุณากรอกนามสกุล'}`,]"
lazy-rules
hide-bottom-space
class="inputgreen"
label="นามสกุล"
readonly
>
</q-input>
</div>
<div class="col-12">
<q-input
v-model="formData.email"
outlined
dense
:rules="[(val:string) => !!val || `${'กรุณากรอก อีเมล'}`,]"
lazy-rules
hide-bottom-space
class="inputgreen"
label="อีเมล"
type="email"
>
</q-input>
</div>
<div class="col-12" v-if="!isStatusEdit">
<q-select
v-model="roles"
outlined
label="role"
dense
option-label="name"
option-value="id"
:options="roleOptions"
class="inputgreen"
map-options
hide-bottom-space
lazy-rules
use-chips
multiple
use-input
:rules="[(val:string) => !!val && val.length > 0|| `${'กรุณาเลือก Role'}`,]"
/>
</div>
</div>
</div>
</div>
</q-card-section>
<q-separator />