Browse Source

feat(market): 销售模块个人资料功能

- 修改 API接口,统一参数格式
- 实现用户信息获取和展示- 添加用户信息编辑功能
- 优化头像上传逻辑
- 完善表单验证
master
liutong 1 year ago
parent
commit
7f957ede43
  1. 14
      api/market.js
  2. 38
      pages/market/my/index.vue
  3. 213
      pages/market/my/info.vue

14
api/market.js

@ -3,7 +3,7 @@ import http from '../common/axios.js'
//销售相关接口 //销售相关接口
export default { export default {
//获取销售人员详情 //获取销售人员详情
member(data) { member(data={}) {
let url = '/member/member' let url = '/member/member'
return http.get(url,data).then(res => { return http.get(url,data).then(res => {
return res; return res;
@ -11,7 +11,7 @@ export default {
}, },
//修改销售人员详情 //修改销售人员详情
memberEdit(data) { memberEdit(data={}) {
let url = '/member/member_edit' let url = '/member/member_edit'
return http.post(url,data).then(res => { return http.post(url,data).then(res => {
return res; return res;
@ -19,7 +19,7 @@ export default {
}, },
//线索列表 //线索列表
salesList(data) { salesList(data={}) {
let url = '/member/sales_list' let url = '/member/sales_list'
return http.get(url,data).then(res => { return http.get(url,data).then(res => {
return res; return res;
@ -27,7 +27,7 @@ export default {
}, },
//线索列表 //线索列表
createTask(data) { createTask(data={}) {
let url = '/member/create_task' let url = '/member/create_task'
return http.get(url,data).then(res => { return http.get(url,data).then(res => {
return res; return res;
@ -35,7 +35,7 @@ export default {
}, },
//写新跟进 //写新跟进
createFollow(data) { createFollow(data={}) {
let url = '/member/create_follow' let url = '/member/create_follow'
return http.post(url,data).then(res => { return http.post(url,data).then(res => {
return res; return res;
@ -44,7 +44,7 @@ export default {
//小区列表 //小区列表
getCampusesList(data) { getCampusesList(data={}) {
let url = '/member/get_campuses_list' let url = '/member/get_campuses_list'
return http.get(url,data).then(res => { return http.get(url,data).then(res => {
return res; return res;
@ -52,7 +52,7 @@ export default {
}, },
//添加线索 //添加线索
setSales(data) { setSales(data={}) {
let url = '/member/set_sales' let url = '/member/set_sales'
return http.post(url,data).then(res => { return http.post(url,data).then(res => {
return res; return res;

38
pages/market/my/index.vue

@ -1,4 +1,4 @@
<!--我的-首页--> <!--销售我的-首页-->
<template> <template>
<view class="main_box"> <view class="main_box">
<!--自定义导航栏--> <!--自定义导航栏-->
@ -11,8 +11,8 @@
<view class="user_section"> <view class="user_section">
<view class="box"> <view class="box">
<view class="left" @click="openViewMyInfo()"> <view class="left" @click="openViewMyInfo()">
<image class="pic" src="http://www.firstui.cn:4000/vipdoc/img/img_logo.png"></image> <image class="pic" :src="$util.img(userInfo.headimg)"></image>
<view class="name">包子皮</view> <view class="name">{{userInfo.nickname ? userInfo.nickname:userInfo.username}}</view>
</view> </view>
<view class="right"> <view class="right">
<view class="btn"></view> <view class="btn"></view>
@ -92,7 +92,10 @@
</template> </template>
<script> <script>
// import user from '@/api/user.js'; import marketApi from '@/api/market.js';
import {
Api_url
} from "@/common/config.js";
import AQTabber from "@/components/AQ/AQTabber.vue" import AQTabber from "@/components/AQ/AQTabber.vue"
@ -103,11 +106,38 @@ export default {
data() { data() {
return { return {
formData:{}, formData:{},
userInfo:{},//
//APi
uploadUrl: `${Api_url}/file/image`,
} }
}, },
onLoad() { onLoad() {
}, },
onShow() {
this.init();
},
methods: { methods: {
//
async init(){
await this.getUserInfo()//
},
//
async getUserInfo(){
let data = {}
let res = await marketApi.member(data);
if (res.code != 1){
uni.showToast({
title: res.msg,
icon: 'none'
})
return
}
this.userInfo = res.data
},
// //
openViewArrivalStatistics(){ openViewArrivalStatistics(){
uni.navigateTo({ uni.navigateTo({

213
pages/market/my/info.vue

@ -1,11 +1,16 @@
<!--授课统计-详情--> <!--销售-个人资料-详情-->
<template> <template>
<view class="main_box"> <view class="main_box">
<view class="main_section"> <view class="main_section">
<view class="section"> <view class="section">
<view class="item"> <view class="item">
<image @click="changeAvatar()" class="pic" src="http://www.firstui.cn:4000/vipdoc/img/img_logo.png"></image> <image
@click="changeAvatar()"
class="pic"
:src="$util.img(formData.header)"
></image>
<view class="btn" @click="changeAvatar()">修改头像</view> <view class="btn" @click="changeAvatar()">修改头像</view>
</view> </view>
</view> </view>
@ -25,7 +30,7 @@
账号 <text class="required"></text> 账号 <text class="required"></text>
</view> </view>
<view class="input"> <view class="input">
<input disabled placeholder="暂无" /> <input v-model="formData.username" disabled placeholder="暂无" />
</view> </view>
</view> </view>
@ -43,7 +48,7 @@
等级 <text class="required"></text> 等级 <text class="required"></text>
</view> </view>
<view class="input"> <view class="input">
<input disabled placeholder="暂无" /> <input v-model="formData.member_level_name" disabled placeholder="暂无" />
</view> </view>
</view> </view>
</view> </view>
@ -54,7 +59,7 @@
性别 <text class="required">*</text> 性别 <text class="required">*</text>
</view> </view>
<view class="input"> <view class="input">
<input placeholder="请选择性别" v-model="sex_name" @click="picker_show_sex=true"/> <input placeholder="请选择性别" v-model="formData.gender" @click="picker_show_sex=true"/>
<fui-picker <fui-picker
layer="1" layer="1"
:linkage="true" :linkage="true"
@ -97,7 +102,7 @@
手机 <text class="required">*</text> 手机 <text class="required">*</text>
</view> </view>
<view class="input"> <view class="input">
<input v-model="formData.tel" placeholder="请输入手机" /> <input v-model="formData.phone" placeholder="请输入手机" />
</view> </view>
</view> </view>
@ -111,14 +116,16 @@
</view> </view>
</view> </view>
<view class="submet_btn">提交</view> <view class="submet_btn" @click="submit">提交</view>
</view> </view>
</view> </view>
</template> </template>
<script> <script>
// import user from '@/api/user.js'; import marketApi from '@/api/market.js';
import {Api_url} from "@/common/config.js"; import {
Api_url
} from "@/common/config.js";
import AQTabber from "@/components/AQ/AQTabber" import AQTabber from "@/components/AQ/AQTabber"
@ -129,30 +136,43 @@ export default {
data() { data() {
return { return {
formData:{ formData:{
images_arr:[], header:'',//
name:'',// name:'',//
email:'',// username:'',//
tel:'',// address:'',//
wx:'',// gender:'',//|,
sex:'',//
birthday:'',// birthday:'',//
email:'',//
phone:'',//
wx:'',//
}, },
userInfo: {},
//APi //APi
uploadUrl: `${Api_url}/salesmanapi/common/uploadFile`, uploadUrl: `${Api_url}/file/image`,
// //
picker_show_sex: false, picker_show_sex: false,
sex_name:'请选择', sex_name:'请选择',
options_sex_arr:[ options_sex_arr: [
{ value: 1, text: '男' }, {
{ value: 2, text: '女' }, value: 1,
text: '男'
},
{
value: 2,
text: '女'
},
], ],
// //
minDate:'', minDate: '',
maxDate:'', maxDate: '',
picker_show_birthday:false, picker_show_birthday: false,
upload_type: 1,
uploadHeadimg: '',
editHeadimg: '',
} }
}, },
onLoad() { onLoad() {
@ -163,7 +183,36 @@ export default {
methods: { methods: {
async init(){ async init(){
this.getBirthday() // this.getBirthday()
await this.getUserInfo()
},
//
async getUserInfo(){
let res = await marketApi.member({})
if (res.code != 1){
uni.showToast({
title: res.msg,
icon: 'none'
})
return
}
//
this.formData = {
header: res.data.headimg,//
name: res.data.name,//
username: res.data.username,//
address: res.data.address,//
gender: res.data.gender,//|,
birthday: res.data.birthday,//
email: res.data.email,//
phone: res.data.phone,//
wx: res.data.wx || '',//
member_level_name: res.data.member_level_name || '',//
}
console.log(123,this.formData);
}, },
// //
@ -179,34 +228,31 @@ export default {
} }
}) })
}, },
async uploadFilePromise(url) { uploadFilePromise(url) {
console.log('AQ',this.uploadUrl,url) let token = uni.getStorageSync('token') || ''
return new Promise((resolve, reject) => {
let a = uni.uploadFile({ let a = uni.uploadFile({
url: this.uploadUrl, // url: this.uploadUrl, //
filePath: url, filePath: url,
name: "file", name: 'file',
formData: { header: {
token: this.$store.state.token, 'token': `${token}`, //token
}, },
success: (e) => { success: (e) => {
console.log('上传成功1',e)
let res = JSON.parse(e.data.replace(/\ufeff/g, "") || "{}") let res = JSON.parse(e.data.replace(/\ufeff/g, "") || "{}")
console.log('上传成功2',res) console.log('上传成功2', res)
if (res.code >= 0){ if (res.code == 1) {
this.userInfo.pic = res.data.pic_path this.upload_type = 2
this.editPic(res.data.pic_path) this.formData.header = res.data.path
}else{ // this.editHeadimg = res.data.path
this.$util.showToast({ // this.uploadHeadimg = res.data.url
title: res.message } else {
}); uni.showToast({
title: res.msg,
icon: 'none'
})
} }
setTimeout(() => {
resolve(res.data.data);
}, 1000);
}, },
}); });
});
}, },
//Api //Api
async editPic(pic) { async editPic(pic) {
@ -223,16 +269,15 @@ export default {
}, },
// //
changePickerSex(e){ changePickerSex(e) {
console.log('监听选择',e) console.log('监听选择', e)
this.sex_name = e.text this.formData.gender = e.text
this.formData.sex = e.value
this.picker_show_sex = false this.picker_show_sex = false
}, },
// //
//+30 //+30
getBirthday(){ getBirthday() {
let date = new Date(); let date = new Date();
let year = date.getFullYear(); let year = date.getFullYear();
let month = date.getMonth() + 1; let month = date.getMonth() + 1;
@ -271,12 +316,82 @@ export default {
}, },
// //
changePickerBirthday(e){ changePickerBirthday(e) {
console.log('监听生日选择',e) console.log('监听生日选择', e)
this.formData.birthday = e.result this.formData.birthday = e.result
this.picker_show_birthday = false this.picker_show_birthday = false
}, },
//
async submit() {
let data = {...this.formData}
if(!data.header){
uni.showToast({
title: '请上传头像',
icon: 'none'
})
return
}
if(!data.name){
uni.showToast({
title: '请填写',
icon: 'none'
})
return
}
if(!data.gender){
uni.showToast({
title: '请选择性别',
icon: 'none'
})
return
}
if(!data.birthday){
uni.showToast({
title: '请选择生日',
icon: 'none'
})
return
}
if(!data.email){
uni.showToast({
title: '请填写邮箱',
icon: 'none'
})
return
}
if(!data.phone){
uni.showToast({
title: '请填写手机',
icon: 'none'
})
return
}
let res = await marketApi.memberEdit(data)
if(res.code != 1){
uni.showToast({
title: res.msg,
icon: 'none'
})
return
}
uni.showToast({
title: res.msg,
icon: 'success'
})
this.getUserInfo()
},
} }
} }
</script> </script>

Loading…
Cancel
Save