Browse Source

feat: 添加客服浮动按钮并优化多个功能模块

1. 新增客服浮动按钮组件(kefu.vue),支持点击呼叫客服功能
2. 优化认证页面:
   - 添加授权书上传功能
   - 修复图片上传逻辑,支持多文件列表处理
3. 改进合同模块:
   - 调整签署按钮样式
   - 增加查看合同前的确认弹窗
4. 招工发布功能增强:
   - 添加截止日期选择
   - 增加表单验证逻辑
5. 工作列表项优化:
   - 添加过期状态显示和交互限制
6. 个人中心改进:
   - 完善未登录状态UI
   - 优化登录状态检测逻辑
master
前端-胡立永 3 months ago
parent
commit
d87bb9f55e
9 changed files with 458 additions and 79 deletions
  1. +85
    -0
      components/base/kefu.vue
  2. +81
    -1
      components/list/workList/workItem.vue
  3. +2
    -0
      main.js
  4. +136
    -59
      pages/index/center.vue
  5. +2
    -0
      pages/index/index.vue
  6. +30
    -4
      pages_order/auth/certification.vue
  7. +29
    -2
      pages_order/auth/certificationEnterprise.vue
  8. +42
    -12
      pages_order/contract/contract.vue
  9. +51
    -1
      pages_order/work/jobPosting.vue

+ 85
- 0
components/base/kefu.vue View File

@ -0,0 +1,85 @@
<template>
<view class="float-button">
<!-- <button type="default" open-type="contact" class="kf-btn">
<img src="../../static/images/details/kefu.svg" style="width: 26px;height: 36px;" alt="kefu"
srcset="">
</button> -->
<button @click="call" class="kf-btn">
<uv-icon
name="server-fill"
size="60rpx"
color="#fff"
></uv-icon>
</button>
</view>
</template>
<script>
export default {
data() {
return {
};
},
methods: {
call(){
uni.showModal({
title: `确定呼叫客服吗?`,
success : (r) => {
if(r.confirm){
uni.makePhoneCall({
phoneNumber: this.configList.config_service_phone
})
}
}
})
},
// openCustomerService() {
// uni.openCustomerServiceChat({
// //id
// corpId: 'wwccd9a21f09fed62d',
// extInfo: {
// //
// url: 'https://work.weixin.qq.com/kfid/kfc09f128696578f66d'
// },
// success: (e) => {
// console.log('e', e)
// },
// fail: (err) => {
// console.log('err', err)
// }
// })
// }
}
}
</script>
<style lang="scss">
.float-button {
position: fixed;
bottom: 40vh;
/* 距离底部的距离 */
right: 20px;
/* 距离右侧的距离 */
width: 52px;
/* 按钮的宽度 */
height: 52px;
z-index: 9999;
display: flex;
justify-content: center;
align-items: center;
/* 按钮的高度 */
/* 其他样式 */
.kf-btn {
background-color: $uni-color;
box-shadow: 0 0 10rpx 10rpx rgba($uni-color, 0.3);
height: 52px;
width: 52px;
border-radius: 50%;
display: flex;
justify-content: center;
align-items: center;
}
}
</style>

+ 81
- 1
components/list/workList/workItem.vue View File

