rootfs_enc1v2_hi3520d_20231229

This commit is contained in:
Jan Koppe 2024-02-15 22:07:52 +01:00
parent a593839f20
commit 9f42b6e939
Signed by: thunfisch
GPG Key ID: BE935B0735A2129B
40 changed files with 419 additions and 121 deletions

Binary file not shown.

Binary file not shown.

View File

@ -29,5 +29,6 @@
"wifi", "wifi",
"dongle", "dongle",
"other" "other"
] ],
"gw":"eth0"
} }

View File

@ -1,4 +1,15 @@
[ [
{
"version": "2.9.0 build 20231229",
"logs": [
"经典版:修复切换指定输入源的布局,有概率输入源切入无效问题",
"标准版:修复集成通信页面未绑定导播软件,导致的页面加载异常问题",
"标准版修复设置LPH后切换版本后设置无效的问题",
"标准版解码设置页面新增一键hdmi输出的功能",
"移除LPH设置水印接口多余的返回值",
"网络管理功能优化"
]
},
{ {
"version": "2.8.0 build 20231130", "version": "2.8.0 build 20231130",
"logs": [ "logs": [

View File

@ -1,5 +1,5 @@
{ {
"app": "2.0.0 build 20220512_869", "app": "2.0.0 build 20220512_869",
"sdk": "2.0.0 build 20220518_20716", "sdk": "2.0.0 build 20220518_20716",
"sys": "2.8.0 build 20231130" "sys": "2.9.0 build 20231229"
} }

View File

@ -9,6 +9,8 @@ if [ -f /link/config/auto/webVer.json ] && web=$(jq -r ".web" /link/config/auto/
sed -i '/<div class=".*d-flex.*">/,/<\/div>/ s/>[^<]*</>'"${footer}"'</g' /link/webflex/public/footfoot.inc sed -i '/<div class=".*d-flex.*">/,/<\/div>/ s/>[^<]*</>'"${footer}"'</g' /link/webflex/public/footfoot.inc
rm -rf /link/webflex/assets/img rm -rf /link/webflex/assets/img
ln -s /link/web/img /link/webflex/assets/ ln -s /link/web/img /link/webflex/assets/
rm -rf /link/webflex/.htaccess
ln -s /link/web/.htaccess /link/webflex/
cp /link/web/favicon.ico /link/webflex/ cp /link/web/favicon.ico /link/webflex/
sync sync
/link/shell/net.sh & /link/shell/net.sh &
@ -22,13 +24,14 @@ else
fi fi
if [ -d /sys/class/net/eth1 ]; then if [ -d /sys/class/net/eth1 ]; then
/link/shell/setMac2.sh
if [ -d /sys/class/net/eth2 ];then if [ -d /sys/class/net/eth2 ];then
if [ "$fac" == "ENC2" ] || [ "$fac" == "ENC2V2" ] || [ "$fac" == "ENC2_SS528" ]; then if [ "$fac" == "ENC2" ] || [ "$fac" == "ENC2V2" ] || [ "$fac" == "ENC2_SS528" ]; then
/link/shell/setMac2.sh eth2
/link/shell/setNetwork2.sh eth2 /link/shell/setNetwork2.sh eth2
fi fi
else else
if [ "$fac" != "ENC2" ] && [ "$fac" != "ENC2V2" ] && [ "$fac" != "ENC2V2_SS528" ]; then if [ "$fac" != "ENC2" ] && [ "$fac" != "ENC2V2" ] && [ "$fac" != "ENC2V2_SS528" ]; then
/link/shell/setMac2.sh eth1
/link/shell/setNetwork2.sh eth1 /link/shell/setNetwork2.sh eth1
fi fi
fi fi

View File

@ -1,26 +1,26 @@
{ {
"files": { "files": {
"main.css": "./mixer/static/css/main.375af961.chunk.css", "main.css": "./mixer/static/css/main.375af961.chunk.css",
"main.js": "./mixer/static/js/main.84be4e27.chunk.js", "main.js": "./mixer/static/js/main.5f5e49d2.chunk.js",
"main.js.map": "./mixer/static/js/main.84be4e27.chunk.js.map", "main.js.map": "./mixer/static/js/main.5f5e49d2.chunk.js.map",
"runtime-main.js": "./mixer/static/js/runtime-main.c45edf70.js", "runtime-main.js": "./mixer/static/js/runtime-main.c45edf70.js",
"runtime-main.js.map": "./mixer/static/js/runtime-main.c45edf70.js.map", "runtime-main.js.map": "./mixer/static/js/runtime-main.c45edf70.js.map",
"static/css/2.0b7c8b97.chunk.css": "./mixer/static/css/2.0b7c8b97.chunk.css", "static/css/2.0b7c8b97.chunk.css": "./mixer/static/css/2.0b7c8b97.chunk.css",
"static/js/2.f2aad125.chunk.js": "./mixer/static/js/2.f2aad125.chunk.js", "static/js/2.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.f2aad125.chunk.js.map": "./mixer/static/js/2.f2aad125.chunk.js.map",
"index.html": "./mixer/index.html", "index.html": "./mixer/index.html",
"precache-manifest.58ca0a035d7d4a54ca84834ef500469e.js": "./mixer/precache-manifest.58ca0a035d7d4a54ca84834ef500469e.js", "precache-manifest.1a06c0869ff880086e3a9be9dac86c16.js": "./mixer/precache-manifest.1a06c0869ff880086e3a9be9dac86c16.js",
"service-worker.js": "./mixer/service-worker.js", "service-worker.js": "./mixer/service-worker.js",
"static/css/2.0b7c8b97.chunk.css.map": "./mixer/static/css/2.0b7c8b97.chunk.css.map", "static/css/2.0b7c8b97.chunk.css.map": "./mixer/static/css/2.0b7c8b97.chunk.css.map",
"static/css/main.375af961.chunk.css.map": "./mixer/static/css/main.375af961.chunk.css.map", "static/css/main.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/2.f2aad125.chunk.js.LICENSE.txt": "./mixer/static/js/2.f2aad125.chunk.js.LICENSE.txt",
"static/js/main.84be4e27.chunk.js.LICENSE.txt": "./mixer/static/js/main.84be4e27.chunk.js.LICENSE.txt" "static/js/main.5f5e49d2.chunk.js.LICENSE.txt": "./mixer/static/js/main.5f5e49d2.chunk.js.LICENSE.txt"
}, },
"entrypoints": [ "entrypoints": [
"static/js/runtime-main.c45edf70.js", "static/js/runtime-main.c45edf70.js",
"static/css/2.0b7c8b97.chunk.css", "static/css/2.0b7c8b97.chunk.css",
"static/js/2.f2aad125.chunk.js", "static/js/2.f2aad125.chunk.js",
"static/css/main.375af961.chunk.css", "static/css/main.375af961.chunk.css",
"static/js/main.84be4e27.chunk.js" "static/js/main.5f5e49d2.chunk.js"
] ]
} }

View File

@ -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.84be4e27.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.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>

View File

@ -0,0 +1,34 @@
self.__precacheManifest = (self.__precacheManifest || []).concat([
{
"revision": "17cea485705a58e350102e3a5d2effcb",
"url": "./mixer/index.html"
},
{
"revision": "25cc111d980ef7eb4b05",
"url": "./mixer/static/css/2.0b7c8b97.chunk.css"
},
{
"revision": "be6c0e6e77d1c21ca23f",
"url": "./mixer/static/css/main.375af961.chunk.css"
},
{
"revision": "25cc111d980ef7eb4b05",
"url": "./mixer/static/js/2.f2aad125.chunk.js"
},
{
"revision": "4390933dc3b3a92d4f565fd4f47c3cd7",
"url": "./mixer/static/js/2.f2aad125.chunk.js.LICENSE.txt"
},
{
"revision": "be6c0e6e77d1c21ca23f",
"url": "./mixer/static/js/main.5f5e49d2.chunk.js"
},
{
"revision": "5c84e2504d745b1010aeb6ce2aad7554",
"url": "./mixer/static/js/main.5f5e49d2.chunk.js.LICENSE.txt"
},
{
"revision": "96af6c8d9af51963848a",
"url": "./mixer/static/js/runtime-main.c45edf70.js"
}
]);

View File

@ -14,7 +14,7 @@
importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js"); importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js");
importScripts( importScripts(
"./mixer/precache-manifest.58ca0a035d7d4a54ca84834ef500469e.js" "./mixer/precache-manifest.1a06c0869ff880086e3a9be9dac86c16.js"
); );
self.addEventListener('message', (event) => { self.addEventListener('message', (event) => {

File diff suppressed because one or more lines are too long

View File

@ -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 */

View File

@ -759,7 +759,7 @@ input[type="password"]::-ms-reveal{
} }
.lp-cursor-pointer { .lp-cursor-pointer {
cursor: pointer; cursor: pointer !important;
} }
.lp-display-hide { .lp-display-hide {
@ -880,9 +880,22 @@ input[type="password"]::-ms-reveal{
background-clip: unset; background-clip: unset;
} }
.login .input-group-text {
width: 46px;
}
.login .input-group-text i {
margin: 0 auto;
}
.login .input-group input { .login .input-group input {
line-height: 2.1rem; line-height: 2.5rem;
font-size: 1.3rem; font-size: 1.2rem;
border-left-width: 2px !important;
}
.login .form-check-input:focus {
box-shadow: none !important;
} }
.dashboard .w_chart { .dashboard .w_chart {

View File

@ -558,6 +558,10 @@
border-color: transparent; border-color: transparent;
} }
[data-bs-theme=dark] .mix .lay-border {
border: 1px solid #999;
}
[data-bs-theme=dark] .sys .input-group-text { [data-bs-theme=dark] .sys .input-group-text {
color: var(--bs-body-color-semi); color: var(--bs-body-color-semi);
border: 2px solid var(--bs-border-color-translucent) !important; border: 2px solid var(--bs-border-color-translucent) !important;

View File

@ -12,6 +12,7 @@
--bs-default-auth-border-color:#495057; --bs-default-auth-border-color:#495057;
--bs-default-body-color:#555; --bs-default-body-color:#555;
--bs-default-bg-color:#212529; --bs-default-bg-color:#212529;
--bs-default-txt-color:#555;
--bs-default-active-bg-color:#ffbb00; --bs-default-active-bg-color:#ffbb00;
--bs-default-acitve-color:#eeaa00; --bs-default-acitve-color:#eeaa00;
--bs-default-hr-color:#bbbbbb; --bs-default-hr-color:#bbbbbb;
@ -58,8 +59,7 @@
} }
[data-bs-theme=default] .sidebar-wrapper .sidebar-bottom .dropdown-menu { [data-bs-theme=default] .sidebar-wrapper .sidebar-bottom .dropdown-menu {
/*background-color: var(--bs-default-bg-color);*/
background-color: var(--bs-default-bg-color-2);
border-color:var(--bs-border-color-translucent); border-color:var(--bs-border-color-translucent);
} }
@ -373,8 +373,17 @@
} }
[data-bs-theme=default] .login .input-group-text { [data-bs-theme=default] .login .input-group-text {
color: var(--bs-body-color-semi); color: var(--bs-default-txt-color);
background-color: var(--bs-body-bg-color); background-color: #eeeeee;
}
[data-bs-theme=default] .login .input-group-text:nth-child(3) {
color: var(--bs-default-txt-color);
background-color: #fff;
}
[data-bs-theme=default] .login .input-group input {
background: #fff !important;
} }
[data-bs-theme=default] .login ::placeholder { [data-bs-theme=default] .login ::placeholder {
@ -420,6 +429,10 @@
color: #ddd; color: #ddd;
} }
[data-bs-theme=default] .mix .lay-border {
border: 1px solid #fff;
}
[data-bs-theme=default] .record .rec-file-title { [data-bs-theme=default] .record .rec-file-title {
background-color: #555; background-color: #555;
color: #fff; color: #fff;

View File

@ -9,4 +9,3 @@ Promise.all([queryData("config/lang.json"),queryData("config/theme_standard.json
document.body.style.display = "block"; document.body.style.display = "block";
html.dispatchEvent(new Event("loaded")); html.dispatchEvent(new Event("loaded"));
}); });

View File

@ -98,22 +98,29 @@ export const statusTemperatureComponent = {
</div> </div>
</div> </div>
</div>`, </div>`,
props: ['value','color'], props: {
modelValue: {
type: Number,
default: 0
},
activeColor: {
type: String,
default: "#fb0"
}
},
setup(props, context) { setup(props, context) {
const tmp_mask = ref(null); const tmp_mask = ref(null);
const tmp_text = ref(null); const tmp_text = ref(null);
const { value } = toRefs(props); const { modelValue,activeColor } = toRefs(props);
watch(value,()=>{ watch(modelValue,()=>{
tmp_mask.value.style.bottom = props.value + '%'; tmp_mask.value.style.bottom = modelValue.value + '%';
tmp_text.value.textContent = props.value + '℃'; tmp_text.value.textContent = modelValue.value + '℃';
}) })
onMounted(()=>{ onMounted(() => tmp_mask.value.parentElement.style.background = activeColor.value);
tmp_mask.value.parentElement.style.background = props.color;
})
return { tmp_mask,tmp_text } return { tmp_mask,tmp_text }
} }
@ -883,7 +890,16 @@ export const vueColorPickerComponent = {
<div class="arrow" data-popper-arrow></div> <div class="arrow" data-popper-arrow></div>
</div> </div>
</div>`, </div>`,
props: ['modelValue','direct'], props: {
modelValue: {
type: String,
default: ""
},
direct: {
type: String,
default: "bottom"
}
},
components: { components: {
"sketch-picker": defineAsyncComponent(() => { "sketch-picker": defineAsyncComponent(() => {
return import('../plugins/vueColor/vue3.color.esm.js').then(module => { return import('../plugins/vueColor/vue3.color.esm.js').then(module => {
@ -993,10 +1009,39 @@ export const uploadModalComponent = {
</div> </div>
</div> </div>
</div>`, </div>`,
props:['modalTitle','modalShow','modalFade','uploadTip',"uploadAction",'uploadAllow','uploadCount'], props:{
modalTitle: {
type: String,
default: ""
},
modalShow: {
type: Boolean,
default: false
},
modalFade: {
type: Boolean,
default: false
},
uploadTip: {
type: String,
default: ""
},
uploadAction: {
type: String,
default: ""
},
uploadAllow: {
type: Array,
default: ""
},
uploadCount: {
type: [Number,String],
default: 1
}
},
setup(props,context) { setup(props,context) {
const { modalShow,modalFade } = toRefs(props); const { modalShow,modalFade,uploadAllow } = toRefs(props);
const state = { const state = {
modal : ref(null), modal : ref(null),
@ -1058,7 +1103,7 @@ export const uploadModalComponent = {
dropZoneTitle: state.uploadTip, dropZoneTitle: state.uploadTip,
showClose: false, showClose: false,
browseClass:"btn btn-primary btn-df", browseClass:"btn btn-primary btn-df",
allowedFileExtensions: eval('('+props.uploadAllow+')'), allowedFileExtensions: uploadAllow.value,
uploadUrl: props.uploadAction, uploadUrl: props.uploadAction,
maxFileCount: isNaN(Number(props.uploadCount)) ? 1 : Number(props.uploadCount) maxFileCount: isNaN(Number(props.uploadCount)) ? 1 : Number(props.uploadCount)
}); });
@ -1085,6 +1130,15 @@ export const uploadModalComponent = {
initBsModal(); initBsModal();
initUploadFile(); initUploadFile();
}) })
const observer = new mutationObserver(() => {
updateLangText();
});
const config = {
attributes: true,
attributeFilter: ["data-bs-language"],
subtree: false
};
observer.observe(html, config);
}) })
return { ...state,modalFade } return { ...state,modalFade }
@ -1161,19 +1215,21 @@ export const upgradeModalComponent = {
</a> </a>
</td> </td>
<td> <td>
<a class="lp-cursor-pointer" @click="handleUpdatePatch(index)"> <a v-if="item.allow" class="lp-cursor-pointer" @click="handleUpdatePatch(index)">
<div v-if="upgradePatch.id === item.id && hadUpdate">{{updatePercent}}%</div> <div v-if="upgradePatch.id === item.id && hadUpdate">{{updatePercent}}%</div>
<div v-else> <div v-else>
<cn>更新</cn> <cn>更新</cn>
<en>Update</en> <en>Update</en>
</div> </div>
</a> </a>
<a v-else>/</a>
</td> </td>
<td> <td>
<a class="lp-cursor-pointer" @click="handleDownloadPatch(index)"> <a v-if="item.allow" class="lp-cursor-pointer" @click="handleDownloadPatch(index)">
<cn>下载</cn> <cn>下载</cn>
<en>Download</en> <en>Download</en>
</a> </a>
<a v-else>/</a>
</td> </td>
</tr> </tr>
</tbody> </tbody>
@ -1203,7 +1259,24 @@ export const upgradeModalComponent = {
</div> </div>
</div> </div>
</div>`, </div>`,
props:['modalShow','modalFade','checkUpgrade','patchSn'], props: {
modalShow: {
type: Boolean,
default: false
},
modalFade: {
type:Boolean,
default: true
},
checkUpgrade: {
type: Boolean,
default: false
},
patchSn: {
type: String,
default:""
}
},
setup(props,context) { setup(props,context) {
const { modalFade,checkUpgrade,patchSn } = toRefs(props); const { modalFade,checkUpgrade,patchSn } = toRefs(props);
@ -1256,6 +1329,16 @@ export const upgradeModalComponent = {
} }
state.systemPatchs.splice(0); state.systemPatchs.splice(0);
state.systemPatchs.push(...result.data); state.systemPatchs.push(...result.data);
let hadImpact = false;
for(let i=0;i<state.systemPatchs.length;i++) {
state.systemPatchs[i].allow = true;
if(!hadImpact) {
const impact = state.systemPatchs[i].impact;
hadImpact = impact === "1";
} else {
state.systemPatchs[i].allow = false;
}
}
result = await func("/upgrade/checkVersionMaster"); result = await func("/upgrade/checkVersionMaster");
if (result.status === "error") { if (result.status === "error") {
@ -1309,6 +1392,16 @@ export const upgradeModalComponent = {
} }
state.systemPatchs.splice(0); state.systemPatchs.splice(0);
state.systemPatchs.push(...result.data); state.systemPatchs.push(...result.data);
let hadImpact = false;
for(let i=0;i<state.systemPatchs.length;i++) {
state.systemPatchs[i].allow = true;
if(!hadImpact) {
const impact = state.systemPatchs[i].impact;
hadImpact = impact === "1";
} else {
state.systemPatchs[i].allow = false;
}
}
state.bsModal.show(); state.bsModal.show();
} }
} }
@ -1398,25 +1491,6 @@ export const upgradeModalComponent = {
type = "update"; type = "update";
} }
const params = {
action:"download", name:name,
chip:chip, type:type
}
// const fileName = name;
// axios_post('/link/upgrade.php',params, { responseType: 'arraybuffer' })
// .then(data => {
// const blob = new Blob([data], { type: 'application/octet-stream' });
// const url = URL.createObjectURL(blob);
// const a = document.createElement('a');
// a.href = url;
// a.download = fileName;
// document.body.appendChild(a);
// a.click();
// document.body.removeChild(a);
// URL.revokeObjectURL(url);
// })
const url = "http://help.linkpi.cn:5735/upgrade/"+chip+"/"+type+"/"+name; const url = "http://help.linkpi.cn:5735/upgrade/"+chip+"/"+type+"/"+name;
const downName = ""; const downName = "";
const a = document.createElement('a'); const a = document.createElement('a');
@ -1614,16 +1688,23 @@ export const loadingButtonComponent = {
<slot></slot> <slot></slot>
</span> </span>
</button>`, </button>`,
props:['customClass','hadLoading'], props: {
customClass: {
type: String,
default: ""
},
hadLoading: {
type: Boolean,
default: false
}
},
setup(props,context) { setup(props,context) {
const { hadLoading } = toRefs(props);
const onButtonClick = () => { const onButtonClick = () => {
context.emit("button-click","click") context.emit("button-click","click")
} }
return { hadLoading,onButtonClick } return { onButtonClick }
} }
} }

View File

@ -173,7 +173,7 @@ export const useNetManagerConf = (tip = "tip") => {
const [conf,mac, mac2] = await Promise.all([ const [conf,mac, mac2] = await Promise.all([
queryData("config/netManager.json"), queryData("config/netManager.json"),
queryData("config/mac",{responseType: 'text'}), await checkFileExists("config/mac") ? queryData("config/mac",{responseType: 'text'}) : Promise.resolve(""),
await checkFileExists("config/mac2") ? queryData("config/mac2",{responseType: 'text'}) : Promise.resolve("") await checkFileExists("config/mac2") ? queryData("config/mac2",{responseType: 'text'}) : Promise.resolve("")
]); ]);

View File

@ -0,0 +1,8 @@
/**
* Bundled by jsDelivr using Rollup v2.79.1 and Terser v5.19.2.
* Original file: /npm/default-passive-events@2.0.0/dist/index.module.js
*
* Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
*/
var e,t=["scroll","wheel","touchstart","touchmove","touchenter","touchend","touchleave","mouseout","mouseleave","mouseup","mousedown","mousemove","mouseenter","mousewheel","mouseover"];if(function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){e=!0}});window.addEventListener("test",null,t),window.removeEventListener("test",null,t)}catch(e){}return e}()){var o=EventTarget.prototype.addEventListener;e=o,EventTarget.prototype.addEventListener=function(o,r,n){var s,a="object"==typeof n&&null!==n,i=a?n.capture:n;(n=a?function(e){var t=Object.getOwnPropertyDescriptor(e,"passive");return t&&!0!==t.writable&&void 0===t.set?Object.assign({},e):e}(n):{}).passive=void 0!==(s=n.passive)?s:-1!==t.indexOf(o)&&!0,n.capture=void 0!==i&&i,e.call(this,o,r,n)},EventTarget.prototype.addEventListener._original=e}
//# sourceMappingURL=/sm/9e4a60b7470909b12cee41c1a75bf776dfc8fdd591416e18f74ab92915ed263e.map

View File

@ -34,7 +34,7 @@
</div> </div>
</div> </div>
<div class="col-lg-4 text-center"> <div class="col-lg-4 text-center">
<tmp-compt :value="tmp" :color="theme_color"></tmp-compt> <tmp-compt v-model="tmp" :active-color="theme_color"></tmp-compt>
<div> <div>
<cn>核心温度</cn> <cn>核心温度</cn>
<en>Core temperature</en> <en>Core temperature</en>
@ -113,7 +113,7 @@
<script type="module"> <script type="module">
import { rpc } from "./assets/js/lp.utils.js"; import { rpc } from "./assets/js/lp.utils.js";
import { useDefaultConf,useHardwareConf } from "./assets/js/vue.hooks.js"; import { useDefaultConf } from "./assets/js/vue.hooks.js";
import { ignoreCustomElementPlugin,bootstrapSwitchComponent,statusPieChartComponent,statusTemperatureComponent,netFlotChartComponent } from "./assets/js/vue.helper.js" import { ignoreCustomElementPlugin,bootstrapSwitchComponent,statusPieChartComponent,statusTemperatureComponent,netFlotChartComponent } from "./assets/js/vue.helper.js"
import vue from "./assets/js/vue.build.js"; import vue from "./assets/js/vue.build.js";
import mutationObserver from './assets/plugins/polyfill/mutationobserver.esm.js'; import mutationObserver from './assets/plugins/polyfill/mutationobserver.esm.js';
@ -151,7 +151,6 @@
} }
const { defaultConf } = useDefaultConf(); const { defaultConf } = useDefaultConf();
const { hardwareConf } = useHardwareConf();
const getData1 = (d) => { const getData1 = (d) => {
state.data1.shift(); state.data1.shift();

View File

@ -162,6 +162,10 @@
<cn>开关</cn> <cn>开关</cn>
<en>enable</en> <en>enable</en>
</div> </div>
<div class="col text-center">
<cn>HDMI</cn>
<en>HDMI</en>
</div>
</div> </div>
<hr > <hr >
<div class="row mt-1" v-for="(item,index) in handleNetConf" :key="item.id"> <div class="row mt-1" v-for="(item,index) in handleNetConf" :key="item.id">
@ -202,6 +206,12 @@
<div class="col lp-align-center"> <div class="col lp-align-center">
<bs-switch v-model="item.enable"></bs-switch> <bs-switch v-model="item.enable"></bs-switch>
</div> </div>
<div class="col lp-align-center">
<button type="button" class="btn btn-primary border-1 px-3" @click="onDisplayHdmi(item.id,item.enable)">
<cn>输出</cn>
<en>display</en>
</button>
</div>
</div> </div>
<hr > <hr >
</div> </div>
@ -225,7 +235,11 @@
<cn>开关</cn> <cn>开关</cn>
<en>enable</en> <en>enable</en>
</div> </div>
<div class="col-7"></div> <div class="col text-center">
<cn>HDMI</cn>
<en>HDMI</en>
</div>
<div class="col-6"></div>
</div> </div>
<hr > <hr >
<div class="row mt-1"> <div class="row mt-1">
@ -243,7 +257,13 @@
<div class="col lp-align-center"> <div class="col lp-align-center">
<bs-switch v-model="handleVideoFileConf.enable"></bs-switch> <bs-switch v-model="handleVideoFileConf.enable"></bs-switch>
</div> </div>
<div class="col-7"></div> <div class="col lp-align-center">
<button type="button" class="btn btn-primary border-1 px-3" @click="onDisplayHdmi(handleVideoFileConf.id,handleVideoFileConf.enable)">
<cn>输出</cn>
<en>display</en>
</button>
</div>
<div class="col-6"></div>
</div> </div>
</div> </div>
</div> </div>
@ -331,7 +351,7 @@
<?php include ("./public/foot.inc") ?> <?php include ("./public/foot.inc") ?>
<script type="module"> <script type="module">
import { rpc,extend,deepCopy,confirm,swap,clearReactiveArray,clearReactiveObject,formatTime } from "./assets/js/lp.utils.js"; import { rpc, extend, deepCopy, confirm, swap, clearReactiveArray, clearReactiveObject, formatTime, alertMsg } from "./assets/js/lp.utils.js";
import { useDefaultConf,useUsbFilesConf,useHardwareConf } from "./assets/js/vue.hooks.js"; import { useDefaultConf,useUsbFilesConf,useHardwareConf } from "./assets/js/vue.hooks.js";
import { ignoreCustomElementPlugin,bootstrapSwitchComponent,multipleSelectComponent,nouiSliderComponent,languageOptionDirective } from "./assets/js/vue.helper.js" import { ignoreCustomElementPlugin,bootstrapSwitchComponent,multipleSelectComponent,nouiSliderComponent,languageOptionDirective } from "./assets/js/vue.helper.js"
import vue from "./assets/js/vue.build.js"; import vue from "./assets/js/vue.build.js";
@ -373,6 +393,17 @@
}) })
}) })
const onDisplayHdmi = (chnId,chnEnable) => {
if(chnEnable) {
const mix = defaultConf.find(item => item.type === "mix");
mix.output.src = chnId;
updateDefaultConf("noTip").then(()=>{
alertMsg("<cn>输出至HDMI成功</cn><en>Display hdmi successfully!</en>","success");
})
} else
alertMsg("<cn>通道未开启</cn><en>Display hdmi successfully!</en>","error");
}
const handleVideoFileConf = computed(()=>{ const handleVideoFileConf = computed(()=>{
if(defaultConf.length > 0) { if(defaultConf.length > 0) {
return defaultConf.find(item => { return defaultConf.find(item => {
@ -501,7 +532,7 @@
}); });
return {...state,defaultConf,hardwareConf,handleVideoFileConf,handleUsbMp4File,onAddVideoFile, onVideoFileOption,formatTime,onTimelineSliderEnd, return {...state,defaultConf,hardwareConf,handleVideoFileConf,handleUsbMp4File,onAddVideoFile, onVideoFileOption,formatTime,onTimelineSliderEnd,
onHandleFileDuration,onHandleFilePostion,handleNetConf,saveGlobalConfByLocal,saveDefaultConf} onHandleFileDuration,onHandleFilePostion,onDisplayHdmi,handleNetConf,saveGlobalConfByLocal,saveDefaultConf}
} }
}); });
app.use(ignoreCustomElementPlugin); app.use(ignoreCustomElementPlugin);

View File

@ -387,7 +387,9 @@
dev.title = intercomConf.intercom.name; dev.title = intercomConf.intercom.name;
dev.talking = state.intercomState.talking; dev.talking = state.intercomState.talking;
} }
const count = state.intercomState.tally.length; let count = 0;
if(state.intercomState.tally)
count = state.intercomState.tally.length;
if(idx < count) if(idx < count)
dev.state = state.intercomState.tally[idx]; dev.state = state.intercomState.tally[idx];
else else

