recruitment.vue 8.5 KB

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