Merge branch 'develop' into dev
All checks were successful
Build & Deploy on Dev / build (push) Successful in 1m36s

This commit is contained in:
DESKTOP-1R2VSQH\Lenovo ThinkPad E490 2025-12-03 16:06:06 +07:00
commit 0ff3d1c4df
4 changed files with 57 additions and 32 deletions

View file

@ -1,3 +1,7 @@
interface OptionReason {
value: string
text: string
}
interface FormRef { interface FormRef {
model: object | null model: object | null
useLocation: object | null useLocation: object | null
@ -43,4 +47,4 @@ interface FormTimeStemp {
longitude: string longitude: string
POI: string POI: string
} }
export type { FormRef, FormData, Datalist, FormTimeStemp } export type { OptionReason, FormRef, FormData, Datalist, FormTimeStemp }

View file

@ -8,7 +8,7 @@ import config from '@/app.config'
import http from '@/plugins/http' import http from '@/plugins/http'
import { useCounterMixin } from '@/stores/mixin' import { useCounterMixin } from '@/stores/mixin'
import type { FormRef } from '@/interface/response/checkin' import type { FormRef, OptionReason } from '@/interface/response/checkin'
import MapCheck from '@/components/AscGISMap.vue' import MapCheck from '@/components/AscGISMap.vue'
@ -110,12 +110,23 @@ async function updateLocation(
const location = ref<string>('') // const location = ref<string>('') //
const model = ref<string>('') // const model = ref<string>('') //
// //
const options = ref<string[]>([ const options = ref<OptionReason[]>([
'ปฏิบัติงานที่บ้าน', { value: 'ปฏิบัติงานที่บ้าน', text: 'ปฏิบัติงานที่บ้าน (WFH)' },
// '', { value: 'ปฏิบัติงานนอกสถานที่', text: 'ปฏิบัติงานนอกสถานที่ (WFA)' },
'ไปประชุม/อบรม/สัมมนา/ปฏิบัติงานที่บ้านนอกสถานที่', { value: 'ลืมลงเวลาเริ่มปฏิบัติราชการ', text: 'ลืมลงเวลาเริ่มปฏิบัติราชการ' },
'ขออนุญาตออกนอกสถานที่', { value: 'ลืมลงเวลาเลิกปฏิบัติราชการ', text: 'ลืมลงเวลาเลิกปฏิบัติราชการ' },
'อื่นๆ', {
value: 'ไปประชุม / อบรม / สัมมนา',
text: 'ไปประชุม / อบรม / สัมมนา',
},
{ value: 'ลางานครึ่งวัน (เช้า)', text: 'ลางานครึ่งวัน (เช้า)' },
{ value: 'ลางานครึ่งวัน (บ่าย)', text: 'ลางานครึ่งวัน (บ่าย)' },
{ value: 'ขออนุญาตออกนอกสถานที่', text: 'ขออนุญาตออกนอกสถานที่' },
{
value: 'ประสบภัย เช่น น้ำท่วม มีพายุ ประสบอุบัติเหตุ',
text: 'ประสบภัย เช่น น้ำท่วม มีพายุ ประสบอุบัติเหตุ',
},
{ value: 'อื่นๆ', text: 'อื่นๆ' },
]) ])
/** function เลือกสถานที่*/ /** function เลือกสถานที่*/
@ -753,6 +764,10 @@ onMounted(async () => {
lazy-rules lazy-rules
@update:model-value="selectLocation()" @update:model-value="selectLocation()"
hide-bottom-space hide-bottom-space
option-value="value"
option-label="text"
emit-value
map-options
/> />
</div> </div>
<div <div

View file

@ -246,15 +246,11 @@ function ruleNewPassWord(val: string) {
if (val.length < 8) { if (val.length < 8) {
return resolve('รหัสผ่านต้องมีอย่างน้อย 8 ตัวอักษร') return resolve('รหัสผ่านต้องมีอย่างน้อย 8 ตัวอักษร')
} }
if (!/[A-Z]/.test(val)) { if (!/^[A-Za-z0-9!@#$%&*]+$/.test(val)) {
return resolve('ต้องมีตัวอักษรพิมพ์ใหญ่ (A-Z)') return resolve(
'รหัสผ่านต้องมีเฉพาะภาษาอังกฤษ ตัวเลข และอักขระพิเศษ (! @ # $ % & *) เท่านั้น'
)
} }
if (!/[0-9]/.test(val)) {
return resolve('ต้องมีตัวเลข (0-9)')
}
// if (!/[@$!%*?&]/.test(val)) {
// return resolve(' (@$!%*?&)')
// }
resolve(true) resolve(true)
}) })
@ -268,15 +264,11 @@ function ruleReNewPassWord(val: string) {
if (val.length < 8) { if (val.length < 8) {
return resolve('รหัสผ่านต้องมีอย่างน้อย 8 ตัวอักษร') return resolve('รหัสผ่านต้องมีอย่างน้อย 8 ตัวอักษร')
} }
if (!/[A-Z]/.test(val)) { if (!/^[A-Za-z0-9!@#$%&*]+$/.test(val)) {
return resolve('ต้องมีตัวอักษรพิมพ์ใหญ่ (A-Z)') return resolve(
'รหัสผ่านต้องมีเฉพาะภาษาอังกฤษ ตัวเลข และอักขระพิเศษ (! @ # $ % & *) เท่านั้น'
)
} }
if (!/[0-9]/.test(val)) {
return resolve('ต้องมีตัวเลข (0-9)')
}
// else if (!/[@$!%*?&]/.test(val)) {
// return resolve(' (@$!%*?&)');
// }
if (val !== newPassword.value) { if (val !== newPassword.value) {
return resolve('รหัสผ่านใหม่ไม่ตรงกัน') return resolve('รหัสผ่านใหม่ไม่ตรงกัน')
} }

View file

@ -9,8 +9,7 @@ import config from '@/app.config'
import { tokenParsed } from '@/plugins/auth' import { tokenParsed } from '@/plugins/auth'
// import Type // import Type
import type { FormRef } from '@/interface/response/checkin' import type { FormRef, OptionReason } from '@/interface/response/checkin'
import type { notiType } from '@/interface/index/Main'
// import components // import components
import MapCheck from '@/components/MapCheckin.vue' import MapCheck from '@/components/MapCheckin.vue'
@ -97,12 +96,23 @@ async function updateLocation(location: any, namePOI: string) {
const location = ref<string>('') const location = ref<string>('')
// const coordinates = ref<string>('') // const coordinates = ref<string>('')
const model = ref<string>('') const model = ref<string>('')
const options = ref<string[]>([ const options = ref<OptionReason[]>([
'ปฏิบัติงานที่บ้าน', { value: 'ปฏิบัติงานที่บ้าน', text: 'ปฏิบัติงานที่บ้าน (WFH)' },
// '', { value: 'ปฏิบัติงานนอกสถานที่', text: 'ปฏิบัติงานนอกสถานที่ (WFA)' },
'ไปประชุม/อบรม/สัมมนา/ปฏิบัติงานที่บ้านนอกสถานที่', { value: 'ลืมลงเวลาเริ่มปฏิบัติราชการ', text: 'ลืมลงเวลาเริ่มปฏิบัติราชการ' },
'ขออนุญาตออกนอกสถานที่', { value: 'ลืมลงเวลาเลิกปฏิบัติราชการ', text: 'ลืมลงเวลาเลิกปฏิบัติราชการ' },
'อื่นๆ', {
value: 'ไปประชุม / อบรม / สัมมนา',
text: 'ไปประชุม / อบรม / สัมมนา',
},
{ value: 'ลางานครึ่งวัน (เช้า)', text: 'ลางานครึ่งวัน (เช้า)' },
{ value: 'ลางานครึ่งวัน (บ่าย)', text: 'ลางานครึ่งวัน (บ่าย)' },
{ value: 'ขออนุญาตออกนอกสถานที่', text: 'ขออนุญาตออกนอกสถานที่' },
{
value: 'ประสบภัย เช่น น้ำท่วม มีพายุ ประสบอุบัติเหตุ',
text: 'ประสบภัย เช่น น้ำท่วม มีพายุ ประสบอุบัติเหตุ',
},
{ value: 'อื่นๆ', text: 'อื่นๆ' },
]) ])
/** function เลือกสถานที่*/ /** function เลือกสถานที่*/
@ -411,6 +421,10 @@ onMounted(async () => {
:rules="[(val:string) => !!val || 'กรุณาระบุสถานที่']" :rules="[(val:string) => !!val || 'กรุณาระบุสถานที่']"
lazy-rules lazy-rules
@update:model-value="selectLocation()" @update:model-value="selectLocation()"
option-value="value"
option-label="text"
emit-value
map-options
/> />
</div> </div>
<div <div