修复若干bug

This commit is contained in:
丁杰 2026-06-04 15:00:22 +08:00
parent 5c42041cbd
commit adf6cea0b7
9 changed files with 3102 additions and 2782 deletions

View File

@ -165,7 +165,7 @@
v-if="userInfo.credentials_state === 0">
</image>
<text style="margin-right: 16rpx;"
:style="{ color: userInfo.credentials_state === 0 ? '#ec5d57' : userInfo.credentials_state === 1 ? '#e59e45' : '#c9c9c9' }">
:style="{ color: userInfo.credentials_state === 0 ? '#ec5d57' : userInfo.credentials_state === 1 ? '#e59e45' : '#389930' }">
{{ userInfo.credentials_state === 0 ? '待完善' : userInfo.credentials_state === 1 ? '审核中' :
'已认证' }}
</text>
@ -640,12 +640,17 @@ export default {
url: '/pages/ruzhu/ruzhu'
});
} else if (idType > 0 && credentialsState === 0) {
// +
// +
uni.navigateTo({
url: '/pages/shop/qualification_sj_change'
});
} else if (idType > 0 && credentialsState === 1) {
// +
// +
uni.navigateTo({
url: '/pages/shop/qualification_sj_change'
});
} else if (idType > 0 && credentialsState === 2) {
// +
uni.navigateTo({
url: '/pages/shop/qualification_sj_change'
});

View File

@ -6,7 +6,7 @@
<view class="header-section">
<view class="user-info" @tap="handleLoginRedirect">
<image class="avatar" :src="currentAvatar"></image>
<image mode="aspectFill" class="avatar" :src="currentAvatar"></image>
<view class="info-text">
<view class="name">{{ currentName }}</view>
<view class="desc">欢迎登录美融融商家版</view>
@ -117,7 +117,7 @@
</image>
</view>
</view>
<view class="stats-content">
<view class="stats-content" @tap="goToOrderList">
<view class="stat-item">
<text class="num">{{ orderBasic.waitStart }}</text>
<text class="label">待开始</text>

View File

@ -133,6 +133,70 @@
</template>
</view>
<view class="setup-modal-mask" v-if="showSetupModal" catchtouchmove="true">
<view class="setup-modal-content">
<image class="modal-bg"
src="https://mrrplus.oss-cn-beijing.aliyuncs.com/photo/system/ac2cb4aa-a7c5-4776-98f4-b77e9c0cfa85.png">
</image>
<view class="modal-header">
<text>温馨提示</text>
</view>
<view class="modal-body">
<text class="modal-subtitle">发布服务请完善以下资料</text>
<view class="missing-list">
<view class="missing-item" v-if="!hasBusinessTime">
<view class="item-left">
<image class="item-icon"
src="https://mrrplus.oss-cn-beijing.aliyuncs.com/photo/system/21b26b44-5e36-4291-8900-705a3d5bfa90.png">
</image>
<view class="item-texts">
<text class="item-title">营业时间未配置</text>
<text class="item-desc">请完善店铺的营业时间</text>
</view>
</view>
<view class="item-right orange" @tap="goToBusinessTime">去配置</view>
</view>
<view class="missing-item" v-if="!hasServiceSkill">
<view class="item-left">
<image class="item-icon"
src="https://mrrplus.oss-cn-beijing.aliyuncs.com/photo/system/21b26b44-5e36-4291-8900-705a3d5bfa90.png">
</image>
<view class="item-texts">
<text class="item-title">服务技能未配置</text>
<text class="item-desc">请完善服务技能</text>
</view>
</view>
<view class="item-right orange" @tap="goToServiceSkill">去配置</view>
</view>
<view class="missing-item" v-if="!isCertified">
<view class="item-left">
<image class="item-icon"
:src="isUnderReview ? 'https://mrrplus.oss-cn-beijing.aliyuncs.com/photo/system/25c444be-a66e-45d6-b50d-922149ff059f.png' : 'https://mrrplus.oss-cn-beijing.aliyuncs.com/photo/system/21b26b44-5e36-4291-8900-705a3d5bfa90.png'">
</image>
<view class="item-texts">
<text class="item-title" :class="{ 'blue-text': isUnderReview }">{{ isUnderReview ?
'资质认证中' : '资质未认证' }}</text>
<text class="item-desc">请完成资质认证</text>
</view>
</view>
<view class="item-right" :class="isUnderReview ? 'grey' : 'light-green'" @tap="goToAuth">
{{ isUnderReview ? '查看进度' : '去认证' }}
</view>
</view>
</view>
</view>
<view class="modal-footer">
<view class="btn-know" @tap="closeSetupModal">知道了</view>
</view>
</view>
</view>
<tipsPopup2 :show="tipShow" @closePopup="closePopup" sureText="确认" @okBtn="okBtn">
{{ tipsText }}
</tipsPopup2>
@ -325,6 +389,8 @@ export default {
inviteList: [],
//
stopUseModal: false,
showSetupModal: false,
authDetails: null,
};
},
onPageScroll(e) {
@ -343,6 +409,37 @@ export default {
return this.userInfo?.is_ok === 2;
},
// (> 0 )
isCertified() {
if (!this.isLogin || typeof this.userInfo.id_type === 'undefined') return false;
return this.userInfo.id_type > 0;
},
//
isSettled() {
if (!this.isLogin || typeof this.userInfo.id_type === 'undefined') return false;
return this.userInfo.id_type !== 0;
},
//
isUnderReview() {
if (!this.isLogin) return false;
if (this.authDetails && Object.keys(this.authDetails).length > 0) {
return true;
}
return false;
},
//
hasServiceSkill() {
const fromUser = this.userInfo && Array.isArray(this.userInfo.servers_kill) && this.userInfo.servers_kill.length > 0;
const fromAuth = this.authDetails && Array.isArray(this.authDetails.servers_kill) && this.authDetails.servers_kill.length > 0;
return this.isLogin && (fromUser || fromAuth);
},
//
hasBusinessTime() {
const timeFromUser = this.userInfo && this.userInfo.business_time;
const timeFromAuth = this.authDetails && this.authDetails.business_time;
return this.isLogin && !!(timeFromUser || timeFromAuth);
},
currentCardList() {
return this.cardList
.filter((card) => this.checkShow(card))
@ -671,9 +768,24 @@ export default {
"https://mrrplus.oss-cn-beijing.aliyuncs.com/photo/system/4b558456-2e38-4185-8713-d1f0e6645820.png";
}
}
//
if (this.isSettled) {
this.fetchAuthDetails();
}
});
this.getInviteList();
},
//
fetchAuthDetails() {
request.post("/sj/userSjAuth/details", {
type: 1,
id_type: '1'
}).then(res => {
if (res.code == 200 && res.data) {
this.authDetails = res.data;
}
});
},
async goLogin() {
// 访
if (this.isAccountDisabled) {
@ -761,11 +873,8 @@ export default {
url: `${item.path}?type=${item.type}`,
});
} else {
if (item.go_id_type == 1 && this.userInfo?.id_type == 0) {
uni.showToast({
title: `您暂未入驻,无法使用${item.title}`,
icon: "none",
});
if (item.go_id_type == 1 && (!this.isCertified || !this.hasBusinessTime || !this.hasServiceSkill)) {
this.showSetupModal = true;
return;
}
if (!this.isLogin && item.go_id_type) {
@ -803,12 +912,17 @@ export default {
url: '/pages/ruzhu/ruzhu'
});
} else if (idType > 0 && credentialsState === 0) {
// +
// +
uni.navigateTo({
url: '/pages/shop/qualification_sj_change'
});
} else if (idType > 0 && credentialsState === 1) {
// +
// +
uni.navigateTo({
url: '/pages/shop/qualification_sj_change'
});
} else if (idType > 0 && credentialsState === 2) {
// +
uni.navigateTo({
url: '/pages/shop/qualification_sj_change'
});
@ -819,6 +933,39 @@ export default {
});
}
},
closeSetupModal() {
this.showSetupModal = false;
},
goToBusinessTime() {
this.showSetupModal = false;
uni.navigateTo({
url: '/pages/shop/business-time'
});
},
goToServiceSkill() {
this.showSetupModal = false;
uni.navigateTo({
url: '/pages/shop/service-skills'
});
},
goToAuth() {
this.showSetupModal = false;
if (this.isUnderReview) {
uni.navigateTo({
url: '/pages/ruzhu/ruzhu?type=1'
});
} else {
if (this.isSettled) {
uni.navigateTo({
url: '/pages/ruzhu/ruzhu?step=3'
});
} else {
uni.navigateTo({
url: '/pages/ruzhu/ruzhu'
});
}
}
},
goToInviteList() {
// 访
if (this.isAccountDisabled) {
@ -1562,4 +1709,151 @@ button::after {
width: 100%;
}
}
/* ============ 提示弹窗样式 ============ */
.setup-modal-mask {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.5);
z-index: 9999;
display: flex;
align-items: center;
justify-content: center;
.setup-modal-content {
width: 630rpx;
height: 775rpx;
background: #FFFFFF;
border-radius: 32rpx;
position: relative;
display: flex;
flex-direction: column;
.modal-bg {
position: absolute;
top: 0;
left: 0;
width: 630rpx;
height: 265rpx;
z-index: 0;
}
.modal-header {
position: relative;
z-index: 1;
height: 150rpx;
display: flex;
align-items: flex-end;
justify-content: center;
padding-bottom: 20rpx;
text {
font-size: 36rpx;
font-weight: bold;
color: #333333;
letter-spacing: 2rpx;
}
}
.modal-body {
position: relative;
z-index: 1;
flex: 1;
padding: 24rpx 40rpx;
.modal-subtitle {
font-size: 28rpx;
color: #333333;
margin-bottom: 40rpx;
display: block;
}
.missing-list {
display: flex;
flex-direction: column;
gap: 46rpx;
.missing-item {
display: flex;
justify-content: space-between;
align-items: center;
.item-left {
display: flex;
align-items: flex-start;
.item-icon {
width: 32rpx;
height: 32rpx;
margin-right: 16rpx;
flex-shrink: 0;
margin-top: 6rpx;
}
.item-texts {
display: flex;
flex-direction: column;
.item-title {
font-size: 30rpx;
color: #333333;
font-weight: 500;
margin-bottom: 8rpx;
&.blue-text {
color: #2b85e4;
}
}
.item-desc {
font-size: 24rpx;
color: #999999;
}
}
}
.item-right {
font-size: 26rpx;
font-weight: 400;
margin-top: -45rpx;
&.orange {
color: #FF7B00;
}
&.grey {
color: #999999;
}
&.light-green {
color: #5CAC81;
}
}
}
}
}
.modal-footer {
position: relative;
z-index: 1;
padding: 0 50rpx 50rpx;
.btn-know {
width: 100%;
height: 88rpx;
background: #FF4767;
border-radius: 44rpx;
color: #FFFFFF;
font-size: 32rpx;
font-weight: 500;
display: flex;
align-items: center;
justify-content: center;
}
}
}
}
</style>