View File

@ -46,13 +46,23 @@ class Layout extends Verify
$result['srcA'] = $item['srcA']; $result['srcA'] = $item['srcA'];
foreach ($defLays as $defLay) foreach ($defLays as $defLay)
{ {
$layList = []; $layList = [];$layList1=[];
$layouts = $defLay['layouts']; $layouts = $defLay['layouts'];
foreach ($layouts as $layout) foreach ($layouts as $layout)
{ {
$pos = $layout['pos']; $pos = $layout['pos'];
//按顺序生成新对象,方便后面对比 //按顺序生成新对象,方便后面对比
$lay = array( $lay = array(
'a' => $pos['a'],
'x' => $pos['x'],
'y' => $pos ['y'],
'w' => $pos['w'],
'h' => $pos['h'],
'index' => $pos['index']
);
array_push($layList,$lay);
$lay1 = array(
'a' => $pos['a'], 'a' => $pos['a'],
'h' => $pos['h'], 'h' => $pos['h'],
'index' => $pos['index'], 'index' => $pos['index'],
@ -60,9 +70,9 @@ class Layout extends Verify
'x' => $pos['x'], 'x' => $pos['x'],
'y' => $pos ['y'] 'y' => $pos ['y']
); );
array_push($layList,$lay); array_push($layList1,$lay1);
} }
if(json_encode($item['layout']) == json_encode($layList)) if(json_encode($item['layout']) == json_encode($layList) || json_encode($item['layout']) == json_encode($layList1))
{ {
$result['curLayId'] = $defLay['layId']; $result['curLayId'] = $defLay['layId'];
$result['curLayName'] = $defLay['layName']; $result['curLayName'] = $defLay['layName'];

View File

@ -128,7 +128,7 @@ class Root extends Basic
$ctx = 'location /link {rewrite ^(.*)/link/([a-zA-Z0-9\_]+)/([a-zA-Z0-9\_]+)$ $1/link/monitor.php?class=$2&func=$3&verify=false&login=true last;}'; $ctx = 'location /link {rewrite ^(.*)/link/([a-zA-Z0-9\_]+)/([a-zA-Z0-9\_]+)$ $1/link/monitor.php?class=$2&func=$3&verify=false&login=true last;}';
if($param == '3') if($param == '3')
$ctx = 'location /link {rewrite ^(.*)/link/([a-zA-Z0-9\_]+)/([a-zA-Z0-9\_]+)$ $1/link/monitor.php?class=$2&func=$3&verify=false&login=false last;}'; $ctx = 'location /link {rewrite ^(.*)/link/([a-zA-Z0-9\_]+)/([a-zA-Z0-9\_]+)$ $1/link/monitor.php?class=$2&func=$3&verify=false&login=false last;}';
file_put_contents('/link/web/.htaccess',$ctx); file_put_contents('/link/webflex/.htaccess',$ctx);
exec('/usr/nginx/sbin/nginx -p /usr/nginx -s reload'); exec('/usr/nginx/sbin/nginx -p /usr/nginx -s reload');
return $this->handleRet($param, 'success', '保存成功', 'save successfully'); return $this->handleRet($param, 'success', '保存成功', 'save successfully');
} }

View File

@ -59,11 +59,10 @@ foreach ($configFiles as $historyFile) {
continue; continue;
if(!strpos($currentFile, ".json") || strpos($currentFile, "version.json") || if(!strpos($currentFile, ".json") || strpos($currentFile, "version.json") ||
strpos($currentFile, "net.json") || strpos($currentFile, "net2.json") || strpos($currentFile, "netEx.json")) strpos($currentFile, "net.json") || strpos($currentFile, "net2.json") ||
strpos($currentFile, "netEx.json") || strpos($currentFile,"netManager.json"))
continue; continue;
echo $currentFile."\n";
$historyCtx = json_decode(file_get_contents($historyFile)); $historyCtx = json_decode(file_get_contents($historyFile));
$currentCtx = json_decode(file_get_contents($currentFile)); $currentCtx = json_decode(file_get_contents($currentFile));

View File

@ -6,7 +6,7 @@
</head> </head>
<body> <body>
<div class="container-fluid login auth-cover lp-align-center" id="app"> <div class="container-fluid login auth-cover lp-align-center" id="app">
<div class="card border-3" style="width: 430px"> <div class="card border-3" style="width: 400px">
<div class="card-body p-4"> <div class="card-body p-4">
<div class="row"> <div class="row">
<div class="col-lg-12 text-center"> <div class="col-lg-12 text-center">
@ -17,20 +17,20 @@
<form @submit.prevent="handleSubmit" class="row g-3" action="/link/action.php" method="post" ref="form" autocomplete="off"> <form @submit.prevent="handleSubmit" class="row g-3" action="/link/action.php" method="post" ref="form" autocomplete="off">
<div class="col-12"> <div class="col-12">
<div class="input-group"> <div class="input-group">
<div class="input-group-text border-0 lp-cursor-pointer input-group-title"><i class="fa-solid fa-user font-17"></i></div> <div class="input-group-text border-0 lp-cursor-pointer"><i class="fa-solid fa-user"></i></div>
<input v-model.trim.lazy="username" type="text" class="form-control border-0 border-start" name="username"> <input v-model.trim.lazy="username" type="text" class="form-control border-0 border-start" name="username">
</div> </div>
</div> </div>
<div class="col-12"> <div class="col-12">
<div class="input-group"> <div class="input-group">
<div class="input-group-text border-0 lp-cursor-pointer input-group-title"><i class="fa-solid fa-key font-17"></i></div> <div class="input-group-text border-0 lp-cursor-pointer"><i class="fa-solid fa-key"></i></div>
<input v-model.trim.lazy="password" :type="!showPasswd ? 'password' : 'text'" class="form-control border-0 border-start input-passwd" name="password"> <input v-model.trim.lazy="password" :type="!showPasswd ? 'password' : 'text'" class="form-control border-0 border-start input-passwd" name="password">
<div class="input-group-text border-0 lp-cursor-pointer font-16" @click="showPasswd = !showPasswd"><i :class="['fa-regular',{'fa-eye-slash':showPasswd},{'fa-eye ':!showPasswd}]"></i></div> <div class="input-group-text border-0 lp-cursor-pointer font-16" @click="showPasswd = !showPasswd"><i :class="['fa-regular',{'fa-eye-slash':showPasswd},{'fa-eye ':!showPasswd}]"></i></div>
</div> </div>
</div> </div>
<div class="col-6"> <div class="col-6">
<div class="form-check form-switch form-check-primary border-0"> <div class="form-check form-switch form-check-primary border-0">
<input class="form-check-input" type="checkbox" v-model="remember"> <input class="form-check-input lp-cursor-pointer" type="checkbox" v-model="remember">
<label class="form-check-label"><cn>记住密码</cn><en>Remember Me</en></label> <label class="form-check-label"><cn>记住密码</cn><en>Remember Me</en></label>
</div> </div>
</div> </div>
@ -61,7 +61,7 @@
form: ref(null), form: ref(null),
username: ref(""), username: ref(""),
password: ref(""), password: ref(""),
remember: ref(true), remember: ref(false),
showPasswd:ref(false) showPasswd:ref(false)
} }
@ -98,7 +98,7 @@
let param = getUrlParam("u"); let param = getUrlParam("u");
if(param === "e") { if(param === "e") {
alertMsg("<cn>账号或密码错误</cn><en>The account or password is incorrect</en>","error") alertMsg("<cn>账号或密码错误</cn><en>The account or password is incorrect</en>","error")
//removeUrlParam(); removeUrlParam();
} }
}) })
return { ...state,handleSubmit } return { ...state,handleSubmit }

