Commit 91b6be51382433fecbc6c5760e1c8fdd23eb9378
Merge branch 'feat/click-event-add-attribute-send' into 'main_dev'
feat: 事件下发新增属性下发 See merge request yunteng/thingskit-scada!182
Showing
21 changed files
with
728 additions
and
385 deletions
@@ -34,7 +34,7 @@ div td.mxWindowTitle { | @@ -34,7 +34,7 @@ div td.mxWindowTitle { | ||
34 | } | 34 | } |
35 | .geEditor input, .geEditor select, | 35 | .geEditor input, .geEditor select, |
36 | .geEditor textarea, .geEditor button { | 36 | .geEditor textarea, .geEditor button { |
37 | - font-size: inherit; | 37 | + font-size: inherit; |
38 | } | 38 | } |
39 | .geMenubarContainer, .geToolbarContainer, .geHsplit, | 39 | .geMenubarContainer, .geToolbarContainer, .geHsplit, |
40 | .geVsplit, .mxWindowTitle, .geSidebarContainer, | 40 | .geVsplit, .mxWindowTitle, .geSidebarContainer, |
@@ -84,7 +84,7 @@ html > body > div > div.geToolbarContainer.geSimpleMainMenu .geToolbarContainer{ | @@ -84,7 +84,7 @@ html > body > div > div.geToolbarContainer.geSimpleMainMenu .geToolbarContainer{ | ||
84 | cursor:default !important; | 84 | cursor:default !important; |
85 | } | 85 | } |
86 | .geBackgroundPage { | 86 | .geBackgroundPage { |
87 | - box-shadow:0px 0px 2px 1px #d1d1d1; | 87 | + box-shadow:0px 0px 2px 1px #d1d1d1; |
88 | } | 88 | } |
89 | .geSidebarContainer a, .geMenubarContainer a, .geToolbar a { | 89 | .geSidebarContainer a, .geMenubarContainer a, .geToolbar a { |
90 | color:#000000; | 90 | color:#000000; |
@@ -217,11 +217,11 @@ a.geStatus .geStatusMessage { | @@ -217,11 +217,11 @@ a.geStatus .geStatusMessage { | ||
217 | padding:4px 6px 4px 6px; | 217 | padding:4px 6px 4px 6px; |
218 | font-size:12px; | 218 | font-size:12px; |
219 | background: -webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%); | 219 | background: -webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%); |
220 | - background: -o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%); | ||
221 | - background: -webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc)); | ||
222 | - background: linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%); | ||
223 | - background-repeat: repeat-x; | ||
224 | - border:1px solid #b2dba1; | 220 | + background: -o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%); |
221 | + background: -webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc)); | ||
222 | + background: linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%); | ||
223 | + background-repeat: repeat-x; | ||
224 | + border:1px solid #b2dba1; | ||
225 | border-radius:3px; | 225 | border-radius:3px; |
226 | color:#3c763d !important; | 226 | color:#3c763d !important; |
227 | } | 227 | } |
@@ -237,15 +237,15 @@ a.geStatus .geStatusMessage { | @@ -237,15 +237,15 @@ a.geStatus .geStatusMessage { | ||
237 | -moz-box-shadow: 2px 2px 3px 0px #ddd; | 237 | -moz-box-shadow: 2px 2px 3px 0px #ddd; |
238 | box-shadow: 2px 2px 3px 0px #ddd; | 238 | box-shadow: 2px 2px 3px 0px #ddd; |
239 | } | 239 | } |
240 | -.geEditor input, .geEditor button, .geEditor select, .geColorBtn { | 240 | +.geEditor input, .geEditor button:not([class^="ant"]), .geEditor select, .geColorBtn { |
241 | border: 1px solid #d8d8d8; | 241 | border: 1px solid #d8d8d8; |
242 | border-radius: 4px; | 242 | border-radius: 4px; |
243 | } | 243 | } |
244 | -.geEditor button, .geEditor select, .geColorBtn { | 244 | +.geEditor button:not([class*="ant-"]), .geEditor select, .geColorBtn { |
245 | background:#eee; | 245 | background:#eee; |
246 | } | 246 | } |
247 | -.geEditor button:hover:not([disabled], .geBigButton, .geShareBtn), | ||
248 | -.geEditor select:hover:not([disabled]), .geColorBtn:hover:not([disabled]) { | 247 | +.geEditor button:hover:not([class*="ant-"], [disabled], .geBigButton, .geShareBtn), |
248 | +.geEditor select:hover:not([class*="ant-"], [disabled]), .geColorBtn:hover:not([disabled], [class*="ant-"]) { | ||
249 | background:#e5e5e5; | 249 | background:#e5e5e5; |
250 | } | 250 | } |
251 | .geColorDropper { | 251 | .geColorDropper { |
@@ -979,9 +979,9 @@ table.mxPopupMenu tr { | @@ -979,9 +979,9 @@ table.mxPopupMenu tr { | ||
979 | font-size:4pt; | 979 | font-size:4pt; |
980 | } | 980 | } |
981 | html td.mxWindowTitle { | 981 | html td.mxWindowTitle { |
982 | - color:rgb(112, 112, 112); | 982 | + color:rgb(112, 112, 112); |
983 | background:#f1f3f4; | 983 | background:#f1f3f4; |
984 | - padding:4px; | 984 | + padding:4px; |
985 | } | 985 | } |
986 | table.geProperties { | 986 | table.geProperties { |
987 | table-layout:fixed; | 987 | table-layout:fixed; |
@@ -996,46 +996,46 @@ table.geProperties tr td { | @@ -996,46 +996,46 @@ table.geProperties tr td { | ||
996 | border: 1px solid #4472C4; | 996 | border: 1px solid #4472C4; |
997 | } | 997 | } |
998 | .gePropHeader>.gePropHeaderCell { | 998 | .gePropHeader>.gePropHeaderCell { |
999 | - border-top: 0; | ||
1000 | - border-bottom: 0; | ||
1001 | - text-align: left; | 999 | + border-top: 0; |
1000 | + border-bottom: 0; | ||
1001 | + text-align: left; | ||
1002 | width: 50%; | 1002 | width: 50%; |
1003 | } | 1003 | } |
1004 | .gePropHeader>.gePropHeaderCell:first-child { | 1004 | .gePropHeader>.gePropHeaderCell:first-child { |
1005 | - border-left: none; | 1005 | + border-left: none; |
1006 | } | 1006 | } |
1007 | .gePropHeader>.gePropHeaderCell:last-child { | 1007 | .gePropHeader>.gePropHeaderCell:last-child { |
1008 | - border-right: none; | 1008 | + border-right: none; |
1009 | } | 1009 | } |
1010 | .gePropHeader { | 1010 | .gePropHeader { |
1011 | - background: #e5e5e5; | ||
1012 | - color: black; | 1011 | + background: #e5e5e5; |
1012 | + color: black; | ||
1013 | } | 1013 | } |
1014 | .gePropRowCell { | 1014 | .gePropRowCell { |
1015 | - border-left: 1px solid #f3f3f3; | 1015 | + border-left: 1px solid #f3f3f3; |
1016 | white-space:nowrap; | 1016 | white-space:nowrap; |
1017 | text-overflow:ellipsis; | 1017 | text-overflow:ellipsis; |
1018 | overflow:hidden; | 1018 | overflow:hidden; |
1019 | - max-width: 50%; | 1019 | + max-width: 50%; |
1020 | } | 1020 | } |
1021 | .gePropRow>.gePropRowCell { | 1021 | .gePropRow>.gePropRowCell { |
1022 | - background: #fff; | 1022 | + background: #fff; |
1023 | } | 1023 | } |
1024 | .gePropRowAlt>.gePropRowCell { | 1024 | .gePropRowAlt>.gePropRowCell { |
1025 | - background: #fcfcfc; | 1025 | + background: #fcfcfc; |
1026 | } | 1026 | } |
1027 | .gePropRowDark>.gePropRowCell { | 1027 | .gePropRowDark>.gePropRowCell { |
1028 | - background: #fff; | ||
1029 | - color: #305496; | ||
1030 | - font-weight: bold; | 1028 | + background: #fff; |
1029 | + color: #305496; | ||
1030 | + font-weight: bold; | ||
1031 | } | 1031 | } |
1032 | .gePropRowDarkAlt>.gePropRowCell { | 1032 | .gePropRowDarkAlt>.gePropRowCell { |
1033 | - background: #D9E1F2; | ||
1034 | - color: #305496; | ||
1035 | - font-weight: bold; | 1033 | + background: #D9E1F2; |
1034 | + color: #305496; | ||
1035 | + font-weight: bold; | ||
1036 | } | 1036 | } |
1037 | .gePropEditor input:invalid { | 1037 | .gePropEditor input:invalid { |
1038 | - border: 1px solid red; | 1038 | + border: 1px solid red; |
1039 | } | 1039 | } |
1040 | /* Templates dialog css */ | 1040 | /* Templates dialog css */ |
1041 | .geTemplateDlg { | 1041 | .geTemplateDlg { |
@@ -1043,8 +1043,8 @@ table.geProperties tr td { | @@ -1043,8 +1043,8 @@ table.geProperties tr td { | ||
1043 | height: 100%; | 1043 | height: 100%; |
1044 | } | 1044 | } |
1045 | .geTemplateDlg ::-webkit-scrollbar { | 1045 | .geTemplateDlg ::-webkit-scrollbar { |
1046 | - width:12px; | ||
1047 | - height:12px; | 1046 | + width:12px; |
1047 | + height:12px; | ||
1048 | } | 1048 | } |
1049 | .geTemplateDlg ::-webkit-scrollbar-track { | 1049 | .geTemplateDlg ::-webkit-scrollbar-track { |
1050 | background:whiteSmoke; | 1050 | background:whiteSmoke; |
@@ -1052,7 +1052,7 @@ table.geProperties tr td { | @@ -1052,7 +1052,7 @@ table.geProperties tr td { | ||
1052 | } | 1052 | } |
1053 | .geTemplateDlg ::-webkit-scrollbar-thumb { | 1053 | .geTemplateDlg ::-webkit-scrollbar-thumb { |
1054 | background:#c5c5c5; | 1054 | background:#c5c5c5; |
1055 | - border-radius:10px; | 1055 | + border-radius:10px; |
1056 | border:whiteSmoke solid 3px; | 1056 | border:whiteSmoke solid 3px; |
1057 | } | 1057 | } |
1058 | .geTemplateDlg ::-webkit-scrollbar-thumb:hover { | 1058 | .geTemplateDlg ::-webkit-scrollbar-thumb:hover { |
@@ -1072,8 +1072,8 @@ table.geProperties tr td { | @@ -1072,8 +1072,8 @@ table.geProperties tr td { | ||
1072 | margin: 14px 14px 14px 20px; | 1072 | margin: 14px 14px 14px 20px; |
1073 | } | 1073 | } |
1074 | .geTempDlgSearchBox { | 1074 | .geTempDlgSearchBox { |
1075 | - color:#888888; | ||
1076 | - background:url("/images/icon-search.svg") no-repeat; | 1075 | + color:#888888; |
1076 | + background:url("/images/icon-search.svg") no-repeat; | ||
1077 | background-color: #FFFFFF; | 1077 | background-color: #FFFFFF; |
1078 | background-position: 15px; | 1078 | background-position: 15px; |
1079 | height: 40px; | 1079 | height: 40px; |
@@ -1081,14 +1081,14 @@ table.geProperties tr td { | @@ -1081,14 +1081,14 @@ table.geProperties tr td { | ||
1081 | max-width: 400px; | 1081 | max-width: 400px; |
1082 | border: 1px solid #CCCCCC; | 1082 | border: 1px solid #CCCCCC; |
1083 | border-radius: 3px; | 1083 | border-radius: 3px; |
1084 | - float:right; | ||
1085 | - font-family:Arial,Helvetica,sans-serif; | ||
1086 | - font-size:15px; | ||
1087 | - line-height:36px; | ||
1088 | - margin: 11px 36px 0 0; | ||
1089 | - outline:medium none; | ||
1090 | - padding:0 0 0 36px; | ||
1091 | - text-shadow:1px 1px 0 white; | 1084 | + float:right; |
1085 | + font-family:Arial,Helvetica,sans-serif; | ||
1086 | + font-size:15px; | ||
1087 | + line-height:36px; | ||
1088 | + margin: 11px 36px 0 0; | ||
1089 | + outline:medium none; | ||
1090 | + padding:0 0 0 36px; | ||
1091 | + text-shadow:1px 1px 0 white; | ||
1092 | } | 1092 | } |
1093 | .geTemplatesList { | 1093 | .geTemplatesList { |
1094 | box-sizing: border-box; | 1094 | box-sizing: border-box; |
@@ -1129,37 +1129,37 @@ table.geProperties tr td { | @@ -1129,37 +1129,37 @@ table.geProperties tr td { | ||
1129 | .geTempDlgCreateBtn, .geTempDlgOpenBtn { | 1129 | .geTempDlgCreateBtn, .geTempDlgOpenBtn { |
1130 | display: inline-block; | 1130 | display: inline-block; |
1131 | width: 67px; | 1131 | width: 67px; |
1132 | - border-radius: 3px; | ||
1133 | - background-color: #3D72AD; | ||
1134 | - padding: 6px; | ||
1135 | - text-align: center; | ||
1136 | - color: #fff; | ||
1137 | - cursor: pointer; | ||
1138 | - margin-left: 5px; | 1132 | + border-radius: 3px; |
1133 | + background-color: #3D72AD; | ||
1134 | + padding: 6px; | ||
1135 | + text-align: center; | ||
1136 | + color: #fff; | ||
1137 | + cursor: pointer; | ||
1138 | + margin-left: 5px; | ||
1139 | } | 1139 | } |
1140 | .geTempDlgCancelBtn { | 1140 | .geTempDlgCancelBtn { |
1141 | display: inline-block; | 1141 | display: inline-block; |
1142 | width: 67px; | 1142 | width: 67px; |
1143 | - padding: 6px; | ||
1144 | - text-align: center; | ||
1145 | - color: #3D72AD; | ||
1146 | - cursor: pointer; | 1143 | + padding: 6px; |
1144 | + text-align: center; | ||
1145 | + color: #3D72AD; | ||
1146 | + cursor: pointer; | ||
1147 | } | 1147 | } |
1148 | .geTempDlgCancelBtn:active, .geTempDlgCreateBtn:active, | 1148 | .geTempDlgCancelBtn:active, .geTempDlgCreateBtn:active, |
1149 | .geTempDlgOpenBtn:active, .geTempDlgShowAllBtn:active { | 1149 | .geTempDlgOpenBtn:active, .geTempDlgShowAllBtn:active { |
1150 | transform: translateY(2px); | 1150 | transform: translateY(2px); |
1151 | } | 1151 | } |
1152 | .geTempDlgBtnDisabled { | 1152 | .geTempDlgBtnDisabled { |
1153 | - background-color: #9fbddd; | 1153 | + background-color: #9fbddd; |
1154 | } | 1154 | } |
1155 | .geTempDlgBtnDisabled:active { | 1155 | .geTempDlgBtnDisabled:active { |
1156 | - transform: translateY(0px); | 1156 | + transform: translateY(0px); |
1157 | } | 1157 | } |
1158 | 1158 | ||
1159 | .geTempDlgBtnBusy { | 1159 | .geTempDlgBtnBusy { |
1160 | background-image: url(/images/aui-wait.gif); | 1160 | background-image: url(/images/aui-wait.gif); |
1161 | - background-repeat: no-repeat; | ||
1162 | - background-position: 62px 7px; | 1161 | + background-repeat: no-repeat; |
1162 | + background-position: 62px 7px; | ||
1163 | } | 1163 | } |
1164 | 1164 | ||
1165 | .geTempDlgBack { | 1165 | .geTempDlgBack { |
@@ -1284,7 +1284,7 @@ table.geProperties tr td { | @@ -1284,7 +1284,7 @@ table.geProperties tr td { | ||
1284 | 1284 | ||
1285 | .geTempDlgDiagramsListHeader { | 1285 | .geTempDlgDiagramsListHeader { |
1286 | width: 100%; | 1286 | width: 100%; |
1287 | - height: 45px; | 1287 | + height: 45px; |
1288 | padding: 18px 20px 0 11px; | 1288 | padding: 18px 20px 0 11px; |
1289 | box-sizing: border-box; | 1289 | box-sizing: border-box; |
1290 | } | 1290 | } |
@@ -1341,7 +1341,7 @@ table.geProperties tr td { | @@ -1341,7 +1341,7 @@ table.geProperties tr td { | ||
1341 | width: 13px; | 1341 | width: 13px; |
1342 | } | 1342 | } |
1343 | .geTempDlgSpacer { | 1343 | .geTempDlgSpacer { |
1344 | - display: inline-block; | 1344 | + display: inline-block; |
1345 | width: 10px; | 1345 | width: 10px; |
1346 | } | 1346 | } |
1347 | 1347 | ||
@@ -1350,8 +1350,8 @@ table.geProperties tr td { | @@ -1350,8 +1350,8 @@ table.geProperties tr td { | ||
1350 | white-space: nowrap; | 1350 | white-space: nowrap; |
1351 | font-size: 13px; | 1351 | font-size: 13px; |
1352 | padding: 0px 20px 20px 10px; | 1352 | padding: 0px 20px 20px 10px; |
1353 | - box-sizing: border-box; | ||
1354 | - border-spacing: 0; | 1353 | + box-sizing: border-box; |
1354 | + border-spacing: 0; | ||
1355 | } | 1355 | } |
1356 | 1356 | ||
1357 | .geTempDlgDiagramsListGrid tr { | 1357 | .geTempDlgDiagramsListGrid tr { |
@@ -1421,21 +1421,21 @@ table.geProperties tr td { | @@ -1421,21 +1421,21 @@ table.geProperties tr td { | ||
1421 | 1421 | ||
1422 | .geTempDlgDiagramTileImgLoading { | 1422 | .geTempDlgDiagramTileImgLoading { |
1423 | background-image: url(/images/aui-wait.gif); | 1423 | background-image: url(/images/aui-wait.gif); |
1424 | - background-repeat: no-repeat; | ||
1425 | - background-position: center; | 1424 | + background-repeat: no-repeat; |
1425 | + background-position: center; | ||
1426 | } | 1426 | } |
1427 | 1427 | ||
1428 | .geTempDlgDiagramTileImgError { | 1428 | .geTempDlgDiagramTileImgError { |
1429 | background-image: url(/images/broken.png); | 1429 | background-image: url(/images/broken.png); |
1430 | - background-repeat: no-repeat; | ||
1431 | - background-position: center; | ||
1432 | - background-color: #be3730; | 1430 | + background-repeat: no-repeat; |
1431 | + background-position: center; | ||
1432 | + background-color: #be3730; | ||
1433 | } | 1433 | } |
1434 | 1434 | ||
1435 | .geTempDlgDiagramTileImg img{ | 1435 | .geTempDlgDiagramTileImg img{ |
1436 | max-width: 117px; | 1436 | max-width: 117px; |
1437 | - max-height: 117px; | ||
1438 | - cursor: pointer; | 1437 | + max-height: 117px; |
1438 | + cursor: pointer; | ||
1439 | } | 1439 | } |
1440 | 1440 | ||
1441 | .geTempDlgDiagramTileActive > .geTempDlgDiagramTileImg{ | 1441 | .geTempDlgDiagramTileActive > .geTempDlgDiagramTileImg{ |
@@ -1469,33 +1469,33 @@ table.geProperties tr td { | @@ -1469,33 +1469,33 @@ table.geProperties tr td { | ||
1469 | 1469 | ||
1470 | .geTempDlgDiagramPreviewBox { | 1470 | .geTempDlgDiagramPreviewBox { |
1471 | position: absolute; | 1471 | position: absolute; |
1472 | - top: 3%; | ||
1473 | - left: 10%; | ||
1474 | - width: 80%; | ||
1475 | - height: 94%; | ||
1476 | - background: white; | ||
1477 | - border: 4px solid #3D72AD; | ||
1478 | - border-radius: 6px; | ||
1479 | - box-sizing: border-box; | 1472 | + top: 3%; |
1473 | + left: 10%; | ||
1474 | + width: 80%; | ||
1475 | + height: 94%; | ||
1476 | + background: white; | ||
1477 | + border: 4px solid #3D72AD; | ||
1478 | + border-radius: 6px; | ||
1479 | + box-sizing: border-box; | ||
1480 | display:table-cell; | 1480 | display:table-cell; |
1481 | vertical-align:middle; | 1481 | vertical-align:middle; |
1482 | text-align:center; | 1482 | text-align:center; |
1483 | - z-index: 2; | 1483 | + z-index: 2; |
1484 | } | 1484 | } |
1485 | 1485 | ||
1486 | .geTempDlgDialogMask { | 1486 | .geTempDlgDialogMask { |
1487 | position: absolute; | 1487 | position: absolute; |
1488 | - top: 0; | ||
1489 | - left: 0; | ||
1490 | - width: 100%; | ||
1491 | - height: 100%; | ||
1492 | - z-index: 1; | 1488 | + top: 0; |
1489 | + left: 0; | ||
1490 | + width: 100%; | ||
1491 | + height: 100%; | ||
1492 | + z-index: 1; | ||
1493 | } | 1493 | } |
1494 | 1494 | ||
1495 | .geTempDlgDiagramPreviewBox img { | 1495 | .geTempDlgDiagramPreviewBox img { |
1496 | max-width: 95%; | 1496 | max-width: 95%; |
1497 | - max-height: 95%; | ||
1498 | - vertical-align: middle; | 1497 | + max-height: 95%; |
1498 | + vertical-align: middle; | ||
1499 | } | 1499 | } |
1500 | 1500 | ||
1501 | .geTempDlgPreviewCloseBtn { | 1501 | .geTempDlgPreviewCloseBtn { |
@@ -1511,25 +1511,25 @@ table.geProperties tr td { | @@ -1511,25 +1511,25 @@ table.geProperties tr td { | ||
1511 | 1511 | ||
1512 | .geTempDlgLinkToDiagramBtn { | 1512 | .geTempDlgLinkToDiagramBtn { |
1513 | color: #555; | 1513 | color: #555; |
1514 | - margin: 0 10px 0 10px; | ||
1515 | - height: 27px; | ||
1516 | - font-size: 14px; | 1514 | + margin: 0 10px 0 10px; |
1515 | + height: 27px; | ||
1516 | + font-size: 14px; | ||
1517 | } | 1517 | } |
1518 | 1518 | ||
1519 | .geTempDlgErrMsg { | 1519 | .geTempDlgErrMsg { |
1520 | display: none; | 1520 | display: none; |
1521 | color: red; | 1521 | color: red; |
1522 | - position: absolute; | ||
1523 | - width: 100%; | ||
1524 | - text-align: center; | 1522 | + position: absolute; |
1523 | + width: 100%; | ||
1524 | + text-align: center; | ||
1525 | } | 1525 | } |
1526 | 1526 | ||
1527 | .geTempDlgImportCat { | 1527 | .geTempDlgImportCat { |
1528 | font-weight: bold; | 1528 | font-weight: bold; |
1529 | - background: #f9f9f9; | ||
1530 | - padding: 5px 0px; | ||
1531 | - padding: 10px; | ||
1532 | - margin: 10px 10px 0px 0px; | 1529 | + background: #f9f9f9; |
1530 | + padding: 5px 0px; | ||
1531 | + padding: 10px; | ||
1532 | + margin: 10px 10px 0px 0px; | ||
1533 | } | 1533 | } |
1534 | /* Comments CSS */ | 1534 | /* Comments CSS */ |
1535 | .geCommentsWin { | 1535 | .geCommentsWin { |
@@ -1613,37 +1613,37 @@ table.geProperties tr td { | @@ -1613,37 +1613,37 @@ table.geProperties tr td { | ||
1613 | } | 1613 | } |
1614 | 1614 | ||
1615 | .geCommentDate::first-letter { | 1615 | .geCommentDate::first-letter { |
1616 | - text-transform: uppercase; | 1616 | + text-transform: uppercase; |
1617 | } | 1617 | } |
1618 | 1618 | ||
1619 | .geCommentTxt { | 1619 | .geCommentTxt { |
1620 | font-size: 14px; | 1620 | font-size: 14px; |
1621 | - padding-top: 5px; | ||
1622 | - white-space: normal; | ||
1623 | - min-height: 12px; | 1621 | + padding-top: 5px; |
1622 | + white-space: normal; | ||
1623 | + min-height: 12px; | ||
1624 | } | 1624 | } |
1625 | 1625 | ||
1626 | .geCommentEditTxtArea { | 1626 | .geCommentEditTxtArea { |
1627 | - margin-top: 5px; | ||
1628 | - font-size: 14px !important; | ||
1629 | - min-height: 12px; | ||
1630 | - max-width: 100%; | ||
1631 | - min-width: 100%; | 1627 | + margin-top: 5px; |
1628 | + font-size: 14px !important; | ||
1629 | + min-height: 12px; | ||
1630 | + max-width: 100%; | ||
1631 | + min-width: 100%; | ||
1632 | width: 100%; | 1632 | width: 100%; |
1633 | - box-sizing: border-box; | 1633 | + box-sizing: border-box; |
1634 | } | 1634 | } |
1635 | 1635 | ||
1636 | .geCommentEditBtns { | 1636 | .geCommentEditBtns { |
1637 | width: 100%; | 1637 | width: 100%; |
1638 | - box-sizing: border-box; | ||
1639 | - padding-top: 5px; | ||
1640 | - height: 20px; | 1638 | + box-sizing: border-box; |
1639 | + padding-top: 5px; | ||
1640 | + height: 20px; | ||
1641 | } | 1641 | } |
1642 | 1642 | ||
1643 | .geCommentEditBtn { | 1643 | .geCommentEditBtn { |
1644 | padding: 3px 8px 3px 8px !important; | 1644 | padding: 3px 8px 3px 8px !important; |
1645 | - float: right !important; | ||
1646 | - margin-left: 5px; | 1645 | + float: right !important; |
1646 | + margin-left: 5px; | ||
1647 | } | 1647 | } |
1648 | 1648 | ||
1649 | .geCommentActions { | 1649 | .geCommentActions { |
@@ -1659,7 +1659,7 @@ table.geProperties tr td { | @@ -1659,7 +1659,7 @@ table.geProperties tr td { | ||
1659 | 1659 | ||
1660 | .geCommentAction { | 1660 | .geCommentAction { |
1661 | display: inline-block; | 1661 | display: inline-block; |
1662 | - padding: 0; | 1662 | + padding: 0; |
1663 | } | 1663 | } |
1664 | 1664 | ||
1665 | .geCommentAction:before { | 1665 | .geCommentAction:before { |
@@ -1684,8 +1684,8 @@ table.geProperties tr td { | @@ -1684,8 +1684,8 @@ table.geProperties tr td { | ||
1684 | 1684 | ||
1685 | .geCheckedBtn { | 1685 | .geCheckedBtn { |
1686 | background-color: #ccc; | 1686 | background-color: #ccc; |
1687 | - border-top: 1px solid black !important; | ||
1688 | - border-left: 1px solid black !important; | 1687 | + border-top: 1px solid black !important; |
1688 | + border-left: 1px solid black !important; | ||
1689 | } | 1689 | } |
1690 | 1690 | ||
1691 | .geCommentBusyImg { | 1691 | .geCommentBusyImg { |
@@ -1739,8 +1739,8 @@ table.geProperties tr td { | @@ -1739,8 +1739,8 @@ table.geProperties tr td { | ||
1739 | .geStripedTable | 1739 | .geStripedTable |
1740 | { | 1740 | { |
1741 | border-collapse: collapse; | 1741 | border-collapse: collapse; |
1742 | - width: 100%; | ||
1743 | - table-layout: fixed; | 1742 | + width: 100%; |
1743 | + table-layout: fixed; | ||
1744 | } | 1744 | } |
1745 | 1745 | ||
1746 | .geStripedTable td, .geStripedTable th | 1746 | .geStripedTable td, .geStripedTable th |
@@ -1758,9 +1758,9 @@ table.geProperties tr td { | @@ -1758,9 +1758,9 @@ table.geProperties tr td { | ||
1758 | .geStripedTable tr:hover {background-color: #ddd;} | 1758 | .geStripedTable tr:hover {background-color: #ddd;} |
1759 | 1759 | ||
1760 | .geStripedTable th { | 1760 | .geStripedTable th { |
1761 | - padding-top: 4px; | ||
1762 | - padding-bottom: 4px; | ||
1763 | - background-color: #bbb; | 1761 | + padding-top: 4px; |
1762 | + padding-bottom: 4px; | ||
1763 | + background-color: #bbb; | ||
1764 | } | 1764 | } |
1765 | 1765 | ||
1766 | .geNotification-box { | 1766 | .geNotification-box { |
@@ -1771,316 +1771,316 @@ table.geProperties tr td { | @@ -1771,316 +1771,316 @@ table.geProperties tr td { | ||
1771 | width: 20px; | 1771 | width: 20px; |
1772 | } | 1772 | } |
1773 | .geNotification-bell { | 1773 | .geNotification-bell { |
1774 | - animation: geBellAnim 1s 1s both; | 1774 | + animation: geBellAnim 1s 1s both; |
1775 | } | 1775 | } |
1776 | .geNotification-bell * { | 1776 | .geNotification-bell * { |
1777 | - display: block; | ||
1778 | - margin: 0 auto; | ||
1779 | - background-color: #656565; | 1777 | + display: block; |
1778 | + margin: 0 auto; | ||
1779 | + background-color: #656565; | ||
1780 | } | 1780 | } |
1781 | 1781 | ||
1782 | .geBell-top { | 1782 | .geBell-top { |
1783 | - width: 2px; | ||
1784 | - height: 2px; | ||
1785 | - border-radius: 1px 1px 0 0; | 1783 | + width: 2px; |
1784 | + height: 2px; | ||
1785 | + border-radius: 1px 1px 0 0; | ||
1786 | } | 1786 | } |
1787 | .geBell-middle { | 1787 | .geBell-middle { |
1788 | - width: 12px; | ||
1789 | - height: 12px; | ||
1790 | - margin-top: -1px; | ||
1791 | - border-radius: 7px 7px 0 0; | 1788 | + width: 12px; |
1789 | + height: 12px; | ||
1790 | + margin-top: -1px; | ||
1791 | + border-radius: 7px 7px 0 0; | ||
1792 | } | 1792 | } |
1793 | .geBell-bottom { | 1793 | .geBell-bottom { |
1794 | - position: relative; | ||
1795 | - z-index: 0; | ||
1796 | - width: 16px; | ||
1797 | - height: 1px; | 1794 | + position: relative; |
1795 | + z-index: 0; | ||
1796 | + width: 16px; | ||
1797 | + height: 1px; | ||
1798 | } | 1798 | } |
1799 | .geBell-bottom::before, | 1799 | .geBell-bottom::before, |
1800 | .geBell-bottom::after { | 1800 | .geBell-bottom::after { |
1801 | - content: ''; | ||
1802 | - position: absolute; | ||
1803 | - top: -4px; | 1801 | + content: ''; |
1802 | + position: absolute; | ||
1803 | + top: -4px; | ||
1804 | } | 1804 | } |
1805 | .geBell-bottom::before { | 1805 | .geBell-bottom::before { |
1806 | - left: 1px; | ||
1807 | - border-bottom-width: 4px; | ||
1808 | - border-right: 0 solid transparent; | ||
1809 | - border-left: 4px solid transparent; | 1806 | + left: 1px; |
1807 | + border-bottom-width: 4px; | ||
1808 | + border-right: 0 solid transparent; | ||
1809 | + border-left: 4px solid transparent; | ||
1810 | } | 1810 | } |
1811 | .geBell-bottom::after { | 1811 | .geBell-bottom::after { |
1812 | - right: 1px; | ||
1813 | - border-bottom-width: 4px; | ||
1814 | - border-right: 4px solid transparent; | ||
1815 | - border-left: 0 solid transparent; | 1812 | + right: 1px; |
1813 | + border-bottom-width: 4px; | ||
1814 | + border-right: 4px solid transparent; | ||
1815 | + border-left: 0 solid transparent; | ||
1816 | } | 1816 | } |
1817 | .geBell-rad { | 1817 | .geBell-rad { |
1818 | - width: 3px; | ||
1819 | - height: 2px; | ||
1820 | - margin-top: 0.5px; | ||
1821 | - border-radius: 0 0 2px 2px; | ||
1822 | - animation: geRadAnim 1s 2s both; | 1818 | + width: 3px; |
1819 | + height: 2px; | ||
1820 | + margin-top: 0.5px; | ||
1821 | + border-radius: 0 0 2px 2px; | ||
1822 | + animation: geRadAnim 1s 2s both; | ||
1823 | } | 1823 | } |
1824 | .geNotification-count { | 1824 | .geNotification-count { |
1825 | - position: absolute; | ||
1826 | - z-index: 1; | ||
1827 | - top: -5px; | ||
1828 | - right: -4px; | ||
1829 | - width: 13px; | ||
1830 | - height: 13px; | ||
1831 | - line-height: 13px; | ||
1832 | - font-size: 8px; | ||
1833 | - border-radius: 50%; | ||
1834 | - background-color: #ff4927; | ||
1835 | - color: #FFF; | ||
1836 | - animation: geZoomAnim 1s 1s both; | 1825 | + position: absolute; |
1826 | + z-index: 1; | ||
1827 | + top: -5px; | ||
1828 | + right: -4px; | ||
1829 | + width: 13px; | ||
1830 | + height: 13px; | ||
1831 | + line-height: 13px; | ||
1832 | + font-size: 8px; | ||
1833 | + border-radius: 50%; | ||
1834 | + background-color: #ff4927; | ||
1835 | + color: #FFF; | ||
1836 | + animation: geZoomAnim 1s 1s both; | ||
1837 | } | 1837 | } |
1838 | @keyframes geBellAnim { | 1838 | @keyframes geBellAnim { |
1839 | - 0% { transform: rotate(0); } | ||
1840 | - 10% { transform: rotate(30deg); } | ||
1841 | - 20% { transform: rotate(0); } | ||
1842 | - 80% { transform: rotate(0); } | ||
1843 | - 90% { transform: rotate(-30deg); } | ||
1844 | - 100% { transform: rotate(0); } | 1839 | + 0% { transform: rotate(0); } |
1840 | + 10% { transform: rotate(30deg); } | ||
1841 | + 20% { transform: rotate(0); } | ||
1842 | + 80% { transform: rotate(0); } | ||
1843 | + 90% { transform: rotate(-30deg); } | ||
1844 | + 100% { transform: rotate(0); } | ||
1845 | } | 1845 | } |
1846 | @keyframes geRadAnim { | 1846 | @keyframes geRadAnim { |
1847 | - 0% { transform: translateX(0); } | ||
1848 | - 10% { transform: translateX(5px); } | ||
1849 | - 20% { transform: translateX(0); } | ||
1850 | - 80% { transform: translateX(0); } | ||
1851 | - 90% { transform: translateX(-5px); } | ||
1852 | - 100% { transform: translateX(0); } | 1847 | + 0% { transform: translateX(0); } |
1848 | + 10% { transform: translateX(5px); } | ||
1849 | + 20% { transform: translateX(0); } | ||
1850 | + 80% { transform: translateX(0); } | ||
1851 | + 90% { transform: translateX(-5px); } | ||
1852 | + 100% { transform: translateX(0); } | ||
1853 | } | 1853 | } |
1854 | @keyframes geZoomAnim { | 1854 | @keyframes geZoomAnim { |
1855 | - 0% { opacity: 0; transform: scale(0); } | ||
1856 | - 50% { opacity: 1; transform: scale(1); } | ||
1857 | - 100% { opacity: 1; } | 1855 | + 0% { opacity: 0; transform: scale(0); } |
1856 | + 50% { opacity: 1; transform: scale(1); } | ||
1857 | + 100% { opacity: 1; } | ||
1858 | } | 1858 | } |
1859 | 1859 | ||
1860 | .geNotifPanel { | 1860 | .geNotifPanel { |
1861 | - height: 300px; | ||
1862 | - width: 300px; | ||
1863 | - background: #fff; | ||
1864 | - border-radius: 3px; | ||
1865 | - overflow: hidden; | ||
1866 | - -webkit-box-shadow: 10px 10px 15px 0 rgba(0, 0, 0, 0.3); | ||
1867 | - box-shadow: 10px 10px 15px 0 rgba(0, 0, 0, 0.3); | ||
1868 | - -webkit-transition: all .5s ease-in-out; | ||
1869 | - transition: all .5s ease-in-out; | ||
1870 | - position: absolute; | ||
1871 | - right: 100px; | ||
1872 | - top: 42px; | ||
1873 | - z-index: 150; | 1861 | + height: 300px; |
1862 | + width: 300px; | ||
1863 | + background: #fff; | ||
1864 | + border-radius: 3px; | ||
1865 | + overflow: hidden; | ||
1866 | + -webkit-box-shadow: 10px 10px 15px 0 rgba(0, 0, 0, 0.3); | ||
1867 | + box-shadow: 10px 10px 15px 0 rgba(0, 0, 0, 0.3); | ||
1868 | + -webkit-transition: all .5s ease-in-out; | ||
1869 | + transition: all .5s ease-in-out; | ||
1870 | + position: absolute; | ||
1871 | + right: 100px; | ||
1872 | + top: 42px; | ||
1873 | + z-index: 150; | ||
1874 | } | 1874 | } |
1875 | .geNotifPanel .header { | 1875 | .geNotifPanel .header { |
1876 | - background: #cecece; | ||
1877 | - color: #707070; | ||
1878 | - font-size: 15px; | 1876 | + background: #cecece; |
1877 | + color: #707070; | ||
1878 | + font-size: 15px; | ||
1879 | } | 1879 | } |
1880 | .geNotifPanel .header .title { | 1880 | .geNotifPanel .header .title { |
1881 | - display: block; | ||
1882 | - text-align: center; | ||
1883 | - line-height: 30px; | ||
1884 | - font-weight: 600; | 1881 | + display: block; |
1882 | + text-align: center; | ||
1883 | + line-height: 30px; | ||
1884 | + font-weight: 600; | ||
1885 | } | 1885 | } |
1886 | .geNotifPanel .header .closeBtn { | 1886 | .geNotifPanel .header .closeBtn { |
1887 | - position: absolute; | ||
1888 | - line-height: 30px; | ||
1889 | - cursor: pointer; | ||
1890 | - right: 15px; | ||
1891 | - top: 0; | 1887 | + position: absolute; |
1888 | + line-height: 30px; | ||
1889 | + cursor: pointer; | ||
1890 | + right: 15px; | ||
1891 | + top: 0; | ||
1892 | } | 1892 | } |
1893 | .geNotifPanel .notifications { | 1893 | .geNotifPanel .notifications { |
1894 | - position: relative; | ||
1895 | - height: 270px; | ||
1896 | - overflow-x: hidden; | ||
1897 | - overflow-y: auto; | 1894 | + position: relative; |
1895 | + height: 270px; | ||
1896 | + overflow-x: hidden; | ||
1897 | + overflow-y: auto; | ||
1898 | } | 1898 | } |
1899 | .geNotifPanel .notifications .line { | 1899 | .geNotifPanel .notifications .line { |
1900 | - position: absolute; | ||
1901 | - top: 0; | ||
1902 | - left: 27px; | ||
1903 | - height: 100%; | ||
1904 | - width: 3px; | ||
1905 | - background: #EBEBEB; | 1900 | + position: absolute; |
1901 | + top: 0; | ||
1902 | + left: 27px; | ||
1903 | + height: 100%; | ||
1904 | + width: 3px; | ||
1905 | + background: #EBEBEB; | ||
1906 | } | 1906 | } |
1907 | .geNotifPanel .notifications .notification { | 1907 | .geNotifPanel .notifications .notification { |
1908 | - position: relative; | ||
1909 | - z-index: 2; | ||
1910 | - margin: 25px 20px 25px 43px; | 1908 | + position: relative; |
1909 | + z-index: 2; | ||
1910 | + margin: 25px 20px 25px 43px; | ||
1911 | } | 1911 | } |
1912 | .geNotifPanel .notifications .notification:nth-child(n+1) { | 1912 | .geNotifPanel .notifications .notification:nth-child(n+1) { |
1913 | - animation: geHere-am-i 0.5s ease-out 0.4s; | ||
1914 | - animation-fill-mode: both; | 1913 | + animation: geHere-am-i 0.5s ease-out 0.4s; |
1914 | + animation-fill-mode: both; | ||
1915 | } | 1915 | } |
1916 | .geNotifPanel .notifications .notification:hover { | 1916 | .geNotifPanel .notifications .notification:hover { |
1917 | - color: #1B95E0; | ||
1918 | - cursor: pointer; | 1917 | + color: #1B95E0; |
1918 | + cursor: pointer; | ||
1919 | } | 1919 | } |
1920 | .geNotifPanel .notifications .notification .circle { | 1920 | .geNotifPanel .notifications .notification .circle { |
1921 | - -webkit-box-sizing: border-box; | ||
1922 | - box-sizing: border-box; | ||
1923 | - position: absolute; | ||
1924 | - height: 11px; | ||
1925 | - width: 11px; | ||
1926 | - background: #fff; | ||
1927 | - border: 2px solid #1B95E0; | ||
1928 | - -webkit-box-shadow: 0 0 0 3px #fff; | ||
1929 | - box-shadow: 0 0 0 3px #fff; | ||
1930 | - border-radius: 6px; | ||
1931 | - top: 0; | ||
1932 | - left: -20px; | 1921 | + -webkit-box-sizing: border-box; |
1922 | + box-sizing: border-box; | ||
1923 | + position: absolute; | ||
1924 | + height: 11px; | ||
1925 | + width: 11px; | ||
1926 | + background: #fff; | ||
1927 | + border: 2px solid #1B95E0; | ||
1928 | + -webkit-box-shadow: 0 0 0 3px #fff; | ||
1929 | + box-shadow: 0 0 0 3px #fff; | ||
1930 | + border-radius: 6px; | ||
1931 | + top: 0; | ||
1932 | + left: -20px; | ||
1933 | } | 1933 | } |
1934 | 1934 | ||
1935 | .geNotifPanel .notifications .notification .circle.active { | 1935 | .geNotifPanel .notifications .notification .circle.active { |
1936 | - background: #1B95E0; | 1936 | + background: #1B95E0; |
1937 | } | 1937 | } |
1938 | 1938 | ||
1939 | .geNotifPanel .notifications .notification .time { | 1939 | .geNotifPanel .notifications .notification .time { |
1940 | - display: block; | ||
1941 | - font-size: 11px; | ||
1942 | - line-height: 11px; | ||
1943 | - margin-bottom: 2px; | 1940 | + display: block; |
1941 | + font-size: 11px; | ||
1942 | + line-height: 11px; | ||
1943 | + margin-bottom: 2px; | ||
1944 | } | 1944 | } |
1945 | .geNotifPanel .notifications .notification p { | 1945 | .geNotifPanel .notifications .notification p { |
1946 | - font-size: 15px; | ||
1947 | - line-height: 20px; | ||
1948 | - margin: 0; | 1946 | + font-size: 15px; |
1947 | + line-height: 20px; | ||
1948 | + margin: 0; | ||
1949 | } | 1949 | } |
1950 | .geNotifPanel .notifications .notification p b { | 1950 | .geNotifPanel .notifications .notification p b { |
1951 | - font-weight: 600; | 1951 | + font-weight: 600; |
1952 | } | 1952 | } |
1953 | @-webkit-keyframes geHere-am-i { | 1953 | @-webkit-keyframes geHere-am-i { |
1954 | - from { | ||
1955 | - -webkit-transform: translate3d(0, 50px, 0); | ||
1956 | - transform: translate3d(0, 50px, 0); | ||
1957 | - opacity: 0; | ||
1958 | - } | ||
1959 | - to { | ||
1960 | - -webkit-transform: translate3d(0, 0, 0); | ||
1961 | - transform: translate3d(0, 0, 0); | ||
1962 | - opacity: 1; | ||
1963 | - } | 1954 | + from { |
1955 | + -webkit-transform: translate3d(0, 50px, 0); | ||
1956 | + transform: translate3d(0, 50px, 0); | ||
1957 | + opacity: 0; | ||
1958 | + } | ||
1959 | + to { | ||
1960 | + -webkit-transform: translate3d(0, 0, 0); | ||
1961 | + transform: translate3d(0, 0, 0); | ||
1962 | + opacity: 1; | ||
1963 | + } | ||
1964 | } | 1964 | } |
1965 | 1965 | ||
1966 | @keyframes geHere-am-i { | 1966 | @keyframes geHere-am-i { |
1967 | - from { | ||
1968 | - -webkit-transform: translate3d(0, 50px, 0); | ||
1969 | - transform: translate3d(0, 50px, 0); | ||
1970 | - opacity: 0; | ||
1971 | - } | ||
1972 | - to { | ||
1973 | - -webkit-transform: translate3d(0, 0, 0); | ||
1974 | - transform: translate3d(0, 0, 0); | ||
1975 | - opacity: 1; | ||
1976 | - } | 1967 | + from { |
1968 | + -webkit-transform: translate3d(0, 50px, 0); | ||
1969 | + transform: translate3d(0, 50px, 0); | ||
1970 | + opacity: 0; | ||
1971 | + } | ||
1972 | + to { | ||
1973 | + -webkit-transform: translate3d(0, 0, 0); | ||
1974 | + transform: translate3d(0, 0, 0); | ||
1975 | + opacity: 1; | ||
1976 | + } | ||
1977 | } | 1977 | } |
1978 | 1978 | ||
1979 | .geTempTree { | 1979 | .geTempTree { |
1980 | - margin: 0; | ||
1981 | - padding: 0; | 1980 | + margin: 0; |
1981 | + padding: 0; | ||
1982 | } | 1982 | } |
1983 | 1983 | ||
1984 | .geTempTree, .geTempTreeActive, .geTempTreeNested { | 1984 | .geTempTree, .geTempTreeActive, .geTempTreeNested { |
1985 | - list-style-type: none; | ||
1986 | - transition: all 0.5s; | 1985 | + list-style-type: none; |
1986 | + transition: all 0.5s; | ||
1987 | } | 1987 | } |
1988 | 1988 | ||
1989 | .geTempTreeCaret { | 1989 | .geTempTreeCaret { |
1990 | - box-sizing: border-box; | ||
1991 | - cursor: pointer; | ||
1992 | - user-select: none; | ||
1993 | - padding: 6px; | ||
1994 | - width: 100%; | ||
1995 | - transition: all 0.5s; | 1990 | + box-sizing: border-box; |
1991 | + cursor: pointer; | ||
1992 | + user-select: none; | ||
1993 | + padding: 6px; | ||
1994 | + width: 100%; | ||
1995 | + transition: all 0.5s; | ||
1996 | } | 1996 | } |
1997 | 1997 | ||
1998 | .geTempTreeCaret::before { | 1998 | .geTempTreeCaret::before { |
1999 | - content: "\25B6"; | ||
2000 | - display: inline-block; | ||
2001 | - font-size: 10px; | ||
2002 | - margin-right: 6px; | 1999 | + content: "\25B6"; |
2000 | + display: inline-block; | ||
2001 | + font-size: 10px; | ||
2002 | + margin-right: 6px; | ||
2003 | } | 2003 | } |
2004 | 2004 | ||
2005 | .geTempTreeCaret-down::before { | 2005 | .geTempTreeCaret-down::before { |
2006 | - transform: rotate(90deg); | 2006 | + transform: rotate(90deg); |
2007 | } | 2007 | } |
2008 | 2008 | ||
2009 | .geTempTreeNested { | 2009 | .geTempTreeNested { |
2010 | - height: 0; | ||
2011 | - opacity: 0; | 2010 | + height: 0; |
2011 | + opacity: 0; | ||
2012 | } | 2012 | } |
2013 | 2013 | ||
2014 | .geTempTreeActive { | 2014 | .geTempTreeActive { |
2015 | - height: 100%; | ||
2016 | - opacity: 1; | 2015 | + height: 100%; |
2016 | + opacity: 1; | ||
2017 | } | 2017 | } |
2018 | 2018 | ||
2019 | .geTempTreeActive, .geTempTreeNested { | 2019 | .geTempTreeActive, .geTempTreeNested { |
2020 | - padding-left: 15px; | 2020 | + padding-left: 15px; |
2021 | } | 2021 | } |
2022 | 2022 | ||
2023 | .geTempTreeActive > li, .geTempTreeNested > li { | 2023 | .geTempTreeActive > li, .geTempTreeNested > li { |
2024 | - box-sizing: border-box; | ||
2025 | - padding: 3px; | ||
2026 | - width: 100%; | ||
2027 | - cursor: pointer; | ||
2028 | - user-select: none; | ||
2029 | - transition: all 0.5s; | 2024 | + box-sizing: border-box; |
2025 | + padding: 3px; | ||
2026 | + width: 100%; | ||
2027 | + cursor: pointer; | ||
2028 | + user-select: none; | ||
2029 | + transition: all 0.5s; | ||
2030 | } | 2030 | } |
2031 | 2031 | ||
2032 | /*Electron Window Controls*/ | 2032 | /*Electron Window Controls*/ |
2033 | #geWindow-controls { | 2033 | #geWindow-controls { |
2034 | - display: grid; | ||
2035 | - grid-template-columns: repeat(3, 30px); | ||
2036 | - position: absolute; | ||
2037 | - top: 2px; | ||
2038 | - right: 3px; | ||
2039 | - height: 22px; | ||
2040 | - -webkit-app-region: no-drag; | 2034 | + display: grid; |
2035 | + grid-template-columns: repeat(3, 30px); | ||
2036 | + position: absolute; | ||
2037 | + top: 2px; | ||
2038 | + right: 3px; | ||
2039 | + height: 22px; | ||
2040 | + -webkit-app-region: no-drag; | ||
2041 | } | 2041 | } |
2042 | 2042 | ||
2043 | #geWindow-controls .button { | 2043 | #geWindow-controls .button { |
2044 | - grid-row: 1 / span 1; | ||
2045 | - display: flex; | ||
2046 | - justify-content: center; | ||
2047 | - align-items: center; | ||
2048 | - width: 100%; | ||
2049 | - height: 100%; | ||
2050 | - user-select: none; | 2044 | + grid-row: 1 / span 1; |
2045 | + display: flex; | ||
2046 | + justify-content: center; | ||
2047 | + align-items: center; | ||
2048 | + width: 100%; | ||
2049 | + height: 100%; | ||
2050 | + user-select: none; | ||
2051 | } | 2051 | } |
2052 | #min-button { | 2052 | #min-button { |
2053 | - grid-column: 1; | 2053 | + grid-column: 1; |
2054 | } | 2054 | } |
2055 | #max-button, #restore-button { | 2055 | #max-button, #restore-button { |
2056 | - grid-column: 2; | 2056 | + grid-column: 2; |
2057 | } | 2057 | } |
2058 | #close-button { | 2058 | #close-button { |
2059 | - grid-column: 3; | 2059 | + grid-column: 3; |
2060 | } | 2060 | } |
2061 | #geWindow-controls .button.dark:hover { | 2061 | #geWindow-controls .button.dark:hover { |
2062 | - background: rgba(255,255,255,0.1); | 2062 | + background: rgba(255,255,255,0.1); |
2063 | } | 2063 | } |
2064 | #geWindow-controls .button.dark:active { | 2064 | #geWindow-controls .button.dark:active { |
2065 | - background: rgba(255,255,255,0.2); | 2065 | + background: rgba(255,255,255,0.2); |
2066 | } | 2066 | } |
2067 | 2067 | ||
2068 | #geWindow-controls .button.white:hover { | 2068 | #geWindow-controls .button.white:hover { |
2069 | - background: rgba(0,0,0,0.1); | 2069 | + background: rgba(0,0,0,0.1); |
2070 | } | 2070 | } |
2071 | #geWindow-controls .button.white:active { | 2071 | #geWindow-controls .button.white:active { |
2072 | - background: rgba(0,0,0,0.2); | 2072 | + background: rgba(0,0,0,0.2); |
2073 | } | 2073 | } |
2074 | 2074 | ||
2075 | #close-button:hover { | 2075 | #close-button:hover { |
2076 | - background: #E81123 !important; | 2076 | + background: #E81123 !important; |
2077 | } | 2077 | } |
2078 | #close-button:active { | 2078 | #close-button:active { |
2079 | - background: #F1707A !important; | 2079 | + background: #F1707A !important; |
2080 | } | 2080 | } |
2081 | 2081 | ||
2082 | #restore-button { | 2082 | #restore-button { |
2083 | - display: none !important; | 2083 | + display: none !important; |
2084 | } | 2084 | } |
2085 | /* | 2085 | /* |
2086 | .geMaximized #titlebar { | 2086 | .geMaximized #titlebar { |
@@ -2089,13 +2089,13 @@ table.geProperties tr td { | @@ -2089,13 +2089,13 @@ table.geProperties tr td { | ||
2089 | } | 2089 | } |
2090 | */ | 2090 | */ |
2091 | .geMaximized #restore-button { | 2091 | .geMaximized #restore-button { |
2092 | - display: flex !important; | 2092 | + display: flex !important; |
2093 | } | 2093 | } |
2094 | 2094 | ||
2095 | .geMaximized #max-button { | 2095 | .geMaximized #max-button { |
2096 | - display: none; | 2096 | + display: none; |
2097 | } | 2097 | } |
2098 | [draggable="true"] { | 2098 | [draggable="true"] { |
2099 | - transform: translate(0, 0); | ||
2100 | - z-index: 0; | 2099 | + transform: translate(0, 0); |
2100 | + z-index: 0; | ||
2101 | } | 2101 | } |
@@ -125,7 +125,7 @@ export const getDeviceActiveTime = (entityId: string) => { | @@ -125,7 +125,7 @@ export const getDeviceActiveTime = (entityId: string) => { | ||
125 | 125 | ||
126 | // 获取设备详情 | 126 | // 获取设备详情 |
127 | export const getDeviceInfo = (deviceId: string) => { | 127 | export const getDeviceInfo = (deviceId: string) => { |
128 | - return defHttp.get( | 128 | + return defHttp.get<DeviceItemType>( |
129 | { | 129 | { |
130 | url: isShareMode() ? `${Api.GET_DEVICE_DETAIL}public/${deviceId}` : `${Api.GET_DEVICE_DETAIL}${deviceId}`, | 130 | url: isShareMode() ? `${Api.GET_DEVICE_DETAIL}public/${deviceId}` : `${Api.GET_DEVICE_DETAIL}${deviceId}`, |
131 | }, | 131 | }, |
@@ -174,7 +174,7 @@ export interface Unit { | @@ -174,7 +174,7 @@ export interface Unit { | ||
174 | export interface RpcCommandType { | 174 | export interface RpcCommandType { |
175 | additionalInfo: Recordable | 175 | additionalInfo: Recordable |
176 | method: string | 176 | method: string |
177 | - params: Recordable | string | 177 | + params: Recordable | string | number |
178 | persistent: boolean | 178 | persistent: boolean |
179 | } | 179 | } |
180 | 180 |
1 | import type { ThingsModelItemType } from '@/api/device/model' | 1 | import type { ThingsModelItemType } from '@/api/device/model' |
2 | import type { ImageSelectorDataType } from '@/core/Library/components/ImageSelector' | 2 | import type { ImageSelectorDataType } from '@/core/Library/components/ImageSelector' |
3 | import type { CommandWayEnum } from '@/enums/commandEnum' | 3 | import type { CommandWayEnum } from '@/enums/commandEnum' |
4 | -import type { ActTypeEnum, AggregateTypeEnum, CommandDeliveryWayEnum, DeviceTypeEnum, EventActionTypeEnum, EventTypeEnum, SocketSubscriberEnum, TransportTypeEnum } from '@/enums/datasource' | 4 | +import type { ActRangListItemTypeEnum, ActTypeEnum, AggregateTypeEnum, CommandDeliveryWayEnum, DeviceTypeEnum, EventActionTypeEnum, EventTypeEnum, SocketSubscriberEnum, TransportTypeEnum } from '@/enums/datasource' |
5 | 5 | ||
6 | export enum DeleteNodeDataTypeEnum { | 6 | export enum DeleteNodeDataTypeEnum { |
7 | DATASOURCE = 'DATASOURCE', | 7 | DATASOURCE = 'DATASOURCE', |
@@ -145,7 +145,8 @@ export interface SingleClickEventDataType extends DoubleClickEventDataType { } | @@ -145,7 +145,8 @@ export interface SingleClickEventDataType extends DoubleClickEventDataType { } | ||
145 | 145 | ||
146 | export interface OperationPasswordDataType { | 146 | export interface OperationPasswordDataType { |
147 | checked: boolean | 147 | checked: boolean |
148 | - pawssword?: string | 148 | + value?: string |
149 | + label: string | ||
149 | } | 150 | } |
150 | 151 | ||
151 | export interface NodeDataEventJsonType { | 152 | export interface NodeDataEventJsonType { |
@@ -157,7 +158,7 @@ export interface NodeDataEventJsonType { | @@ -157,7 +158,7 @@ export interface NodeDataEventJsonType { | ||
157 | } | 158 | } |
158 | 159 | ||
159 | export interface RangeItemType { | 160 | export interface RangeItemType { |
160 | - type?: string | 161 | + type?: ActRangListItemTypeEnum |
161 | min?: number | 162 | min?: number |
162 | max?: number | 163 | max?: number |
163 | statusValue?: number | 164 | statusValue?: number |
@@ -85,9 +85,9 @@ | @@ -85,9 +85,9 @@ | ||
85 | 85 | ||
86 | } | 86 | } |
87 | 87 | ||
88 | -.ant-modal-confirm .ant-modal-body { | ||
89 | - padding: 24px !important; | ||
90 | -} | 88 | +// .ant-modal-confirm .ant-modal-body { |
89 | + // padding: 24px !important; | ||
90 | +// } | ||
91 | 91 | ||
92 | @media screen and (max-height: 600px) { | 92 | @media screen and (max-height: 600px) { |
93 | .ant-modal { | 93 | .ant-modal { |
1 | +import { ActRangListItemTypeEnum, VariableImageSourceEnum } from '@/enums/datasource' | ||
2 | + | ||
1 | export { default as SingleClickSetting } from './index.vue' | 3 | export { default as SingleClickSetting } from './index.vue' |
4 | + | ||
5 | +export function getInitStatusSettingDefaultValue() { | ||
6 | + return [ | ||
7 | + { | ||
8 | + type: ActRangListItemTypeEnum.OPEN, | ||
9 | + statusValue: 1, | ||
10 | + imageInfo: { | ||
11 | + path: new URL('/public/webapp/images/thingskit/switch-on.svg', import.meta.url).href, | ||
12 | + imageSource: VariableImageSourceEnum.LOCAL, | ||
13 | + libKey: 'light', | ||
14 | + }, | ||
15 | + }, | ||
16 | + { | ||
17 | + type: ActRangListItemTypeEnum.CLOSE, | ||
18 | + statusValue: 0, | ||
19 | + imageInfo: { | ||
20 | + path: new URL('/public/webapp/images/thingskit/switch-off.svg', import.meta.url).href, | ||
21 | + imageSource: VariableImageSourceEnum.LOCAL, | ||
22 | + libKey: 'light', | ||
23 | + }, | ||
24 | + }, | ||
25 | + ] | ||
26 | +} |
@@ -6,10 +6,10 @@ import { isNullOrUnDef } from '@wry-smile/utils-is' | @@ -6,10 +6,10 @@ import { isNullOrUnDef } from '@wry-smile/utils-is' | ||
6 | import type { ComponentExposeType } from '../../..' | 6 | import type { ComponentExposeType } from '../../..' |
7 | import { usePublicFormContext } from '../../../usePublicFormContext' | 7 | import { usePublicFormContext } from '../../../usePublicFormContext' |
8 | import { tableColumns } from './config' | 8 | import { tableColumns } from './config' |
9 | +import { getInitStatusSettingDefaultValue } from '.' | ||
9 | import { BasicTable, useTable } from '@/components/Table' | 10 | import { BasicTable, useTable } from '@/components/Table' |
10 | import { buildUUID } from '@/utils/uuid' | 11 | import { buildUUID } from '@/utils/uuid' |
11 | import { ImageSelector } from '@/core/Library/components/ImageSelector' | 12 | import { ImageSelector } from '@/core/Library/components/ImageSelector' |
12 | -import { ActRangListItemTypeEnum, VariableImageSourceEnum } from '@/enums/datasource' | ||
13 | import type { RangeItemType, StatusActDataType } from '@/api/node/model' | 13 | import type { RangeItemType, StatusActDataType } from '@/api/node/model' |
14 | import { useMessage } from '@/hooks/web/useMessage' | 14 | import { useMessage } from '@/hooks/web/useMessage' |
15 | interface IDataSource extends Partial<RangeItemType> { | 15 | interface IDataSource extends Partial<RangeItemType> { |
@@ -33,28 +33,7 @@ const [registerTable] = useTable({ | @@ -33,28 +33,7 @@ const [registerTable] = useTable({ | ||
33 | const validateTable = ref<boolean>(false) | 33 | const validateTable = ref<boolean>(false) |
34 | 34 | ||
35 | function getInitTableRecord(): IDataSource[] { | 35 | function getInitTableRecord(): IDataSource[] { |
36 | - return [ | ||
37 | - { | ||
38 | - uuid: buildUUID(), | ||
39 | - type: ActRangListItemTypeEnum.OPEN, | ||
40 | - statusValue: 1, | ||
41 | - imageInfo: { | ||
42 | - path: new URL('/public/webapp/images/thingskit/switch-on.svg', import.meta.url).href, | ||
43 | - imageSource: VariableImageSourceEnum.LOCAL, | ||
44 | - libKey: 'light', | ||
45 | - }, | ||
46 | - }, | ||
47 | - { | ||
48 | - uuid: buildUUID(), | ||
49 | - type: ActRangListItemTypeEnum.CLOSE, | ||
50 | - statusValue: 0, | ||
51 | - imageInfo: { | ||
52 | - path: new URL('/public/webapp/images/thingskit/switch-off.svg', import.meta.url).href, | ||
53 | - imageSource: VariableImageSourceEnum.LOCAL, | ||
54 | - libKey: 'light', | ||
55 | - }, | ||
56 | - }, | ||
57 | - ] | 36 | + return getInitStatusSettingDefaultValue().map(item => ({ ...item, uuid: buildUUID() })) |
58 | } | 37 | } |
59 | 38 | ||
60 | const getFieldsValue = () => { | 39 | const getFieldsValue = () => { |
@@ -87,7 +66,7 @@ const validate = async () => { | @@ -87,7 +66,7 @@ const validate = async () => { | ||
87 | const { dataSourceJson } = unref(getNodeData)! | 66 | const { dataSourceJson } = unref(getNodeData)! |
88 | const { deviceId, attr } = dataSourceJson || {} | 67 | const { deviceId, attr } = dataSourceJson || {} |
89 | if (!(deviceId || attr)) { | 68 | if (!(deviceId || attr)) { |
90 | - createMessage.warning('请绑定数据源~') | 69 | + createMessage.warning('请绑定数据源') |
91 | return Promise.reject(new Error('请绑定数据源')) | 70 | return Promise.reject(new Error('请绑定数据源')) |
92 | } | 71 | } |
93 | 72 |
@@ -10,18 +10,21 @@ import { usePublicFormContext } from '../../usePublicFormContext' | @@ -10,18 +10,21 @@ import { usePublicFormContext } from '../../usePublicFormContext' | ||
10 | import type { DynamicEffectItemType } from './config' | 10 | import type { DynamicEffectItemType } from './config' |
11 | import { getDynamicEffectItem as getEffectItem } from './config' | 11 | import { getDynamicEffectItem as getEffectItem } from './config' |
12 | import { useModal } from '@/components/Modal' | 12 | import { useModal } from '@/components/Modal' |
13 | -import type { ActTypeEnum } from '@/enums/datasource' | 13 | +import { ActTypeEnum } from '@/enums/datasource' |
14 | +import { ControlComponentEnum } from '@/core/Library/packages/Control' | ||
14 | 15 | ||
15 | const props = defineProps<{ | 16 | const props = defineProps<{ |
16 | formSetting?: PublicFormSettingType | 17 | formSetting?: PublicFormSettingType |
17 | beforeClick: () => Promise<any> | 18 | beforeClick: () => Promise<any> |
18 | }>() | 19 | }>() |
19 | 20 | ||
21 | +const { getCellInfo } = usePublicFormContext() | ||
22 | + | ||
20 | const [register, { openModal }] = useModal() | 23 | const [register, { openModal }] = useModal() |
21 | 24 | ||
22 | const getEffectItemSetting = computed(() => getEffectItem(props.formSetting)) | 25 | const getEffectItemSetting = computed(() => getEffectItem(props.formSetting)) |
23 | 26 | ||
24 | -const checkStatus = reactive<Partial<Record<ActTypeEnum, boolean>>>(unref(getEffectItemSetting).map(item => item.key).reduce((prev, next) => ({ ...prev, [next]: false }), {} as Partial<Record<ActTypeEnum, boolean>>)) | 27 | +const checkStatus = reactive<Partial<Record<ActTypeEnum, boolean>>>(unref(getEffectItemSetting).map(item => item.key).reduce((prev, next) => ({ ...prev, [next]: next === ActTypeEnum.STATUS_SETTING }), {} as Partial<Record<ActTypeEnum, boolean>>)) |
25 | 28 | ||
26 | const { getNodeData } = usePublicFormContext() | 29 | const { getNodeData } = usePublicFormContext() |
27 | 30 | ||
@@ -44,7 +47,7 @@ const setFieldsValue = (record: Partial<Record<ActTypeEnum, boolean>>) => { | @@ -44,7 +47,7 @@ const setFieldsValue = (record: Partial<Record<ActTypeEnum, boolean>>) => { | ||
44 | 47 | ||
45 | const getDisabledStatus = (key: ActTypeEnum) => { | 48 | const getDisabledStatus = (key: ActTypeEnum) => { |
46 | const data = unref(getNodeData)?.actJson[key] | 49 | const data = unref(getNodeData)?.actJson[key] |
47 | - return !data | 50 | + return unref(getCellInfo).componentKey === ControlComponentEnum.SWITCH || !data |
48 | } | 51 | } |
49 | 52 | ||
50 | defineExpose<ComponentExposeType>({ | 53 | defineExpose<ComponentExposeType>({ |
1 | +<script setup lang="ts"> | ||
2 | +import { Modal } from 'ant-design-vue' | ||
3 | +import { nextTick, ref, unref } from 'vue' | ||
4 | +import type { FormSchema } from '@/components/Form' | ||
5 | +import { BasicForm, useForm } from '@/components/Form' | ||
6 | +import { ComponentEnum, FormLayoutEnum } from '@/components/Form/src/enum' | ||
7 | + | ||
8 | +const resolveFn = ref<Fn>() | ||
9 | + | ||
10 | +const visible = ref(false) | ||
11 | + | ||
12 | +const password = ref() | ||
13 | + | ||
14 | +const [register, { getFieldsValue, resetFields, validate, setProps }] = useForm({ | ||
15 | + layout: FormLayoutEnum.VERTICAL, | ||
16 | + showActionButtonGroup: false, | ||
17 | +}) | ||
18 | + | ||
19 | +enum FormFieldsEnum { | ||
20 | + ATTR_VALUE = 'attrValue', | ||
21 | + PASSWORD = 'password', | ||
22 | +} | ||
23 | + | ||
24 | +const createFormSchemas = (title?: string, password?: string): FormSchema[] => { | ||
25 | + const schemas: FormSchema[] = [ | ||
26 | + { | ||
27 | + field: FormFieldsEnum.ATTR_VALUE, | ||
28 | + label: title || '属性值', | ||
29 | + component: ComponentEnum.INPUT, | ||
30 | + required: true, | ||
31 | + }, | ||
32 | + ] | ||
33 | + | ||
34 | + if (password) { | ||
35 | + schemas.unshift({ | ||
36 | + field: FormFieldsEnum.PASSWORD, | ||
37 | + label: '操作密码', | ||
38 | + component: ComponentEnum.INPUT_PAWSSWORD, | ||
39 | + required: true, | ||
40 | + rules: [ | ||
41 | + { | ||
42 | + validator(_rule, value) { | ||
43 | + if (value !== password) return Promise.reject(new Error('操作密码不正确')) | ||
44 | + return Promise.resolve() | ||
45 | + }, | ||
46 | + }, | ||
47 | + ], | ||
48 | + }) | ||
49 | + } | ||
50 | + | ||
51 | + return schemas | ||
52 | +} | ||
53 | + | ||
54 | +const open = async ({ title, operationPassword }: Partial<Record<'operationPassword' | 'title', string>>) => { | ||
55 | + visible.value = true | ||
56 | + password.value = operationPassword | ||
57 | + return new Promise((resolve) => { | ||
58 | + resolveFn.value = resolve | ||
59 | + nextTick(() => { | ||
60 | + setProps({ schemas: createFormSchemas(title, operationPassword) }) | ||
61 | + }) | ||
62 | + }) | ||
63 | +} | ||
64 | + | ||
65 | +const handleOk = async () => { | ||
66 | + await validate() | ||
67 | + const value = getFieldsValue() | ||
68 | + unref(resolveFn)?.(value[FormFieldsEnum.ATTR_VALUE]) | ||
69 | + visible.value = false | ||
70 | + resetFields() | ||
71 | +} | ||
72 | + | ||
73 | +defineExpose({ open }) | ||
74 | +</script> | ||
75 | + | ||
76 | +<template> | ||
77 | + <Modal v-model:open="visible" title="属性下发" ok-text="确认" :width="400" cancel-text="取消" @ok="handleOk"> | ||
78 | + <!-- <section> | ||
79 | + <FormItem label="操作密码" :label-col="{ span: 24 }"> | ||
80 | + <Input v-model:value="value" placeholder="请输入下发值" /> | ||
81 | + </FormItem> | ||
82 | + <FormItem :label="fieldTitle" :label-col="{ span: 24 }"> | ||
83 | + <Input v-model:value="value" placeholder="请输入下发值" /> | ||
84 | + </FormItem> | ||
85 | + </section> --> | ||
86 | + | ||
87 | + <BasicForm @register="register" /> | ||
88 | + </Modal> | ||
89 | +</template> |
1 | +<script setup lang="ts"> | ||
2 | +import { Modal } from 'ant-design-vue' | ||
3 | +import { nextTick, ref, unref } from 'vue' | ||
4 | +import { BasicForm, type FormSchema, useForm } from '@/components/Form' | ||
5 | +import { ComponentEnum, FormLayoutEnum } from '@/components/Form/src/enum' | ||
6 | + | ||
7 | +const resolveFn = ref<Fn>() | ||
8 | + | ||
9 | +const visible = ref(false) | ||
10 | + | ||
11 | +const [register, { resetFields, validate, setProps }] = useForm({ | ||
12 | + showActionButtonGroup: false, | ||
13 | + layout: FormLayoutEnum.VERTICAL, | ||
14 | +}) | ||
15 | + | ||
16 | +const createFormSchemas = (password: string): FormSchema[] => { | ||
17 | + return [ | ||
18 | + { | ||
19 | + field: 'password', | ||
20 | + component: ComponentEnum.INPUT_PAWSSWORD, | ||
21 | + label: '', | ||
22 | + required: true, | ||
23 | + rules: [{ | ||
24 | + validator(_rule, value) { | ||
25 | + if (value !== password) return Promise.reject(new Error('操作密码不正确')) | ||
26 | + return Promise.resolve() | ||
27 | + }, | ||
28 | + }], | ||
29 | + componentProps: { | ||
30 | + placeholder: '请输入操作密码', | ||
31 | + }, | ||
32 | + }, | ||
33 | + ] | ||
34 | +} | ||
35 | + | ||
36 | +const open = async (pwd: string) => { | ||
37 | + visible.value = true | ||
38 | + return new Promise((resolve) => { | ||
39 | + resolveFn.value = resolve | ||
40 | + | ||
41 | + nextTick(() => { | ||
42 | + setProps({ schemas: createFormSchemas(pwd) }) | ||
43 | + }) | ||
44 | + }) | ||
45 | +} | ||
46 | + | ||
47 | +const handlerOk = async () => { | ||
48 | + await validate() | ||
49 | + unref(resolveFn)?.(true) | ||
50 | + resetFields() | ||
51 | + visible.value = false | ||
52 | +} | ||
53 | + | ||
54 | +defineExpose({ open }) | ||
55 | +</script> | ||
56 | + | ||
57 | +<template> | ||
58 | + <Modal | ||
59 | + v-model:open="visible" :width="300" ok-text="确认" cancel-text="取消" | ||
60 | + title="操作密码" | ||
61 | + @ok="handlerOk" | ||
62 | + > | ||
63 | + <BasicForm @register="register" /> | ||
64 | + </Modal> | ||
65 | +</template> |
src/core/Library/components/PublicForm/components/DataEvents/CommandDeliveryModal/ConfirmModal.vue
0 → 100644
1 | +<script setup lang="ts"> | ||
2 | +import { Icon } from '@iconify/vue' | ||
3 | +import { Modal } from 'ant-design-vue' | ||
4 | +import { ref, unref } from 'vue' | ||
5 | + | ||
6 | +const visible = ref(false) | ||
7 | + | ||
8 | +const resolveFn = ref<Fn>() | ||
9 | + | ||
10 | +const rejectFn = ref<Fn>() | ||
11 | + | ||
12 | +const open = async () => { | ||
13 | + visible.value = true | ||
14 | + return new Promise((resolve, reject) => { | ||
15 | + resolveFn.value = resolve | ||
16 | + rejectFn.value = reject | ||
17 | + }) | ||
18 | +} | ||
19 | + | ||
20 | +const handleOk = () => { | ||
21 | + unref(resolveFn)?.() | ||
22 | + visible.value = false | ||
23 | +} | ||
24 | + | ||
25 | +const handleCancel = () => { | ||
26 | + unref(rejectFn)?.() | ||
27 | + visible.value = false | ||
28 | +} | ||
29 | + | ||
30 | +defineExpose({ open }) | ||
31 | +</script> | ||
32 | + | ||
33 | +<template> | ||
34 | + <Modal v-model:open="visible" :width="400" ok-text="确认" cancel-text="取消" @ok="handleOk" @cancel="handleCancel"> | ||
35 | + <template #title> | ||
36 | + <div class="flex"> | ||
37 | + <span><Icon icon="ant-design:exclamation-circle-filled" class="text-yellow-300 text-xl" /></span> | ||
38 | + <span class="font-bold ml-2">提示</span> | ||
39 | + </div> | ||
40 | + </template> | ||
41 | + <div class="ml-5"> | ||
42 | + 是否确认此操作? | ||
43 | + </div> | ||
44 | + </Modal> | ||
45 | +</template> |
1 | export { default as CommandDeliveryModal } from './index.vue' | 1 | export { default as CommandDeliveryModal } from './index.vue' |
2 | +export { default as CommandDeliveryConfirmModal } from './CommandDeliveryConfirmModal.vue' | ||
3 | +export { default as ConfirmModal } from './ConfirmModal.vue' | ||
4 | +export { default as AttributeDeliverModal } from './AttributeDeliverModal.vue' |
@@ -91,7 +91,6 @@ const getDeviceDetail = async (deviceId: string) => { | @@ -91,7 +91,6 @@ const getDeviceDetail = async (deviceId: string) => { | ||
91 | } | 91 | } |
92 | 92 | ||
93 | const open = async (_data: SingleClickEventDataType) => { | 93 | const open = async (_data: SingleClickEventDataType) => { |
94 | - console.warn(_data, 'data') | ||
95 | const { operationPassword } = _data || {} | 94 | const { operationPassword } = _data || {} |
96 | dataSourceJson.value = _data.deviceInfo | 95 | dataSourceJson.value = _data.deviceInfo |
97 | isPasswordInfo.value = operationPassword || {} | 96 | isPasswordInfo.value = operationPassword || {} |
1 | import { unref } from 'vue' | 1 | import { unref } from 'vue' |
2 | +import type { DefaultOptionType } from 'ant-design-vue/es/select' | ||
2 | import { usePublicFormContext } from '../../../usePublicFormContext' | 3 | import { usePublicFormContext } from '../../../usePublicFormContext' |
3 | import { getThingsModelServices } from '@/api/device' | 4 | import { getThingsModelServices } from '@/api/device' |
4 | import { type FormSchema } from '@/components/Form' | 5 | import { type FormSchema } from '@/components/Form' |
@@ -64,14 +65,14 @@ export const getFormSchemas = (event: EventTypeEnum): FormSchema[] => { | @@ -64,14 +65,14 @@ export const getFormSchemas = (event: EventTypeEnum): FormSchema[] => { | ||
64 | defaultValue: EventActionTypeEnum.OPEN_LINK, | 65 | defaultValue: EventActionTypeEnum.OPEN_LINK, |
65 | required: true, | 66 | required: true, |
66 | componentProps: ({ formActionType }) => { | 67 | componentProps: ({ formActionType }) => { |
67 | - const options = [ | ||
68 | - { label: EventActionTypeNameEnum.OPEN_LINK, value: EventActionTypeEnum.OPEN_LINK, disbaled: false }, | ||
69 | - { label: EventActionTypeNameEnum.OPEN_PAGE, value: EventActionTypeEnum.OPEN_PAGE, disbaled: false }, | 68 | + const options: DefaultOptionType[] = [ |
69 | + { label: EventActionTypeNameEnum.OPEN_LINK, value: EventActionTypeEnum.OPEN_LINK }, | ||
70 | + { label: EventActionTypeNameEnum.OPEN_PAGE, value: EventActionTypeEnum.OPEN_PAGE }, | ||
70 | 71 | ||
71 | - ] as any | 72 | + ] |
72 | 73 | ||
73 | if (unref(getCellInfo).category.toUpperCase() === PackageCategoryEnum.CONTROL) | 74 | if (unref(getCellInfo).category.toUpperCase() === PackageCategoryEnum.CONTROL) |
74 | - options.push({ label: EventActionTypeNameEnum.PARAMS_SETTING, value: EventActionTypeEnum.PARAMS_SETTING, disabled: !deviceProfileId }) | 75 | + options.push({ label: EventActionTypeNameEnum.PARAMS_SETTING, value: EventActionTypeEnum.PARAMS_SETTING, disabled: !deviceProfileId }, { label: EventActionTypeNameEnum.ATTRIBUTE_DELIVERY, value: EventActionTypeEnum.ATTRIBUTE_DELIVERY }) |
75 | 76 | ||
76 | return { | 77 | return { |
77 | options, | 78 | options, |
@@ -169,7 +170,7 @@ export const getFormSchemas = (event: EventTypeEnum): FormSchema[] => { | @@ -169,7 +170,7 @@ export const getFormSchemas = (event: EventTypeEnum): FormSchema[] => { | ||
169 | label: FormFieldsNameEnum.WAY, | 170 | label: FormFieldsNameEnum.WAY, |
170 | component: ComponentEnum.RADIO_GROUP, | 171 | component: ComponentEnum.RADIO_GROUP, |
171 | required: true, | 172 | required: true, |
172 | - ifShow: ({ model }) => transportType !== TransportTypeEnum.TCP && model[FormFieldsEnum.ACTION_TYPE] === EventActionTypeEnum.PARAMS_SETTING && model[FormFieldsEnum.COMMAND_WAY] === CommandDeliveryWayEnum.CUSTOM, | 173 | + ifShow: ({ model }) => (transportType !== TransportTypeEnum.TCP && model[FormFieldsEnum.ACTION_TYPE] === EventActionTypeEnum.PARAMS_SETTING && model[FormFieldsEnum.COMMAND_WAY] === CommandDeliveryWayEnum.CUSTOM) || model[FormFieldsEnum.ACTION_TYPE] === EventActionTypeEnum.ATTRIBUTE_DELIVERY, |
173 | defaultValue: CommandWayEnum.ONE_WAY, | 174 | defaultValue: CommandWayEnum.ONE_WAY, |
174 | componentProps: () => { | 175 | componentProps: () => { |
175 | return { | 176 | return { |
@@ -4,10 +4,12 @@ import { computed, onMounted, reactive, ref, toRaw, unref } from 'vue' | @@ -4,10 +4,12 @@ import { computed, onMounted, reactive, ref, toRaw, unref } from 'vue' | ||
4 | import { useNodeData } from '../../hook/useNodeData' | 4 | import { useNodeData } from '../../hook/useNodeData' |
5 | import type { ConfigComponentProps } from '../../types' | 5 | import type { ConfigComponentProps } from '../../types' |
6 | import { useSavePageContent } from '../../hook/useSavePageContent' | 6 | import { useSavePageContent } from '../../hook/useSavePageContent' |
7 | +import { ControlComponentEnum } from '../../packages/Control' | ||
7 | import { DataSourceForm } from './components/DataSourceForm' | 8 | import { DataSourceForm } from './components/DataSourceForm' |
8 | import { DataEffects } from './components/DataEffects' | 9 | import { DataEffects } from './components/DataEffects' |
9 | import { DataEvents } from './components/DataEvents' | 10 | import { DataEvents } from './components/DataEvents' |
10 | import { createPublicFormContext } from './usePublicFormContext' | 11 | import { createPublicFormContext } from './usePublicFormContext' |
12 | +import { getInitStatusSettingDefaultValue } from './components/DataEffects/StatusSetting' | ||
11 | import type { ActTypeEnum, EventTypeEnum } from '@/enums/datasource' | 13 | import type { ActTypeEnum, EventTypeEnum } from '@/enums/datasource' |
12 | import { useMessage } from '@/hooks/web/useMessage' | 14 | import { useMessage } from '@/hooks/web/useMessage' |
13 | import type { NodeDataActJsonType, NodeDataEventJsonType } from '@/api/node/model' | 15 | import type { NodeDataActJsonType, NodeDataEventJsonType } from '@/api/node/model' |
@@ -64,11 +66,18 @@ const getEventJson = (): NodeDataEventJsonType => { | @@ -64,11 +66,18 @@ const getEventJson = (): NodeDataEventJsonType => { | ||
64 | const getActJson = (): NodeDataActJsonType => { | 66 | const getActJson = (): NodeDataActJsonType => { |
65 | const { actJson } = toRaw(unref(getNodeData)) || {} | 67 | const { actJson } = toRaw(unref(getNodeData)) || {} |
66 | 68 | ||
67 | - if (!actJson) return {} as any | 69 | + if (!actJson) return {} as NodeDataActJsonType |
70 | + | ||
71 | + if (unref(getCellInfo).componentKey === ControlComponentEnum.SWITCH && !actJson.STATUS_SETTING) { | ||
72 | + actJson.STATUS_SETTING = { | ||
73 | + enable: true, | ||
74 | + rangeList: getInitStatusSettingDefaultValue(), | ||
75 | + } | ||
76 | + } | ||
68 | 77 | ||
69 | const status = unref(dataActElRef)?.getFieldsValue() as Record<ActTypeEnum, boolean> | 78 | const status = unref(dataActElRef)?.getFieldsValue() as Record<ActTypeEnum, boolean> |
70 | 79 | ||
71 | - if (!status) return {} as any | 80 | + if (!status) return {} as NodeDataActJsonType |
72 | 81 | ||
73 | Object.keys(status).forEach((key) => { | 82 | Object.keys(status).forEach((key) => { |
74 | if (actJson[key as ActTypeEnum]) | 83 | if (actJson[key as ActTypeEnum]) |
@@ -103,7 +112,7 @@ const handleSave = async () => { | @@ -103,7 +112,7 @@ const handleSave = async () => { | ||
103 | if (contentDataStore.getIsTemplate)// 判断组态是不是模板 | 112 | if (contentDataStore.getIsTemplate)// 判断组态是不是模板 |
104 | dataSourceJson = { ...value, deviceProfileId: value?.deviceProfileTemplateId, deviceId: null } | 113 | dataSourceJson = { ...value, deviceProfileId: value?.deviceProfileTemplateId, deviceId: null } |
105 | await saveNodeAllData({ dataSourceJson, eventJson: { ...eventJson, OPERATION_PASSWORD: unref(getCellInfo).category === PackageCategoryEnum.CONTROL ? operationPassword : undefined }, actJson }) | 114 | await saveNodeAllData({ dataSourceJson, eventJson: { ...eventJson, OPERATION_PASSWORD: unref(getCellInfo).category === PackageCategoryEnum.CONTROL ? operationPassword : undefined }, actJson }) |
106 | - createMessage.success('操作成功~') | 115 | + createMessage.success('操作成功') |
107 | savePageContent() | 116 | savePageContent() |
108 | } | 117 | } |
109 | finally { | 118 | finally { |
@@ -159,14 +168,20 @@ createPublicFormContext(nodeDataActinType) | @@ -159,14 +168,20 @@ createPublicFormContext(nodeDataActinType) | ||
159 | <Divider orientation="left"> | 168 | <Divider orientation="left"> |
160 | 数据源 | 169 | 数据源 |
161 | </Divider> | 170 | </Divider> |
162 | - <DataSourceForm ref="dataSourceElRef" :component-key="getComponentKey" @field-value-change="handleDataSourceChange" /> | 171 | + <DataSourceForm |
172 | + ref="dataSourceElRef" :component-key="getComponentKey" | ||
173 | + @field-value-change="handleDataSourceChange" | ||
174 | + /> | ||
163 | </div> | 175 | </div> |
164 | <div v-if="getFormSetting && getFormSetting.eventSetting !== false"> | 176 | <div v-if="getFormSetting && getFormSetting.eventSetting !== false"> |
165 | <Divider orientation="left"> | 177 | <Divider orientation="left"> |
166 | 数据交互 | 178 | 数据交互 |
167 | </Divider> | 179 | </Divider> |
168 | <DataEvents ref="dataEventsElRef" :before-click="handleBeforeOpenEventOrActModal" :form-setting="getFormSetting" /> | 180 | <DataEvents ref="dataEventsElRef" :before-click="handleBeforeOpenEventOrActModal" :form-setting="getFormSetting" /> |
169 | - <div v-if="getCellInfo.category === PackageCategoryEnum.CONTROL" class="flex flex-col justify-center passwordInput" :class="getFormSetting?.actSetting === false && 'mb-4'"> | 181 | + <div |
182 | + v-if="getCellInfo.category === PackageCategoryEnum.CONTROL" class="flex flex-col justify-center passwordInput" | ||
183 | + :class="getFormSetting?.actSetting === false && 'mb-4'" | ||
184 | + > | ||
170 | <Checkbox v-model:checked="operationPassword.checked" :disabled="getSetPasswordStatus"> | 185 | <Checkbox v-model:checked="operationPassword.checked" :disabled="getSetPasswordStatus"> |
171 | <div class="flex"> | 186 | <div class="flex"> |
172 | {{ operationPassword.label }} | 187 | {{ operationPassword.label }} |
@@ -175,7 +190,10 @@ createPublicFormContext(nodeDataActinType) | @@ -175,7 +190,10 @@ createPublicFormContext(nodeDataActinType) | ||
175 | </Checkbox> | 190 | </Checkbox> |
176 | <Form> | 191 | <Form> |
177 | <FormItem :validate-status="getValidateStatus(operationPassword.value)"> | 192 | <FormItem :validate-status="getValidateStatus(operationPassword.value)"> |
178 | - <InputPassword v-model:value="operationPassword.value" class="mt-1" :disabled="!operationPassword.checked" placeholder="请输入操作密码" /> | 193 | + <InputPassword |
194 | + v-model:value="operationPassword.value" class="mt-1" :disabled="!operationPassword.checked" | ||
195 | + placeholder="请输入操作密码" | ||
196 | + /> | ||
179 | </FormItem> | 197 | </FormItem> |
180 | </Form> | 198 | </Form> |
181 | </div> | 199 | </div> |
@@ -200,9 +218,10 @@ createPublicFormContext(nodeDataActinType) | @@ -200,9 +218,10 @@ createPublicFormContext(nodeDataActinType) | ||
200 | @apply text-sm; | 218 | @apply text-sm; |
201 | } | 219 | } |
202 | } | 220 | } |
203 | -.passwordInput{ | ||
204 | - :deep(.ant-form-item){ | ||
205 | - margin:0 !important | 221 | + |
222 | +.passwordInput { | ||
223 | + :deep(.ant-form-item) { | ||
224 | + margin: 0 !important | ||
206 | } | 225 | } |
207 | } | 226 | } |
208 | </style> | 227 | </style> |
1 | import { h, render } from 'vue' | 1 | import { h, render } from 'vue' |
2 | -import { doCommandDelivery, getDeviceActive } from '@/api/device' | 2 | +import { ControlComponentEnum } from '../packages/Control' |
3 | +import { doCommandDelivery, getDeviceActive, getDeviceInfo } from '@/api/device' | ||
3 | import type { MouseUpEventDataType, NodeDataDataSourceJsonType, NodeDataEventJsonType, SingleClickEventDataType } from '@/api/node/model' | 4 | import type { MouseUpEventDataType, NodeDataDataSourceJsonType, NodeDataEventJsonType, SingleClickEventDataType } from '@/api/node/model' |
4 | import { CommandWayEnum } from '@/enums/commandEnum' | 5 | import { CommandWayEnum } from '@/enums/commandEnum' |
5 | -import { EventActionTypeEnum } from '@/enums/datasource' | 6 | +import { ActRangListItemTypeEnum, EventActionTypeEnum, TransportTypeEnum } from '@/enums/datasource' |
6 | import { useMessage } from '@/hooks/web/useMessage' | 7 | import { useMessage } from '@/hooks/web/useMessage' |
7 | -import { CommandDeliveryModal } from '@/core/Library/components/PublicForm/components/DataEvents/CommandDeliveryModal' | 8 | +import { AttributeDeliverModal, CommandDeliveryConfirmModal, CommandDeliveryModal, ConfirmModal } from '@/core/Library/components/PublicForm/components/DataEvents/CommandDeliveryModal' |
9 | +import type { MxCell } from '@/fitCore/types' | ||
10 | +import { NodeUtils } from '@/hooks/business/useNodeUtils' | ||
11 | +import { useContentDataStoreWithOut } from '@/store/modules/contentData' | ||
12 | +import type { RpcCommandType } from '@/api/device/model' | ||
8 | 13 | ||
9 | -export function useNodeEvent(eventJson: NodeDataEventJsonType, dataSourceJson: NodeDataDataSourceJsonType) { | 14 | +export function useNodeEvent(eventJson: NodeDataEventJsonType, dataSourceJson: NodeDataDataSourceJsonType, cell: MxCell) { |
10 | const { createMessage } = useMessage() | 15 | const { createMessage } = useMessage() |
11 | 16 | ||
12 | const handlerCommandDelivery = async (data: MouseUpEventDataType) => { | 17 | const handlerCommandDelivery = async (data: MouseUpEventDataType) => { |
@@ -34,7 +39,7 @@ export function useNodeEvent(eventJson: NodeDataEventJsonType, dataSourceJson: N | @@ -34,7 +39,7 @@ export function useNodeEvent(eventJson: NodeDataEventJsonType, dataSourceJson: N | ||
34 | persistent: true, | 39 | persistent: true, |
35 | }, | 40 | }, |
36 | }) | 41 | }) |
37 | - createMessage.success('下发成功~') | 42 | + createMessage.success('下发成功') |
38 | }) | 43 | }) |
39 | } | 44 | } |
40 | 45 | ||
@@ -66,6 +71,65 @@ export function useNodeEvent(eventJson: NodeDataEventJsonType, dataSourceJson: N | @@ -66,6 +71,65 @@ export function useNodeEvent(eventJson: NodeDataEventJsonType, dataSourceJson: N | ||
66 | (instance.component?.exposed as InstanceType<typeof CommandDeliveryModal>)?.open({ ..._data, deviceInfo, operationPassword: eventJson?.OPERATION_PASSWORD }) | 71 | (instance.component?.exposed as InstanceType<typeof CommandDeliveryModal>)?.open({ ..._data, deviceInfo, operationPassword: eventJson?.OPERATION_PASSWORD }) |
67 | } | 72 | } |
68 | 73 | ||
74 | + const handleAttributeDelivery = async (data: SingleClickEventDataType) => { | ||
75 | + try { | ||
76 | + const nodeUtils = new NodeUtils() | ||
77 | + const { way = CommandWayEnum.ONE_WAY } = data | ||
78 | + const { attr, deviceId, attrInfo } = dataSourceJson | ||
79 | + const { transportType, alias, name: deviceName } = await getDeviceInfo(dataSourceJson.deviceId) || {}// 设备信息 | ||
80 | + const contentDataStore = useContentDataStoreWithOut() | ||
81 | + const currentData = contentDataStore.contentData.find(item => item.id === cell.getId()) | ||
82 | + if (!currentData) return | ||
83 | + const { actJson, eventJson } = currentData | ||
84 | + const { value: operationPassword, checked: operationPasswordEnable } = eventJson.OPERATION_PASSWORD | ||
85 | + | ||
86 | + const command: RpcCommandType = { | ||
87 | + additionalInfo: { cmdType: 'API' }, | ||
88 | + method: 'methodThingskit', | ||
89 | + params: {}, | ||
90 | + persistent: true, | ||
91 | + } | ||
92 | + if (nodeUtils.getNodeComponentKey(cell) === ControlComponentEnum.SWITCH) { | ||
93 | + const { rangeList } = actJson.STATUS_SETTING | ||
94 | + const status = cell.getAttribute('SWITCH_STATUS') | ||
95 | + const res = rangeList.find(item => item.type === (status === ActRangListItemTypeEnum.OPEN ? ActRangListItemTypeEnum.CLOSE : ActRangListItemTypeEnum.OPEN)) | ||
96 | + if (!res) return | ||
97 | + const { statusValue } = res | ||
98 | + command.params = transportType === TransportTypeEnum.TCP | ||
99 | + ? statusValue! | ||
100 | + : { | ||
101 | + [attr]: statusValue, | ||
102 | + } | ||
103 | + | ||
104 | + if (operationPasswordEnable) { | ||
105 | + const instance = h(CommandDeliveryConfirmModal) | ||
106 | + render(instance, document.body) | ||
107 | + await (instance.component?.exposed as InstanceType<typeof CommandDeliveryConfirmModal>)?.open(operationPassword) | ||
108 | + } | ||
109 | + else { | ||
110 | + const instance = h(ConfirmModal) | ||
111 | + render(instance, document.body) | ||
112 | + await (instance.component?.exposed as InstanceType<typeof ConfirmModal>)?.open() | ||
113 | + } | ||
114 | + | ||
115 | + await doCommandDelivery({ way, command, deviceId }) | ||
116 | + createMessage.success('命令下发成功') | ||
117 | + } | ||
118 | + else { | ||
119 | + const instance = h(AttributeDeliverModal) | ||
120 | + render(instance, document.body) | ||
121 | + const value = await (instance.component?.exposed as InstanceType<typeof AttributeDeliverModal>)?.open({ title: `${alias || deviceName}-${attrInfo.name}`, operationPassword }) as string | ||
122 | + | ||
123 | + command.params = transportType === TransportTypeEnum.TCP ? value : { [attr]: value } | ||
124 | + await doCommandDelivery({ way, command, deviceId }) | ||
125 | + createMessage.success('命令下发成功') | ||
126 | + } | ||
127 | + } | ||
128 | + catch (error) { | ||
129 | + console.error(error) | ||
130 | + } | ||
131 | + } | ||
132 | + | ||
69 | const handlerMouseClickEvent = (data: SingleClickEventDataType) => { | 133 | const handlerMouseClickEvent = (data: SingleClickEventDataType) => { |
70 | const { actionType, enable } = data | 134 | const { actionType, enable } = data |
71 | if (!enable) return | 135 | if (!enable) return |
@@ -75,6 +139,8 @@ export function useNodeEvent(eventJson: NodeDataEventJsonType, dataSourceJson: N | @@ -75,6 +139,8 @@ export function useNodeEvent(eventJson: NodeDataEventJsonType, dataSourceJson: N | ||
75 | handleSwitchPage(data) | 139 | handleSwitchPage(data) |
76 | else if (actionType === EventActionTypeEnum.PARAMS_SETTING) | 140 | else if (actionType === EventActionTypeEnum.PARAMS_SETTING) |
77 | handleParamsSetting(data) | 141 | handleParamsSetting(data) |
142 | + else if (actionType === EventActionTypeEnum.ATTRIBUTE_DELIVERY) | ||
143 | + handleAttributeDelivery(data) | ||
78 | } | 144 | } |
79 | 145 | ||
80 | const handlerMouseDown = async () => { | 146 | const handlerMouseDown = async () => { |
src/core/Library/hook/useOnEventTrigger.ts
0 → 100644
1 | +import type { RenderComponentExposeType } from '../types' | ||
2 | +import type { DoubleClickEventDataType, MouseDownEventDataType, MouseUpEventDataType, NodeDataType, SingleClickEventDataType } from '@/api/node/model' | ||
3 | +import { EventTypeEnum } from '@/enums/datasource' | ||
4 | + | ||
5 | +interface UseOnEventTriggerParamsType { | ||
6 | + onMouseDown?: (eventData: MouseDownEventDataType, nodeData: NodeDataType) => any | ||
7 | + onMouseUp?: (eventData: MouseUpEventDataType, nodeData: NodeDataType) => any | ||
8 | + onClick?: (eventData: SingleClickEventDataType, nodeData: NodeDataType) => any | ||
9 | + onDbClick?: (eventData: DoubleClickEventDataType, nodeData: NodeDataType) => any | ||
10 | +} | ||
11 | +export function useOnEventTrigger(params: UseOnEventTriggerParamsType) { | ||
12 | + const onEventTrigger: RenderComponentExposeType['onEventTrigger'] = (eventName: EventTypeEnum, nodeData: NodeDataType) => { | ||
13 | + if (!nodeData.eventJson[eventName].enable) return | ||
14 | + | ||
15 | + if (eventName === EventTypeEnum.SINGLE) | ||
16 | + params.onClick?.(nodeData.eventJson[eventName], nodeData) | ||
17 | + else if (eventName === EventTypeEnum.DOUBLE) | ||
18 | + params.onDbClick?.(nodeData.eventJson[eventName], nodeData) | ||
19 | + else if (eventName === EventTypeEnum.DOWN) | ||
20 | + params.onMouseDown?.(nodeData.eventJson[eventName], nodeData) | ||
21 | + else if (eventName === EventTypeEnum.UP) | ||
22 | + params.onMouseDown?.(nodeData.eventJson[eventName], nodeData) | ||
23 | + } | ||
24 | + | ||
25 | + return { | ||
26 | + onEventTrigger, | ||
27 | + } | ||
28 | +} |
1 | <script lang="ts" setup> | 1 | <script lang="ts" setup> |
2 | -import { ref } from 'vue' | ||
3 | -import type { RenderComponentExposeType } from '@/core/Library/types' | 2 | +import { computed, ref, unref } from 'vue' |
3 | +import type { RenderComponentExposeType, RenderComponentProps } from '@/core/Library/types' | ||
4 | import { useLatestMessageValue } from '@/core/Library/hook/useLatestMessageValue' | 4 | import { useLatestMessageValue } from '@/core/Library/hook/useLatestMessageValue' |
5 | import { NodeUtils } from '@/hooks/business/useNodeUtils' | 5 | import { NodeUtils } from '@/hooks/business/useNodeUtils' |
6 | -import { getMeetTheConditionsRange } from '@/core/Library/utils' | ||
7 | -import { ActTypeEnum, VariableImageSourceEnum } from '@/enums/datasource' | 6 | +import { VariableImageSourceEnum } from '@/enums/datasource' |
8 | import { useOnMessage } from '@/core/Library/hook/useOnMessage' | 7 | import { useOnMessage } from '@/core/Library/hook/useOnMessage' |
9 | import type { CommandSource } from '@/core/websocket/processor' | 8 | import type { CommandSource } from '@/core/websocket/processor' |
10 | import type { SubscriptionUpdateMsg } from '@/core/websocket/type/message' | 9 | import type { SubscriptionUpdateMsg } from '@/core/websocket/type/message' |
11 | -import type { StatusActDataType } from '@/api/node/model' | 10 | +import { useContentDataStoreWithOut } from '@/store/modules/contentData' |
11 | +const props = defineProps<RenderComponentProps>() | ||
12 | 12 | ||
13 | const imgUrl = ref(new URL('/public/webapp/images/thingskit/switch-on.svg', import.meta.url).href) | 13 | const imgUrl = ref(new URL('/public/webapp/images/thingskit/switch-on.svg', import.meta.url).href) |
14 | 14 | ||
15 | const isNonstandard = ref(false) | 15 | const isNonstandard = ref(false) |
16 | -const onReceiveActMessage = (commandSource: CommandSource, message: SubscriptionUpdateMsg) => { | ||
17 | - const { node, type, data } = commandSource | ||
18 | 16 | ||
19 | - if (type !== ActTypeEnum.STATUS_SETTING) return | 17 | +const contentDataStore = useContentDataStoreWithOut() |
18 | +const getCurrentData = computed(() => contentDataStore.getCurrentNodeDataById(props.config)) | ||
20 | 19 | ||
20 | +const onReceiveDataSourceMessage = (_commandSource: CommandSource, message: SubscriptionUpdateMsg) => { | ||
21 | + const { id: node, actJson, dataSourceJson } = unref(getCurrentData)! | ||
22 | + const { attr } = dataSourceJson | ||
23 | + const { rangeList } = actJson.STATUS_SETTING | ||
21 | const nodeUtils = new NodeUtils() | 24 | const nodeUtils = new NodeUtils() |
22 | const cell = nodeUtils.getCellById(node) | 25 | const cell = nodeUtils.getCellById(node) |
23 | if (!cell) return | 26 | if (!cell) return |
24 | - const { attr, rangeList } = data as StatusActDataType | ||
25 | - const { latestValue } = useLatestMessageValue(message.data, attr) | ||
26 | - const { flag, record } = getMeetTheConditionsRange(rangeList.map(item => ({ ...item, max: item.statusValue, min: item.statusValue })), latestValue) | 27 | + const { latestValue } = useLatestMessageValue(message.data, attr!) |
28 | + const flag = rangeList.find(item => item.statusValue?.toString() === latestValue?.toString()) | ||
29 | + | ||
27 | if (flag) { | 30 | if (flag) { |
28 | isNonstandard.value = false | 31 | isNonstandard.value = false |
29 | - const { imageInfo } = record! | 32 | + const { imageInfo, type } = flag! |
30 | const { path, imageSource, libPath } = imageInfo || {} | 33 | const { path, imageSource, libPath } = imageInfo || {} |
31 | imgUrl.value = imageSource === VariableImageSourceEnum.GALLERY ? libPath! : path! | 34 | imgUrl.value = imageSource === VariableImageSourceEnum.GALLERY ? libPath! : path! |
35 | + if (!cell) return | ||
36 | + cell.setAttribute('SWITCH_STATUS', type!) | ||
32 | } | 37 | } |
33 | else { | 38 | else { |
34 | isNonstandard.value = true | 39 | isNonstandard.value = true |
35 | } | 40 | } |
36 | } | 41 | } |
37 | 42 | ||
38 | -const { onMessage } = useOnMessage({ onReceiveActMessage }) | 43 | +const { onMessage } = useOnMessage({ onReceiveDataSourceMessage }) |
39 | 44 | ||
40 | defineExpose<RenderComponentExposeType>({ | 45 | defineExpose<RenderComponentExposeType>({ |
41 | onMessage, | 46 | onMessage, |
@@ -6,6 +6,7 @@ import type { CommandSource, LightboxModeWebsocketService } from '@/core/websock | @@ -6,6 +6,7 @@ import type { CommandSource, LightboxModeWebsocketService } from '@/core/websock | ||
6 | import type { SubscriptionUpdateMsg } from '@/core/websocket/type/message' | 6 | import type { SubscriptionUpdateMsg } from '@/core/websocket/type/message' |
7 | import type { TelemetrySubscriber } from '@/core/websocket/telemetry' | 7 | import type { TelemetrySubscriber } from '@/core/websocket/telemetry' |
8 | import type { NodeDataType } from '@/api/node/model' | 8 | import type { NodeDataType } from '@/api/node/model' |
9 | +import type { EventTypeEnum } from '@/enums/datasource' | ||
9 | 10 | ||
10 | export interface FetchComponentFileType { | 11 | export interface FetchComponentFileType { |
11 | key: string | 12 | key: string |
@@ -107,5 +108,6 @@ export interface ConfigPresetOptionsType { | @@ -107,5 +108,6 @@ export interface ConfigPresetOptionsType { | ||
107 | } | 108 | } |
108 | 109 | ||
109 | export interface RenderComponentExposeType { | 110 | export interface RenderComponentExposeType { |
110 | - onMessage(commandSource: CommandSource, message: SubscriptionUpdateMsg): void | 111 | + onMessage?(commandSource: CommandSource, message: SubscriptionUpdateMsg): void |
112 | + onEventTrigger?(eventName: EventTypeEnum, nodeData: NodeDataType): void | ||
111 | } | 113 | } |
1 | +import type { App } from 'vue' | ||
1 | import type { LightboxModeWebsocketService } from '.' | 2 | import type { LightboxModeWebsocketService } from '.' |
3 | +import type { RenderComponentExposeType } from '@/core/Library/types' | ||
2 | import { useNodeEvent } from '@/core/Library/hook/useNodeEvent' | 4 | import { useNodeEvent } from '@/core/Library/hook/useNodeEvent' |
3 | import { EventTypeEnum } from '@/enums/datasource' | 5 | import { EventTypeEnum } from '@/enums/datasource' |
4 | import type { MxState } from '@/fitCore/types' | 6 | import type { MxState } from '@/fitCore/types' |
7 | +import { getAppInstanceId } from '@/utils/draw' | ||
5 | 8 | ||
6 | interface MxEvent { | 9 | interface MxEvent { |
7 | state: MxState | 10 | state: MxState |
@@ -65,8 +68,16 @@ export class EventHandler { | @@ -65,8 +68,16 @@ export class EventHandler { | ||
65 | const id = cell.getId() | 68 | const id = cell.getId() |
66 | 69 | ||
67 | const node = this.service.dataSource.find(item => item.id === id) | 70 | const node = this.service.dataSource.find(item => item.id === id) |
71 | + | ||
68 | if (node && node.eventJson) { | 72 | if (node && node.eventJson) { |
69 | - const { handlerMouseDown, handlerMouseClick, handlerMouseDoubleClick, handlerMouseUp } = useNodeEvent(node.eventJson, node.dataSourceJson) | 73 | + const instanceId = getAppInstanceId(cell) |
74 | + const instance = window?.VueInstanceMap?.[instanceId] as App | ||
75 | + if (instance && (instance._instance?.exposed as RenderComponentExposeType)?.onEventTrigger) { | ||
76 | + (instance._instance?.exposed as RenderComponentExposeType)?.onEventTrigger?.(eventName, node) | ||
77 | + return | ||
78 | + } | ||
79 | + | ||
80 | + const { handlerMouseDown, handlerMouseClick, handlerMouseDoubleClick, handlerMouseUp } = useNodeEvent(node.eventJson, node.dataSourceJson, cell) | ||
70 | switch (eventName) { | 81 | switch (eventName) { |
71 | case EventTypeEnum.DOWN: | 82 | case EventTypeEnum.DOWN: |
72 | handlerMouseDown() | 83 | handlerMouseDown() |
@@ -220,6 +220,7 @@ export enum EventActionTypeEnum { | @@ -220,6 +220,7 @@ export enum EventActionTypeEnum { | ||
220 | OPEN_PAGE = 'OPEN_PAGE', | 220 | OPEN_PAGE = 'OPEN_PAGE', |
221 | ASSIGN_VARIABLE = 'ASSIGN_VARIABLE', | 221 | ASSIGN_VARIABLE = 'ASSIGN_VARIABLE', |
222 | PARAMS_SETTING = 'PARAMS_SETTING', | 222 | PARAMS_SETTING = 'PARAMS_SETTING', |
223 | + ATTRIBUTE_DELIVERY = 'ATTRIBUTE_DELIVERY', | ||
223 | } | 224 | } |
224 | 225 | ||
225 | export enum EventActionTypeNameEnum { | 226 | export enum EventActionTypeNameEnum { |
@@ -227,6 +228,7 @@ export enum EventActionTypeNameEnum { | @@ -227,6 +228,7 @@ export enum EventActionTypeNameEnum { | ||
227 | OPEN_PAGE = '打开页面', | 228 | OPEN_PAGE = '打开页面', |
228 | ASSIGN_VARIABLE = '变量赋值', | 229 | ASSIGN_VARIABLE = '变量赋值', |
229 | PARAMS_SETTING = '参数设置', | 230 | PARAMS_SETTING = '参数设置', |
231 | + ATTRIBUTE_DELIVERY = '属性下发', | ||
230 | } | 232 | } |
231 | 233 | ||
232 | export enum ContentDataFieldsEnum { | 234 | export enum ContentDataFieldsEnum { |