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) }) + }