public.vue 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. <template>
  2. <CtForm ref="CtFormRef" :items="formItems">
  3. <template #time="{ item }">
  4. <VueDatePicker
  5. v-model="item.value"
  6. placeholder="面试时间 *"
  7. class="mb-4"
  8. model-type="timestamp"
  9. :text-input="{ format: 'MM.dd.yyyy HH:mm' }" />
  10. </template>
  11. </CtForm>
  12. </template>
  13. <script setup>
  14. defineOptions({ name: 'invite-public'})
  15. import { ref } from 'vue'
  16. const props = defineProps({
  17. itemData: {
  18. type: Object,
  19. default: () => {}
  20. }
  21. })
  22. const CtFormRef = ref()
  23. const formItems = ref({
  24. options: [
  25. {
  26. type: 'ifRadio',
  27. key: 'type',
  28. value: '0',
  29. label: '发送方式 *',
  30. width: 90,
  31. items: [
  32. { label: '短信', value: '0' },
  33. { label: '邮箱', value: '1' }
  34. ]
  35. },
  36. {
  37. slotName: 'time',
  38. key: 'time',
  39. value: null,
  40. rules: [v => !!v || '请选择面试时间'],
  41. },
  42. {
  43. type: 'text',
  44. key: 'position',
  45. value: '',
  46. noParam: true,
  47. disabled: true,
  48. label: '面试岗位'
  49. },
  50. {
  51. type: 'text',
  52. key: 'address',
  53. value: '',
  54. label: '面试地点 *',
  55. rules: [v => !!v || '请输入面试地点'],
  56. },
  57. {
  58. type: 'text',
  59. key: 'invitePhone',
  60. value: null,
  61. label: '联系电话 *',
  62. outlined: true,
  63. rules: [v => !!v || '请填写联系电话']
  64. },
  65. {
  66. type: 'textarea',
  67. key: 'remark',
  68. value: '',
  69. label: '备注事项',
  70. counter: 140,
  71. rules: [
  72. value => {
  73. if (value?.length <= 140) return true
  74. return '请输入备注事项,最多140字'
  75. }
  76. ]
  77. }
  78. ]
  79. })
  80. if (Object.keys(props.itemData).length) {
  81. const obj = formItems.value.options.find(e => e.key === 'position')
  82. obj.value = `${props.itemData?.job?.name}${props.itemData?.job?.areaName ? '_' + props.itemData?.job?.areaName : ''} ${props.itemData?.job?.payFrom}-${props.itemData?.job?.payTo}/${props.itemData?.job?.payName}`
  83. formItems.value.options.find(e => e.key === 'address').value = props.itemData.job?.address
  84. }
  85. const getQuery = () => {
  86. const obj = {
  87. type: 1,
  88. jobId: props.itemData.job.id,
  89. userId: props.itemData.userId,
  90. latitude: props.itemData.job?.latitude,
  91. longitude: props.itemData.job?.longitude
  92. }
  93. formItems.value.options.forEach(item => {
  94. if (item.noParam) return
  95. obj[item.key] = item.value
  96. })
  97. return obj
  98. }
  99. defineExpose({
  100. CtFormRef,
  101. getQuery
  102. })
  103. </script>
  104. <style scoped lang="scss">
  105. </style>