提交 48ade9e8 编写于 作者: DCloud_JSON's avatar DCloud_JSON 提交者: study夏羽

使用2.0版。当显示分享窗口时,监听返回操作(如:物理返回,全面屏手机侧滑)关闭分享窗口,而不是关闭当前页面。

上级 e2792f07
...@@ -142,6 +142,7 @@ uni-starter服务端使用[uni-config-center](https://ext.dcloud.net.cn/plugin?i ...@@ -142,6 +142,7 @@ uni-starter服务端使用[uni-config-center](https://ext.dcloud.net.cn/plugin?i
列举不需要强制登陆即可访问的页面完整路径(支持正则) 列举不需要强制登陆即可访问的页面完整路径(支持正则)
#### 配置示例 #### 配置示例
配置文件:`项目根目录/uni-starter.config.js` 配置文件:`项目根目录/uni-starter.config.js`
```js ```js
"router": { "router": {
"needLogin" : [ "needLogin" : [
...@@ -303,7 +304,7 @@ uni-starter集成了这个功能,你只需直接在`项目根目录/uni-starte ...@@ -303,7 +304,7 @@ uni-starter集成了这个功能,你只需直接在`项目根目录/uni-starte
- 而路由跳转方法不仅有`uni.navigateTo`还有`uni.redirectTo`,`uni.reLaunch`,`uni.switchTab` - 而路由跳转方法不仅有`uni.navigateTo`还有`uni.redirectTo`,`uni.reLaunch`,`uni.switchTab`
- 另外我们还希望控制直接跳转至哪种登陆类型 - 另外我们还希望控制直接跳转至哪种登陆类型
所以在uni-starter框架中我们这样定义: 所以在uni-starter框架中我们这样定义:
> uni-starter/common/appInit.js 的第228-280行 uni-starter/common/appInit.js 的第228-280行
```js ```js
const {"router": {needLogin,login} } = uniStarterConfig //需要登录的页面 const {"router": {needLogin,login} } = uniStarterConfig //需要登录的页面
let list = ["navigateTo", "redirectTo", "reLaunch", "switchTab"]; let list = ["navigateTo", "redirectTo", "reLaunch", "switchTab"];
......
## 1.1.18(2021-10-14)
使用2.0版`uni-share`。当显示分享窗口时,监听返回操作(如:物理返回,全面屏手机侧滑)关闭分享窗口,而不是关闭当前页面。
## 1.1.17(2021-10-12) ## 1.1.17(2021-10-12)
- 更新文档 - 更新文档
- 修复list页面where条件中缺少&符,导致的错误 - 修复list页面where条件中缺少&符,导致的错误
......
{ {
"name": "统一应用基本项目", "name": "统一应用基本项目",
"appid": "__UNI__D53040B", "appid": "请点击重新获取",
"description": "云端一体应用快速开发模版", "description": "云端一体应用快速开发模版",
"versionName": "1.0.0", "versionName": "1.0.0",
"versionCode": "100", "versionCode": "100",
"transformPx": false, "transformPx": false,
"app-plus": { "app-plus": {
"locales": { "locales": {
"en": { "en": {
// 英文 // 英文
"name": "uni-starter", // 应用名称 "name": "uni-starter", // 应用名称
"android": { "android": {
"strings": { "strings": {
//Android平台自定义字符串 //Android平台自定义字符串
"CustomKey": "CustomValue" "CustomKey": "CustomValue"
} }
}, },
"ios": { "ios": {
"privacyDescription": { "privacyDescription": {
//iOS平台隐私访问描述信息 //iOS平台隐私访问描述信息
"NSPhotoLibraryUsageDescription": "access to the user’s photo library(read)" "NSPhotoLibraryUsageDescription": "access to the user’s photo library(read)"
}, },
"infoPlist": { "infoPlist": {
//iOS平台自定义InfoPlist.strings //iOS平台自定义InfoPlist.strings
"CustomKey": "CustomValue" "CustomKey": "CustomValue"
} }
} }
}, },
"zh": { "zh": {
// 中文(简体) // 中文(简体)
"name": "统一应用基本项目" // 应用名称 "name": "统一应用基本项目" // 应用名称
} }
}, },
"privacy": { "privacy": {
"prompt": "template", "prompt": "template",
"template": { "template": {
"title": "服务协议和隐私政策", "title": "服务协议和隐私政策",
"message": "  请你务必审慎阅读、充分理解“服务协议”和“隐私政策”各条款,包括但不限于:为了更好的向你提供服务,我们需要收集你的设备标识、操作日志等信息用于分析、优化应用性能。<br/>  你可阅读<a href=\"https://ask.dcloud.net.cn/protocol.html\">《服务协议》</a>和<a href=\"https://ask.dcloud.net.cn/protocol.html\">《隐私政策》</a>了解详细信息。如果你同意,请点击下面按钮开始接受我们的服务。", "message": "  请你务必审慎阅读、充分理解“服务协议”和“隐私政策”各条款,包括但不限于:为了更好的向你提供服务,我们需要收集你的设备标识、操作日志等信息用于分析、优化应用性能。<br/>  你可阅读<a href=\"https://ask.dcloud.net.cn/protocol.html\">《服务协议》</a>和<a href=\"https://ask.dcloud.net.cn/protocol.html\">《隐私政策》</a>了解详细信息。如果你同意,请点击下面按钮开始接受我们的服务。",
"buttonAccept": "同意", "buttonAccept": "同意",
"buttonRefuse": "暂不同意" "buttonRefuse": "暂不同意"
} }
}, },
"compatible": { "compatible": {
"ignoreVersion": true "ignoreVersion": true
}, },
"usingComponents": true, "usingComponents": true,
"nvueStyleCompiler": "uni-app", "nvueStyleCompiler": "uni-app",
"compilerVersion": 3, "compilerVersion": 3,
"splashscreen": { "splashscreen": {
"alwaysShowBeforeRender": false, "alwaysShowBeforeRender": false,
"waiting": true, "waiting": true,
"autoclose": true, "autoclose": true,
"delay": 0 "delay": 0
}, },
"modules": { "modules": {
"Fingerprint": {}, "Fingerprint": {
"Share": {}, },
"OAuth": {}, "Share": {
"FaceID": {}, },
"Geolocation": {}, "OAuth": {
"Push": {} },
}, "FaceID": {
"distribute": { },
"android": { "Geolocation": {
"permissions": [ },
"<uses-feature android:name=\"android.hardware.camera\"/>", "Push": {
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>", }
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>", },
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>", "distribute": {
"<uses-permission android:name=\"android.permission.CAMERA\"/>", "android": {
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>", "permissions": [
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>", "<uses-feature android:name=\"android.hardware.camera\"/>",
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>", "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
"<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>", "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>", "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>", "<uses-permission android:name=\"android.permission.CAMERA\"/>",
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>", "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.USE_FINGERPRINT\"/>", "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
"<uses-permission android:name=\"android.permission.VIBRATE\"/>", "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>", "<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>" "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
], "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
"abiFilters": [ "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
"armeabi-v7a", "<uses-permission android:name=\"android.permission.USE_FINGERPRINT\"/>",
"arm64-v8a", "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
"x86" "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
] "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
}, ],
"ios": { "abiFilters": [
"capabilities": { "armeabi-v7a",
"entitlements": { "arm64-v8a",
"com.apple.developer.associated-domains": [ "x86"
"applinks:static-76ce2c5e-31c7-4d81-8fcf-ed1541ecbc6e.bspapp.com" ]
] },
} "ios": {
} "capabilities": {
}, "entitlements": {
"sdkConfigs": { "com.apple.developer.associated-domains": [
"oauth": { "applinks:static-76ce2c5e-31c7-4d81-8fcf-ed1541ecbc6e.bspapp.com"
"apple": {}, ]
"weixin": { }
"appid": "", }
"appsecret": "", },
"UniversalLinks": "" "sdkConfigs": {
}, "oauth": {
"univerify": {} "apple": {
}, },
"privacy": { "weixin": {
"prompt": "template", "appid": "",
"template": { "appsecret": "",
"title": "服务协议和隐私政策", "UniversalLinks": ""
"message": "  请你务必审慎阅读、充分理解“服务协议”和“隐私政策”各条款,包括但不限于:为了更好的向你提供服务,我们需要收集你的设备标识、操作日志等信息用于分析、优化应用性能。<br/>  你可阅读<a href=\"https://ask.dcloud.net.cn/protocol.html\">《服务协议》</a>和<a href=\"https://ask.dcloud.net.cn/protocol.html\">《隐私政策》</a>了解详细信息。如果你同意,请点击下面按钮开始接受我们的服务。", },
"buttonAccept": "同意", "univerify": {
"buttonRefuse": "暂不同意" }
} },
}, "ad": {
"compatible": { },
"ignoreVersion": true "share": {
}, "weixin": {
"usingComponents": true, "appid": "",
"nvueStyleCompiler": "uni-app", "UniversalLinks": ""
"compilerVersion": 3, }
"splashscreen": { },
"alwaysShowBeforeRender": false, "geolocation": {
"waiting": true, "baidu": {
"autoclose": true, "__platform__": [
"delay": 0 "ios",
}, "android"
"modules": { ],
"Fingerprint": {}, "appkey_ios": "请填写地图的key",
"OAuth": {}, "appkey_android": "请填写地图的key"
"FaceID": {}, }
"Push": {}, },
"Geolocation": {} "push": {
}, "unipush": {
"distribute": { }
"android": { },
"permissions": [ "payment": {
"<uses-feature android:name=\"android.hardware.camera\"/>", }
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>", },
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>", "icons": {
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>", "android": {
"<uses-permission android:name=\"android.permission.CAMERA\"/>", "hdpi": "",
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>", "xhdpi": "",
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>", "xxhdpi": "",
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>", "xxxhdpi": ""
"<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>", },
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>", "ios": {
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>", "appstore": "",
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>", "ipad": {
"<uses-permission android:name=\"android.permission.USE_FINGERPRINT\"/>", "app": "",
"<uses-permission android:name=\"android.permission.VIBRATE\"/>", "app@2x": "",
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>", "notification": "",
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>" "notification@2x": "",
], "proapp@2x": "",
"abiFilters": ["armeabi-v7a", "arm64-v8a", "x86"] "settings": "",
}, "settings@2x": "",
"ios": { "spotlight": "",
"capabilities": { "spotlight@2x": ""
"entitlements": { },
"com.apple.developer.associated-domains": [ "iphone": {
"applinks:static-76ce2c5e-31c7-4d81-8fcf-ed1541ecbc6e.bspapp.com" "app@2x": "",
] "app@3x": "",
} "notification@2x": "",
} "notification@3x": "",
}, "settings@2x": "",
"sdkConfigs": { "settings@3x": "",
"oauth": { "spotlight@2x": "",
"apple": {}, "spotlight@3x": ""
"univerify": {} }
}, }
"ad": {}, },
"share": { "splashscreen": {
"weixin": { "iosStyle": "common",
"appid": "", "androidStyle": "common"
"UniversalLinks": "" }
} },
}, "nvueLaunchMode": ""
"geolocation": { },
"baidu": { "quickapp": {
"__platform__": ["ios", "android"], },
"appkey_ios": "请填写地图的key", "mp-weixin": {
"appkey_android": "请填写地图的key" "appid": "",
} "setting": {
}, "urlCheck": false,
"push": { "es6": false
"unipush": {} },
}, "usingComponents": true,
"payment": {} "betterScopedSlots": true,
}, "permission": {
"icons": { "scope.userLocation": {
"android": { "desc": "演示在onShow生命周期获取地理位置"
"hdpi": "", }
"xhdpi": "", }
"xxhdpi": "", },
"xxxhdpi": "" "mp-alipay": {
}, "usingComponents": true
"ios": { },
"appstore": "", "mp-baidu": {
"ipad": { "usingComponents": true
"app": "", },
"app@2x": "", "mp-toutiao": {
"notification": "", "usingComponents": true
"notification@2x": "", },
"proapp@2x": "", "uniStatistics": {
"settings": "", "enable": false
"settings@2x": "", },
"spotlight": "", "h5": {
"spotlight@2x": "" "template": "",
}, "sdkConfigs": {
"iphone": { "maps": {
"app@2x": "", "qqmap": {
"app@3x": "", "key": ""
"notification@2x": "", }
"notification@3x": "", }
"settings@2x": "", },
"settings@3x": "", "router": {
"spotlight@2x": "", "base": ""
"spotlight@3x": "" }
} },
} "_spaceID": "",
}, "vueVersion": "2"
"splashscreen": {
"iosStyle": "common",
"androidStyle": "common"
}
},
"nvueLaunchMode": ""
},
"quickapp": {},
"mp-weixin": {
"appid": "",
"setting": {
"urlCheck": false,
"es6": false
},
"usingComponents": true,
"betterScopedSlots": true,
"permission": {
"scope.userLocation": {
"desc": "演示在onShow生命周期获取地理位置"
}
}
},
"mp-alipay": {
"usingComponents": true
},
"mp-baidu": {
"usingComponents": true
},
"mp-toutiao": {
"usingComponents": true
},
"uniStatistics": {
"enable": false
},
"h5": {
"template": "",
"sdkConfigs": {
"maps": {
"qqmap": {
"key": ""
}
}
}
},
"_spaceID": "",
"vueVersion": "2"
}
}
} }
{ {
"id": "uni-starter", "id": "uni-starter",
"displayName": "uni-starter", "displayName": "uni-starter",
"version": "1.1.17", "version": "1.1.18",
"description": "云端一体应用快速开发基本项目模版", "description": "云端一体应用快速开发基本项目模版",
"keywords": [ "keywords": [
"login", "login",
......
...@@ -50,14 +50,22 @@ ...@@ -50,14 +50,22 @@
</template> </template>
<script> <script>
import uniShare from '@/uni_modules/uni-share/js_sdk/uni-share.js'; import UniShare from '@/uni_modules/uni-share/js_sdk/uni-share.js';
const uniShare = new UniShare()
const db = uniCloud.database(); const db = uniCloud.database();
const readNewsLog = db.collection('read-news-log') const readNewsLog = db.collection('read-news-log')
import { import {
mapGetters mapGetters
} from 'vuex'; } from 'vuex';
export default { export default {
onBackPress({from}) {
if(from=='backbutton'){
this.$nextTick(function(){
uniShare.hide()
})
return uniShare.isShow;
}
},
data() { data() {
return { return {
// 当前显示 _id // 当前显示 _id
...@@ -196,8 +204,8 @@ ...@@ -196,8 +204,8 @@
title, title,
excerpt, excerpt,
avatar avatar
}) ); }) );
uniShare({ uniShare.show({
content: { //公共的分享类型(type)、链接(herf)、标题(title)、summary(描述)、imageUrl(缩略图) content: { //公共的分享类型(type)、链接(herf)、标题(title)、summary(描述)、imageUrl(缩略图)
type: 0, type: 0,
href: this.uniStarterConfig.h5.url + `/#/pages/list/detail?id=${_id}&title=${title}`, href: this.uniStarterConfig.h5.url + `/#/pages/list/detail?id=${_id}&title=${title}`,
...@@ -264,7 +272,7 @@ ...@@ -264,7 +272,7 @@
], ],
cancelText: this.$t('common').cancelShare, cancelText: this.$t('common').cancelShare,
}, e => { //callback }, e => { //callback
// console.log(e); console.log(e);
}) })
}, },
} }
......
...@@ -19,8 +19,17 @@ ...@@ -19,8 +19,17 @@
</view> </view>
</template> </template>
<script> <script>
import uniShare from '@/uni_modules/uni-share/js_sdk/uni-share.js'; import UniShare from '@/uni_modules/uni-share/js_sdk/uni-share.js';
const uniShare = new UniShare()
export default { export default {
onBackPress({from}) {
if(from=='backbutton'){
this.$nextTick(function(){
uniShare.hide()
})
return uniShare.isShow;
}
},
onLoad() { onLoad() {
// #ifdef APP-PLUS // #ifdef APP-PLUS
this.version = plus.runtime.version this.version = plus.runtime.version
...@@ -30,7 +39,7 @@ ...@@ -30,7 +39,7 @@
uniStarterConfig() { uniStarterConfig() {
console.log(getApp()); console.log(getApp());
return getApp().globalData.config return getApp().globalData.config
} }
}, },
data() { data() {
return { return {
...@@ -53,7 +62,7 @@ ...@@ -53,7 +62,7 @@
slogan, slogan,
logo logo
} = this.about } = this.about
uniShare({ uniShare.show({
content: { //公共的分享类型(type)、链接(herf)、标题(title)、summary(描述)、imageUrl(缩略图) content: { //公共的分享类型(type)、链接(herf)、标题(title)、summary(描述)、imageUrl(缩略图)
type: 0, type: 0,
href: download, href: download,
...@@ -149,10 +158,10 @@ ...@@ -149,10 +158,10 @@
border-radius: 15px; border-radius: 15px;
} }
.tip { .tip {
text-align: center; text-align: center;
font-size: 24rpx; font-size: 24rpx;
margin-top: 10px; margin-top: 10px;
padding: 10rpx; padding: 10rpx;
} }
...@@ -191,4 +200,4 @@ ...@@ -191,4 +200,4 @@
color: #999999; color: #999999;
font-size: 26rpx; font-size: 26rpx;
} }
</style> </style>
...@@ -37,10 +37,18 @@ ...@@ -37,10 +37,18 @@
} from 'vuex'; } from 'vuex';
import checkUpdate from '@/uni_modules/uni-upgrade-center-app/utils/check-update'; import checkUpdate from '@/uni_modules/uni-upgrade-center-app/utils/check-update';
import callCheckVersion from '@/uni_modules/uni-upgrade-center-app/utils/call-check-version'; import callCheckVersion from '@/uni_modules/uni-upgrade-center-app/utils/call-check-version';
import uniShare from '@/uni_modules/uni-share/js_sdk/uni-share.js'; import UniShare from '@/uni_modules/uni-share/js_sdk/uni-share.js';
// import pwdLogin from '../../common/toLogin.js'; const uniShare = new UniShare()
const db = uniCloud.database(); const db = uniCloud.database();
export default { export default {
onBackPress({from}) {
if(from=='backbutton'){
this.$nextTick(function(){
uniShare.hide()
})
return uniShare.isShow;
}
},
data() { data() {
return { return {
gridList: [{ gridList: [{
...@@ -120,13 +128,13 @@ ...@@ -120,13 +128,13 @@
"style": "solid", // 边框样式 "style": "solid", // 边框样式
"radius": "100%" // 边框圆角,支持百分比 "radius": "100%" // 边框圆角,支持百分比
} }
}, },
uniToken:"" uniToken:""
} }
}, },
async onLoad() { async onLoad() {
// const loginRes = await pwdLogin() // const loginRes = await pwdLogin()
// console.log(loginRes,'-------------'); // console.log(loginRes,'-------------');
// this.uniToken = loginRes.token // this.uniToken = loginRes.token
// console.log(313,this.userInfo,this.hasLogin); // console.log(313,this.userInfo,this.hasLogin);
//#ifdef APP-PLUS //#ifdef APP-PLUS
...@@ -137,8 +145,8 @@ ...@@ -137,8 +145,8 @@
icon: 'loop', icon: 'loop',
showBadge: this.appVersion.hasNew showBadge: this.appVersion.hasNew
}) })
//#endif //#endif
this.uniToken = uni.getStorageSync('uni_id_token') this.uniToken = uni.getStorageSync('uni_id_token')
console.log("uniToken: ",this.uniToken); console.log("uniToken: ",this.uniToken);
}, },
computed: { computed: {
...@@ -224,7 +232,7 @@ ...@@ -224,7 +232,7 @@
/** /**
* 获取积分信息 * 获取积分信息
*/ */
async getScore() { async getScore() {
console.log("this.userInfo:------------- ",this.userInfo); console.log("this.userInfo:------------- ",this.userInfo);
if (!this.userInfo) return uni.showToast({ if (!this.userInfo) return uni.showToast({
title: this.$t('mine.checkScore'), title: this.$t('mine.checkScore'),
...@@ -247,10 +255,10 @@ ...@@ -247,10 +255,10 @@
uni.showToast({ uni.showToast({
title: msg, title: msg,
icon: 'none' icon: 'none'
}); });
return data return data
}).finally((e)=>{ }).finally((e)=>{
uni.hideLoading() uni.hideLoading()
return e return e
}) })
}, },
...@@ -273,7 +281,7 @@ ...@@ -273,7 +281,7 @@
slogan slogan
} = this.appConfig.about } = this.appConfig.about
// #ifdef APP-PLUS // #ifdef APP-PLUS
uniShare({ uniShare.show({
content: { //公共的分享类型(type)、链接(herf)、标题(title)、summary(描述)、imageUrl(缩略图) content: { //公共的分享类型(type)、链接(herf)、标题(title)、summary(描述)、imageUrl(缩略图)
type: 0, type: 0,
href: this.appConfig.h5.url + href: this.appConfig.h5.url +
......
...@@ -13,7 +13,7 @@ exports.main = async (event, context) => { ...@@ -13,7 +13,7 @@ exports.main = async (event, context) => {
uniID = uniID.createInstance({ uniID = uniID.createInstance({
context context
}) })
console.log('event : ' + JSON.stringify(event)) console.log('event : ' + JSON.stringify(event))
/* /*
1.event为客户端 uniCloud.callFunction填写的data的值,这里介绍一下其中的属性 1.event为客户端 uniCloud.callFunction填写的data的值,这里介绍一下其中的属性
action:表示要执行的任务名称、比如:登陆login、退出登陆 logout等 action:表示要执行的任务名称、比如:登陆login、退出登陆 logout等
......
## 2.0.0(2021-10-14)
支持监听返回操作(如:物理返回,全面屏手机侧滑)关闭分享弹窗
## 1.0.6(2021-08-25) ## 1.0.6(2021-08-25)
兼容vue3 兼容vue3
## 1.0.5(2021-08-05) ## 1.0.5(2021-08-05)
......
var nvMask,nvImageMenu; var nvMask, nvImageMenu;
export default { class NvImageMenu {
show({list,cancelText},callback){ constructor(arg) {
console.log(789789879); this.isShow = false
if(!list){ }
list = [{ show({
"img":"/static/sharemenu/wechatfriend.png", list,
"text":"图标文字" cancelText
}] }, callback) {
} if (!list) {
//以下为计算菜单的nview绘制布局,为固定算法,使用者无关关心 list = [{
var screenWidth = plus.screen.resolutionWidth "img": "/static/sharemenu/wechatfriend.png",
//以360px宽度屏幕为例,上下左右边距及2排按钮边距留25像素,图标宽度55像素,同行图标间的间距在360宽的屏幕是30px,但需要动态计算,以此原则计算4列图标分别的left位置 "text": "图标文字"
//图标下的按钮文字距离图标5像素,文字大小12像素 }]
//底部取消按钮高度固定为44px }
//TODO 未处理横屏和pad,这些情况6个图标应该一排即可 //以下为计算菜单的nview绘制布局,为固定算法,使用者无关关心
var margin = 20, var screenWidth = plus.screen.resolutionWidth
iconWidth = 60, //以360px宽度屏幕为例,上下左右边距及2排按钮边距留25像素,图标宽度55像素,同行图标间的间距在360宽的屏幕是30px,但需要动态计算,以此原则计算4列图标分别的left位置
icontextSpace = 5, //图标下的按钮文字距离图标5像素,文字大小12像素
textHeight = 12 //底部取消按钮高度固定为44px
var left1 = margin / 360 * screenWidth //TODO 未处理横屏和pad,这些情况6个图标应该一排即可
var iconSpace = (screenWidth - (left1 * 2) - (iconWidth * 4)) / 3 //屏幕宽度减去左右留白间距,再减去4个图标的宽度,就是3个同行图标的间距 var margin = 20,
if (iconSpace <= 5) { //屏幕过窄时,缩小边距和图标大小,再算一次 iconWidth = 60,
margin = 15 icontextSpace = 5,
iconWidth = 40 textHeight = 12
left1 = margin / 360 * screenWidth var left1 = margin / 360 * screenWidth
iconSpace = (screenWidth - (left1 * 2) - (iconWidth * 4)) / 3 //屏幕宽度减去左右留白间距,再减去4个图标的宽度,就是3个同行图标的间距 var iconSpace = (screenWidth - (left1 * 2) - (iconWidth * 4)) / 3 //屏幕宽度减去左右留白间距,再减去4个图标的宽度,就是3个同行图标的间距
} if (iconSpace <= 5) { //屏幕过窄时,缩小边距和图标大小,再算一次
var left2 = left1 + iconWidth + iconSpace margin = 15
var left3 = left1 + (iconWidth + iconSpace) * 2 iconWidth = 40
var left4 = left1 + (iconWidth + iconSpace) * 3 left1 = margin / 360 * screenWidth
var top1 = left1 iconSpace = (screenWidth - (left1 * 2) - (iconWidth * 4)) / 3 //屏幕宽度减去左右留白间距,再减去4个图标的宽度,就是3个同行图标的间距
var top2 = top1 + iconWidth + icontextSpace + textHeight + left1 }
var left2 = left1 + iconWidth + iconSpace
const TOP = {top1,top2}, LEFT = {left1,left2,left3,left4}; var left3 = left1 + (iconWidth + iconSpace) * 2
var left4 = left1 + (iconWidth + iconSpace) * 3
nvMask = new plus.nativeObj.View("nvMask", { //先创建遮罩层 var top1 = left1
top: '0px', var top2 = top1 + iconWidth + icontextSpace + textHeight + left1
left: '0px',
height: '100%', const TOP = {
width: '100%', top1,
backgroundColor: 'rgba(0,0,0,0.2)' top2
}); },
nvMask.addEventListener("click", function() { //处理遮罩层点击 LEFT = {
nvMask.hide(); left1,
nvImageMenu.hide(); left2,
}) left3,
nvImageMenu = new plus.nativeObj.View("nvImageMenu", { //创建底部图标菜单 left4
bottom: '0px', };
left: '0px',
height: (iconWidth + textHeight + 2 * margin)*Math.ceil(list.length/4) +44+'px',//'264px', nvMask = new plus.nativeObj.View("nvMask", { //先创建遮罩层
width: '100%', top: '0px',
backgroundColor: 'rgb(255,255,255)' left: '0px',
}); height: '100%',
width: '100%',
let myList = [] backgroundColor: 'rgba(0,0,0,0.2)'
list.forEach((item,i)=>{ });
myList.push({ nvImageMenu = new plus.nativeObj.View("nvImageMenu", { //创建底部图标菜单
tag: 'img', bottom: '0px',
src: item.img, left: '0px',
position: { height: (iconWidth + textHeight + 2 * margin) * Math.ceil(list.length / 4) + 44 +
top: TOP['top'+( parseInt(i/4) +1)], 'px', //'264px',
left: LEFT['left'+(1+i%4)], width: '100%',
width: iconWidth, backgroundColor: 'rgb(255,255,255)'
height: iconWidth });
} nvMask.addEventListener("click", () => { //处理遮罩层点击
}) // console.log('处理遮罩层点击');
myList.push({ this.hide()
tag: 'font', callback({
text: item.text, event: "clickMask"
textStyles: { })
size: textHeight })
}, let myList = []
position: { list.forEach((item, i) => {
top: TOP['top'+(parseInt(i/4)+1)] + iconWidth + icontextSpace, myList.push({
left: LEFT['left'+(1+i%4)], tag: 'img',
width: iconWidth, src: item.img,
height: textHeight position: {
} top: TOP['top' + (parseInt(i / 4) + 1)],
}) left: LEFT['left' + (1 + i % 4)],
}) width: iconWidth,
height: iconWidth
//绘制底部图标菜单的内容 }
nvImageMenu.draw([ })
{ myList.push({
tag: 'rect',//菜单顶部的分割灰线 tag: 'font',
color: '#e7e7e7', text: item.text,
position: { textStyles: {
top: '0px', size: textHeight
height: '1px' },
} position: {
}, top: TOP['top' + (parseInt(i / 4) + 1)] + iconWidth + icontextSpace,
{ left: LEFT['left' + (1 + i % 4)],
tag: 'font', width: iconWidth,
text: cancelText,//底部取消按钮的文字 height: textHeight
textStyles: { }
size: '14px' })
}, })
position: {
bottom: '0px', //绘制底部图标菜单的内容
height: '44px' nvImageMenu.draw([{
} tag: 'rect', //菜单顶部的分割灰线
}, color: '#e7e7e7',
{ position: {
tag: 'rect',//底部取消按钮的顶部边线 top: '0px',
color: '#e7e7e7', height: '1px'
position: { }
bottom: '45px', },
height: '1px' {
} tag: 'font',
}, text: cancelText, //底部取消按钮的文字
...myList textStyles: {
]) size: '14px'
},
position: {
bottom: '0px',
height: '44px'
}
},
{
tag: 'rect', //底部取消按钮的顶部边线
color: '#e7e7e7',
position: {
bottom: '45px',
height: '1px'
}
},
...myList
])
nvMask.show() nvMask.show()
nvImageMenu.show() //5+应支持从底部向上弹出的动画 nvImageMenu.show()
// 开始动画
/*
plus.nativeObj.View.startAnimation({
nvImageMenu.addEventListener("click",e=>{ //处理底部图标菜单的点击事件,根据点击位置触发不同的逻辑 type: 'slide-in-bottom',
// console.log("click menu"+JSON.stringify(e)); duration: 300
if (e.screenY > plus.screen.resolutionHeight - 44) { //点击了底部取消按钮 }, nvImageMenu, {}, function() {
nvMask.hide(); console.log('plus.nativeObj.View.startAnimation动画结束');
nvImageMenu.hide(); // 关闭原生动画
} else if (e.clientX < 5 || e.clientX > screenWidth - 5 || e.clientY < 5) { plus.nativeObj.View.clearAnimation();
//屏幕左右边缘5像素及菜单顶部5像素不处理点击 nvImageMenu.show()
} else { //点击了图标按钮 });
var iClickIndex = -1 //点击的图标按钮序号,第一个图标按钮的index为0 */
var iRow = e.clientY < (top2 - (left1 / 2)) ? 0 : 1
var iCol = -1
if (e.clientX < (left2 - (iconSpace / 2))) { this.isShow = true
iCol = 0 nvImageMenu.addEventListener("click", e => { //处理底部图标菜单的点击事件,根据点击位置触发不同的逻辑
} else if (e.clientX < (left3 - (iconSpace / 2))) { // console.log("click menu"+JSON.stringify(e));
iCol = 1 if (e.screenY > plus.screen.resolutionHeight - 44) { //点击了底部取消按钮
} else if (e.clientX < (left4 - (iconSpace / 2))) { // callback({event:"clickCancelButton"})
iCol = 2 this.hide()
} else { } else if (e.clientX < 5 || e.clientX > screenWidth - 5 || e.clientY < 5) {
iCol = 3 //屏幕左右边缘5像素及菜单顶部5像素不处理点击
} } else { //点击了图标按钮
if (iRow == 0) { var iClickIndex = -1 //点击的图标按钮序号,第一个图标按钮的index为0
iClickIndex = iCol var iRow = e.clientY < (top2 - (left1 / 2)) ? 0 : 1
} else { var iCol = -1
iClickIndex = iCol + 4 if (e.clientX < (left2 - (iconSpace / 2))) {
} iCol = 0
// console.log("点击按钮的序号: " + iClickIndex); } else if (e.clientX < (left3 - (iconSpace / 2))) {
// if (iClickIndex >= 0 && iClickIndex <= 5) { //处理具体的点击逻辑,此处也可以自行定义逻辑。如果增减了按钮,此处也需要跟着修改 iCol = 1
// } } else if (e.clientX < (left4 - (iconSpace / 2))) {
callback(iClickIndex) iCol = 2
this.hide() } else {
} iCol = 3
}) }
/* nvImageMenu.addEventListener("touchstart", function(e) { if (iRow == 0) {
if (e.screenY > (plus.screen.resolutionHeight - 44)) { iClickIndex = iCol
//TODO 这里可以处理按下背景变灰的效果 } else {
} iClickIndex = iCol + 4
}) }
nvImageMenu.addEventListener("touchmove", function(e) { // console.log("点击按钮的序号: " + iClickIndex);
//TODO 这里可以处理按下背景变灰的效果 // if (iClickIndex >= 0 && iClickIndex <= 5) { //处理具体的点击逻辑,此处也可以自行定义逻辑。如果增减了按钮,此处也需要跟着修改
if (e.screenY > plus.screen.resolutionHeight - 44) {} // }
}) callback({
nvImageMenu.addEventListener("touchend", function(e) { event: "clickMenu",
//TODO 这里可以处理释放背景恢复的效果 index: iClickIndex
}) })
*/ }
}, })
hide(){ /* nvImageMenu.addEventListener("touchstart", function(e) {
nvMask.hide() if (e.screenY > (plus.screen.resolutionHeight - 44)) {
nvImageMenu.hide() //TODO 这里可以处理按下背景变灰的效果
} }
} })
\ No newline at end of file nvImageMenu.addEventListener("touchmove", function(e) {
//TODO 这里可以处理按下背景变灰的效果
if (e.screenY > plus.screen.resolutionHeight - 44) {}
})
nvImageMenu.addEventListener("touchend", function(e) {
//TODO 这里可以处理释放背景恢复的效果
})
*/
}
hide() {
nvMask.hide()
nvImageMenu.hide()
this.isShow = false
}
}
export default NvImageMenu
import uniImageMenu from './uni-image-menu.js'; import UniImageMenu from './uni-image-menu.js';
export default async (param,callback) => { class UniShare extends UniImageMenu{
var menus = [] constructor(arg) {
plus.share.getServices(services => { //只显示有服务的项目 super()
services = services.filter(item=>item.nativeClient) this.isShow = super.isShow
// console.log("servicesList",services); }
let servicesList = services.map(e => e.id) async show(param, callback){
param.menus.forEach(item => { var menus = []
if (servicesList.includes(item.share.provider) || typeof(item.share) == 'string') { plus.share.getServices(services => { //只显示有服务的项目
menus.push(item) services = services.filter(item => item.nativeClient)
} let servicesList = services.map(e => e.id)
}) param.menus.forEach(item => {
// console.log(menus); if (servicesList.includes(item.share.provider) || typeof(item.share) == 'string') {
uniImageMenu.show({list:menus,cancelText:param.cancelText}, e => { menus.push(item)
if (typeof(menus[e]['share']) == 'string') {
switch (menus[e]['share']){
case "copyurl":
copyurl()
break;
case "shareSystem":
shareSystem()
break;
default:
console.error('未知事件名称:'+menus[e]['share']);
break;
} }
} else { })
console.log(123456,{ super.show({
...param.content, list: menus,
...menus[e].share, cancelText: param.cancelText
}); }, e => {
uni.share({ callback(e)
...param.content, if(e.event == 'clickMenu'){
...menus[e].share, if (typeof(menus[e.index]['share']) == 'string') {
success: function(res) { this[menus[e.index]['share']](param)
console.log("success:" + JSON.stringify(res)); } else {
}, uni.share({
fail: function(err) { ...param.content,
console.log("fail:" + JSON.stringify(err)); ...menus[e.index].share,
uni.showModal({ success: res=> {
content: JSON.stringify(err), console.log("success:" + JSON.stringify(res));
showCancel: false, super.hide()
confirmText:"知道了" },
}); fail: function(err) {
}, console.log("fail:" + JSON.stringify(err));
complete(e) { uni.showModal({
uniImageMenu.hide() content: JSON.stringify(err),
callback(e) showCancel: false,
confirmText: "知道了"
});
}
})
} }
}) }
} })
}, err => {
uni.showModal({
title: '获取服务供应商失败:' + JSON.stringify(err),
showCancel: false,
confirmText: '知道了'
});
console.error('获取服务供应商失败:' + JSON.stringify(err));
}) })
}
}, err => { hide(){
uni.showModal({ super.hide()
title: '获取服务供应商失败:' + JSON.stringify(err), }
showCancel: false, copyurl(param) {
confirmText: '知道了' console.log('copyurl',param);
});
console.error('获取服务供应商失败:' + JSON.stringify(err));
})
function copyurl() {
uni.setClipboardData({ uni.setClipboardData({
data: param.content.href, data: param.content.href,
success: function () { success: ()=>{
console.log('success'); console.log('success');
uni.hideToast()//关闭自带的toast uni.hideToast() //关闭自带的toast
uni.showToast({ uni.showToast({
title: '复制成功', title: '复制成功',
icon: 'none' icon: 'none'
}); });
super.hide();
}, },
fail: (err) => { fail: (err) => {
uni.showModal({ uni.showModal({
...@@ -77,20 +73,26 @@ export default async (param,callback) => { ...@@ -77,20 +73,26 @@ export default async (param,callback) => {
showCancel: false showCancel: false
}); });
} }
}); });
} }
// 使用系统分享发送分享消息 // 使用系统分享发送分享消息
function shareSystem() { shareSystem(param) {
plus.share.sendWithSystem({ console.log('shareSystem',param);
type: 'text', plus.share.sendWithSystem({
type: 'text',
content: param.content.title + param.content.summary || '', content: param.content.title + param.content.summary || '',
href: param.content.href, href: param.content.href,
}, function(e) { }, (e)=> {
console.log('分享成功'); console.log('分享成功');
callback(e) super.hide()
}, function(e) { }, (err)=> {
console.log('分享失败:' + JSON.stringify(e)); console.log('分享失败:' + JSON.stringify(err));
callback(e) uni.showModal({
}); title: '获取服务供应商失败:' + JSON.stringify(err),
} showCancel: false,
} confirmText: '知道了'
\ No newline at end of file });
});
}
}
export default UniShare
\ No newline at end of file
{ {
"id": "uni-share", "id": "uni-share",
"displayName": "uni-share", "displayName": "uni-share",
"version": "1.0.6", "version": "2.0.0",
"description": "底部弹出宫格图标式的分享菜单,可覆盖原生组件。", "description": "底部弹出宫格图标式的分享菜单,可覆盖原生组件。",
"keywords": [ "keywords": [
"分享菜单" "分享菜单"
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
export default { export default {
methods: { methods: {
uniShare() { uniShare() {
uniShare({ uniShare.show({
content: { //公共的分享参数配置 类型(type)、链接(herf)、标题(title)、summary(描述)、imageUrl(缩略图) content: { //公共的分享参数配置 类型(type)、链接(herf)、标题(title)、summary(描述)、imageUrl(缩略图)
type: 0, type: 0,
href: 'https://uniapp.dcloud.io/', href: 'https://uniapp.dcloud.io/',
......
...@@ -193,6 +193,9 @@ ...@@ -193,6 +193,9 @@
"key" : "" "key" : ""
} }
} }
},
"router" : {
"base" : ""
} }
}, },
"_spaceID" : "76ce2c5e-31c7-4d81-8fcf-ed1541ecbc6e", "_spaceID" : "76ce2c5e-31c7-4d81-8fcf-ed1541ecbc6e",
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册