diff --git a/Demo/OfficeVue2/src/view/index.vue b/Demo/OfficeVue2/src/view/index.vue index a5c9b1eb287170f39787fa577e0fc6f4622575f1..5516546f1ba7732efed152e8efa579f2ab6acf1e 100644 --- a/Demo/OfficeVue2/src/view/index.vue +++ b/Demo/OfficeVue2/src/view/index.vue @@ -114,7 +114,9 @@ components: { }, - data() { + + data() + { return { aid: 0, // 第一个办公网页组件实例ID aid2: 0, // 第二个办公网页组件实例ID @@ -148,11 +150,13 @@ result: [] //日志结果数组 } }, + computed: { DebugLog() { return this.result.join("\n") } }, + mounted(){ //初始化配置 this.init() @@ -162,13 +166,16 @@ _this.pageResize() } }, + destroyed(){ window.onresize = null }, + beforeDestroy() { //关闭所有websocket链接以及浏览器监听 this.close() }, + methods: { init() { //监听浏览器切换标签页面 @@ -185,6 +192,7 @@ //先获取本机Office软件安装信息 this.GetOfficeInfo() }, + windowScroll() { // 滚动条距离页面顶部的距离 let scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop @@ -193,6 +201,7 @@ if (this.aid2 > 0) this.appScroll(2, this.aid2, scrollTop) }, + appScroll(si, id, scrollTop) { if(id) { @@ -214,6 +223,7 @@ this.socket[si].sendObj(msg) } }, + GetAppletPosition() { //获取网页组件位置节点信息 let nScrollTop = 0 @@ -243,6 +253,7 @@ this.left = Math.round(react.left) + nScrollLeft this.top = Math.round(react.top) + nScrollTop }, + handleVisiable(e) { //浏览器页面切换侦听回调函数 if (e.target.visibilityState == 'hidden') { @@ -253,22 +264,26 @@ this.showApp() } }, + hasVerticalScrollbar(){ if(document.documentElement.clientHeight) return document.body.scrollHeight > document.documentElement.clientHeight return document.body.scrollHeight > window.innerHeight }, + hasHorizontalScrollbar(){ if(document.documentElement.clientWidth) return document.body.scrollWidth > document.documentElement.clientWidth return document.body.scrollWidth > window.innerWidth }, + pageResize(){ if(this.aid > 0) this.SendScrollInfo(0,this.aid) if(this.aid2 > 0) this.SendScrollInfo(2,this.aid2) }, + SendScrollInfo(si,id){ let nScrollTop = 0 let nScrollLeft = 0 @@ -314,10 +329,12 @@ console.log(msg) this.socket[si].sendObj(msg) }, + unloadHandler() { //关闭所有websoket链接 this.close() }, + close() { //关闭网页组件实例 this.CloseAllApplet() @@ -336,6 +353,7 @@ //关闭侦听滚动条 window.removeEventListener('unload', this.unloadHandler,false) }, + GetOfficeInfo() { this.isConnService = true @@ -357,6 +375,7 @@ } this.socket[0].sendObj(msg) }, + StartOfficeApplet() { //启动第一个办公网页组件 // Web节点中参数可自行配置,目前支持这些参数: @@ -389,6 +408,7 @@ } this.socket[0].sendObj(msg) }, + openSecondApplet() { if(this.aid) { @@ -437,6 +457,7 @@ this.$message.success('请先启动第一个网页组件') } }, + CloseSecondApplet() { if (this.StartSecond) { this.isDisConnect = true @@ -458,6 +479,7 @@ this.resize(0) } }, + CloseFirstApplet() { if (this.aid > 0) @@ -484,6 +506,7 @@ this.isDisConnect = false } }, + AppletFullEdit() { this.rid++ // 增加请求序号 @@ -497,6 +520,7 @@ else this.socket[1].sendObj(msg) }, + ReLoadFirst() { this.CloseFirstApplet() @@ -525,6 +549,7 @@ } this.socket[0].sendObj(Msg) }, + CloseAllApplet() { /// 先关闭第二个实例,否则socket中保存的连接序号会不正常 @@ -679,17 +704,18 @@ if(!this.ReStartLoad && this.isConnService && !this.isDisConnect) { //连接不上,认为还没有安装办公网页组件 没有安装时提示安装 - this.$confirm('PageHi办公网页组件 尚未安装,是否马上下载?', '提示', { + this.$confirm('PageHi办公网页组件 服务端口连接失败,可能是尚未安装,是否马上下载安装?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { - window.open('http://local.zorrosoft.com/Files/PageHiOfficeIns.exe') // 建议改为zip等格式下载,解压后安装,EXE格式浏览器会提示是否保留 + window.open('http://local.zorrosoft.com/Files/PageHiOfficeIns.exe') // 建议打包为zip等格式下载,解压后安装,EXE文件下载浏览器会提示是否保留 }).catch(() => { }) } } }, + resize(position) { //请求改变网页组件实例显示位置或大小,如不需要改变显示位置,不传X和Y if(this.aid2 > 0 && this.aid2 == this.curID){ @@ -772,6 +798,7 @@ else this.socket[1].sendObj(msg) }, + AddMark() { // 请求插入书签 @@ -786,6 +813,7 @@ else this.socket[1].sendObj(msg) }, + MarkRePlace() { // 请求替换书签内容 @@ -800,6 +828,7 @@ else this.socket[1].sendObj(msg) }, + InsertDJSign() { // 请求电子签章 Type默认0 支持北京点聚签章系统 @@ -814,6 +843,7 @@ else this.socket[1].sendObj(msg) }, + SaveFile() { // 请求保存文档 @@ -828,6 +858,7 @@ else this.socket[1].sendObj(msg) }, + SaveAsFile() { this.rid++ // 增加请求序号 @@ -847,6 +878,7 @@ else this.socket[0].sendObj(msg) }, + BeginSaveAsFile(LocalFilePath) { // 请求开始另存文档 @@ -863,6 +895,7 @@ else this.socket[1].sendObj(msg) }, + ExpportFile() { // 请求导出文档 @@ -883,6 +916,7 @@ else this.socket[0].sendObj(msg) }, + BeginExpportFile(LocalFilePath) { // 请求开始另存文档 @@ -899,6 +933,7 @@ else this.socket[1].sendObj(msg) }, + InsertImg() { // 请求当前光标位置插入图片 先让用户选择图片文件 @@ -919,6 +954,7 @@ else this.socket[0].sendObj(msg) }, + BeginInsertImg(LocalFilePath) { // Save为1时自动保存文档 @@ -937,6 +973,7 @@ else this.socket[1].sendObj(msg) }, + GetFirstImg() { // 提取文档中页码序号Index的图片,先设置图片保存位置 @@ -956,6 +993,7 @@ else this.socket[0].sendObj(msg) }, + BeginGetFirstImg(LocalFilePath) { // 提取文档中序号Index的Base64编码数据,如指定本地保存文件名File,则保存到本地文件中 @@ -987,6 +1025,7 @@ else this.socket[1].sendObj(msg) }, + ConvertFirstPage() { // 转换文档中序号为Index页码内容成图片,先设置转换图片存放位置 @@ -1006,6 +1045,7 @@ else this.socket[0].sendObj(msg) }, + BeginConvertFirstPage(LocalFilePath) { // 转换文档中页码序号Index的Base64编码数据,如指定本地保存文件名File,则保存到本地文件中 @@ -1037,6 +1077,7 @@ else this.socket[1].sendObj(msg) }, + PrintFile() { // 请求打印当前文档 @@ -1054,6 +1095,7 @@ else this.socket[1].sendObj(msg) }, + EnableRevision() { // 请求留痕,就是修订模式 @@ -1071,6 +1113,7 @@ this.socket[1].sendObj(msg) IsRevision = true }, + DisableRevision() { // 关闭留痕,就是关闭修订模式 @@ -1088,6 +1131,7 @@ this.socket[1].sendObj(msg) IsRevision = false }, + ShowRevision() { // 显示留痕信息,就是显示修订内容 @@ -1104,6 +1148,7 @@ else this.socket[1].sendObj(msg) }, + AcceptRevision() { // 接受留痕,就是接受修订内容 @@ -1120,6 +1165,7 @@ else this.socket[1].sendObj(msg) }, + changeOpen() { //重新打开文档 this.rid++ // 增加请求序号 @@ -1135,6 +1181,7 @@ else this.socket[1].sendObj(msg) }, + showApp() { //显示办公网页组件 if (this.aid > 0) { @@ -1163,6 +1210,7 @@ this.socket[2].sendObj(msg) } }, + hideApp(code) { //隐藏办公网页组件 Code设置4是自动隐藏,如需强制隐藏,设置为32 if (this.aid > 0) @@ -1193,6 +1241,7 @@ this.socket[2].sendObj(msg) } }, + CheckUpdate() { //校验中间件版本是不是需要升级,如果额外指定PID参数,代表校验PID代表的网页组件,Wrl_Version功能多 this.rid++ // 增加请求序号 @@ -1205,6 +1254,7 @@ } this.socket[0].sendObj(msg) }, + SendUpdateJson() { // 发送中间件的升级命令,实现自动升级,同时升级微软及金山办公等网页组件 // 注意:Wrl_Update中的请求参数如MD5 TK Size等,请根据文档“中间件制作升级包说明.pdf”中的打包工具生成 diff --git a/Demo/OfficeVue3/src/App.vue b/Demo/OfficeVue3/src/App.vue index 4e4f8167a69850abe4ea0bffbcce9667bd6e69a2..13e5cd5e0122382be34d867e6da9de7183f0b3c5 100644 --- a/Demo/OfficeVue3/src/App.vue +++ b/Demo/OfficeVue3/src/App.vue @@ -144,9 +144,11 @@ let isConnService = false //是否连接的中间件服务 let isDisConnect = false // 是否处于断开连接过程 let socket =[] //websocket对象数组,采用数组需要注意维护索引号,建议改为根据连接的SID参数存到对应的集合,需要用到连接时根据SID提取 let result = reactive([]) //日志结果数组 + const DebugLog = computed(() => { return result.join("\n") }) + onMounted(()=>{ //初始化配置 init() @@ -155,11 +157,13 @@ onMounted(()=>{ pageResize() } }) + onUnmounted(()=>{ //关闭所有websocket链接以及浏览器监听 close() window.onresize = null }) + function init() { //监听浏览器切换标签页面 if(document.addEventListener) @@ -175,6 +179,7 @@ function init() { //先获取本机Office软件安装信息 GetOfficeInfo() } + function windowScroll() { // 滚动条距离页面顶部的距离 let scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop @@ -183,6 +188,7 @@ function windowScroll() { if (aid2 > 0) appScroll(2, aid2, scrollTop) } + function appScroll(si, id, scrollTop) { if(id) { @@ -204,6 +210,7 @@ function appScroll(si, id, scrollTop) { socket[si].sendObj(msg) } } + function GetAppletPosition() { //获取网页组件位置节点信息 let nScrollTop = 0 @@ -236,6 +243,7 @@ function GetAppletPosition() { width.value = Math.round(react.width) height.value = Math.round(react.height) } + function handleVisiable(e) { //浏览器页面切换侦听回调函数 if (e.target.visibilityState == 'hidden') { @@ -246,22 +254,26 @@ function handleVisiable(e) { showApp() } } + function hasVerticalScrollbar(){ if(document.documentElement.clientHeight) return document.body.scrollHeight > document.documentElement.clientHeight return document.body.scrollHeight > window.innerHeight } + function hasHorizontalScrollbar(){ if(document.documentElement.clientWidth) return document.body.scrollWidth > document.documentElement.clientWidth return document.body.scrollWidth > window.innerWidth } + function pageResize(){ if(aid > 0) SendScrollInfo(0,aid) if(aid2 > 0) SendScrollInfo(2,aid2) } + function SendScrollInfo(si,id){ let nScrollTop = 0 let nScrollLeft = 0 @@ -307,10 +319,12 @@ function SendScrollInfo(si,id){ console.log(msg) socket[si].sendObj(msg) } + function unloadHandler() { //关闭所有websoket链接 close() } + function close() { //关闭网页组件实例 CloseAllApplet() @@ -329,6 +343,7 @@ function close() { //关闭侦听滚动条 window.removeEventListener('unload', unloadHandler,false) } + function GetOfficeInfo() { isConnService = true @@ -349,8 +364,8 @@ function GetOfficeInfo() "para": {} } socket[0].sendObj(msg) - } + function StartOfficeApplet() { //启动第一个办公网页组件 // Web节点中参数可自行配置,目前支持这些参数: @@ -384,6 +399,7 @@ function StartOfficeApplet() { console.log(msg) socket[0].sendObj(msg) } + function openSecondApplet() { if(aid) { @@ -432,6 +448,7 @@ function openSecondApplet() { ElMessage('请先启动第一个网页组件') } } + function CloseSecondApplet() { if (StartSecond.value) { isDisConnect = true @@ -453,6 +470,7 @@ function CloseSecondApplet() { resize(0) } } + function CloseFirstApplet() { if (aid > 0) @@ -479,6 +497,7 @@ function CloseFirstApplet() isDisConnect = false } } + function AppletFullEdit() { rid++ // 增加请求序号 @@ -492,6 +511,7 @@ function AppletFullEdit() else socket[1].sendObj(msg) } + function ReLoadFirst() { CloseFirstApplet() @@ -520,6 +540,7 @@ function ReLoadFirst() } socket[0].sendObj(Msg) } + function CloseAllApplet() { /// 先关闭第二个实例,否则socket中保存的连接序号会不正常 @@ -675,18 +696,19 @@ function openWebsocket(port,type) { // 避免IE中点击重复播放及firefox断开连接提示等问题 if(!ReStartLoad && isConnService && !isDisConnect) { - //连接不上,认为还没有安装办公网页组件 没有安装时提示安装 - ElMessageBox.confirm('PageHi办公网页组件 尚未安装,是否马上下载?', '提示', { + // 连接不上,认为还没有安装PageHiOffice 没有安装时提示安装 + ElMessageBox.confirm('PageHiOffice-佐罗软件Office网页组件 服务端口连接失败,可能是尚未安装,是否马上下载安装?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { - window.open('http://local.zorrosoft.com/Files/PageHiOfficeIns.exe') // 建议改为zip等格式下载,解压后安装,EXE格式浏览器会提示是否保留 + window.open('http://local.zorrosoft.com/Files/PageHiOfficeIns.exe') // 建议打包为zip等格式下载,解压后安装,EXE文件下载浏览器会提示是否保留 }).catch(() => { }) } } } + function resize(position) { //请求改变网页组件实例显示位置或大小,如不需要改变显示位置,不传X和Y if(aid2 > 0 && aid2 == curID){ @@ -730,7 +752,7 @@ function resize(position) { "ID": aid, "X": left.value, "Y": top.value, - "Width": width, + "Width": width.value, "Height": height.value } } @@ -751,6 +773,7 @@ function resize(position) { } } } + function InsertContent() { // 请求插入指定的文字或链接 @@ -768,6 +791,7 @@ function InsertContent() else socket[1].sendObj(msg) } + function AddMark() { // 请求插入书签 @@ -782,6 +806,7 @@ function AddMark() else socket[1].sendObj(msg) } + function MarkRePlace() { // 请求替换书签内容 @@ -796,6 +821,7 @@ function MarkRePlace() else socket[1].sendObj(msg) } + function InsertDJSign() { // 请求电子签章 Type默认0 支持北京点聚签章系统 @@ -810,6 +836,7 @@ function InsertDJSign() else socket[1].sendObj(msg) } + function SaveFile() { // 请求保存文档 @@ -824,6 +851,7 @@ function SaveFile() else socket[1].sendObj(msg) } + function SaveAsFile() { rid++ // 增加请求序号 @@ -843,6 +871,7 @@ function SaveAsFile() else socket[0].sendObj(msg) } + function BeginSaveAsFile(LocalFilePath) { // 请求开始另存文档 @@ -859,6 +888,7 @@ function BeginSaveAsFile(LocalFilePath) else socket[1].sendObj(msg) } + function ExpportFile() { // 请求导出文档 @@ -879,6 +909,7 @@ function ExpportFile() else socket[0].sendObj(msg) } + function BeginExpportFile(LocalFilePath) { // 请求开始另存文档 @@ -895,6 +926,7 @@ function BeginExpportFile(LocalFilePath) else socket[1].sendObj(msg) } + function InsertImg() { // 请求当前光标位置插入图片 先让用户选择图片文件 @@ -915,6 +947,7 @@ function InsertImg() else socket[0].sendObj(msg) } + function BeginInsertImg(LocalFilePath) { // Save为1时自动保存文档 @@ -933,6 +966,7 @@ function BeginInsertImg(LocalFilePath) else socket[1].sendObj(msg) } + function GetFirstImg() { // 提取文档中页码序号Index的图片,先设置图片保存位置 @@ -952,6 +986,7 @@ function GetFirstImg() else socket[0].sendObj(msg) } + function BeginGetFirstImg(LocalFilePath) { // 提取文档中序号Index的Base64编码数据,如指定本地保存文件名File,则保存到本地文件中 @@ -983,6 +1018,7 @@ function BeginGetFirstImg(LocalFilePath) else socket[1].sendObj(msg) } + function ConvertFirstPage() { // 转换文档中序号为Index页码内容成图片,先设置转换图片存放位置 @@ -1002,6 +1038,7 @@ function ConvertFirstPage() else socket[0].sendObj(msg) } + function BeginConvertFirstPage(LocalFilePath) { // 转换文档中页码序号Index的Base64编码数据,如指定本地保存文件名File,则保存到本地文件中 @@ -1033,6 +1070,7 @@ function BeginConvertFirstPage(LocalFilePath) else socket[1].sendObj(msg) } + function PrintFile() { // 请求打印当前文档 @@ -1050,6 +1088,7 @@ function PrintFile() else socket[1].sendObj(msg) } + function EnableRevision() { // 请求留痕,就是修订模式 @@ -1067,6 +1106,7 @@ function EnableRevision() socket[1].sendObj(msg) IsRevision.value = true } + function DisableRevision() { // 关闭留痕,就是关闭修订模式 @@ -1084,6 +1124,7 @@ function DisableRevision() socket[1].sendObj(msg) IsRevision.value = false } + function ShowRevision() { // 显示留痕信息,就是显示修订内容 @@ -1100,6 +1141,7 @@ function ShowRevision() else socket[1].sendObj(msg) } + function AcceptRevision() { // 接受留痕,就是接受修订内容 @@ -1116,6 +1158,7 @@ function AcceptRevision() else socket[1].sendObj(msg) } + function changeOpen() { //重新打开文档 rid++ // 增加请求序号 @@ -1131,6 +1174,7 @@ function changeOpen() { else socket[1].sendObj(msg) } + function showApp() { //显示办公网页组件 if (aid > 0) { @@ -1159,6 +1203,7 @@ function showApp() { socket[2].sendObj(msg) } } + function hideApp(code) { //隐藏办公网页组件 Code设置4是自动隐藏,如需强制隐藏,设置为32 if (aid > 0) @@ -1189,6 +1234,7 @@ function hideApp(code) { socket[2].sendObj(msg) } } + function CheckUpdate() { //校验中间件版本是不是需要升级,如果额外指定PID参数,代表校验PID代表的网页组件,Wrl_Version功能多 rid++ // 增加请求序号 @@ -1201,6 +1247,7 @@ function CheckUpdate() { } socket[0].sendObj(msg) } + function SendUpdateJson() { // 发送中间件的升级命令,实现自动升级,同时升级微软及金山办公等网页组件 // 注意:Wrl_Update中的请求参数如MD5 TK Size等,请根据文档“中间件制作升级包说明.pdf”中的打包工具生成,此处举例的升级包是在线公测版的,正式版需要自己制作 @@ -1225,6 +1272,7 @@ function SendUpdateJson() { } socket[0].sendObj(msg) } + + + + + +
+ + +
+ + diff --git a/Demo/VlcVue2/public/vlcwebplayer.html b/Demo/VlcVue2/public/vlcwebplayer.html new file mode 100644 index 0000000000000000000000000000000000000000..636ad109b4e49057c46b1392d4ca503c3c62ef0f --- /dev/null +++ b/Demo/VlcVue2/public/vlcwebplayer.html @@ -0,0 +1,29 @@ + + + + + + 当前页内嵌VLC Web Player小程序体验(PluginOK) + + + + + + +
+
+
+ + diff --git a/Demo/VlcVue2/src/App.vue b/Demo/VlcVue2/src/App.vue new file mode 100644 index 0000000000000000000000000000000000000000..c255329ee2c653e6a7e19e6155986e001c67dafe --- /dev/null +++ b/Demo/VlcVue2/src/App.vue @@ -0,0 +1,25 @@ + + + diff --git a/Demo/VlcVue2/src/common/base.js b/Demo/VlcVue2/src/common/base.js new file mode 100644 index 0000000000000000000000000000000000000000..dbaf917b226a04c0f80df5a77c2646f9aca0cc4b --- /dev/null +++ b/Demo/VlcVue2/src/common/base.js @@ -0,0 +1,28 @@ +import Vue from "vue"; +function GetDefaultConn(port,type) { + /// flag为1代表启用日志输出,系统正式上线后设置0可提高运行速度 + /// sid代表本次连接的会话ID,必须保证唯一 + let Protocol = location.protocol; + if (Protocol.toUpperCase().indexOf('HTTPS') > -1) + { + /// HTTPS网站,需要申请自己主站下其它地方都不会用到的一个子域名来做SSL证书,如域名在阿里云上,请下载Apache类型的证书并提交给客服制作授权 + if(1 == type) + return 'wss://wrl.zorrosoft.com:'+port+'?sid=' + getrandom(5).toLocaleString() + '&flag=1&cid=zorrosoft&tk=8C4560272C8A38C32EF6102CAB6B4D886504F06C63202A316B3FD88381FC5491704DA444156B9F6FDA313843E412F1E1DC414A7899399F14D76688090FC7DCE11DA121CB2B0E819B2B7080DB9CF09D4D66192C5893ABE182DA38DF8A02EFAACB304BF9A242ADEBFAA09FC0304918895DE3B56E30A17AA8D92E3D61C1AC2453E6C1C637C3E260FE9A445EC858BADEB9312A43DD99323EF5D63414B9BC7D3F4004C7E109ADD5A6289ADAB004A2A544D312BB84E467DAC4C9449418F3FCCC9529049DCFD562B77EF2CE429B242C23975E6EA922E0564B6507177187E92F254EC2678A795B5D2EC92F818A7364FB7CA3E553D4F94119F868261E5A0A8E7EBE841CF7'; // 这里注意test.yuanmaster.com替换为自己的子域名 + else + return 'wss://wrl.zorrosoft.com:'+port+'?sid=' + getrandom(5).toLocaleString() + '&flag=1'; // 这里注意wrl.zorrosoft.com替换为自己的子域名 + } + else + { + /// type为1时代表中间件启用了安全校验模式,需要按文档生成tk,具体方法参考SDK包中的文档:中间件安全解决方案.pdf + if(1 == type) + return 'ws://127.0.0.1:'+port+'?sid=' + getrandom(5).toLocaleString() + '?flag=1&cid=zorrosoft&tk=8C4560272C8A38C32EF6102CAB6B4D886504F06C63202A316B3FD88381FC5491704DA444156B9F6FDA313843E412F1E1DC414A7899399F14D76688090FC7DCE11DA121CB2B0E819B2B7080DB9CF09D4D66192C5893ABE182DA38DF8A02EFAACB304BF9A242ADEBFAA09FC0304918895DE3B56E30A17AA8D92E3D61C1AC2453E6C1C637C3E260FE9A445EC858BADEB9312A43DD99323EF5D63414B9BC7D3F4004C7E109ADD5A6289ADAB004A2A544D312BB84E467DAC4C9449418F3FCCC9529049DCFD562B77EF2CE429B242C23975E6EA922E0564B6507177187E92F254EC2678A795B5D2EC92F818A7364FB7CA3E553D4F94119F868261E5A0A8E7EBE841CF7'; + else + return 'ws://127.0.0.1:'+port+'?sid=' + getrandom(5).toLocaleString() + '&flag=1'; + } +} +///Vue.prototype.$rules = validate; +// 获取随机数 +function getrandom(nums) { + return ('000000' + Math.floor(Math.random() * 999999)).slice(-6); +} +export default GetDefaultConn; diff --git a/Demo/VlcVue2/src/common/vssver2.scc b/Demo/VlcVue2/src/common/vssver2.scc new file mode 100644 index 0000000000000000000000000000000000000000..c47dd3b3ec2d2ac686e258c2ece13482b4524bb0 Binary files /dev/null and b/Demo/VlcVue2/src/common/vssver2.scc differ diff --git a/Demo/VlcVue2/src/common/websocket.js b/Demo/VlcVue2/src/common/websocket.js new file mode 100644 index 0000000000000000000000000000000000000000..962b8ed542bf8840aa8da3c912061e042804d808 --- /dev/null +++ b/Demo/VlcVue2/src/common/websocket.js @@ -0,0 +1,116 @@ +export default class websocket { + constructor(url, options) { + this.instance = null + this.token = null + this.isConnected = false + this.url = url + this.options = options || this.defaultOptions() + if (this.options) { + this.reconnectEnabled = options.reconnectEnabled || false + if (this.reconnectEnabled) { + this.reconnectInterval = options.reconnectInterval + } + // Token + //this.token = options?.token || null + } + // These methods should be defined by components + this.onOpen = null + this.onMessage = null + this.onClose = null + this.onError = null + } + + defaultOptions() { + return { + reconnectEnabled: false, + reconnectInterval: 0, + token: null + } + } + + connect() { + const token = this.token || null + let url = this.url + if (token !== null) { + url += `?token=${token}` + } + this.instance = new WebSocket(url) + + // Socket event listeners + // Each event handler also calls the corresponding class method, + // which can be defined by the component + this.instance.onopen = () => { + this.isConnected = true + console.log('链接成功') + if (typeof this.onOpen === 'function') { + this.onOpen() + } + } + this.instance.onmessage = (msg) => { + if (typeof this.onMessage === 'function') { + this.onMessage(msg) + } + } + this.instance.onclose = (evt) => { + this.isConnected = false + if (typeof this.onClose === 'function') { + this.onClose(evt) + } + if (this.reconnectEnabled) { + this.reconnect() + } + } + this.instance.onerror = (evt) => { + if (typeof this.onError === 'function') { + this.onError(evt) + } + } + } + + disconnect() { + try { + this.instance.close() + } catch (e) { + console.warn(`${e} ${this.instance}`) + } + delete this.instance + } + + reconnect() { + try { + this.instance.close() + } catch (e) { + console.warn(`${e} ${this.instance}`) + } + delete this.instance + setTimeout(() => { + this.connect() + }, this.reconnectInterval) + } + + sendObj(data) { + if (this.instance.readyState === this.instance.OPEN) { + //若是ws开启状态 + this.instance.send(JSON.stringify(data)) + } else if (this.instance.readyState === this.instance.CONNECTING) { + // 若是 正在开启状态,则等待1s后重新调用 + setTimeout(() => { + this.sendObj(data); + }, 1000); + } else { + // 若未开启 ,则等待1s后重新调用 + setTimeout(() => { + this.sendObj(data); + }, 1000); + } + + } + + removeListeners() { + // removeListeners + this.onOpen = null + this.onMessage = null + this.onClose = null + this.onError = null + } +} diff --git a/Demo/VlcVue2/src/main.js b/Demo/VlcVue2/src/main.js new file mode 100644 index 0000000000000000000000000000000000000000..2ce390810e0e94b71c3ecbc7401bc5f9e0aa2d7d --- /dev/null +++ b/Demo/VlcVue2/src/main.js @@ -0,0 +1,15 @@ +import Vue from 'vue'; +import App from './App'; +import { + router +} from './router'; +import ElementUI from 'element-ui'; +import 'element-ui/lib/theme-chalk/index.css'; +Vue.use(ElementUI); +let qs = require('qs'); +Vue.prototype.$qs = qs; +new Vue({ + router, + el: '#app', + render: h => h(App) +}); diff --git a/Demo/VlcVue2/src/router.js b/Demo/VlcVue2/src/router.js new file mode 100644 index 0000000000000000000000000000000000000000..aa463b36da2032f9a57e1da503469a921ff63bb2 --- /dev/null +++ b/Demo/VlcVue2/src/router.js @@ -0,0 +1,35 @@ +import Vue from 'vue'; +import Router from 'vue-router'; + +Vue.use(Router); + +const routes = [{ + path: '/', + name: 'index', + component: () => import('./view/index'), + meta: { + title: '首页' + }, + } +]; + +// add route path +routes.forEach(route => { + route.path = route.path || '/' + (route.name || ''); +}); + +const router = new Router({ + routes +}); + +router.beforeEach((to, from, next) => { + const title = to.meta && to.meta.title; + if (title) { + document.title = title; + } + next(); +}); + +export { + router +}; diff --git a/Demo/VlcVue2/src/view/index.vue b/Demo/VlcVue2/src/view/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..b190c553f24ce001d38a67254daac793ef39b8e9 --- /dev/null +++ b/Demo/VlcVue2/src/view/index.vue @@ -0,0 +1,1402 @@ + + + + + diff --git a/Demo/VlcVue2/vue.config.js b/Demo/VlcVue2/vue.config.js new file mode 100644 index 0000000000000000000000000000000000000000..f83f71e7a40e9c9944d042f4acaaf7f0b44bb759 --- /dev/null +++ b/Demo/VlcVue2/vue.config.js @@ -0,0 +1,22 @@ + + +module.exports = { + outputDir: 'dist', + lintOnSave: false, + publicPath: process.env.NODE_ENV === 'production' ? './' : '/', + css: { + + }, + productionSourceMap: false, + // devServer: { + // proxy: { //配置跨域 + // '/api': { + // target:process.env.VUE_APP_API_URL, //这里后台的地址模拟的;应该填写你们真实的后台接口 + // changOrigin: true, //允许跨域 + // pathRewrite: { + // '^/api': '' + // } + // }, + // } + // }, +}; diff --git a/Demo/VlcVue3/index.html b/Demo/VlcVue3/index.html new file mode 100644 index 0000000000000000000000000000000000000000..99a16b5db4d10dd804ac028f51fa121c8061fa85 --- /dev/null +++ b/Demo/VlcVue3/index.html @@ -0,0 +1,13 @@ + + + + + + + + + +
+ + + diff --git a/Demo/VlcVue3/package-lock.json b/Demo/VlcVue3/package-lock.json new file mode 100644 index 0000000000000000000000000000000000000000..b053a80766407bfe351ab5018c60b476509a4e8e --- /dev/null +++ b/Demo/VlcVue3/package-lock.json @@ -0,0 +1,809 @@ +{ + "name": "vue3_cli_default", + "version": "0.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/parser": { + "version": "7.23.6", + "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.23.6.tgz", + "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==" + }, + "@ctrl/tinycolor": { + "version": "3.6.1", + "resolved": "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", + "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==" + }, + "@element-plus/icons-vue": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz", + "integrity": "sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==" + }, + "@esbuild/linux-loong64": { + "version": "0.14.54", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz", + "integrity": "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==", + "dev": true, + "optional": true + }, + "@floating-ui/core": { + "version": "1.5.2", + "resolved": "https://registry.npmmirror.com/@floating-ui/core/-/core-1.5.2.tgz", + "integrity": "sha512-Ii3MrfY/GAIN3OhXNzpCKaLxHQfJF9qvwq/kEJYdqDxeIHa01K8sldugal6TmeeXl+WMvhv9cnVzUTaFFJF09A==", + "requires": { + "@floating-ui/utils": "^0.1.3" + } + }, + "@floating-ui/dom": { + "version": "1.5.3", + "resolved": "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.5.3.tgz", + "integrity": "sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==", + "requires": { + "@floating-ui/core": "^1.4.2", + "@floating-ui/utils": "^0.1.3" + } + }, + "@floating-ui/utils": { + "version": "0.1.6", + "resolved": "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.1.6.tgz", + "integrity": "sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==" + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "@popperjs/core": { + "version": "npm:@sxzz/popperjs-es@2.11.7", + "resolved": "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz", + "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==" + }, + "@types/lodash": { + "version": "4.14.202", + "resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.14.202.tgz", + "integrity": "sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==" + }, + "@types/lodash-es": { + "version": "4.17.12", + "resolved": "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz", + "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", + "requires": { + "@types/lodash": "*" + } + }, + "@types/web-bluetooth": { + "version": "0.0.16", + "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz", + "integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==" + }, + "@vitejs/plugin-vue": { + "version": "1.10.2", + "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-1.10.2.tgz", + "integrity": "sha512-/QJ0Z9qfhAFtKRY+r57ziY4BSbGUTGsPRMpB/Ron3QPwBZM4OZAZHdTa4a8PafCwU5DTatXG8TMDoP8z+oDqJw==", + "dev": true + }, + "@vue/compiler-core": { + "version": "3.4.3", + "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.4.3.tgz", + "integrity": "sha512-u8jzgFg0EDtSrb/hG53Wwh1bAOQFtc1ZCegBpA/glyvTlgHl+tq13o1zvRfLbegYUw/E4mSTGOiCnAJ9SJ+lsg==", + "requires": { + "@babel/parser": "^7.23.6", + "@vue/shared": "3.4.3", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.0.2" + }, + "dependencies": { + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + } + } + }, + "@vue/compiler-dom": { + "version": "3.4.3", + "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.4.3.tgz", + "integrity": "sha512-oGF1E9/htI6JWj/lTJgr6UgxNCtNHbM6xKVreBWeZL9QhRGABRVoWGAzxmtBfSOd+w0Zi5BY0Es/tlJrN6WgEg==", + "requires": { + "@vue/compiler-core": "3.4.3", + "@vue/shared": "3.4.3" + } + }, + "@vue/compiler-sfc": { + "version": "3.4.3", + "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.4.3.tgz", + "integrity": "sha512-NuJqb5is9I4uzv316VRUDYgIlPZCG8D+ARt5P4t5UDShIHKL25J3TGZAUryY/Aiy0DsY7srJnZL5ryB6DD63Zw==", + "requires": { + "@babel/parser": "^7.23.6", + "@vue/compiler-core": "3.4.3", + "@vue/compiler-dom": "3.4.3", + "@vue/compiler-ssr": "3.4.3", + "@vue/shared": "3.4.3", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.5", + "postcss": "^8.4.32", + "source-map-js": "^1.0.2" + }, + "dependencies": { + "nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==" + }, + "postcss": { + "version": "8.4.32", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.32.tgz", + "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", + "requires": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + } + } + }, + "@vue/compiler-ssr": { + "version": "3.4.3", + "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.4.3.tgz", + "integrity": "sha512-wnYQtMBkeFSxgSSQbYGQeXPhQacQiog2c6AlvMldQH6DB+gSXK/0F6DVXAJfEiuBSgBhUc8dwrrG5JQcqwalsA==", + "requires": { + "@vue/compiler-dom": "3.4.3", + "@vue/shared": "3.4.3" + } + }, + "@vue/devtools-api": { + "version": "6.5.1", + "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.5.1.tgz", + "integrity": "sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==" + }, + "@vue/reactivity": { + "version": "3.4.3", + "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.4.3.tgz", + "integrity": "sha512-q5f9HLDU+5aBKizXHAx0w4whkIANs1Muiq9R5YXm0HtorSlflqv9u/ohaMxuuhHWCji4xqpQ1eL04WvmAmGnFg==", + "requires": { + "@vue/shared": "3.4.3" + } + }, + "@vue/runtime-core": { + "version": "3.4.3", + "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.4.3.tgz", + "integrity": "sha512-C1r6QhB1qY7D591RCSFhMULyzL9CuyrGc+3PpB0h7dU4Qqw6GNyo4BNFjHZVvsWncrUlKX3DIKg0Y7rNNr06NQ==", + "requires": { + "@vue/reactivity": "3.4.3", + "@vue/shared": "3.4.3" + } + }, + "@vue/runtime-dom": { + "version": "3.4.3", + "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.4.3.tgz", + "integrity": "sha512-wrsprg7An5Ec+EhPngWdPuzkp0BEUxAKaQtN9dPU/iZctPyD9aaXmVtehPJerdQxQale6gEnhpnfywNw3zOv2A==", + "requires": { + "@vue/runtime-core": "3.4.3", + "@vue/shared": "3.4.3", + "csstype": "^3.1.3" + } + }, + "@vue/server-renderer": { + "version": "3.4.3", + "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.4.3.tgz", + "integrity": "sha512-BUxt8oVGMKKsqSkM1uU3d3Houyfy4WAc2SpSQRebNd+XJGATVkW/rO129jkyL+kpB/2VRKzE63zwf5RtJ3XuZw==", + "requires": { + "@vue/compiler-ssr": "3.4.3", + "@vue/shared": "3.4.3" + } + }, + "@vue/shared": { + "version": "3.4.3", + "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.4.3.tgz", + "integrity": "sha512-rIwlkkP1n4uKrRzivAKPZIEkHiuwY5mmhMJ2nZKCBLz8lTUlE73rQh4n1OnnMurXt1vcUNyH4ZPfdh8QweTjpQ==" + }, + "@vueuse/core": { + "version": "9.13.0", + "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-9.13.0.tgz", + "integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==", + "requires": { + "@types/web-bluetooth": "^0.0.16", + "@vueuse/metadata": "9.13.0", + "@vueuse/shared": "9.13.0", + "vue-demi": "*" + } + }, + "@vueuse/metadata": { + "version": "9.13.0", + "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.13.0.tgz", + "integrity": "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==" + }, + "@vueuse/shared": { + "version": "9.13.0", + "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.13.0.tgz", + "integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==", + "requires": { + "vue-demi": "*" + } + }, + "async-validator": { + "version": "4.2.5", + "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz", + "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==" + }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "colorette": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz", + "integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==" + }, + "csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "dayjs": { + "version": "1.11.10", + "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" + }, + "element-plus": { + "version": "2.4.4", + "resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.4.4.tgz", + "integrity": "sha512-TlKubXJgxwhER0dw+8ULn9hr9kZjraV4R6Q/eidwWUwCKxwXYPBGmMKsZ/85tlxlhMYbcLZd/YZh6G3QkHX4fg==", + "requires": { + "@ctrl/tinycolor": "^3.4.1", + "@element-plus/icons-vue": "^2.3.1", + "@floating-ui/dom": "^1.0.1", + "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7", + "@types/lodash": "^4.14.182", + "@types/lodash-es": "^4.17.6", + "@vueuse/core": "^9.1.0", + "async-validator": "^4.2.5", + "dayjs": "^1.11.3", + "escape-html": "^1.0.3", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "lodash-unified": "^1.0.2", + "memoize-one": "^6.0.0", + "normalize-wheel-es": "^1.2.0" + } + }, + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" + }, + "esbuild": { + "version": "0.14.54", + "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.14.54.tgz", + "integrity": "sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==", + "dev": true, + "requires": { + "@esbuild/linux-loong64": "0.14.54", + "esbuild-android-64": "0.14.54", + "esbuild-android-arm64": "0.14.54", + "esbuild-darwin-64": "0.14.54", + "esbuild-darwin-arm64": "0.14.54", + "esbuild-freebsd-64": "0.14.54", + "esbuild-freebsd-arm64": "0.14.54", + "esbuild-linux-32": "0.14.54", + "esbuild-linux-64": "0.14.54", + "esbuild-linux-arm": "0.14.54", + "esbuild-linux-arm64": "0.14.54", + "esbuild-linux-mips64le": "0.14.54", + "esbuild-linux-ppc64le": "0.14.54", + "esbuild-linux-riscv64": "0.14.54", + "esbuild-linux-s390x": "0.14.54", + "esbuild-netbsd-64": "0.14.54", + "esbuild-openbsd-64": "0.14.54", + "esbuild-sunos-64": "0.14.54", + "esbuild-windows-32": "0.14.54", + "esbuild-windows-64": "0.14.54", + "esbuild-windows-arm64": "0.14.54" + } + }, + "esbuild-android-64": { + "version": "0.14.54", + "resolved": "https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz", + "integrity": "sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==", + "dev": true, + "optional": true + }, + "esbuild-android-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz", + "integrity": "sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==", + "dev": true, + "optional": true + }, + "esbuild-darwin-64": { + "version": "0.14.54", + "resolved": "https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz", + "integrity": "sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==", + "dev": true, + "optional": true + }, + "esbuild-darwin-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz", + "integrity": "sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-64": { + "version": "0.14.54", + "resolved": "https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz", + "integrity": "sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz", + "integrity": "sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==", + "dev": true, + "optional": true + }, + "esbuild-linux-32": { + "version": "0.14.54", + "resolved": "https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz", + "integrity": "sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==", + "dev": true, + "optional": true + }, + "esbuild-linux-64": { + "version": "0.14.54", + "resolved": "https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz", + "integrity": "sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.14.54", + "resolved": "https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz", + "integrity": "sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz", + "integrity": "sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==", + "dev": true, + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.14.54", + "resolved": "https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz", + "integrity": "sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==", + "dev": true, + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.14.54", + "resolved": "https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz", + "integrity": "sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-riscv64": { + "version": "0.14.54", + "resolved": "https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz", + "integrity": "sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==", + "dev": true, + "optional": true + }, + "esbuild-linux-s390x": { + "version": "0.14.54", + "resolved": "https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz", + "integrity": "sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==", + "dev": true, + "optional": true + }, + "esbuild-netbsd-64": { + "version": "0.14.54", + "resolved": "https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz", + "integrity": "sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==", + "dev": true, + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.14.54", + "resolved": "https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz", + "integrity": "sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==", + "dev": true, + "optional": true + }, + "esbuild-sunos-64": { + "version": "0.14.54", + "resolved": "https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz", + "integrity": "sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==", + "dev": true, + "optional": true + }, + "esbuild-windows-32": { + "version": "0.14.54", + "resolved": "https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz", + "integrity": "sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==", + "dev": true, + "optional": true + }, + "esbuild-windows-64": { + "version": "0.14.54", + "resolved": "https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz", + "integrity": "sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==", + "dev": true, + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz", + "integrity": "sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==", + "dev": true, + "optional": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmmirror.com/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "get-intrinsic": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "requires": { + "function-bind": "^1.1.2" + }, + "dependencies": { + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true + } + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmmirror.com/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true + }, + "is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "requires": { + "hasown": "^2.0.0" + } + }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmmirror.com/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmmirror.com/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "lodash-unified": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/lodash-unified/-/lodash-unified-1.0.3.tgz", + "integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==" + }, + "magic-string": { + "version": "0.30.5", + "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.5.tgz", + "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.15" + } + }, + "memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" + }, + "nanoid": { + "version": "3.1.25", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz", + "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==" + }, + "normalize-wheel-es": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz", + "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "postcss": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.6.tgz", + "integrity": "sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A==", + "requires": { + "colorette": "^1.2.2", + "nanoid": "^3.1.23", + "source-map-js": "^0.6.2" + } + }, + "postcss-px-to-viewport": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/postcss-px-to-viewport/-/postcss-px-to-viewport-1.1.1.tgz", + "integrity": "sha512-2x9oGnBms+e0cYtBJOZdlwrFg/mLR4P1g2IFu7jYKvnqnH/HLhoKyareW2Q/x4sg0BgklHlP1qeWo2oCyPm8FQ==", + "requires": { + "object-assign": ">=4.0.1", + "postcss": ">=5.0.2" + } + }, + "resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "requires": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "rollup": { + "version": "2.77.3", + "resolved": "https://registry.npmmirror.com/rollup/-/rollup-2.77.3.tgz", + "integrity": "sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "source-map-js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==" + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "util": { + "version": "0.12.5", + "resolved": "https://registry.npmmirror.com/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "vite": { + "version": "2.9.16", + "resolved": "https://registry.npmmirror.com/vite/-/vite-2.9.16.tgz", + "integrity": "sha512-X+6q8KPyeuBvTQV8AVSnKDvXoBMnTx8zxh54sOwmmuOdxkjMmEJXH2UEchA+vTMps1xw9vL64uwJOWryULg7nA==", + "dev": true, + "requires": { + "esbuild": "^0.14.27", + "fsevents": "~2.3.2", + "postcss": "^8.4.13", + "resolve": "^1.22.0", + "rollup": ">=2.59.0 <2.78.0" + }, + "dependencies": { + "nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true + }, + "postcss": { + "version": "8.4.32", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.32.tgz", + "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", + "dev": true, + "requires": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true + } + } + }, + "vue": { + "version": "3.4.3", + "resolved": "https://registry.npmmirror.com/vue/-/vue-3.4.3.tgz", + "integrity": "sha512-GjN+culMAGv/mUbkIv8zMKItno8npcj5gWlXkSxf1SPTQf8eJ4A+YfHIvQFyL1IfuJcMl3soA7SmN1fRxbf/wA==", + "requires": { + "@vue/compiler-dom": "3.4.3", + "@vue/compiler-sfc": "3.4.3", + "@vue/runtime-dom": "3.4.3", + "@vue/server-renderer": "3.4.3", + "@vue/shared": "3.4.3" + } + }, + "vue-demi": { + "version": "0.14.6", + "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.6.tgz", + "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==" + }, + "vue-router": { + "version": "4.2.5", + "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.2.5.tgz", + "integrity": "sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw==", + "requires": { + "@vue/devtools-api": "^6.5.0" + } + }, + "which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmmirror.com/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + } + } + } +} diff --git a/Demo/VlcVue3/package.json b/Demo/VlcVue3/package.json new file mode 100644 index 0000000000000000000000000000000000000000..7b993a394bd017b101d289ea3b1e5f0b037344b1 --- /dev/null +++ b/Demo/VlcVue3/package.json @@ -0,0 +1,22 @@ +{ + "name": "vue3_cli_default", + "version": "0.0.0", + "scripts": { + "dev": "vite", + "build": "vite build", + "serve": "vite preview" + }, + "dependencies": { + "element-plus": "^2.4.4", + "postcss-px-to-viewport": "^1.1.1", + "vue": "^3.4.3", + "vue-router": "^4.2.5" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^1.10.2", + "@vue/compiler-sfc": "^3.4.3", + "events": "^3.3.0", + "util": "^0.12.4", + "vite": "^2.9.16" + } +} diff --git a/Demo/VlcVue3/public/favicon.ico b/Demo/VlcVue3/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..df36fcfb72584e00488330b560ebcf34a41c64c2 Binary files /dev/null and b/Demo/VlcVue3/public/favicon.ico differ diff --git a/Demo/VlcVue3/src/App.vue b/Demo/VlcVue3/src/App.vue new file mode 100644 index 0000000000000000000000000000000000000000..3c1c4a61cf08361838d6c003d4f3ee2dda23e3f2 --- /dev/null +++ b/Demo/VlcVue3/src/App.vue @@ -0,0 +1,1414 @@ + + + + \ No newline at end of file diff --git a/Demo/VlcVue3/src/common/base.js b/Demo/VlcVue3/src/common/base.js new file mode 100644 index 0000000000000000000000000000000000000000..417c82f31234707c46f17b565794ca5420fb9e94 --- /dev/null +++ b/Demo/VlcVue3/src/common/base.js @@ -0,0 +1,27 @@ +function GetDefaultConn(port,type) { + /// flag为1代表启用日志输出,系统正式上线后设置0可提高运行速度 + /// sid代表本次连接的会话ID,必须保证唯一 + let Protocol = location.protocol; + if (Protocol.toUpperCase().indexOf('HTTPS') > -1) + { + /// HTTPS网站,需要申请自己主站下其它地方都不会用到的一个子域名来做SSL证书,如域名在阿里云上,请下载Apache类型的证书并提交给客服制作授权 + if(1 == type) + return 'wss://wrl.zorrosoft.com:'+port+'?sid=' + getrandom(5).toLocaleString() + '&flag=1&cid=zorrosoft&tk=8C4560272C8A38C32EF6102CAB6B4D886504F06C63202A316B3FD88381FC5491704DA444156B9F6FDA313843E412F1E1DC414A7899399F14D76688090FC7DCE11DA121CB2B0E819B2B7080DB9CF09D4D66192C5893ABE182DA38DF8A02EFAACB304BF9A242ADEBFAA09FC0304918895DE3B56E30A17AA8D92E3D61C1AC2453E6C1C637C3E260FE9A445EC858BADEB9312A43DD99323EF5D63414B9BC7D3F4004C7E109ADD5A6289ADAB004A2A544D312BB84E467DAC4C9449418F3FCCC9529049DCFD562B77EF2CE429B242C23975E6EA922E0564B6507177187E92F254EC2678A795B5D2EC92F818A7364FB7CA3E553D4F94119F868261E5A0A8E7EBE841CF7'; // 这里注意test.yuanmaster.com替换为自己的子域名 + else + return 'wss://wrl.zorrosoft.com:'+port+'?sid=' + getrandom(5).toLocaleString() + '&flag=1'; // 这里注意wrl.zorrosoft.com替换为自己的子域名 + } + else + { + /// type为1时代表中间件启用了安全校验模式,需要按文档生成tk,具体方法参考SDK包中的文档:中间件安全解决方案.pdf + if(1 == type) + return 'ws://127.0.0.1:'+port+'?sid=' + getrandom(5).toLocaleString() + '?flag=1&cid=zorrosoft&tk=8C4560272C8A38C32EF6102CAB6B4D886504F06C63202A316B3FD88381FC5491704DA444156B9F6FDA313843E412F1E1DC414A7899399F14D76688090FC7DCE11DA121CB2B0E819B2B7080DB9CF09D4D66192C5893ABE182DA38DF8A02EFAACB304BF9A242ADEBFAA09FC0304918895DE3B56E30A17AA8D92E3D61C1AC2453E6C1C637C3E260FE9A445EC858BADEB9312A43DD99323EF5D63414B9BC7D3F4004C7E109ADD5A6289ADAB004A2A544D312BB84E467DAC4C9449418F3FCCC9529049DCFD562B77EF2CE429B242C23975E6EA922E0564B6507177187E92F254EC2678A795B5D2EC92F818A7364FB7CA3E553D4F94119F868261E5A0A8E7EBE841CF7'; + else + return 'ws://127.0.0.1:'+port+'?sid=' + getrandom(5).toLocaleString() + '&flag=1'; + } +} + +// 获取随机数 +function getrandom(nums) { + return ('000000' + Math.floor(Math.random() * 999999)).slice(-6); +} +export default GetDefaultConn; diff --git a/Demo/VlcVue3/src/common/websocket.js b/Demo/VlcVue3/src/common/websocket.js new file mode 100644 index 0000000000000000000000000000000000000000..21925ed97c8ac5597a2eecdb713d4b6e940c01e8 --- /dev/null +++ b/Demo/VlcVue3/src/common/websocket.js @@ -0,0 +1,117 @@ +export default class websocket { + constructor(url, options) { + this.instance = null + this.token = null + this.isConnected = false + this.url = url + this.options = options || this.defaultOptions() + if (this.options) { + this.reconnectEnabled = options.reconnectEnabled || false + if (this.reconnectEnabled) { + this.reconnectInterval = options.reconnectInterval + } + // Token + //this.token = options?.token || null + } + // These methods should be defined by components + this.onOpen = null + this.onMessage = null + this.onClose = null + this.onError = null + } + + defaultOptions() { + return { + reconnectEnabled: false, + reconnectInterval: 0, + token: null + } + } + + connect() { + const token = this.token || null + let url = this.url + if (token !== null) { + url += `?token=${token}` + } + this.instance = new WebSocket(url) + + // Socket event listeners + // Each event handler also calls the corresponding class method, + // which can be defined by the component + this.instance.onopen = () => { + this.isConnected = true + if (typeof this.onOpen === 'function') { + this.onOpen() + } + } + this.instance.onmessage = (msg) => { + if (typeof this.onMessage === 'function') { + this.onMessage(msg) + } + } + this.instance.onclose = (evt) => { + this.isConnected = false + if (typeof this.onClose === 'function') { + this.onClose(evt) + } + if (this.reconnectEnabled) { + this.reconnect() + } + } + this.instance.onerror = (evt) => { + if (typeof this.onError === 'function') { + this.onError(evt) + } + } + } + + disconnect() { + try { + this.instance.close() + } catch (e) { + console.warn(`${e} ${this.instance}`) + } + delete this.instance + } + + reconnect() { + try { + this.instance.close() + } catch (e) { + console.warn(`${e} ${this.instance}`) + } + delete this.instance + setTimeout(() => { + this.connect() + }, this.reconnectInterval) + } + + sendObj(data) { + + if (this.instance.readyState === this.instance.OPEN) { + //若是ws开启状态 + + this.instance.send(JSON.stringify(data)) + } else if (this.instance.readyState === this.instance.CONNECTING) { + // 若是 正在开启状态,则等待1s后重新调用 + setTimeout(() => { + this.sendObj(data); + }, 1000); + } else { + // 若未开启 ,则等待1s后重新调用 + setTimeout(() => { + this.sendObj(data); + }, 1000); + } + + } + + removeListeners() { + // removeListeners + this.onOpen = null + this.onMessage = null + this.onClose = null + this.onError = null + } +} diff --git a/Demo/VlcVue3/src/main.js b/Demo/VlcVue3/src/main.js new file mode 100644 index 0000000000000000000000000000000000000000..ff8c3323ab89e36069ef7e9c542a45cd1a0876db --- /dev/null +++ b/Demo/VlcVue3/src/main.js @@ -0,0 +1,7 @@ +import {createApp} from 'vue' +import ElementPlus from 'element-plus' +import 'element-plus/dist/index.css' +import App from './App.vue' +const app = createApp(App) +app.use(ElementPlus) +app.mount('#app') \ No newline at end of file diff --git a/Demo/VlcVue3/vite.config.js b/Demo/VlcVue3/vite.config.js new file mode 100644 index 0000000000000000000000000000000000000000..3cf80ed6833d0c7653e57286ff6cba33479edb20 --- /dev/null +++ b/Demo/VlcVue3/vite.config.js @@ -0,0 +1,13 @@ +import { + defineConfig +} from 'vite' +import vue from '@vitejs/plugin-vue' + +export default defineConfig({ + plugins: [vue()], + base: './', + css: {}, + define: { + 'process.env': {}, + } +}) \ No newline at end of file diff --git "a/Demo/Vue\346\211\223\345\214\205\350\257\264\346\230\216.txt" "b/Demo/Vue\346\211\223\345\214\205\350\257\264\346\230\216.txt" new file mode 100644 index 0000000000000000000000000000000000000000..d2f8d09adb1eb6ad1c46b314dcc4e2ad5821925f --- /dev/null +++ "b/Demo/Vue\346\211\223\345\214\205\350\257\264\346\230\216.txt" @@ -0,0 +1,5 @@ +1.򿪿̨ cmd +2.cdVUEԴ빤ļĿ¼OfficeVue2OfficeVue3 npm i װ +3.VUE3ĿVUE2ʹNODEJS ڵ17汾ʱִУset NODE_OPTIONS=--openssl-legacy-provider https://blog.csdn.net/zjjxxh/article/details/127173968 +4. npm run build +5.ص npm run serve npm run dev vue3