index.vue 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <template>
  2. <view class="f-straight">
  3. <uni-forms ref="form" :modelValue="formData" :rules="rules" validateTrigger="bind" :label-width="formLabelWidth">
  4. <uni-forms-item :label="`${props.prefix}到岗日期`" name="startTime" required>
  5. <picker mode="date" :value="formData.startTime" fields="month" @change="e => formData.startTime = e.detail.value">
  6. <view v-if="formData.startTime" class="pickerText">{{ formData.startTime }}</view>
  7. <view v-else class="pickerText">请选择</view>
  8. </picker>
  9. </uni-forms-item>
  10. <uni-forms-item :label="`${props.prefix}结束日期`" name="endTime" required>
  11. <picker mode="date" :value="formData.endTime" fields="month" @change="e => formData.endTime = e.detail.value">
  12. <view v-if="formData.endTime" class="pickerText">{{ formData.endTime }}</view>
  13. <view v-else class="pickerText">请选择</view>
  14. </picker>
  15. </uni-forms-item>
  16. </uni-forms>
  17. </view>
  18. </template>
  19. <script setup>
  20. import { ref, unref } from 'vue'
  21. import { convertYearMonthToTimestamp } from '@/utils/date.js'
  22. const props = defineProps({
  23. formLabelWidth: { type: [String, Number], default: '84px' },
  24. prefix: { type: String, default: '' },
  25. })
  26. const form = ref()
  27. let formData = ref({
  28. startTime: '',
  29. endTime: ''
  30. })
  31. const rules = {
  32. startTime:{
  33. rules: [{required: true, errorMessage: '请选择到岗日期' }]
  34. },
  35. endTime:{
  36. rules: [{required: true, errorMessage: '请选择结束日期' }]
  37. }
  38. }
  39. // 保存
  40. const getQueryParams = async () => {
  41. const valid = await unref(form).validate()
  42. if (!valid) return
  43. const startTime = convertYearMonthToTimestamp(formData.value.startTime)
  44. const endTime = convertYearMonthToTimestamp(formData.value.endTime)
  45. if (rules?.startTime && !startTime) {
  46. uni.showToast({ icon: 'none', title: '请选择到岗日期' })
  47. return
  48. }
  49. if (rules?.endTime && !endTime) {
  50. uni.showToast({ icon: 'none', title: '请选择结束日期' })
  51. return
  52. }
  53. if (startTime > endTime) {
  54. uni.showToast({ icon: 'none', title: '开始时间不能大于结束时间' })
  55. return
  56. }
  57. return { practiceStartTime: startTime, practiceEndTime: endTime }
  58. }
  59. defineExpose({
  60. getQueryParams
  61. })
  62. </script>
  63. <style scoped lang="scss">
  64. .f-straight{
  65. display: flex;
  66. justify-content: center;
  67. flex-direction: column;
  68. }
  69. .pickerText {
  70. height: 36px;
  71. line-height: 36px;
  72. }
  73. </style>