This commit is contained in:
唐明明
2021-09-24 16:46:02 +08:00
53 changed files with 4990 additions and 4338 deletions

View File

@@ -14,6 +14,10 @@
{ {
"launchtype" : "local" "launchtype" : "local"
}, },
"mp-weixin" :
{
"launchtype" : "local"
},
"type" : "uniCloud" "type" : "uniCloud"
} }
] ]

View File

@@ -0,0 +1,84 @@
/**
* Web-zdx
* moduleName: 登录(手机号)
*/
import { request } from '../index'
// 手机号登陆接口
const login = (data) => {
return request({
url: 'user/socialite/login/wechat/mini',
method: 'POST',
data: data
})
}
// 修改用户信息
const wechatbind = (data) => {
return request({
url: 'user/socialite/wechatbind',
method: 'PUT',
data: data
})
}
// 修改用户头像或昵称
const resetUserInfo = (data) => {
return request({
url: 'user/' + data.key,
method: 'PUT',
data: {
value: data.value
}
})
}
// 获取用户的Openid
const getOpenid = (code) => {
return request({
url: 'user/socialite/login/wechat/openid',
method: 'GET',
data: {
code: code
}
})
}
// 隐私条款
const agreementSecret = (data) => {
return request({
url: 'articles/agreement/secret'
})
}
// 注册协议
const agreementLogin = (data) => {
return request({
url: 'articles/agreement/login'
})
}
// 获取用户设置中心的信息
const getUserSettingInfo = () => {
return request({
url: 'user/setting'
})
}
// 关于我们
const aboutUs = () => {
return request({
url: 'articles/about'
})
}
export {
login,
wechatbind,
getOpenid,
agreementSecret,
agreementLogin,
resetUserInfo,
getUserSettingInfo,
aboutUs
}

View File

