hwh
2024-09-02 3609a43ca4d7842a839524dee1baaf4f84bc4801
绑定首页服务状态
4个文件已修改
201 ■■■■■ 已修改文件
Admin.NET/WCS.Application/Hub/IPlcHub.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/WCS.Application/Hub/PlcHub.cs 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/WCS.Application/Service/WcsDevice/WcsDeviceService.cs 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Web/src/views/device/deviceInfo/index.vue 150 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/WCS.Application/Hub/IPlcHub.cs
@@ -28,5 +28,10 @@
        /// <param name="context"></param>
        /// <returns></returns>
        Task PublicAlarm(WcsAlarmInfoOutput context);
        /// <summary>
        /// 修改服务状态
        /// </summary>
        /// <param name="context"></param>
        Task UpdateService(PLCServiceModel context);
    }
}
Admin.NET/WCS.Application/Hub/PlcHub.cs
@@ -34,4 +34,31 @@
    //{
    //    await _plcHubContext.Clients.All.PublicStationStatus(context);
    //}
    /// <summary>
    /// 下发服务状态
    /// </summary>
    public async Task UpdateService(PLCServiceModel context)
    {
        //运行状态
        if (context.BoRunningState.HasValue)
            PLCTaskAction.boRunningState = context.BoRunningState.Value;
        //脱机模式
        if (context.BoOffline.HasValue)
            PLCTaskAction.boOffline = context.BoOffline.Value;
        //自刷新
        if (context.BoRefresh.HasValue)
            PLCTaskAction.boRefresh = context.BoRefresh.Value;
        await _plcHubContext.Clients.All.UpdateService(context);
    }
}
public class PLCServiceModel
{
    public bool? BoRunningState { get; set; }
    public bool? BoOffline { get; set; }
    public bool? BoRefresh { get; set; }
}
Admin.NET/WCS.Application/Service/WcsDevice/WcsDeviceService.cs
@@ -1,4 +1,6 @@

using Admin.NET.Core.Service;
namespace WCS.Application;
/// <summary>
@@ -8,9 +10,11 @@
public class WcsDeviceService : IDynamicApiController, ITransient
{
    private readonly SqlSugarRepository<WcsDevice> _wcsDeviceRep;
    public WcsDeviceService(SqlSugarRepository<WcsDevice> wcsDeviceRep)
    private readonly SysCacheService _sysCacheService;
    public WcsDeviceService(SqlSugarRepository<WcsDevice> wcsDeviceRep, SysCacheService sysCacheService)
    {
        _wcsDeviceRep = wcsDeviceRep;
        _sysCacheService = sysCacheService;
    }
    /// <summary>
@@ -202,13 +206,18 @@
                                    .Select<WcsDeviceOutput>((a, b) => new WcsDeviceOutput() { Type = b.Type }, true)
                                    .ToListAsync();
        //获取跺机的状态
        var listConn = PLCTaskAction.listPlcConn;
        foreach (var modDevice in list)
        {
            var modUtil = listConn.FirstOrDefault(s => s != null && s.PlcId == modDevice.PlcId);
            modDevice.Status = modUtil == null ? false : modUtil.Connected;
            if (_sysCacheService.ExistKey("PlcConn" + modDevice.PlcId))
            {
                var cachePlc = _sysCacheService.Get<WcsPlc>("PlcConn" + modDevice.PlcId);
                modDevice.Status = cachePlc.IsConn;
            }
            else
            {
                modDevice.Status = false;
            }
        }
        return list;
    }
Web/src/views/device/deviceInfo/index.vue
@@ -5,27 +5,32 @@
                <el-collapse v-model="activeName">
                    <el-collapse-item title="设备控制" name="1">
                        <el-card class="box-card" shadow="hover">
                            <el-switch v-model="state.boRunningState" active-text="" inactive-text="程序服务"></el-switch>
                            <el-switch v-model="state.boRunningState" active-text="" inactive-text="程序服务"
                                @change="handleSwitchChange('boRunningState', $event)"></el-switch>
                        </el-card>
                        <el-card class="box-card" shadow="hover" style="margin-top: 3px;">
                            <el-switch v-model="state.boOffline" active-text="" inactive-text="脱机模式"></el-switch>
                            <el-switch v-model="state.boOffline" active-text="" inactive-text="脱机模式"
                                @change="handleSwitchChange('boOffline', $event)"></el-switch>
                        </el-card>
                        <el-card class="box-card" shadow="hover" style="margin-top: 3px;">
                            <el-switch v-model="state.boRefresh" active-text="" inactive-text="自刷新"></el-switch>
                            <el-switch v-model="state.boRefresh" active-text="" inactive-text="自刷新"
                                @change="handleSwitchChange('boRefresh', $event)"></el-switch>
                        </el-card>
                    </el-collapse-item>
                    <el-collapse-item title="堆垛机" name="2">
                        <div style="overflow-x: auto;white-space: nowrap;">
                            <el-card v-for="(stacker, index) in stackers" :key="index" class="box-card" shadow="hover">
                                <el-switch v-model="stacker.isConn" :inactive-text="`${stacker.text}`" disabled ></el-switch>
                                <el-switch v-model="stacker.isConn" :inactive-text="`${stacker.text}`"
                                    disabled></el-switch>
                            </el-card>
                        </div>
                    </el-collapse-item>
                    <el-collapse-item title="输送线" name="3">
                        <el-card v-for="(conveyor, index) in conveyors" :key="index" class="box-card" shadow="hover">
                            <el-switch v-model="conveyor.isConn" :inactive-text="`${conveyor.text}`" disabled ></el-switch>
                            <el-switch v-model="conveyor.isConn" :inactive-text="`${conveyor.text}`"
                                disabled></el-switch>
                        </el-card>
                    </el-collapse-item>
                </el-collapse>
