特易招,招聘小程序
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.

307 lines
6.9 KiB

9 months ago
9 months ago
7 months ago
9 months ago
9 months ago
9 months ago
9 months ago
7 months ago
9 months ago
9 months ago
9 months ago
7 months ago
9 months ago
7 months ago
9 months ago
9 months ago
9 months ago
7 months ago
4 weeks ago
7 months ago
4 weeks ago
7 months ago
9 months ago
9 months ago
9 months ago
7 months ago
9 months ago
9 months ago
9 months ago
9 months ago
7 months ago
9 months ago
7 months ago
9 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
7 months ago
9 months ago
9 months ago
9 months ago
7 months ago
9 months ago
9 months ago
9 months ago
7 months ago
9 months ago
7 months ago
9 months ago
9 months ago
9 months ago
7 months ago
4 weeks ago
9 months ago
7 months ago
7 months ago
7 months ago
7 months ago
4 weeks ago
9 months ago
9 months ago
7 months ago
9 months ago
7 months ago
9 months ago
9 months ago
9 months ago
7 months ago
9 months ago
9 months ago
7 months ago
9 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
7 months ago
5 months ago
7 months ago
9 months ago
  1. <template>
  2. <view class="page">
  3. <view class="banner">
  4. <uv-swiper
  5. :list="bannerList"
  6. indicator
  7. height="620rpx"
  8. keyName="image"></uv-swiper>
  9. <!-- indicatorStyle="bottom: 100rpx;" -->
  10. <view class="top">
  11. <view class="search">
  12. <uv-search
  13. :placeholder="role ? '请输入简历名称' : '请输入岗位名称'"
  14. :showAction="false"
  15. search-icon-size="40rpx"
  16. @search="search"
  17. v-model="keyword"></uv-search>
  18. </view>
  19. </view>
  20. </view>
  21. <!-- 工人看到的 -->
  22. <view class="content"
  23. v-if="!role">
  24. <view class="grid">
  25. <uv-grid :border="false"
  26. :col="5">
  27. <uv-grid-item
  28. @click="$utils.navigateTo(`/pages_order/work/workList?typeId=${item.id}&title=${item.name}`)"
  29. v-for="(item,index) in jobTypeList"
  30. v-if="index < 4"
  31. :key="index">
  32. <image class="grid-icon" :src="item.image" mode="aspectFill"></image>
  33. <text class="grid-text">{{item.name}}</text>
  34. </uv-grid-item>
  35. <uv-grid-item
  36. v-if="jobTypeList.length > 4"
  37. @click="$utils.navigateTo(`/pages_order/work/workTypeList`)"
  38. >
  39. <image class="grid-icon" :src="configList.config_other_job
  40. || config_other_job " mode="aspectFill"></image>
  41. <text class="grid-text">其他招工</text>
  42. <!--
  43. || `/static/image/home/5.png` -->
  44. </uv-grid-item>
  45. </uv-grid>
  46. </view>
  47. </view>
  48. <!-- 筛选器 -->
  49. <screenWork ref="screenWork" @clickItem="clickItem"/>
  50. <!-- 老板看到的 -->
  51. <userList ref="workList" v-if="role"/>
  52. <!-- 工人看到的 -->
  53. <workList ref="workList" v-else/>
  54. <view class="box"
  55. @click="toAdd"
  56. v-if="role">
  57. <view class="left">
  58. 发布
  59. </view>
  60. <view class="center">
  61. <image src="/static/image/home/c.png" mode=""></image>
  62. </view>
  63. <view class="right">
  64. 招工
  65. </view>
  66. </view>
  67. <view class="switchIdentity"
  68. @click="switchIdentity">
  69. <image src="/static/image/home/x1.png"
  70. v-if="role"
  71. mode="widthFix"></image>
  72. <image src="/static/image/home/x2.png"
  73. v-else
  74. mode="widthFix"></image>
  75. </view>
  76. <checkinScore ref="checkinScore" v-if="UserExtensionInfo.signFlag == false"/>
  77. <PrivacyAgreementPoup/>
  78. <kefu></kefu>
  79. <tabber select="0"/>
  80. </view>
  81. </template>
  82. <script>
  83. import PrivacyAgreementPoup from '@/components/config/PrivacyAgreementPoup.vue'
  84. import workList from '@/components/list/workList/index.vue'
  85. import userList from '@/components/list/userList/index.vue'
  86. import tabber from '@/components/base/tabbar.vue'
  87. import screenWork from '@/components/screen/screenWork.vue'
  88. import checkinScore from '@/components/checkinScore.vue'
  89. import { mapState } from 'vuex'
  90. export default {
  91. components : {
  92. PrivacyAgreementPoup,
  93. workList,
  94. tabber,
  95. screenWork,
  96. userList,
  97. checkinScore,
  98. },
  99. computed: {
  100. ...mapState([
  101. 'userInfo',
  102. 'role',
  103. 'banner',
  104. 'jobTypeList',
  105. 'UserExtensionInfo',
  106. ]),
  107. bannerList(){
  108. return this.banner.filter(n => n.type == 0)
  109. },
  110. },
  111. onPageScroll(e){
  112. this.$refs.screenWork.init()
  113. },
  114. data() {
  115. return {
  116. productList: [],
  117. keyword : '',
  118. screenWorkList : [],
  119. config_other_job : '',
  120. }
  121. },
  122. onPullDownRefresh(){
  123. this.$refs.workList.getData(this.screenWorkList)
  124. this.$store.commit('getBanner')
  125. },
  126. onLoad(query) {
  127. if (query.shareId) {
  128. uni.setStorageSync('shareId', query.shareId)
  129. this.$store.commit('login', true)
  130. }
  131. uni.$on('initConfig', (e) => {
  132. this.config_other_job = e.config_other_job
  133. })
  134. },
  135. // 页面显示的时候触发
  136. onShow() {
  137. this.$refs.workList.getData(this.screenWorkList)
  138. this.$store.commit('getBanner')
  139. if(uni.getStorageSync('token')){
  140. this.$store.commit('getUserExtensionInfo')
  141. this.$store.commit('getBanner')
  142. }
  143. },
  144. //滚动到屏幕底部
  145. onReachBottom() {
  146. this.$refs.workList.loadMoreData()
  147. },
  148. methods: {
  149. clickItem(result){
  150. this.screenWorkList = result
  151. this.$refs.workList.getData(this.screenWorkList)
  152. },
  153. toAdd(){
  154. if(this.role){
  155. // 在完成企业认证的情况下执行
  156. this.$store.commit('isAuthCertificationEnterprise', state => {
  157. this.$utils.navigateTo('/pages_order/work/jobPosting')
  158. })
  159. }else{
  160. this.$utils.navigateTo('/pages_order/work/addResume')
  161. }
  162. },
  163. search(){
  164. this.$utils.navigateTo(`/pages_order/work/workList?keyword=${this.keyword}`)
  165. this.keyword = ''
  166. },
  167. // 切换身份
  168. async switchIdentity(){
  169. // 在完成实名认证的情况下执行
  170. this.$store.commit('isAuthCertification', () => {
  171. // 在完成企业认证的情况下执行
  172. this.$store.commit('isAuthCertificationEnterprise', state => {
  173. uni.showModal({
  174. title: `确认切换到${
  175. this.role ? '师傅' : '雇主'
  176. }身份吗`,
  177. success : e => {
  178. if(!e.confirm){
  179. return
  180. }
  181. this.$store.commit('setRole', !this.role)
  182. this.$nextTick(() => {
  183. this.$refs.screenWork.init()
  184. this.$refs.workList.getData(this.screenWorkList)
  185. })
  186. }
  187. })
  188. })
  189. })
  190. },
  191. }
  192. }
  193. </script>
  194. <style scoped lang="scss">
  195. .page{
  196. .banner{
  197. position: relative;
  198. background-color: $uni-color;
  199. .top{
  200. position: absolute;
  201. top: 190rpx;
  202. left:00rpx;
  203. padding-top: 30rpx;
  204. display: flex;
  205. width: 100%;
  206. flex-direction: column;
  207. align-items: center;
  208. .search{
  209. width: 700rpx;
  210. /deep/ .uv-search__content__icon{
  211. padding: 10rpx 0;
  212. }
  213. }
  214. .title{
  215. image{
  216. width: 600rpx;
  217. height: 300rpx;
  218. }
  219. }
  220. }
  221. }
  222. .box{
  223. position: fixed;
  224. left: 50%;
  225. background: $uni-color;
  226. bottom: calc(env(safe-area-inset-bottom) + 150rpx);
  227. color: #fff;
  228. display: flex;
  229. justify-content: center;
  230. align-items: center;
  231. transform: translate(-50%);
  232. border-radius: 20rpx;
  233. height: 80rpx;
  234. font-size: 28rpx;
  235. image{
  236. width: 100%;
  237. height: 100%;
  238. border-radius: 50%;
  239. }
  240. .left{
  241. padding-left: 30rpx;
  242. }
  243. .center{
  244. width: 100rpx;
  245. height: 100rpx;
  246. border-radius: 50%;
  247. background: $uni-color;
  248. margin: 0 20rpx;
  249. margin-top: -30rpx;
  250. box-shadow: 0 0 4rpx 4rpx #ffffff;
  251. }
  252. .right{
  253. padding-right: 30rpx;
  254. }
  255. }
  256. .content{
  257. position: relative;
  258. margin-top: -60rpx;
  259. .grid{
  260. padding-bottom: 30rpx;
  261. background-color: #fff;
  262. // border-radius: 60rpx;
  263. border-top-left-radius: 60rpx;
  264. border-top-right-radius: 60rpx;
  265. // box-shadow: 0 -10rpx 10rpx 10rpx #00000013;
  266. .grid-icon{
  267. width: 80rpx;
  268. height: 80rpx;
  269. margin-bottom: 10rpx;
  270. margin-top: 30rpx;
  271. }
  272. .grid-text{
  273. font-size: 24rpx;
  274. font-weight: 900;
  275. }
  276. }
  277. }
  278. .switchIdentity{
  279. position: fixed;
  280. right: 30rpx;
  281. bottom: 300rpx;
  282. image{
  283. width: 130rpx;
  284. }
  285. }
  286. }
  287. </style>