baseInfo.vue 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <template>
  2. <div>
  3. <CtForm ref="formPageRef" :items="items" style="width: 600px;">
  4. <template #enterpriseName="{ item }">
  5. <div class="mb-4">
  6. <span style="color: #777;">公司:</span>
  7. <span style="color: #555">{{ item.value }}</span>
  8. </div>
  9. </template>
  10. <template #positionId="{ item }">
  11. <v-menu :close-delay="1" :open-delay="0" v-bind="$attrs">
  12. <template v-slot:activator="{ props }">
  13. <textUI
  14. :modelValue="item.value"
  15. :item="item"
  16. v-bind="props"
  17. style="position: relative;"
  18. ></textUI>
  19. </template>
  20. <jobTypeCard class="jobTypeCardBox" :select="[query.positionId].filter(Boolean)" :isSingle="true" @handleJobClick="handleJobClickItem"></jobTypeCard>
  21. </v-menu>
  22. </template>
  23. </CtForm>
  24. </div>
  25. </template>
  26. <script setup>
  27. defineOptions({ name: 'position-add-baseInfo'})
  28. import CtForm from '@/components/CtForm'
  29. import { reactive, ref, defineExpose } from 'vue'
  30. import textUI from '@/components/FormUI/TextInput'
  31. import jobTypeCard from '@/components/jobTypeCard'
  32. const formPageRef = ref()
  33. const query = reactive({})
  34. const items = ref({
  35. options: [
  36. {
  37. type: 'text',
  38. key: 'enterpriseName',
  39. disabled: true,
  40. value: '辞图科技·计算机软件·广州辞图科技有限公司',
  41. label: '公司名称 *'
  42. },
  43. {
  44. type: 'text',
  45. key: 'name',
  46. value: '',
  47. label: '职位名称 *',
  48. rules: [v => !!v || '请选择职位名称']
  49. },
  50. {
  51. slotName: 'positionId',
  52. key: 'positionId',
  53. value: '',
  54. label: '职位类型 *',
  55. rules: [v => !!v || '请选择职位类型']
  56. },
  57. {
  58. type: 'textarea',
  59. key: 'content',
  60. rows: 10,
  61. value: '',
  62. label: '职位描述 *',
  63. counter: 5000,
  64. clearable: true,
  65. rules: [
  66. value => {
  67. if (value) return true
  68. return '请输入职位描述'
  69. },
  70. value => {
  71. if (value?.length <= 5000) return true
  72. return '请输入2-5000个字符'
  73. }
  74. ]
  75. }
  76. ]
  77. })
  78. const setValue = (key, value) => {
  79. items.value.options.find(e => e.key === key).value = value
  80. }
  81. // 期望职位
  82. const handleJobClickItem = (list, name) => {
  83. if (!list.length) return
  84. query.positionId = list[0]
  85. setValue('positionId', name)
  86. }
  87. defineExpose({
  88. formPageRef,
  89. query
  90. })
  91. </script>
  92. <style scoped lang="scss">
  93. .enterpriseName {
  94. color: #777;
  95. }
  96. .jobTypeCardBox {
  97. position: absolute;
  98. top: -22px;
  99. left: 0;
  100. }
  101. </style>