rootfs_enc1v2_hi3520d_20240131
This commit is contained in:
parent
9f42b6e939
commit
573117aac4
Binary file not shown.
|
@ -1,6 +1,6 @@
|
|||
rtmp {
|
||||
server {
|
||||
listen 1935;
|
||||
listen 1935 so_keepalive=2s:3:1;
|
||||
chunk_size 10240;
|
||||
wait_video on;
|
||||
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",
|
||||
"logs": [
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"app": "2.0.0 build 20220512_869",
|
||||
"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
|
||||
/link/shell/monitor.sh &
|
||||
fi
|
||||
|
||||
if [ -f /link/bin/TFT ];then
|
||||
/link/shell/tft.sh &
|
||||
fi
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
#!/bin/sh
|
||||
|
||||
. /etc/profile
|
||||
. /link/shell/util/func.sh
|
||||
jopen /link/config/misc/disk.json
|
||||
enable=`jget enable`
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
cp /link/config/default/* /link/config/
|
||||
rm -rf /link/config/auto/*
|
||||
cp -r /link/config/default/* /link/config/
|
||||
reboot
|
||||
|
|
|
@ -1,5 +1,11 @@
|
|||
if [ ! -f "/link/config/mac" ] || [ ! -s /link/config/mac ] || [ -z "$(cat /link/config/mac)" ]; then
|
||||
/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
|
||||
|
||||
/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'];
|
||||
foreach ($defLays as $defLay)
|
||||
{
|
||||
$layList = [];
|
||||
$layList = [];$layList1=[];
|
||||
$layouts = $defLay['layouts'];
|
||||
foreach ($layouts as $layout)
|
||||
{
|
||||
$pos = $layout['pos'];
|
||||
//按顺序生成新对象,方便后面对比
|
||||
$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'],
|
||||
'h' => $pos['h'],
|
||||
'index' => $pos['index'],
|
||||
|
@ -60,9 +70,9 @@ class Layout extends Verify
|
|||
'x' => $pos['x'],
|
||||
'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['curLayName'] = $defLay['layName'];
|
||||
|
|
|
@ -51,15 +51,13 @@ class Overlay extends Verify
|
|||
$conf = $this->load_conf('/link/config/config.json');
|
||||
$mark = file_exists("/link/config/auto/overlay.json");
|
||||
|
||||
var_dump($mark);
|
||||
|
||||
if($mark)
|
||||
{
|
||||
$overlayConf = $this->load_conf('/link/config/auto/overlay.json');
|
||||
$overlayConf = [];
|
||||
for($i=0;$i<count($params);$i++)
|
||||
{
|
||||
$param = $params[$i];
|
||||
$overlayConf[$param['id']] = $param['overlay'];
|
||||
$overlayConf[] = $param['overlay'];
|
||||
}
|
||||
$client = new RpcClient();
|
||||
$client->update_overlay($overlayConf);
|
||||
|
@ -71,6 +69,7 @@ class Overlay extends Verify
|
|||
$param = $params[$i];
|
||||
|
||||
$id = $param['id'];
|
||||
|
||||
$chn=null;$index=-1;
|
||||
for($j=0;$j<count($conf);$j++)
|
||||
{
|
||||
|
|
|
@ -55,15 +55,13 @@ function copyUserSettings(&$historyConfig, &$currentConfig,&$level=0) {
|
|||
$configFiles = getConfFiles('/tmp/history_config');
|
||||
foreach ($configFiles as $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;
|
||||
|
||||
if(!strpos($currentFile, ".json") || strpos($currentFile, "version.json") ||
|
||||
strpos($currentFile, "net.json") || strpos($currentFile, "net2.json") || strpos($currentFile, "netEx.json"))
|
||||
$ignoreFiles = ['version.json', 'net.json', 'net2.json', 'netEx.json', 'netManager.json', 'verLogs.json'];
|
||||
if (in_array(basename($currentFile), $ignoreFiles))
|
||||
continue;
|
||||
|
||||
echo $currentFile."\n";
|
||||
|
||||
$historyCtx = json_decode(file_get_contents($historyFile));
|
||||
$currentCtx = json_decode(file_get_contents($currentFile));
|
||||
|
||||
|
|
|
@ -479,40 +479,32 @@ include("head.php");
|
|||
$("#SysLayout").change(function() {
|
||||
curLayIndex = $("#SysLayout").val();
|
||||
var defLay = defLays[curLayIndex];
|
||||
var temp = [];
|
||||
var type = false;
|
||||
var tempV = [];
|
||||
var tempA = [];
|
||||
var typeV = false;
|
||||
var typeA = false;
|
||||
for (var i = 0; i < defLay.layouts.length; i++) {
|
||||
var lay = defLay.layouts[i];
|
||||
if (lay.id < 0) {
|
||||
temp.push("-1");
|
||||
tempV.push("-1");
|
||||
} else {
|
||||
type = true;
|
||||
temp.push(lay.id + "");
|
||||
typeV = true;
|
||||
tempV.push(lay.id + "");
|
||||
if(lay.ado) {
|
||||
tempA.push(lay.id + "");
|
||||
typeA = true;
|
||||
}
|
||||
}
|
||||
var mixSrcV = mixCfg["srcV"];
|
||||
|
||||
//如果自定义布局中存在指定输入源
|
||||
if (type)
|
||||
mixCfg["srcV"] = temp;
|
||||
// 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;
|
||||
}
|
||||
if (typeV)
|
||||
mixCfg["srcV"] = tempV;
|
||||
if (typeA)
|
||||
mixCfg["srcA"] = tempA;
|
||||
setLayout();
|
||||
update();
|
||||
});
|
||||
setChannel($('#channels option:first').val());
|
||||
update();
|
||||
}
|
||||
|
||||
function setLayout() {
|
||||
|
@ -521,16 +513,17 @@ include("head.php");
|
|||
$("#layout").html('');
|
||||
for (var i = 0; i < layout.length; i++) {
|
||||
var lay = $("#templeLay").clone();
|
||||
var optlist = lay.find("#laySrc").find("option").toArray();
|
||||
for (var k = optlist.length - 1; k >= 0; k--) {
|
||||
var opt = optlist[k];
|
||||
var id = $(opt).val() + "";
|
||||
for (var n = 0; n < mixV.length; n++) {
|
||||
if (id == mixV[n] && id != mixV[i] && id != "-1") {
|
||||
lay.find("#laySrc")[0].options.remove(k);
|
||||
}
|
||||
}
|
||||
}
|
||||
// var optlist = lay.find("#laySrc").find("option").toArray();
|
||||
// for (var k = optlist.length - 1; k >= 0; k--) {
|
||||
// var opt = optlist[k];
|
||||
// var id = $(opt).val() + "";
|
||||
// for (var n = 0; n < mixV.length; n++) {
|
||||
// if (id == mixV[n] && id != mixV[i] && id != "-1") {
|
||||
// console.log(id);
|
||||
// lay.find("#laySrc")[0].options.remove(k);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
lay.css("display", "block");
|
||||
lay.css("left", (layout[i].x * 100) + "%");
|
||||
|
@ -576,18 +569,11 @@ include("head.php");
|
|||
layList.push(layObj);
|
||||
}
|
||||
var str = JSON.stringify(layList);
|
||||
curLayIndex = 6;
|
||||
for (var i = 0; i < SysLayout.length; i++) {
|
||||
if (JSON.stringify(SysLayout[i]) == str) {
|
||||
$("#SysLayout").val(i);
|
||||
curLayIndex = i;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (curLayIndex == 6) {
|
||||
$("#SysLayout").val(6);
|
||||
SysLayout[6] = mixCfg["layout"];
|
||||
}
|
||||
setLayout();
|
||||
}
|
||||
|
@ -698,22 +684,6 @@ include("head.php");
|
|||
init();
|
||||
});
|
||||
$.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>
|
||||
<?php
|
||||
include("foot.php");
|
||||
|
|
|
@ -1,26 +1,26 @@
|
|||
{
|
||||
"files": {
|
||||
"main.css": "./mixer/static/css/main.375af961.chunk.css",
|
||||
"main.js": "./mixer/static/js/main.5f5e49d2.chunk.js",
|
||||
"main.js.map": "./mixer/static/js/main.5f5e49d2.chunk.js.map",
|
||||
"main.css": "./mixer/static/css/main.1be3e506.chunk.css",
|
||||
"main.js": "./mixer/static/js/main.6a7a8d48.chunk.js",
|
||||
"main.js.map": "./mixer/static/js/main.6a7a8d48.chunk.js.map",
|
||||
"runtime-main.js": "./mixer/static/js/runtime-main.c45edf70.js",
|
||||
"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/js/2.f2aad125.chunk.js": "./mixer/static/js/2.f2aad125.chunk.js",
|
||||
"static/js/2.f2aad125.chunk.js.map": "./mixer/static/js/2.f2aad125.chunk.js.map",
|
||||
"static/js/2.edf0bfe8.chunk.js": "./mixer/static/js/2.edf0bfe8.chunk.js",
|
||||
"static/js/2.edf0bfe8.chunk.js.map": "./mixer/static/js/2.edf0bfe8.chunk.js.map",
|
||||
"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",
|
||||
"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/js/2.f2aad125.chunk.js.LICENSE.txt": "./mixer/static/js/2.f2aad125.chunk.js.LICENSE.txt",
|
||||
"static/js/main.5f5e49d2.chunk.js.LICENSE.txt": "./mixer/static/js/main.5f5e49d2.chunk.js.LICENSE.txt"
|
||||
"static/css/main.1be3e506.chunk.css.map": "./mixer/static/css/main.1be3e506.chunk.css.map",
|
||||
"static/js/2.edf0bfe8.chunk.js.LICENSE.txt": "./mixer/static/js/2.edf0bfe8.chunk.js.LICENSE.txt",
|
||||
"static/js/main.6a7a8d48.chunk.js.LICENSE.txt": "./mixer/static/js/main.6a7a8d48.chunk.js.LICENSE.txt"
|
||||
},
|
||||
"entrypoints": [
|
||||
"static/js/runtime-main.c45edf70.js",
|
||||
"static/css/2.0b7c8b97.chunk.css",
|
||||
"static/js/2.f2aad125.chunk.js",
|
||||
"static/css/main.375af961.chunk.css",
|
||||
"static/js/main.5f5e49d2.chunk.js"
|
||||
"static/js/2.edf0bfe8.chunk.js",
|
||||
"static/css/main.1be3e506.chunk.css",
|
||||
"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(
|
||||
"./mixer/precache-manifest.1a06c0869ff880086e3a9be9dac86c16.js"
|
||||
"./mixer/precache-manifest.abb42691e68409f9e64fbfb6933199f3.js"
|
||||
);
|
||||
|
||||
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%;
|
||||
height: 100%;
|
||||
background: black;
|
||||
z-index: 999;
|
||||
z-index: 1;
|
||||
font-size: 60px;
|
||||
color: white;
|
||||
transition: .3s color, .3s border;
|
||||
|
@ -871,6 +871,24 @@ input[type="password"]::-ms-reveal{
|
|||
left: 9px;
|
||||
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 {
|
||||
border-radius: 1rem;
|
||||
|
@ -889,7 +907,7 @@ input[type="password"]::-ms-reveal{
|
|||
}
|
||||
|
||||
.login .input-group input {
|
||||
line-height: 2.5rem;
|
||||
line-height: 2.39rem;
|
||||
font-size: 1.2rem;
|
||||
border-left-width: 2px !important;
|
||||
}
|
||||
|
@ -992,7 +1010,8 @@ input[type="password"]::-ms-reveal{
|
|||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.dashboard .hdmi, .sdi{
|
||||
.dashboard .hdmi,
|
||||
.dashboard .sdi{
|
||||
width: 68px;
|
||||
display: inline-block;
|
||||
}
|
||||
|
@ -1000,20 +1019,18 @@ input[type="password"]::-ms-reveal{
|
|||
.dashboard .hdmi .icon {
|
||||
display: inline-block;
|
||||
background-image:url(../../assets/img/input.png);
|
||||
/*margin:0 auto;*/
|
||||
width:68px;
|
||||
height:26px;
|
||||
/*margin-top: 14px;*/
|
||||
/*margin-bottom: 14px;*/
|
||||
background-position:0px -54px;
|
||||
height:30px;
|
||||
margin-top: 13px !important;
|
||||
margin-bottom: 14px !important;
|
||||
background-position:0px -50px;
|
||||
}
|
||||
|
||||
.dashboard .sdi .icon {
|
||||
display: inline-block;
|
||||
background-image:url(../../assets/img/input.png);
|
||||
/*margin:0 auto;*/
|
||||
width:45px;
|
||||
height:54px;
|
||||
height:50px;
|
||||
background-position:0px 0px;
|
||||
}
|
||||
|
||||
|
|
|
@ -424,6 +424,31 @@
|
|||
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 {
|
||||
/*background-color: #202122;*/
|
||||
background-color: var(--bs-default-body-bg-color);
|
||||
|
@ -513,7 +538,8 @@
|
|||
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%);
|
||||
}
|
||||
|
||||
|
|
|
@ -350,6 +350,11 @@
|
|||
background-color: #fff;
|
||||
}
|
||||
|
||||
[data-bs-theme=default] .menu .search-item-icon {
|
||||
background-color: #ffffff;
|
||||
border: 1px solid #d8d8d8;
|
||||
}
|
||||
|
||||
[data-bs-theme=default] .login {
|
||||
background-color: var(--bs-body-bg-color);
|
||||
width: 100%;
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
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 = {
|
||||
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 $ from '../plugins/jquery/jquery.esm.js';
|
||||
import '../plugins/switch/js/bootstrap-switch.min.js';
|
||||
import "../plugins/timepicker/js/bootstrap-timepicker.js";
|
||||
import * as noUiSlider from "../plugins/nouislider/js/nouislider.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";
|
||||
|
||||
const {ref,reactive,toRefs,watch,watchEffect,
|
||||
computed,onMounted,nextTick,defineAsyncComponent} = vue;
|
||||
const { ref, reactive, toRefs, watch, watchEffect, computed, onMounted, nextTick, defineAsyncComponent } = vue;
|
||||
|
||||
export const ignoreCustomElementPlugin = {
|
||||
install: (app) => {
|
||||
|
@ -17,35 +16,66 @@ export const ignoreCustomElementPlugin = {
|
|||
}
|
||||
};
|
||||
|
||||
export const highlightTextPlugin = {
|
||||
install(app, options) {
|
||||
//const urlParam = options.urlParam || 'highlight';
|
||||
//const urlValue = new URLSearchParams(window.location.search).get(urlParam);
|
||||
const urlValue = "预"
|
||||
if (urlValue) {
|
||||
nextTick(()=>{
|
||||
export const filterKeywordPlugin = {
|
||||
install(app) {
|
||||
const filter = getUrlParam("filter");
|
||||
if(!filter)
|
||||
return;
|
||||
const param = {"url":location.pathname, "filter":filter}
|
||||
func("/root/getFilterKeywords",param).then(result => {
|
||||
const keyword = result.data;
|
||||
if (keyword) {
|
||||
// nextTick(() => {
|
||||
setTimeout(()=>{
|
||||
const elements = document.querySelectorAll('main cn, main en');
|
||||
elements.forEach((el) => {
|
||||
const textContent = el.textContent;
|
||||
const startIndex = textContent.indexOf(urlValue);
|
||||
const startIndex = textContent.indexOf(keyword);
|
||||
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 highlightedText = textContent.slice(startIndex, endIndex);
|
||||
const afterText = textContent.slice(endIndex);
|
||||
|
||||
const highlightedElement = document.createElement('span');
|
||||
highlightedElement.style.fontWeight = '700';
|
||||
highlightedElement.style.color = 'red';
|
||||
highlightedElement.textContent = highlightedText;
|
||||
|
||||
el.innerHTML = beforeText;
|
||||
el.appendChild(highlightedElement);
|
||||
el.innerHTML += afterText;
|
||||
}
|
||||
})
|
||||
})
|
||||
},100);
|
||||
// })
|
||||
}
|
||||
})
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -326,8 +356,7 @@ export const netFlotChartComponent = {
|
|||
if (item.seriesIndex === 1)
|
||||
showTooltip(item.pageX + 100, item.pageY - 10, color, "<cn>下行</cn><en>downward</en>: " + data);
|
||||
}
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
prePoint = null;
|
||||
preLabel = null;
|
||||
$(this).css({
|
||||
|
@ -762,7 +791,8 @@ export const h5PlayerComponent = {
|
|||
state.h5Player = {};
|
||||
}
|
||||
state.cloudHandler.value.style.display = 'flex';
|
||||
state.videoHandler.value.removeEventListener("canplay",()=>{});
|
||||
state.videoHandler.value.removeEventListener("canplay", () => {
|
||||
});
|
||||
state.hadInitPlayer = false;
|
||||
}
|
||||
const checkDelay = () => {
|
||||
|
@ -835,7 +865,8 @@ export const videoPlayerComponent = {
|
|||
|
||||
const destroyPlayer = () => {
|
||||
state.cloudHandler.value.style.display = 'flex';
|
||||
state.videoHandler.value.removeEventListener("canplay",()=>{});
|
||||
state.videoHandler.value.removeEventListener("canplay", () => {
|
||||
});
|
||||
state.hadInitPlayer = false;
|
||||
}
|
||||
|
||||
|
@ -1508,7 +1539,15 @@ export const upgradeModalComponent = {
|
|||
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, () => {
|
||||
if (Object.keys(state.bsModal).length === 0)
|
||||
return;
|
||||
state.show = !state.show;
|
||||
if (state.show)
|
||||
state.bsModal.show();
|
||||
|
@ -1871,7 +1912,6 @@ export const ptzDirectComponent = {
|
|||
}
|
||||
|
||||
watch(() => props.zoomVal, (newValue, oldValue) => {
|
||||
console.log(newValue);
|
||||
state.zoom.value = newValue;
|
||||
})
|
||||
|
||||
|
@ -1971,7 +2011,8 @@ export const usbOptionComponent = {
|
|||
},
|
||||
cancel: {
|
||||
text: "<cn>取消</cn><en>Cancel</en>",
|
||||
action: () => {}
|
||||
action: () => {
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -2050,7 +2091,8 @@ export const usbOptionComponent = {
|
|||
},
|
||||
cancel: {
|
||||
text: "<cn>取消</cn><en>Cancel</en>",
|
||||
action: () => {}
|
||||
action: () => {
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -2195,7 +2237,8 @@ export const usbOptionComponent = {
|
|||
},
|
||||
cancel: {
|
||||
text: "<cn>取消</cn><en>Cancel</en>",
|
||||
action: () => {}
|
||||
action: () => {
|
||||
}
|
||||
}
|
||||
},
|
||||
onOpenBefore: () => {
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -201,7 +201,7 @@
|
|||
<script type="module">
|
||||
import { rpc,confirm,func,checkFileExists,clearReactiveArray } from "./assets/js/lp.utils.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";
|
||||
|
||||
const {createApp,ref,reactive,watchEffect,computed} = vue;
|
||||
|
@ -332,6 +332,7 @@
|
|||
}
|
||||
});
|
||||
app.use(ignoreCustomElementPlugin);
|
||||
app.use(filterKeywordPlugin);
|
||||
app.mount('#app');
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
@ -65,7 +65,7 @@
|
|||
<div class="col-lg-12">
|
||||
<div class="card">
|
||||
<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>
|
||||
<div class="icon my-1"></div>
|
||||
<span class="name">{{item.name}}</span>
|
||||
|
@ -114,7 +114,7 @@
|
|||
<script type="module">
|
||||
import { rpc } from "./assets/js/lp.utils.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 mutationObserver from './assets/plugins/polyfill/mutationobserver.esm.js';
|
||||
|
||||
|
@ -300,6 +300,7 @@
|
|||
}
|
||||
})
|
||||
app.use(ignoreCustomElementPlugin);
|
||||
app.use(filterKeywordPlugin);
|
||||
app.mount('#app')
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
@ -92,7 +92,7 @@
|
|||
<div class="col-lg-12">
|
||||
<button type="button" class="btn border-3 btn-primary me-2" @click="saveGlobalConfByLocal">
|
||||
<cn>应用到全部</cn>
|
||||
<en>Apply to all/en>
|
||||
<en>Apply to all</en>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -353,7 +353,7 @@
|
|||
|
||||
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 { 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";
|
||||
const {createApp,ref,reactive,watch,toRefs,computed,onMounted} = vue;
|
||||
|
||||
|
@ -536,6 +536,7 @@
|
|||
}
|
||||
});
|
||||
app.use(ignoreCustomElementPlugin);
|
||||
app.use(filterKeywordPlugin);
|
||||
app.mount('#app');
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
@ -171,30 +171,34 @@
|
|||
<div class="col-1"></div>
|
||||
<div class="col-11">
|
||||
<div class="row">
|
||||
<div class="col-2 text-center">
|
||||
<div class="col text-center">
|
||||
<cn>编码格式</cn>
|
||||
<en>codec</en>
|
||||
</div>
|
||||
<div class="col-2 text-center">
|
||||
<div class="col text-center">
|
||||
<cn>音源</cn>
|
||||
<en>source</en>
|
||||
</div>
|
||||
<div class="col-2 text-center">
|
||||
<div class="col text-center">
|
||||
<cn>增益</cn>
|
||||
<en>gain</en>
|
||||
</div>
|
||||
<div class="col-2 text-center">
|
||||
<div class="col text-center">
|
||||
<cn>采样率</cn>
|
||||
<en>samplerate</en>
|
||||
</div>
|
||||
<div class="col-2 text-center">
|
||||
<div class="col text-center">
|
||||
<cn>声道</cn>
|
||||
<en>channels</en>
|
||||
</div>
|
||||
<div class="col-2 text-center">
|
||||
<div class="col text-center">
|
||||
<cn>码率(kb/s)</cn>
|
||||
<en>bitrate(kb/s)</en>
|
||||
</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>
|
||||
|
@ -253,6 +257,12 @@
|
|||
<div class="col">
|
||||
<input type="text" class="form-control" v-model.trim.lazy="globalConf.enca.bitrate">
|
||||
</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>
|
||||
|
@ -261,7 +271,7 @@
|
|||
<div class="col-lg-12">
|
||||
<button type="button" class="btn border-3 btn-primary me-2" @click="saveGlobalConfByLocal">
|
||||
<cn>应用到全部</cn>
|
||||
<en>Apply to all/en>
|
||||
<en>Apply to all</en>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -487,16 +497,20 @@
|
|||
<en>smart encode</en>
|
||||
</div>
|
||||
<div class="col text-center">
|
||||
minQP
|
||||
<cn>minQP</cn>
|
||||
<en>minQP</en>
|
||||
</div>
|
||||
<div class="col text-center">
|
||||
maxQP
|
||||
<cn>maxQP</cn>
|
||||
<en>maxQP</en>
|
||||
</div>
|
||||
<div class="col text-center">
|
||||
fixIQP
|
||||
<cn>fixIQP</cn>
|
||||
<en>fixIQP</en>
|
||||
</div>
|
||||
<div class="col text-center">
|
||||
fixPQP
|
||||
<cn>fixPQP</cn>
|
||||
<en>fixPQP</en>
|
||||
</div>
|
||||
<div class="col text-center">
|
||||
<cn>低延时编码</cn>
|
||||
|
@ -679,6 +693,10 @@
|
|||
<cn>码率(kb/s)</cn>
|
||||
<en>bitrate(kb/s)</en>
|
||||
</div>
|
||||
<div v-if="Object.keys(hardwareConf).length > 0 && hardwareConf.model==='ENC8'" class="col text-center">
|
||||
<cn>音轨</cn>
|
||||
<en>audio track</en>
|
||||
</div>
|
||||
</div>
|
||||
<hr >
|
||||
<div class="row mt-1" v-for="(item,index) in handleAdoConf" :key="item.id">
|
||||
|
@ -733,6 +751,12 @@
|
|||
<div class="col">
|
||||
<input type="text" class="form-control" v-model.trim.lazy="item.enca.bitrate">
|
||||
</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>
|
||||
<hr >
|
||||
</div>
|
||||
|
@ -840,7 +864,7 @@
|
|||
|
||||
import { extend,deepCopy,confirm } from "./assets/js/lp.utils.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";
|
||||
const {createApp,reactive,watch,toRefs,computed,onMounted} = vue;
|
||||
|
||||
|
@ -918,6 +942,8 @@
|
|||
extend(defaultConf[i].enca, deepCopy(globalConf.enca));
|
||||
if(defaultConf[i].enca.audioSrc === "source")
|
||||
defaultConf[i].enca.audioSrc = defaultConf[i].id;
|
||||
if(defaultConf[i].type !== "vi" && defaultConf[i].enca.hasOwnProperty("audioTrack"))
|
||||
delete defaultConf[i].enca.audioTrack;
|
||||
}
|
||||
saveDefaultConf();
|
||||
}
|
||||
|
@ -960,6 +986,7 @@
|
|||
}
|
||||
});
|
||||
app.use(ignoreCustomElementPlugin);
|
||||
app.use(filterKeywordPlugin);
|
||||
app.mount('#app');
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="card-body" >
|
||||
<div class="row mt-3">
|
||||
<div class="row mt-2">
|
||||
<div class="col-lg-4 d-flex lp-align-center">
|
||||
<cn>机型</cn>
|
||||
<en>Model</en>
|
||||
|
@ -31,7 +31,16 @@
|
|||
</select>
|
||||
</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">
|
||||
<button type="button" class="btn btn-primary border-2 px-3" @click="updateFacConf">
|
||||
<cn>保存</cn>
|
||||
|
@ -53,7 +62,7 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="card-body" >
|
||||
<div class="row mt-3">
|
||||
<div class="row">
|
||||
<div class="col-lg-4 d-flex lp-align-center">
|
||||
<cn>认证模式</cn>
|
||||
<en>Auth</en>
|
||||
|
@ -67,7 +76,7 @@
|
|||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row my-3">
|
||||
<div class="row mt-3">
|
||||
<div class="col-lg-12 text-center">
|
||||
<button type="button" class="btn btn-primary border-2 px-3" @click="updateLphConf">
|
||||
<cn>保存</cn>
|
||||
|
@ -215,6 +224,7 @@
|
|||
<?php include ("./public/foot.inc") ?>
|
||||
|
||||
<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 { ignoreCustomElementPlugin,bootstrapSwitchComponent,languageOptionDirective } from "./assets/js/vue.helper.js"
|
||||
import vue from "./assets/js/vue.build.js";
|
||||
|
@ -237,6 +247,7 @@
|
|||
const { mcuConf } = useMcuConf();
|
||||
|
||||
const showMcuVersion = ref(false);
|
||||
const chip = ref("");
|
||||
|
||||
watchEffect(()=>{
|
||||
if(Object.keys(hardwareConf).length > 0)
|
||||
|
@ -245,8 +256,10 @@
|
|||
showMcuVersion.value = true;
|
||||
})
|
||||
|
||||
return {hardwareConf,updateHardwareConf,curFac,facConf,updateFacConf, colorModeConf,
|
||||
updateColorModeConf,edidConf,updateEdidConf,lphConf,updateLphConf,mcuConf,showMcuVersion}
|
||||
onMounted(()=>rpc("enc.getChip").then(data => chip.value = data));
|
||||
|
||||
return {hardwareConf,updateHardwareConf,curFac,facConf,updateFacConf, colorModeConf, updateColorModeConf,
|
||||
edidConf,updateEdidConf,lphConf,updateLphConf,mcuConf,showMcuVersion,chip}
|
||||
}
|
||||
});
|
||||
app.use(ignoreCustomElementPlugin);
|
||||
|
|
|
@ -236,7 +236,7 @@
|
|||
import vue from "./assets/js/vue.build.js";
|
||||
import { rpc } from "./assets/js/lp.utils.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 app = createApp({
|
||||
|
@ -296,6 +296,7 @@
|
|||
}
|
||||
});
|
||||
app.use(ignoreCustomElementPlugin);
|
||||
app.use(filterKeywordPlugin);
|
||||
app.mount('#app');
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
@ -509,7 +509,7 @@
|
|||
<div class="col-lg-12">
|
||||
<button type="button" class="btn border-3 btn-primary me-2" @click="showSyncModal('enc')">
|
||||
<cn>应用到群组</cn>
|
||||
<en>Apply to all/en>
|
||||
<en>Apply to all</en>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -606,7 +606,7 @@
|
|||
<div class="col-lg-12">
|
||||
<button type="button" class="btn border-3 btn-primary me-2" @click="showSyncModal('stream')">
|
||||
<cn>应用到群组</cn>
|
||||
<en>Apply to all/en>
|
||||
<en>Apply to all</en>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -622,7 +622,7 @@
|
|||
<script type="module">
|
||||
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 { ignoreCustomElementPlugin,multipleSelectComponent,multipleInputComponent,
|
||||
import { ignoreCustomElementPlugin,filterKeywordPlugin,multipleSelectComponent,multipleInputComponent,
|
||||
languageOptionDirective,bootstrapSwitchComponent,customModalComponent } from "./assets/js/vue.helper.js"
|
||||
import vue from "./assets/js/vue.build.js";
|
||||
|
||||
|
@ -914,6 +914,7 @@
|
|||
}
|
||||
});
|
||||
app.use(ignoreCustomElementPlugin);
|
||||
app.use(filterKeywordPlugin);
|
||||
app.mount('#app');
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
@ -113,7 +113,7 @@
|
|||
<script type="module">
|
||||
import { rpc } from "./assets/js/lp.utils.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";
|
||||
|
||||
const {createApp,ref,reactive,watchEffect,onMounted,nextTick} = vue;
|
||||
|
@ -238,6 +238,7 @@
|
|||
}
|
||||
});
|
||||
app.use(ignoreCustomElementPlugin);
|
||||
app.use(filterKeywordPlugin);
|
||||
app.mount('#app');
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
@ -341,7 +341,7 @@
|
|||
<script type="module">
|
||||
import { rpc,alertMsg,clearReactiveObject } from "./assets/js/lp.utils.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";
|
||||
const {createApp,ref,reactive,watch,watchEffect,computed,onMounted} = vue;
|
||||
|
||||
|
@ -438,6 +438,7 @@
|
|||
}
|
||||
});
|
||||
app.use(ignoreCustomElementPlugin);
|
||||
app.use(filterKeywordPlugin);
|
||||
app.mount('#app');
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
@ -37,12 +37,14 @@ class User extends Verify
|
|||
if($index == -1 || $passwd != $passes[$index]['passwd'])
|
||||
return $this->handleRet('','error','用户名密码错误','the user name or password is incorrect');
|
||||
|
||||
session_start();
|
||||
$data = array(
|
||||
'L-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)
|
||||
$_SESSION[$key] = $value;
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
namespace Link\Ctx;
|
||||
|
||||
use DOMDocument;
|
||||
use Link\Basic;
|
||||
class Root extends Basic
|
||||
{
|
||||
|
@ -132,4 +133,78 @@ class Root extends Basic
|
|||
exec('/usr/nginx/sbin/nginx -p /usr/nginx -s reload');
|
||||
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");
|
||||
if(is_null(json_decode($param)))
|
||||
$param = json_encode($_POST);
|
||||
$param = json_decode(urldecode($param),true);
|
||||
$param = json_decode($param,true);
|
||||
|
||||
try
|
||||
{
|
||||
|
|
|
@ -55,12 +55,11 @@ function copyUserSettings(&$historyConfig, &$currentConfig,&$level=0) {
|
|||
$configFiles = getConfFiles('/tmp/history_config');
|
||||
foreach ($configFiles as $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;
|
||||
|
||||
if(!strpos($currentFile, ".json") || strpos($currentFile, "version.json") ||
|
||||
strpos($currentFile, "net.json") || strpos($currentFile, "net2.json") ||
|
||||
strpos($currentFile, "netEx.json") || strpos($currentFile,"netManager.json"))
|
||||
$ignoreFiles = ['version.json', 'net.json', 'net2.json', 'netEx.json', 'netManager.json', 'verLogs.json'];
|
||||
if (in_array(basename($currentFile), $ignoreFiles))
|
||||
continue;
|
||||
|
||||
$historyCtx = json_decode(file_get_contents($historyFile));
|
||||
|
|
|
@ -92,7 +92,7 @@
|
|||
|
||||
import { rpc,confirm } from "./assets/js/lp.utils.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 vue from "./assets/js/vue.build.js";
|
||||
|
||||
|
@ -229,7 +229,9 @@
|
|||
const onChangeLayout = () => {
|
||||
let layout = [];
|
||||
let srcV = [];
|
||||
let mark = false;
|
||||
let srcA = [];
|
||||
let markV = false;
|
||||
let markA = false;
|
||||
for(let i=0;i<defLaysConf.length;i++) {
|
||||
if(state.curLayId.value === defLaysConf[i].layId) {
|
||||
let las = defLaysConf[i].layouts;
|
||||
|
@ -239,20 +241,27 @@
|
|||
srcV.push("-1");
|
||||
} else {
|
||||
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)
|
||||
srcV.splice(0, defaultConf[state.mixIndex.value].srcV.length, ...defaultConf[state.mixIndex.value].srcV);
|
||||
else
|
||||
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].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");
|
||||
const options = document.querySelectorAll(`option[cn]`);
|
||||
options.forEach(option => {
|
||||
|
@ -294,6 +303,7 @@
|
|||
}
|
||||
});
|
||||
app.use(ignoreCustomElementPlugin);
|
||||
app.use(filterKeywordPlugin);
|
||||
app.mount('#app');
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
@ -1,26 +1,26 @@
|
|||
{
|
||||
"files": {
|
||||
"main.css": "./mixer/static/css/main.375af961.chunk.css",
|
||||
"main.js": "./mixer/static/js/main.5f5e49d2.chunk.js",
|
||||
"main.js.map": "./mixer/static/js/main.5f5e49d2.chunk.js.map",
|
||||
"main.css": "./mixer/static/css/main.1be3e506.chunk.css",
|
||||
"main.js": "./mixer/static/js/main.6a7a8d48.chunk.js",
|
||||
"main.js.map": "./mixer/static/js/main.6a7a8d48.chunk.js.map",
|
||||
"runtime-main.js": "./mixer/static/js/runtime-main.c45edf70.js",
|
||||
"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/js/2.f2aad125.chunk.js": "./mixer/static/js/2.f2aad125.chunk.js",
|
||||
"static/js/2.f2aad125.chunk.js.map": "./mixer/static/js/2.f2aad125.chunk.js.map",
|
||||
"static/js/2.edf0bfe8.chunk.js": "./mixer/static/js/2.edf0bfe8.chunk.js",
|
||||
"static/js/2.edf0bfe8.chunk.js.map": "./mixer/static/js/2.edf0bfe8.chunk.js.map",
|
||||
"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",
|
||||
"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/js/2.f2aad125.chunk.js.LICENSE.txt": "./mixer/static/js/2.f2aad125.chunk.js.LICENSE.txt",
|
||||
"static/js/main.5f5e49d2.chunk.js.LICENSE.txt": "./mixer/static/js/main.5f5e49d2.chunk.js.LICENSE.txt"
|
||||
"static/css/main.1be3e506.chunk.css.map": "./mixer/static/css/main.1be3e506.chunk.css.map",
|
||||
"static/js/2.edf0bfe8.chunk.js.LICENSE.txt": "./mixer/static/js/2.edf0bfe8.chunk.js.LICENSE.txt",
|
||||
"static/js/main.6a7a8d48.chunk.js.LICENSE.txt": "./mixer/static/js/main.6a7a8d48.chunk.js.LICENSE.txt"
|
||||
},
|
||||
"entrypoints": [
|
||||
"static/js/runtime-main.c45edf70.js",
|
||||
"static/css/2.0b7c8b97.chunk.css",
|
||||
"static/js/2.f2aad125.chunk.js",
|
||||
"static/css/main.375af961.chunk.css",
|
||||
"static/js/main.5f5e49d2.chunk.js"
|
||||
"static/js/2.edf0bfe8.chunk.js",
|
||||
"static/css/main.1be3e506.chunk.css",
|
||||
"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(
|
||||
"./mixer/precache-manifest.1a06c0869ff880086e3a9be9dac86c16.js"
|
||||
"./mixer/precache-manifest.abb42691e68409f9e64fbfb6933199f3.js"
|
||||
);
|
||||
|
||||
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">
|
||||
import { rpc,alertMsg } from "./assets/js/lp.utils.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";
|
||||
|
||||
const {createApp,ref,reactive,watchEffect,onMounted,nextTick} = vue;
|
||||
|
@ -172,6 +172,7 @@
|
|||
}
|
||||
});
|
||||
app.use(ignoreCustomElementPlugin);
|
||||
app.use(filterKeywordPlugin);
|
||||
app.mount('#app');
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
@ -473,7 +473,7 @@
|
|||
import vue from "./assets/js/vue.build.js";
|
||||
import { alertMsg,rpc5,clearReactiveArray,isEmpty } from "./assets/js/lp.utils.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 app = createApp({
|
||||
|
@ -877,6 +877,7 @@
|
|||
}
|
||||
});
|
||||
app.use(ignoreCustomElementPlugin);
|
||||
app.use(filterKeywordPlugin);
|
||||
app.mount('#app');
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
@ -360,7 +360,7 @@
|
|||
<script type="module">
|
||||
|
||||
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";
|
||||
|
||||
const {createApp,ref,reactive,watchEffect,computed,onMounted} = vue;
|
||||
|
@ -396,6 +396,7 @@
|
|||
}
|
||||
});
|
||||
app.use(ignoreCustomElementPlugin);
|
||||
app.use(filterKeywordPlugin);
|
||||
app.mount('#app');
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
@ -404,7 +404,7 @@
|
|||
<script type="module">
|
||||
import { rpc,alertMsg,confirm,func } from "./assets/js/lp.utils.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";
|
||||
|
||||
const {createApp,ref,reactive,watchEffect,computed} = vue;
|
||||
|
@ -572,6 +572,7 @@
|
|||
}
|
||||
});
|
||||
app.use(ignoreCustomElementPlugin);
|
||||
app.use(filterKeywordPlugin);
|
||||
app.mount('#app');
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
@ -63,7 +63,7 @@
|
|||
<?php include ("./public/foot.inc") ?>
|
||||
<script type="module">
|
||||
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";
|
||||
|
||||
const {createApp,ref,reactive,watch,watchEffect,computed,onMounted} = vue;
|
||||
|
@ -125,6 +125,7 @@
|
|||
}
|
||||
});
|
||||
app.use(ignoreCustomElementPlugin);
|
||||
app.use(filterKeywordPlugin);
|
||||
app.mount('#app');
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
@ -5,12 +5,12 @@
|
|||
<div class="btn-toggle-menu" @click="onToggleMenu">
|
||||
<i class="fa-solid fa-bars"></i>
|
||||
</div>
|
||||
<!-- <div class="position-relative search-bar d-lg-block d-none" data-bs-toggle="modal" data-bs-target="#searchModal">-->
|
||||
<!-- <input class="form-control form-control-sm rounded-5 px-5" disabled type="search" placeholder="Search">-->
|
||||
<!-- <span class="position-absolute ms-3 translate-middle-y start-0 top-50">-->
|
||||
<!-- <i class="fa fa-search"></i>-->
|
||||
<!-- </span>-->
|
||||
<!-- </div>-->
|
||||
<div class="position-relative search-bar d-lg-block d-none" @click="onShowSearchModal">
|
||||
<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">
|
||||
<i class="fa fa-search"></i>
|
||||
</span>
|
||||
</div>
|
||||
<ul class="navbar-nav top-right-menu gap-2">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" style="font-size: 20px;">
|
||||
|
@ -24,7 +24,7 @@
|
|||
<i v-else class="fa-regular fa-sun" @click="updateThemeConf('default')"></i>
|
||||
</a>
|
||||
</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">
|
||||
<i class="fa-solid fa-arrow-right-arrow-left"></i>
|
||||
</a>
|
||||
|
@ -83,7 +83,7 @@
|
|||
<li>
|
||||
<a href="push.php">
|
||||
<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>
|
||||
</li>
|
||||
<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>
|
||||
</a>
|
||||
</li>
|
||||
<li class="menu-label"><cn>其他设置</cn><en>Exte0nd</en></li>
|
||||
<li class="menu-label"><cn>其他设置</cn><en>OTHER</en></li>
|
||||
<li>
|
||||
<a href="javascript:;" class="has-arrow">
|
||||
<div class="parent-icon"><i class="fa-solid fa-puzzle-piece ms-1 mb-1"></i></div>
|
||||
|
@ -171,7 +171,7 @@
|
|||
<li>
|
||||
<a href="service.php">
|
||||
<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>
|
||||
</li>
|
||||
</ul>
|
||||
|
@ -185,25 +185,25 @@
|
|||
<li>
|
||||
<a href="gb28181.php">
|
||||
<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>
|
||||
</li>
|
||||
<li>
|
||||
<a href="roi.php">
|
||||
<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>
|
||||
</li>
|
||||
<li>
|
||||
<a href="insta360.php">
|
||||
<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>
|
||||
</li>
|
||||
<li>
|
||||
<a href="onvif.php">
|
||||
<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>
|
||||
</li>
|
||||
<li>
|
||||
|
@ -237,20 +237,68 @@
|
|||
</div>
|
||||
</div>
|
||||
</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>
|
||||
</div>
|
||||
|
||||
<script src="../assets/plugins/passive/passive.events.min.js"></script>
|
||||
<script type="module">
|
||||
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 { 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({
|
||||
components:{
|
||||
"usb-option": usbOptionComponent,
|
||||
"empty-box": emptyBoxFlagComponent
|
||||
},
|
||||
setup() {
|
||||
const { themeConf,updateThemeConf } = useThemeConf();
|
||||
|
@ -260,7 +308,12 @@
|
|||
metismenu: ref(null),
|
||||
isMenuToggled : 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 = () => {
|
||||
|
@ -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');
|
||||
if(state.isMenuToggled.value)
|
||||
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(()=>{
|
||||
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,
|
||||
onMouseEnter,onMouseLeave,onCloseSidebar,updateSysLanguage,changeWeb}
|
||||
onMouseEnter,onMouseLeave,onCloseSidebar,updateSysLanguage,changeWeb,onShowSearchModal,
|
||||
onHideSearchModal,onRedirect}
|
||||
}
|
||||
});
|
||||
menu.use(ignoreCustomElementPlugin);
|
||||
|
|
|
@ -285,7 +285,7 @@
|
|||
<script type="module">
|
||||
import { rpc,func,alertMsg } from "./assets/js/lp.utils.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";
|
||||
|
||||
const {createApp,ref,reactive,watchEffect,computed,onMounted} = vue;
|
||||
|
@ -458,6 +458,7 @@
|
|||
}
|
||||
});
|
||||
app.use(ignoreCustomElementPlugin);
|
||||
app.use(filterKeywordPlugin);
|
||||
app.mount('#app');
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
@ -50,19 +50,34 @@
|
|||
<div class="col-lg-12">
|
||||
<div class="row row-cols-5">
|
||||
<div class="col-lg ps-4">
|
||||
<label>Mp4</label>
|
||||
<label>
|
||||
<cn>MP4</cn>
|
||||
<en>MP4</en>
|
||||
</label>
|
||||
</div>
|
||||
<div class="col-lg ps-4">
|
||||
<label>TS</label>
|
||||
<label>
|
||||
<cn>TS</cn>
|
||||
<en>TS</en>
|
||||
</label>
|
||||
</div>
|
||||
<div class="col-lg ps-4">
|
||||
<label>FLV</label>
|
||||
<label>
|
||||
<cn>FLV</cn>
|
||||
<en>FLV</en>
|
||||
</label>
|
||||
</div>
|
||||
<div class="col-lg ps-4">
|
||||
<label>MKV</label>
|
||||
<label>
|
||||
<cn>MKV</cn>
|
||||
<en>MKV</en>
|
||||
</label>
|
||||
</div>
|
||||
<div class="col-lg ps-4">
|
||||
<label>MOV</label>
|
||||
<label>
|
||||
<cn>MOV</cn>
|
||||
<en>MOV</en>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -158,19 +173,24 @@
|
|||
<en>Channel name</en>
|
||||
</div>
|
||||
<div class="col text-center">
|
||||
MP4
|
||||
<cn>MP4</cn>
|
||||
<en>MP4</en>
|
||||
</div>
|
||||
<div class="col text-center">
|
||||
TS
|
||||
<cn>TS</cn>
|
||||
<en>TS</en>
|
||||
</div>
|
||||
<div class="col text-center">
|
||||
FLV
|
||||
<cn>FLV</cn>
|
||||
<en>FLV</en>
|
||||
</div>
|
||||
<div class="col text-center">
|
||||
MKV
|
||||
<cn>MKV</cn>
|
||||
<en>MKV</en>
|
||||
</div>
|
||||
<div class="col text-center">
|
||||
MOV
|
||||
<cn>MOV</cn>
|
||||
<en>MOV</en>
|
||||
</div>
|
||||
<div class="col text-center">
|
||||
<cn>暂停</cn>
|
||||
|
@ -304,7 +324,7 @@
|
|||
<script type="module">
|
||||
import {rpc, func, alertMsg, confirm} from "./assets/js/lp.utils.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";
|
||||
|
||||
const {createApp,ref,reactive,watchEffect,computed,onMounted} = vue;
|
||||
|
@ -563,6 +583,7 @@
|
|||
}
|
||||
});
|
||||
app.use(ignoreCustomElementPlugin);
|
||||
app.use(filterKeywordPlugin);
|
||||
app.mount('#app');
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
@ -100,7 +100,8 @@
|
|||
<div class="row">
|
||||
<div class="col-lg-3 offset-lg-1 lp-align-center">
|
||||
<label>
|
||||
QP
|
||||
<cn>QP</cn>
|
||||
<en>QP</en>
|
||||
</label>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
|
@ -142,7 +143,7 @@
|
|||
import vueDragResize from "./assets/plugins/vueDragResize/js/vue3-drag-resize.esm.js";
|
||||
import { rpc,deepCopy } from "./assets/js/lp.utils.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 app = createApp({
|
||||
|
@ -233,6 +234,7 @@
|
|||
}
|
||||
});
|
||||
app.use(ignoreCustomElementPlugin);
|
||||
app.use(filterKeywordPlugin);
|
||||
app.mount('#app');
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
@ -157,7 +157,7 @@
|
|||
<script type="module">
|
||||
import { rpc4,func,alertMsg } from "./assets/js/lp.utils.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";
|
||||
|
||||
const {createApp,ref,reactive,watch,watchEffect,computed,onMounted} = vue;
|
||||
|
@ -226,6 +226,7 @@
|
|||
}
|
||||
});
|
||||
app.use(ignoreCustomElementPlugin);
|
||||
app.use(filterKeywordPlugin);
|
||||
app.mount('#app');
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
@ -159,7 +159,7 @@
|
|||
<script type="module">
|
||||
import { alertMsg } from "./assets/js/lp.utils.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";
|
||||
|
||||
const {createApp,ref,reactive,watch,watchEffect,computed,onMounted} = vue;
|
||||
|
@ -206,6 +206,7 @@
|
|||
}
|
||||
});
|
||||
app.use(ignoreCustomElementPlugin);
|
||||
app.use(filterKeywordPlugin);
|
||||
app.mount('#app');
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
@ -23,16 +23,20 @@
|
|||
<div class="row">
|
||||
<div class="col-2"></div>
|
||||
<div class="col text-center">
|
||||
HTTP
|
||||
<cn>HTTP</cn>
|
||||
<en>HTTP</en>
|
||||
</div>
|
||||
<div v-if="Object.keys(hardwareConf).length > 0 && hardwareConf.function.hls" class="col text-center">
|
||||
HLS
|
||||
<cn>HLS</cn>
|
||||
<en>HLS</en>
|
||||
</div>
|
||||
<div class="col text-center">
|
||||
RTMP
|
||||
<cn>RTMP</cn>
|
||||
<en>RTMP</en>
|
||||
</div>
|
||||
<div class="col text-center">
|
||||
RTSP
|
||||
<cn>RTSP</cn>
|
||||
<en>RTSP</en>
|
||||
</div>
|
||||
<div class="col text-center">
|
||||
<cn>组播</cn>
|
||||
|
@ -110,7 +114,7 @@
|
|||
<div class="col-lg-12">
|
||||
<button type="button" class="btn border-3 btn-primary me-2" @click="saveGlobalConfByLocal">
|
||||
<cn>应用到全部</cn>
|
||||
<en>Apply to all/en>
|
||||
<en>Apply to all</en>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -128,7 +132,7 @@
|
|||
<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="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>
|
||||
</a>
|
||||
</li>
|
||||
|
@ -136,7 +140,7 @@
|
|||
<a class="nav-link" data-bs-toggle="tab" href="#tab2" role="tab" aria-selected="false">
|
||||
<div class="d-flex align-items-center">
|
||||
<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>
|
||||
</a>
|
||||
</li>
|
||||
|
@ -144,7 +148,7 @@
|
|||
<a class="nav-link" data-bs-toggle="tab" href="#tab3" role="tab" aria-selected="false">
|
||||
<div class="d-flex align-items-center">
|
||||
<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>
|
||||
</a>
|
||||
</li>
|
||||
|
@ -152,7 +156,7 @@
|
|||
<a class="nav-link" data-bs-toggle="tab" href="#tab4" role="tab" aria-selected="false">
|
||||
<div class="d-flex align-items-center">
|
||||
<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>
|
||||
</a>
|
||||
</li>
|
||||
|
@ -161,7 +165,7 @@
|
|||
<a class="nav-link" data-bs-toggle="tab" href="#tab5" role="tab" aria-selected="false">
|
||||
<div class="d-flex align-items-center">
|
||||
<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>
|
||||
</a>
|
||||
</li>
|
||||
|
@ -169,7 +173,7 @@
|
|||
<a class="nav-link" data-bs-toggle="tab" href="#tab6" role="tab" aria-selected="false">
|
||||
<div class="d-flex align-items-center">
|
||||
<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>
|
||||
</a>
|
||||
</li>
|
||||
|
@ -177,7 +181,7 @@
|
|||
<a class="nav-link" data-bs-toggle="tab" href="#tab7" role="tab" aria-selected="false">
|
||||
<div class="d-flex align-items-center">
|
||||
<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>
|
||||
</a>
|
||||
</li>
|
||||
|
@ -185,7 +189,7 @@
|
|||
<a class="nav-link" data-bs-toggle="tab" href="#tab8" role="tab" aria-selected="false">
|
||||
<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-title"><cn>播放地址</cn><en>Audio config</en></div>
|
||||
<div class="tab-title"><cn>播放地址</cn><en>Play URL</en></div>
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
|
@ -198,16 +202,20 @@
|
|||
<en>Channel name</en>
|
||||
</div>
|
||||
<div class="col text-center">
|
||||
HTTP
|
||||
<cn>HTTP</cn>
|
||||
<en>HTTP</en>
|
||||
</div>
|
||||
<div v-if="Object.keys(hardwareConf).length > 0 && hardwareConf.function.hls" class="col text-center">
|
||||
HLS
|
||||
<cn>HLS</cn>
|
||||
<en>HLS</en>
|
||||
</div>
|
||||
<div class="col text-center">
|
||||
RTMP
|
||||
<cn>RTMP</cn>
|
||||
<en>RTMP</en>
|
||||
</div>
|
||||
<div class="col text-center">
|
||||
RTSP
|
||||
<cn>RTSP</cn>
|
||||
<en>RTSP</en>
|
||||
</div>
|
||||
<div class="col text-center">
|
||||
<cn>组播</cn>
|
||||
|
@ -756,7 +764,7 @@
|
|||
|
||||
import {rpc, extend, deepCopy, clearReactiveArray} from "./assets/js/lp.utils.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";
|
||||
|
||||
const {createApp,ref,reactive,toRefs,watch,watchEffect,computed} = vue;
|
||||
|
@ -931,6 +939,7 @@
|
|||
}
|
||||
});
|
||||
app.use(ignoreCustomElementPlugin);
|
||||
app.use(filterKeywordPlugin);
|
||||
app.mount('#app');
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
@ -144,7 +144,7 @@
|
|||
|
||||
<script type="module">
|
||||
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";
|
||||
|
||||
const {createApp,ref,reactive,watchEffect,computed,onMounted} = vue;
|
||||
|
@ -188,6 +188,7 @@
|
|||
}
|
||||
});
|
||||
app.use(ignoreCustomElementPlugin);
|
||||
app.use(filterKeywordPlugin);
|
||||
app.mount('#app');
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
@ -70,7 +70,8 @@
|
|||
<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">
|
||||
<label>
|
||||
DHCP
|
||||
<cn>DHCP</cn>
|
||||
<en>DHCP</en>
|
||||
</label>
|
||||
</div>
|
||||
<div class="col-lg-5">
|
||||
|
@ -80,7 +81,8 @@
|
|||
<div class="row mt-3">
|
||||
<div class="col-lg-2 offset-lg-1 lp-align-center">
|
||||
<label>
|
||||
IP
|
||||
<cn>IP</cn>
|
||||
<en>IP</en>
|
||||
</label>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
|
@ -112,7 +114,8 @@
|
|||
<div class="row mt-3">
|
||||
<div class="col-lg-2 offset-lg-1 lp-align-center">
|
||||
<label>
|
||||
DNS
|
||||
<cn>DNS</cn>
|
||||
<en>DNS</en>
|
||||
</label>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
|
@ -122,7 +125,8 @@
|
|||
<div class="row mt-3">
|
||||
<div class="col-lg-2 offset-lg-1 lp-align-center">
|
||||
<label>
|
||||
MAC
|
||||
<cn>MAC</cn>
|
||||
<en>MAC</en>
|
||||
</label>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
|
@ -214,7 +218,8 @@
|
|||
<div class="row mt-4">
|
||||
<div class="col-lg-3 lp-align-center">
|
||||
<label>
|
||||
DHCP
|
||||
<cn>DHCP</cn>
|
||||
<en>DHCP</en>
|
||||
</label>
|
||||
</div>
|
||||
<div class="col-lg-8">
|
||||
|
@ -224,7 +229,8 @@
|
|||
<div class="row mt-3">
|
||||
<div class="col-lg-3 lp-align-center">
|
||||
<label>
|
||||
IP
|
||||
<cn>IP</cn>
|
||||
<en>IP</en>
|
||||
</label>
|
||||
</div>
|
||||
<div class="col-lg-8">
|
||||
|
@ -256,7 +262,8 @@
|
|||
<div class="row mt-3">
|
||||
<div class="col-lg-3 lp-align-center">
|
||||
<label>
|
||||
DNS
|
||||
<cn>DNS</cn>
|
||||
<en>DNS</en>
|
||||
</label>
|
||||
</div>
|
||||
<div class="col-lg-8">
|
||||
|
@ -320,7 +327,8 @@
|
|||
<div class="row mt-3">
|
||||
<div class="col-lg-2 offset-lg-1 lp-align-center">
|
||||
<label>
|
||||
IP
|
||||
<cn>IP</cn>
|
||||
<en>IP</en>
|
||||
</label>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
|
@ -364,7 +372,6 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="row">
|
||||
<div class="col-lg-2 offset-lg-1 lp-align-center">
|
||||
<label>
|
||||
|
@ -374,9 +381,7 @@
|
|||
</div>
|
||||
<div class="col-lg-6">
|
||||
<div class="input-group">
|
||||
<form>
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -392,9 +397,7 @@
|
|||
</div>
|
||||
<div class="col-lg-6">
|
||||
<div class="input-group">
|
||||
<form>
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -408,9 +411,7 @@
|
|||
</div>
|
||||
<div class="col-lg-6">
|
||||
<div class="input-group">
|
||||
<form>
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -423,7 +424,6 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-12">
|
||||
<div class="card">
|
||||
<div class="card-header bg-transparent">
|
||||
|
@ -977,12 +977,13 @@
|
|||
<script type="module">
|
||||
|
||||
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 { 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 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 app = createApp({
|
||||
|
@ -1217,7 +1218,7 @@
|
|||
}
|
||||
|
||||
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)
|
||||
|
@ -1237,7 +1238,7 @@
|
|||
saveAs(blob, 'configs.zip');
|
||||
})
|
||||
.catch(error => {
|
||||
console.error(error);
|
||||
console.error("下载全部失败");
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -1388,6 +1389,7 @@
|
|||
}
|
||||
});
|
||||
app.use(ignoreCustomElementPlugin);
|
||||
app.use(filterKeywordPlugin);
|
||||
app.mount('#app');
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
@ -139,7 +139,7 @@
|
|||
<script type="module">
|
||||
import { rpc,rpc6,alertMsg } from "./assets/js/lp.utils.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";
|
||||
|
||||
const {createApp,ref,reactive,watch,watchEffect,computed} = vue;
|
||||
|
@ -178,6 +178,7 @@
|
|||
}
|
||||
});
|
||||
app.use(ignoreCustomElementPlugin);
|
||||
app.use(filterKeywordPlugin);
|
||||
app.mount('#app');
|
||||
</script>
|
||||
</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