View File

@ -62,7 +62,7 @@
<div class="card-body pb-4" > <div class="card-body pb-4" >
<div class="lp-aspect-ratio"> <div class="lp-aspect-ratio">
<div class="aspect-ratio-content bg-black"> <div class="aspect-ratio-content bg-black">
<div v-for="(item,index) in handleActiveDefLayConf.layouts" :style="{position:'absolute',width:item.pos.w * 100+'%',height:item.pos.h*100+'%',left:item.pos.x*100+'%',top:item.pos.y*100+'%'}"> <div class="lay-border" v-for="(item,index) in handleActiveDefLayConf.layouts" :style="{position:'absolute',width:item.pos.w * 100+'%',height:item.pos.h*100+'%',left:item.pos.x*100+'%',top:item.pos.y*100+'%'}">
<div :style="{width:'100%',height:'100%',backgroundColor: handleLayBackColor(index)}"> <div :style="{width:'100%',height:'100%',backgroundColor: handleLayBackColor(index)}">
<div class="d-flex align-items-center gap-1 border-0 px-2 py-1"> <div class="d-flex align-items-center gap-1 border-0 px-2 py-1">
<div class="flex-grow-1"> <div class="flex-grow-1">
@ -147,8 +147,10 @@
}); });
const handleActiveVolume = index => { const handleActiveVolume = index => {
const idx = defaultConf[state.mixIndex.value].srcV[index].toString(); if(index < defaultConf[state.mixIndex.value].srcV.length) {
return !defaultConf[state.mixIndex.value].srcA.includes(idx) && !defaultConf[state.mixIndex.value].srcA.includes(Number(idx)); const idx = defaultConf[state.mixIndex.value].srcV[index].toString();
return !defaultConf[state.mixIndex.value].srcA.includes(idx) && !defaultConf[state.mixIndex.value].srcA.includes(Number(idx));
}
}; };
const onUpdateActiveVolume = chnId => { const onUpdateActiveVolume = chnId => {

View File

@ -1,26 +1,26 @@
{ {
"files": { "files": {
"main.css": "./mixer/static/css/main.375af961.chunk.css", "main.css": "./mixer/static/css/main.375af961.chunk.css",
"main.js": "./mixer/static/js/main.84be4e27.chunk.js", "main.js": "./mixer/static/js/main.5f5e49d2.chunk.js",
"main.js.map": "./mixer/static/js/main.84be4e27.chunk.js.map", "main.js.map": "./mixer/static/js/main.5f5e49d2.chunk.js.map",
"runtime-main.js": "./mixer/static/js/runtime-main.c45edf70.js", "runtime-main.js": "./mixer/static/js/runtime-main.c45edf70.js",
"runtime-main.js.map": "./mixer/static/js/runtime-main.c45edf70.js.map", "runtime-main.js.map": "./mixer/static/js/runtime-main.c45edf70.js.map",
"static/css/2.0b7c8b97.chunk.css": "./mixer/static/css/2.0b7c8b97.chunk.css", "static/css/2.0b7c8b97.chunk.css": "./mixer/static/css/2.0b7c8b97.chunk.css",
"static/js/2.f2aad125.chunk.js": "./mixer/static/js/2.f2aad125.chunk.js", "static/js/2.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.f2aad125.chunk.js.map": "./mixer/static/js/2.f2aad125.chunk.js.map",
"index.html": "./mixer/index.html", "index.html": "./mixer/index.html",
"precache-manifest.58ca0a035d7d4a54ca84834ef500469e.js": "./mixer/precache-manifest.58ca0a035d7d4a54ca84834ef500469e.js", "precache-manifest.1a06c0869ff880086e3a9be9dac86c16.js": "./mixer/precache-manifest.1a06c0869ff880086e3a9be9dac86c16.js",
"service-worker.js": "./mixer/service-worker.js", "service-worker.js": "./mixer/service-worker.js",
"static/css/2.0b7c8b97.chunk.css.map": "./mixer/static/css/2.0b7c8b97.chunk.css.map", "static/css/2.0b7c8b97.chunk.css.map": "./mixer/static/css/2.0b7c8b97.chunk.css.map",
"static/css/main.375af961.chunk.css.map": "./mixer/static/css/main.375af961.chunk.css.map", "static/css/main.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/2.f2aad125.chunk.js.LICENSE.txt": "./mixer/static/js/2.f2aad125.chunk.js.LICENSE.txt",
"static/js/main.84be4e27.chunk.js.LICENSE.txt": "./mixer/static/js/main.84be4e27.chunk.js.LICENSE.txt" "static/js/main.5f5e49d2.chunk.js.LICENSE.txt": "./mixer/static/js/main.5f5e49d2.chunk.js.LICENSE.txt"
}, },
"entrypoints": [ "entrypoints": [
"static/js/runtime-main.c45edf70.js", "static/js/runtime-main.c45edf70.js",
"static/css/2.0b7c8b97.chunk.css", "static/css/2.0b7c8b97.chunk.css",
"static/js/2.f2aad125.chunk.js", "static/js/2.f2aad125.chunk.js",
"static/css/main.375af961.chunk.css", "static/css/main.375af961.chunk.css",
"static/js/main.84be4e27.chunk.js" "static/js/main.5f5e49d2.chunk.js"
] ]
} }

View File

@ -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.84be4e27.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.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>

View File

@ -0,0 +1,34 @@
self.__precacheManifest = (self.__precacheManifest || []).concat([
{
"revision": "17cea485705a58e350102e3a5d2effcb",
"url": "./mixer/index.html"
},
{
"revision": "25cc111d980ef7eb4b05",
"url": "./mixer/static/css/2.0b7c8b97.chunk.css"
},
{
"revision": "be6c0e6e77d1c21ca23f",
"url": "./mixer/static/css/main.375af961.chunk.css"
},
{
"revision": "25cc111d980ef7eb4b05",
"url": "./mixer/static/js/2.f2aad125.chunk.js"
},
{
"revision": "4390933dc3b3a92d4f565fd4f47c3cd7",
"url": "./mixer/static/js/2.f2aad125.chunk.js.LICENSE.txt"
},
{
"revision": "be6c0e6e77d1c21ca23f",
"url": "./mixer/static/js/main.5f5e49d2.chunk.js"
},
{
"revision": "5c84e2504d745b1010aeb6ce2aad7554",
"url": "./mixer/static/js/main.5f5e49d2.chunk.js.LICENSE.txt"
},
{
"revision": "96af6c8d9af51963848a",
"url": "./mixer/static/js/runtime-main.c45edf70.js"
}
]);

View File

@ -14,7 +14,7 @@
importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js"); importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js");
importScripts( importScripts(
"./mixer/precache-manifest.58ca0a035d7d4a54ca84834ef500469e.js" "./mixer/precache-manifest.1a06c0869ff880086e3a9be9dac86c16.js"
); );
self.addEventListener('message', (event) => { self.addEventListener('message', (event) => {

File diff suppressed because one or more lines are too long

View File

@ -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 */

View File

@ -305,7 +305,7 @@
</label> </label>
</div> </div>
<div class="col-lg-6"> <div class="col-lg-6">
<picker-color v-model="handleEditData.color" direct="bottom"></picker-color> <picker-color v-model="handleEditData.color" :direct="'bottom'"></picker-color>
</div> </div>
</div> </div>
<div class="row mt-4" v-if="handleEditData.type === 'text' || handleEditData.type === 'time'"> <div class="row mt-4" v-if="handleEditData.type === 'text' || handleEditData.type === 'time'">
@ -316,7 +316,7 @@
</label> </label>
</div> </div>
<div class="col-lg-6"> <div class="col-lg-6">
<picker-color v-model="handleEditData.bgColor" direct="bottom"></picker-color> <picker-color v-model="handleEditData.bgColor" :direct="'bottom'"></picker-color>
</div> </div>
</div> </div>
<div class="row mt-4" v-if="handleEditData.type === 'text' || handleEditData.type === 'time' || handleEditData.type === 'pic'"> <div class="row mt-4" v-if="handleEditData.type === 'text' || handleEditData.type === 'time' || handleEditData.type === 'pic'">
@ -390,9 +390,9 @@
</div> </div>
</div> </div>
</div> </div>
<upload-modal modal-title="上传资源&Upload" :modal-show="showModal" modal-fade="true" <upload-modal :modal-title="'上传资源&Upload'" :modal-show="showModal" :modal-fade="true"
upload-allow="['png','ttf']" upload-action="/link/upd/uploadRes.php" upload-count="2" :upload-allow="['png','ttf']" :upload-action="'/link/upd/uploadRes.php'" :upload-count="2"
upload-tip="请把资源拖到此处仅支持png图片ttf格式字体...&Please drag the resourse here..." :upload-tip="'请把资源拖到此处仅支持png图片ttf格式字体...&Please drag the resourse here...'"
@upload-success="uploadSuccess" @upload-error="uploadError"> @upload-success="uploadSuccess" @upload-error="uploadError">
</upload-modal> </upload-modal>
</main> </main>

View File

@ -4,3 +4,4 @@
<script src="assets/plugins/bootstrap/js/bootstrap.bundle.min.js"></script> <script src="assets/plugins/bootstrap/js/bootstrap.bundle.min.js"></script>
<script src="assets/plugins/pace/js/pace.min.js"></script> <script src="assets/plugins/pace/js/pace.min.js"></script>
<script src="assets/plugins/simplebar/js/simplebar.min.js"></script> <script src="assets/plugins/simplebar/js/simplebar.min.js"></script>
<script src="assets/plugins/passive/passive.events.min.js"></script>

View File

@ -24,7 +24,7 @@
<i v-else class="fa-regular fa-sun" @click="updateThemeConf('default')"></i> <i v-else class="fa-regular fa-sun" @click="updateThemeConf('default')"></i>
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item" v-if="Object.keys(hardwareConf).length > 0 && hardwareConf.fac !== 'REC1'">
<a class="nav-link" style="font-size: 19px;" @click="changeWeb"> <a class="nav-link" style="font-size: 19px;" @click="changeWeb">
<i class="fa-solid fa-arrow-right-arrow-left"></i> <i class="fa-solid fa-arrow-right-arrow-left"></i>
</a> </a>

View File

@ -14,7 +14,7 @@
<ul class="nav nav-tabs nav-primary" role="tablist"> <ul class="nav nav-tabs nav-primary" role="tablist">
<li class="nav-item" role="presentation" v-if="Object.keys(netAdapter).length > 0 && Object.keys(netManagerConf).length > 0" v-for="(item,index) in Object.values(netAdapter)" :key="index"> <li class="nav-item" role="presentation" v-if="Object.keys(netAdapter).length > 0 && Object.keys(netManagerConf).length > 0" v-for="(item,index) in Object.values(netAdapter)" :key="index">
<a v-if="netManagerConf.interface.hasOwnProperty(item.dev)" :class="['nav-link',{'active':index===0}]" data-bs-toggle="tab" :href="'#tab'+(index+1)" role="tab" aria-selected="true"> <a v-if="netManagerConf.interface.hasOwnProperty(item.dev)" :class="['nav-link',{'active':index===0}]" data-bs-toggle="tab" :href="'#tab'+(index+1)" role="tab" aria-selected="true">
<div v-if="item.type === 'lan'" class="d-flex align-items-center"> <div v-if="item.type === 'lan' || item.type === 'other'" class="d-flex align-items-center">
<div class="tab-icon"><i :class="['fa-solid me-1',{'fa-code-merge':index%2===1},{'fa-code-fork':index%2===0}]"></i></i></div> <div class="tab-icon"><i :class="['fa-solid me-1',{'fa-code-merge':index%2===1},{'fa-code-fork':index%2===0}]"></i></i></div>
<div class="tab-title"> <div class="tab-title">
<cn>网口</cn> <cn>网口</cn>
@ -66,7 +66,7 @@
<div class="tab-content py-3 pe-2 ps-2"> <div class="tab-content py-3 pe-2 ps-2">
<div v-if="Object.keys(netAdapter).length > 0 && Object.keys(netManagerConf).length > 0" v-for="(item,index) in Object.values(netAdapter)" :class="['tab-pane fade',{'show active':index===0}]" :key="index" :id="'tab'+(index+1)" role="tabpanel"> <div v-if="Object.keys(netAdapter).length > 0 && Object.keys(netManagerConf).length > 0" v-for="(item,index) in Object.values(netAdapter)" :class="['tab-pane fade',{'show active':index===0}]" :key="index" :id="'tab'+(index+1)" role="tabpanel">
<div v-if="netManagerConf.interface.hasOwnProperty(item.dev) && item.type === 'lan'"> <div v-if="netManagerConf.interface.hasOwnProperty(item.dev) && (item.type === 'lan' || item.type === 'other')">
<div v-if="Object.keys(hardwareConf).length > 0 && hardwareConf.function.dhcp" class="row mt-3"> <div v-if="Object.keys(hardwareConf).length > 0 && hardwareConf.function.dhcp" class="row mt-3">
<div class="col-lg-2 offset-lg-1 lp-align-center"> <div class="col-lg-2 offset-lg-1 lp-align-center">
<label> <label>
@ -374,8 +374,10 @@
</div> </div>
<div class="col-lg-6"> <div class="col-lg-6">
<div class="input-group"> <div class="input-group">
<input class="form-control" :type="!showPasswd.oldpwd ? 'password' : 'text'" v-model.trim.lazy="userPasswd.oldpwd"> <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> <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>
</div> </div>
</div> </div>
@ -390,8 +392,10 @@
</div> </div>
<div class="col-lg-6"> <div class="col-lg-6">
<div class="input-group"> <div class="input-group">
<input class="form-control" :type="!showPasswd.newpwd ? 'password' : 'text'" v-model.trim.lazy="userPasswd.newpwd"> <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> <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>
</div> </div>
</div> </div>
@ -404,8 +408,10 @@
</div> </div>
<div class="col-lg-6"> <div class="col-lg-6">
<div class="input-group"> <div class="input-group">
<input class="form-control" :type="!showPasswd.confirm ? 'password' : 'text'" v-model.trim.lazy="userPasswd.confirm"> <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> <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>
</div> </div>
</div> </div>
@ -918,9 +924,9 @@
</div> </div>
</div> </div>
</div> </div>
<upload-modal modal-title="上传升级包&Upload" :modal-show="showUploadModal" modal-fade="true" <upload-modal :modal-title="'上传升级包&Upload'" :modal-show="showUploadModal" :modal-fade="true"
upload-allow="['bin']" upload-action="/link/upd/uploadPatch.php" upload-count="1" :upload-allow="['bin']" :upload-action="'/link/upd/uploadPatch.php'" :upload-count="1"
upload-tip="请把升级包拖动到此处...&Please drag the upgrade package here..." :upload-tip="'请把升级包拖动到此处...&Please drag the upgrade package here...'"
@upload-success="uploadSuccess" @upload-error="uploadError"> @upload-success="uploadSuccess" @upload-error="uploadError">
</upload-modal> </upload-modal>
@ -961,7 +967,7 @@
</div> </div>
</search-modal> </search-modal>
<upgrade-modal v-model:check-upgrade="checkUpgrade" :patch-sn="patchSN" modal-fade="true"></upgrade-modal> <upgrade-modal v-model:check-upgrade="checkUpgrade" :patch-sn="patchSN" :modal-fade="true"></upgrade-modal>
</main> </main>
</div> </div>
<?php include ("./public/foot.inc") ?> <?php include ("./public/foot.inc") ?>
@ -1093,17 +1099,6 @@
const getAdapterNetState = () => { const getAdapterNetState = () => {
rpc2("net.getState").then(data => { rpc2("net.getState").then(data => {
clearReactiveObject(state.netAdapter); clearReactiveObject(state.netAdapter);
const ignoreAry = [];
if(hardwareConf.fac === "ENC5V2") {
Object.values(data.interface).forEach(item => {
if(item.type === "lan" && item.dev.includes("eth"))
ignoreAry.push(item.dev);
})
}
ignoreAry.forEach(item => {
if(item !== "eth0")
delete data.interface[item];
})
Object.assign(state.netAdapter,data.interface); Object.assign(state.netAdapter,data.interface);
}); });
setTimeout(getAdapterNetState,2000); setTimeout(getAdapterNetState,2000);
@ -1117,8 +1112,8 @@
const updateDefNetwork = (dev) => { const updateDefNetwork = (dev) => {
updateNetManagerConf().then(()=>{ updateNetManagerConf().then(()=>{
if(dev === "eth0") if(dev === netManagerConf["gw"])
setTimeout(() => window.location.href="http://"+netManagerConf["interface"]["eth0"]["ip"]+"/sys.php",1000) setTimeout(() => window.location.href="http://"+netManagerConf["interface"][dev]["ip"]+"/sys.php",1000)
}) })
} }

Binary file not shown.

Binary file not shown.

Binary file not shown.