Admin.NET/WCS.Application/PLC/PLCService.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Admin.NET/WCS.Application/PLC/PLCTaskAction.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Admin.NET/WCS.Application/PLC/PLCUtil.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Admin.NET/WCS.Application/Service/WcsPlc/Dto/WcsPlcOutput.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Admin.NET/WCS.Application/Service/WcsStation/Dto/WcsStationOutput.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Admin.NET/WCS.Application/Service/WcsTask/WcsTaskService.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Admin.NET/WCS.Application/Service/WcsTaskMonitor/WcsTaskMonitorService.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Admin.NET/WCS.Application/WCS.Application.csproj | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Web/.env.production | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Web/dist.rar | 补丁 | 查看 | 原始文档 | blame | 历史 | |
Web/src/views/login/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Web/stats.html | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
Admin.NET/WCS.Application/PLC/PLCService.cs
@@ -12,32 +12,47 @@ switch (mod.Type) { case PLCTypeEnum.StackingMachine: if (mod.Value == 820) //写死测试读string var (res, val) = mod.PLCUtil.GetPlcDBValue(PLCDataTypeEnum.String, "DB100", "64"); Console.WriteLine("DB100.64----" + val); //测试批量读取 Dictionary<string, PLCDataTypeEnum> listaddress = new Dictionary<string, PLCDataTypeEnum>(); foreach (var modStation in mod.listStation) { //测试写入830 var result = mod.PLCUtil.SetPlcDBValue(mod.PosType.Value, mod.DbNumber, mod.PlcPos, "830"); //写入是否成功 if (result.IsSucceed) listaddress.Add(modStation.PlcPos, modStation.PosType.Value); } var result = mod.PLCUtil.GetPlcBatchDBValue(listaddress); if (result.Value.Count > 0) { foreach (var value in result.Value) { Console.WriteLine("地址" + value.Key + "----值" + value, value); } } if (!result.IsSucceed) { foreach (var err in result.ErrList) { Console.WriteLine(err); } if (result.Value.Count > 0)//有错误的也有成功的 { } } if (mod.Value == 820) { //测试写入830 //var result = mod.PLCUtil.SetPlcDBValue(mod.PosType.Value, mod.DbNumber, mod.PlcPos, "830"); ////写入是否成功 //if (result.IsSucceed) //{ //} } else if (mod.Value == 840) { //测试批量读取 Dictionary<string, PLCDataTypeEnum> listaddress = new Dictionary<string, PLCDataTypeEnum>(); foreach (var modStation in mod.listStation) { listaddress.Add(modStation.PlcPos, modStation.PosType.Value); } var result = mod.PLCUtil.GetPlcBatchDBValue(listaddress); if (!result.IsSucceed) { if (result.Value.Count > 0)//有错误的也有成功的 { } } } else if (mod.Value == 860) { Admin.NET/WCS.Application/PLC/PLCTaskAction.cs
@@ -10,7 +10,7 @@ private static List<WcsStation> listPlcStation; private static List<PLCUtil> listPlcUtil = new List<PLCUtil>(); private static CancellationTokenSource cts = new CancellationTokenSource();//取消线程标识 private static CancellationTokenSource cts;//取消线程标识 public static event EventHandler DeviceValueChangeEvent; static PLCTaskAction() @@ -85,16 +85,16 @@ var (result, value) = modPlcUtil.GetPlcDBValue(modDevice.PosType.Value, modDevice.DbNumber, modDevice.PlcPos); if (result.IsSucceed) { if (value != 0) { var dto = modDevice.Adapt<WcsDeviceDto>(); dto.Value = value; dto.Type = _modplc.Type; dto.PLCUtil = modPlcUtil; dto.listStation = listPlcStation.Where(s => s.DeviceId == modDevice.Id).ToList(); //这里触发值变更事件 DeviceValueChangeEvent?.Invoke(dto, EventArgs.Empty); } //if (value != 0) //{ var dto = modDevice.Adapt<WcsDeviceDto>(); dto.Value = value; dto.Type = _modplc.Type; dto.PLCUtil = modPlcUtil; dto.listStation = listPlcStation.Where(s => s.DeviceId == modDevice.Id).ToList(); //这里触发值变更事件 DeviceValueChangeEvent?.Invoke(dto, EventArgs.Empty); //} } else { Admin.NET/WCS.Application/PLC/PLCUtil.cs
@@ -80,6 +80,9 @@ case PLCDataTypeEnum.Double: result = _client.ReadDouble(address); break; case PLCDataTypeEnum.String: result = _client.ReadString(address); break; default: result = new IoTClient.Result<object>(); break; Admin.NET/WCS.Application/Service/WcsPlc/Dto/WcsPlcOutput.cs
@@ -41,6 +41,50 @@ /// </summary> public string? Text { get; set; } /// <summary> /// 创建时间 /// </summary> public DateTime? CreateTime { get; set; } /// <summary> /// 更新时间 /// </summary> public DateTime? UpdateTime { get; set; } /// <summary> /// 创建者Id /// </summary> public long? CreateUserId { get; set; } /// <summary> /// 创建者姓名 /// </summary> public string? CreateUserName { get; set; } /// <summary> /// 修改者Id /// </summary> public long? UpdateUserId { get; set; } /// <summary> /// 修改者姓名 /// </summary> public string? UpdateUserName { get; set; } /// <summary> /// 创建者部门Id /// </summary> public long? CreateOrgId { get; set; } /// <summary> /// 创建者部门名称 /// </summary> public string? CreateOrgName { get; set; } /// <summary> /// 软删除 /// </summary> public bool IsDelete { get; set; } } Admin.NET/WCS.Application/Service/WcsStation/Dto/WcsStationOutput.cs
@@ -10,42 +10,85 @@ /// 主键Id /// </summary> public long Id { get; set; } /// <summary> /// 设备ID /// </summary> public long DeviceId { get; set; } public long DeviceId { get; set; } /// <summary> /// 设备ID 描述 /// </summary> public string? DeviceIdText { get; set; } public string? DeviceIdText { get; set; } /// <summary> /// 工位号 /// </summary> public string? StationNum { get; set; } /// <summary> /// 偏移量 /// </summary> public string? PlcPos { get; set; } /// <summary> /// 流程字类型 /// </summary> public PLCDataTypeEnum? PosType { get; set; } /// <summary> /// 显示屏ip地址 /// </summary> public string? LedIP { get; set; } /// <summary> /// 描述 /// </summary> public string? Text { get; set; } } /// <summary> /// 创建时间 /// </summary> public DateTime? CreateTime { get; set; } /// <summary> /// 更新时间 /// </summary> public DateTime? UpdateTime { get; set; } /// <summary> /// 创建者Id /// </summary> public long? CreateUserId { get; set; } /// <summary> /// 创建者姓名 /// </summary> public string? CreateUserName { get; set; } /// <summary> /// 修改者Id /// </summary> public long? UpdateUserId { get; set; } /// <summary> /// 修改者姓名 /// </summary> public string? UpdateUserName { get; set; } /// <summary> /// 创建者部门Id /// </summary> public long? CreateOrgId { get; set; } /// <summary> /// 创建者部门名称 /// </summary> public string? CreateOrgName { get; set; } /// <summary> /// 软删除 /// </summary> public bool IsDelete { get; set; } } Admin.NET/WCS.Application/Service/WcsTask/WcsTaskService.cs
@@ -1,11 +1,4 @@ // Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。 // // 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。 // // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! using Admin.NET.Core.Service; using Microsoft.AspNetCore.Http; namespace WCS.Application; /// <summary> Admin.NET/WCS.Application/Service/WcsTaskMonitor/WcsTaskMonitorService.cs
@@ -1,11 +1,4 @@ // Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。 // // 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。 // // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! using Admin.NET.Core.Service; using Microsoft.AspNetCore.Http; namespace WCS.Application; /// <summary> Admin.NET/WCS.Application/WCS.Application.csproj
@@ -123,9 +123,6 @@ <ItemGroup> <ProjectReference Include="..\Admin.NET.Core\Admin.NET.Core.csproj" /> <ProjectReference Include="..\Plugins\Admin.NET.Plugin.ApprovalFlow\Admin.NET.Plugin.ApprovalFlow.csproj" /> <ProjectReference Include="..\Plugins\Admin.NET.Plugin.DingTalk\Admin.NET.Plugin.DingTalk.csproj" /> <ProjectReference Include="..\Plugins\Admin.NET.Plugin.GoView\Admin.NET.Plugin.GoView.csproj" /> </ItemGroup> </Project> Web/.env.production
@@ -2,4 +2,4 @@ ENV = production # 线上环境接口地址 VITE_API_URL = VITE_API_URL = http://localhost:5005 Web/dist.rarBinary files differ
Web/src/views/login/index.vue
@@ -8,7 +8,7 @@ <span class="login-left-logo-text-msg">{{ getThemeConfig.globalViceTitleMsg }}</span> </div> </div> <el-carousel height="500px" class="login-carousel"> <!-- <el-carousel height="500px" class="login-carousel"> <el-carousel-item> <img :src="loginIconTwo" class="login-icon-group-icon" /> </el-carousel-item> @@ -18,7 +18,7 @@ <el-carousel-item> <img :src="loginIconTwo2" class="login-icon-group-icon" /> </el-carousel-item> </el-carousel> </el-carousel> --> </div> <div class="login-right flex"> <div class="login-right-warp flex-margin"> @@ -32,16 +32,16 @@ <el-tab-pane :label="$t('message.label.one1')" name="account"> <Account /> </el-tab-pane> <el-tab-pane :label="$t('message.label.two2')" name="mobile"> <!-- <el-tab-pane :label="$t('message.label.two2')" name="mobile"> <Mobile /> </el-tab-pane> </el-tab-pane> --> </el-tabs> </div> <Scan v-if="state.isScan" /> <div class="login-content-main-scan" @click="state.isScan = !state.isScan"> <!-- <div class="login-content-main-scan" @click="state.isScan = !state.isScan"> <i class="iconfont" :class="state.isScan ? 'icon-diannao1' : 'icon-barcode-qr'"></i> <div class="login-content-main-scan-delta"></div> </div> </div> --> </div> </div> </div> @@ -88,16 +88,21 @@ .login-container { height: 100%; background-color: rgba(53, 62, 84); .login-left { width: 50%; width: 20%; position: fixed; z-index: 100; height: 100%; float: left; // float: left; justify-content: center; .login-carousel { position: relative; top: 50%; transform: translateY(-50%); } .login-left-logo { display: flex; align-items: center; @@ -106,19 +111,23 @@ left: 30px; z-index: 1; animation: logoAnimation 0.3s ease; img { // width: 100px; height: 64px; } .login-left-logo-text { display: flex; flex-direction: column; span { margin-left: 20px; font-size: 28px; font-weight: 700; color: var(--el-color-white); } .login-left-logo-text-msg { padding-top: 5px; font-size: 14px; @@ -126,6 +135,7 @@ } } } .login-icon-group-icon { width: 85%; height: 85%; @@ -135,15 +145,19 @@ transform: translateY(-50%) translate3d(0, 0, 0); } } .login-right { width: 50%; float: right; width: 60%; // float: right; margin-left: auto; margin-right: auto; background: var(--el-color-white); background-image: url('../../assets/bg.svg'); background-size: 100% auto; background-position: 50% calc(50% - 15px); background-attachment: fixed; background-repeat: no-repeat; .login-right-warp { border: 1px solid var(--el-color-primary-light-3); border-radius: 3px; @@ -151,12 +165,14 @@ position: relative; overflow: hidden; background-color: var(--el-color-white); .login-right-warp-one, .login-right-warp-two { position: absolute; display: block; width: inherit; height: inherit; &::before, &::after { content: ''; @@ -164,6 +180,7 @@ z-index: 1; } } .login-right-warp-one { &::before { filter: hue-rotate(0deg); @@ -174,6 +191,7 @@ background: linear-gradient(90deg, transparent, var(--el-color-primary)); animation: loginLeft 3s linear infinite; } &::after { filter: hue-rotate(0deg); top: -100%; @@ -185,6 +203,7 @@ animation-delay: 0.7s; } } .login-right-warp-two { &::before { filter: hue-rotate(0deg); @@ -196,6 +215,7 @@ animation: loginRight 3s linear infinite; animation-delay: 1.4s; } &::after { filter: hue-rotate(0deg); bottom: -100%; @@ -207,10 +227,12 @@ animation-delay: 2.1s; } } .login-right-warp-main { display: flex; flex-direction: column; height: 100%; .login-right-warp-main-title { height: 130px; line-height: 130px; @@ -222,9 +244,11 @@ animation-delay: 0.3s; color: var(--el-color-primary); } .login-right-warp-main-form { flex: 1; padding: 0 50px 50px; .login-content-main-scan { position: absolute; top: 0; @@ -235,6 +259,7 @@ cursor: pointer; transition: all ease 0.3s; color: var(--el-color-primary); &-delta { position: absolute; width: 35px; @@ -245,11 +270,13 @@ background: var(--el-color-white); transform: rotate(-45deg); } &:hover { opacity: 1; transition: all ease 0.3s; color: var(--el-color-primary) !important; } i { width: 47px; height: 50px; @@ -263,6 +290,7 @@ } } } /* 在这里可以添加一个伪元素来覆盖原内容,实现磨砂效果 */ .login-right-warp::before { content: ''; @@ -272,17 +300,19 @@ width: 100%; height: 100%; background-color: rgba(255, 255, 255, 1); filter: blur(4px); /* 调整模糊半径以改变磨砂效果强度 */ filter: blur(4px); /* 调整模糊半径以改变磨砂效果强度 */ z-index: 1; } /* 保持原有内容可见,放置在伪元素下方 */ .login-right-warp > * { .login-right-warp>* { position: relative; z-index: 2; } } } .copyright, .icp { position: absolute; @@ -290,39 +320,48 @@ transform: translateX(-50%); white-space: nowrap; } @media screen and (min-width: 1200px) { .login-right-warp { width: 500px; } .copyright, .icp { left: 75%; color: var(--el-text-color-secondary); } .icp { .el-link { color: var(--el-text-color-secondary); } } } @media screen and (max-width: 1200px) { .copyright, .icp { left: 50%; color: var(--el-color-white); } .icp { .el-link { color: var(--el-color-white); } } } @media screen and (max-width: 580px) { .copyright, .icp { left: 50%; color: var(--el-text-color-secondary); } .icp { .el-link { color: var(--el-text-color-secondary); Web/stats.html
New file Diff too large