studentDeliveryForm.vue 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. <template>
  2. <div>
  3. <p class="color-warning font-size-15 mb-5">请填写您的实习到岗信息</p>
  4. <CtForm ref="CtFormRef" :items="formItems" />
  5. </div>
  6. </template>
  7. <script setup>
  8. // 学生-实习到岗信息表单
  9. defineOptions({ name: 'studentDeliveryForm'})
  10. import { ref, nextTick } from 'vue'
  11. import Snackbar from '@/plugins/snackbar'
  12. const CtFormRef = ref()
  13. const startTimeChange = (v) => {
  14. const startTime = formItems.value.options.find(e => e.key === 'practiceStartTime')
  15. const endTime = formItems.value.options.find(e => e.key === 'practiceEndTime')
  16. if (startTime?.value && endTime?.value && startTime.value > endTime.value) {
  17. Snackbar.warning('开始时间不能大于结束时间!')
  18. nextTick(() => {
  19. startTime.value = endTime.value
  20. })
  21. }
  22. }
  23. const endTimeChange = (v) => {
  24. const startTime = formItems.value.options.find(e => e.key === 'practiceStartTime')
  25. const endTime = formItems.value.options.find(e => e.key === 'practiceEndTime')
  26. if (startTime?.value && endTime?.value && startTime.value > endTime.value) {
  27. Snackbar.warning('结束时间不能小于开始时间')
  28. nextTick(() => {
  29. endTime.value = startTime.value
  30. })
  31. }
  32. }
  33. const formItems = ref({
  34. options: [
  35. {
  36. type: 'datePicker',
  37. key: 'practiceStartTime',
  38. mode: 'date',
  39. value: null,
  40. labelWidth: 120,
  41. label: '到岗日期 *',
  42. disabledDate: true,
  43. teleported: true,
  44. rules: [v => !!v || '请选择到岗日期'],
  45. change: startTimeChange
  46. },
  47. {
  48. type: 'datePicker',
  49. key: 'practiceEndTime',
  50. mode: 'date',
  51. value: null,
  52. disabledDate: true,
  53. labelWidth: 120,
  54. label: '结束日期 *',
  55. flexStyle: 'mt-5',
  56. teleported: true,
  57. rules: [v => !!v || '请选择结束日期'],
  58. change: endTimeChange
  59. },
  60. // {
  61. // type: 'autocomplete',
  62. // key: 'dateType',
  63. // value: null,
  64. // default: null,
  65. // label: '每周到岗天数 *',
  66. // outlined: true,
  67. // itemText: 'label',
  68. // itemValue: 'value',
  69. // flexStyle: 'mt-5',
  70. // rules: [v => !!v || '请选择每周到岗天数'],
  71. // items: [
  72. // { label: '1天', value: 1 },
  73. // { label: '2天', value: 2 },
  74. // { label: '3天', value: 3 },
  75. // { label: '4天', value: 4 },
  76. // { label: '5天', value: 5 },
  77. // { label: '6天', value: 6 },
  78. // { label: '7天', value: 7 }
  79. // ]
  80. // }
  81. ]
  82. })
  83. const getQueryParams = () => {
  84. let obj = {}
  85. formItems.value.options.forEach(item => obj[item.key] = item.value)
  86. return obj
  87. }
  88. defineExpose({
  89. CtFormRef,
  90. getQueryParams
  91. })
  92. </script>
  93. <style scoped lang="scss">
  94. </style>