rootfs_enc1v2_hi3520d_20240131
This commit is contained in:
		
							parent
							
								
									9f42b6e939
								
							
						
					
					
						commit
						573117aac4
					
				
										
											Binary file not shown.
										
									
								
							| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
rtmp {
 | 
					rtmp {
 | 
				
			||||||
  server {
 | 
					  server {
 | 
				
			||||||
    listen 1935;
 | 
					    listen 1935 so_keepalive=2s:3:1;
 | 
				
			||||||
    chunk_size 10240;
 | 
					    chunk_size 10240;
 | 
				
			||||||
    wait_video on;
 | 
					    wait_video on;
 | 
				
			||||||
    application live{
 | 
					    application live{
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,17 @@
 | 
				
			||||||
[
 | 
					[
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "version": "3.0.0 build 20240131",
 | 
				
			||||||
 | 
					    "logs": [
 | 
				
			||||||
 | 
					      "标准版:修正部分页面翻译问题",
 | 
				
			||||||
 | 
					      "标准版:修正NDI注册不成功问题",
 | 
				
			||||||
 | 
					      "标准版:新增标题关键字检索功能",
 | 
				
			||||||
 | 
					      "布局管理器新增布局中视频通道绑定音源",
 | 
				
			||||||
 | 
					      "修复NTFS格式硬盘不能自动挂载问题",
 | 
				
			||||||
 | 
					      "优化部分HTTP接口逻辑",
 | 
				
			||||||
 | 
					      "优化文件录制功能",
 | 
				
			||||||
 | 
					      "ENC1V3、ENCSHV2、ENC4S机型内核优化UDP稳定性"
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    "version": "2.9.0 build 20231229",
 | 
					    "version": "2.9.0 build 20231229",
 | 
				
			||||||
    "logs": [
 | 
					    "logs": [
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    "app": "2.0.0 build 20220512_869",
 | 
					    "app": "2.0.0 build 20220512_869",
 | 
				
			||||||
    "sdk": "2.0.0 build 20220518_20716",
 | 
					    "sdk": "2.0.0 build 20220518_20716",
 | 
				
			||||||
    "sys": "2.9.0 build 20231229"
 | 
					    "sys": "3.0.0 build 20240131"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -16,3 +16,7 @@ fi
 | 
				
			||||||
if [ -f /link/bin/Monitor ];then
 | 
					if [ -f /link/bin/Monitor ];then
 | 
				
			||||||
/link/shell/monitor.sh &
 | 
					/link/shell/monitor.sh &
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [ -f /link/bin/TFT ];then
 | 
				
			||||||
 | 
					/link/shell/tft.sh &
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,6 @@
 | 
				
			||||||
#!/bin/sh
 | 
					#!/bin/sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					. /etc/profile
 | 
				
			||||||
. /link/shell/util/func.sh
 | 
					. /link/shell/util/func.sh
 | 
				
			||||||
jopen /link/config/misc/disk.json
 | 
					jopen /link/config/misc/disk.json
 | 
				
			||||||
enable=`jget enable`
 | 
					enable=`jget enable`
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,3 +1,3 @@
 | 
				
			||||||
cp /link/config/default/* /link/config/
 | 
					 | 
				
			||||||
rm -rf /link/config/auto/*
 | 
					rm -rf /link/config/auto/*
 | 
				
			||||||
 | 
					cp -r /link/config/default/* /link/config/
 | 
				
			||||||
reboot
 | 
					reboot
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,11 @@
 | 
				
			||||||
if [ ! -f "/link/config/mac" ] || [ ! -s /link/config/mac ] || [ -z "$(cat /link/config/mac)" ]; then
 | 
					if [ ! -f "/link/config/mac" ] || [ ! -s /link/config/mac ] || [ -z "$(cat /link/config/mac)" ]; then
 | 
				
			||||||
/link/shell/makeMac.sh > /link/config/mac
 | 
					/link/shell/makeMac.sh > /link/config/mac
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ethaddr=`fw_printenv ethaddr | grep ethaddr | awk -F '=' '{print $2}' | sed 's/\://g'`
 | 
				
			||||||
 | 
					if echo "$ethaddr" | grep -q "34C8D62" ; then
 | 
				
			||||||
 | 
					  echo $ethaddr > /link/config/mac
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/sbin/ifconfig eth0 down
 | 
					/sbin/ifconfig eth0 down
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,5 @@
 | 
				
			||||||
 | 
					while [ true ]
 | 
				
			||||||
 | 
					do
 | 
				
			||||||
 | 
					    /link/bin/TFT
 | 
				
			||||||
 | 
					    sleep 2
 | 
				
			||||||
 | 
					done  
 | 
				
			||||||
| 
						 | 
					@ -46,13 +46,23 @@ class Layout extends Verify
 | 
				
			||||||
                $result['srcA'] = $item['srcA'];
 | 
					                $result['srcA'] = $item['srcA'];
 | 
				
			||||||
                foreach ($defLays as $defLay)
 | 
					                foreach ($defLays as $defLay)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    $layList = [];
 | 
					                    $layList = [];$layList1=[];
 | 
				
			||||||
                    $layouts = $defLay['layouts'];
 | 
					                    $layouts = $defLay['layouts'];
 | 
				
			||||||
                    foreach ($layouts as $layout)
 | 
					                    foreach ($layouts as $layout)
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        $pos = $layout['pos'];
 | 
					                        $pos = $layout['pos'];
 | 
				
			||||||
                        //按顺序生成新对象,方便后面对比
 | 
					                        //按顺序生成新对象,方便后面对比
 | 
				
			||||||
                        $lay = array(
 | 
					                        $lay = array(
 | 
				
			||||||
 | 
					                            'a' => $pos['a'],
 | 
				
			||||||
 | 
					                            'x' => $pos['x'],
 | 
				
			||||||
 | 
					                            'y' => $pos ['y'],
 | 
				
			||||||
 | 
					                            'w' => $pos['w'],
 | 
				
			||||||
 | 
					                            'h' => $pos['h'],
 | 
				
			||||||
 | 
					                            'index' => $pos['index']
 | 
				
			||||||
 | 
					                        );
 | 
				
			||||||
 | 
					                        array_push($layList,$lay);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        $lay1 = array(
 | 
				
			||||||
                            'a' => $pos['a'],
 | 
					                            'a' => $pos['a'],
 | 
				
			||||||
                            'h' => $pos['h'],
 | 
					                            'h' => $pos['h'],
 | 
				
			||||||
                            'index' => $pos['index'],
 | 
					                            'index' => $pos['index'],
 | 
				
			||||||
| 
						 | 
					@ -60,9 +70,9 @@ class Layout extends Verify
 | 
				
			||||||
                            'x' => $pos['x'],
 | 
					                            'x' => $pos['x'],
 | 
				
			||||||
                            'y' => $pos ['y']
 | 
					                            'y' => $pos ['y']
 | 
				
			||||||
                        );
 | 
					                        );
 | 
				
			||||||
                        array_push($layList,$lay);
 | 
					                        array_push($layList1,$lay1);
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    if(json_encode($item['layout']) == json_encode($layList))
 | 
					                    if(json_encode($item['layout']) == json_encode($layList) || json_encode($item['layout']) == json_encode($layList1))
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        $result['curLayId'] = $defLay['layId'];
 | 
					                        $result['curLayId'] = $defLay['layId'];
 | 
				
			||||||
                        $result['curLayName'] = $defLay['layName'];
 | 
					                        $result['curLayName'] = $defLay['layName'];
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -51,15 +51,13 @@ class Overlay extends Verify
 | 
				
			||||||
            $conf = $this->load_conf('/link/config/config.json');
 | 
					            $conf = $this->load_conf('/link/config/config.json');
 | 
				
			||||||
            $mark = file_exists("/link/config/auto/overlay.json");
 | 
					            $mark = file_exists("/link/config/auto/overlay.json");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var_dump($mark);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if($mark)
 | 
					            if($mark)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                $overlayConf = $this->load_conf('/link/config/auto/overlay.json');
 | 
					                $overlayConf = [];
 | 
				
			||||||
                for($i=0;$i<count($params);$i++)
 | 
					                for($i=0;$i<count($params);$i++)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    $param = $params[$i];
 | 
					                    $param = $params[$i];
 | 
				
			||||||
                    $overlayConf[$param['id']] = $param['overlay'];
 | 
					                    $overlayConf[] = $param['overlay'];
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                $client = new RpcClient();
 | 
					                $client = new RpcClient();
 | 
				
			||||||
                $client->update_overlay($overlayConf);
 | 
					                $client->update_overlay($overlayConf);
 | 
				
			||||||
| 
						 | 
					@ -71,6 +69,7 @@ class Overlay extends Verify
 | 
				
			||||||
                    $param = $params[$i];
 | 
					                    $param = $params[$i];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    $id = $param['id'];
 | 
					                    $id = $param['id'];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    $chn=null;$index=-1;
 | 
					                    $chn=null;$index=-1;
 | 
				
			||||||
                    for($j=0;$j<count($conf);$j++)
 | 
					                    for($j=0;$j<count($conf);$j++)
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -55,15 +55,13 @@ function copyUserSettings(&$historyConfig, &$currentConfig,&$level=0) {
 | 
				
			||||||
$configFiles = getConfFiles('/tmp/history_config');
 | 
					$configFiles = getConfFiles('/tmp/history_config');
 | 
				
			||||||
foreach ($configFiles as $historyFile) {
 | 
					foreach ($configFiles as $historyFile) {
 | 
				
			||||||
    $currentFile = str_replace("/tmp/history_config/","/link/config/",$historyFile);
 | 
					    $currentFile = str_replace("/tmp/history_config/","/link/config/",$historyFile);
 | 
				
			||||||
    if(md5_file($historyFile) == md5_file($currentFile))
 | 
					    if(!strpos($currentFile, ".json") || md5_file($historyFile) == md5_file($currentFile))
 | 
				
			||||||
        continue;
 | 
					        continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if(!strpos($currentFile, ".json") || strpos($currentFile, "version.json") ||
 | 
					    $ignoreFiles = ['version.json', 'net.json', 'net2.json', 'netEx.json', 'netManager.json', 'verLogs.json'];
 | 
				
			||||||
        strpos($currentFile, "net.json") || strpos($currentFile, "net2.json") || strpos($currentFile, "netEx.json"))
 | 
					    if (in_array(basename($currentFile), $ignoreFiles))
 | 
				
			||||||
        continue;
 | 
					        continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    echo $currentFile."\n";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    $historyCtx = json_decode(file_get_contents($historyFile));
 | 
					    $historyCtx = json_decode(file_get_contents($historyFile));
 | 
				
			||||||
    $currentCtx = json_decode(file_get_contents($currentFile));
 | 
					    $currentCtx = json_decode(file_get_contents($currentFile));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -479,40 +479,32 @@ include("head.php");
 | 
				
			||||||
		$("#SysLayout").change(function() {
 | 
							$("#SysLayout").change(function() {
 | 
				
			||||||
			curLayIndex = $("#SysLayout").val();
 | 
								curLayIndex = $("#SysLayout").val();
 | 
				
			||||||
			var defLay = defLays[curLayIndex];
 | 
								var defLay = defLays[curLayIndex];
 | 
				
			||||||
			var temp = [];
 | 
								var tempV = [];
 | 
				
			||||||
			var type = false;
 | 
					            var tempA = [];
 | 
				
			||||||
 | 
								var typeV = false;
 | 
				
			||||||
 | 
					            var typeA = false;
 | 
				
			||||||
			for (var i = 0; i < defLay.layouts.length; i++) {
 | 
								for (var i = 0; i < defLay.layouts.length; i++) {
 | 
				
			||||||
				var lay = defLay.layouts[i];
 | 
									var lay = defLay.layouts[i];
 | 
				
			||||||
				if (lay.id < 0) {
 | 
									if (lay.id < 0) {
 | 
				
			||||||
					temp.push("-1");
 | 
					                    tempV.push("-1");
 | 
				
			||||||
				} else {
 | 
									} else {
 | 
				
			||||||
					type = true;
 | 
					                    typeV = true;
 | 
				
			||||||
					temp.push(lay.id + "");
 | 
					                    tempV.push(lay.id + "");
 | 
				
			||||||
 | 
					                    if(lay.ado) {
 | 
				
			||||||
 | 
					                        tempA.push(lay.id + "");
 | 
				
			||||||
 | 
					                        typeA = true;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			var mixSrcV = mixCfg["srcV"];
 | 
								}
 | 
				
			||||||
 | 
								if (typeV)
 | 
				
			||||||
			//如果自定义布局中存在指定输入源
 | 
									mixCfg["srcV"] = tempV;
 | 
				
			||||||
			if (type)
 | 
					            if (typeA)
 | 
				
			||||||
				mixCfg["srcV"] = temp;
 | 
					                mixCfg["srcA"] = tempA;
 | 
				
			||||||
			// for(var i=0;i<mixSrcV.length;i++){
 | 
					 | 
				
			||||||
			//     if( i >= temp.length)
 | 
					 | 
				
			||||||
			//         break;
 | 
					 | 
				
			||||||
			//     if(mixSrcV[i] == "-1")
 | 
					 | 
				
			||||||
			//         continue;
 | 
					 | 
				
			||||||
			//     var mark = false;
 | 
					 | 
				
			||||||
			//     for(var j=0;j<temp.length;j++){
 | 
					 | 
				
			||||||
			//         if(temp[j] == mixSrcV[i])
 | 
					 | 
				
			||||||
			//             mark = true;
 | 
					 | 
				
			||||||
			//     }
 | 
					 | 
				
			||||||
			//     if(!mark)
 | 
					 | 
				
			||||||
			//         temp[i] = mixSrcV[i];
 | 
					 | 
				
			||||||
			// }
 | 
					 | 
				
			||||||
			// mixCfg["srcV"] = temp;
 | 
					 | 
				
			||||||
			setLayout();
 | 
								setLayout();
 | 
				
			||||||
			update();
 | 
								update();
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
		setChannel($('#channels option:first').val());
 | 
							setChannel($('#channels option:first').val());
 | 
				
			||||||
 | 
					        update();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	function setLayout() {
 | 
						function setLayout() {
 | 
				
			||||||
| 
						 | 
					@ -521,16 +513,17 @@ include("head.php");
 | 
				
			||||||
		$("#layout").html('');
 | 
							$("#layout").html('');
 | 
				
			||||||
		for (var i = 0; i < layout.length; i++) {
 | 
							for (var i = 0; i < layout.length; i++) {
 | 
				
			||||||
			var lay = $("#templeLay").clone();
 | 
								var lay = $("#templeLay").clone();
 | 
				
			||||||
			var optlist = lay.find("#laySrc").find("option").toArray();
 | 
								// var optlist = lay.find("#laySrc").find("option").toArray();
 | 
				
			||||||
			for (var k = optlist.length - 1; k >= 0; k--) {
 | 
								// for (var k = optlist.length - 1; k >= 0; k--) {
 | 
				
			||||||
				var opt = optlist[k];
 | 
								// 	var opt = optlist[k];
 | 
				
			||||||
				var id = $(opt).val() + "";
 | 
								// 	var id = $(opt).val() + "";
 | 
				
			||||||
				for (var n = 0; n < mixV.length; n++) {
 | 
								// 	for (var n = 0; n < mixV.length; n++) {
 | 
				
			||||||
					if (id == mixV[n] && id != mixV[i] && id != "-1") {
 | 
								// 		if (id == mixV[n] && id != mixV[i] && id != "-1") {
 | 
				
			||||||
						lay.find("#laySrc")[0].options.remove(k);
 | 
					            //             console.log(id);
 | 
				
			||||||
					}
 | 
								// 			lay.find("#laySrc")[0].options.remove(k);
 | 
				
			||||||
				}
 | 
								// 		}
 | 
				
			||||||
			}
 | 
								// 	}
 | 
				
			||||||
 | 
								// }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			lay.css("display", "block");
 | 
								lay.css("display", "block");
 | 
				
			||||||
			lay.css("left", (layout[i].x * 100) + "%");
 | 
								lay.css("left", (layout[i].x * 100) + "%");
 | 
				
			||||||
| 
						 | 
					@ -576,18 +569,11 @@ include("head.php");
 | 
				
			||||||
			layList.push(layObj);
 | 
								layList.push(layObj);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		var str = JSON.stringify(layList);
 | 
							var str = JSON.stringify(layList);
 | 
				
			||||||
		curLayIndex = 6;
 | 
					 | 
				
			||||||
		for (var i = 0; i < SysLayout.length; i++) {
 | 
							for (var i = 0; i < SysLayout.length; i++) {
 | 
				
			||||||
			if (JSON.stringify(SysLayout[i]) == str) {
 | 
								if (JSON.stringify(SysLayout[i]) == str) {
 | 
				
			||||||
				$("#SysLayout").val(i);
 | 
									$("#SysLayout").val(i);
 | 
				
			||||||
				curLayIndex = i;
 | 
									curLayIndex = i;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if (curLayIndex == 6) {
 | 
					 | 
				
			||||||
			$("#SysLayout").val(6);
 | 
					 | 
				
			||||||
			SysLayout[6] = mixCfg["layout"];
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		setLayout();
 | 
							setLayout();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -698,22 +684,6 @@ include("head.php");
 | 
				
			||||||
		init();
 | 
							init();
 | 
				
			||||||
	});
 | 
						});
 | 
				
			||||||
	$.ajaxSettings.async = true;
 | 
						$.ajaxSettings.async = true;
 | 
				
			||||||
 | 
					 | 
				
			||||||
	setInterval(function() {
 | 
					 | 
				
			||||||
		$.getJSON("config/defLays.json?rnd=" + Math.random(), function(result) {
 | 
					 | 
				
			||||||
			defLays = result;
 | 
					 | 
				
			||||||
			SysLayout = [];
 | 
					 | 
				
			||||||
			for (var i = 0; i < defLays.length; i++) {
 | 
					 | 
				
			||||||
				var defLay = defLays[i];
 | 
					 | 
				
			||||||
				var las = defLay.layouts;
 | 
					 | 
				
			||||||
				var layout = [];
 | 
					 | 
				
			||||||
				for (var j = 0; j < las.length; j++) {
 | 
					 | 
				
			||||||
					layout.push(las[j].pos);
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
				SysLayout.push(layout);
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		});
 | 
					 | 
				
			||||||
	}, 1000)
 | 
					 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
<?php
 | 
					<?php
 | 
				
			||||||
include("foot.php");
 | 
					include("foot.php");
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,26 +1,26 @@
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  "files": {
 | 
					  "files": {
 | 
				
			||||||
    "main.css": "./mixer/static/css/main.375af961.chunk.css",
 | 
					    "main.css": "./mixer/static/css/main.1be3e506.chunk.css",
 | 
				
			||||||
    "main.js": "./mixer/static/js/main.5f5e49d2.chunk.js",
 | 
					    "main.js": "./mixer/static/js/main.6a7a8d48.chunk.js",
 | 
				
			||||||
    "main.js.map": "./mixer/static/js/main.5f5e49d2.chunk.js.map",
 | 
					    "main.js.map": "./mixer/static/js/main.6a7a8d48.chunk.js.map",
 | 
				
			||||||
    "runtime-main.js": "./mixer/static/js/runtime-main.c45edf70.js",
 | 
					    "runtime-main.js": "./mixer/static/js/runtime-main.c45edf70.js",
 | 
				
			||||||
    "runtime-main.js.map": "./mixer/static/js/runtime-main.c45edf70.js.map",
 | 
					    "runtime-main.js.map": "./mixer/static/js/runtime-main.c45edf70.js.map",
 | 
				
			||||||
    "static/css/2.0b7c8b97.chunk.css": "./mixer/static/css/2.0b7c8b97.chunk.css",
 | 
					    "static/css/2.0b7c8b97.chunk.css": "./mixer/static/css/2.0b7c8b97.chunk.css",
 | 
				
			||||||
    "static/js/2.f2aad125.chunk.js": "./mixer/static/js/2.f2aad125.chunk.js",
 | 
					    "static/js/2.edf0bfe8.chunk.js": "./mixer/static/js/2.edf0bfe8.chunk.js",
 | 
				
			||||||
    "static/js/2.f2aad125.chunk.js.map": "./mixer/static/js/2.f2aad125.chunk.js.map",
 | 
					    "static/js/2.edf0bfe8.chunk.js.map": "./mixer/static/js/2.edf0bfe8.chunk.js.map",
 | 
				
			||||||
    "index.html": "./mixer/index.html",
 | 
					    "index.html": "./mixer/index.html",
 | 
				
			||||||
    "precache-manifest.1a06c0869ff880086e3a9be9dac86c16.js": "./mixer/precache-manifest.1a06c0869ff880086e3a9be9dac86c16.js",
 | 
					    "precache-manifest.abb42691e68409f9e64fbfb6933199f3.js": "./mixer/precache-manifest.abb42691e68409f9e64fbfb6933199f3.js",
 | 
				
			||||||
    "service-worker.js": "./mixer/service-worker.js",
 | 
					    "service-worker.js": "./mixer/service-worker.js",
 | 
				
			||||||
    "static/css/2.0b7c8b97.chunk.css.map": "./mixer/static/css/2.0b7c8b97.chunk.css.map",
 | 
					    "static/css/2.0b7c8b97.chunk.css.map": "./mixer/static/css/2.0b7c8b97.chunk.css.map",
 | 
				
			||||||
    "static/css/main.375af961.chunk.css.map": "./mixer/static/css/main.375af961.chunk.css.map",
 | 
					    "static/css/main.1be3e506.chunk.css.map": "./mixer/static/css/main.1be3e506.chunk.css.map",
 | 
				
			||||||
    "static/js/2.f2aad125.chunk.js.LICENSE.txt": "./mixer/static/js/2.f2aad125.chunk.js.LICENSE.txt",
 | 
					    "static/js/2.edf0bfe8.chunk.js.LICENSE.txt": "./mixer/static/js/2.edf0bfe8.chunk.js.LICENSE.txt",
 | 
				
			||||||
    "static/js/main.5f5e49d2.chunk.js.LICENSE.txt": "./mixer/static/js/main.5f5e49d2.chunk.js.LICENSE.txt"
 | 
					    "static/js/main.6a7a8d48.chunk.js.LICENSE.txt": "./mixer/static/js/main.6a7a8d48.chunk.js.LICENSE.txt"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "entrypoints": [
 | 
					  "entrypoints": [
 | 
				
			||||||
    "static/js/runtime-main.c45edf70.js",
 | 
					    "static/js/runtime-main.c45edf70.js",
 | 
				
			||||||
    "static/css/2.0b7c8b97.chunk.css",
 | 
					    "static/css/2.0b7c8b97.chunk.css",
 | 
				
			||||||
    "static/js/2.f2aad125.chunk.js",
 | 
					    "static/js/2.edf0bfe8.chunk.js",
 | 
				
			||||||
    "static/css/main.375af961.chunk.css",
 | 
					    "static/css/main.1be3e506.chunk.css",
 | 
				
			||||||
    "static/js/main.5f5e49d2.chunk.js"
 | 
					    "static/js/main.6a7a8d48.chunk.js"
 | 
				
			||||||
  ]
 | 
					  ]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -1 +1 @@
 | 
				
			||||||
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="./mixer/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="./mixer/logo192.png"/><link rel="manifest" href="./mixer/manifest.json"/><title>React App</title><link href="./mixer/static/css/2.0b7c8b97.chunk.css" rel="stylesheet"><link href="./mixer/static/css/main.375af961.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script>!function(e){function r(r){for(var n,i,l=r[0],f=r[1],a=r[2],c=0,s=[];c<l.length;c++)i=l[c],Object.prototype.hasOwnProperty.call(o,i)&&o[i]&&s.push(o[i][0]),o[i]=0;for(n in f)Object.prototype.hasOwnProperty.call(f,n)&&(e[n]=f[n]);for(p&&p(r);s.length;)s.shift()();return u.push.apply(u,a||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,l=1;l<t.length;l++){var f=t[l];0!==o[f]&&(n=!1)}n&&(u.splice(r--,1),e=i(i.s=t[0]))}return e}var n={},o={1:0},u=[];function i(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,i),t.l=!0,t.exports}i.m=e,i.c=n,i.d=function(e,r,t){i.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,r){if(1&r&&(e=i(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(i.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)i.d(t,n,function(r){return e[r]}.bind(null,n));return t},i.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(r,"a",r),r},i.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},i.p="./mixer/";var l=this.webpackJsonpmixer=this.webpackJsonpmixer||[],f=l.push.bind(l);l.push=r,l=l.slice();for(var a=0;a<l.length;a++)r(l[a]);var p=f;t()}([])</script><script src="./mixer/static/js/2.f2aad125.chunk.js"></script><script src="./mixer/static/js/main.5f5e49d2.chunk.js"></script></body></html>
 | 
					<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="./mixer/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="./mixer/logo192.png"/><link rel="manifest" href="./mixer/manifest.json"/><title>React App</title><link href="./mixer/static/css/2.0b7c8b97.chunk.css" rel="stylesheet"><link href="./mixer/static/css/main.1be3e506.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script>!function(e){function r(r){for(var n,i,l=r[0],f=r[1],a=r[2],c=0,s=[];c<l.length;c++)i=l[c],Object.prototype.hasOwnProperty.call(o,i)&&o[i]&&s.push(o[i][0]),o[i]=0;for(n in f)Object.prototype.hasOwnProperty.call(f,n)&&(e[n]=f[n]);for(p&&p(r);s.length;)s.shift()();return u.push.apply(u,a||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,l=1;l<t.length;l++){var f=t[l];0!==o[f]&&(n=!1)}n&&(u.splice(r--,1),e=i(i.s=t[0]))}return e}var n={},o={1:0},u=[];function i(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,i),t.l=!0,t.exports}i.m=e,i.c=n,i.d=function(e,r,t){i.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,r){if(1&r&&(e=i(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(i.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)i.d(t,n,function(r){return e[r]}.bind(null,n));return t},i.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(r,"a",r),r},i.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},i.p="./mixer/";var l=this.webpackJsonpmixer=this.webpackJsonpmixer||[],f=l.push.bind(l);l.push=r,l=l.slice();for(var a=0;a<l.length;a++)r(l[a]);var p=f;t()}([])</script><script src="./mixer/static/js/2.edf0bfe8.chunk.js"></script><script src="./mixer/static/js/main.6a7a8d48.chunk.js"></script></body></html>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,34 @@
 | 
				
			||||||
 | 
					self.__precacheManifest = (self.__precacheManifest || []).concat([
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "revision": "c478e196f0e356e1ecb0908ac7d5cfbb",
 | 
				
			||||||
 | 
					    "url": "./mixer/index.html"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "revision": "58d7b02ebe439df1498d",
 | 
				
			||||||
 | 
					    "url": "./mixer/static/css/2.0b7c8b97.chunk.css"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "revision": "5d634dc6ddb3fad90f05",
 | 
				
			||||||
 | 
					    "url": "./mixer/static/css/main.1be3e506.chunk.css"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "revision": "58d7b02ebe439df1498d",
 | 
				
			||||||
 | 
					    "url": "./mixer/static/js/2.edf0bfe8.chunk.js"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "revision": "4390933dc3b3a92d4f565fd4f47c3cd7",
 | 
				
			||||||
 | 
					    "url": "./mixer/static/js/2.edf0bfe8.chunk.js.LICENSE.txt"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "revision": "5d634dc6ddb3fad90f05",
 | 
				
			||||||
 | 
					    "url": "./mixer/static/js/main.6a7a8d48.chunk.js"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "revision": "5c84e2504d745b1010aeb6ce2aad7554",
 | 
				
			||||||
 | 
					    "url": "./mixer/static/js/main.6a7a8d48.chunk.js.LICENSE.txt"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "revision": "96af6c8d9af51963848a",
 | 
				
			||||||
 | 
					    "url": "./mixer/static/js/runtime-main.c45edf70.js"
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					]);
 | 
				
			||||||
| 
						 | 
					@ -14,7 +14,7 @@
 | 
				
			||||||
importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js");
 | 
					importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
importScripts(
 | 
					importScripts(
 | 
				
			||||||
  "./mixer/precache-manifest.1a06c0869ff880086e3a9be9dac86c16.js"
 | 
					  "./mixer/precache-manifest.abb42691e68409f9e64fbfb6933199f3.js"
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
self.addEventListener('message', (event) => {
 | 
					self.addEventListener('message', (event) => {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| 
						 | 
					@ -0,0 +1,80 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					object-assign
 | 
				
			||||||
 | 
					(c) Sindre Sorhus
 | 
				
			||||||
 | 
					@license MIT
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					  Copyright (c) 2018 Jed Watson.
 | 
				
			||||||
 | 
					  Licensed under the MIT License (MIT), see
 | 
				
			||||||
 | 
					  http://jedwatson.github.io/classnames
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 * cookie
 | 
				
			||||||
 | 
					 * Copyright(c) 2012-2014 Roman Shtylman
 | 
				
			||||||
 | 
					 * Copyright(c) 2015 Douglas Christopher Wilson
 | 
				
			||||||
 | 
					 * MIT Licensed
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*! *****************************************************************************
 | 
				
			||||||
 | 
					Copyright (c) Microsoft Corporation. All rights reserved.
 | 
				
			||||||
 | 
					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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 | 
				
			||||||
 | 
					KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
 | 
				
			||||||
 | 
					WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
 | 
				
			||||||
 | 
					MERCHANTABLITY OR NON-INFRINGEMENT.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See the Apache Version 2.0 License for specific language governing permissions
 | 
				
			||||||
 | 
					and limitations under the License.
 | 
				
			||||||
 | 
					***************************************************************************** */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @license React v0.19.1
 | 
				
			||||||
 | 
					 * scheduler.production.min.js
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Copyright (c) Facebook, Inc. and its affiliates.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This source code is licensed under the MIT license found in the
 | 
				
			||||||
 | 
					 * LICENSE file in the root directory of this source tree.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @license React v16.13.1
 | 
				
			||||||
 | 
					 * react-is.production.min.js
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Copyright (c) Facebook, Inc. and its affiliates.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This source code is licensed under the MIT license found in the
 | 
				
			||||||
 | 
					 * LICENSE file in the root directory of this source tree.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @license React v16.14.0
 | 
				
			||||||
 | 
					 * react-dom.production.min.js
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Copyright (c) Facebook, Inc. and its affiliates.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This source code is licensed under the MIT license found in the
 | 
				
			||||||
 | 
					 * LICENSE file in the root directory of this source tree.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @license React v16.14.0
 | 
				
			||||||
 | 
					 * react.production.min.js
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Copyright (c) Facebook, Inc. and its affiliates.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This source code is licensed under the MIT license found in the
 | 
				
			||||||
 | 
					 * LICENSE file in the root directory of this source tree.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @license React v17.0.2
 | 
				
			||||||
 | 
					 * react-is.production.min.js
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Copyright (c) Facebook, Inc. and its affiliates.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This source code is licensed under the MIT license found in the
 | 
				
			||||||
 | 
					 * LICENSE file in the root directory of this source tree.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| 
						 | 
					@ -0,0 +1,26 @@
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 * Sizzle CSS Selector Engine v2.3.4
 | 
				
			||||||
 | 
					 * https://sizzlejs.com/
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Copyright JS Foundation and other contributors
 | 
				
			||||||
 | 
					 * Released under the MIT license
 | 
				
			||||||
 | 
					 * https://js.foundation/
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Date: 2019-04-08
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 * jQuery JavaScript Library v3.4.1
 | 
				
			||||||
 | 
					 * https://jquery.com/
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Includes Sizzle.js
 | 
				
			||||||
 | 
					 * https://sizzlejs.com/
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Copyright JS Foundation and other contributors
 | 
				
			||||||
 | 
					 * Released under the MIT license
 | 
				
			||||||
 | 
					 * https://jquery.org/license
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Date: 2019-05-01T21:04Z
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */
 | 
				
			||||||
| 
						 | 
					@ -776,7 +776,7 @@ input[type="password"]::-ms-reveal{
 | 
				
			||||||
    width: 100%;
 | 
					    width: 100%;
 | 
				
			||||||
    height: 100%;
 | 
					    height: 100%;
 | 
				
			||||||
    background: black;
 | 
					    background: black;
 | 
				
			||||||
    z-index: 999;
 | 
					    z-index: 1;
 | 
				
			||||||
    font-size: 60px;
 | 
					    font-size: 60px;
 | 
				
			||||||
    color: white;
 | 
					    color: white;
 | 
				
			||||||
    transition: .3s color, .3s border;
 | 
					    transition: .3s color, .3s border;
 | 
				
			||||||
| 
						 | 
					@ -871,6 +871,24 @@ input[type="password"]::-ms-reveal{
 | 
				
			||||||
    left: 9px;
 | 
					    left: 9px;
 | 
				
			||||||
    border-radius: 50%;
 | 
					    border-radius: 50%;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					.menu .simplebar-content {
 | 
				
			||||||
 | 
					    height: 100% !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.menu .search-item-icon {
 | 
				
			||||||
 | 
					    font-size: 22px;
 | 
				
			||||||
 | 
					    line-height: 1;
 | 
				
			||||||
 | 
					    width: 24px;
 | 
				
			||||||
 | 
					    height: 24px;
 | 
				
			||||||
 | 
					    display: flex;
 | 
				
			||||||
 | 
					    align-items: center;
 | 
				
			||||||
 | 
					    justify-content: center;
 | 
				
			||||||
 | 
					    border-radius: 50%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.menu .search-input:focus {
 | 
				
			||||||
 | 
					    box-shadow: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.login .card {
 | 
					.login .card {
 | 
				
			||||||
    border-radius: 1rem;
 | 
					    border-radius: 1rem;
 | 
				
			||||||
| 
						 | 
					@ -889,7 +907,7 @@ input[type="password"]::-ms-reveal{
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.login .input-group input {
 | 
					.login .input-group input {
 | 
				
			||||||
    line-height: 2.5rem;
 | 
					    line-height: 2.39rem;
 | 
				
			||||||
    font-size: 1.2rem;
 | 
					    font-size: 1.2rem;
 | 
				
			||||||
    border-left-width: 2px !important;
 | 
					    border-left-width: 2px !important;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -992,7 +1010,8 @@ input[type="password"]::-ms-reveal{
 | 
				
			||||||
    border-radius: 4px;
 | 
					    border-radius: 4px;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.dashboard .hdmi, .sdi{
 | 
					.dashboard .hdmi,
 | 
				
			||||||
 | 
					.dashboard .sdi{
 | 
				
			||||||
    width: 68px;
 | 
					    width: 68px;
 | 
				
			||||||
    display: inline-block;
 | 
					    display: inline-block;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -1000,20 +1019,18 @@ input[type="password"]::-ms-reveal{
 | 
				
			||||||
.dashboard .hdmi .icon {
 | 
					.dashboard .hdmi .icon {
 | 
				
			||||||
    display: inline-block;
 | 
					    display: inline-block;
 | 
				
			||||||
    background-image:url(../../assets/img/input.png);
 | 
					    background-image:url(../../assets/img/input.png);
 | 
				
			||||||
    /*margin:0 auto;*/
 | 
					 | 
				
			||||||
    width:68px;
 | 
					    width:68px;
 | 
				
			||||||
    height:26px;
 | 
					    height:30px;
 | 
				
			||||||
    /*margin-top: 14px;*/
 | 
					    margin-top: 13px !important;
 | 
				
			||||||
    /*margin-bottom: 14px;*/
 | 
					    margin-bottom: 14px !important;
 | 
				
			||||||
    background-position:0px -54px;
 | 
					    background-position:0px -50px;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.dashboard .sdi .icon {
 | 
					.dashboard .sdi .icon {
 | 
				
			||||||
    display: inline-block;
 | 
					    display: inline-block;
 | 
				
			||||||
    background-image:url(../../assets/img/input.png);
 | 
					    background-image:url(../../assets/img/input.png);
 | 
				
			||||||
    /*margin:0 auto;*/
 | 
					 | 
				
			||||||
    width:45px;
 | 
					    width:45px;
 | 
				
			||||||
    height:54px;
 | 
					    height:50px;
 | 
				
			||||||
    background-position:0px 0px;
 | 
					    background-position:0px 0px;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -424,6 +424,31 @@
 | 
				
			||||||
    border-color: var(--bs-border-color-translucent);
 | 
					    border-color: var(--bs-border-color-translucent);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[data-bs-theme=dark] .menu .search-input {
 | 
				
			||||||
 | 
					    border-color: var(--bs-border-color-translucent) !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[data-bs-theme=dark] .menu .search-input::placeholder {
 | 
				
			||||||
 | 
					    color: var(--bs-body-color-semi) !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[data-bs-theme=dark] .menu .search-bar-icon {
 | 
				
			||||||
 | 
					    color: #666 !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[data-bs-theme=dark] .menu .search-item-icon {
 | 
				
			||||||
 | 
					    background-color: var(--bs-default-bg-color);
 | 
				
			||||||
 | 
					    border: 1px solid var(--bs-border-color-translucent);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[data-bs-theme=dark] .menu .search-item-option {
 | 
				
			||||||
 | 
					    border-color: var(--bs-border-color-translucent) !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[data-bs-theme=dark] .menu .search-tip-text {
 | 
				
			||||||
 | 
					    color: #888 !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[data-bs-theme=dark] .login  {
 | 
					[data-bs-theme=dark] .login  {
 | 
				
			||||||
    /*background-color: #202122;*/
 | 
					    /*background-color: #202122;*/
 | 
				
			||||||
    background-color: var(--bs-default-body-bg-color);
 | 
					    background-color: var(--bs-default-body-bg-color);
 | 
				
			||||||
| 
						 | 
					@ -513,7 +538,8 @@
 | 
				
			||||||
    color: var(--bs-body-color-semi);
 | 
					    color: var(--bs-body-color-semi);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[data-bs-theme=dark] .dashboard .hdmi, .sdi{
 | 
					[data-bs-theme=dark] .dashboard .hdmi,
 | 
				
			||||||
 | 
					[data-bs-theme=dark] .dashboard .sdi{
 | 
				
			||||||
    filter: brightness(70%);
 | 
					    filter: brightness(70%);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -350,6 +350,11 @@
 | 
				
			||||||
    background-color: #fff;
 | 
					    background-color: #fff;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[data-bs-theme=default] .menu .search-item-icon {
 | 
				
			||||||
 | 
					    background-color: #ffffff;
 | 
				
			||||||
 | 
					    border: 1px solid #d8d8d8;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[data-bs-theme=default] .login  {
 | 
					[data-bs-theme=default] .login  {
 | 
				
			||||||
    background-color: var(--bs-body-bg-color);
 | 
					    background-color: var(--bs-body-bg-color);
 | 
				
			||||||
    width: 100%;
 | 
					    width: 100%;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,6 @@
 | 
				
			||||||
import vue from "./vue.build.js";
 | 
					import vue from "./vue.build.js";
 | 
				
			||||||
const {onMounted, ref, toRefs, watchEffect} = vue;
 | 
					import mutationObserver from "../plugins/polyfill/mutationobserver.esm.js";
 | 
				
			||||||
 | 
					const { ref,onMounted } = vue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const wifiFlagComponent = {
 | 
					export const wifiFlagComponent = {
 | 
				
			||||||
    template: `<div>
 | 
					    template: `<div>
 | 
				
			||||||
| 
						 | 
					@ -183,3 +184,49 @@ export const antenanFlagComponent = {
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const emptyBoxFlagComponent = {
 | 
				
			||||||
 | 
					    template: `<div class="text-center">
 | 
				
			||||||
 | 
					                    <svg v-if="defTheme === 'default'" width="100" height="64" viewBox="0 0 64 41" xmlns="http://www.w3.org/2000/svg">
 | 
				
			||||||
 | 
					                        <g transform="translate(0 1)" fill="none" fill-rule="evenodd">
 | 
				
			||||||
 | 
					                            <ellipse style="fill: #f5f5f5" cx="32" cy="33" rx="32" ry="7"></ellipse>
 | 
				
			||||||
 | 
					                            <g style="stroke: #d9d9d9;" fill-rule="nonzero">
 | 
				
			||||||
 | 
					                                <path d="M55 12.76L44.854 1.258C44.367.474 43.656 0 42.907 0H21.093c-.749 0-1.46.474-1.947 1.257L9 12.761V22h46v-9.24z"></path>
 | 
				
			||||||
 | 
					                                <path style="fill: #fafafa" d="M41.613 15.931c0-1.605.994-2.93 2.227-2.931H55v18.137C55 33.26 53.68 35 52.05 35h-40.1C10.32 35 9 33.259 9 31.137V13h11.16c1.233 0 2.227 1.323 2.227 2.928v.022c0 1.605 1.005 2.901 2.237 2.901h14.752c1.232 0 2.237-1.308 2.237-2.913v-.007z"></path>
 | 
				
			||||||
 | 
					                            </g>
 | 
				
			||||||
 | 
					                        </g>
 | 
				
			||||||
 | 
					                    </svg>
 | 
				
			||||||
 | 
					                    <svg v-if="defTheme === 'dark'" width="100" height="64" viewBox="0 0 64 41" xmlns="http://www.w3.org/2000/svg">
 | 
				
			||||||
 | 
					                        <g transform="translate(0 1)" fill="none" fill-rule="evenodd">
 | 
				
			||||||
 | 
					                            <ellipse style="fill: #444" cx="32" cy="33" rx="32" ry="7"></ellipse>
 | 
				
			||||||
 | 
					                            <g style="stroke: #555;" fill-rule="nonzero">
 | 
				
			||||||
 | 
					                                <path d="M55 12.76L44.854 1.258C44.367.474 43.656 0 42.907 0H21.093c-.749 0-1.46.474-1.947 1.257L9 12.761V22h46v-9.24z"></path>
 | 
				
			||||||
 | 
					                                <path style="fill: #555" d="M41.613 15.931c0-1.605.994-2.93 2.227-2.931H55v18.137C55 33.26 53.68 35 52.05 35h-40.1C10.32 35 9 33.259 9 31.137V13h11.16c1.233 0 2.227 1.323 2.227 2.928v.022c0 1.605 1.005 2.901 2.237 2.901h14.752c1.232 0 2.237-1.308 2.237-2.913v-.007z"></path>
 | 
				
			||||||
 | 
					                            </g>
 | 
				
			||||||
 | 
					                        </g>
 | 
				
			||||||
 | 
					                    </svg>
 | 
				
			||||||
 | 
					               </div>`,
 | 
				
			||||||
 | 
					    setup(props,context) {
 | 
				
			||||||
 | 
					        const defTheme = ref("");
 | 
				
			||||||
 | 
					        onMounted(()=>{
 | 
				
			||||||
 | 
					            const update = () => {
 | 
				
			||||||
 | 
					                const theme = html.getAttribute('data-bs-theme');
 | 
				
			||||||
 | 
					                defTheme.value = theme;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            const html = document.querySelector('html');
 | 
				
			||||||
 | 
					            update();
 | 
				
			||||||
 | 
					            const observer = new mutationObserver(() => {
 | 
				
			||||||
 | 
					                update();
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					            const config = {
 | 
				
			||||||
 | 
					                attributes: true,
 | 
				
			||||||
 | 
					                attributeFilter: ["data-bs-theme"],
 | 
				
			||||||
 | 
					                subtree: false
 | 
				
			||||||
 | 
					            };
 | 
				
			||||||
 | 
					            observer.observe(html, config);
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return { defTheme }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -1,15 +1,14 @@
 | 
				
			||||||
 | 
					 | 
				
			||||||
import vue from "./vue.build.js";
 | 
					import vue from "./vue.build.js";
 | 
				
			||||||
import $ from '../plugins/jquery/jquery.esm.js';
 | 
					import $ from '../plugins/jquery/jquery.esm.js';
 | 
				
			||||||
import '../plugins/switch/js/bootstrap-switch.min.js';
 | 
					import '../plugins/switch/js/bootstrap-switch.min.js';
 | 
				
			||||||
import "../plugins/timepicker/js/bootstrap-timepicker.js";
 | 
					import "../plugins/timepicker/js/bootstrap-timepicker.js";
 | 
				
			||||||
import * as noUiSlider from "../plugins/nouislider/js/nouislider.esm.js";
 | 
					import * as noUiSlider from "../plugins/nouislider/js/nouislider.esm.js";
 | 
				
			||||||
import mutationObserver from '../plugins/polyfill/mutationobserver.esm.js'
 | 
					import mutationObserver from '../plugins/polyfill/mutationobserver.esm.js'
 | 
				
			||||||
import { func, confirm, rebootConfirm, alertMsg, axios_post, isEmpty,formatTime } from './lp.utils.js'
 | 
					import { md5 } from "../plugins/md5/js.md5.esm.js";
 | 
				
			||||||
 | 
					import { func, confirm, rebootConfirm, alertMsg, axios_post, isEmpty, formatTime, clearReactiveArray, getUrlParam } from './lp.utils.js'
 | 
				
			||||||
import { useDiskConf } from "./vue.hooks.js";
 | 
					import { useDiskConf } from "./vue.hooks.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const {ref,reactive,toRefs,watch,watchEffect,
 | 
					const { ref, reactive, toRefs, watch, watchEffect, computed, onMounted, nextTick, defineAsyncComponent } = vue;
 | 
				
			||||||
    computed,onMounted,nextTick,defineAsyncComponent} = vue;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const ignoreCustomElementPlugin = {
 | 
					export const ignoreCustomElementPlugin = {
 | 
				
			||||||
    install: (app) => {
 | 
					    install: (app) => {
 | 
				
			||||||
| 
						 | 
					@ -17,35 +16,66 @@ export const ignoreCustomElementPlugin =  {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const highlightTextPlugin = {
 | 
					export const filterKeywordPlugin = {
 | 
				
			||||||
    install(app, options) {
 | 
					    install(app) {
 | 
				
			||||||
        //const urlParam = options.urlParam || 'highlight';
 | 
					        const filter = getUrlParam("filter");
 | 
				
			||||||
        //const urlValue = new URLSearchParams(window.location.search).get(urlParam);
 | 
					        if(!filter)
 | 
				
			||||||
        const urlValue = "预"
 | 
					            return;
 | 
				
			||||||
        if (urlValue) {
 | 
					        const param = {"url":location.pathname, "filter":filter}
 | 
				
			||||||
            nextTick(()=>{
 | 
					        func("/root/getFilterKeywords",param).then(result => {
 | 
				
			||||||
 | 
					            const keyword = result.data;
 | 
				
			||||||
 | 
					            if (keyword) {
 | 
				
			||||||
 | 
					                // nextTick(() => {
 | 
				
			||||||
 | 
					                    setTimeout(()=>{
 | 
				
			||||||
                        const elements = document.querySelectorAll('main cn, main en');
 | 
					                        const elements = document.querySelectorAll('main cn, main en');
 | 
				
			||||||
                        elements.forEach((el) => {
 | 
					                        elements.forEach((el) => {
 | 
				
			||||||
                            const textContent = el.textContent;
 | 
					                            const textContent = el.textContent;
 | 
				
			||||||
                    const startIndex = textContent.indexOf(urlValue);
 | 
					                            const startIndex = textContent.indexOf(keyword);
 | 
				
			||||||
                            if (startIndex !== -1) {
 | 
					                            if (startIndex !== -1) {
 | 
				
			||||||
                        const endIndex = startIndex + urlValue.length;
 | 
					                                let currentElement = el.parentNode;
 | 
				
			||||||
 | 
					                                while (currentElement) {
 | 
				
			||||||
 | 
					                                    currentElement = currentElement.parentNode;
 | 
				
			||||||
 | 
					                                    if(currentElement) {
 | 
				
			||||||
 | 
					                                        let classList = currentElement.classList;
 | 
				
			||||||
 | 
					                                        if(classList && classList.contains("tab-pane")) {
 | 
				
			||||||
 | 
					                                            let tabId = currentElement.id;
 | 
				
			||||||
 | 
					                                            let navLinks = document.querySelectorAll(".nav.nav-tabs > .nav-item > .nav-link");
 | 
				
			||||||
 | 
					                                            navLinks.forEach(item => {
 | 
				
			||||||
 | 
					                                                if (item.getAttribute('href') === '#'+tabId) {
 | 
				
			||||||
 | 
					                                                    if(item.classList)
 | 
				
			||||||
 | 
					                                                        item.classList.add("active");
 | 
				
			||||||
 | 
					                                                } else {
 | 
				
			||||||
 | 
					                                                    if(item.classList)
 | 
				
			||||||
 | 
					                                                        item.classList.remove("active");
 | 
				
			||||||
 | 
					                                                }
 | 
				
			||||||
 | 
					                                            })
 | 
				
			||||||
 | 
					                                            const siblings = Array.from(currentElement.parentElement.children);
 | 
				
			||||||
 | 
					                                            siblings.forEach((sibling) => {
 | 
				
			||||||
 | 
					                                                sibling.classList.remove('active');
 | 
				
			||||||
 | 
					                                                sibling.classList.remove('show');
 | 
				
			||||||
 | 
					                                            });
 | 
				
			||||||
 | 
					                                            currentElement.classList.add('active');
 | 
				
			||||||
 | 
					                                            currentElement.classList.add('show');
 | 
				
			||||||
 | 
					                                        }
 | 
				
			||||||
 | 
					                                    }
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
 | 
					                                const endIndex = startIndex + keyword.length;
 | 
				
			||||||
                                const beforeText = textContent.slice(0, startIndex);
 | 
					                                const beforeText = textContent.slice(0, startIndex);
 | 
				
			||||||
                                const highlightedText = textContent.slice(startIndex, endIndex);
 | 
					                                const highlightedText = textContent.slice(startIndex, endIndex);
 | 
				
			||||||
                                const afterText = textContent.slice(endIndex);
 | 
					                                const afterText = textContent.slice(endIndex);
 | 
				
			||||||
 | 
					 | 
				
			||||||
                                const highlightedElement = document.createElement('span');
 | 
					                                const highlightedElement = document.createElement('span');
 | 
				
			||||||
                                highlightedElement.style.fontWeight = '700';
 | 
					                                highlightedElement.style.fontWeight = '700';
 | 
				
			||||||
                                highlightedElement.style.color = 'red';
 | 
					                                highlightedElement.style.color = 'red';
 | 
				
			||||||
                                highlightedElement.textContent = highlightedText;
 | 
					                                highlightedElement.textContent = highlightedText;
 | 
				
			||||||
 | 
					 | 
				
			||||||
                                el.innerHTML = beforeText;
 | 
					                                el.innerHTML = beforeText;
 | 
				
			||||||
                                el.appendChild(highlightedElement);
 | 
					                                el.appendChild(highlightedElement);
 | 
				
			||||||
                                el.innerHTML += afterText;
 | 
					                                el.innerHTML += afterText;
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                        })
 | 
					                        })
 | 
				
			||||||
            })
 | 
					                    },100);
 | 
				
			||||||
 | 
					                // })
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -326,8 +356,7 @@ export const netFlotChartComponent = {
 | 
				
			||||||
                                if (item.seriesIndex === 1)
 | 
					                                if (item.seriesIndex === 1)
 | 
				
			||||||
                                    showTooltip(item.pageX + 100, item.pageY - 10, color, "<cn>下行</cn><en>downward</en>: " + data);
 | 
					                                    showTooltip(item.pageX + 100, item.pageY - 10, color, "<cn>下行</cn><en>downward</en>: " + data);
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                        }
 | 
					                        } else {
 | 
				
			||||||
                        else {
 | 
					 | 
				
			||||||
                            prePoint = null;
 | 
					                            prePoint = null;
 | 
				
			||||||
                            preLabel = null;
 | 
					                            preLabel = null;
 | 
				
			||||||
                            $(this).css({
 | 
					                            $(this).css({
 | 
				
			||||||
| 
						 | 
					@ -762,7 +791,8 @@ export const h5PlayerComponent = {
 | 
				
			||||||
                state.h5Player = {};
 | 
					                state.h5Player = {};
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            state.cloudHandler.value.style.display = 'flex';
 | 
					            state.cloudHandler.value.style.display = 'flex';
 | 
				
			||||||
            state.videoHandler.value.removeEventListener("canplay",()=>{});
 | 
					            state.videoHandler.value.removeEventListener("canplay", () => {
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
            state.hadInitPlayer = false;
 | 
					            state.hadInitPlayer = false;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        const checkDelay = () => {
 | 
					        const checkDelay = () => {
 | 
				
			||||||
| 
						 | 
					@ -835,7 +865,8 @@ export const videoPlayerComponent = {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        const destroyPlayer = () => {
 | 
					        const destroyPlayer = () => {
 | 
				
			||||||
            state.cloudHandler.value.style.display = 'flex';
 | 
					            state.cloudHandler.value.style.display = 'flex';
 | 
				
			||||||
            state.videoHandler.value.removeEventListener("canplay",()=>{});
 | 
					            state.videoHandler.value.removeEventListener("canplay", () => {
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
            state.hadInitPlayer = false;
 | 
					            state.hadInitPlayer = false;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1508,7 +1539,15 @@ export const upgradeModalComponent = {
 | 
				
			||||||
                context.emit('update:checkUpgrade', false);
 | 
					                context.emit('update:checkUpgrade', false);
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
        return { ...state,modalFade,handleVersionLogs,showPatchVersionLog,hidePatchVersionLog,handleUpdatePatch,handleDownloadPatch }
 | 
					        return {
 | 
				
			||||||
 | 
					            ...state,
 | 
				
			||||||
 | 
					            modalFade,
 | 
				
			||||||
 | 
					            handleVersionLogs,
 | 
				
			||||||
 | 
					            showPatchVersionLog,
 | 
				
			||||||
 | 
					            hidePatchVersionLog,
 | 
				
			||||||
 | 
					            handleUpdatePatch,
 | 
				
			||||||
 | 
					            handleDownloadPatch
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1594,6 +1633,8 @@ export const customModalComponent = {
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        watch(modalShow, () => {
 | 
					        watch(modalShow, () => {
 | 
				
			||||||
 | 
					            if (Object.keys(state.bsModal).length === 0)
 | 
				
			||||||
 | 
					                return;
 | 
				
			||||||
            state.show = !state.show;
 | 
					            state.show = !state.show;
 | 
				
			||||||
            if (state.show)
 | 
					            if (state.show)
 | 
				
			||||||
                state.bsModal.show();
 | 
					                state.bsModal.show();
 | 
				
			||||||
| 
						 | 
					@ -1871,7 +1912,6 @@ export const ptzDirectComponent = {
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        watch(() => props.zoomVal, (newValue, oldValue) => {
 | 
					        watch(() => props.zoomVal, (newValue, oldValue) => {
 | 
				
			||||||
            console.log(newValue);
 | 
					 | 
				
			||||||
            state.zoom.value = newValue;
 | 
					            state.zoom.value = newValue;
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1971,7 +2011,8 @@ export const usbOptionComponent = {
 | 
				
			||||||
                    },
 | 
					                    },
 | 
				
			||||||
                    cancel: {
 | 
					                    cancel: {
 | 
				
			||||||
                        text: "<cn>取消</cn><en>Cancel</en>",
 | 
					                        text: "<cn>取消</cn><en>Cancel</en>",
 | 
				
			||||||
                        action: () => {}
 | 
					                        action: () => {
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
| 
						 | 
					@ -2050,7 +2091,8 @@ export const usbOptionComponent = {
 | 
				
			||||||
                    },
 | 
					                    },
 | 
				
			||||||
                    cancel: {
 | 
					                    cancel: {
 | 
				
			||||||
                        text: "<cn>取消</cn><en>Cancel</en>",
 | 
					                        text: "<cn>取消</cn><en>Cancel</en>",
 | 
				
			||||||
                        action: () => {}
 | 
					                        action: () => {
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
| 
						 | 
					@ -2195,7 +2237,8 @@ export const usbOptionComponent = {
 | 
				
			||||||
                    },
 | 
					                    },
 | 
				
			||||||
                    cancel: {
 | 
					                    cancel: {
 | 
				
			||||||
                        text: "<cn>取消</cn><en>Cancel</en>",
 | 
					                        text: "<cn>取消</cn><en>Cancel</en>",
 | 
				
			||||||
                        action: () => {}
 | 
					                        action: () => {
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                },
 | 
					                },
 | 
				
			||||||
                onOpenBefore: () => {
 | 
					                onOpenBefore: () => {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| 
						 | 
					@ -201,7 +201,7 @@
 | 
				
			||||||
<script type="module">
 | 
					<script type="module">
 | 
				
			||||||
    import { rpc,confirm,func,checkFileExists,clearReactiveArray } from "./assets/js/lp.utils.js";
 | 
					    import { rpc,confirm,func,checkFileExists,clearReactiveArray } from "./assets/js/lp.utils.js";
 | 
				
			||||||
    import { useDefaultConf,useResConf } from "./assets/js/vue.hooks.js";
 | 
					    import { useDefaultConf,useResConf } from "./assets/js/vue.hooks.js";
 | 
				
			||||||
    import {ignoreCustomElementPlugin,bootstrapSwitchComponent,nouiSliderComponent,uploadModalComponent,languageOptionDirective} from "./assets/js/vue.helper.js"
 | 
					    import {ignoreCustomElementPlugin,filterKeywordPlugin,bootstrapSwitchComponent,nouiSliderComponent,uploadModalComponent,languageOptionDirective} from "./assets/js/vue.helper.js"
 | 
				
			||||||
    import vue from "./assets/js/vue.build.js";
 | 
					    import vue from "./assets/js/vue.build.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const {createApp,ref,reactive,watchEffect,computed} = vue;
 | 
					    const {createApp,ref,reactive,watchEffect,computed} = vue;
 | 
				
			||||||
| 
						 | 
					@ -332,6 +332,7 @@
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    app.use(ignoreCustomElementPlugin);
 | 
					    app.use(ignoreCustomElementPlugin);
 | 
				
			||||||
 | 
					    app.use(filterKeywordPlugin);
 | 
				
			||||||
    app.mount('#app');
 | 
					    app.mount('#app');
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
</body>
 | 
					</body>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -65,7 +65,7 @@
 | 
				
			||||||
                <div class="col-lg-12">
 | 
					                <div class="col-lg-12">
 | 
				
			||||||
                    <div class="card">
 | 
					                    <div class="card">
 | 
				
			||||||
                        <div class="card-body iface py-3">
 | 
					                        <div class="card-body iface py-3">
 | 
				
			||||||
                            <div v-for="(item,index) in input" :key="index" :class="['me-5',{'hdmi':item.protocol==='HDMI'},{'sdi':item.protocol==='SDI'},{'disable':!item.avalible}]">
 | 
					                            <div v-for="(item,index) in input" :key="index" :class="[{'ms-5':index > 0},{'hdmi':item.protocol==='HDMI'},{'sdi':item.protocol==='SDI' || item.protocol==='AHD'},{'disable':!item.avalible}]">
 | 
				
			||||||
                                <span class="info">{{item.info}}</span>
 | 
					                                <span class="info">{{item.info}}</span>
 | 
				
			||||||
                                <div class="icon my-1"></div>
 | 
					                                <div class="icon my-1"></div>
 | 
				
			||||||
                                <span class="name">{{item.name}}</span>
 | 
					                                <span class="name">{{item.name}}</span>
 | 
				
			||||||
| 
						 | 
					@ -114,7 +114,7 @@
 | 
				
			||||||
  <script type="module">
 | 
					  <script type="module">
 | 
				
			||||||
      import { rpc } from "./assets/js/lp.utils.js";
 | 
					      import { rpc } from "./assets/js/lp.utils.js";
 | 
				
			||||||
      import { useDefaultConf } from "./assets/js/vue.hooks.js";
 | 
					      import { useDefaultConf } from "./assets/js/vue.hooks.js";
 | 
				
			||||||
      import { ignoreCustomElementPlugin,bootstrapSwitchComponent,statusPieChartComponent,statusTemperatureComponent,netFlotChartComponent } from "./assets/js/vue.helper.js"
 | 
					      import { ignoreCustomElementPlugin,filterKeywordPlugin,bootstrapSwitchComponent,statusPieChartComponent,statusTemperatureComponent,netFlotChartComponent } from "./assets/js/vue.helper.js"
 | 
				
			||||||
      import vue from "./assets/js/vue.build.js";
 | 
					      import vue from "./assets/js/vue.build.js";
 | 
				
			||||||
      import mutationObserver from './assets/plugins/polyfill/mutationobserver.esm.js';
 | 
					      import mutationObserver from './assets/plugins/polyfill/mutationobserver.esm.js';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -300,6 +300,7 @@
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
      app.use(ignoreCustomElementPlugin);
 | 
					      app.use(ignoreCustomElementPlugin);
 | 
				
			||||||
 | 
					      app.use(filterKeywordPlugin);
 | 
				
			||||||
      app.mount('#app')
 | 
					      app.mount('#app')
 | 
				
			||||||
  </script>
 | 
					  </script>
 | 
				
			||||||
  </body>
 | 
					  </body>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -92,7 +92,7 @@
 | 
				
			||||||
                                    <div class="col-lg-12">
 | 
					                                    <div class="col-lg-12">
 | 
				
			||||||
                                        <button type="button" class="btn  border-3 btn-primary me-2" @click="saveGlobalConfByLocal">
 | 
					                                        <button type="button" class="btn  border-3 btn-primary me-2" @click="saveGlobalConfByLocal">
 | 
				
			||||||
                                            <cn>应用到全部</cn>
 | 
					                                            <cn>应用到全部</cn>
 | 
				
			||||||
                                            <en>Apply to all/en>
 | 
					                                            <en>Apply to all</en>
 | 
				
			||||||
                                        </button>
 | 
					                                        </button>
 | 
				
			||||||
                                    </div>
 | 
					                                    </div>
 | 
				
			||||||
                                </div>
 | 
					                                </div>
 | 
				
			||||||
| 
						 | 
					@ -353,7 +353,7 @@
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    import { rpc, extend, deepCopy, confirm, swap, clearReactiveArray, clearReactiveObject, formatTime, alertMsg } from "./assets/js/lp.utils.js";
 | 
					    import { rpc, extend, deepCopy, confirm, swap, clearReactiveArray, clearReactiveObject, formatTime, alertMsg } from "./assets/js/lp.utils.js";
 | 
				
			||||||
    import { useDefaultConf,useUsbFilesConf,useHardwareConf } from "./assets/js/vue.hooks.js";
 | 
					    import { useDefaultConf,useUsbFilesConf,useHardwareConf } from "./assets/js/vue.hooks.js";
 | 
				
			||||||
    import { ignoreCustomElementPlugin,bootstrapSwitchComponent,multipleSelectComponent,nouiSliderComponent,languageOptionDirective } from "./assets/js/vue.helper.js"
 | 
					    import { ignoreCustomElementPlugin,filterKeywordPlugin,bootstrapSwitchComponent,multipleSelectComponent,nouiSliderComponent,languageOptionDirective } from "./assets/js/vue.helper.js"
 | 
				
			||||||
    import vue from "./assets/js/vue.build.js";
 | 
					    import vue from "./assets/js/vue.build.js";
 | 
				
			||||||
    const {createApp,ref,reactive,watch,toRefs,computed,onMounted} = vue;
 | 
					    const {createApp,ref,reactive,watch,toRefs,computed,onMounted} = vue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -536,6 +536,7 @@
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    app.use(ignoreCustomElementPlugin);
 | 
					    app.use(ignoreCustomElementPlugin);
 | 
				
			||||||
 | 
					    app.use(filterKeywordPlugin);
 | 
				
			||||||
    app.mount('#app');
 | 
					    app.mount('#app');
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
</body>
 | 
					</body>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -171,30 +171,34 @@
 | 
				
			||||||
                                    <div class="col-1"></div>
 | 
					                                    <div class="col-1"></div>
 | 
				
			||||||
                                    <div class="col-11">
 | 
					                                    <div class="col-11">
 | 
				
			||||||
                                        <div class="row">
 | 
					                                        <div class="row">
 | 
				
			||||||
                                            <div class="col-2 text-center">
 | 
					                                            <div class="col text-center">
 | 
				
			||||||
                                                <cn>编码格式</cn>
 | 
					                                                <cn>编码格式</cn>
 | 
				
			||||||
                                                <en>codec</en>
 | 
					                                                <en>codec</en>
 | 
				
			||||||
                                            </div>
 | 
					                                            </div>
 | 
				
			||||||
                                            <div class="col-2 text-center">
 | 
					                                            <div class="col text-center">
 | 
				
			||||||
                                                <cn>音源</cn>
 | 
					                                                <cn>音源</cn>
 | 
				
			||||||
                                                <en>source</en>
 | 
					                                                <en>source</en>
 | 
				
			||||||
                                            </div>
 | 
					                                            </div>
 | 
				
			||||||
                                            <div class="col-2 text-center">
 | 
					                                            <div class="col text-center">
 | 
				
			||||||
                                                <cn>增益</cn>
 | 
					                                                <cn>增益</cn>
 | 
				
			||||||
                                                <en>gain</en>
 | 
					                                                <en>gain</en>
 | 
				
			||||||
                                            </div>
 | 
					                                            </div>
 | 
				
			||||||
                                            <div class="col-2 text-center">
 | 
					                                            <div class="col text-center">
 | 
				
			||||||
                                                <cn>采样率</cn>
 | 
					                                                <cn>采样率</cn>
 | 
				
			||||||
                                                <en>samplerate</en>
 | 
					                                                <en>samplerate</en>
 | 
				
			||||||
                                            </div>
 | 
					                                            </div>
 | 
				
			||||||
                                            <div class="col-2 text-center">
 | 
					                                            <div class="col text-center">
 | 
				
			||||||
                                                <cn>声道</cn>
 | 
					                                                <cn>声道</cn>
 | 
				
			||||||
                                                <en>channels</en>
 | 
					                                                <en>channels</en>
 | 
				
			||||||
                                            </div>
 | 
					                                            </div>
 | 
				
			||||||
                                            <div class="col-2 text-center">
 | 
					                                            <div class="col text-center">
 | 
				
			||||||
                                                <cn>码率(kb/s)</cn>
 | 
					                                                <cn>码率(kb/s)</cn>
 | 
				
			||||||
                                                <en>bitrate(kb/s)</en>
 | 
					                                                <en>bitrate(kb/s)</en>
 | 
				
			||||||
                                            </div>
 | 
					                                            </div>
 | 
				
			||||||
 | 
					                                            <div v-if="Object.keys(hardwareConf).length > 0 && hardwareConf.model==='ENC8'" class="col text-center">
 | 
				
			||||||
 | 
					                                                <cn>音轨</cn>
 | 
				
			||||||
 | 
					                                                <en>audio track</en>
 | 
				
			||||||
 | 
					                                            </div>
 | 
				
			||||||
                                        </div>
 | 
					                                        </div>
 | 
				
			||||||
                                    </div>
 | 
					                                    </div>
 | 
				
			||||||
                                </div>
 | 
					                                </div>
 | 
				
			||||||
| 
						 | 
					@ -253,6 +257,12 @@
 | 
				
			||||||
                                            <div class="col">
 | 
					                                            <div class="col">
 | 
				
			||||||
                                                <input type="text" class="form-control" v-model.trim.lazy="globalConf.enca.bitrate">
 | 
					                                                <input type="text" class="form-control" v-model.trim.lazy="globalConf.enca.bitrate">
 | 
				
			||||||
                                            </div>
 | 
					                                            </div>
 | 
				
			||||||
 | 
					                                            <div v-if="Object.keys(hardwareConf).length > 0 && hardwareConf.model==='ENC8'" class="col text-center">
 | 
				
			||||||
 | 
					                                                <select class="form-select" v-model.number="globalConf.enca.audioTrack">
 | 
				
			||||||
 | 
					                                                    <option cn="源-Line" en="source-line" value="1" v-language-option></option>
 | 
				
			||||||
 | 
					                                                    <option cn="源-Hdmi" en="source-hdmi" value="2" v-language-option></option>
 | 
				
			||||||
 | 
					                                                </select>
 | 
				
			||||||
 | 
					                                            </div>
 | 
				
			||||||
                                        </div>
 | 
					                                        </div>
 | 
				
			||||||
                                    </div>
 | 
					                                    </div>
 | 
				
			||||||
                                </div>
 | 
					                                </div>
 | 
				
			||||||
| 
						 | 
					@ -261,7 +271,7 @@
 | 
				
			||||||
                                    <div class="col-lg-12">
 | 
					                                    <div class="col-lg-12">
 | 
				
			||||||
                                        <button type="button" class="btn  border-3 btn-primary me-2" @click="saveGlobalConfByLocal">
 | 
					                                        <button type="button" class="btn  border-3 btn-primary me-2" @click="saveGlobalConfByLocal">
 | 
				
			||||||
                                            <cn>应用到全部</cn>
 | 
					                                            <cn>应用到全部</cn>
 | 
				
			||||||
                                            <en>Apply to all/en>
 | 
					                                            <en>Apply to all</en>
 | 
				
			||||||
                                        </button>
 | 
					                                        </button>
 | 
				
			||||||
                                    </div>
 | 
					                                    </div>
 | 
				
			||||||
                                </div>
 | 
					                                </div>
 | 
				
			||||||
| 
						 | 
					@ -487,16 +497,20 @@
 | 
				
			||||||
                                <en>smart encode</en>
 | 
					                                <en>smart encode</en>
 | 
				
			||||||
                            </div>
 | 
					                            </div>
 | 
				
			||||||
                            <div class="col text-center">
 | 
					                            <div class="col text-center">
 | 
				
			||||||
                                minQP
 | 
					                                <cn>minQP</cn>
 | 
				
			||||||
 | 
					                                <en>minQP</en>
 | 
				
			||||||
                            </div>
 | 
					                            </div>
 | 
				
			||||||
                            <div class="col text-center">
 | 
					                            <div class="col text-center">
 | 
				
			||||||
                                maxQP
 | 
					                                <cn>maxQP</cn>
 | 
				
			||||||
 | 
					                                <en>maxQP</en>
 | 
				
			||||||
                            </div>
 | 
					                            </div>
 | 
				
			||||||
                            <div class="col text-center">
 | 
					                            <div class="col text-center">
 | 
				
			||||||
                                fixIQP
 | 
					                                <cn>fixIQP</cn>
 | 
				
			||||||
 | 
					                                <en>fixIQP</en>
 | 
				
			||||||
                            </div>
 | 
					                            </div>
 | 
				
			||||||
                            <div class="col text-center">
 | 
					                            <div class="col text-center">
 | 
				
			||||||
                                fixPQP
 | 
					                                <cn>fixPQP</cn>
 | 
				
			||||||
 | 
					                                <en>fixPQP</en>
 | 
				
			||||||
                            </div>
 | 
					                            </div>
 | 
				
			||||||
                            <div class="col text-center">
 | 
					                            <div class="col text-center">
 | 
				
			||||||
                                <cn>低延时编码</cn>
 | 
					                                <cn>低延时编码</cn>
 | 
				
			||||||
| 
						 | 
					@ -679,6 +693,10 @@
 | 
				
			||||||
                                <cn>码率(kb/s)</cn>
 | 
					                                <cn>码率(kb/s)</cn>
 | 
				
			||||||
                                <en>bitrate(kb/s)</en>
 | 
					                                <en>bitrate(kb/s)</en>
 | 
				
			||||||
                            </div>
 | 
					                            </div>
 | 
				
			||||||
 | 
					                            <div v-if="Object.keys(hardwareConf).length > 0 && hardwareConf.model==='ENC8'" class="col text-center">
 | 
				
			||||||
 | 
					                                <cn>音轨</cn>
 | 
				
			||||||
 | 
					                                <en>audio track</en>
 | 
				
			||||||
 | 
					                            </div>
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
                        <hr >
 | 
					                        <hr >
 | 
				
			||||||
                        <div class="row mt-1" v-for="(item,index) in handleAdoConf" :key="item.id">
 | 
					                        <div class="row mt-1" v-for="(item,index) in handleAdoConf" :key="item.id">
 | 
				
			||||||
| 
						 | 
					@ -733,6 +751,12 @@
 | 
				
			||||||
                                    <div class="col">
 | 
					                                    <div class="col">
 | 
				
			||||||
                                        <input type="text" class="form-control" v-model.trim.lazy="item.enca.bitrate">
 | 
					                                        <input type="text" class="form-control" v-model.trim.lazy="item.enca.bitrate">
 | 
				
			||||||
                                    </div>
 | 
					                                    </div>
 | 
				
			||||||
 | 
					                                    <div v-if="Object.keys(hardwareConf).length > 0 && hardwareConf.model==='ENC8'" class="col">
 | 
				
			||||||
 | 
					                                        <select v-if="item.enca.audioTrack" class="form-select" v-model.number="item.enca.audioTrack">
 | 
				
			||||||
 | 
					                                            <option cn="源-Line" en="source-line" value="1" v-language-option></option>
 | 
				
			||||||
 | 
					                                            <option cn="源-Hdmi" en="source-hdmi" value="2" v-language-option></option>
 | 
				
			||||||
 | 
					                                        </select>
 | 
				
			||||||
 | 
					                                    </div>
 | 
				
			||||||
                                </div>
 | 
					                                </div>
 | 
				
			||||||
                                <hr >
 | 
					                                <hr >
 | 
				
			||||||
                            </div>
 | 
					                            </div>
 | 
				
			||||||
| 
						 | 
					@ -840,7 +864,7 @@
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    import { extend,deepCopy,confirm } from "./assets/js/lp.utils.js";
 | 
					    import { extend,deepCopy,confirm } from "./assets/js/lp.utils.js";
 | 
				
			||||||
    import { useDefaultConf,useHardwareConf } from "./assets/js/vue.hooks.js";
 | 
					    import { useDefaultConf,useHardwareConf } from "./assets/js/vue.hooks.js";
 | 
				
			||||||
    import { ignoreCustomElementPlugin,bootstrapSwitchComponent,multipleSelectComponent,languageOptionDirective } from "./assets/js/vue.helper.js"
 | 
					    import { ignoreCustomElementPlugin,filterKeywordPlugin,bootstrapSwitchComponent,multipleSelectComponent,languageOptionDirective } from "./assets/js/vue.helper.js"
 | 
				
			||||||
    import vue from "./assets/js/vue.build.js";
 | 
					    import vue from "./assets/js/vue.build.js";
 | 
				
			||||||
    const {createApp,reactive,watch,toRefs,computed,onMounted} = vue;
 | 
					    const {createApp,reactive,watch,toRefs,computed,onMounted} = vue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -918,6 +942,8 @@
 | 
				
			||||||
                    extend(defaultConf[i].enca, deepCopy(globalConf.enca));
 | 
					                    extend(defaultConf[i].enca, deepCopy(globalConf.enca));
 | 
				
			||||||
                    if(defaultConf[i].enca.audioSrc === "source")
 | 
					                    if(defaultConf[i].enca.audioSrc === "source")
 | 
				
			||||||
                        defaultConf[i].enca.audioSrc = defaultConf[i].id;
 | 
					                        defaultConf[i].enca.audioSrc = defaultConf[i].id;
 | 
				
			||||||
 | 
					                    if(defaultConf[i].type !== "vi" && defaultConf[i].enca.hasOwnProperty("audioTrack"))
 | 
				
			||||||
 | 
					                        delete defaultConf[i].enca.audioTrack;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                saveDefaultConf();
 | 
					                saveDefaultConf();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
| 
						 | 
					@ -960,6 +986,7 @@
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    app.use(ignoreCustomElementPlugin);
 | 
					    app.use(ignoreCustomElementPlugin);
 | 
				
			||||||
 | 
					    app.use(filterKeywordPlugin);
 | 
				
			||||||
    app.mount('#app');
 | 
					    app.mount('#app');
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
</body>
 | 
					</body>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -20,7 +20,7 @@
 | 
				
			||||||
                                    </div>
 | 
					                                    </div>
 | 
				
			||||||
                                </div>
 | 
					                                </div>
 | 
				
			||||||
                                <div class="card-body" >
 | 
					                                <div class="card-body" >
 | 
				
			||||||
                                    <div class="row mt-3">
 | 
					                                    <div class="row mt-2">
 | 
				
			||||||
                                        <div class="col-lg-4 d-flex lp-align-center">
 | 
					                                        <div class="col-lg-4 d-flex lp-align-center">
 | 
				
			||||||
                                            <cn>机型</cn>
 | 
					                                            <cn>机型</cn>
 | 
				
			||||||
                                            <en>Model</en>
 | 
					                                            <en>Model</en>
 | 
				
			||||||
| 
						 | 
					@ -31,7 +31,16 @@
 | 
				
			||||||
                                            </select>
 | 
					                                            </select>
 | 
				
			||||||
                                        </div>
 | 
					                                        </div>
 | 
				
			||||||
                                    </div>
 | 
					                                    </div>
 | 
				
			||||||
                                    <div class="row my-3">
 | 
					                                    <div class="row mt-3">
 | 
				
			||||||
 | 
					                                        <div class="col-lg-4 d-flex lp-align-center">
 | 
				
			||||||
 | 
					                                            <cn>类型</cn>
 | 
				
			||||||
 | 
					                                            <en>Chip</en>
 | 
				
			||||||
 | 
					                                        </div>
 | 
				
			||||||
 | 
					                                        <div class="col-lg-8">
 | 
				
			||||||
 | 
					                                            <input class="form-control" type="text" v-model.trim.lazy="chip" readonly disabled>
 | 
				
			||||||
 | 
					                                        </div>
 | 
				
			||||||
 | 
					                                    </div>
 | 
				
			||||||
 | 
					                                    <div class="row mt-3">
 | 
				
			||||||
                                        <div class="col-lg-12 text-center">
 | 
					                                        <div class="col-lg-12 text-center">
 | 
				
			||||||
                                            <button type="button" class="btn btn-primary border-2 px-3" @click="updateFacConf">
 | 
					                                            <button type="button" class="btn btn-primary border-2 px-3" @click="updateFacConf">
 | 
				
			||||||
                                                <cn>保存</cn>
 | 
					                                                <cn>保存</cn>
 | 
				
			||||||
| 
						 | 
					@ -53,7 +62,7 @@
 | 
				
			||||||
                                    </div>
 | 
					                                    </div>
 | 
				
			||||||
                                </div>
 | 
					                                </div>
 | 
				
			||||||
                                <div class="card-body" >
 | 
					                                <div class="card-body" >
 | 
				
			||||||
                                    <div class="row mt-3">
 | 
					                                    <div class="row">
 | 
				
			||||||
                                        <div class="col-lg-4 d-flex lp-align-center">
 | 
					                                        <div class="col-lg-4 d-flex lp-align-center">
 | 
				
			||||||
                                            <cn>认证模式</cn>
 | 
					                                            <cn>认证模式</cn>
 | 
				
			||||||
                                            <en>Auth</en>
 | 
					                                            <en>Auth</en>
 | 
				
			||||||
| 
						 | 
					@ -67,7 +76,7 @@
 | 
				
			||||||
                                            </select>
 | 
					                                            </select>
 | 
				
			||||||
                                        </div>
 | 
					                                        </div>
 | 
				
			||||||
                                    </div>
 | 
					                                    </div>
 | 
				
			||||||
                                    <div class="row my-3">
 | 
					                                    <div class="row mt-3">
 | 
				
			||||||
                                        <div class="col-lg-12 text-center">
 | 
					                                        <div class="col-lg-12 text-center">
 | 
				
			||||||
                                            <button type="button" class="btn btn-primary border-2 px-3" @click="updateLphConf">
 | 
					                                            <button type="button" class="btn btn-primary border-2 px-3" @click="updateLphConf">
 | 
				
			||||||
                                                <cn>保存</cn>
 | 
					                                                <cn>保存</cn>
 | 
				
			||||||
| 
						 | 
					@ -215,6 +224,7 @@
 | 
				
			||||||
<?php include ("./public/foot.inc") ?>
 | 
					<?php include ("./public/foot.inc") ?>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<script type="module">
 | 
					<script type="module">
 | 
				
			||||||
 | 
					    import { rpc } from "./assets/js/lp.utils.js"
 | 
				
			||||||
    import { useHardwareConf,useFacConf,useLphConf,useColorModeConf,useEdidConf,useMcuConf } from "./assets/js/vue.hooks.js";
 | 
					    import { useHardwareConf,useFacConf,useLphConf,useColorModeConf,useEdidConf,useMcuConf } from "./assets/js/vue.hooks.js";
 | 
				
			||||||
    import { ignoreCustomElementPlugin,bootstrapSwitchComponent,languageOptionDirective } from "./assets/js/vue.helper.js"
 | 
					    import { ignoreCustomElementPlugin,bootstrapSwitchComponent,languageOptionDirective } from "./assets/js/vue.helper.js"
 | 
				
			||||||
    import vue from "./assets/js/vue.build.js";
 | 
					    import vue from "./assets/js/vue.build.js";
 | 
				
			||||||
| 
						 | 
					@ -237,6 +247,7 @@
 | 
				
			||||||
            const { mcuConf } = useMcuConf();
 | 
					            const { mcuConf } = useMcuConf();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            const showMcuVersion = ref(false);
 | 
					            const showMcuVersion = ref(false);
 | 
				
			||||||
 | 
					            const chip = ref("");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            watchEffect(()=>{
 | 
					            watchEffect(()=>{
 | 
				
			||||||
                if(Object.keys(hardwareConf).length > 0)
 | 
					                if(Object.keys(hardwareConf).length > 0)
 | 
				
			||||||
| 
						 | 
					@ -245,8 +256,10 @@
 | 
				
			||||||
                    showMcuVersion.value = true;
 | 
					                    showMcuVersion.value = true;
 | 
				
			||||||
            })
 | 
					            })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            return {hardwareConf,updateHardwareConf,curFac,facConf,updateFacConf, colorModeConf,
 | 
					            onMounted(()=>rpc("enc.getChip").then(data => chip.value = data));
 | 
				
			||||||
                updateColorModeConf,edidConf,updateEdidConf,lphConf,updateLphConf,mcuConf,showMcuVersion}
 | 
					
 | 
				
			||||||
 | 
					            return {hardwareConf,updateHardwareConf,curFac,facConf,updateFacConf, colorModeConf, updateColorModeConf,
 | 
				
			||||||
 | 
					                edidConf,updateEdidConf,lphConf,updateLphConf,mcuConf,showMcuVersion,chip}
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    app.use(ignoreCustomElementPlugin);
 | 
					    app.use(ignoreCustomElementPlugin);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -236,7 +236,7 @@
 | 
				
			||||||
    import vue from "./assets/js/vue.build.js";
 | 
					    import vue from "./assets/js/vue.build.js";
 | 
				
			||||||
    import { rpc } from "./assets/js/lp.utils.js";
 | 
					    import { rpc } from "./assets/js/lp.utils.js";
 | 
				
			||||||
    import { useDefaultConf,useGb28181Conf } from "./assets/js/vue.hooks.js";
 | 
					    import { useDefaultConf,useGb28181Conf } from "./assets/js/vue.hooks.js";
 | 
				
			||||||
    import { ignoreCustomElementPlugin,bootstrapSwitchComponent } from "./assets/js/vue.helper.js"
 | 
					    import { ignoreCustomElementPlugin,filterKeywordPlugin,bootstrapSwitchComponent } from "./assets/js/vue.helper.js"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const {createApp,ref,reactive,watchEffect,computed,onMounted,nextTick} = vue;
 | 
					    const {createApp,ref,reactive,watchEffect,computed,onMounted,nextTick} = vue;
 | 
				
			||||||
    const app = createApp({
 | 
					    const app = createApp({
 | 
				
			||||||
| 
						 | 
					@ -296,6 +296,7 @@
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    app.use(ignoreCustomElementPlugin);
 | 
					    app.use(ignoreCustomElementPlugin);
 | 
				
			||||||
 | 
					    app.use(filterKeywordPlugin);
 | 
				
			||||||
    app.mount('#app');
 | 
					    app.mount('#app');
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
</body>
 | 
					</body>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -509,7 +509,7 @@
 | 
				
			||||||
                            <div class="col-lg-12">
 | 
					                            <div class="col-lg-12">
 | 
				
			||||||
                                <button type="button" class="btn  border-3 btn-primary me-2" @click="showSyncModal('enc')">
 | 
					                                <button type="button" class="btn  border-3 btn-primary me-2" @click="showSyncModal('enc')">
 | 
				
			||||||
                                    <cn>应用到群组</cn>
 | 
					                                    <cn>应用到群组</cn>
 | 
				
			||||||
                                    <en>Apply to all/en>
 | 
					                                    <en>Apply to all</en>
 | 
				
			||||||
                                </button>
 | 
					                                </button>
 | 
				
			||||||
                            </div>
 | 
					                            </div>
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
| 
						 | 
					@ -606,7 +606,7 @@
 | 
				
			||||||
                                    <div class="col-lg-12">
 | 
					                                    <div class="col-lg-12">
 | 
				
			||||||
                                        <button type="button" class="btn  border-3 btn-primary me-2" @click="showSyncModal('stream')">
 | 
					                                        <button type="button" class="btn  border-3 btn-primary me-2" @click="showSyncModal('stream')">
 | 
				
			||||||
                                            <cn>应用到群组</cn>
 | 
					                                            <cn>应用到群组</cn>
 | 
				
			||||||
                                            <en>Apply to all/en>
 | 
					                                            <en>Apply to all</en>
 | 
				
			||||||
                                        </button>
 | 
					                                        </button>
 | 
				
			||||||
                                    </div>
 | 
					                                    </div>
 | 
				
			||||||
                                </div>
 | 
					                                </div>
 | 
				
			||||||
| 
						 | 
					@ -622,7 +622,7 @@
 | 
				
			||||||
<script type="module">
 | 
					<script type="module">
 | 
				
			||||||
    import {rpc, alertMsg, splitArray, confirm, clearReactiveArray, isEmpty, deepCopy} from "./assets/js/lp.utils.js";
 | 
					    import {rpc, alertMsg, splitArray, confirm, clearReactiveArray, isEmpty, deepCopy} from "./assets/js/lp.utils.js";
 | 
				
			||||||
    import { useDefaultConf,useGroupConf,useHardwareConf } from "./assets/js/vue.hooks.js";
 | 
					    import { useDefaultConf,useGroupConf,useHardwareConf } from "./assets/js/vue.hooks.js";
 | 
				
			||||||
    import { ignoreCustomElementPlugin,multipleSelectComponent,multipleInputComponent,
 | 
					    import { ignoreCustomElementPlugin,filterKeywordPlugin,multipleSelectComponent,multipleInputComponent,
 | 
				
			||||||
        languageOptionDirective,bootstrapSwitchComponent,customModalComponent } from "./assets/js/vue.helper.js"
 | 
					        languageOptionDirective,bootstrapSwitchComponent,customModalComponent } from "./assets/js/vue.helper.js"
 | 
				
			||||||
    import vue from "./assets/js/vue.build.js";
 | 
					    import vue from "./assets/js/vue.build.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -914,6 +914,7 @@
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    app.use(ignoreCustomElementPlugin);
 | 
					    app.use(ignoreCustomElementPlugin);
 | 
				
			||||||
 | 
					    app.use(filterKeywordPlugin);
 | 
				
			||||||
    app.mount('#app');
 | 
					    app.mount('#app');
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
</body>
 | 
					</body>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -113,7 +113,7 @@
 | 
				
			||||||
<script type="module">
 | 
					<script type="module">
 | 
				
			||||||
    import { rpc } from "./assets/js/lp.utils.js";
 | 
					    import { rpc } from "./assets/js/lp.utils.js";
 | 
				
			||||||
    import { useDefaultConf } from "./assets/js/vue.hooks.js";
 | 
					    import { useDefaultConf } from "./assets/js/vue.hooks.js";
 | 
				
			||||||
    import { ignoreCustomElementPlugin,bootstrapSwitchComponent,ptzDirectComponent } from "./assets/js/vue.helper.js"
 | 
					    import { ignoreCustomElementPlugin,filterKeywordPlugin,bootstrapSwitchComponent,ptzDirectComponent } from "./assets/js/vue.helper.js"
 | 
				
			||||||
    import vue from "./assets/js/vue.build.js";
 | 
					    import vue from "./assets/js/vue.build.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const {createApp,ref,reactive,watchEffect,onMounted,nextTick} = vue;
 | 
					    const {createApp,ref,reactive,watchEffect,onMounted,nextTick} = vue;
 | 
				
			||||||
| 
						 | 
					@ -238,6 +238,7 @@
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    app.use(ignoreCustomElementPlugin);
 | 
					    app.use(ignoreCustomElementPlugin);
 | 
				
			||||||
 | 
					    app.use(filterKeywordPlugin);
 | 
				
			||||||
    app.mount('#app');
 | 
					    app.mount('#app');
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
</body>
 | 
					</body>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -341,7 +341,7 @@
 | 
				
			||||||
<script type="module">
 | 
					<script type="module">
 | 
				
			||||||
    import { rpc,alertMsg,clearReactiveObject } from "./assets/js/lp.utils.js";
 | 
					    import { rpc,alertMsg,clearReactiveObject } from "./assets/js/lp.utils.js";
 | 
				
			||||||
    import { useIntercomConf } from "./assets/js/vue.hooks.js";
 | 
					    import { useIntercomConf } from "./assets/js/vue.hooks.js";
 | 
				
			||||||
    import { ignoreCustomElementPlugin,bootstrapSwitchComponent,languageOptionDirective,customModalComponent } from "./assets/js/vue.helper.js"
 | 
					    import { ignoreCustomElementPlugin,filterKeywordPlugin,bootstrapSwitchComponent,languageOptionDirective,customModalComponent } from "./assets/js/vue.helper.js"
 | 
				
			||||||
    import vue from "./assets/js/vue.build.js";
 | 
					    import vue from "./assets/js/vue.build.js";
 | 
				
			||||||
    const {createApp,ref,reactive,watch,watchEffect,computed,onMounted} = vue;
 | 
					    const {createApp,ref,reactive,watch,watchEffect,computed,onMounted} = vue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -438,6 +438,7 @@
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    app.use(ignoreCustomElementPlugin);
 | 
					    app.use(ignoreCustomElementPlugin);
 | 
				
			||||||
 | 
					    app.use(filterKeywordPlugin);
 | 
				
			||||||
    app.mount('#app');
 | 
					    app.mount('#app');
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
</body>
 | 
					</body>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -37,12 +37,14 @@ class User extends Verify
 | 
				
			||||||
            if($index == -1 || $passwd != $passes[$index]['passwd'])
 | 
					            if($index == -1 || $passwd != $passes[$index]['passwd'])
 | 
				
			||||||
                return $this->handleRet('','error','用户名密码错误','the user name or password is incorrect');
 | 
					                return $this->handleRet('','error','用户名密码错误','the user name or password is incorrect');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            session_start();
 | 
				
			||||||
            $data = array(
 | 
					            $data = array(
 | 
				
			||||||
                'L-HASH' => $this->get_hash(),
 | 
					                'L-HASH' => $this->get_hash(),
 | 
				
			||||||
                'P-HASH' => $this->get_hash(),
 | 
					                'P-HASH' => $this->get_hash(),
 | 
				
			||||||
                'H-HASH' => $this->get_hash()
 | 
					                'H-HASH' => $this->get_hash(),
 | 
				
			||||||
 | 
					                'Cookie' => 'PHPSESSID='.session_id()
 | 
				
			||||||
            );
 | 
					            );
 | 
				
			||||||
            session_start();
 | 
					
 | 
				
			||||||
            foreach ($data as $key => $value)
 | 
					            foreach ($data as $key => $value)
 | 
				
			||||||
                $_SESSION[$key] = $value;
 | 
					                $_SESSION[$key] = $value;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,6 +2,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace Link\Ctx;
 | 
					namespace Link\Ctx;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use DOMDocument;
 | 
				
			||||||
use Link\Basic;
 | 
					use Link\Basic;
 | 
				
			||||||
class Root extends Basic
 | 
					class Root extends Basic
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -132,4 +133,78 @@ class Root extends Basic
 | 
				
			||||||
        exec('/usr/nginx/sbin/nginx -p /usr/nginx -s reload');
 | 
					        exec('/usr/nginx/sbin/nginx -p /usr/nginx -s reload');
 | 
				
			||||||
        return $this->handleRet($param, 'success', '保存成功', 'save successfully');
 | 
					        return $this->handleRet($param, 'success', '保存成功', 'save successfully');
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    function filterKeywords($param) {
 | 
				
			||||||
 | 
					        $filter = $param["filter"];
 | 
				
			||||||
 | 
					        $lang = $param["lang"];
 | 
				
			||||||
 | 
					        $result = array();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $content = file_get_contents("/link/webflex/public/menu.inc");
 | 
				
			||||||
 | 
					        $dom = new DOMDocument();
 | 
				
			||||||
 | 
					        libxml_use_internal_errors(true);
 | 
				
			||||||
 | 
					        $dom->loadHTML(mb_convert_encoding($content,"HTML-ENTITIES","UTF-8"));
 | 
				
			||||||
 | 
					        libxml_clear_errors();
 | 
				
			||||||
 | 
					        $aTags = $dom->getElementsByTagName('a');
 | 
				
			||||||
 | 
					        $menus = array();
 | 
				
			||||||
 | 
					        foreach ($aTags as $aTag) {
 | 
				
			||||||
 | 
					            $href = $aTag->getAttribute('href');
 | 
				
			||||||
 | 
					            if (!empty($href) && $href != "javascript:;") {
 | 
				
			||||||
 | 
					                $iTag = $aTag->getElementsByTagName("i");
 | 
				
			||||||
 | 
					                $iClass = $iTag[0]->getAttribute("class");
 | 
				
			||||||
 | 
					                $cnTag = $aTag->getElementsByTagName($lang);
 | 
				
			||||||
 | 
					                $menus[$href] = array(
 | 
				
			||||||
 | 
					                    "icon" => $iClass,
 | 
				
			||||||
 | 
					                    "name" => $cnTag[0]->nodeValue
 | 
				
			||||||
 | 
					                );
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $phpFiles = glob('/link/webflex' . '/*.php');
 | 
				
			||||||
 | 
					        $ignoreFiles = ["fac.php","ndireg.php"];
 | 
				
			||||||
 | 
					        foreach ($phpFiles as $phpFile) {
 | 
				
			||||||
 | 
					            if (in_array(basename($phpFile), $ignoreFiles))
 | 
				
			||||||
 | 
					                continue;
 | 
				
			||||||
 | 
					            $content = file_get_contents($phpFile);
 | 
				
			||||||
 | 
					            preg_match('/<main\b[^>]*>(.*?)<\/main>/s', $content, $matches);
 | 
				
			||||||
 | 
					            if (isset($matches[1])) {
 | 
				
			||||||
 | 
					                $main = $matches[1];
 | 
				
			||||||
 | 
					                preg_match_all('/<'.$lang.'>(.*?)<\/'.$lang.'>/s', $main, $matches);
 | 
				
			||||||
 | 
					                $lst = array();
 | 
				
			||||||
 | 
					                foreach ($matches[1] as $ctx) {
 | 
				
			||||||
 | 
					                    if(stripos($ctx,$filter) !== false)
 | 
				
			||||||
 | 
					                        array_push($lst,strip_tags($ctx));
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                if(!empty($lst)) {
 | 
				
			||||||
 | 
					                    $name = $menus[basename($phpFile)]["name"];
 | 
				
			||||||
 | 
					                    $icon = $menus[basename($phpFile)]["icon"];
 | 
				
			||||||
 | 
					                    $ary = array(
 | 
				
			||||||
 | 
					                        "url" => basename($phpFile),
 | 
				
			||||||
 | 
					                        "name" => $name,
 | 
				
			||||||
 | 
					                        "icon" => $icon,
 | 
				
			||||||
 | 
					                        "filter" => array_unique($lst)
 | 
				
			||||||
 | 
					                    );
 | 
				
			||||||
 | 
					                    array_push($result,$ary);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return $this->handleRet($result, 'success', '保存成功', 'save successfully');
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    function getFilterKeywords($param) {
 | 
				
			||||||
 | 
					        $lang = self::load_conf("/link/config/lang.json");
 | 
				
			||||||
 | 
					        $url = basename($param["url"]);
 | 
				
			||||||
 | 
					        $filter = $param["filter"];
 | 
				
			||||||
 | 
					        $content = file_get_contents("/link/webflex/".$url);
 | 
				
			||||||
 | 
					        preg_match('/<main\b[^>]*>(.*?)<\/main>/s', $content, $matches);
 | 
				
			||||||
 | 
					        $result = "";
 | 
				
			||||||
 | 
					        if (isset($matches[1])) {
 | 
				
			||||||
 | 
					            $main = $matches[1];
 | 
				
			||||||
 | 
					            preg_match_all('/<'.$lang["lang"].'>(.*?)<\/'.$lang["lang"].'>/s', $main, $matches);
 | 
				
			||||||
 | 
					            foreach ($matches[1] as $ctx) {
 | 
				
			||||||
 | 
					                if(md5(strip_tags($ctx)) == $filter)
 | 
				
			||||||
 | 
					                    $result = strip_tags($ctx);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return $this->handleRet($result, 'success', '保存成功', 'save successfully');
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -10,7 +10,7 @@ require __DIR__ . '/autoload.php';
 | 
				
			||||||
$param = file_get_contents("php://input");
 | 
					$param = file_get_contents("php://input");
 | 
				
			||||||
if(is_null(json_decode($param)))
 | 
					if(is_null(json_decode($param)))
 | 
				
			||||||
    $param = json_encode($_POST);
 | 
					    $param = json_encode($_POST);
 | 
				
			||||||
$param = json_decode(urldecode($param),true);
 | 
					$param = json_decode($param,true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
try
 | 
					try
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -55,12 +55,11 @@ function copyUserSettings(&$historyConfig, &$currentConfig,&$level=0) {
 | 
				
			||||||
$configFiles = getConfFiles('/tmp/history_config');
 | 
					$configFiles = getConfFiles('/tmp/history_config');
 | 
				
			||||||
foreach ($configFiles as $historyFile) {
 | 
					foreach ($configFiles as $historyFile) {
 | 
				
			||||||
    $currentFile = str_replace("/tmp/history_config/","/link/config/",$historyFile);
 | 
					    $currentFile = str_replace("/tmp/history_config/","/link/config/",$historyFile);
 | 
				
			||||||
    if(md5_file($historyFile) == md5_file($currentFile))
 | 
					    if(!strpos($currentFile, ".json") || md5_file($historyFile) == md5_file($currentFile))
 | 
				
			||||||
        continue;
 | 
					        continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if(!strpos($currentFile, ".json") || strpos($currentFile, "version.json") ||
 | 
					    $ignoreFiles = ['version.json', 'net.json', 'net2.json', 'netEx.json', 'netManager.json', 'verLogs.json'];
 | 
				
			||||||
        strpos($currentFile, "net.json") || strpos($currentFile, "net2.json") ||
 | 
					    if (in_array(basename($currentFile), $ignoreFiles))
 | 
				
			||||||
        strpos($currentFile, "netEx.json") || strpos($currentFile,"netManager.json"))
 | 
					 | 
				
			||||||
        continue;
 | 
					        continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $historyCtx = json_decode(file_get_contents($historyFile));
 | 
					    $historyCtx = json_decode(file_get_contents($historyFile));
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -92,7 +92,7 @@
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    import { rpc,confirm } from "./assets/js/lp.utils.js";
 | 
					    import { rpc,confirm } from "./assets/js/lp.utils.js";
 | 
				
			||||||
    import { useDefaultConf,useDefLaysConf,useHardwareConf } from "./assets/js/vue.hooks.js";
 | 
					    import { useDefaultConf,useDefLaysConf,useHardwareConf } from "./assets/js/vue.hooks.js";
 | 
				
			||||||
    import { ignoreCustomElementPlugin,bootstrapSwitchComponent,nouiSliderComponent,languageOptionDirective } from "./assets/js/vue.helper.js"
 | 
					    import { ignoreCustomElementPlugin,filterKeywordPlugin,bootstrapSwitchComponent,nouiSliderComponent,languageOptionDirective } from "./assets/js/vue.helper.js"
 | 
				
			||||||
    import mutationObserver from './assets/plugins/polyfill/mutationobserver.esm.js';
 | 
					    import mutationObserver from './assets/plugins/polyfill/mutationobserver.esm.js';
 | 
				
			||||||
    import vue from "./assets/js/vue.build.js";
 | 
					    import vue from "./assets/js/vue.build.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -229,7 +229,9 @@
 | 
				
			||||||
            const onChangeLayout = () => {
 | 
					            const onChangeLayout = () => {
 | 
				
			||||||
                let layout = [];
 | 
					                let layout = [];
 | 
				
			||||||
                let srcV = [];
 | 
					                let srcV = [];
 | 
				
			||||||
                let mark = false;
 | 
					                let srcA = [];
 | 
				
			||||||
 | 
					                let markV = false;
 | 
				
			||||||
 | 
					                let markA = false;
 | 
				
			||||||
                for(let i=0;i<defLaysConf.length;i++) {
 | 
					                for(let i=0;i<defLaysConf.length;i++) {
 | 
				
			||||||
                    if(state.curLayId.value === defLaysConf[i].layId) {
 | 
					                    if(state.curLayId.value === defLaysConf[i].layId) {
 | 
				
			||||||
                        let las = defLaysConf[i].layouts;
 | 
					                        let las = defLaysConf[i].layouts;
 | 
				
			||||||
| 
						 | 
					@ -239,20 +241,27 @@
 | 
				
			||||||
                                srcV.push("-1");
 | 
					                                srcV.push("-1");
 | 
				
			||||||
                            } else {
 | 
					                            } else {
 | 
				
			||||||
                                srcV.push(las[j].id + "");
 | 
					                                srcV.push(las[j].id + "");
 | 
				
			||||||
                                mark = true;
 | 
					                                markV = true;
 | 
				
			||||||
 | 
					                                if(las[j].ado) {
 | 
				
			||||||
 | 
					                                    srcA.push(las[j].id + "")
 | 
				
			||||||
 | 
					                                    markA = true;
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                
 | 
					                
 | 
				
			||||||
                if(!mark) {
 | 
					                if(!markV) {
 | 
				
			||||||
                    if (srcV.length >= defaultConf[state.mixIndex.value].srcV.length)
 | 
					                    if (srcV.length >= defaultConf[state.mixIndex.value].srcV.length)
 | 
				
			||||||
                        srcV.splice(0, defaultConf[state.mixIndex.value].srcV.length, ...defaultConf[state.mixIndex.value].srcV);
 | 
					                        srcV.splice(0, defaultConf[state.mixIndex.value].srcV.length, ...defaultConf[state.mixIndex.value].srcV);
 | 
				
			||||||
                    else
 | 
					                    else
 | 
				
			||||||
                        srcV = defaultConf[state.mixIndex.value].srcV.slice(0, srcV.length);
 | 
					                        srcV = defaultConf[state.mixIndex.value].srcV.slice(0, srcV.length);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                defaultConf[state.mixIndex.value].srcV.splice(0, defaultConf[state.mixIndex.value].srcV.length, ...srcV);
 | 
					                defaultConf[state.mixIndex.value].srcV.splice(0, defaultConf[state.mixIndex.value].srcV.length, ...srcV);
 | 
				
			||||||
                defaultConf[state.mixIndex.value].layout.splice(0, defaultConf[state.mixIndex.value].layout.length, ...layout);
 | 
					                defaultConf[state.mixIndex.value].layout.splice(0, defaultConf[state.mixIndex.value].layout.length, ...layout);
 | 
				
			||||||
 | 
					                if(markA)
 | 
				
			||||||
 | 
					                    defaultConf[state.mixIndex.value].srcA.splice(0, defaultConf[state.mixIndex.value].srcA.length, ...srcA);
 | 
				
			||||||
                updateDefaultConf("noTip");
 | 
					                updateDefaultConf("noTip");
 | 
				
			||||||
                const options = document.querySelectorAll(`option[cn]`);
 | 
					                const options = document.querySelectorAll(`option[cn]`);
 | 
				
			||||||
                options.forEach(option => {
 | 
					                options.forEach(option => {
 | 
				
			||||||
| 
						 | 
					@ -294,6 +303,7 @@
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    app.use(ignoreCustomElementPlugin);
 | 
					    app.use(ignoreCustomElementPlugin);
 | 
				
			||||||
 | 
					    app.use(filterKeywordPlugin);
 | 
				
			||||||
    app.mount('#app');
 | 
					    app.mount('#app');
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
</body>
 | 
					</body>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,26 +1,26 @@
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  "files": {
 | 
					  "files": {
 | 
				
			||||||
    "main.css": "./mixer/static/css/main.375af961.chunk.css",
 | 
					    "main.css": "./mixer/static/css/main.1be3e506.chunk.css",
 | 
				
			||||||
    "main.js": "./mixer/static/js/main.5f5e49d2.chunk.js",
 | 
					    "main.js": "./mixer/static/js/main.6a7a8d48.chunk.js",
 | 
				
			||||||
    "main.js.map": "./mixer/static/js/main.5f5e49d2.chunk.js.map",
 | 
					    "main.js.map": "./mixer/static/js/main.6a7a8d48.chunk.js.map",
 | 
				
			||||||
    "runtime-main.js": "./mixer/static/js/runtime-main.c45edf70.js",
 | 
					    "runtime-main.js": "./mixer/static/js/runtime-main.c45edf70.js",
 | 
				
			||||||
    "runtime-main.js.map": "./mixer/static/js/runtime-main.c45edf70.js.map",
 | 
					    "runtime-main.js.map": "./mixer/static/js/runtime-main.c45edf70.js.map",
 | 
				
			||||||
    "static/css/2.0b7c8b97.chunk.css": "./mixer/static/css/2.0b7c8b97.chunk.css",
 | 
					    "static/css/2.0b7c8b97.chunk.css": "./mixer/static/css/2.0b7c8b97.chunk.css",
 | 
				
			||||||
    "static/js/2.f2aad125.chunk.js": "./mixer/static/js/2.f2aad125.chunk.js",
 | 
					    "static/js/2.edf0bfe8.chunk.js": "./mixer/static/js/2.edf0bfe8.chunk.js",
 | 
				
			||||||
    "static/js/2.f2aad125.chunk.js.map": "./mixer/static/js/2.f2aad125.chunk.js.map",
 | 
					    "static/js/2.edf0bfe8.chunk.js.map": "./mixer/static/js/2.edf0bfe8.chunk.js.map",
 | 
				
			||||||
    "index.html": "./mixer/index.html",
 | 
					    "index.html": "./mixer/index.html",
 | 
				
			||||||
    "precache-manifest.1a06c0869ff880086e3a9be9dac86c16.js": "./mixer/precache-manifest.1a06c0869ff880086e3a9be9dac86c16.js",
 | 
					    "precache-manifest.abb42691e68409f9e64fbfb6933199f3.js": "./mixer/precache-manifest.abb42691e68409f9e64fbfb6933199f3.js",
 | 
				
			||||||
    "service-worker.js": "./mixer/service-worker.js",
 | 
					    "service-worker.js": "./mixer/service-worker.js",
 | 
				
			||||||
    "static/css/2.0b7c8b97.chunk.css.map": "./mixer/static/css/2.0b7c8b97.chunk.css.map",
 | 
					    "static/css/2.0b7c8b97.chunk.css.map": "./mixer/static/css/2.0b7c8b97.chunk.css.map",
 | 
				
			||||||
    "static/css/main.375af961.chunk.css.map": "./mixer/static/css/main.375af961.chunk.css.map",
 | 
					    "static/css/main.1be3e506.chunk.css.map": "./mixer/static/css/main.1be3e506.chunk.css.map",
 | 
				
			||||||
    "static/js/2.f2aad125.chunk.js.LICENSE.txt": "./mixer/static/js/2.f2aad125.chunk.js.LICENSE.txt",
 | 
					    "static/js/2.edf0bfe8.chunk.js.LICENSE.txt": "./mixer/static/js/2.edf0bfe8.chunk.js.LICENSE.txt",
 | 
				
			||||||
    "static/js/main.5f5e49d2.chunk.js.LICENSE.txt": "./mixer/static/js/main.5f5e49d2.chunk.js.LICENSE.txt"
 | 
					    "static/js/main.6a7a8d48.chunk.js.LICENSE.txt": "./mixer/static/js/main.6a7a8d48.chunk.js.LICENSE.txt"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "entrypoints": [
 | 
					  "entrypoints": [
 | 
				
			||||||
    "static/js/runtime-main.c45edf70.js",
 | 
					    "static/js/runtime-main.c45edf70.js",
 | 
				
			||||||
    "static/css/2.0b7c8b97.chunk.css",
 | 
					    "static/css/2.0b7c8b97.chunk.css",
 | 
				
			||||||
    "static/js/2.f2aad125.chunk.js",
 | 
					    "static/js/2.edf0bfe8.chunk.js",
 | 
				
			||||||
    "static/css/main.375af961.chunk.css",
 | 
					    "static/css/main.1be3e506.chunk.css",
 | 
				
			||||||
    "static/js/main.5f5e49d2.chunk.js"
 | 
					    "static/js/main.6a7a8d48.chunk.js"
 | 
				
			||||||
  ]
 | 
					  ]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -1 +1 @@
 | 
				
			||||||
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="./mixer/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="./mixer/logo192.png"/><link rel="manifest" href="./mixer/manifest.json"/><title>React App</title><link href="./mixer/static/css/2.0b7c8b97.chunk.css" rel="stylesheet"><link href="./mixer/static/css/main.375af961.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script>!function(e){function r(r){for(var n,i,l=r[0],f=r[1],a=r[2],c=0,s=[];c<l.length;c++)i=l[c],Object.prototype.hasOwnProperty.call(o,i)&&o[i]&&s.push(o[i][0]),o[i]=0;for(n in f)Object.prototype.hasOwnProperty.call(f,n)&&(e[n]=f[n]);for(p&&p(r);s.length;)s.shift()();return u.push.apply(u,a||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,l=1;l<t.length;l++){var f=t[l];0!==o[f]&&(n=!1)}n&&(u.splice(r--,1),e=i(i.s=t[0]))}return e}var n={},o={1:0},u=[];function i(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,i),t.l=!0,t.exports}i.m=e,i.c=n,i.d=function(e,r,t){i.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,r){if(1&r&&(e=i(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(i.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)i.d(t,n,function(r){return e[r]}.bind(null,n));return t},i.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(r,"a",r),r},i.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},i.p="./mixer/";var l=this.webpackJsonpmixer=this.webpackJsonpmixer||[],f=l.push.bind(l);l.push=r,l=l.slice();for(var a=0;a<l.length;a++)r(l[a]);var p=f;t()}([])</script><script src="./mixer/static/js/2.f2aad125.chunk.js"></script><script src="./mixer/static/js/main.5f5e49d2.chunk.js"></script></body></html>
 | 
					<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="./mixer/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="./mixer/logo192.png"/><link rel="manifest" href="./mixer/manifest.json"/><title>React App</title><link href="./mixer/static/css/2.0b7c8b97.chunk.css" rel="stylesheet"><link href="./mixer/static/css/main.1be3e506.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script>!function(e){function r(r){for(var n,i,l=r[0],f=r[1],a=r[2],c=0,s=[];c<l.length;c++)i=l[c],Object.prototype.hasOwnProperty.call(o,i)&&o[i]&&s.push(o[i][0]),o[i]=0;for(n in f)Object.prototype.hasOwnProperty.call(f,n)&&(e[n]=f[n]);for(p&&p(r);s.length;)s.shift()();return u.push.apply(u,a||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,l=1;l<t.length;l++){var f=t[l];0!==o[f]&&(n=!1)}n&&(u.splice(r--,1),e=i(i.s=t[0]))}return e}var n={},o={1:0},u=[];function i(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,i),t.l=!0,t.exports}i.m=e,i.c=n,i.d=function(e,r,t){i.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,r){if(1&r&&(e=i(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(i.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)i.d(t,n,function(r){return e[r]}.bind(null,n));return t},i.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(r,"a",r),r},i.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},i.p="./mixer/";var l=this.webpackJsonpmixer=this.webpackJsonpmixer||[],f=l.push.bind(l);l.push=r,l=l.slice();for(var a=0;a<l.length;a++)r(l[a]);var p=f;t()}([])</script><script src="./mixer/static/js/2.edf0bfe8.chunk.js"></script><script src="./mixer/static/js/main.6a7a8d48.chunk.js"></script></body></html>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,34 @@
 | 
				
			||||||
 | 
					self.__precacheManifest = (self.__precacheManifest || []).concat([
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "revision": "c478e196f0e356e1ecb0908ac7d5cfbb",
 | 
				
			||||||
 | 
					    "url": "./mixer/index.html"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "revision": "58d7b02ebe439df1498d",
 | 
				
			||||||
 | 
					    "url": "./mixer/static/css/2.0b7c8b97.chunk.css"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "revision": "5d634dc6ddb3fad90f05",
 | 
				
			||||||
 | 
					    "url": "./mixer/static/css/main.1be3e506.chunk.css"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "revision": "58d7b02ebe439df1498d",
 | 
				
			||||||
 | 
					    "url": "./mixer/static/js/2.edf0bfe8.chunk.js"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "revision": "4390933dc3b3a92d4f565fd4f47c3cd7",
 | 
				
			||||||
 | 
					    "url": "./mixer/static/js/2.edf0bfe8.chunk.js.LICENSE.txt"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "revision": "5d634dc6ddb3fad90f05",
 | 
				
			||||||
 | 
					    "url": "./mixer/static/js/main.6a7a8d48.chunk.js"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "revision": "5c84e2504d745b1010aeb6ce2aad7554",
 | 
				
			||||||
 | 
					    "url": "./mixer/static/js/main.6a7a8d48.chunk.js.LICENSE.txt"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "revision": "96af6c8d9af51963848a",
 | 
				
			||||||
 | 
					    "url": "./mixer/static/js/runtime-main.c45edf70.js"
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					]);
 | 
				
			||||||
| 
						 | 
					@ -14,7 +14,7 @@
 | 
				
			||||||
importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js");
 | 
					importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
importScripts(
 | 
					importScripts(
 | 
				
			||||||
  "./mixer/precache-manifest.1a06c0869ff880086e3a9be9dac86c16.js"
 | 
					  "./mixer/precache-manifest.abb42691e68409f9e64fbfb6933199f3.js"
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
self.addEventListener('message', (event) => {
 | 
					self.addEventListener('message', (event) => {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| 
						 | 
					@ -0,0 +1,80 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					object-assign
 | 
				
			||||||
 | 
					(c) Sindre Sorhus
 | 
				
			||||||
 | 
					@license MIT
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					  Copyright (c) 2018 Jed Watson.
 | 
				
			||||||
 | 
					  Licensed under the MIT License (MIT), see
 | 
				
			||||||
 | 
					  http://jedwatson.github.io/classnames
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 * cookie
 | 
				
			||||||
 | 
					 * Copyright(c) 2012-2014 Roman Shtylman
 | 
				
			||||||
 | 
					 * Copyright(c) 2015 Douglas Christopher Wilson
 | 
				
			||||||
 | 
					 * MIT Licensed
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*! *****************************************************************************
 | 
				
			||||||
 | 
					Copyright (c) Microsoft Corporation. All rights reserved.
 | 
				
			||||||
 | 
					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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 | 
				
			||||||
 | 
					KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
 | 
				
			||||||
 | 
					WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
 | 
				
			||||||
 | 
					MERCHANTABLITY OR NON-INFRINGEMENT.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See the Apache Version 2.0 License for specific language governing permissions
 | 
				
			||||||
 | 
					and limitations under the License.
 | 
				
			||||||
 | 
					***************************************************************************** */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @license React v0.19.1
 | 
				
			||||||
 | 
					 * scheduler.production.min.js
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Copyright (c) Facebook, Inc. and its affiliates.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This source code is licensed under the MIT license found in the
 | 
				
			||||||
 | 
					 * LICENSE file in the root directory of this source tree.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @license React v16.13.1
 | 
				
			||||||
 | 
					 * react-is.production.min.js
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Copyright (c) Facebook, Inc. and its affiliates.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This source code is licensed under the MIT license found in the
 | 
				
			||||||
 | 
					 * LICENSE file in the root directory of this source tree.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @license React v16.14.0
 | 
				
			||||||
 | 
					 * react-dom.production.min.js
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Copyright (c) Facebook, Inc. and its affiliates.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This source code is licensed under the MIT license found in the
 | 
				
			||||||
 | 
					 * LICENSE file in the root directory of this source tree.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @license React v16.14.0
 | 
				
			||||||
 | 
					 * react.production.min.js
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Copyright (c) Facebook, Inc. and its affiliates.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This source code is licensed under the MIT license found in the
 | 
				
			||||||
 | 
					 * LICENSE file in the root directory of this source tree.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @license React v17.0.2
 | 
				
			||||||
 | 
					 * react-is.production.min.js
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Copyright (c) Facebook, Inc. and its affiliates.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This source code is licensed under the MIT license found in the
 | 
				
			||||||
 | 
					 * LICENSE file in the root directory of this source tree.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| 
						 | 
					@ -0,0 +1,26 @@
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 * Sizzle CSS Selector Engine v2.3.4
 | 
				
			||||||
 | 
					 * https://sizzlejs.com/
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Copyright JS Foundation and other contributors
 | 
				
			||||||
 | 
					 * Released under the MIT license
 | 
				
			||||||
 | 
					 * https://js.foundation/
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Date: 2019-04-08
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 * jQuery JavaScript Library v3.4.1
 | 
				
			||||||
 | 
					 * https://jquery.com/
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Includes Sizzle.js
 | 
				
			||||||
 | 
					 * https://sizzlejs.com/
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Copyright JS Foundation and other contributors
 | 
				
			||||||
 | 
					 * Released under the MIT license
 | 
				
			||||||
 | 
					 * https://jquery.org/license
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Date: 2019-05-01T21:04Z
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */
 | 
				
			||||||
| 
						 | 
					@ -98,7 +98,7 @@
 | 
				
			||||||
<script type="module">
 | 
					<script type="module">
 | 
				
			||||||
    import { rpc,alertMsg } from "./assets/js/lp.utils.js";
 | 
					    import { rpc,alertMsg } from "./assets/js/lp.utils.js";
 | 
				
			||||||
    import { useDefaultConf } from "./assets/js/vue.hooks.js";
 | 
					    import { useDefaultConf } from "./assets/js/vue.hooks.js";
 | 
				
			||||||
    import { ignoreCustomElementPlugin,bootstrapSwitchComponent } from "./assets/js/vue.helper.js"
 | 
					    import { ignoreCustomElementPlugin,filterKeywordPlugin,bootstrapSwitchComponent } from "./assets/js/vue.helper.js"
 | 
				
			||||||
    import vue from "./assets/js/vue.build.js";
 | 
					    import vue from "./assets/js/vue.build.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const {createApp,ref,reactive,watchEffect,onMounted,nextTick} = vue;
 | 
					    const {createApp,ref,reactive,watchEffect,onMounted,nextTick} = vue;
 | 
				
			||||||
| 
						 | 
					@ -172,6 +172,7 @@
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    app.use(ignoreCustomElementPlugin);
 | 
					    app.use(ignoreCustomElementPlugin);
 | 
				
			||||||
 | 
					    app.use(filterKeywordPlugin);
 | 
				
			||||||
    app.mount('#app');
 | 
					    app.mount('#app');
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
</body>
 | 
					</body>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -473,7 +473,7 @@
 | 
				
			||||||
    import vue from "./assets/js/vue.build.js";
 | 
					    import vue from "./assets/js/vue.build.js";
 | 
				
			||||||
    import { alertMsg,rpc5,clearReactiveArray,isEmpty } from "./assets/js/lp.utils.js";
 | 
					    import { alertMsg,rpc5,clearReactiveArray,isEmpty } from "./assets/js/lp.utils.js";
 | 
				
			||||||
    import {useDefaultConf, usePtzConf} from "./assets/js/vue.hooks.js";
 | 
					    import {useDefaultConf, usePtzConf} from "./assets/js/vue.hooks.js";
 | 
				
			||||||
    import { ignoreCustomElementPlugin,h5PlayerComponent,bootstrapSwitchComponent,nouiSliderComponent,ptzDirectComponent,languageOptionDirective,loadingButtonComponent,customModalComponent } from "./assets/js/vue.helper.js"
 | 
					    import { ignoreCustomElementPlugin,filterKeywordPlugin,h5PlayerComponent,bootstrapSwitchComponent,nouiSliderComponent,ptzDirectComponent,languageOptionDirective,loadingButtonComponent,customModalComponent } from "./assets/js/vue.helper.js"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const {createApp,ref,reactive,watchEffect,computed,onMounted} = vue;
 | 
					    const {createApp,ref,reactive,watchEffect,computed,onMounted} = vue;
 | 
				
			||||||
    const app = createApp({
 | 
					    const app = createApp({
 | 
				
			||||||
| 
						 | 
					@ -877,6 +877,7 @@
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    app.use(ignoreCustomElementPlugin);
 | 
					    app.use(ignoreCustomElementPlugin);
 | 
				
			||||||
 | 
					    app.use(filterKeywordPlugin);
 | 
				
			||||||
    app.mount('#app');
 | 
					    app.mount('#app');
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
</body>
 | 
					</body>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -360,7 +360,7 @@
 | 
				
			||||||
<script type="module">
 | 
					<script type="module">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    import { useDefaultConf,useHardwareConf } from "./assets/js/vue.hooks.js";
 | 
					    import { useDefaultConf,useHardwareConf } from "./assets/js/vue.hooks.js";
 | 
				
			||||||
    import { ignoreCustomElementPlugin,bootstrapSwitchComponent,nouiSliderComponent,languageOptionDirective } from "./assets/js/vue.helper.js"
 | 
					    import { ignoreCustomElementPlugin,filterKeywordPlugin,bootstrapSwitchComponent,nouiSliderComponent,languageOptionDirective } from "./assets/js/vue.helper.js"
 | 
				
			||||||
    import vue from "./assets/js/vue.build.js";
 | 
					    import vue from "./assets/js/vue.build.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const {createApp,ref,reactive,watchEffect,computed,onMounted} = vue;
 | 
					    const {createApp,ref,reactive,watchEffect,computed,onMounted} = vue;
 | 
				
			||||||
| 
						 | 
					@ -396,6 +396,7 @@
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    app.use(ignoreCustomElementPlugin);
 | 
					    app.use(ignoreCustomElementPlugin);
 | 
				
			||||||
 | 
					    app.use(filterKeywordPlugin);
 | 
				
			||||||
    app.mount('#app');
 | 
					    app.mount('#app');
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
</body>
 | 
					</body>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -404,7 +404,7 @@
 | 
				
			||||||
<script type="module">
 | 
					<script type="module">
 | 
				
			||||||
    import { rpc,alertMsg,confirm,func } from "./assets/js/lp.utils.js";
 | 
					    import { rpc,alertMsg,confirm,func } from "./assets/js/lp.utils.js";
 | 
				
			||||||
    import { useDefaultConf,useOverlayConf,useResConf } from "./assets/js/vue.hooks.js";
 | 
					    import { useDefaultConf,useOverlayConf,useResConf } from "./assets/js/vue.hooks.js";
 | 
				
			||||||
    import { ignoreCustomElementPlugin,bootstrapSwitchComponent,nouiSliderComponent,vueColorPickerComponent,uploadModalComponent } from "./assets/js/vue.helper.js"
 | 
					    import { ignoreCustomElementPlugin,filterKeywordPlugin,bootstrapSwitchComponent,nouiSliderComponent,vueColorPickerComponent,uploadModalComponent } from "./assets/js/vue.helper.js"
 | 
				
			||||||
    import vue from "./assets/js/vue.build.js";
 | 
					    import vue from "./assets/js/vue.build.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const {createApp,ref,reactive,watchEffect,computed} = vue;
 | 
					    const {createApp,ref,reactive,watchEffect,computed} = vue;
 | 
				
			||||||
| 
						 | 
					@ -572,6 +572,7 @@
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    app.use(ignoreCustomElementPlugin);
 | 
					    app.use(ignoreCustomElementPlugin);
 | 
				
			||||||
 | 
					    app.use(filterKeywordPlugin);
 | 
				
			||||||
    app.mount('#app');
 | 
					    app.mount('#app');
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
</body>
 | 
					</body>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -63,7 +63,7 @@
 | 
				
			||||||
<?php include ("./public/foot.inc") ?>
 | 
					<?php include ("./public/foot.inc") ?>
 | 
				
			||||||
<script type="module">
 | 
					<script type="module">
 | 
				
			||||||
    import { useDefaultConf } from "./assets/js/vue.hooks.js";
 | 
					    import { useDefaultConf } from "./assets/js/vue.hooks.js";
 | 
				
			||||||
    import { ignoreCustomElementPlugin,h5PlayerComponent } from "./assets/js/vue.helper.js"
 | 
					    import { ignoreCustomElementPlugin,filterKeywordPlugin,h5PlayerComponent } from "./assets/js/vue.helper.js"
 | 
				
			||||||
    import vue from "./assets/js/vue.build.js";
 | 
					    import vue from "./assets/js/vue.build.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const {createApp,ref,reactive,watch,watchEffect,computed,onMounted} = vue;
 | 
					    const {createApp,ref,reactive,watch,watchEffect,computed,onMounted} = vue;
 | 
				
			||||||
| 
						 | 
					@ -125,6 +125,7 @@
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    app.use(ignoreCustomElementPlugin);
 | 
					    app.use(ignoreCustomElementPlugin);
 | 
				
			||||||
 | 
					    app.use(filterKeywordPlugin);
 | 
				
			||||||
    app.mount('#app');
 | 
					    app.mount('#app');
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
</body>
 | 
					</body>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,12 +5,12 @@
 | 
				
			||||||
                <div class="btn-toggle-menu" @click="onToggleMenu">
 | 
					                <div class="btn-toggle-menu" @click="onToggleMenu">
 | 
				
			||||||
                    <i class="fa-solid fa-bars"></i>
 | 
					                    <i class="fa-solid fa-bars"></i>
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
<!--                <div class="position-relative search-bar d-lg-block d-none" data-bs-toggle="modal" data-bs-target="#searchModal">-->
 | 
					                <div class="position-relative search-bar d-lg-block d-none" @click="onShowSearchModal">
 | 
				
			||||||
<!--                    <input class="form-control form-control-sm rounded-5 px-5" disabled type="search" placeholder="Search">-->
 | 
					                    <input class="form-control form-control-sm rounded-5 px-5 lp-cursor-pointer" type="search" :placeholder="placeholderVal" readonly>
 | 
				
			||||||
<!--                    <span class="position-absolute ms-3 translate-middle-y start-0 top-50">-->
 | 
					                    <span class="position-absolute ms-3 translate-middle-y start-0 top-50">
 | 
				
			||||||
<!--                    <i class="fa fa-search"></i>-->
 | 
					                        <i class="fa fa-search"></i>
 | 
				
			||||||
<!--                </span>-->
 | 
					                    </span>
 | 
				
			||||||
<!--                </div>-->
 | 
					                </div>
 | 
				
			||||||
                <ul class="navbar-nav top-right-menu gap-2">
 | 
					                <ul class="navbar-nav top-right-menu gap-2">
 | 
				
			||||||
                    <li class="nav-item">
 | 
					                    <li class="nav-item">
 | 
				
			||||||
                        <a class="nav-link" style="font-size: 20px;">
 | 
					                        <a class="nav-link" style="font-size: 20px;">
 | 
				
			||||||
| 
						 | 
					@ -24,7 +24,7 @@
 | 
				
			||||||
                            <i v-else class="fa-regular fa-sun" @click="updateThemeConf('default')"></i>
 | 
					                            <i v-else class="fa-regular fa-sun" @click="updateThemeConf('default')"></i>
 | 
				
			||||||
                        </a>
 | 
					                        </a>
 | 
				
			||||||
                    </li>
 | 
					                    </li>
 | 
				
			||||||
                    <li class="nav-item" v-if="Object.keys(hardwareConf).length > 0 && hardwareConf.fac !== 'REC1'">
 | 
					                    <li class="nav-item" v-if="Object.keys(hardwareConf).length > 0 && (hardwareConf.fac !== 'REC1' || hardwareConf.fac !== 'ENC8')">
 | 
				
			||||||
                        <a class="nav-link" style="font-size: 19px;" @click="changeWeb">
 | 
					                        <a class="nav-link" style="font-size: 19px;" @click="changeWeb">
 | 
				
			||||||
                            <i class="fa-solid fa-arrow-right-arrow-left"></i>
 | 
					                            <i class="fa-solid fa-arrow-right-arrow-left"></i>
 | 
				
			||||||
                        </a>
 | 
					                        </a>
 | 
				
			||||||
| 
						 | 
					@ -83,7 +83,7 @@
 | 
				
			||||||
                    <li>
 | 
					                    <li>
 | 
				
			||||||
                        <a href="push.php">
 | 
					                        <a href="push.php">
 | 
				
			||||||
                            <div class="parent-icon"><i class="fa-solid fa-fan"></i></div>
 | 
					                            <div class="parent-icon"><i class="fa-solid fa-fan"></i></div>
 | 
				
			||||||
                            <div class="menu-title"><cn>直播推流</cn><en>Multiple Push</en></div>
 | 
					                            <div class="menu-title"><cn>直播推流</cn><en>Push</en></div>
 | 
				
			||||||
                        </a>
 | 
					                        </a>
 | 
				
			||||||
                    </li>
 | 
					                    </li>
 | 
				
			||||||
                    <li v-if="Object.keys(hardwareConf).length > 0 && hardwareConf.function.videoOut">
 | 
					                    <li v-if="Object.keys(hardwareConf).length > 0 && hardwareConf.function.videoOut">
 | 
				
			||||||
| 
						 | 
					@ -111,7 +111,7 @@
 | 
				
			||||||
                            <div class="menu-title"><cn>视频混合</cn><en>Video mix</en></div>
 | 
					                            <div class="menu-title"><cn>视频混合</cn><en>Video mix</en></div>
 | 
				
			||||||
                        </a>
 | 
					                        </a>
 | 
				
			||||||
                    </li>
 | 
					                    </li>
 | 
				
			||||||
                    <li class="menu-label"><cn>其他设置</cn><en>Exte0nd</en></li>
 | 
					                    <li class="menu-label"><cn>其他设置</cn><en>OTHER</en></li>
 | 
				
			||||||
                    <li>
 | 
					                    <li>
 | 
				
			||||||
                        <a href="javascript:;" class="has-arrow">
 | 
					                        <a href="javascript:;" class="has-arrow">
 | 
				
			||||||
                            <div class="parent-icon"><i class="fa-solid fa-puzzle-piece ms-1 mb-1"></i></div>
 | 
					                            <div class="parent-icon"><i class="fa-solid fa-puzzle-piece ms-1 mb-1"></i></div>
 | 
				
			||||||
| 
						 | 
					@ -171,7 +171,7 @@
 | 
				
			||||||
                            <li>
 | 
					                            <li>
 | 
				
			||||||
                                <a href="service.php">
 | 
					                                <a href="service.php">
 | 
				
			||||||
                                    <i class="fa-solid fa-cloud"></i>
 | 
					                                    <i class="fa-solid fa-cloud"></i>
 | 
				
			||||||
                                    <div class="menu-title"><cn>服务设置</cn><en>Reverse Proxy</en></div>
 | 
					                                    <div class="menu-title"><cn>服务设置</cn><en>Service</en></div>
 | 
				
			||||||
                                </a>
 | 
					                                </a>
 | 
				
			||||||
                            </li>
 | 
					                            </li>
 | 
				
			||||||
                        </ul>
 | 
					                        </ul>
 | 
				
			||||||
| 
						 | 
					@ -185,25 +185,25 @@
 | 
				
			||||||
                            <li>
 | 
					                            <li>
 | 
				
			||||||
                                <a href="gb28181.php">
 | 
					                                <a href="gb28181.php">
 | 
				
			||||||
                                    <i class="fa-solid fa-cloud"></i>
 | 
					                                    <i class="fa-solid fa-cloud"></i>
 | 
				
			||||||
                                    <div class="menu-title">GB28181</div>
 | 
					                                    <div class="menu-title"><cn>GB28181</cn><en>GB28181</en></div>
 | 
				
			||||||
                                </a>
 | 
					                                </a>
 | 
				
			||||||
                            </li>
 | 
					                            </li>
 | 
				
			||||||
                            <li>
 | 
					                            <li>
 | 
				
			||||||
                                <a href="roi.php">
 | 
					                                <a href="roi.php">
 | 
				
			||||||
                                    <i class="fa-solid fa-circle-user"></i>
 | 
					                                    <i class="fa-solid fa-circle-user"></i>
 | 
				
			||||||
                                    <div class="menu-title">ROI</div>
 | 
					                                    <div class="menu-title"><cn>ROI</cn><en>ROI</en></div>
 | 
				
			||||||
                                </a>
 | 
					                                </a>
 | 
				
			||||||
                            </li>
 | 
					                            </li>
 | 
				
			||||||
                            <li>
 | 
					                            <li>
 | 
				
			||||||
                                <a href="insta360.php">
 | 
					                                <a href="insta360.php">
 | 
				
			||||||
                                    <i class="fa-solid fa-camera"></i>
 | 
					                                    <i class="fa-solid fa-camera"></i>
 | 
				
			||||||
                                    <div class="menu-title">Insta360 Link</div>
 | 
					                                    <div class="menu-title"><cn>Insta360 Link</cn><en>Insta360 Link</en></div>
 | 
				
			||||||
                                </a>
 | 
					                                </a>
 | 
				
			||||||
                            </li>
 | 
					                            </li>
 | 
				
			||||||
                            <li>
 | 
					                            <li>
 | 
				
			||||||
                                <a href="onvif.php">
 | 
					                                <a href="onvif.php">
 | 
				
			||||||
                                    <i class="fa fa-video-camera"></i>
 | 
					                                    <i class="fa fa-video-camera"></i>
 | 
				
			||||||
                                    <div class="menu-title">Onvif PTZ</div>
 | 
					                                    <div class="menu-title"><cn>Onvif PTZ</cn><en>Onvif PTZ</en></div>
 | 
				
			||||||
                                </a>
 | 
					                                </a>
 | 
				
			||||||
                            </li>
 | 
					                            </li>
 | 
				
			||||||
                            <li>
 | 
					                            <li>
 | 
				
			||||||
| 
						 | 
					@ -237,20 +237,68 @@
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
        </aside>
 | 
					        </aside>
 | 
				
			||||||
 | 
					        <div class="modal fade" tabindex="-1" aria-hidden="true" ref="modal">
 | 
				
			||||||
 | 
					            <div class="modal-dialog modal-dialog-centered modal-dialog-scrollable modal-lg" style="z-index: 99999">
 | 
				
			||||||
 | 
					                <div class="modal-content">
 | 
				
			||||||
 | 
					                    <div class="modal-header gap-2">
 | 
				
			||||||
 | 
					                        <div class="position-relative popup-search w-100">
 | 
				
			||||||
 | 
					                            <input class="form-control form-control-lg ps-5 border border-2 search-input" type="text" v-model.trim="searchVal">
 | 
				
			||||||
 | 
					                            <span class="position-absolute ms-3 translate-middle-y start-0 top-50">
 | 
				
			||||||
 | 
					                                <i class="fa fa-search search-bar-icon"></i>
 | 
				
			||||||
 | 
					                            </span>
 | 
				
			||||||
 | 
					                        </div>
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					                    <div class="modal-body" style="height: 350px">
 | 
				
			||||||
 | 
					                        <div data-simplebar>
 | 
				
			||||||
 | 
					                            <div v-if="searchRes.length > 0" class="search-list">
 | 
				
			||||||
 | 
					                                <div class="mb-4" v-for="(item,index) in searchRes" :key="index">
 | 
				
			||||||
 | 
					                                    <div class="d-flex">
 | 
				
			||||||
 | 
					                                        <div class="search-item-icon"><i :class="['font-14',item.icon]"></i></div>
 | 
				
			||||||
 | 
					                                        <span class="mb-2 ms-2 font-16">{{item.name}}</span>
 | 
				
			||||||
 | 
					                                    </div>
 | 
				
			||||||
 | 
					                                    <div class="list-group">
 | 
				
			||||||
 | 
					                                        <a v-for="(itm,idx) in item.filter" :key="idx" @click="onRedirect(item.url,itm)" class="list-group-item list-group-item-action align-items-center d-flex gap-2 lp-cursor-pointer search-item-option">{{itm}}</a>
 | 
				
			||||||
 | 
					                                    </div>
 | 
				
			||||||
 | 
					                                </div>
 | 
				
			||||||
 | 
					                            </div>
 | 
				
			||||||
 | 
					                            <div v-else class="h-100 lp-align-center">
 | 
				
			||||||
 | 
					                                <div>
 | 
				
			||||||
 | 
					                                    <div class="row">
 | 
				
			||||||
 | 
					                                        <empty-box></empty-box>
 | 
				
			||||||
 | 
					                                    </div>
 | 
				
			||||||
 | 
					                                    <div class="row mt-3">
 | 
				
			||||||
 | 
					                                        <div class="text-center search-tip-text">
 | 
				
			||||||
 | 
					                                            <cn>请输入要检索的标题关键字</cn>
 | 
				
			||||||
 | 
					                                            <en>Please enter the keyword you want to search</en>
 | 
				
			||||||
 | 
					                                        </div>
 | 
				
			||||||
 | 
					                                    </div>
 | 
				
			||||||
 | 
					                                </div>
 | 
				
			||||||
 | 
					                            </div>
 | 
				
			||||||
 | 
					                        </div>
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            <div class="modal-backdrop show" @click="onHideSearchModal"></div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
    </menu>
 | 
					    </menu>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
 | 
					<script src="../assets/plugins/passive/passive.events.min.js"></script>
 | 
				
			||||||
<script type="module">
 | 
					<script type="module">
 | 
				
			||||||
    import vue from "../assets/js/vue.build.js";
 | 
					    import vue from "../assets/js/vue.build.js";
 | 
				
			||||||
    import { func,updateSysLanguage,confirm } from "../assets/js/lp.utils.js";
 | 
					    import Metismenu from '../assets/plugins/metismenu/js/metisMenu.esm.js';
 | 
				
			||||||
 | 
					    import mutationObserver from "../assets/plugins/polyfill/mutationobserver.esm.js";
 | 
				
			||||||
 | 
					    import { func,updateSysLanguage,confirm,isEmpty,clearReactiveArray } from "../assets/js/lp.utils.js";
 | 
				
			||||||
    import { useThemeConf,useHardwareConf } from "../assets/js/vue.hooks.js"
 | 
					    import { useThemeConf,useHardwareConf } from "../assets/js/vue.hooks.js"
 | 
				
			||||||
    import { ignoreCustomElementPlugin,usbOptionComponent } from "../assets/js/vue.helper.js"
 | 
					    import { ignoreCustomElementPlugin,usbOptionComponent } from "../assets/js/vue.helper.js"
 | 
				
			||||||
    import Metismenu from '../assets/plugins/metismenu/js/metisMenu.esm.js';
 | 
					    import { emptyBoxFlagComponent } from "../assets/js/vue.flags.js"
 | 
				
			||||||
 | 
					    import { md5 } from "../assets/plugins/md5/js.md5.esm.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const { createApp,ref,watchEffect,watch,nextTick,onMounted } = vue;
 | 
					
 | 
				
			||||||
 | 
					    const { createApp,ref,reactive,watchEffect,watch,nextTick,onMounted } = vue;
 | 
				
			||||||
    const menu = createApp({
 | 
					    const menu = createApp({
 | 
				
			||||||
        components:{
 | 
					        components:{
 | 
				
			||||||
            "usb-option": usbOptionComponent,
 | 
					            "usb-option": usbOptionComponent,
 | 
				
			||||||
 | 
					            "empty-box": emptyBoxFlagComponent
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        setup() {
 | 
					        setup() {
 | 
				
			||||||
           const { themeConf,updateThemeConf } = useThemeConf();
 | 
					           const { themeConf,updateThemeConf } = useThemeConf();
 | 
				
			||||||
| 
						 | 
					@ -260,7 +308,12 @@
 | 
				
			||||||
               metismenu: ref(null),
 | 
					               metismenu: ref(null),
 | 
				
			||||||
               isMenuToggled : ref(false),
 | 
					               isMenuToggled : ref(false),
 | 
				
			||||||
               isSidebarHovered: ref(false),
 | 
					               isSidebarHovered: ref(false),
 | 
				
			||||||
               showFormatModal: ref(false)
 | 
					               showFormatModal: ref(false),
 | 
				
			||||||
 | 
					               modal: ref(null),
 | 
				
			||||||
 | 
					               bsModal: ref(null),
 | 
				
			||||||
 | 
					               searchVal: ref(""),
 | 
				
			||||||
 | 
					               searchRes: reactive([]),
 | 
				
			||||||
 | 
					               placeholderVal: ref("关键字")
 | 
				
			||||||
           }
 | 
					           }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
           const onLogout = () => {
 | 
					           const onLogout = () => {
 | 
				
			||||||
| 
						 | 
					@ -294,7 +347,21 @@
 | 
				
			||||||
               }
 | 
					               }
 | 
				
			||||||
           })
 | 
					           })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
           watchEffect(()=>{
 | 
					            watch(state.searchVal, () => {
 | 
				
			||||||
 | 
					                if (isEmpty(state.searchVal.value)) {
 | 
				
			||||||
 | 
					                    clearReactiveArray(state.searchRes);
 | 
				
			||||||
 | 
					                    return;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                const html = document.querySelector("html");
 | 
				
			||||||
 | 
					                const lang = html.getAttribute('data-bs-language');
 | 
				
			||||||
 | 
					                const param = {"lang": lang, "filter": state.searchVal.value};
 | 
				
			||||||
 | 
					                func("/root/filterKeywords", param).then(result => {
 | 
				
			||||||
 | 
					                    clearReactiveArray(state.searchRes);
 | 
				
			||||||
 | 
					                    state.searchRes.push(...result.data);
 | 
				
			||||||
 | 
					                });
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					           watch(state.isMenuToggled,() => {
 | 
				
			||||||
               const body = document.querySelector('body');
 | 
					               const body = document.querySelector('body');
 | 
				
			||||||
               if(state.isMenuToggled.value)
 | 
					               if(state.isMenuToggled.value)
 | 
				
			||||||
                   body.classList.add('toggled');
 | 
					                   body.classList.add('toggled');
 | 
				
			||||||
| 
						 | 
					@ -343,12 +410,48 @@
 | 
				
			||||||
               });
 | 
					               });
 | 
				
			||||||
           }
 | 
					           }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            const onShowSearchModal = () => {
 | 
				
			||||||
 | 
					                state.bsModal.value.show();
 | 
				
			||||||
 | 
					                const ele = document.querySelector("body > .modal-backdrop");
 | 
				
			||||||
 | 
					                ele.remove();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            const onHideSearchModal = () => {
 | 
				
			||||||
 | 
					                state.bsModal.value.hide();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            const onRedirect = (url,data) => {
 | 
				
			||||||
 | 
					                location.href = url+"?filter="+md5(data);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
           onMounted(()=>{
 | 
					           onMounted(()=>{
 | 
				
			||||||
               new Metismenu(state.metismenu.value);
 | 
					               new Metismenu(state.metismenu.value);
 | 
				
			||||||
 | 
					               state.bsModal.value = new bootstrap.Modal(state.modal.value);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					               const update = () => {
 | 
				
			||||||
 | 
					                   const lang = html.getAttribute('data-bs-language');
 | 
				
			||||||
 | 
					                   if(lang === "cn")
 | 
				
			||||||
 | 
					                       state.placeholderVal.value = "关键字";
 | 
				
			||||||
 | 
					                   else
 | 
				
			||||||
 | 
					                       state.placeholderVal.value = "Search";
 | 
				
			||||||
 | 
					               }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					               const html = document.querySelector('html');
 | 
				
			||||||
 | 
					               update();
 | 
				
			||||||
 | 
					               const observer = new mutationObserver(() => {
 | 
				
			||||||
 | 
					                   update();
 | 
				
			||||||
 | 
					               });
 | 
				
			||||||
 | 
					               const config = {
 | 
				
			||||||
 | 
					                   attributes: true,
 | 
				
			||||||
 | 
					                   attributeFilter: ["data-bs-language"],
 | 
				
			||||||
 | 
					                   subtree: false
 | 
				
			||||||
 | 
					               };
 | 
				
			||||||
 | 
					               observer.observe(html, config);
 | 
				
			||||||
           });
 | 
					           });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
           return {...state,hardwareConf,themeConf,updateThemeConf,onHrefDash,onLogout,onToggleMenu,
 | 
					           return {...state,hardwareConf,themeConf,updateThemeConf,onHrefDash,onLogout,onToggleMenu,
 | 
				
			||||||
               onMouseEnter,onMouseLeave,onCloseSidebar,updateSysLanguage,changeWeb}
 | 
					               onMouseEnter,onMouseLeave,onCloseSidebar,updateSysLanguage,changeWeb,onShowSearchModal,
 | 
				
			||||||
 | 
					               onHideSearchModal,onRedirect}
 | 
				
			||||||
       }
 | 
					       }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    menu.use(ignoreCustomElementPlugin);
 | 
					    menu.use(ignoreCustomElementPlugin);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -285,7 +285,7 @@
 | 
				
			||||||
<script type="module">
 | 
					<script type="module">
 | 
				
			||||||
    import { rpc,func,alertMsg } from "./assets/js/lp.utils.js";
 | 
					    import { rpc,func,alertMsg } from "./assets/js/lp.utils.js";
 | 
				
			||||||
    import { useDefaultConf,usePushConf } from "./assets/js/vue.hooks.js";
 | 
					    import { useDefaultConf,usePushConf } from "./assets/js/vue.hooks.js";
 | 
				
			||||||
    import { ignoreCustomElementPlugin,bootstrapSwitchComponent,h5PlayerComponent,timepickerComponent,languageOptionDirective } from "./assets/js/vue.helper.js"
 | 
					    import { ignoreCustomElementPlugin,filterKeywordPlugin,bootstrapSwitchComponent,h5PlayerComponent,timepickerComponent,languageOptionDirective } from "./assets/js/vue.helper.js"
 | 
				
			||||||
    import vue from "./assets/js/vue.build.js";
 | 
					    import vue from "./assets/js/vue.build.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const {createApp,ref,reactive,watchEffect,computed,onMounted} = vue;
 | 
					    const {createApp,ref,reactive,watchEffect,computed,onMounted} = vue;
 | 
				
			||||||
| 
						 | 
					@ -458,6 +458,7 @@
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    app.use(ignoreCustomElementPlugin);
 | 
					    app.use(ignoreCustomElementPlugin);
 | 
				
			||||||
 | 
					    app.use(filterKeywordPlugin);
 | 
				
			||||||
    app.mount('#app');
 | 
					    app.mount('#app');
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
</body>
 | 
					</body>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -50,19 +50,34 @@
 | 
				
			||||||
                                    <div class="col-lg-12">
 | 
					                                    <div class="col-lg-12">
 | 
				
			||||||
                                        <div class="row row-cols-5">
 | 
					                                        <div class="row row-cols-5">
 | 
				
			||||||
                                            <div class="col-lg ps-4">
 | 
					                                            <div class="col-lg ps-4">
 | 
				
			||||||
                                                <label>Mp4</label>
 | 
					                                                <label>
 | 
				
			||||||
 | 
					                                                    <cn>MP4</cn>
 | 
				
			||||||
 | 
					                                                    <en>MP4</en>
 | 
				
			||||||
 | 
					                                                </label>
 | 
				
			||||||
                                            </div>
 | 
					                                            </div>
 | 
				
			||||||
                                            <div class="col-lg ps-4">
 | 
					                                            <div class="col-lg ps-4">
 | 
				
			||||||
                                                <label>TS</label>
 | 
					                                                <label>
 | 
				
			||||||
 | 
					                                                    <cn>TS</cn>
 | 
				
			||||||
 | 
					                                                    <en>TS</en>
 | 
				
			||||||
 | 
					                                                </label>
 | 
				
			||||||
                                            </div>
 | 
					                                            </div>
 | 
				
			||||||
                                            <div class="col-lg ps-4">
 | 
					                                            <div class="col-lg ps-4">
 | 
				
			||||||
                                                <label>FLV</label>
 | 
					                                                <label>
 | 
				
			||||||
 | 
					                                                    <cn>FLV</cn>
 | 
				
			||||||
 | 
					                                                    <en>FLV</en>
 | 
				
			||||||
 | 
					                                                </label>
 | 
				
			||||||
                                            </div>
 | 
					                                            </div>
 | 
				
			||||||
                                            <div class="col-lg ps-4">
 | 
					                                            <div class="col-lg ps-4">
 | 
				
			||||||
                                                <label>MKV</label>
 | 
					                                                <label>
 | 
				
			||||||
 | 
					                                                    <cn>MKV</cn>
 | 
				
			||||||
 | 
					                                                    <en>MKV</en>
 | 
				
			||||||
 | 
					                                                </label>
 | 
				
			||||||
                                            </div>
 | 
					                                            </div>
 | 
				
			||||||
                                            <div class="col-lg ps-4">
 | 
					                                            <div class="col-lg ps-4">
 | 
				
			||||||
                                                <label>MOV</label>
 | 
					                                                <label>
 | 
				
			||||||
 | 
					                                                    <cn>MOV</cn>
 | 
				
			||||||
 | 
					                                                    <en>MOV</en>
 | 
				
			||||||
 | 
					                                                </label>
 | 
				
			||||||
                                            </div>
 | 
					                                            </div>
 | 
				
			||||||
                                        </div>
 | 
					                                        </div>
 | 
				
			||||||
                                    </div>
 | 
					                                    </div>
 | 
				
			||||||
| 
						 | 
					@ -158,19 +173,24 @@
 | 
				
			||||||
                                <en>Channel name</en>
 | 
					                                <en>Channel name</en>
 | 
				
			||||||
                            </div>
 | 
					                            </div>
 | 
				
			||||||
                            <div class="col text-center">
 | 
					                            <div class="col text-center">
 | 
				
			||||||
                                MP4
 | 
					                                <cn>MP4</cn>
 | 
				
			||||||
 | 
					                                <en>MP4</en>
 | 
				
			||||||
                            </div>
 | 
					                            </div>
 | 
				
			||||||
                            <div class="col text-center">
 | 
					                            <div class="col text-center">
 | 
				
			||||||
                                TS
 | 
					                                <cn>TS</cn>
 | 
				
			||||||
 | 
					                                <en>TS</en>
 | 
				
			||||||
                            </div>
 | 
					                            </div>
 | 
				
			||||||
                            <div class="col text-center">
 | 
					                            <div class="col text-center">
 | 
				
			||||||
                                FLV
 | 
					                                <cn>FLV</cn>
 | 
				
			||||||
 | 
					                                <en>FLV</en>
 | 
				
			||||||
                            </div>
 | 
					                            </div>
 | 
				
			||||||
                            <div class="col text-center">
 | 
					                            <div class="col text-center">
 | 
				
			||||||
                                MKV
 | 
					                                <cn>MKV</cn>
 | 
				
			||||||
 | 
					                                <en>MKV</en>
 | 
				
			||||||
                            </div>
 | 
					                            </div>
 | 
				
			||||||
                            <div class="col text-center">
 | 
					                            <div class="col text-center">
 | 
				
			||||||
                                MOV
 | 
					                                <cn>MOV</cn>
 | 
				
			||||||
 | 
					                                <en>MOV</en>
 | 
				
			||||||
                            </div>
 | 
					                            </div>
 | 
				
			||||||
                            <div class="col text-center">
 | 
					                            <div class="col text-center">
 | 
				
			||||||
                                <cn>暂停</cn>
 | 
					                                <cn>暂停</cn>
 | 
				
			||||||
| 
						 | 
					@ -304,7 +324,7 @@
 | 
				
			||||||
<script type="module">
 | 
					<script type="module">
 | 
				
			||||||
    import {rpc, func, alertMsg, confirm} from "./assets/js/lp.utils.js";
 | 
					    import {rpc, func, alertMsg, confirm} from "./assets/js/lp.utils.js";
 | 
				
			||||||
    import { useDefaultConf,useRecordConf,useRecordFiles } from "./assets/js/vue.hooks.js";
 | 
					    import { useDefaultConf,useRecordConf,useRecordFiles } from "./assets/js/vue.hooks.js";
 | 
				
			||||||
    import { ignoreCustomElementPlugin,bootstrapSwitchComponent,customModalComponent,videoPlayerComponent } from "./assets/js/vue.helper.js"
 | 
					    import { ignoreCustomElementPlugin,filterKeywordPlugin,bootstrapSwitchComponent,customModalComponent,videoPlayerComponent } from "./assets/js/vue.helper.js"
 | 
				
			||||||
    import vue from "./assets/js/vue.build.js";
 | 
					    import vue from "./assets/js/vue.build.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const {createApp,ref,reactive,watchEffect,computed,onMounted} = vue;
 | 
					    const {createApp,ref,reactive,watchEffect,computed,onMounted} = vue;
 | 
				
			||||||
| 
						 | 
					@ -563,6 +583,7 @@
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    app.use(ignoreCustomElementPlugin);
 | 
					    app.use(ignoreCustomElementPlugin);
 | 
				
			||||||
 | 
					    app.use(filterKeywordPlugin);
 | 
				
			||||||
    app.mount('#app');
 | 
					    app.mount('#app');
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
</body>
 | 
					</body>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -100,7 +100,8 @@
 | 
				
			||||||
                                    <div class="row">
 | 
					                                    <div class="row">
 | 
				
			||||||
                                        <div class="col-lg-3 offset-lg-1 lp-align-center">
 | 
					                                        <div class="col-lg-3 offset-lg-1 lp-align-center">
 | 
				
			||||||
                                            <label>
 | 
					                                            <label>
 | 
				
			||||||
                                                QP
 | 
					                                                <cn>QP</cn>
 | 
				
			||||||
 | 
					                                                <en>QP</en>
 | 
				
			||||||
                                            </label>
 | 
					                                            </label>
 | 
				
			||||||
                                        </div>
 | 
					                                        </div>
 | 
				
			||||||
                                        <div class="col-lg-6">
 | 
					                                        <div class="col-lg-6">
 | 
				
			||||||
| 
						 | 
					@ -142,7 +143,7 @@
 | 
				
			||||||
    import vueDragResize from "./assets/plugins/vueDragResize/js/vue3-drag-resize.esm.js";
 | 
					    import vueDragResize from "./assets/plugins/vueDragResize/js/vue3-drag-resize.esm.js";
 | 
				
			||||||
    import { rpc,deepCopy } from "./assets/js/lp.utils.js";
 | 
					    import { rpc,deepCopy } from "./assets/js/lp.utils.js";
 | 
				
			||||||
    import { useDefaultConf,useRoiConf } from "./assets/js/vue.hooks.js";
 | 
					    import { useDefaultConf,useRoiConf } from "./assets/js/vue.hooks.js";
 | 
				
			||||||
    import { ignoreCustomElementPlugin,bootstrapSwitchComponent,languageOptionDirective } from "./assets/js/vue.helper.js"
 | 
					    import { ignoreCustomElementPlugin,filterKeywordPlugin,bootstrapSwitchComponent,languageOptionDirective } from "./assets/js/vue.helper.js"
 | 
				
			||||||
    const {createApp,ref,reactive,watchEffect,computed,nextTick,onMounted} = vue;
 | 
					    const {createApp,ref,reactive,watchEffect,computed,nextTick,onMounted} = vue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const app = createApp({
 | 
					    const app = createApp({
 | 
				
			||||||
| 
						 | 
					@ -233,6 +234,7 @@
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    app.use(ignoreCustomElementPlugin);
 | 
					    app.use(ignoreCustomElementPlugin);
 | 
				
			||||||
 | 
					    app.use(filterKeywordPlugin);
 | 
				
			||||||
    app.mount('#app');
 | 
					    app.mount('#app');
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
</body>
 | 
					</body>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -157,7 +157,7 @@
 | 
				
			||||||
<script type="module">
 | 
					<script type="module">
 | 
				
			||||||
    import { rpc4,func,alertMsg } from "./assets/js/lp.utils.js";
 | 
					    import { rpc4,func,alertMsg } from "./assets/js/lp.utils.js";
 | 
				
			||||||
    import { useMqttConf,useRttyConf } from "./assets/js/vue.hooks.js";
 | 
					    import { useMqttConf,useRttyConf } from "./assets/js/vue.hooks.js";
 | 
				
			||||||
    import { ignoreCustomElementPlugin,bootstrapSwitchComponent,customModalComponent } from "./assets/js/vue.helper.js"
 | 
					    import { ignoreCustomElementPlugin,filterKeywordPlugin,bootstrapSwitchComponent,customModalComponent } from "./assets/js/vue.helper.js"
 | 
				
			||||||
    import vue from "./assets/js/vue.build.js";
 | 
					    import vue from "./assets/js/vue.build.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const {createApp,ref,reactive,watch,watchEffect,computed,onMounted} = vue;
 | 
					    const {createApp,ref,reactive,watch,watchEffect,computed,onMounted} = vue;
 | 
				
			||||||
| 
						 | 
					@ -226,6 +226,7 @@
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    app.use(ignoreCustomElementPlugin);
 | 
					    app.use(ignoreCustomElementPlugin);
 | 
				
			||||||
 | 
					    app.use(filterKeywordPlugin);
 | 
				
			||||||
    app.mount('#app');
 | 
					    app.mount('#app');
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
</body>
 | 
					</body>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -159,7 +159,7 @@
 | 
				
			||||||
<script type="module">
 | 
					<script type="module">
 | 
				
			||||||
    import { alertMsg } from "./assets/js/lp.utils.js";
 | 
					    import { alertMsg } from "./assets/js/lp.utils.js";
 | 
				
			||||||
    import { useServiceConf,useSlsConf,useRtmpConf,useNdiConf,useFrpEnableConf,useFrpcConf } from "./assets/js/vue.hooks.js";
 | 
					    import { useServiceConf,useSlsConf,useRtmpConf,useNdiConf,useFrpEnableConf,useFrpcConf } from "./assets/js/vue.hooks.js";
 | 
				
			||||||
    import { ignoreCustomElementPlugin,bootstrapSwitchComponent } from "./assets/js/vue.helper.js";
 | 
					    import { ignoreCustomElementPlugin,filterKeywordPlugin,bootstrapSwitchComponent } from "./assets/js/vue.helper.js";
 | 
				
			||||||
    import vue from "./assets/js/vue.build.js";
 | 
					    import vue from "./assets/js/vue.build.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const {createApp,ref,reactive,watch,watchEffect,computed,onMounted} = vue;
 | 
					    const {createApp,ref,reactive,watch,watchEffect,computed,onMounted} = vue;
 | 
				
			||||||
| 
						 | 
					@ -206,6 +206,7 @@
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    app.use(ignoreCustomElementPlugin);
 | 
					    app.use(ignoreCustomElementPlugin);
 | 
				
			||||||
 | 
					    app.use(filterKeywordPlugin);
 | 
				
			||||||
    app.mount('#app');
 | 
					    app.mount('#app');
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
</body>
 | 
					</body>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -23,16 +23,20 @@
 | 
				
			||||||
                             <div class="row">
 | 
					                             <div class="row">
 | 
				
			||||||
                                 <div class="col-2"></div>
 | 
					                                 <div class="col-2"></div>
 | 
				
			||||||
                                 <div class="col text-center">
 | 
					                                 <div class="col text-center">
 | 
				
			||||||
                                     HTTP
 | 
					                                     <cn>HTTP</cn>
 | 
				
			||||||
 | 
					                                     <en>HTTP</en>
 | 
				
			||||||
                                 </div>
 | 
					                                 </div>
 | 
				
			||||||
                                 <div v-if="Object.keys(hardwareConf).length > 0 && hardwareConf.function.hls" class="col text-center">
 | 
					                                 <div v-if="Object.keys(hardwareConf).length > 0 && hardwareConf.function.hls" class="col text-center">
 | 
				
			||||||
                                     HLS
 | 
					                                     <cn>HLS</cn>
 | 
				
			||||||
 | 
					                                     <en>HLS</en>
 | 
				
			||||||
                                 </div>
 | 
					                                 </div>
 | 
				
			||||||
                                 <div class="col text-center">
 | 
					                                 <div class="col text-center">
 | 
				
			||||||
                                     RTMP
 | 
					                                     <cn>RTMP</cn>
 | 
				
			||||||
 | 
					                                     <en>RTMP</en>
 | 
				
			||||||
                                 </div>
 | 
					                                 </div>
 | 
				
			||||||
                                 <div class="col text-center">
 | 
					                                 <div class="col text-center">
 | 
				
			||||||
                                     RTSP
 | 
					                                     <cn>RTSP</cn>
 | 
				
			||||||
 | 
					                                     <en>RTSP</en>
 | 
				
			||||||
                                 </div>
 | 
					                                 </div>
 | 
				
			||||||
                                 <div class="col text-center">
 | 
					                                 <div class="col text-center">
 | 
				
			||||||
                                     <cn>组播</cn>
 | 
					                                     <cn>组播</cn>
 | 
				
			||||||
| 
						 | 
					@ -110,7 +114,7 @@
 | 
				
			||||||
                                 <div class="col-lg-12">
 | 
					                                 <div class="col-lg-12">
 | 
				
			||||||
                                     <button type="button" class="btn  border-3 btn-primary me-2" @click="saveGlobalConfByLocal">
 | 
					                                     <button type="button" class="btn  border-3 btn-primary me-2" @click="saveGlobalConfByLocal">
 | 
				
			||||||
                                         <cn>应用到全部</cn>
 | 
					                                         <cn>应用到全部</cn>
 | 
				
			||||||
                                         <en>Apply to all/en>
 | 
					                                         <en>Apply to all</en>
 | 
				
			||||||
                                     </button>
 | 
					                                     </button>
 | 
				
			||||||
                                 </div>
 | 
					                                 </div>
 | 
				
			||||||
                             </div>
 | 
					                             </div>
 | 
				
			||||||
| 
						 | 
					@ -128,7 +132,7 @@
 | 
				
			||||||
                     <a class="nav-link active" data-bs-toggle="tab" href="#tab1" role="tab" aria-selected="true">
 | 
					                     <a class="nav-link active" data-bs-toggle="tab" href="#tab1" role="tab" aria-selected="true">
 | 
				
			||||||
                         <div class="d-flex align-items-center">
 | 
					                         <div class="d-flex align-items-center">
 | 
				
			||||||
                             <div class="tab-icon"><i class="fa-solid fa-upload me-1"></i></div>
 | 
					                             <div class="tab-icon"><i class="fa-solid fa-upload me-1"></i></div>
 | 
				
			||||||
                             <div class="tab-title"><cn>码流配置</cn><en>Encode config</en></div>
 | 
					                             <div class="tab-title"><cn>码流配置</cn><en>Stream config</en></div>
 | 
				
			||||||
                         </div>
 | 
					                         </div>
 | 
				
			||||||
                     </a>
 | 
					                     </a>
 | 
				
			||||||
                 </li>
 | 
					                 </li>
 | 
				
			||||||
| 
						 | 
					@ -136,7 +140,7 @@
 | 
				
			||||||
                     <a class="nav-link" data-bs-toggle="tab" href="#tab2" role="tab" aria-selected="false">
 | 
					                     <a class="nav-link" data-bs-toggle="tab" href="#tab2" role="tab" aria-selected="false">
 | 
				
			||||||
                         <div class="d-flex align-items-center">
 | 
					                         <div class="d-flex align-items-center">
 | 
				
			||||||
                             <div class="tab-icon"><i class="fa-solid fa-gear me-1"></i></div>
 | 
					                             <div class="tab-icon"><i class="fa-solid fa-gear me-1"></i></div>
 | 
				
			||||||
                             <div class="tab-title"><cn>TS设置</cn><en>Advanced Encode config</en></div>
 | 
					                             <div class="tab-title"><cn>TS设置</cn><en>TS config</en></div>
 | 
				
			||||||
                         </div>
 | 
					                         </div>
 | 
				
			||||||
                     </a>
 | 
					                     </a>
 | 
				
			||||||
                 </li>
 | 
					                 </li>
 | 
				
			||||||
| 
						 | 
					@ -144,7 +148,7 @@
 | 
				
			||||||
                     <a class="nav-link" data-bs-toggle="tab" href="#tab3" role="tab" aria-selected="false">
 | 
					                     <a class="nav-link" data-bs-toggle="tab" href="#tab3" role="tab" aria-selected="false">
 | 
				
			||||||
                         <div class="d-flex align-items-center">
 | 
					                         <div class="d-flex align-items-center">
 | 
				
			||||||
                             <div class="tab-icon"><i class="fa-solid fa-gear me-1"></i></div>
 | 
					                             <div class="tab-icon"><i class="fa-solid fa-gear me-1"></i></div>
 | 
				
			||||||
                             <div class="tab-title"><cn>HLS设置</cn><en>Video config</en></div>
 | 
					                             <div class="tab-title"><cn>HLS设置</cn><en>HLS config</en></div>
 | 
				
			||||||
                         </div>
 | 
					                         </div>
 | 
				
			||||||
                     </a>
 | 
					                     </a>
 | 
				
			||||||
                 </li>
 | 
					                 </li>
 | 
				
			||||||
| 
						 | 
					@ -152,7 +156,7 @@
 | 
				
			||||||
                     <a class="nav-link" data-bs-toggle="tab" href="#tab4" role="tab" aria-selected="false">
 | 
					                     <a class="nav-link" data-bs-toggle="tab" href="#tab4" role="tab" aria-selected="false">
 | 
				
			||||||
                         <div class="d-flex align-items-center">
 | 
					                         <div class="d-flex align-items-center">
 | 
				
			||||||
                             <div class="tab-icon"><i class="fa-solid fa-gear me-1"></i></div>
 | 
					                             <div class="tab-icon"><i class="fa-solid fa-gear me-1"></i></div>
 | 
				
			||||||
                             <div class="tab-title"><cn>RTSP设置</cn><en>Audio config</en></div>
 | 
					                             <div class="tab-title"><cn>RTSP设置</cn><en>RTSP config</en></div>
 | 
				
			||||||
                         </div>
 | 
					                         </div>
 | 
				
			||||||
                     </a>
 | 
					                     </a>
 | 
				
			||||||
                 </li>
 | 
					                 </li>
 | 
				
			||||||
| 
						 | 
					@ -161,7 +165,7 @@
 | 
				
			||||||
                     <a class="nav-link" data-bs-toggle="tab" href="#tab5" role="tab" aria-selected="false">
 | 
					                     <a class="nav-link" data-bs-toggle="tab" href="#tab5" role="tab" aria-selected="false">
 | 
				
			||||||
                         <div class="d-flex align-items-center">
 | 
					                         <div class="d-flex align-items-center">
 | 
				
			||||||
                             <div class="tab-icon"><i class="fa-solid fa-gear me-1"></i></div>
 | 
					                             <div class="tab-icon"><i class="fa-solid fa-gear me-1"></i></div>
 | 
				
			||||||
                             <div class="tab-title"><cn>SRT设置</cn><en>Audio config</en></div>
 | 
					                             <div class="tab-title"><cn>SRT设置</cn><en>SRT config</en></div>
 | 
				
			||||||
                         </div>
 | 
					                         </div>
 | 
				
			||||||
                     </a>
 | 
					                     </a>
 | 
				
			||||||
                 </li>
 | 
					                 </li>
 | 
				
			||||||
| 
						 | 
					@ -169,7 +173,7 @@
 | 
				
			||||||
                     <a class="nav-link" data-bs-toggle="tab" href="#tab6" role="tab" aria-selected="false">
 | 
					                     <a class="nav-link" data-bs-toggle="tab" href="#tab6" role="tab" aria-selected="false">
 | 
				
			||||||
                         <div class="d-flex align-items-center">
 | 
					                         <div class="d-flex align-items-center">
 | 
				
			||||||
                             <div class="tab-icon"><i class="fa-solid fa-gear me-1"></i></div>
 | 
					                             <div class="tab-icon"><i class="fa-solid fa-gear me-1"></i></div>
 | 
				
			||||||
                             <div class="tab-title"><cn>NDI设置</cn><en>Audio config</en></div>
 | 
					                             <div class="tab-title"><cn>NDI设置</cn><en>NDI config</en></div>
 | 
				
			||||||
                         </div>
 | 
					                         </div>
 | 
				
			||||||
                     </a>
 | 
					                     </a>
 | 
				
			||||||
                 </li>
 | 
					                 </li>
 | 
				
			||||||
| 
						 | 
					@ -177,7 +181,7 @@
 | 
				
			||||||
                     <a class="nav-link" data-bs-toggle="tab" href="#tab7" role="tab" aria-selected="false">
 | 
					                     <a class="nav-link" data-bs-toggle="tab" href="#tab7" role="tab" aria-selected="false">
 | 
				
			||||||
                         <div class="d-flex align-items-center">
 | 
					                         <div class="d-flex align-items-center">
 | 
				
			||||||
                             <div class="tab-icon"><i class="fa-solid fa-podcast me-1"></i></div>
 | 
					                             <div class="tab-icon"><i class="fa-solid fa-podcast me-1"></i></div>
 | 
				
			||||||
                             <div class="tab-title"><cn>推流设置</cn><en>Audio config</en></div>
 | 
					                             <div class="tab-title"><cn>推流设置</cn><en>Push config</en></div>
 | 
				
			||||||
                         </div>
 | 
					                         </div>
 | 
				
			||||||
                     </a>
 | 
					                     </a>
 | 
				
			||||||
                 </li>
 | 
					                 </li>
 | 
				
			||||||
| 
						 | 
					@ -185,7 +189,7 @@
 | 
				
			||||||
                     <a class="nav-link" data-bs-toggle="tab" href="#tab8" role="tab" aria-selected="false">
 | 
					                     <a class="nav-link" data-bs-toggle="tab" href="#tab8" role="tab" aria-selected="false">
 | 
				
			||||||
                         <div class="d-flex align-items-center">
 | 
					                         <div class="d-flex align-items-center">
 | 
				
			||||||
                             <div class="tab-icon"><i class="fa-regular fa-circle-play me-1"></i></div>
 | 
					                             <div class="tab-icon"><i class="fa-regular fa-circle-play me-1"></i></div>
 | 
				
			||||||
                             <div class="tab-title"><cn>播放地址</cn><en>Audio config</en></div>
 | 
					                             <div class="tab-title"><cn>播放地址</cn><en>Play URL</en></div>
 | 
				
			||||||
                         </div>
 | 
					                         </div>
 | 
				
			||||||
                     </a>
 | 
					                     </a>
 | 
				
			||||||
                 </li>
 | 
					                 </li>
 | 
				
			||||||
| 
						 | 
					@ -198,16 +202,20 @@
 | 
				
			||||||
                             <en>Channel name</en>
 | 
					                             <en>Channel name</en>
 | 
				
			||||||
                         </div>
 | 
					                         </div>
 | 
				
			||||||
                         <div class="col text-center">
 | 
					                         <div class="col text-center">
 | 
				
			||||||
                             HTTP
 | 
					                             <cn>HTTP</cn>
 | 
				
			||||||
 | 
					                             <en>HTTP</en>
 | 
				
			||||||
                         </div>
 | 
					                         </div>
 | 
				
			||||||
                         <div v-if="Object.keys(hardwareConf).length > 0 && hardwareConf.function.hls" class="col text-center">
 | 
					                         <div v-if="Object.keys(hardwareConf).length > 0 && hardwareConf.function.hls" class="col text-center">
 | 
				
			||||||
                             HLS
 | 
					                             <cn>HLS</cn>
 | 
				
			||||||
 | 
					                             <en>HLS</en>
 | 
				
			||||||
                         </div>
 | 
					                         </div>
 | 
				
			||||||
                         <div class="col text-center">
 | 
					                         <div class="col text-center">
 | 
				
			||||||
                             RTMP
 | 
					                             <cn>RTMP</cn>
 | 
				
			||||||
 | 
					                             <en>RTMP</en>
 | 
				
			||||||
                         </div>
 | 
					                         </div>
 | 
				
			||||||
                         <div class="col text-center">
 | 
					                         <div class="col text-center">
 | 
				
			||||||
                             RTSP
 | 
					                             <cn>RTSP</cn>
 | 
				
			||||||
 | 
					                             <en>RTSP</en>
 | 
				
			||||||
                         </div>
 | 
					                         </div>
 | 
				
			||||||
                         <div class="col text-center">
 | 
					                         <div class="col text-center">
 | 
				
			||||||
                             <cn>组播</cn>
 | 
					                             <cn>组播</cn>
 | 
				
			||||||
| 
						 | 
					@ -756,7 +764,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    import {rpc, extend, deepCopy, clearReactiveArray} from "./assets/js/lp.utils.js";
 | 
					    import {rpc, extend, deepCopy, clearReactiveArray} from "./assets/js/lp.utils.js";
 | 
				
			||||||
    import { useDefaultConf,useHardwareConf,usePortConf } from "./assets/js/vue.hooks.js";
 | 
					    import { useDefaultConf,useHardwareConf,usePortConf } from "./assets/js/vue.hooks.js";
 | 
				
			||||||
    import { ignoreCustomElementPlugin,bootstrapSwitchComponent,multipleInputComponent,languageOptionDirective } from "./assets/js/vue.helper.js"
 | 
					    import { ignoreCustomElementPlugin,filterKeywordPlugin,bootstrapSwitchComponent,multipleInputComponent,languageOptionDirective } from "./assets/js/vue.helper.js"
 | 
				
			||||||
    import vue from "./assets/js/vue.build.js";
 | 
					    import vue from "./assets/js/vue.build.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const {createApp,ref,reactive,toRefs,watch,watchEffect,computed} = vue;
 | 
					    const {createApp,ref,reactive,toRefs,watch,watchEffect,computed} = vue;
 | 
				
			||||||
| 
						 | 
					@ -931,6 +939,7 @@
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    app.use(ignoreCustomElementPlugin);
 | 
					    app.use(ignoreCustomElementPlugin);
 | 
				
			||||||
 | 
					    app.use(filterKeywordPlugin);
 | 
				
			||||||
    app.mount('#app');
 | 
					    app.mount('#app');
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
</body>
 | 
					</body>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -144,7 +144,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<script type="module">
 | 
					<script type="module">
 | 
				
			||||||
    import { useSyncConf } from "./assets/js/vue.hooks.js";
 | 
					    import { useSyncConf } from "./assets/js/vue.hooks.js";
 | 
				
			||||||
    import {ignoreCustomElementPlugin, bootstrapSwitchComponent, nouiSliderComponent} from "./assets/js/vue.helper.js"
 | 
					    import {ignoreCustomElementPlugin,filterKeywordPlugin, bootstrapSwitchComponent, nouiSliderComponent} from "./assets/js/vue.helper.js"
 | 
				
			||||||
    import vue from "./assets/js/vue.build.js";
 | 
					    import vue from "./assets/js/vue.build.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const {createApp,ref,reactive,watchEffect,computed,onMounted} = vue;
 | 
					    const {createApp,ref,reactive,watchEffect,computed,onMounted} = vue;
 | 
				
			||||||
| 
						 | 
					@ -188,6 +188,7 @@
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    app.use(ignoreCustomElementPlugin);
 | 
					    app.use(ignoreCustomElementPlugin);
 | 
				
			||||||
 | 
					    app.use(filterKeywordPlugin);
 | 
				
			||||||
    app.mount('#app');
 | 
					    app.mount('#app');
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
</body>
 | 
					</body>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -70,7 +70,8 @@
 | 
				
			||||||
                            <div v-if="Object.keys(hardwareConf).length > 0 && hardwareConf.function.dhcp" class="row mt-3">
 | 
					                            <div v-if="Object.keys(hardwareConf).length > 0 && hardwareConf.function.dhcp" class="row mt-3">
 | 
				
			||||||
                                <div class="col-lg-2 offset-lg-1 lp-align-center">
 | 
					                                <div class="col-lg-2 offset-lg-1 lp-align-center">
 | 
				
			||||||
                                    <label>
 | 
					                                    <label>
 | 
				
			||||||
                                        DHCP
 | 
					                                        <cn>DHCP</cn>
 | 
				
			||||||
 | 
					                                        <en>DHCP</en>
 | 
				
			||||||
                                    </label>
 | 
					                                    </label>
 | 
				
			||||||
                                </div>
 | 
					                                </div>
 | 
				
			||||||
                                <div class="col-lg-5">
 | 
					                                <div class="col-lg-5">
 | 
				
			||||||
| 
						 | 
					@ -80,7 +81,8 @@
 | 
				
			||||||
                            <div class="row mt-3">
 | 
					                            <div class="row mt-3">
 | 
				
			||||||
                                <div class="col-lg-2 offset-lg-1 lp-align-center">
 | 
					                                <div class="col-lg-2 offset-lg-1 lp-align-center">
 | 
				
			||||||
                                    <label>
 | 
					                                    <label>
 | 
				
			||||||
                                        IP
 | 
					                                        <cn>IP</cn>
 | 
				
			||||||
 | 
					                                        <en>IP</en>
 | 
				
			||||||
                                    </label>
 | 
					                                    </label>
 | 
				
			||||||
                                </div>
 | 
					                                </div>
 | 
				
			||||||
                                <div class="col-lg-6">
 | 
					                                <div class="col-lg-6">
 | 
				
			||||||
| 
						 | 
					@ -112,7 +114,8 @@
 | 
				
			||||||
                            <div class="row mt-3">
 | 
					                            <div class="row mt-3">
 | 
				
			||||||
                                <div class="col-lg-2 offset-lg-1 lp-align-center">
 | 
					                                <div class="col-lg-2 offset-lg-1 lp-align-center">
 | 
				
			||||||
                                    <label>
 | 
					                                    <label>
 | 
				
			||||||
                                        DNS
 | 
					                                        <cn>DNS</cn>
 | 
				
			||||||
 | 
					                                        <en>DNS</en>
 | 
				
			||||||
                                    </label>
 | 
					                                    </label>
 | 
				
			||||||
                                </div>
 | 
					                                </div>
 | 
				
			||||||
                                <div class="col-lg-6">
 | 
					                                <div class="col-lg-6">
 | 
				
			||||||
| 
						 | 
					@ -122,7 +125,8 @@
 | 
				
			||||||
                            <div class="row mt-3">
 | 
					                            <div class="row mt-3">
 | 
				
			||||||
                                <div class="col-lg-2 offset-lg-1 lp-align-center">
 | 
					                                <div class="col-lg-2 offset-lg-1 lp-align-center">
 | 
				
			||||||
                                    <label>
 | 
					                                    <label>
 | 
				
			||||||
                                        MAC
 | 
					                                        <cn>MAC</cn>
 | 
				
			||||||
 | 
					                                        <en>MAC</en>
 | 
				
			||||||
                                    </label>
 | 
					                                    </label>
 | 
				
			||||||
                                </div>
 | 
					                                </div>
 | 
				
			||||||
                                <div class="col-lg-6">
 | 
					                                <div class="col-lg-6">
 | 
				
			||||||
| 
						 | 
					@ -214,7 +218,8 @@
 | 
				
			||||||
                                    <div class="row mt-4">
 | 
					                                    <div class="row mt-4">
 | 
				
			||||||
                                        <div class="col-lg-3 lp-align-center">
 | 
					                                        <div class="col-lg-3 lp-align-center">
 | 
				
			||||||
                                            <label>
 | 
					                                            <label>
 | 
				
			||||||
                                                DHCP
 | 
					                                                <cn>DHCP</cn>
 | 
				
			||||||
 | 
					                                                <en>DHCP</en>
 | 
				
			||||||
                                            </label>
 | 
					                                            </label>
 | 
				
			||||||
                                        </div>
 | 
					                                        </div>
 | 
				
			||||||
                                        <div class="col-lg-8">
 | 
					                                        <div class="col-lg-8">
 | 
				
			||||||
| 
						 | 
					@ -224,7 +229,8 @@
 | 
				
			||||||
                                    <div class="row mt-3">
 | 
					                                    <div class="row mt-3">
 | 
				
			||||||
                                        <div class="col-lg-3 lp-align-center">
 | 
					                                        <div class="col-lg-3 lp-align-center">
 | 
				
			||||||
                                            <label>
 | 
					                                            <label>
 | 
				
			||||||
                                                IP
 | 
					                                                <cn>IP</cn>
 | 
				
			||||||
 | 
					                                                <en>IP</en>
 | 
				
			||||||
                                            </label>
 | 
					                                            </label>
 | 
				
			||||||
                                        </div>
 | 
					                                        </div>
 | 
				
			||||||
                                        <div class="col-lg-8">
 | 
					                                        <div class="col-lg-8">
 | 
				
			||||||
| 
						 | 
					@ -256,7 +262,8 @@
 | 
				
			||||||
                                    <div class="row mt-3">
 | 
					                                    <div class="row mt-3">
 | 
				
			||||||
                                        <div class="col-lg-3 lp-align-center">
 | 
					                                        <div class="col-lg-3 lp-align-center">
 | 
				
			||||||
                                            <label>
 | 
					                                            <label>
 | 
				
			||||||
                                                DNS
 | 
					                                                <cn>DNS</cn>
 | 
				
			||||||
 | 
					                                                <en>DNS</en>
 | 
				
			||||||
                                            </label>
 | 
					                                            </label>
 | 
				
			||||||
                                        </div>
 | 
					                                        </div>
 | 
				
			||||||
                                        <div class="col-lg-8">
 | 
					                                        <div class="col-lg-8">
 | 
				
			||||||
| 
						 | 
					@ -320,7 +327,8 @@
 | 
				
			||||||
                            <div class="row mt-3">
 | 
					                            <div class="row mt-3">
 | 
				
			||||||
                                <div class="col-lg-2 offset-lg-1 lp-align-center">
 | 
					                                <div class="col-lg-2 offset-lg-1 lp-align-center">
 | 
				
			||||||
                                    <label>
 | 
					                                    <label>
 | 
				
			||||||
                                        IP
 | 
					                                        <cn>IP</cn>
 | 
				
			||||||
 | 
					                                        <en>IP</en>
 | 
				
			||||||
                                    </label>
 | 
					                                    </label>
 | 
				
			||||||
                                </div>
 | 
					                                </div>
 | 
				
			||||||
                                <div class="col-lg-6">
 | 
					                                <div class="col-lg-6">
 | 
				
			||||||
| 
						 | 
					@ -364,7 +372,6 @@
 | 
				
			||||||
                                </div>
 | 
					                                </div>
 | 
				
			||||||
                            </div>
 | 
					                            </div>
 | 
				
			||||||
                            <div class="card-body">
 | 
					                            <div class="card-body">
 | 
				
			||||||
                                <div class="row">
 | 
					 | 
				
			||||||
                                <div class="row">
 | 
					                                <div class="row">
 | 
				
			||||||
                                    <div class="col-lg-2 offset-lg-1 lp-align-center">
 | 
					                                    <div class="col-lg-2 offset-lg-1 lp-align-center">
 | 
				
			||||||
                                        <label>
 | 
					                                        <label>
 | 
				
			||||||
| 
						 | 
					@ -374,9 +381,7 @@
 | 
				
			||||||
                                    </div>
 | 
					                                    </div>
 | 
				
			||||||
                                    <div class="col-lg-6">
 | 
					                                    <div class="col-lg-6">
 | 
				
			||||||
                                        <div class="input-group">
 | 
					                                        <div class="input-group">
 | 
				
			||||||
                                                <form>
 | 
					 | 
				
			||||||
                                            <input class="form-control" :type="!showPasswd.oldpwd ? 'password' : 'text'" v-model.trim.lazy="userPasswd.oldpwd" autocomplete="off">
 | 
					                                            <input class="form-control" :type="!showPasswd.oldpwd ? 'password' : 'text'" v-model.trim.lazy="userPasswd.oldpwd" autocomplete="off">
 | 
				
			||||||
                                                </form>
 | 
					 | 
				
			||||||
                                            <span class="input-group-text input-group-addon lp-cursor-pointer" @click="showPasswd.oldpwd = !showPasswd.oldpwd"><i :class="['fa-regular',{'fa-eye-slash':showPasswd.oldpwd},{'fa-eye':!showPasswd.oldpwd}]"></i></span>
 | 
					                                            <span class="input-group-text input-group-addon lp-cursor-pointer" @click="showPasswd.oldpwd = !showPasswd.oldpwd"><i :class="['fa-regular',{'fa-eye-slash':showPasswd.oldpwd},{'fa-eye':!showPasswd.oldpwd}]"></i></span>
 | 
				
			||||||
                                        </div>
 | 
					                                        </div>
 | 
				
			||||||
                                    </div>
 | 
					                                    </div>
 | 
				
			||||||
| 
						 | 
					@ -392,9 +397,7 @@
 | 
				
			||||||
                                    </div>
 | 
					                                    </div>
 | 
				
			||||||
                                    <div class="col-lg-6">
 | 
					                                    <div class="col-lg-6">
 | 
				
			||||||
                                        <div class="input-group">
 | 
					                                        <div class="input-group">
 | 
				
			||||||
                                                <form>
 | 
					 | 
				
			||||||
                                            <input class="form-control" :type="!showPasswd.newpwd ? 'password' : 'text'" v-model.trim.lazy="userPasswd.newpwd" autocomplete="off">
 | 
					                                            <input class="form-control" :type="!showPasswd.newpwd ? 'password' : 'text'" v-model.trim.lazy="userPasswd.newpwd" autocomplete="off">
 | 
				
			||||||
                                                </form>
 | 
					 | 
				
			||||||
                                            <span class="input-group-text input-group-addon lp-cursor-pointer" @click="showPasswd.newpwd = !showPasswd.newpwd"><i :class="['fa-regular',{'fa-eye-slash':showPasswd.newpwd},{'fa-eye':!showPasswd.newpwd}]"></i></span>
 | 
					                                            <span class="input-group-text input-group-addon lp-cursor-pointer" @click="showPasswd.newpwd = !showPasswd.newpwd"><i :class="['fa-regular',{'fa-eye-slash':showPasswd.newpwd},{'fa-eye':!showPasswd.newpwd}]"></i></span>
 | 
				
			||||||
                                        </div>
 | 
					                                        </div>
 | 
				
			||||||
                                    </div>
 | 
					                                    </div>
 | 
				
			||||||
| 
						 | 
					@ -408,9 +411,7 @@
 | 
				
			||||||
                                    </div>
 | 
					                                    </div>
 | 
				
			||||||
                                    <div class="col-lg-6">
 | 
					                                    <div class="col-lg-6">
 | 
				
			||||||
                                        <div class="input-group">
 | 
					                                        <div class="input-group">
 | 
				
			||||||
                                                <form>
 | 
					 | 
				
			||||||
                                            <input class="form-control" :type="!showPasswd.confirm ? 'password' : 'text'" v-model.trim.lazy="userPasswd.confirm" autocomplete="off">
 | 
					                                            <input class="form-control" :type="!showPasswd.confirm ? 'password' : 'text'" v-model.trim.lazy="userPasswd.confirm" autocomplete="off">
 | 
				
			||||||
                                                </form>
 | 
					 | 
				
			||||||
                                            <span class="input-group-text input-group-addon lp-cursor-pointer" @click="showPasswd.confirm = !showPasswd.confirm"><i :class="['fa-regular',{'fa-eye-slash':showPasswd.confirm},{'fa-eye':!showPasswd.confirm}]"></i></span>
 | 
					                                            <span class="input-group-text input-group-addon lp-cursor-pointer" @click="showPasswd.confirm = !showPasswd.confirm"><i :class="['fa-regular',{'fa-eye-slash':showPasswd.confirm},{'fa-eye':!showPasswd.confirm}]"></i></span>
 | 
				
			||||||
                                        </div>
 | 
					                                        </div>
 | 
				
			||||||
                                    </div>
 | 
					                                    </div>
 | 
				
			||||||
| 
						 | 
					@ -423,7 +424,6 @@
 | 
				
			||||||
                            </div>
 | 
					                            </div>
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
                    </div>
 | 
					 | 
				
			||||||
                    <div class="col-lg-12">
 | 
					                    <div class="col-lg-12">
 | 
				
			||||||
                        <div class="card">
 | 
					                        <div class="card">
 | 
				
			||||||
                            <div class="card-header bg-transparent">
 | 
					                            <div class="card-header bg-transparent">
 | 
				
			||||||
| 
						 | 
					@ -977,12 +977,13 @@
 | 
				
			||||||
<script type="module">
 | 
					<script type="module">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    import vue from "./assets/js/vue.build.js";
 | 
					    import vue from "./assets/js/vue.build.js";
 | 
				
			||||||
    import JsZip from "./assets/plugins/jszip/jszip.esm.js"
 | 
					 | 
				
			||||||
    import * as fileSave from "./assets/plugins/jszip/filesaver.esm.js";
 | 
					 | 
				
			||||||
    import { rpc2,alertMsg,func,queryData,popover,formatDate,rebootConfirm,resetConfirm,clearReactiveObject } from "./assets/js/lp.utils.js";
 | 
					    import { rpc2,alertMsg,func,queryData,popover,formatDate,rebootConfirm,resetConfirm,clearReactiveObject } from "./assets/js/lp.utils.js";
 | 
				
			||||||
    import { useHardwareConf,useNetManagerConf,usePasswordConf,useVideoBufferConf,useNtpConf,useTimezoneConf,usePortConf,useVersionConf,useVerLogsConf,useWpaConf } from "./assets/js/vue.hooks.js";
 | 
					    import { useHardwareConf,useNetManagerConf,usePasswordConf,useVideoBufferConf,useNtpConf,useTimezoneConf,usePortConf,useVersionConf,useVerLogsConf,useWpaConf } from "./assets/js/vue.hooks.js";
 | 
				
			||||||
    import { ignoreCustomElementPlugin,bootstrapSwitchComponent,languageOptionDirective,uploadModalComponent,upgradeModalComponent,customModalComponent,loadingButtonComponent } from "./assets/js/vue.helper.js"
 | 
					    import { ignoreCustomElementPlugin,filterKeywordPlugin,bootstrapSwitchComponent,languageOptionDirective,uploadModalComponent,upgradeModalComponent,customModalComponent,loadingButtonComponent } from "./assets/js/vue.helper.js"
 | 
				
			||||||
    import { wifiFlagComponent,antenanFlagComponent } from "./assets/js/vue.flags.js";
 | 
					    import { wifiFlagComponent,antenanFlagComponent } from "./assets/js/vue.flags.js";
 | 
				
			||||||
 | 
					    import axios from './assets/plugins/axios/axios.esm.js';
 | 
				
			||||||
 | 
					    import JsZip from "./assets/plugins/jszip/jszip.esm.js"
 | 
				
			||||||
 | 
					    import * as fileSave from "./assets/plugins/jszip/filesaver.esm.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const { createApp,ref,reactive,watch,watchEffect,computed,onMounted } = vue;
 | 
					    const { createApp,ref,reactive,watch,watchEffect,computed,onMounted } = vue;
 | 
				
			||||||
    const app = createApp({
 | 
					    const app = createApp({
 | 
				
			||||||
| 
						 | 
					@ -1217,7 +1218,7 @@
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                const promiseArray = confs.map((conf) => {
 | 
					                const promiseArray = confs.map((conf) => {
 | 
				
			||||||
                    return queryData("config/" + conf, { responseType: 'blob' }).then(data => ({ name: conf, data }));
 | 
					                    return queryData("config/" + conf, { responseType: 'blob' }).then(data => ({ name: conf, data })).catch(error => "");
 | 
				
			||||||
                });
 | 
					                });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                Promise.all(promiseArray)
 | 
					                Promise.all(promiseArray)
 | 
				
			||||||
| 
						 | 
					@ -1237,7 +1238,7 @@
 | 
				
			||||||
                        saveAs(blob, 'configs.zip');
 | 
					                        saveAs(blob, 'configs.zip');
 | 
				
			||||||
                    })
 | 
					                    })
 | 
				
			||||||
                    .catch(error => {
 | 
					                    .catch(error => {
 | 
				
			||||||
                        console.error(error);
 | 
					                        console.error("下载全部失败");
 | 
				
			||||||
                    });
 | 
					                    });
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1388,6 +1389,7 @@
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    app.use(ignoreCustomElementPlugin);
 | 
					    app.use(ignoreCustomElementPlugin);
 | 
				
			||||||
 | 
					    app.use(filterKeywordPlugin);
 | 
				
			||||||
    app.mount('#app');
 | 
					    app.mount('#app');
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
</body>
 | 
					</body>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -139,7 +139,7 @@
 | 
				
			||||||
<script type="module">
 | 
					<script type="module">
 | 
				
			||||||
    import { rpc,rpc6,alertMsg } from "./assets/js/lp.utils.js";
 | 
					    import { rpc,rpc6,alertMsg } from "./assets/js/lp.utils.js";
 | 
				
			||||||
    import { useHardwareConf,useButtonConf,useUartConf } from "./assets/js/vue.hooks.js";
 | 
					    import { useHardwareConf,useButtonConf,useUartConf } from "./assets/js/vue.hooks.js";
 | 
				
			||||||
    import { ignoreCustomElementPlugin,bootstrapSwitchComponent,languageOptionDirective } from "./assets/js/vue.helper.js"
 | 
					    import { ignoreCustomElementPlugin,filterKeywordPlugin,bootstrapSwitchComponent,languageOptionDirective } from "./assets/js/vue.helper.js"
 | 
				
			||||||
    import vue from "./assets/js/vue.build.js";
 | 
					    import vue from "./assets/js/vue.build.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const {createApp,ref,reactive,watch,watchEffect,computed} = vue;
 | 
					    const {createApp,ref,reactive,watch,watchEffect,computed} = vue;
 | 
				
			||||||
| 
						 | 
					@ -178,6 +178,7 @@
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    app.use(ignoreCustomElementPlugin);
 | 
					    app.use(ignoreCustomElementPlugin);
 | 
				
			||||||
 | 
					    app.use(filterKeywordPlugin);
 | 
				
			||||||
    app.mount('#app');
 | 
					    app.mount('#app');
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
</body>
 | 
					</body>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
		Loading…
	
		Reference in New Issue