invite.vue 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  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. :disabled-dates="disabledDates"
  10. :day-names="['一', '二', '三', '四', '五', '六', '七']"
  11. select-text="确认"
  12. cancel-text="取消"
  13. :time-picker-inline="true"
  14. locale="zh-CN"
  15. :text-input="{ format: 'MM.dd.yyyy HH:mm' }" />
  16. </template>
  17. </CtForm>
  18. </template>
  19. <script setup>
  20. defineOptions({ name: 'interview-invite-form'})
  21. import { ref } from 'vue'
  22. const props = defineProps({
  23. itemData: {
  24. type: Object,
  25. default: () => {}
  26. },
  27. position: {
  28. type: Array,
  29. default: () => []
  30. }
  31. })
  32. // 过去的日期不可选
  33. const disabledDates = (date) => {
  34. return date.getTime() < new Date().getTime()
  35. }
  36. const CtFormRef = ref()
  37. const formItems = ref({
  38. options: [
  39. {
  40. slotName: 'time',
  41. key: 'time',
  42. value: ref(),
  43. rules: [v => !!v || '请选择面试时间'],
  44. },
  45. {
  46. type: 'autocomplete',
  47. key: 'jobId',
  48. value: null,
  49. label: '招聘职位 *',
  50. outlined: true,
  51. clearable: false,
  52. itemText: 'label',
  53. itemValue: 'value',
  54. rules: [v => !!v || '请选择招聘职位'],
  55. items: props.position
  56. },
  57. {
  58. type: 'text',
  59. key: 'address',
  60. value: '',
  61. label: '面试地点 *',
  62. rules: [v => !!v || '请输入面试地点'],
  63. },
  64. {
  65. type: 'text',
  66. key: 'invitePhone',
  67. value: null,
  68. label: '联系电话 *',
  69. outlined: true,
  70. rules: [v => !!v || '请填写联系电话']
  71. },
  72. {
  73. type: 'textarea',
  74. key: 'remark',
  75. value: '',
  76. label: '备注事项',
  77. counter: 140,
  78. rules: [
  79. value => {
  80. if (value?.length <= 140) return true
  81. return '请输入备注事项,最多140字'
  82. }
  83. ]
  84. }
  85. ]
  86. })
  87. if (Object.keys(props.itemData).length) {
  88. formItems.value.options.forEach(item => {
  89. item.value = props.itemData[item.key]
  90. })
  91. }
  92. const getQuery = () => {
  93. const obj = {}
  94. formItems.value.options.forEach(item => {
  95. obj[item.key] = item.value
  96. })
  97. obj.type = 1
  98. obj.id = props.itemData.id
  99. obj.userId = props.itemData.userId
  100. return obj
  101. }
  102. defineExpose({
  103. CtFormRef,
  104. getQuery
  105. })
  106. </script>
  107. <style scoped lang="scss">
  108. </style>