From c9cbc6a43c5507dfb12f2ec5ab719e11f3646988 Mon Sep 17 00:00:00 2001 From: jia <1451658316@qq.com> Date: Tue, 8 Aug 2023 17:31:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=B0=83=E8=B4=A7=E3=80=81?= =?UTF-8?q?=E5=8F=91=E5=B8=83=E7=95=8C=E9=9D=A2=EF=BC=8C=E5=9C=B0=E5=9D=80?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/api.js | 18 + components/areaWindow/index.vue | 105 +- components/release/release.vue | 185 ++++ components/shoppinglist/shoppinglist.vue | 531 ++++++++++ components/subtractive/subtractive.vue | 208 ++++ components/villageTeam/villageTeam.vue | 261 +++++ config/app.js | 3 +- pages.json | 25 +- pages/trading_hall/adddiscounts/index.vue | 979 ++++++++++++++++++ pages/trading_hall/product_details/index.vue | 351 +++++++ pages/users/online_warehousing/index.vue | 791 +++++++------- pages/users/order_list/index.vue | 2 + pages/users/order_list/indexCopy.vue | 2 + pages/users/releaseOrdermanagement/index.vue | 37 + pages/users/trading_hall/index.vue | 527 ++++++---- pages/users/user_address/index.vue | 55 +- static/images/arrow-bottom.png | Bin 0 -> 196 bytes static/images/discounts.png | Bin 0 -> 4459 bytes static/images/season.png | Bin 0 -> 3928 bytes static/images/serchbtn.png | Bin 0 -> 1463 bytes static/images/sym.png | Bin 0 -> 2854 bytes static/images/trad-add.png | Bin 0 -> 7614 bytes static/images/trad-close.png | Bin 0 -> 25243 bytes uni_modules/uni-share/changelog.md | 18 + .../uni-share/js_sdk/uni-image-menu.js | 204 ++++ uni_modules/uni-share/js_sdk/uni-share.js | 98 ++ uni_modules/uni-share/package.json | 80 ++ uni_modules/uni-share/readme.md | 95 ++ 28 files changed, 3974 insertions(+), 601 deletions(-) create mode 100644 components/release/release.vue create mode 100644 components/shoppinglist/shoppinglist.vue create mode 100644 components/subtractive/subtractive.vue create mode 100644 components/villageTeam/villageTeam.vue create mode 100644 pages/trading_hall/adddiscounts/index.vue create mode 100644 pages/trading_hall/product_details/index.vue create mode 100644 pages/users/releaseOrdermanagement/index.vue create mode 100644 static/images/arrow-bottom.png create mode 100644 static/images/discounts.png create mode 100644 static/images/season.png create mode 100644 static/images/serchbtn.png create mode 100644 static/images/sym.png create mode 100644 static/images/trad-add.png create mode 100644 static/images/trad-close.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/api/api.js b/api/api.js index 3daf575..b0c8f23 100644 --- a/api/api.js +++ b/api/api.js @@ -268,4 +268,22 @@ export function ajcaptchaCheck(data) { return request.post("ajcheck", data, { noAuth: true }); +} + + + +/** + * 获取所在的地区数据 + * @param {Object} data + */ +export function village(data) { + return request.get('v2/system/geo/lst', data, { noAuth: true }); +} + +/** + * 获取所在的村队数据 + * @param {Object} data + */ +export function brigade(data) { + return request.get('v2/system/brigade', data, { noAuth: true }); } \ No newline at end of file diff --git a/components/areaWindow/index.vue b/components/areaWindow/index.vue index 13797f3..d217e3a 100644 --- a/components/areaWindow/index.vue +++ b/components/areaWindow/index.vue @@ -36,7 +36,7 @@ // | Author: CRMEB Team // +---------------------------------------------------------------------- import {getAddressList} from '@/api/user.js'; - import { getCityV2 } from '@/api/api.js'; + import { getCityV2,village } from '@/api/api.js'; import { mapGetters } from "vuex"; const CACHE_ADDRESS = {}; export default { @@ -87,25 +87,74 @@ this.loadAddress(0) }, methods: { - change(pid,index){ + change(pid){ if(this.selectedIndex == index) return; if(pid === -1){ pid = this.selectedArr.length ? this.selectedArr[this.selectedArr.length -1].id : 0; } + console.log(index) this.selectedIndex = index; this.loadAddress(pid); }, - loadAddress(pid){ + loadAddress(pid,type){ if(CACHE_ADDRESS[pid]){ this.addressList = CACHE_ADDRESS[pid]; return ; } this.is_loading = true; - getCityV2(pid).then(res=>{ - this.is_loading = false; - CACHE_ADDRESS[pid] = res.data; - this.addressList = res.data; - }) + // getCityV2(pid).then(res=>{ + + // this.is_loading = false; + // CACHE_ADDRESS[pid] = res.data; + // this.addressList = res.data; + // }) + + if(type=='province'){ + + village({province_code:pid}).then(res=>{ + this.is_loading = false; + CACHE_ADDRESS[pid] = res.data; + this.addressList = res.data; + + }) + }else if(type=='city'){ + village({city_code:pid}).then(res=>{ + this.is_loading = false; + CACHE_ADDRESS[pid] = res.data; + this.addressList = res.data; + + }) + }else if(type=='area'){ + village({area_code:pid}).then(res=>{ + if(res.data.length>0){ + this.is_loading = false; + CACHE_ADDRESS[pid] = res.data; + this.addressList = res.data; + }else{ + this.$emit('submit', [...this.selectedArr]); + this.$emit('changeClose'); + } + }) + }else if(type=='street'){ + village({street_code:pid}).then(res=>{ + if(res.data.length>0){ + this.is_loading = false; + CACHE_ADDRESS[pid] = res.data; + this.addressList = res.data; + }else{ + this.$emit('submit', [...this.selectedArr]); + this.$emit('changeClose'); + } + }) + }else{ + + village().then(res=>{ + this.is_loading = false; + CACHE_ADDRESS[pid] = res.data; + this.addressList = res.data; + }) + } + this.goTop() }, selected(item){ @@ -114,17 +163,49 @@ this.selectedArr.splice(this.selectedIndex + 1,999) this.selectedArr[this.selectedIndex] = item; this.selectedIndex = -1; - }else if(!item.parent_id){ + } + + // else if(!item.parent_id){ + // this.selectedArr = [item]; + // }else{ + // this.selectedArr.push(item); + // } + else if(!item.id){ this.selectedArr = [item]; }else{ - this.selectedArr.push(item); + + if(this.selectedArr.length>4){ + let arry=[] + arry.push(item) + this.selectedArr=arry + }else{ + this.selectedArr.push(item); + } + + } - if(item.snum){ - this.loadAddress(item.id); + + if(item.type=="province"){ + + this.loadAddress(item.code,"province"); + + }else if(item.type=="city"){ + this.loadAddress(item.code,"city"); + }else if(item.type=="area"){ + this.loadAddress(item.code,"area"); + }else if(item.type=="street"){ + this.loadAddress(item.code,"street"); } else { this.$emit('submit', [...this.selectedArr]); this.$emit('changeClose'); } + + // if(item.snum){ + // this.loadAddress(item.id); + // } else { + // this.$emit('submit', [...this.selectedArr]); + // this.$emit('changeClose'); + // } this.goTop() }, close: function() { diff --git a/components/release/release.vue b/components/release/release.vue new file mode 100644 index 0000000..8bd80f2 --- /dev/null +++ b/components/release/release.vue @@ -0,0 +1,185 @@ + + + + + \ No newline at end of file diff --git a/components/shoppinglist/shoppinglist.vue b/components/shoppinglist/shoppinglist.vue new file mode 100644 index 0000000..0af82a1 --- /dev/null +++ b/components/shoppinglist/shoppinglist.vue @@ -0,0 +1,531 @@ + + + + + \ No newline at end of file diff --git a/components/subtractive/subtractive.vue b/components/subtractive/subtractive.vue new file mode 100644 index 0000000..8ee625e --- /dev/null +++ b/components/subtractive/subtractive.vue @@ -0,0 +1,208 @@ + + + \ No newline at end of file diff --git a/components/villageTeam/villageTeam.vue b/components/villageTeam/villageTeam.vue new file mode 100644 index 0000000..0cd0015 --- /dev/null +++ b/components/villageTeam/villageTeam.vue @@ -0,0 +1,261 @@ + + + + + diff --git a/config/app.js b/config/app.js index 2eae9d4..1284abe 100644 --- a/config/app.js +++ b/config/app.js @@ -10,8 +10,9 @@ let httpApiThree // let httpApi = 'http://192.168.31.110:8324' // 测试 if (process.env.NODE_ENV === "development") { // httpApi = 'https://shop.lihaink.cn' // 生产 - httpApi = "https://crmeb-test.shop.lihaink.cn" + // httpApi = "https://crmeb-test.shop.lihaink.cn" // httpApi = "http://192.168.0.222" + httpApi = "http://192.168.0.108:8325" // #ifdef MP-WEIXIN httpApiTwo = "https://nk.lihaink.cn" httpApiThree = 'http://ceshi-oa.lihaink.cn' diff --git a/pages.json b/pages.json index 62b545c..83381a8 100644 --- a/pages.json +++ b/pages.json @@ -694,13 +694,36 @@ }, { "path": "trading_hall/index", "style": { - "navigationBarTitleText": "", + "navigationBarTitleText": "交易大厅", "enablePullDownRefresh": false } } ] }, + { + "root": "pages/trading_hall", + "name": "trading_hall", + "pages": [{ + "path": "adddiscounts/index", + "style": { + "navigationBarTitleText": "新增调货", + "enablePullDownRefresh": false + } + + },{ + "path": "product_details/index", + "style": { + "navigationBarTitleText": "商品详情", + "enablePullDownRefresh": false + } + + } + + ] + }, + + { "root": "pages/store", "name": "store", diff --git a/pages/trading_hall/adddiscounts/index.vue b/pages/trading_hall/adddiscounts/index.vue new file mode 100644 index 0000000..d1a28a4 --- /dev/null +++ b/pages/trading_hall/adddiscounts/index.vue @@ -0,0 +1,979 @@ + + + + + \ No newline at end of file diff --git a/pages/trading_hall/product_details/index.vue b/pages/trading_hall/product_details/index.vue new file mode 100644 index 0000000..db78bd5 --- /dev/null +++ b/pages/trading_hall/product_details/index.vue @@ -0,0 +1,351 @@ + + + + + \ No newline at end of file diff --git a/pages/users/online_warehousing/index.vue b/pages/users/online_warehousing/index.vue index 968e232..38c6fb1 100644 --- a/pages/users/online_warehousing/index.vue +++ b/pages/users/online_warehousing/index.vue @@ -1,460 +1,461 @@ \ No newline at end of file diff --git a/pages/users/order_list/index.vue b/pages/users/order_list/index.vue index 99e989b..79bb8e2 100644 --- a/pages/users/order_list/index.vue +++ b/pages/users/order_list/index.vue @@ -650,6 +650,7 @@ groupOrderList({ page: that.page, limit: that.limit, + product_type:0 }).then(res => { that.isReady = true; let list = res.data.list || []; @@ -670,6 +671,7 @@ status: that.orderStatus - 1, page: that.page, limit: that.limit, + product_type:0 }).then(res => { let list = res.data.list || []; let loadend = list.length < that.limit; diff --git a/pages/users/order_list/indexCopy.vue b/pages/users/order_list/indexCopy.vue index 496ccd8..936566b 100644 --- a/pages/users/order_list/indexCopy.vue +++ b/pages/users/order_list/indexCopy.vue @@ -651,6 +651,7 @@ groupOrderList({ page: that.page, limit: that.limit, + }).then(res => { that.isReady = true; let list = res.data.list || []; @@ -671,6 +672,7 @@ status: that.orderStatus - 1, page: that.page, limit: that.limit, + product_type:98 }).then(res => { let list = res.data.list || []; let loadend = list.length < that.limit; diff --git a/pages/users/releaseOrdermanagement/index.vue b/pages/users/releaseOrdermanagement/index.vue new file mode 100644 index 0000000..bc5b404 --- /dev/null +++ b/pages/users/releaseOrdermanagement/index.vue @@ -0,0 +1,37 @@ + + + + + \ No newline at end of file diff --git a/pages/users/trading_hall/index.vue b/pages/users/trading_hall/index.vue index 1509485..e4c4770 100644 --- a/pages/users/trading_hall/index.vue +++ b/pages/users/trading_hall/index.vue @@ -1,208 +1,371 @@ \ No newline at end of file diff --git a/pages/users/user_address/index.vue b/pages/users/user_address/index.vue index 6a49cd2..4f48e4b 100644 --- a/pages/users/user_address/index.vue +++ b/pages/users/user_address/index.vue @@ -17,22 +17,33 @@ 所在地区 - 请选择地址 + 请选择地区 {{addressText}} + + + 所在村队 + + + 请选择村队 + {{villageText}} + + + + 详细地址 - + @@ -54,6 +65,9 @@ + + @@ -80,6 +94,7 @@ mapGetters } from "vuex"; import areaWindow from '@/components/areaWindow'; + import villageTeam from '@/components/villageTeam/villageTeam.vue'; import { getGeocoder } from '@/api/store.js'; @@ -88,6 +103,7 @@ components: { areaWindow, authorize, + villageTeam }, data() { return { @@ -107,7 +123,10 @@ multiIndex: [0, 0, 0], cityId: 0, display: false, + display_one: false, addressInfo: [], + villageInfo: [], + list: [], latitude: '', longitude: '' }; @@ -116,6 +135,9 @@ ...mapGetters(['isLogin', 'viewColor']), addressText() { return this.addressInfo.map(v => v.name).join('/'); + }, + villageText() { + return this.villageInfo.map(v => v.name).join('/'); } }, onLoad(options) { @@ -137,6 +159,11 @@ methods: { OnChangeAddress(address) { this.addressInfo = address; + this.list = address + }, + OnChangevAddress(address) { + this.villageInfo = address; + console.log(this.villageInfo) }, // 地址数据 getCityList: function() { @@ -148,10 +175,16 @@ changeRegion() { this.display = true; }, + changevillage() { + this.display_one = true; + }, // 关闭地址弹窗; changeClose: function() { this.display = false; }, + changevClose: function() { + this.display_one = false; + }, // 授权回调 onLoadFun: function() { this.isShowAuth = false; @@ -171,11 +204,12 @@ if (!this.address_id) return false; let that = this; getAddressDetail(this.address_id).then(res => { - let region = [res.data.province, res.data.city, res.data.district]; + let region = [res.data.province, res.data.city, res.data.district, res.data.street, res.data.village]; that.$set(that, 'userAddress', res.data); that.$set(that, 'region', region); that.city_id = res.data.city_id - that.addressInfo = res.data.area + that.addressInfo = res.data.areas + that.villageInfo = [res.data.brigade] }); }, // 导入共享地址(小程序) @@ -240,17 +274,14 @@ // console.log(err); }); }, - selfLocation() { - console.log(66) let self = this uni.showLoading({ title: '定位中', mask: true, }); uni.getLocation({ - type: 'wgs84', - timeout: '10', + type: 'gcj02', success: (res) => { let latitude, longitude; latitude = res.latitude.toString(); @@ -316,13 +347,17 @@ if (!that.addressInfo.length) return that.$util.Tips({ title: '请选择所在地区' }); + if (!that.villageInfo.length) return that.$util.Tips({ + title: '请选择所在村队' + }); if (!value.detail) return that.$util.Tips({ title: '请填写详细地址' }); value.address_id = that.address_id; value.is_default = that.userAddress.is_default ? 1 : 0; value.area = that.addressInfo; - + value.brigade=that.villageInfo[0] + uni.showLoading({ title: '保存中', mask: true diff --git a/static/images/arrow-bottom.png b/static/images/arrow-bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..25a4aa84cf0ab0b7febf161f9417f646e1b543e6 GIT binary patch literal 196 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`-JULvAr}70DGLM)f>z8=6p;LI zI`G_#-2aO=AF1Gs)V;yIUna%(pW((i|IUBd-&}mZ*{i0lraUMkJtbjH!mt0=SyB{j zcoKwu@ElymrYi7JvdNoIS!{#mk#vJ=87|itxcDc`FRbKEw`!1NGGd6|@xa%^URE^Q tk!{2K{r7vc)7S#NRMc3Lf}J;tGpOwe6V%?6JQe6H22WQ%mvv4FO#rmHMMD4p literal 0 HcmV?d00001 diff --git a/static/images/discounts.png b/static/images/discounts.png new file mode 100644 index 0000000000000000000000000000000000000000..9b5ff9c29cafdcee69d2b015ded0beae72678dbf GIT binary patch literal 4459 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 literal 0 HcmV?d00001 diff --git a/static/images/season.png b/static/images/season.png new file mode 100644 index 0000000000000000000000000000000000000000..d2568dd81b21a5f6d74044720ed53775f6a831b4 GIT binary patch literal 3928 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≫g^Gc@2%m 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 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..c858c67 --- /dev/null +++ b/uni_modules/uni-share/changelog.md @@ -0,0 +1,18 @@ +## 2.0.2(2021-12-16) +修复在某些情况下报:`Cannot read property 'hide' of undefined`的问题 +## 2.0.1(2021-11-29) +修改错误的scene值WXSenceTimeline(分享到朋友圈)更正为WXSceneTimeline +## 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..c03e51b --- /dev/null +++ b/uni_modules/uni-share/js_sdk/uni-image-menu.js @@ -0,0 +1,204 @@ +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() { + if (this.isShow) { + nvMask.hide() + nvImageMenu.hide() + this.isShow = false + } + } +} +export default NvImageMenu \ No newline at end of file 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..fa43a0e --- /dev/null +++ b/uni_modules/uni-share/package.json @@ -0,0 +1,80 @@ +{ + "id": "uni-share", + "displayName": "uni-share", + "version": "2.0.2", + "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..dced6d6 --- /dev/null +++ b/uni_modules/uni-share/readme.md @@ -0,0 +1,95 @@ +#### 本功能基于[底部图标菜单](https://ext.dcloud.net.cn/plugin?id=4858)封装而成。 +### 示例代码 +``` + + + +``` \ No newline at end of file