Browse Source

修改用户中心页面

pull/6/head
longjieli 3 months ago
parent
commit
3e2452fb78
12 changed files with 221 additions and 263 deletions
  1. +3
    -1
      App.vue
  2. +2
    -0
      main.js
  3. +12
    -12
      pages.json
  4. +7
    -3
      pages/login/index.scss
  5. +18
    -22
      pages/login/index.vue
  6. +91
    -87
      pages/login/wxUserInfo.vue
  7. +11
    -4
      pages/userManage/index.vue
  8. +16
    -34
      pages/workbenchManage/index.vue
  9. +3
    -1
      store/getters.js
  10. +2
    -2
      store/modules/system.js
  11. +56
    -95
      store/modules/user.js
  12. +0
    -2
      utils/request.js

+ 3
- 1
App.vue View File

@ -1,5 +1,7 @@
<script>
import { store } from '@/store'
import {
store
} from '@/store'
export default {
onLaunch: function() {


+ 2
- 0
main.js View File

@ -1,5 +1,6 @@
import uviewPlus from '@/uni_modules/uview-plus'
import "@/static/styles/index.scss"
import store from './store'
// #ifndef VUE3
import Vue from 'vue'
import App from './App'
@ -24,6 +25,7 @@ import App from './App.vue'
export function createApp() {
const app = createSSRApp(App)
app.use(uviewPlus)
app.use(store)
return {
app
}


+ 12
- 12
pages.json View File

@ -9,6 +9,18 @@
}
},
"pages": [
{
"path": "pages/login/index",
"style": {
"navigationBarTitleText": "登录"
}
},
{
"path": "pages/login/wxUserInfo",
"style": {
"navigationBarTitleText": "用户信息"
}
},
{
"path": "pages/workbenchManage/index",
"style": {
@ -38,18 +50,6 @@
"style": {
"navigationBarTitleText": "测试"
}
},
{
"path": "pages/login/index",
"style": {
"navigationBarTitleText": "登录"
}
},
{
"path": "pages/login/wxUserInfo",
"style": {
"navigationBarTitleText": "用户信息"
}
}
],
"subPackages": [{


+ 7
- 3
pages/login/index.scss View File

@ -1,16 +1,20 @@
.login {
height: 100vh;
background: #ffffff;
&-logo {
display: flex;
align-items: center;
justify-content: center;
height: 504rpx;
background: linear-gradient(360deg, #FFFFFF 0%, #FFBF60 99%);
image{
width: 100%;
height: 100%;
width: 180rpx;
height: 180rpx;
}
}
&-submit{
padding: 0 76rpx;
margin: 204rpx 0 40rpx 0;
margin: 150rpx 0 40rpx 0;
}
}

+ 18
- 22
pages/login/index.vue View File

@ -1,7 +1,7 @@
<template>
<view class="login">
<view class="login-logo">
<image src="https://cdn.catmdogd.com/Work/image/user/logo.png"></image>
<image class="logo" :src="configList?.applet_info?.paramValueImage" mode="aspectFill"></image>
</view>
<view class="login-submit">
<up-button type="primary" text="授权手机号登录" open-type="getPhoneNumber" @getphonenumber="onGetPhoneNumber"
@ -39,34 +39,31 @@
import {
getOpenId,
getPersonalInfo,
getPhoneNumber,
wxLogin
getPhoneNumber
} from "../../api/system/user";
import {
computed,
onMounted,
ref
} from "vue"
import {
useStore
} from 'vuex'
const store = useStore()
const value = ref(false)
const configList = computed(() => {
return store.getters.configList
})
onMounted(() => {
console.log("configList",configList)
})
//
const loginWx = () => {
uni.login({
success: (res) => {
const code = res.code
wxLogin({
code
}).then(res => {
if (res.code === 200) {
uni.setStorageSync("token", res.data.token)
uni.setStorageSync("baseInfo", JSON.stringify(res.data.userInfo))
uni.navigateTo({
url: "/pages/login/wxUserInfo"
})
}
})
}
})
store.dispatch("login")
}
@ -98,7 +95,6 @@
// console.log("====>", res)
// }
// })
console.log(e)
getPhoneNumber({
phoneCode: e.detail.code
})


+ 91
- 87
pages/login/wxUserInfo.vue View File

@ -1,8 +1,8 @@
<template>
<view class="login">
<!-- <view class="logo">
<image :src="configList.logo_image" mode=""></image>
</view> -->
<image :src="configList.logo_image" mode=""></image>
</view> -->
<view class="title">
猫妈狗爸
</view>
@ -48,15 +48,17 @@
</view>
</view>
<view class="btn" @click="submit">
确认
</view>
</view>
</template>
<script>
<script setup>
import {
ref,
getCurrentInstance
} from 'vue'
import {
ossUpload
} from "@/utils/oss-upload/oss/index.js"
@ -66,91 +68,93 @@
import {
updateUserInfo
} from "@/api/user/user.js"
export default {
data() {
return {
userInfo: {
phone: "",
nickName: "",
headImage: ""
},
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
ossUpload(res.target.avatarUrl)
.then(url => {
self.userInfoForm.headImage = url
import {
useStore
} from 'vuex'
import {
onShow,
onLoad
} from "@dcloudio/uni-app"
const instance = getCurrentInstance()
const store = useStore()
const userInfo = ref({
phone: "",
nickName: "",
headImage: ""
})
const userInfoForm = ref({
headImage: '',
nickName: '',
phone: '',
})
onShow(() => {
// onShow
})
onLoad(() => {
userInfoForm.value.phone = userInfo.value.phone || ''
userInfoForm.value.nickName = userInfo.value.nickName || ''
userInfoForm.value.headImage = userInfo.value.headImage || ''
})
const onChooseAvatar = (res) => {
ossUpload(res.target.avatarUrl)
.then(url => {
userInfoForm.value.headImage = url
})
}
const getPhone = async (e) => {
let result = await getPhoneNumber({
code: e.detail.code
})
result = JSON.parse(result.msg);
userInfoForm.value.phone = result.phone_info.phoneNumber;
}
const submit = () => {
uni.createSelectorQuery().in(instance.proxy)
.select("#nickName")
.fields({
properties: ["value"],
})
.exec((res) => {
const nickName = res?.[0]?.value
userInfoForm.value.nickName = nickName
if (!userInfoForm.value.headImage) {
return uni.showToast({
title: '请选择头像',
icon: "none"
})
},
async getPhone(e) {
let result = await getPhoneNumber({
code: e.detail.code
})
result = JSON.parse(result.msg);
this.userInfoForm.phone = result.phone_info.phoneNumber;
},
submit() {
let self = this
uni.createSelectorQuery().in(this)
.select("#nickName")
.fields({
properties: ["value"],
} else if (!userInfoForm.value.nickName) {
return uni.showToast({
title: '请填写昵称',
icon: "none"
})
.exec((res) => {
const nickName = res?.[0]?.value
self.userInfoForm.nickName = nickName
if (!this.userInfoForm.headImage) {
return uni.showToast({
title: '请选择头像',
icon: "none"
})
} else if (!this.userInfoForm.nickName) {
return uni.showToast({
title: '请填写昵称',
icon: "none"
})
} else if (!this.userInfoForm.phone) {
return uni.showToast({
title: '请填写手机号',
icon: "none"
})
}
// Id
const baseUserInfo = JSON.parse(uni.getStorageSync("baseInfo"));
updateUserInfo({
userId: baseUserInfo.userId,
userImage: self.userInfoForm.headImage,
userName: self.userInfoForm.nickName,
userTelephone: self.userInfoForm.phone
}).then(res => {
if (res.code == 200) {
uni.switchTab({
url: "/pages/workbenchManage/index"
})
}
})
} else if (!userInfoForm.value.phone) {
return uni.showToast({
title: '请填写手机号',
icon: "none"
})
},
}
}
updateUserInfo({
userId: store.state.user.userInfo.userId,
userImage: userInfoForm.value.headImage,
userName: userInfoForm.value.nickName,
userTelephone: userInfoForm.value.phone
}).then(res => {
if (res.code == 200) {
uni.switchTab({
url: "/pages/workbenchManage/index"
})
}
})
})
}
</script>


+ 11
- 4
pages/userManage/index.vue View File

@ -3,9 +3,9 @@
<view class="user-header">
<view class="flex flex-between login">
<view class="flex">
<up-image class="mr20" width="120rpx" height="120rpx"
src="https://cdn.uviewui.com/uview/album/1.jpg" shape="circle"></up-image>
<view>{{!getIsLogin()?userInfo.name:"欢迎来到版宠师"}}</view>
<up-image class="mr20" width="120rpx" height="120rpx" :src="userInfo.userImage"
shape="circle"></up-image>
<view>{{getIsLogin()?userInfo.userName:"欢迎来到版宠师"}}</view>
</view>
<view style="width: 140rpx" v-if="!getIsLogin()">
<up-button @click="handleLogin" :customStyle="{borderColor:'#fff'}" type="primary" text="请登录"
@ -98,6 +98,7 @@
<script setup>
import {
computed,
ref
} from "vue"
import {
@ -106,9 +107,15 @@
getToken
} from "../../utils/auth";
import tab from "../../plugins/tab";
import {
useStore
} from "vuex"
const store = useStore();
const isLogin = ref(false)
const userInfo = ref({})
const userInfo = computed(() => {
return store.getters.userInfo
})
if (getIsLogin() && getToken()) {
userInfo.value = getStorage("userInfo")
isLogin.value = true


+ 16
- 34
pages/workbenchManage/index.vue View File

@ -1,7 +1,6 @@
<template>
<view>
<view class="swiper-container">
<!-- <up-swiper :list="list1" indicator circular indicatorMode="dot" height="370rpx"></up-swiper> -->
<swiper :indicator-dots="true" :autoplay="true" :interval="3000" :duration="1000" style="height: 370rpx;">
<swiper-item class="w-100 h-100" v-for="item in state.banner" :key="item.id">
<image class="w-100 h-100" :src="item.image" mode=""></image>
@ -12,17 +11,15 @@
<view class="container-list">
<view class="mb28 col3 font32">合伙人工作台</view>
<!-- 申请加入 -->
<view class="container-list-but font28" v-if="userHh!==1||show">
<view class="container-list-but font28" v-if="userInfo.userHh!==1">
<view class="flex flex-between">
<view>
<!-- <view class="mb20" style="width: 400rpx;">{{iconState.list2[0].iconName}}</view> -->
<view class="font24 add-but col-white" @click="handleJoin(1)">申请加入 ></view>
</view>
<!-- <image :src="iconState.list2[0].icon"></image> -->
</view>
</view>
<!-- 申请加入后 -->
<view class="flex flex-between font24 flex-wrap" v-if="userHh==1">
<view class="flex flex-between font24 flex-wrap" v-if="userInfo.userHh==1">
<view class="icon-list" @click="handleGoto(1,item)" v-for="item in iconState.list1" :key="item.id">
<up-image class="mb20" :show-loading="true" :src="item.image" width="68rpx"
height="68rpx"></up-image>
@ -30,27 +27,21 @@
</view>
<view class="icon-list"></view>
</view>
<!-- <up-swiper :list="list1" indicator circular indicatorMode="dot" height="200rpx"></up-swiper> -->
</view>
<view class="container-list">
<view class="mb28 col3 font32">伴宠师工作台</view>
<!-- 申请之前 -->
<view class="container-list-but" style="background: #FFECE5" v-if="userBcs!==1||show">
<view class="container-list-but" style="background: #FFECE5" v-if="userInfo.userBcs!==1">
<view class="flex flex-between">
<view>
<!-- <view class="mb20" style="width: 450rpx;">{{iconState.list2[1].iconName}}</view> -->
<!-- <view class="mb20">亲密接触获得服务报酬</view> -->
<view class="font24 add-but col-white" style="background: #FF8343" @click="handleJoin(2)">
申请加入 ></view>
</view>
<!-- <image :src="iconState.list2[1].icon"></image> -->
</view>
</view>
<!-- 申请之后 -->
<!-- 申请加入后 -->
<view class="flex-rowl flex-wrap" v-if="userBcs===1">
<view class="icon-list" v-for="item in iconState.list2" :key="item.id"
@click="handleClick(item)">
<view class="flex-rowl flex-wrap" v-if="userInfo.userBcs===1">
<view class="icon-list" v-for="item in iconState.list2" :key="item.id" @click="handleClick(item)">
<up-image class="mb20" :show-loading="true" :src="item.image" width="68rpx"
height="68rpx"></up-image>
<view>{{ item.name }}</view>
@ -77,6 +68,7 @@
getbaseInfo
} from "../../api/home.js"
import {
computed,
onMounted,
reactive,
ref
@ -85,37 +77,30 @@
import {
getLoginStatus
} from "../../utils/useMixin";
import {
useStore
} from "vuex"
const store = useStore();
const state = reactive({
banner: []
})
onMounted(() => {
getBanner()
getpz()
console.log("userInfo", userInfo)
})
const userInfo = computed(() => {
return store.getters.userInfo
})
const userHh = ref(0)
const userBcs = ref(0)
onShow(() => {
// const info = uni.getStorageSync("baseInfo")
// if (info) {
// const baseInfo = JSON.parse(info)
// userHh.value = baseInfo.userHh === 1 ? 0 : 1
// userBcs.value = baseInfo.userBcs === 1 ? 0 : 1
// if (userHh.value === 1 || userBcs.value === 1) {
// show.value = false
// }
userHh.value == 1
userBcs.value == 1
// }
})
//
const getBanner = async () => {
const res = await banner()
if (res.code === 200) {
console.log("banner图",res)
state.banner = [...res.data]
console.log("state.banner",state.banner)
}
}
//
@ -158,10 +143,8 @@
isoOpen.value = false
if (num.value === 1) {
show.value = false
userHh.value = 1
} else {
show.value = false
userBcs.value = 1
}
}
@ -174,7 +157,7 @@
const getpz = () => {
indexConfig().then(res => {
//
iconState.list1 = res?.rows?.slice(0,4) || [];
iconState.list1 = res?.rows?.slice(0, 4) || [];
//
iconState.list2 = res?.rows?.slice(4) || [];
})
@ -183,7 +166,6 @@
const show = ref(true)
const hhShow = ref(true)
const handleGoto = (val, item) => {
console.log(item)
switch (item.id) {
case 1:
tab.navigateTo('/otherPages/binding/list/index')


+ 3
- 1
store/getters.js View File

@ -1,9 +1,11 @@
const getters = {
token: state => state.user.token,
userInfo: state => state.user.userInfo,
avatar: state => state.user.avatar,
name: state => state.user.name,
roles: state => state.user.roles,
permissions: state => state.user.permissions,
isLogin: state=>state.user.isLogin
isLogin: state=>state.user.isLogin,
configList: state => state.system.configList
}
export default getters

+ 2
- 2
store/modules/system.js View File

@ -12,8 +12,8 @@ const system = {
obj[n.paramCode] = n;
})
state.configList = obj
}
state.configList = obj;
},
},
actions: {
async fetchConfigList({commit, state}) {


+ 56
- 95
store/modules/user.js View File

@ -1,105 +1,66 @@
import storage from '@/utils/storage'
import constant from '@/utils/constant'
import {getInfo, login, logout} from '@/api/login'
import {getIsLogin, getToken, removeToken, setIsLogin, setToken} from '@/utils/auth'
import {currentUrl} from '@/utils/getUrl'
import {
getInfo,
login,
logout
} from '@/api/login'
import {
getIsLogin,
getToken,
removeToken,
setIsLogin,
setToken
} from '@/utils/auth'
import {
currentUrl
} from '@/utils/getUrl'
import {
wxLogin
} from "../../api/system/user";
const baseUrl = currentUrl
const user = {
state: {
token: getToken(),
name: storage.get(constant.name),
avatar: storage.get(constant.avatar),
roles: storage.get(constant.roles),
permissions: storage.get(constant.permissions),
isLogin: getIsLogin(constant.isLogin)
},
state: {
accessToken: uni.getStorageSync("token") || "",
userInfo: uni.getStorageSync("baseInfo") ? JSON.parse(uni.getStorageSync("baseInfo")) : {}
},
mutations: {
SET_TOKEN: (state, token) => {
state.token = token
},
SET_NAME: (state, name) => {
state.name = name
storage.set(constant.name, name)
},
SET_AVATAR: (state, avatar) => {
state.avatar = avatar
storage.set(constant.avatar, avatar)
},
SET_ROLES: (state, roles) => {
state.roles = roles
storage.set(constant.roles, roles)
},
SET_PERMISSIONS: (state, permissions) => {
state.permissions = permissions
storage.set(constant.permissions, permissions)
},
SET_IsLOGIN: (state, isLogin) => {
state.isLogin = isLogin
storage.set(constant.isLogin, isLogin)
}
},
mutations: {
// 设置token
setAccessToken(state, token) {
state.accessToken = token;
},
actions: {
// 登录
Login({commit}, userInfo) {
const username = userInfo.username.trim()
const password = userInfo.password
const code = userInfo.code
const uuid = userInfo.uuid
return new Promise((resolve, reject) => {
login(username, password, code, uuid).then(res => {
setToken(res.token)
setIsLogin(true)
commit('SET_TOKEN', res.token)
commit('SET_IsLOGIN', true)
resolve()
}).catch(error => {
reject(error)
})
})
},
// 设置用户信息
setUserInfo(state,userInfo) {
state.userInfo = userInfo;
}
},
// 获取用户信息
GetInfo({commit, state}) {
return new Promise((resolve, reject) => {
getInfo().then(res => {
const user = res.user
const avatar = (user == null || user.avatar == "" || user.avatar == null) ? require("@/static/images/profile.jpg") : baseUrl + user.avatar
const username = (user == null || user.userName == "" || user.userName == null) ? "" : user.userName
if (res.roles && res.roles.length > 0) {
commit('SET_ROLES', res.roles)
commit('SET_PERMISSIONS', res.permissions)
} else {
commit('SET_ROLES', ['ROLE_DEFAULT'])
}
commit('SET_NAME', username)
commit('SET_AVATAR', avatar)
resolve(res)
}).catch(error => {
reject(error)
})
})
},
// 退出系统
LogOut({commit, state}) {
return new Promise((resolve, reject) => {
logout(state.token).then(() => {
commit('SET_TOKEN', '')
commit('SET_ROLES', [])
commit('SET_PERMISSIONS', [])
commit('SET_IsLOGIN', false)
removeToken()
storage.clean()
resolve()
}).catch(error => {
reject(error)
})
})
}
}
actions: {
login(context) {
uni.login({
success: (res) => {
const code = res.code
wxLogin({
code
}).then(res => {
if (res.code === 200) {
uni.setStorageSync("token", res.data.token)
uni.setStorageSync("baseInfo", JSON.stringify(res.data.userInfo))
context.commit('setAccessToken', res.data.token);
context.commit('setUserInfo', res.data.userInfo);
setIsLogin("isLogin",true);
uni.navigateTo({
url: "/pages/login/wxUserInfo"
})
}
})
}
})
}
}
}
export default user
export default user

+ 0
- 2
utils/request.js View File

@ -21,7 +21,6 @@ const request = config => {
// 是否需要设置 token
const isToken = (config.headers || {}).isToken || false
config.header = config.header || {}
console.log("=====", getToken())
if (getToken() && isToken) {
config.header['Authorization'] = 'Bearer ' + getToken()
}
@ -40,7 +39,6 @@ const request = config => {
header: config.header,
dataType: 'json'
}).then(res => {
console.log(res);
const code = res.data.code || 200
const msg = errorCode[code] || res.data.msg || errorCode['default']
if (code === 401) {


Loading…
Cancel
Save