ปรับ ui ระบบ KPI

This commit is contained in:
Tanyalak 2024-04-19 15:30:39 +07:00
parent 1993d72e04
commit 991e44f157
11 changed files with 345 additions and 304 deletions

View file

@ -4,7 +4,7 @@ import DialogHeader from "@/components/DialogHeader.vue";
const modal = defineModel<boolean>("modal", { required: true });
const numpage = defineModel<number>("numpage", { required: true });
const splitterModel = ref<number>(30);
const splitterModel = ref<number>(25);
const search = ref<string>("");
const define = ref<string>("");
@ -88,7 +88,7 @@ function onSubmit() {}
</script>
<template>
<q-dialog v-model="modal" persistent>
<q-card class="col-12" style="width: 80%">
<q-card class="col-12" style="width: 85%">
<q-form greedy @submit.prevent @validation-success="onSubmit">
<DialogHeader
:tittle="
@ -101,162 +101,156 @@ function onSubmit() {}
<q-separator />
<q-card-section class="q-pa-none scroll" style="max-height: 80vh">
<q-splitter v-model="splitterModel" disable>
<template v-slot:before>
<div class="bg-grey-1 q-pa-md">
<q-input
v-model="search"
outlined
dense
label="ค้นหา"
bg-color="white"
:class="getclass()"
>
<template v-slot:append>
<q-icon v-if="search == ''" name="search" />
<q-icon
v-if="search !== ''"
name="clear"
class="cursor-pointer"
@click="search = ''"
/>
</template>
</q-input>
<q-card flat bordered class="q-mt-sm">
<div class="row q-px-md q-py-sm items-center bg-grey-1">
<div class="col-4">
<span>รหสตวช</span>
<div class="col-12 row">
<div class="bg-grey-1 q-pa-md col-xs-12 col-sm-4 col-md-3 row lineRight">
<div class="col-12 fit">
<div class="col-12 ">
<q-input
v-model="search"
outlined
dense
label="ค้นหา"
:class="getclass()"
>
<template v-slot:append>
<q-icon v-if="search == ''" name="search" />
<q-icon
v-if="search !== ''"
name="clear"
class="cursor-pointer"
@click="search = ''"
/>
</template>
</q-input>
</div>
<div class="col-4">
<span>อตวช</span>
<q-card bordered flat class="q-mt-sm no-shadow bg-white col-12">
<div class="row q-px-md q-py-sm items-center bg-grey-1">
<div class="col-4">
<span>รหสตวช</span>
</div>
<div class="col-4">
<span>อตวช</span>
</div>
</div>
<q-separator/>
<q-card-section class="q-pa-none">
<q-list
separator
dense
>
<q-item
v-for="(item, index) in listTarget"
:key="index"
clickable
v-ripple
:active="listCheck === index"
active-class="my-menu-link"
@click="clickList(index, item.id)"
>
<q-item-section class="q-pa-none">
<div class="row items-center" style="height: 20px">
<div class="col-4">
<span>{{ item.metricCode }}</span>
</div>
<div class="col-4">
<span>{{ item.indicatorName }}</span>
</div>
</div>
</q-item-section>
</q-item>
</q-list>
</q-card-section>
</q-card>
</div>
</div>
<div class="col-xs-12 col-sm-8 col-md-9 row">
<div class="row q-pa-md q-col-gutter-sm">
<div class="col-12">
<span class="text-body2 text-weight-medium"
>รายละเอยดตวช</span
>
</div>
<div class="col-8">
<q-card bordered class="full-height q-pa-sm">
<div
v-for="(field, index) in Object.keys(fieldDetailLabels)"
:key="index + 1"
>
<div class="row q-pa-sm q-col-gutter-lg col-12">
<div class="col-4 text-grey-6">
{{
fieldDetailLabels[
field as keyof typeof fieldDetailLabels
]
}}
</div>
<div class="col-8">
<span>{{
formDetail[field] ? formDetail[field] : "-"
}}</span>
</div>
</div>
</div>
</q-card>
</div>
<div class="col-4 row ">
<div class="row col-12 card-box">
<div class="col-12 bg-grey-2 row items-center text-weight-medium">
<div class="col-6 text-center">ระดบคะแนน</div>
<div class="col-6 text-center">ผลสำเรจของงาน</div>
</div>
<div
v-for="(field, index) in Object.keys(fieldLabels)"
:key="index + 1"
class="row col-12 items-center lineTop"
>
<div
class="col-6 text-center text-body2"
>
{{ fieldLabels[field as keyof typeof fieldLabels] }}
</div>
<div class="col-6 text-center text-primary">
<span>{{
formScore[field] ? formScore[field] : "-"
}}</span>
</div>
</div>
</div>
</div>
<q-separator />
<q-card-section class="q-pa-none">
<q-scroll-area
style="height: 71vh"
class="bg-white row col-12"
>
<q-list
v-for="(item, index) in listTarget"
:key="index"
bordered
separator
>
<q-item
clickable
v-ripple
:active="listCheck === index"
active-class="my-menu-link"
@click="clickList(index, item.id)"
>
<q-item-section class="q-pa-none">
<div class="row items-center" style="height: 20px">
<div class="col-4">
<span>{{ item.metricCode }}</span>
</div>
<div class="col-4">
<span>{{ item.indicatorName }}</span>
</div>
</div>
</q-item-section>
</q-item>
</q-list>
</q-scroll-area>
</q-card-section>
</q-card>
</div>
</template>
<template v-slot:after>
<div class="row q-pa-md q-col-gutter-md">
<div class="col-12">
<span class="text-body1 text-weight-bold"
>รายละเอยดตวช</span
>
</div>
<div class="col-8">
<q-card bordered class="full-height">
<div
v-for="(field, index) in Object.keys(fieldDetailLabels)"
:key="index + 1"
>
<div class="row q-pa-md">
<div class="col-3 text-grey-6 text-weight-medium">
{{
fieldDetailLabels[
field as keyof typeof fieldDetailLabels
]
}}
</div>
<div class="col-7">
<span>{{
formDetail[field] ? formDetail[field] : "-"
}}</span>
</div>
</div>
</div>
</q-card>
</div>
<div class="col-4">
<q-card bordered>
<div class="bg-grey-2 row q-py-sm text-weight-bold">
<div class="col-6 text-center">ระดบคะแนน</div>
<div class="col-6 text-center">ผลสำเรจของงาน</div>
</div>
<div
v-for="(field, index) in Object.keys(fieldLabels)"
:key="index + 1"
>
<div class="row q-py-lg">
<div
class="col-6 text-center text-body1 text-weight-bold"
>
{{ fieldLabels[field as keyof typeof fieldLabels] }}
</div>
<div class="col-6 text-center">
<span>{{
formScore[field] ? formScore[field] : "-"
}}</span>
</div>
</div>
<div
class="col-12"
v-if="index !== Object.keys(fieldLabels).length - 1"
>
<q-separator />
</div>
</div>
</q-card>
</div>
<div class="col-12">
<q-input
v-model="define"
label="นิยามหรือความหมายของตัวชี้วัด"
type="textarea"
outlined
dense
:rules="[(val:string) => !!val || `${'กรุณากรอกตัวชี้วัด'}`,]"
hide-bottom-space
:class="getclass()"
/>
</div>
<div class="col-12">
<q-input
v-model="formula"
label="สูตรคำนวณ"
type="textarea"
outlined
dense
:rules="[(val:string) => !!val || `${'กรุณากรอกตัวชี้วัด'}`,]"
hide-bottom-space
:class="getclass()"
/>
<div class="col-12">
<q-input
v-model="define"
label="นิยามหรือความหมายของตัวชี้วัด"
type="textarea"
outlined
autogrow
dense
:rules="[(val:string) => !!val || `${'กรุณากรอกตัวชี้วัด'}`,]"
hide-bottom-space
:class="getclass()"
/>
</div>
<div class="col-12">
<q-input
v-model="formula"
label="สูตรคำนวณ"
type="textarea"
outlined
autogrow
dense
:rules="[(val:string) => !!val || `${'กรุณากรอกตัวชี้วัด'}`,]"
hide-bottom-space
:class="getclass()"
/>
</div>
</div>
</div>
</template>
</q-splitter>
</div>
</q-card-section>
<q-separator />
@ -278,4 +272,17 @@ function onSubmit() {}
background: #ebf9f7 !important;
color: #1bb19ab8 !important;
}
.no-shadow{
box-shadow:none !important;
}
.lineRight{
border-right: 1px solid #EDEDED !important;
}
.lineTop{
border-top: 1px solid #EDEDED !important;
}
.card-box{
border: 1px solid #EDEDED !important;
border-radius: 8px;
}
</style>