@@ -54,7 +54,7 @@
"path": "pages/coupons/management", "path": "pages/coupons/management",
"name": "couponsManagement", "name": "couponsManagement",
"style": { "style": {
"navigationBarTitleText":"优惠券管理" "navigationBarTitleText": "创建优惠券"
} }
}, { }, {
"path": "pages/coupons/add", "path": "pages/coupons/add",
@@ -87,6 +87,20 @@
"style": { "style": {
"navigationBarTitleText": "个人认证" "navigationBarTitleText": "个人认证"
} }
}, {
"path": "pages/setting/setting",
"name": "setting",
"auth": true,
"style": {
"navigationBarTitleText": "设置中心"
}
}, {
"path": "pages/setting/aboutUs",
"name": "aboutUs",
"auth": true,
"style": {
"navigationBarTitleText": "关于我们"
}
}], }],
"globalStyle": { "globalStyle": {
"navigationStyle": "custom", "navigationStyle": "custom",

View File

@@ -73,9 +73,16 @@
front_card: this.positive.path, front_card: this.positive.path,
back_card: this.reverse.path, back_card: this.reverse.path,
}).then(res=>{ }).then(res=>{
console.log(res) uni.showModal({
title: '提示',
content: '个人认证信息已提交,请耐心等待审核',
showCancel: false,
confirmColor: '#8b64fd',
success: modalRes => {
this.$Router.back()
}
})
}).catch(err => { }).catch(err => {
console.log(err)
uni.showToast({ uni.showToast({
icon: 'none', icon: 'none',
title: err.message title: err.message

View File

@@ -1,20 +1,22 @@
<template> <template>
<view class="content"> <view class="content">
<view class="title">易品新境</view> <!-- <view class="title">易品新境</view> -->
<view class="login-top">
<view class="top-logo-content">
<image class="top-logo" fit="contain" src="/static/imgs/top_logo.png" />
链商星球(中国)
</view>
<image class="top-bg" fit="contain" src="/static/imgs/top_bg.png" />
</view>
<!-- 输入手机号相关 -->
<view class="inputs phone"> <view class="inputs phone">
<label class="label">+86</label> <label class="label">+86</label>
<input type="number" placeholder="输入您的手机号码" v-model="phone" /> <input type="number" placeholder="输入您的手机号码" v-model="phone" />
</view> </view>
<view class="inputs sms"> <view class="inputs sms">
<input type="number" placeholder="输入短信验证码" v-model="code" /> <input type="number" placeholder="输入短信验证码" v-model="code" />
<button <button class="sms-btn" type="default" size="mini" :disabled="phone == '' || getSms"
class="sms-btn" @click="getPhoneCode">{{getSms ? '重新发送' + smsTime + 's': '发送验证码'}}</button>
type="default"
size="mini"
:disabled="phone == '' || getSms"
@click="getPhoneCode"
>{{getSms ? '重新发送' + smsTime + 's': '发送验证码'}}</button>
</view> </view>
<button class="btn" type="default" :disabled="phone == '' || code == ''" @click="login">登录</button> <button class="btn" type="default" :disabled="phone == '' || code == ''" @click="login">登录</button>
<!-- 快捷登录 --> <!-- 快捷登录 -->
@@ -25,12 +27,17 @@
</view> </view>
</view> </view>
<!-- 用户登录注册协议 --> <!-- 用户登录注册协议 -->
<view class="agreement">未注册的手机号验证后将自动创建账号登录即表示同意接收<navigator url="">用户隐私规格</navigator><navigator url="">用户服务协议</navigator></view> <view class="agreement">未注册的手机号验证后将自动创建账号登录即表示同意接收<navigator url="">用户隐私规格</navigator><navigator url="">用户服务协议
</navigator>
</view>
</view> </view>
</template> </template>
<script> <script>
import { getSms, smsAuth } from '@/apis/interfaces/auth' import {
getSms,
smsAuth
} from '@/apis/interfaces/auth'
export default { export default {
data() { data() {
return { return {
@@ -49,7 +56,9 @@
}).then(res => { }).then(res => {
this.$store.commit('setToken', res.token_type + ' ' + res.access_token) this.$store.commit('setToken', res.token_type + ' ' + res.access_token)
if (!res.is_company) { if (!res.is_company) {
this.$Router.replace({name: "Registered"}) this.$Router.replace({
name: "Index"
})
return return
} }
this.$Router.back() this.$Router.back()
@@ -97,13 +106,53 @@
padding: $padding * 3; padding: $padding * 3;
box-sizing: border-box; box-sizing: border-box;
background: white; background: white;
.login-top {
height: 36vh;
width: 100%;
display: flex;
flex-direction: row;
align-items: flex-end;
justify-content: center;
box-sizing: border-box;
position: relative;
padding-bottom: 160rpx;
.top-bg {
position: absolute;
bottom: 30rpx;
// left: 2rpx;
z-index: 2;
width: 740rpx;
margin-left: 40rpx;
}
.top-logo-content {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
box-sizing: border-box;
color: #7f56a4;
font-size: 18px;
.top-logo {
margin-bottom: 20rpx;
width: 240rpx;
height: 240rpx;
}
}
}
.inputs { .inputs {
background: $border-color-lg; background:rgba($color: $mian-color, $alpha: 0.05);
border: solid 1rpx $border-color; border: solid 1rpx $border-color;
position: relative; position: relative;
margin-top: $margin; margin-top: $margin;
height: 80rpx; height: 80rpx;
line-height: 80rpx; line-height: 80rpx;
input { input {
width: 100%; width: 100%;
height: 80rpx; height: 80rpx;
@@ -113,8 +162,10 @@
box-sizing: border-box; box-sizing: border-box;
font-size: $title-size-lg; font-size: $title-size-lg;
} }
&.phone { &.phone {
padding-left: 120rpx; padding-left: 120rpx;
.label { .label {
position: absolute; position: absolute;
left: 0; left: 0;
@@ -125,8 +176,10 @@
font-size: $title-size-lg; font-size: $title-size-lg;
} }
} }
&.sms { &.sms {
padding-right: 200rpx; padding-right: 200rpx;
.sms-btn[size='mini'] { .sms-btn[size='mini'] {
width: 200rpx; width: 200rpx;
height: 80rpx; height: 80rpx;
@@ -140,9 +193,11 @@
border-left: solid 1rpx $border-color; border-left: solid 1rpx $border-color;
color: $text-price; color: $text-price;
font-size: $title-size-lg; font-size: $title-size-lg;
&::after { &::after {
border: none; border: none;
} }
&[disabled] { &[disabled] {
color: rgba($color: $text-price, $alpha: .6); color: rgba($color: $text-price, $alpha: .6);
background: $border-color-lg; background: $border-color-lg;
@@ -150,6 +205,7 @@
} }
} }
} }
.title { .title {
text-align: center; text-align: center;
font-size: $title-size + 6; font-size: $title-size + 6;
@@ -157,8 +213,9 @@
color: $text-color; color: $text-color;
margin-bottom: 100rpx; margin-bottom: 100rpx;
} }
.btn { .btn {
background: $text-price; background: $mian-color;
color: white; color: white;
border-radius: 0; border-radius: 0;
margin-top: $margin; margin-top: $margin;
@@ -166,34 +223,42 @@
line-height: 90rpx; line-height: 90rpx;
height: 90rpx; height: 90rpx;
font-weight: bold; font-weight: bold;
&::after { &::after {
border: none; border: none;
} }
&[disabled] { &[disabled] {
background: rgba($color: $text-price, $alpha: .6); background: rgba($color: $mian-color, $alpha: .6);
} }
} }
.quick { .quick {
padding-top: $padding * 3; padding-top: $padding * 3;
text-align: center; text-align: center;
.quick-title { .quick-title {
text-align: center; text-align: center;
color: $text-gray; color: $text-gray;
font-size: $title-size-sm; font-size: $title-size-sm;
padding-bottom: $padding; padding-bottom: $padding;
} }
.quick-box { .quick-box {
display: flex; display: flex;
justify-content: center; justify-content: center;
.quick-icon { .quick-icon {
width: 78rpx; width: 78rpx;
} }
} }
} }
.agreement { .agreement {
padding-top: $padding * 4; padding-top: $padding * 4;
font-size: $title-size-sm; font-size: $title-size-sm;
color: $text-gray; color: $text-gray;
navigator { navigator {
color: $text-price; color: $text-price;
display: inline-block; display: inline-block;

45
pages/setting/aboutUs.vue Normal file
View File

@@ -0,0 +1,45 @@
<template>
<view class="AboutUs">
<u-parse :html="content"></u-parse>
<u-toast ref="uToast" />
</view>
</template>
<script>
import {
aboutUs
} from '@/apis/interfaces/setting'
export default {
data() {
return {
content: ''
};
},
onLoad(e) {
this.getInfo()
},
methods: {
getInfo() {
aboutUs().then(res => {
this.content = res.content
}).catch(err => {
this.$refs.uToast.show({
title: err.message,
type: 'primary',
duration: 3000
})
})
}
}
}
</script>
<style lang="scss" scoped>
.AboutUs{
padding: 30rpx;
width: 100%;
min-height: 100vh;
background-color: #fff;
}
</style>

432
pages/setting/setting.vue Normal file
View File

@@ -0,0 +1,432 @@
<template>
<view class="Setting">
<!-- 更多管理 -->
<view class="list">
<!-- 修改头像 -->
<view class="list-item" @click="updImgs">
<view class="list-item-left">
<image src="/static/imgs/user-avatar.png" mode="widthFix" />
<span>修改头像</span>
</view>
<view class="avatar">
<image :src="avatar.showPath?avatar.showPath:'/static/imgs/no-avatar.png'" mode="aspectFill" />
<u-icon name="arrow-right" color="#f1f1f1" size="28" />
</view>
</view>
<!-- 修改昵称 -->
<view class="list-item">
<view class="list-item-left">
<image src="/static/imgs/mine-self-name.png" mode="widthFix" />
<span>修改昵称</span>
</view>
<view class="input">
<input type="text" :value="nickname" @blur='blur' placeholder="请输入用户的昵称" maxlength="12" />
<u-icon name="arrow-right" color="#f1f1f1" size="28" />
</view>
</view>
<!-- 绑定微信 -->
<button class="list-item" @click="getUser" v-if="false">
<view class="list-item-left">
<image src="/static/imgs/link-wechat.png" mode="widthFix" />
<span>绑定微信</span>
</view>
<u-icon name="arrow-right" color="#f1f1f1" size="28" />
</button>
<!-- 个人认证 -->
<view @click="certification(is_certification)" class="list-item">
<view class="list-item-left">
<image src="/static/imgs/self-icon.png" mode="widthFix" />
<span>个人认证</span>
</view>
<u-icon name="arrow-right" color="#f1f1f1" size="28" />
</view>
<!-- 企业认证 -->
<view @click="company(is_company)" class="list-item">
<view class="list-item-left">
<image src="/static/imgs/company-icon.png" mode="widthFix" />
<span>企业认证</span>
</view>
<u-icon name="arrow-right" color="#f1f1f1" size="28" />
</view>
<!-- 关于我们 -->
<view @click="$router.push({name:'aboutUs'})" class="list-item">
<view class="list-item-left">
<image src="/static/imgs/mine-about.png" mode="widthFix" />
<span>关于链商星球</span>
</view>
<u-icon name="arrow-right" color="#f1f1f1" size="28" />
</view>
<!-- 切换账号 -->
<view @click="loginOut" class="list-item">
<view class="list-item-left">
<image src="/static/imgs/reset-info.png" mode="widthFix" />
<span>切换账户</span>
</view>
<u-icon name="arrow-right" color="#f1f1f1" size="28" />
</view>
</view>
<view class="edition">
链商星球 beta 1.0.0
</view>
<!-- 底部版本 -->
<u-toast ref="uToast" />
</view>
</template>
<script>
import {
wechatbind,
resetUserInfo,
getUserSettingInfo
} from '@/apis/interfaces/setting'
import {
uploads
} from '@/apis/interfaces/uploading'
export default {
name: 'Setting',
data() {
return {
canLogin: true,
nickname: '',
avatar: {
path: '',
showPath: ''
},
is_bind: true, // 微信绑定
is_certification: true, // 个人认证
is_company: true, // 企业认证
}
},
onShow() {
wx.login({
success: res => {
this.loginCode = res.code
}
})
this.getUserInfo()
},
onPullDownRefresh() {
this.getUserInfo()
},
methods: {
// 是否个人认证
certification(is_certfication) {
console.log(is_certfication)
if (is_certfication) {
// 跳转到个人认证信息完成展示页面
this.$router.push({
name: ''
})
} else {
// 跳转到个人认证信息页面
this.$router.push({
name: ''
})
}
},
// 是否展示企业信息
company(is_company) {
console.log(is_company)
if (is_company) {
// 跳转到企业认证完成信息展示页面
this.$router.push({
name: ''
})
} else {
// 跳转到企业认证页面
this.$router.push({
name: ''
})
}
},
// 获取当前用户得基本信息
getUserInfo() {
getUserSettingInfo().then(res => {
this.avatar.showPath = res.avatar
this.nickname = res.nickname
this.is_bind = res.is_bind
this.is_certification = res.is_certification
this.is_company = res.is_company
uni.stopPullDownRefresh()
}).catch(err => {
this.$refs.uToast.show({
title: err.message,
type: 'primary',
duration: 3000
})
})
},
// 点击绑定用户得授权信息,且绑定带修改
getUser() {
uni.getUserProfile({
desc: "获取你的昵称、头像、地区及性别",
success: e => {
if (e.errMsg == "getUserProfile:ok") {
this.userInfo = e.userInfo
// // 检查用户登录Code是否过期
wx.checkSession({
success: res => {
this.userLogin(e)
},
fail: err => {
// 登录过期重新获取code
uni.login({
success: res => {
this.loginCode = res.code
// 登录
this.userLogin()
}
})
}
})
} else {
uni.showToast({
duration: 1500,
title: "绑定手机号失败了",
icon: 'none'
})
}
},
fail() {
uni.showToast({
duration: 1500,
title: "您拒绝了请求",
icon: 'none'
})
}
})
},
// 登陆接口
userLogin(info) {
let that = this
uni.login({
success: res => {
let data = {
iv: info.iv,
encryptedData: info.encryptedData,
code: res.code
}
uni.showLoading({
title: '绑定中'
})
wechatbind(data).then(res => {
setTimeout(res => {
uni.hideLoading()
}, 1000)
this.$refs.uToast.show({
title: '绑定成功',
type: 'primary',
duration: 3000
})
setTimeout(res => {
this.getUserInfo()
}, 3000)
}).catch(err => {
this.$refs.uToast.show({
title: err.message,
type: 'primary',
duration: 3000
})
uni.hideLoading()
})
}
});
},
loginOut() {
uni.removeStorageSync('token')
uni.reLaunch({
url: '/pages/login/login'
})
},
// 上传头像
updImgs(type) {
uni.chooseImage({
success: res => {
let path = res.tempFiles.map((val, index) => {
return {
name: 'uploads' + index,
uri: val.path
}
})
uploads(path).then(pathRes => {
this.avatar.path = pathRes.path[0]
this.avatar.showPath = pathRes.url[0]
this.resetUserInfo('avatar', pathRes.url[0])
}).catch(err => {
uni.showToast({
title: err.message,
icon: 'none'
})
})
}
})
},
// 修改姓名
blur(e) {
let value = e.detail.value
if (value !== this.nickname) {
this.resetUserInfo('nickname', value)
}
},
// 修改头像或昵称
resetUserInfo(key, value) {
let data = {
key: key,
value: value
}
resetUserInfo(data).then(res => {
console.log(res, 'res...')
uni.showToast({
title: res,
icon: 'none'
})
setTimeout(res => {
this.getUserInfo()
}, 2000)
}).catch(err => {
uni.showToast({
title: err.message,
icon: 'none'
})
})
}
}
}
</script>
<style lang="scss" scoped>
.Setting {
width: 100vw;
min-height: 100vh;
position: relative;
background-color: #fff;
// 版本
.edition {
color: #cacaca;
text-align: center;
padding: 20rpx 30rpx;
}
// 更多管理
.list {
display: flex;
flex-direction: column;
align-items: flex-start;
justify-content: flex-start;
box-sizing: border-box;
position: relative;
top: -10rpx;
border-radius: 20rpx;
margin: 0 40rpx;
padding: 30rpx 0;
width: calc(100% - 80rpx);
button::after {
border: none;
background-color: none;
}
button {
position: relative;
display: block;
margin-left: auto;
margin-right: auto;
padding-left: 0;
padding-right: 0;
box-sizing: border-box;
font-size: $title-size *0.9;
text-align: center;
text-decoration: none;
line-height: 1;
border-radius: 5px;
-webkit-tap-highlight-color: transparent;
overflow: hidden;
color: #333;
background-color: #fff;
}
.list-item {
width: 100%;
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
padding: 40rpx 0;
border-bottom: solid 1rpx #f7f7f7;
box-sizing: border-box;
.avatar {
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
box-sizing: border-box;
image {
width: 100rpx;
height: 100rpx;
border-radius: 50%;
margin-right: 20rpx;
}
}
.input {
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
box-sizing: border-box;
text-align: right;
flex: 1;
input {
padding-right: 30rpx;
width: 100%;
}
}
.list-item-left {
display: flex;
flex-direction: row;
align-items: center;
justify-content: flex-start;
box-sizing: border-box;
image {
width: 44rpx;
height: 44rpx;
}
span {
margin-left: 30rpx;
}
}
}
}
// 底部轮播图跳转到其他app
.mine-banner {
position: relative;
width: calc(100% - 80rpx);
top: -20rpx;
margin: 0 40rpx;
box-sizing: border-box;
margin-top: $margin*2;
}
}
.loginOut {
margin: 30rpx 50rpx;
background-color: #fff;
box-shadow: 0 0 20rpx 4rpx rgba($color: $mian-color, $alpha: 0.1);
text-align: center;
padding: 20rpx;
border-radius: 10rpx;
color: #353535;
}
</style>

View File

@@ -8,6 +8,7 @@
<view class="item" @click="$Router.push({name: 'instrumentCustomer'})">成交客户</view> <view class="item" @click="$Router.push({name: 'instrumentCustomer'})">成交客户</view>
<view class="item" @click="$Router.push({name: 'Personal'})">个人认证</view> <view class="item" @click="$Router.push({name: 'Personal'})">个人认证</view>
<view class="item" @click="$Router.push({name: 'instrumentBasics'})">企业认证</view> <view class="item" @click="$Router.push({name: 'instrumentBasics'})">企业认证</view>
<view class="item" @click="$Router.push({name: 'setting'})">设置中心</view>
</view> </view>
</view> </view>
</template> </template>

View File

@@ -10,7 +10,7 @@ $text-color: #333;
$text-gray: #555; $text-gray: #555;
$text-gray-m: #999; $text-gray-m: #999;
$text-price: #8b64fd; $text-price: #8b64fd;
$mian-color: #8b64fd; $mian-color: #b11eff;
$mian-color-deep: #824f9a; $mian-color-deep: #824f9a;
// 边框颜色 // 边框颜色

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
static/imgs/link-wechat.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 956 B

BIN
static/imgs/mine-about.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
static/imgs/no-avatar.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
static/imgs/reset-info.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 866 B

BIN
static/imgs/self-icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

BIN
static/imgs/top_bg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

BIN
static/imgs/top_logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

BIN
static/imgs/user-avatar.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 930 B