@@ -65,7 +70,7 @@
</template>
<script lang="ts" setup>
import { ref, reactive,onMounted } from 'vue';
import { ref, reactive, onMounted } from 'vue';
import { listStatus } from '/@/api/wcs/wcsPlc';
import { signalR } from './signalR';
@@ -101,7 +106,15 @@
        }
        console.log(stackers.value[0].isConn)
    });
    signalR.off('UpdateService');
    signalR.on('UpdateService', (data: any) => {
        state.value = data;
    });
});
const handleSwitchChange = (field: string, value: boolean) => {
    signalR.invoke('UpdateService',state.value);
};
const activeName = ['1', '2', '3'];
const value1 = ref(false);
@@ -1599,56 +1612,56 @@
    { Id: 202, Code: '', IsShow: 0, IsUse: 2 },
    { Id: 203, Code: '', IsShow: 1, IsUse: 0 },
    { Id: 204, Code: '', IsShow: 0, IsUse: 2 },
    { Id:205 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:206 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:207 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:208 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:209 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:210 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:211 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:212 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:213 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:214 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:215 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:216 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:217 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:218 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:219 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:220 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:221 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:222 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:223 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:224 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:225 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:226 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:227 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:228 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:229 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:230 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:231 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:232 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:233 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:234 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:235 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:236 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:237 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:238 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:239 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:240 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:241 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:242 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:243 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:244 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:245 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:246 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:247 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:248 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:249 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:250 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:251 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:252 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:253 , Code: '', IsShow: 0, IsUse: 3 },
    { Id:254 , Code: '', IsShow: 0, IsUse: 3 },
    { Id: 205, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 206, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 207, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 208, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 209, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 210, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 211, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 212, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 213, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 214, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 215, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 216, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 217, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 218, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 219, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 220, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 221, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 222, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 223, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 224, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 225, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 226, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 227, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 228, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 229, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 230, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 231, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 232, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 233, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 234, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 235, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 236, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 237, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 238, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 239, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 240, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 241, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 242, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 243, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 244, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 245, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 246, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 247, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 248, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 249, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 250, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 251, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 252, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 253, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 254, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 255, Code: '', IsShow: 0, IsUse: 3 },
    { Id: 256, Code: '', IsShow: 1, IsUse: 0 },
    { Id: 257, Code: '', IsShow: 1, IsUse: 0 },
@@ -1971,12 +1984,16 @@
.grid-container-line {
    display: grid;
    grid-template-columns: repeat(51, 1fr); /* 自适应列宽 */
    grid-template-rows: 1fr; /* 自适应行高 */
    grid-template-columns: repeat(51, 1fr);
    /* 自适应列宽 */
    grid-template-rows: 1fr;
    /* 自适应行高 */
    gap: 0;
    margin-top: 25px;
    width: 100%; /* 宽度自适应 */
    height: 1fr; /* 高度自适应 */
    width: 100%;
    /* 宽度自适应 */
    height: 1fr;
    /* 高度自适应 */
}
.grid-item-line {
@@ -2053,9 +2070,12 @@
    background-color: #9c9c9c;
    border: 1px solid #797777;
    text-align: center;
    line-height: 1.4vw; /* 行高 */
    width: 100%; /* 自适应宽度 */
    height: 100%; /* 自适应高度 */
    line-height: 1.4vw;
    /* 行高 */
    width: 100%;
    /* 自适应宽度 */
    height: 100%;
    /* 自适应高度 */
    color: #fff;
    font-size: 0.7vw;
}
@@ -2069,10 +2089,12 @@
.active2>div {
    display: none;
}
.active3 {
    background-color: #fff;
    border:1px solid red;
    border: 1px solid red;
}
.active3>div {
    display: none;
}