更新设备变量新追加

This commit is contained in:
dell
2023-03-10 16:39:39 +08:00
parent 80564727ea
commit a3a51fd6e2
6 changed files with 660 additions and 52 deletions

View File

@ -26,7 +26,7 @@ namespace HT.Cloud.Domain.DevicesManage
///
/// </summary>
[SugarColumn(ColumnName="DataType", ColumnDescription = "",ColumnDataType = "tinyint(3)")]
public bool DataType { get; set; }
public short DataType { get; set; }
/// <summary>
///
/// </summary>

View File

@ -5,6 +5,8 @@ using System.Linq;
using System.Threading.Tasks;
using HT.Cloud.Code;
using HT.Cloud.Domain.DevicesManage;
using Microsoft.Extensions.FileSystemGlobbing.Internal;
using Serenity.Services;
using SqlSugar;
namespace HT.Cloud.Service.DevicesManage
@ -21,7 +23,7 @@ namespace HT.Cloud.Service.DevicesManage
}
/// <summary>
/// 获取服务器中设备与变量组信息树列表和子节点
/// 获取服务器中设备与变量组信息树列表和子节点,通讯参数driverid添加T变量组配置id添加B
/// </summary>
/// <returns></returns>
public async Task<string> GetALLNode()
@ -33,22 +35,22 @@ namespace HT.Cloud.Service.DevicesManage
var ts = list_drive.Select(a => new
{
title = a.DriverName,
id = a.DriverID,
name = a.DriverName,
id = a.DriverID.ToString(),
children = new[] {
new Children
{
id = "T" + a.DriverID,
title = "通讯参数",
name = "通讯参数",
},
new Children
{
id = "B" + a.DriverID,
title = "变量配置",
id = "D" + a.DriverID,
name = "变量配置",
children = list_group.Where(aa=>aa.DriverID == a.DriverID).Select(aa=>new Children
{
title = aa.GroupName,
id = aa.GroupID.ToString(),
name = aa.GroupName,
id = "B" + aa.GroupID.ToString(),
}).ToList()
}
@ -59,15 +61,52 @@ namespace HT.Cloud.Service.DevicesManage
// id = aa.GroupID,
//}).ToList()
}).ToList();
#region key值引号
//string pattern = "\"(\\w+)\"(\\s*:\\s*)";
//string replacement = "$1$2";
//System.Text.RegularExpressions.Regex rgx = new System.Text.RegularExpressions.Regex(pattern);
//return rgx.Replace(ts.ToJsonNullValueHandling(), replacement);
#endregion
return ts.ToJsonNullValueHandling();
}
public class Children
}
public class Children
{
public string id { get; set; }
public string title { get; set; }
public string name { get; set; }
public List<Children> children { get; set; }
}
}
public async Task<string> GetDriverArgument(int driverId)
{
var listArgument = _context.Queryable<ArgumentEntity>().Where(x=>x.DriverID == driverId).ToList();
var dt = new Dictionary<string, string>();
foreach(var argument in listArgument)
{
dt.Add(argument.PropertyName, argument.PropertyValue);
}
return dt.ToJson();
}
public async Task<string> GetGroupVarTable(int groupId)
{
var listMetaTag = _context.Queryable<MetaTagEntity>().Where(x => x.GroupID == groupId).ToList();
var metaTagRedata = new MetaTagRedata
{
code = 0,
msg = "",
count = listMetaTag.Count,
data = listMetaTag
};
return metaTagRedata.ToJson();
}
public class MetaTagRedata
{
public int code { get;set; }
public string msg { get; set; }
public int count { get; set; }
public List<MetaTagEntity> data { get; set; }
}
}
}

View File

