diff --git a/Backend/appsettings.Development.json b/Backend/appsettings.Development.json index d879b34..24e445c 100644 --- a/Backend/appsettings.Development.json +++ b/Backend/appsettings.Development.json @@ -16,8 +16,8 @@ "MySqlDBConfig": { "Server": "FYlY+w0XDIz+jmF2rlZWJw==", //0.201 "Port": "js2LutKe+rdjzdxMPQUrvQ==", - //"Database": "VJB2XC+lAtzuHObDGMVOAA==", //30 - "Database": "IgYBsgG2VLKKxFb64j7LOA==", //wsp + "Database": "VJB2XC+lAtzuHObDGMVOAA==", //30 + //"Database": "IgYBsgG2VLKKxFb64j7LOA==", //wsp "Root": "SzdxEgaJJ7tcTCrUl2zKsA==", "Password": "FVAPxztxpY4gJJKQ/se4bQ==" } diff --git a/Backend/wwwroot/forgeDemo.html b/Backend/wwwroot/forgeDemo.html index e9cec4b..acb4db5 100644 --- a/Backend/wwwroot/forgeDemo.html +++ b/Backend/wwwroot/forgeDemo.html @@ -275,8 +275,10 @@ // 0224 電梯 30 //launchViewer("dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dmVnb29nemNhdmNia2l0aHl2bHJzdnJjdGg2dHR3eWgtMjAyMzAyX2libXMvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDJUU5JTlCJTk5JUU2JUE4JUExJUU1JUJDJThGK01FUCVFNiU4QiU4NiVFNyVCMyVCQiVFNyVCNSVCMV8lRTklOUIlQkIlRTYlQTIlQUYlRTclQjQlQjAlRTclQUYlODAlRTclODklODhfMDIyNC5ud2Q") + // 0303 + launchViewer("dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dmVnb29nemNhdmNia2l0aHl2bHJzdnJjdGg2dHR3eWgtMjAyMzAyX2libXMvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDJUU5JTlCJTk5JUU2JUE4JUExJUU1JUJDJThGK01FUCVFNiU4QiU4NiVFNyVCMyVCQiVFNyVCNSVCMV8lRTklOUIlQkIlRTYlQTIlQUYlRTclQjQlQjAlRTclQUYlODAlRTclODklODhfMDMwMy5ud2Q") // 0221 WSP - launchViewer("dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dmVnb29nemNhdmNia2l0aHl2bHJzdnJjdGg2dHR3eWgtMjAyMzAyX2libXMvQmFucWlhbyUyMFRhaXBlaSUyME1haW4lMjBPZmZpY2UtQUxMXzAyMjEubndk") + //launchViewer("dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dmVnb29nemNhdmNia2l0aHl2bHJzdnJjdGg2dHR3eWgtMjAyMzAyX2libXMvQmFucWlhbyUyMFRhaXBlaSUyME1haW4lMjBPZmZpY2UtQUxMXzAyMjEubndk") }); function move1Floor() { diff --git a/Frontend/_accountManagement.html b/Frontend/_accountManagement.html index 032340c..469749d 100644 --- a/Frontend/_accountManagement.html +++ b/Frontend/_accountManagement.html @@ -9,12 +9,12 @@ role="tab"> 帳號管理
@@ -262,7 +262,7 @@ method: "POST", } let tag = "#accManTable"; - + let sendData = {}; if (pageAct.accManName != null) sendData.Full_name = pageAct.accManName; @@ -328,7 +328,7 @@ }, ]; - let accManTable = new YourTeam.JqDataTables.getTableByAjax(ajaxObj, tag, null, columns, column_defs); + let accManTable = new YourTeam.JqDataTables.getTableByAjax(ajaxObj, tag, null, columns, column_defs); } function loadRolManTable() { @@ -918,7 +918,7 @@ let url = baseApiUrl + "/User/SyncUser"; var data = JSON.parse(rel); objSendData.Data = data.data; - + ytAjax = new YourTeam.Ajax(url, objSendData, function () { initCallBack(); }, null, "POST").send(); diff --git a/Frontend/_alert.html b/Frontend/_alert.html index a67c353..588e5d4 100644 --- a/Frontend/_alert.html +++ b/Frontend/_alert.html @@ -710,7 +710,7 @@ "title": "異常類別", "data": "alarmClass", "render": function (data) { - return data.split('_')[0] + "-" + data.split('_')[1]; + return data.includes("_") ? data.split('_')[0] + "-" + data.split('_')[1] : data; } }, { diff --git a/Frontend/_dashboard.html b/Frontend/_dashboard.html index f50eb2b..d234eb4 100644 --- a/Frontend/_dashboard.html +++ b/Frontend/_dashboard.html @@ -461,7 +461,7 @@ } }).then(res => res.json()) .then(data => { - console.log(allAlarmCount) + // console.log(allAlarmCount) const { finish, notfinish } = data.data chartWorOrdFin([finish, notfinish]); // 已完成 未完成 chartWorOrdErr([allAlarmCount - (finish + notfinish), finish + notfinish]); @@ -560,10 +560,12 @@ } if (eveDayElecChart == null) { + // console.log(eveDayElecChart) eveDayElecChart = new Chart(eveDayElecChartCanvas, { data: eveDayElecChartData, options: eveDayElecChartOptions }) + // console.log(eveDayElecChart) } else { eveDayElecChart.data.datasets.forEach((dataset) => { if (dataset.order == 1) { @@ -863,11 +865,13 @@ $.each(data.data, (idx, alaObj) => { if (alaObj.alarmClass.indexOf("_") != -1) { let mainSubSys = alaObj.alarmClass.split("_").slice(0, 2).join("/"); - const img = $(`.btn-group.dev-group[data-id*='${mainSubSys}'] img`)[0]?.src.split('.') - const { length } = img - img[length - 1] = 'gif' - $(`.btn-group.dev-group[data-id*='${mainSubSys}'] img`)[0].src = img.join('.') - $(`.btn-group.dev-group[data-id*='${mainSubSys}'] img`).addClass("blink"); + const img = $(`.btn-group.dev-group[data-id*='${mainSubSys}'] img`)[0]?.src.split('.'); + if (img?.length > 0) { + img[img.length - 1] = 'gif'; + $(`.btn-group.dev-group[data-id*='${mainSubSys}'] img`)[0].src = img.join('.') + // console.log($(`.btn-group.dev-group[data-id*='${mainSubSys}'] img`)[0].src) + $(`.btn-group.dev-group[data-id*='${mainSubSys}'] img`).addClass("blink"); + } } }) $(`.dev-group img.blink`).each((idx, ele) => { @@ -875,11 +879,12 @@ let sysPath = devPath.split("/").slice(3, 5).join("/"); let alaDevPath = data.data.map(x => x.alarmClass?.split("_").slice(0, 2).join("/")); if (alaDevPath.indexOf(sysPath) == -1) { - const img = $(`.btn-group.dev-group[data-id*='${sysPath}'] img`)[0]?.src.split('.') - const { length } = img - img[length - 1] = 'png' - $(`.btn-group.dev-group[data-id*='${sysPath}'] img`)[0].src = img.join('.') - $(ele).removeClass("blink"); + const img = $(`.btn-group.dev-group[data-id*='${sysPath}'] img`)[0]?.src.split('.'); + if (img?.length) { + img[img.length - 1] = 'png'; + $(`.btn-group.dev-group[data-id*='${sysPath}'] img`)[0].src = img.join('.') + $(ele).removeClass("blink"); + } } }) } @@ -898,11 +903,13 @@ } // 電梯移動訂閱程序載入 - let forge3DElev = new Forge3DElevFull(elevOption); - forge3DElev.bajaEndCallback = function () { - endPageLoading(); + if (elevatorShow) { + let forge3DElev = new Forge3DElevFull(elevOption); + forge3DElev.bajaEndCallback = function () { + endPageLoading(); + } + forge3DElev.init(); } - forge3DElev.init(); }); } diff --git a/Frontend/_energyManagement.html b/Frontend/_energyManagement.html index be316fb..40b40a8 100644 --- a/Frontend/_energyManagement.html +++ b/Frontend/_energyManagement.html @@ -1,286 +1,286 @@ 
-

運維管理

-
-
-
- - - - -
+

能源管理

+
+
+
+ + + + +
+
+
+
+
+ +
+
+
+

+ - 用電狀況 +

+
+
+
+
+

今日耗電量 (kWh)

+
+ +
+ +
+
+
+
+

用電比較

+ +
+ + +
+
+
+
+
-
-
-
+
+
+
+
+
+
+

自動需量管理

-
-
-
-

- - 用電狀況 -

-
-
-
-
-

今日耗電量 (kWh)

-
- -
- -
-
-
-
-

用電比較

- -
- - -
-
-
-
-
+ +
+
+ +
+
+
-
-
-
-
-
-

自動需量管理

- - -
-
- -
- -
-
-
-
-
- -
- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
日期開始-結束卸載時長
minutes
預計卸載量
kW
是否啟用名稱功能
2022-09-0111:00:00
11:30:00
3040 啟用停車場單號照明修改
2022-09-0111:00:00
11:30:00
3040 啟用停車場單號照明修改
2022-09-0111:00:00
11:30:00
3040 啟用停車場單號照明修改
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
編號名稱建立人建立時間功能
1平台管理員王小明2022-05-02 12:08修改 刪除
2平台運維王小明2022-05-02 12:08 -
- - -
-
3客戶管理員王小明2022-05-02 12:08修改 刪除
4客戶運維王小明2022-05-02 12:08修改 刪除
-
-
-
-
-
- - - +
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
日期開始-結束卸載時長
minutes
預計卸載量
kW
是否啟用名稱功能
2022-09-0111:00:00
11:30:00
3040 啟用停車場單號照明修改
2022-09-0111:00:00
11:30:00
3040 啟用停車場單號照明修改
2022-09-0111:00:00
11:30:00
3040 啟用停車場單號照明修改
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
編號名稱建立人建立時間功能
1平台管理員王小明2022-05-02 12:08修改 刪除
2平台運維王小明2022-05-02 12:08 +
+ + +
+
3客戶管理員王小明2022-05-02 12:08修改 刪除
4客戶運維王小明2022-05-02 12:08修改 刪除
+
+
+
+
+
+ + +
- -
\ No newline at end of file diff --git a/Frontend/_historyData.html b/Frontend/_historyData.html index 2801674..b9f43d1 100644 --- a/Frontend/_historyData.html +++ b/Frontend/_historyData.html @@ -1,6 +1,6 @@

歷史資料

- +
@@ -33,7 +33,7 @@
- +
- - + +
@@ -76,7 +85,8 @@ -
`); + let tabEle = $(`
`); let tbody = tabEle.append(""); let rows = [ { id: "devName", text: "號機" }, - { id: "devNum", text: "Tag Name" }, + // { id: "devNum", text: "Tag Name" }, { id: "status", text: "狀態" }, { id: "group", text: "組別" }, { id: "weight", text: "載重" }, @@ -1302,7 +1302,7 @@ // Card 即時狀態 - 右側 table function drawOpeModBlock(devNum) { - let tabEle = $(`
`); + let tabEle = $(`
`); let tbody = tabEle.append(""); let rows = [ @@ -2439,8 +2439,7 @@ //載入3D模型 function load3DModel() { launchViewer(pageAct.urn, (viewer) => { - - + document.querySelector("#guiviewer3d-toolbar").style.display = "none"; let elevOption = { selector: "#forgeViewer", viewer: viewer, diff --git a/Frontend/_sysMonAll.html b/Frontend/_sysMonAll.html index df6a2dc..82dac73 100644 --- a/Frontend/_sysMonAll.html +++ b/Frontend/_sysMonAll.html @@ -38,252 +38,263 @@ \ No newline at end of file diff --git a/Frontend/_sysMonFloor.html b/Frontend/_sysMonFloor.html index 299b12b..f8d7481 100644 --- a/Frontend/_sysMonFloor.html +++ b/Frontend/_sysMonFloor.html @@ -8,10 +8,10 @@
@@ -46,8 +46,10 @@ }); initChart(); getFloData(); - - subDevice(); + getFloData(); + if (pageAct.sysSubTag !== "L1") { + subDevice(); + } }) onEvent("click", "#resChartZoom", function () { @@ -87,7 +89,6 @@ //currentData = selected_floor_objs[0].device; currentData = $.map(devList, function (item) { - //資料處理 if (selected_floor.device_number != undefined && selected_floor.device_number != null @@ -109,6 +110,7 @@ && item.device_nodes != null && item.device_nodes.length > 0) { + console.log("燈", item, selected_floor) if (item.device_master_number == selected_floor.device_master) { //var datatable_data = { // device_full_name: item.full_name, @@ -152,8 +154,9 @@ } return item; }); + console.log("currentData", currentData) if (currentData == null || currentData.length == 0) { - this.currentData = []; + currentData = []; } // myBaja.setPrepareSubscribeDevices(currentData); @@ -187,15 +190,16 @@ // animationDurationUpdate: 1500, tooltip: { formatter: function (params) { + console.log("params", params) if (params.data.device_node_guid != undefined && params.data.device_node_guid != null && params.data.device_node_guid != "") { return `
- 名稱:${params.data.device_node_full_name}
- Guid:${params.data.device_node_guid} -
` + 名稱:${params.data.device_node_full_name}
+ Guid:${params.data.device_node_guid} +
` } else { return `
名稱:${params.data.full_name}
- Guid:${params.data.device_guid}
` + Guid:${params.data.device_guid}
` } } }, @@ -206,7 +210,7 @@ map: 'floor_svg', roam: true, scaleLimit: { //限制放大縮小倍數 - max: 32, + max: 16, min: 1 }, layoutSize: '100%', @@ -220,7 +224,7 @@ coordinateSystem: 'geo', geoIndex: 0, symbol: 'circle', - symbolSize: 10, + symbolSize: 20, symbolOffset: [10, 10], label: { show: false @@ -232,7 +236,7 @@ type: 'scatter', coordinateSystem: 'geo', geoIndex: 0, - symbolSize: 30, + symbolSize: 50, label: { formatter: '{b}', position: 'bottom', @@ -256,7 +260,7 @@ coordinateSystem: 'geo', geoIndex: 0, showEffectOn: 'render', - symbolSize: 30, + symbolSize: 50, label: { formatter: '{b}', position: 'bottom', @@ -280,7 +284,7 @@ coordinateSystem: 'geo', geoIndex: 0, symbol: 'circle', - symbolSize: 10, + symbolSize: 20, symbolOffset: [10, 10], label: { show: false @@ -292,7 +296,7 @@ type: 'scatter', coordinateSystem: 'geo', geoIndex: 0, - symbolSize: 30, + symbolSize: 50, label: { formatter: '{b}', position: 'bottom', @@ -332,7 +336,10 @@ chartUnFocusAll(); if (params.componentType == "series") { let data = params.data; - let position = [params.event.event.clientX, params.event.event.clientY]; + let rect = $("#floChart")[0].getBoundingClientRect(); + let position = [rect.left + rect.width / 2, rect.top + rect.height / 4] + // console.log(position) + // let position = [params.event.event.clientX+100, params.event.event.clientY-300]; data._dbId = data._dbId ?? null; parentEle = crePosPopover(position, data); $(parentEle).click(); @@ -380,6 +387,8 @@ currentData.forEach(function (cData) { if (cData.device_guid == point.device_guid) { cData._dbId = dbid; + cData.spriteDbid = dbid; + setForgeHotSpotColor(cData); } }) }); @@ -453,6 +462,13 @@ if (!matchDevice) { return false; } + //將訂閱值塞入 subDeviceData + if (subDeviceData.findIndex(x => x.device_number == matchDevice.device_number) == -1) { + let obj = {}; + obj.device_number = matchDevice.device_number; + obj.dbid = matchDevice.forge_dbid; + subDeviceData.push(obj) + } let norDevPoiName = matchDevice.device_normal_point_name; let cloDevPoiName = matchDevice.device_close_point_name; let errDevPoiName = matchDevice.device_error_point_name; @@ -464,13 +480,18 @@ } - if (data.point_name == "SSC") { + if (data.point_name == "SSC" && pageAct.sysSubTag === "L1") { const lightOn = data.value.includes("true") setLightOpenOrClose(lightOn, matchDevice.device_guid); if (lightOn) { + //console.log(matchDevice) setLightValues(matchDevice.device_guid, 200, 0xe1cf18); + console.log("SSC", matchDevice.device_number, 40) + heatMap?.changeTemp(matchDevice.device_number, 40); } else { setLightValues(matchDevice.device_guid, 0, 0xffffff); + // console.log("SSC",matchDevice.device_number, 0) + heatMap?.changeTemp(matchDevice.device_number, 0); } } @@ -482,6 +503,7 @@ } else if (data.point_name == errDevPoiName && data.value == matchDevice.device_error_point_value) { $(`#${matchDevice.device_number}_status`).attr("data-light-type", "error").data("light-type", "error"); } + setForgeHotSpotColor(matchDevice); }); @@ -640,7 +662,7 @@ // 重設平面圖設備資料 function resetData() { - + console.log("reset", currentData) const scatter_symbol_convertData = function (data, zoom) { //正常、關閉排除CCVT(圓點) let res = [], temp = []; data.forEach(function (item, index) { @@ -827,6 +849,7 @@ item_node.device_image = item.device_image; temp.push(item_node); }); + } else { temp.push(item) } @@ -1082,30 +1105,37 @@ nextFloor = nextFloor.split("U")[1]; } + getLevelsData(curFloTag, nextFloor, function () { + viewer.model.search("天花板", (nodeIds) => { + // console.log("2",nodeIds) + viewer.hide(nodeIds) + }, (e) => { console.log(e) }) $(loadEle).Loading("close"); }); setHeatMap(); - let elevOption = { - viewer: viewer, - ordPath: { - "area_tag": pageAct.AreaTag, - "building_tag": pageAct.buiTag, + if (pageAct.sysSubTag == "ELEV") { + let elevOption = { + viewer: viewer, + ordPath: { + "area_tag": pageAct.AreaTag, + "building_tag": pageAct.buiTag, + } } + // 電梯移動訂閱程序載入 + let forge3DElev = new Forge3DElevFull(elevOption); + forge3DElev.bajaEndCallback = function () { + endPageLoading(); + } + forge3DElev.init(); } - // 電梯移動訂閱程序載入 - let forge3DElev = new Forge3DElevFull(elevOption); - forge3DElev.bajaEndCallback = function () { - endPageLoading(); - } - forge3DElev.init(); }); } function setHeatMap() { - if (pageAct.sysMainTag !== "LT" && pageAct.sysSubTag !== "M12") { + if (pageAct.sysSubTag !== "M12") { devices = currentData.map(x => { return { roomDbId: !isNaN(parseInt(x.room_dbid)) ? parseInt(x.room_dbid) : -1, @@ -1124,9 +1154,9 @@ heatMap = new ADHeatMaps(option); heatMap.onComplete = () => { - $.each(currentData, (idx, dev) => { heatMap.changeTemp(dev.device_number, dev._temp || 0); + subDevice(); }) } } @@ -1171,7 +1201,10 @@ onEvent("autodesk:click:sprite", "#forgeViewer", function (e, obj) { forgeUnFocusAll(); chartUnFocusAll(); - let position = [obj.event.target.toolController.lastClickX, obj.event.target.toolController.lastClickY]; + let rect = $("#forgeViewer")[0].getBoundingClientRect(); + let position = [rect.left + rect.width / 2, rect.top + rect.height / 4] + // console.log(position) + // let position = [obj.event.target.toolController.lastClickX, obj.event.target.toolController.lastClickY]; let devObj = obj.myData; let name = currentData.filter(x => x.device_guid == devObj.device_guid)[0]?.full_name; devObj.full_name = name; @@ -1196,7 +1229,15 @@ function forgeUnFocusAll() { $.each(currentData, (idx, cData) => { - controlFocusHotspot(cData._dbId, false); + const eleDbId = cData._dbId + if (alarmDbIdList.some(dbId => dbId == eleDbId)) { + changeScaleForHotspot(eleDbId, false) + return + } + else { + // 3D 熱點解除 + controlFocusHotspot(eleDbId, false); + } }) } @@ -1204,7 +1245,7 @@ let option = floChart.getOption(); option.series.forEach(function (series) { series.data.forEach(function (point) { - point.symbolSize = 10; + point.symbolSize = 20; }); }); floChart.setOption(option); @@ -1217,7 +1258,7 @@ option.series.forEach(function (series) { series.data.forEach(function (point) { if (point.device_guid == devGuid) { - point.symbolSize = 10; + point.symbolSize = 20; } }); }); diff --git a/Frontend/css/site.css b/Frontend/css/site.css index 65ee5ca..bc8a92e 100644 --- a/Frontend/css/site.css +++ b/Frontend/css/site.css @@ -1,100 +1,320 @@  -:root { --yt-main-gray: #c2c7d0; --yt-main-black: #212529; --yt-main-gray-hover: #c2c7d0; --yt-gray: #505050; --yt-gray-hover: #3c3c3c; --yt-gray-2: #8f8c8c; --yt-gray-2-hover: #646060; --yt-gray-3: #ededed; --yt-gray-4: #dddddd; --yt-pink: #ff95d0; --yt-pink-hover: #ef84c0; --yt-red-2: #d34949; --yt-yellow-1: #ffc902; } +:root { + --yt-main-gray: #c2c7d0; + --yt-main-black: #212529; + --yt-main-gray-hover: #c2c7d0; + --yt-gray: #505050; + --yt-gray-hover: #3c3c3c; + --yt-gray-2: #8f8c8c; + --yt-gray-2-hover: #646060; + --yt-gray-3: #ededed; + --yt-gray-4: #dddddd; + --yt-pink: #ff95d0; + --yt-pink-hover: #ef84c0; + --yt-red-2: #d34949; + --yt-yellow-1: #ffc902; +} -.mod-skin-dark:not(.mod-skin-light) .panel-hdr, .mod-skin-dark:not(.mod-skin-light) .card-header { background: rgba(0, 0, 0, 0.03); } +.mod-skin-dark:not(.mod-skin-light) .panel-hdr, .mod-skin-dark:not(.mod-skin-light) .card-header { + background: rgba(0, 0, 0, 0.03); +} -.btn-sm-2 { padding: 2px 19px; } +.btn-sm-2 { + padding: 2px 19px; +} -.table td { word-break: break-all; } +.table td { + word-break: break-all; +} -label[id$='-error'].error { color: var(--yt-red-2); } +label[id$='-error'].error { + color: var(--yt-red-2); +} /*[id^=yt_tooltip] { min-width: 650px !important; }*/ -.circle-light { display: inline-block; width: 25px; height: 25px; border-radius: 50px; } +.circle-light { + display: inline-block; + width: 25px; + height: 25px; + border-radius: 50px; +} -.light-flash { --flash-color-1: #ffa100; --flash-color-2: #26272b; animation: flashing-bg 0.5s linear infinite; } +.light-flash { + --flash-color-1: #ffa100; + --flash-color-2: #26272b; + animation: flashing-bg 0.5s linear infinite; +} -.light-flash-c { --flash-color-1: #ffa100; --flash-color-2: #26272b; animation: flashing-c 0.5s linear infinite; } +.light-flash-c { + --flash-color-1: #ffa100; + --flash-color-2: #26272b; + animation: flashing-c 0.5s linear infinite; +} -.light-flash-c-bd { --flash-color-1: #ffa100; --flash-color-2: #26272b; animation: flashing-c-bd 0.5s linear infinite; } +.light-flash-c-bd { + --flash-color-1: #ffa100; + --flash-color-2: #26272b; + animation: flashing-c-bd 0.5s linear infinite; +} /* checkbox switch */ -input.toggle:checked::before { content: ''; position: absolute; top: 2px; left: 24px; display: block; border-radius: 25px; width: 20px; height: 20px; background: #3f8635; } +input.toggle:checked::before { + content: ''; + position: absolute; + top: 2px; + left: 24px; + display: block; + border-radius: 25px; + width: 20px; + height: 20px; + background: #3f8635; +} -input.toggle::before { content: ''; position: absolute; top: 2px; left: 3px; display: block; border-radius: 25px; width: 20px; height: 20px; background: #656565; transition: 0.2s; } +input.toggle::before { + content: ''; + position: absolute; + top: 2px; + left: 3px; + display: block; + border-radius: 25px; + width: 20px; + height: 20px; + background: #656565; + transition: 0.2s; +} -input.toggle { cursor: pointer; appearance: none; position: relative; width: 48px; height: 24px; background: #464646; border-radius: 50px; align-content: center; } +input.toggle { + cursor: pointer; + appearance: none; + position: relative; + width: 48px; + height: 24px; + background: #464646; + border-radius: 50px; + align-content: center; +} -input.toggle:checked { background: #97c193; } + input.toggle:checked { + background: #97c193; + } -.loading-bg { background: #0000009c; background-repeat: no-repeat; opacity: 0; width: 100%; height: 100vh; position: fixed; z-index: 3000; } +.loading-bg { + background: #0000009c; + background-repeat: no-repeat; + opacity: 0; + width: 100%; + height: 100vh; + position: fixed; + z-index: 3000; +} -.dropdown-menu { z-index: 3000; } +.dropdown-menu { + z-index: 3000; +} -.adsk-viewing-viewer { top: 0px; } +.adsk-viewing-viewer { + top: 0px; +} -.lds-ring { display: inline-block; position: relative; width: 25px; height: 25px; margin-right: 0.8rem; } +.lds-ring { + display: inline-block; + position: relative; + width: 25px; + height: 25px; + margin-right: 0.8rem; +} -.lds-ring div { top: -4px; box-sizing: border-box; display: block; position: absolute; width: 25px; height: 25px; margin: 6px; border: 6px solid #fff; border-radius: 50%; animation: lds-ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite; border-color: #fff transparent transparent transparent; } + .lds-ring div { + top: -4px; + box-sizing: border-box; + display: block; + position: absolute; + width: 25px; + height: 25px; + margin: 6px; + border: 6px solid #fff; + border-radius: 50%; + animation: lds-ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite; + border-color: #fff transparent transparent transparent; + } -.lds-ring div:nth-child(1) { animation-delay: -0.45s; } + .lds-ring div:nth-child(1) { + animation-delay: -0.45s; + } -.lds-ring div:nth-child(2) { animation-delay: -0.3s; } + .lds-ring div:nth-child(2) { + animation-delay: -0.3s; + } -.lds-ring div:nth-child(3) { animation-delay: -0.15s; } + .lds-ring div:nth-child(3) { + animation-delay: -0.15s; + } /* js-tree */ -.jstree-node { padding-bottom: 3px; } -.jstree-default-dark { background-color: transparent; } -.jstree a.jstree-anchor { color: #d6d6d6 !important; } +.jstree-node { + padding-bottom: 3px; +} -.dropzone .dz-preview.dz-file-preview .dz-image { background: linear-gradient(to bottom, #675d72, #4d4a56) !important; } +.jstree-default-dark { + background-color: transparent; +} -.dz-remove { position: absolute; top: -8px; right: -8px; z-index: 100; } +.jstree a.jstree-anchor { + color: #d6d6d6 !important; +} -.dz-remove span { width: 30px; height: 30px; font-size: 24px; border-radius: 10px; color: white; cursor: pointer !important; padding-top: 3px; transition: 0.2s; } +.dropzone .dz-preview.dz-file-preview .dz-image { + background: linear-gradient(to bottom, #675d72, #4d4a56) !important; +} -.dz-remove span.mi-delete { background: var(--danger); } +.dz-remove { + position: absolute; + top: -8px; + right: -8px; + z-index: 100; +} -.dz-remove span.mi-cancel { font-size: 30px; color: var(--color_grey); } + .dz-remove span { + width: 30px; + height: 30px; + font-size: 24px; + border-radius: 10px; + color: white; + cursor: pointer !important; + padding-top: 3px; + transition: 0.2s; + } -.dz-remove:hover span { transform: scale(1.1); transition: 0.2s; } -.dropzone .dz-preview.dz-image-preview { background-color: transparent !important; } + .dz-remove span.mi-delete { + background: var(--danger); + } -input:-webkit-autofill { background-color: rgba(0, 0, 0, 0.15) !important; } + .dz-remove span.mi-cancel { + font-size: 30px; + color: var(--color_grey); + } -.d-grid { display: grid; } + .dz-remove:hover span { + transform: scale(1.1); + transition: 0.2s; + } -.grid-gap-1 { grid-gap: 1px; } -.grid-gap-2 { grid-gap: 2px; } -.grid-gap-3 { grid-gap: 3px; } -.grid-gap-4 { grid-gap: 4px; } -.grid-gap-5 { grid-gap: 5px; } -.grid-gap-c { grid-gap: var(--c-grid-gap); } +.dropzone .dz-preview.dz-image-preview { + background-color: transparent !important; +} -.grid-temp-col-c { grid-template-columns: var(--c-grid-temp-col); } +input:-webkit-autofill { + background-color: rgba(0, 0, 0, 0.15) !important; +} -.vakata-context, .vakata-context ul { background-color: #3f3f3f; box-shadow: 2px 2px 2px #111111; } -.vakata-context li > a { color: white; text-shadow: 1px 1px 0 #4b4b4b; } -.vakata-context .vakata-context-hover > a { background-color: #666666; box-shadow: 0 0 2px #2f2f2f; } -.vakata-context li > a:hover { background-color: #636363; box-shadow: 0 0 2px #2f2f2f; } +.d-grid { + display: grid; +} -.yt-left-navbar { position: fixed; left: 0; top: 0; height: 100%; z-index: 10; background-color: rgb(25 25 25 / 95%); width: auto; max-width: 300px; margin-top: 4.125rem; } -.yt-navbar-content ul { padding: 1rem 0rem; list-style-type: none; } -.yt-navbar-content ul li { position: relative; display: flex; flex-wrap: wrap; } -.yt-navbar-content ul li a { font-size: 0.9rem; padding: 0.75rem 2rem; position: relative; width: 100%; } -.yt-navbar-content ul li a:hover { background-color: var(--theme-fusion-600); } -.yt-navbar-content ul li a:active, .yt-navbar-content ul li a.active { background-color: var(--theme-light); } +.grid-gap-1 { + grid-gap: 1px; +} -.card-header.p-3.ui-draggable-handle:hover { cursor: move; } +.grid-gap-2 { + grid-gap: 2px; +} -.device-wrap .card-body #info, .device-wrap .card-body #errRec, .device-wrap .card-body #opeRec { min-width: 500px; } -.scrolledTable { overflow-y: auto; clear: both; max-height:100%;} +.grid-gap-3 { + grid-gap: 3px; +} + +.grid-gap-4 { + grid-gap: 4px; +} + +.grid-gap-5 { + grid-gap: 5px; +} + +.grid-gap-c { + grid-gap: var(--c-grid-gap); +} + +.grid-temp-col-c { + grid-template-columns: var(--c-grid-temp-col); +} + +.vakata-context, .vakata-context ul { + background-color: #3f3f3f; + box-shadow: 2px 2px 2px #111111; +} + + .vakata-context li > a { + color: white; + text-shadow: 1px 1px 0 #4b4b4b; + } + + .vakata-context .vakata-context-hover > a { + background-color: #666666; + box-shadow: 0 0 2px #2f2f2f; + } + + .vakata-context li > a:hover { + background-color: #636363; + box-shadow: 0 0 2px #2f2f2f; + } + +.yt-left-navbar { + position: fixed; + left: 0; + top: 0; + height: 100%; + z-index: 10; + background-color: rgb(25 25 25 / 95%); + width: auto; + max-width: 300px; + margin-top: 4.125rem; +} + +.yt-navbar-content ul { + padding: 1rem 0rem; + list-style-type: none; +} + + .yt-navbar-content ul li { + position: relative; + display: flex; + flex-wrap: wrap; + } + + .yt-navbar-content ul li a { + font-size: 0.9rem; + padding: 0.75rem 2rem; + position: relative; + width: 100%; + } + + .yt-navbar-content ul li a:hover { + background-color: var(--theme-fusion-600); + } + + .yt-navbar-content ul li a:active, .yt-navbar-content ul li a.active { + background-color: var(--theme-light); + } + +.card-header.p-3.ui-draggable-handle:hover { + cursor: move; +} + +.device-wrap .card-body #info, .device-wrap .card-body #errRec, .device-wrap .card-body #opeRec { + min-width: 500px; +} + +.scrolledTable { + overflow-y: auto; + clear: both; + max-height: 100%; +} #toast-container > div { - width:330px !important; + width: 330px !important; } /*a[data-tabname="topFunBtn"] { color: #fff } @@ -106,216 +326,417 @@ a[data-tabname="topFunBtn"]:hover { color: var(--theme-primary-50); } } .userblock:hover { color: var(--theme-primary-50); } .dropdown.show .userblock { color: var(--theme-primary-50) !important; }*/ -.page-header a, #sysMonBtnList a { color: #fff !important; } -.page-header a:hover, #sysMonBtnList a:hover { color: var(--theme-primary-50) !important; } -.page-header a.active, #sysMonBtnList a.active { color: var(--theme-primary-500) !important; } -.dropdown.show a { color: var(--theme-primary-50) !important; } -@media screen and (max-width: 576px) { .yt-left-navbar { width: 100%; max-width: 100%; margin-top: 0; } +.page-header a, #sysMonBtnList a { + color: #fff !important; +} + + .page-header a:hover, #sysMonBtnList a:hover { + color: var(--theme-primary-50) !important; + } + + .page-header a.active, #sysMonBtnList a.active { + color: var(--theme-primary-500) !important; + } + +.dropdown.show a { + color: var(--theme-primary-50) !important; +} + +@media screen and (max-width: 576px) { + .yt-left-navbar { + width: 100%; + max-width: 100%; + margin-top: 0; + } } @keyframes lds-ring { - 0% { transform: rotate(0deg); } + 0% { + transform: rotate(0deg); + } - 100% { transform: rotate(360deg); } + 100% { + transform: rotate(360deg); + } } @keyframes flashing-c { - 0% { color: var(--flash-color-1); } + 0% { + color: var(--flash-color-1); + } - 49% { color: var(--flash-color-1); } + 49% { + color: var(--flash-color-1); + } - 50% { color: var(--flash-color-2); } + 50% { + color: var(--flash-color-2); + } - 99% { color: var(--flash-color-2); } + 99% { + color: var(--flash-color-2); + } } @keyframes flashing-bg { - 0% { background: var(--flash-color-1); } + 0% { + background: var(--flash-color-1); + } - 49% { background: var(--flash-color-1); } + 49% { + background: var(--flash-color-1); + } - 50% { background: var(--flash-color-2); } + 50% { + background: var(--flash-color-2); + } - 99% { background: var(--flash-color-2); } + 99% { + background: var(--flash-color-2); + } } @keyframes flashing-c-bd { - 0% { border-color: var(--flash-color-1); } + 0% { + border-color: var(--flash-color-1); + } - 49% { border-color: var(--flash-color-1); } + 49% { + border-color: var(--flash-color-1); + } - 50% { border-color: var(--flash-color-2); } + 50% { + border-color: var(--flash-color-2); + } - 99% { border-color: var(--flash-color-2); } + 99% { + border-color: var(--flash-color-2); + } } /* ================================================================ */ /* 單一方法 */ /* ================================================================ */ /* cursor */ -.cur-def { cursor: default !important; } +.cur-def { + cursor: default !important; +} -.cur-poi { cursor: pointer !important; } +.cur-poi { + cursor: pointer !important; +} /*left 距離*/ -.left-05 { left: 0.5rem !important; } +.left-05 { + left: 0.5rem !important; +} -.left-04 { left: 0.4rem !important; } +.left-04 { + left: 0.4rem !important; +} -.left-03 { left: 0.3rem !important; } +.left-03 { + left: 0.3rem !important; +} -.left-02 { left: 0.2rem !important; } +.left-02 { + left: 0.2rem !important; +} -.left-01 { left: 0.1rem !important; } +.left-01 { + left: 0.1rem !important; +} /*right 距離*/ -.right-05 { right: 0.5rem !important; } +.right-05 { + right: 0.5rem !important; +} -.right-04 { right: 0.4rem !important; } +.right-04 { + right: 0.4rem !important; +} -.right-03 { right: 0.3rem !important; } +.right-03 { + right: 0.3rem !important; +} -.right-02 { right: 0.2rem !important; } +.right-02 { + right: 0.2rem !important; +} -.right-01 { right: 0.1rem !important; } +.right-01 { + right: 0.1rem !important; +} /*bottom 0.5rem*/ -.bm-05 { bottom: 0.5rem !important; } +.bm-05 { + bottom: 0.5rem !important; +} -.bm-04 { bottom: 0.4rem !important; } +.bm-04 { + bottom: 0.4rem !important; +} -.bm-03 { bottom: 0.3rem !important; } +.bm-03 { + bottom: 0.3rem !important; +} -.bm-02 { bottom: 0.2rem !important; } +.bm-02 { + bottom: 0.2rem !important; +} -.bm-01 { bottom: 0.1rem !important; } +.bm-01 { + bottom: 0.1rem !important; +} /*top 0.5rem*/ -.tp-05 { top: 0.5rem !important; } +.tp-05 { + top: 0.5rem !important; +} -.tp-04 { top: 0.4rem !important; } +.tp-04 { + top: 0.4rem !important; +} -.tp-03 { top: 0.3rem !important; } +.tp-03 { + top: 0.3rem !important; +} -.tp-02 { top: 0.2rem !important; } +.tp-02 { + top: 0.2rem !important; +} -.tp-01 { top: 0.1rem !important; } +.tp-01 { + top: 0.1rem !important; +} /* font-weight */ -.fw-1 { font-weight: 100; } +.fw-1 { + font-weight: 100; +} -.fw-2 { font-weight: 200; } +.fw-2 { + font-weight: 200; +} -.fw-3 { font-weight: 300; } +.fw-3 { + font-weight: 300; +} -.fw-4 { font-weight: 400; } +.fw-4 { + font-weight: 400; +} -.fw-5 { font-weight: 500; } +.fw-5 { + font-weight: 500; +} -.fw-6 { font-weight: 600; } +.fw-6 { + font-weight: 600; +} -.fw-7 { font-weight: 700; } +.fw-7 { + font-weight: 700; +} -.fw-8 { font-weight: 800; } +.fw-8 { + font-weight: 800; +} -.fw-9 { font-weight: 900; } +.fw-9 { + font-weight: 900; +} /* font-size */ -.fs-05 { font-size: 0.5rem; } +.fs-05 { + font-size: 0.5rem; +} -.fs-075 { font-size: 0.75rem; } +.fs-075 { + font-size: 0.75rem; +} -.fs-09 { font-size: 0.9rem; } +.fs-09 { + font-size: 0.9rem; +} -.fs-1 { font-size: 1rem; } +.fs-1 { + font-size: 1rem; +} -.fs-1-05 { font-size: 1.05rem; } +.fs-1-05 { + font-size: 1.05rem; +} -.fs-1-1 { font-size: 1.1rem; } +.fs-1-1 { + font-size: 1.1rem; +} -.fs-1-2 { font-size: 1.2rem; } +.fs-1-2 { + font-size: 1.2rem; +} -.fs-1-3 { font-size: 1.3rem; } +.fs-1-3 { + font-size: 1.3rem; +} -.fs-1-5 { font-size: 1.5rem; } +.fs-1-5 { + font-size: 1.5rem; +} -.fs-2 { font-size: 2rem; } +.fs-2 { + font-size: 2rem; +} -.fs-2-5 { font-size: 2.5rem; } +.fs-2-5 { + font-size: 2.5rem; +} /* border width */ -.bd-0 { border-width: 0px; } +.bd-0 { + border-width: 0px; +} -.bd-1 { border-width: 1px; } +.bd-1 { + border-width: 1px; +} -.bd-2 { border-width: 2px; } +.bd-2 { + border-width: 2px; +} /* border direction */ -.bd-l { border-left-style: solid; } +.bd-l { + border-left-style: solid; +} -.bd-r { border-right-style: solid; } +.bd-r { + border-right-style: solid; +} -.bd-t { border-top-style: solid; } +.bd-t { + border-top-style: solid; +} -.bd-b { border-bottom-style: solid; } +.bd-b { + border-bottom-style: solid; +} /* border radius */ -.br-1 { border-radius: 1px; } +.br-1 { + border-radius: 1px; +} -.br-2 { border-radius: 2px; } +.br-2 { + border-radius: 2px; +} -.br-3 { border-radius: 3px; } +.br-3 { + border-radius: 3px; +} -.br-4 { border-radius: 4px; } +.br-4 { + border-radius: 4px; +} -.br-5 { border-radius: 5px; } +.br-5 { + border-radius: 5px; +} /* flex-gap */ -.gap-1 { gap: 1px; } +.gap-1 { + gap: 1px; +} -.gap-2 { gap: 2px; } +.gap-2 { + gap: 2px; +} -.gap-3 { gap: 3px; } +.gap-3 { + gap: 3px; +} -.gap-4 { gap: 4px; } +.gap-4 { + gap: 4px; +} -.gap-5 { gap: 5px; } +.gap-5 { + gap: 5px; +} -.gap-6 { gap: 6px; } +.gap-6 { + gap: 6px; +} -.gap-7 { gap: 7px; } +.gap-7 { + gap: 7px; +} -.gap-8 { gap: 8px; } +.gap-8 { + gap: 8px; +} /* vertical-align */ -.va-t { vertical-align: top; } +.va-t { + vertical-align: top; +} -.va-m { vertical-align: middle; } +.va-m { + vertical-align: middle; +} -.va-b { vertical-align: bottom; } +.va-b { + vertical-align: bottom; +} -.bg-orange { background-color: #ffa100; } +.bg-orange { + background-color: #ffa100; +} /* text color */ -.t-main-purple { color: #623c80 !important; } +.t-main-purple { + color: #623c80 !important; +} -.t-black { color: #000 !important; } +.t-black { + color: #000 !important; +} -.t-white { color: #fff !important; } +.t-white { + color: #fff !important; +} -.t-fb-blue { color: #466ac2 !important; } +.t-fb-blue { + color: #466ac2 !important; +} -.t-line-green { color: #54C814 !important; } +.t-line-green { + color: #54C814 !important; +} -.t-red { color: #db0000 !important; } +.t-red { + color: #db0000 !important; +} -.t-red-2 { color: var(--yt-red-2) !important; } +.t-red-2 { + color: var(--yt-red-2) !important; +} -.t-gray { color: var(--yt-gray); } +.t-gray { + color: var(--yt-gray); +} -.t-main-gray { color: var(--yt-main-gray); } +.t-main-gray { + color: var(--yt-main-gray); +} -.t-gray-2 { color: var(--yt-gray-2) !important; } +.t-gray-2 { + color: var(--yt-gray-2) !important; +} -.t-gray-3 { color: var(--yt-gray-3); } +.t-gray-3 { + color: var(--yt-gray-3); +} -.t-yellow { color: var(--yt-yellow-1); } +.t-yellow { + color: var(--yt-yellow-1); +} diff --git a/Frontend/img/forge/sensor_circle.svg b/Frontend/img/forge/sensor_circle.svg index e7b0325..894e8a0 100644 --- a/Frontend/img/forge/sensor_circle.svg +++ b/Frontend/img/forge/sensor_circle.svg @@ -1,7 +1,17 @@ - - - - Layer 1 - - + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Frontend/index.html b/Frontend/index.html index 59e003a..b92f6b1 100644 --- a/Frontend/index.html +++ b/Frontend/index.html @@ -41,12 +41,14 @@ License: You must have a valid license purchased only from wrapbootstrap.com (li - + - + @@ -144,7 +146,8 @@ License: You must have a valid license purchased only from wrapbootstrap.com (li -
+
@@ -803,8 +812,7 @@ License: You must have a valid license purchased only from wrapbootstrap.com (li /*"lib/jquery-validation/dist/additional-methods.min",*/ /* 會影響 messages_zh_TW 文字呈現 */ "lib/jquery-validation/dist/localization/messages_zh_TW", "lib/jquery-ui/jquery-ui.min", - //"lib/chart.js_4.1.2/chart.umd", // B4 - "lib/chart.js/chart.min", // 本機 + "lib/chart.js/chart.min", "lib/dropzone/dropzone-min", "lib/jstree-master/jstree.min", "lib/notifications/sweetalert2/sweetalert2.bundle", @@ -1216,8 +1224,14 @@ License: You must have a valid license purchased only from wrapbootstrap.com (li // 讀取設備基本資料列表 $(tooltipEle).find("#info").html(typeof drawInfoTabBlo != "undefined" ? drawInfoTabBlo(devGuid) : ""); // 聚焦熱點 - if ($(oriEle).data("dbId")) { - controlFocusHotspot($(oriEle).data("dbId")); + const eleDbId = $(oriEle).data("dbId") + if (eleDbId) { + if (alarmDbIdList.some(dbId => dbId == eleDbId)) { + changeScaleForHotspot(eleDbId) + } + else { + controlFocusHotspot(eleDbId); + } } // 3D 視角 ZOOM IN 聚焦 @@ -1255,8 +1269,16 @@ License: You must have a valid license purchased only from wrapbootstrap.com (li typeof subDeviceSetTable != "undefined" ? subDeviceSetTable($(oriEle).data("number")) : "" }, onHide: function (tooltipEle, oriEle) { - // 3D 熱點解除 - controlFocusHotspot($(oriEle).data("dbId"), false); + const eleDbId = $(oriEle).data("dbId") + if (eleDbId) { + if (alarmDbIdList.some(dbId => dbId == eleDbId)) { + changeScaleForHotspot(eleDbId, false) + } + else { + // 3D 熱點解除 + controlFocusHotspot(eleDbId, false); + } + } // sysMonFloor Echart 解除 focus typeof chartUnFocus != "undefined" ? chartUnFocus(oriEle) : ""; } @@ -1380,6 +1402,7 @@ License: You must have a valid license purchased only from wrapbootstrap.com (li } function controlFocusHotspot(dbId, open = true) { + // console.log("dbId", alarmDbIdList,dbId) changeColorForHotspot(dbId, open ? "focus" : null); changeScaleForHotspot(dbId, open); } @@ -1488,7 +1511,7 @@ License: You must have a valid license purchased only from wrapbootstrap.com (li // 設置 Forge 3D 溫度條 function setTopHeatBar() { - let strHtml = ``; + let strHtml = ``; return strHtml; } diff --git a/Frontend/js/forge/forgemodel.js b/Frontend/js/forge/forgemodel.js index 419d417..765f1ff 100644 --- a/Frontend/js/forge/forgemodel.js +++ b/Frontend/js/forge/forgemodel.js @@ -8,8 +8,8 @@ var myDataList; var lightDataList; var lightList = [];//燈光清單 var levels;//剖面用 -var lowerIdx;//剖面的下方樓層 -var upperIdx;//剖面的上方樓層 +var lowerIdx = 0;//剖面的下方樓層 +var upperIdx = 0;//剖面的上方樓層 function launchViewer(urn, callback, failCallback, _selector = "#forgeViewer") { selector = _selector; @@ -340,12 +340,12 @@ class elevator3D { } } + function onDocumentLoadSuccess(doc, eleOption) { var viewables = doc.getRoot().getDefaultGeometry(); viewer.loadDocumentNode(doc, viewables).then(i => { // documented loaded, any action? - }); // viewer.addEventListener(Autodesk.Viewing.AGGREGATE_SELECTION_CHANGED_EVENT, (args) => { // var currSelection = viewer.getSelection(); @@ -559,6 +559,7 @@ class ADHeatMaps { this.roomDbIds = []; //房間 dbId this.model = null; this.dataVizExtn = null; + this.shadingData = null; this.onComplete = option.onComplete ?? null; this.init(); } @@ -571,54 +572,78 @@ class ADHeatMaps { this.model = viewer.model; this.addHeatMaps() } + async addHeatMaps() { const { SurfaceShadingData, SurfaceShadingPoint, SurfaceShadingNode, + SurfaceShadingGroup } = Autodesk.DataVisualization.Core; + // test + const shadingGroup = new SurfaceShadingGroup('iot-heatmap'); + const rooms = new Map(); + + for (const { id, roomDbId, position, sensorTypes } of this.devices) { + // console.log(id, roomDbId, position, sensorTypes) + if (!id || roomDbId == -1) { + continue; + } + if (!rooms.has(roomDbId)) { + const room = new SurfaceShadingNode(id, roomDbId); + shadingGroup.addChild(room); + rooms.set(roomDbId, room); + } + const room = rooms.get(roomDbId); + room.addPoint(new SurfaceShadingPoint(id, position, sensorTypes)); + } + this.shadingData = new SurfaceShadingData(); + this.shadingData.addChild(shadingGroup) + this.shadingData.initialize(this.model); + await this.dataVizExtn.setupSurfaceShading(this.model, this.shadingData); + this.dataVizExtn.renderSurfaceShading('iot-heatmap', "temperature", this.getSensorValue.bind(this)); //let nodeIds = await getNodeIdByDbIds(this.checkNodeString); //nodeIds = Array.from(nodeIds); //nodeIds = nodeIds.map(x => { return { room: x[0] , nodeId: x[1]} }); - this.roomDbIds = this.devices.filter(x => x.roomDbId != -1).map(x => x.roomDbId).Distinct(); + // this.roomDbIds = this.devices.filter(x => x.roomDbId != -1).map(x => x.roomDbId).Distinct(); - // 建立一個 SurfaceShadingData 物件,並將 SurfaceShadingNode 加入到該物件中 - const heatmapData = new SurfaceShadingData(); + // // 建立一個 SurfaceShadingData 物件,並將 SurfaceShadingNode 加入到該物件中 + // const heatmapData = new SurfaceShadingData(); - $.each(this.roomDbIds, (idx, rDbid) => { - // 建立一個名為 "Room Panel" 的 SurfaceShadingNode 物件,並將房間的模型給傳入,只在該房間呈現溫度 - const shadingNode = new SurfaceShadingNode("RoomPanel" + rDbid, rDbid); + // $.each(this.roomDbIds, (idx, rDbid) => { + // // 建立一個名為 "Room Panel" 的 SurfaceShadingNode 物件,並將房間的模型給傳入,只在該房間呈現溫度 + // const shadingNode = new SurfaceShadingNode("RoomPanel" + rDbid, rDbid); - // 遍歷每個設備,建立一個 SurfaceShadingPoint 物件並加入到 SurfaceShadingNode 中,透過這些設備渲染溫度 - this.devices.filter(x => x.roomDbId == rDbid).forEach((device) => { - const shadingPoint = new SurfaceShadingPoint( - device.id, - undefined, - device.sensorTypes - ); - shadingPoint.positionFromDBId(this.model, device.roomDbId) - shadingNode.addPoint(shadingPoint); - // device.temp = 0; - }); + // // 遍歷每個設備,建立一個 SurfaceShadingPoint 物件並加入到 SurfaceShadingNode 中,透過這些設備渲染溫度 + // this.devices.filter(x => x.roomDbId == rDbid).forEach((device) => { + // const shadingPoint = new SurfaceShadingPoint( + // device.id, + // undefined, + // device.sensorTypes + // ); + // shadingPoint.positionFromDBId(this.model, device.roomDbId) + // shadingNode.addPoint(shadingPoint); + // // device.temp = 0; + // }); - heatmapData.addChild(shadingNode); - }) + // heatmapData.addChild(shadingNode); + // }) - // 將資料初始化並顯示在模型上 - heatmapData.initialize(this.model); + // // 將資料初始化並顯示在模型上 + // heatmapData.initialize(this.model); - // 對模型做表面顏色的渲染 - await this.dataVizExtn.setupSurfaceShading(this.model, heatmapData); + // // 對模型做表面顏色的渲染 + // await this.dataVizExtn.setupSurfaceShading(this.model, heatmapData); - // 對 "temperature" 的溫度設定兩種顏色:紅色和藍色 - this.dataVizExtn.registerSurfaceShadingColors("temperature", [0x0000ff, 0x00ff00, 0xffff00, 0xff0000]); + // // 對 "temperature" 的溫度設定兩種顏色:紅色和藍色 + // this.dataVizExtn.registerSurfaceShadingColors("temperature", [0x0000ff, 0x00ff00, 0xffff00, 0xff0000]); - $.each(this.roomDbIds, (idx, rDbid) => { - this.dataVizExtn.renderSurfaceShading("RoomPanel" + rDbid, "temperature", this.getSensorValue.bind(this)); - }) + // $.each(this.roomDbIds, (idx, rDbid) => { + // this.dataVizExtn.renderSurfaceShading("RoomPanel" + rDbid, "temperature", this.getSensorValue.bind(this)); + // }) - /*this.changeTemp(this.tempVal);*/ + // /*this.changeTemp(this.tempVal);*/ this.onComplete ? this.onComplete() : ""; } @@ -629,7 +654,7 @@ class ADHeatMaps { } // 改變溫度 - changeTemp = function (devId, temp) { + changeTemp = async function (devId, temp) { this.tempVal = temp; // 透過 device id 取得 roomDbId this.devices.forEach((dev) => { @@ -637,9 +662,18 @@ class ADHeatMaps { dev.temp = temp; } }) - $.each(this.roomDbIds, async (idx, rDbid) => { - this.dataVizExtn.renderSurfaceShading("RoomPanel" + rDbid, "temperature", this.getSensorValue.bind(this)); - }) + + if (!this.shadingData) { + await this.addHeatMaps(); + this.dataVizExtn.renderSurfaceShading('iot-heatmap', "temperature", this.getSensorValue.bind(this)); + } + else { + this.dataVizExtn.updateSurfaceShading(this.getSensorValue.bind(this)); + } + // $.each(this.roomDbIds, async (idx, rDbid) => { + // this.dataVizExtn.renderSurfaceShading("RoomPanel" + rDbid, "temperature", this.getSensorValue.bind(this)); + // }) + //if (rDbid != null) { // // 取得新的溫度值 // let getSensorValue = (device, sensorType) => { @@ -740,10 +774,11 @@ async function getLightData(data) { } async function testNewLight(dataList) { + console.log("dataList", dataList) dataList.forEach((myData, index) => { const position = JSON.parse(myData.device_coordinate_3d); if (lightList.findIndex(x => x.device_guid == myData.device_guid) == -1) { - lightList.push({ dbid: myData.forge_dbid, device_guid: myData.device_guid, lightObject: new THREE.SpotLight(0xe1cf18, 0, 20, 0.6, 0.5, 10) }); + lightList.push({ dbid: myData.forge_dbid, device_guid: myData.device_guid, lightObject: new THREE.SpotLight(0xe1cf18, 10, 200, 1, 1, 2) }); } lightList[index].lightObject.position.set(position.x, position.y, position.z); @@ -798,7 +833,6 @@ async function addHotPoint(data) { const viewableData = new DataVizCore.ViewableData(); viewableData.spriteSize = 24; // Sprites as points of size 24 x 24 pixels - console.log() myDataList.forEach((myData, index) => { const dbId = 10 + index; const myPosition = myData.position; @@ -820,7 +854,7 @@ async function addHotPoint(data) { // console.log(`Sprite clicked: ${event.dbId}`); for (let i = dbIdStart; i <= myDataList.length + 10; i++) { - changeColorForHotspot(i); + !alarmDbIdList.some(dbId => dbId == i) && changeColorForHotspot(i); changeScaleForHotspot(i, true); } let myData = myDataList.filter(x => x._dbId == event.dbId)[0]; @@ -831,7 +865,7 @@ async function addHotPoint(data) { } $(selector).trigger("autodesk:click:sprite", { event, myData }); } else { - changeColorForHotspot(event.dbId, null); + !alarmDbIdList.some(dbId => dbId == i) && changeColorForHotspot(event.dbId, null); changeScaleForHotspot(event.dbId, false); $(selector).trigger("autodesk:clickOut:sprite", { event }); } @@ -881,7 +915,6 @@ async function addHotPoint(data) { // 熱點 更換顏色 async function changeColorForHotspot(dbId, type = null) { const dataVizExtn = await viewer.loadExtension("Autodesk.DataVisualization"); - // console.log(dbId, dataVizExtn.viewableData.getViewableColor(dbId, false)) let spriteColorFocus = new THREE.Color(0xffffff); if (type == "focus" && pageAct.sysSubTag !== "M12") { spriteColorFocus = new THREE.Color(0x00ffe1); @@ -919,6 +952,7 @@ async function changeScaleForHotspot(dbId, type = true) { //------------------ 熱圖 ------------------------------- async function loadHeatmaps(model) { + //console.log("熱圖 loadHeat") const dataVizExtn = await viewer.loadExtension("Autodesk.DataVisualization"); //取三個空調設備的位置打點 @@ -1084,28 +1118,73 @@ async function loadHeatmapForFloor() { } //------------ 剖面 ---------------------- -async function getRemoteLevels() { - const aecData = await Autodesk.Viewing.Document.getAecModelData(this.viewer.model.getDocumentNode()); - if (!aecData || !aecData.levels) return null; - const levels2 = aecData.levels; - levels2.sort((a, b) => b.elevation - a.elevation); - return levels2; +function findLevels(model) { + return new Promise((resolve, reject) => { + model.search("layer", (nodeIds) => { + let levels = [] + const tree = viewer.model.getInstanceTree(); + for (let i = 0; i < nodeIds.length; i++) { + const dbId = nodeIds[i]; + const name = tree.getNodeName(dbId); + if (!name || name.includes('<沒有層級>')) continue; + levels.push({ + guid: dbId, + name, + dbId, + extension: { + buildingStory: true, + structure: false, + computationHeight: 0, + groundPlane: false, + hasAssociatedViewPlans: false, + } + }); + } + resolve(levels) + }, (e) => { reject(e) }) + }); +} + + +async function getRemoteLevels() { + + let aecData = await Autodesk.Viewing.Document.getAecModelData(this.viewer.model.getDocumentNode()); + + let levels; + if (!aecData || !aecData.levels) { + const levelExt = await viewer.loadExtension('Autodesk.AEC.LevelsExtension'); + levelExt.setAecModelData(undefined, viewer.model); //!<<< Clear before reset + levels = await findLevels(viewer.model) + aecdata = Autodesk.AEC.AecModelData.computeLevels(levels, viewer.model); //!<<< Rebuild aec model data + } else { + levels = aecData.levels; + } + levels.sort((a, b) => b.elevation - a.elevation); + return levels; } async function getLevelsData(lowerFloor, upperFloor, callback = null) { + console.log(lowerFloor, upperFloor) // 樓層正規化 取得樓層 const floorRegex = /[\d|\w]+F/gmi; + const floorRegex2 = /^FL[\d|\w]+/gmi; const data = await this.getRemoteLevels(); + console.log(data) for (var i = 0; i < data.length; i++) { - let name = data[i].name?.match(floorRegex); - if (name && name[0] == lowerFloor) { + let name = data[i].name?.match(floorRegex) || data[i].name?.match(floorRegex2)[0].split("L")[1] + "F"; + if (name && name[0] == lowerFloor || name == lowerFloor) { lowerIdx = i; } - if (name && name[0] == upperFloor) { - upperIdx = i; + if (name && name[0] == upperFloor || name == upperFloor) { + if (i > upperIdx && lowerFloor == upperFloor) { + + } else { + upperIdx = i; + } } } + this.levels = data; profile(callback); } @@ -1120,7 +1199,7 @@ function getCutPlaneParam(idx, n) { const globalOffset = model.getData().globalOffset; const units = model.getUnitString(); const elevRaw = Autodesk.Viewing.Private.convertUnits('ft', units, 1, level.elevation); - + console.log(globalOffset, units, elevRaw) let d = elevRaw - globalOffset.z - 0.5; if (n == 1) d = -1 * d; diff --git a/Frontend/js/init.js b/Frontend/js/init.js index fff4e71..c456b23 100644 --- a/Frontend/js/init.js +++ b/Frontend/js/init.js @@ -7,8 +7,8 @@ var baseImgUrl = "https://localhost:44376"; // 本地開發用 //var baseImgUrl = "http://220.132.206.5:8848"; // production 用 // WSP -//var baseApiUrl = "http://220.132.206.5"; // production 用 -//var baseImgUrl = "http://220.132.206.5:8849"; // production 用 +// var baseApiUrl = "http://220.132.206.5:8001"; // production 用 +// var baseImgUrl = "http://220.132.206.5:8849"; // production 用 //var baseApiUrl = "http://localhost"; //var baseImgUrl = "http://localhost:8848"; @@ -31,11 +31,17 @@ var common = { } var objSendData = { Data: null }; // Mitsubishi +var elevatorShow = true +var port = ""; var initAreaTag = "TPE"; var n4Sup = "Mitsubishi_JACE8000"; + // WSP -//var initAreaTag = "NTPC"; -//var n4Sup = "Banqiao"; +// var elevatorShow = false +// var port = "4912"; +// var initAreaTag = "NTPC"; +// var n4Sup = "WSP_Supervisor"; + var forgeTokenBase = { url: baseApiUrl + '/api/forge/oauth/token', res_access_token: ["dictionary", "access_token"], diff --git a/Frontend/js/n4js/alarmbaja.js b/Frontend/js/n4js/alarmbaja.js index a8b4bcb..96b7494 100644 --- a/Frontend/js/n4js/alarmbaja.js +++ b/Frontend/js/n4js/alarmbaja.js @@ -1,17 +1,17 @@ function addzero(num) { - return num < 10 ? '0' + num : num; + return num < 10 ? '0' + num : num; } /** - * 取得異常資料 by baja - * @param {any} startDate_millisecond - * @param {any} endDate_millisecond - * @param {any} isRecover - * @param {any} isAck - * @param {any} alarmClass - * @param {any} callback - */ +* 取得異常資料 by baja +* @param {any} startDate_millisecond +* @param {any} endDate_millisecond +* @param {any} isRecover +* @param {any} isAck +* @param {any} alarmClass +* @param {any} callback +*/ // function getAlarmByBaja(startDate_millisecond, endDate_millisecond, isRecover, isAck, alarmClass, callback) { // let _sourceTmp; // var _result = ""; @@ -85,53 +85,53 @@ function addzero(num) { // }); // } function getAlarmByBaja(startDate_millisecond, endDate_millisecond, isRecover, isAck, alarmClass, callback) { - let _sourceTmp; - var _result = ""; - var _ss = []; - var _bfName = ""; - var _sourceName = ""; - var _index = 0; - var _recoverState = isRecover ? "!= null" : "= null"; - var _ackState = isAck ? "= 'acked'" : "= 'unacked'"; + let _sourceTmp; + var _result = ""; + var _ss = []; + var _bfName = ""; + var _sourceName = ""; + var _index = 0; + var _recoverState = isRecover ? "!= null" : "= null"; + var _ackState = isAck ? "= 'acked'" : "= 'unacked'"; //console.log("local:|foxs:|alarm:|bql:select timestamp, ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime where alarmClass = '" + alarmClass + "' and timestamp.millis > " + startDate_millisecond + " and timestamp.millis < " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp asc") - require(['baja!'], function (baja) { - baja.Ord.make("local:|foxs:|alarm:|bql:select timestamp, ackTime, ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime where alarmClass = '" + alarmClass + "' and timestamp.millis > " + startDate_millisecond + " and timestamp.millis < " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp asc").get() - .then(function (table) { - return table.cursor({ - each: function (record) { - // console.log(record) - const alarmDisplayName = record.get('alarmData').get('sourceName').split(":")[1] ?? record.get('alarmData').get('sourceName').split(":")[0] - //console.log(alarmDisplayName) - _sourceTmp = alarmDisplayName.split('_'); - _bfName = _sourceTmp[1] + "-" + _sourceTmp[4]; - _sourceName = _sourceTmp.slice(0, 8).join("_"); - _sourceTmp = _sourceTmp[7] + "-" + _sourceTmp[8]; - if (!_sourceTmp.includes("undefined")) { - _ss.push({ buildingFloorName_zh: _bfName, uuid: record.get('uuid'), timestamp: record.get('timestamp').$cEncStr, alarmClass: record.get('alarmClass'), sourceName_zh: _sourceName, sourceTmp: _sourceTmp, msgText: record.get('alarmData').get('msgText'), ackState: record.get('ackState'), normalTime: record.get('normalTime'), ackedTime: record.get('ackTime').$cEncStr }) - } - _index++ - }, - after: function () { - _result = { count: _index, data: _ss } + require(['baja!'], function (baja) { + baja.Ord.make("local:|foxs:|alarm:|bql:select timestamp, ackTime, ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime where alarmClass = '" + alarmClass + "' and timestamp.millis > " + startDate_millisecond + " and timestamp.millis < " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp asc").get() + .then(function (table) { + return table.cursor({ + each: function (record) { + // console.log(record) + const alarmDisplayName = record.get('alarmData').get('sourceName').split(":")[1] ?? record.get('alarmData').get('sourceName').split(":")[0] + //console.log(alarmDisplayName) + _sourceTmp = alarmDisplayName.split('_'); + _bfName = _sourceTmp[1] + "-" + _sourceTmp[4]; + _sourceName = _sourceTmp.slice(0, 8).join("_"); + _sourceTmp = _sourceTmp[7] + "-" + _sourceTmp[8]; + if (!_sourceTmp.includes("undefined")) { + _ss.push({ buildingFloorName_zh: _bfName, uuid: record.get('uuid'), timestamp: record.get('timestamp').$cEncStr, alarmClass: record.get('alarmClass'), sourceName_zh: _sourceName, sourceTmp: _sourceTmp, msgText: record.get('alarmData').get('msgText'), ackState: record.get('ackState'), normalTime: record.get('normalTime'), ackedTime: record.get('ackTime').$cEncStr }) + } + _index++ + }, + after: function () { + _result = { count: _index, data: _ss } - //console.log(552, _result); + //console.log(552, _result); - if (typeof callback === 'function') { - callback(_result); - } - }, - limit: -1, - offset: 0 - }); - }); - }); + if (typeof callback === 'function') { + callback(_result); + } + }, + limit: -1, + offset: 0 + }); + }); + }); } /** - * 取得單一設備最新10筆異常資料 by baja - * @param {any} devicePath - * @param {any} callback - */ +* 取得單一設備最新10筆異常資料 by baja +* @param {any} devicePath +* @param {any} callback +*/ // function getOneDeviceAlarmTop10ByBaja(devicePath, callback) { // var _result = ""; // var _ss = ""; @@ -162,52 +162,52 @@ function getAlarmByBaja(startDate_millisecond, endDate_millisecond, isRecover, i // }); // } function getOneDeviceAlarmTop10ByBaja(devicePath, callback) { - var _result = {}; - var _ss = []; - var _occurrenceTime = ""; - var _normalTime = ""; - var _index = 0; - //{ "count":2,"data": [{ "time": "2022/11/14 15:00:00", "errId": "0001", "ackCheck": "未確認", "errReason": "燈泡故障" }, { "time": "2022/11/14 15:00:00", "errId": "0002", "ackCheck": "未確認", "errReason": "燈泡故障" }]} - require(['baja!'], function (baja) { - baja.Ord.make("local:|foxs:|alarm:|bql:select top 10 timestamp, ackState, alarmData, alarmData.sourceName, sourceState, uuid, alarmData.msgText, normalTime where alarmData.sourceName like '%" + devicePath + "%' order by timestamp desc").get() - .then(function (table) { - return table.cursor({ - each: function (record) { - _occurrenceTime = ""; - _normalTime = ""; - // console.log(record.get('timestamp'),record.get('normalTime') ) - var _resultUuid = record.get('uuid').toString().split("-");//43dc7846-bd96-4be2-ab35-f11aec729c60 + var _result = {}; + var _ss = []; + var _occurrenceTime = ""; + var _normalTime = ""; + var _index = 0; + //{ "count":2,"data": [{ "time": "2022/11/14 15:00:00", "errId": "0001", "ackCheck": "未確認", "errReason": "燈泡故障" }, { "time": "2022/11/14 15:00:00", "errId": "0002", "ackCheck": "未確認", "errReason": "燈泡故障" }]} + require(['baja!'], function (baja) { + baja.Ord.make("local:|foxs:|alarm:|bql:select top 10 timestamp, ackState, alarmData, alarmData.sourceName, sourceState, uuid, alarmData.msgText, normalTime where alarmData.sourceName like '%" + devicePath + "%' order by timestamp desc").get() + .then(function (table) { + return table.cursor({ + each: function (record) { + _occurrenceTime = ""; + _normalTime = ""; + // console.log(record.get('timestamp'),record.get('normalTime') ) + var _resultUuid = record.get('uuid').toString().split("-");//43dc7846-bd96-4be2-ab35-f11aec729c60 - var _occurrenceTime = new Date(record.get('timestamp').$cEncStr).toLocaleString('zh-tw', { year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit" }); - // _occurrenceTime += _timestampTemp.getFullYear().toString() + "-" + addzero(_timestampTemp.getMonth() + 1).toString() + "-" + addzero(_timestampTemp.getDate()).toString() + " " + addzero(_timestampTemp.getHours()).toString() + ":" + addzero(_timestampTemp.getMinutes()).toString() + ":" + addzero(_timestampTemp.getSeconds()).toString(); + var _occurrenceTime = new Date(record.get('timestamp').$cEncStr).toLocaleString('zh-tw', { year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit" }); + // _occurrenceTime += _timestampTemp.getFullYear().toString() + "-" + addzero(_timestampTemp.getMonth() + 1).toString() + "-" + addzero(_timestampTemp.getDate()).toString() + " " + addzero(_timestampTemp.getHours()).toString() + ":" + addzero(_timestampTemp.getMinutes()).toString() + ":" + addzero(_timestampTemp.getSeconds()).toString(); - //var _occurrenceTime = _timestamp.format("yyyy-MM-dd hh:mm:ss");//.toLocaleString(); - var _normalTime = new Date(record.get('normalTime').$cEncStr).toLocaleString('zh-tw', { year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit" }); - // _normalTime += _normaltime.getFullYear().toString() + "-" + addzero(_normaltime.getMonth() + 1).toString() + "-" + addzero(_normaltime.getDate()).toString() + " " + addzero(_normaltime.getHours()).toString() + ":" + addzero(_normaltime.getMinutes()).toString() + ":" + addzero(_normaltime.getSeconds()).toString(); + //var _occurrenceTime = _timestamp.format("yyyy-MM-dd hh:mm:ss");//.toLocaleString(); + var _normalTime = new Date(record.get('normalTime').$cEncStr).toLocaleString('zh-tw', { year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit" }); + // _normalTime += _normaltime.getFullYear().toString() + "-" + addzero(_normaltime.getMonth() + 1).toString() + "-" + addzero(_normaltime.getDate()).toString() + " " + addzero(_normaltime.getHours()).toString() + ":" + addzero(_normaltime.getMinutes()).toString() + ":" + addzero(_normaltime.getSeconds()).toString(); - var _msgText = record.get('alarmData').get('msgText');// == 1 ? _occurrenceTime : "未確認"; - var _ackText = record.get('ackState') == 1 ? _occurrenceTime : "未確認"; - _ss.push({ uuid: _resultUuid[0], msgText: _msgText, ackState: _ackText, timestamp: _occurrenceTime, normalTime: _normalTime }) - _index++; - }, - after: function () { - _result = JSON.stringify({ count: _index, data: _ss }) - if (typeof callback === 'function') { - callback(_result); - } - }, - limit: -1, - offset: 0 - }); - }); - }); + var _msgText = record.get('alarmData').get('msgText');// == 1 ? _occurrenceTime : "未確認"; + var _ackText = record.get('ackState') == 1 ? _occurrenceTime : "未確認"; + _ss.push({ uuid: _resultUuid[0], msgText: _msgText, ackState: _ackText, timestamp: _occurrenceTime, normalTime: _normalTime }) + _index++; + }, + after: function () { + _result = JSON.stringify({ count: _index, data: _ss }) + if (typeof callback === 'function') { + callback(_result); + } + }, + limit: -1, + offset: 0 + }); + }); + }); } /** - * 在單一系統下,取得各個設備的異常狀態 - * @param {any} systemPath - * @param {any} callback - */ +* 在單一系統下,取得各個設備的異常狀態 +* @param {any} systemPath +* @param {any} callback +*/ // function getOneSystemAlarmStateByBaja(systemPath, callback) { // var _result = ""; // var _ss = ""; @@ -234,216 +234,218 @@ function getOneDeviceAlarmTop10ByBaja(devicePath, callback) { // }); // } function getOneSystemAlarmStateByBaja(systemPath, callback) { - var _result = ""; - var _ss = ""; - var _index = 0; - /* console.log("local:|foxs:|alarm:|bql:select alarmData, alarmData.sourceName, sourceState, uuid where alarmData.sourceName like '%" + systemPath + "%' order by timestamp desc")*/ - require(['baja!'], function (baja) { - baja.Ord.make("local:|foxs:|alarm:|bql:select alarmData, alarmData.sourceName, sourceState, uuid where alarmData.sourceName like '%" + systemPath + "%' order by timestamp desc").get() - .then(function (table) { - return table.cursor({ - each: function (record) { - if (_index == 0) - _ss += '{"uuid":"' + record.get('uuid') + '", "sourceName":"' + record.get('alarmData').get('sourceName') + '", "sourceState":"' + record.get('sourceState') + '"}'; - else - _ss += ',{"uuid":"' + record.get('uuid') + '", "sourceName":"' + record.get('alarmData').get('sourceName') + '", "sourceState":"' + record.get('sourceState') + '"}'; - _index++; - }, - after: function () { - _result += '{' + '"count": ' + _index + ', "data":['; - _result += _ss; - _result += ']}'; - if (typeof callback === 'function') { - callback(_result); - } - }, - limit: -1, - offset: 0 - }); - }); - }); + var _result = ""; + var _ss = ""; + var _index = 0; + /* console.log("local:|foxs:|alarm:|bql:select alarmData, alarmData.sourceName, sourceState, uuid where alarmData.sourceName like '%" + systemPath + "%' order by timestamp desc")*/ + require(['baja!'], function (baja) { + baja.Ord.make("local:|foxs:|alarm:|bql:select alarmData, alarmData.sourceName, sourceState, uuid where alarmData.sourceName like '%" + systemPath + "%' order by timestamp desc").get() + .then(function (table) { + return table.cursor({ + each: function (record) { + if (_index == 0) + _ss += '{"uuid":"' + record.get('uuid') + '", "sourceName":"' + record.get('alarmData').get('sourceName') + '", "sourceState":"' + record.get('sourceState') + '"}'; + else + _ss += ',{"uuid":"' + record.get('uuid') + '", "sourceName":"' + record.get('alarmData').get('sourceName') + '", "sourceState":"' + record.get('sourceState') + '"}'; + _index++; + }, + after: function () { + _result += '{' + '"count": ' + _index + ', "data":['; + _result += _ss; + _result += ']}'; + if (typeof callback === 'function') { + callback(_result); + } + }, + limit: -1, + offset: 0 + }); + }); + }); } /** - * 在單一系統下,取得各個系統的狀態 異常與否 - * @param {any} systemPath - * @param {any} callback - */ +* 在單一系統下,取得各個系統的狀態 異常與否 +* @param {any} systemPath +* @param {any} callback +*/ function getOneSystemStateByBaja(systemPath, callback) { - var _result = ""; - var _ss = ""; - var _index = 0; + var _result = ""; + var _ss = ""; + var _index = 0; - require(['baja!'], function (baja) { - baja.Ord.make("local:|foxs:|alarm:|bql:select top 1 alarmData, alarmData.sourceName, sourceState where alarmData.sourceName like '%" + systemPath + "%' order by timestamp desc").get() - .then(function (table) { - return table.cursor({ - each: function (record) { - //if (_index == 0) - // _ss += '{"sourceState":"' + record.get('sourceState') + '"}'; - //else - // _ss += '{"sourceState":"' + record.get('sourceState') + '"}'; - _ss += '{"sourceState":"' + record.get('sourceState') + '"}'; - _index++; - }, - after: function () { - _result += '{' + '"count": ' + _index + ', "data":['; - _result += _ss; - _result += ']}'; - if (typeof callback === 'function') { - callback(_result); - } - }, - limit: -1, - offset: 0 - }); - }); - }); + require(['baja!'], function (baja) { + baja.Ord.make("local:|foxs:|alarm:|bql:select top 1 alarmData, alarmData.sourceName, sourceState where alarmData.sourceName like '%" + systemPath + "%' order by timestamp desc").get() + .then(function (table) { + return table.cursor({ + each: function (record) { + //if (_index == 0) + // _ss += '{"sourceState":"' + record.get('sourceState') + '"}'; + //else + // _ss += '{"sourceState":"' + record.get('sourceState') + '"}'; + _ss += '{"sourceState":"' + record.get('sourceState') + '"}'; + _index++; + }, + after: function () { + _result += '{' + '"count": ' + _index + ', "data":['; + _result += _ss; + _result += ']}'; + if (typeof callback === 'function') { + callback(_result); + } + }, + limit: -1, + offset: 0 + }); + }); + }); } /** - * [首頁] 查詢異常數量 - * @param {any} callback - */ +* [首頁] 查詢異常數量 +* @param {any} callback +*/ function getAlarmCountByBaja(callback) { - var _result = { count: 0 }; - var _index = 0; + var _result = { count: 0 }; + var _index = 0; - require(['baja!'], function (baja) { - baja.Ord.make("local:|foxs:|alarm:|bql:select sourceState where sourceState = 'offnormal'").get() - .then(function (table) { - return table.cursor({ - each: function (record) { - _index++; - }, - after: function () { - _result.count = _index; - if (typeof callback === 'function') { - callback(_result); - } - }, - limit: -1, - offset: 0 - }); - }); - }); + require(['baja!'], function (baja) { + baja.Ord.make("local:|foxs:|alarm:|bql:select sourceState where sourceState = 'offnormal'").get() + .then(function (table) { + return table.cursor({ + each: function (record) { + _index++; + }, + after: function () { + _result.count = _index; + if (typeof callback === 'function') { + callback(_result); + } + }, + limit: -1, + offset: 0 + }); + }); + }); } /** - * [首頁] 查詢復歸數量 - * @param {any} callback - */ +* [首頁] 查詢復歸數量 +* @param {any} callback +*/ function getRecoverCountByBaja(callback) { - var _result = { count: 0 }; - var _index = 0; + var _result = { count: 0 }; + var _index = 0; - require(['baja!'], function (baja) { - baja.Ord.make("local:|foxs:|alarm:|bql:select normalTime where normalTime != null").get() - .then(function (table) { - return table.cursor({ - each: function (record) { - _index++; - }, - after: function () { - _result.count = _index; - if (typeof callback === 'function') { - callback(_result); - } - }, - limit: -1, - offset: 0 - }); - }); - }); + require(['baja!'], function (baja) { + baja.Ord.make("local:|foxs:|alarm:|bql:select normalTime where normalTime != null").get() + .then(function (table) { + return table.cursor({ + each: function (record) { + _index++; + }, + after: function () { + _result.count = _index; + if (typeof callback === 'function') { + callback(_result); + } + }, + limit: -1, + offset: 0 + }); + }); + }); } /** - * [首頁] 查詢已確認異常數量 - * @param {any} callback - */ +* [首頁] 查詢已確認異常數量 +* @param {any} callback +*/ function getCheckedAckedCountByBaja(callback) { - var _result = { count: 0 }; - var _index = 0; + var _result = { count: 0 }; + var _index = 0; - require(['baja!'], function (baja) { - baja.Ord.make("local:|foxs:|alarm:|bql:select ackState where ackState ='acked'").get() - .then(function (table) { - return table.cursor({ - each: function (record) { - _index++; - }, - after: function () { - _result.count = _index; - if (typeof callback === 'function') { - callback(_result); - } - }, - limit: -1, - offset: 0 - }); - }); - }); + require(['baja!'], function (baja) { + baja.Ord.make("local:|foxs:|alarm:|bql:select ackState where ackState ='acked'").get() + .then(function (table) { + return table.cursor({ + each: function (record) { + _index++; + }, + after: function () { + _result.count = _index; + if (typeof callback === 'function') { + callback(_result); + } + }, + limit: -1, + offset: 0 + }); + }); + }); } /** - * [首頁] 查詢未確認異常數量 - * @param {any} callback - */ +* [首頁] 查詢未確認異常數量 +* @param {any} callback +*/ function getUnCheckedAckedCountByBaja(callback) { - var _result = { count: 0 }; - var _index = 0; + var _result = { count: 0 }; + var _index = 0; - require(['baja!'], function (baja) { - baja.Ord.make("local:|foxs:|alarm:|bql:select ackState where ackState ='unacked'").get() - .then(function (table) { - return table.cursor({ - each: function (record) { - _index++; - }, - after: function () { - _result.count = _index; - if (typeof callback === 'function') { - callback(_result); - } - }, - limit: -1, - offset: 0 - }); - }); - }); + require(['baja!'], function (baja) { + baja.Ord.make("local:|foxs:|alarm:|bql:select ackState where ackState ='unacked'").get() + .then(function (table) { + return table.cursor({ + each: function (record) { + _index++; + }, + after: function () { + _result.count = _index; + if (typeof callback === 'function') { + callback(_result); + } + }, + limit: -1, + offset: 0 + }); + }); + }); } /** - * [首頁] 取得現在是異常的系統 (較快) - * @param {any} callback - */ +* [首頁] 取得現在是異常的系統 (較快) +* @param {any} callback +*/ function getSystemAlarmByBaja(callback) { - var _result = { count: 0, data: [] }; - var _index = 0; + var _result = { count: 0, data: [] }; + var _index = 0; - require(['baja!'], function (baja) { - //baja.Ord.make("local:|foxs:|alarm:|bql:select timestamp, ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime where isAlarm").get() - baja.Ord.make("local:|foxs:|alarm:|bql:select alarmClass where isAlarm").get() - .then(function (table) { - return table.cursor({ - each: function (record) { - let main = {}; - main.alarmClass = record.get('alarmClass'); + require(['baja!'], function (baja) { + // console.log("ip:202.39.218.221|foxs:4912|alarm:|bql:select alarmClass where isAlarm") + //baja.Ord.make("local:|foxs:|alarm:|bql:select timestamp, ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime where isAlarm").get() + baja.Ord.make("local:|foxs:|alarm:|bql:select alarmClass where isAlarm").get() + .then(function (table) { + return table.cursor({ + each: function (record) { + // console.log(record) + let main = {}; + main.alarmClass = record.get('alarmClass'); - _result.data.push(main); - _index++; - }, - after: function () { - _result.count = _index; - if (typeof callback === 'function') { - callback(_result); - } - }, - limit: -1, - offset: 0 - }); - }); - }); + _result.data.push(main); + _index++; + }, + after: function () { + _result.count = _index; + if (typeof callback === 'function') { + callback(_result); + } + }, + limit: -1, + offset: 0 + }); + }); + }); } // /** @@ -519,198 +521,265 @@ function getSystemAlarmByBaja(callback) { // } /** - * 取得單一設備異常 - * @param {any} devicePath - * @param {any} callback - */ +* 取得單一設備異常 +* @param {any} devicePath +* @param {any} callback +*/ function getOneDeviceAlarmByBaja(devicePath, callback) { - let _sourceTmp; - var _result = ""; - var _ss = []; - var _bfName = ""; - var _sourceName = ""; - var _index = 0; + let _sourceTmp; + var _result = ""; + var _ss = []; + var _bfName = ""; + var _sourceName = ""; + var _index = 0; - require(['baja!'], function (baja) { - console.log("local:|foxs:|alarm:|bql:select timestamp, ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime where alarmData.sourceName like '%" + devicePath + "%' order by timestamp desc"); - baja.Ord.make("local:|foxs:|alarm:|bql:select timestamp, ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime where alarmData.sourceName like '%" + devicePath + "%' order by timestamp desc").get() - .then(function (table) { - return table.cursor({ - each: function (record) { - _sourceTmp = (record.get('alarmData').get('sourceName')).toString().split('_'); - _bfName = _sourceTmp[1] + "-" + _sourceTmp[4]; - _sourceName = _sourceTmp[7] + "-" + _sourceTmp[8]; - _ss.push({ buildingFloorName_zh: _bfName, uuid: record.get('uuid'), timestamp: record.get('timestamp'), alarmClass: record.get('alarmClass'), sourceName_zh: _sourceName, msgText: record.get('alarmData').get('msgText'), ackState: record.get('ackState'), normalTime: record.get('normalTime') }) - _index++ - }, - after: function () { - _result = { count: _index, data: _ss } + require(['baja!'], function (baja) { + // console.log("local:|foxs:|alarm:|bql:select timestamp, ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime where alarmData.sourceName like '%" + devicePath + "%' order by timestamp desc"); + baja.Ord.make("local:|foxs:|alarm:|bql:select timestamp, ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime where alarmData.sourceName like '%" + devicePath + "%' order by timestamp desc").get() + .then(function (table) { + return table.cursor({ + each: function (record) { + _sourceTmp = (record.get('alarmData').get('sourceName')).toString().split('_'); + _bfName = _sourceTmp[1] + "-" + _sourceTmp[4]; + _sourceName = _sourceTmp[7] + "-" + _sourceTmp[8]; + _ss.push({ buildingFloorName_zh: _bfName, uuid: record.get('uuid'), timestamp: record.get('timestamp'), alarmClass: record.get('alarmClass'), sourceName_zh: _sourceName, msgText: record.get('alarmData').get('msgText'), ackState: record.get('ackState'), normalTime: record.get('normalTime') }) + _index++ + }, + after: function () { + _result = { count: _index, data: _ss } - //console.log(552, _result); + //console.log(552, _result); - if (typeof callback === 'function') { - callback(_result); - } - }, - limit: -1, - offset: 0 - }); - }); - }); + if (typeof callback === 'function') { + callback(_result); + } + }, + limit: -1, + offset: 0 + }); + }); + }); +} + +function getOtherAlarmByBaja(startDate_millisecond, endDate_millisecond, isRecover, isAck, callback) { + var _result = { count: 0, data: [] }; + var _index = 0; + var _recoverState = isRecover ? "!= null" : "= null"; + var _ackState = isAck ? "= 'acked'" : "= 'unacked'"; + + let startUrl = ""; + if (startDate_millisecond) { + startUrl = "timestamp.millis >= " + startDate_millisecond + " and "; + } + console.log("告警2", "local:|foxs:|alarm:|bql:select timestamp, ackTime, priority ,ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime where " + startUrl + "timestamp.millis <= " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp desc"); + require(['baja!'], function (baja) { + + baja.Ord.make("local:|foxs:|alarm:|bql:select timestamp, ackTime, priority ,ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime where " + startUrl + "timestamp.millis <= " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp desc").get() + .then(function (table) { + return table.cursor({ + each: function (record) { + // console.log(record) + let main = {}; + // const alarmDisplayName = record.get('alarmData').get('sourceName').split(":")[1] ?? record.get('alarmData').get('sourceName').split(":")[0] + const alarmDisplayName = record.get('alarmData').get('sourceName').split(":")[1] ?? record.get('alarmData').get('sourceName') + _sourceTmp = alarmDisplayName.split('_'); + let _bfName = _sourceTmp[1] + "-" + _sourceTmp[4] + let _sourceName = _sourceTmp.slice(0, 8).join("_"); + _sourceTmp = _sourceTmp[7] + "-" + _sourceTmp[8]; + console.log(record.get('alarmData').get('sourceName'), _bfName, _sourceName) + + main.buildingFloorName_zh = _bfName; + main.sourceName_zh = _sourceName; + main.uuid = record.get('uuid').$val; + main.timestamp = record.get('timestamp').$cEncStr; + main.alarmClass = record.get('alarmClass'); + main.point = _sourceTmp; + main.sourceTmp = _sourceTmp; + main.devicePath = _sourceName; + main.msgText = record.get('alarmData').get('msgText'); + main.normalTime = record.get('normalTime'); + main.priority = record.get('priority'); + main.ackedTime = record.get('ackTime').$cEncStr; + main.ackState = record.get('ackState').$ordinal + if (_sourceTmp.includes("undefined")) { + main.buildingFloorName_zh = "無"; + main.alarmClass = "系統/設備異常"; + main.sourceTmp = "無"; + main.msgText = ""; + _result.data.push(main); + } + + _index++; + }, + after: function () { + _result.count = _index; + if (typeof callback === 'function') { + //console.log(_result) + callback(_result); + } + }, + limit: -1, + offset: 0 + }); + }); + }); } function getAllDeviceAlarmByBaja(startDate_millisecond, endDate_millisecond, isRecover, isAck, callback) { - var _result = { count: 0, data: [] }; - var _index = 0; - var _recoverState = isRecover ? "!= null" : "= null"; - var _ackState = isAck ? "= 'acked'" : "= 'unacked'"; + var _result = { count: 0, data: [] }; + var _index = 0; + var _recoverState = isRecover ? "!= null" : "= null"; + var _ackState = isAck ? "= 'acked'" : "= 'unacked'"; - let startUrl = ""; - if (startDate_millisecond) { - startUrl = "timestamp.millis >= " + startDate_millisecond + " and "; - } - console.log("告警", "local:|foxs:|alarm:|bql:select timestamp, ackTime, priority ,ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime where " + startUrl + "timestamp.millis <= " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp desc"); - require(['baja!'], function (baja) { + let startUrl = ""; + if (startDate_millisecond) { + startUrl = "timestamp.millis >= " + startDate_millisecond + " and "; + } + // console.log("告警", "local:|foxs:|alarm:|bql:select timestamp, ackTime, priority ,ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime where " + startUrl + "timestamp.millis <= " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp desc"); + require(['baja!'], function (baja) { - baja.Ord.make("local:|foxs:|alarm:|bql:select timestamp, ackTime, priority ,ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime where " + startUrl + "timestamp.millis <= " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp desc").get() - .then(function (table) { - return table.cursor({ - each: function (record) { - // console.log(record) - let main = {}; - // console.log(record.get('alarmData').get('sourceName'),record.get('timestamp').$cEncStr) - const alarmDisplayName = record.get('alarmData').get('sourceName').split(":")[1] ?? record.get('alarmData').get('sourceName').split(":")[0] - //console.log(alarmDisplayName) - _sourceTmp = alarmDisplayName.split('_'); - let _bfName = _sourceTmp[1] + "-" + _sourceTmp[4] - let _sourceName = _sourceTmp.slice(0, 8).join("_"); - _sourceTmp = _sourceTmp[7] + "-" + _sourceTmp[8]; + baja.Ord.make("local:|foxs:|alarm:|bql:select timestamp, ackTime, priority ,ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime where " + startUrl + "timestamp.millis <= " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp desc").get() + .then(function (table) { + return table.cursor({ + each: function (record) { + // console.log(record) + let main = {}; + // const alarmDisplayName = record.get('alarmData').get('sourceName').split(":")[1] ?? record.get('alarmData').get('sourceName').split(":")[0] + const alarmDisplayName = record.get('alarmData').get('sourceName').split(":")[1] ?? record.get('alarmData').get('sourceName') + _sourceTmp = alarmDisplayName.split('_'); + let _bfName = _sourceTmp[1] + "-" + _sourceTmp[4] + let _sourceName = _sourceTmp.slice(0, 8).join("_"); + _sourceTmp = _sourceTmp[7] + "-" + _sourceTmp[8]; - main.buildingFloorName_zh = _bfName; - main.sourceName_zh = _sourceName; - main.uuid = record.get('uuid').$val; - main.timestamp = record.get('timestamp').$cEncStr; - main.alarmClass = record.get('alarmClass'); - main.point = _sourceTmp; - main.sourceTmp = _sourceTmp; - main.devicePath = _sourceName; - main.msgText = record.get('alarmData').get('msgText'); - main.normalTime = record.get('normalTime'); - main.priority = record.get('priority'); - main.ackedTime = record.get('ackTime').$cEncStr; - main.ackState = record.get('ackState').$ordinal - if (!_sourceTmp.includes("undefined")) { - // console.log(main.ackState) - _result.data.push(main); - } - _index++; - }, - after: function () { - _result.count = _index; - if (typeof callback === 'function') { - //console.log(_result) - callback(_result); - } - }, - limit: -1, - offset: 0 - }); - }); - }); + main.buildingFloorName_zh = _bfName; + main.sourceName_zh = _sourceName; + main.uuid = record.get('uuid').$val; + main.timestamp = record.get('timestamp').$cEncStr; + main.alarmClass = record.get('alarmClass'); + main.point = _sourceTmp; + main.sourceTmp = _sourceTmp; + main.devicePath = _sourceName; + main.msgText = record.get('alarmData').get('msgText'); + main.normalTime = record.get('normalTime'); + main.priority = record.get('priority'); + main.ackedTime = record.get('ackTime').$cEncStr; + main.ackState = record.get('ackState').$ordinal + if (_sourceTmp.includes("undefined")) { + // console.log(main.ackState) + main.buildingFloorName_zh = "無"; + main.alarmClass = "系統/設備異常"; + main.sourceTmp = "無"; + main.msgText = ""; + } + _result.data.push(main); + _index++; + }, + after: function () { + _result.count = _index; + if (typeof callback === 'function') { + //console.log(_result) + callback(_result); + } + }, + limit: -1, + offset: 0 + }); + }); + }); } function getDeviceAlarmCardByBaja(startDate_millisecond, endDate_millisecond, isRecover, isAck, callback) { - var _result = { count: 0, data: [] }; - var _index = 0; - var _recoverState = isRecover ? "!= null" : "= null"; - var _ackState = isAck ? "= 'acked'" : "= 'unacked'"; + var _result = { count: 0, data: [] }; + var _index = 0; + var _recoverState = isRecover ? "!= null" : "= null"; + var _ackState = isAck ? "= 'acked'" : "= 'unacked'"; - let startUrl = ""; - if (startDate_millisecond) { - startUrl = "timestamp.millis >= " + startDate_millisecond + " and "; - } - // console.log("首頁","local:|foxs:|alarm:|bql:select timestamp, ackTime, priority ,ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime from openAlarms where " + startUrl + "timestamp.millis <= " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp desc"); - require(['baja!'], function (baja) { + let startUrl = ""; + if (startDate_millisecond) { + startUrl = "timestamp.millis >= " + startDate_millisecond + " and "; + } + // console.log("首頁","local:|foxs:|alarm:|bql:select timestamp, ackTime, priority ,ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime from openAlarms where " + startUrl + "timestamp.millis <= " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp desc"); + require(['baja!'], function (baja) { - baja.Ord.make("local:|foxs:|alarm:|bql:select timestamp, ackTime, priority ,ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime where " + startUrl + "timestamp.millis <= " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp desc").get() - .then(function (table) { - return table.cursor({ - each: function (record) { - // console.log(record) - let main = {}; - // console.log(record.get('alarmData').get('sourceName'),record.get('timestamp').$cEncStr) - const alarmDisplayName = record.get('alarmData').get('sourceName').split(":")[1] ?? record.get('alarmData').get('sourceName').split(":")[0] - //console.log(alarmDisplayName) - _sourceTmp = alarmDisplayName.split('_'); - let _bfName = _sourceTmp[1] + "-" + _sourceTmp[4] - let _sourceName = _sourceTmp.slice(0, 8).join("_"); - _sourceTmp = _sourceTmp[7] + "-" + _sourceTmp[8]; + baja.Ord.make("local:|foxs:|alarm:|bql:select timestamp, ackTime, priority ,ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime where " + startUrl + "timestamp.millis <= " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp desc").get() + .then(function (table) { + return table.cursor({ + each: function (record) { + // console.log(record) + let main = {}; + // console.log(record.get('alarmData').get('sourceName'),record.get('timestamp').$cEncStr) + const alarmDisplayName = record.get('alarmData').get('sourceName').split(":")[1] ?? record.get('alarmData').get('sourceName').split(":")[0] + //console.log(alarmDisplayName) + _sourceTmp = alarmDisplayName.split('_'); + let _bfName = _sourceTmp[1] + "-" + _sourceTmp[4] + let _sourceName = _sourceTmp.slice(0, 8).join("_"); + _sourceTmp = _sourceTmp[7] + "-" + _sourceTmp[8]; - main.buildingFloorName_zh = _bfName; - main.sourceName_zh = _sourceName; - main.uuid = record.get('uuid').$val; - main.timestamp = record.get('timestamp').$cEncStr; - main.alarmClass = record.get('alarmClass'); - main.point = _sourceTmp; - main.sourceTmp = _sourceTmp; - main.devicePath = _sourceName; - main.msgText = record.get('alarmData').get('msgText'); - main.normalTime = record.get('normalTime'); - main.priority = record.get('priority'); - main.ackedTime = record.get('ackTime').$cEncStr; - main.ackState = record.get('ackState').$ordinal - if (!_sourceTmp.includes("undefined")) { - // console.log(main.ackState) - _result.data.push(main); - } - _index++; - }, - after: function () { - _result.count = _index; - if (typeof callback === 'function') { - //console.log(_result) - callback(_result); - } - }, - limit: -1, - offset: 0 - }); - }); - }); + main.buildingFloorName_zh = _bfName; + main.sourceName_zh = _sourceName; + main.uuid = record.get('uuid').$val; + main.timestamp = record.get('timestamp').$cEncStr; + main.alarmClass = record.get('alarmClass'); + main.point = _sourceTmp; + main.sourceTmp = _sourceTmp; + main.devicePath = _sourceName; + main.msgText = record.get('alarmData').get('msgText'); + main.normalTime = record.get('normalTime'); + main.priority = record.get('priority'); + main.ackedTime = record.get('ackTime').$cEncStr; + main.ackState = record.get('ackState').$ordinal + // if (!_sourceTmp.includes("undefined")) { + // // console.log(main.ackState) + // } + _result.data.push(main); + _index++; + }, + after: function () { + _result.count = _index; + if (typeof callback === 'function') { + //console.log(_result) + callback(_result); + } + }, + limit: -1, + offset: 0 + }); + }); + }); } /** - * [首頁] 圓餅圖資料 - 全部的異常 - * @param {any} callback - */ +* [首頁] 圓餅圖資料 - 全部的異常 +* @param {any} callback +*/ function getAlarmForChartDataByBaja(callback) { - var _result = ""; - var _ss = ""; - var _index = 0; + var _result = ""; + var _ss = ""; + var _index = 0; - require(['baja!'], function (baja) { - baja.Ord.make("local:|foxs:|alarm:|bql:select *").get() - .then(function (table) { - return table.cursor({ - each: function (record) { - if (_index == 0) - _ss += '{"alarmClass":"' + record.get('alarmClass') + '", "ackState":"' + record.get('ackState') + '", "normalTime":"' + record.get('normalTime') + '"}'; - else - _ss += ',{"alarmClass":"' + record.get('alarmClass') + '", "ackState":"' + record.get('ackState') + '", "normalTime":"' + record.get('normalTime') + '"}'; - _index++; - }, - after: function () { - //_result += '{' + '"count": ' + _index + ', "data":['; - //_result += _ss; - //_result += ']}'; - if (typeof callback === 'function') { - callback(_index); - } - }, - limit: -1, - offset: 0 - }); - }); - }); + require(['baja!'], function (baja) { + baja.Ord.make("local:|foxs:|alarm:|bql:select *").get() + .then(function (table) { + return table.cursor({ + each: function (record) { + if (_index == 0) + _ss += '{"alarmClass":"' + record.get('alarmClass') + '", "ackState":"' + record.get('ackState') + '", "normalTime":"' + record.get('normalTime') + '"}'; + else + _ss += ',{"alarmClass":"' + record.get('alarmClass') + '", "ackState":"' + record.get('ackState') + '", "normalTime":"' + record.get('normalTime') + '"}'; + _index++; + }, + after: function () { + //_result += '{' + '"count": ' + _index + ', "data":['; + //_result += _ss; + //_result += ']}'; + if (typeof callback === 'function') { + callback(_index); + } + }, + limit: -1, + offset: 0 + }); + }); + }); } \ No newline at end of file diff --git a/Frontend/js/n4js/bajatest.js b/Frontend/js/n4js/bajatest.js index d9260a0..d64f979 100644 --- a/Frontend/js/n4js/bajatest.js +++ b/Frontend/js/n4js/bajatest.js @@ -35,6 +35,7 @@ class subscriptionDevices { }; setSubscribeDevicesCallBack = function (callBackFunc) { + // console.log(callBackFunc) if (callBackFunc != undefined && callBackFunc != null) { this.changeCallback = callBackFunc; } @@ -55,6 +56,8 @@ class subscriptionDevices { var sub = new baja.Subscriber(); sub.attach('changed', function (prop) { + // console.log(prop) + // console.log(prop.getName()) if (prop.getName() === 'out') { var out_value = this.getOutDisplay(); var target_device_number = this.$parent.getDisplayName().split('_').slice(0, 5).join('_'); @@ -83,7 +86,6 @@ class subscriptionDevices { "point_name": point_name ? point_name : null, "value": key } - if (_this.changeCallback != undefined && _this.changeCallback != null) { _this.changeCallback(modify_target_device, true); //第2參數用在平面圖,刷新畫面 } @@ -114,7 +116,7 @@ class subscriptionDevices { totalTargetDevice = []; tableStart = new Date(Date.now()); $("#table-start-timestamp").html(tableStart.toISOString()); - + }, each: function (item, index) { @@ -161,13 +163,12 @@ class subscriptionDevices { if (_this.changeCallback != undefined && _this.changeCallback != null) { _this.changeCallback(modify_target_device); } - - baja.Ord.make("local:|foxs:|station:|" + this.getDisplay("slotPath")) .get() .then(function (component) { component_index++; var target_device_number = component.$parent.getDisplayName().split('_').slice(0, 5).join('_'); + // console.log(component, component.getDisplayName()) var point_name = component.getDisplayName(); // //依據Facets判斷回傳的內容值為何 @@ -517,7 +518,7 @@ function BajaSubscribeAlarmsByBql(ordPathForAlarm) { }); //使用bql語法 - console.log(`local:|foxs:|alarm:|bql:select top 1 timestamp, sourceState, normalTime where alarmData.sourceName like '%${ordPathForAlarm.area_tag}_${ordPathForAlarm.building_tag}_${ordPathForAlarm.system_tag}_${ordPathForAlarm.name_tag}_%' order by timestamp desc`); + // console.log(`local:|foxs:|alarm:|bql:select top 1 timestamp, sourceState, normalTime where alarmData.sourceName like '%${ordPathForAlarm.area_tag}_${ordPathForAlarm.building_tag}_${ordPathForAlarm.system_tag}_${ordPathForAlarm.name_tag}_%' order by timestamp desc`); baja.Ord.make(`local:|foxs:|alarm:|bql:select top 1 timestamp, sourceState, alarmData, alarmData.sourceName, normalTime where alarmData.sourceName like '%${ordPathForAlarm.area_tag}_${ordPathForAlarm.building_tag}_${ordPathForAlarm.system_tag}_${ordPathForAlarm.name_tag}_%' order by timestamp desc`) .get( function (table) { @@ -636,7 +637,7 @@ function BajaSubscribeElectricmeterByBql(ordPathForElectricmeter) { }); //使用bql語法 - console.log(`local:|foxs:|station:|slot:/${ordPathForElectricmeter.devicePath}|bql:select name, out, out.value, slotPath, facets from control:ControlPoint`); + // console.log(`local:|foxs:|station:|slot:/${ordPathForElectricmeter.devicePath}|bql:select name, out, out.value, slotPath, facets from control:ControlPoint`); baja.Ord.make(`local:|foxs:|station:|slot:/${ordPathForElectricmeter.devicePath}|bql:select name, out, out.value, slotPath, facets from control:ControlPoint`) .get( function (table) { diff --git a/Frontend/js/n4js/historybaja.js b/Frontend/js/n4js/historybaja.js index 59c7c17..c0c179e 100644 --- a/Frontend/js/n4js/historybaja.js +++ b/Frontend/js/n4js/historybaja.js @@ -35,83 +35,82 @@ // } function getHistoryDataByBaja(devicePath, startDate_millisecond, endDate_millisecond, deviceName, company, callback) { - var _result = {}; - var _ss = []; - var _index = 0; + var _result = {}; + var _ss = []; + var _index = 0; - require(['baja!'], function (baja) { - console.log('local:|foxs:|history:/' + company + '/' + devicePath + '|bql:select * from control:ControlPoint where timestamp.millis > ' + startDate_millisecond + ' and timestamp.millis < ' + endDate_millisecond); - baja.Ord.make('local:|foxs:|history:/' + company + '/' + devicePath + '|bql:select * from control:ControlPoint where timestamp.millis > ' + startDate_millisecond + ' and timestamp.millis < ' + endDate_millisecond).get() - .then(function (table) { - return table.cursor({ - each: function (record) { - console.log(record.get('timestamp')) - // if (_index == 0) - // _ss += '{"deviceName":"' + deviceName + '", "value":' + record.get('value') + ', "timestamp":"' + record.get('timestamp').$cEncStr - // + '"}'; - // else - // _ss += ',{"deviceName":"' + deviceName + '", "value":' + record.get('value') + ', "timestamp":"' + record.get('timestamp').$cEncStr - // + '"}'; - _ss.push({ - deviceName: deviceName, value: record.get('value'), timestamp: record.get('timestamp').$cEncStr - }); - _index++; - }, - after: function () { - _result = { count: _index, data: _ss } - // _result += '{' + '"count": ' + _index + ', "data":['; - // _result += _ss; - // _result += ']}'; - if (typeof callback === 'function') { - // console.log(_result) - _result = JSON.stringify(_result) - callback(_result); - } - }, - limit: -1, - offset: 0 - }); - }) - .catch(() => { - console.log("error"); - // const res = JSON.stringify({count:0, data:[]}) - callback() - }); - }); + require(['baja!'], function (baja) { + console.log('local:|foxs:|history:/' + company + '/' + devicePath + '|bql:select * from control:ControlPoint where timestamp.millis > ' + startDate_millisecond + ' and timestamp.millis < ' + endDate_millisecond); + baja.Ord.make('local:|foxs:|history:/' + company + '/' + devicePath + '|bql:select * from control:ControlPoint where timestamp.millis > ' + startDate_millisecond + ' and timestamp.millis < ' + endDate_millisecond).get() + .then(function (table) { + return table.cursor({ + each: function (record) { + console.log(record.get('timestamp')) + // if (_index == 0) + // _ss += '{"deviceName":"' + deviceName + '", "value":' + record.get('value') + ', "timestamp":"' + record.get('timestamp').$cEncStr + // + '"}'; + // else + // _ss += ',{"deviceName":"' + deviceName + '", "value":' + record.get('value') + ', "timestamp":"' + record.get('timestamp').$cEncStr + // + '"}'; + _ss.push({deviceName:deviceName, value:record.get('value'), timestamp:record.get('timestamp').$cEncStr + }); + _index++; + }, + after: function () { + _result={count: _index, data: _ss} + // _result += '{' + '"count": ' + _index + ', "data":['; + // _result += _ss; + // _result += ']}'; + if (typeof callback === 'function') { + // console.log(_result) + _result = JSON.stringify(_result) + callback(_result); + } + }, + limit: -1, + offset: 0 + }); + }) + .catch(()=>{ + console.log("error"); + // const res = JSON.stringify({count:0, data:[]}) + callback() + }); + }); } function test3000p(devicePath, startDate_millisecond, endDate_millisecond, deviceName, company, callback) { - var _result = ""; - var _ss = ""; - var _index = 0; - require(['baja!'], function (baja) { - "use strict"; - baja.Ord.make('local:|foxs:|history:/' + company + '/' + devicePath + '|bql:select * from control:ControlPoint where timestamp.millis > ' + startDate_millisecond + ' and timestamp.millis < ' + endDate_millisecond) - .get( - function (table) { - - table.cursor({ - each: function (item) { - console.log("item: " + item); - if (_index == 0) - _ss += '{"deviceName":"' + deviceName + '", "value":' + item.$map.$map.value.$display + ', "timestamp":"' + item.$map.$map.timestamp.$val.$cEncStr + '"}'; - else - _ss += ',{"deviceName":"' + deviceName + '", "value":' + item.$map.$map.value.$display + ', "timestamp":"' + item.$map.$map.timestamp.$val.$cEncStr + '"}'; - _index++; - }, - after: function () { - _result += '{' + '"count": ' + _index + ', "data":['; - _result += _ss; - _result += ']}'; - if (typeof callback === 'function') { - callback(_result); - } - }, - limit: -1, - offset: 0 - }); - }) - }); + var _result = ""; + var _ss = ""; + var _index = 0; + require(['baja!'], function (baja) { + "use strict"; + baja.Ord.make('local:|foxs:|history:/' + company + '/' + devicePath + '|bql:select * from control:ControlPoint where timestamp.millis > ' + startDate_millisecond + ' and timestamp.millis < ' + endDate_millisecond) + .get( + function (table) { + + table.cursor({ + each: function (item) { + console.log("item: " + item); + if (_index == 0) + _ss += '{"deviceName":"' + deviceName + '", "value":' + item.$map.$map.value.$display + ', "timestamp":"' + item.$map.$map.timestamp.$val.$cEncStr + '"}'; + else + _ss += ',{"deviceName":"' + deviceName + '", "value":' + item.$map.$map.value.$display + ', "timestamp":"' + item.$map.$map.timestamp.$val.$cEncStr + '"}'; + _index++; + }, + after: function () { + _result += '{' + '"count": ' + _index + ', "data":['; + _result += _ss; + _result += ']}'; + if (typeof callback === 'function') { + callback(_result); + } + }, + limit: -1, + offset: 0 + }); + }) + }); } diff --git a/Frontend/js/site.js b/Frontend/js/site.js index 586828d..7ee8352 100644 --- a/Frontend/js/site.js +++ b/Frontend/js/site.js @@ -596,11 +596,11 @@ class Forge3DElevFull { frags.forEach((fragProxy) => { fragProxy.frag.position.z = this.elev3DOption.floorHeight.filter(x => x.floor == subData["CP"])[0]?.height ?? 0; let start = 0; - if (node === 13777 && start == 0) { - // 改變感測器熱點位置 - this.sensorObjs && this.sensorObjs[0]?.changePos(node + 2, fragProxy.frag.position.z); - start = 1; - } + // 改變感測器熱點位置 + this.sensorObjs && this.sensorObjs[0]?.changePos(node+2, fragProxy.frag.position.z); + // if (node === 15200 && start == 0) { + // start = 1; + // } fragProxy.frag.updateAnimTransform(); }) elevObj.obj.viewer.impl.sceneUpdated(true); @@ -649,11 +649,11 @@ class Forge3DElevFull { frags.forEach((fragProxy) => { fragProxy.frag.position.z = this.elev3DOption.floorHeight.filter(x => x.floor == subData["CP"])[0]?.height ?? 0; let start = 0; - if (node === 13777 && start == 0) { - // 改變感測器熱點位置 - this.sensorObjs && this.sensorObjs[0]?.changePos(node + 2, fragProxy.frag.position.z); - start = 1; - } + this.sensorObjs && this.sensorObjs[0]?.changePos(node+2, fragProxy.frag.position.z); + // if (node === 15200 && start == 0) { + // // 改變感測器熱點位置 + // start = 1; + // } fragProxy.frag.updateAnimTransform() }) elevObj.obj.viewer.impl.sceneUpdated(true); @@ -714,8 +714,8 @@ class Forge3DSensor { this.DataVizCore = null; this.tempVal = 20; this.curDevice = option.curDevice ?? null; - this.selector = option.selector ?? "#forgeViewer" - this.elevCb = option.elevCb ?? null + this.selector=option.selector?? "#forgeViewer" + this.elevCb = option.elevCb?? null this.#init(); } @@ -725,7 +725,7 @@ class Forge3DSensor { this.ordPath.name_tag = this.sysSubTag; this.dataVizExtn = await this.viewer.loadExtension("Autodesk.DataVisualization"); this.DataVizCore = Autodesk.DataVisualization.Core; - await this.addHotPoint(); + await this.registerHotPoint() this.changeColorForSensorHotspot(this.curDevice.forge_dbid, 35) this.subSensorDevice(); this.elevCb() @@ -733,14 +733,14 @@ class Forge3DSensor { } - // 建立熱點 - async addHotPoint() { + // // 建立熱點 + // async addHotPoint() { - // this.dataVizExtn.removeAllViewables() - await this.registerHotPoint() - this.subSensorDevice(); - // console.log("2",this.dataVizExtn) - } + // // this.dataVizExtn.removeAllViewables() + // await this.registerHotPoint() + // this.subSensorDevice(); + // // console.log("2",this.dataVizExtn) + // } async registerHotPoint(color = "") { var viewer = this.viewer; @@ -789,7 +789,7 @@ class Forge3DSensor { } } } - + // 改變熱點位置 async changePos(dbId, positionZ) { diff --git a/Frontend/js/yourteam/yourteam.jquery.datatables.js b/Frontend/js/yourteam/yourteam.jquery.datatables.js index dec59ae..472bf92 100644 --- a/Frontend/js/yourteam/yourteam.jquery.datatables.js +++ b/Frontend/js/yourteam/yourteam.jquery.datatables.js @@ -143,7 +143,7 @@ function fnInitJqDataTablesAjax(apiUrl, tag, sendData = null, columns, columns_d //let sData = data ? (data.Data ? JSON.stringify(data.Data) : null) : null; if (sendData == null) { sendData = function (json) { - console.log("讀取列表", json) + // console.log("讀取列表", json) if (json.code && json.code == "0000") { return json.data; } diff --git a/Frontend/lib/skins/skin-master.css b/Frontend/lib/skins/skin-master.css index 56b7f03..c74bc24 100644 --- a/Frontend/lib/skins/skin-master.css +++ b/Frontend/lib/skins/skin-master.css @@ -1,12 +1,16 @@ #skin-default, #skin-light, #skin-dark { - position: relative; } + position: relative; +} + #skin-default:hover, #skin-light:hover, #skin-dark:hover { opacity: 0.8; - cursor: pointer; } + cursor: pointer; + } + #skin-default:before, #skin-light:before, #skin-dark:before { @@ -18,147 +22,199 @@ width: 100%; height: 100%; -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; + -ms-flex-align: center; + align-items: center; -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; + -ms-flex-pack: center; + justify-content: center; padding-left: 0.75rem; padding-top: 0.25rem; - color: var(--success-500); } + color: var(--success-500); + } body:not(.mod-skin-light):not(.mod-skin-dark) #skin-default:before { display: -webkit-box; display: -ms-flexbox; - display: flex; } + display: flex; +} /* #LIGHT MODE ========================================================================== */ .mod-skin-light:not(.mod-skin-dark) #skin-light:before { display: -webkit-box; display: -ms-flexbox; - display: flex; } + display: flex; +} .mod-skin-light:not(.mod-skin-dark) .page-content-wrapper { - background-color: #f9f9f9; } + background-color: #f9f9f9; +} .mod-skin-light:not(.mod-skin-dark) .nav-filter input[type="text"] { background: #ffffff; color: #333333; - color: var(--theme-fusion-500); } + color: var(--theme-fusion-500); +} + .mod-skin-light:not(.mod-skin-dark) .nav-filter input[type="text"]:focus { border-color: #333333; - color: var(--theme-primary-500); } + color: var(--theme-primary-500); + } .mod-skin-light:not(.mod-skin-dark) .page-sidebar { -webkit-box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.07); - box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.07); } + box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.07); +} .mod-skin-light:not(.mod-skin-dark).mod-nav-link:not(.nav-function-top):not(.nav-function-minify):not(.mod-hide-nav-icons) ul.nav-menu:not(.nav-menu-compact) > li > ul:before { - border-left: 1px dashed #cecece; } + border-left: 1px dashed #cecece; +} .mod-skin-light:not(.mod-skin-dark):not(.mod-nav-dark) .info-card { - color: #333333; } + color: #333333; +} + .mod-skin-light:not(.mod-skin-dark):not(.mod-nav-dark) .info-card .text-white { color: #333333 !important; - text-shadow: none; } + text-shadow: none; + } + .mod-skin-light:not(.mod-skin-dark):not(.mod-nav-dark) .info-card img.cover { -webkit-filter: grayscale(100%); - filter: grayscale(100%); - opacity: 0.25; } + filter: grayscale(100%); + opacity: 0.25; + } + .mod-skin-light:not(.mod-skin-dark):not(.mod-nav-dark) .info-card .info-card-text > span { color: #333333; - text-shadow: none; } + text-shadow: none; + } .mod-skin-light:not(.mod-skin-dark):not(.mod-nav-dark).nav-function-top .page-sidebar .primary-nav .nav-menu > li ul { - background: #ffffff; } + background: #ffffff; +} .mod-skin-light:not(.mod-skin-dark):not(.mod-nav-dark).nav-function-top .page-sidebar .primary-nav .nav-menu > li > ul:before { - color: #ffffff; } + color: #ffffff; +} .mod-skin-light:not(.mod-skin-dark):not(.mod-nav-dark).nav-function-top .page-sidebar .primary-nav .nav-menu > li a { color: rgba(0, 0, 0, 0.8); - color: var(--theme-primary-700); } + color: var(--theme-primary-700); +} .mod-skin-light:not(.mod-skin-dark):not(.mod-nav-dark) .page-logo, .mod-skin-light:not(.mod-skin-dark):not(.mod-nav-dark) .page-sidebar, .mod-skin-light:not(.mod-skin-dark):not(.mod-nav-dark) .nav-footer { - background-image: none; } + background-image: none; +} .mod-skin-light:not(.mod-skin-dark):not(.mod-nav-dark) .page-logo, .mod-skin-light:not(.mod-skin-dark):not(.mod-nav-dark) .page-header { border-bottom: 1px solid #eaeaea; -webkit-box-shadow: none; - box-shadow: none; } + box-shadow: none; +} .mod-skin-light:not(.mod-skin-dark):not(.mod-nav-dark) .nav-menu li > ul li.active > a { color: rgba(0, 0, 0, 0.8); - color: var(--theme-fusion-500); } + color: var(--theme-fusion-500); +} .mod-skin-light:not(.mod-skin-dark):not(.mod-nav-dark) .nav-menu li a { color: rgba(0, 0, 0, 0.8); - color: var(--theme-fusion-500); } + color: var(--theme-fusion-500); +} + .mod-skin-light:not(.mod-skin-dark):not(.mod-nav-dark) .nav-menu li a:focus { color: rgba(0, 0, 0, 0.8); - color: var(--theme-fusion-500); } + color: var(--theme-fusion-500); + } .mod-skin-light:not(.mod-skin-dark):not(.mod-nav-dark).nav-function-top .page-sidebar .primary-nav .nav-menu > li a { color: rgba(0, 0, 0, 0.8); - color: var(--theme-fusion-500); } + color: var(--theme-fusion-500); +} .mod-skin-light:not(.mod-skin-dark):not(.mod-nav-dark) .nav-menu li.active > a { color: rgba(0, 0, 0, 0.8); color: var(--theme-fusion-500); - font-weight: 500; } + font-weight: 500; +} .mod-skin-light:not(.mod-skin-dark):not(.mod-nav-dark) .nav-menu li > ul { - background-color: rgba(0, 0, 0, 0.03); } + background-color: rgba(0, 0, 0, 0.03); +} .mod-skin-light:not(.mod-skin-dark):not(.mod-nav-dark) .nav-menu li a > [class*='fa-'], .mod-skin-light:not(.mod-skin-dark):not(.mod-nav-dark) .nav-menu li a > .ni { - color: var(--theme-primary-700); } + color: var(--theme-primary-700); +} .mod-skin-light:not(.mod-skin-dark):not(.mod-nav-dark) .nav-menu li > ul li a:hover { - color: var(--theme-fusion-500); } + color: var(--theme-fusion-500); +} .mod-skin-light:not(.mod-skin-dark):not(.mod-nav-dark) .nav-menu .nav-title { color: rgba(0, 0, 0, 0.6); - color: var(--theme-fusion-50); } + color: var(--theme-fusion-50); +} .mod-skin-light:not(.mod-skin-dark):not(.mod-nav-dark) .page-logo-text { - color: #333333; } + color: #333333; +} .mod-skin-light:not(.mod-skin-dark):not(.mod-nav-dark) .page-logo, .mod-skin-light:not(.mod-skin-dark):not(.mod-nav-dark) .page-sidebar, .mod-skin-light:not(.mod-skin-dark):not(.mod-nav-dark) .nav-footer { - background: #ffffff; } + background: #ffffff; +} .mod-skin-light:not(.mod-skin-dark):not(.mod-nav-dark) .page-wrapper.alt, .mod-skin-light:not(.mod-skin-dark):not(.mod-nav-dark) .page-wrapper.auth, .mod-skin-light:not(.mod-skin-dark):not(.mod-nav-dark) .page-wrapper.auth .page-inner, .mod-skin-light:not(.mod-skin-dark):not(.mod-nav-dark) .page-wrapper.alt .page-inner, .mod-skin-light:not(.mod-skin-dark):not(.mod-nav-dark) .page-wrapper.auth .page-content-wrapper > div, .mod-skin-light:not(.mod-skin-dark):not(.mod-nav-dark) .page-wrapper.alt .page-content-wrapper > div { - background: #ffffff; } + background: #ffffff; +} + .mod-skin-light:not(.mod-skin-dark):not(.mod-nav-dark) .page-wrapper.alt .text-white, .mod-skin-light:not(.mod-skin-dark):not(.mod-nav-dark) .page-wrapper.auth .text-white, .mod-skin-light:not(.mod-skin-dark):not(.mod-nav-dark) .page-wrapper.auth .page-inner .text-white, .mod-skin-light:not(.mod-skin-dark):not(.mod-nav-dark) .page-wrapper.alt .page-inner .text-white, .mod-skin-light:not(.mod-skin-dark):not(.mod-nav-dark) .page-wrapper.auth .page-content-wrapper > div .text-white, .mod-skin-light:not(.mod-skin-dark):not(.mod-nav-dark) .page-wrapper.alt .page-content-wrapper > div .text-white { - color: #000 !important; } + color: #000 !important; + } @media (min-width: 992px) { .mod-skin-light.nav-function-minify:not(.nav-function-top):not(.mod-nav-dark) .page-sidebar .primary-nav:hover .nav-menu > li:hover > a { background: inherit !important; - color: inherit !important; } + color: inherit !important; + } + .mod-skin-light.nav-function-minify:not(.nav-function-top) .page-sidebar .primary-nav .nav-menu > li > a + ul { - background-color: #ffffff !important; } + background-color: #ffffff !important; + } + .mod-skin-light.nav-function-minify:not(.nav-function-top) .page-sidebar .primary-nav .nav-menu > li > a + ul:before { - color: #ffffff !important; } + color: #ffffff !important; + } + .mod-skin-light.nav-function-minify:not(.nav-function-top) .page-sidebar .primary-nav .nav-menu > li > a > .nav-link-text { - color: inherit !important; } + color: inherit !important; + } + .mod-skin-light.nav-function-top:not(.mod-nav-dark) .page-header { - background: #ffffff; } + background: #ffffff; + } + .mod-skin-light.nav-function-top:not(.mod-nav-dark) .page-header .badge.badge-icon { -webkit-box-shadow: 0 0 0 1px #ffffff; - box-shadow: 0 0 0 1px #ffffff; } + box-shadow: 0 0 0 1px #ffffff; + } + .mod-skin-light.nav-function-top:not(.mod-nav-dark) .page-header .header-icon:not(.btn) > [class*='fa-']:first-child:hover, .mod-skin-light.nav-function-top:not(.mod-nav-dark) .page-header .header-icon:not(.btn) > .ni:first-child:hover { - color: #333333 !important; } + color: #333333 !important; + } + .mod-skin-light.nav-function-top:not(.mod-nav-dark) #search-field { - color: #333333; } } + color: #333333; + } +} /* #DARK MODE ========================================================================== */ @@ -177,490 +233,799 @@ body:not(.mod-skin-light):not(.mod-skin-dark) #skin-default:before { } }*/ /* placeholder */ - /*! Color themes for Google Code Prettify | MIT License | github.com/jmblog/color-themes-for-google-code-prettify */ } + /*! Color themes for Google Code Prettify | MIT License | github.com/jmblog/color-themes-for-google-code-prettify */ +} + .mod-skin-dark:not(.mod-skin-light) #skin-dark:before { display: -webkit-box; display: -ms-flexbox; - display: flex; } + display: flex; + } + .mod-skin-dark:not(.mod-skin-light) .accordion .card .card-header .card-title { - color: rgba(255, 255, 255, 0.85); } + color: rgba(255, 255, 255, 0.85); + } + .mod-skin-dark:not(.mod-skin-light) .accordion.accordion-clean .card { - background-color: transparent; } + background-color: transparent; + } + .mod-skin-dark:not(.mod-skin-light) .accordion.accordion-clean .card-header { - background: transparent; } + background: transparent; + } + .mod-skin-dark:not(.mod-skin-light) .alert-primary, .mod-skin-dark:not(.mod-skin-light) .alert-sucess, .mod-skin-dark:not(.mod-skin-light) .alert-danger .alert-warning, .mod-skin-dark:not(.mod-skin-light) .alert-info .alert-secondary { background-color: rgba(255, 255, 255, 0.06); border-color: rgba(255, 255, 255, 0.09); - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark:not(.mod-skin-light) .alert-primary { color: #ffffff; color: var(--theme-primary-100); background-color: rgba(136, 106, 181, 0.2); background-color: rgba(var(--theme-rgb-primary), 0.2); border-color: rgba(136, 106, 181, 0.6); - border-color: rgba(var(--theme-rgb-primary), 0.6); } + border-color: rgba(var(--theme-rgb-primary), 0.6); + } + .mod-skin-dark:not(.mod-skin-light) .alert-success { color: #ffffff; color: var(--theme-success-100); background-color: rgba(29, 201, 183, 0.2); background-color: rgba(var(--theme-rgb-success), 0.2); border-color: rgba(29, 201, 183, 0.6); - border-color: rgba(var(--theme-rgb-success), 0.6); } + border-color: rgba(var(--theme-rgb-success), 0.6); + } + .mod-skin-dark:not(.mod-skin-light) .alert-danger { color: #ffffff; color: var(--theme-danger-100); background-color: rgba(253, 57, 149, 0.2); background-color: rgba(var(--theme-rgb-danger), 0.2); border-color: rgba(253, 57, 149, 0.6); - border-color: rgba(var(--theme-rgb-danger), 0.6); } + border-color: rgba(var(--theme-rgb-danger), 0.6); + } + .mod-skin-dark:not(.mod-skin-light) .alert-warning { color: #ffffff; color: var(--theme-warning-100); background-color: rgba(255, 194, 65, 0.2); background-color: rgba(var(--theme-rgb-warning), 0.2); border-color: rgba(255, 194, 65, 0.6); - border-color: rgba(var(--theme-rgb-warning), 0.6); } + border-color: rgba(var(--theme-rgb-warning), 0.6); + } + .mod-skin-dark:not(.mod-skin-light) .alert-info { color: #ffffff; color: var(--theme-info-100); background-color: rgba(33, 150, 243, 0.2); background-color: rgba(var(--theme-rgb-info), 0.2); border-color: rgba(33, 150, 243, 0.6); - border-color: rgba(var(--theme-rgb-info), 0.6); } + border-color: rgba(var(--theme-rgb-info), 0.6); + } + .mod-skin-dark:not(.mod-skin-light) .alert-secondary { color: #ffffff; color: var(--theme-white); background-color: rgba(80, 80, 80, 0.2); background-color: rgba(var(--theme-rgb-fusion), 0.2); border-color: rgba(80, 80, 80, 0.6); - border-color: rgba(var(--theme-rgb-fusion), 0.6); } + border-color: rgba(var(--theme-rgb-fusion), 0.6); + } + .mod-skin-dark:not(.mod-skin-light) .page-wrapper.alt, .mod-skin-dark:not(.mod-skin-light) .page-wrapper.auth, .mod-skin-dark:not(.mod-skin-light) .page-wrapper.auth .page-inner, .mod-skin-dark:not(.mod-skin-light) .page-wrapper.alt .page-inner, .mod-skin-dark:not(.mod-skin-light) .page-wrapper.auth .page-content-wrapper > div, .mod-skin-dark:not(.mod-skin-light) .page-wrapper.alt .page-content-wrapper > div { - background: #37393e; } + background: #37393e; + } + .mod-skin-dark:not(.mod-skin-light) .border:not(.border-primary):not(.tab-content):not(.border-secondary):not(.border-success):not(.border-danger):not(.border-warning):not(.border-info):not(.border-light):not(.border-dark):not(.border-white) { - border-color: rgba(0, 0, 0, 0.15) !important; } + border-color: rgba(0, 0, 0, 0.15) !important; + } + .mod-skin-dark:not(.mod-skin-light) .border-top { - border-top: 1px solid rgba(0, 0, 0, 0.15) !important; } + border-top: 1px solid rgba(0, 0, 0, 0.15) !important; + } + .mod-skin-dark:not(.mod-skin-light) .border-right { - border-right: 1px solid rgba(0, 0, 0, 0.15) !important; } + border-right: 1px solid rgba(0, 0, 0, 0.15) !important; + } + .mod-skin-dark:not(.mod-skin-light) .border-bottom { - border-bottom: 1px solid rgba(0, 0, 0, 0.15) !important; } + border-bottom: 1px solid rgba(0, 0, 0, 0.15) !important; + } + .mod-skin-dark:not(.mod-skin-light) .border-left { - border-left: 1px solid rgba(0, 0, 0, 0.15) !important; } + border-left: 1px solid rgba(0, 0, 0, 0.15) !important; + } + .mod-skin-dark:not(.mod-skin-light) .border-faded { - border-color: rgba(0, 0, 0, 0.15) !important; } + border-color: rgba(0, 0, 0, 0.15) !important; + } + .mod-skin-dark:not(.mod-skin-light) .breadcrumb:not(.breadcrumb-arrow):not(.page-breadcrumb):not([class*="bg-"]) { - background: #242528; } + background: #242528; + } + .mod-skin-dark:not(.mod-skin-light) .breadcrumb-arrow li a { - color: #ffffff !important; } + color: #ffffff !important; + } + .mod-skin-dark:not(.mod-skin-light) .btn.btn-panel.bg-transparent { - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark:not(.mod-skin-light) .btn-light { -webkit-box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.1); - box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.1); - border-color: rgba(0, 0, 0, 0.35); } + box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.1); + border-color: rgba(0, 0, 0, 0.35); + } + .mod-skin-dark:not(.mod-skin-light) .btn-outline-dark { color: #989898; - border-color: #000000; } + border-color: #000000; + } + .mod-skin-dark:not(.mod-skin-light) .btn-outline-default { background-color: #37393e; color: #c5c5c5; - border-color: #1d1f23; } + border-color: #1d1f23; + } + .mod-skin-dark:not(.mod-skin-light) .btn-default { background: #5e646b; color: #cccccc; - border-color: transparent; } + border-color: transparent; + } + .mod-skin-dark:not(.mod-skin-light) .btn-default:hover { border-color: transparent; - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark:not(.mod-skin-light) .btn-default:focus { - border-color: #a5abb1 !important; } + border-color: #a5abb1 !important; + } + .mod-skin-dark:not(.mod-skin-light) .btn-default.active { background: rgba(var(--theme-rgb-primary), 0.85); - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark:not(.mod-skin-light) .btn-icon:not([class*="-primary"]):not([class*="-secondary"]):not([class*="-default"]):not([class*="-success"]):not([class*="-info"]):not([class*="-warning"]):not([class*="-danger"]):not([class*="-dark"]):not([class*="-light"]):not(.nav-item):not(.active):not(:active):not(:hover) { - color: #a5abb1 !important; } + color: #a5abb1 !important; + } + .mod-skin-dark:not(.mod-skin-light) .btn-icon:not([class*="-primary"]):not([class*="-secondary"]):not([class*="-default"]):not([class*="-success"]):not([class*="-info"]):not([class*="-warning"]):not([class*="-danger"]):not([class*="-dark"]):not([class*="-light"]):not(.nav-item):hover { color: #c0c5c9 !important; - background: rgba(255, 255, 255, 0.1); } + background: rgba(255, 255, 255, 0.1); + } + .mod-skin-dark:not(.mod-skin-light) .chat-segment-get .chat-message { background: rgba(0, 0, 0, 0.3); - color: rgba(255, 255, 255, 0.8); } + color: rgba(255, 255, 255, 0.8); + } + .mod-skin-dark:not(.mod-skin-light) .chat-segment-sent .chat-message { background: rgba(29, 201, 183, 0.35); - background: rgba(var(--theme-rgb-success), 0.35); } + background: rgba(var(--theme-rgb-success), 0.35); + } + .mod-skin-dark:not(.mod-skin-light) .msgr-list + .msgr:before { - background: rgba(0, 0, 0, 0.5); } + background: rgba(0, 0, 0, 0.5); + } + .mod-skin-dark:not(.mod-skin-light) .time-stamp { - color: #bdbdbd; } + color: #bdbdbd; + } + .mod-skin-dark:not(.mod-skin-light) .page-content-wrapper a:not(.btn):not(.badge):not(.dropdown-item):not(.nav-link):not(.navbar-brand):not(.card-title):not([class*="fc-"]):not([class*="text-"]):not(.btn-search-close), .mod-skin-dark:not(.mod-skin-light) .modal-body a:not(.btn):not(.badge):not(.dropdown-item):not(.nav-link):not(.page-link):not(.navbar-brand):not(.card-title) { - /*color: #ffffff;*/ - color: var(--theme-primary-200); + /* color: #ffffff; */ + color: var(--theme-primary-200); } + .mod-skin-dark:not(.mod-skin-light) .text-success { - color: var(--theme-success-300) !important; } + color: var(--theme-success-300) !important; + } + .mod-skin-dark:not(.mod-skin-light) .text-danger { - color: var(--theme-danger-300) !important; } + color: var(--theme-danger-300) !important; + } + .mod-skin-dark:not(.mod-skin-light) .text-warning { - color: var(--theme-warning-300) !important; } + color: var(--theme-warning-300) !important; + } + .mod-skin-dark:not(.mod-skin-light) .text-info { - color: var(--theme-info-300) !important; } + color: var(--theme-info-300) !important; + } + .mod-skin-dark:not(.mod-skin-light) .text-dark { - color: rgba(255, 255, 255, 0.75) !important; } + color: rgba(255, 255, 255, 0.75) !important; + } + .mod-skin-dark:not(.mod-skin-light) .text-muted { - color: rgba(255, 255, 255, 0.8) !important; } + color: rgba(255, 255, 255, 0.8) !important; + } + .mod-skin-dark:not(.mod-skin-light) .text-contrast { - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark:not(.mod-skin-light) .text-secondary { - color: rgba(255, 255, 255, 0.9) !important; } + color: rgba(255, 255, 255, 0.9) !important; + } + .mod-skin-dark:not(.mod-skin-light) .text-primary { color: #ffffff; - color: var(--theme-primary-300) !important; } + color: var(--theme-primary-300) !important; + } + .mod-skin-dark:not(.mod-skin-light) a.text-primary:hover, .mod-skin-dark:not(.mod-skin-light) a.text-primary:focus { color: #ffffff; - color: var(--theme-primary-200) !important; } + color: var(--theme-primary-200) !important; + } + .mod-skin-dark:not(.mod-skin-light) .bg-faded { background-color: #3c3f48; - color: #a5abb1; } + color: #a5abb1; + } + .mod-skin-dark:not(.mod-skin-light) .bg-gray-50 { - background-color: #47484c; } + background-color: #47484c; + } + .mod-skin-dark:not(.mod-skin-light) .bg-light { - background-color: #565656 !important; } + background-color: #565656 !important; + } + .mod-skin-dark:not(.mod-skin-light) .bg-subtlelight-fade { background: #2d2f32; - background: rgba(var(--theme-rgb-fusion), 0.2); } + background: rgba(var(--theme-rgb-fusion), 0.2); + } + .mod-skin-dark:not(.mod-skin-light) .bg-trans-gradient { - background: linear-gradient(250deg, rgba(var(--theme-rgb-info), 0.5), rgba(var(--theme-rgb-primary), 0.5)); } + background: linear-gradient(250deg, rgba(var(--theme-rgb-info), 0.5), rgba(var(--theme-rgb-primary), 0.5)); + } + .mod-skin-dark:not(.mod-skin-light) .bg-highlight { background-color: rgba(255, 194, 65, 0.15); - background-color: rgba(var(--theme-rgb-warning), 0.15); } + background-color: rgba(var(--theme-rgb-warning), 0.15); + } + .mod-skin-dark:not(.mod-skin-light) .bg-white:not([class*='popover']) { background-color: #383b44 !important; - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark:not(.mod-skin-light) .bg-white:not([class*='popover']).popover { - color: inherit; } + color: inherit; + } + .mod-skin-dark:not(.mod-skin-light) .bg-primary-50:not([class*='popover']) { background-color: rgba(136, 106, 181, 0.1); background-color: rgba(var(--theme-rgb-primary), 0.1); - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark:not(.mod-skin-light) .bg-primary-100:not([class*='popover']) { background-color: rgba(136, 106, 181, 0.2); background-color: rgba(var(--theme-rgb-primary), 0.2); - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark:not(.mod-skin-light) .bg-primary-200:not([class*='popover']) { background-color: rgba(136, 106, 181, 0.3); background-color: rgba(var(--theme-rgb-primary), 0.3); - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark:not(.mod-skin-light) .bg-primary-300:not([class*='popover']) { background-color: rgba(136, 106, 181, 0.4); background-color: rgba(var(--theme-rgb-primary), 0.4); - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark:not(.mod-skin-light) .bg-primary-400:not([class*='popover']) { background-color: rgba(136, 106, 181, 0.5); - background-color: rgba(var(--theme-rgb-primary), 0.5); } + background-color: rgba(var(--theme-rgb-primary), 0.5); + } + .mod-skin-dark:not(.mod-skin-light) .bg-primary-500:not([class*='popover']) { background-color: rgba(136, 106, 181, 0.6); - background-color: rgba(var(--theme-rgb-primary), 0.6); } + background-color: rgba(var(--theme-rgb-primary), 0.6); + } + .mod-skin-dark:not(.mod-skin-light) .bg-primary-600:not([class*='popover']) { background-color: rgba(136, 106, 181, 0.7); - background-color: rgba(var(--theme-rgb-primary), 0.7); } + background-color: rgba(var(--theme-rgb-primary), 0.7); + } + .mod-skin-dark:not(.mod-skin-light) .bg-primary-700:not([class*='popover']) { background-color: rgba(136, 106, 181, 0.8); - background-color: rgba(var(--theme-rgb-primary), 0.8); } + background-color: rgba(var(--theme-rgb-primary), 0.8); + } + .mod-skin-dark:not(.mod-skin-light) .bg-primary-800:not([class*='popover']) { background-color: rgba(136, 106, 181, 0.9); - background-color: rgba(var(--theme-rgb-primary), 0.9); } + background-color: rgba(var(--theme-rgb-primary), 0.9); + } + .mod-skin-dark:not(.mod-skin-light) .bg-primary-900:not([class*='popover']) { - background-color: rgba(var(--theme-rgb-primary), 1); } + background-color: rgba(var(--theme-rgb-primary), 1); + } + .mod-skin-dark:not(.mod-skin-light) .bg-success-50:not([class*='popover']) { background-color: rgba(29, 201, 183, 0.1); background-color: rgba(var(--theme-rgb-success), 0.1); - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark:not(.mod-skin-light) .bg-success-100:not([class*='popover']) { background-color: rgba(29, 201, 183, 0.2); background-color: rgba(var(--theme-rgb-success), 0.2); - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark:not(.mod-skin-light) .bg-success-200:not([class*='popover']) { background-color: rgba(29, 201, 183, 0.3); background-color: rgba(var(--theme-rgb-success), 0.3); - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark:not(.mod-skin-light) .bg-success-300:not([class*='popover']) { background-color: rgba(29, 201, 183, 0.4); background-color: rgba(var(--theme-rgb-success), 0.4); - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark:not(.mod-skin-light) .bg-success-400:not([class*='popover']) { background-color: rgba(29, 201, 183, 0.5); - background-color: rgba(var(--theme-rgb-success), 0.5); } + background-color: rgba(var(--theme-rgb-success), 0.5); + } + .mod-skin-dark:not(.mod-skin-light) .bg-success-500:not([class*='popover']) { background-color: rgba(29, 201, 183, 0.6); - background-color: rgba(var(--theme-rgb-success), 0.6); } + background-color: rgba(var(--theme-rgb-success), 0.6); + } + .mod-skin-dark:not(.mod-skin-light) .bg-success-600:not([class*='popover']) { background-color: rgba(29, 201, 183, 0.7); - background-color: rgba(var(--theme-rgb-success), 0.7); } + background-color: rgba(var(--theme-rgb-success), 0.7); + } + .mod-skin-dark:not(.mod-skin-light) .bg-success-700:not([class*='popover']) { background-color: rgba(29, 201, 183, 0.8); - background-color: rgba(var(--theme-rgb-success), 0.8); } + background-color: rgba(var(--theme-rgb-success), 0.8); + } + .mod-skin-dark:not(.mod-skin-light) .bg-success-800:not([class*='popover']) { background-color: rgba(29, 201, 183, 0.9); - background-color: rgba(var(--theme-rgb-success), 0.9); } + background-color: rgba(var(--theme-rgb-success), 0.9); + } + .mod-skin-dark:not(.mod-skin-light) .bg-success-900:not([class*='popover']) { background-color: #1dc9b7; - background-color: rgba(var(--theme-rgb-success), 1); } + background-color: rgba(var(--theme-rgb-success), 1); + } + .mod-skin-dark:not(.mod-skin-light) .bg-danger-50:not([class*='popover']) { background-color: rgba(253, 57, 149, 0.1); background-color: rgba(var(--theme-rgb-danger), 0.1); - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark:not(.mod-skin-light) .bg-danger-100:not([class*='popover']) { background-color: rgba(253, 57, 149, 0.2); background-color: rgba(var(--theme-rgb-danger), 0.2); - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark:not(.mod-skin-light) .bg-danger-200:not([class*='popover']) { background-color: rgba(253, 57, 149, 0.3); background-color: rgba(var(--theme-rgb-danger), 0.3); - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark:not(.mod-skin-light) .bg-danger-300:not([class*='popover']) { background-color: rgba(253, 57, 149, 0.4); background-color: rgba(var(--theme-rgb-danger), 0.4); - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark:not(.mod-skin-light) .bg-danger-400:not([class*='popover']) { background-color: rgba(253, 57, 149, 0.5); background-color: rgba(var(--theme-rgb-danger), 0.5); - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark:not(.mod-skin-light) .bg-danger-500:not([class*='popover']) { background-color: rgba(253, 57, 149, 0.6); - background-color: rgba(var(--theme-rgb-danger), 0.6); } + background-color: rgba(var(--theme-rgb-danger), 0.6); + } + .mod-skin-dark:not(.mod-skin-light) .bg-danger-600:not([class*='popover']) { background-color: rgba(253, 57, 149, 0.7); - background-color: rgba(var(--theme-rgb-danger), 0.7); } + background-color: rgba(var(--theme-rgb-danger), 0.7); + } + .mod-skin-dark:not(.mod-skin-light) .bg-danger-700:not([class*='popover']) { background-color: rgba(253, 57, 149, 0.8); - background-color: rgba(var(--theme-rgb-danger), 0.8); } + background-color: rgba(var(--theme-rgb-danger), 0.8); + } + .mod-skin-dark:not(.mod-skin-light) .bg-danger-800:not([class*='popover']) { background-color: rgba(253, 57, 149, 0.9); - background-color: rgba(var(--theme-rgb-danger), 0.9); } + background-color: rgba(var(--theme-rgb-danger), 0.9); + } + .mod-skin-dark:not(.mod-skin-light) .bg-danger-900:not([class*='popover']) { background-color: #fd3995; - background-color: rgba(var(--theme-rgb-danger), 1); } + background-color: rgba(var(--theme-rgb-danger), 1); + } + .mod-skin-dark:not(.mod-skin-light) .bg-warning-50:not([class*='popover']) { background-color: rgba(255, 194, 65, 0.1); background-color: rgba(var(--theme-rgb-warning), 0.1); - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark:not(.mod-skin-light) .bg-warning-100:not([class*='popover']) { background-color: rgba(255, 194, 65, 0.2); background-color: rgba(var(--theme-rgb-warning), 0.2); - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark:not(.mod-skin-light) .bg-warning-200:not([class*='popover']) { background-color: rgba(255, 194, 65, 0.3); background-color: rgba(var(--theme-rgb-warning), 0.3); - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark:not(.mod-skin-light) .bg-warning-300:not([class*='popover']) { background-color: rgba(255, 194, 65, 0.4); background-color: rgba(var(--theme-rgb-warning), 0.4); - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark:not(.mod-skin-light) .bg-warning-400:not([class*='popover']) { background-color: rgba(255, 194, 65, 0.5); background-color: rgba(var(--theme-rgb-warning), 0.5); - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark:not(.mod-skin-light) .bg-warning-500:not([class*='popover']) { background-color: rgba(255, 194, 65, 0.6); - background-color: rgba(var(--theme-rgb-warning), 0.6); } + background-color: rgba(var(--theme-rgb-warning), 0.6); + } + .mod-skin-dark:not(.mod-skin-light) .bg-warning-600:not([class*='popover']) { background-color: rgba(255, 194, 65, 0.7); - background-color: rgba(var(--theme-rgb-warning), 0.7); } + background-color: rgba(var(--theme-rgb-warning), 0.7); + } + .mod-skin-dark:not(.mod-skin-light) .bg-warning-700:not([class*='popover']) { background-color: rgba(255, 194, 65, 0.8); - background-color: rgba(var(--theme-rgb-warning), 0.8); } + background-color: rgba(var(--theme-rgb-warning), 0.8); + } + .mod-skin-dark:not(.mod-skin-light) .bg-warning-800:not([class*='popover']) { background-color: rgba(255, 194, 65, 0.9); - background-color: rgba(var(--theme-rgb-warning), 0.9); } + background-color: rgba(var(--theme-rgb-warning), 0.9); + } + .mod-skin-dark:not(.mod-skin-light) .bg-warning-900:not([class*='popover']) { background-color: #ffc241; - background-color: rgba(var(--theme-rgb-warning), 1); } + background-color: rgba(var(--theme-rgb-warning), 1); + } + .mod-skin-dark:not(.mod-skin-light) .bg-info-50:not([class*='popover']) { background-color: rgba(33, 150, 243, 0.1); background-color: rgba(var(--theme-rgb-info), 0.1); - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark:not(.mod-skin-light) .bg-info-100:not([class*='popover']) { background-color: rgba(33, 150, 243, 0.2); background-color: rgba(var(--theme-rgb-info), 0.2); - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark:not(.mod-skin-light) .bg-info-200:not([class*='popover']) { background-color: rgba(33, 150, 243, 0.3); background-color: rgba(var(--theme-rgb-info), 0.3); - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark:not(.mod-skin-light) .bg-info-300:not([class*='popover']) { background-color: rgba(33, 150, 243, 0.4); background-color: rgba(var(--theme-rgb-info), 0.4); - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark:not(.mod-skin-light) .bg-info-400:not([class*='popover']) { background-color: rgba(33, 150, 243, 0.5); - background-color: rgba(var(--theme-rgb-info), 0.5); } + background-color: rgba(var(--theme-rgb-info), 0.5); + } + .mod-skin-dark:not(.mod-skin-light) .bg-info-500:not([class*='popover']) { background-color: rgba(33, 150, 243, 0.6); - background-color: rgba(var(--theme-rgb-info), 0.6); } + background-color: rgba(var(--theme-rgb-info), 0.6); + } + .mod-skin-dark:not(.mod-skin-light) .bg-info-600:not([class*='popover']) { background-color: rgba(33, 150, 243, 0.7); - background-color: rgba(var(--theme-rgb-info), 0.7); } + background-color: rgba(var(--theme-rgb-info), 0.7); + } + .mod-skin-dark:not(.mod-skin-light) .bg-info-700:not([class*='popover']) { background-color: rgba(33, 150, 243, 0.8); - background-color: rgba(var(--theme-rgb-info), 0.8); } + background-color: rgba(var(--theme-rgb-info), 0.8); + } + .mod-skin-dark:not(.mod-skin-light) .bg-info-800:not([class*='popover']) { background-color: rgba(33, 150, 243, 0.9); - background-color: rgba(var(--theme-rgb-info), 0.9); } + background-color: rgba(var(--theme-rgb-info), 0.9); + } + .mod-skin-dark:not(.mod-skin-light) .bg-info-900:not([class*='popover']) { color: #000000; background-color: #2196f3; - background-color: rgba(var(--theme-rgb-info), 1); } + background-color: rgba(var(--theme-rgb-info), 1); + } + .mod-skin-dark:not(.mod-skin-light) [data-replaceclass] .bg-white { - background: #ffffff !important; } + background: #ffffff !important; + } + .mod-skin-dark:not(.mod-skin-light) [data-replaceclass] .bg-faded { - background-color: #f7f9fa !important; } + background-color: #f7f9fa !important; + } + .mod-skin-dark:not(.mod-skin-light) .hover-bg { background: #303136; - color: inherit; } + color: inherit; + } + .mod-skin-dark:not(.mod-skin-light) .hover-bg:hover { background: inherit; - color: inherit; } + color: inherit; + } + .mod-skin-dark:not(.mod-skin-light) .hover-white:hover { - background: #313438 !important; } + background: #313438 !important; + } + .mod-skin-dark:not(.mod-skin-light) .hover-white:active { - background: #25272a !important; } + background: #25272a !important; + } + .mod-skin-dark:not(.mod-skin-light) .hover-white .app-list-name { - color: #a5abb1; } + color: #a5abb1; + } + .mod-skin-dark:not(.mod-skin-light) .bd-highlight { background-color: rgba(86, 61, 124, 0.6); - border: 1px solid rgba(121, 95, 160, 0.8); } + border: 1px solid rgba(121, 95, 160, 0.8); + } + .mod-skin-dark:not(.mod-skin-light) .bd-example-row .row > .col, .mod-skin-dark:not(.mod-skin-light) .bd-example-row .row > [class^=col-] { background-color: rgba(86, 61, 124, 0.75); - border: 1px solid rgba(133, 106, 175, 0.5); } + border: 1px solid rgba(133, 106, 175, 0.5); + } + .mod-skin-dark:not(.mod-skin-light) .card .d-block.bg-danger-50 { background-color: rgba(253, 57, 149, 0.7); - background-color: rgba(var(--theme-rgb-danger), 0.7); } + background-color: rgba(var(--theme-rgb-danger), 0.7); + } + .mod-skin-dark:not(.mod-skin-light) .card .d-block.bg-info-50 { background-color: rgba(33, 150, 243, 0.7); - background-color: rgba(var(--theme-rgb-info), 0.7); } + background-color: rgba(var(--theme-rgb-info), 0.7); + } + .mod-skin-dark:not(.mod-skin-light) .demo-window:before { - background: #000000; } + background: #000000; + } + .mod-skin-dark:not(.mod-skin-light) .app-body-demo { - border: 1px solid black; } + border: 1px solid black; + } + .mod-skin-dark:not(.mod-skin-light) .frame-wrap { - background: transparent; } + background: transparent; + } + .mod-skin-dark:not(.mod-skin-light) #app-eventlog:empty { - background: #2c2e31; } + background: #2c2e31; + } + .mod-skin-dark:not(.mod-skin-light) #app-eventlog > div:not(:last-child) { - border-bottom: 1px dashed rgba(255, 255, 255, 0.1); } + border-bottom: 1px dashed rgba(255, 255, 255, 0.1); + } + .mod-skin-dark:not(.mod-skin-light) .settings-panel h5 { - color: rgba(255, 255, 255, 0.5); } + color: rgba(255, 255, 255, 0.5); + } + .mod-skin-dark:not(.mod-skin-light) .settings-panel .list { - color: #d0d0d0; } + color: #d0d0d0; + } + .mod-skin-dark:not(.mod-skin-light) .settings-panel .list .onoffswitch-title-desc { - color: #8c8c8c; } + color: #8c8c8c; + } + .mod-skin-dark:not(.mod-skin-light) .settings-panel .list:hover { background: rgba(255, 255, 255, 0.03); - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark:not(.mod-skin-light) .settings-panel .expanded:not(.theme-colors) { - background: #2f323b; } + background: #2f323b; + } + .mod-skin-dark:not(.mod-skin-light) .dropdown-menu { -webkit-box-shadow: 0 0 15px 1px rgba(0, 0, 0, 0.25); - box-shadow: 0 0 15px 1px rgba(0, 0, 0, 0.25); + box-shadow: 0 0 15px 1px rgba(0, 0, 0, 0.25); background-color: #383b40; - color: #a3acb5; } + color: #a3acb5; + } + .mod-skin-dark:not(.mod-skin-light) .dropdown-item { - color: #a5abb1 !important; } + color: #a5abb1 !important; + } + .mod-skin-dark:not(.mod-skin-light) .dropdown-item:hover, .mod-skin-dark:not(.mod-skin-light) .dropdown-item:focus { - background-color: #3e4146; } + background-color: #3e4146; + } + .mod-skin-dark:not(.mod-skin-light) .dropdown-item.active, .mod-skin-dark:not(.mod-skin-light) .dropdown-item:active { color: #ffffff !important; background-color: #594677; - background-color: rgba(var(--theme-rgb-primary), 0.35); } + background-color: rgba(var(--theme-rgb-primary), 0.35); + } + .mod-skin-dark:not(.mod-skin-light) .dropdown-multilevel:hover > .dropdown-item:not(.disabled) { - background-color: #3e4146; } + background-color: #3e4146; + } + .mod-skin-dark:not(.mod-skin-light) .dropdown-divider { - border-top: 1px solid rgba(0, 0, 0, 0.25); } + border-top: 1px solid rgba(0, 0, 0, 0.25); + } + .mod-skin-dark:not(.mod-skin-light) .dropdown-icon-menu > ul { - background: #202225; } + background: #202225; + } + .mod-skin-dark:not(.mod-skin-light) .dropdown-icon-menu a { -webkit-box-shadow: none !important; - box-shadow: none !important; } + box-shadow: none !important; + } + .mod-skin-dark:not(.mod-skin-light) ::-webkit-input-placeholder { /* Edge */ - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark:not(.mod-skin-light) :-ms-input-placeholder { /* Internet Explorer 10-11 */ - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark:not(.mod-skin-light) ::-moz-placeholder { - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark:not(.mod-skin-light) ::-ms-input-placeholder { - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark:not(.mod-skin-light) ::placeholder { - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark:not(.mod-skin-light) select option { -webkit-box-shadow: 0 0 15px 1px rgba(0, 0, 0, 0.25); - box-shadow: 0 0 15px 1px rgba(0, 0, 0, 0.25); + box-shadow: 0 0 15px 1px rgba(0, 0, 0, 0.25); background-color: #383b40; color: #ffffff; - text-shadow: 0 1px 0 rgba(0, 0, 0, 0.4); } + text-shadow: 0 1px 0 rgba(0, 0, 0, 0.4); + } + .mod-skin-dark:not(.mod-skin-light) input::-webkit-input-placeholder, .mod-skin-dark:not(.mod-skin-light) textarea::-webkit-input-placeholder, .mod-skin-dark:not(.mod-skin-light) select::-webkit-input-placeholder { - color: #a5abb1; } + color: #a5abb1; + } + .mod-skin-dark:not(.mod-skin-light) input::-moz-placeholder, .mod-skin-dark:not(.mod-skin-light) textarea::-moz-placeholder, .mod-skin-dark:not(.mod-skin-light) select::-moz-placeholder { - color: #a5abb1; } + color: #a5abb1; + } + .mod-skin-dark:not(.mod-skin-light) input:-ms-input-placeholder, .mod-skin-dark:not(.mod-skin-light) textarea:-ms-input-placeholder, .mod-skin-dark:not(.mod-skin-light) select:-ms-input-placeholder { - color: #a5abb1; } + color: #a5abb1; + } + .mod-skin-dark:not(.mod-skin-light) input::-ms-input-placeholder, .mod-skin-dark:not(.mod-skin-light) textarea::-ms-input-placeholder, .mod-skin-dark:not(.mod-skin-light) select::-ms-input-placeholder { - color: #a5abb1; } + color: #a5abb1; + } + .mod-skin-dark:not(.mod-skin-light) input::placeholder, .mod-skin-dark:not(.mod-skin-light) textarea::placeholder, .mod-skin-dark:not(.mod-skin-light) select::placeholder { - color: #a5abb1; } + color: #a5abb1; + } + .mod-skin-dark:not(.mod-skin-light) .custom-select { color: #FFFFFF; - background-color: #1f2125; } + background-color: #1f2125; + } + .mod-skin-dark:not(.mod-skin-light) .custom-select:not(:focus) { - border: 1px solid #19191c; } + border: 1px solid #19191c; + } + .mod-skin-dark:not(.mod-skin-light) .form-label { - color: #a5abb1; } + color: #a5abb1; + } + .mod-skin-dark:not(.mod-skin-light) .form-control, .mod-skin-dark:not(.mod-skin-light) .custom-file-label { color: #ffffff; background-color: rgba(0, 0, 0, 0.15); - border-color: rgba(0, 0, 0, 0.35); } + border-color: rgba(0, 0, 0, 0.35); + } + .mod-skin-dark:not(.mod-skin-light) .form-control:focus, .mod-skin-dark:not(.mod-skin-light) .custom-file-label:focus { - border-color: rgba(var(--theme-rgb-primary), 0.7); } + border-color: rgba(var(--theme-rgb-primary), 0.7); + } + .mod-skin-dark:not(.mod-skin-light) .form-control[readonly], .mod-skin-dark:not(.mod-skin-light) .form-control:disabled, .mod-skin-dark:not(.mod-skin-light) .custom-file-label[readonly], .mod-skin-dark:not(.mod-skin-light) .custom-file-label:disabled { background-color: #3f4246; - border-color: rgba(132, 132, 132, 0.35); } + border-color: rgba(132, 132, 132, 0.35); + } + .mod-skin-dark:not(.mod-skin-light) .input-group:not(.has-length) .input-group-text { color: #838386; background-color: #37393e; - border: 1px solid #232528; } + border: 1px solid #232528; + } + .mod-skin-dark:not(.mod-skin-light) .custom-control-label::before { background-color: rgba(136, 106, 181, 0.1); background-color: rgba(var(--theme-rgb-primary), 0.2); - border-color: #37393e; } + border-color: #37393e; + } + .mod-skin-dark:not(.mod-skin-light) .custom-control-input:checked ~ .custom-control-label::before { background-color: rgba(136, 106, 181, 0.8); background-color: rgba(var(--theme-rgb-primary), 0.8); border-color: #886ab5; - border-color: rgba(var(--theme-rgb-primary), 1); } + border-color: rgba(var(--theme-rgb-primary), 1); + } + .mod-skin-dark:not(.mod-skin-light) .custom-control-input[disabled] ~ .custom-control-label::before, .mod-skin-dark:not(.mod-skin-light) .custom-control-input:disabled ~ .custom-control-label::before { - background-color: #565656; } + background-color: #565656; + } + .mod-skin-dark:not(.mod-skin-light) .custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before, .mod-skin-dark:not(.mod-skin-light) .custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before, .mod-skin-dark:not(.mod-skin-light) .custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before { background-color: #565656; - background-color: rgba(var(--theme-rgb-primary), 0.35); } + background-color: rgba(var(--theme-rgb-primary), 0.35); + } + .mod-skin-dark:not(.mod-skin-light) .row-grid > .col:before, .mod-skin-dark:not(.mod-skin-light) .row-grid > [class^="col-"]:before, .mod-skin-dark:not(.mod-skin-light) .row-grid > [class*=" col-"]:before, @@ -668,7 +1033,9 @@ body:not(.mod-skin-light):not(.mod-skin-dark) #skin-default:before { .mod-skin-dark:not(.mod-skin-light) .row-grid > [class*=" col "]:before, .mod-skin-dark:not(.mod-skin-light) .row-grid > [class$=" col"]:before, .mod-skin-dark:not(.mod-skin-light) .row-grid > [class="col"]:before { - border-top-color: rgba(0, 0, 0, 0.15); } + border-top-color: rgba(0, 0, 0, 0.15); + } + .mod-skin-dark:not(.mod-skin-light) .row-grid > .col:after, .mod-skin-dark:not(.mod-skin-light) .row-grid > [class^="col-"]:after, .mod-skin-dark:not(.mod-skin-light) .row-grid > [class*=" col-"]:after, @@ -676,438 +1043,744 @@ body:not(.mod-skin-light):not(.mod-skin-dark) #skin-default:before { .mod-skin-dark:not(.mod-skin-light) .row-grid > [class*=" col "]:after, .mod-skin-dark:not(.mod-skin-light) .row-grid > [class$=" col"]:after, .mod-skin-dark:not(.mod-skin-light) .row-grid > [class="col"]:after { - border-left-color: rgba(0, 0, 0, 0.15); } + border-left-color: rgba(0, 0, 0, 0.15); + } + .mod-skin-dark:not(.mod-skin-light) .close { color: #fff; - text-shadow: 0 1px 0 #000; } + text-shadow: 0 1px 0 #000; + } + .mod-skin-dark:not(.mod-skin-light) .state-selected { background: rgba(33, 150, 243, 0.15) !important; - background: rgba(var(--theme-rgb-info), 0.15) !important; } + background: rgba(var(--theme-rgb-info), 0.15) !important; + } + .mod-skin-dark:not(.mod-skin-light) .notes { background: rgba(255, 194, 65, 0.15); - background: rgba(var(--theme-rgb-warning), 0.15); } + background: rgba(var(--theme-rgb-warning), 0.15); + } + .mod-skin-dark:not(.mod-skin-light) pre { - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark:not(.mod-skin-light) .status:before { - border-color: rgba(0, 0, 0, 0.5); } + border-color: rgba(0, 0, 0, 0.5); + } + .mod-skin-dark:not(.mod-skin-light) .progress { - background-color: rgba(0, 0, 0, 0.15); } + background-color: rgba(0, 0, 0, 0.15); + } + .mod-skin-dark:not(.mod-skin-light) hr { - border-bottom-color: rgba(var(--theme-rgb-fusion), 0.85); } + border-bottom-color: rgba(var(--theme-rgb-fusion), 0.85); + } + .mod-skin-dark:not(.mod-skin-light) code { background: rgba(0, 0, 0, 0.3); - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark:not(.mod-skin-light) .list-group-item { - background: transparent; } + background: transparent; + } + .mod-skin-dark:not(.mod-skin-light) .jumbotron { - background-color: rgba(0, 0, 0, 0.2); } + background-color: rgba(0, 0, 0, 0.2); + } + .mod-skin-dark:not(.mod-skin-light).mod-nav-link:not(.nav-function-top):not(.nav-function-minify):not(.mod-hide-nav-icons) ul.nav-menu:not(.nav-menu-compact) > li > ul:before { - border-left: 1px dashed rgba(255, 255, 255, 0.1); } + border-left: 1px dashed rgba(255, 255, 255, 0.1); + } + .mod-skin-dark:not(.mod-skin-light) :not(.modal-alert) .modal-dialog:not(.modal-transparent) .modal-content { -webkit-box-shadow: 0 0 15px 1px rgba(0, 0, 0, 0.25); - box-shadow: 0 0 15px 1px rgba(0, 0, 0, 0.25); + box-shadow: 0 0 15px 1px rgba(0, 0, 0, 0.25); background-color: #383b40; - color: #a3acb5; } + color: #a3acb5; + } + .mod-skin-dark:not(.mod-skin-light) .swal2-popup { -webkit-box-shadow: 0 0 15px 1px rgba(0, 0, 0, 0.25); - box-shadow: 0 0 15px 1px rgba(0, 0, 0, 0.25); + box-shadow: 0 0 15px 1px rgba(0, 0, 0, 0.25); background-color: #383b40; - color: #a3acb5; } + color: #a3acb5; + } + .mod-skin-dark:not(.mod-skin-light) .swal2-title { - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark:not(.mod-skin-light) .modal-transparent .modal-content { background: rgba(0, 0, 0, 0.75); -webkit-box-shadow: none; - box-shadow: none; } + box-shadow: none; + } + .mod-skin-dark:not(.mod-skin-light) .modal-title { - color: #a5abb1; } + color: #a5abb1; + } + .mod-skin-dark:not(.mod-skin-light) .nav-filter input[type="text"] { background: #2d2e32; - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark:not(.mod-skin-light) .nav-filter input[type="text"]:focus { border-color: rgba(255, 255, 255, 0.5); - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark:not(.mod-skin-light) .nav-filter input[type="text"]:not(:focus) { - border-color: rgba(255, 255, 255, 0.1); } + border-color: rgba(255, 255, 255, 0.1); + } + .mod-skin-dark:not(.mod-skin-light) .info-card { color: #a5abb1; /*img.cover { opacity: 0.6; - }*/ } + }*/ + } + .mod-skin-dark:not(.mod-skin-light) .info-card .text-white { - text-shadow: none; } + text-shadow: none; + } + .mod-skin-dark:not(.mod-skin-light) .info-card .info-card-text > span { color: #fafafa; - text-shadow: none; } + text-shadow: none; + } + .mod-skin-dark:not(.mod-skin-light).nav-function-top .page-sidebar .primary-nav .nav-menu > li ul { - background: #212225; } + background: #212225; + } + .mod-skin-dark:not(.mod-skin-light).nav-function-top .page-logo { - border-bottom: 1px solid #2d2d2d; } + border-bottom: 1px solid #2d2d2d; + } + .mod-skin-dark:not(.mod-skin-light).nav-function-top .page-sidebar .primary-nav .nav-menu > li > ul:before { - color: #212225; } + color: #212225; + } + .mod-skin-dark:not(.mod-skin-light).nav-function-top .page-sidebar .primary-nav .nav-menu > li a { color: rgba(255, 255, 255, 0.8); - color: var(--theme-primary-200); } + color: var(--theme-primary-200); + } + .mod-skin-dark:not(.mod-skin-light) .nav-menu li > ul li.active > a { color: rgba(255, 255, 255, 0.8); - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark:not(.mod-skin-light) .nav-menu li a { color: rgba(255, 255, 255, 0.8); - color: #a5abb1; } + color: #a5abb1; + } + .mod-skin-dark:not(.mod-skin-light) .nav-menu li a:focus { color: rgba(255, 255, 255, 0.8); - color: #a5abb1; } + color: #a5abb1; + } + .mod-skin-dark:not(.mod-skin-light).nav-function-top .page-sidebar .primary-nav .nav-menu > li a { color: rgba(255, 255, 255, 0.8); - color: #a5abb1; } + color: #a5abb1; + } + .mod-skin-dark:not(.mod-skin-light) .nav-menu li { /* > ul { background-color: rgba(255, 255, 255, 0.03); - }*/ } + }*/ + } + .mod-skin-dark:not(.mod-skin-light) .nav-menu li.active > a { color: rgba(255, 255, 255, 0.8); color: #ffffff; font-weight: 500; - background-color: rgba(0, 0, 0, 0.1); } + background-color: rgba(0, 0, 0, 0.1); + } + .mod-skin-dark:not(.mod-skin-light) .nav-menu li a > [class*='fa-'], .mod-skin-dark:not(.mod-skin-light) .nav-menu li a > .ni { - color: var(--theme-primary-300); } + color: var(--theme-primary-300); + } + .mod-skin-dark:not(.mod-skin-light) .nav-menu li > ul li a:hover { - color: var(--theme-primary-100); } + color: var(--theme-primary-100); + } + .mod-skin-dark:not(.mod-skin-light) .nav-menu .nav-title { color: rgba(255, 255, 255, 0.6); - color: var(--theme-primary-50); } + color: var(--theme-primary-50); + } + .mod-skin-dark:not(.mod-skin-light) .navbar-light .navbar-brand { - color: rgba(255, 255, 255, 0.9); } + color: rgba(255, 255, 255, 0.9); + } + .mod-skin-dark:not(.mod-skin-light) .navbar-light .navbar-nav .show > .nav-link, .mod-skin-dark:not(.mod-skin-light) .navbar-light .navbar-nav .active > .nav-link { - color: rgba(255, 255, 255, 0.9); } + color: rgba(255, 255, 255, 0.9); + } + .mod-skin-dark:not(.mod-skin-light) .navbar-light .navbar-nav .nav-link { - color: rgba(255, 255, 255, 0.5); } + color: rgba(255, 255, 255, 0.5); + } + .mod-skin-dark:not(.mod-skin-light) .navbar-light .navbar-nav .nav-link.show, .mod-skin-dark:not(.mod-skin-light) .navbar-light .navbar-nav .nav-link.active { - color: rgba(255, 255, 255, 0.9); } + color: rgba(255, 255, 255, 0.9); + } + .mod-skin-dark:not(.mod-skin-light) .navbar-light .navbar-nav .nav-link:hover, .mod-skin-dark:not(.mod-skin-light) .navbar-light .navbar-nav .nav-link:focus { - color: rgba(255, 255, 255, 0.7); } + color: rgba(255, 255, 255, 0.7); + } + .mod-skin-dark:not(.mod-skin-light) .navbar-light .navbar-text { - color: rgba(255, 255, 255, 0.5); } + color: rgba(255, 255, 255, 0.5); + } + .mod-skin-dark:not(.mod-skin-light) .nav-tabs .nav-item .nav-link.active:not(:hover), .mod-skin-dark:not(.mod-skin-light) .nav-tabs-clean .nav-item .nav-link:hover { background: transparent; - color: #ffffff !important; } + color: #ffffff !important; + } + .mod-skin-dark:not(.mod-skin-light) .nav-tabs .nav-link.active, .mod-skin-dark:not(.mod-skin-light) .nav-tabs .nav-item.show .nav-link { - background: transparent; } + background: transparent; + } + .mod-skin-dark:not(.mod-skin-light) .nav-tabs:not(.nav-tabs-clean) .nav-link.active, .mod-skin-dark:not(.mod-skin-light) .nav-tabs:not(.nav-tabs-clean) .nav-item.show .nav-link { - border-color: rgba(255, 255, 255, 0.15) rgba(255, 255, 255, 0.15) #25272b; } + border-color: rgba(255, 255, 255, 0.15) rgba(255, 255, 255, 0.15) #25272b; + } + .mod-skin-dark:not(.mod-skin-light) .nav-tabs { - border-bottom-color: rgba(255, 255, 255, 0.15); } - .mod-skin-dark:not(.mod-skin-light) .nav-tabs .nav-link:not(.active):hover, - .mod-skin-dark:not(.mod-skin-light) .nav-tabs .nav-link:not(.active):focus { - border-color: rgba(255, 255, 255, 0.07) rgba(255, 255, 255, 0.07) transparent; } + border-bottom-color: rgba(255, 255, 255, 0.15); + } + + .mod-skin-dark:not(.mod-skin-light) .nav-tabs .nav-link:not(.active):hover, + .mod-skin-dark:not(.mod-skin-light) .nav-tabs .nav-link:not(.active):focus { + border-color: rgba(255, 255, 255, 0.07) rgba(255, 255, 255, 0.07) transparent; + } + .mod-skin-dark:not(.mod-skin-light) .tab-content.border { - border-color: rgba(255, 255, 255, 0.15) !important; } + border-color: rgba(255, 255, 255, 0.15) !important; + } + .mod-skin-dark:not(.mod-skin-light) .notification .msg-a, .mod-skin-dark:not(.mod-skin-light) .notification .msg-b, .mod-skin-dark:not(.mod-skin-light) .notification .name { - color: #a5abb1 !important; } + color: #a5abb1 !important; + } + .mod-skin-dark:not(.mod-skin-light) .notification li { - background-color: #37393e; } + background-color: #37393e; + } + .mod-skin-dark:not(.mod-skin-light) .notification li.unread > :first-child { - background-color: rgba(var(--theme-rgb-primary), 0.15); } + background-color: rgba(var(--theme-rgb-primary), 0.15); + } + .mod-skin-dark:not(.mod-skin-light) .notification.notification-layout-2 li, .mod-skin-dark:not(.mod-skin-light) .notification.notification-layout-2 li.unread { - background: #37393e; } + background: #37393e; + } + .mod-skin-dark:not(.mod-skin-light) body, .mod-skin-dark:not(.mod-skin-light) .page-content { - color: #a5abb1; } + color: #a5abb1; + } + .mod-skin-dark:not(.mod-skin-light) .header-icon:not(.btn) > [class*='fa-']:first-child, .mod-skin-dark:not(.mod-skin-light) .header-icon:not(.btn) > .ni:first-child { - color: #888888; } + color: #888888; + } + .mod-skin-dark:not(.mod-skin-light) .header-icon:not(.btn) > [class*='fa-']:first-child:hover, .mod-skin-dark:not(.mod-skin-light) .header-icon:not(.btn) > .ni:first-child:hover { - color: #a2a2a2; } + color: #a2a2a2; + } + .mod-skin-dark:not(.mod-skin-light) .header-icon:not(.btn)[data-toggle="dropdown"][data-toggle="dropdown"]:after { background: rgba(0, 0, 0, 0.75); - background: rgba(var(--theme-rgb-primary), 0.75); } + background: rgba(var(--theme-rgb-primary), 0.75); + } + .mod-skin-dark:not(.mod-skin-light) .header-icon:not(.btn)[data-toggle="dropdown"][aria-expanded="true"] > [class*='fa-']:first-child, .mod-skin-dark:not(.mod-skin-light) .header-icon:not(.btn)[data-toggle="dropdown"][aria-expanded="true"] > .ni:first-child { - color: #ffffff !important; } + color: #ffffff !important; + } + .mod-skin-dark:not(.mod-skin-light) .badge.badge-icon { -webkit-box-shadow: 0 0 0 1px #212225; - box-shadow: 0 0 0 1px #212225; } + box-shadow: 0 0 0 1px #212225; + } + .mod-skin-dark:not(.mod-skin-light) .page-logo, .mod-skin-dark:not(.mod-skin-light) .page-sidebar, .mod-skin-dark:not(.mod-skin-light) .nav-footer { - background-image: none; } + background-image: none; + } + .mod-skin-dark:not(.mod-skin-light) .page-logo { - border-bottom: 1px solid #131313; } + border-bottom: 1px solid #131313; + } + .mod-skin-dark:not(.mod-skin-light) .page-header, .mod-skin-dark:not(.mod-skin-light) .page-footer { border-bottom: 1px solid #2d2d2d; -webkit-box-shadow: none; - box-shadow: none; } + box-shadow: none; + } + .mod-skin-dark:not(.mod-skin-light) .page-header, .mod-skin-dark:not(.mod-skin-light) .page-content-wrapper, .mod-skin-dark:not(.mod-skin-light) .page-footer { - background-color: #37393e; } + background-color: #37393e; + } + .mod-skin-dark:not(.mod-skin-light) .page-footer { border-top: 1px solid #2d2d2d; - border-bottom: none; } + border-bottom: none; + } + .mod-skin-dark:not(.mod-skin-light) .page-logo-text { - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark:not(.mod-skin-light) .page-logo, .mod-skin-dark:not(.mod-skin-light) .page-sidebar, .mod-skin-dark:not(.mod-skin-light) .nav-footer { - background: #212225; } + background: #212225; + } + .mod-skin-dark:not(.mod-skin-light) .page-sidebar { -webkit-box-shadow: none; - box-shadow: none; } + box-shadow: none; + } + .mod-skin-dark:not(.mod-skin-light) .page-breadcrumb .breadcrumb-item.active { - color: #bfbfbf; } + color: #bfbfbf; + } + .mod-skin-dark:not(.mod-skin-light) .page-breadcrumb { - text-shadow: #000000 0 1px; } + text-shadow: #000000 0 1px; + } + .mod-skin-dark:not(.mod-skin-light) .page-error { - color: #ffffff !important; } + color: #ffffff !important; + } + .mod-skin-dark:not(.mod-skin-light) .page-error small { - color: #c1c1c1; } + color: #c1c1c1; + } + .mod-skin-dark:not(.mod-skin-light) .subheader-title { color: #a5abb1; - text-shadow: #505050 0 1px; } + text-shadow: #505050 0 1px; + } + .mod-skin-dark:not(.mod-skin-light) .subheader-title small { - color: #8a9299; } + color: #8a9299; + } + .mod-skin-dark:not(.mod-skin-light) .progress-bar { - background-color: var(--theme-primary-500); } + background-color: var(--theme-primary-500); + } + .mod-skin-dark:not(.mod-skin-light) .panel .card { - background-color: #37383e; } + background-color: #37383e; + } + .mod-skin-dark:not(.mod-skin-light) .panel, .mod-skin-dark:not(.mod-skin-light) .card { - background-color: #26272b; } + background-color: #26272b; + } + .mod-skin-dark:not(.mod-skin-light) .panel { - border-bottom-color: rgba(0, 0, 0, 0.3); } + border-bottom-color: rgba(0, 0, 0, 0.3); + } + .mod-skin-dark:not(.mod-skin-light) .panel-hdr, .mod-skin-dark:not(.mod-skin-light) .card-header { background: rgba(0, 0, 0, 0.03); - background: rgba(var(--theme-rgb-fusion), 0.5); } + background: rgba(var(--theme-rgb-fusion), 0.5); + } + .mod-skin-dark:not(.mod-skin-light) .panel-hdr h2, .mod-skin-dark:not(.mod-skin-light) .card-header h2 { - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark:not(.mod-skin-light) .panel-toolbar .btn-panel { - border: 1px solid #333; } + border: 1px solid #333; + } + .mod-skin-dark:not(.mod-skin-light) .panel-hdr, .mod-skin-dark:not(.mod-skin-light) .accordion:not(.accordion-clean) .card .card-header { - background: #303136; } + background: #303136; + } + .mod-skin-dark:not(.mod-skin-light) .panel-tag { background: rgba(29, 201, 183, 0.15); background: rgba(var(--theme-rgb-success), 0.15); - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark:not(.mod-skin-light) .panel-placeholder { background-color: var(--theme-primary); - opacity: 0.2; } + opacity: 0.2; + } + .mod-skin-dark:not(.mod-skin-light) .panel-placeholder:before { - background: var(--theme-primary-900); } + background: var(--theme-primary-900); + } + .mod-skin-dark:not(.mod-skin-light) .table, .mod-skin-dark:not(.mod-skin-light) .table-bordered th, .mod-skin-dark:not(.mod-skin-light) .table-bordered td, .mod-skin-dark:not(.mod-skin-light) .table thead th, .mod-skin-dark:not(.mod-skin-light) .table th, .mod-skin-dark:not(.mod-skin-light) .table td { - border-color: rgba(255, 255, 255, 0.25); } + border-color: rgba(255, 255, 255, 0.25); + } + .mod-skin-dark:not(.mod-skin-light) .table { - color: #c0c5c9; } + color: #c0c5c9; + } + .mod-skin-dark:not(.mod-skin-light) .table.table-dark { color: #ffffff; - background-color: #202225; } + background-color: #202225; + } + .mod-skin-dark:not(.mod-skin-light) .table.table-striped tbody tr:nth-of-type(odd) { - background-color: rgba(0, 0, 0, 0.15); } + background-color: rgba(0, 0, 0, 0.15); + } + .mod-skin-dark:not(.mod-skin-light) .table-hover tbody tr:hover { background-color: rgba(136, 106, 181, 0.15) !important; background-color: rgba(var(--theme-rgb-primary), 0.15) !important; - color: inherit; } + color: inherit; + } + .mod-skin-dark:not(.mod-skin-light) .thead-themed { background-color: rgba(var(--theme-rgb-primary), 0.1); background-image: -webkit-gradient(linear, left bottom, left top, from(rgba(var(--theme-rgb-primary), 0.15)), to(rgba(var(--theme-rgb-primary), 0.55))); - background-image: linear-gradient(to top, rgba(var(--theme-rgb-primary), 0.15), rgba(var(--theme-rgb-primary), 0.55)); } + background-image: linear-gradient(to top, rgba(var(--theme-rgb-primary), 0.15), rgba(var(--theme-rgb-primary), 0.55)); + } + .mod-skin-dark:not(.mod-skin-light) .table-active, .mod-skin-dark:not(.mod-skin-light) .table-active > th, .mod-skin-dark:not(.mod-skin-light) .table-active > td { - background-color: transparent; } + background-color: transparent; + } + .mod-skin-dark:not(.mod-skin-light) .toast:not([class*="toast-"]) { - background-color: rgba(31, 31, 31, 0.85); } + background-color: rgba(31, 31, 31, 0.85); + } + .mod-skin-dark:not(.mod-skin-light) .toast:not([class*="toast-"]) .toast-header { color: #ffffff; - background-color: rgba(35, 35, 35, 0.85); } + background-color: rgba(35, 35, 35, 0.85); + } + .mod-skin-dark:not(.mod-skin-light) .bs-tooltip-top .arrow::before, .mod-skin-dark:not(.mod-skin-light) .bs-tooltip-auto[x-placement^="top"] .arrow::before { - border-top-color: rgba(0, 0, 0, 0.9); } + border-top-color: rgba(0, 0, 0, 0.9); + } + .mod-skin-dark:not(.mod-skin-light) .bs-tooltip-right .arrow::before, .mod-skin-dark:not(.mod-skin-light) .bs-tooltip-auto[x-placement^="right"] .arrow::before { - border-right-color: rgba(0, 0, 0, 0.9); } + border-right-color: rgba(0, 0, 0, 0.9); + } + .mod-skin-dark:not(.mod-skin-light) .bs-tooltip-left .arrow::before, .mod-skin-dark:not(.mod-skin-light) .bs-tooltip-auto[x-placement^="left"] .arrow::before { - border-left-color: rgba(0, 0, 0, 0.9); } + border-left-color: rgba(0, 0, 0, 0.9); + } + .mod-skin-dark:not(.mod-skin-light) .bs-tooltip-bottom .arrow::before, .mod-skin-dark:not(.mod-skin-light) .bs-tooltip-auto[x-placement^="bottom"] .arrow::before { - border-bottom-color: rgba(0, 0, 0, 0.9); } + border-bottom-color: rgba(0, 0, 0, 0.9); + } + .mod-skin-dark:not(.mod-skin-light) .tooltip-inner { - background-color: rgba(0, 0, 0, 0.9); } + background-color: rgba(0, 0, 0, 0.9); + } + .mod-skin-dark:not(.mod-skin-light) .popover:not([class*="bg-"]) { - border: 3px solid rgba(255, 255, 255, 0.4); } + border: 3px solid rgba(255, 255, 255, 0.4); + } + .mod-skin-dark:not(.mod-skin-light) .fc-head-container thead tr { background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #35393e), to(#565a61)); - background-image: linear-gradient(to top, #35393e 0, #565a61 100%); } + background-image: linear-gradient(to top, #35393e 0, #565a61 100%); + } + .mod-skin-dark:not(.mod-skin-light) .dt-autofill-list { - background-color: #383b40; } + background-color: #383b40; + } + .mod-skin-dark:not(.mod-skin-light) div.dt-autofill-list ul li:hover { - background-color: #2c2e32; } + background-color: #2c2e32; + } + .mod-skin-dark:not(.mod-skin-light) table.DTFC_Cloned tr { - background: transparent; } + background: transparent; + } + .mod-skin-dark:not(.mod-skin-light) div.DTFC_LeftHeadWrapper table, .mod-skin-dark:not(.mod-skin-light) table.dataTable.table-striped.DTFC_Cloned tbody, .mod-skin-dark:not(.mod-skin-light) div.DTFC_RightHeadWrapper table { - background: #25272b; } + background: #25272b; + } + .mod-skin-dark:not(.mod-skin-light) table.dataTable > tbody > tr.child ul.dtr-details > li { - border-bottom: 1px solid #373a40; } + border-bottom: 1px solid #373a40; + } + .mod-skin-dark:not(.mod-skin-light) .sorting_asc, .mod-skin-dark:not(.mod-skin-light) .sorting_desc, .mod-skin-dark:not(.mod-skin-light) .even .sorting_1 { background-color: rgba(136, 106, 181, 0.1); - background-color: rgba(var(--theme-rgb-primary), 0.1); } + background-color: rgba(var(--theme-rgb-primary), 0.1); + } + .mod-skin-dark:not(.mod-skin-light) .odd .sorting_1 { background-color: rgba(136, 106, 181, 0.2); - background-color: rgba(var(--theme-rgb-primary), 0.2); } + background-color: rgba(var(--theme-rgb-primary), 0.2); + } + .mod-skin-dark:not(.mod-skin-light) .dataTables_filter:not(.has-length) .input-group-text { color: #a7a7a7; background-color: #474950; - border-color: #262627; } + border-color: #262627; + } + .mod-skin-dark:not(.mod-skin-light) table.dataTable:not(.table-dark) tr.dtrg-group td { - background: rgba(0, 0, 0, 0.13); } + background: rgba(0, 0, 0, 0.13); + } + .mod-skin-dark:not(.mod-skin-light) div.DTS div.dataTables_scrollBody table { - background-color: #3a3c45; } + background-color: #3a3c45; + } + .mod-skin-dark:not(.mod-skin-light) .jqvmap-zoomin, .mod-skin-dark:not(.mod-skin-light) .jqvmap-zoomout { background-image: -webkit-gradient(linear, left bottom, left top, from(#2f323b), to(#2a2d35)); background-image: linear-gradient(to top, #2f323b, #2a2d35); - color: #c3c3c3; } + color: #c3c3c3; + } + .mod-skin-dark:not(.mod-skin-light) .jqvmap-bg-ocean { - background-color: #374344 !important; } + background-color: #374344 !important; + } + .mod-skin-dark:not(.mod-skin-light) .irs-line { background: #3c3e44; - border-color: #28292d; } + border-color: #28292d; + } + .mod-skin-dark:not(.mod-skin-light) .fc a { - color: #ffffff !important; } + color: #ffffff !important; + } + .mod-skin-dark:not(.mod-skin-light) .dropzone, .mod-skin-dark:not(.mod-skin-light) .fc td.fc-other-month { background-color: rgba(136, 106, 181, 0.15); - background-color: rgba(var(--theme-rgb-primary), 0.15); } + background-color: rgba(var(--theme-rgb-primary), 0.15); + } + .mod-skin-dark:not(.mod-skin-light) .daterangepicker, .mod-skin-dark:not(.mod-skin-light) .daterangepicker .calendar-table { - background: #383b40; } - .mod-skin-dark:not(.mod-skin-light) .daterangepicker td.off, - .mod-skin-dark:not(.mod-skin-light) .daterangepicker td.off.in-range, - .mod-skin-dark:not(.mod-skin-light) .daterangepicker td.off.start-date, - .mod-skin-dark:not(.mod-skin-light) .daterangepicker td.off.end-date { - background: transparent; } - .mod-skin-dark:not(.mod-skin-light) .daterangepicker .calendar-table { - border-color: #383b40; } + background: #383b40; + } + + .mod-skin-dark:not(.mod-skin-light) .daterangepicker td.off, + .mod-skin-dark:not(.mod-skin-light) .daterangepicker td.off.in-range, + .mod-skin-dark:not(.mod-skin-light) .daterangepicker td.off.start-date, + .mod-skin-dark:not(.mod-skin-light) .daterangepicker td.off.end-date { + background: transparent; + } + + .mod-skin-dark:not(.mod-skin-light) .daterangepicker .calendar-table { + border-color: #383b40; + } + .mod-skin-dark:not(.mod-skin-light) .datepicker-dropdown.datepicker-orient-top:after { - border-top-color: #383b40; } + border-top-color: #383b40; + } + .mod-skin-dark:not(.mod-skin-light) .datepicker-dropdown:after { - border-bottom-color: #383b40; } + border-bottom-color: #383b40; + } + .mod-skin-dark:not(.mod-skin-light) .note-toolbar .note-btn { - background: #25272b; } + background: #25272b; + } + .mod-skin-dark:not(.mod-skin-light) .note-toolbar .note-btn:hover, .mod-skin-dark:not(.mod-skin-light) .note-toolbar .note-btn:focus, .mod-skin-dark:not(.mod-skin-light) .note-toolbar .note-btn:active { background: #3d4046; - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark:not(.mod-skin-light) .note-editor.note-frame .note-editing-area .note-editable, .mod-skin-dark:not(.mod-skin-light) .note-editor.note-airframe .note-editing-area .note-editable { background-color: rgba(0, 0, 0, 0.15); - color: #fff; } + color: #fff; + } + .mod-skin-dark:not(.mod-skin-light) .note-editor.note-frame .note-statusbar, .mod-skin-dark:not(.mod-skin-light) .note-editor.note-airframe .note-statusbar { border-top: 1px solid #25272b; - background-color: #434548; } + background-color: #434548; + } + .mod-skin-dark:not(.mod-skin-light) .prettyprint { background: #22221b; font-family: Menlo,Bitstream Vera Sans Mono,DejaVu Sans Mono,Monaco,Consolas,monospace; - border: 0 !important; } + border: 0 !important; + } + .mod-skin-dark:not(.mod-skin-light) .pln { - color: #f4f3ec; } + color: #f4f3ec; + } + .mod-skin-dark:not(.mod-skin-light) ol.linenums { margin-top: 0; margin-bottom: 0; - color: #6c6b5a; } + color: #6c6b5a; + } + .mod-skin-dark:not(.mod-skin-light) li.L0, .mod-skin-dark:not(.mod-skin-light) li.L1, .mod-skin-dark:not(.mod-skin-light) li.L2, .mod-skin-dark:not(.mod-skin-light) li.L3, .mod-skin-dark:not(.mod-skin-light) li.L4, .mod-skin-dark:not(.mod-skin-light) li.L5, .mod-skin-dark:not(.mod-skin-light) li.L6, .mod-skin-dark:not(.mod-skin-light) li.L7, .mod-skin-dark:not(.mod-skin-light) li.L8, .mod-skin-dark:not(.mod-skin-light) li.L9 { padding-left: 1em; background-color: #22221b; - list-style-type: decimal; } - @media screen { - .mod-skin-dark:not(.mod-skin-light) .str { - color: #7d9726; } - .mod-skin-dark:not(.mod-skin-light) .kwd { - color: #5f9182; } - .mod-skin-dark:not(.mod-skin-light) .com { - color: #6c6b5a; } - .mod-skin-dark:not(.mod-skin-light) .typ { - color: #36a166; } - .mod-skin-dark:not(.mod-skin-light) .lit { - color: #ae7313; } - .mod-skin-dark:not(.mod-skin-light) .pun { - color: #f4f3ec; } - .mod-skin-dark:not(.mod-skin-light) .opn { - color: #f4f3ec; } - .mod-skin-dark:not(.mod-skin-light) .clo { - color: #f4f3ec; } - .mod-skin-dark:not(.mod-skin-light) .tag { - color: #ba6236; } - .mod-skin-dark:not(.mod-skin-light) .atn { - color: #ae7313; } - .mod-skin-dark:not(.mod-skin-light) .atv { - color: #5b9d48; } - .mod-skin-dark:not(.mod-skin-light) .dec { - color: #ae7313; } - .mod-skin-dark:not(.mod-skin-light) .var { - color: #ba6236; } - .mod-skin-dark:not(.mod-skin-light) .fun { - color: #36a166; } } - .mod-skin-dark:not(.mod-skin-light) .select2-container--default .select2-selection--single, - .mod-skin-dark:not(.mod-skin-light) .select2-container--default.select2-container--disabled .select2-selection--single, - .mod-skin-dark:not(.mod-skin-light) .select2-container--default .select2-selection--multiple, - .mod-skin-dark:not(.mod-skin-light) .select2-container--default.select2-container--disabled .select2-selection--multiple, - .mod-skin-dark:not(.mod-skin-light) .select2-container--default .select2-search--dropdown .select2-search__field { - color: #ffffff; - background-color: rgba(0, 0, 0, 0.15); - border-color: rgba(0, 0, 0, 0.35); } + list-style-type: decimal; + } + +@media screen { + .mod-skin-dark:not(.mod-skin-light) .str { + color: #7d9726; + } + + .mod-skin-dark:not(.mod-skin-light) .kwd { + color: #5f9182; + } + + .mod-skin-dark:not(.mod-skin-light) .com { + color: #6c6b5a; + } + + .mod-skin-dark:not(.mod-skin-light) .typ { + color: #36a166; + } + + .mod-skin-dark:not(.mod-skin-light) .lit { + color: #ae7313; + } + + .mod-skin-dark:not(.mod-skin-light) .pun { + color: #f4f3ec; + } + + .mod-skin-dark:not(.mod-skin-light) .opn { + color: #f4f3ec; + } + + .mod-skin-dark:not(.mod-skin-light) .clo { + color: #f4f3ec; + } + + .mod-skin-dark:not(.mod-skin-light) .tag { + color: #ba6236; + } + + .mod-skin-dark:not(.mod-skin-light) .atn { + color: #ae7313; + } + + .mod-skin-dark:not(.mod-skin-light) .atv { + color: #5b9d48; + } + + .mod-skin-dark:not(.mod-skin-light) .dec { + color: #ae7313; + } + + .mod-skin-dark:not(.mod-skin-light) .var { + color: #ba6236; + } + + .mod-skin-dark:not(.mod-skin-light) .fun { + color: #36a166; + } +} + +.mod-skin-dark:not(.mod-skin-light) .select2-container--default .select2-selection--single, +.mod-skin-dark:not(.mod-skin-light) .select2-container--default.select2-container--disabled .select2-selection--single, +.mod-skin-dark:not(.mod-skin-light) .select2-container--default .select2-selection--multiple, +.mod-skin-dark:not(.mod-skin-light) .select2-container--default.select2-container--disabled .select2-selection--multiple, +.mod-skin-dark:not(.mod-skin-light) .select2-container--default .select2-search--dropdown .select2-search__field { + color: #ffffff; + background-color: rgba(0, 0, 0, 0.15); + border-color: rgba(0, 0, 0, 0.35); +} + .mod-skin-dark:not(.mod-skin-light) .select2-container--default .select2-selection--single .select2-selection__rendered { - color: #ffffff; } - .mod-skin-dark:not(.mod-skin-light) .select2-container--default.select2-container--open.select2-container--below .select2-selection--single, - .mod-skin-dark:not(.mod-skin-light) .select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple, - .mod-skin-dark:not(.mod-skin-light) .select2-container--default.select2-container--open.select2-container--above .select2-selection--single, - .mod-skin-dark:not(.mod-skin-light) .select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple, - .mod-skin-dark:not(.mod-skin-light) .select2-container--open .select2-dropdown--above, - .mod-skin-dark:not(.mod-skin-light) .select2-container--open .select2-dropdown--below { - background: #383b40; } - .mod-skin-dark:not(.mod-skin-light) .select2-container--disabled .select2-selection.select2-selection--single, - .mod-skin-dark:not(.mod-skin-light) .select2-container--disabled .select2-selection.select2-selection--multiple { - background-color: #3f4246; - border-color: rgba(132, 132, 132, 0.35); } + color: #ffffff; + } + +.mod-skin-dark:not(.mod-skin-light) .select2-container--default.select2-container--open.select2-container--below .select2-selection--single, +.mod-skin-dark:not(.mod-skin-light) .select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple, +.mod-skin-dark:not(.mod-skin-light) .select2-container--default.select2-container--open.select2-container--above .select2-selection--single, +.mod-skin-dark:not(.mod-skin-light) .select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple, +.mod-skin-dark:not(.mod-skin-light) .select2-container--open .select2-dropdown--above, +.mod-skin-dark:not(.mod-skin-light) .select2-container--open .select2-dropdown--below { + background: #383b40; +} + +.mod-skin-dark:not(.mod-skin-light) .select2-container--disabled .select2-selection.select2-selection--single, +.mod-skin-dark:not(.mod-skin-light) .select2-container--disabled .select2-selection.select2-selection--multiple { + background-color: #3f4246; + border-color: rgba(132, 132, 132, 0.35); +} @media (min-width: 992px) { .mod-skin-dark.nav-function-minify:not(.nav-function-top):not(.mod-nav-dark) .page-sidebar .primary-nav:hover .nav-menu > li:hover > a { background: inherit !important; - color: #d0d0d0 !important; } + color: #d0d0d0 !important; + } + .mod-skin-dark.nav-function-minify:not(.nav-function-top) .page-sidebar .primary-nav .nav-menu > li > a + ul { - background-color: #212225 !important; } + background-color: #212225 !important; + } + .mod-skin-dark.nav-function-minify:not(.nav-function-top) .page-sidebar .primary-nav .nav-menu > li > a + ul:before { - color: #212225 !important; } + color: #212225 !important; + } + .mod-skin-dark.nav-function-minify:not(.nav-function-top) .page-sidebar .primary-nav .nav-menu > li > a > .nav-link-text { - color: inherit !important; } + color: inherit !important; + } + .mod-skin-dark.nav-function-top .page-header { - background: #212225; } + background: #212225; + } + .mod-skin-dark.nav-function-top .page-header .header-icon:not(.btn) > [class*='fa-']:first-child:hover, .mod-skin-dark.nav-function-top .page-header .header-icon:not(.btn) > .ni:first-child:hover { - color: #ffffff !important; } + color: #ffffff !important; + } + .mod-skin-dark.nav-function-top #search-field { - color: #ffffff; } + color: #ffffff; + } + .mod-skin-dark .subheader-title { - color: #ffffff !important; } } + color: #ffffff !important; + } +} /*# sourceMappingURL=skin-master.css.map */ diff --git a/FrontendWebApi/ApiControllers/DeviceManageController.cs b/FrontendWebApi/ApiControllers/DeviceManageController.cs index 228f11a..92b8af8 100644 --- a/FrontendWebApi/ApiControllers/DeviceManageController.cs +++ b/FrontendWebApi/ApiControllers/DeviceManageController.cs @@ -10,6 +10,7 @@ using Repository.FrontendRepository.Interface; using System; using System.Collections.Generic; using System.Collections.Specialized; +using System.Data.SqlTypes; using System.Diagnostics; using System.IO; using System.Linq; @@ -261,6 +262,9 @@ namespace FrontendWebApi.ApiControllers { ApiResult> apiResult = new ApiResult>(); + //是否顯示DeviceNode + string sqlStringqueryModuleLightNodeDisplay = $"SELECT system_value FROM variable WHERE system_type = 'module' AND system_key = 'displaynode'"; + string displayNode = await backendRepository.GetOneAsync(sqlStringqueryModuleLightNodeDisplay); if (string.IsNullOrEmpty(fd.sub_system_tag)) { apiResult.Code = "0001"; @@ -317,7 +321,7 @@ namespace FrontendWebApi.ApiControllers f.device_list = dl; } - + apiResult.Module = displayNode; apiResult.Data = fl; apiResult.Code = "0000"; } @@ -751,12 +755,30 @@ namespace FrontendWebApi.ApiControllers @device_name_tag = p.device_name_tag, @device_floor_tag = p.device_floor_tag }; - var d = await backendRepository.GetAllAsync($@"select device_guid,device_number,device_floor_tag,device_coordinate_3d,forge_dbid, full_name + var dl = await backendRepository.GetAllAsync($@"select device_guid,device_number,device_floor_tag,device_coordinate_3d,forge_dbid, full_name from device where deleted = 0 and device_area_tag = @device_area_tag and device_building_tag = @device_building_tag and device_system_tag = @device_system_tag and device_name_tag = @device_name_tag and device_floor_tag = ifnull(@device_floor_tag, device_floor_tag) ", param); - apiResult.Data = d; + foreach (var d in dl) + { + var sql_node = $@"SELECT + dn.device_node_guid, + dn.device_guid, + dn.full_name AS Device_node_full_name, + dn.device_node_coordinate, + dn.priority, + dn.forge_dbid + FROM device_node dn + WHERE dn.deleted = 0 AND dn.device_guid = @device_guid + ORDER BY dn.priority ASC"; + + d.Device_nodes = await backendRepository.GetAllAsync(sql_node, new { device_guid = d.device_guid }); + } + + + + apiResult.Data = dl; apiResult.Code = "0000"; } else diff --git a/FrontendWebApi/Models/Device.cs b/FrontendWebApi/Models/Device.cs index 158ad9e..88e0b3c 100644 --- a/FrontendWebApi/Models/Device.cs +++ b/FrontendWebApi/Models/Device.cs @@ -149,6 +149,7 @@ namespace FrontendWebApi.Models public string device_coordinate_3d { get; set; } public string full_name { get; set; } public int? forge_dbid { get; set; } + public List Device_nodes { get; set; } } public class DevNodeForCor diff --git a/FrontendWebApi/Models/Share.cs b/FrontendWebApi/Models/Share.cs index 0792bf0..7c0e4da 100644 --- a/FrontendWebApi/Models/Share.cs +++ b/FrontendWebApi/Models/Share.cs @@ -202,6 +202,7 @@ namespace FrontendWebApi.Models ErrorCode errorCode = new ErrorCode(); private string msg = string.Empty; public string Code { get; set; } + public string Module { get; set; } public string Msg { get