seenMe.vue 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. <template>
  2. <div>
  3. <div v-if="list.length">
  4. <div class="position-item mb-3 job-closed" v-for="(val, i) in list" :key="i" @mouseenter="handleMouseEnter(val)" @mouseleave="val.active = false">
  5. <div class="info-header">
  6. <div v-if="val.active" class="header-btn">
  7. <v-btn class="half-button" color="primary" size="small">继续沟通</v-btn>
  8. <v-btn v-if="props.tab === 4" class="half-button ml-3" color="primary" size="small">取消感兴趣</v-btn>
  9. </div>
  10. <div class="img-box">
  11. <v-avatar :image="val.contact.avatars || 'https://minio.citupro.com/dev/menduner/7.png'" size="x-small"></v-avatar>
  12. <span class="name">
  13. <span class="mx-3">{{ val.contact.name }}</span>
  14. <span class="gray">{{ val.contact.postNameCn }}</span>
  15. </span>
  16. </div>
  17. </div>
  18. <div class="info-content">
  19. <div class="job-info">
  20. <div class="job-name cursor-pointer">
  21. <span class="mr-3 info-name">{{ val.name }}</span>
  22. <span>[{{ val.areaName }}]</span>
  23. </div>
  24. <div class="job-other">
  25. <span class="salary">{{ val.payFrom }}-{{ val.payTo }}k</span>
  26. <v-chip class="mx-3" color="primary" label size="small">{{ val.expName }}</v-chip>
  27. <v-chip color="primary" label size="small">{{ val.eduName }}</v-chip>
  28. </div>
  29. </div>
  30. <div v-if="props.tab === 3" class="interview-info">
  31. <div>面试时间:2022.03.15 17:00</div>
  32. <div class="mt-3">面试地点:先烈中路100号大院203室</div>
  33. </div>
  34. <div v-else class="company-info">
  35. <v-img width="50" height="50" :src="val.contact.avatars || 'https://minio.citupro.com/dev/menduner/7.png'"></v-img>
  36. <div class="ml-3">
  37. <div class="cursor-pointer info-name">{{ val.enterprise.name }}</div>
  38. <div class="mt-3">
  39. <v-chip color="primary" label size="small" class="mr-3" v-for="k in desc" :key="k">{{ val.enterprise[k] }}</v-chip>
  40. </div>
  41. </div>
  42. </div>
  43. </div>
  44. </div>
  45. </div>
  46. <div v-else>
  47. <Empty></Empty>
  48. </div>
  49. </div>
  50. </template>
  51. <script setup>
  52. // 看过我
  53. defineOptions({ name: 'position-seen-me' })
  54. import { ref } from 'vue'
  55. // import { dealDictArrayData, dealDictObjData } from '@/views/recruit/personal/position/components/dict'
  56. import Empty from '@/components/Empty'
  57. const props = defineProps({
  58. tab: {
  59. type: Number,
  60. default: 0
  61. }
  62. })
  63. // const items = ref([])
  64. // const page = ref({
  65. // pageNo: 1,
  66. // pageSize: 10
  67. // })
  68. const list = ref([
  69. // {
  70. // contact: {
  71. // name: '肖女士',
  72. // avatars: 'https://cdn.vuetifyjs.com/images/john.jpg',
  73. // postNameCn: '人事经理'
  74. // },
  75. // name: '前端开发工程师',
  76. // areaName: '北京·石景山区·八大处',
  77. // payFrom: 15,
  78. // payTo: 18,
  79. // expName: '3-5年',
  80. // eduName: '本科',
  81. // active: false,
  82. // enterprise: {
  83. // name: '广州辞图科技有限公司',
  84. // industryName: '互联网',
  85. // scaleName: '0-20人',
  86. // financingName: '未融资'
  87. // }
  88. // },
  89. // {
  90. // contact: {
  91. // name: '肖女士',
  92. // avatars: 'https://cdn.vuetifyjs.com/images/john.jpg',
  93. // postNameCn: '人事经理'
  94. // },
  95. // name: '前端开发工程师',
  96. // areaName: '北京·石景山区·八大处',
  97. // payFrom: 15,
  98. // payTo: 18,
  99. // expName: '3-5年',
  100. // eduName: '本科',
  101. // active: false,
  102. // enterprise: {
  103. // name: '广州辞图科技有限公司',
  104. // industryName: '互联网',
  105. // scaleName: '0-20人',
  106. // financingName: '未融资'
  107. // }
  108. // }
  109. ])
  110. const desc = ['industryName', 'financingName', 'scaleName']
  111. const handleMouseEnter = (val) => {
  112. if (props.tab !==3 ) val.active = true
  113. }
  114. </script>
  115. <style scoped lang="scss">
  116. .position-item {
  117. height: 144px;
  118. background-color: #fff;
  119. border-radius: 12px;
  120. &:hover {
  121. box-shadow: 0 16px 40px 0 rgba(153, 153, 153, .3);
  122. }
  123. .info-header {
  124. height: 48px;
  125. background: linear-gradient(90deg,#f5fcfc,#fcfbfa);
  126. .img-box {
  127. padding: 12px 24px;
  128. .name {
  129. color: var(--color-222);
  130. font-weight: 400;
  131. font-size: 13px;
  132. .gray {
  133. color: var(--color-666);
  134. }
  135. }
  136. }
  137. .header-btn {
  138. padding: 10px 10px 0 0;
  139. float: right;
  140. .v-btn {
  141. z-index: 1;
  142. }
  143. }
  144. }
  145. .info-content {
  146. display: flex;
  147. padding: 16px 24px;
  148. justify-content: space-between;
  149. .job-info {
  150. width: 430px;
  151. min-width: 430px;
  152. max-width: 430px;
  153. font-weight: 500;
  154. font-size: 16px;
  155. .job-name {
  156. height: 22px;
  157. line-height: 22px;
  158. color: var(--color-222);
  159. margin-bottom: 12px;
  160. }
  161. .job-other {
  162. color: var(--v-error-base);
  163. height: 22px;
  164. line-height: 22px;
  165. }
  166. }
  167. .company-info {
  168. display: flex;
  169. align-items: center
  170. }
  171. .interview-info {
  172. color: var(--color-333);
  173. font-size: 15px;
  174. }
  175. }
  176. }
  177. .info-name:hover {
  178. color: var(--v-primary-base);
  179. }
  180. </style>