invite.vue 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  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. return date.getTime() < new Date().getTime()
  33. }
  34. const CtFormRef = ref()
  35. const formItems = ref({
  36. options: [
  37. {
  38. type: 'ifRadio',
  39. key: 'type',
  40. value: '0',
  41. label: '发送方式 *',
  42. width: 90,
  43. noParam: true,
  44. items: [
  45. { label: '短信', value: '0' },
  46. { label: '邮箱', value: '1' }
  47. ]
  48. },
  49. {
  50. slotName: 'time',
  51. key: 'time',
  52. value: null,
  53. rules: [v => !!v || '请选择面试时间'],
  54. },
  55. {
  56. type: 'text',
  57. key: 'position',
  58. value: '',
  59. noParam: true,
  60. disabled: true,
  61. label: '面试岗位'
  62. },
  63. {
  64. type: 'text',
  65. key: 'address',
  66. value: '',
  67. label: '面试地点 *',
  68. rules: [v => !!v || '请输入面试地点'],
  69. },
  70. {
  71. type: 'text',
  72. key: 'invitePhone',
  73. value: null,
  74. label: '联系电话 *',
  75. outlined: true,
  76. rules: [v => !!v || '请填写联系电话']
  77. },
  78. {
  79. type: 'textarea',
  80. key: 'remark',
  81. value: '',
  82. label: '备注事项',
  83. counter: 140,
  84. rules: [
  85. value => {
  86. if (value?.length <= 140) return true
  87. return '请输入备注事项,最多140字'
  88. }
  89. ]
  90. }
  91. ]
  92. })
  93. if (Object.keys(props.itemData).length) {
  94. const obj = formItems.value.options.find(e => e.key === 'position')
  95. 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 : ''}` : '面议'
  96. obj.value = `${props.itemData?.job?.name}${props.itemData?.job?.areaName ? '_' + props.itemData?.job?.areaName : ''} ${salary}`
  97. formItems.value.options.find(e => e.key === 'address').value = props.itemData.job?.address
  98. const baseInfo = localStorage.getItem('entBaseInfo')
  99. if (baseInfo) {
  100. const { phone } = JSON.parse(baseInfo)
  101. formItems.value.options.find(e => e.key === 'invitePhone').value = phone
  102. }
  103. }
  104. const getQuery = () => {
  105. const obj = {
  106. type: 1,
  107. jobId: props.itemData.job.id,
  108. userId: props.itemData.userId,
  109. latitude: props.itemData.job?.latitude,
  110. longitude: props.itemData.job?.longitude
  111. }
  112. formItems.value.options.forEach(item => {
  113. if (item.noParam) return
  114. obj[item.key] = item.value
  115. })
  116. return obj
  117. }
  118. defineExpose({
  119. CtFormRef,
  120. getQuery
  121. })
  122. </script>
  123. <style scoped lang="scss">
  124. </style>