recruitment.vue 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315
  1. <!--
  2. * @title 招聘就业
  3. * @author Rockery(1113269755@qq.com)
  4. -->
  5. <template>
  6. <view class="recruitment">
  7. <!-- <u-navbar title-color="#FFFFFF" :customBack="navbarCustomBack" :bpay-bottom="false" back-icon-color="#FFFFFF"
  8. :background="{background: '#3D5D4C' }" title="招聘就业" class="recruitment-unavbar" /> -->
  9. <z-paging ref="recruitmentPaging" v-model="recruitmentJobList" @query="recruitmentQueryList">
  10. <u-navbar slot="top" back-text="" title="" back-icon-color="#FFFFFF" :background="{ background: '#3D5D4C' }" :border-bottom="false"></u-navbar>
  11. <!-- ###################################-- 轮播图 -- ################################### -->
  12. <view class="recruitment-banner" slot="top">
  13. <u-swiper :list="bannerList" name="bannerUrl" border-radius="0" mode="round" height="300"
  14. img-mode="scaleToFill" @click="swiperClick" :mode="bannerList.length > 1 ? 'round' : 'none'"></u-swiper>
  15. </view>
  16. <!-- ###################################-- 请输入您关键词 -- ################################### -->
  17. <view class="recruitment-usearch" slot="top">
  18. <u-search placeholder="请输入您关键词" v-model="headerTopKeyword" :show-action="false" bg-color="#FFFFFF"
  19. @search="searchKeyword" @clear="searchKeyword"></u-search>
  20. </view>
  21. <!-- ###################################-- 企业推荐 -- ################################### -->
  22. <view class="u-card-wrap recruitment-recommend" slot="top">
  23. <u-card :show-foot="false" class="recruitment-recommend-card">
  24. <view slot="head">
  25. <view class="recommend-card-head">
  26. <view class="recommend-card-head-title">{{recommendConfigData.title}}</view>
  27. <view class="recommend-card-head-subtitle" @tap="recommendCardMoreClick">
  28. {{recommendConfigData.titlemore}}
  29. <u-icon name="arrow-right" color="#A3A3A3" size="28"></u-icon>
  30. </view>
  31. </view>
  32. </view>
  33. <view slot="body">
  34. <view class="recommend-card-body">
  35. <swiper v-if="recommendList&&recommendList.length>0" class="recommend-card-content"
  36. :display-multiple-items="4" :autoplay="true">
  37. <swiper-item v-for="(recommendItem, index) in recommendList"
  38. :key="'recommendList' + index">
  39. <view class="swiper-item" @tap="tapRecommendSwiperItem(recommendItem)"
  40. :data-id="recommendItem.id" :data-index="index">
  41. <view class="img">
  42. <!-- <u-image :src="recommendItem.logoUrl" mode="aspectFill" width="140"
  43. height="140" border-radius="10" /> -->
  44. <u-image :src="recommendItem.logoUrl" width="140" height="140" border-radius="10" mode="aspectFill">
  45. <view slot="error">
  46. <u-image src="../../static/img/default-company.png" width="140" height="140" border-radius="10" mode="aspectFill"/>
  47. </view>
  48. </u-image>
  49. </view>
  50. <view class="subject">{{recommendItem.companyName}}</view>
  51. <view class="post u-text-center">
  52. 岗位
  53. <text class="postlink">{{recommendItem.postCount}}</text>个
  54. </view>
  55. </view>
  56. </swiper-item>
  57. <swiper-item v-if="recommendConfigData.listmore">
  58. <view class="swiper-item lookmore" @tap="recommendCardMoreClick">
  59. <view class="moretext">查看更多</view>
  60. </view>
  61. </swiper-item>
  62. </swiper>
  63. </view>
  64. </view>
  65. </u-card>
  66. </view>
  67. <!-- ###################################-- tabs页签 -- ################################### -->
  68. <view class="recruitment-tabs" slot="top">
  69. <u-tabs bg-color="transparent" :list="dataAreaTabsList" @change="dataAreaTabsChange"
  70. :current="dataAreaTabsCurrent" />
  71. </view>
  72. <!-- ###################################-- 招聘就业岗位 -- ################################### -->
  73. <view class="recruitment-dataarea">
  74. <view class="recruitment-dataarea-card" v-for="(item,index) in recruitmentJobList"
  75. :key="'recruitmentJobList' + index" @tap="tapDataAreaCard(item)">
  76. <view class="dataarea-card-left">
  77. <!-- <u-image :src="item.companyLogoUrl" mode="aspectFill" width="120" height="120"
  78. border-radius="10" /> -->
  79. <u-image :src="item.companyLogoUrl" width="120" height="120" border-radius="10" mode="aspectFill">
  80. <view slot="error">
  81. <u-image src="../../static/img/default-company.png" width="120" height="120" border-radius="10" mode="aspectFill"/>
  82. </view>
  83. </u-image>
  84. </view>
  85. <view class="dataarea-card-content">
  86. <view class="dataarea-content-left">
  87. <view>{{item.postName}}</view>
  88. <view class="content">
  89. {{ item.areaName }}|经验{{ item.workYear }}年|{{ getEducationBg(item.educationBg) }}
  90. </view>
  91. <view>{{item.companyName}}</view>
  92. </view>
  93. <view class="dataarea-content-right">
  94. <view>{{item.lowestSalary}}K~{{item.highestSalary}}K</view>
  95. <view>&nbsp;</view>
  96. <view>{{$u.timeFormat(new Date(item.createTime).getTime(), 'yyyy-mm-dd')}}</view>
  97. </view>
  98. </view>
  99. </view>
  100. </view>
  101. </z-paging>
  102. </view>
  103. </template>
  104. <script>
  105. export default {
  106. data() {
  107. return {
  108. headerTopKeyword: '',
  109. bannerList: [],
  110. // 企业推荐列表
  111. recommendList: [],
  112. recruitmentJobList: [],
  113. recommendListData: [],
  114. recommendConfigData: {
  115. title: '企业推荐',
  116. titlemore: '更多',
  117. listmore: false
  118. },
  119. dataAreaTabsCurrent: 0,
  120. dataAreaTabsList: [{
  121. name: '最新',
  122. text: '1'
  123. }],
  124. degrEducList: []
  125. }
  126. },
  127. onLoad() {
  128. // console.log(this.$u.config.v);
  129. // 获取企业推荐列表
  130. this.getRecommendList();
  131. },
  132. onShow() {
  133. this.getBannerList();
  134. this.getVeteDegrEduc();
  135. },
  136. methods: {
  137. /**
  138. * 获取文化程度类别
  139. */
  140. getVeteDegrEduc() {
  141. this.$u.api.getDictdataUrl({
  142. key: 'degr_educ'
  143. }).then(res => {
  144. if (res.code == 200) {
  145. this.degrEducList = res.data.map(item => {
  146. return {
  147. ...item,
  148. value: item.text
  149. }
  150. });
  151. }
  152. });
  153. },
  154. /**
  155. * 获取教育等级名称
  156. * @param {Object} value
  157. */
  158. getEducationBg(value) {
  159. let name;
  160. this.degrEducList.forEach(item => {
  161. if (item.value == value) {
  162. name = item.label
  163. }
  164. })
  165. return name;
  166. },
  167. /**
  168. * 导航栏返回事件
  169. */
  170. navbarCustomBack() {
  171. this.$u.route({
  172. type: 'switchTab',
  173. url: 'pages/index/index'
  174. });
  175. },
  176. getBannerList() {
  177. this.$u.api.indexApi.indexBannerListApi({
  178. type: 1
  179. }).then(res => {
  180. if (res?.code === 200) {
  181. this.bannerList = res.data;
  182. }
  183. })
  184. },
  185. // 轮播图点击
  186. swiperClick(index) {
  187. if (this.bannerList[index].jumpUrl) {
  188. let url = this.bannerList[index].jumpUrl.split('#')[1];
  189. this.$u.route({
  190. url: url,
  191. });
  192. } else {
  193. this.$u.route({
  194. url: 'pages/bannerDetails/bannerDetails',
  195. params: {
  196. id: this.bannerList[index].id,
  197. type: 1
  198. }
  199. })
  200. }
  201. },
  202. /**
  203. * 获取企业推荐列表
  204. */
  205. getRecommendList() {
  206. this.$u.api.recruitment.getRecommendList().then(res => {
  207. if (res.code === 200) {
  208. this.recommendList = res.data || [];
  209. } else {
  210. uni.showToast({
  211. icon: 'none',
  212. title: res.msg
  213. });
  214. }
  215. }).catch(err => {
  216. uni.showToast({
  217. title: '系统异常!',
  218. type: 'error'
  219. });
  220. });
  221. },
  222. /**
  223. * 获取招聘就业岗位列表
  224. * @param { Number } newest
  225. * @param { Number } pageNum
  226. * @param { Number } pageSize
  227. * @param { String } postName
  228. */
  229. getRecruitmentJobList(newest, pageNum, pageSize, postName) {
  230. this.$u.api.recruitment.getRecruitmentJobList({
  231. pageNum,
  232. pageSize,
  233. postName,
  234. newest
  235. }).then(res => {
  236. if (res.code === 200) {
  237. this.$refs.recruitmentPaging.complete(res.rows || []);
  238. } else {
  239. uni.showToast({
  240. icon: 'none',
  241. title: res.msg
  242. });
  243. this.$refs.recruitmentPaging.complete([]);
  244. }
  245. }).catch(err => {
  246. uni.showToast({
  247. title: '系统异常!',
  248. type: 'error'
  249. });
  250. this.$refs.recruitmentPaging.complete([]);
  251. });
  252. },
  253. /**
  254. * @param { String } value
  255. */
  256. searchKeyword(value) {
  257. this.$refs.recruitmentPaging.reload(true)
  258. this.getRecruitmentJobList(this.dataAreaTabsList[this.dataAreaTabsCurrent]?.text, 1, 10, this
  259. .headerTopKeyword);
  260. },
  261. // tab栏切换
  262. dataAreaTabsChange(index) {
  263. this.dataAreaTabsCurrent = index;
  264. this.$refs.recruitmentPaging.reload(true)
  265. this.getRecruitmentJobList(this.dataAreaTabsList[index]?.text, 1, 10, this.headerTopKeyword);
  266. },
  267. /**
  268. * 列表加载触发
  269. */
  270. recruitmentQueryList(pageNo, pageSize) {
  271. if (this.dataAreaTabsList.length > 0) {
  272. this.getRecruitmentJobList(this.dataAreaTabsList[this.dataAreaTabsCurrent]?.text, pageNo, pageSize,
  273. this.headerTopKeyword);
  274. }
  275. },
  276. recommendCardMoreClick(index) {
  277. console.log("recommendCardMoreClick: ", index);
  278. this.$u.route({
  279. url: 'pages/cooperativeEnterprise/cooperativeEnterprise',
  280. params: {
  281. flag: 'recruitment'
  282. }
  283. });
  284. },
  285. tapRecommendSwiperItem(param) {
  286. this.$u.route({
  287. url: 'pages/businessDetails/businessDetails',
  288. params: {
  289. id: param?.id,
  290. flag: 'recruitment'
  291. }
  292. });
  293. },
  294. tapDataAreaCard(param) {
  295. this.$u.route({
  296. url: 'pages/jobDetails/jobDetails',
  297. params: {
  298. id: param?.id
  299. }
  300. });
  301. }
  302. }
  303. }
  304. </script>
  305. <style lang="scss" scoped>
  306. @import './scss/recruitment.scss';
  307. </style>