@ -1,6 +1,7 @@
<template>
<view class="work-item"
@click="$emit('click')">
:class="{ 'expired': isExpired }"
@click="handledClick">
<view class="top">
<view class="title">
{{ item.title }}
@ -22,6 +23,12 @@
v-if="item.salaryUp">-{{ item.salaryUp }}</text>
</view>
</view>
<!-- 过期状态显示 -->
<view class="expired-status" v-if="isExpired">
<text class="expired-text">招聘已截止</text>
</view>
<view class="tag-list">
<view
v-for="(t, i) in lableText"
@ -39,6 +46,7 @@
{{ $dayjs(item.createTime).format('YYYY-MM-DD') }}
</view>
<view class="phone"
:class="{ 'disabled': isExpired }"
@click.stop="callPhone">
<image src="/static/image/home/phone.png" mode=""></image>
联系老板
@ -70,6 +78,15 @@
return arr
},
//
isExpired(){
if(!this.item.deadline) return false
const now = this.$dayjs()
const deadline = this.$dayjs(this.item.deadline)
return now.isAfter(deadline)
}
},
data() {
return {
@ -78,6 +95,15 @@
},
methods: {
callPhone(){
//
if(this.isExpired) {
uni.showToast({
title: '招聘已截止',
icon: 'none'
})
return
}
uni.makePhoneCall({
phoneNumber: this.item.phone,
success() {
@ -88,6 +114,18 @@
}
})
},
handledClick(){
//
if(this.isExpired) {
uni.showToast({
title: '招聘已截止,无法查看详情',
icon: 'none'
})
return
}
this.$emit('click')
},
}
}
</script>
@ -97,6 +135,22 @@
background-color: #fff;
padding: 20rpx;
border-radius: 20rpx;
position: relative;
//
&.expired {
opacity: 0.6;
background-color: #f5f5f5;
.title {
color: #999;
}
.price {
color: #999 !important;
}
}
.top{
display: flex;
justify-content: space-between;
@ -107,6 +161,25 @@
color: $uni-color;
}
}
//
.expired-status {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
z-index: 10;
.expired-text {
background-color: rgba(0, 0, 0, 0.8);
color: #fff;
padding: 16rpx 32rpx;
border-radius: 20rpx;
font-size: 28rpx;
font-weight: 600;
}
}
.bottom{
display: flex;
justify-content: space-between;
@ -127,6 +200,13 @@
width: 20rpx;
height: 20rpx;
}
//
&.disabled {
background-color: #f0f0f0;
color: #999;
opacity: 0.6;
}
}
}
}


+ 2
- 0
main.js View File

