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