招聘网页
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. <template>
  2. <div class="content-padding-inline" style="margin: 30px 0;">
  3. <a-row :gutter="[20,20]" type="flex" justify="center">
  4. <a-col span="18">
  5. <div style="width: 100%; background-color: #fff;">
  6. <a-list item-layout="vertical">
  7. <a-list-item>
  8. <a-list-item-meta>
  9. <template #title>
  10. {{basic.contact}}
  11. </template>
  12. <template #description>
  13. 企业编号:{{basic.id}}
  14. </template>
  15. <template #avatar>
  16. <image-container
  17. :imgObj="{src: '/images/onlylogo.jpg',width: '48px',height:'48px'}"></image-container>
  18. </template>
  19. </a-list-item-meta>
  20. <div style="margin-left: 64px;">
  21. <a-descriptions :column="2">
  22. <a-descriptions-item
  23. label="登录账号">{{basic.login_name ? basic.login_name : '未知'}}</a-descriptions-item>
  24. <a-descriptions-item
  25. label="会员始止时间">{{basic.start_date}}至{{basic.end_date}}</a-descriptions-item>
  26. <a-descriptions-item
  27. label="联系电话">{{basic.mobile ? basic.mobile : '未填写'}}</a-descriptions-item>
  28. <a-descriptions-item label="服务终止日期">{{basic.end_date}}</a-descriptions-item>
  29. <a-descriptions-item
  30. label="电子邮箱">{{basic.email ? basic.email : '未填写'}}</a-descriptions-item>
  31. <a-descriptions-item
  32. label="被访问次数">{{basic.click_count ? basic.click_count : '0'}}次</a-descriptions-item>
  33. </a-descriptions>
  34. </div>
  35. </a-list-item>
  36. </a-list>
  37. </div>
  38. </a-col>
  39. <a-col span="18">
  40. <div style="width: 100%; background-color: #fff;padding: 10px 20px;">
  41. 当月已查看<a-tag :bordered="false" color="red">{{basic.month_look_resume_qty}}</a-tag>份简历,还可以查看<a-tag
  42. :bordered="false" color="green">{{basic.limit_resume_qty}}</a-tag>份简历
  43. </div>
  44. </a-col>
  45. <a-col span="18">
  46. <a-space align="cneter" direction="vertical">
  47. <div style="width: 100%;font-size: 24px;">
  48. 推荐简历
  49. </div>
  50. <a-row :gutter="[20,20]">
  51. <a-col span="12" v-for="(item, index) in jobList">
  52. <div class="talent-box">
  53. <a-list>
  54. <a-list-item>
  55. <template #actions>
  56. <a-button @click="putInTatent(item.customer_id)">
  57. 放入人才库
  58. </a-button>
  59. <a-button @click="interview(item)" >
  60. 邀请面试
  61. </a-button>
  62. </template>
  63. <a-list-item-meta>
  64. <template #title>
  65. <a-button type="link" @click="detail(item)">{{item.seekername}}</a-button>
  66. </template>
  67. <template #description>
  68. <div>
  69. {{item.gender}}
  70. <a-divider type="vertical" />
  71. {{item.education_text}}
  72. <a-divider type="vertical" />
  73. {{item.now_level1_text}}{{item.now_level2_text}}
  74. </div>
  75. <div style="margin-top: 10px; overflow: hidden;
  76. display: -webkit-box;
  77. -webkit-line-clamp: 1;
  78. -webkit-box-orient: vertical;
  79. text-overflow: ellipsis;">
  80. <div v-html="item.introduction"></div>
  81. </div>
  82. </template>
  83. <template #avatar>
  84. <image-container
  85. :imgObj="{src: '/images/onlylogo.jpg',width: '48px',height:'48px'}"></image-container>
  86. </template>
  87. </a-list-item-meta>
  88. </a-list-item>
  89. </a-list>
  90. </div>
  91. </a-col>
  92. <a-col span="24" v-if="jobList.length > 0">
  93. <a-flex justify="center">
  94. <a-button size="large" class="main-color" @click="more">查看更多</a-button>
  95. </a-flex>
  96. </a-col>
  97. </a-row>
  98. </a-space>
  99. </a-col>
  100. </a-row>
  101. </div>
  102. <a-modal v-model:open="openInterview" centered title="面试邀请" @ok="interviewOk">
  103. <a-space direction="vertical" style="width: 100%;">
  104. <a-select v-model:value="position_name" @change="positionChange"
  105. placeholder="请进行搜索选择职位" show-search :filter-option="false" label-in-value
  106. @search="positionSearch" size="large" style="width: 100%;">
  107. <a-select-option v-for="item in position_list" :key="item.id" :value="item.id"
  108. :label="item.name" label-in-value>{{item.name}}</a-select-option>
  109. </a-select>
  110. <a-date-picker v-model:value="time" @Change="timeChange" show-time style="width: 100%;" placeholder="请选择面试日期"
  111. size="large" :disabled-date="disabledDate" />
  112. </a-space>
  113. </a-modal>
  114. <resume-detail v-if="detail_record" :detail_record="detail_record"></resume-detail>
  115. </template>
  116. <script setup lang="ts">
  117. import { ref, onMounted, computed, defineEmits, createVNode } from 'vue';
  118. import JobTalents from '@/components/job/talents/index.vue'
  119. import ResumeDetail from '@/components/jobseeker/resume/detail/index.vue'
  120. import { PostCompanyProfile, GetCompanyRecommentResume, PostCompanyTalentPoolAdd, PostCompanyResumeInterviewAdd ,PostCompanyJobList} from '@/apis/models';
  121. import { warnToast, successToast } from '@/utils/toastHelper';
  122. import { useCommon } from '@/hooks/useCommon';
  123. let { commomParams, ExclamationCircleOutlined, Modal, dayjs, disabledDate, showOtherModal1 } = useCommon();
  124. const dayjsRef = ref(dayjs);
  125. let jobList = ref<Object[]>([])
  126. let basic = ref<Object>({})
  127. let page = ref<Number>(1)
  128. const onLoadMore = () => {
  129. page.value = page.value + 1;
  130. getData();
  131. }
  132. const getData = () => {
  133. GetCompanyRecommentResume({ page: page.value, pagesize: 10 }).then(res => {
  134. jobList.value = res.data.list ? jobList.value.concat(res.data.list) : jobList.value.concat([])
  135. })
  136. }
  137. // 邀请面试
  138. let openInterview = ref<Boolean>(false);
  139. let form = {
  140. job_id: '',
  141. customer_id: '',
  142. interview_date_time: ''
  143. }
  144. const interview = (record : Object) => {
  145. positionSearch('')
  146. console.log(record)
  147. openInterview.value = true
  148. form.job_id = '';
  149. form.customer_id = record.customer_id;
  150. form.interview_date_time = ''
  151. time.value = '';
  152. position_name.value = null;
  153. }
  154. // 选择职位
  155. let position_list = ref<Object[]>([])
  156. let position_name = ref<String>(null)
  157. const positionSearch = (val) => {
  158. PostCompanyJobList({ keyword: val }).then(res => {
  159. position_list.value = res.data.list;
  160. })
  161. }
  162. const positionChange = (val : Object) => {
  163. debugger
  164. position_name.value = val.option.label;
  165. form.job_id = Number(val.key);
  166. }
  167. let time = ref<String>('');
  168. const timeChange = (val) => {
  169. form.interview_date_time = dayjsRef.value(val).format('YYYY-MM-DD HH:mm:ss');
  170. }
  171. const interviewOk = () => {
  172. console.log(form)
  173. if (!form.interview_date_time) {
  174. warnToast('请选择面试时间')
  175. return;
  176. } else {
  177. PostCompanyResumeInterviewAdd(form).then(res => {
  178. successToast('已发送邀请')
  179. openInterview.value = false
  180. getData();
  181. })
  182. }
  183. }
  184. let detail_record = ref<Object>(null)
  185. const detail = (record) => {
  186. detail_record.value = record;
  187. showOtherModal1()
  188. }
  189. // 放入人才库
  190. const putInTatent = (id) => {
  191. Modal.confirm({
  192. title: `是否要放入人才库`,
  193. centered: true,
  194. icon: createVNode(ExclamationCircleOutlined),
  195. onOk() {
  196. PostCompanyTalentPoolAdd({ customer_id: id }).then(res => {
  197. successToast('已放入人才库')
  198. getData();
  199. })
  200. },
  201. onCancel() {
  202. },
  203. });
  204. }
  205. onMounted(() => {
  206. PostCompanyProfile().then(res => {
  207. basic.value = res.data
  208. })
  209. getData();
  210. })
  211. </script>
  212. <style scoped lang="less">
  213. .talent-box {
  214. border-radius: 8px;
  215. background-color: #fff;
  216. }
  217. .applyRouteStyles(@routeName) {
  218. & when (@routeName =company) {
  219. :deep(.ant-list-item-meta) {
  220. flex: none !important;
  221. width: 40% !important;
  222. }
  223. :deep(.ant-list-item-action) {
  224. margin-inline-start: 0 !important;
  225. }
  226. }
  227. }
  228. // :deep(.ant-list-item-meta) {
  229. // flex: none !important;
  230. // width: 40% !important;
  231. // }
  232. // :deep(.ant-list-item-action) {
  233. // margin-inline-start: 0 !important;
  234. // }
  235. </style>