From b8de6ba4c3466a0de08089e519dd2c8cfe30a0c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=83=E8=82=89=E7=9A=84=E9=A5=BA=E5=AD=90?= <2659004835@qq.com> Date: Sat, 21 May 2022 13:28:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=83=A8=E5=88=86=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E4=BD=BF=E7=94=A8=E8=AF=B4=E6=98=8E=E3=80=81=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E8=B4=AD=E7=89=A9=E8=BD=A6=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/containers/readme.md | 37 ++ .../custom-preview/img-video-preview.vue | 155 ++++++++ components/foot-tabs/readme.md | 37 ++ .../function-list/column/column-function.vue | 78 ++++ components/function-list/column/readme.md | 43 +++ .../gong-ge/gong-ge-function.vue | 86 +++++ components/function-list/gong-ge/readme.md | 47 +++ .../function-list/swiper-gong-ge/readme.md | 57 +++ .../swiper-gong-ge/swiper-gong-ge.vue | 173 +++++++++ components/nothing/readme.md | 19 + .../scroll-views/scroll-text-slide readme.md | 30 ++ components/shopping-carts/cart-one.vue | 267 +++++++++++++ components/shopping-carts/cart-slide.vue | 362 ++++++++++++++++++ components/status-navs/readme.md | 43 +++ components/status-navs/status-nav.vue | 32 +- components/swiper/readme.md | 34 ++ jsFile/array/array.js | 7 +- jsFile/img/yy-img.js | 168 ++++++++ jsFile/permission/permission.js | 272 +++++++++++++ jsFile/permission/readme.md | 51 +++ jsFile/video/yy-video.js | 138 +++++++ pages.json | 36 ++ .../shopping-cart-slide.vue | 26 ++ pagesA/shopping-cart/shopping-cart.vue | 30 ++ pagesA/yy-img/yy-img.vue | 60 +++ pagesA/yy-video/yy-video.vue | 63 +++ 26 files changed, 2326 insertions(+), 25 deletions(-) create mode 100644 components/containers/readme.md create mode 100644 components/custom-preview/img-video-preview.vue create mode 100644 components/foot-tabs/readme.md create mode 100644 components/function-list/column/column-function.vue create mode 100644 components/function-list/column/readme.md create mode 100644 components/function-list/gong-ge/gong-ge-function.vue create mode 100644 components/function-list/gong-ge/readme.md create mode 100644 components/function-list/swiper-gong-ge/readme.md create mode 100644 components/function-list/swiper-gong-ge/swiper-gong-ge.vue create mode 100644 components/nothing/readme.md create mode 100644 components/scroll-views/scroll-text-slide readme.md create mode 100644 components/shopping-carts/cart-one.vue create mode 100644 components/shopping-carts/cart-slide.vue create mode 100644 components/status-navs/readme.md create mode 100644 components/swiper/readme.md create mode 100644 jsFile/img/yy-img.js create mode 100644 jsFile/permission/permission.js create mode 100644 jsFile/permission/readme.md create mode 100644 jsFile/video/yy-video.js create mode 100644 pagesA/shopping-cart-slide/shopping-cart-slide.vue create mode 100644 pagesA/shopping-cart/shopping-cart.vue create mode 100644 pagesA/yy-img/yy-img.vue create mode 100644 pagesA/yy-video/yy-video.vue diff --git a/components/containers/readme.md b/components/containers/readme.md new file mode 100644 index 0000000..c2b37f6 --- /dev/null +++ b/components/containers/readme.md @@ -0,0 +1,37 @@ +第一步:引入组件 + + import statusContainer from '@/components/containers/status-container.vue'; + +第二步:注册组件 + + export default { + components:{ + statusContainer + } + } + +第三步:使用组件 + + + +参数说明 + + ifTitle:是否显示标题,默认true + titlet:标题文字,默认标题 + ifTitleCenter:标题是否居中,默认居中 + titlec:标题颜色,默认#000000 + ifReturn:是否显示返回键,默认显示 + returnc:返回键颜色,默认#333333 + backgroundc:导航栏背景色,默认#FFFFFF \ No newline at end of file diff --git a/components/custom-preview/img-video-preview.vue b/components/custom-preview/img-video-preview.vue new file mode 100644 index 0000000..e2800fa --- /dev/null +++ b/components/custom-preview/img-video-preview.vue @@ -0,0 +1,155 @@ + + + + + \ No newline at end of file diff --git a/components/foot-tabs/readme.md b/components/foot-tabs/readme.md new file mode 100644 index 0000000..a21cbf8 --- /dev/null +++ b/components/foot-tabs/readme.md @@ -0,0 +1,37 @@ +第一步:引入组件 + + import footTab from '@/components/foot-tabs/foot-tab.vue'; + +第二步:注册组件 + + export default { + components:{ + footTab + } + } + +第三步:使用组件 + + + +参数说明 + + current:当前选中项,默认0表示第一项 + isIcon:哪个图标突出,默认2表示从索引0开始数,第二个图标突出 + backgroundImage:底部导航背景图片,默认空值 + backgroundColor:背景颜色,默认#FFFFFF + isGradualChange:是否开启背景颜色渐变,默认开启 + direction:渐变方向,默认right top + colorOne:第一种颜色,默认#FFFFFF + colorTwo:第二种颜色,默认#FFFFFF + colorThree:第三种颜色,默认#FFFFFF + colorFour:第四种颜色,默认#FFFFFF + boxShadowNum:阴影大小0~1之间 0表示没有阴影,默认0.1 \ No newline at end of file diff --git a/components/function-list/column/column-function.vue b/components/function-list/column/column-function.vue new file mode 100644 index 0000000..314aebc --- /dev/null +++ b/components/function-list/column/column-function.vue @@ -0,0 +1,78 @@ + + + + + \ No newline at end of file diff --git a/components/function-list/column/readme.md b/components/function-list/column/readme.md new file mode 100644 index 0000000..40af453 --- /dev/null +++ b/components/function-list/column/readme.md @@ -0,0 +1,43 @@ +第一步:引入组件 + + import columnFunction from '@/components/function-list/column/column-function.vue'; + +第二步:注册组件 + + export default { + components:{ + columnFunction + } + } + +第三步:使用组件 + + + +参数说明 + + list:列表数据,默认以下数组: + [ + {iconsrc:'',iconWidth:60,iconHeight:60,title:'标题一',content:'',contentColor:'#999999',ifNext:true}, + {iconsrc:'',iconWidth:60,iconHeight:60,title:'标题二',content:'',contentColor:'#999999',ifNext:true}, + {iconsrc:'',iconWidth:60,iconHeight:60,title:'标题三',content:'',contentColor:'#999999',ifNext:true}, + ] + titlec:标题颜色,默认#000000 + ifIcon:是否显示左侧图标,默认false + ifLine:是否显示下划线,默认true + linec:下划线颜色,默认#EEEEEE + ifLastLine:是否显示最后一条下划线,默认true + +方法使用 + + export default { + methods:{ + chooseEv(obj) { + console.log(obj); + }, + } + } \ No newline at end of file diff --git a/components/function-list/gong-ge/gong-ge-function.vue b/components/function-list/gong-ge/gong-ge-function.vue new file mode 100644 index 0000000..e8bd663 --- /dev/null +++ b/components/function-list/gong-ge/gong-ge-function.vue @@ -0,0 +1,86 @@ + + + + \ No newline at end of file diff --git a/components/function-list/gong-ge/readme.md b/components/function-list/gong-ge/readme.md new file mode 100644 index 0000000..d00645b --- /dev/null +++ b/components/function-list/gong-ge/readme.md @@ -0,0 +1,47 @@ +第一步:引入组件 + + import gongGeFunction from '@/components/function-list/gong-ge/gong-ge-function.vue'; + +第二步:注册组件 + + export default { + components:{ + gongGeFunction + } + } + +第三步:使用组件 + + + +参数说明 + + list:列表数据,默认以下数组: + [ + {url:'',iconsrc:'',iconWidth:60,iconHeight:60,title:'标题一'}, + {url:'',iconsrc:'',iconWidth:60,iconHeight:60,title:'标题二'}, + {url:'',iconsrc:'',iconWidth:60,iconHeight:60,title:'标题三'}, + {url:'',iconsrc:'',iconWidth:60,iconHeight:60,title:'标题四'}, + {url:'',iconsrc:'',iconWidth:60,iconHeight:60,title:'标题五'}, + {url:'',iconsrc:'',iconWidth:60,iconHeight:60,title:'标题五'}, + {url:'',iconsrc:'',iconWidth:60,iconHeight:60,title:'标题五'}, + ] + rowNum:一排显示数量,默认5 + titlec:标题颜色,默认#000000 + fonts:字体大小,默认28rpx + titleTop:字体距离图标的距离,默认20rpx + itemTop:item的顶部距离,默认30rpx + +方法使用 + + export default { + methods:{ + chooseGe(obj) { + console.log(obj); + }, + } + } \ No newline at end of file diff --git a/components/function-list/swiper-gong-ge/readme.md b/components/function-list/swiper-gong-ge/readme.md new file mode 100644 index 0000000..f486743 --- /dev/null +++ b/components/function-list/swiper-gong-ge/readme.md @@ -0,0 +1,57 @@ +第一步:引入组件 + + import swiperGongGe from '@/components/function-list/swiper-gong-ge/swiper-gong-ge.vue'; + +第二步:注册组件 + + export default { + components:{ + swiperGongGe + } + } + +第三步:使用组件 + + + +参数说明 + + list:列表数据,默认以下数组: + [ + [ + {url:'',iconsrc:'/static/tabbar/icon-select-person.png',iconWidth:60,iconHeight:60,title:'标题一'}, + {url:'',iconsrc:'/static/tabbar/icon-select-fun.png',iconWidth:60,iconHeight:60,title:'标题二'}, + {url:'',iconsrc:'/static/tabbar/icon-select-home.png',iconWidth:60,iconHeight:60,title:'标题三'}, + {url:'',iconsrc:'/static/tabbar/icon-select-news.png',iconWidth:60,iconHeight:60,title:'标题四'}, + {url:'',iconsrc:'/static/tabbar/icon-select-news.png',iconWidth:60,iconHeight:60,title:'标题四'}, + {url:'',iconsrc:'/static/tabbar/icon-select-news.png',iconWidth:60,iconHeight:60,title:'标题四'}, + ], + [ + {url:'',iconsrc:'/static/tabbar/icon-select-person.png',iconWidth:60,iconHeight:60,title:'标题一'}, + {url:'',iconsrc:'/static/tabbar/icon-select-fun.png',iconWidth:60,iconHeight:60,title:'标题二'}, + {url:'',iconsrc:'/static/tabbar/icon-select-home.png',iconWidth:60,iconHeight:60,title:'标题三'}, + {url:'',iconsrc:'/static/tabbar/icon-scan.png',iconWidth:60,iconHeight:60,title:'标题五'}, + ] + ] + ifAutoplay:是否自动轮播,默认false + rowNum:一排显示数量,默认5 + titlec:标题颜色,默认#000000 + fonts:字体大小,默认28rpx + titleTop:字体距离图标的距离,默认20rpx + itemTop:item的顶部距离,默认30rpx + activeStop:选中时指示点的颜色,默认rgba(0,0,0,1) + moStop:未选中时指示点的颜色,默认rgba(0,0,0,.2) + +方法使用 + + export default { + methods:{ + chooseGe(obj) { + console.log(obj); + }, + } + } \ No newline at end of file diff --git a/components/function-list/swiper-gong-ge/swiper-gong-ge.vue b/components/function-list/swiper-gong-ge/swiper-gong-ge.vue new file mode 100644 index 0000000..97e4296 --- /dev/null +++ b/components/function-list/swiper-gong-ge/swiper-gong-ge.vue @@ -0,0 +1,173 @@ + + + + \ No newline at end of file diff --git a/components/nothing/readme.md b/components/nothing/readme.md new file mode 100644 index 0000000..b3ab5cd --- /dev/null +++ b/components/nothing/readme.md @@ -0,0 +1,19 @@ + + diff --git a/components/scroll-views/scroll-text-slide readme.md b/components/scroll-views/scroll-text-slide readme.md new file mode 100644 index 0000000..6a36ca9 --- /dev/null +++ b/components/scroll-views/scroll-text-slide readme.md @@ -0,0 +1,30 @@ +第一步:引入组件 + + import scrollTextSlide from '@/components/scroll-views/scroll-text-slide.vue'; + +第二步:注册组件 + + export default { + components:{ + scrollTextSlide + } + } + +第三步:使用组件 + + + +参数说明 + + list:数据列表,默认['全部', '测试', '测试宽度', '测试宽度三号', '测试宽度四号小星星', '测试宽度五号'] + activeIndex:选中索引,默认0 + config:未选中、选中、下划线的样式,默认为以下对象: + { + color: '#999999',//默认时字体颜色 + activeColor: '#000000',//选中时字体颜色 + underLineColor: '#000000',//下滑线颜色 + } \ No newline at end of file diff --git a/components/shopping-carts/cart-one.vue b/components/shopping-carts/cart-one.vue new file mode 100644 index 0000000..49f020d --- /dev/null +++ b/components/shopping-carts/cart-one.vue @@ -0,0 +1,267 @@ + + + + + \ No newline at end of file diff --git a/components/shopping-carts/cart-slide.vue b/components/shopping-carts/cart-slide.vue new file mode 100644 index 0000000..13e514b --- /dev/null +++ b/components/shopping-carts/cart-slide.vue @@ -0,0 +1,362 @@ + + + + + diff --git a/components/status-navs/readme.md b/components/status-navs/readme.md new file mode 100644 index 0000000..6af41cc --- /dev/null +++ b/components/status-navs/readme.md @@ -0,0 +1,43 @@ +第一步:引入组件 + + import statusNav from '@/components/status-navs/status-nav.vue'; + +第二步:注册组件 + + export default { + components:{ + statusNav + } + } + +第三步:使用组件 + + + +参数说明 + + ifTitle:是否显示标题,默认true + navBarTitle:导航栏标题,默认空值 + ifCenter:标题是否居中,默认居中 + titleColor:标题颜色,默认#000000 + ifReturn:是否显示返回键,默认显示 + returnc:返回键颜色,默认#333333 + backgroudColor:状态栏、导航栏背景颜色,默认#FFFFFF + navBarHeight:导航栏高度,默认40px + clipNumber:标题最多几行显示,默认1 + marginBottom:底部距离内容多高,默认20rpx \ No newline at end of file diff --git a/components/status-navs/status-nav.vue b/components/status-navs/status-nav.vue index c0f0af6..0ef683a 100644 --- a/components/status-navs/status-nav.vue +++ b/components/status-navs/status-nav.vue @@ -88,11 +88,6 @@ type:Boolean, default: true }, - // 来自哪里 - fromWhere: { - type:Number, - default:0 - }, // 底部距离内容多高 marginBottom: { type:String, @@ -137,25 +132,14 @@ }, //返回事件 backEv(){ - if(uni.getStorageSync('outside')*1==2){ - this.fromWhere = uni.getStorageSync('outside')*1; - } - switch (this.fromWhere){ - case 1: - case 2: - uni.navigateTo({ - url:'/pages/tabbar/pagehome/pagehome' - }) - uni.setStorageSync('outside',0) - break; - case 0: - uni.navigateBack({ - delta:1 - }) - break; - default: - break; - } + uni.navigateBack({ + delta:1, + success: (res) => {},fail: (err) => { + uni.reLaunch({ + url:'/pages/tabbar/pagehome/pagehome' + }) + } + }) } } } diff --git a/components/swiper/readme.md b/components/swiper/readme.md new file mode 100644 index 0000000..33d4513 --- /dev/null +++ b/components/swiper/readme.md @@ -0,0 +1,34 @@ +第一步:引入组件 + + import swiperPu from '@/components/swipers/swiper-pu.vue'; + +第二步:注册组件 + + export default { + components:{ + 'custom-swiper':swiperPu + } + } + +第三步:使用组件 + + + +参数说明 + + isplay:是否自动轮播,默认不轮播 + isDot:是否显示指示点,默认显示 + bannerList:默认轮播图片,默认值为以下数组: + [ + {imgSrc:'https://s6.jpg.cm/2022/02/14/L4oDhy.jpg',url:'',isVideo:false,poster:''}, + {imgSrc:'https://s6.jpg.cm/2022/02/14/L4oDhy.jpg',url:'',isVideo:false,poster:''}, + {imgSrc:'https://s6.jpg.cm/2022/02/14/L4oDhy.jpg',url:'',isVideo:false,poster:''}, + ] + newHeight:swiper的高,默认200px + newBottom:指示点距离底部位置,默认18px + newRadius:图片圆角,默认0px + browseP:是否可预览,默认不能预览 \ No newline at end of file diff --git a/jsFile/array/array.js b/jsFile/array/array.js index 25d93bb..ee588c5 100644 --- a/jsFile/array/array.js +++ b/jsFile/array/array.js @@ -1,5 +1,10 @@ const arrTool = { - oneArrToTwo(arr, size) { // arr是一维数组 size是二维数组包含几条数据 + /** + * @description 一维数组变二维数组 + * @param {Array} arr + * @param {Number} size + */ + oneArrToTwo(arr, size) { var arrTwo = [] for (var i = 0; i < arr.length; i = i + size) { arrTwo.push(arr.slice(i, i + size)) diff --git a/jsFile/img/yy-img.js b/jsFile/img/yy-img.js new file mode 100644 index 0000000..f2c4dd6 --- /dev/null +++ b/jsFile/img/yy-img.js @@ -0,0 +1,168 @@ +const imgTools = { + /** + * @description 图片多选,并返回图片数组 + * @param {Number} count 1 + */ + chooseImg(count=1) { + return new Promise((resolve,reject)=>{ + let imgArr = []; + uni.chooseImage({ + count:count, + sizeType:['compressed'], + sourceType:['album'], + success: (res) => { + let files = res.tempFilePaths + files.forEach(item=>{ + imgArr.push(item); + }) + resolve(imgArr); + } + }) + }) + }, + /** + * @description 选择图片并压缩图片 + * @param {Number} cutQuality 80 + * @param {Number} cutWidth 200 + * @param {Number} cutWidth 200 + */ + chooseCompressImg(cutQuality=80,cutWidth=200,cutHeight=200) { + return new Promise((resolve, reject) => { + uni.chooseImage({ + count:1, + sourceType:['album','camera'], + extension:['png'],//选择图片类型 + crop:{//图像裁剪参数,设置后 sizeType 失效 + quality:cutQuality,//1~100 + width:cutWidth, + height:cutHeight, + resize:false//是否将width和height作为裁剪保存图片真实的像素值。默认值为true。注:设置为false时在裁剪编辑界面显示图片的像素值,设置为true时不显示 + }, + success: (res) => { + uni.compressImage({ + src: res.tempFilePaths[0], + quality:100,//压缩质量,范围0~100,数值越小,质量越低,压缩率越高(仅对jpg有效) + width:cutWidth, + height:cutHeight, + rotate:0,//旋转度数,范围0~360 + success: res => { + resolve(res.tempFilePath) + } + }) + } + }) + }) + }, + /** + * @description 预览图片 + * @param {Number} current 0 + * @param {Array} imgArr [] + */ + previewImg(current=0,imgArr=[]) { + uni.previewImage({ + current:current, + urls: imgArr, + indicator:'number',//图片指示器样式,可取值:"default" - 底部圆点指示器; "number" - 顶部数字指示器; "none" - 不显示指示器。 + loop:false,//是否可循环预览,默认值为 false + longPressActions: { + itemList: ['发送给朋友', '保存图片', '收藏'], + itemColor:'#000000',//按钮的文字颜色,字符串格式,默认为"#000000" + success:(data)=> { + // console.log('选中了第' + (data.tapIndex + 1) + '个按钮,第' + (data.index + 1) + '张图片'); + switch (data.tapIndex){ + case 0: + // 发送给朋友 + break; + case 1: + // 保存图片 + this.saveImg(imgArr[data.index]); + break; + case 2: + // 收藏 + break; + } + } + } + }); + }, + /** + * @description 保存图片 + * @param {String} src + */ + saveImg(src) { + uni.saveImageToPhotosAlbum({ + filePath: src, + success: ()=> {} + }); + }, + /** + * @description 压缩图片 + * @param {String} imgsrc + * @param {Number} quality 裁剪质量(1~100),默认:80 + * @param {Number} width 裁剪宽度,默认:不设置 + * @param {Number} height 裁剪宽度,默认:不设置 + * @param {Number} rotate 裁剪角度(0~360),默认:0 + */ + compressImg(imgsrc, quality=80, width='', height='', rotate=0) { + return new Promise((resolve, reject)=>{ + uni.compressImage({ + src: imgsrc, + quality,//压缩质量,范围0~100,数值越小,质量越低,压缩率越高(仅对jpg有效) + width, + height, + rotate,//旋转度数,范围0~360 + success: res => { + resolve(res.tempFilePath); + } + }) + }) + }, + /** + * @description 获取图片信息 + * @param {String} src + */ + getImgInfo(src) { + return new Promise((resolve, reject)=>{ + uni.getImageInfo({ + src, + success: (image)=> { + resolve(image) + } + }); + }) + }, + /** + * @description 选择并裁剪图片 + * @param {Number} cutQuality 裁剪质量(1~100),默认:100 + * @param {Number} cutWidth 裁剪宽度,默认:200 + * @param {Number} cutHeight 裁剪高度,默认:200 + * @param {Number} cutRotate 裁剪角度(0~360),默认:0 + */ + cutImg(cutQuality=100,cutWidth=200,cutHeight=200, cutRotate=0) { + return new Promise((resolve, reject)=>{ + uni.chooseImage({ + count:1, + sourceType:['album','camera'], + crop:{//图像裁剪参数,设置后 sizeType 失效 + quality:cutQuality,//1~100 + width:cutWidth, + height:cutHeight, + resize:false//是否将width和height作为裁剪保存图片真实的像素值。默认值为true。注:设置为false时在裁剪编辑界面显示图片的像素值,设置为true时不显示 + }, + success: (res) => { + uni.compressImage({ + src: res.tempFilePaths[0], + quality:100,//压缩质量,范围0~100,数值越小,质量越低,压缩率越高(仅对jpg有效) + width:cutWidth, + height:cutHeight, + rotate:cutRotate,//旋转度数,范围0~360 + success: res => { + resolve(res.tempFilePath) + } + }) + } + }) + }) + } +} +export default imgTools; \ No newline at end of file diff --git a/jsFile/permission/permission.js b/jsFile/permission/permission.js new file mode 100644 index 0000000..9981504 --- /dev/null +++ b/jsFile/permission/permission.js @@ -0,0 +1,272 @@ +/** + * 本模块封装了Android、iOS的应用权限判断、打开应用权限设置界面、以及位置系统服务是否开启 + */ + +var isIos +// #ifdef APP-PLUS +isIos = (plus.os.name == "iOS") +// #endif + +// 判断推送权限是否开启 +function judgeIosPermissionPush() { + var result = false; + var UIApplication = plus.ios.import("UIApplication"); + var app = UIApplication.sharedApplication(); + var enabledTypes = 0; + if (app.currentUserNotificationSettings) { + var settings = app.currentUserNotificationSettings(); + enabledTypes = settings.plusGetAttribute("types"); + console.log("enabledTypes1:" + enabledTypes); + if (enabledTypes == 0) { + console.log("推送权限没有开启"); + } else { + result = true; + console.log("已经开启推送功能!") + } + plus.ios.deleteObject(settings); + } else { + enabledTypes = app.enabledRemoteNotificationTypes(); + if (enabledTypes == 0) { + console.log("推送权限没有开启!"); + } else { + result = true; + console.log("已经开启推送功能!") + } + console.log("enabledTypes2:" + enabledTypes); + } + plus.ios.deleteObject(app); + plus.ios.deleteObject(UIApplication); + return result; +} + +// 判断定位权限是否开启 +function judgeIosPermissionLocation() { + var result = false; + var cllocationManger = plus.ios.import("CLLocationManager"); + var status = cllocationManger.authorizationStatus(); + result = (status != 2) + console.log("定位权限开启:" + result); + // 以下代码判断了手机设备的定位是否关闭,推荐另行使用方法 checkSystemEnableLocation + /* var enable = cllocationManger.locationServicesEnabled(); + var status = cllocationManger.authorizationStatus(); + console.log("enable:" + enable); + console.log("status:" + status); + if (enable && status != 2) { + result = true; + console.log("手机定位服务已开启且已授予定位权限"); + } else { + console.log("手机系统的定位没有打开或未给予定位权限"); + } */ + plus.ios.deleteObject(cllocationManger); + return result; +} + +// 判断麦克风权限是否开启 +function judgeIosPermissionRecord() { + var result = false; + var avaudiosession = plus.ios.import("AVAudioSession"); + var avaudio = avaudiosession.sharedInstance(); + var permissionStatus = avaudio.recordPermission(); + console.log("permissionStatus:" + permissionStatus); + if (permissionStatus == 1684369017 || permissionStatus == 1970168948) { + console.log("麦克风权限没有开启"); + } else { + result = true; + console.log("麦克风权限已经开启"); + } + plus.ios.deleteObject(avaudiosession); + return result; +} + +// 判断相机权限是否开启 +function judgeIosPermissionCamera() { + var result = false; + var AVCaptureDevice = plus.ios.import("AVCaptureDevice"); + var authStatus = AVCaptureDevice.authorizationStatusForMediaType('vide'); + console.log("authStatus:" + authStatus); + if (authStatus == 3) { + result = true; + console.log("相机权限已经开启"); + } else { + console.log("相机权限没有开启"); + } + plus.ios.deleteObject(AVCaptureDevice); + return result; +} + +// 判断相册权限是否开启 +function judgeIosPermissionPhotoLibrary() { + var result = false; + var PHPhotoLibrary = plus.ios.import("PHPhotoLibrary"); + var authStatus = PHPhotoLibrary.authorizationStatus(); + console.log("authStatus:" + authStatus); + if (authStatus == 3) { + result = true; + console.log("相册权限已经开启"); + } else { + console.log("相册权限没有开启"); + } + plus.ios.deleteObject(PHPhotoLibrary); + return result; +} + +// 判断通讯录权限是否开启 +function judgeIosPermissionContact() { + var result = false; + var CNContactStore = plus.ios.import("CNContactStore"); + var cnAuthStatus = CNContactStore.authorizationStatusForEntityType(0); + if (cnAuthStatus == 3) { + result = true; + console.log("通讯录权限已经开启"); + } else { + console.log("通讯录权限没有开启"); + } + plus.ios.deleteObject(CNContactStore); + return result; +} + +// 判断日历权限是否开启 +function judgeIosPermissionCalendar() { + var result = false; + var EKEventStore = plus.ios.import("EKEventStore"); + var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(0); + if (ekAuthStatus == 3) { + result = true; + console.log("日历权限已经开启"); + } else { + console.log("日历权限没有开启"); + } + plus.ios.deleteObject(EKEventStore); + return result; +} + +// 判断备忘录权限是否开启 +function judgeIosPermissionMemo() { + var result = false; + var EKEventStore = plus.ios.import("EKEventStore"); + var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(1); + if (ekAuthStatus == 3) { + result = true; + console.log("备忘录权限已经开启"); + } else { + console.log("备忘录权限没有开启"); + } + plus.ios.deleteObject(EKEventStore); + return result; +} + +// Android权限查询 +function requestAndroidPermission(permissionID) { + return new Promise((resolve, reject) => { + plus.android.requestPermissions( + [permissionID], // 理论上支持多个权限同时查询,但实际上本函数封装只处理了一个权限的情况。有需要的可自行扩展封装 + function(resultObj) { + var result = 0; + for (var i = 0; i < resultObj.granted.length; i++) { + var grantedPermission = resultObj.granted[i]; + console.log('已获取的权限:' + grantedPermission); + result = 1 + } + for (var i = 0; i < resultObj.deniedPresent.length; i++) { + var deniedPresentPermission = resultObj.deniedPresent[i]; + console.log('拒绝本次申请的权限:' + deniedPresentPermission); + result = 0 + } + for (var i = 0; i < resultObj.deniedAlways.length; i++) { + var deniedAlwaysPermission = resultObj.deniedAlways[i]; + console.log('永久拒绝申请的权限:' + deniedAlwaysPermission); + result = -1 + } + resolve(result); + // 若所需权限被拒绝,则打开APP设置界面,可以在APP设置界面打开相应权限 + // if (result != 1) { + // gotoAppPermissionSetting() + // } + }, + function(error) { + console.log('申请权限错误:' + error.code + " = " + error.message); + resolve({ + code: error.code, + message: error.message + }); + } + ); + }); +} + +// 使用一个方法,根据参数判断权限 +function judgeIosPermission(permissionID) { + if (permissionID == "location") { + return judgeIosPermissionLocation() + } else if (permissionID == "camera") { + return judgeIosPermissionCamera() + } else if (permissionID == "photoLibrary") { + return judgeIosPermissionPhotoLibrary() + } else if (permissionID == "record") { + return judgeIosPermissionRecord() + } else if (permissionID == "push") { + return judgeIosPermissionPush() + } else if (permissionID == "contact") { + return judgeIosPermissionContact() + } else if (permissionID == "calendar") { + return judgeIosPermissionCalendar() + } else if (permissionID == "memo") { + return judgeIosPermissionMemo() + } + return false; +} + +// 跳转到**应用**的权限页面 +function gotoAppPermissionSetting() { + if (isIos) { + var UIApplication = plus.ios.import("UIApplication"); + var application2 = UIApplication.sharedApplication(); + var NSURL2 = plus.ios.import("NSURL"); + // var setting2 = NSURL2.URLWithString("prefs:root=LOCATION_SERVICES"); + var setting2 = NSURL2.URLWithString("app-settings:"); + application2.openURL(setting2); + + plus.ios.deleteObject(setting2); + plus.ios.deleteObject(NSURL2); + plus.ios.deleteObject(application2); + } else { + // console.log(plus.device.vendor); + var Intent = plus.android.importClass("android.content.Intent"); + var Settings = plus.android.importClass("android.provider.Settings"); + var Uri = plus.android.importClass("android.net.Uri"); + var mainActivity = plus.android.runtimeMainActivity(); + var intent = new Intent(); + intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); + var uri = Uri.fromParts("package", mainActivity.getPackageName(), null); + intent.setData(uri); + mainActivity.startActivity(intent); + } +} + +// 检查系统的设备服务是否开启 +// var checkSystemEnableLocation = async function () { +function checkSystemEnableLocation() { + if (isIos) { + var result = false; + var cllocationManger = plus.ios.import("CLLocationManager"); + var result = cllocationManger.locationServicesEnabled(); + console.log("系统定位开启:" + result); + plus.ios.deleteObject(cllocationManger); + return result; + } else { + var context = plus.android.importClass("android.content.Context"); + var locationManager = plus.android.importClass("android.location.LocationManager"); + var main = plus.android.runtimeMainActivity(); + var mainSvr = main.getSystemService(context.LOCATION_SERVICE); + var result = mainSvr.isProviderEnabled(locationManager.GPS_PROVIDER); + console.log("系统定位开启:" + result); + return result + } +} + +module.exports = { + judgeIosPermission: judgeIosPermission, + requestAndroidPermission: requestAndroidPermission, + checkSystemEnableLocation: checkSystemEnableLocation, + gotoAppPermissionSetting: gotoAppPermissionSetting +} diff --git a/jsFile/permission/readme.md b/jsFile/permission/readme.md new file mode 100644 index 0000000..06589f7 --- /dev/null +++ b/jsFile/permission/readme.md @@ -0,0 +1,51 @@ +第一步:引入js + + import permision from "@/jsFile/permission/permission.js"; + +第二步:使用js里的方法 + + let permisionID = ''; + + ios系统: + + permisionID:可取以下值 + location:位置权限 + camera:摄像头权限 + photoLibrary:相册权限 + record:麦克风权限 + push:推送权限 + contact:通讯录权限 + calendar:日历权限 + memo:备忘录权限 + + Android系统: + + permisionID:可取以下值 + android.permission.ACCESS_FINE_LOCATION:位置权限 + android.permission.ACCESS_COARSE_LOCATION:模糊位置权限(蓝牙\ble依赖) + android.permission.CAMERA:摄像头权限 + android.permission.READ_EXTERNAL_STORAGE:外部存储(含相册)读取权限 + android.permission.WRITE_EXTERNAL_STORAGE:外部存储(含相册)写入权限 + android.permission.RECORD_AUDIO:麦克风权限 + android.permission.READ_CONTACTS:通讯录读取权限 + android.permission.WRITE_CONTACTS:通讯录写入权限 + android.permission.READ_CALENDAR:日历读取权限 + android.permission.WRITE_CALENDAR:日历写入权限 + android.permission.READ_SMS:短信读取权限 + android.permission.SEND_SMS:短信发送权限 + android.permission.RECEIVE_SMS:接收新短信权限 + android.permission.READ_PHONE_STATE:获取手机识别码等信息的权限 + android.permission.CALL_PHONE:拨打电话权限 + android.permission.READ_CALL_LOG:获取通话记录权限 + + + let result = permision.judgeIosPermission(permisionID); + if(!result) { + //未开启权限,并前往应用设置 + permision.gotoAppPermissionSetting() + } + + + + + \ No newline at end of file diff --git a/jsFile/video/yy-video.js b/jsFile/video/yy-video.js new file mode 100644 index 0000000..9d0c7d7 --- /dev/null +++ b/jsFile/video/yy-video.js @@ -0,0 +1,138 @@ +const videoTools = { + /** + * @description 视频选择,并返回 + */ + chooseVideo() { + return new Promise((resolve,reject)=>{ + let videoObj = {}; + uni.chooseVideo({ + sourceType: ['camera', 'album'], + compressed:true,//是否压缩所选的视频源文件,默认值为 true,需要压缩。 + maxDuration:60,//拍摄视频最长拍摄时间,单位秒。最长支持 60 秒。 + camera: 'back',//'front'、'back',默认'back' + success: (res)=> { + console.log(res,'视频'); + // #ifdef H5 + videoObj = { + size:res.size,//视频大小 + path:res.name,//视频名称 + lastModified:res.tempFile.lastModified,//最后修改时间 + type:res.tempFile.type,//视频类型 + } + // #endif + + // #ifdef APP-PLUS || MP-WEIXIN + videoObj = { + size:res.size,//视频大小 + path:res.tempFilePath,//视频名称 + duration:res.duration,//播放总时长单位秒 + width:res.width,//视频宽 + height:res.height,//视频高 + } + // #endif + resolve(videoObj) + } + }); + }) + }, + /** + * @description 选择视频并压缩视频,不支持H5 + */ + chooseCompressVideo() { + return new Promise((resolve, reject)=>{ + uni.chooseVideo({ + sourceType: ['camera', 'album'], + compressed:true,//是否压缩所选的视频源文件,默认值为 true,需要压缩。 + maxDuration:60,//拍摄视频最长拍摄时间,单位秒。最长支持 60 秒。 + camera: 'back',//'front'、'back',默认'back' + success: (res)=> { + let exit = res.tempFilePath.split('.').includes('mp4'); + if(exit) { + // #ifdef APP-PLUS || MP-WEIXIN + uni.compressVideo({ + src:res.tempFilePath, + quality:'medium',//low:低 medium:中 high:高 + bitrate: 100000,//码率,单位 kbps + fps: 100,//帧率 + resolution:1,//相对于原视频的分辨率比例,取值范围(0, 1] + success: rescomp => { + resolve({path:rescomp.tempFilePath,size:rescomp.size}) + } + }) + // #endif + } else { + uni.showToast({title:'请选择mp4格式的视频',icon:'none'}) + } + } + }); + }) + }, + /** + * @description 预览视频,仅仅微信小程序生效 + * @param {Number} current 0 + * @param {Array} videoArr [{url:'',type:'video',poster:''}] + */ + previewVideo(current=0,videoArr=[]) { + // #ifdef MP-WEIXIN + uni.previewMedia({ + current:current, + sources:videoArr + }) + // #endif + }, + /** + * @description 保存视频,不支持H5 + * @param {String} src + */ + saveVideo(src) { + uni.saveVideoToPhotosAlbum({ + filePath: src, + success: ()=> {} + }); + }, + /** + * @description 压缩视频,不支持H5 + * @param {String} src + */ + compressVideo(src) { + return new Promise((resolve, reject)=>{ + // #ifdef APP-PLUS || MP-WEIXIN + uni.compressVideo({ + src, + quality:'medium',//low:低 medium:中 high:高 + bitrate: 100000,//码率,单位 kbps + fps: 100,//帧率 + resolution:1,//相对于原视频的分辨率比例,取值范围(0, 1] + success: rescomp => { + resolve({path:rescomp.tempFilePath,size:rescomp.size}) + } + }) + // #endif + }) + }, + /** + * @description 获取视频信息 + * @param {String} src + */ + getVideoInfo(src) { + return new Promise((resolve, reject)=>{ + uni.getVideoInfo({ + src, + success: (video)=> { + let obj = { + orientation:video.orientation,//画面方向 微信小程序、App(3.1.14+) + type:video.type,//视频格式 微信小程序、App(3.1.14+) + duration:video.duration,//视频长度 微信小程序、App(3.1.10+)、H5 + size:video.size,//视频大小,单位 kB 微信小程序、App(3.1.10+)、H5 + height:video.height,//视频的长,单位 px 微信小程序、App(3.1.10+)、H5 + width:video.width,//视频的宽,单位 px 微信小程序、App(3.1.10+)、H5 + fps:video.fps,//视频帧率 微信小程序、App(3.1.14+) + bitrate:video.bitrate,//视频码率,单位 kbps 微信小程序、App(3.1.14+) + } + resolve(obj) + } + }); + }) + } +} +export default videoTools; \ No newline at end of file diff --git a/pages.json b/pages.json index e6d094d..ba59743 100644 --- a/pages.json +++ b/pages.json @@ -88,6 +88,42 @@ "enablePullDownRefresh": false } } + ,{ + "path" : "yy-video/yy-video", + "style" : + { + "navigationBarTitleText": "", + "enablePullDownRefresh": false + } + + } + ,{ + "path" : "yy-img/yy-img", + "style" : + { + "navigationBarTitleText": "", + "enablePullDownRefresh": false + } + + } + ,{ + "path" : "shopping-cart/shopping-cart", + "style" : + { + "navigationBarTitleText": "", + "enablePullDownRefresh": false + } + + } + ,{ + "path" : "shopping-cart-slide/shopping-cart-slide", + "style" : + { + "navigationBarTitleText": "", + "enablePullDownRefresh": false + } + + } ] }, { //B包 diff --git a/pagesA/shopping-cart-slide/shopping-cart-slide.vue b/pagesA/shopping-cart-slide/shopping-cart-slide.vue new file mode 100644 index 0000000..8f49fc2 --- /dev/null +++ b/pagesA/shopping-cart-slide/shopping-cart-slide.vue @@ -0,0 +1,26 @@ + + + + + diff --git a/pagesA/shopping-cart/shopping-cart.vue b/pagesA/shopping-cart/shopping-cart.vue new file mode 100644 index 0000000..eb24eef --- /dev/null +++ b/pagesA/shopping-cart/shopping-cart.vue @@ -0,0 +1,30 @@ + + + + + diff --git a/pagesA/yy-img/yy-img.vue b/pagesA/yy-img/yy-img.vue new file mode 100644 index 0000000..05a4c74 --- /dev/null +++ b/pagesA/yy-img/yy-img.vue @@ -0,0 +1,60 @@ + + + + + diff --git a/pagesA/yy-video/yy-video.vue b/pagesA/yy-video/yy-video.vue new file mode 100644 index 0000000..b91abc1 --- /dev/null +++ b/pagesA/yy-video/yy-video.vue @@ -0,0 +1,63 @@ + + + + +