@ -23,10 +23,12 @@ Vue.mixin(mixinConfigList)
import configPopup from '@/components/config/configPopup.vue'
import navbar from '@/components/base/navbar.vue'
import customerServicePopup from '@/components/config/customerServicePopup.vue'
import kefu from '@/components/base/kefu.vue'
Vue.component('configPopup',configPopup)
Vue.component('navbar',navbar)
Vue.component('customerServicePopup',customerServicePopup)
Vue.component('kefu', kefu)
const app = new Vue({
...App,


+ 136
- 59
pages/index/center.vue View File

@ -4,25 +4,46 @@
<navbar bgColor="#3796F8"/>
<view class="head">
<view class="headImage">
<image :src="headImage" mode=""></image>
</view>
<view class="info">
<view class="name"
@click="$utils.navigateTo('/pages_order/mine/updateUser?back=true')">
{{username}}
<view>
<uv-icon name="edit-pen" size="40rpx" color="#fff"></uv-icon>
修改资料
<!-- 未登录状态 -->
<template v-if="!isLoggedIn">
<view class="headImage">
<image src="/static/image/center/headImage.png" mode=""></image>
</view>
<view class="info">
<view class="name">
未登录用户
</view>
<view class="tips">
请先登录以查看个人信息
</view>
</view>
<view class="tips">
手机号{{phone}}
<view class="loginBtn" @click="$utils.toLogin()">
登录
</view>
<view>
{{ UserExtensionInfo.vipType || '' }}
</template>
<!-- 已登录状态 -->
<template v-else>
<view class="headImage">
<image :src="headImage" mode=""></image>
</view>
</view>
<view class="info">
<view class="name"
@click="$utils.navigateTo('/pages_order/mine/updateUser?back=true')">
{{username}}
<view>
<uv-icon name="edit-pen" size="40rpx" color="#fff"></uv-icon>
修改资料
</view>
</view>
<view class="tips">
手机号{{phone}}
</view>
<view>
{{ UserExtensionInfo.vipType || '' }}
</view>
</view>
</template>
<!-- <view class="setting">
<uv-icon name="setting" size="40rpx"></uv-icon>
@ -32,24 +53,26 @@
<!-- 酒店 -->
<view class="user">
<!-- 实名认证 -->
<view class="auth" v-if="UserExtensionInfo.personAuthenticationStatus != '1'"
@click="$utils.navigateTo('/pages_order/auth/certification')">
<uv-cell
icon="setting-fill"
title="完成实名认证,信息优先推荐!"
value="去认证"
isLink></uv-cell>
</view>
<view class="auth" v-else
@click="$utils.navigateTo('/pages_order/auth/certification')">
<uv-cell
icon="setting-fill"
title="您已完成实名认证!"
value="去查看"
isLink></uv-cell>
</view>
<!-- 实名认证 - 仅登录后显示 -->
<template v-if="isLoggedIn">
<view class="auth" v-if="UserExtensionInfo.personAuthenticationStatus != '1'"
@click="$utils.navigateTo('/pages_order/auth/certification')">
<uv-cell
icon="setting-fill"
title="完成实名认证,信息优先推荐!"
value="去认证"
isLink></uv-cell>
</view>
<view class="auth" v-else
@click="$utils.navigateTo('/pages_order/auth/certification')">
<uv-cell
icon="setting-fill"
title="您已完成实名认证!"
value="去查看"
isLink></uv-cell>
</view>
</template>
<!-- 轮播图 -->
@ -62,7 +85,8 @@
</view>
<view class="line">
<!-- 数据统计 - 仅登录后显示 -->
<view class="line" v-if="isLoggedIn">
<view class="item"
@click="$utils.navigateTo('/pages_order/mine/InvitationCredit')">
<view class="">
@ -117,26 +141,41 @@
</view>
</view>
<!-- 未登录提示 -->
<view class="line login-tip" v-if="!isLoggedIn">
<view class="tip-content">
<text>登录后可查看个人数据</text>
<button class="login-tip-btn" @click="$utils.toLogin()">立即登录</button>
</view>
</view>
<view class="line grid">
<view class="title">
我的工作
</view>
<uv-grid :col="4" :border="false">
<uv-grid-item
v-if="!role"
v-if="!role && isLoggedIn"
@click="toAddResume">
<image class="image" src="/static/image/center/a1.png" mode=""></image>
<text class="grid-text">在线简历</text>
</uv-grid-item>
<uv-grid-item
v-if="role"
v-if="role && isLoggedIn"
@click="$utils.navigateTo('/pages_order/mine/releaseWork')">
<image class="image" src="/static/image/center/a1.png" mode=""></image>
<text class="grid-text">{{ role ? '我的招工' : '我的找活'}}</text>
</uv-grid-item>
<uv-grid-item
v-if="!isLoggedIn"
@click="$utils.toLogin()">
<image class="image" src="/static/image/center/a1.png" mode=""></image>
<text class="grid-text">在线简历</text>
</uv-grid-item>
<uv-grid-item @click="$utils.navigateTo('/pages_order/mine/seeMy')">
<uv-grid-item @click="isLoggedIn ? $utils.navigateTo('/pages_order/mine/seeMy') : $utils.toLogin()">
<image class="image" src="/static/image/center/a2.png" mode=""></image>
<text class="grid-text">谁看过我</text>
</uv-grid-item>
@ -148,62 +187,62 @@
我的服务
</view>
<uv-grid :col="4" :border="false">
<uv-grid-item @click="$utils.navigateTo('/pages_order/mine/MemberRecharge')">
<uv-grid-item @click="isLoggedIn ? $utils.navigateTo('/pages_order/mine/MemberRecharge') : $utils.toLogin()">
<image class="image" src="/static/image/center/1.png" mode=""></image>
<text class="grid-text">会员充值</text>
</uv-grid-item>
<uv-grid-item @click="$utils.navigateTo('/pages_order/mine/GainPoints')">
<uv-grid-item @click="isLoggedIn ? $utils.navigateTo('/pages_order/mine/GainPoints') : $utils.toLogin()">
<image class="image" src="/static/image/center/4.png" mode=""></image>
<text class="grid-text">获取积分</text>
</uv-grid-item>
<uv-grid-item @click="$utils.navigateTo('/pages_order/mine/IntegralRecord')">
<uv-grid-item @click="isLoggedIn ? $utils.navigateTo('/pages_order/mine/IntegralRecord') : $utils.toLogin()">
<image class="image" src="/static/image/center/5.png" mode=""></image>
<text class="grid-text">积分记录</text>
</uv-grid-item>
<uv-grid-item @click="$utils.navigateTo('/pages_order/auth/certificationEnterprise')"
v-if="role">
<uv-grid-item @click="isLoggedIn ? $utils.navigateTo('/pages_order/auth/certificationEnterprise') : $utils.toLogin()"
v-if="role || !isLoggedIn">
<image class="image" src="/static/image/center/6.png" mode=""></image>
<text class="grid-text">企业认证</text>
</uv-grid-item>
<uv-grid-item @click="$utils.navigateTo('/pages_order/auth/certification')"
v-else>
<uv-grid-item @click="isLoggedIn ? $utils.navigateTo('/pages_order/auth/certification') : $utils.toLogin()"
v-if="!role || !isLoggedIn">
<image class="image" src="/static/image/center/6.png" mode=""></image>
<text class="grid-text">实名认证</text>
</uv-grid-item>
<uv-grid-item @click="$utils.navigateTo('/pages_order/mine/enterpriseInfo')"
v-if="role">
<uv-grid-item @click="isLoggedIn ? $utils.navigateTo('/pages_order/mine/enterpriseInfo') : $utils.toLogin()"
v-if="role || !isLoggedIn">
<image class="image" src="/static/image/center/6.png" mode=""></image>
<text class="grid-text">企业信息</text>
</uv-grid-item>
<uv-grid-item @click="$utils.redirectTo('/index/consult')"
v-else>
v-if="!role || !isLoggedIn">
<image class="image" src="/static/image/center/6.png" mode=""></image>
<text class="grid-text">考证咨询</text>
</uv-grid-item>
<uv-grid-item @click="$utils.navigateTo('/pages_order/mine/redeemCode')">
<uv-grid-item @click="isLoggedIn ? $utils.navigateTo('/pages_order/mine/redeemCode') : $utils.toLogin()">
<image class="image" src="/static/image/center/5.png" mode=""></image>
<text class="grid-text">兑换码</text>
</uv-grid-item>
<uv-grid-item @click="$utils.navigateTo('/pages_order/contract/contract')">
<uv-grid-item @click="isLoggedIn ? $utils.navigateTo('/pages_order/contract/contract') : $utils.toLogin()">
<image class="image" src="/static/image/center/5.png" mode=""></image>
<text class="grid-text">电子合同</text>
</uv-grid-item>
<uv-grid-item @click="$utils.navigateTo('/pages_order/contract/contractManage')"
v-if="role">
<uv-grid-item @click="isLoggedIn ? $utils.navigateTo('/pages_order/contract/contractManage') : $utils.toLogin()"
v-if="role || !isLoggedIn">
<image class="image" src="/static/image/center/5.png" mode=""></image>
<text class="grid-text">合同模板</text>
</uv-grid-item>
<uv-grid-item @click="$utils.navigateTo('/pages_order/mine/promotion')">
<uv-grid-item @click="isLoggedIn ? $utils.navigateTo('/pages_order/mine/promotion') : $utils.toLogin()">
<image class="image" src="/static/image/center/5.png" mode=""></image>
<text class="grid-text">面对面分享</text>
</uv-grid-item>
@ -214,12 +253,12 @@
设置与帮助
</view>
<uv-grid :col="4" :border="false">
<uv-grid-item @click="$utils.navigateTo('/pages_order/mine/setting')">
<uv-grid-item @click="isLoggedIn ? $utils.navigateTo('/pages_order/mine/setting') : $utils.toLogin()">
<image class="image" src="/static/image/center/setting.png" mode=""></image>
<text class="grid-text">系统设置</text>
</uv-grid-item>
<uv-grid-item @click="$utils.navigateTo('/pages_order/mine/help')">
<uv-grid-item @click="isLoggedIn ? $utils.navigateTo('/pages_order/mine/help') : $utils.toLogin()">
<image class="image" src="/static/image/center/help.png" mode=""></image>
<text class="grid-text">帮助与反馈</text>
</uv-grid-item>
@ -247,14 +286,18 @@
},
computed: {
...mapState(['userInfo', 'role','banner', 'UserExtensionInfo']),
//
isLoggedIn(){
return this.userInfo && this.userInfo.id
},
headImage(){
return this.userInfo.headImage
return this.userInfo.headImage || '/static/image/center/headImage.png'
},
username(){
return this.userInfo.nickName
return this.userInfo.nickName || '未设置昵称'
},
phone(){
return this.userInfo.phone
return this.userInfo.phone || '未绑定手机'
},
bannerList(){
return this.banner.filter(n => n.type == 1)
@ -277,10 +320,12 @@
}
},
onShow() {
this.$store.commit('getUserInfo')
if(uni.getStorageSync('token')){
this.$store.commit('getUserExtensionInfo')
this.$store.commit('getUserInfo')
}
this.$store.commit('getBanner')
//
this.$store.commit('getUserExtensionInfo')
},
methods: {
toAddResume(){
@ -322,6 +367,7 @@
.info {
font-size: 28rpx;
flex: 1;
.name {
font-size: 32rpx;
display: flex;
@ -340,6 +386,15 @@
}
}
.loginBtn {
padding: 15rpx 30rpx;
background-color: rgba(255, 255, 255, 0.2);
color: #fff;
border-radius: 30rpx;
font-size: 28rpx;
border: 2rpx solid rgba(255, 255, 255, 0.5);
}
// .headBtn {
// margin-left: auto;
// padding: 15rpx 20rpx;
@ -402,6 +457,28 @@
}
}
.login-tip {
justify-content: center;
align-items: center;
padding: 40rpx 20rpx;
.tip-content {
text-align: center;
font-size: 28rpx;
color: #666;
}
.login-tip-btn {
margin-top: 20rpx;
padding: 15rpx 40rpx;
background-color: $uni-color;
color: #fff;
border-radius: 30rpx;
font-size: 26rpx;
border: none;
}
}
.grid {
flex-direction: column;
font-size: 26rpx;


+ 2
- 0
pages/index/index.vue View File

@ -85,6 +85,8 @@
<PrivacyAgreementPoup/>
<kefu></kefu>
<tabber select="0"/>
</view>
</template>


+ 30
- 4
pages_order/auth/certification.vue View File

@ -59,6 +59,7 @@
width="690rpx"
height="280rpx"
multiple
name="fileList"
@afterRead="afterRead"
@delete="deleteImage">
<view class="upload">
@ -77,6 +78,25 @@
(确保文字清晰可辨避免遮挡不全反光)
</view>
</view>
<view class="form-item">
<view class="title">
授权书选填
</view>
</view>
<view class="form-item">
<uv-upload
:fileList="authFileList"
:maxCount="1"
width="280rpx"
height="280rpx"
multiple
name="authFileList"
@afterRead="afterRead"
@delete="deleteImage">
</uv-upload>
</view>
</view>
@ -126,6 +146,7 @@
checkboxValue : [],
form : {},
fileList: [],
authFileList : [],
sub:0
}
},
@ -147,18 +168,23 @@
url
}
}) : []
this.authFileList = this.form.authorizationBook ? this.form.authorizationBook.split(',').map(url => {
return {
url
}
}) : []
}
})
},
deleteImage(e){
this.fileList.splice(e.index, 1)
this[e.name].splice(e.index, 1)
},
afterRead(e){
let self = this
e.file.forEach(file => {
self.$Oss.ossUpload(file.url).then(url => {
console.log(url);
self.fileList.push({
self[e.name].push({
url
})
})
@ -177,7 +203,7 @@
name:'请输入姓名',
cerNo:'请输入身份证号码',
phone:'请输入电话号码',
image:'身份证照片不能为空',
// image:'',
})) {
return
}


+ 29
- 2
pages_order/auth/certificationEnterprise.vue View File

@ -79,6 +79,7 @@
width="690rpx"
height="280rpx"
multiple
name="fileList"
@afterRead="afterRead"
@delete="deleteImage">
<view class="upload">
@ -97,6 +98,25 @@
(确保文字清晰可辨避免遮挡不全反光)
</view>
</view>
<view class="form-item">
<view class="title">
授权书选填
</view>
</view>
<view class="form-item">
<uv-upload
:fileList="authFileList"
:maxCount="1"
width="280rpx"
height="280rpx"
multiple
name="authFileList"
@afterRead="afterRead"
@delete="deleteImage">
</uv-upload>
</view>
</view>
@ -151,6 +171,7 @@
},
fileList: [],
status : 0,
authFileList : [],
}
},
onLoad() {
@ -172,17 +193,23 @@
url
}
}) : []
this.authFileList = this.form.authorizationBook ? this.form.authorizationBook.split(',').map(url => {
return {
url
}
}) : []
}
})
},
deleteImage(e){
this.fileList.splice(e.index, 1)
this[e.name].splice(e.index, 1)
},
afterRead(e){
let self = this
e.file.forEach(file => {
self.$Oss.ossUpload(file.url).then(url => {
self.fileList.push({
self[e.name].push({
url
})
})


+ 42
- 12
pages_order/contract/contract.vue View File

@ -44,7 +44,7 @@
<view class="sign-btn"
v-if="(role && item.bossStatus === 0) || (!role && item.employeeStatus === 0)"
@click.stop="$utils.navigateTo('/pages_order/contract/electronicSignature?id=' + item.id)">
<uv-icon name="edit-pen" color="#fff" size="30rpx"></uv-icon>
<uv-icon name="edit-pen" color="#2979ff" size="30rpx"></uv-icon>
<text>签署</text>
</view>
</view>
@ -83,23 +83,54 @@
},
onLoad() {
this.queryParams.role = this.role ? 1 : 0
this.queryParams.status = 0
},
methods: {
clickTabs({index}) {
this.type = index
this.queryParams.status = index
this.getData()
},
showPDF(item){
uni.downloadFile({
url : item.contract,
success : res => {
uni.openDocument({
filePath: res.tempFilePath,
})
}
})
// this.$utils.
// navigateTo('/pages_order/contract/contractDetail?id='
// + item.id)
//
if(this.role && item.bossStatus != 0 ||
item.employeeStatus != 0 && !this.role
){
uni.downloadFile({
url : item.contract,
success : res => {
uni.openDocument({
filePath: res.tempFilePath,
})
}
})
return
}
uni.showModal({
title: '您希望的操作是?!',
cancelText: '签署合同',
confirmText: '查看内容',
success : e => {
if(e.confirm){
uni.downloadFile({
url : item.contract,
success : res => {
uni.openDocument({
filePath: res.tempFilePath,
})
}
})
}else{
this.$utils.
navigateTo('/pages_order/contract/electronicSignature?id='
+ item.id)
}
}
})
},
}
}
@ -184,4 +215,3 @@
}
}
</style>

+ 51
- 1
pages_order/work/jobPosting.vue View File

@ -57,6 +57,14 @@
isLink
></uv-cell>
<uv-cell
title="截止日期"
rightIconStyle="fontSize: 30rpx;"
:value="form.deadline ? $dayjs(form.deadline).format('YYYY-MM-DD') : '请选择招工截止日期'"
@click="openDatePicker"
isLink
></uv-cell>
<!-- <view class="form-sheet-cell">
<view class="label">
工作地点
@ -186,6 +194,14 @@
keyName="adress"
@confirm="pickerConfirm"></uv-picker>
<uv-datetime-picker
ref="datetimePicker"
v-model="datePickerValue"
mode="date"
:minDate="minDate"
@confirm="datePickerConfirm">
</uv-datetime-picker>
<view class="uni-color-btn"
@click="submit">
发布
@ -209,6 +225,7 @@
areaId_dictText : '',
typeId_dictText : '',
qulification : '',
deadline : '',
},
radiovalue : '',
priceList : [
@ -236,6 +253,8 @@
},
pickerKey : 'workAge',
jobId : 0,
datePickerValue : Date.now(),
minDate : Date.now(),
}
},
onLoad({jobId}) {
@ -289,6 +308,10 @@
delete detail.updateBy
this.form = detail
if(detail.deadline) {
this.datePickerValue = new Date(detail.deadline).getTime()
}
}
})
},
@ -309,7 +332,13 @@
this.form[this.pickerKey] = data
}
},
//
openDatePicker() {
this.$refs.datetimePicker.open()
},
datePickerConfirm(e) {
this.form.deadline = this.$dayjs(e.value).format('YYYY-MM-DD HH:mm:ss')
this.datePickerValue = e.value
},
submit(){
// if(this.fileList.length == 0){
@ -332,11 +361,32 @@
// jobContext : '',
qulification : '请选择学历要求',
workDetail: '请输入职位详情',
deadline: '请选择招工截止日期',
// gsContext : '',
})) {
return
}
//
const phoneReg = /^1[3-9]\d{9}$/
if (!phoneReg.test(this.form.phone)) {
return uni.showToast({
title: '请输入正确的手机号码',
icon: 'none'
})
}
//
const today = this.$dayjs().startOf('day')
const deadlineDate = this.$dayjs(this.form.deadline).startOf('day')
if (deadlineDate.isBefore(today)) {
return uni.showToast({
title: '截止日期不能早于今天',
icon: 'none'
})
}
this.$api(this.jobId ? 'updateJob' : 'addJob', this.form, res => {
if(res.code == 200){
uni.showToast({


Loading…
Cancel
Save