จัดโค้ดข้อมูลพื้นฐาน

This commit is contained in:
AnandaTon 2023-11-10 16:10:30 +07:00
parent 977f938439
commit 43c02f3469
6 changed files with 282 additions and 164 deletions

View file

@ -5,6 +5,9 @@ import { useRouter, useRoute } from "vue-router";
import { useCounterMixin } from "@/stores/mixin";
import type { QTableProps } from "quasar";
/**
* รวมตวแปร
*/
const mixin = useCounterMixin();
const {
date2Thai,
@ -22,23 +25,36 @@ const myForm = ref<QForm | null>(null); //form data input
const edit = ref<boolean>(false);
const channel = ref<string>("");
/**
* เรยกขอมลจากรายการ
*/
onMounted(async () => {});
//
const fetchData = async () => {};
/**
* ลบขอม
* @param id ไอดของขอมลทองการลบ
*/
const deleteData = async (id: string) => {};
//
//
const checkSave = () => {};
//
/* บันทึกข้อมูล**/
const SaveData = async () => {};
//
const checkSave = () => {};
/**
* เพมขอม
*/
const addData = async () => {};
//
/**
* แกไขขอม
* @param id องทาง
*/
const editData = async (id: string) => {};
/**
* อนกลบหนารายการ
*/
const clickBack = () => {
router.push(`/discipline/channel`);
};
@ -81,12 +97,7 @@ const clickBack = () => {
<q-separator />
<div class="row col-12 q-pa-sm">
<q-space />
<q-btn
label="บันทึก"
color="public"
@click="checkSave"
>
</q-btn>
<q-btn label="บันทึก" color="public" @click="checkSave"> </q-btn>
</div>
</q-card>
</div>

View file

@ -5,15 +5,17 @@ import router from "@/router";
import { useCounterMixin } from "@/stores/mixin";
import { useQuasar } from "quasar";
import { useDisciplineChannelDataStore } from "@/modules/11_discipline/store/ChannelStore";
import config from "@/app.config";
import http from "@/plugins/http";
const dataStore = useDisciplineChannelDataStore();
const mixin = useCounterMixin();
const { dialogRemove } = mixin;
const $q = useQuasar(); // noti quasar
//
/**
* นหาในตาราง
*/
const filterKeyword = ref<string>("");
const filterRef = ref<HTMLInputElement | null>(null);
const resetFilter = () => {
@ -22,7 +24,10 @@ const resetFilter = () => {
filterRef.value.focus();
}
};
const dataStore = useDisciplineChannelDataStore();
/**
*pagination ของตาราง
*/
const pagination = ref({
// sortBy: "desc",
descending: false,
@ -30,10 +35,17 @@ const pagination = ref({
rowsPerPage: 10,
});
/**
* clickไปหนาเพมchanel
*/
const clickAdd = () => {
router.push(`/discipline/channel/add`);
};
/**
* ลบขอม,
* @param id ไอดของขอม
*/
const clickDelete = (id: string) => {
dialogRemove(
$q,
@ -46,6 +58,9 @@ const clickDelete = (id: string) => {
);
};
/**
* งขอมลจำลองไปย store
*/
onMounted(() => {
// get store
dataStore.fetchData([

View file

@ -1,34 +1,34 @@
<script setup lang="ts">
import Form from "@/modules/11_discipline/components/6_BasicInformation/Director/Form.vue"
import Form from "@/modules/11_discipline/components/6_BasicInformation/Director/Form.vue";
import { useCounterMixin } from "@/stores/mixin";
import { useRoute, useRouter } from "vue-router";
const mixin = useCounterMixin();
const {
messageError,
showLoader,
hideLoader,
dialogConfirm,
success,
} = mixin;
const { messageError, showLoader, hideLoader, dialogConfirm, success } = mixin;
const router = useRouter();
//
/** บันทึกข้อมูลเเละ route กลับหน้าหลัก */
const onSubmit = async () => {
// post
router.push(`/discipline/director`)
router.push(`/discipline/director`);
};
</script>
<template>
<div class="col-xs-12 col-sm-12 col-md-11">
<div class="toptitle col-12 row items-center">
<q-btn icon="mdi-arrow-left" unelevated round dense flat color="primary" class="q-mr-sm"
@click="$router.push(`/discipline/director`)" />
<q-btn
icon="mdi-arrow-left"
unelevated
round
dense
flat
color="primary"
class="q-mr-sm"
@click="$router.push(`/discipline/director`)"
/>
เพมรายชอกรรมการ
</div>
<Form :on-submit="onSubmit" />
</div>
</template>
</template>

View file

@ -1,22 +1,22 @@
<script setup lang="ts">
import { onMounted, reactive } from "vue";
import Form from "@/modules/11_discipline/components/6_BasicInformation/Director/Form.vue"
import Form from "@/modules/11_discipline/components/6_BasicInformation/Director/Form.vue";
import type { FormData } from "@/modules/11_discipline/interface/request/director";
import { useCounterMixin } from "@/stores/mixin";
const mixin = useCounterMixin();
const {
messageError,
showLoader,
hideLoader,
dialogConfirm,
success,
} = mixin;
const mixin = useCounterMixin();
const { messageError, showLoader, hideLoader, dialogConfirm, success } = mixin;
/**
* เรยกใชงาน fetchData เพอดงขอม
*/
onMounted(() => {
fetchData()
fetchData();
});
// get
/**
* get อมลเกากรณแกไขขอม
*/
const data = reactive<FormData>({
prefix: "",
firstname: "",
@ -25,32 +25,45 @@ const data = reactive<FormData>({
phone: "",
responsibilities: "",
email: "",
})
});
/**
* งคาจาก api
*/
const fetchData = async () => {
// api
data.prefix = "นาง"
data.firstname = "เกสินี"
data.lastname = "เจียรสุมัย"
data.position = "ครู"
data.phone = "0800808080"
data.responsibilities = "ประธาน"
data.email = "e@email.com"
data.prefix = "นาง";
data.firstname = "เกสินี";
data.lastname = "เจียรสุมัย";
data.position = "ครู";
data.phone = "0800808080";
data.responsibilities = "ประธาน";
data.email = "e@email.com";
};
//
/**
* นทกขอมลทเเกไข
* @param id ระบ คคล
*/
const onSubmit = async (id: string) => {
// put
// put
};
</script>
<template>
<div class="col-xs-12 col-sm-12 col-md-11">
<div class="toptitle col-12 row items-center">
<q-btn icon="mdi-arrow-left" unelevated round dense flat color="primary" class="q-mr-sm"
@click="$router.push(`/discipline/director`)" />
<q-btn
icon="mdi-arrow-left"
unelevated
round
dense
flat
color="primary"
class="q-mr-sm"
@click="$router.push(`/discipline/director`)"
/>
แกไขรายชอกรรมการ
</div>
<Form @onSubmit="onSubmit" :data="data" />
</div>
</template>
</template>

View file

@ -5,7 +5,9 @@ import type {
FormRef,
} from "@/modules/11_discipline/interface/request/director";
// props page
/**
* props มาจาก page หล
*/
const props = defineProps({
data: {
type: Object,
@ -17,11 +19,16 @@ const props = defineProps({
},
});
//
/**
* อมลรหสบตรประชาชน
*/
//
const idCard = ref<string>("");
const idCardRef = ref<any>(null);
// form
/**
* อมลทงกอน form
*/
const formData = reactive<FormData>({
prefix: "",
firstname: "",
@ -29,8 +36,14 @@ const formData = reactive<FormData>({
position: "",
phone: "",
email: "",
responsibilities: "",
});
/**
* เชคขอมลจาก props
* เมอมอม
* เกบขอมลลง formData
*/
watch(props.data, async () => {
// console.log("data==>", props.data)
formData.prefix = props.data.prefix;
@ -41,14 +54,18 @@ watch(props.data, async () => {
formData.email = props.data.email;
});
//
/**
* เพมบคลากร
*/
function addEmployee() {
if (idCardRef.value.validate()) {
console.log("idCard===>", idCard.value);
}
}
// api
/**
* ตรวจสอบขอมลกอนสงไปย api
*/
const prefixRef = ref<object | null>(null);
const firstnameRef = ref<object | null>(null);
const lastnameRef = ref<object | null>(null);
@ -64,6 +81,7 @@ const formRef: FormRef = {
email: emailRef,
};
/** ฟังชั่นตรวจสอบความถูกต้องก่อน บันทึก */
function onValidate() {
const hasError = [];
for (const key in formRef) {
@ -81,13 +99,19 @@ function onValidate() {
}
</script>
<template>
<form @submit.prevent.stop="onValidate">
<form @submit.prevent.stop="onValidate">
<q-card bordered>
<div class="col-12 row q-pa-md">
<div class="row q-col-gutter-md">
<div class="row col-12" v-if="data === null">
<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-sm q-px-md">
<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-sm q-px-md"
>
นหาบคคลากรทอยในระบบ
</div>
<div class="col-12"><q-separator /></div>
@ -192,18 +216,18 @@ function onValidate() {
</div>
</div>
</div>
<q-separator />
<div class="row col-12 q-pa-sm">
<q-space />
<q-btn
for="ButtonOnSubmit"
id="formSubmit"
color="secondary"
label="บันทึก"
type="submit"
><q-tooltip>บทกขอม</q-tooltip></q-btn
>
</div>
</q-card>
</form>
<q-separator />
<div class="row col-12 q-pa-sm">
<q-space />
<q-btn
for="ButtonOnSubmit"
id="formSubmit"
color="secondary"
label="บันทึก"
type="submit"
><q-tooltip>บทกขอม</q-tooltip></q-btn
>
</div>
</q-card>
</form>
</template>

View file

@ -4,22 +4,19 @@ import type { QTableProps } from "quasar";
import router from "@/router";
import { useCounterMixin } from "@/stores/mixin";
import { useQuasar } from "quasar";
import { useDisciplineDirectorDataStore } from '@/modules/11_discipline/store/DirectorStore'
import { useDisciplineDirectorDataStore } from "@/modules/11_discipline/store/DirectorStore";
import config from "@/app.config";
import http from "@/plugins/http";
const $q = useQuasar();
const dataStore = useDisciplineDirectorDataStore()
const dataStore = useDisciplineDirectorDataStore();
const mixin = useCounterMixin();
const {
messageError,
showLoader,
hideLoader,
dialogConfirm,
dialogRemove,
} = mixin;
const { messageError, showLoader, hideLoader, dialogConfirm, dialogRemove } =
mixin;
/**
* งขอมลจำลองไปย store
*/
onMounted(() => {
// get store
dataStore.fetchData([
@ -35,10 +32,12 @@ onMounted(() => {
email: "g@gmail.com",
phone: "0614565145",
},
])
]);
});
//
/**
* นหาในตาราง
*/
const filterKeyword = ref<string>("");
const filterRef = ref<HTMLInputElement | null>(null);
function resetFilter() {
@ -46,9 +45,11 @@ function resetFilter() {
if (filterRef.value) {
filterRef.value.focus();
}
};
}
// pagination
/**
*pagination ของตาราง
*/
const pagination = ref({
// sortBy: "desc",
descending: false,
@ -56,84 +57,138 @@ const pagination = ref({
rowsPerPage: 25,
});
/**
* ลบขอม
* @param id ของกรรมการแตละบคคล
*/
function clickDelete(id: string) {
dialogRemove(
$q,
async () => {
//
// showLoader();
// await http
// .delete(config.API.periodExamId(id))
// .then((res) => {
// success($q, "");
// })
// .catch((e) => {
// messageError($q, e);
// })
// .finally(async () => {
// hideLoader();
// });
}
);
};
dialogRemove($q, async () => {
//
// showLoader();
// await http
// .delete(config.API.periodExamId(id))
// .then((res) => {
// success($q, "");
// })
// .catch((e) => {
// messageError($q, e);
// })
// .finally(async () => {
// hideLoader();
// });
});
}
</script>
<template>
<div class="toptitle text-dark col-12 row items-center">
รายการชอกรรมการ
</div>
<q-card flat bordered class="col-12 q-mt-sm q-pa-md">
<div class="row col-12 q-col-gutter-sm q-mb-sm">
<div>
<q-btn @click="$router.push(`/discipline/director/add`)" size="12px" flat round color="add" icon="mdi-plus">
<q-tooltip>เพมรายชอกรรมการ</q-tooltip>
</q-btn>
</div>
<q-space />
<q-input class="col-xs-12 col-sm-3 col-md-2" standout dense v-model="filterKeyword" ref="filterRef" outlined
debounce="300" placeholder="ค้นหา">
<template v-slot:append>
<q-icon v-if="filterKeyword == ''" name="search" />
<q-icon v-if="filterKeyword !== ''" name="clear" class="cursor-pointer" @click="resetFilter" />
</template>
</q-input>
<q-select v-model="dataStore.visibleColumns" multiple outlined dense options-dense
:display-value="$q.lang.table.columns" emit-value map-options :options="dataStore.columns" option-value="name"
options-cover style="min-width: 150px" class="col-xs-12 col-sm-3 col-md-2" />
<div class="row col-12 q-col-gutter-sm q-mb-sm">
<div>
<q-btn
@click="$router.push(`/discipline/director/add`)"
size="12px"
flat
round
color="add"
icon="mdi-plus"
>
<q-tooltip>เพมรายชอกรรมการ</q-tooltip>
</q-btn>
</div>
<q-space />
<div class="col-12">
<d-table :columns="dataStore.columns" :rows="dataStore.rows" :filter="filterKeyword" row-key="tb-list" flat
bordered :paging="true" dense v-model:pagination="pagination" :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">
<span class="text-weight-medium">{{ col.label }}</span>
</q-th>
<q-th auto-width />
</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"
@click="$router.push(`/discipline/director/${props.row.no}`)">
<div v-if="col.name == 'no'">
{{ props.rowIndex + 1 }}
</div>
<div v-else>
{{ col.value }}
</div>
</q-td>
<q-td auto-width>
<q-btn dense size="12px" flat round color="red" @click="clickDelete(props.row.id)" icon="mdi-delete">
<q-tooltip>ลบขอม</q-tooltip>
</q-btn>
</q-td>
</q-tr>
</template>
</d-table>
<q-input
class="col-xs-12 col-sm-3 col-md-2"
standout
dense
v-model="filterKeyword"
ref="filterRef"
outlined
debounce="300"
placeholder="ค้นหา"
>
<template v-slot:append>
<q-icon v-if="filterKeyword == ''" name="search" />
<q-icon
v-if="filterKeyword !== ''"
name="clear"
class="cursor-pointer"
@click="resetFilter"
/>
</template>
</q-input>
</div>
<q-select
v-model="dataStore.visibleColumns"
multiple
outlined
dense
options-dense
:display-value="$q.lang.table.columns"
emit-value
map-options
:options="dataStore.columns"
option-value="name"
options-cover
style="min-width: 150px"
class="col-xs-12 col-sm-3 col-md-2"
/>
</div>
<div class="col-12">
<d-table
:columns="dataStore.columns"
:rows="dataStore.rows"
:filter="filterKeyword"
row-key="tb-list"
flat
bordered
:paging="true"
dense
v-model:pagination="pagination"
: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">
<span class="text-weight-medium">{{ col.label }}</span>
</q-th>
<q-th auto-width />
</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"
@click="$router.push(`/discipline/director/${props.row.no}`)"
>
<div v-if="col.name == 'no'">
{{ props.rowIndex + 1 }}
</div>
<div v-else>
{{ col.value }}
</div>
</q-td>
<q-td auto-width>
<q-btn
dense
size="12px"
flat
round
color="red"
@click="clickDelete(props.row.id)"
icon="mdi-delete"
>
<q-tooltip>ลบขอม</q-tooltip>
</q-btn>
</q-td>
</q-tr>
</template>
</d-table>
</div>
</q-card>
</template>
</template>