解决冲突

This commit is contained in:
zxy
2024-03-09 15:54:58 +08:00
15 changed files with 508 additions and 76 deletions

View File

@@ -38,3 +38,18 @@ export const userrecruitDetail = (workId) => {
} }
}) })
} }
export const getuserrecruitListApp = (params) => {
return request({
url: '/api/jobslink-api/user/userrecruit/listApp',
method: 'get',
params
})
}
export const getuserrecruitDetailApp = (params) => {
return request({
url: '/api/jobslink-api/user/userrecruit/detailApp',
method: 'get',
params
})
}

View File

@@ -1,7 +1,7 @@
<template> <template>
<view class="tabbar_container"> <view class="tabbar_container">
<view class="tabbar_item" v-for="(item, index) in tabbarList" :key="index" @click="changeItem(item)"> <view class="tabbar_item" v-for="(item, index) in tabbarList" :key="index" @click="changeItem(item)">
<view class="item-top" > <view class="item-top">
<image :src="currentItem == item.id ? item.selectedIconPath : item.iconPath" <image :src="currentItem == item.id ? item.selectedIconPath : item.iconPath"
:class="[item.centerItem ? 'center-item-img' : '']"></image> :class="[item.centerItem ? 'center-item-img' : '']"></image>
</view> </view>
@@ -13,10 +13,10 @@
</template> </template>
<script> <script>
let listSrc = require('../../static/img/tabbar/list.png'); let listSrc = require('../../static/img/tabbar/homeactive.png');
let listSrc2 = require('../../static/img/tabbar/avtiveList.png'); let listSrc2 = require('../../static/img/tabbar/home.png');
let newsSrc = require('../../static/img/tabbar/news.png'); let newsSrc = require('../../static/img/tabbar/addactive.png');
let newsSrc2 = require('../../static/img/tabbar/activeNews.png'); let newsSrc2 = require('../../static/img/tabbar/add.png');
let recruitSrc = require('../../static/img/tabbar/recruit.png'); let recruitSrc = require('../../static/img/tabbar/recruit.png');
let recruitSrc2 = require('../../static/img/tabbar/activeRecruit.png'); let recruitSrc2 = require('../../static/img/tabbar/activeRecruit.png');
export default { export default {
@@ -108,12 +108,18 @@
} }
} }
} }
.center-item-img{ .center-item-img{
position: absolute; position: absolute;
top: -58rpx; z-index: -1;
left: calc(50% - 53rpx); top: -68rpx;
left: calc(50% - 53rpx - 16rpx);
width: 106rpx !important; width: 106rpx !important;
height: 106rpx !important; height: 106rpx !important;
background-color: #FFFFFF;
padding: 16rpx;
border-radius: 50%;
} }
.item-active{ .item-active{
color: #4071f8; color: #4071f8;

View File

@@ -22,9 +22,6 @@ function navTo(url, needLogin) {
} }
const msg = (title, duration=1500, mask=false, icon='none')=>{ const msg = (title, duration=1500, mask=false, icon='none')=>{
if(typeof title === 'string'){
return;
}
uni.showToast({ uni.showToast({
title, title,
duration, duration,

View File

@@ -187,7 +187,7 @@ export default {
} }
.head_right { .head_right {
ont-family: PingFangSC-Medium; font-family: PingFangSC-Medium;
font-size: 28rpx; font-size: 28rpx;
color: #F46161; color: #F46161;
font-weight: bold; font-weight: bold;

View File

@@ -8,7 +8,7 @@
任务编码{{info.missionNo}} 任务编码{{info.missionNo}}
</view> --> </view> -->
<view class="prolist"> <view class="prolist">
发布日期{{dateFormat((info.stime))}} 发布日期{{ info.stime ? dateFormat((info.stime)) : null }}
</view> </view>
<view class="prolist"> <view class="prolist">
招聘人数{{info.peopleNum}} 招聘人数{{info.peopleNum}}
@@ -111,7 +111,7 @@
申请 申请
</view> </view>
</view> </view>
<view class="btn" v-if="isShow!=='0'&&status!==0"> <view class="btn" v-if="!jobType && isShow!=='0' && status!==0">
<!-- <view class="bottombtn lookContract" @click="lookMask">查看合同</view> --> <!-- <view class="bottombtn lookContract" @click="lookMask">查看合同</view> -->
<view @click="collect" style="display: flex;align-items: center;margin-right: 10rpx;flex-direction: column;"> <view @click="collect" style="display: flex;align-items: center;margin-right: 10rpx;flex-direction: column;">
<image v-if="collectStatus == 0" src="../../static/img/collect.png" style="width: 36rpx;height: 36rpx;" mode=""></image> <image v-if="collectStatus == 0" src="../../static/img/collect.png" style="width: 36rpx;height: 36rpx;" mode=""></image>
@@ -177,6 +177,7 @@
import {userrecruitDetail} from '@/api/userrecruit.js' import {userrecruitDetail} from '@/api/userrecruit.js'
import uniMask from '@/components/uni-mask/mask.vue' import uniMask from '@/components/uni-mask/mask.vue'
import validCode from '@/components/p-valid-code/p-valid-code.vue' import validCode from '@/components/p-valid-code/p-valid-code.vue'
import {getuserrecruitDetailApp} from '@/api/userrecruit.js'
export default { export default {
data() { data() {
return { return {
@@ -206,6 +207,7 @@
maxlength: 6, maxlength: 6,
collectStatus: 0, // 收藏状态 collectStatus: 0, // 收藏状态
showPopUp: false, showPopUp: false,
jobType: null
} }
}, },
components: {uniMask,validCode}, components: {uniMask,validCode},
@@ -223,6 +225,9 @@
if (option.id) { if (option.id) {
this.id = option.id; //消息id this.id = option.id; //消息id
} }
if(option.jobType) {
this.jobType = option.jobType
}
}, },
onShow: function() { onShow: function() {
this.showDetail = true this.showDetail = true
@@ -260,17 +265,24 @@
this.collectStatus = res.data.data; this.collectStatus = res.data.data;
}) })
}, },
getData: function() { async getData() {
const self = this; const self = this;
userrecruitDetail(self.workId).then(res => { let resData = null
self.info = res.data.data; if(this.jobType) {
self.status = res.data.data.status; resData = await getuserrecruitDetailApp({id: this.id, jobType: this.jobType})
self.missionNo = res.data.data.missionNo; } else {
resData = await userrecruitDetail(self.workId)
}
if(resData.data?.code === 200) {
self.info = resData.data.data;
self.status = resData.data.data.status;
self.missionNo = resData.data.data.missionNo;
self.latitude = self.info.lat; self.latitude = self.info.lat;
self.longitude = self.info.lon; self.longitude = self.info.lon;
self.covers[0].latitude = self.info.lat; self.covers[0].latitude = self.info.lat;
self.covers[0].longitude = self.info.lon; self.covers[0].longitude = self.info.lon;
self.showDetail = true; self.showDetail = true;
if(!this.seeDeatil) {
self.getCollectStatus(); self.getCollectStatus();
if (self.type === 1) { if (self.type === 1) {
// 设置已读 // 设置已读
@@ -278,9 +290,8 @@
self.$store.commit("SET_READ"); self.$store.commit("SET_READ");
}) })
} }
}, error => { }
console.log(error); }
});
}, },
submit: function() { submit: function() {
if (!this.$store.state.user.token) { if (!this.$store.state.user.token) {

View File

@@ -0,0 +1,264 @@
<template>
<view class="body" @click="goInfo(companyitem.id)">
<view class="heads">
<view class="head_left">
<rich-text :nodes="string">
</rich-text>
</view>
<view class="head_right">
{{ companyitem.wage }}{{ wageUnit[companyitem.wageUnitCategory] }}
</view>
</view>
<view class="ask">
<view class="asj_content">
<view class="askList">
{{ companyitem.tradeNames }}
</view>
<view class="askList" v-for="(item, index) in skillNames" :key="index">
{{ item }}
</view>
</view>
<view class="ask_right">
{{getReviewState(companyitem.reviewState)}}
</view>
</view>
<!-- <view class="allName">
{{ companyitem.jobCompanyName }}
</view> -->
<view style="width: 100%;height: 1rpx;background-color: #999;margin: 0 auto;opacity: .5;"></view>
<view class="timeAddress" style="position: relative;">
<!-- <view v-if="companyitem.missionCompanyName">
{{ companyitem.missionCompanyName }}
</view> -->
<!-- <view>
<image src="../../static/img/city.png" style="width: 40rpx;height: 40rpx;" mode=""></image>
{{ companyitem.jobCompanyName }}
</view> -->
<view style="display: flex;align-items: center;">
<image src="../../../static/img/city.png" style="width: 40rpx;height: 40rpx;margin-right: 10rpx;" mode=""></image>
<view style="font-size: 26rpx;color:#333;">{{ companyitem.jobAddress }}</view>
</view>
<!-- <view v-if="near">
{{ companyitem.distanceStr }}km
</view>
<view v-else>
{{ getCity(companyitem.cityId) }}
</view> -->
<view style="display: flex;align-items: center;position:absolute;right:0;">
<image src="../../../static/img/location_new.png" style="width: 30rpx;height: 30rpx;" mode=""></image>
<view>2.2km</view>
</view>
</view>
<view class="comment" v-if='comment' @tap.stop="goComment(companyitem.missionNo)">
<view class="comment_content commentimg" v-if='companyitem.scoreAll > 0'>
<image class="commentimg_image" src="../../../static/img/star.full.svg" v-for="index1 in companyitem.scoreAll"
mode="" :key="index1"></image>
<image class="commentimg_image" src="../../../static/img/star.empty.svg"
v-for="index2 in (5 - companyitem.scoreAll)" mode="" :key="index2"></image>
</view>
<view class="comment_content allName gocomment" v-else>
评价
</view>
</view>
</view>
</template>
<script>
import {
toDoller,
dateFormat
} from "../../../untils/format.js";
import dictionary from '@/common/textdata.js';
export default {
beforeCreate: function () { },
props: {
companyitem: {
type: Object,
default() { return [] }
},
comment: {
type: Boolean,
default: false
},
noApply: {
type: Boolean,
default: true
},
near: {
type: Boolean,
default: false
}
},
data() {
return {
...dictionary,
string: "<div style='overflow: hidden;white-space: nowrap;text-overflow: ellipsis;'>" + this.companyitem.jobName +
"</div>"
};
},
computed: {
skillNames() {
return this.companyitem.skillNames.split(',')
}
},
methods: {
getReviewState(type) {
switch(type) {
case 1:
return '已审核'
case 0:
return '待审核'
case 9:
return '驳回'
}
},
goComment: function (no) {
uni.navigateTo({
url: `../../pageMy/mycomment/mycomment?missionNo=${encodeURIComponent(no)}`
})
},
goInfo: function (no) {
const isCan = this.noApply === false ? '0' : '1'
uni.navigateTo({
url: `/pages/projectInfo/userrecruitInfo?workId=${encodeURIComponent(no)}&isCan=${isCan}&jobType=${this.companyitem.jobType
}&id=${this.companyitem.id}`
})
},
getCity: function (val) {
if (val) {
let areas = this.$store.getters.getAreaParents(val)
if (areas.length === 3) {
return areas[0].label + '-' + areas[1].label + '-' + areas[2].label
}
}
},
toDoller,
dateFormat
}
}
</script>
<style>
.commentimg_image {
width: 40rpx;
height: 40rpx;
}
.commentimg {
display: flex;
align-items: center;
justify-content: flex-end;
}
.gocomment {
font-size: 26rpx !important;
border-radius: 5rpx;
border: 1rpx solid #c3c3c3;
width: 160rpx;
text-align: center;
float: right;
height: 50rpx;
line-height: 50rpx;
}
.timeAddress {
display: flex;
align-items: center;
justify-content: space-between;
font-family: PingFangSC-Regular;
font-size: 24rpx;
color: #999999;
margin: 10rpx 0;
padding: 10rpx 0;
}
.allName {
font-family: PingFangSC-Regular;
font-size: 28rpx;
color: #666666;
}
.askList {
/* width: 14%; */
font-family: PingFangSC-Regular;
font-size: 24rpx;
color: #666666;
background-color: #f6f6f6;
padding: 5rpx 15rpx;
margin-right: 10rpx;
margin-bottom: 10rpx;
}
.ask {
overflow: hidden;
width: 100%;
display: flex;
align-items: center;
flex-wrap: wrap;
justify-content: space-between;
margin: 20rpx 0;
}
.asj_content{
display: flex;
align-items: center;
flex-wrap: wrap;
justify-content: flex-start;
flex: 1;
}
.ask_right{
font-family: PingFangSC-Regular;
font-size: 24rpx;
color: blue;
background-color: #FFFFFF;
border: 2rpx solid blue;
border-radius: 6px;
padding: 5rpx 15rpx;
margin-right: 10rpx;
margin-bottom: 10rpx;
}
.head_right {
font-family: PingFangSC-Medium;
font-size: 28rpx;
color: #F46161;
font-weight: bold;
}
.head_left {
font-family: PingFangSC-Medium;
font-size: 32rpx;
font-weight: bold;
color: #333333;
width: 350rpx;
overflow: hidden;
white-space: nowrap;
/*不换行*/
text-overflow: ellipsis;
/*超出部分文字以...显示*/
}
.highlight {
color: #F46161;
}
.body {
width: 690rpx;
margin: 0rpx auto;
background-color: #fefefe;
overflow: hidden;
box-sizing: border-box;
padding: 20rpx;
padding-bottom: 0;
border-radius: 20rpx;
margin-bottom: 20rpx;
}
.heads {
display: flex;
align-items: center;
justify-content: space-between;
}
</style>

View File

@@ -2,11 +2,11 @@
<view class="container"> <view class="container">
<view class="select">请选择</view> <view class="select">请选择</view>
<view class="select-text">您是个人招工还是企业招工</view> <view class="select-text">您是个人招工还是企业招工</view>
<view class="block" @click="navTo('/pages/recruit/subPage/index')"> <view class="block" @click="navTo('/pages/recruit/subPage/index?type=none')">
<img src="../../static/img/zhao_icon1.png" alt="" /> <img src="../../static/img/zhao_icon1.png" alt="" />
<view class="block-text">个人招工</view> <view class="block-text">个人招工</view>
</view> </view>
<view class="block"> <view class="block" @click="navTo('/pages/recruit/subPage/index?type=enterprise')">
<img src="../../static/img/zhao_icon2.png" alt="" /> <img src="../../static/img/zhao_icon2.png" alt="" />
<view class="block-text" style="background-color: #4171F9;">企业招工</view> <view class="block-text" style="background-color: #4171F9;">企业招工</view>
</view> </view>

View File

@@ -1,38 +1,135 @@
<template> <template>
<view > <view class="app_container">
<CustomNavbar @back="back" :titke="'招工列表'"></CustomNavbar> <CustomNavbar @back="back" :titke="'招工列表'"></CustomNavbar>
<view class="guide"> <view class="guide">
<view class="guide_content" v-for="(item, index) in arr" :key="index"> <view class="guide_content" v-for="(item, index) in arrGuide" :key="index">
<view class="guide_item"> {{item.text}}</view> <view class="guide_item"> {{item}} </view>
<view class="guide_arrow" v-if="index !== arr.length - 1"></view> <view class="guide_arrow" v-if="index !== arrGuide.length - 1"></view>
</view> </view>
</view> </view>
<empty content="暂无数据" mr-top="200"></empty> <view class="condition">
<view class="cond_list" v-if="pageType === 'enterprise'">
<view v-for="(item, index) in arrTitle" :key="index"
:class="['cond_item', index === currentArrTitleID ? 'activeButton' : '']"
@click="changeTab(item)">
{{ item.text }}
</view>
</view>
<view class="cond_list" v-else>
<view style="font-weight: 700;">个人招工</view>
</view>
<view
class="cond_item item_com"
@click="openPicker = true"
>{{ reviewStatus[currentReviewStatusID] }}</view>
</view>
<view class="container" v-if="dataSource.length">
<block v-for="(item, index) in dataSource" :key="item.id">
<userrecruitList :companyitem="item"></userrecruitList>
</block>
</view>
<empty v-else content="暂无数据" mr-top="200"></empty>
<CustomTabbar :currentpage="0"></CustomTabbar> <CustomTabbar :currentpage="0"></CustomTabbar>
<u-picker :show="openPicker" :columns="pickerColumns" @cancel="openPicker = false" @confirm="changeReviewStatus"></u-picker>
</view> </view>
</template> </template>
<script> <script>
import CustomNavbar from '@/components/CustomNavbar/navbar.vue' import CustomNavbar from '@/components/CustomNavbar/navbar.vue';
import CustomTabbar from '@/components/CustomTabbar/custom_tabbar.vue' import CustomTabbar from '@/components/CustomTabbar/custom_tabbar.vue';
let arr = [ import { getuserrecruitListApp } from '@/api/userrecruit.js'
{text: '在线填写招工需求'}, import userrecruitList from '../components/userrecruitList.vue'
{text: '后台审核沟通发布'}, let arrGuide = ['在线填写招工需求', '后台审核沟通发布', '平台/展示招工任务'];
{text: '平台/大屏展示招工任务'}, let arrTitle = [
] {
text: "任务招工",
id: 0
}, {
text: "岗位招工",
id: 1
}, {
text: "个人招工",
id: 2
}
];
let reviewStatus = {
'-1': '全部',
'0': "待审",
'1': "已审",
'9': "驳回",
};
let pickerColumns = [Object.values(reviewStatus)]
export default { export default {
components: {CustomTabbar, CustomNavbar}, components: {CustomTabbar, CustomNavbar, userrecruitList},
data() { data() {
return { return {
arr, pageType: null, // null 个人 enterprise 企业
dataSource: [] arrGuide,
arrTitle,
reviewStatus,
pickerColumns,
openPicker: false,
currentArrTitleID: 2,
currentReviewStatusID: '-1',
pageNumber: 1,
dataSource: [],
} }
}, },
onLoad({type}) {
if(type === 'enterprise'){
this.pageType = 'enterprise'
this.currentArrTitleID = 0
}
this.getList('refresh')
},
onReachBottom() {
this.getList('add')
},
methods: { methods: {
changeReviewStatus({value, index, values}) {
const val = Object.keys(reviewStatus).filter((item) => reviewStatus[item] === value[0])[0]
this.currentReviewStatusID = val
this.openPicker = false
this.getList('refresh')
},
changeTab(item) {
this.currentArrTitleID = item.id
this.getList('refresh')
},
back() { back() {
uni.reLaunch({ uni.reLaunch({ url: '/pages/my/my' })
url: '/pages/my/my' },
}) async getList(type = "add") {
if (type === "refresh") {
this.dataSource = [];
this.pageNumber = 1;
}
let params = {
current: this.pageNumber,
size: 10,
jobType: this.currentArrTitleID,
}
if(this.currentReviewStatusID !== '-1') {
params.reviewState = this.currentReviewStatusID
}
uni.showLoading({title: '加载中...' })
let resData = await getuserrecruitListApp(params);
uni.hideLoading()
if (resData.data?.code === 200) {
const { records, total, page, size } = resData.data.data;
if (!records.length) {
return this.$api.msg("没有更多数据");
}
switch (type) {
case "add":
this.dataSource = [...this.dataSource, ...records];
break;
case "refresh":
this.dataSource = records;
break;
}
this.pageNumber += 1;
}
} }
} }
@@ -40,6 +137,46 @@
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.app_container{
background-color: #f3f4f8;
min-height: calc(100vh - var(--window-top) - var(--status-bar-height) - var(--window-bottom));
.container{
padding: 0 23rpx;
padding-bottom: calc(env(safe-area-inset-bottom) + 123rpx)
}
.condition{
display: flex;
flex-wrap: nowrap;
padding: 20rpx;
justify-content: space-between;
position: sticky;
top: 78rpx;
z-index: 999;
background-color: #f3f4f8;
.cond_list{
display: flex;
flex-wrap: nowrap;
flex: 1;
justify-content: space-between;
}
.cond_item{
font-size: 14px;
padding: 10rpx 40rpx;
background: #fff;
border-radius: 50px;
margin-right: 10rpx;
white-space: nowrap;
}
.activeButton {
color: #4171f9;
background-color: #cfdaf8;
}
.item_com{
margin-right: 0;
padding: 10rpx 20rpx;
}
}
.guide{ .guide{
padding: 20rpx; padding: 20rpx;
display: flex; display: flex;
@@ -65,4 +202,6 @@
} }
} }
}
</style> </style>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 838 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 838 B

View File

@@ -3,10 +3,10 @@ module.exports = {
port: 1887, port: 1887,
proxy: { proxy: {
'/api': { '/api': {
// target: 'http://192.168.3.104:8000', // 本地服务接口地址
// target: "http://39.98.184.58:8000", // 阿里云后台地址
target: 'http://192.168.3.111:8000', // 本地服务接口地址
// target: 'http://192.168.3.108:8000', // 本地服务接口地址 // target: 'http://192.168.3.108:8000', // 本地服务接口地址
target: "http://39.98.184.58:8000", // 阿里云后台地址
// target: "http://192.168.0.101:8000", // 本地网关
// target: 'http://192.168.3.111:8000', // 本地服务接口地址
ws: true, ws: true,
pathRewrite: { pathRewrite: {
'^/api': '/' '^/api': '/'