เพิ่ม form สร้าง schedule
This commit is contained in:
parent
f86a0d70ca
commit
04dc730adc
2 changed files with 315 additions and 0 deletions
46
src/modules/04_system/components/formDialog.vue
Normal file
46
src/modules/04_system/components/formDialog.vue
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
<script setup lang="ts">
|
||||
import DialogHeader from "@/components/DialogHeader.vue";
|
||||
|
||||
const openDialog = defineModel<boolean>("openDialog", {
|
||||
required: true,
|
||||
default: false,
|
||||
});
|
||||
|
||||
defineProps<{
|
||||
title: string;
|
||||
submit?: (...args: unknown[]) => void;
|
||||
close?: (...args: unknown[]) => void;
|
||||
}>();
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<q-dialog v-model="openDialog" class="dialog-content-top">
|
||||
<q-card style="width: 80%">
|
||||
<q-form
|
||||
greedy
|
||||
@submit.prevent
|
||||
@validation-success="submit"
|
||||
class="full-height"
|
||||
>
|
||||
<!-- header -->
|
||||
<DialogHeader :tittle="title" :close="close" />
|
||||
<q-separator />
|
||||
|
||||
<q-card-section> <slot /> </q-card-section>
|
||||
|
||||
<q-separator />
|
||||
<q-card-actions align="right">
|
||||
<q-btn label="บันทึก" color="secondary" type="submit"
|
||||
><q-tooltip>บันทึกข้อมูล</q-tooltip></q-btn
|
||||
>
|
||||
</q-card-actions>
|
||||
</q-form>
|
||||
</q-card>
|
||||
</q-dialog>
|
||||
</template>
|
||||
|
||||
<style lang="scss">
|
||||
.form-header {
|
||||
border-bottom: 1px solid $grey-2;
|
||||
}
|
||||
</style>
|
||||
269
src/modules/04_system/components/formSchedule .vue
Normal file
269
src/modules/04_system/components/formSchedule .vue
Normal file
|
|
@ -0,0 +1,269 @@
|
|||
<script setup lang="ts">
|
||||
import { ref, watch } from "vue";
|
||||
|
||||
const name = defineModel<string>("name");
|
||||
const typeTime = defineModel<string>("typeTime", { default: "set" });
|
||||
const time = defineModel<string>("time");
|
||||
const timeStartEvery = defineModel<string>("timeStartEvery");
|
||||
const startAt = defineModel<string>("startAt");
|
||||
const selectDate = defineModel<string[]>("date", { default: [] });
|
||||
const tab = defineModel<string>("tab");
|
||||
|
||||
const timeStartEveryOptions: { value: string }[] = Array.from(
|
||||
{ length: 24 },
|
||||
(_, i) => ({ value: (i + 1).toString() })
|
||||
);
|
||||
|
||||
watch(typeTime, () => {
|
||||
time.value = "";
|
||||
timeStartEvery.value = "";
|
||||
});
|
||||
|
||||
watch(tab, () => {
|
||||
typeTime.value = "set";
|
||||
time.value = "";
|
||||
timeStartEvery.value = "";
|
||||
selectDate.value = [];
|
||||
});
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="row q-col-gutter-md items-center text-grey-8">
|
||||
<div class="col-12">
|
||||
ชื่อของข้อมูลสำรองใหม่
|
||||
<q-input
|
||||
outlined
|
||||
clearable
|
||||
hide-bottom-space
|
||||
dense
|
||||
v-model="name"
|
||||
label="ชื่อ Backup"
|
||||
:rules="[(val:string) => val.length <= 30 || 'ชื่อต้องไม่เกิน 16 ตัวอักษร' , (val:string) => /^[A-Za-z0-9\-]+$/.test(val) || 'ชื่อต้องเป็นภาษาอังกฤษ พิมพ์ใหญ่หรือเล็ก และตัวเลขเท่านั้น']"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="col-12 column" v-if="tab === 'daily'">
|
||||
เริ่มเวลา
|
||||
<div class="col-6 row items-center">
|
||||
<div class="col-3">
|
||||
<q-radio v-model="typeTime" val="set" label="กำหนดเวลา" />
|
||||
</div>
|
||||
<div class="col-3">
|
||||
<q-input
|
||||
v-model="time"
|
||||
outlined
|
||||
clearable
|
||||
hide-bottom-space
|
||||
dense
|
||||
type="time"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6 row items-center q-pt-sm">
|
||||
<div class="col-3">
|
||||
<q-radio v-model="typeTime" val="start" label="เริ่มทุก" />
|
||||
</div>
|
||||
<div class="col-3">
|
||||
<q-select
|
||||
label="เลือก"
|
||||
v-model="timeStartEvery"
|
||||
:options="timeStartEveryOptions"
|
||||
outlined
|
||||
emit-value
|
||||
dense
|
||||
emit-option
|
||||
option-label="value"
|
||||
option-value="value"
|
||||
map-options
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12 column" v-if="tab === 'weekly'">
|
||||
<div class="col-12 row">
|
||||
<div>
|
||||
เริ่มเวลา
|
||||
<q-input
|
||||
v-model="time"
|
||||
outlined
|
||||
clearable
|
||||
hide-bottom-space
|
||||
dense
|
||||
type="time"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12 q-gutter-sm row q-pt-sm">
|
||||
<q-card
|
||||
:class="{
|
||||
'bg-primary text-white': selectDate.includes(v.value),
|
||||
}"
|
||||
style="
|
||||
user-select: none;
|
||||
transition: 100ms background-color ease-in-out;
|
||||
"
|
||||
v-for="(v, i) in [
|
||||
{
|
||||
value: 'mon',
|
||||
name: 'จันทร์',
|
||||
},
|
||||
{
|
||||
value: 'tue',
|
||||
name: 'อังคาร',
|
||||
},
|
||||
{
|
||||
value: 'wed',
|
||||
name: 'พุธ',
|
||||
},
|
||||
{
|
||||
value: 'thu',
|
||||
name: 'พฤหัสบดี',
|
||||
},
|
||||
{
|
||||
value: 'fri',
|
||||
name: 'ศุกร์',
|
||||
},
|
||||
{
|
||||
value: 'sun',
|
||||
name: 'อาทิตย์',
|
||||
},
|
||||
{
|
||||
value: 'sat',
|
||||
name: 'เสาร์',
|
||||
},
|
||||
]"
|
||||
flast
|
||||
bordered
|
||||
class="q-pa-sm col text-center cursor-pointer"
|
||||
@click="
|
||||
() => {
|
||||
if (!selectDate.includes(v.value)) selectDate.push(v.value);
|
||||
else selectDate.splice(selectDate.indexOf(v.value), 1);
|
||||
}
|
||||
"
|
||||
>{{ v.name }}</q-card
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12 column" v-if="tab === 'monthly'">
|
||||
<div class="col-12 row">
|
||||
<div>
|
||||
เริ่มเวลา
|
||||
<q-input
|
||||
v-model="time"
|
||||
outlined
|
||||
clearable
|
||||
hide-bottom-space
|
||||
dense
|
||||
type="time"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12 q-pt-sm">
|
||||
<div class="row q-col-gutter-sm">
|
||||
<div
|
||||
class="col-2"
|
||||
v-for="(v, i) in Array.from({ length: 31 }, (_, i) => ({
|
||||
value: i + 1,
|
||||
}))"
|
||||
>
|
||||
<q-card
|
||||
:class="{
|
||||
'bg-primary text-white': selectDate.includes(
|
||||
v.value.toString()
|
||||
),
|
||||
}"
|
||||
style="
|
||||
user-select: none;
|
||||
transition: 100ms background-color ease-in-out;
|
||||
"
|
||||
flat
|
||||
bordered
|
||||
class="text-center q-px-md q-py-sm cursor-pointer"
|
||||
@click="
|
||||
() => {
|
||||
if (!selectDate.includes(v.value.toString()))
|
||||
selectDate.push(v.value.toString());
|
||||
else
|
||||
selectDate.splice(
|
||||
selectDate.indexOf(v.value.toString()),
|
||||
1
|
||||
);
|
||||
}
|
||||
"
|
||||
>{{ v.value }}</q-card
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-6 column">
|
||||
วันที่เริ่มการสำรองข้อมูล
|
||||
|
||||
<q-input outlined clearable hide-bottom-space dense v-model="startAt">
|
||||
<template v-slot:prepend>
|
||||
<q-icon name="event" class="cursor-pointer">
|
||||
<q-popup-proxy
|
||||
cover
|
||||
transition-show="scale"
|
||||
transition-hide="scale"
|
||||
>
|
||||
<q-date v-model="startAt" mask="YYYY-MM-DD HH:mm">
|
||||
<div class="row items-center justify-end">
|
||||
<q-btn v-close-popup label="Close" color="primary" flat />
|
||||
</div>
|
||||
</q-date>
|
||||
</q-popup-proxy>
|
||||
</q-icon>
|
||||
</template>
|
||||
|
||||
<template v-slot:append>
|
||||
<q-icon name="access_time" class="cursor-pointer">
|
||||
<q-popup-proxy
|
||||
cover
|
||||
transition-show="scale"
|
||||
transition-hide="scale"
|
||||
>
|
||||
<q-time v-model="startAt" mask="YYYY-MM-DD HH:mm" format24h>
|
||||
<div class="row items-center justify-end">
|
||||
<q-btn v-close-popup label="Close" color="primary" flat />
|
||||
</div>
|
||||
</q-time>
|
||||
</q-popup-proxy>
|
||||
</q-icon>
|
||||
</template>
|
||||
</q-input>
|
||||
<!--
|
||||
<q-input v-model="startAt" outlined clearable hide-bottom-space dense>
|
||||
<template v-slot:prepend>
|
||||
<q-btn size="8px" icon="event" round>
|
||||
<q-popup-proxy
|
||||
cover
|
||||
transition-show="scale"
|
||||
transition-hide="scale"
|
||||
>
|
||||
<q-date
|
||||
v-model="startAt"
|
||||
minimal
|
||||
navigation-min-year-month="2024/09"
|
||||
navigation-max-year-month="2024/09"
|
||||
>
|
||||
<div class="row items-center justify-end q-gutter-sm">
|
||||
<q-btn label="Cancel" color="primary" flat v-close-popup />
|
||||
<q-btn label="OK" color="primary" flat v-close-popup />
|
||||
</div>
|
||||
</q-date>
|
||||
</q-popup-proxy>
|
||||
</q-btn>
|
||||
</template>
|
||||
</q-input> -->
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style scoped lang="scss"></style>
|
||||
Loading…
Add table
Add a link
Reference in a new issue