招聘网页
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.vue 8.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. <template>
  2. <div v-if="mode== 'detail'">
  3. <a-page-header>
  4. <template #title>
  5. <a-button @click="back" type="link">
  6. <ArrowLeftOutlined />前往更多求职
  7. </a-button>
  8. </template>
  9. <a-list item-layout="vertical">
  10. <a-list-item>
  11. <a-list-item-meta>
  12. <template #title>
  13. <div style="font-size: 24px; font-family: bold;">{{companyDetail.full_name}}</div>
  14. </template>
  15. <template #description>
  16. <div>
  17. 企业编号:{{companyDetail.id}}
  18. </div>
  19. </template>
  20. </a-list-item-meta>
  21. </a-list-item>
  22. </a-list>
  23. <a-tabs v-model:activeKey="activeKey" type="card" @change="activeChange">
  24. <a-tab-pane :key="1" tab="企业信息">
  25. <template v-if="activeKey == 1">
  26. <div style="margin: 20px 0; padding: 20px;background-color: #ffffff;border-radius: 8px;">
  27. <a-descriptions title="公司介绍" layout="vertical">
  28. <a-descriptions-item>
  29. <div v-html="companyDetail.introduction"></div>
  30. </a-descriptions-item>
  31. </a-descriptions>
  32. </div>
  33. <div style="margin: 20px 0; padding: 20px;background-color: #ffffff;">
  34. <a-descriptions :column="7" title="公司概况" layout="vertical">
  35. <a-descriptions-item label="所属行业" span="2"
  36. v-if="companyDetail.situation">{{companyDetail.situation.industry_text}}/{{companyDetail.situation.industry2_text}}</a-descriptions-item>
  37. <a-descriptions-item label="公司性质"
  38. v-if="companyDetail.situation">{{companyDetail.situation.nature_text}}</a-descriptions-item>
  39. <a-descriptions-item label="公司规模"
  40. v-if="companyDetail.situation">{{companyDetail.situation.scale_text }}</a-descriptions-item>
  41. <a-descriptions-item label="成立时间"
  42. v-if="companyDetail.situation">{{companyDetail.situation.establishment_date }}</a-descriptions-item>
  43. </a-descriptions>
  44. </div>
  45. <div style="margin: 20px 0; padding: 20px;background-color: #ffffff;border-radius: 8px;">
  46. <a-descriptions :column="7" title="联系方式" layout="vertical">
  47. <a-descriptions-item label="联系地址"
  48. span="2">{{companyDetail.detail_address}}</a-descriptions-item>
  49. <a-descriptions-item label="联系人">{{companyDetail.contact}}</a-descriptions-item>
  50. <a-descriptions-item label="联系手机">{{companyDetail.mobile}}</a-descriptions-item>
  51. <a-descriptions-item label="联系电话">{{companyDetail.phone}}</a-descriptions-item>
  52. <a-descriptions-item label="Email">{{companyDetail.email}}</a-descriptions-item>
  53. <a-descriptions-item label="传真">{{companyDetail.fax}}</a-descriptions-item>
  54. </a-descriptions>
  55. </div>
  56. <div style="margin: 20px 0; padding: 20px;background-color: #ffffff;border-radius: 8px;">
  57. <a-descriptions :column="7" title="企业相册" layout="vertical">
  58. <a-descriptions-item><image-container :need="true"
  59. :imgObj="{src: imageprefix + companyDetail.photo,width: '200px',height:'200px', mode: 'fill'}"></image-container></a-descriptions-item>
  60. </a-descriptions>
  61. </div>
  62. <div style="margin: 20px 0; padding: 20px;background-color: #ffffff;border-radius: 8px;">
  63. <a-descriptions :column="1" title="地图位置" layout="vertical">
  64. <a-descriptions-item span="24">
  65. <map-marker v-if="companyDetail.latitude && companyDetail.longitude" :lat="companyDetail.latitude" :lng="companyDetail.longitude"></map-marker>
  66. </a-descriptions-item>
  67. </a-descriptions>
  68. </div>
  69. </template>
  70. </a-tab-pane>
  71. <a-tab-pane :key="2" tab="招聘职位" force-render>
  72. <template v-if="activeKey == 2">
  73. <template v-if="!jobList || jobList.length == 0">
  74. <a-empty style="height: 100vh;">
  75. <template #description>
  76. 本企业未有招聘信息
  77. </template>
  78. </a-empty>
  79. </template>
  80. <template v-else>
  81. <a-row :gutter="10">
  82. <a-col span="8">
  83. <div style="background-color: #ffffff;padding-bottom: 20px; border-radius: 8px;">
  84. <job-card :list="jobList" @detail="toDetail"></job-card>
  85. <a-flex justify="center">
  86. <a-space>
  87. <a-pagination simple v-model:current="current" :total="total"
  88. @change="pageChange" />
  89. </a-space>
  90. </a-flex>
  91. </div>
  92. </a-col>
  93. <a-col span="16">
  94. <div style="padding: 20px;background-color: #ffffff;border-radius: 8px;">
  95. <job-detail v-if="job_id" :id="job_id"></job-detail>
  96. </div>
  97. </a-col>
  98. </a-row>
  99. </template>
  100. </template>
  101. </a-tab-pane>
  102. </a-tabs>
  103. </a-page-header>
  104. </div>
  105. <div v-else>
  106. <job-list @detail="showDetail"></job-list>
  107. <job-internship @detail="showDetail"></job-internship>
  108. <!-- <job-detail></job-detail> -->
  109. </div>
  110. </template>
  111. <script setup lang="ts">
  112. import { ref, onMounted, computed, watch, onBeforeUnmount } from 'vue';
  113. import JobDetail from '@/components/job/detail/index.vue'
  114. import JobCard from '@/components/job/card/index.vue'
  115. import JobList from '@/components/job/list/index.vue'
  116. import JobInternship from '@/components/job/internship/index.vue'
  117. import MapMarker from '@/components/map/marker.vue'
  118. import { PostCompanyInfo, GetJobCompanyjobs } from '@/apis/models';
  119. import { ArrowLeftOutlined } from '@ant-design/icons-vue';
  120. import { router } from '@/router';
  121. import { useCommon } from '@/hooks/useCommon';
  122. let { imageprefix } = useCommon();
  123. let activeKey = ref<Number>(sessionStorage.getItem('tab_key') ? Number(sessionStorage.getItem('tab_key')) : 1)
  124. let companyDetail = ref<object>({})
  125. let jobList = ref<object[]>([])
  126. let pubilc_id = ref<Number>(0)
  127. let current = ref<Number>(1)
  128. let total = ref<Number>(0)
  129. let job_id = ref<Number>(0)
  130. let mode = ref<String>(sessionStorage.getItem('mode'))
  131. const toDetail = (data) => {
  132. job_id.value = data.id;
  133. }
  134. const pageChange = (page) => {
  135. current.value = page
  136. getJobCompanyjobs(page)
  137. }
  138. const getJobCompanyjobs = (page) => {
  139. GetJobCompanyjobs({ company_id: pubilc_id.value ? pubilc_id.value : sessionStorage.getItem('id'), page: page, pagesize: 3 }).then(res => {
  140. total.value = res.data.total;
  141. if (res.data.jobs.length > 3) {
  142. jobList.value = res.data.jobs.slice(0, 3)
  143. } else {
  144. jobList.value = res.data.jobs
  145. }
  146. job_id.value = jobList.value[0].id
  147. })
  148. }
  149. const back = (page) => {
  150. sessionStorage.removeItem('pubilc_id')
  151. sessionStorage.removeItem('mode')
  152. sessionStorage.removeItem('tab_key')
  153. sessionStorage.removeItem('job_id')
  154. mode.value = sessionStorage.getItem('mode')
  155. }
  156. const showDetail = (page) => {
  157. // mode.value = sessionStorage.getItem('mode')
  158. activeKey.value = sessionStorage.getItem('tab_key') ? Number(sessionStorage.getItem('tab_key')) : 1
  159. // job_id.value = sessionStorage.getItem('job_id') ? Number(sessionStorage.getItem('job_id')) : 0;
  160. // pubilc_id.value = sessionStorage.getItem('pubilc_id') ? Number(sessionStorage.getItem('pubilc_id')) : pubilc_id.value;
  161. // if (sessionStorage.getItem('pubilc_id') != 0 || sessionStorage.getItem('id') != 0) {
  162. // PostCompanyInfo({ id: pubilc_id.value ? pubilc_id.value : sessionStorage.getItem('id') }).then(res => {
  163. // companyDetail.value = res.data
  164. // })
  165. // getJobCompanyjobs(current.value)
  166. // }
  167. window.open('/company/detail', "_blank");
  168. }
  169. onMounted(() => {
  170. if (mode.value == 'detail') {
  171. job_id.value = sessionStorage.getItem('job_id') ? Number(sessionStorage.getItem('job_id')) : 0;
  172. pubilc_id.value = sessionStorage.getItem('pubilc_id') ? Number(sessionStorage.getItem('pubilc_id')) : pubilc_id.value;
  173. if (sessionStorage.getItem('pubilc_id') != 0 || sessionStorage.getItem('id') != 0) {
  174. PostCompanyInfo({ id: pubilc_id.value ? pubilc_id.value : sessionStorage.getItem('id') }).then(res => {
  175. companyDetail.value = res.data;
  176. })
  177. getJobCompanyjobs(current.value)
  178. }
  179. }
  180. })
  181. onBeforeUnmount(() => {
  182. sessionStorage.removeItem('pubilc_id')
  183. sessionStorage.removeItem('mode')
  184. sessionStorage.removeItem('tab_key')
  185. sessionStorage.removeItem('job_id')
  186. })
  187. </script>
  188. <style scoped lang="less">
  189. :deep(.ant-list-item) {
  190. padding: 0 !important;
  191. }
  192. :deep(.ant-card) {
  193. padding: 0 !important;
  194. }
  195. :deep(.ant-card-body) {
  196. padding: 0 !important;
  197. }
  198. </style>