添加变量名称导入
This commit is contained in:
@ -23,6 +23,16 @@ namespace HT.Cloud.Web.Areas.ChartsManage.Controllers
|
||||
{
|
||||
public HistoryChartsService _historyChartsService { get;set;}
|
||||
|
||||
[HttpGet]
|
||||
public async Task<ActionResult> GetDriverGroupList()
|
||||
{
|
||||
//var StartTime = reportparam.StartTime.ToString("yyyy-MM-dd HH:mm:ss");
|
||||
//var EndTime = reportparam.EndTime.ToString("yyyy-MM-dd HH:mm:ss");
|
||||
|
||||
var data = await _historyChartsService.GetDriverGroupList();
|
||||
return Content(data);
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public async Task<ActionResult> GetAllSubsystemTag()
|
||||
{
|
||||
|
@ -21,7 +21,14 @@ namespace HT.Cloud.Web.Areas.ChartsManage.Controllers
|
||||
{
|
||||
public RtchartsService _rtchartsService { get;set;}
|
||||
|
||||
[HttpGet]
|
||||
[HttpGet]
|
||||
public async Task<ActionResult> GetDriverGroupList()
|
||||
{
|
||||
var data = await _rtchartsService.GetDriverGroupList();
|
||||
return Content(data);
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public async Task<ActionResult> GetAllSubsystemTag()
|
||||
{
|
||||
var data = await _rtchartsService.GetAllSubsystemTag();
|
||||
|
@ -9,6 +9,9 @@ using HT.Cloud.Service;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using HT.Cloud.Service.DevicesManage;
|
||||
using System.Text.RegularExpressions;
|
||||
using HT.Cloud.Domain.DevicesManage;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace HT.Cloud.Web.Areas.DevicesManage.Controllers
|
||||
{
|
||||
@ -73,6 +76,57 @@ namespace HT.Cloud.Web.Areas.DevicesManage.Controllers
|
||||
var data = await _metaTagService.GetGroupVarTreeTable(groupIId);
|
||||
return Content(data);
|
||||
}
|
||||
[HttpPost]
|
||||
public async Task<ActionResult> ImportExcelToTableData(string[] groupId)
|
||||
{
|
||||
//var data = await _metaTagService.ImportExcelToTableData(metaTags);
|
||||
var list = JsonConvert.DeserializeObject<List<Meta_Tag>>(groupId[0].Remove(0, 17).Remove(groupId[0].Length - 17 - 2, 2));
|
||||
|
||||
|
||||
list.Remove(list[0]);
|
||||
List<MetaTagEntity> metaTags = new List<MetaTagEntity>();
|
||||
foreach (var item in list)
|
||||
{
|
||||
try
|
||||
{
|
||||
MetaTagEntity metaTag = new MetaTagEntity();
|
||||
metaTag.TagID = int.Parse(item.TagID);
|
||||
metaTag.TagName = item.TagName;
|
||||
metaTag.DataType = short.Parse(item.TagID);
|
||||
metaTag.DataSize = int.Parse(item.DataSize);
|
||||
metaTag.Address = item.Address;
|
||||
metaTag.GroupID = int.Parse(item.GroupID);
|
||||
metaTag.IsActive = true;
|
||||
metaTag.Archive = true;
|
||||
metaTag.DefaultValue = item.DefaultValue;
|
||||
metaTag.Description = item.Description;
|
||||
metaTag.Maximum = float.Parse(item.Maximum);
|
||||
metaTag.Minimum = float.Parse(item.Minimum);
|
||||
metaTag.Cycle = int.Parse(item.Cycle);
|
||||
metaTag.Subsystem = item.Subsystem;
|
||||
metaTag.Units = item.Units;
|
||||
metaTag.WriteAddress = item.WriteAddress;
|
||||
metaTag.SysType = item.SysType;
|
||||
metaTag.SysAddress = item.SysAddress;
|
||||
if (item.IFloatPlaces == "")
|
||||
{
|
||||
metaTag.IFloatPlaces = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
metaTag.IFloatPlaces = short.Parse(item.IFloatPlaces);
|
||||
}
|
||||
metaTags.Add(metaTag);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine(ex.Message);
|
||||
}
|
||||
|
||||
}
|
||||
var data = await _metaTagService.ImportExcelToTableData(metaTags);
|
||||
return Content(data);
|
||||
}
|
||||
[HttpPost]
|
||||
public async Task<ActionResult> SaveArgument(string driverId, string name, string value)
|
||||
{
|
||||
@ -80,5 +134,32 @@ namespace HT.Cloud.Web.Areas.DevicesManage.Controllers
|
||||
return Content(data);
|
||||
}
|
||||
|
||||
}
|
||||
public class Meta_Tag
|
||||
{
|
||||
public string TagID { get; set; }
|
||||
|
||||
public string TagName { get; set; }
|
||||
|
||||
public string DataType { get; set; }
|
||||
|
||||
public string DataSize { get; set; }
|
||||
public string Address { get; set; }
|
||||
public string GroupID { get; set; }
|
||||
public string IsActive { get; set; }
|
||||
public string Archive { get; set; }
|
||||
public string DefaultValue { get; set; }
|
||||
public string Description { get; set; }
|
||||
public string Maximum { get; set; }
|
||||
public string Minimum { get; set; }
|
||||
public string Cycle { get; set; }
|
||||
public string Subsystem { get; set; }
|
||||
public string Units { get; set; }
|
||||
public string WriteAddress { get; set; }
|
||||
public string SysType { get; set; }
|
||||
public string SysAddress { get; set; }
|
||||
public string IFloatPlaces { get; set; }
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -8,9 +8,9 @@
|
||||
padding-right: 0px;
|
||||
}
|
||||
</style>
|
||||
<script type="text/javascript" src="~/lib/xlsx/dist/xlsx.full.min.js"></script>
|
||||
<script>
|
||||
|
||||
layui.use(['jquery', 'form', 'table', 'common','tree','util', 'dtree', 'commonTable', 'optimizeSelectOption'], function () {
|
||||
layui.use(['jquery', 'form', 'table', 'common', 'tree', 'util', 'dtree', 'commonTable', 'optimizeSelectOption','excel'], function () {
|
||||
var $ = layui.jquery,
|
||||
form = layui.form,
|
||||
commonTable = layui.commonTable,
|
||||
@ -19,6 +19,7 @@
|
||||
layer = layui.layer,
|
||||
util = layui.util,
|
||||
tree = layui.tree,
|
||||
excel = layui.excel,
|
||||
//echarts = layui.echarts,
|
||||
common = layui.common;
|
||||
//加载数据
|
||||
@ -92,16 +93,71 @@
|
||||
data: { driverId: datapa },
|
||||
success: function (redata) {
|
||||
//在此判断cpu类型并展现不同的表单。
|
||||
var argumentFormSiemens = document.getElementById('argumentFormSiemens');
|
||||
argumentFormSiemens.style.display = 'block';
|
||||
debugger;
|
||||
document.getElementById('ServerName_Siemens').value = redata.ServerName;
|
||||
document.getElementById('Rack_Siemens').value = redata.Rack;
|
||||
document.getElementById('Slot_Siemens').value = redata.Slot;
|
||||
document.getElementById('TimeOut_Siemens').value = redata.TimeOut;
|
||||
document.getElementById('Alias_Siemens').value = redata.Alias;
|
||||
//document.getElementById('PLCType_Siemens').value = redata.PLCType;
|
||||
select_value("PLCType_Siemens", redata.PLCType);
|
||||
if (redata.DriverType == 'DriverSiemensS7'){
|
||||
var argumentFormSiemens = document.getElementById('argumentFormSiemens');
|
||||
var argumentFormAllenBradley = document.getElementById('argumentFormAllenBradley');
|
||||
var argumentFormSchneideir = document.getElementById('argumentFormSchneideir');
|
||||
var argumentFormOpc = document.getElementById('argumentFormOpc');
|
||||
argumentFormSiemens.style.display = 'block';
|
||||
argumentFormAllenBradley.style.display = 'none';
|
||||
argumentFormSchneideir.style.display = 'none';
|
||||
argumentFormOpc.style.display = 'none';
|
||||
debugger;
|
||||
document.getElementById('ServerName_Siemens').value = redata.ServerName;
|
||||
document.getElementById('Rack_Siemens').value = redata.Rack;
|
||||
document.getElementById('Slot_Siemens').value = redata.Slot;
|
||||
document.getElementById('TimeOut_Siemens').value = redata.TimeOut;
|
||||
document.getElementById('Alias_Siemens').value = redata.Alias;
|
||||
//document.getElementById('PLCType_Siemens').value = redata.PLCType;
|
||||
select_value("PLCType_Siemens", redata.PLCType);
|
||||
} else if (redata.DriverType == 'AllenBradleyEIP') {
|
||||
var argumentFormSiemens = document.getElementById('argumentFormSiemens');
|
||||
var argumentFormAllenBradley = document.getElementById('argumentFormAllenBradley');
|
||||
var argumentFormSchneideir = document.getElementById('argumentFormSchneideir');
|
||||
var argumentFormOpc = document.getElementById('argumentFormOpc');
|
||||
argumentFormSiemens.style.display = 'none';
|
||||
argumentFormAllenBradley.style.display = 'block';
|
||||
argumentFormSchneideir.style.display = 'none';
|
||||
argumentFormOpc.style.display = 'none';
|
||||
debugger;
|
||||
document.getElementById('ServerName_AllenBradley').value = redata.ServerName;
|
||||
document.getElementById('Port_AllenBradley').value = redata.Port;
|
||||
document.getElementById('Slot_AllenBradley').value = redata.Slot;
|
||||
document.getElementById('TimeOut_AllenBradley').value = redata.TimeOut;
|
||||
document.getElementById('Alias_AllenBradley').value = redata.Alias;
|
||||
//select_value("PLCType_AllenBradley", redata.PLCType);
|
||||
} else if (redata.DriverType == 'ModbusTcp'){
|
||||
var argumentFormSiemens = document.getElementById('argumentFormSiemens');
|
||||
var argumentFormAllenBradley = document.getElementById('argumentFormAllenBradley');
|
||||
var argumentFormSchneideir = document.getElementById('argumentFormSchneideir');
|
||||
var argumentFormOpc = document.getElementById('argumentFormOpc');
|
||||
argumentFormSiemens.style.display = 'none';
|
||||
argumentFormAllenBradley.style.display = 'none';
|
||||
argumentFormSchneideir.style.display = 'block';
|
||||
argumentFormOpc.style.display = 'none';
|
||||
debugger;
|
||||
document.getElementById('ServerName_Schneideir').value = redata.ServerName;
|
||||
document.getElementById('Port_Schneideir').value = redata.Port;
|
||||
document.getElementById('SlaveID_Schneideir').value = redata.SlaveID;
|
||||
document.getElementById('TimeOut_Schneideir').value = redata.TimeOut;
|
||||
document.getElementById('Alias_Schneideir').value = redata.Alias;
|
||||
//select_value("PLCType_Schneideir", redata.PLCType);
|
||||
} else if (redata.DriverType == 'OpcUaClient') {
|
||||
var argumentFormSiemens = document.getElementById('argumentFormSiemens');
|
||||
var argumentFormAllenBradley = document.getElementById('argumentFormAllenBradley');
|
||||
var argumentFormSchneideir = document.getElementById('argumentFormSchneideir');
|
||||
var argumentFormOpc = document.getElementById('argumentFormOpc');
|
||||
argumentFormSiemens.style.display = 'none';
|
||||
argumentFormAllenBradley.style.display = 'none';
|
||||
argumentFormSchneideir.style.display = 'none';
|
||||
argumentFormOpc.style.display = 'block';
|
||||
debugger;
|
||||
document.getElementById('ServerName_Opc').value = redata.ServerName;
|
||||
document.getElementById('Port_Opc').value = redata.Port;
|
||||
document.getElementById('ServerUri_Opc').value = redata.ServerUri;
|
||||
document.getElementById('TimeOut_Opc').value = redata.TimeOut;
|
||||
document.getElementById('Alias_Opc').value = redata.Alias;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -114,9 +170,11 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
var rrid = "0";
|
||||
async function LaodTagList(row) {
|
||||
debugger;
|
||||
var group_Id = row.id.toString();
|
||||
rrid = group_Id;
|
||||
var datapa = new Array;
|
||||
datapa.push(group_Id);
|
||||
var tableHeight = showTag.style.height - 10;
|
||||
@ -140,48 +198,60 @@
|
||||
traditional: true,//这里设置为true
|
||||
data: { groupId: datapa },
|
||||
success: function (redata) {
|
||||
var options ={
|
||||
elem: '#metaTable',
|
||||
height:'full-10',
|
||||
data: redata.data,
|
||||
editTrigger:'dblclick',
|
||||
//page:true,
|
||||
//limit:20,
|
||||
treeIdName: 'TreeId',
|
||||
treePidName: 'F_TreeId',
|
||||
cols:[[
|
||||
{ type: 'checkbox' },
|
||||
{ field: 'Subsystem', title: '子系统', edit: 'text'},
|
||||
{ field: 'Description' , title:'变量名称' , edit:'text'},
|
||||
//{ field: 'Address', title: '起始地址', edit: 'text' },
|
||||
//{ field: 'DataType' , title:'数值类型' , edit:'text'},
|
||||
{ field: 'Units' , title:'变量单位' , edit:'text'},
|
||||
//{ field: 'TagID', title: 'ID' },
|
||||
]],
|
||||
if (group_Id == "B25091")
|
||||
{
|
||||
var options ={
|
||||
elem: '#metaTable',
|
||||
height:'full-10',
|
||||
data: redata.data,
|
||||
editTrigger:'dblclick',
|
||||
//page:true,
|
||||
//limit:20,
|
||||
treeIdName: 'TreeId',
|
||||
treePidName: 'F_TreeId',
|
||||
cols:[[
|
||||
{ type: 'checkbox' },
|
||||
{ field: 'Subsystem', title: '子系统', edit: 'text'},
|
||||
{ field: 'Description' , title:'变量名称' , edit:'text'},
|
||||
{ field: 'Address', title: '起始地址', edit: 'text' },
|
||||
{ field: 'DataType' , title:'数值类型' , edit:'text'},
|
||||
{ field: 'Units' , title:'变量单位' , edit:'text'},
|
||||
{ field: 'SysType', title: '变量分类', edit: 'text' },
|
||||
{ field: 'IFloatPlaces', title: '小数位数', edit: 'text' },
|
||||
//{ field: 'TagID', title: 'ID' },
|
||||
]],
|
||||
}
|
||||
commonTable.rendertreetable(options);
|
||||
}
|
||||
commonTable.rendertreetable(options);
|
||||
//table.render({
|
||||
// elem: '#metaTable',
|
||||
// height:'full-10',
|
||||
// data: redata.data,
|
||||
// editTrigger:'dblclick',
|
||||
// cols:[[
|
||||
// { type: 'checkbox' },
|
||||
// { field: 'Subsystem', title: '子系统', edit: 'text'},
|
||||
else
|
||||
{
|
||||
var options ={
|
||||
elem: '#metaTable',
|
||||
height:'full-10',
|
||||
data: redata.data,
|
||||
editTrigger:'dblclick',
|
||||
cols:[[
|
||||
{ type: 'checkbox' },
|
||||
{ field: 'Subsystem', title: '子系统', edit: 'text'},
|
||||
|
||||
// { field: 'Description' , title:'变量名称' , edit:'text'},
|
||||
// //{ field: 'TagName' , title:'变量编码' , edit:'text'},
|
||||
// { field: 'Address', title: '起始地址', edit: 'text' },
|
||||
// { field: 'DataType' , title:'数值类型' , edit:'text'},
|
||||
{ field: 'Description' , title:'变量名称' , edit:'text'},
|
||||
//{ field: 'TagName' , title:'变量编码' , edit:'text'},
|
||||
{ field: 'Address', title: '起始地址', edit: 'text' },
|
||||
{ field: 'DataType' , title:'数值类型' , edit:'text'},
|
||||
|
||||
// //{ field: 'RtValue' , title:'当前值' , edit:'text'},
|
||||
// { field: 'Units' , title:'变量单位' , edit:'text'},
|
||||
// { field: 'TagID', title: 'ID', sort: true },
|
||||
//{ field: 'RtValue' , title:'当前值' , edit:'text'},
|
||||
{ field: 'Units' , title:'变量单位' , edit:'text'},
|
||||
|
||||
{ field: 'SysType', title: '变量分类', edit: 'text' },
|
||||
{ field: 'IFloatPlaces', title: '小数位数', edit: 'text' },
|
||||
//{ field: 'TagID', title: 'ID', sort: true },
|
||||
|
||||
// ]],
|
||||
// page:true,
|
||||
// limit:20,
|
||||
//});
|
||||
]],
|
||||
page:true,
|
||||
limit:20,
|
||||
}
|
||||
commonTable.rendertable(options);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -226,6 +296,188 @@
|
||||
height: "699px",
|
||||
});
|
||||
}
|
||||
openImport = function () {
|
||||
var htmlContent = '<div style="width:100%;height:100%;text-align: center;">'
|
||||
|
||||
htmlContent += '<div class="layui-upload-drag" id="importData" >';
|
||||
|
||||
htmlContent += '<input multiple="multiple" type="file" style="cursor:pointer;opacity: 0.0; position: absolute; top: 0; left: 0; bottom: 0; right: 0; width: 100%; height:100%;">';
|
||||
|
||||
htmlContent += '<i class="layui-icon"></i>';
|
||||
|
||||
htmlContent += '<p id="filename">点击选择文件,或将文件拖拽到此处,支持多文件导入</p>';
|
||||
|
||||
htmlContent += '</div>';
|
||||
|
||||
htmlContent += '<div ">';
|
||||
|
||||
htmlContent += '<button id="downloadFiles" class="layui-btn" style="margin-top:10px;margin-bottom:10px;">下载模板</button>';
|
||||
|
||||
htmlContent += '</div>';
|
||||
|
||||
htmlContent += '</div>';
|
||||
|
||||
layer.open({
|
||||
|
||||
type: 1
|
||||
|
||||
, offset: "auto"
|
||||
|
||||
, id: 'layer_importData'
|
||||
|
||||
, title: '导入'
|
||||
|
||||
, area: '400px'
|
||||
|
||||
, content: htmlContent //需要打开的模板
|
||||
|
||||
, btnAlign: 'c' //按钮居中
|
||||
|
||||
, shade: 0 //不显示遮罩
|
||||
|
||||
, success: function (layero, index) {
|
||||
|
||||
// 监听上传文件的事件
|
||||
|
||||
$('#importData').change(function (e) {
|
||||
|
||||
var files = e.target.files;
|
||||
debugger;
|
||||
uploadExcel(files);
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
||||
//下载模板
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
|
||||
async function uploadExcel(files) {
|
||||
debugger;
|
||||
excel.importExcel(files, {
|
||||
|
||||
// 读取数据的同时梳理数据
|
||||
|
||||
fields: {
|
||||
|
||||
'TagID': 'A'
|
||||
|
||||
, 'TagName': 'B'
|
||||
|
||||
, 'DataType': 'C'
|
||||
|
||||
, 'DataSize': 'D'
|
||||
, 'Address': 'E'
|
||||
, 'GroupID': 'F'
|
||||
, 'IsActive': 'G'
|
||||
, 'Archive': 'H'
|
||||
, 'DefaultValue': 'I'
|
||||
, 'Description': 'J'
|
||||
, 'Maximum': 'K'
|
||||
, 'Minimum': 'L'
|
||||
, 'Cycle': 'M'
|
||||
, 'Subsystem': 'N'
|
||||
, 'Units': 'O'
|
||||
, 'WriteAddress': 'P'
|
||||
, 'SysType': 'Q'
|
||||
, 'SysAddress': 'R'
|
||||
, 'IFloatPlaces':'S'
|
||||
|
||||
}
|
||||
|
||||
},async function (data) {
|
||||
|
||||
// 还可以再进行数据梳理
|
||||
|
||||
///* data = excel.filterImportData(data, {
|
||||
// 'collection_point': 'A'
|
||||
// , 'pass': 'B'
|
||||
// , 'jump_out': 'C'
|
||||
// , 'input': 'D'
|
||||
//*/
|
||||
|
||||
console.log("data", data, "files", files);
|
||||
var datapa = new Array;
|
||||
datapa.push(JSON.stringify(data).toString());
|
||||
await $.ajax({
|
||||
url: "/DevicesManage/MetaTag/ImportExcelToTableData",//GetGroupVarTable
|
||||
type: "Post",
|
||||
dataType: "json",
|
||||
traditional: true,//这里设置为true
|
||||
data: {groupId: datapa },
|
||||
success: function (redata) {
|
||||
debugger;
|
||||
//var group_Id = row.id.toString();
|
||||
debugger;
|
||||
if (rrid == "B25091") {
|
||||
var options = {
|
||||
elem: '#metaTable',
|
||||
height: 'full-10',
|
||||
data: redata.data,
|
||||
editTrigger: 'dblclick',
|
||||
//page:true,
|
||||
//limit:20,
|
||||
treeIdName: 'TreeId',
|
||||
treePidName: 'F_TreeId',
|
||||
cols: [[
|
||||
{ type: 'checkbox' },
|
||||
{ field: 'Subsystem', title: '子系统', edit: 'text' },
|
||||
{ field: 'Description', title: '变量名称', edit: 'text' },
|
||||
{ field: 'Address', title: '起始地址', edit: 'text' },
|
||||
{ field: 'DataType', title: '数值类型', edit: 'text' },
|
||||
{ field: 'Units', title: '变量单位', edit: 'text' },
|
||||
{ field: 'SysType', title: '变量分类', edit: 'text' },
|
||||
{ field: 'IFloatPlaces', title: '小数位数', edit: 'text' },
|
||||
//{ field: 'TagID', title: 'ID' },
|
||||
]],
|
||||
}
|
||||
commonTable.rendertreetable(options);
|
||||
}
|
||||
else {
|
||||
var options = {
|
||||
elem: '#metaTable',
|
||||
height: 'full-10',
|
||||
data: redata.data,
|
||||
editTrigger: 'dblclick',
|
||||
cols: [[
|
||||
{ type: 'checkbox' },
|
||||
{ field: 'Subsystem', title: '子系统', edit: 'text' },
|
||||
|
||||
{ field: 'Description', title: '变量名称', edit: 'text' },
|
||||
//{ field: 'TagName' , title:'变量编码' , edit:'text'},
|
||||
{ field: 'Address', title: '起始地址', edit: 'text' },
|
||||
{ field: 'DataType', title: '数值类型', edit: 'text' },
|
||||
|
||||
//{ field: 'RtValue' , title:'当前值' , edit:'text'},
|
||||
{ field: 'Units', title: '变量单位', edit: 'text' },
|
||||
{ field: 'SysType', title: '变量分类', edit: 'text' },
|
||||
{ field: 'IFloatPlaces', title: '小数位数', edit: 'text' },
|
||||
//{ field: 'TagID', title: 'ID', sort: true },
|
||||
|
||||
]],
|
||||
page: true,
|
||||
limit: 20,
|
||||
}
|
||||
commonTable.rendertable(options);
|
||||
}
|
||||
}
|
||||
});
|
||||
//layer.close(index);
|
||||
|
||||
//layer.close(index - 1);
|
||||
|
||||
//layer.close(sLayer);
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
newDriver = function () {
|
||||
|
||||
@ -322,18 +574,134 @@
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div id="argumentFormAllen-Bradley" class="formList" style="height:100%;width:100%;display:none">
|
||||
|
||||
<div id="argumentFormAllenBradley" class="formList" style="height:100%;width:100%;display:none">
|
||||
<form class="layui-form" action="">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">CPU地址<em class="dotRed">*</em>:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" id="ServerName_AllenBradley" name="ServerName" placeholder="请输入地址" class="layui-input" style="width: 320px;">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">CPU别名<em class="dotRed">*</em>:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" id="Alias_AllenBradley" name="Alias" placeholder="请设置CPU别名" class="layui-input" style="width: 320px;">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">Port<em class="dotRed">*</em>:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" id="Port_AllenBradley" name="Port" placeholder="请输入Port" class="layui-input" style="width: 320px;">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">Slot<em class="dotRed">*</em>:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" id="Slot_AllenBradley" name="Slot" placeholder="请输入Slot" class="layui-input" style="width: 320px;">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">超时时间<em class="dotRed">*</em>:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" id="TimeOut_AllenBradley" name="TimeOut" placeholder="请输入超时时间" class="layui-input" style="width: 320px;">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<button class="layui-btn" lay-submit lay-filter="formDemo">确认修改</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div id="argumentFormSchneideir" class="formList" style="height:100%;width:100%;display:none">
|
||||
|
||||
<form class="layui-form" action="">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">CPU地址<em class="dotRed">*</em>:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" id="ServerName_Schneideir" name="ServerName" placeholder="请输入地址" class="layui-input" style="width: 320px;">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">CPU别名<em class="dotRed">*</em>:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" id="Alias_Schneideir" name="Alias" placeholder="请设置CPU别名" class="layui-input" style="width: 320px;">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">Port<em class="dotRed">*</em>:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" id="Port_Schneideir" name="Port" placeholder="请输入Port" class="layui-input" style="width: 320px;">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">从站ID<em class="dotRed">*</em>:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" id="SlaveID_Schneideir" name="Slot" placeholder="请输入从站ID" class="layui-input" style="width: 320px;">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">超时时间<em class="dotRed">*</em>:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" id="TimeOut_Schneideir" name="TimeOut" placeholder="请输入超时时间" class="layui-input" style="width: 320px;">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<button class="layui-btn" lay-submit lay-filter="formDemo">确认修改</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div id="argumentFormOpc" class="formList" style="height:100%;width:100%;display:none">
|
||||
|
||||
<form class="layui-form" action="">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">CPU地址<em class="dotRed">*</em>:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" id="ServerName_Opc" name="ServerName" placeholder="请输入地址" class="layui-input" style="width: 320px;">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">CPU别名<em class="dotRed">*</em>:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" id="Alias_Opc" name="Alias" placeholder="请设置CPU别名" class="layui-input" style="width: 320px;">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">Port<em class="dotRed">*</em>:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" id="Port_Opc" name="Port" placeholder="请输入Port" class="layui-input" style="width: 320px;">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">服务地址<em class="dotRed">*</em>:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" id="ServerUri_Opc" name="ServerUri" placeholder="请输入服务地址" class="layui-input" style="width: 320px;">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">超时时间<em class="dotRed">*</em>:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" id="TimeOut_Opc" name="TimeOut" placeholder="请输入超时时间" class="layui-input" style="width: 320px;">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<button class="layui-btn" lay-submit lay-filter="formDemo">确认修改</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div id="showTag" style="height:100%;width:100%">@*;background:black*@
|
||||
<div class="layui-btn-container" id="toolbar">
|
||||
<button id="NF-add" name="NF-add" authorize class="layui-btn layui-btn-sm layui-btn-normal " lay-event="add" onclick="openForm()"><i class="layui-icon"></i>新增</button>
|
||||
<button id="NF-edit" name="NF-edit" authorize class="layui-btn layui-btn-sm layui-btn-warm " lay-event="edit" onclick="openEdit()"><i class="layui-icon"></i>修改</button>
|
||||
<button id="NF-import" name="NF-import" authorize class="layui-btn layui-btn-sm layui-btn-normal " lay-event="import" onclick="openImport()"><i class="layui-icon"></i>导入</button>
|
||||
<button id="NF-delete" name="NF-delete" authorize class="layui-btn layui-btn-sm layui-btn-danger " lay-event="delete"> <i class="layui-icon"></i>删除</button>
|
||||
@*<button id="NF-details" name="NF-details" authorize class="layui-btn layui-btn-sm layui-btn-normal " lay-event="details"> <i class="layui-icon"></i>查看</button>*@
|
||||
</div>
|
||||
|
@ -8,6 +8,9 @@ using System.Diagnostics.Metrics;
|
||||
using System.Text;
|
||||
using static System.Net.Mime.MediaTypeNames;
|
||||
using Microsoft.AspNetCore.Mvc.Rendering;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.CodeAnalysis;
|
||||
using HT.Cloud.Code;
|
||||
|
||||
namespace HT.Cloud.Web.Areas.ReportManage.Controllers
|
||||
{
|
||||
@ -16,6 +19,16 @@ namespace HT.Cloud.Web.Areas.ReportManage.Controllers
|
||||
{
|
||||
public HistoryReportService _historyReportService { get; set; }
|
||||
|
||||
[HttpGet]
|
||||
public async Task<ActionResult> GetDriverGroupList()
|
||||
{
|
||||
//var StartTime = reportparam.StartTime.ToString("yyyy-MM-dd HH:mm:ss");
|
||||
//var EndTime = reportparam.EndTime.ToString("yyyy-MM-dd HH:mm:ss");
|
||||
|
||||
var data = await _historyReportService.GetDriverGroupList();
|
||||
return Content(data);
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public async Task<ActionResult> GetReport(Reportparam reportparam)
|
||||
{
|
||||
@ -50,6 +63,38 @@ namespace HT.Cloud.Web.Areas.ReportManage.Controllers
|
||||
return Content(con, "text/html; charset=utf-8");
|
||||
//return Content(con);
|
||||
}
|
||||
[HttpPost]
|
||||
public async Task<ActionResult> GetReportNewInitPara(Reportparam reportparam)
|
||||
{
|
||||
////sql获取count
|
||||
//var StartTime = Gettime(reportparam.StartTime.ToString());
|
||||
//var EndTime = Gettime(reportparam.EndTime.ToString());
|
||||
//var Interval = int.Parse(reportparam.Interval);
|
||||
//var data = await _historyReportService.GetReportNewInitPara(StartTime, EndTime, Interval);
|
||||
//var con = JsonConvert.SerializeObject(data);
|
||||
//return Content(con);
|
||||
|
||||
//代码理论count
|
||||
var StartTime = long.Parse(reportparam.StartTime.ToString());
|
||||
var EndTime = long.Parse(reportparam.EndTime.ToString());
|
||||
var Interval = int.Parse(reportparam.Interval);
|
||||
var data = await _historyReportService.GetReportNewInitParaInCode(StartTime, EndTime, Interval);
|
||||
var con = JsonConvert.SerializeObject(data);
|
||||
return Content(con);
|
||||
}
|
||||
[IgnoreAntiforgeryToken]
|
||||
public async Task<ActionResult> GetReportNewPage(string page, string limit,string StartTime,string EndTime, string Interval, string GroupName)
|
||||
{
|
||||
//string page = Request.Query["page"].ToString();
|
||||
//string limit = Request.Query["limit"].ToString();
|
||||
//var page = Gettime(asyncparam.page.ToString());
|
||||
//var limit = Gettime(asyncparam.limit.ToString());
|
||||
var startTime = Gettime(StartTime);
|
||||
var endTime = Gettime(EndTime);
|
||||
var data = await _historyReportService.GetReportNewAsync(page, limit, startTime, endTime, Interval, GroupName);
|
||||
//var con = JsonConvert.SerializeObject(data);
|
||||
return Content(data);
|
||||
}
|
||||
[HttpGet]
|
||||
public async Task<ActionResult> GetReportFirstHead()
|
||||
{
|
||||
@ -68,7 +113,18 @@ namespace HT.Cloud.Web.Areas.ReportManage.Controllers
|
||||
var data = await _historyReportService.GetReportSecondHead();
|
||||
return Content(data);
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public async Task<ActionResult> GetReportDownLoad(DownLoadparam downLoadparam)
|
||||
{
|
||||
//var StartTime = reportparam.StartTime.ToString("yyyy-MM-dd HH:mm:ss");
|
||||
//var EndTime = reportparam.EndTime.ToString("yyyy-MM-dd HH:mm:ss");
|
||||
DateTime start = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
|
||||
DateTime StartTime = start.AddMilliseconds(downLoadparam.StartTime).ToLocalTime();
|
||||
DateTime EndTime = start.AddMilliseconds(downLoadparam.EndTime).ToLocalTime();
|
||||
int Interval = int.Parse(downLoadparam.Interval.ToString());
|
||||
var data = await _historyReportService.GetReportDownLoad(StartTime, EndTime, Interval);
|
||||
return Content(data);
|
||||
}
|
||||
public string Gettime(string longtime)
|
||||
{
|
||||
long jsTimeStamp =long.Parse( longtime);
|
||||
@ -83,5 +139,16 @@ namespace HT.Cloud.Web.Areas.ReportManage.Controllers
|
||||
public string EndTime { get; set; }
|
||||
public string Interval { get; set; }
|
||||
}
|
||||
public class DownLoadparam
|
||||
{
|
||||
public long StartTime { get; set; }
|
||||
public long EndTime { get; set; }
|
||||
public string Interval { get; set; }
|
||||
}
|
||||
public class Asyncparam
|
||||
{
|
||||
public string page { get; set; }
|
||||
public string limit { get; set; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -15,9 +15,7 @@
|
||||
表单设计器代码
|
||||
</title>
|
||||
<style type="text/css">
|
||||
.layui-table-cell {
|
||||
line-height: 20px !important;
|
||||
vertical-align: middle;
|
||||
.mytable .layui-table-cell {
|
||||
height: auto;
|
||||
overflow: visible;
|
||||
text-overflow: inherit;
|
||||
@ -25,6 +23,17 @@
|
||||
}
|
||||
|
||||
</style>
|
||||
<style>
|
||||
.layui-table-cell {
|
||||
font-size:14px;
|
||||
padding:0 5px;
|
||||
height:auto;
|
||||
overflow:visible;
|
||||
text-overflow:inherit;
|
||||
white-space:normal;
|
||||
word-break: break-all;
|
||||
}
|
||||
</style>
|
||||
<link rel="stylesheet" href="~/lib/layui/css/layui.css" />
|
||||
<link rel="stylesheet" href="~/js/lay-module/formDesigner/formDesigner.css" />
|
||||
<link rel="stylesheet" href="~/js/lay-module/cron/cron.css" />
|
||||
@ -37,25 +46,38 @@
|
||||
<form class="layui-form" style="height:30px;" id="formPreviewForm">
|
||||
<div id="grid_2" class="layui-form-item layui-row grid active" data-id="grid_2"
|
||||
data-tag="grid" data-index="0" style="height:100%">
|
||||
<div class="layui-col-md3 widget-col-list column0" data-index="0" data-parentindex="0">
|
||||
<div class="layui-col-md2 widget-col-list column2" data-index="3" data-parentindex="0">
|
||||
<div id="select_Group" class="layui-form-item active" data-id="select_4" data-tag="select"
|
||||
data-index="0">
|
||||
<label class="layui-form-label layui-form-required" style="width: 100px;">
|
||||
选择系统:
|
||||
</label>
|
||||
<div class="layui-input-block layui-form" lay-filter="select_4" style="margin-left: 110px">
|
||||
<select name="selectGroup" lay-verify="required" id="selectGroup">
|
||||
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-md2 widget-col-list column0" data-index="0" data-parentindex="0">
|
||||
<div id="ReStartTime" class="layui-form-item active" data-id="ReStartTime"
|
||||
data-tag="date" data-index="0">
|
||||
<label class="layui-form-label layui-form-required" style="width: 110px;">
|
||||
开始时间:
|
||||
</label>
|
||||
<div class="layui-input-block" style="width:calc(100% - 150px);margin-left: 110px;">
|
||||
<div class="layui-input-block" style="width:calc(100% - 110px);margin-left: 110px;">
|
||||
<input id="dateReStartTime" name="ndateReStartTime" lay-verify="required"
|
||||
class="layui-input icon-date widget-date " style="line-height: 40px;">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-md3 widget-col-list column1" data-index="1" data-parentindex="0">
|
||||
<div class="layui-col-md2 widget-col-list column1" data-index="1" data-parentindex="0">
|
||||
<div id="ReEndTime" class="layui-form-item active" data-id="ReEndTime"
|
||||
data-tag="date" data-index="0">
|
||||
<label class="layui-form-label layui-form-required" style="width: 110px;">
|
||||
结束世间:
|
||||
</label>
|
||||
<div class="layui-input-block" style="width:calc(100% - 150px);margin-left: 110px;">
|
||||
<div class="layui-input-block" style="width:calc(100% - 110px);margin-left: 110px;">
|
||||
<input id="dateReEndTime" name="ndateReEndTime" lay-verify="required" class="layui-input icon-date widget-date "
|
||||
style="line-height: 40px;">
|
||||
</div>
|
||||
@ -104,6 +126,15 @@
|
||||
</label>
|
||||
<div class="layui-input-block layui-form" lay-filter="select_4" style="margin-left: 110px">
|
||||
<select name="selectint" lay-verify="required" id="selectIntervalt">
|
||||
<option value="onesec">
|
||||
1秒钟
|
||||
</option>
|
||||
<option value="tensec">
|
||||
10秒钟
|
||||
</option>
|
||||
<option value="thirtysec">
|
||||
30秒钟
|
||||
</option>
|
||||
<option value="onemin" selected="">
|
||||
1分钟
|
||||
</option>
|
||||
@ -141,7 +172,7 @@
|
||||
data-index="0">
|
||||
|
||||
<div class="layui-input-block" style="margin-left: 0px;">
|
||||
<button id="bottom_6bottom" type="button" class="layui-btn custom-zc" ; onclick="downloadreport()">
|
||||
<button id="bottom_6bottom" type="button" class="layui-btn custom-zc" ; onclick="exports()">
|
||||
<i class="layui-icon ">
|
||||
</i>
|
||||
下载
|
||||
@ -166,10 +197,12 @@
|
||||
</script>
|
||||
@* <script type="text/javascript" src="~/js/lay-module/iceEditor/iceEditor.js">
|
||||
</script>
|
||||
<script type="text/javascript" src="~/js/config.js?v=100">*@
|
||||
</script>
|
||||
<script type="text/javascript" src="~/js/config.js?v=100">
|
||||
</script>*@
|
||||
<script type="text/javascript" src="~/lib/xlsx/dist/xlsx.full.min.js">
|
||||
</script>
|
||||
<script type="text/javascript" src="~/lib/notify/notify_stand.js">
|
||||
</script>
|
||||
<script>
|
||||
|
||||
layui.use(["table", "layer", "laytpl", "element", "form", "slider", "laydate", "rate", "colorpicker", "carousel", "upload", "formField", "numberInput", "iconPicker", "cron", "labelGeneration"],
|
||||
@ -483,6 +516,19 @@
|
||||
});
|
||||
});
|
||||
wcLoading.close();
|
||||
$.ajax({
|
||||
url: "/ReportManage/HistoryReport/GetDriverGroupList",
|
||||
type: "GET",
|
||||
success: function (redata) {
|
||||
debugger;
|
||||
var groupResult = JSON.parse(redata);
|
||||
debugger;
|
||||
$.each(groupResult,function(index,item){
|
||||
$('#selectGroup').append(new Option(item.GroupDescription,item.GroupName));
|
||||
});
|
||||
debugger;
|
||||
}
|
||||
});
|
||||
//debugger;
|
||||
var starttime = new Date(new Date().setHours(0, 0, 0, 0));
|
||||
var starttimeString = starttime.getFullYear() + "-" + parseInt(starttime.getMonth() + 1) + "-" + starttime.getDate() + " " + (starttime.getHours()) + ":" + starttime.getMinutes() + ":" + starttime.getSeconds();
|
||||
@ -584,19 +630,19 @@
|
||||
async function downloadreport() {
|
||||
window.open(filepath);
|
||||
}
|
||||
async function GetReportViewNew() {
|
||||
async function GetReportViewNewGZIP() {
|
||||
debugger;
|
||||
showLoading();
|
||||
var datetimestart = $('#dateReStartTime')[0].value;
|
||||
var datetimeend = $('#dateReEndTime')[0].value;
|
||||
var timeInterval = 0;
|
||||
switch ($('[name="selectint"]')[0].value) {
|
||||
case "onesec":
|
||||
timeInterval = 1
|
||||
break
|
||||
case "tensec":
|
||||
timeInterval = 10
|
||||
break
|
||||
case "twentysec":
|
||||
timeInterval = 20
|
||||
break
|
||||
case "thirtysec":
|
||||
timeInterval = 30
|
||||
break
|
||||
@ -645,7 +691,6 @@
|
||||
|
||||
var start = Date.now();
|
||||
result = JSON.parse(redata);
|
||||
|
||||
var end = Date.now();
|
||||
console.log(end - start);
|
||||
debugger;
|
||||
@ -685,6 +730,8 @@
|
||||
align: 'center',
|
||||
width: 200,
|
||||
rowspan: 2,
|
||||
|
||||
|
||||
}
|
||||
firstHead.push(timeHead);
|
||||
for (var si = 0; si < second.length; si++) {
|
||||
@ -714,7 +761,7 @@
|
||||
var table = layui.table;
|
||||
table.render({
|
||||
elem: '#result',
|
||||
height: 'full-200',
|
||||
height: 'full-160',
|
||||
data: result,
|
||||
//editTrigger:'dblclick',
|
||||
cols: [
|
||||
@ -723,6 +770,8 @@
|
||||
],
|
||||
page:true,
|
||||
limit:15,
|
||||
//toolbar: 'default',
|
||||
//defaultToolbar: ['filter', 'print', 'exports'],
|
||||
done: function (res, curr, count) {
|
||||
debugger;
|
||||
// console.log(res)
|
||||
@ -775,6 +824,248 @@
|
||||
completeLoading();
|
||||
|
||||
};
|
||||
var DownLaodPara;
|
||||
async function GetReportViewNew() {
|
||||
debugger;
|
||||
showLoading();
|
||||
var datetimestart = $('#dateReStartTime')[0].value;
|
||||
var datetimeend = $('#dateReEndTime')[0].value;
|
||||
var groupname = $('[name="selectGroup"]')[0].value;
|
||||
var timeInterval = 0;
|
||||
switch ($('[name="selectint"]')[0].value) {
|
||||
case "onesec":
|
||||
timeInterval = 1
|
||||
break
|
||||
case "tensec":
|
||||
timeInterval = 10
|
||||
break
|
||||
case "thirtysec":
|
||||
timeInterval = 30
|
||||
break
|
||||
case "onemin":
|
||||
timeInterval = 60
|
||||
break
|
||||
case "fivemin":
|
||||
timeInterval = 300
|
||||
break
|
||||
case "tenmin":
|
||||
timeInterval = 600
|
||||
break
|
||||
case "thirtymin":
|
||||
timeInterval = 1800
|
||||
break
|
||||
case "onehour":
|
||||
timeInterval = 3600
|
||||
break
|
||||
default:
|
||||
timeInterval = 3600
|
||||
};
|
||||
debugger;
|
||||
//showLoading();
|
||||
var datapa = {
|
||||
"StartTime": Date.parse(new Date(datetimestart)), "EndTime": Date.parse(new Date(datetimeend)), "Interval": timeInterval
|
||||
};
|
||||
DownLaodPara = datapa;
|
||||
//var datapa = { "StartTime": datetimestart, "EndTime": datetimeend, "Interval": timeInterval };
|
||||
debugger;
|
||||
let rescounts = 0;
|
||||
let first = "";
|
||||
let second = "";
|
||||
var start1 = Date.now();
|
||||
await $.ajax({
|
||||
url: "/ReportManage/HistoryReport/GetReportNewInitPara",
|
||||
type: "POST",
|
||||
//dataType: "json",
|
||||
//async: false,
|
||||
data: datapa,
|
||||
|
||||
success: function (redata) {
|
||||
debugger;
|
||||
var start = Date.now();
|
||||
rescounts = parseInt(redata);
|
||||
debugger;
|
||||
}
|
||||
});
|
||||
var end1 = Date.now();
|
||||
console.log(end1 - start1);
|
||||
await $.ajax({
|
||||
url: "/ReportManage/HistoryReport/GetReportFirstHead",
|
||||
type: "GET",
|
||||
//dataType: "json",
|
||||
//async: false,
|
||||
//data: datapa,
|
||||
success: function (refirst) {
|
||||
first = JSON.parse(refirst);
|
||||
debugger;
|
||||
}
|
||||
});
|
||||
|
||||
await $.ajax({
|
||||
url: "/ReportManage/HistoryReport/GetReportSecondHead",
|
||||
type: "GET",
|
||||
//dataType: "json",
|
||||
//async: false,
|
||||
//data: datapa,
|
||||
success: function (resecond) {
|
||||
second = JSON.parse(resecond);
|
||||
debugger;
|
||||
}
|
||||
});
|
||||
|
||||
let firstHead = new Array();
|
||||
let secondHead = new Array();
|
||||
let timeHead = {
|
||||
field: 'HDATETIME',
|
||||
title: '时间',
|
||||
align: 'center',
|
||||
width: 200,
|
||||
rowspan: 2,
|
||||
|
||||
|
||||
}
|
||||
firstHead.push(timeHead);
|
||||
for (var si = 0; si < second.length; si++) {
|
||||
let head = {
|
||||
align: 'center',
|
||||
title: second[si].HSYS,
|
||||
colspan: second[si].Head.length,
|
||||
}
|
||||
|
||||
|
||||
firstHead.push(head);
|
||||
|
||||
|
||||
for (var hi = 0; hi < second[si].Head.length; hi++) {
|
||||
let shead = {
|
||||
field: second[si].Title[hi],
|
||||
title: second[si].Head[hi],
|
||||
align: 'center',
|
||||
width: 90,
|
||||
}
|
||||
|
||||
secondHead.push(shead);
|
||||
}
|
||||
}
|
||||
var autoCounts = firstHead.length + secondHead.length;
|
||||
debugger;
|
||||
var ingd = 0;
|
||||
var table = layui.table;
|
||||
table.render({
|
||||
elem: '#result',
|
||||
id: 'result',
|
||||
height: 'full-140',
|
||||
url: '/ReportManage/HistoryReport/GetReportNewPage',
|
||||
where: { "StartTime": Date.parse(new Date(datetimestart)), "EndTime": Date.parse(new Date(datetimeend)), "Interval": timeInterval, "GroupName": groupname },
|
||||
page: true,
|
||||
limit: 13,
|
||||
//even: true,
|
||||
|
||||
//data: result,
|
||||
//editTrigger:'dblclick',
|
||||
cols: [
|
||||
firstHead,
|
||||
secondHead,
|
||||
],
|
||||
parseData: function (res) { //res 即为原始返回的数据
|
||||
return {
|
||||
"code": res.code, //解析接口状态
|
||||
"msg": res.mag, //解析提示文本
|
||||
"count": rescounts, //解析数据长度
|
||||
"data": JSON.parse(res.data) //解析数据列表
|
||||
};
|
||||
},
|
||||
//toolbar: 'default',
|
||||
//defaultToolbar: ['filter', 'print', 'exports'],
|
||||
done: function (res, curr, count) {
|
||||
debugger;
|
||||
//console.log(res);
|
||||
////得到当前页码
|
||||
//console.log(curr);
|
||||
////得到数据总量
|
||||
//console.log(count);
|
||||
// console.log(res)
|
||||
//var donestyle = "<style>.layui - table - cell { height: auto;overflow: visible;text - overflow: inherit;white - space: normal;word -break: break-all;}.layui - table - cell a {text- decoration: underline;}.layui - table - cell div {white - space: nowrap;overflow: hidden;text - overflow: ellipsis;min - height: 30px;line - height: 30px;}</style>"
|
||||
//var oDiv = document.querySelector("#tdemo");
|
||||
//oDiv.style.cssText = donestyle;
|
||||
//layui-table-cell laytable-cell-group
|
||||
//layui-table-cell laytable-cell-1-1-0
|
||||
//$(".layui-table-cell"). [800].style
|
||||
//解决表头宽度不够自动换行问题
|
||||
$(".layui-table-cell").each(function (index, val) {
|
||||
if (index > autoCounts) {
|
||||
return false;
|
||||
}
|
||||
debugger;
|
||||
$(".layui-table-cell")[index].style.lineHeight = "20px !importanr";
|
||||
$(".layui-table-cell")[index].style.verticalAlign = "middle";
|
||||
$(".layui-table-cell")[index].style.height = "auto";
|
||||
$(".layui-table-cell")[index].style.overflow = "visible";
|
||||
$(".layui-table-cell")[index].style.textOverflow = "inherit";
|
||||
$(".layui-table-cell")[index].style.whiteSpace = "normal";
|
||||
|
||||
});
|
||||
////test
|
||||
//$(".layui-table-cell")[3].style.lineHeight = "20px !importanr";
|
||||
//$(".layui-table-cell")[3].style.verticalAlign = "middle";
|
||||
//$(".layui-table-cell")[3].style.height = "auto";
|
||||
//$(".layui-table-cell")[3].style.overflow = "visible";
|
||||
//$(".layui-table-cell")[3].style.textOverflow = "inherit";
|
||||
//$(".layui-table-cell")[3].style.whiteSpace = "normal";
|
||||
////解决操作栏因为内容过多换行问题
|
||||
//$(".layui-table-main tr").each(function (index, val) {
|
||||
// $($(".layui-table-fixed-l .layui-table-body tbody tr")[index]).height($(val).height());
|
||||
// $($(".layui-table-fixed-r .layui-table-body tbody tr")[index]).height($(val).height());
|
||||
//});
|
||||
////解决fixed固定,而导致的th高度不一致
|
||||
//$(".layui-table-header tr").each(function (index, val) {
|
||||
// $(".layui-table-fixed").each(function () {
|
||||
// $($(this).find(".layui-table-header thead th")[index]).height($(val).height());
|
||||
// });
|
||||
//});
|
||||
//$(".layui-table-header tr").each(function (index, val) {
|
||||
// $(".layui-table-fixed").each(function () {
|
||||
// $($(this).find(".layui-table-header thead tr")[index]).height($(val).height());
|
||||
// });
|
||||
//});
|
||||
//$(".layui-table-main tr").each(function (index, val) {
|
||||
// $(".layui-table-fixed").each(function () {
|
||||
// $($(this).find(".layui-table-body tbody tr")[index]).height($(val).height());
|
||||
// });
|
||||
//});
|
||||
//$(".layui-table-main tr").each(function (index, val) {
|
||||
// $(".layui-table-fixed").each(function () {
|
||||
// $($(this).find(".layui-table-body tbody th")[index]).height($(val).height());
|
||||
// });
|
||||
//});
|
||||
|
||||
$('.layui-laypage-limits').hide();
|
||||
}
|
||||
});
|
||||
debugger;
|
||||
completeLoading();
|
||||
|
||||
};
|
||||
|
||||
async function exports() {
|
||||
notify.info("服务器导出数据,稍后弹出下载文件,可先浏览报表", "vcenter");
|
||||
await $.ajax({
|
||||
url: "/ReportManage/HistoryReport/GetReportDownLoad",
|
||||
type: "POST",
|
||||
//dataType: "json",
|
||||
//async: false,
|
||||
data: DownLaodPara,
|
||||
success:function (downRes) {
|
||||
var ddfileName = JSON.parse(downRes);
|
||||
|
||||
var fileNewDownloadUrl = "/report/" + ddfileName;
|
||||
//location.origin = fileNewDownloadUrl;
|
||||
//filepath = location.origin + fileNewDownloadUrl;
|
||||
|
||||
window.open(location.origin + fileNewDownloadUrl);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
async function GetReportView() {
|
||||
debugger;
|
||||
showLoading();
|
||||
|
@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<key id="a3015bb5-dfd2-4bbd-88c4-c0121f8367f5" version="1">
|
||||
<creationDate>2023-06-28T08:18:24.3234578Z</creationDate>
|
||||
<activationDate>2023-06-28T08:18:24.262276Z</activationDate>
|
||||
<expirationDate>2023-09-26T08:18:24.262276Z</expirationDate>
|
||||
<descriptor deserializerType="Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.ConfigurationModel.AuthenticatedEncryptorDescriptorDeserializer, Microsoft.AspNetCore.DataProtection, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60">
|
||||
<descriptor>
|
||||
<encryption algorithm="AES_256_CBC" />
|
||||
<validation algorithm="HMACSHA256" />
|
||||
<masterKey p4:requiresEncryption="true" xmlns:p4="http://schemas.asp.net/2015/03/dataProtection">
|
||||
<!-- Warning: the key below is in an unencrypted form. -->
|
||||
<value>9oIPliA+hA60+GQwIdZpAnfd1Tk2QrBoBetU3IEoZhXfDeBOdzgp9YKyl9mZsmSDyHXtYQSjsCQRTYOCPhVCWg==</value>
|
||||
</masterKey>
|
||||
</descriptor>
|
||||
</descriptor>
|
||||
</key>
|
@ -7,6 +7,8 @@
|
||||
<Version>3.0.0-preview</Version>
|
||||
<GenerateDocumentationFile>True</GenerateDocumentationFile>
|
||||
<DocumentationFile>WaterCloud.Web.xml</DocumentationFile>
|
||||
<RazorCompileOnPublish>false</RazorCompileOnPublish>
|
||||
<MvcRazorCompileOnPublish>false</MvcRazorCompileOnPublish>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
|
||||
|
@ -69,8 +69,8 @@ namespace HT.Cloud.Web
|
||||
options.SerializerSettings.ContractResolver = new DefaultContractResolver();
|
||||
});
|
||||
|
||||
|
||||
|
||||
services.AddRazorPages().AddRazorRuntimeCompilation();
|
||||
//调试前端可更新
|
||||
services.AddControllersWithViews().AddRazorRuntimeCompilation();
|
||||
//清理缓存
|
||||
|
@ -57,7 +57,7 @@
|
||||
<div class="layui-form-item">
|
||||
<span>
|
||||
<input type="checkbox" name="remember_user" id="remember_user" lay-skin="primary" style="vertical-align:middle;" value="true">
|
||||
<span>记住密码</span>
|
||||
<span>记住密码</span>
|
||||
</span>
|
||||
</div>
|
||||
<div class="row">
|
||||
|
252
HT.Cloud.Web/Views/Login/Index1.cshtml
Normal file
252
HT.Cloud.Web/Views/Login/Index1.cshtml
Normal file
@ -0,0 +1,252 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>@ViewBag.ProjectName-恒拓出品</title>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||
<meta http-equiv="Access-Control-Allow-Origin" content="*">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<meta name="format-detection" content="telephone=no">
|
||||
<link rel="icon" href="@ViewBag.LogoIcon">
|
||||
<link rel="stylesheet" href="~/lib/layui/css/layui.css?v=@HT.Cloud.Code.GlobalContext.GetVersion()" media="all">
|
||||
<link rel="stylesheet" href="~/css/loginnew.css?v=@HT.Cloud.Code.GlobalContext.GetVersion()" media="all">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<script src="~/lib/jquery-3.4.1/jquery-3.4.1.min.js?v=@HT.Cloud.Code.GlobalContext.GetVersion()" charset="utf-8"></script>
|
||||
<script src="~/js/cookie/jquery.cookie.js?v=@HT.Cloud.Code.GlobalContext.GetVersion()"></script>
|
||||
<script src="~/js/md5/base64.js?v=@HT.Cloud.Code.GlobalContext.GetVersion()"></script>
|
||||
<script src="~/js/md5/jquery.md5.js?v=@HT.Cloud.Code.GlobalContext.GetVersion()"></script>
|
||||
<script src="~/lib/layui/layui.js?v=@HT.Cloud.Code.GlobalContext.GetVersion()" charset="utf-8"></script>
|
||||
<script src="~/js/lay-config.js?v=@HT.Cloud.Code.GlobalContext.GetVersion()" charset="utf-8"></script>
|
||||
<script src="~/js/framework-ui.js?v=@HT.Cloud.Code.GlobalContext.GetVersion()"></script>
|
||||
<script>
|
||||
layui.use(['jquery', 'form', 'table', 'common', 'commonTable', 'echarts'], function () {
|
||||
});
|
||||
</script>
|
||||
@*动画特效*@
|
||||
@* <div id="starsBox"></div>*@
|
||||
<div class="layui-container">
|
||||
<div class="admin-login-background">
|
||||
<div class="layui-form login-form">
|
||||
<div class="logo-title">
|
||||
<h1>@ViewBag.ProjectName</h1>
|
||||
</div>
|
||||
<form class="layui-form" action="">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-icon layui-icon-username" for="username"></label>
|
||||
<input type="text" id="username" lay-verify="required|account" placeholder="用户名" autocomplete="off" class="layui-input" value="@ViewBag.UserName">
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-icon layui-icon-password" for="password"></label>
|
||||
<input type="password" id="password" lay-verify="required|password" placeholder="密码" autocomplete="off" class="layui-input" value="@ViewBag.Password">
|
||||
</div>
|
||||
@* <div class="layui-form-item">
|
||||
<label class="layui-icon layui-icon-vercode" for="captcha"></label>
|
||||
<div class="code">
|
||||
<input id="captcha" type="text" name="captcha" lay-verify="required|captcha" placeholder="图形验证码" autocomplete="off" class="layui-input verification captcha">
|
||||
<canvas id="canvas" width="100" height="43"></canvas>
|
||||
</div>
|
||||
</div>*@
|
||||
<div class="layui-form-item layui-hide">
|
||||
<select id="wchost" name="wchost" lay-verify="required">
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<span>
|
||||
<input type="checkbox" name="remember_user" id="remember_user" lay-skin="primary" style="vertical-align:middle;" value="true">
|
||||
<span>记住密码</span>
|
||||
</span>
|
||||
</div>
|
||||
<div class="row">
|
||||
@* <span>测试账号admin,密码0000</span>*@
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="login_tips"></div>
|
||||
<button id="login_button" class="layui-btn layui-btn-fluid" lay-submit="" lay-filter="login">登 入</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="~/js/login.js?v=@HT.Cloud.Code.GlobalContext.GetVersion()"></script>
|
||||
<script>
|
||||
//模式
|
||||
var SqlMode = '@ViewBag.SqlMode';
|
||||
(function ($) {
|
||||
var show_num = [];
|
||||
$.login = {
|
||||
formMessage: function (msg) {
|
||||
$('.login_tips').find('.tips_msg').remove();
|
||||
$('.login_tips').append('<div class="tips_msg"><i class="fa fa-question-circle"></i>' + msg + '</div>');
|
||||
},
|
||||
init: function () {
|
||||
$("#canvas").click(function () {
|
||||
draw(show_num);
|
||||
});
|
||||
var login_error = top.$.cookie('WaterCloud_login_error');
|
||||
if (login_error != null) {
|
||||
switch (login_error) {
|
||||
case "overdue":
|
||||
$.login.formMessage('系统登录已超时,请重新登录');
|
||||
break;
|
||||
case "OnLine":
|
||||
$.login.formMessage('您的帐号已在其它地方登录,请重新登录');
|
||||
break;
|
||||
case "-1":
|
||||
$.login.formMessage('系统未知错误,请重新登录');
|
||||
break;
|
||||
}
|
||||
top.$.cookie('WaterCloud_login_error', '', { path: "/", expires: -1 });
|
||||
}
|
||||
},
|
||||
checkLogin: function () {
|
||||
$.ajax({
|
||||
url: "/Login/CheckLoginState?v=" + new Date().Format("yyyy-MM-dd hh:mm:ss"),
|
||||
type: "post",
|
||||
async: false,
|
||||
dataType: "json",
|
||||
success: function (data) {
|
||||
if (data.state == "success") {
|
||||
var url = $.cookie('wc_returnurl');
|
||||
if (url != null) {
|
||||
window.location.href = '@Url.Content("~/Home/Index")' + "#/" + url;
|
||||
$.cookie('wc_returnurl', '', { path: "/", expires: -1 });
|
||||
}
|
||||
else {
|
||||
window.location.href = '@Url.Content("~/Home/Index")';
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
$(function () {
|
||||
if (SqlMode =='TenantSql') {
|
||||
$('#wchost').parent().removeClass('layui-hide');
|
||||
}
|
||||
else {
|
||||
$('#wchost').parent().addClass('layui-hide');
|
||||
$('#wchost').removeAttr('lay-verify');
|
||||
}
|
||||
$.login.init();
|
||||
$.login.checkLogin();
|
||||
$("#wchost").bindSelect({
|
||||
url: "/Login/GetListJsonByLogin",
|
||||
id: "F_HostUrl",
|
||||
text: "F_ProjectName"
|
||||
});
|
||||
draw(show_num);
|
||||
if ($.cookie("remember_user")) {
|
||||
$("#remember_user").prop("checked", true);
|
||||
$("#username").val($.cookie("username"));
|
||||
$("#password").val(Base64.decode($.cookie("password")));
|
||||
}
|
||||
});
|
||||
function saveUserInfo() {
|
||||
if ($("#remember_user").prop("checked") == true) {
|
||||
var user_name = $("#username").val();
|
||||
var user_password = $("#password").val();
|
||||
$.cookie("remember_user", "true", {
|
||||
expires: 7
|
||||
}); // 存储一个带7天期限的 cookie
|
||||
$.cookie("username", user_name, {
|
||||
expires: 7
|
||||
}); // 存储一个带7天期限的 cookie
|
||||
$.cookie("password", Base64.encode(user_password), {
|
||||
expires: 7
|
||||
}); // 存储一个带7天期限的 cookie
|
||||
} else {
|
||||
$.cookie("remember_user", "false", {
|
||||
expires: -1
|
||||
}); // 删除 cookie
|
||||
$.cookie("username", '', {
|
||||
expires: -1
|
||||
});
|
||||
$.cookie("password", '', {
|
||||
expires: -1
|
||||
});
|
||||
}
|
||||
}
|
||||
layui.use(['form'], function () {
|
||||
var form = layui.form,
|
||||
layer = layui.layer;
|
||||
// 登录过期的时候,跳出ifram框架
|
||||
if (top.location != self.location) top.location = self.location;
|
||||
|
||||
// 进行登录操作
|
||||
form.on('submit(login)', function (data) {
|
||||
saveUserInfo();
|
||||
data = data.field;
|
||||
if (data.username == '') {
|
||||
layer.msg('用户名不能为空');
|
||||
return false;
|
||||
}
|
||||
if (data.password == '') {
|
||||
layer.msg('密码不能为空');
|
||||
return false;
|
||||
}
|
||||
var num = show_num.join("");
|
||||
//if (data.captcha == '') {
|
||||
// layer.msg('验证码不能为空');
|
||||
// return false;
|
||||
//}
|
||||
//else if (num != data.captcha.toLowerCase()) {
|
||||
// layer.msg('验证码错误');
|
||||
// draw(show_num)
|
||||
// return false;
|
||||
//}
|
||||
$("#login_button").empty();
|
||||
$("#login_button").attr('disabled', 'disabled').html("loading...");
|
||||
$.ajax({
|
||||
url: "/Login/CheckLogin?v=" + new Date().Format("yyyy-MM-dd hh:mm:ss"),
|
||||
data: { username: $.trim($('#username').val()), localurl: $('#wchost').val(), password: $.md5($.trim($('#password').val())) },
|
||||
type: "post",
|
||||
dataType: "json",
|
||||
success: function (data) {
|
||||
if (data.state == "success") {
|
||||
$("#login_button").empty();
|
||||
$("#login_button").html("登录成功,正在跳转...");
|
||||
var realurl = $.cookie('wc_realreturnurl');
|
||||
if (realurl != null) {
|
||||
window.location.href = realurl;
|
||||
$.cookie('wc_realreturnurl', '', { path: "/", expires: -1 });
|
||||
$.cookie('wc_returnurl', '', { path: "/", expires: -1 });
|
||||
}
|
||||
else {
|
||||
var url = $.cookie('wc_returnurl');
|
||||
if (url != null) {
|
||||
window.location.href = '@Url.Content("~/Home/Index")' + "#/" + url;
|
||||
$.cookie('wc_returnurl', '', { path: "/", expires: -1 });
|
||||
}
|
||||
else {
|
||||
window.location.href = '@Url.Content("~/Home/Index")';
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$("#login_button").empty();
|
||||
$("#login_button").removeAttr('disabled').html("登 入");
|
||||
draw(show_num);
|
||||
layer.msg(data.message);
|
||||
$.login.formMessage(data.message);
|
||||
}
|
||||
},
|
||||
error: function () {
|
||||
$("#login_button").empty();
|
||||
$("#login_button").removeAttr('disabled').html("登 入");
|
||||
draw(show_num);
|
||||
layer.msg("系统未知错误,请重新登录");
|
||||
$.login.formMessage("系统未知错误,请重新登录");
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
return false;
|
||||
});
|
||||
});
|
||||
})(jQuery);
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
28
HT.Cloud.Web/Views/Shared/_Index1.cshtml
Normal file
28
HT.Cloud.Web/Views/Shared/_Index1.cshtml
Normal file
@ -0,0 +1,28 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<title>@ViewBag.Title</title>
|
||||
<link href="~/lib/font-awesome-4.7.0/css/font-awesome.css?v=@HT.Cloud.Code.GlobalContext.GetVersion()" rel="stylesheet" />
|
||||
<script src="~/lib/jquery-3.4.1/jquery-3.4.1.min.js?v=@HT.Cloud.Code.GlobalContext.GetVersion()" charset="utf-8"></script>
|
||||
<link rel="stylesheet" href="~/js/lay-module/dtree/dtree.css?v=@HT.Cloud.Code.GlobalContext.GetVersion()">
|
||||
<link rel="stylesheet" href="~/js/lay-module/dtree/font/dtreefont.css?v=@HT.Cloud.Code.GlobalContext.GetVersion()">
|
||||
<script src="~/js/framework-clientdata.js?v=@HT.Cloud.Code.GlobalContext.GetVersion()"></script>
|
||||
<script src="~/js/framework-ui.js?v=@HT.Cloud.Code.GlobalContext.GetVersion()"></script>
|
||||
<script src="~/lib/layui/layui.js?v=@HT.Cloud.Code.GlobalContext.GetVersion()"></script>
|
||||
<link rel="stylesheet" href="~/lib/layui/css/layui.css?v=@HT.Cloud.Code.GlobalContext.GetVersion()" media="all">
|
||||
<link rel="stylesheet" href="~/css/public.css?v=@HT.Cloud.Code.GlobalContext.GetVersion()" media="all">
|
||||
<script src="~/js/lay-config.js?v=@HT.Cloud.Code.GlobalContext.GetVersion()" charset="utf-8"></script>
|
||||
<link href="~/css/watercloud.css?v=@HT.Cloud.Code.GlobalContext.GetVersion()" rel="stylesheet" />
|
||||
<link rel="stylesheet" href="~/js/lay-module/loading/wcLoading.css?v=@HT.Cloud.Code.GlobalContext.GetVersion()" media="all">
|
||||
<link rel="stylesheet" href="~/css/soulTable.css?v=@HT.Cloud.Code.GlobalContext.GetVersion()" media="all">
|
||||
<script src="~/js/lay-module/loading/wcLoading.js?v=@HT.Cloud.Code.GlobalContext.GetVersion()" charset="utf-8"></script>
|
||||
<script src="~/lib/jquery-easyui/Scripts/jquery.easyui-1.4.5.min.js?v=@HT.Cloud.Code.GlobalContext.GetVersion()" charset="utf-8"></script>
|
||||
<link rel="stylesheet" type="text/css" href="~/lib/jquery-easyui/Content/themes/default/easyui.css?v=@HT.Cloud.Code.GlobalContext.GetVersion()" media="all">
|
||||
<link rel="stylesheet" type="text/css" href="~/lib/jquery-easyui/Content/themes/icon.css?v=@HT.Cloud.Code.GlobalContext.GetVersion()" media="all">
|
||||
</head>
|
||||
<body>
|
||||
@RenderBody()
|
||||
@Html.AntiForgeryToken()
|
||||
</body>
|
||||
</html>
|
Reference in New Issue
Block a user