invite.vue 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. <template>
  2. <CtForm ref="CtFormRef" :items="formItems" style="height: 520px;">
  3. <template #time="{ item }">
  4. <VueDatePicker
  5. v-model="item.value"
  6. placeholder="面试时间 *"
  7. class="mb-4"
  8. model-type="timestamp"
  9. :time-picker-inline="true"
  10. :disabled-dates="disabledDates"
  11. :day-names="['一', '二', '三', '四', '五', '六', '七']"
  12. select-text="确认"
  13. cancel-text="取消"
  14. locale="zh-CN"
  15. :text-input="{ format: 'MM.dd.yyyy HH:mm' }"
  16. >
  17. </VueDatePicker>
  18. </template>
  19. </CtForm>
  20. </template>
  21. <script setup>
  22. defineOptions({ name: 'formPage'})
  23. import { ref } from 'vue'
  24. const props = defineProps({
  25. itemData: {
  26. type: Object,
  27. default: () => {}
  28. }
  29. })
  30. // 过去的日期不可选
  31. const disabledDates = (date) => {
  32. const currentDate = new Date()
  33. currentDate.setDate(currentDate.getDate() - 1)
  34. return date.getTime() < currentDate.getTime()
  35. }
  36. const CtFormRef = ref()
  37. const formItems = ref({
  38. options: [
  39. {
  40. type: 'ifRadio',
  41. key: 'type',
  42. value: '0',
  43. label: '发送方式 *',
  44. width: 90,
  45. noParam: true,
  46. items: [
  47. { label: '短信', value: '0' },
  48. { label: '邮箱', value: '1' }
  49. ]
  50. },
  51. {
  52. slotName: 'time',
  53. key: 'time',
  54. value: null,
  55. rules: [v => !!v || '请选择面试时间'],
  56. },
  57. {
  58. type: 'text',
  59. key: 'position',
  60. value: '',
  61. noParam: true,
  62. disabled: true,
  63. label: '面试岗位'
  64. },
  65. {
  66. type: 'text',
  67. key: 'address',
  68. value: '',
  69. label: '面试地点 *',
  70. rules: [v => !!v || '请输入面试地点'],
  71. },
  72. {
  73. type: 'text',
  74. key: 'invitePhone',
  75. value: null,
  76. label: '联系电话 *',
  77. outlined: true,
  78. rules: [v => !!v || '请填写联系电话']
  79. },
  80. {
  81. type: 'textarea',
  82. key: 'remark',
  83. value: '',
  84. label: '备注事项',
  85. counter: 140,
  86. rules: [
  87. value => {
  88. if (value?.length <= 140) return true
  89. return '请输入备注事项,最多140字'
  90. }
  91. ]
  92. }
  93. ]
  94. })
  95. if (Object.keys(props.itemData).length) {
  96. const obj = formItems.value.options.find(e => e.key === 'position')
  97. const salary = props.itemData?.job?.payFrom && props.itemData?.job?.payTo ? `${props.itemData?.job?.payFrom ? props.itemData?.job?.payFrom + '-' : ''}${props.itemData?.job?.payTo}${props.itemData?.job?.payName ? '/' + props.itemData?.job?.payName : ''}` : '面议'
  98. obj.value = `${props.itemData?.job?.name}${props.itemData?.job?.areaName ? '_' + props.itemData?.job?.areaName : ''} ${salary}`
  99. formItems.value.options.find(e => e.key === 'address').value = props.itemData.job?.address
  100. const baseInfo = localStorage.getItem('entBaseInfo')
  101. if (baseInfo) {
  102. const { phone } = JSON.parse(baseInfo)
  103. formItems.value.options.find(e => e.key === 'invitePhone').value = phone
  104. }
  105. }
  106. const getQuery = () => {
  107. const obj = {
  108. type: 1,
  109. jobId: props.itemData.job.id,
  110. userId: props.itemData.userId,
  111. latitude: props.itemData.job?.latitude,
  112. longitude: props.itemData.job?.longitude
  113. }
  114. formItems.value.options.forEach(item => {
  115. if (item.noParam) return
  116. obj[item.key] = item.value
  117. })
  118. return obj
  119. }
  120. defineExpose({
  121. CtFormRef,
  122. getQuery
  123. })
  124. </script>
  125. <style scoped lang="scss">
  126. </style>