From d45410e6f249f0dbae628d428dcc6e4f93a5e17a Mon Sep 17 00:00:00 2001 From: zhangdongxue Date: Fri, 29 Oct 2021 14:28:53 +0800 Subject: [PATCH] =?UTF-8?q?[=E5=90=8C=E6=AD=A5=E4=BB=A3=E7=A0=81]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages.json | 7 +- pages/goods/details.vue | 58 ++- static/icons/share-pyq.png | Bin 0 -> 8802 bytes static/icons/share-wx.png | Bin 0 -> 4598 bytes uni_modules/uni-share/changelog.md | 14 + .../uni-share/js_sdk/uni-image-menu.js | 203 ++++++++++ uni_modules/uni-share/js_sdk/uni-share.js | 98 +++++ uni_modules/uni-share/package.json | 80 ++++ uni_modules/uni-share/readme.md | 85 ++++ unpackage/dist/dev/app-plus/app-service.js | 375 +++++++++++++++++- 10 files changed, 910 insertions(+), 10 deletions(-) create mode 100644 static/icons/share-pyq.png create mode 100644 static/icons/share-wx.png create mode 100644 uni_modules/uni-share/changelog.md create mode 100644 uni_modules/uni-share/js_sdk/uni-image-menu.js create mode 100644 uni_modules/uni-share/js_sdk/uni-share.js create mode 100644 uni_modules/uni-share/package.json create mode 100644 uni_modules/uni-share/readme.md diff --git a/pages.json b/pages.json index ec64263..adbffc6 100644 --- a/pages.json +++ b/pages.json @@ -283,13 +283,14 @@ "path": "pages/goods/details", "name": "goodsDetails", "style": { - "navigationBarTitleText": "", + "navigationBarTitleText": "商品详情", + "navigationBarTextStyle":"white", "titleNView": { - "backgroundColor": "#FFFFFF", + "backgroundColor": "#8b64fd", "type": "transparent", "buttons": [{ "text": "分享", - "fontSize": "12", + "fontSize": "14", "color": "#555555" }] } diff --git a/pages/goods/details.vue b/pages/goods/details.vue index 582889b..899f8f1 100644 --- a/pages/goods/details.vue +++ b/pages/goods/details.vue @@ -28,7 +28,9 @@ - {{goodsObj.specal_tags.is_allow_values}} + + {{goodsObj.specal_tags.is_allow_values}} + {{goodsObj.specal_tags.is_self}} {{goodsObj.name}} @@ -175,9 +177,7 @@ - - 确定 - + 确定 @@ -189,6 +189,9 @@ managesCoupons } from '@/apis/interfaces/goods' import userAuth from '@/public/userAuth' + import UniShare from 'uni_modules/uni-share/js_sdk/uni-share.js' + const uniShare = new UniShare() + import {config} from '@/apis/index.js' export default { data() { return { @@ -210,6 +213,17 @@ this.coupons = res.coupons }) }, + onBackPress({ + from + }) { + console.log(from); + if (from == 'backbutton') { + this.$nextTick(function() { + uniShare.hide() + }) + return uniShare.isShow; + } + }, methods: { // 提交购买单 buyGoods() { @@ -298,6 +312,40 @@ // 查看保障服务-隐藏 serveClose() { this.$refs.servePopup.close() + }, + // 顶部菜单点击了分享功能 + onNavigationBarButtonTap() { + console.log('点击了分享功能。。。') + uniShare.show({ + content: { //公共的分享参数配置 类型(type)、链接(herf)、标题(title)、summary(描述)、imageUrl(缩略图) + type: 0, + href: 'https://www.lianshang.vip/app?', + title: '链商星球,共创未来,一起搭建链商经济的世界~', + summary: '链商星球app你值得拥有~天天签到领福利~', + imageUrl: config.apiUrls+'images/top_logo.png' + }, + menus: [{ + "img": "/static/icons/payWay_icon_00.png", + "text": "微信好友", + "share": { //当前项的分享参数配置。可覆盖公共的配置如下:分享到微信小程序,配置了type=5 + "provider": "weixin", + "scene": "WXSceneSession" + } + }, + { + "img": "/static/icons/share-pyq.png", + "text": "微信朋友圈", + "share": { + "provider": "weixin", + "scene": "WXSenceTimeline" + } + } + ], + cancelText: "取消分享", + }, e => { //callback + console.log(uniShare.isShow); + console.log(e); + }) } } } @@ -353,7 +401,7 @@ .title-hot { display: inline-block; - background-image: linear-gradient(to left,#fee195,#fee195); + background-image: linear-gradient(to left, #fee195, #fee195); font-size: 24rpx; border-radius: 50rpx; padding: 0 10rpx; diff --git a/static/icons/share-pyq.png b/static/icons/share-pyq.png new file mode 100644 index 0000000000000000000000000000000000000000..1a075c980e573c12c5d07b651cff7e45040cc94d GIT binary patch literal 8802 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 {NS%LaA7l_a?rHnME{@t<((slUc#&M8y;5cJ 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 Joq~Dr{{Wh-lyd+8 literal 0 HcmV?d00001 diff --git a/uni_modules/uni-share/changelog.md b/uni_modules/uni-share/changelog.md new file mode 100644 index 0000000..e3cd23f --- /dev/null +++ b/uni_modules/uni-share/changelog.md @@ -0,0 +1,14 @@ +## 2.0.0(2021-10-14) +支持监听返回操作(如:物理返回,全面屏手机侧滑)关闭分享弹窗 +## 1.0.6(2021-08-25) +兼容vue3 +## 1.0.5(2021-08-05) +优化代码实现,修改原来用`eval()`函数实现的逻辑 +## 1.0.4(2021-06-07) +为符合苹果应用市场的审核,只显示存在对应的分享客户端的选项。如:配置包含微信分享,但是用户手机上并没有安装微信,就不显示微信分享。 +## 1.0.2(2021-05-06) +修复错误的提示:“打包时未添加oauth模块” +## 1.0.1(2021-04-30) +新增完整示例 +## 1.0.0(2021-04-28) +第1版发布 diff --git a/uni_modules/uni-share/js_sdk/uni-image-menu.js b/uni_modules/uni-share/js_sdk/uni-image-menu.js new file mode 100644 index 0000000..a15a846 --- /dev/null +++ b/uni_modules/uni-share/js_sdk/uni-image-menu.js @@ -0,0 +1,203 @@ +var nvMask, nvImageMenu; +class NvImageMenu { + constructor(arg) { + this.isShow = false + } + show({ + list, + cancelText + }, callback) { + if (!list) { + list = [{ + "img": "/static/sharemenu/wechatfriend.png", + "text": "图标文字" + }] + } + //以下为计算菜单的nview绘制布局,为固定算法,使用者无关关心 + var screenWidth = plus.screen.resolutionWidth + //以360px宽度屏幕为例,上下左右边距及2排按钮边距留25像素,图标宽度55像素,同行图标间的间距在360宽的屏幕是30px,但需要动态计算,以此原则计算4列图标分别的left位置 + //图标下的按钮文字距离图标5像素,文字大小12像素 + //底部取消按钮高度固定为44px + //TODO 未处理横屏和pad,这些情况6个图标应该一排即可 + var margin = 20, + iconWidth = 60, + icontextSpace = 5, + textHeight = 12 + var left1 = margin / 360 * screenWidth + var iconSpace = (screenWidth - (left1 * 2) - (iconWidth * 4)) / 3 //屏幕宽度减去左右留白间距,再减去4个图标的宽度,就是3个同行图标的间距 + if (iconSpace <= 5) { //屏幕过窄时,缩小边距和图标大小,再算一次 + margin = 15 + iconWidth = 40 + left1 = margin / 360 * screenWidth + iconSpace = (screenWidth - (left1 * 2) - (iconWidth * 4)) / 3 //屏幕宽度减去左右留白间距,再减去4个图标的宽度,就是3个同行图标的间距 + } + var left2 = left1 + iconWidth + iconSpace + var left3 = left1 + (iconWidth + iconSpace) * 2 + var left4 = left1 + (iconWidth + iconSpace) * 3 + var top1 = left1 + var top2 = top1 + iconWidth + icontextSpace + textHeight + left1 + + const TOP = { + top1, + top2 + }, + LEFT = { + left1, + left2, + left3, + left4 + }; + + nvMask = new plus.nativeObj.View("nvMask", { //先创建遮罩层 + top: '0px', + left: '0px', + height: '100%', + width: '100%', + backgroundColor: 'rgba(0,0,0,0.2)' + }); + nvImageMenu = new plus.nativeObj.View("nvImageMenu", { //创建底部图标菜单 + bottom: '0px', + left: '0px', + height: (iconWidth + textHeight + 2 * margin) * Math.ceil(list.length / 4) + 44 + + 'px', //'264px', + width: '100%', + backgroundColor: 'rgb(255,255,255)' + }); + nvMask.addEventListener("click", () => { //处理遮罩层点击 + // console.log('处理遮罩层点击'); + this.hide() + callback({ + event: "clickMask" + }) + }) + let myList = [] + list.forEach((item, i) => { + myList.push({ + tag: 'img', + src: item.img, + position: { + top: TOP['top' + (parseInt(i / 4) + 1)], + left: LEFT['left' + (1 + i % 4)], + width: iconWidth, + height: iconWidth + } + }) + myList.push({ + tag: 'font', + text: item.text, + textStyles: { + size: textHeight + }, + position: { + top: TOP['top' + (parseInt(i / 4) + 1)] + iconWidth + icontextSpace, + left: LEFT['left' + (1 + i % 4)], + width: iconWidth, + height: textHeight + } + }) + }) + + //绘制底部图标菜单的内容 + nvImageMenu.draw([{ + tag: 'rect', //菜单顶部的分割灰线 + color: '#e7e7e7', + position: { + top: '0px', + height: '1px' + } + }, + { + tag: 'font', + text: cancelText, //底部取消按钮的文字 + textStyles: { + size: '14px' + }, + position: { + bottom: '0px', + height: '44px' + } + }, + { + tag: 'rect', //底部取消按钮的顶部边线 + color: '#e7e7e7', + position: { + bottom: '45px', + height: '1px' + } + }, + ...myList + ]) + nvMask.show() + nvImageMenu.show() + // 开始动画 + /* + plus.nativeObj.View.startAnimation({ + type: 'slide-in-bottom', + duration: 300 + }, nvImageMenu, {}, function() { + console.log('plus.nativeObj.View.startAnimation动画结束'); + // 关闭原生动画 + plus.nativeObj.View.clearAnimation(); + nvImageMenu.show() + }); + */ + + + this.isShow = true + nvImageMenu.addEventListener("click", e => { //处理底部图标菜单的点击事件,根据点击位置触发不同的逻辑 + // console.log("click menu"+JSON.stringify(e)); + if (e.screenY > plus.screen.resolutionHeight - 44) { //点击了底部取消按钮 + // callback({event:"clickCancelButton"}) + this.hide() + } else if (e.clientX < 5 || e.clientX > screenWidth - 5 || e.clientY < 5) { + //屏幕左右边缘5像素及菜单顶部5像素不处理点击 + } else { //点击了图标按钮 + var iClickIndex = -1 //点击的图标按钮序号,第一个图标按钮的index为0 + var iRow = e.clientY < (top2 - (left1 / 2)) ? 0 : 1 + var iCol = -1 + if (e.clientX < (left2 - (iconSpace / 2))) { + iCol = 0 + } else if (e.clientX < (left3 - (iconSpace / 2))) { + iCol = 1 + } else if (e.clientX < (left4 - (iconSpace / 2))) { + iCol = 2 + } else { + iCol = 3 + } + if (iRow == 0) { + iClickIndex = iCol + } else { + iClickIndex = iCol + 4 + } + // console.log("点击按钮的序号: " + iClickIndex); + // if (iClickIndex >= 0 && iClickIndex <= 5) { //处理具体的点击逻辑,此处也可以自行定义逻辑。如果增减了按钮,此处也需要跟着修改 + // } + callback({ + event: "clickMenu", + index: iClickIndex + }) + } + }) + /* nvImageMenu.addEventListener("touchstart", function(e) { + if (e.screenY > (plus.screen.resolutionHeight - 44)) { + //TODO 这里可以处理按下背景变灰的效果 + } + }) + 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 diff --git a/uni_modules/uni-share/js_sdk/uni-share.js b/uni_modules/uni-share/js_sdk/uni-share.js new file mode 100644 index 0000000..8af8631 --- /dev/null +++ b/uni_modules/uni-share/js_sdk/uni-share.js @@ -0,0 +1,98 @@ +import UniImageMenu from './uni-image-menu.js'; +class UniShare extends UniImageMenu{ + constructor(arg) { + super() + this.isShow = super.isShow + } + async show(param, callback){ + var menus = [] + plus.share.getServices(services => { //只显示有服务的项目 + services = services.filter(item => item.nativeClient) + let servicesList = services.map(e => e.id) + param.menus.forEach(item => { + if (servicesList.includes(item.share.provider) || typeof(item.share) == 'string') { + menus.push(item) + } + }) + super.show({ + list: menus, + cancelText: param.cancelText + }, e => { + callback(e) + if(e.event == 'clickMenu'){ + if (typeof(menus[e.index]['share']) == 'string') { + this[menus[e.index]['share']](param) + } else { + uni.share({ + ...param.content, + ...menus[e.index].share, + success: res=> { + console.log("success:" + JSON.stringify(res)); + super.hide() + }, + fail: function(err) { + console.log("fail:" + JSON.stringify(err)); + uni.showModal({ + content: JSON.stringify(err), + showCancel: false, + confirmText: "知道了" + }); + } + }) + } + } + }) + }, err => { + uni.showModal({ + title: '获取服务供应商失败:' + JSON.stringify(err), + showCancel: false, + confirmText: '知道了' + }); + console.error('获取服务供应商失败:' + JSON.stringify(err)); + }) + } + hide(){ + super.hide() + } + copyurl(param) { + console.log('copyurl',param); + uni.setClipboardData({ + data: param.content.href, + success: ()=>{ + console.log('success'); + uni.hideToast() //关闭自带的toast + uni.showToast({ + title: '复制成功', + icon: 'none' + }); + super.hide(); + }, + fail: (err) => { + uni.showModal({ + content: JSON.stringify(err), + showCancel: false + }); + } + }); + } + // 使用系统分享发送分享消息 + shareSystem(param) { + console.log('shareSystem',param); + plus.share.sendWithSystem({ + type: 'text', + content: param.content.title + param.content.summary || '', + href: param.content.href, + }, (e)=> { + console.log('分享成功'); + super.hide() + }, (err)=> { + console.log('分享失败:' + JSON.stringify(err)); + uni.showModal({ + title: '获取服务供应商失败:' + JSON.stringify(err), + showCancel: false, + confirmText: '知道了' + }); + }); + } +} +export default UniShare \ No newline at end of file diff --git a/uni_modules/uni-share/package.json b/uni_modules/uni-share/package.json new file mode 100644 index 0000000..4a2a3e1 --- /dev/null +++ b/uni_modules/uni-share/package.json @@ -0,0 +1,80 @@ +{ + "id": "uni-share", + "displayName": "uni-share", + "version": "2.0.0", + "description": "底部弹出宫格图标式的分享菜单,可覆盖原生组件。", + "keywords": [ + "分享菜单" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "category": [ + "JS SDK", + "通用 SDK" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "n", + "Android Browser": "n", + "微信浏览器(Android)": "n", + "QQ浏览器(Android)": "n" + }, + "H5-pc": { + "Chrome": "n", + "IE": "n", + "Edge": "n", + "Firefox": "n", + "Safari": "n" + }, + "小程序": { + "微信": "n", + "阿里": "n", + "百度": "n", + "字节跳动": "n", + "QQ": "n" + }, + "快应用": { + "华为": "n", + "联盟": "n" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-share/readme.md b/uni_modules/uni-share/readme.md new file mode 100644 index 0000000..de723a3 --- /dev/null +++ b/uni_modules/uni-share/readme.md @@ -0,0 +1,85 @@ +#### 本功能基于[底部图标菜单](https://ext.dcloud.net.cn/plugin?id=4858)封装而成。 +### 示例代码 +``` + + + +``` \ No newline at end of file diff --git a/unpackage/dist/dev/app-plus/app-service.js b/unpackage/dist/dev/app-plus/app-service.js index 4b3250a..79c226b 100644 --- a/unpackage/dist/dev/app-plus/app-service.js +++ b/unpackage/dist/dev/app-plus/app-service.js @@ -42133,7 +42133,7 @@ __webpack_require__.r(__webpack_exports__); /***/ (function(module, exports, __webpack_require__) { "use strict"; -Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0; +/* WEBPACK VAR INJECTION */(function(__f__) {Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0; @@ -42323,7 +42323,10 @@ var _goods = __webpack_require__(/*! @/apis/interfaces/goods */ 103); -var _userAuth = _interopRequireDefault(__webpack_require__(/*! @/public/userAuth */ 104));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}function _createForOfIteratorHelper(o, allowArrayLike) {var it;if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) {if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {if (it) o = it;var i = 0;var F = function F() {};return { s: F, n: function n() {if (i >= o.length) return { done: true };return { done: false, value: o[i++] };}, e: function e(_e) {throw _e;}, f: F };}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");}var normalCompletion = true,didErr = false,err;return { s: function s() {it = o[Symbol.iterator]();}, n: function n() {var step = it.next();normalCompletion = step.done;return step;}, e: function e(_e2) {didErr = true;err = _e2;}, f: function f() {try {if (!normalCompletion && it.return != null) it.return();} finally {if (didErr) throw err;}} };}function _unsupportedIterableToArray(o, minLen) {if (!o) return;if (typeof o === "string") return _arrayLikeToArray(o, minLen);var n = Object.prototype.toString.call(o).slice(8, -1);if (n === "Object" && o.constructor) n = o.constructor.name;if (n === "Map" || n === "Set") return Array.from(o);if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);}function _arrayLikeToArray(arr, len) {if (len == null || len > arr.length) len = arr.length;for (var i = 0, arr2 = new Array(len); i < len; i++) {arr2[i] = arr[i];}return arr2;}var _default = +var _userAuth = _interopRequireDefault(__webpack_require__(/*! @/public/userAuth */ 104)); +var _uniShare = _interopRequireDefault(__webpack_require__(/*! uni_modules/uni-share/js_sdk/uni-share.js */ 646)); + +var _index = __webpack_require__(/*! @/apis/index.js */ 25);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}function _createForOfIteratorHelper(o, allowArrayLike) {var it;if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) {if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {if (it) o = it;var i = 0;var F = function F() {};return { s: F, n: function n() {if (i >= o.length) return { done: true };return { done: false, value: o[i++] };}, e: function e(_e) {throw _e;}, f: F };}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");}var normalCompletion = true,didErr = false,err;return { s: function s() {it = o[Symbol.iterator]();}, n: function n() {var step = it.next();normalCompletion = step.done;return step;}, e: function e(_e2) {didErr = true;err = _e2;}, f: function f() {try {if (!normalCompletion && it.return != null) it.return();} finally {if (didErr) throw err;}} };}function _unsupportedIterableToArray(o, minLen) {if (!o) return;if (typeof o === "string") return _arrayLikeToArray(o, minLen);var n = Object.prototype.toString.call(o).slice(8, -1);if (n === "Object" && o.constructor) n = o.constructor.name;if (n === "Map" || n === "Set") return Array.from(o);if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);}function _arrayLikeToArray(arr, len) {if (len == null || len > arr.length) len = arr.length;for (var i = 0, arr2 = new Array(len); i < len; i++) {arr2[i] = arr[i];}return arr2;}var uniShare = new _uniShare.default();var _default = { data: function data() { return { @@ -42345,6 +42348,17 @@ var _userAuth = _interopRequireDefault(__webpack_require__(/*! @/public/userAuth _this.coupons = res.coupons; }); }, + onBackPress: function onBackPress(_ref) + + {var from = _ref.from; + __f__("log", from, " at pages/goods/details.vue:219"); + if (from == 'backbutton') { + this.$nextTick(function () { + uniShare.hide(); + }); + return uniShare.isShow; + } + }, methods: { // 提交购买单 buyGoods: function buyGoods() { @@ -42433,7 +42447,42 @@ var _userAuth = _interopRequireDefault(__webpack_require__(/*! @/public/userAuth // 查看保障服务-隐藏 serveClose: function serveClose() { this.$refs.servePopup.close(); + }, + // 顶部菜单点击了分享功能 + onNavigationBarButtonTap: function onNavigationBarButtonTap() { + __f__("log", '点击了分享功能。。。', " at pages/goods/details.vue:318"); + uniShare.show({ + content: { //公共的分享参数配置 类型(type)、链接(herf)、标题(title)、summary(描述)、imageUrl(缩略图) + type: 0, + href: 'https://www.lianshang.vip/app?', + title: '链商星球,共创未来,一起搭建链商经济的世界~', + summary: '链商星球app你值得拥有~天天签到领福利~', + imageUrl: _index.config.apiUrls + 'images/top_logo.png' }, + + menus: [{ + "img": "/static/icons/payWay_icon_00.png", + "text": "微信好友", + "share": { //当前项的分享参数配置。可覆盖公共的配置如下:分享到微信小程序,配置了type=5 + "provider": "weixin", + "scene": "WXSceneSession" } }, + + + { + "img": "/static/icons/share-pyq.png", + "text": "微信朋友圈", + "share": { + "provider": "weixin", + "scene": "WXSenceTimeline" } }], + + + + cancelText: "取消分享" }, + function (e) {//callback + __f__("log", uniShare.isShow, " at pages/goods/details.vue:346"); + __f__("log", e, " at pages/goods/details.vue:347"); + }); } } };exports.default = _default; +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 39)["default"])) /***/ }), /* 362 */ @@ -72260,5 +72309,327 @@ var _default = { name: "NOList", /** } };exports.default = _default; +/***/ }), +/* 646 */ +/*!***********************************************************************************!*\ + !*** D:/链商星球电商/BlockChainH5(链商星球App最新)/uni_modules/uni-share/js_sdk/uni-share.js ***! + \***********************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(__f__) {Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;var _regenerator = _interopRequireDefault(__webpack_require__(/*! ./node_modules/@babel/runtime/regenerator */ 45));var _uniImageMenu = _interopRequireDefault(__webpack_require__(/*! ./uni-image-menu.js */ 647));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}function ownKeys(object, enumerableOnly) {var keys = Object.keys(object);if (Object.getOwnPropertySymbols) {var symbols = Object.getOwnPropertySymbols(object);if (enumerableOnly) symbols = symbols.filter(function (sym) {return Object.getOwnPropertyDescriptor(object, sym).enumerable;});keys.push.apply(keys, symbols);}return keys;}function _objectSpread(target) {for (var i = 1; i < arguments.length; i++) {var source = arguments[i] != null ? arguments[i] : {};if (i % 2) {ownKeys(Object(source), true).forEach(function (key) {_defineProperty(target, key, source[key]);});} else if (Object.getOwnPropertyDescriptors) {Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));} else {ownKeys(Object(source)).forEach(function (key) {Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));});}}return target;}function _defineProperty(obj, key, value) {if (key in obj) {Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true });} else {obj[key] = value;}return obj;}function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {try {var info = gen[key](arg);var value = info.value;} catch (error) {reject(error);return;}if (info.done) {resolve(value);} else {Promise.resolve(value).then(_next, _throw);}}function _asyncToGenerator(fn) {return function () {var self = this,args = arguments;return new Promise(function (resolve, reject) {var gen = fn.apply(self, args);function _next(value) {asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);}function _throw(err) {asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);}_next(undefined);});};}function _classCallCheck(instance, Constructor) {if (!(instance instanceof Constructor)) {throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target, props) {for (var i = 0; i < props.length; i++) {var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);}}function _createClass(Constructor, protoProps, staticProps) {if (protoProps) _defineProperties(Constructor.prototype, protoProps);if (staticProps) _defineProperties(Constructor, staticProps);return Constructor;}function _inherits(subClass, superClass) {if (typeof superClass !== "function" && superClass !== null) {throw new TypeError("Super expression must either be null or a function");}subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } });if (superClass) _setPrototypeOf(subClass, superClass);}function _setPrototypeOf(o, p) {_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {o.__proto__ = p;return o;};return _setPrototypeOf(o, p);}function _createSuper(Derived) {var hasNativeReflectConstruct = _isNativeReflectConstruct();return function _createSuperInternal() {var Super = _getPrototypeOf(Derived),result;if (hasNativeReflectConstruct) {var NewTarget = _getPrototypeOf(this).constructor;result = Reflect.construct(Super, arguments, NewTarget);} else {result = Super.apply(this, arguments);}return _possibleConstructorReturn(this, result);};}function _possibleConstructorReturn(self, call) {if (call && (typeof call === "object" || typeof call === "function")) {return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self) {if (self === void 0) {throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct() {if (typeof Reflect === "undefined" || !Reflect.construct) return false;if (Reflect.construct.sham) return false;if (typeof Proxy === "function") return true;try {Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));return true;} catch (e) {return false;}}function _get(target, property, receiver) {if (typeof Reflect !== "undefined" && Reflect.get) {_get = Reflect.get;} else {_get = function _get(target, property, receiver) {var base = _superPropBase(target, property);if (!base) return;var desc = Object.getOwnPropertyDescriptor(base, property);if (desc.get) {return desc.get.call(receiver);}return desc.value;};}return _get(target, property, receiver || target);}function _superPropBase(object, property) {while (!Object.prototype.hasOwnProperty.call(object, property)) {object = _getPrototypeOf(object);if (object === null) break;}return object;}function _getPrototypeOf(o) {_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {return o.__proto__ || Object.getPrototypeOf(o);};return _getPrototypeOf(o);}var +UniShare = /*#__PURE__*/function (_UniImageMenu) {_inherits(UniShare, _UniImageMenu);var _super = _createSuper(UniShare); + function UniShare(arg) {var _thisSuper, _this;_classCallCheck(this, UniShare); + _this = _super.call(this); + _this.isShow = _get((_thisSuper = _assertThisInitialized(_this), _getPrototypeOf(UniShare.prototype)), "isShow", _thisSuper);return _this; + }_createClass(UniShare, [{ key: "show", value: function () {var _show = _asyncToGenerator( /*#__PURE__*/_regenerator.default.mark(function _callee( + param, callback) {var _this2 = this;var menus;return _regenerator.default.wrap(function _callee$(_context) {while (1) {switch (_context.prev = _context.next) {case 0: + menus = []; + plus.share.getServices(function (services) {//只显示有服务的项目 + services = services.filter(function (item) {return item.nativeClient;}); + var servicesList = services.map(function (e) {return e.id;}); + param.menus.forEach(function (item) { + if (servicesList.includes(item.share.provider) || typeof item.share == 'string') { + menus.push(item); + } + }); + _get(_getPrototypeOf(UniShare.prototype), "show", _this2).call(_this2, { + list: menus, + cancelText: param.cancelText }, + function (e) { + callback(e); + if (e.event == 'clickMenu') { + if (typeof menus[e.index]['share'] == 'string') { + _this2[menus[e.index]['share']](param); + } else { + uni.share(_objectSpread(_objectSpread(_objectSpread({}, + param.content), + menus[e.index].share), {}, { + success: function success(res) { + __f__("log", "success:" + JSON.stringify(res), " at uni_modules/uni-share/js_sdk/uni-share.js:30"); + _get(_getPrototypeOf(UniShare.prototype), "hide", _this2).call(_this2); + }, + fail: function fail(err) { + __f__("log", "fail:" + JSON.stringify(err), " at uni_modules/uni-share/js_sdk/uni-share.js:34"); + uni.showModal({ + content: JSON.stringify(err), + showCancel: false, + confirmText: "知道了" }); + + } })); + + } + } + }); + }, function (err) { + uni.showModal({ + title: '获取服务供应商失败:' + JSON.stringify(err), + showCancel: false, + confirmText: '知道了' }); + + __f__("error", '获取服务供应商失败:' + JSON.stringify(err), " at uni_modules/uni-share/js_sdk/uni-share.js:51"); + });case 2:case "end":return _context.stop();}}}, _callee);}));function show(_x, _x2) {return _show.apply(this, arguments);}return show;}() }, { key: "hide", value: function hide() + + { + _get(_getPrototypeOf(UniShare.prototype), "hide", this).call(this); + } }, { key: "copyurl", value: function copyurl( + param) {var _this3 = this; + __f__("log", 'copyurl', param, " at uni_modules/uni-share/js_sdk/uni-share.js:58"); + uni.setClipboardData({ + data: param.content.href, + success: function success() { + __f__("log", 'success', " at uni_modules/uni-share/js_sdk/uni-share.js:62"); + uni.hideToast(); //关闭自带的toast + uni.showToast({ + title: '复制成功', + icon: 'none' }); + + _get(_getPrototypeOf(UniShare.prototype), "hide", _this3).call(_this3); + }, + fail: function fail(err) { + uni.showModal({ + content: JSON.stringify(err), + showCancel: false }); + + } }); + + } + // 使用系统分享发送分享消息 + }, { key: "shareSystem", value: function shareSystem(param) {var _this4 = this; + __f__("log", 'shareSystem', param, " at uni_modules/uni-share/js_sdk/uni-share.js:80"); + plus.share.sendWithSystem({ + type: 'text', + content: param.content.title + param.content.summary || '', + href: param.content.href }, + function (e) { + __f__("log", '分享成功', " at uni_modules/uni-share/js_sdk/uni-share.js:86"); + _get(_getPrototypeOf(UniShare.prototype), "hide", _this4).call(_this4); + }, function (err) { + __f__("log", '分享失败:' + JSON.stringify(err), " at uni_modules/uni-share/js_sdk/uni-share.js:89"); + uni.showModal({ + title: '获取服务供应商失败:' + JSON.stringify(err), + showCancel: false, + confirmText: '知道了' }); + + }); + } }]);return UniShare;}(_uniImageMenu.default);var _default = + +UniShare;exports.default = _default; +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 39)["default"])) + +/***/ }), +/* 647 */ +/*!****************************************************************************************!*\ + !*** D:/链商星球电商/BlockChainH5(链商星球App最新)/uni_modules/uni-share/js_sdk/uni-image-menu.js ***! + \****************************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;function _classCallCheck(instance, Constructor) {if (!(instance instanceof Constructor)) {throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target, props) {for (var i = 0; i < props.length; i++) {var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);}}function _createClass(Constructor, protoProps, staticProps) {if (protoProps) _defineProperties(Constructor.prototype, protoProps);if (staticProps) _defineProperties(Constructor, staticProps);return Constructor;}var nvMask, nvImageMenu;var +NvImageMenu = /*#__PURE__*/function () { + function NvImageMenu(arg) {_classCallCheck(this, NvImageMenu); + this.isShow = false; + }_createClass(NvImageMenu, [{ key: "show", value: function show(_ref, + + + + callback) {var _this = this;var list = _ref.list,cancelText = _ref.cancelText; + if (!list) { + list = [{ + "img": "/static/sharemenu/wechatfriend.png", + "text": "图标文字" }]; + + } + //以下为计算菜单的nview绘制布局,为固定算法,使用者无关关心 + var screenWidth = plus.screen.resolutionWidth; + //以360px宽度屏幕为例,上下左右边距及2排按钮边距留25像素,图标宽度55像素,同行图标间的间距在360宽的屏幕是30px,但需要动态计算,以此原则计算4列图标分别的left位置 + //图标下的按钮文字距离图标5像素,文字大小12像素 + //底部取消按钮高度固定为44px + //TODO 未处理横屏和pad,这些情况6个图标应该一排即可 + var margin = 20, + iconWidth = 60, + icontextSpace = 5, + textHeight = 12; + var left1 = margin / 360 * screenWidth; + var iconSpace = (screenWidth - left1 * 2 - iconWidth * 4) / 3; //屏幕宽度减去左右留白间距,再减去4个图标的宽度,就是3个同行图标的间距 + if (iconSpace <= 5) {//屏幕过窄时,缩小边距和图标大小,再算一次 + margin = 15; + iconWidth = 40; + left1 = margin / 360 * screenWidth; + iconSpace = (screenWidth - left1 * 2 - iconWidth * 4) / 3; //屏幕宽度减去左右留白间距,再减去4个图标的宽度,就是3个同行图标的间距 + } + var left2 = left1 + iconWidth + iconSpace; + var left3 = left1 + (iconWidth + iconSpace) * 2; + var left4 = left1 + (iconWidth + iconSpace) * 3; + var top1 = left1; + var top2 = top1 + iconWidth + icontextSpace + textHeight + left1; + + var TOP = { + top1: top1, + top2: top2 }, + + LEFT = { + left1: left1, + left2: left2, + left3: left3, + left4: left4 }; + + + nvMask = new plus.nativeObj.View("nvMask", { //先创建遮罩层 + top: '0px', + left: '0px', + height: '100%', + width: '100%', + backgroundColor: 'rgba(0,0,0,0.2)' }); + + nvImageMenu = new plus.nativeObj.View("nvImageMenu", { //创建底部图标菜单 + bottom: '0px', + left: '0px', + height: (iconWidth + textHeight + 2 * margin) * Math.ceil(list.length / 4) + 44 + + 'px', //'264px', + width: '100%', + backgroundColor: 'rgb(255,255,255)' }); + + nvMask.addEventListener("click", function () {//处理遮罩层点击 + // console.log('处理遮罩层点击'); + _this.hide(); + callback({ + event: "clickMask" }); + + }); + var myList = []; + list.forEach(function (item, i) { + myList.push({ + tag: 'img', + src: item.img, + position: { + top: TOP['top' + (parseInt(i / 4) + 1)], + left: LEFT['left' + (1 + i % 4)], + width: iconWidth, + height: iconWidth } }); + + + myList.push({ + tag: 'font', + text: item.text, + textStyles: { + size: textHeight }, + + position: { + top: TOP['top' + (parseInt(i / 4) + 1)] + iconWidth + icontextSpace, + left: LEFT['left' + (1 + i % 4)], + width: iconWidth, + height: textHeight } }); + + + }); + + //绘制底部图标菜单的内容 + nvImageMenu.draw([{ + tag: 'rect', //菜单顶部的分割灰线 + color: '#e7e7e7', + position: { + top: '0px', + height: '1px' } }, + + + { + tag: 'font', + text: cancelText, //底部取消按钮的文字 + textStyles: { + size: '14px' }, + + position: { + bottom: '0px', + height: '44px' } }, + + + { + tag: 'rect', //底部取消按钮的顶部边线 + color: '#e7e7e7', + position: { + bottom: '45px', + height: '1px' } }].concat( + + + myList)); + + nvMask.show(); + nvImageMenu.show(); + // 开始动画 + /* + plus.nativeObj.View.startAnimation({ + type: 'slide-in-bottom', + duration: 300 + }, nvImageMenu, {}, function() { + console.log('plus.nativeObj.View.startAnimation动画结束'); + // 关闭原生动画 + plus.nativeObj.View.clearAnimation(); + nvImageMenu.show() + }); + */ + + + this.isShow = true; + nvImageMenu.addEventListener("click", function (e) {//处理底部图标菜单的点击事件,根据点击位置触发不同的逻辑 + // console.log("click menu"+JSON.stringify(e)); + if (e.screenY > plus.screen.resolutionHeight - 44) {//点击了底部取消按钮 + // callback({event:"clickCancelButton"}) + _this.hide(); + } else if (e.clientX < 5 || e.clientX > screenWidth - 5 || e.clientY < 5) { + //屏幕左右边缘5像素及菜单顶部5像素不处理点击 + } else {//点击了图标按钮 + var iClickIndex = -1; //点击的图标按钮序号,第一个图标按钮的index为0 + var iRow = e.clientY < top2 - left1 / 2 ? 0 : 1; + var iCol = -1; + if (e.clientX < left2 - iconSpace / 2) { + iCol = 0; + } else if (e.clientX < left3 - iconSpace / 2) { + iCol = 1; + } else if (e.clientX < left4 - iconSpace / 2) { + iCol = 2; + } else { + iCol = 3; + } + if (iRow == 0) { + iClickIndex = iCol; + } else { + iClickIndex = iCol + 4; + } + // console.log("点击按钮的序号: " + iClickIndex); + // if (iClickIndex >= 0 && iClickIndex <= 5) { //处理具体的点击逻辑,此处也可以自行定义逻辑。如果增减了按钮,此处也需要跟着修改 + // } + callback({ + event: "clickMenu", + index: iClickIndex }); + + } + }); + /* nvImageMenu.addEventListener("touchstart", function(e) { + if (e.screenY > (plus.screen.resolutionHeight - 44)) { + //TODO 这里可以处理按下背景变灰的效果 + } + }) + nvImageMenu.addEventListener("touchmove", function(e) { + //TODO 这里可以处理按下背景变灰的效果 + if (e.screenY > plus.screen.resolutionHeight - 44) {} + }) + nvImageMenu.addEventListener("touchend", function(e) { + //TODO 这里可以处理释放背景恢复的效果 + }) + */ + } }, { key: "hide", value: function hide() + + { + nvMask.hide(); + nvImageMenu.hide(); + this.isShow = false; + } }]);return NvImageMenu;}();var _default = + + +NvImageMenu;exports.default = _default; + /***/ }) ],[[0,"app-config"]]]); \ No newline at end of file