@ -8,6 +8,7 @@ using HT.Cloud.Domain.ChartsManage;
using HT.Cloud.Service;
using Microsoft.AspNetCore.Authorization;
using HT.Cloud.Service.DevicesManage;
using System.Text.RegularExpressions;
namespace HT.Cloud.Web.Areas.DevicesManage.Controllers
{
@ -27,7 +28,42 @@ namespace HT.Cloud.Web.Areas.DevicesManage.Controllers
var data = await _metaTagService.GetALLNode();
return Content(data);
}
[HttpPost]
public async Task<ActionResult> GetDriverArgument(string[] driverId)
{
int drivreIId = 0;
try
{
drivreIId = int.Parse(Regex.Replace(driverId[0], "[a-zA-Z]", "", RegexOptions.IgnoreCase));
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
var data = await _metaTagService.GetDriverArgument(drivreIId);
return Content(data);
}
[HttpPost]
public async Task<ActionResult> GetGroupVarTable(string[] groupId)
{
int groupIId = 0;
try
{
groupIId = int.Parse(Regex.Replace(groupId[0], "[a-zA-Z]", "", RegexOptions.IgnoreCase));
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
var data = await _metaTagService.GetGroupVarTable(groupIId);
return Content(data);
}
[HttpPost]
public async Task<ActionResult> SaveArgument(string driverId, string name, string value)
{
var data = "";
return Content(data);
}
}
}

View File

@ -0,0 +1,195 @@
@{
ViewBag.Title = "Form";
Layout = "~/Views/Shared/_Form.cshtml";
}
<script>
layui.use(['jquery', 'form', 'laydate', 'tableEdit', 'commonTable', 'table', 'common', 'optimizeSelectOption'], function () {
debugger;
var form = layui.form,
$ = layui.$,
laydate = layui.laydate,
tableEdit = layui.tableEdit,
table = layui.table,
commonTable = layui.commonTable,
common = layui.common;
var keyValue = $.request("keyValue");
//执行一个laydate实例
laydate.render({
elem: '#F_NeedTime'
, trigger: 'click',
format: 'yyyy/MM/dd',
});
//权限字段
common.authorizeFields('adminform');
var listData = [];
$(function () {
debugger;
initControl();
if (!!keyValue) {
common.ajax({
url: '/OrderManagement/Order/GetFormJson',
dataType: 'json',
data: { keyValue: keyValue },
async: false,
success: function (data) {
common.val('adminform', data);
if (!!data.list && data.list.length > 0) {
listData = data.list;
}
}
});
}
else {
var code = new Date().formatDate('yyyyMMddhhmmss');
$('#F_OrderCode').val("OR-" + code);
}
form.render();
var params = [{ name: '未完成', value: 0 }, { name: '已完成', value: 1 }];
var cols = [[
{ type: "checkbox", width: 50 },
{
field: 'F_OrderState', title: '订单状态', width: 120, sort: true, event: 'orderState', config: { type: 'select', data: params, verify: { type: "required" } }
, templet: function (d) {
if (d.F_OrderState || d.F_OrderState == 0) {
if (d.F_OrderState.value || d.F_OrderState.value == 0) {
return d.F_OrderState.name;
}
for (var i = 0; i < params.length; i++) {
if (params[i].value == d.F_OrderState) {
return params[i].name;
}
}
}
return ''
}
},
{
field: 'F_ActualTime', title: '实际时间', minWidth: 160, sort: true, event: 'actualTime', config: { type: 'date', dateType: 'date' }
},
{ field: 'F_ProductName', title: '产品名称', minWidth: 145, sort: true, event: 'productName', config: { type: 'input', verify: { type: "required" } } },
{ field: 'F_ProductDescription', title: '产品规格', minWidth: 145, event: 'productDescription', config: { type: 'input'} },
{ field: 'F_ProductUnit', title: '产品单位', width: 120, event: 'productUnit', config: { type: 'input' } },
{ field: 'F_NeedNum', title: '需求数量', width: 140, event: 'needNum', config: { type: 'signedInput' } },
{ field: 'F_ActualNum', title: '实际数量', width: 140, event: 'actualNum', config: { type: 'signedInput' } },
{ field: 'F_Description', title: '备注', minWidth: 145, event: 'Description', config: { type: 'input' } },
]];
commonTable.rendertable({
elem: '#currentTableId',
data: listData,
defaultToolbar: [],
search: false,
limit: 9999,//每页数据 默认
page: { //支持传入 laypage 组件的所有参数某些参数除外jump/elem - 详见文档
layout: ['count'] //自定义分页布局
, first: false //不显示首页
, last: false //不显示尾页
},
height: 'full-185',
filter: {
clearFilter: false,
},
cols: cols
});
var aopTable = tableEdit.aopObj(cols); //获取一个aop对象
aopTable.on('tool(currentTableFilter)', function (obj) {
var field = obj.field; //单元格字段
var value = obj.value; //修改后的值
var data = obj.data; //当前行旧数据
var event = obj.event; //当前单元格事件属性值
var update = {};
update[field] = value;
//把value更新到行中
obj.update(update);
});
//行点击事件监听,控制按钮显示
var oneList = [];//选择1条显示
var moreList = ["NF-delete"];//多条显示
commonTable.tableRowClick("checkbox", "currentTableFilter", "currentTableId", oneList, moreList);
});
wcLoading.close();
function initControl() {
//此处需修改
//绑定数据源
//类型为下拉框时
}
//监听提交
form.on('submit(saveBtn)', function (data) {
var postData = data.field;
postData.list = table.cache.currentTableId;
if (!postData.list || postData.list.length == 0) {
common.modalMsg("产品明细不能为空!");
return false;
}
for (var i = 0; i < postData.list.length; i++) {
if (!postData.list[i].F_ProductName) {
common.modalMsg("请输入明细的产品名称!");
return false;
}
postData.list[i].F_OrderState = !!postData.list[i].F_OrderState.value ? postData.list[i].F_OrderState.value : postData.list[i].F_OrderState;
}
if (!postData["F_EnabledMark"]) postData["F_EnabledMark"] = false;
common.submitForm({
url: '/OrderManagement/Order/SubmitForm?keyValue=' + keyValue,
param: postData,
success: function () {
common.parentreload('data-search-btn');
}
})
return false;
});
});
</script>
<body>
<div class="layuimini-container">
<div class="layuimini-main">
<form class="layui-form" action="">
<div class="layui-form-item">
<label class="layui-form-label">变量名称<em class="dotRed">*</em></label>
<div class="layui-input-block">
<input type="text" id="Description" name="Description" 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="TagName" name="TagName" 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="DataType" name="DataType" 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="Address" name="Address" 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="Subsystem" name="Subsystem" 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="Units" name="Units" placeholder="变量世界单位 Bool值缺省Y/N" 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>
</body>

