Browse Source

对接接口

master
邓平艺 4 years ago
parent
commit
23d9aef852
  1. 1
      common/cos-wx-sdk-v5.min.js
  2. 81
      common/directoss.js
  3. 5
      packages/address/address.vue
  4. 48
      packages/article/article.vue
  5. 16
      packages/sonpingDetail/ratingTrajectory.vue
  6. 2
      pages/index/index.vue
  7. 38
      pages/login/login.vue
  8. 95
      pages/order/order.vue
  9. 2
      pages/ratingCriteria/ratingCriteria.vue
  10. 1
      pages/ratingQuery/ratingQuery.vue
  11. 35
      pages/settings/settings.vue
  12. 8
      pages/write/baseInfo.vue
  13. 66
      pages/write/distribution.vue
  14. 25
      service/agreementArticle.js
  15. 35
      service/order.js

1
common/cos-wx-sdk-v5.min.js
File diff suppressed because it is too large
View File

81
common/directoss.js

@ -1,4 +1,5 @@
import { getOssToken } from "@/service/oss.js"
// import { getOssToken } from "@/service/oss.js";
let COS = require('@/common/cos-wx-sdk-v5.min.js');
/**
* dispose oss直传文件(视频图片)传入以下两个参数返回一个上传后的Array[urlLink] Promise对象
@ -8,40 +9,62 @@ import { getOssToken } from "@/service/oss.js"
* 视频上传调用let videoList = await dispose([res.tempFilePath], 'video');
*/
export async function dispose(pathList = [], fileType = 'image'){
let ossResult = await getOssToken(); // 获取oss权限
let oss = ossResult.data;
// let ossResult = await getOssToken(); // 获取oss权限
// let oss = ossResult.data;
var cos = new COS({
SecretId: 'AKIDpTqypPiqiKgkX3HEvKSJuEH3YnkQpzsU', // 获取的密钥id
SecretKey: 'MSHo43mEOHuGL9gxwe5GAm7C0WlkSt2u', // 获取的密钥key
});
let premiseList = [];
pathList.map((item, index) => {
let promiseItem = new Promise((resolve, reject) => {
let tiemr = new Date();
let ext = getFileExtendingName(item.tempFilePath || item);
let nameStr = oss.dir + tiemr.getTime() + index + ext;
let ext = getFileExtendingName(item.url || item.tempFilePath || item);
// let nameStr = oss.dir + tiemr.getTime() + index + ext;
let nameStr = tiemr.getTime() + index + ext;
cos.postObject({ // 真正上传文件的函数
Bucket: 'qkx-1257637852', // 自己刚才创建的桶名称
Region: 'ap-nanjing', // 地域 一般都是ap-...
Key: nameStr, // 上传的cos时,起一个别名
FilePath: item.url || item.tempFilePath || item, // 要上传的文件
// onProgress: function (info) {
// console.log(JSON.stringify(info)); // 进度条
// }
}, function (err, data) {
if(err){
reject(err)
}else{
resolve({...item, url: data.Location});
}
});
uni.uploadFile({
url: oss.host,
filePath: item.tempFilePath || item,
name: 'file',
fileType,
formData: {
'key': nameStr,
"OSSAccessKeyId": oss.accessid,
"policy": oss.policy,
"Signature": oss.signature,
"success_action_status": 200,
},
success: result => {
if (result.statusCode == 200) {
let fileUrl = oss.host + '/' + nameStr;
resolve(fileUrl);
}else{
reject(result);
}
},
fail: err => {
reject(err);
}
})
// uni.uploadFile({
// url: oss.host,
// filePath: item.tempFilePath || item,
// name: 'file',
// fileType,
// formData: {
// 'key': nameStr,
// "OSSAccessKeyId": oss.accessid,
// "policy": oss.policy,
// "Signature": oss.signature,
// "success_action_status": 200,
// },
// success: result => {
// if (result.statusCode == 200) {
// let fileUrl = oss.host + '/' + nameStr;
// resolve(fileUrl);
// }else{
// reject(result);
// }
// },
// fail: err => {
// reject(err);
// }
// })
})
premiseList.push(promiseItem);
});

5
packages/address/address.vue

@ -41,6 +41,11 @@
},
onLoad(options){
this.is_select = Boolean(Number(options.is_select || '0'));
if(this.is_select){
uni.setNavigationBarTitle({
title: '请选择一个地址'
})
}
},
onShow(){
// todo

48
packages/article/article.vue

@ -1,32 +1,54 @@
<template>
<view>
<u-parse :content="content"></u-parse>
<u-parse :content="article"></u-parse>
</view>
</template>
<script>
import { aboutUs, gradeAgreement, privacyAgreement } from '@/service/agreementArticle.js';
export default {
data(){
return {
id: '',
title: '',
article: ''
article: '',
type: ''
}
},
onLoad(options){
this.id = options.id || '';
this.title = options.title || '';
// todo id
this.id && this.getDetail();
},
onReady(){
uni.setNavigationBarTitle({
title: this.title
})
if(options.type === 'about_us'){
this.getAboutUsDetail();
}else if(options.type === 'grade_agreement'){
this.getGradeAgreement();
}else if(options.type === 'privacy_agreement'){
this.getPrivacyAgreement();
}
},
methods: {
getDetail(){
console.log("this.id", this.id);
//
async getAboutUsDetail(){
let res = await aboutUs();
this.article = res.data.datas.content;
uni.setNavigationBarTitle({
title: res.data.datas.title
})
},
//
async getGradeAgreement(){
let res = await gradeAgreement();
this.article = res.data.datas.content;
uni.setNavigationBarTitle({
title: res.data.datas.title
})
},
//
async getPrivacyAgreement(){
let res = await privacyAgreement();
this.article = res.data.datas.content;
uni.setNavigationBarTitle({
title: res.data.datas.title
})
}
}
}

16
packages/sonpingDetail/ratingTrajectory.vue

@ -15,20 +15,8 @@
<view class="card">
<u-steps current="0" direction="column" :dot="true">
<!-- todo 评级轨迹字段对接 -->
<!-- <u-steps-item title="发货,您的包裹已邮寄,请注意查收" :desc="item.createTime" v-for="(item, index) in details.logs" :key="index">
<text class="slot-icon qxk-iconfont qxk-icon-kefujiqirenbeifen lf-font-50" slot="icon" style="color: #e6a33c;"></text>
</u-steps-item> -->
<u-steps-item title="发货,您的包裹已邮寄,请注意查收" desc="2022-03-16 16:27">
<text class="slot-icon qxk-iconfont qxk-icon-kefujiqirenbeifen lf-font-50" slot="icon" style="color: #e6a33c;"></text>
</u-steps-item>
<u-steps-item title="发货,您的包裹已邮寄,请注意查收" desc="2022-03-16 16:27">
<text class="slot-icon qxk-iconfont qxk-icon-kefujiqirenbeifen lf-font-50" slot="icon" style="color: #e6a33c;"></text>
</u-steps-item>
<u-steps-item title="发货,您的包裹已邮寄,请注意查收" desc="2022-03-16 16:27">
<text class="slot-icon qxk-iconfont qxk-icon-kefujiqirenbeifen lf-font-50" slot="icon" style="color: #e6a33c;"></text>
</u-steps-item>
<u-steps-item title="发货,您的包裹已邮寄,请注意查收" desc="2022-03-16 16:27">
<!-- todo 评级轨迹icon字段对接 -->
<u-steps-item :title="item.title" :desc="item.created_at" v-for="(item, index) in details.logs" :key="index">
<text class="slot-icon qxk-iconfont qxk-icon-kefujiqirenbeifen lf-font-50" slot="icon" style="color: #e6a33c;"></text>
</u-steps-item>
</u-steps>

2
pages/index/index.vue

@ -131,7 +131,7 @@
</checkbox-group>
<view class="group_14">
<text class="text_22">阅读并同意</text>
<text class="text_23">相关协议</text>
<text class="text_23" @click="$url('/packages/article/article?type=grade_agreement')">相关协议</text>
</view>
</view>
<text class="text_24">45/</text>

38
pages/login/login.vue

@ -11,7 +11,7 @@
<text class="lf-m-l-20">微信快捷登录</text>
</button>
<!-- <view class="lf-m-t-40 lf-font-28" @click="$toBack()">暂不绑定继续操作</view> -->
<!-- <view class="mask" v-if="!checked" @click="$msg('您未同意协议条款')"></view> -->
<view class="mask" v-if="!checked" @click="$msg('您未同意协议条款')"></view>
</block>
<block v-else-if="type == 'phone'">
<button class="btn" open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">
@ -23,16 +23,14 @@
</block>
</view>
<!-- 服务条款 todo -->
<view class="fixed-bottom lf-flex" v-show="agreement.title">
<view class="fixed-bottom lf-flex">
<checkbox-group @change="checkboxChange" style="display: inline-block;">
<checkbox class="lf-text-vertical" :checked="checked"></checkbox>
<checkbox class="lf-text-vertical" :checked="checked" value="agreement"></checkbox>
</checkbox-group>
<view class="lf-m-l-10 lf-font-24 lf-color-gray" style="display: inline-block;">
<text>请认真阅读并同意</text>
<text @click="enterAgree" class="text-orange">{{ agreement.title }}</text>
<text>在小程序下单购买即表示您已默认同意</text>
<text @click="enterAgree" class="text-orange">{{ agreement.title }}</text>
<text>的所有条款</text>
<view class="lf-m-l-10 lf-font-24 lf-color-gray" style="display: inline-block; width: 612rpx; white-space: pre-wrap;">
<text>请仔细阅读</text>
<text @click="$url('/packages/article/article?type=privacy_agreement')" class="text-orange">用户隐私协议</text>
<text>开始使用代表您已阅读并同意</text>
</view>
</view>
</view>
@ -53,12 +51,6 @@
}
},
onLoad(options){
// this.type = options.type || this.type;
// this.getAgree();
// getApp().globalData.wxlogin().then(res => {
// this.userInfo = res;
// });
uni.login({
complete: result => {
if(result.errMsg == 'login:ok'){
@ -69,18 +61,9 @@
})
},
methods: {
// todo
getAgree(){
// this.$http(this.API.API_WXLOGIN_VIEW).then(res => {
// this.agreement = res.data?.agreement;
// })
},
// todo
enterAgree(){
this.$url('/pages/article/article?id='+ this.agreement.article_id);
},
//
checkboxChange(event){
console.log(event);
this.checked = event.detail.value.length > 0;
},
//
@ -189,4 +172,9 @@
.display-inline-block{
display: inline-block;
}
.text-orange{
color: rgb(209, 161, 28);
font-size: 28rpx;
}
</style>

95
pages/order/order.vue

@ -99,10 +99,10 @@
<!-- <text class="text_12">更多</text> -->
<text class="text_12"></text>
<view class="flex-row" v-if="item.status == 1">
<view class="flex-col items-center text-wrapper" @click.stop="orderCancel">
<view class="flex-col items-center text-wrapper" @click.stop="orderCancel(item)">
<text>取消</text>
</view>
<view class="flex-col items-center text-wrapper_1" @click.stop="orderSend">
<view class="flex-col items-center text-wrapper_1" @click.stop="orderSend(item)">
<text>寄送藏品</text>
</view>
</view>
@ -112,12 +112,12 @@
</view>
</view>
<view class="flex-row" v-else-if="item.status == 3">
<view class="flex-col items-center text-wrapper_1" style="border-color: #EA2B2B; color: #EA2B2B;" @click.stop="orderPay">
<view class="flex-col items-center text-wrapper_1" style="border-color: #EA2B2B; color: #EA2B2B;" @click.stop="orderPay(item)">
<text>付款</text>
</view>
</view>
<view class="flex-row" v-else-if="item.status == 4">
<view class="flex-col items-center text-wrapper_1" @click.stop="orderConfirm">
<view class="flex-col items-center text-wrapper_1" @click.stop="orderConfirm(item)">
<text>确认收货</text>
</view>
</view>
@ -144,7 +144,7 @@
</template>
<script>
import { orderList } from '@/service/order.js';
import { orderList, cancelOrder, confirmOrder, doPay } from '@/service/order.js';
export default {
data(){
@ -226,7 +226,8 @@
name: '',
label: '',
order_num: ''
}
},
clickButton: false
}
},
computed: {
@ -319,25 +320,83 @@
this.filterGather.date = item.value;
}
},
// todo
orderCancel(){
console.log("++++++++++")
// todo
orderCancel(item){
uni.showModal({
title: '提示',
content: '真要取消该订单吗?',
success: async result => {
if(result.confirm){
await cancelOrder(item.order_id);
this.$refs.uToast.show({
message: '取消成功',
type: 'success'
});
this.confirm();
}
}
})
},
// todo
orderSend(){
//
orderSend(item){
let base_data = encodeURIComponent(JSON.stringify(item));
this.$url('/pages/write/distribution?base_data='+ base_data);
},
// todo
orderAddressChange(){
},
// todo
orderPay(){
// todo
orderPay(item){
if(this.clickButton) return;
this.clickButton = true;
doPay(item.order_id).then(res => {
console.log("----------------", res);
let datas = res.data.datas;
uni.requestPayment({
provider: 'wxpay',
timeStamp: datas.timeStamp,
nonceStr: datas.nonceStr,
package: datas.package,
signType: datas.signType,
paySign: datas.paySign,
success: res => {
this.clickButton = false;
this.$refs.uToast.show({
message: '支付成功',
type: 'success'
});
this.confirm();
},
fail: err => {
uni.showModal({
title: '',
content: 'fail:' + JSON.stringify(err) + '支付失败',
showCancel: false
})
this.clickButton = false;
}
})
// appid: "wxb35ef055a4dd8ad4"
// err_code: "PARAM_ERROR"
// err_code_des: "appidopenid"
// mch_id: "1606181693"
// nonce_str: "rimtnwDgmC3oIHFs"
// result_code: "FAIL"
// return_code: "SUCCESS"
// return_msg: "OK"
// sign: "2ABA699D967E0DA2F956AFB8EF855AD2"
}).catch(err => this.clickButton = false)
},
// todo
orderConfirm(){
//
async orderConfirm(item){
await confirmOrder(item.order_id);
this.$refs.uToast.show({
message: '确认收货成功',
type: 'success'
});
this.confirm();
},
// tab
switchTab(item){

2
pages/ratingCriteria/ratingCriteria.vue

@ -7,7 +7,7 @@
class="image_6"
/>
<view class="flex-col group_5">
<view class="justify-between" @click="$msg('敬请期待')">
<view class="justify-between" @click="$url('/packages/article/article?type=about_us')">
<text>关于我们</text>
<image
src="https://project-user-resource-1256085488.cos.ap-guangzhou.myqcloud.com/62677e395a7e3f03107ffc5f/62677e4a35a7e10011e93a80/16509497893779891395.png"

1
pages/ratingQuery/ratingQuery.vue

@ -25,6 +25,7 @@
},
methods: {
async search(){
if(!this.value) return this.$msg('请输入评级编号');
let res = await ratingSearch(this.value);
let data = res.data.datas.data;

35
pages/settings/settings.vue

@ -1,16 +1,17 @@
<template>
<view>
<u-cell-group :border="false">
<u-cell title="头像" :isLink="true" :border="false" @click="$msg('敬请期待')">
<u-avatar size="40" slot="value" :src="src"></u-avatar>
<u-cell title="头像" :isLink="true" :border="false" @click="previewImage">
<u-avatar size="40" slot="value" :src="userInfo.avatar"></u-avatar>
</u-cell>
<u-cell title="昵称" :isLink="true" :border="false" @click="$msg('敬请期待')"></u-cell>
<u-cell title="昵称" :border="false" :value="userInfo.nick_name"></u-cell>
<u-cell title="手机号码" :isLink="true" :border="false" @click="$msg('敬请期待')"></u-cell>
<u-cell title="收货地址" :isLink="true" :border="false" url="/packages/address/address"></u-cell>
<u-cell title="系统消息" :isLink="true" :border="false" @click="$msg('敬请期待')">
<u-badge class="badge" slot="value" numberType="overflow" max="99" :value="99"></u-badge>
</u-cell>
</u-cell-group>
<view class="fixed-tips">{{ version ? 'v'+ version : '' }}</view>
</view>
</template>
@ -19,15 +20,35 @@
data() {
return {
src:"https://cdn.uviewui.com/uview/album/1.jpg",
userInfo: {},
version: ''
}
},
onLoad(){
this.userInfo = uni.getStorageSync('userInfo') || {};
let miniProgram = wx.getAccountInfoSync().miniProgram;
if(miniProgram.version){
this.version = miniProgram.version;
}
},
methods: {
previewImage(){
uni.previewImage({
urls: [this.userInfo.avatar]
})
}
}
}
</script>
<style>
<style lang="scss" scoped>
.fixed-tips{
position: fixed;
bottom: 8vh;
width: 750rpx;
left: 0;
text-align: center;
font-size: 26rpx;
color: #bdc3c7;
}
</style>

8
pages/write/baseInfo.vue

@ -120,6 +120,8 @@
</template>
<script>
import { dispose } from '@/common/directoss.js';
export default {
data() {
return {
@ -135,8 +137,10 @@
};
},
methods: {
afterRead(event){
this.fileList.push(...event.file);
async afterRead(event){
let imageList = await dispose(event.file);
this.fileList.push(...imageList);
console.log("上传完成后的图片---------", this.fileList)
},
deletePic(event){
this.fileList.splice(event.index, 1);

66
pages/write/distribution.vue

@ -80,7 +80,7 @@
<view class="flex-col items-center button" @click="submit">
<text>送评</text>
</view>
<text class="text_19" @click="$toBack(2)">稍后填写</text>
<text class="text_19" @click="saveTemporarily" v-if="!$isRight(baseInfoCache)">稍后填写</text>
<view style="width: 100%; height: 30rpx;"></view>
</view>
</view>
@ -96,9 +96,15 @@
return {
oddNumber: '',
expressList: logistics,
expressIndex: ''
expressIndex: '',
baseInfoCache: {}
};
},
onLoad(options){
if(this.$valueType(options.base_data) !== 'undefined'){
this.baseInfoCache = JSON.parse(decodeURIComponent(options.base_data));
}
},
methods: {
setClipboardData(){
uni.setClipboardData({
@ -118,28 +124,70 @@
submit(){
if(this.expressIndex === '') return this.$msg('请选择快递公司');
if(!this.oddNumber) return this.$msg('请输入快递单号');
let data = {};
if(this.$isRight(this.baseInfoCache)){ //
data = {
express_type: this.expressList[this.expressIndex].label,
express_numb: this.oddNumber,
note: this.baseInfoCache.notes,
is_fast: this.baseInfoCache.is_fast,
num: this.baseInfoCache.num,
tel: this.baseInfoCache.tel,
owner: this.baseInfoCache.owner,
addr_id: this.baseInfoCache.addr_log_id,
images: this.baseInfoCache.images,
order_id: this.baseInfoCache.order_id
};
}else{ //
let pages = getCurrentPages();
let page = pages[pages.length - 2]; // 访
let preData = page.data;
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(',')
};
}
addGrading(data).then(res => {
let id = res.data.datas.order_id;
this.$msg('提交成功', {icon: 'success'}).then(() => {
this.$url('/packages/sonpingDetail/sonpingDetail?id='+ id, {type: 'launch'}); //
})
})
},
//
saveTemporarily(){
uni.showLoading({
title: '正在保存当前信息'
})
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
images: preData.fileList.map(item => item.url).join(',')
};
addGrading(data).then(res => {
let id = res.data.datas.order_id;
this.$msg('提交成功', {icon: 'success'}).then(() => {
this.$url('/packages/sonpingDetail/sonpingDetail?id='+ id, {type: 'launch'}); //
uni.hideLoading();
this.$msg('保存成功', {icon: 'success'}).then(() => {
this.$toBack(2);
})
})
}).catch(err => uni.hideLoading());
}
}
};

25
service/agreementArticle.js

@ -0,0 +1,25 @@
import request from '@/common/request.js'
// 关于我们
export async function aboutUs() {
return await request({
url: '/api/v1/content/about_us',
method: 'post'
})
}
// 快速评价的相关协议
export async function gradeAgreement() {
return await request({
url: '/api/v1/content/grade_agreement',
method: 'post'
})
}
// 用户隐私协议
export async function privacyAgreement() {
return await request({
url: '/api/v1/content/privacy_agreement',
method: 'post'
})
}

35
service/order.js

@ -1,10 +1,43 @@
import request from '@/common/request.js'
// 添加新的送评订单
// 查询用户订单列表
export async function orderList(data) {
return await request({
url: '/api/v1/order_list',
method: 'post',
data
})
}
// 取消订单
export async function cancelOrder(order_id) {
return await request({
url: '/api/v1/cancel_order',
method: 'post',
data: {
order_id
}
})
}
// 确认收货
export async function confirmOrder(order_id) {
return await request({
url: '/api/v1/confirm_order',
method: 'post',
data: {
order_id
}
})
}
// 下单支付
export async function doPay(order_id) {
return await request({
url: '/api/v1/do_pay',
method: 'post',
data: {
order_id
}
})
}
Loading…
Cancel
Save