invite.vue 2.8 KB

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