ปรับ kpi

This commit is contained in:
STW_TTTY\stwtt 2024-08-06 15:43:41 +07:00
parent 56fae384bf
commit b832a6e2a4
6 changed files with 174 additions and 127 deletions

View file

@ -26,6 +26,7 @@ const {
} = mixin; } = mixin;
const modal = defineModel<boolean>("modal", { required: true }); const modal = defineModel<boolean>("modal", { required: true });
const checkDetail = defineModel<boolean>("checkDetail", { required: true });
const numpage = defineModel<number>("numpage", { required: true }); const numpage = defineModel<number>("numpage", { required: true });
const isStatusEdit = defineModel<boolean>("isStatusEdit", { required: true }); const isStatusEdit = defineModel<boolean>("isStatusEdit", { required: true });
const kpiUserPlannedId = defineModel<string>("kpiUserPlannedId", { const kpiUserPlannedId = defineModel<string>("kpiUserPlannedId", {
@ -252,51 +253,53 @@ function fetchspecialByid(id: string) {
} }
function clickList(id: string, isData: boolean = false) { function clickList(id: string, isData: boolean = false) {
showLoader(); if (!checkDetail.value) {
const url = showLoader();
numpage.value === 1 const url =
? config.API.kpiPlan numpage.value === 1
: numpage.value === 2 ? config.API.kpiPlan
? config.API.kpiRole : numpage.value === 2
: config.API.kpiSpecial; ? config.API.kpiRole
http : config.API.kpiSpecial;
.get(`${url}/${id}`) http
.then((res) => { .get(`${url}/${id}`)
listCheckID.value = id; .then((res) => {
const data = res.data.result; listCheckID.value = id;
if (!isData) { const data = res.data.result;
formDetail.target = data.target; if (!isData) {
formDetail.unit = data.unit; formDetail.target = data.target;
formDetail.weight = data.weight; formDetail.unit = data.unit;
formDetail.meaning = data.meaning; formDetail.weight = data.weight;
formDetail.formula = data.formula; formDetail.meaning = data.meaning;
formDetail.achievement1 = data.achievement1; formDetail.formula = data.formula;
formDetail.achievement2 = data.achievement2; formDetail.achievement1 = data.achievement1;
formDetail.achievement3 = data.achievement3; formDetail.achievement2 = data.achievement2;
formDetail.achievement4 = data.achievement4; formDetail.achievement3 = data.achievement3;
formDetail.achievement5 = data.achievement5; formDetail.achievement4 = data.achievement4;
} formDetail.achievement5 = data.achievement5;
formDetail.orgRevisionId = data.corgRevisionId; }
formDetail.id = data.id; formDetail.orgRevisionId = data.corgRevisionId;
formDetail.year = data.year; formDetail.id = data.id;
formDetail.round = data.round; formDetail.year = data.year;
formDetail.kpiPeriodId = data.kpiPeriodId; formDetail.round = data.round;
formDetail.includingName = data.includingName; formDetail.kpiPeriodId = data.kpiPeriodId;
formDetail.including = data.including; formDetail.includingName = data.includingName;
formDetail.node = data.node; formDetail.including = data.including;
formDetail.nodeId = data.nodeId; formDetail.node = data.node;
formDetail.nodeName = data.nodeName; formDetail.nodeId = data.nodeId;
formDetail.strategy = data.strategy; formDetail.nodeName = data.nodeName;
formDetail.strategyId = data.strategyId; formDetail.strategy = data.strategy;
formDetail.strategyName = data.strategyName; formDetail.strategyId = data.strategyId;
formDetail.documentInfoEvidence = data.documentInfoEvidence; formDetail.strategyName = data.strategyName;
}) formDetail.documentInfoEvidence = data.documentInfoEvidence;
.catch((err) => { })
messageError($q, err); .catch((err) => {
}) messageError($q, err);
.finally(() => { })
hideLoader(); .finally(() => {
}); hideLoader();
});
}
} }
/** ปิด dialog */ /** ปิด dialog */
@ -337,6 +340,9 @@ function closeDialog() {
formFilter.year = null; formFilter.year = null;
formFilter.page = 1; formFilter.page = 1;
formFilter.pageSize = 20; formFilter.pageSize = 20;
isStatusEdit.value = false
checkDetail.value = false;
} }
function onSubmit() { function onSubmit() {
@ -420,12 +426,16 @@ watch(
if (numpage.value === 1) { if (numpage.value === 1) {
fetchListPlan(); fetchListPlan();
isStatusEdit.value && fetchListPlanByid(kpiUserPlannedId.value); isStatusEdit.value && fetchListPlanByid(kpiUserPlannedId.value);
checkDetail.value && fetchListPlanByid(kpiUserPlannedId.value);
} else if (numpage.value === 2) { } else if (numpage.value === 2) {
fetchListRole(); fetchListRole();
isStatusEdit.value && fetchRoleByid(kpiUserPlannedId.value); isStatusEdit.value && fetchRoleByid(kpiUserPlannedId.value);
checkDetail.value && fetchRoleByid(kpiUserPlannedId.value);
} else if (numpage.value === 3) { } else if (numpage.value === 3) {
fetchListSpecial(); fetchListSpecial();
isStatusEdit.value && fetchspecialByid(kpiUserPlannedId.value); isStatusEdit.value && fetchspecialByid(kpiUserPlannedId.value);
checkDetail.value && fetchspecialByid(kpiUserPlannedId.value);
} }
} }
} }
@ -454,7 +464,14 @@ const title = computed(() => {
<q-dialog v-model="modal" persistent> <q-dialog v-model="modal" persistent>
<q-card class="col-12" style="width: 100%"> <q-card class="col-12" style="width: 100%">
<q-form greedy @submit.prevent @validation-success="onSubmit"> <q-form greedy @submit.prevent @validation-success="onSubmit">
<DialogHeader :tittle="title" :close="closeDialog" /> <DialogHeader
:tittle="
checkDetail
? `รายละเอียดตัวชี้วัดตามแผนปฏิบัติราชการประจําปี`
: `${title}`
"
:close="closeDialog"
/>
<q-separator /> <q-separator />
<q-card-section class="q-pa-none scroll" style="max-height: 75vh"> <q-card-section class="q-pa-none scroll" style="max-height: 75vh">
@ -463,6 +480,7 @@ const title = computed(() => {
<div class="col-12 fit"> <div class="col-12 fit">
<div class="row col-12" v-if="numpage !== 3"> <div class="row col-12" v-if="numpage !== 3">
<q-checkbox <q-checkbox
:disable="checkDetail"
v-model="formFilter.isAll" v-model="formFilter.isAll"
label="แสดงตัวชี้วัดภายใต้หน่วยงาน/ส่วนราชการทุกระดับ" label="แสดงตัวชี้วัดภายใต้หน่วยงาน/ส่วนราชการทุกระดับ"
@update:model-value="fetchNewList()" @update:model-value="fetchNewList()"
@ -471,6 +489,7 @@ const title = computed(() => {
<div class="row q-col-gutter-sm col-12"> <div class="row q-col-gutter-sm col-12">
<div class="col-5"> <div class="col-5">
<datepicker <datepicker
:readonly="checkDetail"
menu-class-name="modalfix" menu-class-name="modalfix"
v-model="formFilter.year" v-model="formFilter.year"
:locale="'th'" :locale="'th'"
@ -486,6 +505,7 @@ const title = computed(() => {
<template #trigger> <template #trigger>
<q-input <q-input
dense dense
:readonly="checkDetail"
outlined outlined
:model-value=" :model-value="
formFilter.year === null || formFilter.year === '' formFilter.year === null || formFilter.year === ''
@ -519,6 +539,7 @@ const title = computed(() => {
<div class="col-7"> <div class="col-7">
<q-select <q-select
dense dense
:readonly="checkDetail"
outlined outlined
v-model="formFilter.period" v-model="formFilter.period"
:options="roundOp" :options="roundOp"
@ -538,6 +559,7 @@ const title = computed(() => {
<q-input <q-input
v-model="formFilter.keyword" v-model="formFilter.keyword"
outlined outlined
:readonly="checkDetail"
dense dense
label="ค้นหา" label="ค้นหา"
@keydown.enter.prevent="fetchNewList()" @keydown.enter.prevent="fetchNewList()"
@ -572,6 +594,7 @@ const title = computed(() => {
:active="listCheckID === item.id" :active="listCheckID === item.id"
active-class="my-menu-link" active-class="my-menu-link"
@click="clickList(item.id)" @click="clickList(item.id)"
:style="checkDetail ? 'pointer-events: none;' : ''"
> >
<q-item-section class="q-pa-none"> <q-item-section class="q-pa-none">
<div class="row items-center full-width"> <div class="row items-center full-width">
@ -639,6 +662,7 @@ const title = computed(() => {
<q-input <q-input
v-if="numpage === 3" v-if="numpage === 3"
outlined outlined
:readonly="checkDetail"
v-model="formDetail.including" v-model="formDetail.including"
bg-color="white" bg-color="white"
dense dense
@ -660,6 +684,7 @@ const title = computed(() => {
<q-input <q-input
v-if="numpage === 3" v-if="numpage === 3"
outlined outlined
:readonly="checkDetail"
v-model="formDetail.includingName" v-model="formDetail.includingName"
bg-color="white" bg-color="white"
dense dense
@ -678,6 +703,7 @@ const title = computed(() => {
<div class="col-8"> <div class="col-8">
<q-input <q-input
outlined outlined
:readonly="checkDetail"
v-model="formDetail.target" v-model="formDetail.target"
bg-color="white" bg-color="white"
dense dense
@ -698,6 +724,7 @@ const title = computed(() => {
v-model="formDetail.unit" v-model="formDetail.unit"
bg-color="white" bg-color="white"
dense dense
:readonly="checkDetail"
class="inputgreen" class="inputgreen"
:rules="[ :rules="[
(val:string) => !!val || `${'กรุณากรอกหน่วยนับ'}`, (val:string) => !!val || `${'กรุณากรอกหน่วยนับ'}`,
@ -712,6 +739,7 @@ const title = computed(() => {
<div class="col-4 text-grey-6">ำหน (อยละ)</div> <div class="col-4 text-grey-6">ำหน (อยละ)</div>
<div class="col-8"> <div class="col-8">
<q-input <q-input
:readonly="checkDetail"
outlined outlined
v-model="formDetail.weight" v-model="formDetail.weight"
bg-color="white" bg-color="white"
@ -743,6 +771,7 @@ const title = computed(() => {
<div class="col-6 text-center text-body2">5</div> <div class="col-6 text-center text-body2">5</div>
<div class="col-6"> <div class="col-6">
<q-input <q-input
:readonly="checkDetail"
v-model="formDetail.achievement5" v-model="formDetail.achievement5"
outlined outlined
dense dense
@ -758,6 +787,7 @@ const title = computed(() => {
<div class="col-6 text-center text-body2">4</div> <div class="col-6 text-center text-body2">4</div>
<div class="col-6 text-center text-primary"> <div class="col-6 text-center text-primary">
<q-input <q-input
:readonly="checkDetail"
v-model="formDetail.achievement4" v-model="formDetail.achievement4"
outlined outlined
dense dense
@ -773,6 +803,7 @@ const title = computed(() => {
<div class="col-6 text-center text-body2">3</div> <div class="col-6 text-center text-body2">3</div>
<div class="col-6 text-center text-primary"> <div class="col-6 text-center text-primary">
<q-input <q-input
:readonly="checkDetail"
v-model="formDetail.achievement3" v-model="formDetail.achievement3"
outlined outlined
dense dense
@ -788,6 +819,7 @@ const title = computed(() => {
<div class="col-6 text-center text-body2">2</div> <div class="col-6 text-center text-body2">2</div>
<div class="col-6 text-center text-primary"> <div class="col-6 text-center text-primary">
<q-input <q-input
:readonly="checkDetail"
v-model="formDetail.achievement2" v-model="formDetail.achievement2"
outlined outlined
dense dense
@ -803,6 +835,7 @@ const title = computed(() => {
<div class="col-6 text-center text-body2">1</div> <div class="col-6 text-center text-body2">1</div>
<div class="col-6 text-center text-primary"> <div class="col-6 text-center text-primary">
<q-input <q-input
:readonly="checkDetail"
v-model="formDetail.achievement1" v-model="formDetail.achievement1"
outlined outlined
dense dense
@ -821,6 +854,7 @@ const title = computed(() => {
label="นิยามหรือความหมายของตัวชี้วัด" label="นิยามหรือความหมายของตัวชี้วัด"
type="textarea" type="textarea"
outlined outlined
:readonly="checkDetail"
dense dense
:rules="[(val:string) => !!val || `${'กรุณากรอกตัวชี้วัด'}`,]" :rules="[(val:string) => !!val || `${'กรุณากรอกตัวชี้วัด'}`,]"
hide-bottom-space hide-bottom-space
@ -834,6 +868,7 @@ const title = computed(() => {
v-model="formDetail.formula" v-model="formDetail.formula"
label="สูตรคำนวณ" label="สูตรคำนวณ"
type="textarea" type="textarea"
:readonly="checkDetail"
outlined outlined
dense dense
:rules="[(val:string) => !!val || `${'กรุณากรอกตัวชี้วัด'}`,]" :rules="[(val:string) => !!val || `${'กรุณากรอกตัวชี้วัด'}`,]"
@ -850,6 +885,7 @@ const title = computed(() => {
type="textarea" type="textarea"
outlined outlined
dense dense
:readonly="checkDetail"
:rules="[(val:string) => !!val || `${'กรุณากรอกข้อมูลเอกสารหลักฐาน'}`,]" :rules="[(val:string) => !!val || `${'กรุณากรอกข้อมูลเอกสารหลักฐาน'}`,]"
hide-bottom-space hide-bottom-space
class="inputgreen" class="inputgreen"
@ -860,6 +896,7 @@ const title = computed(() => {
<datepicker <datepicker
v-model="formDetail.startDate" v-model="formDetail.startDate"
:locale="'th'" :locale="'th'"
:readonly="checkDetail"
autoApply autoApply
:enableTimePicker="false" :enableTimePicker="false"
week-start="0" week-start="0"
@ -871,6 +908,7 @@ const title = computed(() => {
}}</template> }}</template>
<template #trigger> <template #trigger>
<q-input <q-input
:readonly="checkDetail"
dense dense
outlined outlined
class="inputgreen" class="inputgreen"
@ -906,6 +944,7 @@ const title = computed(() => {
<datepicker <datepicker
v-model="formDetail.endDate" v-model="formDetail.endDate"
:locale="'th'" :locale="'th'"
:readonly="checkDetail"
autoApply autoApply
:enableTimePicker="false" :enableTimePicker="false"
week-start="0" week-start="0"
@ -918,6 +957,7 @@ const title = computed(() => {
<template #trigger> <template #trigger>
<q-input <q-input
dense dense
:readonly="checkDetail"
outlined outlined
class="inputgreen" class="inputgreen"
:model-value=" :model-value="
@ -952,9 +992,9 @@ const title = computed(() => {
</div> </div>
</div> </div>
</q-card-section> </q-card-section>
<q-separator /> <q-separator v-if="!checkDetail"/>
<q-card-actions align="right" class="bg-white text-teal"> <q-card-actions v-if="!checkDetail" align="right" class="bg-white text-teal">
<q-btn label="บันทึก" color="secondary" type="submit" <q-btn label="บันทึก" color="secondary" type="submit"
><q-tooltip>นทกขอม</q-tooltip></q-btn ><q-tooltip>นทกขอม</q-tooltip></q-btn
> >

View file

@ -551,8 +551,8 @@ watch(
</q-card-section> </q-card-section>
<q-separator /> <q-separator />
<q-card-actions align="right" class="bg-white text-teal"> <q-card-actions align="right" class="bg-white text-teal" v-if="competencyType !== 'HEAD' && competencyType !== 'GROUP'">
<q-btn label="บันทึก" color="secondary" type="submit" <q-btn v-if="competencyType !== 'HEAD' && competencyType !== 'GROUP'" label="บันทึก" color="secondary" type="submit"
><q-tooltip>นทกขอม</q-tooltip></q-btn ><q-tooltip>นทกขอม</q-tooltip></q-btn
> >
</q-card-actions> </q-card-actions>

View file

@ -32,7 +32,7 @@ const {
const title = defineModel<string>("title", { required: true }); const title = defineModel<string>("title", { required: true });
const rows = defineModel<any[]>("data", { required: true }); const rows = defineModel<any[]>("data", { required: true });
const numpage = defineModel<number>("page", { required: true }); const numpage = defineModel<number>("page", { required: true });
const checkDetail = ref<boolean>(false);
const props = defineProps({ const props = defineProps({
fetchList: { type: Function, required: true }, fetchList: { type: Function, required: true },
}); });
@ -137,8 +137,9 @@ function onAdd(edit: boolean = false, id: string = "") {
} }
function onClickView(id: string) { function onClickView(id: string) {
checkDetail.value = true;
kpiUserPlannedId.value = id; kpiUserPlannedId.value = id;
modalViewInfo.value = true; modal.value = true;
} }
async function onEvaluate() { async function onEvaluate() {
@ -310,7 +311,7 @@ const isEditStep3 = computed(() => {
dense dense
@click="onClickView(props.row.id)" @click="onClickView(props.row.id)"
> >
<q-tooltip>คำอธบายผลสำเรจของงาน</q-tooltip> <q-tooltip>รายละเอยด</q-tooltip>
</q-btn></q-td </q-btn></q-td
> >
<q-td v-for="col in props.cols" :key="col.id"> <q-td v-for="col in props.cols" :key="col.id">
@ -334,7 +335,10 @@ const isEditStep3 = computed(() => {
<div v-else-if="col.name === 'achievement'"> <div v-else-if="col.name === 'achievement'">
{{ props.row.point ? `ระดับ ${props.row.point}` : "" }} {{ props.row.point ? `ระดับ ${props.row.point}` : "" }}
</div> </div>
<div v-else-if="col.name === 'includingName'" style="width: 200px; white-space: normal;"> <div
v-else-if="col.name === 'includingName'"
style="width: 200px; white-space: normal"
>
{{ props.row.includingName ? props.row.includingName : "-" }} {{ props.row.includingName ? props.row.includingName : "-" }}
</div> </div>
<div v-else-if="col.name === 'evaluationResults'"> <div v-else-if="col.name === 'evaluationResults'">
@ -350,7 +354,7 @@ const isEditStep3 = computed(() => {
</q-td> </q-td>
<td> <td>
<div <div
v-if=" v-if="
(store.dataEvaluation.evaluationStatus == 'APPROVE' && (store.dataEvaluation.evaluationStatus == 'APPROVE' &&
store.tabMain === '2') || store.tabMain === '2') ||
store.tabMain === '3' store.tabMain === '3'
@ -506,8 +510,9 @@ const isEditStep3 = computed(() => {
<Dialog <Dialog
v-model:modal="modal" v-model:modal="modal"
:numpage="numpage" :numpage="numpage"
:isStatusEdit="isStatusEdit" v-model:isStatusEdit="isStatusEdit"
:kpiUserPlannedId="kpiUserPlannedId" :kpiUserPlannedId="kpiUserPlannedId"
v-model:checkDetail="checkDetail"
/> />
<!-- <Dialog03 <!-- <Dialog03

View file

@ -15,6 +15,7 @@ import { useRoute } from "vue-router";
import type { import type {
FormCapacityList, FormCapacityList,
ListCriteria, ListCriteria,
DataOptions,
} from "@/modules/14_KPI/interface/request/index"; } from "@/modules/14_KPI/interface/request/index";
import DialogListCriteria from "@/modules/14_KPI/components/Tab/Dialog/DialogListCriteria.vue"; import DialogListCriteria from "@/modules/14_KPI/components/Tab/Dialog/DialogListCriteria.vue";
@ -126,8 +127,8 @@ function onAdd(type: string) {
modal.value = true; modal.value = true;
} }
const rows = ref<any[]>([]); const rows = ref<any>([]);
const lists = ref<any[]>([]); const lists = ref<any>([]);
// const resultEvaluation = ref<string | 0>(0); // const resultEvaluation = ref<string | 0>(0);
function getData(type: any) { function getData(type: any) {
@ -147,8 +148,8 @@ function getData(type: any) {
let result = 0; let result = 0;
let weight = 0; let weight = 0;
let total = 0; let total = 0;
for (let index = 0; index < store.competencyType.length; index++) { for (let index = 0; index < competencyType.value.length; index++) {
const element = await store.competencyType[index]; const element = await competencyType.value[index];
const dataArr = await lists.value.find( const dataArr = await lists.value.find(
(x: any) => x.type == element.id (x: any) => x.type == element.id
@ -274,18 +275,6 @@ const isEditStep3 = computed(() => {
); );
}); });
watch(
() => store.dataEvaluation.capacityPoint,
(newValue, oldValue) => {
if (newValue !== oldValue) {
for (let index = 0; index < store.competencyType.length; index++) {
const element = store.competencyType[index];
getData(element.id);
}
}
}
);
function onInfo() { function onInfo() {
modalCriteria.value = true; modalCriteria.value = true;
} }
@ -300,16 +289,35 @@ function onLevel(num: number, list: any) {
modalLevel.value = true; modalLevel.value = true;
} }
const competencyType = ref<DataOptions[]>([]);
onMounted(() => { onMounted(() => {
for (let index = 0; index < store.competencyType.length; index++) { setTimeout(async () => {
const element = store.competencyType[index]; // console.log("posTypeName===>", store.dataEvaluation.posTypeName);
getData(element.id);
} competencyType.value =
store.dataEvaluation.posTypeName == "อำนวยการ" ||
store.dataEvaluation.posTypeName == "บริหาร"
? store.competencyType.filter(
(x: DataOptions) =>
x.id == "HEAD" ||
x.id == "EXECUTIVE" ||
x.id == "INSPECTOR" ||
x.id == "DIRECTOR"
)
: store.competencyType.filter(
(x: DataOptions) => x.id == "HEAD" || x.id == "GROUP"
);
for (let index = 0; index < competencyType.value.length; index++) {
const element = competencyType.value[index];
getData(element.id);
}
}, 1000);
}); });
</script> </script>
<template> <template>
<div v-for="(item, index) in store.competencyType" :key="index"> <div v-for="(item, index) in competencyType" :key="index">
<q-card bordered style="border-radius: 5px" class="no-shadow q-mt-sm"> <q-card bordered style="border-radius: 5px" class="no-shadow q-mt-sm">
<q-card-section class="bg-grey-2 q-py-sm"> <q-card-section class="bg-grey-2 q-py-sm">
<div class="row items-center"> <div class="row items-center">
@ -349,7 +357,7 @@ onMounted(() => {
<d-table <d-table
ref="table" ref="table"
:columns="columns" :columns="columns"
:rows="rows[item.id]?.length !== 0 ? rows[item.id]:[]" :rows="rows[item.id]"
row-key="id" row-key="id"
flat flat
bordered bordered
@ -384,14 +392,19 @@ onMounted(() => {
<q-tr :props="props" class="cursor-pointer"> <q-tr :props="props" class="cursor-pointer">
<q-td auto-width> <q-td auto-width>
<q-btn <q-btn
v-if="isEditStep1"
flat flat
icon="mdi-eye"
color="info"
round round
class="q-ml-xs" :icon="
@click="onAchievement(props.row.achievement)" item.id == 'HEAD' || item.id == 'GROUP' ? 'mdi-eye' : 'edit'
"
color="info"
@click.stop.pervent="onEdit(props.row, item.id)"
> >
<q-tooltip>พฤตกรรมทคาดหว/พฤตกรรมยอย</q-tooltip> <q-tooltip v-if="item.id == 'HEAD' || item.id == 'GROUP'"
>รายละเอยด</q-tooltip
>
<q-tooltip v-else>แก้ไข</q-tooltip>
</q-btn> </q-btn>
</q-td> </q-td>
<q-td v-for="col in props.cols" :key="col.id"> <q-td v-for="col in props.cols" :key="col.id">
@ -439,7 +452,7 @@ onMounted(() => {
</q-td> </q-td>
<q-td> <q-td>
<div <div
v-if=" v-if="
(store.dataEvaluation.evaluationStatus == 'APPROVE' && (store.dataEvaluation.evaluationStatus == 'APPROVE' &&
store.tabMain === '2') || store.tabMain === '2') ||
store.tabMain === '3' store.tabMain === '3'
@ -459,22 +472,6 @@ onMounted(() => {
</div> </div>
<div v-if="isEditStep1"> <div v-if="isEditStep1">
<q-btn
flat
round
:icon="
item.id == 'HEAD' || item.id == 'GROUP'
? 'mdi-eye'
: 'edit'
"
color="info"
@click.stop.pervent="onEdit(props.row, item.id)"
>
<q-tooltip v-if="item.id == 'HEAD' || item.id == 'GROUP'"
>รายละเอยด</q-tooltip
>
<q-tooltip v-else>แก้ไข</q-tooltip>
</q-btn>
<q-btn <q-btn
flat flat
round round

View file

@ -53,6 +53,11 @@ interface FormComment {
reason: string; reason: string;
} }
interface DataOptions {
id: string;
name: string;
}
interface FormCommentByRole { interface FormCommentByRole {
id: string; id: string;
topic: string; topic: string;
@ -80,4 +85,5 @@ export type {
FormComment, FormComment,
FormCommentByRole, FormCommentByRole,
FormQuery, FormQuery,
DataOptions
}; };

View file

@ -505,34 +505,33 @@ onMounted(() => {
<template v-slot:body="props"> <template v-slot:body="props">
<q-tr :props="props" class="cursor-pointer"> <q-tr :props="props" class="cursor-pointer">
<q-td> <q-td>
<q-btn flat round color="grey" icon="mdi-dots-vertical"> <q-btn
<q-menu> v-if="
<q-list style="min-width: 150px" dense> props.row.isActive !== false &&
<q-item checkPermission($route)?.attrIsUpdate !== false
v-if="props.row.isActive !== false && checkPermission($route)?.attrIsUpdate !== false" "
clickable flat
v-close-popup round
@click="onClickAction('close', props.row.id)" dense
> color="orange"
<q-item-section avatar> icon="mdi-close"
<q-icon :color="'orange'" :name="'mdi-close'" /> >
</q-item-section> <q-tooltip>ดรอบ</q-tooltip>
<q-item-section>ดรอบ</q-item-section>
</q-item>
<q-item
v-if="checkPermission($route)?.attrIsDelete !== false"
clickable
v-close-popup
@click="onClickAction('delete', props.row.id)"
>
<q-item-section avatar>
<q-icon :color="'red'" :name="'delete'" />
</q-item-section>
<q-item-section>ลบรอบ</q-item-section>
</q-item>
</q-list>
</q-menu>
</q-btn> </q-btn>
<q-btn
v-if="checkPermission($route)?.attrIsDelete !== false"
clickable
v-close-popup
@click="onClickAction('delete', props.row.id)"
flat
round
dense
color="red"
icon="mdi-delete"
>
<q-tooltip>ลบรอบ</q-tooltip>
</q-btn>
</q-td> </q-td>
<q-td v-for="col in props.cols" :key="col.name" :props="props"> <q-td v-for="col in props.cols" :key="col.name" :props="props">
<div class="table_ellipsis"> <div class="table_ellipsis">