invite.vue 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. <template>
  2. <CtForm ref="CtFormRef" :items="formItems" style="height: 420px;">
  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: 'interview-invite-form'})
  15. import { ref } from 'vue'
  16. const props = defineProps({
  17. itemData: {
  18. type: Object,
  19. default: () => {}
  20. },
  21. position: {
  22. type: Array,
  23. default: () => []
  24. }
  25. })
  26. const CtFormRef = ref()
  27. const formItems = ref({
  28. options: [
  29. {
  30. slotName: 'time',
  31. key: 'time',
  32. value: ref(),
  33. rules: [v => !!v || '请选择面试时间'],
  34. },
  35. {
  36. type: 'autocomplete',
  37. key: 'jobId',
  38. value: null,
  39. label: '招聘职位 *',
  40. outlined: true,
  41. clearable: false,
  42. itemText: 'label',
  43. itemValue: 'value',
  44. rules: [v => !!v || '请选择招聘职位'],
  45. items: props.position
  46. },
  47. {
  48. type: 'text',
  49. key: 'address',
  50. value: '',
  51. label: '面试地点 *',
  52. rules: [v => !!v || '请输入面试地点'],
  53. },
  54. {
  55. type: 'text',
  56. key: 'invitePhone',
  57. value: null,
  58. label: '联系电话 *',
  59. outlined: true,
  60. rules: [v => !!v || '请填写联系电话']
  61. },
  62. {
  63. type: 'textarea',
  64. key: 'remark',
  65. value: '',
  66. label: '备注事项',
  67. counter: 140,
  68. rules: [
  69. value => {
  70. if (value?.length <= 140) return true
  71. return '请输入备注事项,最多140字'
  72. }
  73. ]
  74. }
  75. ]
  76. })
  77. if (Object.keys(props.itemData).length) {
  78. formItems.value.options.forEach(item => {
  79. item.value = props.itemData[item.key]
  80. })
  81. }
  82. const getQuery = () => {
  83. const obj = {}
  84. formItems.value.options.forEach(item => {
  85. obj[item.key] = item.value
  86. })
  87. obj.type = 1
  88. obj.id = props.itemData.id
  89. obj.userId = props.itemData.userId
  90. return obj
  91. }
  92. defineExpose({
  93. CtFormRef,
  94. getQuery
  95. })
  96. </script>
  97. <style scoped lang="scss">
  98. </style>