recruitment.vue 9.1 KB

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