index.vue 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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="实习到岗开始时间" 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="实习到岗结束时间" 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: '136px' },
  24. })
  25. const form = ref()
  26. let formData = ref({
  27. startTime: '',
  28. endTime: ''
  29. })
  30. const rules = {
  31. startTime:{
  32. rules: [{required: true, errorMessage: '请选择实习到岗开始时间' }]
  33. },
  34. endTime:{
  35. rules: [{required: true, errorMessage: '请选择实习到岗结束时间' }]
  36. }
  37. }
  38. // 保存
  39. const getQueryParams = async () => {
  40. const valid = await unref(form).validate()
  41. if (!valid) return
  42. const startTime = convertYearMonthToTimestamp(formData.value.startTime)
  43. const endTime = convertYearMonthToTimestamp(formData.value.endTime)
  44. if (rules?.startTime && !startTime) {
  45. uni.showToast({ icon: 'none', title: '请选择实习到岗开始时间' })
  46. return
  47. }
  48. if (rules?.endTime && !endTime) {
  49. uni.showToast({ icon: 'none', title: '请选择实习到岗结束时间' })
  50. return
  51. }
  52. if (startTime > endTime) {
  53. uni.showToast({ icon: 'none', title: '开始时间不能大于结束时间' })
  54. return
  55. }
  56. return { practiceStartTime: startTime, practiceEndTime: endTime }
  57. }
  58. defineExpose({
  59. getQueryParams
  60. })
  61. </script>
  62. <style scoped lang="scss">
  63. .f-straight{
  64. display: flex;
  65. justify-content: center;
  66. flex-direction: column;
  67. }
  68. .pickerText {
  69. height: 36px;
  70. line-height: 36px;
  71. }
  72. </style>