uniapp(vue3)-小程序搭建与问题

文章介绍了uni-app项目的版本管理策略,包括开发、测试、上线三个分支。详细阐述了基础目录结构,如Vuex的store、组件、过滤器和公共方法的封装。还提到了分包的配置方法以及网络请求、错误处理的封装。此外,讨论了微信支付、图片上传等API的使用。

1.建立版本管理仓库(开发,测试,上线3个分支)

2.hubilder快速搭建uni项目

基础目录结构:

3.封装基础方法与组件

a.store--vuex搭建

b.components--组件封装

c.filters--过滤器方法封装

d.subpkg--分包处理

e.common--公共方法封装(request,api,登录,支付,上传文件方法封装,data模拟数据)

分包:

(1)manifest.json文件启用分包:

 "optimization" : {
            "subPackages" : true //启用分包设置
   },

 (2)pages同目录建立subpkg

 (3)pages.json文件:pages同结构建立subPackages,配置如下:

 https:

this.$http(this.$api.searchApi, criteria).then(res => {
	console.log(res, '返回参数');
})

//是否显示加载框,是否需要传入token,页面上是否接收错误code(返回错误页面有处理)
import {toast,showConfirm,tansParams} from './functions.js'
export function https(opts, data) {
	if (data && data.isLoading) {
		uni.showLoading({
			mask: true,
			title: '请求中...'
		})
	}
	var that = this;
	let httpDefaultOpts = {
		url: opts.url,
		data: data,
		method: opts.method,
		header: opts.method == 'get' ? {
			'X-Requested-With': 'XMLHttpRequest',
			"Accept": "application/json",
			"Content-Type": "application/json; charset=UTF-8"
		} : {
			'Content-Type': "application/json"
		},
		dataType: 'json',
		timeout: 10000,
	}
	// 判断是否使用token
	let token = uni.getStorageSync('userInfo').token;
	if (token != undefined && token != null && token != '') {
		httpDefaultOpts.header.accessToken = token;
	}
	let promise = new Promise(function(resolve, reject) {
		uni.request(httpDefaultOpts).then(
			(res) => {
				uni.hideLoading()
				if (res.data.code == 10005) {
					that.$store.commit("userInfo/setInfo",'');
					// 拦截登录情况
					resolve(res.data);
					return
				}
				if (res.statusCode == 404) {
					toast('无法访问系统资源');
					return
				}
				if (res.statusCode == 401) {
					toast('认证失败,无法访问系统资源');
					return
				}
				if (res.statusCode == 400) {
					toast(res.data.error);
					return
				}
				if (res.statusCode == 500) {
					toast(res.data.error);
					return
				}
				
				resolve(res.data)
			}
		).catch(
			(response) => {
				uni.hideLoading()
				toast('接口连接异常或请求超时')
				reject(response)
			}
		)
	})
	return promise
}

api:

export const rootUrl="";  //管理服务器
export const rootUrlImg="";  //静态资源管理服务器
export const api = {
	// 登录
	login:{
		url: rootUrl + '/auth/wechatlogin.api',
		method: 'POST',
        checkToken:true
	}
}

ios底部安全距离设置:

padding-bottom: calc(0rpx + constant(safe-area-inset-bottom));
padding-bottom: calc(0rpx + env(safe-area-inset-bottom));

scroll-view下拉刷新失败原因:

        动态赋予scroll-view高度的时候,scroll-view的下拉刷新功能可能会只能拉到一半就卡住,并且无法下拉:可以加入v-if,切换时重新渲染改变scroll-view

底部tabar加入角标:例如购物车:

uni.setTabBarBadge({
  index: 0,
  text: '1'
})

uni返回上一个页面调用时调用返回页面中的方法:

uni.navigateBack({
	delta: 1, //返回层数,2则上上页
})
const pages = getCurrentPages(); //获取页面栈
if(pages.length>1){
		const beforePage = pages[pages.length - 2]; //前一个页面
		console.log(beforePage.$vm)
		beforePage.$vm.ordeQuery1(); //前一个页面方法
}

手机号授权

<button open-type="getPhoneNumber" @getphonenumber.stop.prevent="getPhoneNumber">去登录</button>

微信支付:

uni.requestPayment({
		provider: 'wxpay',
		timeStamp: res.item.data.timeStamp,
		nonceStr: res.item.data.nonceStr,
		package: res.item.data.package,
		signType: res.item.data.signType,
		paySign: res.item.data.paySign,
		success: function(res) {
			
		},
		fail: function(err) {
			console.log('fail:' + JSON.stringify(err));
		}
})

图片上传:

		uni.chooseImage({
			sourceType: ['camera', 'album'],
			success: function (res) {
				uni.uploadFile({
					url: api.fileUpload.url,
					fileType: 'image',
					filePath: res.tempFilePaths[0],
					name: 'mf',
					header:{accessToken:userInfo.token,"Content-Type": "multipart/form-data","Accept": "application/json",},
					success: (res) => {
						resolve(res.data);
					},
					fail: (err) => {
						uni.showToast({
							title: '上传失败',
							icon: 'none'
						})
						console.log('上传失败', err)
					}
				})
		
			}
		});

隐藏小程序自带标题栏:

		{
			"path": "pages/shop/shop-my/index",
			"style": {
				"navigationBarTitleText": "个人中心",
				"enablePullDownRefresh": false,
				"onReachBottomDistance": 300,
				"navigationStyle": "custom",
				"app-plus": {
					"titleNView": false
				}
			}
		},

分享:

<button open-type="share">分享微信好友</button>

created同级:
async onShareAppMessage(res) {
	var _this = this
	return new Promise((reslove, reject) => {
		reslove({
			title: _this.aqualiveGoodsDetail.goodsname,
			path: '/subpkg/shop-home/goods-detail?id=' + _this.goodsno
		})
	})
}

父组件调子组件中得方法:

子组件:
<uni-drawer ref="showRight" mode="right" :mask-click="true">uni-drawer</uni-drawer>

父组件中:
setup(){
    const showRight = ref()
    return {
		showRight,
    };
},
method:{
    showDrawer() {
		this.showRight.open();
	},
}

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值