后台管理页面开发v1

dev-0829
ccongli 1 year ago
parent e235811929
commit b3a84d0eda

Binary file not shown.

@ -1,6 +1,6 @@
/* /*
*, *,
*RepositoryPartialIData_DeviceRepository *RepositoryPartialIData_ConfigRepository
*/ */
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@ -12,7 +12,7 @@ using VOL.Entity.DomainModels;
using VOL.Core.Extensions.AutofacManager; using VOL.Core.Extensions.AutofacManager;
namespace VOL.Data.IRepositories namespace VOL.Data.IRepositories
{ {
public partial interface IData_DeviceRepository : IDependency,IRepository<Data_Device> public partial interface IData_ConfigRepository : IDependency,IRepository<Data_Config>
{ {
} }
} }

@ -0,0 +1,18 @@
/*
*,
*RepositoryPartialIData_MachineRepository
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using VOL.Core.BaseProvider;
using VOL.Entity.DomainModels;
using VOL.Core.Extensions.AutofacManager;
namespace VOL.Data.IRepositories
{
public partial interface IData_MachineRepository : IDependency,IRepository<Data_Machine>
{
}
}

@ -6,7 +6,7 @@ using VOL.Entity.DomainModels;
namespace VOL.Data.IServices namespace VOL.Data.IServices
{ {
public partial interface IData_DeviceService : IService<Data_Device> public partial interface IData_ConfigService : IService<Data_Config>
{ {
} }
} }

@ -1,5 +1,5 @@
/* /*
*Data_Device *Data_Config
*/ */
using VOL.Core.BaseProvider; using VOL.Core.BaseProvider;
using VOL.Entity.DomainModels; using VOL.Entity.DomainModels;
@ -7,7 +7,7 @@ using VOL.Core.Utilities;
using System.Linq.Expressions; using System.Linq.Expressions;
namespace VOL.Data.IServices namespace VOL.Data.IServices
{ {
public partial interface IData_DeviceService public partial interface IData_ConfigService
{ {
} }
} }

@ -0,0 +1,12 @@
/*
*,
*/
using VOL.Core.BaseProvider;
using VOL.Entity.DomainModels;
namespace VOL.Data.IServices
{
public partial interface IData_MachineService : IService<Data_Machine>
{
}
}

@ -0,0 +1,13 @@
/*
*Data_Machine
*/
using VOL.Core.BaseProvider;
using VOL.Entity.DomainModels;
using VOL.Core.Utilities;
using System.Linq.Expressions;
namespace VOL.Data.IServices
{
public partial interface IData_MachineService
{
}
}