View File

@ -110,7 +110,7 @@
},
data() {
return {
currentStep: 0, //
currentStep: 3, //
isAgree: false,
identity: null,
textData: {},

View File

@ -587,7 +587,7 @@
getUserInfo() {
const type = this.artisanType == 1 ? 2 : this.artisanType == 2 ? 3 : 1;
request
.post("/user/getuser", {
.post("/sj/user/getuser", {
type: type,
})
.then((result) => {

View File

@ -169,16 +169,14 @@
<view class="radio-group">
<view class="radio-item" @click="editable && setIdcardValidType('permanent')">
<view class="radio" :class="{ checked: displayData.legal_idcard_expiry_type === 1 }">
<image v-if="displayData.legal_idcard_expiry_type === 1"
src="/static/images/agree_y.png"
<image v-if="displayData.legal_idcard_expiry_type === 1" src="/static/images/agree_y.png"
class="radio-icon-image" mode="aspectFit"></image>
</view>
<text class="radio-label">长久有效</text>
</view>
<view class="radio-item" @click="editable && setIdcardValidType('date')">
<view class="radio" :class="{ checked: displayData.legal_idcard_expiry_type === 2 }">
<image v-if="displayData.legal_idcard_expiry_type === 2"
src="/static/images/agree_y.png"
<image v-if="displayData.legal_idcard_expiry_type === 2" src="/static/images/agree_y.png"
class="radio-icon-image" mode="aspectFit"></image>
</view>
<text class="radio-label">指定日期有效</text>
@ -313,8 +311,7 @@
<view class="radio-item" v-for="(item, index) in merchantTypeList" :key="index"
@click="selectMerchantType(item)">
<view class="radio" :class="{ checked: displayData.uscc_type === item.value }">
<image v-if="displayData.uscc_type === item.value"
src="/static/images/agree_y.png"
<image v-if="displayData.uscc_type === item.value" src="/static/images/agree_y.png"
class="radio-icon-image" mode="aspectFit"></image>
</view>
<text class="radio-label">{{ item.label }}</text>
@ -2724,23 +2721,40 @@ export default {
.popup-footer {
margin-top: 32rpx;
display: flex;
justify-content: space-between;
padding: 0 28rpx;
}
.popup-btn {
width: 280rpx;
height: 88rpx;
border-radius: 44rpx;
display: flex;
align-items: center;
justify-content: center;
}
.popup-btn.confirm {
background: linear-gradient(180deg, #ff8e9d 0%, #FF4767 100%);
}
.popup-btn .btn-text {
.popup-btn.cancel {
border: 2rpx solid #FF4767;
}
.popup-btn.confirm .btn-text {
font-size: 32rpx;
font-weight: 500;
color: #FFFFFF;
}
.popup-btn.cancel .btn-text {
font-size: 32rpx;
font-weight: 500;
color: #FF4767;
}
.cancel-text,
.confirm-text {
font-size: 32rpx;

View File

@ -1,7 +1,7 @@
<template>
<view class="container">
<custom-navbar title="添加员工" :leftImg="'/static/images/back.png'" :showUser="true"
backgroundColor="transparent" titleColor="#000" borderBottom="none">
<custom-navbar title="添加员工" :leftImg="'/static/images/back.png'" :showUser="true" backgroundColor="transparent"
titleColor="#000" borderBottom="none">
<template #right>
<view class="navbar-right" @click="goRecord">
<image class="navbar-right-img" src="/static/images/icons/record.png"></image>
@ -9,8 +9,8 @@
</view>
</template>
</custom-navbar>
<searchBox placeholder="请输入员工手机号" class="searchBox" v-model="queryData.phone" bgClor="transparent" @confirm="search"
@search="search">
<searchBox placeholder="请输入员工手机号" class="searchBox" v-model="queryData.phone" bgClor="transparent"
@confirm="search" @search="search">
</searchBox>
<scroll-view scroll-y :style="{ height: `calc(100vh - ${statusBarHeight + 200}rpx)` }">
<view class="page-container" v-if="sryDetail && sryDetail.id">
@ -74,7 +74,8 @@
</view>
<view class="" style="height: 200rpx;"></view>
<view class="agreement-footer" @click="sjinvitesyr" v-if="sryDetail && sryDetail.id && sryDetail.bind_state!=1">
<view class="agreement-footer" @click="sjinvitesyr"
v-if="sryDetail && sryDetail.id && sryDetail.bind_state != 1">
<view class="agreement-btn">邀请员工</view>
</view>
</scroll-view>
@ -104,7 +105,7 @@
async onLoad(options) {
this.statusBarHeight = this.getRpxStatusBarHeight();
let type = 3;
let result = await request.post("/user/getuser", {
let result = await request.post("/sj/user/getuser", {
type,
});
this.userInfo = result.data;
@ -431,6 +432,7 @@
right: 0;
bottom: 0;
background-color: #ffffff;
.agreement-btn {
width: 710rpx;
height: 98rpx;

View File

@ -1,7 +1,8 @@
<template>
<view class="container">
<custom-navbar title="给员工分配服务" :leftImg="'/static/images/whiteBack.png'" :showUser="true"
backgroundColor="linear-gradient( 134deg, #F52540 0%, #FF4767 100%)" titleColor="#fff" borderBottom="none"></custom-navbar>
backgroundColor="linear-gradient( 134deg, #F52540 0%, #FF4767 100%)" titleColor="#fff"
borderBottom="none"></custom-navbar>
<searchBox placeholder="服务名称" v-model="queryData.title" :showAdd="false" @confirm="search" @search="search">
</searchBox>
<view class="container-tip flex-row-center">
@ -22,8 +23,8 @@
</view>
<view class="flex-row-center">
<text class="item-left-text2" style="color: #FF4767">¥</text>
<text class="item-left-text2"
style="color: #FF4767; font-size: 28rpx">{{ item.server_price }}</text>
<text class="item-left-text2" style="color: #FF4767; font-size: 28rpx">{{
item.server_price }}</text>
</view>
</view>
</view>
@ -62,7 +63,7 @@
},
async onLoad(options) {
let type = 3;
let result = await request.post("/user/getuser", {
let result = await request.post("/sj/user/getuser", {
type,
});
this.userInfo = result.data;

View File

@ -4,8 +4,8 @@
backgroundColor="linear-gradient( 134deg, #F52540 0%, #FF4767 100%)"
headleSrc="/static/images/recruit/guide.png" :showHeadle="false" titleColor="#fff" borderBottom="none"
@onHeadleClick="openPop"></custom-navbar>
<searchBox placeholder="手艺人名字/手机号" v-model="queryData.nameorphone" :showAdd="true" @confirm="search" @search="search"
@add="goAddStaff">
<searchBox placeholder="手艺人名字/手机号" v-model="queryData.nameorphone" :showAdd="true" @confirm="search"
@search="search" @add="goAddStaff">
</searchBox>
<!-- Tab 内容区域 -->
@ -20,10 +20,12 @@
:listScrollHeight="`calc(100vh - ${statusBarHeight + 350}rpx)`">
<template #listData="{ list }">
<view class="scoll-lists">
<view class="list-item" v-for="(item, index) in list" :key="index" @click="goDetail(item)" v-if="item.syr">
<view class="list-item" v-for="(item, index) in list" :key="index" @click="goDetail(item)"
v-if="item.syr">
<view class="item-left">
<image :src="item.syr.head_photo" class="item-left-img" mode="aspectFill"></image>
<view class="item-left-tab flex-row-center-center" :class="{noTab:item.state==2}">{{ typName(item.state) }}</view>
<view class="item-left-tab flex-row-center-center" :class="{ noTab: item.state == 2 }">{{
typName(item.state) }}</view>
</view>
<view class="item-right">
<view class="item-right-text1 flex-row-center-between">
@ -127,7 +129,7 @@
},
async onLoad(options) {
let type = 3;
let result = await request.post("/user/getuser", {
let result = await request.post("/sj/user/getuser", {
type,
});
this.userInfo = result.data;
@ -387,6 +389,7 @@
bottom: 0;
left: 4rpx;
}
.noTab {
background: #C1C1C1;
}
@ -422,6 +425,7 @@
line-height: 33rpx;
text-align: left;
font-style: normal;
.item-right-text3-icon {
width: 8rpx;
height: 16rpx;