Browse Source

上传修改

master
前端-胡立永 2 months ago
parent
commit
c01730d6ac
16 changed files with 715 additions and 60 deletions
  1. +28
    -32
      api/api.js
  2. +25
    -0
      api/model/boss.js
  3. +39
    -0
      api/model/login.js
  4. +14
    -0
      api/model/score.js
  5. +1
    -1
      components/base/tabbar.vue
  6. +67
    -0
      components/checkinScore.vue
  7. +3
    -0
      pages.json
  8. +4
    -6
      pages/index/center.vue
  9. +6
    -4
      pages/index/index.vue
  10. +90
    -11
      pages_order/auth/wxUserInfo.vue
  11. +116
    -0
      pages_order/work/addResume - 副本.vue
  12. +5
    -2
      pages_order/work/addResume.vue
  13. +213
    -0
      pages_order/work/bossDetail.vue
  14. +103
    -3
      pages_order/work/workDetail.vue
  15. BIN
      static/image/home/12.png
  16. +1
    -1
      store/store.js

+ 28
- 32
api/api.js View File

@ -3,6 +3,9 @@ import http from './http.js'
let limit = {}
let debounce = {}
const models = ['score', 'boss', 'login']
const config = {
// 示例
// wxLogin : {url : '/api/wxLogin', method : 'POST',
@ -15,38 +18,6 @@ const config = {
/**
* 登录的接口
*/
// 微信登录接口
wxLogin: {
url: '/api/login/login',
method: 'GET',
limit : 500,
showLoading : true,
},
// 修改个人信息接口
updateInfo: {
url: '/info/updateInfo',
method: 'POST',
auth: true,
limit : 500,
showLoading : true,
},
//隐私政策
getPrivacyPolicy: {
url: '/login/getPrivacyPolicy',
method: 'GET',
},
//用户协议
getUserAgreement: {
url: '/login/getUserAgreement',
method: 'GET',
},
/**
* 公共的接口
*/
@ -161,26 +132,31 @@ const config = {
employeeQueryCollectionJobList: {
url: '/api/employee/queryJobCollectionList',
method: 'GET',
auth: true,
},
//我的找活
employeeQueryResumeByUserId: {
url: '/api/employee/queryResumeByUserId',
method: 'GET',
auth: true,
},
//联系记录-我看过谁
employeeQueryWatchWho: {
url: '/api/employee/queryWatchWho',
method: 'GET',
auth: true,
},
//联系记录-谁看过我
employeeQueryWatchMe: {
url: '/api/employee/queryWatchMe',
method: 'GET',
auth: true,
},
//电子合同-获取电子合同列表
employeeQueryContractList: {
url: '/api/employee/queryContractList',
method: 'GET',
auth: true,
},
/**
@ -200,26 +176,31 @@ const config = {
bossQueryContractList: {
url: '/api/boss/queryContractList',
method: 'GET',
auth: true,
},
//我的收藏
bossQueryCollectionJobList: {
url: '/api/boss/queryJobCollectionList',
method: 'GET',
auth: true,
},
//我的招工
bossQueryJobListByUserId: {
url: '/api/boss/queryJobListByUserId',
method: 'GET',
auth: true,
},
//会员中心-联系记录-我看过谁
bossQueryWatchWho: {
url: '/api/boss/queryWatchWho',
method: 'GET',
auth: true,
},
//会员中心-联系记录-谁看过我
bossQueryWatchMe: {
url: '/api/boss/queryWatchMe',
method: 'GET',
auth: true,
},
}
@ -289,5 +270,20 @@ export function api(key, data, callback, loadingTitle) {
}
function addApiModel(model, key){
for(let k in model){
if(config[`${k}`]){
console.error(`重名api------model=${key},key=${k}`);
continue
}
config[`${k}`] = model[k]
// config[`${key}_${k}`] = model[k]
}
}
models.forEach(key => {
addApiModel(require(`./model/${key}.js`).default, key)
})
export default api

+ 25
- 0
api/model/boss.js View File

@ -0,0 +1,25 @@
// 积分相关接口
const api = {
//会员中心-我的收藏(数量统计)
bossQueryCollectionCount: {
url: '/api/boss/queryCollectionCount',
method: 'GET',
auth: true,
},
//会员中心-联系记录-谁看过我(数量统计)
bossQueryWatchMeCount: {
url: '/api/boss/queryWatchMeCount',
method: 'GET',
auth: true,
},
//会员中心-联系记录-我看过谁(数量统计)
bossQueryWatchWhoCount: {
url: '/api/boss/queryWatchWhoCount',
method: 'GET',
auth: true,
},
}
export default api

+ 39
- 0
api/model/login.js View File

@ -0,0 +1,39 @@
// 登录相关接口
const api = {
// 微信登录接口
wxLogin: {
url: '/api/login/login',
method: 'GET',
limit : 500,
showLoading : true,
},
// 修改个人信息接口
updateInfo: {
url: '/info/updateInfo',
method: 'POST',
auth: true,
limit : 500,
showLoading : true,
},
//隐私政策
getPrivacyPolicy: {
url: '/login/getPrivacyPolicy',
method: 'GET',
},
//用户协议
getUserAgreement: {
url: '/login/getUserAgreement',
method: 'GET',
},
// 获取个人信息
getInfo: {
url: '/employ/user/updateUser',
method: 'GET',
auth: true,
},
}
export default api

+ 14
- 0
api/model/score.js View File

@ -0,0 +1,14 @@
// 积分相关接口
const api = {
// 每日签到获取积分
addScoreBySign: {
url: '/employ/score/addScoreBySign',
method: 'POST',
auth : true,
limit : 1500,
},
}
export default api

+ 1
- 1
components/base/tabbar.vue View File

@ -87,7 +87,7 @@
flex-direction: row;
height: 120rpx;
padding-bottom: env(safe-area-inset-bottom);
z-index: 999999;
z-index: 999;
bottom: 0;
left: 0;
color: #BCBCBC;


+ 67
- 0
components/checkinScore.vue View File

@ -0,0 +1,67 @@
<template>
<uv-popup ref="popup" :round="30"
:safeAreaInsetBottom="false"
>
<view class="content">
<view class="title">
签到领积分
</view>
<image src="/static/image/home/12.png" mode="widthFix"
style="width: 100%;"></image>
<view class="uni-color-btn"
@click="checkin">
立即签到
</view>
</view>
</uv-popup>
</template>
<script>
export default {
name:"checkinScore",
data() {
return {
};
},
mounted() {
this.getCheckin()
},
methods : {
getCheckin(){
this.$refs.popup.open()
},
checkin(){
this.$api('addScoreBySign', res => {
if(re.code == 200){
uni.showToast({
title: '签到成功'
})
this.$refs.popup.close()
}
})
},
}
}
</script>
<style scoped lang="scss">
.content{
width: 560rpx;
padding: 40rpx;
.title{
text-align: center;
font-weight: 900;
font-size: 60rpx;
color: $uni-color;
word-spacing: 18px;
}
.uni-color-btn{
padding: 30rpx 0;
border-radius: 20rpx;
}
}
</style>

+ 3
- 0
pages.json View File

@ -139,6 +139,9 @@
},
{
"path": "mine/redeemCode"
},
{
"path": "work/bossDetail"
}
]
}],


+ 4
- 6
pages/index/center.vue View File

@ -189,9 +189,7 @@
<script>
import tabber from '@/components/base/tabbar.vue'
import {
mapState
} from 'vuex'
import { mapState } from 'vuex'
export default {
components: {
tabber,
@ -221,9 +219,11 @@
],
}
},
onShow() {
// this.$store.commit('getUserInfo')
},
methods: {
headBtn() {
let self = this
uni.showModal({
@ -247,8 +247,6 @@
cancle() {
this.show = false
},
}
}
</script>


+ 6
- 4
pages/index/index.vue View File

@ -61,6 +61,8 @@
</view>
</view>
<checkinScore ref="checkinScore"/>
<PrivacyAgreementPoup/>
<tabber select="0"/>
@ -73,16 +75,16 @@
import userList from '@/components/list/userList/index.vue'
import tabber from '@/components/base/tabbar.vue'
import screenWork from '@/components/screen/screenWork.vue'
import {
mapState,
} from 'vuex'
import checkinScore from '@/components/checkinScore.vue'
import { mapState } from 'vuex'
export default {
components : {
PrivacyAgreementPoup,
workList,
tabber,
screenWork,
userList
userList,
checkinScore,
},
computed: {
...mapState([


+ 90
- 11
pages_order/auth/wxUserInfo.vue View File

@ -1,7 +1,10 @@
<template>
<view class="login">
<view class="logo">
<image :src="configList.logo_image" mode=""></image>
</view>
<view class="title">
特易招
{{ configList.logo_name }}
</view>
<view class="title">
申请获取你的头像昵称
@ -13,7 +16,7 @@
头像
</view>
<view class="">
<image :src="userInfo.headImage" v-if="userInfo.headImage" style="width: 60rpx;height: 60rpx;"
<image :src="userInfoForm.headImage" v-if="userInfoForm.headImage" style="width: 60rpx;height: 60rpx;"
mode=""></image>
<image src="../static/auth/headImage.png" v-else style="width: 50rpx;height: 50rpx;" mode=""></image>
@ -26,9 +29,34 @@
</view>
<view class="">
<input type="nickname" placeholder="请输入昵称" style="text-align: right;" id="nickName"
v-model="userInfo.nickName" />
v-model="userInfoForm.nickName" />
</view>
</view>
<view class="line">
<view class="">
手机号
</view>
<view class=""
v-if="userInfoForm.phone">
<input placeholder="请输入手机号" style="text-align: right;"
disabled
v-model="userInfoForm.phone" />
</view>
<view class=""
v-else>
<button
class="getPhoneNumber"
open-type="getPhoneNumber"
@getphonenumber="getPhone">
获取电话号码
</button>
</view>
</view>
<view class="btn" @click="submit">
确认
</view>
@ -39,21 +67,44 @@
export default {
data() {
return {
userInfo: {
userInfoForm: {
headImage: '',
nickName: '',
phone : '',
}
};
},
onShow() {},
onLoad() {
this.userInfoForm.phone = this.userInfo.phone || ''
this.userInfoForm.nickName = this.userInfo.nickName || ''
this.userInfoForm.headImage = this.userInfo.headImage || ''
},
computed: {},
methods: {
onChooseAvatar(res) {
let self = this
self.$Oss.ossUpload(res.target.avatarUrl)
.then(url => {
self.userInfo.headImage = url
})
.then(url => {
self.userInfoForm.headImage = url
})
},
getPhone(e){
this.$api('bindPhone', {
phoneCode : e.detail.code
}, res => {
if(res.code == 200){
let phoneObj = JSON.parse(res.result)
if(phoneObj.errmsg == 'ok'){
this.userInfoForm.phone = phoneObj.phone_info.phoneNumber
}else{
uni.showModal({
title: phoneObj.errmsg
})
}
console.log(phoneObj);
}
})
},
submit() {
let self = this
@ -65,18 +116,23 @@
})
.exec((res) => {
const nickName = res?.[0]?.value
self.userInfo.nickName = nickName
self.userInfoForm.nickName = nickName
if (self.$utils.verificationAll(self.userInfo, {
if (self.$utils.verificationAll(self.userInfoForm, {
headImage: '请选择头像',
nickName: '请填写昵称',
phone: '请填写昵称',
})) {
return
}
self.$api('infoUpdateInfo', self.userInfo, res => {
self.$api('updateInfo', {
avatarUrl : self.userInfoForm.headImage,
nickName : self.userInfoForm.nickName,
phone : self.userInfoForm.phone,
}, res => {
if (res.code == 200) {
uni.switchTab({
uni.reLaunch({
url:'/pages/index/index'
})
}
@ -95,6 +151,16 @@
justify-content: center;
align-items: center;
height: 80vh;
.logo{
height: 140rpx;
width: 140rpx;
image{
height: 140rpx;
width: 140rpx;
border-radius: 30rpx;
}
margin-bottom: 20rpx;
}
.title {
line-height: 45rpx;
@ -129,5 +195,18 @@
border-radius: 15rpx;
margin-top: 10vh;
}
.getPhoneNumber{
all: unset;
display: flex;
justify-content: center;
align-items: center;
// background: $uni-linear-gradient-btn-color;
background: $uni-color;
color: #fff;
width: 200rpx;
height: 60rpx;
border-radius: 30rpx;
font-size: 24rpx;
}
}
</style>

+ 116
- 0
pages_order/work/addResume - 副本.vue View File

@ -0,0 +1,116 @@
<template>
<view class="page">
<navbar title="发布找活"
leftClick
@leftClick="$utils.navigateBack"/>
<view class="box">
<view class="list">
<view class="item" v-for="(item, index) in list" :key="index">
<view class="title">
{{ item.title }}
</view>
<view class="tagList">
<view :class="{act : i == item.index}" @click="clickTag(item, i)" v-for="(t, i) in item.tag"
:key="t">
{{ t }}
</view>
</view>
</view>
</view>
<uv-textarea
v-model="form.content"
count
:maxlength="300"
autoHeight
placeholder="请输入详细介绍"></uv-textarea>
<view class="uni-color-btn">
发布
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
list: [
{
title: '您希望从事的工种',
tag: ['电工', '焊工', '叉车', '其他'],
index: 0,
},
{
title: '您希望从事的工作区域',
tag: ['长沙'],
index: 0,
},
{
title: '您目前所属的年龄段',
tag: ['18岁~35岁', '35岁~45岁', '45岁~50岁', '50岁以上'],
index: 0,
},
{
title: '您希望从事的工作性质',
tag: ['全职', '临时工', ],
index: 0,
},
],
form : {}
}
},
methods: {
}
}
</script>
<style scoped lang="scss">
.page{
background-color: #fff;
min-height: 100vh;
.box{
padding: 30rpx;
.list {
.item {
margin-top: 20rpx;
.title {
font-weight: 900;
font-size: 30rpx;
}
.tagList {
display: flex;
flex-wrap: wrap;
padding: 10rpx 0;
view {
background: rgba($uni-color, 0.1);
padding: 10rpx 20rpx;
margin: 10rpx;
border-radius: 10rpx;
font-size: 26rpx;
}
.act {
color: #fff;
background: $uni-color;
}
}
}
}
/deep/ .uv-textarea{
background-color: rgba($uni-color, 0.1) !important;
min-height: 400rpx;
}
}
}
</style>

+ 5
- 2
pages_order/work/addResume.vue View File

@ -7,12 +7,15 @@
<view class="box">
<view class="list">
<view class="item" v-for="(item, index) in list" :key="index">
<view class="item"
v-for="(item, index) in list"
:key="index">
<view class="title">
{{ item.title }}
</view>
<view class="tagList">
<view :class="{act : i == item.index}" @click="clickTag(item, i)" v-for="(t, i) in item.tag"
<view :class="{act : i == item.index}"
@click="clickTag(item, i)" v-for="(t, i) in item.tag"
:key="t">
{{ t }}
</view>


+ 213
- 0
pages_order/work/bossDetail.vue View File

@ -0,0 +1,213 @@
<template>
<view class="page">
<image src="/static/image/home/banner.png" mode="aspectFill"
class="bgImage"></image>
<view class="box">
<view class="boss-box">
<image src="/static/image/center/headImage.png"
class="headImage"
mode="aspectFill"></image>
<view class="info">
<view class="title">
李先生<text></text>
</view>
<view class="desc">
广州有限公司 · 老板
<view class="vip">
vip
</view>
</view>
</view>
</view>
<view class="firm">
<view class="title">
任职企业
</view>
<view class="firm-info">
<image src="/static/image/center/headImage.png"
class="image"
mode="aspectFill"></image>
<view class="info">
<view class="name">
广州有限公司
</view>
<view class="desc">
0-20
</view>
</view>
</view>
<view class="album">
<uv-album :urls="urls"></uv-album>
</view>
</view>
<view class="list-work">
<view class="text">
发布职位<text>19</text>
</view>
<view style="margin: 20rpx;"
@click="$utils.navigateTo('/pages_order/work/userDetail?id=' + item.id)"
:key="index"
v-for="(item, index) in list">
<workItem :item="item"/>
</view>
</view>
</view>
</view>
</template>
<script>
import userHead from '../components/user/userHead.vue'
import mixinList from '@/mixins/list.js'
import workItem from '@/components/list/workList/workItem.vue'
export default {
mixins : [mixinList],
components : {
userHead,
workItem,
},
data() {
return {
id : 0,
detail : {},
collectionFlag : false,
mixinsListApi : 'employeeQueryJobList',
urls: ['https://via.placeholder.com/400x200.png/3c9cff/fff'],
}
},
onLoad({id}) {
this.id = id
},
onShow() {
// this.getDetail()
},
methods: {
getDetail(){
let data = {
jobId : this.id
}
if(uni.getStorageSync('token')){
data.token = uni.getStorageSync('token')
}
this.$api('employeeQueryJobById', data, res => {
if(res.code == 200){
this.detail = res.result.employJob
this.collectionFlag = res.result.collectionFlag
}
})
},
}
}
</script>
<style scoped lang="scss">
.page{
min-height: 100vh;
.bgImage{
width: 100%;
height: 500rpx;
}
.box{
margin-top: -100rpx;
.boss-box{
background-color: #fff;
margin: 20rpx;
border-radius: 20rpx;
padding: 20rpx;
position: relative;
box-shadow: 0 0 10rpx 10rpx #00000009;
padding-top: 140rpx;
.headImage{
border-radius: 50%;
width: 150rpx;
height: 150rpx;
position: absolute;
top: -50rpx;
left: 30rpx;
}
.info{
padding: 0 20rpx;
line-height: 46rpx;
.title{
font-weight: 900;
font-size: 32rpx;
}
.desc{
display: flex;
align-items: center;
font-size: 24rpx;
.vip{
padding: 4rpx 20rpx;
border-radius: 20rpx;
border: 1rpx solid #EF7834;
color: #EF7834;
margin-left: 30rpx;
}
}
}
}
.firm{
background-color: #fff;
margin: 20rpx;
border-radius: 20rpx;
padding: 20rpx;
position: relative;
box-shadow: 0 0 10rpx 10rpx #00000009;
.title{
font-size: 32rpx;
font-weight: 900;
padding: 20rpx;
}
.firm-info{
display: flex;
.image{
width: 140rpx;
height: 140rpx;
border-radius: 20rpx;
}
.info{
display: flex;
flex-direction: column;
justify-content: space-around;
margin-left: 30rpx;
font-size: 26rpx;
.name{
font-weight: 900;
}
.desc{
}
}
}
.album{
padding: 20rpx 0;
}
}
.list-work{
.text{
background-color: #fff;
padding: 26rpx;
font-weight: 900;
text{
font-weight: 500;
color: #666666;
font-size: 26rpx;
margin-left: 20rpx;
}
}
}
}
}
</style>

+ 103
- 3
pages_order/work/workDetail.vue View File

@ -92,6 +92,44 @@
</view>
</view>
<view class="boss-box"
@click="$utils.navigateTo('/pages_order/work/bossDetail?id=1')">
<view class="image">
<image src="../static/work/g.png" mode=""></image>
</view>
<view class="shop-box"
>
<view class="title">
广州有限公司
</view>
<view class="desc">
天使论A
</view>
</view>
<view class="arrow-right">
<uv-icon
name="arrow-right"
size="40rpx"
color="#5baaff"
></uv-icon>
</view>
</view>
<view class="list-work">
<view class="text">
推荐职位<text>19</text>
</view>
<view style="margin: 20rpx;"
@click="$utils.navigateTo('/pages_order/work/userDetail?id=' + item.id)"
:key="index"
v-for="(item, index) in list">
<workItem :item="item"/>
</view>
</view>
</view>
</template>
@ -104,9 +142,13 @@
5精通 PSAICDR 等平面设计软件能独立完成日常平面设计工作内容熟练使用 PPT/Keynote能完成提案内容的材料美化工作
`
import userHead from '../components/user/userHead.vue'
import mixinList from '@/mixins/list.js'
import workItem from '@/components/list/workList/workItem.vue'
export default {
mixins : [mixinList],
components : {
userHead,
workItem,
},
data() {
return {
@ -114,6 +156,7 @@
id : 0,
detail : {},
collectionFlag : false,
mixinsListApi : 'employeeQueryJobList',
}
},
onLoad({id}) {
@ -121,10 +164,10 @@
},
onShow() {
this.text = this.$utils.stringFormatHtml(text)
this.getData()
this.getDetail()
},
methods: {
getData(){
getDetail(){
let data = {
jobId : this.id
}
@ -144,10 +187,10 @@
<style scoped lang="scss">
.page{
background-color: #fff;
min-height: 100vh;
.box{
padding: 30rpx;
background-color: #fff;
.title{
font-size: 34rpx;
font-weight: 900;
@ -207,5 +250,62 @@
}
}
}
.boss-box{
margin: 10rpx 0;
padding: 30rpx;
background-color: #fff;
display: flex;
align-items: center;
.image{
width: 90rpx;
height: 90rpx;
margin-right: 10rpx;
flex-shrink: 0;
image{
width: 100%;
height: 100%;
border-radius: 10rpx;
}
}
.shop-box{
flex: 1;
width: calc(100% - 220rpx);
.title{
font-size: 28rpx;
overflow:hidden; //
text-overflow:ellipsis; //
white-space:nowrap; //
}
.desc{
margin-top: 10rpx;
font-size: 24rpx;
overflow:hidden; //
text-overflow:ellipsis; //
white-space:nowrap; //
}
}
.arrow-right{
flex-shrink: 0;
margin-left: auto;
display: flex;
align-items: center;
font-size: 26rpx;
}
}
.list-work{
.text{
background-color: #fff;
padding: 26rpx;
font-weight: 900;
text{
font-weight: 500;
color: #666666;
font-size: 26rpx;
margin-left: 20rpx;
}
}
}
}
</style>

BIN
static/image/home/12.png View File

Before After
Width: 518  |  Height: 518  |  Size: 105 KiB

+ 1
- 1
store/store.js View File

@ -72,7 +72,7 @@ const store = new Vuex.Store({
})
},
getUserInfo(state){
api('infoGetInfo', res => {
api('getInfo', res => {
if(res.code == 200){
state.userInfo = res.result
}


Loading…
Cancel
Save