View file

@ -110,115 +110,116 @@ function onSubmit() {}
</script>
<template>
<q-dialog v-model="modal" persistent>
<q-card class="col-12" style="width: 80%">
<q-card class="col-12" style="width: 85%">
<q-form greedy @submit.prevent @validation-success="onSubmit">
<DialogHeader :tittle="`เพิ่มสมรรถนะ`" :close="closeDialog" />
<q-separator />
<q-card-section class="q-pa-none scroll" style="max-height: 80vh">
<q-splitter v-model="splitterModel" disable>
<template v-slot:before>
<div class="bg-grey-1 q-pa-md q-gutter-sm">
<q-select
v-model="type"
outlined
label="ประเภทสมรรถนะ"
dense
bg-color="white"
option-label="name"
option-value="id"
:options="competencyTypeOp"
emit-value
:class="getclass()"
map-options
/>
<q-input
v-model="search"
outlined
dense
label="ค้นหา"
bg-color="white"
:class="getclass()"
>
<template v-slot:append>
<q-icon v-if="search == ''" name="search" />
<q-icon
v-if="search !== ''"
name="clear"
class="cursor-pointer"
@click="search = ''"
/>
</template>
</q-input>
<q-card flat bordered>
<div class="row q-px-md q-py-sm items-center bg-grey-1">
<div class="col-4">
<span>รหสตวช</span>
<div class="col-12 row">
<div class="bg-grey-1 q-pa-md col-xs-12 col-sm-4 col-md-3 row lineRight">
<div class="col-12 q-col-gutter-sm fit">
<div class="col-12 ">
<q-select
v-model="type"
outlined
label="ประเภทสมรรถนะ"
dense
bg-color="white"
option-label="name"
option-value="id"
:options="competencyTypeOp"
emit-value
:class="getclass()"
map-options
/>
</div>
<div class="col-12 ">
<q-input
v-model="search"
outlined
dense
label="ค้นหา"
bg-color="white"
:class="getclass()"
>
<template v-slot:append>
<q-icon v-if="search == ''" name="search" />
<q-icon
v-if="search !== ''"
name="clear"
class="cursor-pointer"
@click="search = ''"
/>
</template>
</q-input>
</div>
<div class="col-12 ">
<q-card bordered flat class="no-shadow bg-white col-12">
<div class="row q-px-md q-py-sm items-center bg-grey-1">
<div class="col-4">
<span>รหสตวช</span>
</div>
<div class="col-4">
<span>อตวช</span>
</div>
</div>
<div class="col-4">
<span>อตวช</span>
</div>
</div>
<q-separator />
<q-card-section class="q-pa-none">
<q-scroll-area
style="height: 33vh"
class="bg-white row col-12"
>
<q-list
v-for="(item, index) in listTarget"
:key="index"
bordered
separator
>
<q-item
clickable
v-ripple
:active="listCheck === index"
active-class="my-menu-link"
@click="clickList(index, item.id)"
<q-separator />
<q-card-section class="q-pa-none">
<q-list
separator
dense
>
<q-item-section class="q-pa-none">
<div class="row items-center" style="height: 20px">
<div class="col-4">
<span>{{ item.metricCode }}</span>
<q-item
v-for="(item, index) in listTarget"
:key="index"
clickable
v-ripple
:active="listCheck === index"
active-class="my-menu-link"
@click="clickList(index, item.id)"
>
<q-item-section class="q-pa-none">
<div class="row items-center" style="height: 20px">
<div class="col-4">
<span>{{ item.metricCode }}</span>
</div>
<div class="col-4">
<span>{{ item.indicatorName }}</span>
</div>
</div>
<div class="col-4">
<span>{{ item.indicatorName }}</span>
</div>
</div>
</q-item-section>
</q-item>
</q-list>
</q-scroll-area>
</q-card-section>
</q-card>
</q-item-section>
</q-item>
</q-list>
</q-card-section>
</q-card>
</div>
</div>
</template>
</div>
<template v-slot:after>
<div class="row q-pa-md q-col-gutter-md">
<div class="col-xs-12 col-sm-8 col-md-9 row">
<div class="row col-12 q-pa-md q-col-gutter-sm">
<div class="col-12">
<span class="text-body1 text-weight-bold"
<span class="text-body2 text-weight-medium"
>รายละเอยดตวช</span
>
</div>
<div class="col-8">
<q-card bordered class="full-height">
<div class="col-8 row">
<q-card bordered class="fit q-pa-sm no-shadow">
<div
v-for="(field, index) in Object.keys(fieldDetailLabels)"
:key="index + 1"
>
<div class="row q-pa-md">
<div class="col-3 text-grey-6 text-weight-medium">
<div class="row q-pa-sm q-col-gutter-lg col-12">
<div class="col-4 text-grey-6">
{{
fieldDetailLabels[
field as keyof typeof fieldDetailLabels
]
}}
</div>
<div class="col-7">
<div class="col-8">
<span>{{
formDetail[field] ? formDetail[field] : "-"
}}</span>
@ -227,19 +228,20 @@ function onSubmit() {}
</div>
</q-card>
</div>
<div class="col-4">
<q-card bordered>
<div class="bg-grey-2 row q-py-sm text-weight-bold">
<div class="col-4 row ">
<q-card bordered class="col-12 row no-shadow">
<div class="bg-grey-2 row q-py-sm text-weight-bold col-12">
<div class="col-6 text-center">ระดบคะแนน</div>
<div class="col-6 text-center">ผลสำเรจของงาน</div>
</div>
<div
v-for="(field, index) in Object.keys(fieldLabels)"
:key="index + 1"
class="col-12"
>
<div class="row q-py-lg">
<div class="row col-12 q-py-sm">
<div
class="col-6 text-center text-body1 text-weight-bold"
class="col-6 text-center text-body2"
>
{{ fieldLabels[field as keyof typeof fieldLabels] }}
</div>
@ -259,8 +261,8 @@ function onSubmit() {}
</q-card>
</div>
</div>
</template>
</q-splitter>
</div>
</div>
</q-card-section>
<q-separator />
@ -279,4 +281,17 @@ function onSubmit() {}
background: #ebf9f7 !important;
color: #1bb19ab8 !important;
}
.no-shadow{
box-shadow:none !important;
}
.lineRight{
border-right: 1px solid #EDEDED !important;
}
.lineTop{
border-top: 1px solid #EDEDED !important;
}
.card-box{
border: 1px solid #EDEDED !important;
border-radius: 8px;
}
</style>