View File

@ -23,6 +23,19 @@
common = layui.common;
//加载数据
wcLoading.close();
var showArgument = document.getElementById('showArgument');//选取id为test的div元素
var showTag = document.getElementById('showTag');//选取id为test的div元素
showArgument.style.display = 'none';// 隐藏选择的元素
showTag.style.display = 'none';// 隐藏选择的元素
//t.style.display = 'none';// 隐藏选择的元素
//t.style.display = 'block';// 以块级样式显示
//权限控制(js是值传递)
//toolbarDemo.innerHTML = common.authorizeButtonNew(toolbarDemo.innerHTML);
@ -31,23 +44,194 @@
//获取所有子系统列表ok
async function GetAllNode() {
debugger;
$.ajax({
url: "/DevicesManage/MetaTag/GetAllNode",
type: "Get",
//dataType: "json",
async: false,
//data: datapa,
success: function (redata) {
debugger;
var listsubsysname = JSON.parse(redata);
debugger;
tree.render({
elem: '#drtree',
data:redata
});
}
});
//$.ajax({
// url: "/DevicesManage/MetaTag/GetAllNode",
// type: "Get",
// //dataType: "json",
// async: false,
// //data: datapa,
// success: function (redata) {
// var jsonData = JSON.stringify(redata);
// debugger;
// $('#test').tree()
// }
//});
$('#test').treegrid({
method:"get",
url: "/DevicesManage/MetaTag/GetAllNode",
onClickRow: function (row) {
if (/T/.test(row.id.toString())) {
showArgument.style.display = 'block';// 隐藏选择的元素
showTag.style.display = 'none';// 隐藏选择的元素
LaodArgument(row);
}
if (/B/.test(row.id.toString())) {
showArgument.style.display = 'none';// 隐藏选择的元素
showTag.style.display = 'block';// 隐藏选择的元素
LaodTagList(row);
}
},
onLoadSuccess(row, data) {
//$('#test').treegrid('select', 'T' + window.querystring("id"));
}
});
}
async function LaodArgument(row){
debugger;
var driver_Id = row.id.toString();
var datapa = new Array;
datapa.push(driver_Id);
debugger;
await $.ajax({
url: "/DevicesManage/MetaTag/GetDriverArgument",
type: "Post",
dataType: "json",
traditional: true,//这里设置为true
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('PLCType_Siemens').value = redata.PLCType;
select_value("PLCType_Siemens", redata.PLCType);
}
});
}
function select_value(id, value) {//按照option的值来选择
selectdom = document.getElementById(id);
option = selectdom.getElementsByTagName("option");
for (var i = 0; i < option.length; i++) {
if (option[i].value == value) {
selectdom.selectedIndex = i; break;
}
}
}
async function LaodTagList(row) {
debugger;
var group_Id = row.id.toString();
var datapa = new Array;
datapa.push(group_Id);
var tableHeight = showTag.style.height - 10;
//var oUrl = window.location.host + "/DevicesManage/MetaTag/GetGroupVarTable";
//var dataUrl = getUrl(oUrl, { groupId: datapa });
//debugger;
//table.render({
// elem: 'metaTable',
// url: dataUrl,
// editTrigger:'dblclick',
// cols:[[
// { type: 'checkbox' },
// {fiele:'TagID',title:'ID',width:'auto',sort : true },
// ]]
//});
await $.ajax({
url: "/DevicesManage/MetaTag/GetGroupVarTable",
type: "Post",
dataType: "json",
traditional: true,//这里设置为true
data: { groupId: datapa },
success: function (redata) {
table.render({
elem: '#metaTable',
height:'full-10',
//defaultToolbar: ['filter', 'print', 'exports', {
//title: '提示' //标题
//,layEvent: 'LAYTABLE_TIPS' //事件名,用于 toolbar 事件中使用
//,icon: 'layui-icon-tips' //图标类名
//}],
data: redata.data,
editTrigger:'dblclick',
cols:[[
{ type: 'checkbox' },
{ field: 'TagID', title: 'ID', sort: true },
{ field: 'Description' , title:'变量名称' , edit:'text'},
{ field: 'TagName' , title:'变量编码' , edit:'text'},
{ field: 'DataType' , title:'数值类型' , edit:'text'},
{ field: 'Address' , title:'起始地址' , edit:'text'},
{ field: 'Subsystem' , title:'所属系统' , edit:'text', filter:true},
//{ field: 'RtValue' , title:'当前值' , edit:'text'},
{ field: 'Units' , title:'变量单位' , edit:'text'},
]],
page:true,
limit:20,
// response:{
// statusName:'code', //规定返回的状态码字段为code
// statusCode:0 //规定成功的状态码味200
// },
// parseData:function(res){
//return {
//"code" : redata.code, //解析接口状态
//"msg" : redata.msg, //解析提示文本
// "data" : redata.data //解析数据列表
//}
//},
});
}
});
}
/**
* 传入对象返回url参数
* param{ Object } data { a: 1 }
* returns{ string }
*/
function getParam(data){
let url = '';
for (var k in data) {
let value = data[k] !== undefined ? data[k] : '';
url += `&${k}=${encodeURIComponent(value)}`
}
return url ? url.substring(1) : ''
}
/**
* 将url和参数拼接成完整地址
* param {string} url url地址
* param {Json} data json对象
* returns {string}
*/
function getUrl(url, data){
//看原始url地址中开头是否带?,然后拼接处理好的参数
return url += (url.indexOf('?') < 0 ? '?' : '') + this.getParam(data)
}
openForm = function(){
common.modalOpen({
title: "添加变量",
url: "/DevicesManage/MetaTag/Form",
width: "850px",
height: "700px",
});
}
openEdit = function () {
common.modalOpen({
title: "修改变量",
url: "/DevicesManage/MetaTag/Form",
width: "849px",
height: "699px",
});
}
newDriver = function () {
}
newGroup = function () {
}
editModel1 = function () {
}
destroyModel1 = function () {
}
});
@ -56,27 +240,95 @@
<body style="height:100%">
<script type="text/javascript" src="~/lib/echarts-5.3.0/dist/echarts.js"></script>
<div class="layui-fluid" style="padding:0 0px;height:100%">
<div class="layui-row layui-col-space5" style="height:100%">
<div class="layui-col-md2 layui-col-xs3" style="height:100%;padding-right:12px;">
<div class="layui-card" style="text-align:left;overflow: auto;height:100%" id="toolbarDiv">
@*<ul id="dataTree" class="dtree" data-id="0"></ul>*@
<div id="aleft" style="float:left;width:100%;height:100%">
<div class="easyui-panel" title="选择设备信息" style="width:100%;height:100%">
<div class="layui-tree" id="drtree" title="设备列表" style="position: relative;width:100%;height:auto;overflow:auto;"></div>
</div>
</div>
</div>
</div>
<div class="layui-col-md10 layui-col-xs9" style="height:100%">
<form class="layui-form" style="height:100%;width:100%" id="tablepanel">
<div class="layui-panel" id="gridpanel" style="width:100%;height: 100%;margin-bottom: 10px; ">
<div id="result" class="echart" style="width: 100%; height: 100% "></div>
</div>
</form>
</div>
<div class="layui-row" style="padding:0 0px;height:100%">
<div class="layui-col-xs2" style="height:100%">
<div style="width:100%;height: 100%; width:100%;margin-right:10px;float:left;">
<table id="test" title="选择设备" class="easyui-treegrid"
rownumbers="true" toolbar="#toolbar1"
fitColumns="true" fit="true"
idField="id" treeField="name">
<thead>
<tr>
<th field="name" width="100">设备名称</th>
</tr>
</thead>
</table>
<div id="toolbar1">
<a href="javascript:;" class="easyui-linkbutton" iconCls="icon-add" plain="true" id="newgroup" onclick="newDriver()">新建设备</a>
<a href="javascript:;" class="easyui-linkbutton" iconCls="icon-add" plain="true" id="new" onclick="newGroup()">新建变量组</a>
<a href="javascript:;" class="easyui-linkbutton" iconCls="icon-edit" plain="true" id="edit" onclick="editModel1()">修改</a>
<a href="javascript:;" class="easyui-linkbutton" iconCls="icon-remove" plain="true" id="delete" onclick="destroyModel1()">删除</a>
</div>
</div>
</div>
<div class="layui-col-xs10" style="height:100%">
<div id="showdiv" style="height:100%;margin-left:10px;">
<div id="showArgument" style="height:100%;width:100%">@*//;background:red*@
<div id="argumentFormSiemens" class="formList" style="height:100%;width:100%;display:block">
<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_Siemens" name="ServerName" placeholder="请输入地址" class="layui-input" style="width: 320px;">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">Rack<em class="dotRed">*</em></label>
<div class="layui-input-block">
<input type="text" id="Rack_Siemens" name="Rack" placeholder="请输入Rack" 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_Siemens" 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_Siemens" name="TimeOut" placeholder="请输入超时时间" class="layui-input" style="width: 320px;">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">PLC类型<em class="dotRed">*</em></label>
<div class="layui-input-block" style="width: 320px">
<select id="PLCType_Siemens" name="PLCType" lay-verify="required" class="select_wd320" style="width: 320px">
<option value=""></option>
<option value="S7300">S7-300</option>
<option value="S7400">S7-400</option>
<option value="S71200">S7-1200</option>
<option value="S71500">S7-1500</option>
</select>
</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="argumentFormAllen-Bradley" class="formList" style="height:100%;width:100%;display:none">
</div>
<div id="argumentFormSchneideir" class="formList" style="height:100%;width:100%;display:none">
</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">&#xe654;</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">&#xe642;</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">&#xe640;</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">&#xe60b;</i>查看</button>*@
</div>
<table id="metaTable" lay-filter="metafilter" ></table>
</div>
</div>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,86 @@
@{
ViewBag.Title = "Details";
Layout = "~/Views/Shared/_Form.cshtml";
}
<script>
debugger;
layui.use(['jquery', 'form', 'laydate', 'tableEdit', 'commonTable', 'table', 'common'], function () {
var form = layui.form,
$ = layui.$,
laydate = layui.laydate,
tableEdit = layui.tableEdit,
table = layui.table,
commonTable = layui.commonTable,
common = layui.common;
var listData = [];
$(function () {
initControl();
});
wcLoading.close();
function initControl() {
//此处需修改
//绑定数据源
//类型为下拉框时
}
//监听提交
form.on('submit(saveBtn)', function (data) {
debugger;
});
});
</script>
<body>
<div class="layuimini-container">
<div class="layuimini-main">
<form class="layui-form" action="">
<div class="layui-form-item">
<label class="layui-form-label">变量名称<em class="dotRed">*</em></label>
<div class="layui-input-block">
<input type="text" id="Description" name="Description" 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="TagName" name="TagName" 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="DataType" name="DataType" 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="Address" name="Address" 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="Subsystem" name="Subsystem" 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="Units" name="Units" placeholder="变量世界单位 Bool值缺省Y/N" 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>
</body>