recruitment.vue 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296
  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" border-radius="10"/>
  72. </view>
  73. <view class="dataarea-card-content">
  74. <view class="dataarea-content-left">
  75. <view>{{item.postName}}</view>
  76. <view class="content">{{ item.areaName }}|经验{{ item.workYear }}年|{{ getEducationBg(item.educationBg) }}</view>
  77. <view>{{item.companyName}}</view>
  78. </view>
  79. <view class="dataarea-content-right">
  80. <view>{{item.lowestSalary}}k~{{item.highestSalary}}k</view>
  81. <view>&nbsp;</view>
  82. <view>{{$u.timeFormat(new Date(item.createTime).getTime(), 'yyyy-mm-dd')}}</view>
  83. </view>
  84. </view>
  85. </view>
  86. </view>
  87. </z-paging>
  88. </view>
  89. </template>
  90. <script>
  91. export default {
  92. data() {
  93. return {
  94. headerTopKeyword: '',
  95. bannerList: [],
  96. // 企业推荐列表
  97. recommendList: [],
  98. recruitmentJobList: [],
  99. recommendListData: [],
  100. recommendConfigData: {
  101. title: '企业推荐',
  102. titlemore: '更多',
  103. listmore: false
  104. },
  105. dataAreaTabsCurrent: 0,
  106. dataAreaTabsList: [{
  107. name: '最新',
  108. text: '1'
  109. }],
  110. degrEducList: []
  111. }
  112. },
  113. onLoad() {
  114. // console.log(this.$u.config.v);
  115. // 获取企业推荐列表
  116. this.getRecommendList();
  117. },
  118. onShow() {
  119. this.getBannerList();
  120. this.getVeteDegrEduc();
  121. },
  122. methods: {
  123. /**
  124. * 获取文化程度类别
  125. */
  126. getVeteDegrEduc(){
  127. this.$u.api.getDictdataUrl({key:'degr_educ'}).then(res=>{
  128. if(res.code == 200){
  129. this.degrEducList = res.data.map(item => {
  130. return {
  131. ...item,
  132. value: item.text
  133. }
  134. });
  135. }
  136. });
  137. },
  138. /**
  139. * 获取教育等级名称
  140. * @param {Object} value
  141. */
  142. getEducationBg(value) {
  143. let name;
  144. this.degrEducList.forEach(item => {
  145. if (item.value == value) {
  146. name = item.label
  147. }
  148. })
  149. return name;
  150. },
  151. /**
  152. * 导航栏返回事件
  153. */
  154. navbarCustomBack() {
  155. this.$u.route({
  156. type: 'switchTab',
  157. url: 'pages/index/index'
  158. });
  159. },
  160. getBannerList() {
  161. this.$u.api.indexApi.indexBannerListApi().then(res => {
  162. if (res?.code === 200) {
  163. this.bannerList = res.data;
  164. }
  165. })
  166. },
  167. // 轮播图点击
  168. swiperClick(index) {
  169. if (this.bannerList[index].jumpUrl) {
  170. let url = this.bannerList[index].jumpUrl.split('#')[1];
  171. this.$u.route({
  172. url: url,
  173. });
  174. } else {
  175. this.$u.route({
  176. url: 'pages/bannerDetails/bannerDetails',
  177. params: {
  178. id: this.bannerList[index].id
  179. }
  180. })
  181. }
  182. },
  183. /**
  184. * 获取企业推荐列表
  185. */
  186. getRecommendList() {
  187. this.$u.api.recruitment.getRecommendList().then(res => {
  188. if (res.code === 200) {
  189. this.recommendList = res.data || [];
  190. } else {
  191. uni.showToast({
  192. icon: 'none',
  193. title: res.msg
  194. });
  195. }
  196. }).catch(err => {
  197. uni.showToast({
  198. title: '系统异常!',
  199. type: 'error'
  200. });
  201. });
  202. },
  203. /**
  204. * 获取招聘就业岗位列表
  205. * @param { Number } newest
  206. * @param { Number } pageNum
  207. * @param { Number } pageSize
  208. * @param { String } postName
  209. */
  210. getRecruitmentJobList(newest, pageNum, pageSize, postName) {
  211. this.$u.api.recruitment.getRecruitmentJobList({
  212. pageNum,
  213. pageSize,
  214. postName,
  215. newest
  216. }).then(res => {
  217. if (res.code === 200) {
  218. this.$refs.recruitmentPaging.complete(res.rows || []);
  219. } else {
  220. uni.showToast({
  221. icon: 'none',
  222. title: res.msg
  223. });
  224. this.$refs.recruitmentPaging.complete([]);
  225. }
  226. }).catch(err => {
  227. uni.showToast({
  228. title: '系统异常!',
  229. type: 'error'
  230. });
  231. this.$refs.recruitmentPaging.complete([]);
  232. });
  233. },
  234. /**
  235. * @param { String } value
  236. */
  237. searchKeyword(value) {
  238. this.getRecruitmentJobList(this.dataAreaTabsList[this.dataAreaTabsCurrent]?.text, 1, 10, this
  239. .headerTopKeyword);
  240. },
  241. // tab栏切换
  242. dataAreaTabsChange(index) {
  243. this.dataAreaTabsCurrent = index;
  244. this.getRecruitmentJobList(this.dataAreaTabsList[index]?.text, 1, 10, this.headerTopKeyword);
  245. },
  246. /**
  247. * 列表加载触发
  248. */
  249. recruitmentQueryList(pageNo, pageSize) {
  250. if (this.dataAreaTabsList.length > 0) {
  251. this.getRecruitmentJobList(this.dataAreaTabsList[this.dataAreaTabsCurrent]?.text, pageNo, pageSize,
  252. this.headerTopKeyword);
  253. }
  254. },
  255. recommendCardMoreClick(index) {
  256. console.log("recommendCardMoreClick: ", index);
  257. this.$u.route({
  258. url: 'pages/cooperativeEnterprise/cooperativeEnterprise',
  259. params: {
  260. flag: 'recruitment'
  261. }
  262. });
  263. },
  264. tapRecommendSwiperItem(param) {
  265. this.$u.route({
  266. url: 'pages/businessDetails/businessDetails',
  267. params: {
  268. id: param?.id,
  269. flag: 'recruitment'
  270. }
  271. });
  272. },
  273. tapDataAreaCard(param) {
  274. this.$u.route({
  275. url: 'pages/jobDetails/jobDetails',
  276. params: {
  277. id: param?.id
  278. }
  279. });
  280. }
  281. }
  282. }
  283. </script>
  284. <style lang="scss" scoped>
  285. @import './scss/recruitment.scss';
  286. </style>