From 3bfcf05ad964e7e24bcd98e278f56caeae681c86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8C=83=E9=B9=8F?= Date: Thu, 16 Jan 2025 15:19:30 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=8C=E6=88=90=E5=AE=A1=E6=89=B9?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=E8=AF=B7=E5=81=87=E3=80=81=E5=87=BA=E5=B7=AE?= =?UTF-8?q?=E3=80=81=E5=A4=96=E5=87=BA=E3=80=81=E8=A1=A5=E5=8D=A1=E3=80=81?= =?UTF-8?q?=E5=8A=A0=E7=8F=AD=E5=A5=97=E4=BB=B6=E7=9A=84=E5=B0=81=E8=BD=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/approval/components/Components.vue | 23 +++- .../approval/components/DatetimePicker.vue | 63 +++++++++- .../components/DatetimePickerGroup.vue | 110 ++++++++++++++++++ src/pages/approval/components/Input.vue | 13 +++ src/pages/approval/components/Leave.vue | 97 +++++++++++++++ .../components/MemberOrDepartment.vue | 4 +- src/pages/approval/components/Overtime.vue | 43 +++++++ .../approval/components/SelectPicker.vue | 40 ++++++- 8 files changed, 387 insertions(+), 6 deletions(-) create mode 100644 src/pages/approval/components/DatetimePickerGroup.vue create mode 100644 src/pages/approval/components/Leave.vue create mode 100644 src/pages/approval/components/Overtime.vue diff --git a/src/pages/approval/components/Components.vue b/src/pages/approval/components/Components.vue index d331ce8..001aede 100644 --- a/src/pages/approval/components/Components.vue +++ b/src/pages/approval/components/Components.vue @@ -1,5 +1,5 @@ @@ -88,8 +104,11 @@ import Images from '@/pages/approval/components/Images.vue' import Description from '@/pages/approval/components/Description.vue' import MemberOrDepartment from '@/pages/approval/components/MemberOrDepartment.vue' + import Leave from '@/pages/approval/components/Leave.vue' + import DatetimePickerGroup from '@/pages/approval/components/DatetimePickerGroup.vue' + import Overtime from '@/pages/approval/components/Overtime.vue' - const columns = ref>([ + const columns = ref>([ { value: 0, label: '男装' diff --git a/src/pages/approval/components/DatetimePicker.vue b/src/pages/approval/components/DatetimePicker.vue index 95fc9c5..e27f5d8 100644 --- a/src/pages/approval/components/DatetimePicker.vue +++ b/src/pages/approval/components/DatetimePicker.vue @@ -6,7 +6,9 @@ - {{ text || placeholder }} + + {{ text || placeholder }} + @@ -104,7 +106,31 @@ }, placeholder: { type: String, - default: '请输入' + default: '请选择' + }, + disabled: { + type: Boolean, + default: false + }, + disabledText: { + type: String, + default: '' + }, + minDate: { + type: [Number, null], + default: null + }, + maxDate: { + type: [Number, null], + default: null + }, + minDateText: { + type: String, + default: '' + }, + maxDateText: { + type: String, + default: '' } }) @@ -159,6 +185,13 @@ } const openDialog = () => { + if (props.disabled) { + uni.showToast({ + title: props.disabledText, + icon: 'none' + }) + return + } if (!props.value) { if (text.value === '') { timestamp.value = new Date().getTime() @@ -180,6 +213,20 @@ } const confirm = () => { + if (props.minDate && timestamp.value < props.minDate) { + uni.showToast({ + title: props.minDateText, + icon: 'none' + }) + return + } + if (props.maxDate && timestamp.value > props.maxDate) { + uni.showToast({ + title: props.maxDateText, + icon: 'none' + }) + return + } show.value = false returnTimestamp.value = timestamp.value if (props.type === 'dateHalfDay') { @@ -193,4 +240,16 @@ const afterLeave = () => { showPicker.value = false } + + const clear = () => { + text.value = '' + date.value = '' + halfDay.value = '' + returnTimestamp.value = 0 + emits('change', { id: props.id, value: returnTimestamp.value, text: text.value }) + } + + defineExpose({ + clear + }) diff --git a/src/pages/approval/components/DatetimePickerGroup.vue b/src/pages/approval/components/DatetimePickerGroup.vue new file mode 100644 index 0000000..3d3142d --- /dev/null +++ b/src/pages/approval/components/DatetimePickerGroup.vue @@ -0,0 +1,110 @@ + + + + + diff --git a/src/pages/approval/components/Input.vue b/src/pages/approval/components/Input.vue index 96df501..9334107 100644 --- a/src/pages/approval/components/Input.vue +++ b/src/pages/approval/components/Input.vue @@ -11,6 +11,7 @@ :placeholder="placeholder" :maxlength="type === 'text' ? 30 : 15" v-model="text" + :readonly="readonly" @input="change(id, $event)" > @@ -46,6 +47,10 @@ placeholder: { type: String, default: '请输入' + }, + readonly: { + type: Boolean, + default: false } }) @@ -56,6 +61,14 @@ const change = (id, data) => { emits('change', { id, value: data.value }) } + + const clear = () => { + text.value = '' + } + + defineExpose({ + clear + }) diff --git a/src/pages/approval/components/MemberOrDepartment.vue b/src/pages/approval/components/MemberOrDepartment.vue index 5339c4c..e582118 100644 --- a/src/pages/approval/components/MemberOrDepartment.vue +++ b/src/pages/approval/components/MemberOrDepartment.vue @@ -6,7 +6,9 @@ - {{ text || placeholder }} + + {{ text || placeholder }} + diff --git a/src/pages/approval/components/Overtime.vue b/src/pages/approval/components/Overtime.vue new file mode 100644 index 0000000..683a52c --- /dev/null +++ b/src/pages/approval/components/Overtime.vue @@ -0,0 +1,43 @@ + + + + + diff --git a/src/pages/approval/components/SelectPicker.vue b/src/pages/approval/components/SelectPicker.vue index 4ce41f7..99708b3 100644 --- a/src/pages/approval/components/SelectPicker.vue +++ b/src/pages/approval/components/SelectPicker.vue @@ -12,7 +12,9 @@ v-model="picker" :columns="columns" size="large" - /> + @change="change" + select-size="large" + > @@ -51,11 +53,17 @@ } }) + const emits = defineEmits(['change']) + onMounted(() => { if (props.value) { picker.value = props.value } }) + + const change = ({ value }) => { + emits('change', { id: props.id, value: props.columns.find(item => item.value === value) }) + }