@ -1,6 +1,10 @@
using System; using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
using System;
using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Net;
using System.Security.Cryptography;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using VOL.Entity.DomainModels; using VOL.Entity.DomainModels;
@ -9,8 +13,15 @@ namespace VOL.Data.IServices.modbus
{ {
public interface IDataProcessing public interface IDataProcessing
{ {
// 读西门子数据
Dictionary<string, Dictionary<string, object>> readSiemensData(IModbusService modbus);
// 读广数数据
Dictionary<string, Dictionary<string, object>> readGSKData(IModbusService modbus);
// 写设备运行数据 // 写设备运行数据
bool saveDeviceData(Data_Device device, out string message); bool saveDeviceData(Data_Machine machine, out string message);
// 写设备生产数据 // 写设备生产数据

@ -1,6 +1,6 @@
/* /*
*, *,
*RepositoryPartialData_DeviceRepository *RepositoryPartialData_ConfigRepository
*/ */
using VOL.Data.IRepositories; using VOL.Data.IRepositories;
using VOL.Core.BaseProvider; using VOL.Core.BaseProvider;
@ -10,15 +10,15 @@ using VOL.Entity.DomainModels;
namespace VOL.Data.Repositories namespace VOL.Data.Repositories
{ {
public partial class Data_DeviceRepository : RepositoryBase<Data_Device> , IData_DeviceRepository public partial class Data_ConfigRepository : RepositoryBase<Data_Config> , IData_ConfigRepository
{ {
public Data_DeviceRepository(VOLContext dbContext) public Data_ConfigRepository(VOLContext dbContext)
: base(dbContext) : base(dbContext)
{ {
} }
public static IData_DeviceRepository Instance public static IData_ConfigRepository Instance
{ {
get { return AutofacContainerModule.GetService<IData_DeviceRepository>(); } } get { return AutofacContainerModule.GetService<IData_ConfigRepository>(); } }
} }
} }

@ -0,0 +1,24 @@
/*
*,
*RepositoryPartialData_MachineRepository
*/
using VOL.Data.IRepositories;
using VOL.Core.BaseProvider;
using VOL.Core.EFDbContext;
using VOL.Core.Extensions.AutofacManager;
using VOL.Entity.DomainModels;
namespace VOL.Data.Repositories
{
public partial class Data_MachineRepository : RepositoryBase<Data_Machine> , IData_MachineRepository
{
public Data_MachineRepository(VOLContext dbContext)
: base(dbContext)
{
}
public static IData_MachineRepository Instance
{
get { return AutofacContainerModule.GetService<IData_MachineRepository>(); } }
}
}

@ -0,0 +1,27 @@
/*
*Authorjxx
*Contact283591387@qq.com
*,
*PartialData_ConfigServiceIData_ConfigService
*/
using VOL.Data.IRepositories;
using VOL.Data.IServices;
using VOL.Core.BaseProvider;
using VOL.Core.Extensions.AutofacManager;
using VOL.Entity.DomainModels;
namespace VOL.Data.Services
{
public partial class Data_ConfigService : ServiceBase<Data_Config, IData_ConfigRepository>
, IData_ConfigService, IDependency
{
public Data_ConfigService(IData_ConfigRepository repository)
: base(repository)
{
Init(repository);
}
public static IData_ConfigService Instance
{
get { return AutofacContainerModule.GetService<IData_ConfigService>(); } }
}
}

@ -1,10 +1,10 @@
/* /*
*Data_Device *Data_Config
*使repository.EF/Dapper *使repository.EF/Dapper
*使repository.DbContextBeginTransaction *使repository.DbContextBeginTransaction
*使DBServerProvider. *使DBServerProvider.
*使UserContext.Current *使UserContext.Current
*Data_DeviceServiceServiceFunFilter *Data_ConfigServiceServiceFunFilter
*/ */
using VOL.Core.BaseProvider; using VOL.Core.BaseProvider;
using VOL.Core.Extensions.AutofacManager; using VOL.Core.Extensions.AutofacManager;
@ -20,14 +20,14 @@ using VOL.Data.IRepositories;
namespace VOL.Data.Services namespace VOL.Data.Services
{ {
public partial class Data_DeviceService public partial class Data_ConfigService
{ {
private readonly IHttpContextAccessor _httpContextAccessor; private readonly IHttpContextAccessor _httpContextAccessor;
private readonly IData_DeviceRepository _repository;//访问数据库 private readonly IData_ConfigRepository _repository;//访问数据库
[ActivatorUtilitiesConstructor] [ActivatorUtilitiesConstructor]
public Data_DeviceService( public Data_ConfigService(
IData_DeviceRepository dbRepository, IData_ConfigRepository dbRepository,
IHttpContextAccessor httpContextAccessor IHttpContextAccessor httpContextAccessor
) )
: base(dbRepository) : base(dbRepository)
@ -35,15 +35,7 @@ namespace VOL.Data.Services
_httpContextAccessor = httpContextAccessor; _httpContextAccessor = httpContextAccessor;
_repository = dbRepository; _repository = dbRepository;
//多租户会用到这init代码其他情况可以不用 //多租户会用到这init代码其他情况可以不用
Init(dbRepository); //base.Init(dbRepository);
} }
}
//重写ServiceBase Init方法设置IsMultiTenancy=true开启多租户功能
protected override void Init(IRepository<Data_Device> repository)
{
//开启多租户功能,开启后会对查询、导出、删除、编辑功能同时生效
//如果只需要对某个功能生效,如编辑,则在重写编辑方法中设置 IsMultiTenancy = true;
IsMultiTenancy = true;
}
}
} }

@ -1,27 +0,0 @@
/*
*Authorjxx
*Contact283591387@qq.com
*,
*PartialData_DeviceServiceIData_DeviceService
*/
using VOL.Data.IRepositories;
using VOL.Data.IServices;
using VOL.Core.BaseProvider;
using VOL.Core.Extensions.AutofacManager;
using VOL.Entity.DomainModels;
namespace VOL.Data.Services
{
public partial class Data_DeviceService : ServiceBase<Data_Device, IData_DeviceRepository>
, IData_DeviceService, IDependency
{
public Data_DeviceService(IData_DeviceRepository repository)
: base(repository)
{
Init(repository);
}
public static IData_DeviceService Instance
{
get { return AutofacContainerModule.GetService<IData_DeviceService>(); } }
}
}

@ -0,0 +1,27 @@
/*
*Authorjxx
*Contact283591387@qq.com
*,
*PartialData_MachineServiceIData_MachineService
*/
using VOL.Data.IRepositories;
using VOL.Data.IServices;
using VOL.Core.BaseProvider;
using VOL.Core.Extensions.AutofacManager;
using VOL.Entity.DomainModels;
namespace VOL.Data.Services
{
public partial class Data_MachineService : ServiceBase<Data_Machine, IData_MachineRepository>
, IData_MachineService, IDependency
{
public Data_MachineService(IData_MachineRepository repository)
: base(repository)
{
Init(repository);
}
public static IData_MachineService Instance
{
get { return AutofacContainerModule.GetService<IData_MachineService>(); } }
}
}

@ -0,0 +1,41 @@
/*
*Data_Machine
*使repository.EF/Dapper
*使repository.DbContextBeginTransaction
*使DBServerProvider.
*使UserContext.Current
*Data_MachineServiceServiceFunFilter
*/
using VOL.Core.BaseProvider;
using VOL.Core.Extensions.AutofacManager;
using VOL.Entity.DomainModels;
using System.Linq;
using VOL.Core.Utilities;
using System.Linq.Expressions;
using VOL.Core.Extensions;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.AspNetCore.Http;
using VOL.Data.IRepositories;
namespace VOL.Data.Services
{
public partial class Data_MachineService
{
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly IData_MachineRepository _repository;//访问数据库
[ActivatorUtilitiesConstructor]
public Data_MachineService(
IData_MachineRepository dbRepository,
IHttpContextAccessor httpContextAccessor
)
: base(dbRepository)
{
_httpContextAccessor = httpContextAccessor;
_repository = dbRepository;
//多租户会用到这init代码其他情况可以不用
//base.Init(dbRepository);
}
}
}

@ -16,20 +16,114 @@ namespace VOL.Data.Services.modbus
_httpContextAccessor = httpContextAccessor; _httpContextAccessor = httpContextAccessor;
} }
// 写设备运行数据
public bool saveDeviceData(Data_Device device, out string message) { // 读西门子数据
public Dictionary<string, Dictionary<string, object>> readSiemensData(IModbusService modbus)
{
// 生产数据
Dictionary<string, object> map1 = new Dictionary<string, object>
{
{ "com_status", modbus.readData(1, 6430, "int16") }, // 通讯状态 5通讯正常 15通讯断线
{ "run_time", modbus.readData(1, 6435, "int16") }, // 运行时长 分钟
{ "turnout_1", modbus.readData(1, 6436, "int16") }, // 工单1产量 件
{ "turnout_2", modbus.readData(1, 6437, "int16") }, // 工单2产量 件
{ "turnout_3", modbus.readData(1, 6438, "int16") }, // 工单3产量 件
{ "turnout_all", modbus.readData(1, 6439, "int16") }, // 当班产量 件
{ "status", modbus.readData(1, 6440, "int16") }, // 运行状态 0:待机 1运行 2故障
{ "schedule_1", modbus.readData(1, 1315, "single") }, // 工单1任务进度 %
{ "schedule_2", modbus.readData(1, 1317, "single") }, // 工单2任务进度 %
{ "schedule_3", modbus.readData(1, 1319, "single") }, // 工单3任务进度 %
{ "yield_1", modbus.readData(1, 1321, "single") }, // 工单1良品率 % 真实值 *= 100
{ "yield_2", modbus.readData(1, 1323, "single") }, // 工单2良品率 % 真实值 *= 100
{ "yield_3", modbus.readData(1, 1325, "single") }, // 工单3良品率 % 真实值 *= 100
{ "oee", modbus.readData(1, 1339, "single") }, // 设备综合效率 % 真实值 *= 100
};
// 机床数据
Dictionary<string, object> map2 = new Dictionary<string, object>
{
// 操作模式 0:JOG 1:AUTO 2:AUTO + TEACHIN 3:JOG + REPOIN 4:JOG + REPOS
// 5:MDA 6:MDA + REPOS 7:MDA + REPOS + TEAHIN8:MDA + TEACHIN
{ "com_status", modbus.readData(1, 6430, "int16") }, // 通讯状态 5通讯正常 15通讯断线
{ "smode", modbus.readData(1, 6099, "int16") },
{ "state", modbus.readData(1, 6429, "int16") }, // 运行状态 0:待机 1:故障 2:运行 3:暂停
{ "temperature", modbus.readData(1, 1201, "single")}, // 电机温度 ℃
{ "potential", modbus.readData(1, 1203, "single")}, // 母线电压 V
{ "current", modbus.readData(1, 1205, "single")}, // 实际电流 A
{ "quantity", modbus.readData(1, 1215, "single")}, // 加工数 次
{ "cut_rate", modbus.readData(1, 1225, "single")}, // 切削倍率
{ "main_rate", modbus.readData(1, 1231, "single")}, // 主轴倍率
{ "run_program_no", modbus.readData(1, 6689, "string", 26)}, // 加工程序号 length = 52
};
// 组装Map返回
Dictionary<string, Dictionary<string, object>> map = new();
map.Add("produce", map1);
map.Add("device", map2);
return map;
}
// 读广数数据
public Dictionary<string, Dictionary<string, object>> readGSKData(IModbusService modbus)
{
// 生产数据
Dictionary<string, object> map1 = new Dictionary<string, object>
{
{ "program_no", modbus.readData(1, 6429, "int16") }, // 程序编号
{ "com_status", modbus.readData(1, 6430, "int16") }, // 通讯状态 5通讯正常 15通讯断线
{ "run_time", modbus.readData(1, 6435, "int16") }, // 运行时长 分钟
{ "turnout_1", modbus.readData(1, 6436, "int16") }, // 工单1产量 件
{ "turnout_2", modbus.readData(1, 6437, "int16") }, // 工单2产量 件
{ "turnout_3", modbus.readData(1, 6438, "int16") }, // 工单3产量 件
{ "turnout_all", modbus.readData(1, 6439, "int16") }, // 当班产量 件
{ "status", modbus.readData(1, 6435, "int16") }, // 运行状态 0:待机 1运行 2故障
{ "schedule_1", modbus.readData(1, 1315, "single") }, // 工单1任务进度 %
{ "schedule_2", modbus.readData(1, 1317, "single") }, // 工单2任务进度 %
{ "schedule_3", modbus.readData(1, 1319, "single") }, // 工单3任务进度 %
{ "yield_1", modbus.readData(1, 1321, "single") }, // 工单1良品率 % 真实值 *= 100
{ "yield_2", modbus.readData(1, 1323, "single") }, // 工单2良品率 % 真实值 *= 100
{ "yield_3", modbus.readData(1, 1325, "single") }, // 工单3良品率 % 真实值 *= 100
{ "oee", modbus.readData(1, 1331, "single") }, // 设备综合效率 % 真实值 *= 100
};
// 机床数据
Dictionary<string, object> map2 = new Dictionary<string, object>
{
{ "com_status", modbus.readData(1, 6430, "int16") }, // 通讯状态 5通讯正常 15通讯断线
{ "gmode", modbus.readData(1, 6099, "int16") }, // 工作方式 0:编辑 1:自动 2:MDI 3:DNC 4:手动 5:手轮 6:回参考点
{ "state", modbus.readData(1, 6099, "int16") }, // 运行状态 0:复位 1:停止 2:运行 3:暂停
{ "quantity", modbus.readData(1, 1199, "int32")}, // 加工数量 次
{ "on_time", modbus.readData(1, 1201, "int32")}, // 开机时间 秒
{ "run_time", modbus.readData(1, 1203, "int32")}, // 运行时间 秒
{ "feed_rate", modbus.readData(1, 1241, "single")}, // 进给倍率
{ "main_rate", modbus.readData(1, 1247, "single")}, // 主轴倍率
{ "run_program_no", modbus.readData(1, 6299, "string", 4)}, // 运行程序编号 length = 8
{ "run_time_total", modbus.readData(1, 4115, "int32")}, // 累计运行时长 分钟
{ "quantity_total", modbus.readData(1, 4117, "int32")} // 累计加工数 次
};
// 组装Map返回
Dictionary<string, Dictionary<string, object>> map = new();
map.Add("produce", map1);
map.Add("device", map2);
return map;
}
// 写机床数据
public bool saveDeviceData(Data_Machine machine, out string message) {
SaveModel model = new SaveModel(); SaveModel model = new SaveModel();
Dictionary<string, object> mapData = new() Dictionary<string, object> mapData = new()
{ {
{ "temperature", device.temperature ?? 68.0M }, //{ "temperature", device.temperature ?? 68.0M },
{ "potential", device.potential ?? 220.0M }, //{ "potential", device.potential ?? 220.0M },
{ "current", device.current ?? 24.0M }, //{ "current", device.current ?? 24.0M },
{ "processno", device.processno ?? "10092768" }, //{ "processno", device.processno ?? "10092768" },
{ "run_mode", device.run_mode ?? 1 } //{ "run_mode", device.run_mode ?? 1 }
}; };
model.MainData = mapData; model.MainData = mapData;
try { try {
Core.Utilities.WebResponseContent result = Data_DeviceService.Instance.Add(model); Core.Utilities.WebResponseContent result = Data_MachineService.Instance.Add(model);
if (!result.Status) if (!result.Status)
{ {
message = result.Message; message = result.Message;
@ -48,19 +142,19 @@ namespace VOL.Data.Services.modbus
// 写设备生产数据 // 写生产数据
public bool saveProduceData(Data_Produce produce, out string message) public bool saveProduceData(Data_Produce produce, out string message)
{ {
SaveModel model = new SaveModel(); SaveModel model = new SaveModel();
Dictionary<string, object> mapData = new() Dictionary<string, object> mapData = new()
{ {
{ "standby_time", produce.standby_time ?? 24 }, //{ "standby_time", produce.standby_time ?? 24 },
{ "run_time", produce.run_time ?? 20 }, //{ "run_time", produce.run_time ?? 20 },
{ "status", produce.status ?? 1 }, //{ "status", produce.status ?? 1 },
{ "turnout", produce.turnout ?? 1640 }, //{ "turnout", produce.turnout ?? 1640 },
{ "turnout_one", produce.turnout_one ?? 450 }, //{ "turnout_one", produce.turnout_one ?? 450 },
{ "turnout_two", produce.turnout_two ?? 630 }, //{ "turnout_two", produce.turnout_two ?? 630 },
{ "turnout_three", produce.turnout_three ?? 560 } //{ "turnout_three", produce.turnout_three ?? 560 }
}; };
model.MainData = mapData; model.MainData = mapData;
try try

@ -13,62 +13,53 @@ using VOL.Entity.SystemModels;
namespace VOL.Entity.DomainModels namespace VOL.Entity.DomainModels
{ {
[Entity(TableCnName = "设备运行",TableName = "Data_Device")] [Entity(TableCnName = "设备配置",TableName = "Data_Config")]
public partial class Data_Device:BaseEntity public partial class Data_Config:BaseEntity
{ {
/// <summary> /// <summary>
///ID ///
/// </summary> /// </summary>
[Key] [Key]
[Display(Name ="ID")] [Display(Name ="id")]
[Column(TypeName="int")] [Column(TypeName="int")]
[Editable(true)] [Editable(true)]
[Required(AllowEmptyStrings=false)] [Required(AllowEmptyStrings=false)]
public int id { get; set; } public int id { get; set; }
/// <summary> /// <summary>
///电机温度 ///设备名称
/// </summary> /// </summary>
[Display(Name ="电机温度")] [Display(Name ="设备名称")]
[DisplayFormat(DataFormatString="10,2")] [MaxLength(255)]
[Column(TypeName="decimal")] [Column(TypeName="nvarchar(255)")]
[Editable(true)] [Editable(true)]
public decimal? temperature { get; set; } public string name { get; set; }
/// <summary> /// <summary>
///母线电压 ///机床类型
/// </summary> /// </summary>
[Display(Name ="母线电压")] [Display(Name ="机床类型")]
[DisplayFormat(DataFormatString="10,2")] [Column(TypeName="short")]
[Column(TypeName="decimal")]
[Editable(true)] [Editable(true)]
public decimal? potential { get; set; } public short? type { get; set; }
/// <summary> /// <summary>
///实际电流 ///设备IP
/// </summary> /// </summary>
[Display(Name ="实际电流")] [Display(Name ="设备IP")]
[DisplayFormat(DataFormatString="10,2")] [MaxLength(255)]
[Column(TypeName="decimal")] [Column(TypeName="nvarchar(255)")]
[Editable(true)] [Editable(true)]
public decimal? current { get; set; } public string device_ip { get; set; }
/// <summary> /// <summary>
///加工程序号 ///通讯IP
/// </summary> /// </summary>
[Display(Name ="加工程序号")] [Display(Name ="通讯IP")]
[MaxLength(60)] [MaxLength(60)]
[Column(TypeName="nvarchar(60)")] [Column(TypeName="nvarchar(60)")]
[Editable(true)] [Editable(true)]
public string processno { get; set; } public string com_ip { get; set; }
/// <summary>
///运行模式
/// </summary>
[Display(Name ="运行模式")]
[Column(TypeName="short")]
[Editable(true)]
public short? run_mode { get; set; }
/// <summary> /// <summary>
/// ///
@ -88,9 +79,9 @@ namespace VOL.Entity.DomainModels
public string Creator { get; set; } public string Creator { get; set; }
/// <summary> /// <summary>
///记录时间 ///创建时间
/// </summary> /// </summary>
[Display(Name ="记录时间")] [Display(Name ="创建时间")]
[Column(TypeName="datetime")] [Column(TypeName="datetime")]
[Editable(true)] [Editable(true)]
public DateTime? CreateDate { get; set; } public DateTime? CreateDate { get; set; }

@ -14,7 +14,7 @@ using VOL.Entity.SystemModels;
namespace VOL.Entity.DomainModels namespace VOL.Entity.DomainModels
{ {
public partial class Data_Device public partial class Data_Config
{ {
//此处配置字段(字段配置见此model的另一个partial),如果表中没有此字段请加上 [NotMapped]属性,否则会异常 //此处配置字段(字段配置见此model的另一个partial),如果表中没有此字段请加上 [NotMapped]属性,否则会异常
} }

@ -0,0 +1,225 @@
/*
*,
*Model
*/
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using VOL.Entity.SystemModels;
namespace VOL.Entity.DomainModels
{
[Entity(TableCnName = "机床数据",TableName = "Data_Machine")]
public partial class Data_Machine:BaseEntity
{
/// <summary>
///
/// </summary>
[Key]
[Display(Name ="id")]
[Column(TypeName="int")]
[Editable(true)]
[Required(AllowEmptyStrings=false)]
public int id { get; set; }
/// <summary>
///设备信息
/// </summary>
[Display(Name ="设备信息")]
[Column(TypeName="int")]
[Editable(true)]
[Required(AllowEmptyStrings=false)]
public int config_id { get; set; }
/// <summary>
///通讯状态
/// </summary>
[Display(Name ="通讯状态")]
[Column(TypeName="short")]
[Editable(true)]
public short? com_status { get; set; }
/// <summary>
///运行模式(西门子)
/// </summary>
[Display(Name ="运行模式(西门子)")]
[Column(TypeName="short")]
[Editable(true)]
public short? smode { get; set; }
/// <summary>
///运行模式(广数)
/// </summary>
[Display(Name ="运行模式(广数)")]
[Column(TypeName="short")]
[Editable(true)]
public short? gmode { get; set; }
/// <summary>
///加工程序号
/// </summary>
[Display(Name ="加工程序号")]
[MaxLength(60)]
[Column(TypeName="nvarchar(60)")]
[Editable(true)]
public string run_program_no { get; set; }
/// <summary>
///运行状态
/// </summary>
[Display(Name ="运行状态")]
[Column(TypeName="short")]
[Editable(true)]
public short? state { get; set; }
/// <summary>
///电机温度
/// </summary>
[Display(Name ="电机温度")]
[DisplayFormat(DataFormatString="10,2")]
[Column(TypeName="decimal")]
[Editable(true)]
public decimal? temperature { get; set; }
/// <summary>
///母线电压
/// </summary>
[Display(Name ="母线电压")]
[DisplayFormat(DataFormatString="10,2")]
[Column(TypeName="decimal")]
[Editable(true)]
public decimal? potential { get; set; }
/// <summary>
///实际电流
/// </summary>
[Display(Name ="实际电流")]
[DisplayFormat(DataFormatString="10,2")]
[Column(TypeName="decimal")]
[Editable(true)]
public decimal? current { get; set; }
/// <summary>
///加工数
/// </summary>
[Display(Name ="加工数")]
[Column(TypeName="bigint")]
[Editable(true)]
public long? quantity { get; set; }
/// <summary>
///主轴倍率
/// </summary>
[Display(Name ="主轴倍率")]
[DisplayFormat(DataFormatString="10,2")]
[Column(TypeName="decimal")]
[Editable(true)]
public decimal? main_rate { get; set; }
/// <summary>
///进给倍率
/// </summary>
[Display(Name ="进给倍率")]
[DisplayFormat(DataFormatString="10,2")]
[Column(TypeName="decimal")]
[Editable(true)]
public decimal? feed_rate { get; set; }
/// <summary>
///切削倍率
/// </summary>
[Display(Name ="切削倍率")]
[DisplayFormat(DataFormatString="10,2")]
[Column(TypeName="decimal")]
[Editable(true)]
public decimal? cut_rate { get; set; }
/// <summary>
///开机时间
/// </summary>
[Display(Name ="开机时间")]
[Column(TypeName="bigint")]
[Editable(true)]
public long? on_time { get; set; }
/// <summary>
///运行时间
/// </summary>
[Display(Name ="运行时间")]
[Column(TypeName="bigint")]
[Editable(true)]
public long? run_time { get; set; }
/// <summary>
///累计运行时长
/// </summary>
[Display(Name ="累计运行时长")]
[Column(TypeName="bigint")]
[Editable(true)]
public long? run_time_total { get; set; }
/// <summary>
///累计加工数
/// </summary>
[Display(Name ="累计加工数")]
[Column(TypeName="bigint")]
[Editable(true)]
public long? quantity_total { get; set; }
/// <summary>
///
/// </summary>
[Display(Name ="CreateID")]
[Column(TypeName="int")]
[Editable(true)]
public int? CreateID { get; set; }
/// <summary>
///
/// </summary>
[Display(Name ="Creator")]
[MaxLength(255)]
[Column(TypeName="nvarchar(255)")]
[Editable(true)]
public string Creator { get; set; }
/// <summary>
///记录时间
/// </summary>
[Display(Name ="记录时间")]
[Column(TypeName="datetime")]
[Editable(true)]
public DateTime? CreateDate { get; set; }
/// <summary>
///
/// </summary>
[Display(Name ="ModifyID")]
[Column(TypeName="int")]
[Editable(true)]
public int? ModifyID { get; set; }
/// <summary>
///
/// </summary>
[Display(Name ="Modifier")]
[MaxLength(255)]
[Column(TypeName="nvarchar(255)")]
[Editable(true)]
public string Modifier { get; set; }
/// <summary>
///更新时间
/// </summary>
[Display(Name ="更新时间")]
[Column(TypeName="datetime")]
[Editable(true)]
public DateTime? ModifyDate { get; set; }
}
}

@ -0,0 +1,21 @@
/*
*,
*Model
*/
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using VOL.Entity.SystemModels;
namespace VOL.Entity.DomainModels
{
public partial class Data_Machine
{
//此处配置字段(字段配置见此model的另一个partial),如果表中没有此字段请加上 [NotMapped]属性,否则会异常
}
}

@ -27,12 +27,29 @@ namespace VOL.Entity.DomainModels
public int id { get; set; } public int id { get; set; }
/// <summary> /// <summary>
///待机时长 ///设备信息
/// </summary> /// </summary>
[Display(Name ="待机时长")] [Display(Name ="设备信息")]
[Column(TypeName="int")] [Column(TypeName="int")]
[Editable(true)] [Editable(true)]
public int? standby_time { get; set; } [Required(AllowEmptyStrings=false)]
public int config_id { get; set; }
/// <summary>
///程序编号
/// </summary>
[Display(Name ="程序编号")]
[Column(TypeName="int")]
[Editable(true)]
public int? program_no { get; set; }
/// <summary>
///通讯状态
/// </summary>
[Display(Name ="通讯状态")]
[Column(TypeName="int")]
[Editable(true)]
public int? com_status { get; set; }
/// <summary> /// <summary>
///运行时长 ///运行时长
@ -56,7 +73,7 @@ namespace VOL.Entity.DomainModels
[Display(Name ="当班产量")] [Display(Name ="当班产量")]
[Column(TypeName="int")] [Column(TypeName="int")]
[Editable(true)] [Editable(true)]
public int? turnout { get; set; } public int? turnout_all { get; set; }
/// <summary> /// <summary>
///工单 1 产量 ///工单 1 产量
@ -64,7 +81,7 @@ namespace VOL.Entity.DomainModels
[Display(Name ="工单 1 产量")] [Display(Name ="工单 1 产量")]
[Column(TypeName="int")] [Column(TypeName="int")]
[Editable(true)] [Editable(true)]
public int? turnout_one { get; set; } public int? turnout_1 { get; set; }
/// <summary> /// <summary>
///工单 2 产量 ///工单 2 产量
@ -72,7 +89,7 @@ namespace VOL.Entity.DomainModels
[Display(Name ="工单 2 产量")] [Display(Name ="工单 2 产量")]
[Column(TypeName="int")] [Column(TypeName="int")]
[Editable(true)] [Editable(true)]
public int? turnout_two { get; set; } public int? turnout_2 { get; set; }
/// <summary> /// <summary>
///工单 3 产量 ///工单 3 产量
@ -80,7 +97,70 @@ namespace VOL.Entity.DomainModels
[Display(Name ="工单 3 产量")] [Display(Name ="工单 3 产量")]
[Column(TypeName="int")] [Column(TypeName="int")]
[Editable(true)] [Editable(true)]
public int? turnout_three { get; set; } public int? turnout_3 { get; set; }
/// <summary>
///工单1任务进度
/// </summary>
[Display(Name ="工单1任务进度")]
[DisplayFormat(DataFormatString="10,2")]
[Column(TypeName="decimal")]
[Editable(true)]
public decimal? schedule_1 { get; set; }
/// <summary>
///工单2任务进度
/// </summary>
[Display(Name ="工单2任务进度")]
[DisplayFormat(DataFormatString="10,2")]
[Column(TypeName="decimal")]
[Editable(true)]
public decimal? schedule_2 { get; set; }
/// <summary>
///工单3任务进度
/// </summary>
[Display(Name ="工单3任务进度")]
[DisplayFormat(DataFormatString="10,2")]
[Column(TypeName="decimal")]
[Editable(true)]
public decimal? schedule_3 { get; set; }
/// <summary>
///工单1良品率
/// </summary>
[Display(Name ="工单1良品率")]
[DisplayFormat(DataFormatString="10,2")]
[Column(TypeName="decimal")]
[Editable(true)]
public decimal? yield_1 { get; set; }
/// <summary>
///工单2良品率
/// </summary>
[Display(Name ="工单2良品率")]
[DisplayFormat(DataFormatString="10,2")]
[Column(TypeName="decimal")]
[Editable(true)]
public decimal? yield_2 { get; set; }
/// <summary>
///工单3良品率
/// </summary>
[Display(Name ="工单3良品率")]
[DisplayFormat(DataFormatString="10,2")]
[Column(TypeName="decimal")]
[Editable(true)]
public decimal? yield_3 { get; set; }
/// <summary>
///设备综合效率
/// </summary>
[Display(Name ="设备综合效率")]
[DisplayFormat(DataFormatString="10,2")]
[Column(TypeName="decimal")]
[Editable(true)]
public decimal? oee { get; set; }
/// <summary> /// <summary>
/// ///
@ -125,9 +205,9 @@ namespace VOL.Entity.DomainModels
public string Modifier { get; set; } public string Modifier { get; set; }
/// <summary> /// <summary>
/// ///更新时间
/// </summary> /// </summary>
[Display(Name ="ModifyDate")] [Display(Name ="更新时间")]
[Column(TypeName="datetime")] [Column(TypeName="datetime")]
[Editable(true)] [Editable(true)]
public DateTime? ModifyDate { get; set; } public DateTime? ModifyDate { get; set; }

@ -4,9 +4,9 @@ using Microsoft.EntityFrameworkCore.Metadata.Builders;
namespace VOL.Entity.MappingConfiguration namespace VOL.Entity.MappingConfiguration
{ {
public class Data_DeviceMapConfig : EntityMappingConfiguration<Data_Device> public class Data_ConfigMapConfig : EntityMappingConfiguration<Data_Config>
{ {
public override void Map(EntityTypeBuilder<Data_Device> public override void Map(EntityTypeBuilder<Data_Config>
builderTable) builderTable)
{ {
//b.Property(x => x.StorageName).HasMaxLength(45); //b.Property(x => x.StorageName).HasMaxLength(45);

@ -0,0 +1,16 @@
using VOL.Entity.MappingConfiguration;
using VOL.Entity.DomainModels;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
namespace VOL.Entity.MappingConfiguration
{
public class Data_MachineMapConfig : EntityMappingConfiguration<Data_Machine>
{
public override void Map(EntityTypeBuilder<Data_Machine>
builderTable)
{
//b.Property(x => x.StorageName).HasMaxLength(45);
}
}
}

@ -60,22 +60,7 @@ namespace VOL.WebApi.Controllers.Data
return Content("master modbus disconnect!"); return Content("master modbus disconnect!");
} }
try { try {
// 读Int16
ushort[] us1 = _service.ReadHoldingRegisters(1, 9, 1);
short v = DataConvertUtil.GetShort(us1, 0);
Console.WriteLine("Short Data" + v);
// 读Float
ushort[] us2 = _service.ReadHoldingRegisters(1, 1, 2);
float f = DataConvertUtil.GetReal(us2, 0);
Console.WriteLine("Real Data" + f);
// 读Bool
ushort[] us3 = _service.ReadHoldingRegisters(1, 11, 1);
bool[] bs = DataConvertUtil.GetBools(us3,0,1);
Console.WriteLine("Bools Data" + String.Join(",",bs));
// 读String
ushort[] target = _service.ReadHoldingRegisters(1, 30, 6);
string str = DataConvertUtil.GetString(target,0,6);
Console.WriteLine("String Data" + str.ToString());
} catch (Exception ex) { } catch (Exception ex) {
Console.WriteLine(ex.Message); Console.WriteLine(ex.Message);
return Content("read data error!"); return Content("read data error!");

@ -234,36 +234,43 @@ namespace VOL.WebApi.Controllers.Data
[HttpGet, HttpPost, Route("unitTestSem")] [HttpGet, HttpPost, Route("unitTestSem")]
public IActionResult Test02() public IActionResult Test02()
{ {
Console.Write(5 / 2); _service = new ModbusTcpService("192.168.1.99", 502);
_service = new ModbusTcpService("192.168.0.99", 502);
if (_service.isConnected) if (_service.isConnected)
{ {
// 读取从0开始文档上地址从1开始的地址需要减1 // 读取从0开始文档上地址从1开始的地址需要减1
Console.WriteLine("=========read4x========="); Console.WriteLine("=========read4x=========");
// 写数据 // 写数据
_service.writeData(1, 6429, 1); //_service.writeData(1, 6429, 1);
_service.writeData(1, 1173, 256); //_service.writeData(1, 1173, 256);
_service.writeData(1, 1215, 6.28F); //_service.writeData(1, 1215, 6.28F);
_service.writeData(1, 6691, "Hello World!!"); //_service.writeData(1, 6691, "Hello World!!");
// 读数据 // 读数据
short s = _service.readData(1, 6429, "int16"); //short s = _service.readData(1, 6429, "int16"); // 运行模式
//float f = _service.readData(1, 1215, "single"); // 加工数
int i = _service.readData(1, 1173, "int32"); //int i = _service.readData(1, 1173, "int32");
//string str = _service.readData(1, 6690, "string", 52);
float f = _service.readData(1, 1215, "single");
//Console.WriteLine(s);
//Console.WriteLine(f);
//Console.WriteLine(i);
//Console.WriteLine(str);
string str = _service.readData(1, 6690, "string", 52); //short s = _service.readData(1, 6429, "int16"); // 运行模式
//float f1 = _service.readData(1, 1231, "single"); // 主轴倍率
//float f2 = _service.readData(1, 1215, "single"); // 加工数
//Console.WriteLine(s);
//Console.WriteLine(f1);
//Console.WriteLine(f2);
//Console.WriteLine(str);
short s = _service.readData(1, 6430, "int16"); // 通讯状态
Console.WriteLine(s); Console.WriteLine(s);
Console.WriteLine(i);
Console.WriteLine(f);
Console.WriteLine(str);
Console.WriteLine("=========read4x========="); Console.WriteLine("=========read4x=========");
@ -281,35 +288,51 @@ namespace VOL.WebApi.Controllers.Data
[HttpGet, HttpPost, Route("unitTestCnc")] [HttpGet, HttpPost, Route("unitTestCnc")]
public IActionResult Test03() public IActionResult Test03()
{ {
_service = new ModbusTcpService("192.168.0.100", 502); _service = new ModbusTcpService("192.168.1.100", 502);
//_service = new ModbusTcpService("192.168.1.99", 502);
if (_service.isConnected) if (_service.isConnected)
{ {
// 读取从0开始文档上地址从1开始的地址需要减1 // 读取从0开始文档上地址从1开始的地址需要减1
Console.WriteLine("=========read4x========="); Console.WriteLine("=========read4x=========");
// 写数据 // 写数据
_service.writeData(1, 6424, 2); //_service.writeData(1, 6424, 2);
_service.writeData(1, 1309, 65537); //_service.writeData(1, 1309, 65537);
_service.writeData(1, 1307, 5.68F); //_service.writeData(1, 1307, 5.68F);
_service.writeData(1, 6640, "hehe"); //_service.writeData(1, 6640, "hehe");
// 读数据 // 读数据
short s = _service.readData(1, 6424, "int16"); //short s = _service.readData(1, 6424, "int16");
int i = _service.readData(1, 1309, "int32"); //int i = _service.readData(1, 1309, "int32");
float f = _service.readData(1, 1307, "single"); //float f = _service.readData(1, 1307, "single");
string str = _service.readData(1, 6640, "string", 2); // 一个寄存器地址存放两个字符 //string str = _service.readData(1, 6640, "string", 2); // 一个寄存器地址存放两个字符
//Console.WriteLine(s);
//Console.WriteLine(i);
//Console.WriteLine(f);
//Console.WriteLine(str);
//_service.writeData(1, 1307, 120F);
//_service.writeData(1, 1299, 19912F);
//_service.writeData(1, 6424, 2);
//_service.writeData(1, 6402, 25);
//Console.WriteLine(_service.readData(1, 1307, "single")); // 加工数量
//Console.WriteLine(_service.readData(1, 1299, "single")); // 切削时间
//Console.WriteLine(_service.readData(1, 6424, "int16")); // 运行模式
//Console.WriteLine(_service.readData(1, 6402, "int16")); // 快速倍率
//Console.WriteLine(_service.readData(1, 6425, "int16")); // 轴状态
Console.WriteLine(_service.readData(1, 6429, "int16"));
Console.WriteLine(_service.readData(1, 6430, "int16"));
Console.WriteLine(_service.readData(1, 6431, "int16"));
Console.WriteLine(s);
Console.WriteLine(i);
Console.WriteLine(f);
Console.WriteLine(str);
Console.WriteLine("=========read4x========="); Console.WriteLine("=========read4x=========");

@ -0,0 +1,21 @@
/*
*,
*PartialData_ConfigController
*/
using Microsoft.AspNetCore.Mvc;
using VOL.Core.Controllers.Basic;
using VOL.Entity.AttributeManager;
using VOL.Data.IServices;
namespace VOL.Data.Controllers
{
[Route("api/Data_Config")]
[PermissionTable(Name = "Data_Config")]
public partial class Data_ConfigController : ApiBaseController<IData_ConfigService>
{
public Data_ConfigController(IData_ConfigService service)
: base(service)
{
}
}
}

@ -1,24 +0,0 @@
/*
*,
*PartialData_DeviceController
*/
using Microsoft.AspNetCore.Mvc;
using VOL.Core.Controllers.Basic;
using VOL.Entity.AttributeManager;
using VOL.Data.IServices;
using System;
namespace VOL.Data.Controllers
{
[Route("api/Data_Device")]
[PermissionTable(Name = "Data_Device")]
public partial class Data_DeviceController : ApiBaseController<IData_DeviceService>
{
public Data_DeviceController(IData_DeviceService service)
: base(service)
{
// 类存在多个构造函数时没有加ActivatorUtilitiesConstructor注解不为指定的执行构造
}
}
}

@ -0,0 +1,21 @@
/*
*,
*PartialData_MachineController
*/
using Microsoft.AspNetCore.Mvc;
using VOL.Core.Controllers.Basic;
using VOL.Entity.AttributeManager;
using VOL.Data.IServices;
namespace VOL.Data.Controllers
{
[Route("api/Data_Machine")]
[PermissionTable(Name = "Data_Machine")]
public partial class Data_MachineController : ApiBaseController<IData_MachineService>
{
public Data_MachineController(IData_MachineService service)
: base(service)
{
}
}
}

@ -1,7 +1,7 @@
/* /*
*... *...
*ActionAction使 *ActionAction使
*: [ApiActionPermission("Data_Device",Enums.ActionPermissionOptions.Search)] *: [ApiActionPermission("Data_Config",Enums.ActionPermissionOptions.Search)]
*/ */
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using System; using System;
@ -14,21 +14,20 @@ using VOL.Data.IServices;
namespace VOL.Data.Controllers namespace VOL.Data.Controllers
{ {
public partial class Data_DeviceController public partial class Data_ConfigController
{ {
private readonly IData_DeviceService _service;//访问业务代码 private readonly IData_ConfigService _service;//访问业务代码
private readonly IHttpContextAccessor _httpContextAccessor; private readonly IHttpContextAccessor _httpContextAccessor;
[ActivatorUtilitiesConstructor] [ActivatorUtilitiesConstructor]
public Data_DeviceController( public Data_ConfigController(
IData_DeviceService service, IData_ConfigService service,
IHttpContextAccessor httpContextAccessor IHttpContextAccessor httpContextAccessor
) )
: base(service) : base(service)
{ {
_service = service; _service = service;
_httpContextAccessor = httpContextAccessor; _httpContextAccessor = httpContextAccessor;
//Console.WriteLine("123456789");
} }
} }
} }

@ -0,0 +1,33 @@
/*
*...
*ActionAction使
*: [ApiActionPermission("Data_Machine",Enums.ActionPermissionOptions.Search)]
*/
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.AspNetCore.Http;
using VOL.Entity.DomainModels;
using VOL.Data.IServices;
namespace VOL.Data.Controllers
{
public partial class Data_MachineController
{
private readonly IData_MachineService _service;//访问业务代码
private readonly IHttpContextAccessor _httpContextAccessor;
[ActivatorUtilitiesConstructor]
public Data_MachineController(
IData_MachineService service,
IHttpContextAccessor httpContextAccessor
)
: base(service)
{
_service = service;
_httpContextAccessor = httpContextAccessor;
}
}
}

@ -1511,7 +1511,6 @@ export default defineComponent({
if (!column.bind || !column.bind.data) { if (!column.bind || !column.bind.data) {
return row[column.field]; return row[column.field];
} }
if (column.edit && (column.edit.type == 'selectList'||column.edit.type=='treeSelect')) { if (column.edit && (column.edit.type == 'selectList'||column.edit.type=='treeSelect')) {
if (!Array.isArray(val)) { if (!Array.isArray(val)) {
row[column.field] = val.split(','); row[column.field] = val.split(',');

@ -0,0 +1,164 @@
/*****************************************************************************************
** Author:jxx 2022
** QQ:283591387
**http://v2.volcore.xyz/document/api 【代码生成页面ViewGrid】
**http://v2.volcore.xyz/document/vueDev
**http://v2.volcore.xyz/document/netCoreDev
*****************************************************************************************/
//此js文件是用来自定义扩展业务代码可以扩展一些自定义页面或者重新配置生成的代码
let extension = {
components: {
//查询界面扩展组件
gridHeader: '',
gridBody: '',
gridFooter: '',
//新建、编辑弹出框扩展组件
modelHeader: '',
modelBody: '',
modelFooter: ''
},
tableAction: '', //指定某张表的权限(这里填写表名,默认不用填写)
buttons: { view: [], box: [], detail: [] }, //扩展的按钮
methods: {
onInit() { //框架初始化配置前,
//设置排序字段
this.pagination.sortName = "id";
this.pagination.order = "desc";
//设置页面上显示的按钮个数
this.maxBtnLength = 3;
// 格式化数据
this.dataFormatter();
},
onInited() {
//框架初始化配置后
let fixeds = ['id','com_status','config_id'];
this.columns.forEach(x=>{
//设置title列固定
if (fixeds.includes(x.field)) {
x.fixed=true//也可以设置为right,固定到最右边
}
})
//如果要配置明细表,在此方法操作
//this.detailOptions.columns.forEach(column=>{ });
},
searchBefore(param) {
//界面查询前,可以给param.wheres添加查询参数
//返回false则不会执行查询
return true;
},
searchAfter(result) {
//查询后result返回的查询数据,可以在显示到表格前处理表格的值
return true;
},
addBefore(formData) {
//新建保存前formData为对象包括明细表可以给给表单设置值自己输出看formData的值
return true;
},
updateBefore(formData) {
//编辑保存前formData为对象包括明细表、删除行的Id
return true;
},
rowClick({ row, column, event }) {
//查询界面点击行事件
this.$refs.table.$refs.table.toggleRowSelection(row); //单击行时选中当前行;
},
modelOpenAfter(row) {
//点击编辑、新建按钮弹出框后,可以在此处写逻辑,如,从后台获取数据
//(1)判断是编辑还是新建操作: this.currentAction=='Add';
//(2)给弹出框设置默认值
//(3)this.editFormFields.字段='xxx';
//如果需要给下拉框设置默认值请遍历this.editFormOptions找到字段配置对应data属性的key值
//看不懂就把输出看console.log(this.editFormOptions)
},
dataFormatter() {
this.columns.forEach(column => {
if (column.field == 'temperature') {
column.formatter = (row) => {
return row.temperature && '<span style="color: #2d8cf0;">' + row.temperature + ' </span>'
}
}
if (column.field == 'potential') {
column.formatter = (row) => {
return row.potential && '<span style="color: #2d8cf0;">' + row.potential + ' V </span>'
}
}
if (column.field == 'current') {
column.formatter = (row) => {
return row.current && '<span style="color: #2d8cf0;">' + row.current + ' A </span>'
}
}
if (column.field == 'quantity') {
column.formatter = (row) => {
return row.quantity && '<span style="color: #2d8cf0;">' + row.quantity + ' </span>'
}
}
if (column.field == 'cut_rate') {
column.formatter = (row) => {
return row.cut_rate && '<span style="color: #2d8cf0;">' + row.cut_rate + ' % </span>'
}
}
if (column.field == 'main_rate') {
column.formatter = (row) => {
return row.main_rate && '<span style="color: #2d8cf0;">' + row.main_rate + ' % </span>'
}
}
if (column.field == 'feed_rate') {
column.formatter = (row) => {
return row.feed_rate && '<span style="color: #2d8cf0;">' + row.feed_rate + ' % </span>'
}
}
if (column.field == 'on_time') {
column.formatter = (row) => {
return row.on_time && '<span style="color: #2d8cf0;">' + row.on_time + ' </span>'
}
}
if (column.field == 'run_time') {
column.formatter = (row) => {
return row.run_time && '<span style="color: #2d8cf0;">' + row.run_time + ' </span>'
}
}
if (column.field == 'run_time_total') {
column.formatter = (row) => {
return row.run_time_total && '<span style="color: #2d8cf0;">' + row.run_time_total + ' </span>'
}
}
if (column.field == 'quantity_total') {
column.formatter = (row) => {
return row.quantity_total && '<span style="color: #2d8cf0;">' + row.quantity_total + ' </span>'
}
}
// 标签改色
if (column.field == 'com_status') {
column.getColor = (row, column) => {
if (row.com_status == 15) {
return 'danger';
} else if (row.com_status == 5){
return 'success';
} else {
return '';
}
}
}
if (column.field == 'state') {
column.getColor = (row, column) => {
if (row.state == 1) {
return 'danger';
} else if (row.state == 2){
return 'success';
} else if (row.state == 3){
return 'warning';
} else {
return '';
}
}
}
})
}
}
};
export default extension;

@ -23,23 +23,24 @@ let extension = {
methods: { methods: {
//下面这些方法可以保留也可以删除 //下面这些方法可以保留也可以删除
onInit() { //框架初始化配置前, onInit() { //框架初始化配置前,
//示例:在按钮的最前面添加一个按钮 //设置排序字段
// this.buttons.unshift({ //也可以用push或者splice方法来修改buttons数组 this.pagination.sortName = "id";
// name: '按钮', //按钮名称 this.pagination.order = "desc";
// icon: 'el-icon-document', //按钮图标vue2版本见iview文档iconvue3版本见element ui文档icon(注意不是element puls文档)
// type: 'primary', //按钮样式vue2版本见iview文档buttonvue3版本见element ui文档button
// onClick: function () {
// this.$Message.success('点击了按钮');
// }
// });
//示例:设置修改新建、编辑弹出框字段标签的长度 //设置页面上显示的按钮个数
// this.boxOptions.labelWidth = 150; this.maxBtnLength = 3;
// 格式化数据
this.dataFormatter();
}, },
onInited() { onInited() {
//框架初始化配置后 let fixeds = ['id','com_status','config_id'];
//如果要配置明细表,在此方法操作 this.columns.forEach(x=>{
//this.detailOptions.columns.forEach(column=>{ }); //设置title列固定
if (fixeds.includes(x.field)) {
x.fixed=true//也可以设置为right,固定到最右边
}
})
}, },
searchBefore(param) { searchBefore(param) {
//界面查询前,可以给param.wheres添加查询参数 //界面查询前,可以给param.wheres添加查询参数
@ -59,8 +60,8 @@ let extension = {
return true; return true;
}, },
rowClick({ row, column, event }) { rowClick({ row, column, event }) {
//查询界面点击行事件 //单击行时选中当前行
// this.$refs.table.$refs.table.toggleRowSelection(row); //单击行时选中当前行; this.$refs.table.$refs.table.toggleRowSelection(row);
}, },
modelOpenAfter(row) { modelOpenAfter(row) {
//点击编辑、新建按钮弹出框后,可以在此处写逻辑,如,从后台获取数据 //点击编辑、新建按钮弹出框后,可以在此处写逻辑,如,从后台获取数据
@ -69,6 +70,83 @@ let extension = {
//(3)this.editFormFields.字段='xxx'; //(3)this.editFormFields.字段='xxx';
//如果需要给下拉框设置默认值请遍历this.editFormOptions找到字段配置对应data属性的key值 //如果需要给下拉框设置默认值请遍历this.editFormOptions找到字段配置对应data属性的key值
//看不懂就把输出看console.log(this.editFormOptions) //看不懂就把输出看console.log(this.editFormOptions)
},
dataFormatter() {
this.columns.forEach(column => {
if (column.field == 'run_time') {
column.formatter = (row) => {
return row.run_time && '<span style="color: #2d8cf0;">' + row.run_time + ' </span>'
}
}
if (column.field == 'turnout_1') {
column.formatter = (row) => {
return row.turnout_1 && '<span style="color: #2d8cf0;">' + row.turnout_1 + ' </span>'
}
}
if (column.field == 'turnout_2') {
column.formatter = (row) => {
return row.turnout_2 && '<span style="color: #2d8cf0;">' + row.turnout_2 + ' </span>'
}
}
if (column.field == 'turnout_3') {
column.formatter = (row) => {
return row.turnout_3 && '<span style="color: #2d8cf0;">' + row.turnout_3 + ' </span>'
}
}
if (column.field == 'turnout_all') {
column.formatter = (row) => {
return row.turnout_all && '<span style="color: #2d8cf0;">' + row.turnout_all + ' </span>'
}
}
if (column.field == 'schedule_1') {
column.formatter = (row) => {
return row.schedule_1 && '<span style="color: #2d8cf0;">' + row.schedule_1 + ' % </span>'
}
}
if (column.field == 'schedule_2') {
column.formatter = (row) => {
return row.schedule_2 && '<span style="color: #2d8cf0;">' + row.schedule_2 + ' % </span>'
}
}
if (column.field == 'schedule_3') {
column.formatter = (row) => {
return row.schedule_3 && '<span style="color: #2d8cf0;">' + row.schedule_3 + ' % </span>'
}
}
if (column.field == 'yield_1') {
column.formatter = (row) => {
return row.yield_1 && '<span style="color: #2d8cf0;">' + row.yield_1 * 100 + ' % </span>'
}
}
if (column.field == 'yield_2') {
column.formatter = (row) => {
return row.yield_2 && '<span style="color: #2d8cf0;">' + row.yield_2 * 100 + ' % </span>'
}
}
if (column.field == 'yield_3') {
column.formatter = (row) => {
return row.yield_3 && '<span style="color: #2d8cf0;">' + row.yield_3 * 100 + ' % </span>'
}
}
if (column.field == 'oee') {
column.formatter = (row) => {
return row.oee && '<span style="color: #2d8cf0;">' + row.oee * 100 + ' % </span>'
}
}
// 标签改色
if (column.field == 'com_status') {
column.getColor = (row, column) => {
if (row.com_status == 15) {
return 'danger';
} else if (row.com_status == 5){
return 'success';
} else {
return '';
}
}
}
})
} }
} }
}; };

@ -144,15 +144,20 @@ let viewgird = [
name: 'Sys_Department', name: 'Sys_Department',
component: () => import('@/views/system/system/Sys_Department.vue') component: () => import('@/views/system/system/Sys_Department.vue')
}, },
{
path: '/Data_Device',
name: 'Data_Device',
component: () => import('@/views/data/device/Data_Device.vue')
},
{ {
path: '/Data_Produce', path: '/Data_Produce',
name: 'Data_Produce', name: 'Data_Produce',
component: () => import('@/views/data/produce/Data_Produce.vue') component: () => import('@/views/data/produce/Data_Produce.vue')
},
{
path: '/Data_Config',
name: 'Data_Config',
component: () => import('@/views/data/config/Data_Config.vue')
},
{
path: '/Data_Machine',
name: 'Data_Machine',
component: () => import('@/views/data/machine/Data_Machine.vue')
} }
] ]

@ -0,0 +1,69 @@
<!--
*Authorjxx
*Contact283591387@qq.com
*代码由框架生成,任何更改都可能导致被代码生成器覆盖
*业务请在@/extension/data/config/Data_Config.js此处编写
-->
<template>
<view-grid ref="grid"
:columns="columns"
:detail="detail"
:editFormFields="editFormFields"
:editFormOptions="editFormOptions"
:searchFormFields="searchFormFields"
:searchFormOptions="searchFormOptions"
:table="table"
:extend="extend">
</view-grid>
</template>
<script>
import extend from "@/extension/data/config/Data_Config.js";
import { ref, defineComponent } from "vue";
export default defineComponent({
setup() {
const table = ref({
key: 'id',
footer: "Foots",
cnName: '设备配置',
name: 'config/Data_Config',
url: "/Data_Config/",
sortName: "id"
});
const editFormFields = ref({"name":"","device_ip":"","com_ip":"","type":""});
const editFormOptions = ref([[{"title":"设备名称","field":"name"}],
[{"title":"设备IP","field":"device_ip"}],
[{"title":"通讯IP","field":"com_ip","type":"text"}],
[{"dataKey":"device_type","data":[],"title":"机床类型","field":"type","type":"select"}]]);
const searchFormFields = ref({"type":"","com_ip":""});
const searchFormOptions = ref([[{"dataKey":"device_type","data":[],"title":"机床类型","field":"type","type":"select"},{"title":"通讯IP","field":"com_ip","type":"text"}]]);
const columns = ref([{field:'id',title:'id',type:'int',width:110,hidden:true,readonly:true,require:true,align:'left'},
{field:'name',title:'设备名称',type:'string',width:220,align:'left',sort:true},
{field:'type',title:'机床类型',type:'short',bind:{ key:'device_type',data:[]},width:120,align:'left'},
{field:'device_ip',title:'设备IP',type:'string',width:220,align:'left'},
{field:'com_ip',title:'通讯IP',type:'string',width:110,align:'left'},
{field:'CreateID',title:'CreateID',type:'int',width:100,hidden:true,align:'left'},
{field:'Creator',title:'Creator',type:'string',width:100,hidden:true,align:'left'},
{field:'CreateDate',title:'创建时间',type:'datetime',width:150,align:'left',sort:true},
{field:'ModifyID',title:'ModifyID',type:'int',width:100,hidden:true,align:'left'},
{field:'Modifier',title:'Modifier',type:'string',width:100,hidden:true,align:'left'},
{field:'ModifyDate',title:'更新时间',type:'datetime',width:150,align:'left',sort:true}]);
const detail = ref({
cnName: "#detailCnName",
table: "#detailTable",
columns: [],
sortName: "",
key: ""
});
return {
table,
extend,
editFormFields,
editFormOptions,
searchFormFields,
searchFormOptions,
columns,
detail,
};
},
});
</script>

@ -1,71 +0,0 @@
<!--
*Authorjxx
*Contact283591387@qq.com
*代码由框架生成,任何更改都可能导致被代码生成器覆盖
*业务请在@/extension/data/device/Data_Device.js此处编写
-->
<template>
<view-grid ref="grid"
:columns="columns"
:detail="detail"
:editFormFields="editFormFields"
:editFormOptions="editFormOptions"
:searchFormFields="searchFormFields"
:searchFormOptions="searchFormOptions"
:table="table"
:extend="extend">
</view-grid>
</template>
<script>
import extend from "@/extension/data/device/Data_Device.js";
import { ref, defineComponent } from "vue";
export default defineComponent({
setup() {
const table = ref({
key: 'id',
footer: "Foots",
cnName: '设备运行',
name: 'device/Data_Device',
url: "/Data_Device/",
sortName: "id"
});
const editFormFields = ref({"temperature":"","potential":"","current":"","processno":"","run_mode":""});
const editFormOptions = ref([[{"title":"电机温度","field":"temperature","type":"decimal"},
{"title":"母线电压","field":"potential","type":"decimal"},
{"title":"实际电流","field":"current","type":"decimal"}],
[{"title":"加工程序号","field":"processno"},
{"dataKey":"device_status","data":[],"title":"运行模式","field":"run_mode","type":"select"}]]);
const searchFormFields = ref({"processno":"","run_mode":""});
const searchFormOptions = ref([[{"title":"加工程序号","field":"processno","type":"text"},{"dataKey":"device_status","data":[],"title":"运行模式","field":"run_mode","type":"select"}]]);
const columns = ref([{field:'id',title:'ID',type:'int',width:110,hidden:true,readonly:true,require:true,align:'left'},
{field:'temperature',title:'电机温度',type:'decimal',width:110,align:'left',sort:true},
{field:'potential',title:'母线电压',type:'decimal',width:110,align:'left'},
{field:'current',title:'实际电流',type:'decimal',width:110,align:'left'},
{field:'processno',title:'加工程序号',type:'string',width:110,align:'left'},
{field:'run_mode',title:'运行模式',type:'short',bind:{ key:'device_status',data:[]},width:110,align:'left'},
{field:'CreateID',title:'CreateID',type:'int',width:100,hidden:true,align:'left'},
{field:'Creator',title:'Creator',type:'string',width:100,hidden:true,align:'left'},
{field:'CreateDate',title:'记录时间',type:'datetime',width:180,align:'left',sort:true},
{field:'ModifyID',title:'ModifyID',type:'int',width:100,hidden:true,align:'left'},
{field:'Modifier',title:'Modifier',type:'string',width:100,hidden:true,align:'left'},
{field:'ModifyDate',title:'ModifyDate',type:'datetime',width:150,hidden:true,align:'left',sort:true}]);
const detail = ref({
cnName: "#detailCnName",
table: "#detailTable",
columns: [],
sortName: "",
key: ""
});
return {
table,
extend,
editFormFields,
editFormOptions,
searchFormFields,
searchFormOptions,
columns,
detail,
};
},
});
</script>

@ -0,0 +1,95 @@
<!--
*Authorjxx
*Contact283591387@qq.com
*代码由框架生成,任何更改都可能导致被代码生成器覆盖
*业务请在@/extension/data/machine/Data_Machine.js此处编写
-->
<template>
<view-grid ref="grid"
:columns="columns"
:detail="detail"
:editFormFields="editFormFields"
:editFormOptions="editFormOptions"
:searchFormFields="searchFormFields"
:searchFormOptions="searchFormOptions"
:table="table"
:extend="extend">
</view-grid>
</template>
<script>
import extend from "@/extension/data/machine/Data_Machine.js";
import { ref, defineComponent } from "vue";
export default defineComponent({
setup() {
const table = ref({
key: 'id',
footer: "Foots",
cnName: '机床数据',
name: 'machine/Data_Machine',
url: "/Data_Machine/",
sortName: "id"
});
const editFormFields = ref({"config_id":"","com_status":"","run_program_no":"","smode":"","gmode":"","temperature":"","potential":"","current":"","main_rate":"","feed_rate":"","cut_rate":"","state":"","quantity":"","on_time":"","run_time":"","run_time_total":"","quantity_total":""});
const editFormOptions = ref([[{"dataKey":"device_name","data":[],"title":"设备信息","required":true,"field":"config_id","disabled":true,"type":"select"},
{"dataKey":"produce_com_status","data":[],"title":"通讯状态","field":"com_status","type":"select"},
{"title":"加工程序号","field":"run_program_no"}],
[{"dataKey":"machine_smode","data":[],"title":"运行模式(西门子)","field":"smode","colSize":6,"type":"select"},
{"dataKey":"machine_gmode","data":[],"title":"运行模式(广数)","field":"gmode","colSize":6,"type":"select"}],
[{"title":"电机温度","field":"temperature","type":"decimal"},
{"title":"母线电压","field":"potential","type":"decimal"},
{"title":"实际电流","field":"current","type":"decimal"}],
[{"title":"主轴倍率","field":"main_rate","type":"decimal"},
{"title":"进给倍率","field":"feed_rate","type":"decimal"},
{"title":"切削倍率","field":"cut_rate","type":"decimal"}],
[{"title":"加工数","field":"quantity","type":"number"},
{"dataKey":"machine_state","data":[],"title":"运行状态","field":"state","type":"select"},
{"title":"开机时间","field":"on_time","type":"number"},
{"title":"运行时间","field":"run_time","type":"number"}],
[{"title":"累计运行时长","field":"run_time_total","type":"number"},
{"title":"累计加工数","field":"quantity_total","type":"number"}]]);
const searchFormFields = ref({"config_id":"","com_status":"","smode":"","gmode":"","run_program_no":"","state":"","quantity":[null,null],"CreateDate":[null,null]});
const searchFormOptions = ref([[{"dataKey":"device_name","data":[],"title":"设备信息","field":"config_id","type":"select"},{"title":"加工程序号","field":"run_program_no"},{"dataKey":"produce_com_status","data":[],"title":"通讯状态","field":"com_status","type":"select"}],[{"dataKey":"machine_smode","data":[],"title":"运行模式(西门子)","field":"smode","type":"select"},{"dataKey":"machine_gmode","data":[],"title":"运行模式(广数)","field":"gmode","type":"select"},{"dataKey":"machine_state","data":[],"title":"运行状态","field":"state","type":"select"}],[{"title":"加工数","field":"quantity","type":"range"},{"title":"记录时间","field":"CreateDate","type":"range"}]]);
const columns = ref([{field:'id',title:'id',type:'int',width:80,readonly:true,require:true,align:'left',sort:true},
{field:'config_id',title:'设备信息',type:'int',bind:{ key:'device_name',data:[]},width:110,readonly:true,require:true,align:'left'},
{field:'com_status',title:'通讯状态',type:'short',bind:{ key:'produce_com_status',data:[]},width:110,align:'left'},
{field:'smode',title:'运行模式(西门子)',type:'short',bind:{ key:'machine_smode',data:[]},width:140,align:'left'},
{field:'gmode',title:'运行模式(广数)',type:'short',bind:{ key:'machine_gmode',data:[]},width:140,align:'left'},
{field:'run_program_no',title:'加工程序号',type:'string',width:180,align:'left'},
{field:'state',title:'运行状态',type:'short',bind:{ key:'machine_state',data:[]},width:110,align:'left'},
{field:'temperature',title:'电机温度',type:'decimal',width:100,align:'left'},
{field:'potential',title:'母线电压',type:'decimal',width:100,align:'left'},
{field:'current',title:'实际电流',type:'decimal',width:100,align:'left'},
{field:'quantity',title:'加工数',type:'bigint',width:100,align:'left'},
{field:'main_rate',title:'主轴倍率',type:'decimal',width:100,align:'left'},
{field:'feed_rate',title:'进给倍率',type:'decimal',width:100,align:'left'},
{field:'cut_rate',title:'切削倍率',type:'decimal',width:100,align:'left'},
{field:'on_time',title:'开机时间',type:'bigint',width:150,align:'left'},
{field:'run_time',title:'运行时间',type:'bigint',width:150,align:'left'},
{field:'run_time_total',title:'累计运行时长',type:'bigint',width:150,align:'left'},
{field:'quantity_total',title:'累计加工数',type:'bigint',width:150,align:'left'},
{field:'CreateID',title:'CreateID',type:'int',width:100,hidden:true,align:'left'},
{field:'Creator',title:'Creator',type:'string',width:100,hidden:true,align:'left'},
{field:'CreateDate',title:'记录时间',type:'datetime',width:180,align:'left',sort:true},
{field:'ModifyID',title:'ModifyID',type:'int',width:100,hidden:true,align:'left'},
{field:'Modifier',title:'Modifier',type:'string',width:100,hidden:true,align:'left'},
{field:'ModifyDate',title:'更新时间',type:'datetime',width:180,align:'left',sort:true}]);
const detail = ref({
cnName: "#detailCnName",
table: "#detailTable",
columns: [],
sortName: "",
key: ""
});
return {
table,
extend,
editFormFields,
editFormOptions,
searchFormFields,
searchFormOptions,
columns,
detail,
};
},
});
</script>

@ -29,30 +29,48 @@
url: "/Data_Produce/", url: "/Data_Produce/",
sortName: "id" sortName: "id"
}); });
const editFormFields = ref({"standby_time":"","run_time":"","status":"","turnout":"","turnout_one":"","turnout_two":"","turnout_three":""}); const editFormFields = ref({"config_id":"","program_no":"","com_status":"","run_time":"","status":"","turnout_all":"","turnout_1":"","turnout_2":"","turnout_3":"","schedule_1":"","schedule_2":"","schedule_3":"","yield_1":"","yield_2":"","yield_3":"","oee":""});
const editFormOptions = ref([[{"title":"待机时长","field":"standby_time","type":"number"}, const editFormOptions = ref([[{"dataKey":"device_name","data":[],"title":"设备信息","required":true,"field":"config_id","disabled":true,"type":"select"},
{"title":"运行时长","field":"run_time","type":"number"}, {"title":"程序编号","field":"program_no","type":"number"}],
{"dataKey":"produce_status","data":[],"title":"运行状态","field":"status","type":"select"}], [{"dataKey":"produce_com_status","data":[],"title":"通讯状态","field":"com_status","type":"select"},
[{"title":"当班产量","field":"turnout","type":"number"}, {"title":"运行时长","field":"run_time","type":"number"}],
{"title":"工单 1 产量","field":"turnout_one","type":"number"}, [{"dataKey":"produce_status","data":[],"title":"运行状态","field":"status","type":"select"},
{"title":"工单 2 产量","field":"turnout_two","type":"number"}, {"title":"当班产量","field":"turnout_all","type":"number"}],
{"title":"工单 3 产量","field":"turnout_three","type":"number"}]]); [{"title":"工单 1 产量","field":"turnout_1","type":"number"},
const searchFormFields = ref({"status":"","turnout":"","CreateDate":""}); {"title":"工单 2 产量","field":"turnout_2","type":"number"},
const searchFormOptions = ref([[{"dataKey":"produce_status","data":[],"title":"运行状态","field":"status","type":"select"},{"title":"当班产量","field":"turnout","type":"number"}],[{"title":"记录时间","field":"CreateDate","type":"datetime"}]]); {"title":"工单 3 产量","field":"turnout_3","type":"number"}],
const columns = ref([{field:'id',title:'ID',type:'int',width:110,hidden:true,readonly:true,require:true,align:'left'}, [{"title":"工单1任务进度","field":"schedule_1","type":"decimal"},
{field:'standby_time',title:'待机时长',type:'int',width:110,align:'left',sort:true}, {"title":"工单2任务进度","field":"schedule_2","type":"decimal"},
{"title":"工单3任务进度","field":"schedule_3","type":"decimal"}],
[{"title":"工单1良品率","field":"yield_1","type":"decimal"},
{"title":"工单2良品率","field":"yield_2","type":"decimal"},
{"title":"工单3良品率","field":"yield_3","type":"decimal"}],
[{"title":"设备综合效率","field":"oee","type":"decimal"}]]);
const searchFormFields = ref({"config_id":"","program_no":"","com_status":"","status":"","turnout_all":[null,null],"CreateDate":""});
const searchFormOptions = ref([[{"dataKey":"produce_status","data":[],"title":"运行状态","field":"status","type":"select"},{"title":"程序编号","field":"program_no","type":"number"},{"dataKey":"produce_com_status","data":[],"title":"通讯状态","field":"com_status","type":"number"}],[{"title":"记录时间","field":"CreateDate","type":"datetime"},{"dataKey":"device_name","data":[],"title":"设备信息","field":"config_id","type":"select"},{"title":"当班产量","field":"turnout_all","type":"range"}]]);
const columns = ref([{field:'id',title:'ID',type:'int',width:110,readonly:true,require:true,align:'left',sort:true},
{field:'config_id',title:'设备信息',type:'int',bind:{ key:'device_name',data:[]},width:120,readonly:true,require:true,align:'left'},
{field:'program_no',title:'程序编号',type:'int',width:150,align:'left'},
{field:'com_status',title:'通讯状态',type:'int',bind:{ key:'produce_com_status',data:[]},width:120,align:'left'},
{field:'run_time',title:'运行时长',type:'int',width:110,align:'left'}, {field:'run_time',title:'运行时长',type:'int',width:110,align:'left'},
{field:'status',title:'运行状态',type:'sbyte',bind:{ key:'produce_status',data:[]},width:110,align:'left'}, {field:'status',title:'运行状态',type:'sbyte',bind:{ key:'produce_status',data:[]},width:110,align:'left'},
{field:'turnout',title:'当班产量',type:'int',width:110,align:'left'}, {field:'turnout_all',title:'当班产量',type:'int',sort:true,width:120,align:'left'},
{field:'turnout_one',title:'工单 1 产量',type:'int',width:110,align:'left'}, {field:'turnout_1',title:'工单 1 产量',type:'int',width:120,align:'left'},
{field:'turnout_two',title:'工单 2 产量',type:'int',width:110,align:'left'}, {field:'turnout_2',title:'工单 2 产量',type:'int',width:120,align:'left'},
{field:'turnout_three',title:'工单 3 产量',type:'int',width:110,align:'left'}, {field:'turnout_3',title:'工单 3 产量',type:'int',width:120,align:'left'},
{field:'schedule_1',title:'工单1任务进度',type:'decimal',width:120,align:'left'},
{field:'schedule_2',title:'工单2任务进度',type:'decimal',width:120,align:'left'},
{field:'schedule_3',title:'工单3任务进度',type:'decimal',width:120,align:'left'},
{field:'yield_1',title:'工单1良品率',type:'decimal',width:120,align:'left'},
{field:'yield_2',title:'工单2良品率',type:'decimal',width:120,align:'left'},
{field:'yield_3',title:'工单3良品率',type:'decimal',width:120,align:'left'},
{field:'oee',title:'设备综合效率',type:'decimal',sort:true,width:120,align:'left'},
{field:'CreateID',title:'CreateID',type:'int',width:100,hidden:true,readonly:true,align:'left'}, {field:'CreateID',title:'CreateID',type:'int',width:100,hidden:true,readonly:true,align:'left'},
{field:'Creator',title:'Creator',type:'string',width:100,hidden:true,readonly:true,align:'left'}, {field:'Creator',title:'Creator',type:'string',width:100,hidden:true,readonly:true,align:'left'},
{field:'CreateDate',title:'记录时间',type:'datetime',width:180,readonly:true,align:'left',sort:true}, {field:'CreateDate',title:'记录时间',type:'datetime',width:180,readonly:true,align:'left',sort:true},
{field:'ModifyID',title:'ModifyID',type:'int',width:100,hidden:true,readonly:true,align:'left'}, {field:'ModifyID',title:'ModifyID',type:'int',width:100,hidden:true,readonly:true,align:'left'},
{field:'Modifier',title:'Modifier',type:'string',width:100,hidden:true,readonly:true,align:'left'}, {field:'Modifier',title:'Modifier',type:'string',width:100,hidden:true,readonly:true,align:'left'},
{field:'ModifyDate',title:'ModifyDate',type:'datetime',width:150,hidden:true,readonly:true,align:'left',sort:true}]); {field:'ModifyDate',title:'更新时间',type:'datetime',width:180,readonly:true,align:'left',sort:true}]);
const detail = ref({ const detail = ref({
cnName: "#detailCnName", cnName: "#detailCnName",
table: "#detailTable", table: "#detailTable",

Loading…
Cancel
Save