From cf1ad1c24b9ec778b1740887da0532f27241132b Mon Sep 17 00:00:00 2001 From: cansnow Date: Wed, 17 Dec 2025 08:47:58 +0800 Subject: [PATCH] 14 --- .gitignore | 1 + manifest.json | 1 - pages.json | 6 + pages/common/{article.nvue => article.vue} | 0 pages/common/map.vue | 371 ++--- pages/common/{scan.nvue => scan.vue} | 0 pages/common/{upgrade.nvue => upgrade.vue} | 0 .../components/ChatingFooter/Recoder.vue | 176 +++ .../chating/components/ChatingHeader.vue | 5 - .../MessageItem/AtTextMessageRender.vue | 10 +- .../MessageItem/LocationMessageRender.vue | 103 +- .../MessageItem/PictureMessageRender.vue | 66 +- .../MessageItem/TextMessageRender.vue | 2 +- .../MessageItem/VideoMessageRender.vue | 57 +- .../MessageItem/VoiceMessageRender.vue | 128 +- .../chating/components/MessageItem/index.vue | 13 +- pages/conversation/chating/index.vue | 68 +- pages/conversation/conversationList/index.vue | 8 +- pages/conversation/singleSettings/index.vue | 5 +- pages/workbench/index/index.vue | 18 +- pages/workbench/near/components/UserItem.vue | 86 ++ pages/workbench/near/near.vue | 95 ++ static/images/chat/voice/voice-left-1.png | Bin 0 -> 7043 bytes static/images/chat/voice/voice-left-2.png | Bin 0 -> 6935 bytes static/images/chat/voice/voice-left-3.png | Bin 0 -> 6233 bytes static/images/chat/voice/voice-right-1.png | Bin 0 -> 7070 bytes static/images/chat/voice/voice-right-2.png | Bin 0 -> 6935 bytes static/images/chat/voice/voice-right-3.png | Bin 0 -> 6360 bytes store/getters.js | 2 + store/modules/message.js | 24 +- uni_modules/Sansnn-uQRCode/changelog.md | 3 - .../components/u-qrcode/u-qrcode.vue | 924 ------------- .../components/uqrcode/uqrcode.vue | 924 ------------- .../js_sdk/gcanvas/bridge/bridge-weex.js | 241 ---- .../context-2d/FillStyleLinearGradient.js | 18 - .../gcanvas/context-2d/FillStylePattern.js | 8 - .../context-2d/FillStyleRadialGradient.js | 17 - .../gcanvas/context-2d/RenderingContext.js | 666 --------- .../gcanvas/context-webgl/ActiveInfo.js | 11 - .../js_sdk/gcanvas/context-webgl/Buffer.js | 21 - .../gcanvas/context-webgl/Framebuffer.js | 21 - .../js_sdk/gcanvas/context-webgl/GLenum.js | 298 ----- .../js_sdk/gcanvas/context-webgl/GLmethod.js | 142 -- .../js_sdk/gcanvas/context-webgl/GLtype.js | 23 - .../js_sdk/gcanvas/context-webgl/Program.js | 21 - .../gcanvas/context-webgl/Renderbuffer.js | 21 - .../gcanvas/context-webgl/RenderingContext.js | 1191 ----------------- .../js_sdk/gcanvas/context-webgl/Shader.js | 22 - .../context-webgl/ShaderPrecisionFormat.js | 11 - .../js_sdk/gcanvas/context-webgl/Texture.js | 22 - .../gcanvas/context-webgl/UniformLocation.js | 22 - .../gcanvas/context-webgl/classUtils.js | 3 - .../js_sdk/gcanvas/env/canvas.js | 74 - .../js_sdk/gcanvas/env/image.js | 96 -- .../Sansnn-uQRCode/js_sdk/gcanvas/env/tool.js | 24 - .../Sansnn-uQRCode/js_sdk/gcanvas/index.js | 39 - .../js_sdk/uqrcode/package.json | 12 - .../Sansnn-uQRCode/js_sdk/uqrcode/uqrcode.js | 47 - uni_modules/Sansnn-uQRCode/license.md | 201 --- uni_modules/Sansnn-uQRCode/package.json | 83 -- uni_modules/Sansnn-uQRCode/readme.md | 318 ----- uni_modules/ly-map/changelog.md | 41 + .../ly-map/components/ly-map/ly-map.vue | 662 +++++++++ uni_modules/ly-map/package.json | 79 ++ uni_modules/ly-map/readme.md | 615 +++++++++ uni_modules/ly-map/static/ly-map/center.png | Bin 0 -> 1707 bytes uni_modules/ly-map/static/ly-map/location.png | Bin 0 -> 2103 bytes util/index.js | 361 ++--- 68 files changed, 2423 insertions(+), 6104 deletions(-) rename pages/common/{article.nvue => article.vue} (100%) rename pages/common/{scan.nvue => scan.vue} (100%) rename pages/common/{upgrade.nvue => upgrade.vue} (100%) create mode 100644 pages/conversation/chating/components/ChatingFooter/Recoder.vue create mode 100644 pages/workbench/near/components/UserItem.vue create mode 100644 pages/workbench/near/near.vue create mode 100644 static/images/chat/voice/voice-left-1.png create mode 100644 static/images/chat/voice/voice-left-2.png create mode 100644 static/images/chat/voice/voice-left-3.png create mode 100644 static/images/chat/voice/voice-right-1.png create mode 100644 static/images/chat/voice/voice-right-2.png create mode 100644 static/images/chat/voice/voice-right-3.png delete mode 100644 uni_modules/Sansnn-uQRCode/changelog.md delete mode 100644 uni_modules/Sansnn-uQRCode/components/u-qrcode/u-qrcode.vue delete mode 100644 uni_modules/Sansnn-uQRCode/components/uqrcode/uqrcode.vue delete mode 100644 uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/bridge/bridge-weex.js delete mode 100644 uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-2d/FillStyleLinearGradient.js delete mode 100644 uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-2d/FillStylePattern.js delete mode 100644 uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-2d/FillStyleRadialGradient.js delete mode 100644 uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-2d/RenderingContext.js delete mode 100644 uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/ActiveInfo.js delete mode 100644 uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/Buffer.js delete mode 100644 uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/Framebuffer.js delete mode 100644 uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/GLenum.js delete mode 100644 uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/GLmethod.js delete mode 100644 uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/GLtype.js delete mode 100644 uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/Program.js delete mode 100644 uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/Renderbuffer.js delete mode 100644 uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/RenderingContext.js delete mode 100644 uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/Shader.js delete mode 100644 uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/ShaderPrecisionFormat.js delete mode 100644 uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/Texture.js delete mode 100644 uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/UniformLocation.js delete mode 100644 uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/classUtils.js delete mode 100644 uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/env/canvas.js delete mode 100644 uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/env/image.js delete mode 100644 uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/env/tool.js delete mode 100644 uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/index.js delete mode 100644 uni_modules/Sansnn-uQRCode/js_sdk/uqrcode/package.json delete mode 100644 uni_modules/Sansnn-uQRCode/js_sdk/uqrcode/uqrcode.js delete mode 100644 uni_modules/Sansnn-uQRCode/license.md delete mode 100644 uni_modules/Sansnn-uQRCode/package.json delete mode 100644 uni_modules/Sansnn-uQRCode/readme.md create mode 100644 uni_modules/ly-map/changelog.md create mode 100644 uni_modules/ly-map/components/ly-map/ly-map.vue create mode 100644 uni_modules/ly-map/package.json create mode 100644 uni_modules/ly-map/readme.md create mode 100644 uni_modules/ly-map/static/ly-map/center.png create mode 100644 uni_modules/ly-map/static/ly-map/location.png diff --git a/.gitignore b/.gitignore index 9fd54aa..56cff83 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,7 @@ uniCloud-aliyun /build /unpackage/cache /unpackage/debug +/unpackage/release /unpackage/dist /unpackage/resources diff --git a/manifest.json b/manifest.json index 5232dcf..cd99537 100644 --- a/manifest.json +++ b/manifest.json @@ -21,7 +21,6 @@ "Camera" : {}, "Record" : {}, "Geolocation" : {}, - "Maps" : {}, "Fingerprint" : {}, "Contacts" : {}, "Barcode" : {} diff --git a/pages.json b/pages.json index 1fe4b29..3d99be7 100644 --- a/pages.json +++ b/pages.json @@ -344,6 +344,12 @@ "style": { "navigationBarTitleText": "" } + }, + { + "path": "pages/workbench/near/near", + "style": { + "navigationBarTitleText": "" + } } ], "tabBar": { diff --git a/pages/common/article.nvue b/pages/common/article.vue similarity index 100% rename from pages/common/article.nvue rename to pages/common/article.vue diff --git a/pages/common/map.vue b/pages/common/map.vue index 152037e..45d503a 100644 --- a/pages/common/map.vue +++ b/pages/common/map.vue @@ -1,42 +1,27 @@ + + @@ -54,41 +61,22 @@ // 如果有远程 snapshotUrl,则下载到 coverCachePath const snapshotUrl = (this.message.pictureElem.snapshotPicture?.url ?? this.message.pictureElem.sourcePath ); const key = md5(snapshotUrl || ''); - this.coverCachePath = `_doc/${this.conversationID}/img_${key}.jpg`; - if (typeof plus === 'undefined' || !this.coverCachePath) return; - try { - // 检查封面是否存在 - const coverExists = await util.fileExsit(self.coverCachePath); - this.coverExists = !!coverExists; - if (this.coverExists) { - this.src = this.coverCachePath; - return; - } - if (!snapshotUrl) { - this.src="/static/images/sync_error.png"; - return; - } - this.coverDownloading = true; - await new Promise((resolve, reject) => { - util.downloadFile(snapshotUrl, self.coverCachePath, function(localPath) { - self.coverDownloading = false; - self.coverExists = true; - resolve(localPath); - }, function(err) { - self.coverDownloading = false; - reject(err); - }, function(progress) { - self.coverDownloadProgress = progress; - }); - }); - } catch (e) { - this.coverDownloading = false; - } + this.coverCachePath = `${this.conversationID}/img_${key}.jpg`; + util.cacheFile(snapshotUrl,this.coverCachePath,(e)=>{ + self.coverDownloading = false; + self.src = coverCachePath; + console.log(e); + },(e)=>{ + console.log(e); + },(e)=>{ + console.log(e); + }); }, clickMediaItem() { uni.previewImage({ current: 0, - urls: [this.message.pictureElem.sourcePicture.url], + //urls: [this.message.pictureElem.sourcePicture.url], + urls: ["_doc/"+this.coverCachePath], indicator: "none", }); }, @@ -104,21 +92,5 @@ position: relative; border-radius: 16rpx; overflow: hidden; - - .play_icon { - width: 48px; - height: 48px; - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - } - - .video_duration { - position: absolute; - bottom: 12rpx; - right: 24rpx; - color: #fff; - } } \ No newline at end of file diff --git a/pages/conversation/chating/components/MessageItem/TextMessageRender.vue b/pages/conversation/chating/components/MessageItem/TextMessageRender.vue index 1a77fe4..4b707d0 100644 --- a/pages/conversation/chating/components/MessageItem/TextMessageRender.vue +++ b/pages/conversation/chating/components/MessageItem/TextMessageRender.vue @@ -1,6 +1,6 @@ diff --git a/pages/conversation/chating/components/MessageItem/VideoMessageRender.vue b/pages/conversation/chating/components/MessageItem/VideoMessageRender.vue index d03e36a..2599e1f 100644 --- a/pages/conversation/chating/components/MessageItem/VideoMessageRender.vue +++ b/pages/conversation/chating/components/MessageItem/VideoMessageRender.vue @@ -96,9 +96,7 @@ coverDownloadProgress: 0, videoDownloading: false, videoDownloadProgress: 0, - coverExists: false, videoExists: false, - coverCachePath:"", videoCachePath:"", previewVideoFlag: false, previewVideoSrc: "", @@ -121,44 +119,19 @@ // 如果有远程 snapshotUrl,则下载到 coverCachePath const snapshotUrl = this.message?.videoElem?.snapshotUrl; const key = md5(this.message?.videoElem?.videoUrl || ''); - this.coverCachePath = `_doc/${this.conversationID}/cover_${key}.jpg`; - this.videoCachePath = `_doc/${this.conversationID}/${key}.mp4`; - const coverExists = await util.fileExsit(this.coverCachePath); - - // 自动缓存封面到 this.coverCachePath - const self = this; - if (typeof plus === 'undefined' || !this.coverCachePath) return; - try { - // 检查封面是否存在 - const coverExists = await util.fileExsit(self.coverCachePath); - this.coverExists = !!coverExists; - // 同时检查视频缓存是否存在 - const vidExists = await util.fileExsit(self.videoCachePath); - this.videoExists = !!vidExists; - if (this.coverExists) { - this.src = this.coverCachePath; - return; - } - if (!snapshotUrl) { - this.src="/static/images/sync_error.png"; - return; - } - this.coverDownloading = true; - await new Promise((resolve, reject) => { - util.downloadFile(snapshotUrl, self.coverCachePath, function(localPath) { - self.coverDownloading = false; - self.coverExists = true; - resolve(localPath); - }, function(err) { - self.coverDownloading = false; - reject(err); - }, function(progress) { - self.coverDownloadProgress = progress; - }); - }); - } catch (e) { - this.coverDownloading = false; - } + const coverCachePath = `${this.conversationID}/cover_${key}.jpg`; + this.videoCachePath = `${this.conversationID}/${key}.mp4`; + this.videoExists = await util.fileExists(this.videoCachePath); + self.coverDownloading = true; + util.cacheFile(snapshotUrl,coverCachePath,(e)=>{ + self.coverDownloading = false; + self.src = coverCachePath; + console.log(e); + },(e)=>{ + console.log(e); + },(e)=>{ + console.log(e); + }); }, clickMediaItem() { uni.previewImage({ @@ -173,7 +146,7 @@ onOverlayClick() { // 点击覆盖层:如果视频已缓存则直接播放,否则开始下载 if (this.videoExists) { - this.playVideo(this.videoCachePath); + this.playVideo("_doc/"+this.videoCachePath); return; } const url = this.message?.videoElem?.videoUrl || this.message?.videoElem?.videoPath; @@ -186,7 +159,7 @@ util.downloadFile(url, this.videoCachePath, (localPath) => { this.videoDownloading = false; this.videoExists = true; - this.playVideo(localPath); + this.playVideo("_doc/"+localPath); }, (err) => { this.videoDownloading = false; uni.showToast({ title: '下载失败' }); diff --git a/pages/conversation/chating/components/MessageItem/VoiceMessageRender.vue b/pages/conversation/chating/components/MessageItem/VoiceMessageRender.vue index 66d103b..2d396a3 100644 --- a/pages/conversation/chating/components/MessageItem/VoiceMessageRender.vue +++ b/pages/conversation/chating/components/MessageItem/VoiceMessageRender.vue @@ -1,24 +1,144 @@ v - \ No newline at end of file + \ No newline at end of file diff --git a/pages/conversation/chating/components/MessageItem/index.vue b/pages/conversation/chating/components/MessageItem/index.vue index edcbaee..d32abbb 100644 --- a/pages/conversation/chating/components/MessageItem/index.vue +++ b/pages/conversation/chating/components/MessageItem/index.vue @@ -16,7 +16,12 @@ - + @@ -172,7 +177,9 @@ console.log('longtapEvent'); this.$emit('userEvent',{type:"longtapMsgContent"},this.source); }, - + onMessageEvent(e){ + this.$emit('userEvent',e); + }, }, }; @@ -295,7 +302,7 @@ flex-direction: row-reverse; .bg_container { - border-radius: 12rpx 0 12rpx 12rpx; + border-radius: 6rpx; background-color: #94ec68 !important; } } diff --git a/pages/conversation/chating/index.vue b/pages/conversation/chating/index.vue index 526ba8f..eb16362 100644 --- a/pages/conversation/chating/index.vue +++ b/pages/conversation/chating/index.vue @@ -44,14 +44,47 @@ selectFlag: false, selectItems: [], forwardItems: [], - forwardMerge: false + forwardMerge: false, + Audio:null }; }, computed: { ...mapGetters([ - "storeCurrentConversation", + "storeCurrentConversation","storeCurrentMsg",'storeCurrentMsgID' ]), }, + created() { + this.Audio = uni.createInnerAudioContext(); //音频 + /* + 设置音频播放模式,可取值: + "ambient" - 不中止其他声音播放,不能后台播放,静音后无声音; + "soloAmbient" - 中止其他声音播放,不能后台播放,静音后无声音; + "playback" - 中止其他声音,可以后台播放,静音后有声音。 + 默认值为"playback"。 + */ + this.Audio.sessionCategory="soloAmbient"; + this.Audio.onError((r)=>{ + console.log(r); + this.updateCurrentMsg({}); + }) + this.Audio.onEnded((r)=>{ + console.log(r); + this.updateCurrentMsg({}); + }) + }, + watch:{ + storeCurrentMsgID(nv,ov){ + if(nv!=ov && nv){ + if(this.storeCurrentMsg.soundElem.soundPath){ + this.Audio.src= this.storeCurrentMsg.soundElem.soundPath; + this.Audio.play(); + return ; + } + this.updateCurrentMsg({}); + } + console.log(nv,ov,this.Audio,this.storeCurrentMsg); + } + }, onLoad(options) { //console.log("onload"); this.setPageListener(); @@ -62,16 +95,25 @@ onUnload() { //console.log("unload"); this.disposePageListener(); - markConversationAsRead({ - ...this.$store.getters.storeCurrentConversation, - }, - true - ); + markConversationAsRead({...this.$store.getters.storeCurrentConversation,},true); this.resetConversationState(); this.resetMessageState(); + // #ifdef APP-PLUS + if (this.Audio) { + this.Audio.stop(); + this.Audio.destroy(); + } + // #endif + }, + onHide() { + // #ifdef APP-PLUS + if (this.Audio) { + this.Audio.stop(); + } + // #endif }, methods: { - ...mapActions("message", ["resetMessageState", "deleteMessages", "pushNewMessage", "updateOneMessage"]), + ...mapActions("message", ["updateCurrentMsg","resetMessageState", "deleteMessages", "pushNewMessage", "updateOneMessage"]), ...mapActions("conversation", ["resetConversationState"]), scrollToBottom(isRecv = false) { this.$refs.chatingListRef.scrollToBottom(false, isRecv); @@ -177,7 +219,6 @@ if (!founded) { arr.push(data); } - console.log(arr.length); this.selectItems = [...arr]; } return; @@ -258,7 +299,14 @@ }) return; } - + if(e.type == 'audio_msg_click'){ + if(_this.storeCurrentMsgID){ + _this.updateCurrentMsg({clientMsgID:""}); + }else{ + _this.updateCurrentMsg(e.message); + } + return ; + } if (e.type == 'longtapMsgContent') { let menu = []; if (data.contentType == MessageType.TextMessage) { diff --git a/pages/conversation/conversationList/index.vue b/pages/conversation/conversationList/index.vue index f9255e3..9f026f4 100644 --- a/pages/conversation/conversationList/index.vue +++ b/pages/conversation/conversationList/index.vue @@ -81,10 +81,10 @@ // } // } // }) - uni.switchTab({ - url:"/pages/profile/index/index" - }) - //prepareConversationState(this.storeConversationList[0]); + // uni.switchTab({ + // url:"/pages/profile/index/index" + // }) + prepareConversationState(this.storeConversationList[1]); },1000) }, methods: { diff --git a/pages/conversation/singleSettings/index.vue b/pages/conversation/singleSettings/index.vue index 5ef4fbc..a0a0bd4 100644 --- a/pages/conversation/singleSettings/index.vue +++ b/pages/conversation/singleSettings/index.vue @@ -11,9 +11,9 @@ - + - + @@ -103,7 +103,6 @@ } .setting_row { - margin: 24rpx 24rpx 0 24rpx; background: #fff; border-radius: 6px; overflow: hidden; diff --git a/pages/workbench/index/index.vue b/pages/workbench/index/index.vue index fe28fb8..3745ecf 100644 --- a/pages/workbench/index/index.vue +++ b/pages/workbench/index/index.vue @@ -23,9 +23,22 @@ - + + + + + + + + + @@ -33,7 +46,8 @@ export default { data() { return { - thumbSize:"base" + thumbSize:"base", + cellSize:"large" }; }, computed:{ diff --git a/pages/workbench/near/components/UserItem.vue b/pages/workbench/near/components/UserItem.vue new file mode 100644 index 0000000..ee816a0 --- /dev/null +++ b/pages/workbench/near/components/UserItem.vue @@ -0,0 +1,86 @@ + + + + + \ No newline at end of file diff --git a/pages/workbench/near/near.vue b/pages/workbench/near/near.vue new file mode 100644 index 0000000..465cba6 --- /dev/null +++ b/pages/workbench/near/near.vue @@ -0,0 +1,95 @@ + + + + + \ No newline at end of file diff --git a/static/images/chat/voice/voice-left-1.png b/static/images/chat/voice/voice-left-1.png new file mode 100644 index 0000000000000000000000000000000000000000..bf343982d836d7f94bad20e15b164fa97b5e5031 GIT binary patch literal 7043 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 JzEai_{XfR3BkceH literal 0 HcmV?d00001 diff --git a/static/images/chat/voice/voice-left-2.png b/static/images/chat/voice/voice-left-2.png new file mode 100644 index 0000000000000000000000000000000000000000..8ede26c767094f01cb61c4de472e04b508e48dda GIT binary patch literal 6935 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 XgUwj;B8RDeEC2(YTgZR3?nnI}<>(gf literal 0 HcmV?d00001 diff --git a/store/getters.js b/store/getters.js index 1adcbf7..7e894fa 100644 --- a/store/getters.js +++ b/store/getters.js @@ -14,6 +14,8 @@ export default { storeUnHandleFriendApplicationNum: (state) => state.contact.unHandleFriendApplicationNum, storeHistoryMessageList: (state) => state.message.historyMessageList, storeHasMoreMessage: (state) => state.message.hasMoreMessage, + storeCurrentMsg: (state) => state.message.currentMsg, + storeCurrentMsgID: (state) => state.message.currentMsgID, storeSelfInfo: (state) => state.user.selfInfo, storeCurrentUserID: (state) => state.user.selfInfo.userID, storeIsSyncing: (state) => state.user.isSyncing, diff --git a/store/modules/message.js b/store/modules/message.js index 8e66334..5050a8a 100644 --- a/store/modules/message.js +++ b/store/modules/message.js @@ -1,17 +1,14 @@ -import IMSDK, { - MessageStatus, - MessageType -} from "openim-uniapp-polyfill"; -import { - v4 as uuidv4 -} from "uuid"; -import { - UpdateMessageTypes -} from "@/constant"; +import IMSDK, { MessageStatus, MessageType} from "openim-uniapp-polyfill"; +import {v4 as uuidv4} from "uuid"; +import {UpdateMessageTypes} from "@/constant"; const state = { historyMessageList: [], hasMoreMessage: true, + currentMsg: { + "clientMsgID":"" + }, + currentMsgID:"" }; const mutations = { @@ -21,9 +18,16 @@ const mutations = { SET_HAS_MORE_MESSAGE(state, hasMore) { state.hasMoreMessage = hasMore; }, + SET_CURRENT_MSG(state, msg) { + state.currentMsg = msg; + state.currentMsgID = msg?.clientMsgID || ""; + }, }; const actions = { + updateCurrentMsg({commit,state}, message) { + commit("SET_CURRENT_MSG", message); + }, async getHistoryMesageList({commit,state}, params) { let emptyFlag = true; try { diff --git a/uni_modules/Sansnn-uQRCode/changelog.md b/uni_modules/Sansnn-uQRCode/changelog.md deleted file mode 100644 index 210fc2c..0000000 --- a/uni_modules/Sansnn-uQRCode/changelog.md +++ /dev/null @@ -1,3 +0,0 @@ -## 3.6.5(2022-10-14) -修复组件size值为string类型时,调用toTempFilePath导出临时文件路径失败; -优化组件加载本地图片。 diff --git a/uni_modules/Sansnn-uQRCode/components/u-qrcode/u-qrcode.vue b/uni_modules/Sansnn-uQRCode/components/u-qrcode/u-qrcode.vue deleted file mode 100644 index 3116eef..0000000 --- a/uni_modules/Sansnn-uQRCode/components/u-qrcode/u-qrcode.vue +++ /dev/null @@ -1,924 +0,0 @@ - - - - - - diff --git a/uni_modules/Sansnn-uQRCode/components/uqrcode/uqrcode.vue b/uni_modules/Sansnn-uQRCode/components/uqrcode/uqrcode.vue deleted file mode 100644 index 3116eef..0000000 --- a/uni_modules/Sansnn-uQRCode/components/uqrcode/uqrcode.vue +++ /dev/null @@ -1,924 +0,0 @@ - - - - - - diff --git a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/bridge/bridge-weex.js b/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/bridge/bridge-weex.js deleted file mode 100644 index 27086ec..0000000 --- a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/bridge/bridge-weex.js +++ /dev/null @@ -1,241 +0,0 @@ -const isWeex = typeof WXEnvironment !== 'undefined'; -const isWeexIOS = isWeex && /ios/i.test(WXEnvironment.platform); -const isWeexAndroid = isWeex && !isWeexIOS; - -import GLmethod from '../context-webgl/GLmethod'; - -const GCanvasModule = - (typeof weex !== 'undefined' && weex.requireModule) ? (weex.requireModule('gcanvas')) : - (typeof __weex_require__ !== 'undefined') ? (__weex_require__('@weex-module/gcanvas')) : {}; - -let isDebugging = false; - -let isComboDisabled = false; - -const logCommand = (function () { - const methodQuery = []; - Object.keys(GLmethod).forEach(key => { - methodQuery[GLmethod[key]] = key; - }) - const queryMethod = (id) => { - return methodQuery[parseInt(id)] || 'NotFoundMethod'; - } - const logCommand = (id, cmds) => { - const mId = cmds.split(',')[0]; - const mName = queryMethod(mId); - console.log(`=== callNative - componentId:${id}; method: ${mName}; cmds: ${cmds}`); - } - return logCommand; -})(); - -function joinArray(arr, sep) { - let res = ''; - for (let i = 0; i < arr.length; i++) { - if (i !== 0) { - res += sep; - } - res += arr[i]; - } - return res; -} - -const commandsCache = {} - -const GBridge = { - - callEnable: (ref, configArray) => { - - commandsCache[ref] = []; - - return GCanvasModule.enable({ - componentId: ref, - config: configArray - }); - }, - - callEnableDebug: () => { - isDebugging = true; - }, - - callEnableDisableCombo: () => { - isComboDisabled = true; - }, - - callSetContextType: function (componentId, context_type) { - GCanvasModule.setContextType(context_type, componentId); - }, - - callReset: function(id){ - GCanvasModule.resetComponent && canvasModule.resetComponent(componentId); - }, - - render: isWeexIOS ? function (componentId) { - return GCanvasModule.extendCallNative({ - contextId: componentId, - type: 0x60000001 - }); - } : function (componentId) { - return callGCanvasLinkNative(componentId, 0x60000001, 'render'); - }, - - render2d: isWeexIOS ? function (componentId, commands, callback) { - - if (isDebugging) { - console.log('>>> >>> render2d ==='); - console.log('>>> commands: ' + commands); - } - - GCanvasModule.render([commands, callback?true:false], componentId, callback); - - } : function (componentId, commands,callback) { - - if (isDebugging) { - console.log('>>> >>> render2d ==='); - console.log('>>> commands: ' + commands); - } - - callGCanvasLinkNative(componentId, 0x20000001, commands); - if(callback){ - callback(); - } - }, - - callExtendCallNative: isWeexIOS ? function (componentId, cmdArgs) { - - throw 'should not be here anymore ' + cmdArgs; - - } : function (componentId, cmdArgs) { - - throw 'should not be here anymore ' + cmdArgs; - - }, - - - flushNative: isWeexIOS ? function (componentId) { - - const cmdArgs = joinArray(commandsCache[componentId], ';'); - commandsCache[componentId] = []; - - if (isDebugging) { - console.log('>>> >>> flush native ==='); - console.log('>>> commands: ' + cmdArgs); - } - - const result = GCanvasModule.extendCallNative({ - "contextId": componentId, - "type": 0x60000000, - "args": cmdArgs - }); - - const res = result && result.result; - - if (isDebugging) { - console.log('>>> result: ' + res); - } - - return res; - - } : function (componentId) { - - const cmdArgs = joinArray(commandsCache[componentId], ';'); - commandsCache[componentId] = []; - - if (isDebugging) { - console.log('>>> >>> flush native ==='); - console.log('>>> commands: ' + cmdArgs); - } - - const result = callGCanvasLinkNative(componentId, 0x60000000, cmdArgs); - - if (isDebugging) { - console.log('>>> result: ' + result); - } - - return result; - }, - - callNative: function (componentId, cmdArgs, cache) { - - if (isDebugging) { - logCommand(componentId, cmdArgs); - } - - commandsCache[componentId].push(cmdArgs); - - if (!cache || isComboDisabled) { - return GBridge.flushNative(componentId); - } else { - return undefined; - } - }, - - texImage2D(componentId, ...args) { - if (isWeexIOS) { - if (args.length === 6) { - const [target, level, internalformat, format, type, image] = args; - GBridge.callNative( - componentId, - GLmethod.texImage2D + ',' + 6 + ',' + target + ',' + level + ',' + internalformat + ',' + format + ',' + type + ',' + image.src - ) - } else if (args.length === 9) { - const [target, level, internalformat, width, height, border, format, type, image] = args; - GBridge.callNative( - componentId, - GLmethod.texImage2D + ',' + 9 + ',' + target + ',' + level + ',' + internalformat + ',' + width + ',' + height + ',' + border + ',' + - + format + ',' + type + ',' + (image ? image.src : 0) - ) - } - } else if (isWeexAndroid) { - if (args.length === 6) { - const [target, level, internalformat, format, type, image] = args; - GCanvasModule.texImage2D(componentId, target, level, internalformat, format, type, image.src); - } else if (args.length === 9) { - const [target, level, internalformat, width, height, border, format, type, image] = args; - GCanvasModule.texImage2D(componentId, target, level, internalformat, width, height, border, format, type, (image ? image.src : 0)); - } - } - }, - - texSubImage2D(componentId, target, level, xoffset, yoffset, format, type, image) { - if (isWeexIOS) { - if (arguments.length === 8) { - GBridge.callNative( - componentId, - GLmethod.texSubImage2D + ',' + 6 + ',' + target + ',' + level + ',' + xoffset + ',' + yoffset, + ',' + format + ',' + type + ',' + image.src - ) - } - } else if (isWeexAndroid) { - GCanvasModule.texSubImage2D(componentId, target, level, xoffset, yoffset, format, type, image.src); - } - }, - - bindImageTexture(componentId, src, imageId) { - GCanvasModule.bindImageTexture([src, imageId], componentId); - }, - - perloadImage([url, id], callback) { - GCanvasModule.preLoadImage([url, id], function (image) { - image.url = url; - image.id = id; - callback(image); - }); - }, - - measureText(text, fontStyle, componentId) { - return GCanvasModule.measureText([text, fontStyle], componentId); - }, - - getImageData (componentId, x, y, w, h, callback) { - GCanvasModule.getImageData([x, y,w,h],componentId,callback); - }, - - putImageData (componentId, data, x, y, w, h, callback) { - GCanvasModule.putImageData([x, y,w,h,data],componentId,callback); - }, - - toTempFilePath(componentId, x, y, width, height, destWidth, destHeight, fileType, quality, callback){ - GCanvasModule.toTempFilePath([x, y, width,height, destWidth, destHeight, fileType, quality], componentId, callback); - } -} - -export default GBridge; \ No newline at end of file diff --git a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-2d/FillStyleLinearGradient.js b/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-2d/FillStyleLinearGradient.js deleted file mode 100644 index 3e7f03a..0000000 --- a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-2d/FillStyleLinearGradient.js +++ /dev/null @@ -1,18 +0,0 @@ -class FillStyleLinearGradient { - - constructor(x0, y0, x1, y1) { - this._start_pos = { _x: x0, _y: y0 }; - this._end_pos = { _x: x1, _y: y1 }; - this._stop_count = 0; - this._stops = [0, 0, 0, 0, 0]; - } - - addColorStop = function (pos, color) { - if (this._stop_count < 5 && 0.0 <= pos && pos <= 1.0) { - this._stops[this._stop_count] = { _pos: pos, _color: color }; - this._stop_count++; - } - } -} - -export default FillStyleLinearGradient; \ No newline at end of file diff --git a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-2d/FillStylePattern.js b/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-2d/FillStylePattern.js deleted file mode 100644 index 6e4f646..0000000 --- a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-2d/FillStylePattern.js +++ /dev/null @@ -1,8 +0,0 @@ -class FillStylePattern { - constructor(img, pattern) { - this._style = pattern; - this._img = img; - } -} - -export default FillStylePattern; \ No newline at end of file diff --git a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-2d/FillStyleRadialGradient.js b/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-2d/FillStyleRadialGradient.js deleted file mode 100644 index 7790596..0000000 --- a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-2d/FillStyleRadialGradient.js +++ /dev/null @@ -1,17 +0,0 @@ -class FillStyleRadialGradient { - constructor(x0, y0, r0, x1, y1, r1) { - this._start_pos = { _x: x0, _y: y0, _r: r0 }; - this._end_pos = { _x: x1, _y: y1, _r: r1 }; - this._stop_count = 0; - this._stops = [0, 0, 0, 0, 0]; - } - - addColorStop(pos, color) { - if (this._stop_count < 5 && 0.0 <= pos && pos <= 1.0) { - this._stops[this._stop_count] = { _pos: pos, _color: color }; - this._stop_count++; - } - } -} - -export default FillStyleRadialGradient; \ No newline at end of file diff --git a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-2d/RenderingContext.js b/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-2d/RenderingContext.js deleted file mode 100644 index e6b8f48..0000000 --- a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-2d/RenderingContext.js +++ /dev/null @@ -1,666 +0,0 @@ -import FillStylePattern from './FillStylePattern'; -import FillStyleLinearGradient from './FillStyleLinearGradient'; -import FillStyleRadialGradient from './FillStyleRadialGradient'; -import GImage from '../env/image.js'; -import { - ArrayBufferToBase64, - Base64ToUint8ClampedArray -} from '../env/tool.js'; - -export default class CanvasRenderingContext2D { - - _drawCommands = ''; - - _globalAlpha = 1.0; - - _fillStyle = 'rgb(0,0,0)'; - _strokeStyle = 'rgb(0,0,0)'; - - _lineWidth = 1; - _lineCap = 'butt'; - _lineJoin = 'miter'; - - _miterLimit = 10; - - _globalCompositeOperation = 'source-over'; - - _textAlign = 'start'; - _textBaseline = 'alphabetic'; - - _font = '10px sans-serif'; - - _savedGlobalAlpha = []; - - timer = null; - componentId = null; - - _notCommitDrawImageCache = []; - _needRedrawImageCache = []; - _redrawCommands = ''; - _autoSaveContext = true; - // _imageMap = new GHashMap(); - // _textureMap = new GHashMap(); - - constructor() { - this.className = 'CanvasRenderingContext2D'; - //this.save() - } - - setFillStyle(value) { - this.fillStyle = value; - } - - set fillStyle(value) { - this._fillStyle = value; - - if (typeof(value) == 'string') { - this._drawCommands = this._drawCommands.concat("F" + value + ";"); - } else if (value instanceof FillStylePattern) { - const image = value._img; - if (!image.complete) { - image.onload = () => { - var index = this._needRedrawImageCache.indexOf(image); - if (index > -1) { - this._needRedrawImageCache.splice(index, 1); - CanvasRenderingContext2D.GBridge.bindImageTexture(this.componentId, image.src, image._id); - this._redrawflush(true); - } - } - this._notCommitDrawImageCache.push(image); - } else { - CanvasRenderingContext2D.GBridge.bindImageTexture(this.componentId, image.src, image._id); - } - - //CanvasRenderingContext2D.GBridge.bindImageTexture(this.componentId, image.src, image._id); - this._drawCommands = this._drawCommands.concat("G" + image._id + "," + value._style + ";"); - } else if (value instanceof FillStyleLinearGradient) { - var command = "D" + value._start_pos._x.toFixed(2) + "," + value._start_pos._y.toFixed(2) + "," + - value._end_pos._x.toFixed(2) + "," + value._end_pos._y.toFixed(2) + "," + - value._stop_count; - for (var i = 0; i < value._stop_count; ++i) { - command += ("," + value._stops[i]._pos + "," + value._stops[i]._color); - } - this._drawCommands = this._drawCommands.concat(command + ";"); - } else if (value instanceof FillStyleRadialGradient) { - var command = "H" + value._start_pos._x.toFixed(2) + "," + value._start_pos._y.toFixed(2) + "," + value._start_pos._r - .toFixed(2) + "," + - value._end_pos._x.toFixed(2) + "," + value._end_pos._y.toFixed(2) + "," + value._end_pos._r.toFixed(2) + "," + - value._stop_count; - for (var i = 0; i < value._stop_count; ++i) { - command += ("," + value._stops[i]._pos + "," + value._stops[i]._color); - } - this._drawCommands = this._drawCommands.concat(command + ";"); - } - } - - get fillStyle() { - return this._fillStyle; - } - - get globalAlpha() { - return this._globalAlpha; - } - - setGlobalAlpha(value) { - this.globalAlpha = value; - } - - set globalAlpha(value) { - this._globalAlpha = value; - this._drawCommands = this._drawCommands.concat("a" + value.toFixed(2) + ";"); - } - - - get strokeStyle() { - return this._strokeStyle; - } - - setStrokeStyle(value) { - this.strokeStyle = value; - } - - set strokeStyle(value) { - - this._strokeStyle = value; - - if (typeof(value) == 'string') { - this._drawCommands = this._drawCommands.concat("S" + value + ";"); - } else if (value instanceof FillStylePattern) { - CanvasRenderingContext2D.GBridge.bindImageTexture(this.componentId, image.src, image._id); - this._drawCommands = this._drawCommands.concat("G" + image._id + "," + value._style + ";"); - } else if (value instanceof FillStyleLinearGradient) { - var command = "D" + value._start_pos._x.toFixed(2) + "," + value._start_pos._y.toFixed(2) + "," + - value._end_pos._x.toFixed(2) + "," + value._end_pos._y.toFixed(2) + "," + - value._stop_count; - - for (var i = 0; i < value._stop_count; ++i) { - command += ("," + value._stops[i]._pos + "," + value._stops[i]._color); - } - this._drawCommands = this._drawCommands.concat(command + ";"); - } else if (value instanceof FillStyleRadialGradient) { - var command = "H" + value._start_pos._x.toFixed(2) + "," + value._start_pos._y.toFixed(2) + "," + value._start_pos._r - .toFixed(2) + "," + - value._end_pos._x.toFixed(2) + "," + value._end_pos._y + ",".toFixed(2) + value._end_pos._r.toFixed(2) + "," + - value._stop_count; - - for (var i = 0; i < value._stop_count; ++i) { - command += ("," + value._stops[i]._pos + "," + value._stops[i]._color); - } - this._drawCommands = this._drawCommands.concat(command + ";"); - } - } - - get lineWidth() { - return this._lineWidth; - } - - setLineWidth(value) { - this.lineWidth = value; - } - - set lineWidth(value) { - this._lineWidth = value; - this._drawCommands = this._drawCommands.concat("W" + value + ";"); - } - - get lineCap() { - return this._lineCap; - } - - setLineCap(value) { - this.lineCap = value; - } - - set lineCap(value) { - this._lineCap = value; - this._drawCommands = this._drawCommands.concat("C" + value + ";"); - } - - get lineJoin() { - return this._lineJoin; - } - - setLineJoin(value) { - this.lineJoin = value - } - - set lineJoin(value) { - this._lineJoin = value; - this._drawCommands = this._drawCommands.concat("J" + value + ";"); - } - - get miterLimit() { - return this._miterLimit; - } - - setMiterLimit(value) { - this.miterLimit = value - } - - set miterLimit(value) { - this._miterLimit = value; - this._drawCommands = this._drawCommands.concat("M" + value + ";"); - } - - get globalCompositeOperation() { - return this._globalCompositeOperation; - } - - set globalCompositeOperation(value) { - - this._globalCompositeOperation = value; - let mode = 0; - switch (value) { - case "source-over": - mode = 0; - break; - case "source-atop": - mode = 5; - break; - case "source-in": - mode = 0; - break; - case "source-out": - mode = 2; - break; - case "destination-over": - mode = 4; - break; - case "destination-atop": - mode = 4; - break; - case "destination-in": - mode = 4; - break; - case "destination-out": - mode = 3; - break; - case "lighter": - mode = 1; - break; - case "copy": - mode = 2; - break; - case "xor": - mode = 6; - break; - default: - mode = 0; - } - - this._drawCommands = this._drawCommands.concat("B" + mode + ";"); - } - - get textAlign() { - return this._textAlign; - } - - setTextAlign(value) { - this.textAlign = value - } - - set textAlign(value) { - - this._textAlign = value; - let Align = 0; - switch (value) { - case "start": - Align = 0; - break; - case "end": - Align = 1; - break; - case "left": - Align = 2; - break; - case "center": - Align = 3; - break; - case "right": - Align = 4; - break; - default: - Align = 0; - } - - this._drawCommands = this._drawCommands.concat("A" + Align + ";"); - } - - get textBaseline() { - return this._textBaseline; - } - - setTextBaseline(value) { - this.textBaseline = value - } - - set textBaseline(value) { - this._textBaseline = value; - let baseline = 0; - switch (value) { - case "alphabetic": - baseline = 0; - break; - case "middle": - baseline = 1; - break; - case "top": - baseline = 2; - break; - case "hanging": - baseline = 3; - break; - case "bottom": - baseline = 4; - break; - case "ideographic": - baseline = 5; - break; - default: - baseline = 0; - break; - } - - this._drawCommands = this._drawCommands.concat("E" + baseline + ";"); - } - - get font() { - return this._font; - } - - setFontSize(size) { - var str = this._font; - var strs = str.trim().split(/\s+/); - for (var i = 0; i < strs.length; i++) { - var values = ["normal", "italic", "oblique", "normal", "small-caps", "normal", "bold", - "bolder", "lighter", "100", "200", "300", "400", "500", "600", "700", "800", "900", - "normal", "ultra-condensed", "extra-condensed", "condensed", "semi-condensed", - "semi-expanded", "expanded", "extra-expanded", "ultra-expanded" - ]; - - if (-1 == values.indexOf(strs[i].trim())) { - if (typeof size === 'string') { - strs[i] = size; - } else if (typeof size === 'number') { - strs[i] = String(size) + 'px'; - } - break; - } - } - this.font = strs.join(" "); - } - - set font(value) { - this._font = value; - this._drawCommands = this._drawCommands.concat("j" + value + ";"); - } - - setTransform(a, b, c, d, tx, ty) { - this._drawCommands = this._drawCommands.concat("t" + - (a === 1 ? "1" : a.toFixed(2)) + "," + - (b === 0 ? "0" : b.toFixed(2)) + "," + - (c === 0 ? "0" : c.toFixed(2)) + "," + - (d === 1 ? "1" : d.toFixed(2)) + "," + tx.toFixed(2) + "," + ty.toFixed(2) + ";"); - } - - transform(a, b, c, d, tx, ty) { - this._drawCommands = this._drawCommands.concat("f" + - (a === 1 ? "1" : a.toFixed(2)) + "," + - (b === 0 ? "0" : b.toFixed(2)) + "," + - (c === 0 ? "0" : c.toFixed(2)) + "," + - (d === 1 ? "1" : d.toFixed(2)) + "," + tx + "," + ty + ";"); - } - - resetTransform() { - this._drawCommands = this._drawCommands.concat("m;"); - } - - scale(a, d) { - this._drawCommands = this._drawCommands.concat("k" + a.toFixed(2) + "," + - d.toFixed(2) + ";"); - } - - rotate(angle) { - this._drawCommands = this._drawCommands - .concat("r" + angle.toFixed(6) + ";"); - } - - translate(tx, ty) { - this._drawCommands = this._drawCommands.concat("l" + tx.toFixed(2) + "," + ty.toFixed(2) + ";"); - } - - save() { - this._savedGlobalAlpha.push(this._globalAlpha); - this._drawCommands = this._drawCommands.concat("v;"); - } - - restore() { - this._drawCommands = this._drawCommands.concat("e;"); - this._globalAlpha = this._savedGlobalAlpha.pop(); - } - - createPattern(img, pattern) { - if (typeof img === 'string') { - var imgObj = new GImage(); - imgObj.src = img; - img = imgObj; - } - return new FillStylePattern(img, pattern); - } - - createLinearGradient(x0, y0, x1, y1) { - return new FillStyleLinearGradient(x0, y0, x1, y1); - } - - createRadialGradient = function(x0, y0, r0, x1, y1, r1) { - return new FillStyleRadialGradient(x0, y0, r0, x1, y1, r1); - }; - - createCircularGradient = function(x0, y0, r0) { - return new FillStyleRadialGradient(x0, y0, 0, x0, y0, r0); - }; - - strokeRect(x, y, w, h) { - this._drawCommands = this._drawCommands.concat("s" + x + "," + y + "," + w + "," + h + ";"); - } - - - clearRect(x, y, w, h) { - this._drawCommands = this._drawCommands.concat("c" + x + "," + y + "," + w + - "," + h + ";"); - } - - clip() { - this._drawCommands = this._drawCommands.concat("p;"); - } - - resetClip() { - this._drawCommands = this._drawCommands.concat("q;"); - } - - closePath() { - this._drawCommands = this._drawCommands.concat("o;"); - } - - moveTo(x, y) { - this._drawCommands = this._drawCommands.concat("g" + x.toFixed(2) + "," + y.toFixed(2) + ";"); - } - - lineTo(x, y) { - this._drawCommands = this._drawCommands.concat("i" + x.toFixed(2) + "," + y.toFixed(2) + ";"); - } - - quadraticCurveTo = function(cpx, cpy, x, y) { - this._drawCommands = this._drawCommands.concat("u" + cpx + "," + cpy + "," + x + "," + y + ";"); - } - - bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y, ) { - this._drawCommands = this._drawCommands.concat( - "z" + cp1x.toFixed(2) + "," + cp1y.toFixed(2) + "," + cp2x.toFixed(2) + "," + cp2y.toFixed(2) + "," + - x.toFixed(2) + "," + y.toFixed(2) + ";"); - } - - arcTo(x1, y1, x2, y2, radius) { - this._drawCommands = this._drawCommands.concat("h" + x1 + "," + y1 + "," + x2 + "," + y2 + "," + radius + ";"); - } - - beginPath() { - this._drawCommands = this._drawCommands.concat("b;"); - } - - - fillRect(x, y, w, h) { - this._drawCommands = this._drawCommands.concat("n" + x + "," + y + "," + w + - "," + h + ";"); - } - - rect(x, y, w, h) { - this._drawCommands = this._drawCommands.concat("w" + x + "," + y + "," + w + "," + h + ";"); - } - - fill() { - this._drawCommands = this._drawCommands.concat("L;"); - } - - stroke(path) { - this._drawCommands = this._drawCommands.concat("x;"); - } - - arc(x, y, radius, startAngle, endAngle, anticlockwise) { - - let ianticlockwise = 0; - if (anticlockwise) { - ianticlockwise = 1; - } - - this._drawCommands = this._drawCommands.concat( - "y" + x.toFixed(2) + "," + y.toFixed(2) + "," + - radius.toFixed(2) + "," + startAngle + "," + endAngle + "," + ianticlockwise + - ";" - ); - } - - fillText(text, x, y) { - let tmptext = text.replace(/!/g, "!!"); - tmptext = tmptext.replace(/,/g, "!,"); - tmptext = tmptext.replace(/;/g, "!;"); - this._drawCommands = this._drawCommands.concat("T" + tmptext + "," + x + "," + y + ",0.0;"); - } - - strokeText = function(text, x, y) { - let tmptext = text.replace(/!/g, "!!"); - tmptext = tmptext.replace(/,/g, "!,"); - tmptext = tmptext.replace(/;/g, "!;"); - this._drawCommands = this._drawCommands.concat("U" + tmptext + "," + x + "," + y + ",0.0;"); - } - - measureText(text) { - return CanvasRenderingContext2D.GBridge.measureText(text, this.font, this.componentId); - } - - isPointInPath = function(x, y) { - throw new Error('GCanvas not supported yet'); - } - - drawImage(image, sx, sy, sw, sh, dx, dy, dw, dh) { - if (typeof image === 'string') { - var imgObj = new GImage(); - imgObj.src = image; - image = imgObj; - } - if (image instanceof GImage) { - if (!image.complete) { - imgObj.onload = () => { - var index = this._needRedrawImageCache.indexOf(image); - if (index > -1) { - this._needRedrawImageCache.splice(index, 1); - CanvasRenderingContext2D.GBridge.bindImageTexture(this.componentId, image.src, image._id); - this._redrawflush(true); - } - } - this._notCommitDrawImageCache.push(image); - } else { - CanvasRenderingContext2D.GBridge.bindImageTexture(this.componentId, image.src, image._id); - } - var srcArgs = [image, sx, sy, sw, sh, dx, dy, dw, dh]; - var args = []; - for (var arg in srcArgs) { - if (typeof(srcArgs[arg]) != 'undefined') { - args.push(srcArgs[arg]); - } - } - this.__drawImage.apply(this, args); - //this.__drawImage(image,sx, sy, sw, sh, dx, dy, dw, dh); - } - } - - __drawImage(image, sx, sy, sw, sh, dx, dy, dw, dh) { - const numArgs = arguments.length; - - function drawImageCommands() { - - if (numArgs === 3) { - const x = parseFloat(sx) || 0.0; - const y = parseFloat(sy) || 0.0; - - return ("d" + image._id + ",0,0," + - image.width + "," + image.height + "," + - x + "," + y + "," + image.width + "," + image.height + ";"); - } else if (numArgs === 5) { - const x = parseFloat(sx) || 0.0; - const y = parseFloat(sy) || 0.0; - const width = parseInt(sw) || image.width; - const height = parseInt(sh) || image.height; - - return ("d" + image._id + ",0,0," + - image.width + "," + image.height + "," + - x + "," + y + "," + width + "," + height + ";"); - } else if (numArgs === 9) { - sx = parseFloat(sx) || 0.0; - sy = parseFloat(sy) || 0.0; - sw = parseInt(sw) || image.width; - sh = parseInt(sh) || image.height; - dx = parseFloat(dx) || 0.0; - dy = parseFloat(dy) || 0.0; - dw = parseInt(dw) || image.width; - dh = parseInt(dh) || image.height; - - return ("d" + image._id + "," + - sx + "," + sy + "," + sw + "," + sh + "," + - dx + "," + dy + "," + dw + "," + dh + ";"); - } - } - this._drawCommands += drawImageCommands(); - } - - _flush(reserve, callback) { - const commands = this._drawCommands; - this._drawCommands = ''; - CanvasRenderingContext2D.GBridge.render2d(this.componentId, commands, callback); - this._needRender = false; - } - - _redrawflush(reserve, callback) { - const commands = this._redrawCommands; - CanvasRenderingContext2D.GBridge.render2d(this.componentId, commands, callback); - if (this._needRedrawImageCache.length == 0) { - this._redrawCommands = ''; - } - } - - draw(reserve, callback) { - if (!reserve) { - this._globalAlpha = this._savedGlobalAlpha.pop(); - this._savedGlobalAlpha.push(this._globalAlpha); - this._redrawCommands = this._drawCommands; - this._needRedrawImageCache = this._notCommitDrawImageCache; - if (this._autoSaveContext) { - this._drawCommands = ("v;" + this._drawCommands); - this._autoSaveContext = false; - } else { - this._drawCommands = ("e;X;v;" + this._drawCommands); - } - } else { - this._needRedrawImageCache = this._needRedrawImageCache.concat(this._notCommitDrawImageCache); - this._redrawCommands += this._drawCommands; - if (this._autoSaveContext) { - this._drawCommands = ("v;" + this._drawCommands); - this._autoSaveContext = false; - } - } - this._notCommitDrawImageCache = []; - if (this._flush) { - this._flush(reserve, callback); - } - } - - getImageData(x, y, w, h, callback) { - CanvasRenderingContext2D.GBridge.getImageData(this.componentId, x, y, w, h, function(res) { - res.data = Base64ToUint8ClampedArray(res.data); - if (typeof(callback) == 'function') { - callback(res); - } - }); - } - - putImageData(data, x, y, w, h, callback) { - if (data instanceof Uint8ClampedArray) { - data = ArrayBufferToBase64(data); - CanvasRenderingContext2D.GBridge.putImageData(this.componentId, data, x, y, w, h, function(res) { - if (typeof(callback) == 'function') { - callback(res); - } - }); - } - } - - toTempFilePath(x, y, width, height, destWidth, destHeight, fileType, quality, callback) { - CanvasRenderingContext2D.GBridge.toTempFilePath(this.componentId, x, y, width, height, destWidth, destHeight, - fileType, quality, - function(res) { - if (typeof(callback) == 'function') { - callback(res); - } - }); - } -} diff --git a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/ActiveInfo.js b/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/ActiveInfo.js deleted file mode 100644 index b495129..0000000 --- a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/ActiveInfo.js +++ /dev/null @@ -1,11 +0,0 @@ -export default class WebGLActiveInfo { - className = 'WebGLActiveInfo'; - - constructor({ - type, name, size - }) { - this.type = type; - this.name = name; - this.size = size; - } -} \ No newline at end of file diff --git a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/Buffer.js b/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/Buffer.js deleted file mode 100644 index 4800f67..0000000 --- a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/Buffer.js +++ /dev/null @@ -1,21 +0,0 @@ -import {getTransferedObjectUUID} from './classUtils'; - -const name = 'WebGLBuffer'; - -function uuid(id) { - return getTransferedObjectUUID(name, id); -} - -export default class WebGLBuffer { - className = name; - - constructor(id) { - this.id = id; - } - - static uuid = uuid; - - uuid() { - return uuid(this.id); - } -} \ No newline at end of file diff --git a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/Framebuffer.js b/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/Framebuffer.js deleted file mode 100644 index 28b46d3..0000000 --- a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/Framebuffer.js +++ /dev/null @@ -1,21 +0,0 @@ -import {getTransferedObjectUUID} from './classUtils'; - -const name = 'WebGLFrameBuffer'; - -function uuid(id) { - return getTransferedObjectUUID(name, id); -} - -export default class WebGLFramebuffer { - className = name; - - constructor(id) { - this.id = id; - } - - static uuid = uuid; - - uuid() { - return uuid(this.id); - } -} \ No newline at end of file diff --git a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/GLenum.js b/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/GLenum.js deleted file mode 100644 index ac5544d..0000000 --- a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/GLenum.js +++ /dev/null @@ -1,298 +0,0 @@ -export default { - "DEPTH_BUFFER_BIT": 256, - "STENCIL_BUFFER_BIT": 1024, - "COLOR_BUFFER_BIT": 16384, - "POINTS": 0, - "LINES": 1, - "LINE_LOOP": 2, - "LINE_STRIP": 3, - "TRIANGLES": 4, - "TRIANGLE_STRIP": 5, - "TRIANGLE_FAN": 6, - "ZERO": 0, - "ONE": 1, - "SRC_COLOR": 768, - "ONE_MINUS_SRC_COLOR": 769, - "SRC_ALPHA": 770, - "ONE_MINUS_SRC_ALPHA": 771, - "DST_ALPHA": 772, - "ONE_MINUS_DST_ALPHA": 773, - "DST_COLOR": 774, - "ONE_MINUS_DST_COLOR": 775, - "SRC_ALPHA_SATURATE": 776, - "FUNC_ADD": 32774, - "BLEND_EQUATION": 32777, - "BLEND_EQUATION_RGB": 32777, - "BLEND_EQUATION_ALPHA": 34877, - "FUNC_SUBTRACT": 32778, - "FUNC_REVERSE_SUBTRACT": 32779, - "BLEND_DST_RGB": 32968, - "BLEND_SRC_RGB": 32969, - "BLEND_DST_ALPHA": 32970, - "BLEND_SRC_ALPHA": 32971, - "CONSTANT_COLOR": 32769, - "ONE_MINUS_CONSTANT_COLOR": 32770, - "CONSTANT_ALPHA": 32771, - "ONE_MINUS_CONSTANT_ALPHA": 32772, - "BLEND_COLOR": 32773, - "ARRAY_BUFFER": 34962, - "ELEMENT_ARRAY_BUFFER": 34963, - "ARRAY_BUFFER_BINDING": 34964, - "ELEMENT_ARRAY_BUFFER_BINDING": 34965, - "STREAM_DRAW": 35040, - "STATIC_DRAW": 35044, - "DYNAMIC_DRAW": 35048, - "BUFFER_SIZE": 34660, - "BUFFER_USAGE": 34661, - "CURRENT_VERTEX_ATTRIB": 34342, - "FRONT": 1028, - "BACK": 1029, - "FRONT_AND_BACK": 1032, - "TEXTURE_2D": 3553, - "CULL_FACE": 2884, - "BLEND": 3042, - "DITHER": 3024, - "STENCIL_TEST": 2960, - "DEPTH_TEST": 2929, - "SCISSOR_TEST": 3089, - "POLYGON_OFFSET_FILL": 32823, - "SAMPLE_ALPHA_TO_COVERAGE": 32926, - "SAMPLE_COVERAGE": 32928, - "NO_ERROR": 0, - "INVALID_ENUM": 1280, - "INVALID_VALUE": 1281, - "INVALID_OPERATION": 1282, - "OUT_OF_MEMORY": 1285, - "CW": 2304, - "CCW": 2305, - "LINE_WIDTH": 2849, - "ALIASED_POINT_SIZE_RANGE": 33901, - "ALIASED_LINE_WIDTH_RANGE": 33902, - "CULL_FACE_MODE": 2885, - "FRONT_FACE": 2886, - "DEPTH_RANGE": 2928, - "DEPTH_WRITEMASK": 2930, - "DEPTH_CLEAR_VALUE": 2931, - "DEPTH_FUNC": 2932, - "STENCIL_CLEAR_VALUE": 2961, - "STENCIL_FUNC": 2962, - "STENCIL_FAIL": 2964, - "STENCIL_PASS_DEPTH_FAIL": 2965, - "STENCIL_PASS_DEPTH_PASS": 2966, - "STENCIL_REF": 2967, - "STENCIL_VALUE_MASK": 2963, - "STENCIL_WRITEMASK": 2968, - "STENCIL_BACK_FUNC": 34816, - "STENCIL_BACK_FAIL": 34817, - "STENCIL_BACK_PASS_DEPTH_FAIL": 34818, - "STENCIL_BACK_PASS_DEPTH_PASS": 34819, - "STENCIL_BACK_REF": 36003, - "STENCIL_BACK_VALUE_MASK": 36004, - "STENCIL_BACK_WRITEMASK": 36005, - "VIEWPORT": 2978, - "SCISSOR_BOX": 3088, - "COLOR_CLEAR_VALUE": 3106, - "COLOR_WRITEMASK": 3107, - "UNPACK_ALIGNMENT": 3317, - "PACK_ALIGNMENT": 3333, - "MAX_TEXTURE_SIZE": 3379, - "MAX_VIEWPORT_DIMS": 3386, - "SUBPIXEL_BITS": 3408, - "RED_BITS": 3410, - "GREEN_BITS": 3411, - "BLUE_BITS": 3412, - "ALPHA_BITS": 3413, - "DEPTH_BITS": 3414, - "STENCIL_BITS": 3415, - "POLYGON_OFFSET_UNITS": 10752, - "POLYGON_OFFSET_FACTOR": 32824, - "TEXTURE_BINDING_2D": 32873, - "SAMPLE_BUFFERS": 32936, - "SAMPLES": 32937, - "SAMPLE_COVERAGE_VALUE": 32938, - "SAMPLE_COVERAGE_INVERT": 32939, - "COMPRESSED_TEXTURE_FORMATS": 34467, - "DONT_CARE": 4352, - "FASTEST": 4353, - "NICEST": 4354, - "GENERATE_MIPMAP_HINT": 33170, - "BYTE": 5120, - "UNSIGNED_BYTE": 5121, - "SHORT": 5122, - "UNSIGNED_SHORT": 5123, - "INT": 5124, - "UNSIGNED_INT": 5125, - "FLOAT": 5126, - "DEPTH_COMPONENT": 6402, - "ALPHA": 6406, - "RGB": 6407, - "RGBA": 6408, - "LUMINANCE": 6409, - "LUMINANCE_ALPHA": 6410, - "UNSIGNED_SHORT_4_4_4_4": 32819, - "UNSIGNED_SHORT_5_5_5_1": 32820, - "UNSIGNED_SHORT_5_6_5": 33635, - "FRAGMENT_SHADER": 35632, - "VERTEX_SHADER": 35633, - "MAX_VERTEX_ATTRIBS": 34921, - "MAX_VERTEX_UNIFORM_VECTORS": 36347, - "MAX_VARYING_VECTORS": 36348, - "MAX_COMBINED_TEXTURE_IMAGE_UNITS": 35661, - "MAX_VERTEX_TEXTURE_IMAGE_UNITS": 35660, - "MAX_TEXTURE_IMAGE_UNITS": 34930, - "MAX_FRAGMENT_UNIFORM_VECTORS": 36349, - "SHADER_TYPE": 35663, - "DELETE_STATUS": 35712, - "LINK_STATUS": 35714, - "VALIDATE_STATUS": 35715, - "ATTACHED_SHADERS": 35717, - "ACTIVE_UNIFORMS": 35718, - "ACTIVE_ATTRIBUTES": 35721, - "SHADING_LANGUAGE_VERSION": 35724, - "CURRENT_PROGRAM": 35725, - "NEVER": 512, - "LESS": 513, - "EQUAL": 514, - "LEQUAL": 515, - "GREATER": 516, - "NOTEQUAL": 517, - "GEQUAL": 518, - "ALWAYS": 519, - "KEEP": 7680, - "REPLACE": 7681, - "INCR": 7682, - "DECR": 7683, - "INVERT": 5386, - "INCR_WRAP": 34055, - "DECR_WRAP": 34056, - "VENDOR": 7936, - "RENDERER": 7937, - "VERSION": 7938, - "NEAREST": 9728, - "LINEAR": 9729, - "NEAREST_MIPMAP_NEAREST": 9984, - "LINEAR_MIPMAP_NEAREST": 9985, - "NEAREST_MIPMAP_LINEAR": 9986, - "LINEAR_MIPMAP_LINEAR": 9987, - "TEXTURE_MAG_FILTER": 10240, - "TEXTURE_MIN_FILTER": 10241, - "TEXTURE_WRAP_S": 10242, - "TEXTURE_WRAP_T": 10243, - "TEXTURE": 5890, - "TEXTURE_CUBE_MAP": 34067, - "TEXTURE_BINDING_CUBE_MAP": 34068, - "TEXTURE_CUBE_MAP_POSITIVE_X": 34069, - "TEXTURE_CUBE_MAP_NEGATIVE_X": 34070, - "TEXTURE_CUBE_MAP_POSITIVE_Y": 34071, - "TEXTURE_CUBE_MAP_NEGATIVE_Y": 34072, - "TEXTURE_CUBE_MAP_POSITIVE_Z": 34073, - "TEXTURE_CUBE_MAP_NEGATIVE_Z": 34074, - "MAX_CUBE_MAP_TEXTURE_SIZE": 34076, - "TEXTURE0": 33984, - "TEXTURE1": 33985, - "TEXTURE2": 33986, - "TEXTURE3": 33987, - "TEXTURE4": 33988, - "TEXTURE5": 33989, - "TEXTURE6": 33990, - "TEXTURE7": 33991, - "TEXTURE8": 33992, - "TEXTURE9": 33993, - "TEXTURE10": 33994, - "TEXTURE11": 33995, - "TEXTURE12": 33996, - "TEXTURE13": 33997, - "TEXTURE14": 33998, - "TEXTURE15": 33999, - "TEXTURE16": 34000, - "TEXTURE17": 34001, - "TEXTURE18": 34002, - "TEXTURE19": 34003, - "TEXTURE20": 34004, - "TEXTURE21": 34005, - "TEXTURE22": 34006, - "TEXTURE23": 34007, - "TEXTURE24": 34008, - "TEXTURE25": 34009, - "TEXTURE26": 34010, - "TEXTURE27": 34011, - "TEXTURE28": 34012, - "TEXTURE29": 34013, - "TEXTURE30": 34014, - "TEXTURE31": 34015, - "ACTIVE_TEXTURE": 34016, - "REPEAT": 10497, - "CLAMP_TO_EDGE": 33071, - "MIRRORED_REPEAT": 33648, - "FLOAT_VEC2": 35664, - "FLOAT_VEC3": 35665, - "FLOAT_VEC4": 35666, - "INT_VEC2": 35667, - "INT_VEC3": 35668, - "INT_VEC4": 35669, - "BOOL": 35670, - "BOOL_VEC2": 35671, - "BOOL_VEC3": 35672, - "BOOL_VEC4": 35673, - "FLOAT_MAT2": 35674, - "FLOAT_MAT3": 35675, - "FLOAT_MAT4": 35676, - "SAMPLER_2D": 35678, - "SAMPLER_CUBE": 35680, - "VERTEX_ATTRIB_ARRAY_ENABLED": 34338, - "VERTEX_ATTRIB_ARRAY_SIZE": 34339, - "VERTEX_ATTRIB_ARRAY_STRIDE": 34340, - "VERTEX_ATTRIB_ARRAY_TYPE": 34341, - "VERTEX_ATTRIB_ARRAY_NORMALIZED": 34922, - "VERTEX_ATTRIB_ARRAY_POINTER": 34373, - "VERTEX_ATTRIB_ARRAY_BUFFER_BINDING": 34975, - "IMPLEMENTATION_COLOR_READ_TYPE": 35738, - "IMPLEMENTATION_COLOR_READ_FORMAT": 35739, - "COMPILE_STATUS": 35713, - "LOW_FLOAT": 36336, - "MEDIUM_FLOAT": 36337, - "HIGH_FLOAT": 36338, - "LOW_INT": 36339, - "MEDIUM_INT": 36340, - "HIGH_INT": 36341, - "FRAMEBUFFER": 36160, - "RENDERBUFFER": 36161, - "RGBA4": 32854, - "RGB5_A1": 32855, - "RGB565": 36194, - "DEPTH_COMPONENT16": 33189, - "STENCIL_INDEX8": 36168, - "DEPTH_STENCIL": 34041, - "RENDERBUFFER_WIDTH": 36162, - "RENDERBUFFER_HEIGHT": 36163, - "RENDERBUFFER_INTERNAL_FORMAT": 36164, - "RENDERBUFFER_RED_SIZE": 36176, - "RENDERBUFFER_GREEN_SIZE": 36177, - "RENDERBUFFER_BLUE_SIZE": 36178, - "RENDERBUFFER_ALPHA_SIZE": 36179, - "RENDERBUFFER_DEPTH_SIZE": 36180, - "RENDERBUFFER_STENCIL_SIZE": 36181, - "FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE": 36048, - "FRAMEBUFFER_ATTACHMENT_OBJECT_NAME": 36049, - "FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL": 36050, - "FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE": 36051, - "COLOR_ATTACHMENT0": 36064, - "DEPTH_ATTACHMENT": 36096, - "STENCIL_ATTACHMENT": 36128, - "DEPTH_STENCIL_ATTACHMENT": 33306, - "NONE": 0, - "FRAMEBUFFER_COMPLETE": 36053, - "FRAMEBUFFER_INCOMPLETE_ATTACHMENT": 36054, - "FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT": 36055, - "FRAMEBUFFER_INCOMPLETE_DIMENSIONS": 36057, - "FRAMEBUFFER_UNSUPPORTED": 36061, - "FRAMEBUFFER_BINDING": 36006, - "RENDERBUFFER_BINDING": 36007, - "MAX_RENDERBUFFER_SIZE": 34024, - "INVALID_FRAMEBUFFER_OPERATION": 1286, - "UNPACK_FLIP_Y_WEBGL": 37440, - "UNPACK_PREMULTIPLY_ALPHA_WEBGL": 37441, - "CONTEXT_LOST_WEBGL": 37442, - "UNPACK_COLORSPACE_CONVERSION_WEBGL": 37443, - "BROWSER_DEFAULT_WEBGL": 37444 -}; \ No newline at end of file diff --git a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/GLmethod.js b/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/GLmethod.js deleted file mode 100644 index f2659be..0000000 --- a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/GLmethod.js +++ /dev/null @@ -1,142 +0,0 @@ -let i = 1; - -const GLmethod = {}; - -GLmethod.activeTexture = i++; //1 -GLmethod.attachShader = i++; -GLmethod.bindAttribLocation = i++; -GLmethod.bindBuffer = i++; -GLmethod.bindFramebuffer = i++; -GLmethod.bindRenderbuffer = i++; -GLmethod.bindTexture = i++; -GLmethod.blendColor = i++; -GLmethod.blendEquation = i++; -GLmethod.blendEquationSeparate = i++; //10 -GLmethod.blendFunc = i++; -GLmethod.blendFuncSeparate = i++; -GLmethod.bufferData = i++; -GLmethod.bufferSubData = i++; -GLmethod.checkFramebufferStatus = i++; -GLmethod.clear = i++; -GLmethod.clearColor = i++; -GLmethod.clearDepth = i++; -GLmethod.clearStencil = i++; -GLmethod.colorMask = i++; //20 -GLmethod.compileShader = i++; -GLmethod.compressedTexImage2D = i++; -GLmethod.compressedTexSubImage2D = i++; -GLmethod.copyTexImage2D = i++; -GLmethod.copyTexSubImage2D = i++; -GLmethod.createBuffer = i++; -GLmethod.createFramebuffer = i++; -GLmethod.createProgram = i++; -GLmethod.createRenderbuffer = i++; -GLmethod.createShader = i++; //30 -GLmethod.createTexture = i++; -GLmethod.cullFace = i++; -GLmethod.deleteBuffer = i++; -GLmethod.deleteFramebuffer = i++; -GLmethod.deleteProgram = i++; -GLmethod.deleteRenderbuffer = i++; -GLmethod.deleteShader = i++; -GLmethod.deleteTexture = i++; -GLmethod.depthFunc = i++; -GLmethod.depthMask = i++; //40 -GLmethod.depthRange = i++; -GLmethod.detachShader = i++; -GLmethod.disable = i++; -GLmethod.disableVertexAttribArray = i++; -GLmethod.drawArrays = i++; -GLmethod.drawArraysInstancedANGLE = i++; -GLmethod.drawElements = i++; -GLmethod.drawElementsInstancedANGLE = i++; -GLmethod.enable = i++; -GLmethod.enableVertexAttribArray = i++; //50 -GLmethod.flush = i++; -GLmethod.framebufferRenderbuffer = i++; -GLmethod.framebufferTexture2D = i++; -GLmethod.frontFace = i++; -GLmethod.generateMipmap = i++; -GLmethod.getActiveAttrib = i++; -GLmethod.getActiveUniform = i++; -GLmethod.getAttachedShaders = i++; -GLmethod.getAttribLocation = i++; -GLmethod.getBufferParameter = i++; //60 -GLmethod.getContextAttributes = i++; -GLmethod.getError = i++; -GLmethod.getExtension = i++; -GLmethod.getFramebufferAttachmentParameter = i++; -GLmethod.getParameter = i++; -GLmethod.getProgramInfoLog = i++; -GLmethod.getProgramParameter = i++; -GLmethod.getRenderbufferParameter = i++; -GLmethod.getShaderInfoLog = i++; -GLmethod.getShaderParameter = i++; //70 -GLmethod.getShaderPrecisionFormat = i++; -GLmethod.getShaderSource = i++; -GLmethod.getSupportedExtensions = i++; -GLmethod.getTexParameter = i++; -GLmethod.getUniform = i++; -GLmethod.getUniformLocation = i++; -GLmethod.getVertexAttrib = i++; -GLmethod.getVertexAttribOffset = i++; -GLmethod.isBuffer = i++; -GLmethod.isContextLost = i++; //80 -GLmethod.isEnabled = i++; -GLmethod.isFramebuffer = i++; -GLmethod.isProgram = i++; -GLmethod.isRenderbuffer = i++; -GLmethod.isShader = i++; -GLmethod.isTexture = i++; -GLmethod.lineWidth = i++; -GLmethod.linkProgram = i++; -GLmethod.pixelStorei = i++; -GLmethod.polygonOffset = i++; //90 -GLmethod.readPixels = i++; -GLmethod.renderbufferStorage = i++; -GLmethod.sampleCoverage = i++; -GLmethod.scissor = i++; -GLmethod.shaderSource = i++; -GLmethod.stencilFunc = i++; -GLmethod.stencilFuncSeparate = i++; -GLmethod.stencilMask = i++; -GLmethod.stencilMaskSeparate = i++; -GLmethod.stencilOp = i++; //100 -GLmethod.stencilOpSeparate = i++; -GLmethod.texImage2D = i++; -GLmethod.texParameterf = i++; -GLmethod.texParameteri = i++; -GLmethod.texSubImage2D = i++; -GLmethod.uniform1f = i++; -GLmethod.uniform1fv = i++; -GLmethod.uniform1i = i++; -GLmethod.uniform1iv = i++; -GLmethod.uniform2f = i++; //110 -GLmethod.uniform2fv = i++; -GLmethod.uniform2i = i++; -GLmethod.uniform2iv = i++; -GLmethod.uniform3f = i++; -GLmethod.uniform3fv = i++; -GLmethod.uniform3i = i++; -GLmethod.uniform3iv = i++; -GLmethod.uniform4f = i++; -GLmethod.uniform4fv = i++; -GLmethod.uniform4i = i++; //120 -GLmethod.uniform4iv = i++; -GLmethod.uniformMatrix2fv = i++; -GLmethod.uniformMatrix3fv = i++; -GLmethod.uniformMatrix4fv = i++; -GLmethod.useProgram = i++; -GLmethod.validateProgram = i++; -GLmethod.vertexAttrib1f = i++; //new -GLmethod.vertexAttrib2f = i++; //new -GLmethod.vertexAttrib3f = i++; //new -GLmethod.vertexAttrib4f = i++; //new //130 -GLmethod.vertexAttrib1fv = i++; //new -GLmethod.vertexAttrib2fv = i++; //new -GLmethod.vertexAttrib3fv = i++; //new -GLmethod.vertexAttrib4fv = i++; //new -GLmethod.vertexAttribPointer = i++; -GLmethod.viewport = i++; - -export default GLmethod; \ No newline at end of file diff --git a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/GLtype.js b/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/GLtype.js deleted file mode 100644 index 695abcb..0000000 --- a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/GLtype.js +++ /dev/null @@ -1,23 +0,0 @@ -const GLtype = {}; - -[ - "GLbitfield", - "GLboolean", - "GLbyte", - "GLclampf", - "GLenum", - "GLfloat", - "GLint", - "GLintptr", - "GLsizei", - "GLsizeiptr", - "GLshort", - "GLubyte", - "GLuint", - "GLushort" -].sort().map((typeName, i) => GLtype[typeName] = 1 >> (i + 1)); - -export default GLtype; - - - diff --git a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/Program.js b/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/Program.js deleted file mode 100644 index 6f5691c..0000000 --- a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/Program.js +++ /dev/null @@ -1,21 +0,0 @@ -import {getTransferedObjectUUID} from './classUtils'; - -const name = 'WebGLProgram'; - -function uuid(id) { - return getTransferedObjectUUID(name, id); -} - -export default class WebGLProgram { - className = name; - - constructor(id) { - this.id = id; - } - - static uuid = uuid; - - uuid() { - return uuid(this.id); - } -} \ No newline at end of file diff --git a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/Renderbuffer.js b/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/Renderbuffer.js deleted file mode 100644 index d3182ae..0000000 --- a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/Renderbuffer.js +++ /dev/null @@ -1,21 +0,0 @@ -import {getTransferedObjectUUID} from './classUtils'; - -const name = 'WebGLRenderBuffer'; - -function uuid(id) { - return getTransferedObjectUUID(name, id); -} - -export default class WebGLRenderbuffer { - className = name; - - constructor(id) { - this.id = id; - } - - static uuid = uuid; - - uuid() { - return uuid(this.id); - } -} \ No newline at end of file diff --git a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/RenderingContext.js b/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/RenderingContext.js deleted file mode 100644 index 5f9608f..0000000 --- a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/RenderingContext.js +++ /dev/null @@ -1,1191 +0,0 @@ -import GLenum from './GLenum'; -import ActiveInfo from './ActiveInfo'; -import Buffer from './Buffer'; -import Framebuffer from './Framebuffer'; -import Renderbuffer from './Renderbuffer'; -import Texture from './Texture'; -import Program from './Program'; -import Shader from './Shader'; -import ShaderPrecisionFormat from './ShaderPrecisionFormat'; -import UniformLocation from './UniformLocation'; -import GLmethod from './GLmethod'; - -const processArray = (array, checkArrayType = false) => { - - function joinArray(arr, sep) { - let res = ''; - for (let i = 0; i < arr.length; i++) { - if (i !== 0) { - res += sep; - } - res += arr[i]; - } - return res; - } - - let type = 'Float32Array'; - if (checkArrayType) { - if (array instanceof Uint8Array) { - type = 'Uint8Array' - } else if (array instanceof Uint16Array) { - type = 'Uint16Array'; - } else if (array instanceof Uint32Array) { - type = 'Uint32Array'; - } else if (array instanceof Float32Array) { - type = 'Float32Array'; - } else { - throw new Error('Check array type failed. Array type is ' + typeof array); - } - } - - const ArrayTypes = { - Uint8Array: 1, - Uint16Array: 2, - Uint32Array: 4, - Float32Array: 14 - }; - return ArrayTypes[type] + ',' + btoa(joinArray(array, ',')) -} - -export default class WebGLRenderingContext { - - // static GBridge = null; - - className = 'WebGLRenderingContext'; - - constructor(canvas, type, attrs) { - this._canvas = canvas; - this._type = type; - this._version = 'WebGL 1.0'; - this._attrs = attrs; - this._map = new Map(); - - Object.keys(GLenum) - .forEach(name => Object.defineProperty(this, name, { - value: GLenum[name] - })); - } - - get canvas() { - return this._canvas; - } - - activeTexture = function (textureUnit) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.activeTexture + ',' + textureUnit, - true - ); - } - - attachShader = function (progarm, shader) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.attachShader + ',' + progarm.id + ',' + shader.id, - true - ); - } - - bindAttribLocation = function (program, index, name) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.bindAttribLocation + ',' + program.id + ',' + index + ',' + name, - true - ) - } - - bindBuffer = function (target, buffer) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.bindBuffer + ',' + target + ',' + (buffer ? buffer.id : 0), - true - ); - } - - bindFramebuffer = function (target, framebuffer) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.bindFramebuffer + ',' + target + ',' + (framebuffer ? framebuffer.id : 0), - true - ) - } - - bindRenderbuffer = function (target, renderBuffer) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.bindRenderbuffer + ',' + target + ',' + (renderBuffer ? renderBuffer.id : 0), - true - ) - } - - bindTexture = function (target, texture) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.bindTexture + ',' + target + ',' + (texture ? texture.id : 0), - true - ) - } - - blendColor = function (r, g, b, a) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.blendColor + ',' + target + ',' + r + ',' + g + ',' + b + ',' + a, - true - ) - } - - blendEquation = function (mode) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.blendEquation + ',' + mode, - true - ) - } - - blendEquationSeparate = function (modeRGB, modeAlpha) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.blendEquationSeparate + ',' + modeRGB + ',' + modeAlpha, - true - ) - } - - - blendFunc = function (sfactor, dfactor) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.blendFunc + ',' + sfactor + ',' + dfactor, - true - ); - } - - blendFuncSeparate = function (srcRGB, dstRGB, srcAlpha, dstAlpha) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.blendFuncSeparate + ',' + srcRGB + ',' + dstRGB + ',' + srcAlpha + ',' + dstAlpha, - true - ); - } - - bufferData = function (target, data, usage) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.bufferData + ',' + target + ',' + processArray(data, true) + ',' + usage, - true - ) - } - - bufferSubData = function (target, offset, data) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.bufferSubData + ',' + target + ',' + offset + ',' + processArray(data, true), - true - ) - } - - checkFramebufferStatus = function (target) { - const result = WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.checkFramebufferStatus + ',' + target - ); - return Number(result); - } - - clear = function (mask) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.clear + ',' + mask - ); - this._canvas._needRender = true; - } - - clearColor = function (r, g, b, a) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.clearColor + ',' + r + ',' + g + ',' + b, - true - ) - } - - clearDepth = function (depth) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.clearDepth + ',' + depth, - true - ) - } - - clearStencil = function (s) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.clearStencil + ',' + s - ); - } - - colorMask = function (r, g, b, a) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.colorMask + ',' + r + ',' + g + ',' + b + ',' + a - ) - } - - compileShader = function (shader) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.compileShader + ',' + shader.id, - true - ) - } - - compressedTexImage2D = function (target, level, internalformat, width, height, border, pixels) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.compressedTexImage2D + ',' + target + ',' + level + ',' + internalformat + ',' + - width + ',' + height + ',' + border + ',' + processArray(pixels), - true - ) - } - - compressedTexSubImage2D = function (target, level, xoffset, yoffset, width, height, format, pixels) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.compressedTexSubImage2D + ',' + target + ',' + level + ',' + xoffset + ',' + yoffset + ',' + - width + ',' + height + ',' + format + ',' + processArray(pixels), - true - ) - } - - - copyTexImage2D = function (target, level, internalformat, x, y, width, height, border) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.copyTexImage2D + ',' + target + ',' + level + ',' + internalformat + ',' + x + ',' + y + ',' + - width + ',' + height + ',' + border, - true - ); - } - - copyTexSubImage2D = function (target, level, xoffset, yoffset, x, y, width, height) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.copyTexSubImage2D + ',' + target + ',' + level + ',' + xoffset + ',' + yoffset + ',' + x + ',' + y + ',' + - width + ',' + height - ); - } - - createBuffer = function () { - const result = WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.createBuffer + '' - ); - const buffer = new Buffer(result); - this._map.set(buffer.uuid(), buffer); - return buffer; - } - - createFramebuffer = function () { - const result = WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.createFramebuffer + '' - ); - const framebuffer = new Framebuffer(result); - this._map.set(framebuffer.uuid(), framebuffer); - return framebuffer; - } - - - createProgram = function () { - const id = WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.createProgram + '' - ); - const program = new Program(id); - this._map.set(program.uuid(), program); - return program; - } - - createRenderbuffer = function () { - const id = WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.createRenderbuffer + '' - ) - const renderBuffer = new Renderbuffer(id); - this._map.set(renderBuffer.uuid(), renderBuffer); - return renderBuffer; - } - - createShader = function (type) { - const id = WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.createShader + ',' + type - ) - const shader = new Shader(id, type); - this._map.set(shader.uuid(), shader); - return shader; - } - - createTexture = function () { - const id = WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.createTexture + '' - ); - const texture = new Texture(id); - this._map.set(texture.uuid(), texture); - return texture; - } - - cullFace = function (mode) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.cullFace + ',' + mode, - true - ) - } - - - deleteBuffer = function (buffer) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.deleteBuffer + ',' + buffer.id, - true - ) - } - - deleteFramebuffer = function (framebuffer) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.deleteFramebuffer + ',' + framebuffer.id, - true - ) - } - - deleteProgram = function (program) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.deleteProgram + ',' + program.id, - true - ) - } - - deleteRenderbuffer = function (renderbuffer) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.deleteRenderbuffer + ',' + renderbuffer.id, - true - ) - } - - deleteShader = function (shader) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.deleteShader + ',' + shader.id, - true - ) - } - - deleteTexture = function (texture) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.deleteTexture + ',' + texture.id, - true - ) - } - - depthFunc = function (func) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.depthFunc + ',' + func - ) - } - - depthMask = function (flag) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.depthMask + ',' + Number(flag), - true - ) - } - - depthRange = function (zNear, zFar) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.depthRange + ',' + zNear + ',' + zFar, - true - ) - } - - detachShader = function (program, shader) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.detachShader + ',' + program.id + ',' + shader.id, - true - ) - } - - disable = function (cap) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.disable + ',' + cap, - true - ) - } - - disableVertexAttribArray = function (index) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.disableVertexAttribArray + ',' + index, - true - ); - } - - drawArrays = function (mode, first, count) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.drawArrays + ',' + mode + ',' + first + ',' + count - ) - this._canvas._needRender = true; - } - - drawElements = function (mode, count, type, offset) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.drawElements + ',' + mode + ',' + count + ',' + type + ',' + offset + ';' - ); - this._canvas._needRender = true; - } - - enable = function (cap) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.enable + ',' + cap, - true - ); - } - - enableVertexAttribArray = function (index) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.enableVertexAttribArray + ',' + index, - true - ) - } - - - flush = function () { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.flush + '' - ) - } - - framebufferRenderbuffer = function (target, attachment, textarget, texture, level) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.framebufferRenderbuffer + ',' + target + ',' + attachment + ',' + textarget + ',' + (texture ? texture.id : 0) + ',' + level, - true - ) - } - - framebufferTexture2D = function (target, attachment, textarget, texture, level) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.framebufferTexture2D + ',' + target + ',' + attachment + ',' + textarget + ',' + (texture ? texture.id : 0) + ',' + level, - true - ) - } - - frontFace = function (mode) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.frontFace + ',' + mode, - true - ) - } - - generateMipmap = function (target) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.generateMipmap + ',' + target, - true - ) - } - - getActiveAttrib = function (progarm, index) { - const resultString = WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.getActiveAttrib + ',' + progarm.id + ',' + index - ) - const [type, size, name] = resultString.split(','); - return new ActiveInfo({ - type: Number(type), - size: Number(size), - name - }); - } - - getActiveUniform = function (progarm, index) { - const resultString = WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.getActiveUniform + ',' + progarm.id + ',' + index - ); - const [type, size, name] = resultString.split(','); - return new ActiveInfo({ - type: Number(type), - size: Number(size), - name - }) - } - - getAttachedShaders = function (progarm) { - const result = WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.getAttachedShaders + ',' + progarm.id - ); - const [type, ...ids] = result; - return ids.map(id => this._map.get(Shader.uuid(id))); - } - - getAttribLocation = function (progarm, name) { - return WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.getAttribLocation + ',' + progarm.id + ',' + name - ) - } - - getBufferParameter = function (target, pname) { - const result = WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.getBufferParameter + ',' + target + ',' + pname - ); - const [type, res] = getBufferParameter; - return res; - } - - getError = function () { - const result = WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.getError + '' - ) - return result; - } - - getExtension = function (name) { - return null; - } - - getFramebufferAttachmentParameter = function (target, attachment, pname) { - const result = WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.getFramebufferAttachmentParameter + ',' + target + ',' + attachment + ',' + pname - ) - switch (pname) { - case GLenum.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: - return this._map.get(Renderbuffer.uuid(result)) || this._map.get(Texture.uuid(result)) || null; - default: - return result; - } - } - - getParameter = function (pname) { - const result = WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.getParameter + ',' + pname - ) - switch (pname) { - case GLenum.VERSION: - return this._version; - case GLenum.ARRAY_BUFFER_BINDING: // buffer - case GLenum.ELEMENT_ARRAY_BUFFER_BINDING: // buffer - return this._map.get(Buffer.uuid(result)) || null; - case GLenum.CURRENT_PROGRAM: // program - return this._map.get(Program.uuid(result)) || null; - case GLenum.FRAMEBUFFER_BINDING: // framebuffer - return this._map.get(Framebuffer.uuid(result)) || null; - case GLenum.RENDERBUFFER_BINDING: // renderbuffer - return this._map.get(Renderbuffer.uuid(result)) || null; - case GLenum.TEXTURE_BINDING_2D: // texture - case GLenum.TEXTURE_BINDING_CUBE_MAP: // texture - return this._map.get(Texture.uuid(result)) || null; - case GLenum.ALIASED_LINE_WIDTH_RANGE: // Float32Array - case GLenum.ALIASED_POINT_SIZE_RANGE: // Float32Array - case GLenum.BLEND_COLOR: // Float32Array - case GLenum.COLOR_CLEAR_VALUE: // Float32Array - case GLenum.DEPTH_RANGE: // Float32Array - case GLenum.MAX_VIEWPORT_DIMS: // Int32Array - case GLenum.SCISSOR_BOX: // Int32Array - case GLenum.VIEWPORT: // Int32Array - case GLenum.COMPRESSED_TEXTURE_FORMATS: // Uint32Array - default: - const [type, ...res] = result.split(','); - if (res.length === 1) { - return Number(res[0]); - } else { - return res.map(Number); - } - } - } - - getProgramInfoLog = function (progarm) { - return WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.getProgramInfoLog + ',' + progarm.id - ) - } - - getProgramParameter = function (program, pname) { - const res = WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.getProgramParameter + ',' + program.id + ',' + pname - ); - - const [type, result] = res.split(',').map(i => parseInt(i)); - - if (type === 1) { - return Boolean(result); - } else if (type === 2) { - return result; - } else { - throw new Error('Unrecongized program paramater ' + res + ', type: ' + typeof res); - } - } - - - getRenderbufferParameter = function (target, pname) { - const result = WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.getRenderbufferParameter + ',' + target + ',' + pname - ) - return result; - } - - - getShaderInfoLog = function (shader) { - return WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.getShaderInfoLog + ',' + shader.id - ); - } - - getShaderParameter = function (shader, pname) { - return WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.getShaderParameter + ',' + shader.id + ',' + pname - ) - } - - getShaderPrecisionFormat = function (shaderType, precisionType) { - const [rangeMin, rangeMax, precision] = WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.getShaderPrecisionFormat + ',' + shaderType + ',' + precisionType - ); - const shaderPrecisionFormat = new ShaderPrecisionFormat({ - rangeMin: Number(rangeMin), - rangeMax: Number(rangeMax), - precision: Number(precision) - }); - return shaderPrecisionFormat; - } - - getShaderSource = function (shader) { - const result = WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.getShaderSource + ',' + shader.id - ); - return result; - } - - getSupportedExtensions = function () { - return Object.keys({}); - } - - getTexParameter = function (target, pname) { - const result = WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.getTexParameter + ',' + target + ',' + pname - ) - return result; - } - - getUniformLocation = function (program, name) { - const id = WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.getUniformLocation + ',' + program.id + ',' + name - ); - if (id === -1) { - return null; - } else { - return new UniformLocation(Number(id)); - } - } - - getVertexAttrib = function (index, pname) { - const result = WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.getVertexAttrib + ',' + index + ',' + pname - ); - switch (pname) { - case GLenum.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: - return this._map.get(Buffer.uuid(result)) || null; - case GLenum.CURRENT_VERTEX_ATTRIB: // Float32Array - default: - return result; - } - } - - getVertexAttribOffset = function (index, pname) { - const result = WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.getVertexAttribOffset + ',' + index + ',' + pname - ) - return Number(result); - } - - isBuffer = function (buffer) { - const result = WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.isBuffer + ',' + buffer.id - ) - return Boolean(result); - } - - isContextLost = function () { - return false; - } - - isEnabled = function (cap) { - const result = WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.isEnabled + ',' + cap - ) - return Boolean(result); - } - - isFramebuffer = function (framebuffer) { - const result = WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.isFramebuffer + ',' + framebuffer.id - ) - return Boolean(result); - } - - isProgram = function (program) { - const result = WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.isProgram + ',' + program.id - ) - return Boolean(result); - } - - isRenderbuffer = function (renderBuffer) { - const result = WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.isRenderbuffer + ',' + renderbuffer.id - ) - return Boolean(result); - } - - isShader = function (shader) { - const result = WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.isShader + ',' + shader.id - ) - return Boolean(result); - } - - isTexture = function (texture) { - const result = WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.isTexture + ',' + texture.id - ); - return Boolean(result); - } - - lineWidth = function (width) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.lineWidth + ',' + width, - true - ) - } - - linkProgram = function (program) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.linkProgram + ',' + program.id, - true - ); - } - - - pixelStorei = function (pname, param) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.pixelStorei + ',' + pname + ',' + Number(param) - ) - } - - polygonOffset = function (factor, units) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.polygonOffset + ',' + factor + ',' + units - ) - } - - readPixels = function (x, y, width, height, format, type, pixels) { - const result = WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.readPixels + ',' + x + ',' + y + ',' + width + ',' + height + ',' + format + ',' + type - ) - return result; - } - - renderbufferStorage = function (target, internalFormat, width, height) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.renderbufferStorage + ',' + target + ',' + internalFormat + ',' + width + ',' + height, - true - ) - } - - sampleCoverage = function (value, invert) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.sampleCoverage + ',' + value + ',' + Number(invert), - true - ) - } - - scissor = function (x, y, width, height) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.scissor + ',' + x + ',' + y + ',' + width + ',' + height, - true - ) - } - - shaderSource = function (shader, source) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.shaderSource + ',' + shader.id + ',' + source - ) - } - - stencilFunc = function (func, ref, mask) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.stencilFunc + ',' + func + ',' + ref + ',' + mask, - true - ) - } - - stencilFuncSeparate = function (face, func, ref, mask) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.stencilFuncSeparate + ',' + face + ',' + func + ',' + ref + ',' + mask, - true - ) - } - - stencilMask = function (mask) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.stencilMask + ',' + mask, - true - ) - } - - stencilMaskSeparate = function (face, mask) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.stencilMaskSeparate + ',' + face + ',' + mask, - true - ) - } - - stencilOp = function (fail, zfail, zpass) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.stencilOp + ',' + fail + ',' + zfail + ',' + zpass - ) - } - - stencilOpSeparate = function (face, fail, zfail, zpass) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.stencilOp + ',' + face + ',' + fail + ',' + zfail + ',' + zpass, - true - ) - } - - texImage2D = function (...args) { - WebGLRenderingContext.GBridge.texImage2D(this._canvas.id, ...args); - } - - - texParameterf = function (target, pname, param) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.texParameterf + ',' + target + ',' + pname + ',' + param, - true - ) - } - - texParameteri = function (target, pname, param) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.texParameteri + ',' + target + ',' + pname + ',' + param - ) - } - - texSubImage2D = function (...args) { - WebGLRenderingContext.GBridge.texSubImage2D(this._canvas.id, ...args); - } - - uniform1f = function (location, v0) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.uniform1f + ',' + location.id + ',' + v0 - ) - } - - uniform1fv = function (location, value) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.uniform1fv + ',' + location.id + ',' + processArray(value), - true - ) - } - - uniform1i = function (location, v0) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.uniform1i + ',' + location.id + ',' + v0, - // true - ) - } - - uniform1iv = function (location, value) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.uniform1iv + ',' + location.id + ',' + processArray(value), - true - ) - } - - uniform2f = function (location, v0, v1) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.uniform2f + ',' + location.id + ',' + v0 + ',' + v1, - true - ) - } - - uniform2fv = function (location, value) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.uniform2fv + ',' + location.id + ',' + processArray(value), - true - ) - } - - uniform2i = function (location, v0, v1) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.uniform2i + ',' + location.id + ',' + v0 + ',' + v1, - true - ) - } - - uniform2iv = function (location, value) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.uniform2iv + ',' + location.id + ',' + processArray(value), - true - ) - } - - uniform3f = function (location, v0, v1, v2) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.uniform3f + ',' + location.id + ',' + v0 + ',' + v1 + ',' + v2, - true - ) - } - - uniform3fv = function (location, value) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.uniform3fv + ',' + location.id + ',' + processArray(value), - true - ) - } - - uniform3i = function (location, v0, v1, v2) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.uniform3i + ',' + location.id + ',' + v0 + ',' + v1 + ',' + v2, - true - ) - } - - uniform3iv = function (location, value) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.uniform3iv + ',' + location.id + ',' + processArray(value), - true - ) - } - - uniform4f = function (location, v0, v1, v2, v3) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.uniform4f + ',' + location.id + ',' + v0 + ',' + v1 + ',' + v2 + ',' + v3, - true - ) - } - - uniform4fv = function (location, value) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.uniform4fv + ',' + location.id + ',' + processArray(value), - true - ) - } - - uniform4i = function (location, v0, v1, v2, v3) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.uniform4i + ',' + location.id + ',' + v0 + ',' + v1 + ',' + v2 + ',' + v3, - true - ) - } - - uniform4iv = function (location, value) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.uniform4iv + ',' + location.id + ',' + processArray(value, true), - true - ) - } - - uniformMatrix2fv = function (location, transpose, value) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.uniformMatrix2fv + ',' + location.id + ',' + Number(transpose) + ',' + processArray(value), - true - ) - } - - uniformMatrix3fv = function (location, transpose, value) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.uniformMatrix3fv + ',' + location.id + ',' + Number(transpose) + ',' + processArray(value), - true - ) - } - - uniformMatrix4fv = function (location, transpose, value) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.uniformMatrix4fv + ',' + location.id + ',' + Number(transpose) + ',' + processArray(value), - true - ); - } - - useProgram = function (progarm) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.useProgram + ',' + progarm.id + '', - true - ) - } - - - validateProgram = function (program) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.validateProgram + ',' + program.id, - true - ) - } - - vertexAttrib1f = function (index, v0) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.vertexAttrib1f + ',' + index + ',' + v0, - true - ) - } - - vertexAttrib2f = function (index, v0, v1) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.vertexAttrib2f + ',' + index + ',' + v0 + ',' + v1, - true - ) - } - - vertexAttrib3f = function (index, v0, v1, v2) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.vertexAttrib3f + ',' + index + ',' + v0 + ',' + v1 + ',' + v2, - true - ) - } - - vertexAttrib4f = function (index, v0, v1, v2, v3) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.vertexAttrib4f + ',' + index + ',' + v0 + ',' + v1 + ',' + v2 + ',' + v3, - true - ) - } - - vertexAttrib1fv = function (index, value) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.vertexAttrib1fv + ',' + index + ',' + processArray(value), - true - ) - } - - vertexAttrib2fv = function (index, value) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.vertexAttrib2fv + ',' + index + ',' + processArray(value), - true - ) - } - - vertexAttrib3fv = function (index, value) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.vertexAttrib3fv + ',' + index + ',' + processArray(value), - true - ) - } - - vertexAttrib4fv = function (index, value) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.vertexAttrib4fv + ',' + index + ',' + processArray(value), - true - ) - } - - vertexAttribPointer = function (index, size, type, normalized, stride, offset) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.vertexAttribPointer + ',' + index + ',' + size + ',' + type + ',' + Number(normalized) + ',' + stride + ',' + offset, - true - ) - } - - viewport = function (x, y, width, height) { - WebGLRenderingContext.GBridge.callNative( - this._canvas.id, - GLmethod.viewport + ',' + x + ',' + y + ',' + width + ',' + height, - true - ) - } -} \ No newline at end of file diff --git a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/Shader.js b/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/Shader.js deleted file mode 100644 index a763886..0000000 --- a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/Shader.js +++ /dev/null @@ -1,22 +0,0 @@ -import {getTransferedObjectUUID} from './classUtils'; - -const name = 'WebGLShader'; - -function uuid(id) { - return getTransferedObjectUUID(name, id); -} - -export default class WebGLShader { - className = name; - - constructor(id, type) { - this.id = id; - this.type = type; - } - - static uuid = uuid; - - uuid() { - return uuid(this.id); - } -} \ No newline at end of file diff --git a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/ShaderPrecisionFormat.js b/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/ShaderPrecisionFormat.js deleted file mode 100644 index 208d6c1..0000000 --- a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/ShaderPrecisionFormat.js +++ /dev/null @@ -1,11 +0,0 @@ -export default class WebGLShaderPrecisionFormat { - className = 'WebGLShaderPrecisionFormat'; - - constructor({ - rangeMin, rangeMax, precision - }) { - this.rangeMin = rangeMin; - this.rangeMax = rangeMax; - this.precision = precision; - } -} \ No newline at end of file diff --git a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/Texture.js b/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/Texture.js deleted file mode 100644 index de4d806..0000000 --- a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/Texture.js +++ /dev/null @@ -1,22 +0,0 @@ -import {getTransferedObjectUUID} from './classUtils'; - -const name = 'WebGLTexture'; - -function uuid(id) { - return getTransferedObjectUUID(name, id); -} - -export default class WebGLTexture { - className = name; - - constructor(id, type) { - this.id = id; - this.type = type; - } - - static uuid = uuid; - - uuid() { - return uuid(this.id); - } -} \ No newline at end of file diff --git a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/UniformLocation.js b/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/UniformLocation.js deleted file mode 100644 index f5e99dc..0000000 --- a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/UniformLocation.js +++ /dev/null @@ -1,22 +0,0 @@ -import {getTransferedObjectUUID} from './classUtils'; - -const name = 'WebGLUniformLocation'; - -function uuid(id) { - return getTransferedObjectUUID(name, id); -} - -export default class WebGLUniformLocation { - className = name; - - constructor(id, type) { - this.id = id; - this.type = type; - } - - static uuid = uuid; - - uuid() { - return uuid(this.id); - } -} \ No newline at end of file diff --git a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/classUtils.js b/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/classUtils.js deleted file mode 100644 index 88716be..0000000 --- a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/context-webgl/classUtils.js +++ /dev/null @@ -1,3 +0,0 @@ -export function getTransferedObjectUUID(name, id) { - return `${name.toLowerCase()}-${id}`; -} \ No newline at end of file diff --git a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/env/canvas.js b/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/env/canvas.js deleted file mode 100644 index a8d9bb9..0000000 --- a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/env/canvas.js +++ /dev/null @@ -1,74 +0,0 @@ -import GContext2D from '../context-2d/RenderingContext'; -import GContextWebGL from '../context-webgl/RenderingContext'; - -export default class GCanvas { - - // static GBridge = null; - - id = null; - - _needRender = true; - - constructor(id, { disableAutoSwap }) { - this.id = id; - - this._disableAutoSwap = disableAutoSwap; - if (disableAutoSwap) { - this._swapBuffers = () => { - GCanvas.GBridge.render(this.id); - } - } - } - - getContext(type) { - - let context = null; - - if (type.match(/webgl/i)) { - context = new GContextWebGL(this); - - context.componentId = this.id; - - if (!this._disableAutoSwap) { - const render = () => { - if (this._needRender) { - GCanvas.GBridge.render(this.id); - this._needRender = false; - } - } - setInterval(render, 16); - } - - GCanvas.GBridge.callSetContextType(this.id, 1); // 0 for 2d; 1 for webgl - } else if (type.match(/2d/i)) { - context = new GContext2D(this); - - context.componentId = this.id; - -// const render = ( callback ) => { -// -// const commands = context._drawCommands; -// context._drawCommands = ''; -// -// GCanvas.GBridge.render2d(this.id, commands, callback); -// this._needRender = false; -// } -// //draw方法触发 -// context._flush = render; -// //setInterval(render, 16); - - GCanvas.GBridge.callSetContextType(this.id, 0); - } else { - throw new Error('not supported context ' + type); - } - - return context; - - } - - reset() { - GCanvas.GBridge.callReset(this.id); - } - - -} \ No newline at end of file diff --git a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/env/image.js b/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/env/image.js deleted file mode 100644 index 9499a51..0000000 --- a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/env/image.js +++ /dev/null @@ -1,96 +0,0 @@ -let incId = 1; - -const noop = function () { }; - -class GImage { - - static GBridge = null; - - constructor() { - this._id = incId++; - this._width = 0; - this._height = 0; - this._src = undefined; - this._onload = noop; - this._onerror = noop; - this.complete = false; - } - - get width() { - return this._width; - } - set width(v) { - this._width = v; - } - - get height() { - return this._height; - } - - set height(v) { - this._height = v; - } - - get src() { - return this._src; - } - - set src(v) { - - if (v.startsWith('//')) { - v = 'http:' + v; - } - - this._src = v; - - GImage.GBridge.perloadImage([this._src, this._id], (data) => { - if (typeof data === 'string') { - data = JSON.parse(data); - } - if (data.error) { - var evt = { type: 'error', target: this }; - this.onerror(evt); - } else { - this.complete = true; - this.width = typeof data.width === 'number' ? data.width : 0; - this.height = typeof data.height === 'number' ? data.height : 0; - var evt = { type: 'load', target: this }; - this.onload(evt); - } - }); - } - - addEventListener(name, listener) { - if (name === 'load') { - this.onload = listener; - } else if (name === 'error') { - this.onerror = listener; - } - } - - removeEventListener(name, listener) { - if (name === 'load') { - this.onload = noop; - } else if (name === 'error') { - this.onerror = noop; - } - } - - get onload() { - return this._onload; - } - - set onload(v) { - this._onload = v; - } - - get onerror() { - return this._onerror; - } - - set onerror(v) { - this._onerror = v; - } -} - -export default GImage; \ No newline at end of file diff --git a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/env/tool.js b/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/env/tool.js deleted file mode 100644 index d3fb398..0000000 --- a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/env/tool.js +++ /dev/null @@ -1,24 +0,0 @@ - -export function ArrayBufferToBase64 (buffer) { - var binary = ''; - var bytes = new Uint8ClampedArray(buffer); - for (var len = bytes.byteLength, i = 0; i < len; i++) { - binary += String.fromCharCode(bytes[i]); - } - return btoa(binary); -} - -export function Base64ToUint8ClampedArray(base64String) { - const padding = '='.repeat((4 - base64String.length % 4) % 4); - const base64 = (base64String + padding) - .replace(/\-/g, '+') - .replace(/_/g, '/'); - - const rawData = atob(base64); - const outputArray = new Uint8ClampedArray(rawData.length); - - for (let i = 0; i < rawData.length; ++i) { - outputArray[i] = rawData.charCodeAt(i); - } - return outputArray; -} \ No newline at end of file diff --git a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/index.js b/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/index.js deleted file mode 100644 index a34ad58..0000000 --- a/uni_modules/Sansnn-uQRCode/js_sdk/gcanvas/index.js +++ /dev/null @@ -1,39 +0,0 @@ -import GCanvas from './env/canvas'; -import GImage from './env/image'; - -import GWebGLRenderingContext from './context-webgl/RenderingContext'; -import GContext2D from './context-2d/RenderingContext'; - -import GBridgeWeex from './bridge/bridge-weex'; - -export let Image = GImage; - -export let WeexBridge = GBridgeWeex; - -export function enable(el, { bridge, debug, disableAutoSwap, disableComboCommands } = {}) { - - const GBridge = GImage.GBridge = GCanvas.GBridge = GWebGLRenderingContext.GBridge = GContext2D.GBridge = bridge; - - GBridge.callEnable(el.ref, [ - 0, // renderMode: 0--RENDERMODE_WHEN_DIRTY, 1--RENDERMODE_CONTINUOUSLY - -1, // hybridLayerType: 0--LAYER_TYPE_NONE 1--LAYER_TYPE_SOFTWARE 2--LAYER_TYPE_HARDWARE - false, // supportScroll - false, // newCanvasMode - 1, // compatible - 'white',// clearColor - false // sameLevel: newCanvasMode = true && true => GCanvasView and Webview is same level - ]); - - if (debug === true) { - GBridge.callEnableDebug(); - } - if (disableComboCommands) { - GBridge.callEnableDisableCombo(); - } - - var canvas = new GCanvas(el.ref, { disableAutoSwap }); - canvas.width = el.style.width; - canvas.height = el.style.height; - - return canvas; -}; \ No newline at end of file diff --git a/uni_modules/Sansnn-uQRCode/js_sdk/uqrcode/package.json b/uni_modules/Sansnn-uQRCode/js_sdk/uqrcode/package.json deleted file mode 100644 index 53c27a2..0000000 --- a/uni_modules/Sansnn-uQRCode/js_sdk/uqrcode/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "uqrcode", - "version": "3.6.0", - "description": "", - "main": "uqrcode.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC" -} diff --git a/uni_modules/Sansnn-uQRCode/js_sdk/uqrcode/uqrcode.js b/uni_modules/Sansnn-uQRCode/js_sdk/uqrcode/uqrcode.js deleted file mode 100644 index 6f83e04..0000000 --- a/uni_modules/Sansnn-uQRCode/js_sdk/uqrcode/uqrcode.js +++ /dev/null @@ -1,47 +0,0 @@ -//--------------------------------------------------------------------- -// uQRCode二维码生成插件 v3.6.0 Basic -// -// uQRCode是一款基于Javascript环境开发的二维码生成插件,适用所有Javascript运行环境的前端应用和Node.js。 -// -// Copyright (c) Sansnn uQRCode All rights reserved. -// -// Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) -// -// github地址: -// https://github.com/Sansnn/uQRCode -// -// npm地址: -// https://www.npmjs.com/package/uqrcodejs -// -// uni-app插件市场地址: -// https://ext.dcloud.net.cn/plugin?id=1287 -// -// 复制使用请保留本段注释,感谢支持开源! -// -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -// QRCode for JavaScript -// -// Copyright (c) 2009 Kazuhiko Arase -// -// URL: http://www.d-project.com/ -// -// Licensed under the MIT license: -// http://www.opensource.org/licenses/mit-license.php -// -// The word "QR Code" is registered trademark of -// DENSO WAVE INCORPORATED -// http://www.denso-wave.com/qrcode/faqpatent-e.html -// -//--------------------------------------------------------------------- -"use strict";let uQRCode;!function(){function o(o){this.mode=d.MODE_8BIT_BYTE,this.data=o}function e(o,e){this.typeNumber=o,this.errorCorrectLevel=e,this.modules=null,this.moduleCount=0,this.dataCache=null,this.dataList=new Array}function r(o,e){if(null==o.length)throw new Error(o.length+"/"+e);for(var r=0;r{i(o)}).catch(o=>{n(o)}).finally(()=>{if(e.length){const r=e.shift();o(r.task,r.resolve,r.reject)}else r=!1})}let e=this.waitingQueue=[],r=this.isRunning=!1;this.exec=function(t){return new Promise((i,n)=>{r?e.push({task:t,resolve:i,reject:n}):(r=!0,o(t,i,n))})}}function a(o){this.errMsg=o}function u(o,e){var r=this.data="",t=this.size=200,i=this.typeNumber=-1,n=(this.errorCorrectLevel=s.H,this.useDynamicSize=!1,this.dynamicSize=void 0,this.margin=0),a=(this.backgroundColor="#FFFFFF",this.backgroundImageSrc=void 0,this.backgroundImageWidth=void 0),d=this.backgroundImageHeight=void 0,g=this.backgroundImageX=void 0,l=this.backgroundImageY=void 0,h=(this.backgroundImageAlpha=1,this.backgroundImageBorderRadius=0,this.foregroundColor="#000000",this.foregroundImageSrc=void 0,this.foregroundImageWidth=void 0),c=this.foregroundImageHeight=void 0,m=this.foregroundImageX=void 0,f=this.foregroundImageY=void 0,v=this.foregroundImagePadding=0,C=(this.foregroundImageBackgroundColor="#FFFFFF",this.foregroundImageBorderRadius=0),p=this.foregroundImageShadowOffsetX=0,b=this.foregroundImageShadowOffsetY=0,y=this.foregroundImageShadowBlur=0,k=(this.foregroundImageShadowColor="#808080",this.foregroundPadding=0,this.foregroundRadius=1),I=this.positionProbeBackgroundColor=void 0,w=this.positionProbeForegroundColor=void 0,B=this.separatorColor=void 0,T=this.positionAdjustBackgroundColor=void 0,P=this.positionAdjustForegroundColor=void 0,S=this.timingBackgroundColor=void 0,A=this.timingForegroundColor=void 0,E=this.typeNumberBackgroundColor=void 0,D=this.typeNumberForegroundColor=void 0,N=this.darkBlockColor=void 0,L=(this.style="default",this.patterns=[],this.canvasContext=void 0);this.queue=!1,this.modules=[],this.moduleCount=0,this.drawModules=[];Object.defineProperties(this,{data:{get:()=>(""!==r&&void 0!==r||console.error("[uQRCode]: data must be set!"),r),set(o){r=o}},size:{get:()=>t,set(o){t=Number(o)}},typeNumber:{get:()=>i,set(o){i=Number(o)}},margin:{get:()=>n,set(o){n=Number(o)}},backgroundImageWidth:{get(){return void 0===a?this.dynamicSize:this.useDynamicSize?this.dynamicSize/this.size*a:a},set(o){a=Number(o)}},backgroundImageHeight:{get(){return void 0===d?this.dynamicSize:this.useDynamicSize?this.dynamicSize/this.size*d:d},set(o){d=Number(o)}},backgroundImageX:{get(){return void 0===g?0:this.useDynamicSize?this.dynamicSize/this.size*g:g},set(o){g=Number(o)}},backgroundImageY:{get(){return void 0===l?0:this.useDynamicSize?this.dynamicSize/this.size*l:l},set(o){l=Number(o)}},foregroundImageWidth:{get(){return void 0===h?(this.dynamicSize-2*this.margin)/4:this.useDynamicSize?this.dynamicSize/this.size*h:h},set(o){h=Number(o)}},foregroundImageHeight:{get(){return void 0===c?(this.dynamicSize-2*this.margin)/4:this.useDynamicSize?this.dynamicSize/this.size*c:c},set(o){c=Number(o)}},foregroundImageX:{get(){return void 0===m?this.dynamicSize/2-this.foregroundImageWidth/2:this.useDynamicSize?this.dynamicSize/this.size*m:m},set(o){m=Number(o)}},foregroundImageY:{get(){return void 0===f?this.dynamicSize/2-this.foregroundImageHeight/2:this.useDynamicSize?this.dynamicSize/this.size*f:f},set(o){f=Number(o)}},foregroundImagePadding:{get(){return this.useDynamicSize?this.dynamicSize/this.size*v:v},set(o){v=Number(o)}},foregroundImageBorderRadius:{get(){return this.useDynamicSize?this.dynamicSize/this.size*C:C},set(o){C=Number(o)}},foregroundImageShadowOffsetX:{get(){return this.useDynamicSize?this.dynamicSize/this.size*p:p},set(o){p=Number(o)}},foregroundImageShadowOffsetY:{get(){return this.useDynamicSize?this.dynamicSize/this.size*b:b},set(o){b=Number(o)}},foregroundImageShadowBlur:{get(){return this.useDynamicSize?this.dynamicSize/this.size*y:y},set(o){y=Number(o)}},foregroundRadius:{get:()=>k,set(o){k=o>1?1:o<0?0:o}},positionProbeBackgroundColor:{get(){return I||this.backgroundColor},set(o){I=o}},positionProbeForegroundColor:{get(){return w||this.foregroundColor},set(o){w=o}},separatorColor:{get(){return B||this.backgroundColor},set(o){B=o}},positionAdjustBackgroundColor:{get(){return T||this.backgroundColor},set(o){T=o}},positionAdjustForegroundColor:{get(){return P||this.foregroundColor},set(o){P=o}},timingBackgroundColor:{get(){return S||this.backgroundColor},set(o){S=o}},timingForegroundColor:{get(){return A||this.foregroundColor},set(o){A=o}},typeNumberBackgroundColor:{get(){return E||this.backgroundColor},set(o){E=o}},typeNumberForegroundColor:{get(){return D||this.foregroundColor},set(o){D=o}},darkBlockColor:{get(){return N||this.foregroundColor},set(o){N=o}},canvasContext:{get:()=>(void 0===L&&console.error("[uQRCode]: use drawCanvas, you need to set the canvasContext!"),L),set(o){L=u.getCanvasContext(o)}}}),o&&this.setOptions(o),e&&(this.canvasContext=u.getCanvasContext(e))}o.prototype={getLength:function(o){return this.data.length},write:function(o){for(var e=0;e=7&&this.setupTypeNumber(o),null==this.dataCache&&(this.dataCache=e.createData(this.typeNumber,this.errorCorrectLevel,this.dataList)),this.mapData(this.dataCache,r)},setupPositionProbePattern:function(o,e){for(var r=-1;r<=7;r++)if(!(o+r<=-1||this.moduleCount<=o+r))for(var t=-1;t<=7;t++)e+t<=-1||this.moduleCount<=e+t||(this.modules[o+r][e+t]=0<=r&&r<=6&&(0==t||6==t)||0<=t&&t<=6&&(0==r||6==r)||2<=r&&r<=4&&2<=t&&t<=4)},getBestMaskPattern:function(){for(var o=0,e=0,r=0;r<8;r++){this.makeImpl(!0,r);var t=l.getLostPoint(this);(0==r||o>t)&&(o=t,e=r)}return e},createMovieClip:function(o,e,r){var t=o.createEmptyMovieClip(e,r),i=1;this.make();for(var n=0;n>r&1);this.modules[Math.floor(r/3)][r%3+this.moduleCount-8-3]=t}for(r=0;r<18;r++){t=!o&&1==(e>>r&1);this.modules[r%3+this.moduleCount-8-3][Math.floor(r/3)]=t}},setupTypeInfo:function(o,e){for(var r=this.errorCorrectLevel<<3|e,t=l.getBCHTypeInfo(r),i=0;i<15;i++){var n=!o&&1==(t>>i&1);i<6?this.modules[i][8]=n:i<8?this.modules[i+1][8]=n:this.modules[this.moduleCount-15+i][8]=n}for(i=0;i<15;i++){n=!o&&1==(t>>i&1);i<8?this.modules[8][this.moduleCount-i-1]=n:i<9?this.modules[8][15-i-1+1]=n:this.modules[8][15-i-1]=n}this.modules[this.moduleCount-8][8]=!o},mapData:function(o,e){for(var r=-1,t=this.moduleCount-1,i=7,n=0,a=this.moduleCount-1;a>0;a-=2)for(6==a&&a--;;){for(var u=0;u<2;u++)if(null==this.modules[t][a-u]){var d=!1;n>>i&1));var s=l.getMask(e,t,a-u);s&&(d=!d),this.modules[t][a-u]=d,i--,-1==i&&(n++,i=7)}if(t+=r,t<0||this.moduleCount<=t){t-=r,r=-r;break}}}},e.PAD0=236,e.PAD1=17,e.createData=function(o,r,n){for(var a=t.getRSBlocks(o,r),u=new i,d=0;d8*g)throw new Error("code length overflow. ("+u.getLengthInBits()+">"+8*g+")");for(u.getLengthInBits()+4<=8*g&&u.put(0,4);u.getLengthInBits()%8!=0;)u.putBit(!1);for(;!(u.getLengthInBits()>=8*g||(u.put(e.PAD0,8),u.getLengthInBits()>=8*g));)u.put(e.PAD1,8);return e.createBytes(u,a)},e.createBytes=function(o,e){for(var t=0,i=0,n=0,a=new Array(e.length),u=new Array(e.length),d=0;d=0?f.get(v):0}}var C=0;for(h=0;h=0;)e^=l.G15<=0;)e^=l.G18<>>=1;return e},getPatternPosition:function(o){return l.PATTERN_POSITION_TABLE[o-1]},getMask:function(o,e,r){switch(o){case g.PATTERN000:return(e+r)%2==0;case g.PATTERN001:return e%2==0;case g.PATTERN010:return r%3==0;case g.PATTERN011:return(e+r)%3==0;case g.PATTERN100:return(Math.floor(e/2)+Math.floor(r/3))%2==0;case g.PATTERN101:return e*r%2+e*r%3==0;case g.PATTERN110:return(e*r%2+e*r%3)%2==0;case g.PATTERN111:return(e*r%3+(e+r)%2)%2==0;default:throw new Error("bad maskPattern:"+o)}},getErrorCorrectPolynomial:function(o){for(var e=new r([1],0),t=0;t5&&(r+=3+n-5)}for(t=0;t=256;)o-=255;return h.EXP_TABLE[o]},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)},c=0;c<8;c++)h.EXP_TABLE[c]=1<>>7-o%8&1)},put:function(o,e){for(var r=0;r>>e-r-1&1))},getLengthInBits:function(){return this.length},putBit:function(o){var e=Math.floor(this.length/8);this.buffer.length<=e&&this.buffer.push(0),o&&(this.buffer[e]|=128>>>this.length%8),this.length++}},u.errorCorrectLevel=s,u.queue=new n,u.queueLoadImage=new n,u.isQueueLoadImage=!1,u.loadImageCache=[],u.utf16To8=function(o){for(var e,r="",t=0;t=1&&e<=127?r+=o.charAt(t):e>2047?(r+=String.fromCharCode(224|e>>12&15),r+=String.fromCharCode(128|e>>6&63),r+=String.fromCharCode(128|e>>0&63)):(r+=String.fromCharCode(192|e>>6&31),r+=String.fromCharCode(128|e>>0&63));return r},u.deepReplace=function(o={},e={},r=!1){let t;t=r?o:{...o};for(let o in e){var i=e[o];null!=i&&(i.constructor==Object?t[o]=this.deepReplace(t[o],i):i.constructor!=String||i?t[o]=i:t[o]=t[o])}return t},u.getSomePropertyToNewObject=function(o={},e=[]){let r={};return e.forEach(e=>{r[e]=o[e]}),r},u.getCanvasContext=function(o){return o.setFillStyle=o.setFillStyle||function(e){o.fillStyle=e},o.setFontSize=o.setFontSize||function(e){o.font=`${e}px`},o.setTextAlign=o.setTextAlign||function(e){o.textAlign=e},o.setTextBaseline=o.setTextBaseline||function(e){o.textBaseline=e},o.draw=o.draw||function(o,e){e&&e()},o},u.getLoadImage=function(o){return"function"==typeof o?function(e,r=!1){return u.isQueueLoadImage?u.queueLoadImage.exec(()=>new Promise((t,i)=>{setTimeout(()=>{const r=u.loadImageCache.find(o=>o.src==e);r?t(r.img):o(e).then(o=>{u.loadImageCache.push({src:e,img:o}),t(o)}).catch(o=>{i(o)})},r?150:10)})):o(e)}:function(o){return Promise.resolve(o)}};var m=u.loadImage=function(o){return Promise.resolve(o)};Object.defineProperty(u,"loadImage",{get:()=>m,set(o){m=u.getLoadImage(o)}}),u.prototype={setOptions(o){var e,r,t,i,n,a,d,s,g,l,h,c,m,f,v,C,p,b,y,k,I,w,B,T,P,S,A,E,D,N,L,R,z,M,x,_,O,F,H,X,j,Y,Q,G,K,W,q,U,$,J,V,Z,oo,eo,ro,to,io,no,ao;o&&u.deepReplace(this,{data:o.data||o.text,size:o.size,typeNumber:o.typeNumber,errorCorrectLevel:o.errorCorrectLevel,useDynamicSize:o.useDynamicSize,margin:o.margin,backgroundColor:o.backgroundColor||(null===(e=o.background)||void 0===e?void 0:e.color),backgroundImageSrc:o.backgroundImageSrc||(null===(r=o.background)||void 0===r?void 0:null===(t=r.image)||void 0===t?void 0:t.src),backgroundImageWidth:o.backgroundImageWidth||(null===(i=o.background)||void 0===i?void 0:null===(n=i.image)||void 0===n?void 0:n.width),backgroundImageHeight:o.backgroundImageHeight||(null===(a=o.background)||void 0===a?void 0:null===(d=a.image)||void 0===d?void 0:d.height),backgroundImageX:o.backgroundImageX||(null===(s=o.background)||void 0===s?void 0:null===(g=s.image)||void 0===g?void 0:g.x),backgroundImageY:o.backgroundImageY||(null===(l=o.background)||void 0===l?void 0:null===(h=l.image)||void 0===h?void 0:h.y),backgroundImageAlpha:o.backgroundImageAlpha||(null===(c=o.background)||void 0===c?void 0:null===(m=c.image)||void 0===m?void 0:m.alpha),backgroundImageBorderRadius:o.backgroundImageBorderRadius||(null===(f=o.background)||void 0===f?void 0:null===(v=f.image)||void 0===v?void 0:v.borderRadius),foregroundColor:o.foregroundColor||(null===(C=o.foreground)||void 0===C?void 0:C.color),foregroundImageSrc:o.foregroundImageSrc||(null===(p=o.foreground)||void 0===p?void 0:null===(b=p.image)||void 0===b?void 0:b.src),foregroundImageWidth:o.foregroundImageWidth||(null===(y=o.foreground)||void 0===y?void 0:null===(k=y.image)||void 0===k?void 0:k.width),foregroundImageHeight:o.foregroundImageHeight||(null===(I=o.foreground)||void 0===I?void 0:null===(w=I.image)||void 0===w?void 0:w.height),foregroundImageX:o.foregroundImageX||(null===(B=o.foreground)||void 0===B?void 0:null===(T=B.image)||void 0===T?void 0:T.x),foregroundImageY:o.foregroundImageY||(null===(P=o.foreground)||void 0===P?void 0:null===(S=P.image)||void 0===S?void 0:S.y),foregroundImagePadding:o.foregroundImagePadding||(null===(A=o.foreground)||void 0===A?void 0:null===(E=A.image)||void 0===E?void 0:E.padding),foregroundImageBackgroundColor:o.foregroundImageBackgroundColor||(null===(D=o.foreground)||void 0===D?void 0:null===(N=D.image)||void 0===N?void 0:N.backgroundColor),foregroundImageBorderRadius:o.foregroundImageBorderRadius||(null===(L=o.foreground)||void 0===L?void 0:null===(R=L.image)||void 0===R?void 0:R.borderRadius),foregroundImageShadowOffsetX:o.foregroundImageShadowOffsetX||(null===(z=o.foreground)||void 0===z?void 0:null===(M=z.image)||void 0===M?void 0:M.shadowOffsetX),foregroundImageShadowOffsetY:o.foregroundImageShadowOffsetY||(null===(x=o.foreground)||void 0===x?void 0:null===(_=x.image)||void 0===_?void 0:_.shadowOffsetY),foregroundImageShadowBlur:o.foregroundImageShadowBlur||(null===(O=o.foreground)||void 0===O?void 0:null===(F=O.image)||void 0===F?void 0:F.shadowBlur),foregroundImageShadowColor:o.foregroundImageShadowColor||(null===(H=o.foreground)||void 0===H?void 0:null===(X=H.image)||void 0===X?void 0:X.shadowColor),foregroundPadding:o.foregroundPadding,foregroundRadius:o.foregroundRadius,positionProbeBackgroundColor:o.positionProbeBackgroundColor||(null===(j=o.positionProbe)||void 0===j?void 0:j.backgroundColor)||(null===(Y=o.positionDetection)||void 0===Y?void 0:Y.backgroundColor),positionProbeForegroundColor:o.positionProbeForegroundColor||(null===(Q=o.positionProbe)||void 0===Q?void 0:Q.foregroundColor)||(null===(G=o.positionDetection)||void 0===G?void 0:G.foregroundColor),separatorColor:o.separatorColor||(null===(K=o.separator)||void 0===K?void 0:K.color),positionAdjustBackgroundColor:o.positionAdjustBackgroundColor||(null===(W=o.positionAdjust)||void 0===W?void 0:W.backgroundColor)||(null===(q=o.alignment)||void 0===q?void 0:q.backgroundColor),positionAdjustForegroundColor:o.positionAdjustForegroundColor||(null===(U=o.positionAdjust)||void 0===U?void 0:U.foregroundColor)||(null===($=o.alignment)||void 0===$?void 0:$.foregroundColor),timingBackgroundColor:o.timingBackgroundColor||(null===(J=o.timing)||void 0===J?void 0:J.backgroundColor),timingForegroundColor:o.timingForegroundColor||(null===(V=o.timing)||void 0===V?void 0:V.foregroundColor),typeNumberBackgroundColor:o.typeNumberBackgroundColor||(null===(Z=o.typeNumber)||void 0===Z?void 0:Z.backgroundColor)||(null===(oo=o.versionInformation)||void 0===oo?void 0:oo.backgroundColor),typeNumberForegroundColor:o.typeNumberForegroundColor||(null===(eo=o.typeNumber)||void 0===eo?void 0:eo.foregroundColor)||(null===(ro=o.versionInformation)||void 0===ro?void 0:ro.foregroundColor),darkBlockColor:o.darkBlockColor||(null===(to=o.darkBlock)||void 0===to?void 0:to.color),style:o.style,patterns:o.patterns||(null===(io=o.art)||void 0===io?void 0:io.patterns)||(null===(no=o.art)||void 0===no?void 0:null===(ao=no.shape)||void 0===ao?void 0:ao.map(o=>(o.imageSrc=o.image,o))),queue:o.queue},!0)},make(){this.foregroundColor===this.backgroundColor&&console.error("[uQRCode]: foregroundColor and backgroundColor cannot be the same!");var o=new e(this.typeNumber,this.errorCorrectLevel);o.addData(u.utf16To8(this.data.toString())),o.make(),this.typeNumber=o.typeNumber,this.modules=o.modules,this.moduleCount=o.moduleCount;var r=this.size-2*this.margin;this.dynamicSize=Math.ceil(r/o.moduleCount)*o.moduleCount+2*this.margin,this.useDynamicSize||(this.dynamicSize=this.size),this.paintData(),this.paintPositionProbe(),this.paintSeparator(),this.paintTiming(),this.paintPositionAdjust(),this.paintDarkBlock(),this.paintTypeNumber(),this.getDrawModules()},paintData(){let{dynamicSize:o,margin:e,backgroundColor:r,foregroundColor:t,foregroundPadding:i,style:n,modules:a,moduleCount:u}=this,d=(o-2*e)/u,s=d,g=0;i>0&&"liquid"!=n&&"art"!=n&&(g=s*i/2,s-=2*g);for(var l=0;l{var i=o[e[0]][e[1]],a=o[e[0]+n][e[1]],u=o[e[0]][e[1]+n];u.type.push("positionProbe"),a.type.push("positionProbe"),i.type.push("positionProbe"),i.color=1==e[2]?t:r,a.color=1==e[2]?t:r,u.color=1==e[2]?t:r})},paintSeparator(){let{modules:o,moduleCount:e,separatorColor:r}=this;[[7,0],[7,1],[7,2],[7,3],[7,4],[7,5],[7,6],[7,7],[0,7],[1,7],[2,7],[3,7],[4,7],[5,7],[6,7]].forEach(t=>{var i=o[t[0]][t[1]],n=o[e-t[0]-1][t[1]],a=o[t[0]][e-t[1]-1];a.type.push("separator"),n.type.push("separator"),i.type.push("separator"),i.color=r,n.color=r,a.color=r})},paintPositionAdjust(){let{typeNumber:o,modules:e,moduleCount:r,foregroundColor:t,backgroundColor:i,positionAdjustForegroundColor:n,positionAdjustBackgroundColor:a,timingForegroundColor:u,timingBackgroundColor:d}=this;const s=[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],g=s[o-1];if(g){const o=[[-2,-2,1],[-1,-2,1],[0,-2,1],[1,-2,1],[2,-2,1],[-2,-1,1],[-1,-1,0],[0,-1,0],[1,-1,0],[2,-1,1],[-2,0,1],[-1,0,0],[0,0,1],[1,0,0],[2,0,1],[-2,1,1],[-1,1,0],[0,1,0],[1,1,0],[2,1,1],[-2,2,1],[-1,2,1],[0,2,1],[1,2,1],[2,2,1]],s=g.length;for(let l=0;lr-9-1&&c<9||c>r-9-1&&s<9||o.forEach(o=>{var r=e[s+o[0]][c+o[1]];r.type.push("positionAdjust"),r.type.includes("timing")?1==o[2]?r.color=n==t?u:n:r.color=n==t&&a==i?d:a:r.color=1==o[2]?n:a})}}},paintTiming(){let{modules:o,moduleCount:e,timingForegroundColor:r,timingBackgroundColor:t}=this,i=e-16;for(let e=0;e{var n=e[o[0]][o[1]];n.type.push("typeNumber"),n.color="1"==a[r]?i:t})},getDrawModules(){let o=this.drawModules=[],{modules:e,moduleCount:r,dynamicSize:t,backgroundColor:i,backgroundImageSrc:n,backgroundImageX:a,backgroundImageY:u,backgroundImageWidth:d,backgroundImageHeight:s,backgroundImageAlpha:g,backgroundImageBorderRadius:l,style:h,patterns:c,foregroundImageSrc:m,foregroundImageX:f,foregroundImageY:v,foregroundImageWidth:C,foregroundImageHeight:p,foregroundImagePadding:b,foregroundImageBackgroundColor:y,foregroundImageBorderRadius:k,foregroundImageShadowOffsetX:I,foregroundImageShadowOffsetY:w,foregroundImageShadowBlur:B,foregroundImageShadowColor:T}=this;i&&o.push({name:"background",type:"box",color:i,x:0,y:0,width:t,height:t}),n&&o.push({name:"backgroundImage",type:"image",imageSrc:n,imageSource:"backgroundImageSrc",x:a,y:u,width:d,height:s,alpha:g,borderRadius:l});for(var P=0;Po||0>e||o>=r||e>=r)&&this.modules[o][e].isBlack},drawCanvas(){let{canvasContext:o,foregroundColor:e,backgroundColor:r,queue:t,style:i}=this;if(e===r)return Promise.reject(new a("[uQRCode]: foregroundColor and backgroundColor cannot be the same!"));let n=async(e,r)=>{try{o.draw(!1),await this.styleDefault(),o.draw(!0),setTimeout(e,150)}catch(o){if(!(o instanceof a))throw o;r(o)}};return new Promise((o,e)=>{t?u.queue.exec(()=>new Promise((o,e)=>{n(o,e)})).then(()=>{setTimeout(o,150)}).catch(o=>{e(o)}):n(o,e)})},draw(){return this.drawCanvas()},async styleDefault(){let{drawModules:o,canvasContext:e,backgroundColor:r,margin:t,queue:i}=this;for(var n=0;n0?d.backgroundColor:"rgba(0,0,0,0)"),e.fill(),e.beginPath(),e.moveTo(s+c,g),e.arcTo(s+l,g,s+l,g+h,c),e.arcTo(s+l,g+h,s,g+h,c),e.arcTo(s,g+h,s,g,c),e.arcTo(s,g,s+l,g,c),e.closePath(),e.strokeStyle="rgba(0,0,0,0)",e.stroke(),e.clip();try{m=await u.loadImage(d.imageSrc);e.drawImage(m,d.x,d.y,d.width,d.height)}catch(o){throw console.error(`[uQRCode]: ${d.imageSource} invalid!`),new a(`[uQRCode]: ${d.imageSource} invalid!`)}}}i&&e.draw(!0),e.restore()}}},uQRCode=u,uQRCode.export=function(){var o,e;o="undefined"!=typeof window?window:global,e=uQRCode,"undefined"!=typeof module&&"object"==typeof exports?module.exports=e:"function"==typeof define&&(define.amd||define.cmd)?define(function(){return e}):o.UQRCode=e}}(); -//--------------------------------------------------------------------- -// 默认导出方式,非vite(vue3)使用该方式。 -// ↓ -//--------------------------------------------------------------------- -// uQRCode.export(); -//--------------------------------------------------------------------- -// ES6导出方式,vite(vue3)使用该方式。 -// ↓ -//--------------------------------------------------------------------- -export default uQRCode; \ No newline at end of file diff --git a/uni_modules/Sansnn-uQRCode/license.md b/uni_modules/Sansnn-uQRCode/license.md deleted file mode 100644 index 261eeb9..0000000 --- a/uni_modules/Sansnn-uQRCode/license.md +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/uni_modules/Sansnn-uQRCode/package.json b/uni_modules/Sansnn-uQRCode/package.json deleted file mode 100644 index 39c32ef..0000000 --- a/uni_modules/Sansnn-uQRCode/package.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "id": "Sansnn-uQRCode", - "displayName": "uQRCode 全端二维码生成插件 支持nvue 支持nodejs服务端", - "version": "3.6.5", - "description": "uQRCode是一款基于Javascript环境开发的二维码生成插件,适用所有Javascript运行环境的前端应用和Node.js。", - "keywords": [ - "二维码", - "uQRCode", - "qrcode", - "qr" -], - "repository": "https://github.com/Sansnn/uQRCode", - "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": "https://www.npmjs.com/package/uqrcodejs" - }, - "uni_modules": { - "dependencies": [], - "encrypt": [], - "platforms": { - "cloud": { - "tcb": "y", - "aliyun": "y" - }, - "client": { - "App": { - "app-vue": "y", - "app-nvue": "y" - }, - "H5-mobile": { - "Safari": "y", - "Android Browser": "y", - "微信浏览器(Android)": "y", - "QQ浏览器(Android)": "y" - }, - "H5-pc": { - "Chrome": "y", - "IE": "y", - "Edge": "y", - "Firefox": "y", - "Safari": "y" - }, - "小程序": { - "微信": "y", - "阿里": "y", - "百度": "y", - "字节跳动": "y", - "QQ": "y" - }, - "快应用": { - "华为": "y", - "联盟": "y" - }, - "Vue": { - "vue2": "y", - "vue3": "y" - } - } - } - } -} diff --git a/uni_modules/Sansnn-uQRCode/readme.md b/uni_modules/Sansnn-uQRCode/readme.md deleted file mode 100644 index c5c1680..0000000 --- a/uni_modules/Sansnn-uQRCode/readme.md +++ /dev/null @@ -1,318 +0,0 @@ -# 介绍 - -`uQRCode`是一款基于`Javascript`环境开发的二维码生成插件,适用所有`Javascript`运行环境的前端应用和`Node.js`应用。 - -`uQRCode`可扩展性高,它支持自定义渲染二维码,可通过`uQRCode API`得到二维码绘制关键信息后,使用`canvas`、`svg`或`js`操作`dom`的方式绘制二维码图案。还可自定义二维码样式,如随机颜色、圆点、方块、块与块之间的间距等。 - -欢迎加入群聊【uQRCode交流群】:[695070434](https://jq.qq.com/?_wv=1027&k=JRjzDqiw)。 - -# 设计器 - -uQRCode发布了配套的可视化设计器,可根据自己喜好在设计器中设计二维码样式,一键生成配置代码复制到项目中,详情请在微信小程序搜索“柚子二维码”,或扫描下方小程序码体验。 - -![uQRCode设计器](https://doc.uqrcode.cn/mp_weixin_code.jpg) - -## 设计器模板示例 - -![uQRCode设计器](https://doc.uqrcode.cn/yz_1.png) -![uQRCode设计器](https://doc.uqrcode.cn/yz_2.png) -![uQRCode设计器](https://doc.uqrcode.cn/yz_3.png) -![uQRCode设计器](https://doc.uqrcode.cn/yz_4.png) -![uQRCode设计器](https://doc.uqrcode.cn/yz_5.png) -![uQRCode设计器](https://doc.uqrcode.cn/yz_6.png) -![uQRCode设计器](https://doc.uqrcode.cn/yz_7.png) -![uQRCode设计器](https://doc.uqrcode.cn/yz_8.png) -![uQRCode设计器](https://doc.uqrcode.cn/yz_9.png) - -# 快速上手 - -> 在`uni-app`中,我们更推荐使用组件方式来生成二维码,组件方式大大提高了页面的可读性以及避开了一些平台容易出问题的地方,当组件无法满足需求的时候,再考虑切换成原生方式。 - -官方文档:[https://doc.uqrcode.cn](https://doc.uqrcode.cn)。 - -github地址:[https://github.com/Sansnn/uQRCode](https://github.com/Sansnn/uQRCode)。 - -npm地址:[https://www.npmjs.com/package/uqrcodejs](https://www.npmjs.com/package/uqrcodejs)。 - -uni-app插件市场地址:[https://ext.dcloud.net.cn/plugin?id=1287](https://ext.dcloud.net.cn/plugin?id=1287)。 - -## 原生方式 - -原生方式仅需要获取`uqrcode.js`文件便可使用。详细配置请移步到:文档 > [原生](https://doc.uqrcode.cn/document/native.html)。 - -### 安装 - -1. 通过`npm`安装,成功后即可使用`import`或`require`进行引用。 -``` bash -# npm安装 -npm install uqrcodejs -# 或者 -npm install @uqrcode/js -``` - -2. 通过项目开源地址获取`uqrcode.js`,下载`uqrcode.js`后,将其复制到您项目指定目录,在页面中引入`uqrcode.js`文件即可开始使用。 - -### 引入 - -- 通过`import`引入。 -``` javascript -// npm安装 -import UQRCode from 'uqrcodejs'; // npm install uqrcodejs -// 或者 -import UQRCode from '@uqrcode/js'; // npm install @uqrcode/js -``` - -- `Node.js`通过`require`引入。 -``` javascript -// npm安装 -const UQRCode = require('uqrcodejs'); // npm install uqrcodejs -// 或者 -const UQRCode = require('@uqrcode/js'); // npm install @uqrcode/js -``` - -- 原生浏览器环境,在js脚本加载时添加到`window`。 -``` html - - -``` - -### 简单用法 - -`uQRCode`基于`Canvas API`封装了一套方法,建议开发者使用`canvas`生成,一键调用,非常方便。以下是示例: - -- HTML部分 -``` html - -``` - -- JS部分 -``` javascript -// 获取uQRCode实例 -var qr = new UQRCode(); -// 设置二维码内容 -qr.data = "https://doc.uqrcode.cn"; -// 设置二维码大小,必须与canvas设置的宽高一致 -qr.size = 200; -// 调用制作二维码方法 -qr.make(); -// 获取canvas元素 -var canvas = document.getElementById("qrcode"); -// 获取canvas上下文 -var canvasContext = canvas.getContext("2d"); -// 设置uQRCode实例的canvas上下文 -qr.canvasContext = canvasContext; -// 调用绘制方法将二维码图案绘制到canvas上 -qr.drawCanvas(); -``` - -### 高级用法 - -考虑到部分平台可能不支持`canvas`,所以`uQRCode`并没有强制要求和`canvas`一起使用,您还可以选择其他方式来生成二维码,例如使用`js`操作`dom`进行绘制或是使用`svg`绘制等。以下是示例: - -- js操作dom -``` html - - - - - uQRCode二维码生成 - - -
- - - - -``` - -- svg -``` html - - - - - uQRCode二维码生成 - - - - - - - -``` - -> 更多用法大家自行探索咯,期待分享哟~ - -### 导出临时文件路径 - -原生方式基于`Canvas`的,请自行参阅各平台`Canvas`的导出方式。以下是部分示例: - -- uni-app -```javascript -// 通过uni.createCanvasContext方式创建绘制上下文的,对应导出API为uni.canvasToTempFilePath -// 调用完ctx.draw()方法后不能第一时间导出,否则会异常,需要有一定的延时 -setTimeout(() => { - uni.canvasToTempFilePath( - { - canvasId: this.canvasId, - fileType: this.fileType, - width: this.canvasWidth, - height: this.canvasHeight, - success: res => { - console.log(res); - }, - fail: err => { - console.log(err); - } - }, - // this // 组件内使用必传当前实例 - ); -}, 300); -``` - -- Canvas2D -```javascript -// 得到base64 -console.log(canvas.toDataURL()); -// 得到buffer -console.log(canvas.toBuffer()); -``` - -### 保存二维码到本地相册 - -必须在导出临时文件路径成功后再执行保存。uni-app通用保存方式(H5除外): -```javascript -uni.saveImageToPhotosAlbum({ - filePath: tempFilePath, - success: res => { - console.log(res); - }, - fail: err => { - console.log(err); - } -}); -``` - -H5可以通过设置``标签`href`属性的方式进行保存: -```javascript -const aEle = document.createElement('a'); -aEle.download = 'uQRCode'; // 设置下载的文件名,默认是'下载' -aEle.href = tempFilePath; -document.body.appendChild(aEle); -aEle.click(); -aEle.remove(); // 下载之后把创建的元素删除 -``` -经过测试,PC端浏览器可以下载,部分安卓自带或第三方浏览器可以下载,安卓微信浏览器不适用,移动端iOS所有浏览器均不适用,差异较大,还是推荐各位导出文件给图片组件显示,然后提示用户通过长按图片进行保存这种方式。 - -## uni-app组件方式 - -### 安装 - -通过uni-app插件市场地址安装:[https://ext.dcloud.net.cn/plugin?id=1287](https://ext.dcloud.net.cn/plugin?id=1287)。详细配置请移步到:文档 > [uni-app组件](https://doc.uqrcode.cn/document/uni-app.html)。 - -### 引入 - -uni-app默认为easycom模式,可直接键入``标签。 - -### 简单用法 - -安装`uqrcode`组件后,在`template`中键入``。设置`ref`属性可使用组件内部方法,`canvas-id`属性为组件内部的canvas组件标识,`value`属性为二维码生成对应内容,`options`为配置选项,可配置二维码样式,绘制Logo等,详见:[options](https://doc.uqrcode.cn/document/uni-app.html#options) 。 - -``` html - -``` - -### 导出临时文件路径 - -为了保证方法调用成功,请在 [complete](https://doc.uqrcode.cn/document/uni-app.html#complete) 事件返回`success=true`后调用。 - -```javascript -// uqrcode为组件的ref名称 -this.$refs.uqrcode.toTempFilePath({ - success: res => { - console.log(res); - } -}); -``` - -### 保存二维码到本地相册 - -为了保证方法调用成功,请在 [complete](https://doc.uqrcode.cn/document/uni-app.html#complete) 事件返回`success=true`后调用。 - -```javascript -// uqrcode为组件的ref名称 -this.$refs.uqrcode.save({ - success: () => { - uni.showToast({ - icon: 'success', - title: '保存成功' - }); - } -}); -``` - -## 更多使用说明请前往官方文档查看:[https://doc.uqrcode.cn](https://doc.uqrcode.cn)。 \ No newline at end of file diff --git a/uni_modules/ly-map/changelog.md b/uni_modules/ly-map/changelog.md new file mode 100644 index 0000000..c8f920e --- /dev/null +++ b/uni_modules/ly-map/changelog.md @@ -0,0 +1,41 @@ +## 1.0.8(2025-06-05) +##### 优化内容 +- 新增按照指定属性和值删除覆盖物 +- 新增覆盖物带箭头折线覆盖物、带箭头三次曲线覆盖物、不带箭头三次曲线覆盖物 +## 1.0.7(2025-04-29) +##### 优化内容 +- 修改拖拽结束事件等待惯性结束后触发事件 +- 修改缩放事件结束后,返回`lon` `lat` `zoom` +## 1.0.6(2025-04-29) +##### bug修复 +- 修复方法setOption同时配置 zoom、center时,center不生效问题 +- 修复覆盖物infowindow设置offsetX、offsetY无效问题 +## 1.0.5(2025-04-23) +##### 新增内容 +- 支持覆盖物点击事件,详情见文档 +- 支持启用/禁用地图拖拽、双击缩放、双指缩放、惯性拖拽,详情见文档 +- 新增文本覆盖物、信息窗口,详情见文档 +## 1.0.4(2025-04-11) +##### 新增内容 +- 地图新增覆盖物,详情见文档 +- 标注添加默认图标 +## 1.0.3(2025-03-30) +##### Bug修复 +- 修复对VUE2的兼容 +## 1.0.2(2025-03-17) +##### Bug修复 +- 修复H5环境下的兼容性 +- 修复对VUE3的兼容 +- 修复控制台错误信息打印 +## 1.0.1(2025-03-14) +##### 新增内容 +- 新增地图缩放事件 +- 新增多数属性同时设置接口 +- 新增可修改中心图标 +##### 优化内容 +- 优化地图拖拽事件回调中心位置 +- 优化标注可设置位置偏移 +- 优化交互 +## 1.0.0(2025-03-12) +首发 + diff --git a/uni_modules/ly-map/components/ly-map/ly-map.vue b/uni_modules/ly-map/components/ly-map/ly-map.vue new file mode 100644 index 0000000..5183280 --- /dev/null +++ b/uni_modules/ly-map/components/ly-map/ly-map.vue @@ -0,0 +1,662 @@ + + + + + + + \ No newline at end of file diff --git a/uni_modules/ly-map/package.json b/uni_modules/ly-map/package.json new file mode 100644 index 0000000..880654d --- /dev/null +++ b/uni_modules/ly-map/package.json @@ -0,0 +1,79 @@ +{ + "id": "ly-map", + "displayName": "天地图(支持安卓、苹果、鸿蒙、支持多地图、覆盖物,平替高德腾讯地图年省5万)", + "version": "1.0.8", + "description": "支持多地图同时使用,支持卫星地图展示、支持多标注展示,支持自定义事件处理、支持自定义样式,平替高德/百度/腾讯地图展示年省5万", + "keywords": [ + "地图", + "天地图", + "地图标注", + "覆盖物" + ], + "repository": "", + "engines": { + "HBuilderX": "^4.01" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y", + "alipay": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "n", + "app-uvue": "n", + "app-harmony": "u" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "n", + "阿里": "n", + "百度": "n", + "字节跳动": "n", + "QQ": "n", + "钉钉": "n", + "快手": "n", + "飞书": "n", + "京东": "n" + }, + "快应用": { + "华为": "n", + "联盟": "n" + } + } + } + }, + "name": "天地图(支持Android、IOS、Harmony、支持多地图、覆盖物,平替高德腾讯地图年省5万)", + "dcloudext": { + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "" + } +} diff --git a/uni_modules/ly-map/readme.md b/uni_modules/ly-map/readme.md new file mode 100644 index 0000000..3999452 --- /dev/null +++ b/uni_modules/ly-map/readme.md @@ -0,0 +1,615 @@ +### 地图组件 ly-map + +
+ +### 1 坐标系说明 + +#### 默认坐标系 + +``` +天地图为WGS84坐标系,如果当前使用的是百度坐标(BD09)、火星坐标(GCJ02) +则需要转化后使用,推荐使用coord-transform工具转换 +``` + +#### 转换工具安装 + +``` +// npm +npm install @isvend/coord-transform + +// pnpm +pnpm add @isvend/coord-transform +``` + +#### 坐标转换 + +```javascript +import { + transformWGS84ToBD09, + transformBD09ToGCJ02, + transformBD09ToWGS84, + transformGCJ02ToWGS84, + transformWGS84ToGCJ02, +} from "@isvend/coord-transform"; + +const lng = 116.404; +const lat = 39.915; + +console.log("WGS84 to GCJ02", transformWGS84ToGCJ02(lng, lat)); +console.log("GCJ02 to WGS84", transformGCJ02ToWGS84(lng, lat)); + +console.log("WGS84 to BD09", transformWGS84ToBD09(lng, lat)); +console.log("BD09 to WGS84", transformBD09ToWGS84(lng, lat)); + +console.log("BD09 to GCJ02", transformBD09ToGCJ02(lng, lat)); +console.log("GCJ02 to BD09", transformBD09ToGCJ02(lng, lat)); +``` + +
+ +### 2 初始化 + +默认填充父布局 + +```vue + + +``` + +
+ +### 3 插件说明 + +##### 属性 + +| 参数 | 类型 | 说明 | +|:-------------------|:---------:|:----------------------------------| +| `mapKey` | `String` | 天地图官网申请的key,必填否则地图不能正确出来 | +| `lonlat` | `Array` | 地图初始位置,默认值[111.668097, 40.825417] | +| `zoom` | `Number` | 地图初始缩放等级,默认值16 | +| `showCenterIcon` | `Boolean` | 是否在地图中间显示图标, 默认值 false不显示 | +| `centerIcon` | `String` | 修改默认中间显示图标 | +| `showLocationIcon` | `Boolean` | 是否在地图右下角显示定位图标, 默认值 false不显示 | + +##### 事件 + +| 事件 | 说明 | +|:-------------------------------------- |:------------------------------------------------------- | +| `onLoaded() ` | 当地图加载完成时 | +| `onLocation() ` | 点击右下角定位按钮时 | +| `onZoomEnd(lon:number, lat:number, zoom:number) ` | 缩放完成时,并返回中心位置以及当前缩放等级 | +| `onStartDrag(lon:number, lat:number)` | 当地图开始拖拽时,并返回中心位置 | +| `onEndDrag(lon:number, lat:number) ` | 当地图结束拖拽时,并返回中心位置 | +| `onListen(event:object) ` | 覆盖物事件监听,需要覆盖物属性`click`为`true`可被触发,目前支持点击事件 `event`说明如下 | + +##### 覆盖物事件 `Event` 格式说明 + +| key | value | 说明 | +|:---------|:--------:|:----------------------------------------------| +| `type` | `String` | 事件类型 支持 `click` | +| `target` | `Object` | 发生事件的覆盖物option,会原样返回覆盖物的配置格式`Over` 或 `Marker` | + +##### 方法 + +| 方法 | 说明 | +|:------------------------------------------------|:----------------------------------------------------------------------------------------------------------------| +| `setCenter(lon:number, lat:number,zoom:Number)` | 将地图的中心点变换到指定的地理坐标,如果同时指定了缩放等级,则同时缩放到指定的等级
参数说明:
`lon`:地图的中心点经度
`lat`:地图的中心点纬度
`zoom`:地图的比例尺级别 | +| `setType(type:Number) ` | 设置地图显示类型
参数说明:
`type`:要设置的地图展示类型 0矢量地图 1卫星地图 其它显示矢量地图 | +| `setMarkers(Array) ` | 将标注添加到地图中,支持多个标注同时添加,标注`Marker`格式见下说明 | +| `setZoom(zoom:Number) ` | 将视图缩放到指定的缩放等级,中心点坐标不变
参数说明:
`zoom`:地图的比例尺级别 | +| `resize() ` | 重置地图展示区域尺寸 | +| `setOption(option:Object) ` | 同时设置多个属性,支持中心点、缩放、标注、覆盖物
参数说明:
`Object`格式见下说明 | +| `addOvers(overs:Array) ` | 添加覆盖物,同时设置多个(会在现有的基础上添加)
参数说明:
`Over`格式见下说明 | +| `setOvers(overs:Array) ` | 设置覆盖物,同时设置多个(清除现有同类型的,重新添加)
参数说明:
`Over`格式见下说明 | +| `clearOvers(type:String) ` | 清除指定的覆盖物类型,不指定则清除所有
参数说明:
type=`circle` 或 `polyline` 或 `polygon` 或 `rect` 或 `label` 或 `infowindow` | +| `removeOvers(prop, value) ` | 移除指定属性和值的覆盖物,匹配创建覆盖物时的prop和value
参数说明:
`prop`:覆盖物属性
`value`:覆盖物属性对应的值 | +| `setEnable(option:Object) ` | 设置开启或者禁用的地图操作 支持拖拽、双击缩放、双指缩放、惯性拖拽
`Option`格式见下说明 | + + +##### 标注 `Marker` 格式说明 + +| key | value | 说明 | +|:-----------|:---------:|:------------------------------| +| `icon` | `String` | 标注显示图标的路径,支持网络图片 | +| `width` | `Number` | 标注图标宽度,注意:不设置icon时无效 | +| `height` | `Number` | 标注图标高度,注意:不设置icon时无效 | +| `lon ` | `Number` | 标注显示的位置经度 | +| `lat ` | `Number` | 标注显示的位置纬度 | +| `offsetX` | `Number` | 标注图标相对左上角水平偏移 ,注意:不设置icon时无效 | +| `offsetY` | `Number` | 标注图标相对左上角垂直偏移 ,注意:不设置icon时无效 | + +##### 覆盖物 `Over`格式说明 + +| key | value | 说明 | +|:--------------- |:------------------: |:------------------------------------------------------------------------- | +| `type` | `String` | 覆盖物类型 支持 `circle` `polyline` `polygon` `rect` `label` `infowindow` `polylineArrow` `cardinalCurve` `cardinalCurveArrow` | +| `color` | `String` | 边线颜色 | +| `weight` | `Number` | 边线的宽度,以像素为单位 | +| `opacity ` | `Number` | 边线的透明度(范围0-1 之间) | +| `fillColor ` | `String` | 填充颜色。当参数为空时,折线覆盖物将没有填充效果 | +| `fillOpacity` | `Number` | 填充的透明度(范围0-1 之间)。 | +| `lineStyle` | `String` | 边线的样式(`solid`或`dashed`)注意:当`polylineArrow` `cardinalCurve` `cardinalCurveArrow`时,不生效(天地图缺陷) | +| `rad` | `Number` | `type=circle`时有效,圆的半径单位`m` | +| `lon ` | `Number` | `type=circle`时圆心经纬度坐标;`type=label`文本标注的地理位置;`type=infowindow`弹窗的显示地理位置坐标 | +| `lat ` | `Number` | `type=circle`时圆心经纬度坐标;`type=label`文本标注的地理位置;`type=infowindow`弹窗的显示地理位置坐标 | +| `points` | `Array<[lon,lat]>` | `type=polygon或polyline`时有效,坐标数组 | +| `leftTop` | `Array<[lon,lat]>` | `type=rect`时有效, 矩形左上角坐标 | +| `rightBottom` | `Array<[lon,lat]>` | `type=rect`时有效, 矩形右下角坐标 | +| `text` | `String` | `type=label`时有效,显示文本内容; | +| `offsetX` | `Number` | `type=label`时有效,显示文本水平偏移;`type=infowindow`时有效,显示弹窗水平偏移 | +| `offsetY` | `Number` | `type=label`时有效,显示文垂直平偏移;`type=infowindow`时有效,显示弹窗垂直偏移 | +| `minWidth` | `Number` | `type=infowindow`时有效,弹出框的最小宽度 | +| `maxWidth` | `Number` | `type=infowindow`时有效,弹出框的最大宽度 | +| `maxHeight` | `Number` | `type=infowindow`时有效,设置后,如果内容超过弹出窗口的给定高度则产生一个可以滚动的容器 | +| `autoPan` | `Boolean` | `type=infowindow`时有效,否开启信息窗口打开时地图自动移动(默认关闭) | +| `closeButton` | `Boolean` | `type=infowindow`时有效,控制弹出窗口中出现的关闭按钮 | +| `closeOnClick` | `Boolean` | `type=infowindow`时有效,是否开启点击地图关闭信息窗口(默认关闭) | + +##### 地图操作禁用配置 `Option` 格式说明 + +| key | value | 说明 | +|:------------------|:---------:|:-------------------------------| +| `drag` | `Boolean` | 地图拖拽 `true`允许 `fale`禁用,默认启用 | +| `doubleClickZoom` | `Boolean` | 地图双击放大`true`允许 `fale`禁用,默认启用 | +| `pinchToZoom` | `Boolean` | 双指操作缩放 `true`允许 `fale`禁用,默认启用 | +| `inertia ` | `Boolean` | 地图惯性拖拽 `true`允许 `fale`禁用,默认启用 | | + +##### 多属性 `Object` 配置说明 + +```javascript +const option = { + // 中心点 + center: {lon: 116.391231, lat: 39.907334}, + // 多标注 + markers: [{ + icon: icon, + width: 24, + height: 27, + lon: 116.389231, + lat: 39.906034, + offsetX: 12, + offsetY: 27, + click: true, // 开启点击监听 + }], + // 缩放 + zoom: 16, + // 地图类型 + type: 1, + // 覆盖物 + overs: [ + // 添加圆 + { + type: "circle", + rad: 100, + lon: 111.667920, + lat: 40.828050, + color: "#0000FF", + weight: 3, + opacity: .5, + fillColor: "#0000FF", + fillOpacity: .2, + lineStyle: "solid", + }, + // 添加折线 + { + type: "polyline", + points: [[111.665750, 40.822830], [111.668190, 40.821800], [111.670310, 40.822790]], + color: "#0000FF", + weight: 3, + opacity: .5, + lineStyle: "solid", + }, + // 添加多边形 + { + type: "polygon", + points: [[111.668160, 40.824850], [111.666640, 40.823950], [111.669570, 40.823990]], + color: "#0000FF", + weight: 3, + opacity: .5, + lineStyle: "solid", + }, + // 添加矩形 + { + type: "rect", + leftTop: [111.665880, 40.826710], + rightBottom: [111.670120, 40.825860], + color: "#0000FF", + weight: 3, + opacity: .5, + lineStyle: "solid", + }, + // 添加文本 + { + type: "label", + lon: 111.668150, + lat: 40.825330, + text: "点我打开弹窗", + offsetX: -60, + offsetY: 10, + click: true, + }, + ], +} +``` + +```text +注意:目前所有覆盖物都支持click属性,当click=true时,则开启点击监听,默认不开启 +``` + +
+ +### 4 示例代码 + +```vue + + + + +``` +
+ +### 5 QA + +#### 为什么自定义标注图标在APP上会失效? +``` +标注图标支持网络图片以及base64格式图标 +``` + diff --git a/uni_modules/ly-map/static/ly-map/center.png b/uni_modules/ly-map/static/ly-map/center.png new file mode 100644 index 0000000000000000000000000000000000000000..efb59cc18e87fbf2b8487332cab45434e9f42530 GIT binary patch literal 1707 zcmV;c22}ZpP)Px*Wl2OqRCr$PT6s(qR~Ub@v-h%qCFPJRB8o;7QNZF+NnO!mm7mL99tF-ssC#Lrw8i>$(9qJ+?kjUSixYx;pt_<@filT$$ zw_c|v*Bg-b*gYk}Ek$pp;;+@yeXiD1iuMNB&!4pR_Z8jrQlb;YR#;7`oC#oa zU(-!&(sU&^EQywB*~CL)csC$9*HpBt#5Ncrf^F=q2uX3~Sj8Z=@oeIFGk~UP#fUwo z+lAG3KQ_d;F`6K<{^WFJ5J3<|+#Jv2crk#cY1xoWL*2z%M+ZJcIm;2%N%XWRS>;C% zgvD8`v-`XlFe}G=b8o3N*cln0_os(Tt9Ff(_u!h7vjLN`jlXA?+lO!!f`d;C6&D>! zRKACUZN+dhVCpeb+QBj#?<+H8K$F8H+WiTNRS*nsYe3WvLu1K3$^)024_xFsqz?uTnFm0i&0CylNDS<+LMa>`PDzA4me+*U{Hzm>zlW10G6ot?PSOzS}GacGi zY?}xrW8&j`iP44+WT@*~ErV~ps-HN};$JN&w-T@9pFdD?c=Kq*B&a4V14d^V?&Mcd zouOnWrz?>rh-?>DaGOFS_ri<3*kJN*UXm&RstL=0KAR1e$_7dbAzK?GLrbICLDrwM zqUEPyMP4s&(t2%yN(Rxy#DWcAYW@yu^hTY9{rmd1ia>SC+(6p=*6Gnh1A7j&j6hFU zxG4#OFhPjG24q~aMx-1!mq19O14&dcQwf0}&2A$)S3`j?+vDVsbKjL-hJe5Ze3omP znptAYf{=VUSc*2r!e-~9d<)ui!3v>4$&r$zZ{rpFAt0~;D^Hroq@TAQhmcGOlc0Sc z%OMan?RzsiP-X*RQin?8R*#gQfPlaToUNg|4Bw@zfsio!{gwH!=1~7_hUVG;a-Er_ z4tzh5_#1)&8^9#*xL)sgpmTt*KTc7gF+JI}22b3uqp=4-YZ>xUi|G4H-Cis%SU3S1 zL~Fi&TMhd1dRV{DTScJzEO&yA>-4Arumdo14wjwh7w6%Q43iqgkts>(SGjU?DziX2fK2ZOq-^Wf%^hj27L2JtzzSOPs0Np zjfHO&-rcL^mA&;Cw%E0O%06m>UNp2(wQx`;*usJP3NQjjXBn>NS5YC*Dd&p#*kH0E zFG&5_VYTzX`JG6FXzCj&-hH3i>j5LMi1bg#a11~5eH&sjI6o-!|RM#|;>S0kib zmPE^W?)(p40L@v6D(yCqu>a5ic0P zhl@Blgc%^b0>T;~EP}!=AZ&v|9Uv4!LM14a!opcVI1CA=LE$(o^aF&3h|m!dT4F*^ z@J(xqHvV@IYB>#1>7F}rdW&2!|65m>t8l*X{{q9labJ~htf&A0002ovPDHLkV1g2a BC@KH| literal 0 HcmV?d00001 diff --git a/uni_modules/ly-map/static/ly-map/location.png b/uni_modules/ly-map/static/ly-map/location.png new file mode 100644 index 0000000000000000000000000000000000000000..6cb61af9a946c2dbc194bcac7ced22757b28f102 GIT binary patch literal 2103 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 literal 0 HcmV?d00001 diff --git a/util/index.js b/util/index.js index 9ff06af..684d77d 100644 --- a/util/index.js +++ b/util/index.js @@ -51,10 +51,192 @@ isSet=(v) =>{ isWeakMap=(v) =>{ return v instanceof WeakMap; }, -isWeakSet=(v) =>{ +isWeakSet=(v) => { return v instanceof WeakSet; +}, +_goto = (url,type) => { + //console.log(url); + type = type || '0'; //0 navigateTo 1 redirectTo + if(url){ + if(isInteger(url)){ + uni.navigateBack({ + delta:url, + }) + }else{ + url+=""; + if(url.substr(0,6) != '/pages'){ + url='/pages'+url + } + if(type == '1'){ + return uni.redirectTo({ + url:url + }); + } + if(type == '2'){ + return uni.switchTab({ + url:url + }); + } + uni.navigateTo({ + url:url + }) + } + } }; +const showToast = (msg,url,icon) => { + //msg = i18n.t(msg); + // #ifdef APP + plus.nativeUI.closeToast(); + plus.nativeUI.toast(msg,{ + align:'center', + verticalAlign:"center", + style:"inline", + icon:icon=='error' ? '/static/img/common/error.png' : '/static/img/common/success.png', + iconWidth:24, + iconHeight:24 + }); + + if(url){ + setTimeout(()=>{ + _goto(url); + },3000) + } + // #endif + // #ifndef APP + uni.showToast({ + //image:icon=='error' ? '/static/img/common/error.png' : '/static/img/common/success.png', + icon:icon=='error' ? icon : 'success', + title:msg, + showToast:3000, + complete:()=>{ + if(url){ + setTimeout(()=>{ + _goto(url); + },3000) + } + } + }); + // #endif +} + +const error = (msg,url) => { + showToast(msg,url,'error'); +} +const success = (msg,url) => { + showToast(msg,url,'success'); +} +const scan = ()=>{ + uni.scanCode({ + success(res){ + /** + * result 所扫码的内容 + scanType 所扫码的类型 App、微信小程序、百度小程序、QQ小程序、京东小程序、支付宝小程序 + charSet 所扫码的字符集 App、微信小程序、百度小程序(所扫码的字符集,仅支持 Android 系统)、QQ小程序、京东小程序 + path 当所扫的码为当前应用的合法二维码时,会返回此字段,内容为二维码携带的 path。 微信小程序、QQ小程序、京东小程序 + rawData 原始数据,base64 编码 微信小程序、QQ小程序、京东小程序、支付宝小程序 + code 扫码所得数据 支付宝小程序 + qrCode 扫描二维码时返回二维码数据 支付宝小程序 + barCode 扫描条形码时返回条形码数据 支付宝小程序 + imageChannel 来源 支付宝小程序 + */ + if(res.result){ + if(res.result.indexOf('blackcatp:/')){ + uni.navigateTo({ + url:res.result.substring(11) + }) + }else{ + success(res.result) + } + } + }, + fail(res){ + + }, + complete(res){ + console.log(res) + } + }); +} + +const fileExsit = async(fn)=>{ + return await new Promise((resolve) => { + plus.io.resolveLocalFileSystemURL("_doc/"+fn, function(entry) { + resolve(true); + }, function() { + resolve(false); + }); + }) +} +const downloadFile = (url, savepath, successCb, errorCb, progressCb) => { + const root_dir = "_doc/"; + if (!url) { + errorCb && errorCb.call(this,new Error('empty url')); + return; + } + const startDownload = () => { + console.log(33333333333333,root_dir+savepath); + const task = plus.downloader.createDownload(url, { filename: root_dir+savepath, timeout: 2 }, function(d, status) { + console.log('completedCB'); + console.log(d); + console.log(status); + if (status === 200) { + const local = d && d.filename ? d.filename : root_dir+savepath; + successCb && successCb.call(this,local); + } else { + errorCb && errorCb.call(this,new Error('download status ' + status)); + } + }); + task.addEventListener('statechanged', function(t, status) { + console.log('statechanged',d,status); + if (t.state === 3) { + var downloaded = t.downloadedSize || t.downloaded || 0; + var total = t.totalSize || t.total || 0; + var prog = 0; + if (total > 0) prog = Math.min(100, Math.floor(downloaded / total * 100)); + progressCb && progressCb.call(this,prog); + } + }); + try{ + task.start(); + plus.downloader.startAll(); + }catch(e){ + console.log('e',e); + } + plus.downloader.enumerate((downloads )=>{ + for(var i =0;i 结构) + const fns = savepath.split('/'); + plus.io.requestFileSystem(plus.io.PRIVATE_DOC, function(fs) { + fs.root.getDirectory(fns[0], { create: true }, function(entry) { + startDownload(); + }, function(e) { + // 创建失败也尝试下载,可能运行时会自动创建 + startDownload(); + }); + }, function(e) { + startDownload(); + }); +} +const cacheFile = async (url, savepath, successCb, errorCb, progressCb) => { + //plus.downloader.clear(); + //return ; + const coverExists = await fileExsit(savepath); + if(coverExists){ + successCb && successCb.call(this,"_doc/"+savepath); + }else{ + downloadFile(url, savepath, successCb, errorCb, progressCb) + } +} export default{ + fileExsit, + downloadFile, + cacheFile, isString :isString, isNumber :isNumber, isInteger :isInteger, @@ -88,110 +270,11 @@ export default{ } return ""; }, - goto(url,type){ - //console.log(url); - type = type || '0'; //0 navigateTo 1 redirectTo - if(url){ - if(isInteger(url)){ - uni.navigateBack({ - delta:url, - }) - }else{ - url+=""; - if(url.substr(0,6) != '/pages'){ - url='/pages'+url - } - if(type == '1'){ - return uni.redirectTo({ - url:url - }); - } - if(type == '2'){ - return uni.switchTab({ - url:url - }); - } - uni.navigateTo({ - url:url - }) - } - } - }, - showToast(msg,url,icon){ - const _this = this; - //msg = i18n.t(msg); - // #ifdef APP - plus.nativeUI.closeToast(); - plus.nativeUI.toast(msg,{ - align:'center', - verticalAlign:"center", - style:"inline", - icon:icon=='error' ? '/static/img/common/error.png' : '/static/img/common/success.png', - iconWidth:24, - iconHeight:24 - }); - - if(url){ - setTimeout(()=>{ - _this.goto(url); - },3000) - } - // #endif - // #ifndef APP - uni.showToast({ - //image:icon=='error' ? '/static/img/common/error.png' : '/static/img/common/success.png', - icon:icon=='error' ? icon : 'success', - title:msg, - showToast:3000, - complete:()=>{ - if(url){ - setTimeout(()=>{ - _this.goto(url); - },3000) - } - } - }); - // #endif - }, - error(msg,url){ - this.showToast(msg,url,'error'); - }, - success(msg,url){ - this.showToast(msg,url,'success'); - }, - scan(){ - uni.scanCode({ - success(res){ - /** - * result 所扫码的内容 - scanType 所扫码的类型 App、微信小程序、百度小程序、QQ小程序、京东小程序、支付宝小程序 - charSet 所扫码的字符集 App、微信小程序、百度小程序(所扫码的字符集,仅支持 Android 系统)、QQ小程序、京东小程序 - path 当所扫的码为当前应用的合法二维码时,会返回此字段,内容为二维码携带的 path。 微信小程序、QQ小程序、京东小程序 - rawData 原始数据,base64 编码 微信小程序、QQ小程序、京东小程序、支付宝小程序 - code 扫码所得数据 支付宝小程序 - qrCode 扫描二维码时返回二维码数据 支付宝小程序 - barCode 扫描条形码时返回条形码数据 支付宝小程序 - imageChannel 来源 支付宝小程序 - */ - if(res.result){ - if(res.result.indexOf('blackcatp:/')){ - uni.navigateTo({ - url:res.result.substring(11) - }) - }else{ - this.success(res.result) - } - } - }, - fail(res){ - - }, - complete(res){ - console.log(res) - } - }); - }, - + "goto":_goto, + showToast, + error, + success, + scan, copy(v){ let that = this; uni.setClipboardData({ @@ -225,71 +308,5 @@ export default{ }, imapi(method,data){ return IMSDK.asyncApi(method,IMSDK.uuid(),data); - }, - - async fileExsit(fn){ - return await new Promise((resolve) => { - plus.io.resolveLocalFileSystemURL(fn, function(entry) { resolve(true); }, function() { resolve(false); }); - }) - }, - downloadFile (url, savepath, successCb, errorCb, progressCb) { - if (!url) { - errorCb && errorCb(new Error('empty url')); - return; - } - const startDownload = () => { - try { - const task = plus.downloader.createDownload(url, { filename: savepath, timeout: 120000 }, function(d, status) { - if (status === 200) { - const local = d && d.filename ? d.filename : savepath; - successCb && successCb(local); - } else { - errorCb && errorCb(new Error('download status ' + status)); - } - }); - try { - if (task && typeof task.addEventListener === 'function') { - task.addEventListener('statechanged', function(t, status) { - if (t.state === 3) { - var downloaded = t.downloadedSize || t.downloaded || 0; - var total = t.totalSize || t.total || 0; - var prog = 0; - if (total > 0) prog = Math.min(100, Math.floor(downloaded / total * 100)); - progressCb && progressCb(prog); - } - }); - } - } catch (e) { - // ignore - } - task.start(); - } catch (e) { - errorCb && errorCb(e); - } - }; - - // 确保父目录存在 - try { - const parent = savepath.substring(0, savepath.lastIndexOf('/')); - plus.io.resolveLocalFileSystemURL(parent, function(entry) { - startDownload(); - }, function() { - // 目录不存在,尝试创建(针对 _doc/ 结构) - let rel = parent; - if (rel.indexOf('_doc/') === 0) rel = rel.replace(/^_doc\//, ''); - plus.io.requestFileSystem(plus.io.PRIVATE_DOC, function(fs) { - fs.root.getDirectory(rel, { create: true }, function(entry) { - startDownload(); - }, function(e) { - // 创建失败也尝试下载,可能运行时会自动创建 - startDownload(); - }); - }, function(e) { - startDownload(); - }); - }); - } catch (e) { - startDownload(); - } - } + } }