2023-07-07 14:22:34 +00:00
< template >
2023-11-06 11:43:27 +00:00
< view :class ="theme_view" >
2023-09-18 10:15:14 +00:00
< component -popup :propShow ="popup_status" propPosition = "bottom" @onclose ="popup_close_event" >
2023-10-12 01:53:44 +00:00
< view : class = "'user-base-popup bg-white ' + (propIsGrayscale ? 'grayscale' : '')" >
2025-05-09 08:13:50 +00:00
< view class = "close oh pa top-0 right-0 z-i-deep" >
< view class = "fr padding-top padding-right padding-left-sm padding-bottom-sm" @tap.stop ="popup_close_event" >
2025-09-23 15:11:27 +00:00
< iconfont name = "icon-close-line" size = "24rpx" color = "#999" > < / iconfont >
2023-09-18 10:15:14 +00:00
< / view >
< / view >
< form @submit ="form_submit" class = "form-container" >
< view class = "padding-top-sm" >
2024-12-17 17:46:12 +00:00
< view class = "text-size-md spacing-mb" >
< text > { { $t ( 'user-base.user-base.g5663y' ) } } < / text >
< text v-if ="(check_field.is_avatar || 0) == 1" > {{ $ t ( ' personal.personal.cw1d8p ' ) }} < / text >
< text v-if ="(check_field.is_nickname || 0) == 1" > 、 {{ $ t ( ' personal.personal.gw8br3 ' ) }} < / text >
< text v-if ="(check_field.is_mobile || 0) == 1" > 、 {{ $ t ( ' login.login.28k91h ' ) }} < / text >
< / view >
< view class = "padding-bottom-main cr-grey-9 br-b" >
< text > { { $t ( 'user-base.user-base.913g4e' ) } } < / text >
< text v-if ="(check_field.is_avatar || 0) == 1" > {{ $ t ( ' personal.personal.cw1d8p ' ) }} < / text >
< text v-if ="(check_field.is_nickname || 0) == 1" > 、 {{ $ t ( ' personal.personal.gw8br3 ' ) }} < / text >
< text v-if ="(check_field.is_mobile || 0) == 1" > 、 {{ $ t ( ' login.login.28k91h ' ) }} < / text >
< text > { { $t ( 'user-base.user-base.yujeaf' ) } } < / text >
< / view >
< view v-if ="(check_field.is_avatar || 0) == 1" class="form-gorup oh flex-row align-c br-b" >
2024-01-15 10:39:38 +00:00
< view class = "form-gorup-title text-size-md" > { { $t ( 'personal.personal.cw1d8p' ) } } < text class = "form-group-tips-must" > * < / text > < / view >
2023-09-18 10:15:14 +00:00
< button class = "bg-white br-0 padding-0 margin-left-xxl flex-row jc-sb align-c flex-1" hover -class = " none " open -type = " chooseAvatar " @chooseavatar ="choose_avatar_event" @tap ="choose_avatar_event" >
< image : src = "user_avatar || default_avatar" mode = "widthFix" class = "circle br user-base-avatar" > < / image >
2023-12-20 09:55:20 +00:00
< iconfont name = "icon-arrow-right" size = "24rpx" color = "#ccc" > < / iconfont >
2023-09-18 10:15:14 +00:00
< / button >
< / view >
2024-12-17 17:46:12 +00:00
< view v-if ="(check_field.is_nickname || 0) == 1" class="form-gorup oh flex-row align-c br-b" >
2024-01-15 10:39:38 +00:00
< view class = "form-gorup-title text-size-md" > { { $t ( 'personal.personal.gw8br3' ) } } < text class = "form-group-tips-must" > * < / text > < / view >
2023-09-18 10:15:14 +00:00
< view class = "user-nickname-container padding-left-xxl" >
2024-12-17 17:46:12 +00:00
< input : type = "client_value == 'weixin' ? 'nickname': 'text'" maxlength = "16" placeholder -class = " cr -grey -c " class = "cr-base" :placeholder ="$t('user-base.user-base.o19lj3')" @input ="on_input_nickname" @blur ="on_input_nickname" / >
< / view >
< / view >
< view v-if ="(check_field.is_mobile || 0) == 1" class="form-gorup oh flex-row align-c br-b" >
< view class = "form-gorup-title text-size-md" > { { $t ( 'login.login.1p7843' ) } } < text class = "form-group-tips-must" > * < / text > < / view >
< view class = "user-mobile-container padding-left-xxl" >
< button class = "bg-white br-white text-size-md margin-top-sm padding-left-0 tl" : class = "(user_mobile || null) == null ? 'cr-green' : ''" type = "default" hover -class = " none " open -type = " getPhoneNumber " @getphonenumber ="confirm_phone_number_event" > {{ user_mobile | | $ t ( ' login.login.8fghjs ' ) }} < / button >
2023-09-18 10:15:14 +00:00
< / view >
< / view >
2023-05-24 10:06:15 +00:00
2023-10-12 01:53:44 +00:00
< view class = "tc padding-top-xxl" >
2024-01-15 10:39:38 +00:00
< button class = "sub-btn cr-white text-size" : class = "form_submit_disabled_status ? 'bg-grey-d br-grey-d' : 'bg-main br-main'" type = "default" form -type = " submit " hover -class = " none " > { { $t ( 'common.save' ) } } < / button >
2023-09-18 10:15:14 +00:00
< / view >
< / view >
< / form >
< / view >
< / c o m p o n e n t - p o p u p >
< / view >
2023-07-07 14:22:34 +00:00
< / template >
< script >
2023-10-08 07:31:18 +00:00
const app = getApp ( ) ;
2024-03-11 06:01:53 +00:00
import componentPopup from '@/components/popup/popup' ;
2023-10-08 07:31:18 +00:00
export default {
data ( ) {
return {
2023-11-07 03:37:22 +00:00
theme _view : app . globalData . get _theme _value _view ( ) ,
2024-12-17 17:46:12 +00:00
client _value : app . globalData . application _client _type ( ) ,
2023-10-08 07:31:18 +00:00
default _avatar : app . globalData . data . default _user _head _src ,
cache _key : app . globalData . data . cache _user _base _personal _interval _time _key ,
2023-10-08 07:48:44 +00:00
popup _status : false ,
2023-10-08 07:31:18 +00:00
user : { } ,
2024-12-17 17:46:12 +00:00
check _field : { } ,
2023-10-08 07:31:18 +00:00
user _avatar : '' ,
nickname : '' ,
2024-12-17 17:46:12 +00:00
user _mobile : '' ,
2023-10-08 07:31:18 +00:00
pages : [ ] ,
client : [ ] ,
interval _time : 0 ,
2024-12-18 12:49:38 +00:00
is _weixin _force : false ,
2023-10-08 07:31:18 +00:00
form _submit _disabled _status : true ,
2024-12-17 17:46:12 +00:00
back _object : null ,
back _method : null ,
back _params : null
2023-10-08 07:31:18 +00:00
} ;
2023-09-18 10:15:14 +00:00
} ,
2023-07-07 14:22:34 +00:00
2023-10-08 07:31:18 +00:00
components : {
componentPopup ,
} ,
props : {
propIsGrayscale : {
type : Boolean ,
default : false ,
} ,
2023-09-18 10:15:14 +00:00
} ,
2023-07-07 14:22:34 +00:00
2023-10-08 07:31:18 +00:00
created : function ( ) {
2023-09-18 10:15:14 +00:00
// 初始化配置
2023-10-08 07:31:18 +00:00
this . init _config ( ) ;
} ,
2023-07-07 14:22:34 +00:00
2023-10-08 07:31:18 +00:00
methods : {
// 初始化配置
init _config ( status ) {
if ( ( status || false ) == true ) {
this . setData ( {
pages : app . globalData . get _config ( 'config.common_app_user_base_popup_pages' , [ ] ) ,
client : app . globalData . get _config ( 'config.common_app_user_base_popup_client' , [ ] ) ,
interval _time : parseInt ( app . globalData . get _config ( 'config.common_app_user_base_popup_interval_time' , 1800 ) ) ,
2024-12-18 12:49:38 +00:00
is _weixin _force : this . client _value == 'weixin' && parseInt ( app . globalData . get _config ( 'config.common_app_is_weixin_force_user_base' , 0 ) ) == 1 ,
2023-10-08 07:31:18 +00:00
} ) ;
} else {
app . globalData . is _config ( this , 'init_config' ) ;
2023-09-18 10:15:14 +00:00
}
2023-10-08 07:31:18 +00:00
} ,
// 初始配置
2024-12-17 17:46:12 +00:00
init ( params = { } ) {
2023-10-08 07:31:18 +00:00
// 初始化配置
this . init _config ( true ) ;
2025-04-02 06:16:56 +00:00
// 公共接口已初始化完成
if ( app . globalData . data . common _data _init _status == 1 ) {
// 未指定类型则自动匹配页面
var type = '' ;
if ( ( params . type || null ) == null ) {
var page = '/' + app . globalData . current _page ( false ) ;
var obj = {
'index' : '/pages/index/index' ,
'goods-category' : '/pages/goods-category/goods-category' ,
'cart' : '/pages/cart/cart' ,
'user' : '/pages/user/user' ,
} ;
var index = Object . values ( obj ) . indexOf ( page ) ;
if ( index != - 1 ) {
type = Object . keys ( obj ) [ index ] ;
}
} else {
type = params . type ;
2023-10-08 07:31:18 +00:00
}
2025-04-02 06:16:56 +00:00
if ( ( type || null ) != null ) {
// 是否需要展示弹窗提示
if ( ! this . popup _status && this . pages . indexOf ( type ) != - 1 && this . client . indexOf ( this . client _value ) != - 1 ) {
// 当前缓存用户
var user = app . globalData . get _user _cache _info ( ) || null ;
// 需要填写字段数据
var result = this . form _write _field _check _data ( user ) ;
// 非微信 或者 微信小程序是否强制填写基础信息、强制则不验证时间
if ( this . client _value != 'weixin' || ! this . is _weixin _force ) {
// 间隔时间
var cache _time = parseInt ( uni . getStorageSync ( this . cache _key ) || 0 ) ;
var current _time = Date . parse ( new Date ( ) ) / 1000 ;
if ( result . popup _status && ! this . popup _status && cache _time > 0 && current _time < cache _time + parseInt ( this . interval _time ) ) {
result [ 'popup_status' ] = false ;
}
2024-12-17 17:46:12 +00:00
}
2025-04-02 06:16:56 +00:00
this . setData ( {
2025-04-02 10:43:45 +00:00
... result ,
... {
back _object : params . object || null ,
back _method : params . method || null ,
back _params : params . params || params ,
}
2024-09-29 09:33:51 +00:00
} ) ;
2025-04-02 06:16:56 +00:00
}
2024-09-29 09:33:51 +00:00
}
2023-09-18 10:15:14 +00:00
}
2025-04-02 10:43:45 +00:00
return this . popup _status ;
2023-10-08 07:31:18 +00:00
} ,
2023-09-09 09:00:37 +00:00
2024-12-17 17:46:12 +00:00
// 表单需要填写的验证数据
form _write _field _check _data ( user , is _set _data = false ) {
var check _field = {
is _nickname : 0 ,
is _avatar : 0 ,
is _mobile : 0 ,
} ;
if ( ( user || null ) != null ) {
// 默认昵称则赋空值
var arr = [ this . $t ( 'user-base.user-base.8u9on2' ) , this . $t ( 'user-base.user-base.t8i9l4' ) , this . $t ( 'user-base.user-base.0imw74' ) , this . $t ( 'user-base.user-base.27q5af' ) , this . $t ( 'user-base.user-base.211pk4' ) , this . $t ( 'user-base.user-base.5x8o43' ) , 'WeChat User' , 'Usuarios de Wechat' ] ;
if ( ( user . nickname || null ) == null || arr . indexOf ( user . nickname ) != - 1 ) {
user [ 'nickname' ] = '' ;
check _field [ 'is_nickname' ] = 1 ;
}
// 头像是默认则置为空
if ( ( user . avatar || null ) == null || user . avatar . indexOf ( 'default-user-avatar' ) != - 1 ) {
user [ 'avatar' ] = '' ;
check _field [ 'is_avatar' ] = 1 ;
}
// 手机
if ( parseInt ( user . is _mandatory _bind _mobile || 0 ) == 1 && ( user . mobile || null ) == null ) {
var onekey _bind _mobile = app . globalData . get _config ( 'config.common_user_onekey_bind_mobile_list' , [ ] ) ;
if ( onekey _bind _mobile . length > 0 ) {
if ( onekey _bind _mobile . indexOf ( this . client _value ) != - 1 ) {
user [ 'mobile' ] = '' ;
check _field [ 'is_mobile' ] = 1 ;
}
}
}
}
var result = {
check _field : check _field ,
user : user ,
popup _status : check _field . is _nickname + check _field . is _avatar + check _field . is _mobile > 0 ,
} ;
// 是否设置数据
if ( is _set _data ) {
this . setData ( result ) ;
}
return result ;
} ,
// 基础信息填写打开
user _base _open ( object , method , params ) {
this . setData ( {
popup _status : true ,
back _object : object ,
back _method : method ,
back _params : params
} ) ;
} ,
2023-10-08 07:31:18 +00:00
// 弹层关闭
popup _close _event ( e ) {
this . setData ( {
popup _status : false ,
} ) ;
uni . setStorageSync ( this . cache _key , Date . parse ( new Date ( ) ) / 1000 ) ;
} ,
// 头像事件
choose _avatar _event ( e ) {
2023-09-18 10:15:14 +00:00
var self = this ;
2024-12-17 17:46:12 +00:00
if ( this . client _value == 'weixin' ) {
2023-10-08 07:31:18 +00:00
self . upload _handle ( e . detail . avatarUrl ) ;
} else {
uni . chooseImage ( {
count : 1 ,
success ( res ) {
if ( res . tempFilePaths . length > 0 ) {
self . upload _handle ( res . tempFilePaths [ 0 ] ) ;
}
} ,
2023-09-18 10:15:14 +00:00
} ) ;
2023-10-08 07:31:18 +00:00
}
} ,
2023-05-24 10:06:15 +00:00
2023-10-08 07:31:18 +00:00
// 上传处理
upload _handle ( image ) {
var self = this ;
uni . uploadFile ( {
url : app . globalData . get _request _url ( 'useravatarupload' , 'personal' ) ,
filePath : image ,
name : 'file' ,
formData : { } ,
success : function ( res ) {
if ( res . statusCode == 200 ) {
var data = typeof res . data == 'object' ? res . data : JSON . parse ( res . data ) ;
if ( data . code == 0 ) {
self . setData ( {
2024-12-17 17:46:12 +00:00
user _avatar : data . data
2023-10-08 07:31:18 +00:00
} ) ;
2024-12-17 17:46:12 +00:00
// 提交按钮状态处理
self . submit _button _status _handle ( ) ;
2023-10-08 07:31:18 +00:00
} else {
app . globalData . showToast ( data . msg ) ;
}
2023-09-18 10:15:14 +00:00
}
} ,
} ) ;
2023-10-08 07:31:18 +00:00
} ,
2024-12-17 17:46:12 +00:00
// 输入框值监听
on _input _nickname ( e ) {
this . setData ( {
nickname : e . detail . value || '' ,
} ) ;
// 提交按钮状态处理
this . submit _button _status _handle ( ) ;
} ,
// 一键获取手机号码
confirm _phone _number _event ( e ) {
var encrypted _data = e . detail . encryptedData || null ;
var iv = e . detail . iv || null ;
var code = e . detail . code || null ;
if ( ( encrypted _data != null && iv != null ) || code != null ) {
uni . showLoading ( {
title : this . $t ( 'common.processing_in_text' ) ,
} ) ;
var user = this . user || { } ;
var data = {
encrypted _data : encrypted _data ,
iv : iv ,
code : code ,
openid : user [ this . client _value + '_openid' ] || '' ,
} ;
var field _unionid = this . client _value + '_unionid' ;
data [ field _unionid ] = user [ field _unionid ] || '' ;
uni . request ( {
url : app . globalData . get _request _url ( 'onekeyusermobiledecrypt' , 'user' ) ,
method : 'POST' ,
data : data ,
dataType : 'json' ,
success : ( res ) => {
uni . hideLoading ( ) ;
if ( res . data . code == 0 ) {
this . setData ( {
user _mobile : res . data . data
} ) ;
// 提交按钮状态处理
this . submit _button _status _handle ( ) ;
} else {
app . globalData . showToast ( res . data . msg ) ;
}
} ,
fail : ( ) => {
uni . hideLoading ( ) ;
app . globalData . showToast ( this . $t ( 'common.internet_error_tips' ) ) ;
} ,
} ) ;
} else {
var msg = e . errmsg || e . errMsg || e . detail . errmsg || e . detail . errMsg || null ;
if ( msg != null ) {
app . globalData . showToast ( msg ) ;
}
}
} ,
// 提交按钮状态处理
submit _button _status _handle ( ) {
var status = false ;
2023-10-08 07:31:18 +00:00
// 头像
2024-12-17 17:46:12 +00:00
if ( parseInt ( this . check _field . is _avatar || 0 ) == 1 && ( this . user _avatar || null ) == null ) {
status = true ;
}
// 昵称
if ( ! status && parseInt ( this . check _field . is _nickname || 0 ) == 1 && ( this . nickname || null ) == null ) {
status = true ;
}
// 手机
if ( ! status && parseInt ( this . check _field . is _mobile || 0 ) == 1 && ( this . user _mobile || null ) == null ) {
status = true ;
}
this . setData ( {
form _submit _disabled _status : status ,
} ) ;
} ,
2023-05-24 10:06:15 +00:00
2024-12-17 17:46:12 +00:00
// 数据提交
form _submit ( e ) {
2023-10-08 07:31:18 +00:00
// 验证数据项
var validation = [ ] ;
2024-12-17 17:46:12 +00:00
if ( parseInt ( this . check _field . is _avatar || 0 ) == 1 ) {
2023-10-08 07:31:18 +00:00
validation . push ( {
fields : 'avatar' ,
2024-01-15 10:39:38 +00:00
msg : this . $t ( 'user-base.user-base.gzc3y4' ) ,
2023-10-08 07:31:18 +00:00
} ) ;
}
2024-12-17 17:46:12 +00:00
if ( parseInt ( this . check _field . is _nickname || 0 ) == 1 ) {
2023-10-08 07:31:18 +00:00
validation . push ( {
fields : 'nickname' ,
2024-01-15 10:39:38 +00:00
msg : this . $t ( 'user-base.user-base.lro9u7' ) ,
2023-10-08 07:31:18 +00:00
} ) ;
2024-12-17 17:46:12 +00:00
}
if ( parseInt ( this . check _field . is _mobile || 0 ) == 1 ) {
validation . push ( {
fields : 'mobile' ,
msg : this . $t ( 'login.login.tghjer' ) ,
} ) ;
}
// 数据
var data = {
nickname : this . nickname || '' ,
avatar : this . user _avatar || '' ,
mobile : this . user _mobile || ''
} ;
// 当前用户是否已经存在
var user = this . user || { } ;
if ( ( user . id || null ) == null ) {
data [ 'openid' ] = user [ this . client _value + '_openid' ] || '' ;
data [ 'province' ] = user . province || '' ;
data [ 'city' ] = user . city || '' ;
data [ 'gender' ] = user . gender || 0 ;
var field _unionid = this . client _value + '_unionid' ;
data [ field _unionid ] = user [ field _unionid ] || '' ;
// 接口地址
var url = app . globalData . get _request _url ( 'userbasereg' , 'user' ) ;
2023-11-01 01:52:02 +00:00
} else {
2024-12-17 17:46:12 +00:00
// 存在用户则先存储用户信息
uni . setStorageSync ( app . globalData . data . cache _user _info _key , user ) ;
// 验证数据项
if ( parseInt ( this . check _field . is _avatar || 0 ) != 1 ) {
delete data [ 'avatar' ] ;
}
if ( parseInt ( this . check _field . is _nickname || 0 ) != 1 ) {
delete data [ 'nickname' ] ;
}
if ( parseInt ( this . check _field . is _mobile || 0 ) != 1 ) {
delete data [ 'mobile' ] ;
}
// 接口地址
var url = app . globalData . get _request _url ( 'save' , 'personal' ) ;
2023-10-08 07:31:18 +00:00
}
2024-12-17 17:46:12 +00:00
if ( app . globalData . fields _check ( data , validation ) ) {
2023-10-08 07:31:18 +00:00
// 数据保存
uni . showLoading ( {
2024-01-15 10:39:38 +00:00
title : this . $t ( 'common.processing_in_text' ) ,
2023-10-08 07:31:18 +00:00
} ) ;
uni . request ( {
2024-12-17 17:46:12 +00:00
url : url ,
2023-10-08 07:31:18 +00:00
method : 'POST' ,
2024-12-17 17:46:12 +00:00
data : data ,
2023-10-08 07:31:18 +00:00
dataType : 'json' ,
success : ( res ) => {
uni . hideLoading ( ) ;
if ( res . data . code == 0 ) {
uni . setStorageSync ( app . globalData . data . cache _user _info _key , res . data . data ) ;
app . globalData . showToast ( res . data . msg , 'success' ) ;
2023-09-18 10:15:14 +00:00
this . setData ( {
2023-10-08 07:31:18 +00:00
popup _status : false ,
2023-09-18 10:15:14 +00:00
} ) ;
2024-12-17 17:46:12 +00:00
// 回调
if ( typeof this . back _object === 'object' && ( this . back _method || null ) != null ) {
this . back _object [ this . back _method ] ( this . back _params ) ;
}
2023-09-18 10:15:14 +00:00
} else {
2023-10-08 07:31:18 +00:00
if ( app . globalData . is _login _check ( res . data ) ) {
app . globalData . showToast ( res . data . msg ) ;
} else {
2024-01-15 10:39:38 +00:00
app . globalData . showToast ( this . $t ( 'common.sub_error_retry_tips' ) ) ;
2023-10-08 07:31:18 +00:00
}
2023-09-18 10:15:14 +00:00
}
2023-10-08 07:31:18 +00:00
} ,
fail : ( ) => {
uni . hideLoading ( ) ;
2024-01-15 10:39:38 +00:00
app . globalData . showToast ( this . $t ( 'common.internet_error_tips' ) ) ;
2023-10-08 07:31:18 +00:00
} ,
} ) ;
}
2024-12-17 17:46:12 +00:00
}
}
2023-10-08 07:31:18 +00:00
} ;
2023-07-07 14:22:34 +00:00
< / script >
2023-09-18 10:15:14 +00:00
< style scoped >
2023-10-08 07:31:18 +00:00
. user - base - popup {
padding : 36 rpx ;
position : relative ;
}
. user - base - avatar {
width : 80 rpx ;
height : 80 rpx ! important ;
}
. user - base - popup . form - gorup - title {
line - height : 70 rpx ;
margin - bottom : 0 ;
}
2024-12-17 17:46:12 +00:00
. user - base - popup . user - nickname - container ,
. user - base - popup . user - mobile - container {
2023-10-08 07:31:18 +00:00
width : calc ( 100 % - 120 rpx ) ;
}
. form - container . form - gorup {
padding : 24 rpx 0 ;
border - radius : 0 ;
}
. form - container . form - gorup - title {
font - weight : 400 ;
}
. sub - btn {
width : 336 rpx ;
height : 84 rpx ;
line - height : 84 rpx ;
padding : 0 ;
display : inline - flex ;
align - items : center ;
justify - content : center ;
border - radius : 12 rpx ;
}
2023-09-18 10:15:14 +00:00
< / style >