diff --git a/DataBase/版本日志/SGGLDB_WH_2025-06-13.sql b/DataBase/版本日志/SGGLDB_WH_2025-06-13.sql new file mode 100644 index 00000000..cf988608 --- /dev/null +++ b/DataBase/版本日志/SGGLDB_WH_2025-06-13.sql @@ -0,0 +1,8 @@ + + +Alter TABLE [dbo].[HSSE_TowerCrane] +add [VideoAccount] [nvarchar](50) NULL, + [VideoPassword] [nvarchar](50) NULL, + + + diff --git a/SGGL/FineUIPro.Web/FineUIPro.Web.csproj b/SGGL/FineUIPro.Web/FineUIPro.Web.csproj index 767aa3c9..85110e64 100644 --- a/SGGL/FineUIPro.Web/FineUIPro.Web.csproj +++ b/SGGL/FineUIPro.Web/FineUIPro.Web.csproj @@ -1829,7 +1829,9 @@ + + @@ -1856,6 +1858,15 @@ + + + + + + + + + diff --git a/SGGL/FineUIPro.Web/HSSE/TowerCrane/TowerCraneEdit.aspx b/SGGL/FineUIPro.Web/HSSE/TowerCrane/TowerCraneEdit.aspx index e9775c33..cbf7aaff 100644 --- a/SGGL/FineUIPro.Web/HSSE/TowerCrane/TowerCraneEdit.aspx +++ b/SGGL/FineUIPro.Web/HSSE/TowerCrane/TowerCraneEdit.aspx @@ -22,6 +22,17 @@ MaxLength="50"> + + + + + + + + + diff --git a/SGGL/FineUIPro.Web/HSSE/TowerCrane/TowerCraneEdit.aspx.cs b/SGGL/FineUIPro.Web/HSSE/TowerCrane/TowerCraneEdit.aspx.cs index 83801e4c..f67f2ec3 100644 --- a/SGGL/FineUIPro.Web/HSSE/TowerCrane/TowerCraneEdit.aspx.cs +++ b/SGGL/FineUIPro.Web/HSSE/TowerCrane/TowerCraneEdit.aspx.cs @@ -36,9 +36,7 @@ namespace FineUIPro.Web.HSSE.TowerCrane if (!IsPostBack) { ////权限按钮方法 - this.GetButtonPower(); - - + this.GetButtonPower(); this.TowerCraneId = Request.Params["TowerCraneId"]; if (!string.IsNullOrEmpty(this.TowerCraneId)) { @@ -47,6 +45,8 @@ namespace FineUIPro.Web.HSSE.TowerCrane { this.txtTowerCraneName.Text = rectify.TowerCraneName; this.txtTowerCraneCode.Text = rectify.TowerCraneCode; + this.txtVideoAccount.Text = rectify.VideoAccount; + this.txtVideoPassword.Text = rectify.VideoPassword; if (rectify.MaxHoist.HasValue) { this.txtMaxHoist.Text = rectify.MaxHoist.Value.ToString("#.##"); @@ -111,6 +111,8 @@ namespace FineUIPro.Web.HSSE.TowerCrane } towerCrane.TowerCraneCode = this.txtTowerCraneCode.Text.Trim(); towerCrane.TowerCraneName = this.txtTowerCraneName.Text.Trim(); + towerCrane.VideoAccount = this.txtVideoAccount.Text.Trim(); + towerCrane.VideoPassword = this.txtVideoPassword.Text.Trim(); if (!string.IsNullOrEmpty(this.txtMaxHoist.Text)) { @@ -141,9 +143,7 @@ namespace FineUIPro.Web.HSSE.TowerCrane towerCrane.TowerCap = "否"; } towerCrane.Remark = this.txtRemark.Text.Trim(); - Funs.DB.SubmitChanges(); - - + Funs.DB.SubmitChanges(); PageContext.RegisterStartupScript(ActiveWindow.GetHidePostBackReference()); } #endregion diff --git a/SGGL/FineUIPro.Web/HSSE/TowerCrane/TowerCraneEdit.aspx.designer.cs b/SGGL/FineUIPro.Web/HSSE/TowerCrane/TowerCraneEdit.aspx.designer.cs index 6705f5e9..b50c4f95 100644 --- a/SGGL/FineUIPro.Web/HSSE/TowerCrane/TowerCraneEdit.aspx.designer.cs +++ b/SGGL/FineUIPro.Web/HSSE/TowerCrane/TowerCraneEdit.aspx.designer.cs @@ -59,6 +59,24 @@ namespace FineUIPro.Web.HSSE.TowerCrane /// protected global::FineUIPro.TextBox txtTowerCraneName; + /// + /// txtVideoAccount 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.TextBox txtVideoAccount; + + /// + /// txtVideoPassword 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.TextBox txtVideoPassword; + /// /// txtMaxHoist 控件。 /// diff --git a/SGGL/FineUIPro.Web/HSSE/TowerCrane/TowerCraneState.aspx b/SGGL/FineUIPro.Web/HSSE/TowerCrane/TowerCraneState.aspx index 92a22103..a2a92cf1 100644 --- a/SGGL/FineUIPro.Web/HSSE/TowerCrane/TowerCraneState.aspx +++ b/SGGL/FineUIPro.Web/HSSE/TowerCrane/TowerCraneState.aspx @@ -6,6 +6,9 @@ 塔吊状态 + + +
@@ -21,14 +24,14 @@ + + runat="server" ShowBorder="false" EnableCollapse="true" + AutoLeafIdentification="true" EnableSingleExpand="true" EnableTextSelection="true" > @@ -36,7 +39,165 @@ Layout="VBox" ShowHeader="false" BodyPadding="5px" IconFont="PlusCircle" Title="塔吊状态" TitleToolTip="塔吊状态" AutoScroll="true"> - + +
+
+
+
+
+

设备报警

+
+
+
+
当日预警
+
0
+
+
+
当日报警
+
0
+
+
+
+
+
+
+

预警趋势

+
+
+
+
+
+
+

设备信息

+
+
+
+
+
设备名称
+
+
+
+
+ 设备编号 +
+
+
+
+
+
+
+ 最大吊重 +
+
T
+
+
+
+ 最大力矩 +
+
T-M
+
+
+
+
+
+ 前臂长 +
+
+
+
+
+ 后臂长 +
+
+
+
+
+
+
+ 塔帽高 +
+
+
+
+
+ 塔臂高 +
+
+
+
+
+
+
+
+
+
+
+

设备编号

+
+
+ +
+
+
+
+ + 0T + 吊重 +
+
+ + 0M + 幅度 +
+
+ + 0度 + 倾度 +
+
+ + 0.00M-T + 风速 +
+
+ + 0T + 力矩 +
+
+ + 0M + 高度 +
+
+
+
+
+
+

实时力矩

+
+
+
+
+
+
+

实时吊重

+
+
+
+
+
+
+ + +
@@ -44,9 +205,313 @@
+ + + diff --git a/SGGL/FineUIPro.Web/HSSE/TowerCrane/TowerCraneState.aspx.cs b/SGGL/FineUIPro.Web/HSSE/TowerCrane/TowerCraneState.aspx.cs index 68e3e7b6..d6e73982 100644 --- a/SGGL/FineUIPro.Web/HSSE/TowerCrane/TowerCraneState.aspx.cs +++ b/SGGL/FineUIPro.Web/HSSE/TowerCrane/TowerCraneState.aspx.cs @@ -12,6 +12,10 @@ using NPOI.SS.UserModel; using System.Runtime.Serialization; using FineUIPro.Web.ProjectData; using System.Configuration; +using System.Web.Services; +using FastReport.Utils; +using Newtonsoft.Json; +using FineUIPro.Web.DataShow; namespace FineUIPro.Web.HSSE.TowerCrane { @@ -51,7 +55,8 @@ namespace FineUIPro.Web.HSSE.TowerCrane { TreeNode rootNode = new TreeNode(); rootNode.Text = item.TowerCraneName; - rootNode.NodeID = item.TowerCraneId; + rootNode.NodeID = item.TowerCraneId; + rootNode.EnableClickEvent= true; this.tvControlItem.Nodes.Add(rootNode); } @@ -78,12 +83,165 @@ namespace FineUIPro.Web.HSSE.TowerCrane /// protected void tvControlItem_NodeCommand(object sender, TreeCommandEventArgs e) { - + string TowerCraneId = this.tvControlItem.SelectedNodeID; + this.hfTowerCraneId.Text = TowerCraneId; + var towerCrane = Funs.DB.HSSE_TowerCrane.FirstOrDefault(x => x.TowerCraneId == TowerCraneId); + PageContext.RegisterStartupScript("runGetData() ; initVideo('"+ towerCrane.VideoAccount + "', '"+ Funs.EncryptionPassword(towerCrane.VideoPassword )+ "');"); + + } + + + [WebMethod] + public static string GetData(string TowerCraneId) + { + Dictionary res = new Dictionary(); + var towerCrane = Funs.DB.HSSE_TowerCrane.FirstOrDefault(x => x.TowerCraneId == TowerCraneId); + if (towerCrane != null) + { + res.Add("TowerCraneName", towerCrane.TowerCraneName); + res.Add("TowerCraneCode", towerCrane.TowerCraneCode); + res.Add("TowerCap", towerCrane.TowerCap); + res.Add("VideoAccount", towerCrane.VideoAccount); + res.Add("VideoPassword", Funs.EncryptionPassword(towerCrane.VideoPassword)); + + if (towerCrane.MaxHoist.HasValue) + { + res.Add("MaxHoist", towerCrane.MaxHoist.Value.ToString("##.##")); + } + if (towerCrane.MaxMoment.HasValue) + { + res.Add("MaxMoment", towerCrane.MaxMoment.Value.ToString("##.##")); + } + if (towerCrane.FrontArmLength.HasValue) + { + res.Add("FrontArmLength", towerCrane.FrontArmLength.Value.ToString("##.##")); + } + if (towerCrane.BackArmLength.HasValue) + { + res.Add("BackArmLength", towerCrane.BackArmLength.Value.ToString("##.##")); + + } + if (towerCrane.ArmHeigh.HasValue) + { + res.Add("ArmHeigh", towerCrane.ArmHeigh.Value.ToString("##.##")); + + } + + DateTime date = DateTime.Now.AddDays(-1); + var record = Funs.DB.HSSE_TowerCraneRecord.Where(x=>x.TowerCraneId==TowerCraneId && x.Date>=date).OrderByDescending(x=>x.Date).ToList(); + + if (record.Count > 0) + { + res.Add("AmountHoist", record[0].AmountHoist.Value.ToString("#0.##")); + res.Add("Camber", record[0].Camber.Value.ToString("#0.##")); + res.Add("Height", record[0].Height.Value.ToString("#0.##")); + res.Add("Hoist", record[0].Hoist.Value.ToString("#0.##")); + res.Add("Moment", record[0].Moment.Value.ToString("#0.##")); + res.Add("Range", record[0].Range.Value.ToString("#0.##")); + res.Add("RotationAngle", record[0].RotationAngle.Value.ToString("#0.##")); + res.Add("WindSpeed", record[0].WindSpeed.Value.ToString("#0.##")); + } + else + { + res.Add("AmountHoist", "0"); + res.Add("Camber", "0"); + res.Add("Height", "0"); + res.Add("Hoist", "0"); + res.Add("Moment", "0"); + res.Add("Range", "0"); + res.Add("RotationAngle", "0"); + res.Add("WindSpeed", "0"); + } + HashSet warnings = new HashSet(); + warnings.Add("111"); + warnings.Add("121"); + warnings.Add("132"); + warnings.Add("133"); + warnings.Add("141"); + warnings.Add("151"); + HashSet alarms = new HashSet(); + alarms.Add("112"); + alarms.Add("122"); + alarms.Add("131"); + alarms.Add("134"); + alarms.Add("142"); + alarms.Add("152"); + alarms.Add("201"); + alarms.Add("202"); + int DailyWarning = 0; + int DailyAlarm = 0; + List SSDZ = new List(); + List SSDZX = new List(); + List SSLJ = new List(); + List SSLJX = new List(); + List BJQS = new List(); + List BJQSX = new List(); + + + + foreach (var r in record) + { + if (!string.IsNullOrEmpty(r.AlarmType)) + { + string[] AlarmType = r.AlarmType.Replace("[","").Replace("]","").Split(','); + foreach(string a in AlarmType) + { + if (warnings.Contains(a)) + { + DailyWarning++; + + } + if (alarms.Contains(a)) + { + DailyAlarm++; + + } + } + BJQS.Add(AlarmType.Length); + BJQSX.Add(r.Date.Value.ToString("HH:mm")); + + + } + if (r.Hoist.HasValue) + { + SSDZ.Add(r.Hoist.Value); + SSDZX.Add(r.Date.Value.ToString("HH:mm")); + } + else + { + SSDZ.Add(0); + + } + if (r.Moment.HasValue) + { + SSLJ.Add(r.Moment.Value); + SSLJX.Add(r.Date.Value.ToString("HH:mm")); + } + else + { + SSLJ.Add(0); + + } + } + + res.Add("SSDZ", SSDZ); + res.Add("SSDZX", SSDZX); + res.Add("SSLJ", SSLJ); + res.Add("SSLJX", SSLJX); + res.Add("BJQS", BJQS); + res.Add("BJQSX", BJQSX); + res.Add("DailyWarning", DailyWarning + ""); + res.Add("DailyAlarm", DailyAlarm + ""); + + + } + + return JsonConvert.SerializeObject(res); ; } #endregion #endregion - - + + } } \ No newline at end of file diff --git a/SGGL/FineUIPro.Web/HSSE/TowerCrane/TowerCraneState.aspx.designer.cs b/SGGL/FineUIPro.Web/HSSE/TowerCrane/TowerCraneState.aspx.designer.cs index bf2509f3..dedf0409 100644 --- a/SGGL/FineUIPro.Web/HSSE/TowerCrane/TowerCraneState.aspx.designer.cs +++ b/SGGL/FineUIPro.Web/HSSE/TowerCrane/TowerCraneState.aspx.designer.cs @@ -68,6 +68,15 @@ namespace FineUIPro.Web.HSSE.TowerCrane /// protected global::FineUIPro.TextBox txtIsono; + /// + /// hfTowerCraneId 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.HiddenField hfTowerCraneId; + /// /// tvControlItem 控件。 /// @@ -85,5 +94,59 @@ namespace FineUIPro.Web.HSSE.TowerCrane /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Panel panelCenterRegion; + + /// + /// ContentPanel1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.ContentPanel ContentPanel1; + + /// + /// divMaxMoment 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlGenericControl divMaxMoment; + + /// + /// divFrontArmLength 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlGenericControl divFrontArmLength; + + /// + /// divBackArmLength 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlGenericControl divBackArmLength; + + /// + /// divTowerCap 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlGenericControl divTowerCap; + + /// + /// divArmHeigh 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlGenericControl divArmHeigh; } } diff --git a/SGGL/FineUIPro.Web/res/css/commontower.css b/SGGL/FineUIPro.Web/res/css/commontower.css new file mode 100644 index 00000000..7711651e --- /dev/null +++ b/SGGL/FineUIPro.Web/res/css/commontower.css @@ -0,0 +1,39 @@ +/* 删除: 之前的样式 */ +/* 添加重置CSS样式 */ +html, +body, +div, +span, +h1, +h2, +h3, +h4, +h5, +h6, +p, +live-player { + font-family: '宋体'; + margin: 0; + padding: 0; + border: 0; + font-size: 14px; + line-height: 1; + vertical-align: baseline; + box-sizing: border-box; + user-select: none; /* 添加: 禁止文字选中 */ +} +html, +body { + height: 100%; + width: 100%; +} + +ol, +ul { + list-style: none; +} + +html::-webkit-scrollbar { + display: none; +} + diff --git a/SGGL/FineUIPro.Web/res/css/indextower.css b/SGGL/FineUIPro.Web/res/css/indextower.css new file mode 100644 index 00000000..478d73ce --- /dev/null +++ b/SGGL/FineUIPro.Web/res/css/indextower.css @@ -0,0 +1,265 @@ +.y_wrap{ + height: 100%; + width: 100%; + display: grid; + padding: 0.1875rem; + grid-template-columns: 1.2fr 2fr; + gap: 0.1875rem; + background-color: #f5f3f3; +} +.y_l_site{ + height: 100%; + display: grid; + grid-template-rows: 1.3fr 2fr 1.2fr; + gap: 0.1875rem; +} + +.y_r_site{ + height: 100%; + display: grid; + grid-template-rows: 2fr 1fr 2fr; + gap: 0.1875rem; +} +.y_r_site_sub{ + display: grid; + grid-template-columns: 1.2fr 2fr; + gap: 0.1875rem; +} +.y_r_site_sub1{ + display: grid; + grid-template-columns: 1fr 1fr; + gap: 0.1875rem; +} +.y_r_site_sub1>div, +.y_r_site_sub>div, +.y_r_site>div:nth-child(2), +.y_l_site>div{ + background-color: #ffffff; +} + +.y_box{ + position: relative; +} +.y_box>.tit{ + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + padding: 0 0.25rem; + height: 0.5rem; +} +.y_box>.tit>p{ + line-height: 1; + font-size: 0.2rem; + margin-left: 0.1875rem; +} + +.y_c_icon{ + height: 0.2rem; + width: 0.2rem; + border:0.0375rem solid #5b97f9; + border-radius: 50%; + position: relative; + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; +} +.y_c_icon>span{ + height: 0.125rem; + width: 0.125rem; + border-radius: 50%; + border:0.0375rem solid #5b97f9; +} + +.y_box_main{ + width: 100%; + height: calc(100% - 0.5rem); +} + +/* 设备报警 */ +#sbbj{ + display: grid; + grid-template-columns: 1fr 1fr; + align-items: center; + justify-items: center; +} + +#sbbj>div{ + min-width: 1.8rem; + max-width: 90%; + height: 0.725rem; + padding-left: 1rem; + background-position: left center; + background-repeat: no-repeat; + background-size: 0.875rem 0.725rem; + display: flex; + flex-direction: column; + justify-content: space-between; + align-items: center; +} +#sbbj>div:nth-child(1){ + background-image: url("../images/tower/twoerpolic.bb339ff.png"); +} + #sbbj > div:nth-child(2) { + background-image: url("../images/tower/twoerpolice2.261a289.png"); + } +#sbbj>div>div:nth-child(1){ + font-size: 0.2rem; +} +#sbbj>div>div:nth-child(2){ + display: flex; + justify-content: space-between; + align-items: center; + width: 100%; +} +#sbbj>div>div:nth-child(2)>span{ + font-size: 0.2rem; +} + +/* 设备信息 */ +#sbxx{ + padding: 0.1875rem; +} +#sbxx>.y_row{ + padding: 0.125rem 0; + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + border-bottom: 1px solid #ddd; +} +#sbxx>.y_row>.y_span{ + flex: 1; + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; +} +#sbxx>.y_row>.y_span>div{ + width: 50%; +} +#sbxx>.y_row>.y_span>.y_span_lab{ + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; +} +#sbxx>.y_row>.y_span>.y_span_val{ + text-align: right; + padding: 0 0.125rem; +} +#sbxx>.y_row>.y_span>.y_span_lab>span:nth-child(1){ + display: inline-block; + height: 0.2rem; + width: 0.075rem; + border-radius: 0.0375rem; + background-color: #5b97f9; +} +#sbxx>.y_row>.y_span>.y_span_lab>span:nth-child(2){ + font-size: 0.2rem; + margin-left: 0.125rem; +} + + +/* 吊重\风速... */ +#zt{ + padding: 0.125rem; + display: grid; + grid-template-columns: repeat(3, 1fr); + grid-row: 1fr 1fr; + grid-row-gap: 0.1875rem; + grid-column-gap: 0.125rem; +} +#zt>div{ + border: 1px solid #d3e3fe; + background-color: #eff5ff; + border-radius: 0.1rem; + display: flex; + flex-direction: row; + justify-content: space-between; + padding: 0 0.1875rem; + align-items: center; +} + #zt > div > span:nth-child(1) { + height: 0.475rem; + width: 0.475rem; + background-image: url("../images/tower/work1.e93d23f.png"); + background-position: center center; + background-repeat: no-repeat; + background-size: 0.475rem 0.475rem; + } + #zt > div:nth-child(2) > span:nth-child(1) { + background-image: url("../images/tower/2.png"); + } + #zt > div:nth-child(3) > span:nth-child(1) { + background-image: url("../images/tower/3.png"); + } + #zt > div:nth-child(4) > span:nth-child(1) { + background-image: url("../images/tower/4.png"); + } + #zt > div:nth-child(5) > span:nth-child(1) { + background-image: url("../images/tower/5.png"); + } + #zt > div:nth-child(6) > span:nth-child(1) { + background-image: url("../images/tower/6.png"); + } +#zt>div>span:nth-child(2){ + width: 40%; + color: #649bf8; + font-size: .2rem; + font-weight: 700; + text-align: center; +} +#zt>div>span:nth-child(3){ + color: #404040; + font-size: 0.2rem; +} + +/* 塔吊状态 */ +#tdzt{ + padding: 0.1875rem; +} + #tdzt > div { + width: 100%; + height: calc(100% - 0.5rem); + background-image: url(../images/tower/tjimg.97b7389.png); + background-position: center; + background-repeat: no-repeat; + } + +#tdzt>p{ + height: 0.5rem; + line-height: .5rem; + font-size: 0.225rem; + text-align: center; +} +/* 视频 */ +#sp{ + position: relative; /* 设置相对定位 */ + width: 100%; /* 宽度占满父容器 */ + height: 100%; +} + #sp live-player { + position: absolute; /* 绝对定位 */ + top: 0; + left: 0; + width: 100%; /* 宽度100% */ + height: 100%; /* 高度100% */ + background-color: #000000; + object-fit: cover; /* 保持原始比例并覆盖整个区域 */ + } + + + + +.c_5b97f9{ + color: #5b97f9; + font-weight: 700; + font-size: 0.25rem !important; +} +.c_ff5353{ + color: #ff5353; + font-weight: 700; + font-size: 0.25rem !important; +} \ No newline at end of file diff --git a/SGGL/FineUIPro.Web/res/images/tower/2.png b/SGGL/FineUIPro.Web/res/images/tower/2.png new file mode 100644 index 00000000..5d1ae862 Binary files /dev/null and b/SGGL/FineUIPro.Web/res/images/tower/2.png differ diff --git a/SGGL/FineUIPro.Web/res/images/tower/3.png b/SGGL/FineUIPro.Web/res/images/tower/3.png new file mode 100644 index 00000000..d53ac101 Binary files /dev/null and b/SGGL/FineUIPro.Web/res/images/tower/3.png differ diff --git a/SGGL/FineUIPro.Web/res/images/tower/4.png b/SGGL/FineUIPro.Web/res/images/tower/4.png new file mode 100644 index 00000000..1ef47661 Binary files /dev/null and b/SGGL/FineUIPro.Web/res/images/tower/4.png differ diff --git a/SGGL/FineUIPro.Web/res/images/tower/5.png b/SGGL/FineUIPro.Web/res/images/tower/5.png new file mode 100644 index 00000000..13e3b5d3 Binary files /dev/null and b/SGGL/FineUIPro.Web/res/images/tower/5.png differ diff --git a/SGGL/FineUIPro.Web/res/images/tower/6.png b/SGGL/FineUIPro.Web/res/images/tower/6.png new file mode 100644 index 00000000..08359afe Binary files /dev/null and b/SGGL/FineUIPro.Web/res/images/tower/6.png differ diff --git a/SGGL/FineUIPro.Web/res/images/tower/tjimg.97b7389.png b/SGGL/FineUIPro.Web/res/images/tower/tjimg.97b7389.png new file mode 100644 index 00000000..d728d66c Binary files /dev/null and b/SGGL/FineUIPro.Web/res/images/tower/tjimg.97b7389.png differ diff --git a/SGGL/FineUIPro.Web/res/images/tower/twoerpolic.bb339ff.png b/SGGL/FineUIPro.Web/res/images/tower/twoerpolic.bb339ff.png new file mode 100644 index 00000000..8fdc91e0 Binary files /dev/null and b/SGGL/FineUIPro.Web/res/images/tower/twoerpolic.bb339ff.png differ diff --git a/SGGL/FineUIPro.Web/res/images/tower/twoerpolice2.261a289.png b/SGGL/FineUIPro.Web/res/images/tower/twoerpolice2.261a289.png new file mode 100644 index 00000000..1d1a36fe Binary files /dev/null and b/SGGL/FineUIPro.Web/res/images/tower/twoerpolice2.261a289.png differ diff --git a/SGGL/FineUIPro.Web/res/images/tower/work1.e93d23f.png b/SGGL/FineUIPro.Web/res/images/tower/work1.e93d23f.png new file mode 100644 index 00000000..40e075f5 Binary files /dev/null and b/SGGL/FineUIPro.Web/res/images/tower/work1.e93d23f.png differ diff --git a/SGGL/FineUIPro.Web/res/tower/2.png b/SGGL/FineUIPro.Web/res/tower/2.png new file mode 100644 index 00000000..5d1ae862 Binary files /dev/null and b/SGGL/FineUIPro.Web/res/tower/2.png differ diff --git a/SGGL/FineUIPro.Web/res/tower/3.png b/SGGL/FineUIPro.Web/res/tower/3.png new file mode 100644 index 00000000..d53ac101 Binary files /dev/null and b/SGGL/FineUIPro.Web/res/tower/3.png differ diff --git a/SGGL/FineUIPro.Web/res/tower/4.png b/SGGL/FineUIPro.Web/res/tower/4.png new file mode 100644 index 00000000..1ef47661 Binary files /dev/null and b/SGGL/FineUIPro.Web/res/tower/4.png differ diff --git a/SGGL/FineUIPro.Web/res/tower/5.png b/SGGL/FineUIPro.Web/res/tower/5.png new file mode 100644 index 00000000..13e3b5d3 Binary files /dev/null and b/SGGL/FineUIPro.Web/res/tower/5.png differ diff --git a/SGGL/FineUIPro.Web/res/tower/6.png b/SGGL/FineUIPro.Web/res/tower/6.png new file mode 100644 index 00000000..08359afe Binary files /dev/null and b/SGGL/FineUIPro.Web/res/tower/6.png differ diff --git a/SGGL/FineUIPro.Web/res/tower/tjimg.97b7389.png b/SGGL/FineUIPro.Web/res/tower/tjimg.97b7389.png new file mode 100644 index 00000000..d728d66c Binary files /dev/null and b/SGGL/FineUIPro.Web/res/tower/tjimg.97b7389.png differ diff --git a/SGGL/FineUIPro.Web/res/tower/twoerpolic.bb339ff.png b/SGGL/FineUIPro.Web/res/tower/twoerpolic.bb339ff.png new file mode 100644 index 00000000..8fdc91e0 Binary files /dev/null and b/SGGL/FineUIPro.Web/res/tower/twoerpolic.bb339ff.png differ diff --git a/SGGL/FineUIPro.Web/res/tower/twoerpolice2.261a289.png b/SGGL/FineUIPro.Web/res/tower/twoerpolice2.261a289.png new file mode 100644 index 00000000..1d1a36fe Binary files /dev/null and b/SGGL/FineUIPro.Web/res/tower/twoerpolice2.261a289.png differ diff --git a/SGGL/FineUIPro.Web/res/tower/work1.e93d23f.png b/SGGL/FineUIPro.Web/res/tower/work1.e93d23f.png new file mode 100644 index 00000000..40e075f5 Binary files /dev/null and b/SGGL/FineUIPro.Web/res/tower/work1.e93d23f.png differ