Browse Source

【对接】 个人中心页面

【对接】 地址列表、添加地址
【对接】 新增送评订单
【优化】 封装请求自动获取用户id,自动传入data中
master
邓平艺 4 years ago
parent
commit
a7225fb2d5
  1. 4
      common/http.interceptor.js
  2. 10
      common/request.js
  3. 43
      packages/addAddress/addAddress.vue
  4. 42
      packages/address/address.vue
  5. 76
      pages/index/index.vue
  6. 8
      pages/login/login.vue
  7. 38
      pages/write/baseInfo.vue
  8. 31
      pages/write/distribution.vue
  9. 20
      service/address.js
  10. 10
      service/grading.js

4
common/http.interceptor.js

@ -14,10 +14,10 @@ module.exports = (vm) => {
// 响应拦截
uni.$u.http.interceptors.response.use(res => {
if(res.code == 0) {
if(res.data.code == 0) {
return res;
} else {
vm.$msg(res.msg);
vm.$msg(res.data.msg);
return false;
}
// res.code == 9998 手机号 res.code == 9999 用户信息

10
common/request.js

@ -69,12 +69,12 @@ export default function request(options){
data.device_info = JSON.stringify(sysInfo);
}
// 判断传入用户token和id
let userinfo = uni.getStorageSync('userinfo') || {};
if(userinfo && userinfo.token && !data.token){
data.token = userinfo.token;
let userInfo = uni.getStorageSync('userInfo') || {};
if(userInfo && userInfo.token && !data.token){
data.token = userInfo.token;
}
if(userinfo && userinfo.id && !data.user_id){
data.user_id = userinfo.id;
if(userInfo && userInfo.id && !data.user_id){
data.user_id = userInfo.id;
}
// 获取页面options参数

43
packages/addAddress/addAddress.vue

@ -25,9 +25,13 @@
</picker>
<view class="flex-row group_7" style="align-items: flex-start;">
<text class="text_8 lf-m-r-18 lf-m-t-12">详细地址</text>
<u-textarea v-model="address.address" placeholder="请填写详细地址:如道路、门牌号、楼栋号、单元室等" ></u-textarea>
<u-textarea v-model="address.desc" placeholder="请填写详细地址:如道路、门牌号、楼栋号、单元室等" ></u-textarea>
</view>
</view>
<view class="top-group flex-row">
<text class="text_4 lf-m-r-18">默认地址</text>
<u-switch v-model="address.default" style="margin-left: 18rpx;" activeColor="#e7a23f"></u-switch>
</view>
</view>
<view class="flex-col group_8">
<view class="flex-col items-center button" @click="save">
@ -39,6 +43,8 @@
</template>
<script>
import { addNewAddress } from '@/service/address.js';
export default {
data() {
return {
@ -47,7 +53,8 @@
name: '',
phone: '',
region: [],
address: ''
desc: '',
default: true
}
};
},
@ -70,26 +77,46 @@
})
},
methods: {
// id
// id todo
getAddressDetail(){
this.address = {
name: '邓平艺',
phone: '1878455554',
region: ['北京市','北京市','东城区'],
address: '北京北京市海淀区钻石大厦C座'
desc: '北京北京市海淀区钻石大厦C座',
default: false
}
},
pickerChnage(event){
console.log(event);
this.address.region = event.detail.value;
},
// /
save(){
console.log(this.address)
if(this.id){
this.$msg('编辑')
}else{
this.$msg('新增')
let address = this.address;
if(!address.name) return this.$msg('请填写收货人');
if(!address.phone) return this.$msg('请填写手机号');
if(address.region.length === 0) return this.$msg('请选择地区');
if(!address.desc) return this.$msg('请填写详细信息');
let data = {
tel: address.phone,
name: address.name,
desc: address.desc,
default: Number(address.default),
area_id: '' // todo id
}
if(this.id){ // id
data.addr_id = this.id;
}
addNewAddress(data).then(res => {
console.log(res);
this.$msg('操作成功', {icon: 'success'}).then(() => {
this.$toBack();
})
});
}
}
};

42
packages/address/address.vue

@ -4,14 +4,14 @@
<view class="addressItem" v-for="(item, index) in addressList" :key="item.id" @click="selectAddress(item)">
<view class="addressItemTop">
<text class="addrName">{{ item.name }}</text>
<text class="addrTel">{{ item.phone }}</text>
<text class="addrTel">{{ item.tel }}</text>
</view>
<text class="addr">{{ item.address }}</text>
<text class="addr">{{ item.desc }}</text>
<view class="line"></view>
<view class="optionsPanel">
<radio-group @change="radioChange" @click.stop>
<label>
<radio :value="item.id" :checked="item.isDefault" color="#e7a23f"></radio>
<radio :value="item.id" :checked="item.default == 1" color="#e7a23f"></radio>
<text>设置为默认地址</text>
</label>
</radio-group>
@ -30,42 +30,34 @@
</template>
<script>
import { address } from '@/service/address.js';
export default {
data() {
return {
addressList: [{
id: '1',
name: '邓平艺',
phone: '18454545455',
address: '北京北京市海淀区钻石大厦C座',
isDefault: true
},{
id: '2',
name: '邓艺平',
phone: '18454545455',
address: '北京北京市海淀区钻石大厦C座',
isDefault: false
},{
id: '3',
name: '洛阳',
phone: '18454545455',
address: '北京北京市海淀区钻石大厦C座',
isDefault: false
}],
is_select: false
addressList: [],
is_select: false,
userInfo: {}
}
},
onLoad(options){
this.is_select = Boolean(Number(options.is_select || '0'));
this.userInfo = uni.getStorageSync('userInfo') || {};
this.getUserAddress();
},
methods: {
async getUserAddress(){
let res = await address(this.userInfo.id);
this.addressList = res.data.datas;
},
// todo
radioChange(event){
let id = event.detail.value;
this.addressList.forEach(item => {
if(item.id === id){
item.isDefault = true;
item.default = 1;
}else{
item.isDefault = false;
item.default = 0;
}
});
},

76
pages/index/index.vue

@ -16,17 +16,17 @@
<view class="flex-col section_3" @click="$url('/pages/settings/settings')">
<view class="bottom-group flex-col items-center view_3">
<view class="flex-col items-end image-wrapper">
<image class="avatar" src="../../static/mrtx.png" mode="aspectFill"></image>
<image class="avatar" :src="user.avatar" mode="aspectFill"></image>
<image
src="https://project-user-resource-1256085488.cos.ap-guangzhou.myqcloud.com/62677e395a7e3f03107ffc5f/62677e4a35a7e10011e93a80/16509497944681815904.png"
class="image_7" />
</view>
<view class="flex-col items-center badge">
<text>99+</text>
<view class="flex-col items-center badge" v-if="$isRight(dots.system)">
<text>{{ dots.system > 99 ? '99+' : dots.system }}</text>
</view>
</view>
</view>
<view class="justify-center group_5">
<view class="user-name">*</view>
<view class="user-name">{{ user.nick_name }}</view>
<image src="@/static/icon/rightArrow.png" class="image_8" />
</view>
</view>
@ -47,22 +47,32 @@
<image
src="https://codefun-proj-user-res-1256085488.cos.ap-guangzhou.myqcloud.com/62677e395a7e3f03107ffc5f/62677e4a35a7e10011e93a80/16509497746086268452.png"
class="image_11" />
<view class="flex-col items-center badge_1">
<text>2</text>
<view class="flex-col items-center badge_1" v-if="$isRight(dots.unconfirmed)">
<text>{{ dots.unconfirmed }}</text>
</view>
</view>
<text class="text_7">待确认</text>
</view>
<view class="flex-col items-center equal-division-item_1" @click="$url('/pages/order/order?current=2')">
<image
src="https://codefun-proj-user-res-1256085488.cos.ap-guangzhou.myqcloud.com/62677e395a7e3f03107ffc5f/62677e4a35a7e10011e93a80/16509497746226999392.png"
class="image_11" />
<text class="text_9">评级中</text>
<view class="top-group flex-col items-center">
<image
src="https://codefun-proj-user-res-1256085488.cos.ap-guangzhou.myqcloud.com/62677e395a7e3f03107ffc5f/62677e4a35a7e10011e93a80/16509497746226999392.png"
class="image_11" />
<view class="flex-col items-center badge_2" v-if="$isRight(dots.rating)">
<text>{{ dots.rating }}</text>
</view>
</view>
<text class="text_7">评级中</text>
</view>
<view class="flex-col items-center equal-division-item_2" @click="$url('/pages/order/order?current=3')">
<image
src="https://codefun-proj-user-res-1256085488.cos.ap-guangzhou.myqcloud.com/62677e395a7e3f03107ffc5f/62677e4a35a7e10011e93a80/16509497746138565873.png"
class="image_11" />
<view class="top-group flex-col items-center">
<image
src="https://codefun-proj-user-res-1256085488.cos.ap-guangzhou.myqcloud.com/62677e395a7e3f03107ffc5f/62677e4a35a7e10011e93a80/16509497746138565873.png"
class="image_11" />
<view class="flex-col items-center badge_2" v-if="$isRight(dots.paying)">
<text>{{ dots.paying }}</text>
</view>
</view>
<text class="text_11">待付款</text>
</view>
<view class="equal-division-item flex-col" @click="$url('/pages/order/order?current=4')">
@ -70,8 +80,8 @@
<image
src="https://codefun-proj-user-res-1256085488.cos.ap-guangzhou.myqcloud.com/62677e395a7e3f03107ffc5f/62677e4a35a7e10011e93a80/16509497746181954101.png"
class="image_11" />
<view class="flex-col items-center badge_2">
<text>1</text>
<view class="flex-col items-center badge_2" v-if="$isRight(dots.shipping)">
<text>{{ dots.shipping }}</text>
</view>
</view>
<text class="text_7">待收货</text>
@ -116,9 +126,8 @@
<view class="flex-col group_11">
<view class="justify-between group_12">
<view class="flex-row">
<!-- <view class="section_7"> </view> -->
<checkbox-group>
<checkbox color="#e6a33c"></checkbox>
<checkbox-group @change="e => isConsentAgreement = !isConsentAgreement">
<checkbox color="#e6a33c" :checked="isConsentAgreement"></checkbox>
</checkbox-group>
<view class="group_14">
<text class="text_22">阅读并同意</text>
@ -127,7 +136,7 @@
</view>
<text class="text_24">45/</text>
</view>
<view class="flex-col items-center button" @click="$url('/pages/write/baseInfo')">
<view class="flex-col items-center button" @click="nextToGrading">
<text>下一步</text>
</view>
</view>
@ -184,13 +193,26 @@
},
data() {
return {
rateIndex: 0
isConsentAgreement: false,
rateIndex: 0,
user: {},
dots: {}
};
},
onLoad(){
my().then(res => {
console.log("request.my.res", res)
})
this.getUserCenterDetail();
},
methods: {
async getUserCenterDetail(){
let res = await my();
this.user = res.data.datas.user;
this.dots = res.data.datas.dots;
uni.setStorageSync('userInfo', res.data.datas.user);
},
nextToGrading(){
if(!this.isConsentAgreement) return this.$msg('请先阅读并同意协议');
this.$url('/pages/write/baseInfo');
}
}
};
</script>
@ -413,15 +435,17 @@
left: 0;
width: 100%;
height: 100%;
border-radius: 50%;
}
}
.badge {
background-color: rgb(234, 43, 43);
border-radius: 17rpx;
width: 64rpx;
min-width: 34rpx;
position: absolute;
right: 284rpx;
// right: 284rpx;
left: 78rpx;
top: 0;
}

8
pages/login/login.vue

@ -77,7 +77,7 @@
if(event.detail.errMsg == 'getPhoneNumber:ok'){
let encryptedData = event.detail.encryptedData;
let iv = event.detail.iv;
// let userInfo = uni.getStorageSync('userinfo') || {};
// let userInfo = uni.getStorageSync('userInfo') || {};
this.$http(this.API.API_WECHAT_SETPHONE, {
encryptedData,
iv,
@ -85,7 +85,7 @@
}).then(res => {
console.log("更新手机号", res);
this.$msg('更新成功', {icon: 'success'});
uni.setStorageSync('userinfo', res.data);
uni.setStorageSync('userInfo', res.data);
setTimeout(() => {
this.$toBack();
}, 1000);
@ -103,7 +103,7 @@
let encryptedData = result.encryptedData;
let iv = result.iv;
let signature = result.signature;
// let userInfo = uni.getStorageSync('userinfo') || {};
// let userInfo = uni.getStorageSync('userInfo') || {};
this.$http(this.API.API_WECHAT_SETPROFILE, {
encryptedData,
@ -112,7 +112,7 @@
}).then(res => {
console.log("更新用户信息", res);
this.$msg('更新成功', {icon: 'success'});
uni.setStorageSync('userinfo', res.data);
uni.setStorageSync('userInfo', res.data);
setTimeout(() => {
this.$toBack();
}, 1000);

38
pages/write/baseInfo.vue

@ -35,14 +35,14 @@
<view class="justify-between">
<view class="flex-row">
<text class="text_6">{{ address.name }}</text>
<text class="text_7">{{ address.phone }}</text>
<text class="text_7">{{ address.tel }}</text>
</view>
<image
src="https://project-user-resource-1256085488.cos.ap-guangzhou.myqcloud.com/62677e395a7e3f03107ffc5f/62677e4a35a7e10011e93a80/16509497893779891395.png"
class="image_10 image_11"
/>
</view>
<text class="text_8">{{ address.address }}</text>
<text class="text_8">{{ address.desc }}</text>
</view>
<!-- 没有选择地址时 -->
<view v-else>
@ -60,13 +60,13 @@
<view class="flex-col section_5">
<view class="justify-between">
<text class="text_9">送评人信息</text>
<view class="flex-row group_13">
<!-- <view class="flex-row group_13">
<text>编辑</text>
<image
src="https://project-user-resource-1256085488.cos.ap-guangzhou.myqcloud.com/62677e395a7e3f03107ffc5f/62677e4a35a7e10011e93a80/16509497893779891395.png"
class="image_10"
/>
</view>
</view> -->
</view>
<view class="flex-row group_14">
<text class="text_11">送评人</text>
@ -88,28 +88,11 @@
<text class="text_17">是否快评</text>
<text class="text_18">(价格翻倍)</text>
</view>
<!-- <image
src="https://project-user-resource-1256085488.cos.ap-guangzhou.myqcloud.com/62677e395a7e3f03107ffc5f/62677e4a35a7e10011e93a80/16509497893774083601.png"
class="switch"
/> -->
<u-switch v-model="isQuickReview" activeColor="#e7a23f"></u-switch>
</view>
<view class="flex-col group_19">
<text>打包照片</text>
<view class="flex-row equal-division_1">
<!-- <image
src="https://codefun-proj-user-res-1256085488.cos.ap-guangzhou.myqcloud.com/62677e395a7e3f03107ffc5f/62677e4a35a7e10011e93a80/16509497768828992333.png"
class="equal-division-item_1 image_13"
/>
<image
src="https://codefun-proj-user-res-1256085488.cos.ap-guangzhou.myqcloud.com/62677e395a7e3f03107ffc5f/62677e4a35a7e10011e93a80/16509497768927244914.png"
class="equal-division-item_1"
/>
<image
src="https://codefun-proj-user-res-1256085488.cos.ap-guangzhou.myqcloud.com/62677e395a7e3f03107ffc5f/62677e4a35a7e10011e93a80/16509497768986098398.png"
class="equal-division-item_1"
/> -->
<u-upload
:fileList="fileList"
name="1"
@ -123,13 +106,10 @@
</view>
<view class="flex-col group_20">
<text class="text_20">备注</text>
<!-- <view class="flex-col items-start text-wrapper">
<text class="text_21">请输入您想要备注的信息</text>
</view> -->
<u-textarea v-model="remarks" placeholder="请输入备注" :height="100" class="textarea" :count="true"></u-textarea>
</view>
<view class="flex-col group_21">
<view class="flex-col items-center button" @click="$url('/pages/write/distribution')">
<view class="flex-col items-center button" @click="next">
<text>寄送藏品</text>
</view>
<view class="section_6"> </view>
@ -160,6 +140,14 @@
},
deletePic(event){
this.fileList.splice(event.index, 1);
},
next(){
let sonpingInfo = this.sonpingInfo;
if(!this.$isRight(this.address)) return this.$msg('请选择收货地址');
if(!sonpingInfo.name) return this.$msg('请填写送评人信息');
if(!sonpingInfo.phone) return this.$msg('请填写送评人手机号');
if(!sonpingInfo.number) return this.$msg('请填写送评数量');
this.$url('/pages/write/distribution');
}
}
};

31
pages/write/distribution.vue

@ -77,7 +77,7 @@
</view>
</view>
<view class="flex-col group_17">
<view class="flex-col items-center button" @click="$url('/packages/sonpingDetail/sonpingDetail')">
<view class="flex-col items-center button" @click="submit">
<text>送评</text>
</view>
<text class="text_19" @click="$toBack(2)">稍后填写</text>
@ -88,6 +88,8 @@
</template>
<script>
import { addGrading } from '@/service/grading.js';
export default {
data() {
return {
@ -117,6 +119,33 @@
},
pickerChange(event){
this.expressIndex = event.detail.value;
},
submit(){
if(this.expressIndex === '') return this.$msg('请选择快递公司');
if(!this.oddNumber) return this.$msg('请输入快递单号');
let pages = getCurrentPages();
let page = pages[pages.length - 2]; // 访
let preData = page.data;
let data = {
express_type: this.expressList[this.expressIndex].label,
express_numb: this.oddNumber,
note: preData.remarks,
is_fast: Number(preData.isQuickReview),
num: preData.sonpingInfo.number,
tel: preData.sonpingInfo.phone,
owner: preData.sonpingInfo.name,
addr_id: preData.address.id,
images: preData.fileList.map(item => item.url).join(',') // todo
};
addGrading(data).then(res => {
// let id = res.data.datas.id; // id TODO
let id = '';
this.$msg('提交成功', {icon: 'success'}).then(() => {
this.$url('/packages/sonpingDetail/sonpingDetail?id='+ id, {type: 'launch'}); //
})
})
}
}
};

20
service/address.js

@ -0,0 +1,20 @@
import request from '@/common/request.js'
// 获取用户地址列表
export async function address(user_id) {
return await request({
url: '/api/v1/addresses',
method: 'post',
data: {
user_id
}
})
}
export async function addNewAddress(data){
return await request({
url: '/api/v1/new_addr',
method: 'post',
data
})
}

10
service/grading.js

@ -0,0 +1,10 @@
import request from '@/common/request.js'
// 添加新的送评订单
export async function addGrading(data) {
return await request({
url: '/api/v1/new_grading',
method: 'post',
data
})
}
Loading…
Cancel
Save