invite.vue 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. <template>
  2. <CtForm ref="CtFormRef" :items="formItems" style="height: 520px;">
  3. </CtForm>
  4. </template>
  5. <script setup>
  6. defineOptions({ name: 'formPage'})
  7. import { ref } from 'vue'
  8. import { formatName } from '@/utils/getText'
  9. import { getInterviewInviteDefaultTime } from '@/utils/date'
  10. const props = defineProps({
  11. itemData: {
  12. type: Object,
  13. default: () => {}
  14. }
  15. })
  16. const CtFormRef = ref()
  17. const formItems = ref({
  18. options: [
  19. {
  20. type: 'ifRadio',
  21. key: 'type',
  22. value: '0',
  23. label: '发送方式 *',
  24. width: 90,
  25. noParam: true,
  26. items: [
  27. { label: '短信', value: '0' },
  28. { label: '邮箱', value: '1' }
  29. ]
  30. },
  31. {
  32. type: 'datePicker',
  33. mode: 'datetime',
  34. labelWidth: 78,
  35. key: 'time',
  36. label: '面试时间 *',
  37. value: getInterviewInviteDefaultTime().timeStamp,
  38. format: "YYYY/MM/DD HH:mm",
  39. defaultTime: getInterviewInviteDefaultTime().time,
  40. flexStyle: 'mb-7',
  41. disabledDate: true,
  42. rules: [v => !!v || '请选择面试时间']
  43. },
  44. {
  45. type: 'text',
  46. key: 'position',
  47. value: '',
  48. noParam: true,
  49. disabled: true,
  50. label: '面试岗位'
  51. },
  52. {
  53. type: 'text',
  54. key: 'address',
  55. value: '',
  56. label: '面试地点 *',
  57. rules: [v => !!v || '请输入面试地点'],
  58. },
  59. {
  60. type: 'text',
  61. key: 'invitePhone',
  62. value: null,
  63. label: '联系电话 *',
  64. outlined: true,
  65. rules: [v => !!v || '请填写联系电话']
  66. },
  67. {
  68. type: 'textarea',
  69. key: 'remark',
  70. value: '',
  71. label: '备注事项',
  72. counter: 140,
  73. rules: [
  74. value => {
  75. if (value?.length <= 140) return true
  76. return '请输入备注事项,最多140字'
  77. }
  78. ]
  79. }
  80. ]
  81. })
  82. if (Object.keys(props.itemData).length) {
  83. const obj = formItems.value.options.find(e => e.key === 'position')
  84. 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 : ''}` : '面议'
  85. obj.value = `${formatName(props.itemData?.job?.name)}_${props.itemData?.job?.areaName ? props.itemData?.job?.area?.str : '全国'} ${salary}`
  86. formItems.value.options.find(e => e.key === 'address').value = props.itemData.job?.address
  87. const baseInfo = localStorage.getItem('entBaseInfo')
  88. if (baseInfo) {
  89. const { phone } = JSON.parse(baseInfo)
  90. formItems.value.options.find(e => e.key === 'invitePhone').value = phone
  91. }
  92. }
  93. const getQuery = () => {
  94. const obj = {
  95. type: 1,
  96. jobId: props.itemData.job.id,
  97. userId: props.itemData.userId,
  98. latitude: props.itemData.job?.latitude,
  99. longitude: props.itemData.job?.longitude
  100. }
  101. formItems.value.options.forEach(item => {
  102. if (item.noParam) return
  103. obj[item.key] = item.value
  104. })
  105. if (props.itemData?.jobFairId) obj.jobFairId = props.itemData.jobFairId
  106. // 有实习时间的则为学生,需传递实习时间
  107. if (props.itemData?.practiceStartTime && props.itemData?.practiceEndTime) {
  108. obj.practiceStartTime = props.itemData.practiceStartTime
  109. obj.practiceEndTime = props.itemData.practiceEndTime
  110. }
  111. return obj
  112. }
  113. defineExpose({
  114. CtFormRef,
  115. getQuery
  116. })
  117. </script>
  118. <style scoped lang="scss">
  119. </style>