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

584 lines
16 KiB

11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
8 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
8 months ago
11 months ago
8 months ago
11 months ago
9 months ago
11 months ago
11 months ago
9 months ago
11 months ago
9 months ago
11 months ago
11 months ago
8 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
8 months ago
11 months ago
11 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
11 months ago
10 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
8 months ago
11 months ago
11 months ago
11 months ago
8 months ago
8 months ago
11 months ago
8 months ago
11 months ago
11 months ago
8 months ago
8 months ago
11 months ago
11 months ago
8 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
10 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
8 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
8 months ago
8 months ago
8 months ago
11 months ago
8 months ago
8 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
  1. <template>
  2. <view class="page">
  3. <navbar bgColor="#3796F8"/>
  4. <view class="head">
  5. <!-- 未登录状态 -->
  6. <template v-if="!isLoggedIn">
  7. <view class="headImage">
  8. <image src="/static/image/center/headImage.png" mode=""></image>
  9. </view>
  10. <view class="info">
  11. <view class="name">
  12. 未登录用户
  13. </view>
  14. <view class="tips">
  15. 请先登录以查看个人信息
  16. </view>
  17. </view>
  18. <view class="loginBtn" @click="$utils.toLogin()">
  19. 登录
  20. </view>
  21. </template>
  22. <!-- 已登录状态 -->
  23. <template v-else>
  24. <view class="headImage">
  25. <image :src="headImage" mode=""></image>
  26. </view>
  27. <view class="info">
  28. <view class="name"
  29. @click="$utils.navigateTo('/pages_order/mine/updateUser?back=true')">
  30. {{username}}
  31. <!-- 个人实名认证图标 -->
  32. <image v-if="UserExtensionInfo.personAuthenticationStatus == '1'"
  33. :src="configList.config_person_icon"
  34. class="auth-icon"
  35. mode="aspectFit"></image>
  36. <!-- 企业认证图标 -->
  37. <image v-if="UserExtensionInfo.companyAuthenticationStatus == '1'"
  38. :src="configList.config_person_icon"
  39. class="auth-icon"
  40. mode="aspectFit"></image>
  41. <view>
  42. <uv-icon name="edit-pen" size="40rpx" color="#fff"></uv-icon>
  43. 修改资料
  44. </view>
  45. </view>
  46. <view class="tips">
  47. 手机号{{phone}}
  48. </view>
  49. <view>
  50. {{ UserExtensionInfo.vipType || '' }}
  51. </view>
  52. <!-- 个人实名认证到期提醒 -->
  53. <view v-if="personAuthDaysLeft" :class="personAuthDaysLeft === 'expired' ? 'auth-expired' : 'auth-warning'">
  54. <template v-if="personAuthDaysLeft === 'expired'">
  55. 个人实名认证已过期
  56. </template>
  57. <template v-else>
  58. 个人实名认证还有{{personAuthDaysLeft}}天到期
  59. </template>
  60. </view>
  61. <!-- 企业认证到期提醒 -->
  62. <view v-if="companyAuthDaysLeft" :class="companyAuthDaysLeft === 'expired' ? 'auth-expired' : 'auth-warning'">
  63. <template v-if="companyAuthDaysLeft === 'expired'">
  64. 企业认证已过期
  65. </template>
  66. <template v-else>
  67. 企业认证还有{{companyAuthDaysLeft}}天到期
  68. </template>
  69. </view>
  70. </view>
  71. </template>
  72. <!-- <view class="setting">
  73. <uv-icon name="setting" size="40rpx"></uv-icon>
  74. </view> -->
  75. </view>
  76. <!-- 酒店 -->
  77. <view class="user">
  78. <!-- 实名认证 - 仅登录后显示 -->
  79. <template v-if="isLoggedIn">
  80. <view class="auth" v-if="UserExtensionInfo.personAuthenticationStatus != '1'"
  81. @click="$utils.navigateTo('/pages_order/auth/certification')">
  82. <uv-cell
  83. icon="setting-fill"
  84. title="完成实名认证,信息优先推荐!"
  85. value="去认证"
  86. isLink></uv-cell>
  87. </view>
  88. <view class="auth" v-else
  89. @click="$utils.navigateTo('/pages_order/auth/certification')">
  90. <uv-cell
  91. icon="setting-fill"
  92. title="您已完成实名认证!"
  93. value="去查看"
  94. isLink></uv-cell>
  95. </view>
  96. </template>
  97. <!-- 轮播图 -->
  98. <view class="swipe">
  99. <uv-swiper
  100. :list="bannerList"
  101. indicator
  102. height="220rpx"
  103. keyName="image"></uv-swiper>
  104. </view>
  105. <!-- 数据统计 - 仅登录后显示 -->
  106. <view class="line" v-if="isLoggedIn">
  107. <view class="item"
  108. @click="$utils.navigateTo('/pages_order/mine/InvitationCredit')">
  109. <view class="">
  110. {{UserExtensionInfo.integerNum || 0}}
  111. </view>
  112. <view class="">
  113. 我的积分
  114. </view>
  115. </view>
  116. <!-- <view class="item">
  117. <view class="">
  118. 30000
  119. </view>
  120. <view class="">
  121. 临时积分
  122. </view>
  123. </view> -->
  124. <view class="item"
  125. @click="$utils.navigateTo('/pages_order/mine/collect')">
  126. <view class=""
  127. v-if="role">
  128. {{UserExtensionInfo.resumeCollectionNum || 0 }}
  129. </view>
  130. <view class=""
  131. v-else>
  132. {{ UserExtensionInfo.jobCollectionNum || 0 }}
  133. </view>
  134. <view class="">
  135. 我的收藏
  136. </view>
  137. </view>
  138. <view class="item"
  139. @click="$utils.navigateTo('/pages_order/mine/contactRecord')">
  140. <view class=""
  141. v-if="role">
  142. {{ (UserExtensionInfo.resumecheckNumBoss || 0) +
  143. (UserExtensionInfo.jobCheckNumBoss || 0)
  144. }}
  145. </view>
  146. <view class=""
  147. v-else>
  148. {{ (UserExtensionInfo.jobcheckNumEmployee || 0) +
  149. (UserExtensionInfo.resumecheckNumEmployee || 0)
  150. }}
  151. </view>
  152. <view class="">
  153. 联系记录
  154. </view>
  155. </view>
  156. </view>
  157. <!-- 未登录提示 -->
  158. <view class="line login-tip" v-if="!isLoggedIn">
  159. <view class="tip-content">
  160. <text>登录后可查看个人数据</text>
  161. <button class="login-tip-btn" @click="$utils.toLogin()">立即登录</button>
  162. </view>
  163. </view>
  164. <view class="line grid">
  165. <view class="title">
  166. 我的工作
  167. </view>
  168. <uv-grid :col="4" :border="false">
  169. <uv-grid-item
  170. v-if="!role && isLoggedIn"
  171. @click="toAddResume">
  172. <image class="image" src="/static/image/center/a1.png" mode=""></image>
  173. <text class="grid-text">在线简历</text>
  174. </uv-grid-item>
  175. <uv-grid-item
  176. v-if="role && isLoggedIn"
  177. @click="$utils.navigateTo('/pages_order/mine/releaseWork')">
  178. <image class="image" src="/static/image/center/a1.png" mode=""></image>
  179. <text class="grid-text">{{ role ? '我的招工' : '我的找活'}}</text>
  180. </uv-grid-item>
  181. <uv-grid-item
  182. v-if="!isLoggedIn"
  183. @click="$utils.toLogin()">
  184. <image class="image" src="/static/image/center/a1.png" mode=""></image>
  185. <text class="grid-text">在线简历</text>
  186. </uv-grid-item>
  187. <uv-grid-item @click="isLoggedIn ? $utils.navigateTo('/pages_order/mine/seeMy') : $utils.toLogin()">
  188. <image class="image" src="/static/image/center/a2.png" mode=""></image>
  189. <text class="grid-text">谁看过我</text>
  190. </uv-grid-item>
  191. </uv-grid>
  192. </view>
  193. <view class="line grid">
  194. <view class="title">
  195. 我的服务
  196. </view>
  197. <uv-grid :col="4" :border="false">
  198. <uv-grid-item @click="isLoggedIn ? $utils.navigateTo('/pages_order/mine/MemberRecharge') : $utils.toLogin()">
  199. <image class="image" src="/static/image/center/1.png" mode=""></image>
  200. <text class="grid-text">会员充值</text>
  201. </uv-grid-item>
  202. <uv-grid-item @click="isLoggedIn ? $utils.navigateTo('/pages_order/mine/GainPoints') : $utils.toLogin()">
  203. <image class="image" src="/static/image/center/4.png" mode=""></image>
  204. <text class="grid-text">获取积分</text>
  205. </uv-grid-item>
  206. <uv-grid-item @click="isLoggedIn ? $utils.navigateTo('/pages_order/mine/IntegralRecord') : $utils.toLogin()">
  207. <image class="image" src="/static/image/center/5.png" mode=""></image>
  208. <text class="grid-text">积分记录</text>
  209. </uv-grid-item>
  210. <uv-grid-item @click="isLoggedIn ? $utils.navigateTo('/pages_order/auth/certificationEnterprise') : $utils.toLogin()"
  211. v-if="role || !isLoggedIn">
  212. <image class="image" src="/static/image/center/6.png" mode=""></image>
  213. <text class="grid-text">企业认证</text>
  214. </uv-grid-item>
  215. <uv-grid-item @click="isLoggedIn ? $utils.navigateTo('/pages_order/auth/certification') : $utils.toLogin()"
  216. v-if="!role || !isLoggedIn">
  217. <image class="image" src="/static/image/center/6.png" mode=""></image>
  218. <text class="grid-text">实名认证</text>
  219. </uv-grid-item>
  220. <uv-grid-item @click="isLoggedIn ? $utils.navigateTo('/pages_order/mine/enterpriseInfo') : $utils.toLogin()"
  221. v-if="role || !isLoggedIn">
  222. <image class="image" src="/static/image/center/6.png" mode=""></image>
  223. <text class="grid-text">企业信息</text>
  224. </uv-grid-item>
  225. <uv-grid-item @click="$utils.redirectTo('/index/consult')"
  226. v-if="!role || !isLoggedIn">
  227. <image class="image" src="/static/image/center/6.png" mode=""></image>
  228. <text class="grid-text">考证咨询</text>
  229. </uv-grid-item>
  230. <!-- <uv-grid-item @click="isLoggedIn ? $utils.navigateTo('/pages_order/mine/redeemCode') : $utils.toLogin()">
  231. <image class="image" src="/static/image/center/5.png" mode=""></image>
  232. <text class="grid-text">兑换码</text>
  233. </uv-grid-item> -->
  234. <uv-grid-item @click="isLoggedIn ? $utils.navigateTo('/pages_order/contract/contract') : $utils.toLogin()">
  235. <image class="image" src="/static/image/center/5.png" mode=""></image>
  236. <text class="grid-text">电子合同</text>
  237. </uv-grid-item>
  238. <uv-grid-item @click="isLoggedIn ? $utils.navigateTo('/pages_order/contract/contractManage') : $utils.toLogin()"
  239. v-if="role || !isLoggedIn">
  240. <image class="image" src="/static/image/center/5.png" mode=""></image>
  241. <text class="grid-text">合同模板</text>
  242. </uv-grid-item>
  243. <uv-grid-item @click="isLoggedIn ? $utils.navigateTo('/pages_order/mine/promotion') : $utils.toLogin()">
  244. <image class="image" src="/static/image/center/5.png" mode=""></image>
  245. <text class="grid-text">面对面分享</text>
  246. </uv-grid-item>
  247. </uv-grid>
  248. </view>
  249. <view class="line grid">
  250. <view class="title">
  251. 设置与帮助
  252. </view>
  253. <uv-grid :col="4" :border="false">
  254. <uv-grid-item @click="isLoggedIn ? $utils.navigateTo('/pages_order/mine/setting') : $utils.toLogin()">
  255. <image class="image" src="/static/image/center/setting.png" mode=""></image>
  256. <text class="grid-text">系统设置</text>
  257. </uv-grid-item>
  258. <uv-grid-item @click="isLoggedIn ? $utils.navigateTo('/pages_order/mine/help') : $utils.toLogin()">
  259. <image class="image" src="/static/image/center/help.png" mode=""></image>
  260. <text class="grid-text">帮助与反馈</text>
  261. </uv-grid-item>
  262. <uv-grid-item @click="$utils.navigateTo('/pages_order/mine/about')">
  263. <image class="image" src="/static/image/center/message.png" mode=""></image>
  264. <text class="grid-text">关于本程序</text>
  265. </uv-grid-item>
  266. </uv-grid>
  267. </view>
  268. </view>
  269. <tabber select="3" />
  270. </view>
  271. </template>
  272. <script>
  273. import tabber from '@/components/base/tabbar.vue'
  274. import { mapState } from 'vuex'
  275. export default {
  276. components: {
  277. tabber,
  278. },
  279. computed: {
  280. ...mapState(['userInfo', 'role','banner', 'UserExtensionInfo']),
  281. // 判断是否已登录
  282. isLoggedIn(){
  283. return this.userInfo && this.userInfo.id
  284. },
  285. headImage(){
  286. return this.userInfo.headImage || '/static/image/center/headImage.png'
  287. },
  288. username(){
  289. return this.userInfo.nickName || '未设置昵称'
  290. },
  291. phone(){
  292. return this.userInfo.phone || '未绑定手机'
  293. },
  294. bannerList(){
  295. return this.banner.filter(n => n.type == 1)
  296. },
  297. // 个人实名认证剩余天数
  298. personAuthDaysLeft(){
  299. if(!this.UserExtensionInfo.personAuthenticationValidTime) return null
  300. const validTime = new Date(this.UserExtensionInfo.personAuthenticationValidTime)
  301. const now = new Date()
  302. const diffTime = validTime.getTime() - now.getTime()
  303. const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24))
  304. // 如果已过期,返回特殊标识
  305. if(diffDays <= 0) return 'expired'
  306. // 如果在7天内,返回剩余天数
  307. return diffDays <= 7 ? diffDays : null
  308. },
  309. // 企业认证剩余天数
  310. companyAuthDaysLeft(){
  311. if(!this.UserExtensionInfo.companyAuthenticationValidTime) return null
  312. const validTime = new Date(this.UserExtensionInfo.companyAuthenticationValidTime)
  313. const now = new Date()
  314. const diffTime = validTime.getTime() - now.getTime()
  315. const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24))
  316. // 如果已过期,返回特殊标识
  317. if(diffDays <= 0) return 'expired'
  318. // 如果在7天内,返回剩余天数
  319. return diffDays <= 7 ? diffDays : null
  320. },
  321. },
  322. data() {
  323. return {
  324. show: false,
  325. // bannerList: [
  326. // {
  327. // url: 'https://cdn.uviewui.com/uview/swiper/swiper3.png',
  328. // },
  329. // {
  330. // url: 'https://cdn.uviewui.com/uview/swiper/swiper2.png',
  331. // },
  332. // {
  333. // url: 'https://cdn.uviewui.com/uview/swiper/swiper3.png',
  334. // },
  335. // ],
  336. }
  337. },
  338. onShow() {
  339. if(uni.getStorageSync('token')){
  340. this.$store.commit('getUserExtensionInfo')
  341. this.$store.commit('getUserInfo')
  342. }
  343. this.$store.commit('getBanner')
  344. //判断如果是登录状态则获取信息
  345. },
  346. methods: {
  347. toAddResume(){
  348. // 在完成实名认证的情况下执行
  349. this.$store.commit('isAuthCertification', () => {
  350. this.$utils.navigateTo('/pages_order/work/addResume')
  351. })
  352. },
  353. }
  354. }
  355. </script>
  356. <style scoped lang="scss">
  357. .page {
  358. }
  359. image {
  360. width: 100%;
  361. height: 100%;
  362. }
  363. .head {
  364. display: flex;
  365. background-color: $uni-color;
  366. padding: 40rpx 20rpx;
  367. align-items: center;
  368. position: relative;
  369. color: #fff;
  370. padding-bottom: 70rpx;
  371. .headImage {
  372. width: 120rpx;
  373. height: 120rpx;
  374. // background-image: url(/static/image/center/3.png);
  375. background-size: 100% 100%;
  376. overflow: hidden;
  377. border-radius: 50%;
  378. margin-right: 40rpx;
  379. }
  380. .info {
  381. font-size: 28rpx;
  382. flex: 1;
  383. .name {
  384. font-size: 32rpx;
  385. display: flex;
  386. align-items: center;
  387. padding-bottom: 10rpx;
  388. .auth-icon {
  389. width: 40rpx;
  390. height: 40rpx;
  391. margin-left: 10rpx;
  392. }
  393. view{
  394. display: flex;
  395. font-size: 20rpx;
  396. align-items: center;
  397. padding-left: 20rpx;
  398. }
  399. }
  400. .tips {
  401. font-size: 26rpx;
  402. color: #fff;
  403. }
  404. .auth-warning {
  405. font-size: 24rpx;
  406. color: #FFD700;
  407. background: rgba(255, 215, 0, 0.2);
  408. padding: 8rpx 16rpx;
  409. border-radius: 8rpx;
  410. margin-top: 8rpx;
  411. border: 1rpx solid rgba(255, 215, 0, 0.5);
  412. }
  413. .auth-expired {
  414. font-size: 24rpx;
  415. color: #FF4444;
  416. background: rgba(255, 68, 68, 0.2);
  417. padding: 8rpx 16rpx;
  418. border-radius: 8rpx;
  419. margin-top: 8rpx;
  420. border: 1rpx solid rgba(255, 68, 68, 0.5);
  421. }
  422. }
  423. .loginBtn {
  424. padding: 15rpx 30rpx;
  425. background-color: rgba(255, 255, 255, 0.2);
  426. color: #fff;
  427. border-radius: 30rpx;
  428. font-size: 28rpx;
  429. border: 2rpx solid rgba(255, 255, 255, 0.5);
  430. }
  431. // .headBtn {
  432. // margin-left: auto;
  433. // padding: 15rpx 20rpx;
  434. // background-color: $uni-color;
  435. // color: #fff;
  436. // border-radius: 20rpx;
  437. // margin-top: 50rpx;
  438. // }
  439. // .setting {
  440. // position: absolute;
  441. // right: 50rpx;
  442. // top: 50rpx;
  443. // }
  444. }
  445. .user {
  446. position: relative;
  447. padding-top: 30rpx;
  448. .auth{
  449. width: 690rpx;
  450. position: absolute;
  451. top: -50rpx;
  452. left: 30rpx;
  453. z-index: 99;
  454. overflow: hidden;
  455. background-color: #fff;
  456. border-radius: 20rpx;
  457. /deep/ text{
  458. font-size: 26rpx;
  459. }
  460. }
  461. .swipe{
  462. margin: 30rpx;
  463. border-radius: 20rpx;
  464. overflow: hidden;
  465. }
  466. .line {
  467. display: flex;
  468. background-color: #fff;
  469. margin-top: 20rpx;
  470. padding: 20rpx 0;
  471. margin: 30rpx;
  472. border-radius: 20rpx;
  473. overflow: hidden;
  474. .item {
  475. flex: 1;
  476. display: flex;
  477. flex-direction: column;
  478. justify-content: center;
  479. align-items: center;
  480. font-size: 24rpx;
  481. padding: 10rpx 0;
  482. view{
  483. padding: 5rpx 0;
  484. }
  485. }
  486. }
  487. .login-tip {
  488. justify-content: center;
  489. align-items: center;
  490. padding: 40rpx 20rpx;
  491. .tip-content {
  492. text-align: center;
  493. font-size: 28rpx;
  494. color: #666;
  495. }
  496. .login-tip-btn {
  497. margin-top: 20rpx;
  498. padding: 15rpx 40rpx;
  499. background-color: $uni-color;
  500. color: #fff;
  501. border-radius: 30rpx;
  502. font-size: 26rpx;
  503. border: none;
  504. }
  505. }
  506. .grid {
  507. flex-direction: column;
  508. font-size: 26rpx;
  509. padding: 20rpx;
  510. .title {
  511. margin-bottom: 30rpx;
  512. font-size: 28rpx;
  513. }
  514. .image {
  515. width: 45rpx;
  516. height: 45rpx;
  517. margin-bottom: 10rpx;
  518. }
  519. text {
  520. text-align: center;
  521. margin-bottom: 20rpx;
  522. }
  523. }
  524. }
  525. </style>