|  |  | 
 |  |  |     <script type="text/javascript" src="../static/js/common.js"></script> | 
 |  |  | </head> | 
 |  |  | <body> | 
 |  |  |     <div style="padding: 10px;height: 100%;float: left;width: 6%"> | 
 |  |  |         <div class="button-window"></div> | 
 |  |  |     </div> | 
 |  |  |     <div style="height: 100%;padding-left: 6%"> | 
 |  |  |         <div style="padding: 10px;height: 100%"> | 
 |  |  |             <!-- 日志监控板 --> | 
 |  |  |             <div class="log-board"> | 
 |  |  |                 <div class="command-log" id="commandLogId" style="width: 5%;"> | 
 |  |  | <!--                    <div data-shuttleNo="1" class="shuttle-command-item">--> | 
 |  |  | <!--                        <label>1#</label>--> | 
 |  |  | <!--                        <button class="demoBtn pos-btn">数据维护</button>--> | 
 |  |  | <!--                        <button id="mode-1" class="demoBtn mode-btn" >设备信息</button>--> | 
 |  |  | <!--                    </div>--> | 
 |  |  |                 </div> | 
 |  |  |                 <!-- 堆垛机状态位信息 --> | 
 |  |  |                 <div class="shuttle-state" style="width: 95%;"> | 
 |  |  |                     <table id="shuttle-state-table"> | 
 |  |  |                         <thead> | 
 |  |  |                             <tr> | 
 |  |  |                                 <th>四向穿梭车</th> | 
 |  |  |                                 <th>任务状态</th> | 
 |  |  |                                 <th>小车状态</th> | 
 |  |  |                                 <th>当前二维码</th> | 
 |  |  |                                 <th>电量</th> | 
 |  |  |                                 <th>电池温度</th> | 
 |  |  |                                 <th>错误编号</th> | 
 |  |  |                                 <th>plc输出状态IO-顶升位</th> | 
 |  |  |                                 <th>plc输出状态IO-换向位</th> | 
 |  |  |                                 <th>plc输出状态IO-抱闸位</th> | 
 |  |  |                                 <th>plc输出状态IO-充电位</th> | 
 |  |  |                                 <th>错误信息码</th> | 
 |  |  |                                 <th>plc输入状态</th> | 
 |  |  |                                 <th>当前或之前二维码</th> | 
 |  |  |                                 <th>x偏移量</th> | 
 |  |  |                                 <th>y偏移量</th> | 
 |  |  |                                 <th>电压</th> | 
 |  |  |                                 <th>模拟量</th> | 
 |  |  |                             </tr> | 
 |  |  |                         </thead> | 
 |  |  |                         <tbody> | 
 |  |  |                         </tbody> | 
 |  |  |                     </table> | 
 |  |  |                 </div> | 
 |  |  |             </div> | 
 |  |  |             <!-- 穿梭车状态 --> | 
 |  |  |             <div class="shuttle-msg"> | 
 |  |  |                 <table id="shuttle-msg-table"> | 
 |  |  | <div style="padding: 10px;height: 100%;float: left;width: 6%"> | 
 |  |  |     <div class="button-window"></div> | 
 |  |  | </div> | 
 |  |  | <div style="height: 100%;padding-left: 6%"> | 
 |  |  |     <div style="padding: 10px;height: 100%"> | 
 |  |  |         <!-- 日志监控板 --> | 
 |  |  |         <div class="log-board"> | 
 |  |  |             <!--                <div class="command-log" id="commandLogId" style="width: 5%;">--> | 
 |  |  |             <!--<!–                    <div data-shuttleNo="1" class="shuttle-command-item">–>--> | 
 |  |  |             <!--<!–                        <label>1#</label>–>--> | 
 |  |  |             <!--<!–                        <button class="demoBtn pos-btn">数据维护</button>–>--> | 
 |  |  |             <!--<!–                        <button id="mode-1" class="demoBtn mode-btn" >设备信息</button>–>--> | 
 |  |  |             <!--<!–                    </div>–>--> | 
 |  |  |             <!--                </div>--> | 
 |  |  |             <!-- 堆垛机状态位信息 --> | 
 |  |  |             <div class="shuttle-state" style="width: 100%;"> | 
 |  |  |                 <table id="shuttle-state-table"> | 
 |  |  |                     <thead> | 
 |  |  |                         <tr> | 
 |  |  |                             <th>四向穿梭车</th> | 
 |  |  |                             <th>工作号</th> | 
 |  |  |                             <th>状态</th> | 
 |  |  |                             <th>源库位</th> | 
 |  |  |                             <th>目标库位</th> | 
 |  |  |                             <th>升降伺服速度</th> | 
 |  |  |                             <th>行走伺服速度</th> | 
 |  |  |                             <th>升降伺服负载</th> | 
 |  |  |                             <th>行走伺服负载</th> | 
 |  |  |                             <th>作业标记</th> | 
 |  |  |                         </tr> | 
 |  |  |                     <tr> | 
 |  |  |                         <th>四向穿梭车</th> | 
 |  |  |                         <th>任务状态</th> | 
 |  |  |                         <th>小车状态</th> | 
 |  |  |                         <th>工作模式</th> | 
 |  |  |                         <th>实际库位</th> | 
 |  |  |                         <th>实际坐标</th> | 
 |  |  |                         <th>电量</th> | 
 |  |  |                         <th>当前速度</th> | 
 |  |  |                         <th>负载状态</th> | 
 |  |  |                         <th>顶升位置</th> | 
 |  |  |                         <th>运行方向</th> | 
 |  |  |                         <th>运行方向2</th> | 
 |  |  |                         <th>充电状态</th> | 
 |  |  |                         <th>故障状态</th> | 
 |  |  |                         <th>故障码</th> | 
 |  |  |                         <th>管制状态</th> | 
 |  |  |                         <th>低电量</th> | 
 |  |  |                     </tr> | 
 |  |  |                     </thead> | 
 |  |  |                     <tbody> | 
 |  |  |                     </tbody> | 
 |  |  |                 </table> | 
 |  |  |             </div> | 
 |  |  |             <!-- 手动操作 --> | 
 |  |  |             <div class="shuttle-operation"> | 
 |  |  |                 <!-- 遮罩层 --> | 
 |  |  |                 <div class="shuttle-operation-shade"> | 
 |  |  |         </div> | 
 |  |  |         <!-- 穿梭车状态 --> | 
 |  |  |         <div class="shuttle-msg"> | 
 |  |  |             <table id="shuttle-msg-table"> | 
 |  |  |                 <thead> | 
 |  |  |                 <tr> | 
 |  |  |                     <th>四向穿梭车</th> | 
 |  |  |                     <th>工作号</th> | 
 |  |  |                     <th>源库位</th> | 
 |  |  |                     <th>目标库位</th> | 
 |  |  |                     <th>最高电芯电压</th> | 
 |  |  |                     <th>最低电芯电压</th> | 
 |  |  |                     <th>电池电压</th> | 
 |  |  |                     <th>充放电循环次数</th> | 
 |  |  |                     <th>剩余电量</th> | 
 |  |  |                     <th>总电量</th> | 
 |  |  |                     <th>总里程数</th> | 
 |  |  |                     <th>作业标记</th> | 
 |  |  |                     <th>当前库位</th> | 
 |  |  |                     <th>令牌</th> | 
 |  |  |                 </tr> | 
 |  |  |                 </thead> | 
 |  |  |                 <tbody> | 
 |  |  |                 </tbody> | 
 |  |  |             </table> | 
 |  |  |         </div> | 
 |  |  |         <!-- 手动操作 --> | 
 |  |  |         <div class="shuttle-operation"> | 
 |  |  |             <!-- 遮罩层 --> | 
 |  |  |             <div class="shuttle-operation-shade"> | 
 |  |  |                     <span class="shuttle-operation-shade-span"> | 
 |  |  |                         WCS 系统运行中,请停止后操作 | 
 |  |  |                     </span> | 
 |  |  |                 </div> | 
 |  |  |                 <!-- 设备任务选择 --> | 
 |  |  |                 <div class="task-select"> | 
 |  |  |                     <!-- 选择 --> | 
 |  |  |                     <div id="shuttle-select" class="operator-item"> | 
 |  |  |                         <span class="select-title">四向穿梭车号</span> | 
 |  |  |                         <div class="select-container" id="shuttleRadioBoxId"> | 
 |  |  | <!--                            <label><input type="radio" name="shuttleSelect" value="1" checked> 1号穿梭车</label>--> | 
 |  |  |                         </div> | 
 |  |  |             </div> | 
 |  |  |             <!-- 设备任务选择 --> | 
 |  |  |             <div class="task-select"> | 
 |  |  |                 <!-- 选择 --> | 
 |  |  |                 <div id="shuttle-select" class="operator-item" style="width: 100%;"> | 
 |  |  |                     <span class="select-title">四向穿梭车号</span> | 
 |  |  |                     <div class="select-container" id="shuttleRadioBoxId" style="display: flex;flex-wrap: wrap;justify-content: center;align-items: center;"> | 
 |  |  |                         <!--                            <label><input type="radio" name="shuttleSelect" value="1" checked> 1号穿梭车</label>--> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |             </div> | 
 |  |  |  | 
 |  |  |                 <!-- 设备任务操作 --> | 
 |  |  |                 <div class="task-operator"> | 
 |  |  |             <!-- 设备任务操作 --> | 
 |  |  |             <div class="task-operator"> | 
 |  |  |                 <fieldset style="height: auto;padding-bottom: 20px;"> | 
 |  |  |                     <legend>手动操作</legend> | 
 |  |  |                     <div style="display: flex;"> | 
 |  |  |                         <div class="task-operator" style="height: auto;width: 100%;"> | 
 |  |  |                             <div class="operator-item" style="height: auto"> | 
 |  |  |                         <div style="width: 30%;"> | 
 |  |  |                             <div class="operator-item" style="height: auto;width: 100%;"> | 
 |  |  |                                 <span class="select-title">源库位/目标库位</span> | 
 |  |  |                                 <div class="select-container" style="height: auto"> | 
 |  |  |                                 <div class="select-container" style="height: auto;padding: 30px 10px 20px 10px;"> | 
 |  |  |                                     <div class="select-container-item"> | 
 |  |  |                                         <span>源库位</span> | 
 |  |  |                                         <label><input id="sourceLocNo" type="text" name="sourceLocNo" /></label> | 
 |  |  | 
 |  |  |                                         <span>目标库位</span> | 
 |  |  |                                         <label><input id="distLocNo" type="text" name="distLocNo" /></label> | 
 |  |  |                                     </div> | 
 |  |  |  | 
 |  |  |                                     <div style="margin-top: 10px;"> | 
 |  |  |                                         <button class="item" onclick="shuttleOperator(18)">搬运货物</button> | 
 |  |  |                                         <button class="item" onclick="shuttleOperator(14)">移动到目标库位</button> | 
 |  |  |                                         <button class="item" onclick="shuttleOperator(23)">移动到目标库位(任务)</button> | 
 |  |  |                                         <!--                                            <button class="item" onclick="shuttleOperator(16)">移动到提升机</button>--> | 
 |  |  |                                     </div> | 
 |  |  |                                 </div> | 
 |  |  |                             </div> | 
 |  |  |                         </div> | 
 |  |  |  | 
 |  |  |                         <div style="width: 40%;"> | 
 |  |  |                             <div class="operator-item" style="height: auto;width: 100%;"> | 
 |  |  |                                 <span class="select-title">相关指令</span> | 
 |  |  |                                 <div class="select-container" style="height: auto;padding: 30px 10px 10px 10px;"> | 
 |  |  |                                     <div class="button-group"> | 
 |  |  |                                         <button class="item" onclick="shuttleOperator(3)">托盘顶升</button> | 
 |  |  |                                         <button class="item" onclick="shuttleOperator(4)">托盘下降</button> | 
 |  |  |                                         <button class="item" onclick="shuttleOperator(15)">充电开关</button> | 
 |  |  |                                         <button class="item" onclick="shuttleOperator(9)">复位</button> | 
 |  |  |                                         <button class="item" onclick="shuttleOperator(21)">管制</button> | 
 |  |  |                                         <button class="item" onclick="shuttleOperator(22)">取消管制</button> | 
 |  |  |                                     </div> | 
 |  |  |                                 </div> | 
 |  |  |                             </div> | 
 |  |  |                         </div> | 
 |  |  |                     </div> | 
 |  |  |  | 
 |  |  |                     <fieldset style="height: auto;padding-bottom: 20px;"> | 
 |  |  |                         <legend>手动操作</legend> | 
 |  |  |                         <div class="button-group"> | 
 |  |  |                             <button class="item" onclick="shuttleOperator(1)">入库</button> | 
 |  |  |                             <button class="item" onclick="shuttleOperator(2)">出库</button> | 
 |  |  |                             <button class="item" onclick="shuttleOperator(3)">托盘顶升</button> | 
 |  |  |                             <button class="item" onclick="shuttleOperator(4)">托盘下降</button> | 
 |  |  |                             <button class="item" onclick="shuttleOperator(5)">左移</button> | 
 |  |  |                             <button class="item" onclick="shuttleOperator(6)">右移</button> | 
 |  |  |                             <button class="item" onclick="shuttleOperator(7)">后移</button> | 
 |  |  |                             <button class="item" onclick="shuttleOperator(8)">前移</button> | 
 |  |  |                             <button class="item" onclick="shuttleOperator(9)">复位</button> | 
 |  |  |                             <button class="item" onclick="shuttleOperator(10)">正方向(左)寻库位</button> | 
 |  |  |                             <button class="item" onclick="shuttleOperator(11)">负方向(右)寻库位</button> | 
 |  |  |                             <button class="item" onclick="shuttleOperator(12)">正方向(前)寻库位</button> | 
 |  |  |                             <button class="item" onclick="shuttleOperator(13)">负方向(后)寻库位</button> | 
 |  |  |                             <button class="item" onclick="shuttleOperator(14)">移动到目标库位</button> | 
 |  |  |                             <button class="item" onclick="shuttleOperator(15)">充电开关</button> | 
 |  |  |                         </div> | 
 |  |  |                     </fieldset> | 
 |  |  |                 </div> | 
 |  |  |  | 
 |  |  |                 </fieldset> | 
 |  |  |             </div> | 
 |  |  |             <!-- 穿梭车日志输出 --> | 
 |  |  |             <div class="shuttle-output-board"> | 
 |  |  |                 <textarea id="shuttle-output"></textarea> | 
 |  |  |             </div> | 
 |  |  |  | 
 |  |  |         </div> | 
 |  |  |         <!-- 穿梭车日志输出 --> | 
 |  |  |         <div class="shuttle-output-board"> | 
 |  |  |             <textarea id="shuttle-output"></textarea> | 
 |  |  |         </div> | 
 |  |  |     </div> | 
 |  |  | </div> | 
 |  |  |  | 
 |  |  |     <div id="shuttle-detl" style="display: none"> | 
 |  |  |         <div> | 
 |  |  |             <div class="form-item"> | 
 |  |  |                 <label class="form-label">四向穿梭车号:</label> | 
 |  |  |                 <div class="form-input"> | 
 |  |  |                     <input id="shuttleNo" name="shuttleNo" class="layui-input" lay-verify="required|number" autocomplete="off" disabled="disabled"> | 
 |  |  |                 </div> | 
 |  |  |             </div> | 
 |  |  |             <div class="form-item"> | 
 |  |  |                 <label class="form-label">工作号:</label> | 
 |  |  |                 <div class="form-input"> | 
 |  |  |                     <input id="workNo" name="workNo" type="number" class="layui-input" lay-verify="number" autocomplete="off"> | 
 |  |  |                 </div> | 
 |  |  |             </div> | 
 |  |  |             <div class="form-item"> | 
 |  |  |                 <label class="form-label">排:</label> | 
 |  |  |                 <div class="form-input"> | 
 |  |  |                     <input id="row" name="row" type="number" class="layui-input" lay-verify="number" autocomplete="off"> | 
 |  |  |                 </div> | 
 |  |  |             </div> | 
 |  |  |             <div class="form-item"> | 
 |  |  |                 <label class="form-label">列:</label> | 
 |  |  |                 <div class="form-input"> | 
 |  |  |                     <input id="bay" name="bay" type="number" class="layui-input" autocomplete="off"> | 
 |  |  |                 </div> | 
 |  |  |             </div> | 
 |  |  |             <div class="form-item"> | 
 |  |  |                 <label class="form-label">层:</label> | 
 |  |  |                 <div class="form-input"> | 
 |  |  |                     <input id="lev" name="lev" type="number" class="layui-input" autocomplete="off"> | 
 |  |  |                 </div> | 
 |  |  |             </div> | 
 |  |  |             <div class="form-item"> | 
 |  |  |                 <label class="form-label">作业标记:</label> | 
 |  |  |                 <div class="form-input"> | 
 |  |  |                     <input id="pakMk" name="pakMk" type="text" class="layui-input" autocomplete="off"> | 
 |  |  |                 </div> | 
 |  |  |             </div> | 
 |  |  |             <div class="form-item form-button-container"> | 
 |  |  |                 <button class="form-button" id="save">保存</button> | 
 |  |  |                 <button class="form-button" id="cancel" style="background-color: #D0D0D0">取消</button> | 
 |  |  | <div id="shuttle-detl" style="display: none"> | 
 |  |  |     <div> | 
 |  |  |         <div class="form-item"> | 
 |  |  |             <label class="form-label">穿梭车号:</label> | 
 |  |  |             <div class="form-input"> | 
 |  |  |                 <input id="shuttleNo" name="shuttleNo" class="layui-input" lay-verify="required|number" autocomplete="off" disabled="disabled"> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |     </div> | 
 |  |  |     <div id="shuttle-detl2" style="display: none"> | 
 |  |  |         <div style="width: 1400px"> | 
 |  |  |             <div class="form-item" style="text-align: left"> | 
 |  |  |                 <spen style="margin:  20px 10px 10px 10px; padding: 10px 10px 10px 10px;border: black;border-width: 3px;border-style:dotted;"> | 
 |  |  |                     异常:<spen style="color: #FD482C;">✔</spen> | 
 |  |  |                 </spen> | 
 |  |  |                 <spen style="margin:  20px 10px 10px 10px; padding: 10px 10px 10px 10px;border: black;border-width: 3px;border-style: double;"> | 
 |  |  |                     正常:<spen style="color: #00FF00;">—</spen> | 
 |  |  |                 </spen> | 
 |  |  |             </div> | 
 |  |  |             <div style="float:left;margin:  10px 10px 10px 10px; padding: 10px 10px 10px 10px;border: black;border-width: 3px;border-style:dotted;"> | 
 |  |  |                 <div class="form-item" style="text-align: center"> | 
 |  |  |                     <label>四向穿梭车异常</label> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="form-item"> | 
 |  |  |                     <label class="form-label">四向穿梭车号:</label> | 
 |  |  |                     <div class="form-input"> | 
 |  |  |                         <input id="shuttleNo1" name="shuttleNo" class="layui-input" lay-verify="required|number" autocomplete="off" disabled="disabled" readonly> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |  | 
 |  |  |             </div> | 
 |  |  |             <div style="float:left;margin:  10px 10px 10px 10px; padding: 10px 10px 10px 10px;border: black;border-width: 3px;border-style:dotted"> | 
 |  |  |                 <div class="form-item" style="text-align: center"> | 
 |  |  |                     <label>四向穿梭车提示信息</label> | 
 |  |  |                 </div> | 
 |  |  |  | 
 |  |  |             </div> | 
 |  |  |             <div style="float:left;margin:  10px 10px 10px 10px; padding: 10px 10px 10px 10px;border: black;border-width: 3px;border-style:dotted"> | 
 |  |  |                 <div class="form-item" style="text-align: center"> | 
 |  |  |                     <label>任务信息</label> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="form-item"> | 
 |  |  |                     <label class="form-label">入库任务中:</label> | 
 |  |  |                     <div class="form-input"> | 
 |  |  |                         <input id="pakInTask" name="pakInTask" class="layui-input" autocomplete="off" readonly> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="form-item"> | 
 |  |  |                     <label class="form-label">出库任务中:</label> | 
 |  |  |                     <div class="form-input"> | 
 |  |  |                         <input id="pakOutTask" name="pakOutTask" class="layui-input" autocomplete="off" readonly> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="form-item"> | 
 |  |  |                     <label class="form-label">移库任务中:</label> | 
 |  |  |                     <div class="form-input"> | 
 |  |  |                         <input id="pakMoveTask" name="pakMoveTask" class="layui-input" autocomplete="off" readonly> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="form-item"> | 
 |  |  |                     <label class="form-label">回原点任务中:</label> | 
 |  |  |                     <div class="form-input"> | 
 |  |  |                         <input id="goHpTask" name="goHpTask" class="layui-input" autocomplete="off" readonly> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="form-item"> | 
 |  |  |                     <label class="form-label">去反原点任务中:</label> | 
 |  |  |                     <div class="form-input"> | 
 |  |  |                         <input id="goOHpTask" name="goOHpTask" class="layui-input" autocomplete="off" readonly> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="form-item"> | 
 |  |  |                     <label class="form-label">去原点避让位:</label> | 
 |  |  |                     <div class="form-input"> | 
 |  |  |                         <input id="goHpAvoid" name="goHpAvoid" class="layui-input" autocomplete="off" readonly> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="form-item"> | 
 |  |  |                     <label class="form-label">去反原点避让位:</label> | 
 |  |  |                     <div class="form-input"> | 
 |  |  |                         <input id="goOHpAvoid" name="goOHpAvoid" class="layui-input" autocomplete="off" readonly> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="form-item"> | 
 |  |  |                     <label class="form-label">入库取空结束:</label> | 
 |  |  |                     <div class="form-input"> | 
 |  |  |                         <input id="pakInEmpty" name="pakInEmpty" class="layui-input" autocomplete="off" readonly> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="form-item"> | 
 |  |  |                     <label class="form-label">入库正常结束:</label> | 
 |  |  |                     <div class="form-input"> | 
 |  |  |                         <input id="pakInFinish" name="pakInFinish" class="layui-input" autocomplete="off" readonly> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="form-item"> | 
 |  |  |                     <label class="form-label">出库取空结束:</label> | 
 |  |  |                     <div class="form-input"> | 
 |  |  |                         <input id="pakOutEmpty" name="pakOutEmpty" class="layui-input" autocomplete="off" readonly> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="form-item"> | 
 |  |  |                     <label class="form-label">出库正常结束:</label> | 
 |  |  |                     <div class="form-input"> | 
 |  |  |                         <input id="pakOutFinish" name="pakOutFinish" class="layui-input" autocomplete="off" readonly> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="form-item"> | 
 |  |  |                     <label class="form-label">去原点避让完成:</label> | 
 |  |  |                     <div class="form-input"> | 
 |  |  |                         <input id="goHpAvoidFinish" name="goHpAvoidFinish" class="layui-input" autocomplete="off" readonly> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="form-item"> | 
 |  |  |                     <label class="form-label">去反原点避让完成:</label> | 
 |  |  |                     <div class="form-input"> | 
 |  |  |                         <input id="goOHpAvoidFinish" name="goOHpAvoidFinish" class="layui-input" autocomplete="off" readonly> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="form-item"> | 
 |  |  |                     <label class="form-label">去原点避让完成:</label> | 
 |  |  |                     <div class="form-input"> | 
 |  |  |                         <input id="goHpAvoidErr" name="goHpAvoidErr" class="layui-input" autocomplete="off" readonly> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="form-item"> | 
 |  |  |                     <label class="form-label">去反原点避让完成:</label> | 
 |  |  |                     <div class="form-input"> | 
 |  |  |                         <input id="goOHpAvoidErr" name="goOHpAvoidErr" class="layui-input" autocomplete="off" readonly> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |             </div> | 
 |  |  |             <div style="float:left;margin:  10px 10px 10px 10px; padding: 10px 10px 10px 10px;border: black;border-width: 3px;border-style:dotted"> | 
 |  |  |                 <div class="form-item" style="text-align: center"> | 
 |  |  |                     <label>状态信息</label> | 
 |  |  |                 </div> | 
 |  |  | <!--                <div class="form-item">--> | 
 |  |  | <!--                    <label class="form-label">联机模式:</label>--> | 
 |  |  | <!--                    <div class="form-input">--> | 
 |  |  | <!--                        <input id="autoMode" name="autoMode" class="layui-input" autocomplete="off" readonly>--> | 
 |  |  | <!--                    </div>--> | 
 |  |  | <!--                </div>--> | 
 |  |  | <!--                <div class="form-item">--> | 
 |  |  | <!--                    <label class="form-label">电压过低:</label>--> | 
 |  |  | <!--                    <div class="form-input">--> | 
 |  |  | <!--                        <input id="voltageLow" name="voltageLow" class="layui-input" autocomplete="off" readonly>--> | 
 |  |  | <!--                    </div>--> | 
 |  |  | <!--                </div>--> | 
 |  |  |         <div class="form-item"> | 
 |  |  |             <label class="form-label">工作号:</label> | 
 |  |  |             <div class="form-input"> | 
 |  |  |                 <input id="workNo" name="workNo" type="number" class="layui-input" lay-verify="number" autocomplete="off"> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |         <div class="form-item"> | 
 |  |  |             <label class="form-label">作业标记:</label> | 
 |  |  |             <div class="form-input"> | 
 |  |  |                 <input id="pakMk" name="pakMk" type="text" class="layui-input" autocomplete="off"> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |         <div class="form-item"> | 
 |  |  |             <label class="form-label">令牌:</label> | 
 |  |  |             <div class="form-input"> | 
 |  |  |                 <input id="token" name="token" type="text" class="layui-input" autocomplete="off"> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |         <div class="form-item form-button-container"> | 
 |  |  |             <button class="form-button" id="save">保存</button> | 
 |  |  |             <button class="form-button" id="cancel" style="background-color: #D0D0D0">取消</button> | 
 |  |  |         </div> | 
 |  |  |     </div> | 
 |  |  | </div> | 
 |  |  | </body> | 
 |  |  | </html> | 
 |  |  | <script> | 
 |  |  | 
 |  |  |     var shuttleMsgTableFullRows = 0; | 
 |  |  |     // 初始化 | 
 |  |  |     var shuttleOutputDom = document.getElementById("shuttle-output"); | 
 |  |  |  | 
 |  |  |     var ws = new WebSocket("ws://" + window.location.host + baseUrl + "/shuttle/websocket"); | 
 |  |  |  | 
 |  |  |     //当WebSocket创建成功时,触发onopen事件 | 
 |  |  |     ws.onopen = function(){ | 
 |  |  |         console.log("open"); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     //当客户端收到服务端发来的消息时,触发onmessage事件 | 
 |  |  |     ws.onmessage = function(e){ | 
 |  |  |         const result = JSON.parse(e.data); | 
 |  |  |         if (result.url == "/shuttle/table/shuttle/state") { | 
 |  |  |             setShuttleStateInfo(JSON.parse(result.data)) | 
 |  |  |             setShuttleMsgInfo(JSON.parse(result.data)) | 
 |  |  |         }else if (result.url == "/shuttle/output/shuttle") { | 
 |  |  |             setShuttleOutput(JSON.parse(result.data)) | 
 |  |  |         } | 
 |  |  |         // console.log(e.data,result); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     //当客户端收到服务端发送的关闭连接请求时,触发onclose事件 | 
 |  |  |     ws.onclose = function(e){ | 
 |  |  |         console.log("close"); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     //如果出现连接、处理、接收、发送数据失败的时候触发onerror事件 | 
 |  |  |     ws.onerror = function(e) { | 
 |  |  |         console.log(e); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     $(document).ready(function() { | 
 |  |  |         initShuttleStateTable(); | 
 |  |  |         getShuttleStateInfo(); | 
 |  |  |         initShuttleMsgTable(); | 
 |  |  |         getShuttleMsgInfo(); | 
 |  |  |         operatorBlockShow(); | 
 |  |  |         setShuttleRadio(); | 
 |  |  |     }); | 
 |  |  |  | 
 |  |  |     setInterval(function () { | 
 |  |  |         getShuttleStateInfo() | 
 |  |  |         getShuttleMsgInfo(); | 
 |  |  |         getShuttleStateInfo(); | 
 |  |  |     },1000) | 
 |  |  |     setInterval(function () { | 
 |  |  |         getShuttleOutput(); | 
 |  |  | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     var layerIdx; | 
 |  |  |     $(document).on('click ','.pos-btn', function () { | 
 |  |  |         let shuttleNo = Number($(this).parent().attr("data-shuttleNo")); | 
 |  |  |         layerIdx = layer.open({ | 
 |  |  |             type: 1, | 
 |  |  |             title: false, | 
 |  |  |             shadeClose: true, | 
 |  |  |             offset: [$(this).offset().top + 30 + 'px', $(this).offset().left + 'px'], | 
 |  |  |             anim: 5, | 
 |  |  |             shade: [0], | 
 |  |  |             area: ['310px', '370px'], | 
 |  |  |             closeBtn: 0, | 
 |  |  |             content: $("#shuttle-detl"), | 
 |  |  |             success: function(layero, index){ | 
 |  |  |                 http.get(baseUrl+ "/shuttle/detl/"+shuttleNo, null, function (res) { | 
 |  |  |                     $('#shuttleNo').val(shuttleNo); | 
 |  |  |                     $('#workNo').val(res.data.workNo); | 
 |  |  |                     $('#row').val(res.data.row); | 
 |  |  |                     $('#bay').val(res.data.bay); | 
 |  |  |                     $('#lev').val(res.data.lev); | 
 |  |  |                     $('#crnNo').val(res.data.crnNo); | 
 |  |  |                     $('#pakMk').val(res.data.pakMk); | 
 |  |  |                 }) | 
 |  |  |             }, | 
 |  |  |             end: function () { | 
 |  |  |                 $('#shuttleNo').val(""); | 
 |  |  |                 $('#workNo').val(""); | 
 |  |  |                 $('#row').val(""); | 
 |  |  |                 $('#bay').val(""); | 
 |  |  |                 $('#lev').val(""); | 
 |  |  |                 $('#crnNo').val(""); | 
 |  |  |                 $('#pakMk').val(""); | 
 |  |  |             } | 
 |  |  |         }) | 
 |  |  |     }) | 
 |  |  |  | 
 |  |  |     var layerIdx0; | 
 |  |  |     $(document).on('click ','.mode-btn', function () { | 
 |  |  |         let shuttleNo = Number($(this).parent().attr("data-shuttleNo")); | 
 |  |  |         layerIdx0 = layer.open({ | 
 |  |  |             type: 1, | 
 |  |  |             title: false, | 
 |  |  |             shadeClose: true, | 
 |  |  |             offset: [$(this).offset().top + 30 + 'px', $(this).offset().left + 'px'], | 
 |  |  |             anim: 5, | 
 |  |  |             shade: [0], | 
 |  |  |             area: ['70%', '85%'], | 
 |  |  |             closeBtn: 0, | 
 |  |  |             content: $("#shuttle-detl2"), | 
 |  |  |             success: function(layero, index){ | 
 |  |  |                 console.log(shuttleNo) | 
 |  |  |                 http.get(baseUrl+ "/shuttle/sensor/detl/"+shuttleNo, null, function (res) { | 
 |  |  |                     $('#shuttleNo1').val(res.data.shuttleNo); | 
 |  |  |                     // getColor(res.data.liftErr,'#liftErr'); | 
 |  |  |                     // getColor(res.data.inFetchErr,'#inFetchErr'); | 
 |  |  |                     // getColor(res.data.outFetchErr,'#outFetchErr'); | 
 |  |  |                     // getColor(res.data.antiErr,'#antiErr'); | 
 |  |  |                     // getColor(res.data.liftSwitchErr,'#liftSwitchErr'); | 
 |  |  |                     // getColor(res.data.trackErr,'#trackErr'); | 
 |  |  |                     // getColor(res.data.timeoutErr,'#timeoutErr'); | 
 |  |  |                     // getColor(res.data.connectErr,'#connectErr'); | 
 |  |  |                     // getColor(res.data.emergencyErr,'#emergencyErr'); | 
 |  |  |                     // getColor(res.data.taskTypeErr,'#taskTypeErr'); | 
 |  |  |                     // getColor(res.data.taskNoErr,'#taskNoErr'); | 
 |  |  |                     // getColor(res.data.newTaskErr,'#newTaskErr'); | 
 |  |  |                     // getColor(res.data.errTaskErr,'#errTaskErr'); | 
 |  |  |                     // getColor(res.data.stopErr,'#stopErr'); | 
 |  |  |                     // getColor(res.data.offlineTaskErr,'#offlineTaskErr'); | 
 |  |  |                     // getColor(res.data.startTaskErr,'#startTaskErr'); | 
 |  |  |                     // getColor(res.data.voltageTaskErr,'#voltageTaskErr'); | 
 |  |  |                     // getColor(res.data.devpErr,'#devpErr'); | 
 |  |  |                     // getColor(res.data.online,'#online'); | 
 |  |  |                     // getColor(res.data.notOnTrack,'#notOnTrack'); | 
 |  |  |                     // getColor(res.data.lowVoltage,'#lowVoltage'); | 
 |  |  |                     // getColor(res.data.electricityLoss,'#electricityLoss'); | 
 |  |  |                     // getColor(res.data.forcedTravel,'#forcedTravel'); | 
 |  |  |                     // getColor(res.data.demoMode,'#demoMode'); | 
 |  |  |                     // getColor(res.data.brushConnect,'#brushConnect'); | 
 |  |  |                     // getColor(res.data.taskManualForbid,'#taskManualForbid'); | 
 |  |  |                     // getColor(res.data.onlineManualForbid,'#onlineManualForbid'); | 
 |  |  |                     // getColor(res.data.devpEmergency,'#devpEmergency'); | 
 |  |  |                     // getColor(res.data.taskInterrupt,'#taskInterrupt'); | 
 |  |  |                     // getColor(res.data.taskClear,'#taskClear'); | 
 |  |  |                     // getColor(res.data.taskConfirmTimeout,'#taskConfirmTimeout'); | 
 |  |  |                     // getColor(res.data.taskWithCharge,'#taskWithCharge'); | 
 |  |  |                     getColor(res.data.pakInTask,'#pakInTask'); | 
 |  |  |                     getColor(res.data.pakOutTask,'#pakOutTask'); | 
 |  |  |                     getColor(res.data.pakMoveTask,'#pakMoveTask'); | 
 |  |  |                     getColor(res.data.goHpTask,'#goHpTask'); | 
 |  |  |                     getColor(res.data.goOHpTask,'#goOHpTask'); | 
 |  |  |                     getColor(res.data.goHpAvoid,'#goHpAvoid'); | 
 |  |  |                     getColor(res.data.goOHpAvoid,'#goOHpAvoid'); | 
 |  |  |                     getColor(res.data.pakInEmpty,'#pakInEmpty'); | 
 |  |  |                     getColor(res.data.pakInFinish,'#pakInFinish'); | 
 |  |  |                     getColor(res.data.pakOutEmpty,'#pakOutEmpty'); | 
 |  |  |                     getColor(res.data.pakOutFinish,'#pakOutFinish'); | 
 |  |  |                     getColor(res.data.goHpAvoidFinish,'#goHpAvoidFinish'); | 
 |  |  |                     getColor(res.data.goOHpAvoidFinish,'#goOHpAvoidFinish'); | 
 |  |  |                     getColor(res.data.goHpAvoidErr,'#goHpAvoidErr'); | 
 |  |  |                     getColor(res.data.goOHpAvoidErr,'#goOHpAvoidErr'); | 
 |  |  |                     // getColor(res.data.autoMode,'#autoMode'); | 
 |  |  |                     // getColor(res.data.voltageLow,'#voltageLow'); | 
 |  |  |                 }) | 
 |  |  |             }, | 
 |  |  |             end: function () { | 
 |  |  |                 $('#shuttleNo').val(""); | 
 |  |  |             } | 
 |  |  |         }) | 
 |  |  |     }) | 
 |  |  |  | 
 |  |  |     function getColor(res,e){ | 
 |  |  |         $(e).val(res?"✔":"—"); | 
 |  |  |         if (res){ | 
 |  |  | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // $(document).on('click ','.mode-btn', function () { | 
 |  |  |     //     let shuttleNo = Number($(this).parent().attr("data-shuttleNo")); | 
 |  |  |     //     layer.confirm("改变" + shuttleNo + ' 号穿梭车在线状态吗?', function(){ | 
 |  |  |     //         var index = layer.load(1, { | 
 |  |  |     //             shade: [0.1,'#fff'] | 
 |  |  |     //         }); | 
 |  |  |     //         $.ajax({ | 
 |  |  |     //             url: baseUrl+ "/shuttle/mode/switch", | 
 |  |  |     //             headers: {'token': localStorage.getItem('token')}, | 
 |  |  |     //             data: { | 
 |  |  |     //                 shuttleNo: Number(shuttleNo), | 
 |  |  |     //                 password: 'root' | 
 |  |  |     //             }, | 
 |  |  |     //             method: 'POST', | 
 |  |  |     //             success: function (res) { | 
 |  |  |     //                 layer.close(index); | 
 |  |  |     //                 if (res.code === 200){ | 
 |  |  |     //                     layer.msg(res.msg, {icon: 1}); | 
 |  |  |     //                 } else if (res.code === 403){ | 
 |  |  |     //                     window.location.href = baseUrl+"/login"; | 
 |  |  |     //                 }  else { | 
 |  |  |     //                     layer.msg(res.msg, {icon: 2}); | 
 |  |  |     //                 } | 
 |  |  |     //             } | 
 |  |  |     //         }); | 
 |  |  |     //     }); | 
 |  |  |     // }) | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     $(document).on('click ','#save', function () { | 
 |  |  |         http.post(baseUrl+ "/shuttle/detl/update", { | 
 |  |  |             shuttleNo: $('#shuttleNo').val(), | 
 |  |  |             workNo: $('#workNo').val(), | 
 |  |  |             row:  $('#row').val(), | 
 |  |  |             bay: $('#bay').val(), | 
 |  |  |             lev:  $('#lev').val(), | 
 |  |  |             crnNo: $('#crnNo').val(), | 
 |  |  |             pakMk: $('#pakMk').val(), | 
 |  |  |             token: $('#token').val(), | 
 |  |  |         }, function (res) { | 
 |  |  |             layer.msg("修改成功", {icon: 1,}); | 
 |  |  |             layer.close(layerIdx); | 
 |  |  |             layer.close(layerDetl); | 
 |  |  |         }) | 
 |  |  |     }) | 
 |  |  |  | 
 |  |  |     $(document).on('click ','#cancel', function () { | 
 |  |  |         layer.close(layerIdx); | 
 |  |  |     }) | 
 |  |  |  | 
 |  |  |     function setShuttleRadio() { | 
 |  |  | 
 |  |  |  | 
 |  |  |     // 四向穿梭车信息表获取 ---- 表一 | 
 |  |  |     function getShuttleStateInfo() { | 
 |  |  |         sendWs(JSON.stringify({ | 
 |  |  |             "url": "/shuttle/table/shuttle/state", | 
 |  |  |             "data": {} | 
 |  |  |         })) | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // 四向穿梭车信息表设置 ---- 表一 | 
 |  |  |     function setShuttleStateInfo(res) { | 
 |  |  |         let tableEl = $('#shuttle-state-table'); | 
 |  |  |         $.ajax({ | 
 |  |  |             url: baseUrl+ "/shuttle/table/shuttle/state", | 
 |  |  |             headers: {'token': localStorage.getItem('token')}, | 
 |  |  |             method: 'POST', | 
 |  |  |             success: function (res) { | 
 |  |  |                 if (res.code === 200){ | 
 |  |  |                     let table = res.data; | 
 |  |  |                     if (table.length > shuttleStateTableBlankRows && table.length !== shuttleStateTableFullRows) { | 
 |  |  |                         initShuttleStateTable(table.length-shuttleStateTableBlankRows); | 
 |  |  |                         shuttleStateTableFullRows = table.length; | 
 |  |  |                     } | 
 |  |  |                     for (let i=1;i<=table.length;i++){ | 
 |  |  |                         // $("#mode-"+table[i-1].shuttleNo).html(table[i-1].statusVal===0?'联机':'脱机'); | 
 |  |  |                         let tr = tableEl.find("tr").eq(i); | 
 |  |  |                         setVal(tr.children("td").eq(0), table[i-1].shuttleNo); | 
 |  |  |                         setVal(tr.children("td").eq(1), table[i-1].status); | 
 |  |  |                         setVal(tr.children("td").eq(2), table[i-1].busyStatus); | 
 |  |  |                         setVal(tr.children("td").eq(3), table[i-1].currentCode); | 
 |  |  |                         setVal(tr.children("td").eq(4), table[i-1].batteryPower); | 
 |  |  |                         setVal(tr.children("td").eq(5), table[i-1].batteryTemp); | 
 |  |  |                         setVal(tr.children("td").eq(6), table[i-1].errorCode); | 
 |  |  |                         setVal(tr.children("td").eq(7), table[i-1].plcOutputLift$);//顶升位 | 
 |  |  |                         setVal(tr.children("td").eq(8), table[i-1].plcOutputTransfer$);//换向位 | 
 |  |  |                         setVal(tr.children("td").eq(9), table[i-1].plcOutputBrake$);//抱闸位 | 
 |  |  |                         setVal(tr.children("td").eq(10), table[i-1].plcOutputCharge$);//充电位 | 
 |  |  |                         setVal(tr.children("td").eq(11), table[i-1].statusErrorCode); | 
 |  |  |                         setVal(tr.children("td").eq(12), table[i-1].plcInputStatus); | 
 |  |  |                         setVal(tr.children("td").eq(13), table[i-1].currentOrBeforeCode); | 
 |  |  |                         setVal(tr.children("td").eq(14), table[i-1].codeOffsetX); | 
 |  |  |                         setVal(tr.children("td").eq(15), table[i-1].codeOffsetY); | 
 |  |  |                         setVal(tr.children("td").eq(16), table[i-1].currentVoltage); | 
 |  |  |                         setVal(tr.children("td").eq(17), table[i-1].currentAnalogValue); | 
 |  |  |                     } | 
 |  |  |                 } else if (res.code === 403){ | 
 |  |  |                     window.location.href = baseUrl+"/login"; | 
 |  |  |                 }  else { | 
 |  |  |                     console.log(res.msg); | 
 |  |  |                 } | 
 |  |  |         if (res.code === 200){ | 
 |  |  |             let table = res.data; | 
 |  |  |             if (table.length > shuttleStateTableBlankRows && table.length !== shuttleStateTableFullRows) { | 
 |  |  |                 initShuttleStateTable(table.length-shuttleStateTableBlankRows); | 
 |  |  |                 shuttleStateTableFullRows = table.length; | 
 |  |  |             } | 
 |  |  |         }); | 
 |  |  |             for (let i=1;i<=table.length;i++){ | 
 |  |  |                 // $("#mode-"+table[i-1].shuttleNo).html(table[i-1].statusVal===0?'联机':'脱机'); | 
 |  |  |                 let tr = tableEl.find("tr").eq(i); | 
 |  |  |                 setVal(tr.children("td").eq(0), table[i-1].shuttleNo); | 
 |  |  |                 setVal(tr.children("td").eq(1), table[i-1].protocolStatus$); | 
 |  |  |                 setVal(tr.children("td").eq(2), table[i-1].free$); | 
 |  |  |                 setVal(tr.children("td").eq(3), table[i-1].workingMode$); | 
 |  |  |                 setVal(tr.children("td").eq(4), table[i-1].point$); | 
 |  |  |                 setVal(tr.children("td").eq(5), table[i-1].point$$); | 
 |  |  |                 setVal(tr.children("td").eq(6), table[i-1].powerPercent$); | 
 |  |  |                 setVal(tr.children("td").eq(7), table[i-1].speed); | 
 |  |  |                 setVal(tr.children("td").eq(8), table[i-1].loadState$); | 
 |  |  |                 setVal(tr.children("td").eq(9), table[i-1].liftPosition$); | 
 |  |  |                 setVal(tr.children("td").eq(10), table[i-1].runDir$); | 
 |  |  |                 setVal(tr.children("td").eq(11), table[i-1].runDir2$); | 
 |  |  |                 setVal(tr.children("td").eq(12), table[i-1].chargState$); | 
 |  |  |                 setVal(tr.children("td").eq(13), table[i-1].errState$); | 
 |  |  |                 setVal(tr.children("td").eq(14), table[i-1].errCode$); | 
 |  |  |                 setVal(tr.children("td").eq(15), table[i-1].suspendState$); | 
 |  |  |                 setVal(tr.children("td").eq(16), table[i-1].lowerPower); | 
 |  |  |             } | 
 |  |  |         } else if (res.code === 403){ | 
 |  |  |             window.location.href = baseUrl+"/login"; | 
 |  |  |         }  else { | 
 |  |  |             console.log(res.msg); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // 四向穿梭车数据表获取 ---- 表二 | 
 |  |  |     function getShuttleMsgInfo() { | 
 |  |  |     function setShuttleMsgInfo(res) { | 
 |  |  |         let tableEl = $('#shuttle-msg-table'); | 
 |  |  |         $.ajax({ | 
 |  |  |             url: baseUrl+ "/shuttle/table/shuttle/msg", | 
 |  |  |             headers: {'token': localStorage.getItem('token')}, | 
 |  |  |             method: 'POST', | 
 |  |  |             success: function (res) { | 
 |  |  |                 if (res.code === 200){ | 
 |  |  |                     var table = res.data; | 
 |  |  |                     if (table.length > shuttleMsgTableBlankRows && table.length !== shuttleMsgTableFullRows) { | 
 |  |  |                         initShuttleMsgTable(table.length-shuttleMsgTableBlankRows); | 
 |  |  |                         shuttleMsgTableFullRows = table.length; | 
 |  |  |                     } | 
 |  |  |                     for (var i=1;i<=table.length;i++){ | 
 |  |  |                         var tr = tableEl.find("tr").eq(i); | 
 |  |  |                         setVal(tr.children("td").eq(0), table[i-1].shuttleNo); | 
 |  |  |                         setVal(tr.children("td").eq(1), table[i-1].workNo); | 
 |  |  |                         setVal(tr.children("td").eq(2), table[i-1].status); | 
 |  |  |                         setVal(tr.children("td").eq(3), table[i-1].sourceLocNo); | 
 |  |  |                         setVal(tr.children("td").eq(4), table[i-1].distLocNo); | 
 |  |  |                         setVal(tr.children("td").eq(5), table[i-1].currentLiftServoSpeed); | 
 |  |  |                         setVal(tr.children("td").eq(6), table[i-1].currentMoveServoSpeed); | 
 |  |  |                         setVal(tr.children("td").eq(7), table[i-1].currentLiftServoLoad); | 
 |  |  |                         setVal(tr.children("td").eq(8), table[i-1].currentMoveServoLoad); | 
 |  |  |                         setVal(tr.children("td").eq(9), table[i-1].pakMk); | 
 |  |  |                     } | 
 |  |  |                 } else if (res.code === 403){ | 
 |  |  |                     window.location.href = baseUrl+"/login"; | 
 |  |  |                 }  else { | 
 |  |  |                     console.log(res.msg); | 
 |  |  |         if (res.code === 200){ | 
 |  |  |             var table = res.data; | 
 |  |  |             if (table.length > shuttleMsgTableBlankRows && table.length !== shuttleMsgTableFullRows) { | 
 |  |  |                 initShuttleMsgTable(table.length-shuttleMsgTableBlankRows); | 
 |  |  |                 shuttleMsgTableFullRows = table.length; | 
 |  |  |             } | 
 |  |  |             for (var i=1;i<=table.length;i++){ | 
 |  |  |                 var tr = tableEl.find("tr").eq(i); | 
 |  |  |                 setVal(tr.children("td").eq(0), table[i-1].shuttleNo); | 
 |  |  |                 setVal(tr.children("td").eq(1), table[i-1].taskNo); | 
 |  |  |                 setVal(tr.children("td").eq(2), table[i-1].sourceLocNo); | 
 |  |  |                 setVal(tr.children("td").eq(3), table[i-1].locNo); | 
 |  |  |                 setVal(tr.children("td").eq(4), table[i-1].maxCellVoltage$); | 
 |  |  |                 setVal(tr.children("td").eq(5), table[i-1].minCellVoltage$); | 
 |  |  |                 setVal(tr.children("td").eq(6), table[i-1].voltage$); | 
 |  |  |                 setVal(tr.children("td").eq(7), table[i-1].chargeCycleTimes); | 
 |  |  |                 setVal(tr.children("td").eq(8), table[i-1].surplusQuantity); | 
 |  |  |                 setVal(tr.children("td").eq(9), table[i-1].countQuantity); | 
 |  |  |                 setVal(tr.children("td").eq(10), table[i-1].statusSum ? table[i - 1].statusSum.mileage : ''); | 
 |  |  |                 setVal(tr.children("td").eq(11), table[i-1].pakMk$); | 
 |  |  |                 setVal(tr.children("td").eq(12), table[i-1].currentLocNo); | 
 |  |  |                 setVal(tr.children("td").eq(13), table[i-1].token); | 
 |  |  |                 if (table[i-1].shuttleNo == parseInt($('input[name="shuttleSelect"]:checked').val())) { | 
 |  |  |                     $("#runSpeedText").text(table[i-1].runSpeed) | 
 |  |  |                     $("#chargeLineText").text(table[i-1].chargeLine + "%") | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         }); | 
 |  |  |         } else if (res.code === 403){ | 
 |  |  |             window.location.href = baseUrl+"/login"; | 
 |  |  |         }  else { | 
 |  |  |             console.log(res.msg); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // 穿梭车日志输出 ----------------------------------------------------------------------- | 
 |  |  |     function getShuttleOutput() { | 
 |  |  |         $.ajax({ | 
 |  |  |             url: baseUrl + "/shuttle/output/shuttle", | 
 |  |  |             headers: {'token': localStorage.getItem('token')}, | 
 |  |  |             method: 'POST', | 
 |  |  |             success: function (res) { | 
 |  |  |                 if (res.code === 200) { | 
 |  |  |                     shuttleOutput(res.data); | 
 |  |  |                 } else if (res.code === 403) { | 
 |  |  |                     window.location.href = baseUrl + "/login"; | 
 |  |  |                 } else { | 
 |  |  |                     console.log(res.msg); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         }) | 
 |  |  |         sendWs(JSON.stringify({ | 
 |  |  |             "url": "/shuttle/output/shuttle", | 
 |  |  |             "data": {} | 
 |  |  |         })) | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     function setShuttleOutput(res) { | 
 |  |  |         if (res.code === 200) { | 
 |  |  |             shuttleOutput(res.data); | 
 |  |  |         } else if (res.code === 403) { | 
 |  |  |             window.location.href = baseUrl + "/login"; | 
 |  |  |         } else { | 
 |  |  |             console.log(res.msg); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // 任务指令下发 | 
 |  |  | 
 |  |  |         }, function (res) { | 
 |  |  |             layer.msg(res.msg, {icon: 1}); | 
 |  |  |         }); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // 跑库 | 
 |  |  |     function moveLoc() { | 
 |  |  |         $.ajax({ | 
 |  |  |             url: baseUrl + "/shuttle/moveLoc", | 
 |  |  |             headers: {'token': localStorage.getItem('token')}, | 
 |  |  |             method: 'POST', | 
 |  |  |             data: { | 
 |  |  |                 shuttleNo: $('input[name="shuttleSelect"]:checked').val(), | 
 |  |  |                 xStart: $("#xStart").val(), | 
 |  |  |                 xTarget: $("#xTarget").val(), | 
 |  |  |                 yStart: $("#yStart").val(), | 
 |  |  |                 yTarget: $("#yTarget").val(), | 
 |  |  |                 moveType: $('input[name="moveType"]:checked').val() | 
 |  |  |             }, | 
 |  |  |             success: function (res) { | 
 |  |  |                 if (res.code === 200) { | 
 |  |  |                     layer.msg(res.msg, {icon: 1}); | 
 |  |  |                 } else if (res.code === 403) { | 
 |  |  |                     window.location.href = baseUrl + "/login"; | 
 |  |  |                 } else { | 
 |  |  |                     console.log(res.msg); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         }) | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  | 
 |  |  |         shuttleOutputDom.scrollTop = shuttleOutputDom.scrollHeight; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     //四向穿梭车配置参数保存 | 
 |  |  |     function shuttleParamSave() { | 
 |  |  |         $.ajax({ | 
 |  |  |             url: baseUrl+ "/shuttle/runSpeed/" + $('input[name="shuttleSelect"]:checked').val(), | 
 |  |  |             headers: {'token': localStorage.getItem('token')}, | 
 |  |  |             method: 'POST', | 
 |  |  |             data: { | 
 |  |  |                 runSpeed: $("#runSpeed").val(), | 
 |  |  |                 chargeLine: $("#chargeLine").val(), | 
 |  |  |             }, | 
 |  |  |             success: function (res) { | 
 |  |  |                 if (res.code === 200){ | 
 |  |  |                     layer.msg("配置已保存", {icon: 1,}); | 
 |  |  |                 } else if (res.code === 403){ | 
 |  |  |                     window.location.href = baseUrl+"/login"; | 
 |  |  |                 }  else { | 
 |  |  |                     console.log(res.msg); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         }); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // 详情操作 ------------------------------------------------------------------------- | 
 |  |  |     var layerDetl; | 
 |  |  |     $(document).on('dblclick ','#shuttle-msg-table tr', function () { | 
 |  |  |         var shuttleNo = $(this).children("td").eq(0).html(); | 
 |  |  |         if (shuttleNo !== null && shuttleNo !== "") { | 
 |  |  |             layerDetl = layer.open({ | 
 |  |  |                 type: 1, | 
 |  |  |                 title: false, | 
 |  |  |                 shadeClose: true, | 
 |  |  |                 offset: 'rt', | 
 |  |  |                 anim: 5, | 
 |  |  |                 shade: [0], | 
 |  |  |                 area: ['340px', '255px'], | 
 |  |  |                 closeBtn: 0, | 
 |  |  |                 content: $("#shuttle-detl"), | 
 |  |  |                 success: function(layero, index){ | 
 |  |  |                     $.ajax({ | 
 |  |  |                         url: baseUrl+ "/shuttle/table/shuttle/state", | 
 |  |  |                         headers: {'token': localStorage.getItem('token')}, | 
 |  |  |                         method: 'POST', | 
 |  |  |                         success: function (res) { | 
 |  |  |                             if (res.code === 200){ | 
 |  |  |                                 var table = res.data; | 
 |  |  |                                 for (var i=1;i<=table.length;i++){ | 
 |  |  |                                     if (shuttleNo == table[i-1].shuttleNo) { | 
 |  |  |                                         $('#shuttleNo').val(shuttleNo); | 
 |  |  |                                         $('#workNo').val(table[i-1].taskNo); | 
 |  |  |                                         $('#pakMk').val(table[i-1].pakMk$); | 
 |  |  |                                         $('#token').val(table[i-1].token); | 
 |  |  |                                     } | 
 |  |  |                                 } | 
 |  |  |                             } else if (res.code === 403){ | 
 |  |  |                                 window.location.href = baseUrl+"/login"; | 
 |  |  |                             }  else { | 
 |  |  |                                 console.log(res.msg); | 
 |  |  |                             } | 
 |  |  |                         } | 
 |  |  |                     }); | 
 |  |  |                 }, | 
 |  |  |                 end: function () { | 
 |  |  |                     $('#shuttleNo').val(""); | 
 |  |  |                     $('#workNo').val(""); | 
 |  |  |                     $('#pakMk').val(""); | 
 |  |  |                     $('#token').val(""); | 
 |  |  |                 } | 
 |  |  |             }) | 
 |  |  |         } | 
 |  |  |     }); | 
 |  |  |  | 
 |  |  |     $(document).on('click ','#cancel', function () { | 
 |  |  |         $('#shuttleNo').val(""); | 
 |  |  |         $('#workNo').val(""); | 
 |  |  |         $('#pakMk').val(""); | 
 |  |  |         $('#token').val(""); | 
 |  |  |         layer.close(layerDetl); | 
 |  |  |     }) | 
 |  |  |  | 
 |  |  |     function sendWs(message) { | 
 |  |  |         if (ws.readyState == WebSocket.OPEN) { | 
 |  |  |             ws.send(message) | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | </script> |