From 06eb604f71605c47f015b88b1620b72b6f69df8c Mon Sep 17 00:00:00 2001
From: helongyang <647556386@qq.com>
Date: 星期一, 22 九月 2025 05:20:41 +0800
Subject: [PATCH] 功能增加,代码优化

---
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/测试架仓/GroundStationJob_CSJ.cs            |   18 
 代码管理/WMS/WIDESEA_WMSClient/src/extension/stock/stockInfo.js                         |   20 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs              |    6 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/APIEnum/APIEnum.cs                        |    6 
 代码管理/WCS/WIDESEAWCS_Client/src/views/deviceMonitoring/TestFrameWarehouse.vue        |  411 ++++++++
 代码管理/WMS/WIDESEA_WMSClient/src/extension/taskinfo/task.js                           |    2 
 代码管理/WMS/WIDESEA_WMSClient/src/extension/stock/stockInfoDetail.js                   |   20 
 代码管理/WMS/WIDESEA_WMSClient/src/views/stock/stockInfoDetail.vue                      |   18 
 代码管理/WCS/WIDESEAWCS_Client/src/views/deviceMonitoring/BoardWarehouse.vue            |  360 ++++++
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs                 |    2 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Reloaction.cs        |   12 
 代码管理/WMS/WIDESEA_WMSClient/src/views/inbound/inboundOrderDetail.vue                 |   20 
 代码管理/WMS/WIDESEA_WMSClient/src/views/outbound/outboundOrder.vue                     |    7 
 代码管理/WMS/WIDESEA_WMSClient/src/views/inbound/inboundOrder.vue                       |    9 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs                 |    2 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs                |   23 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/测试架仓/CSJReadData.cs                     |  108 ++
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Completed.cs         |   33 
 代码管理/WMS/WIDESEA_WMSClient/src/extension/outbound/outboundOrderDetail.js            |   20 
 代码管理/WMS/WIDESEA_WMSClient/src/views/stock/stockInfo.vue                            |   54 +
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/板材仓/BCReadData.cs                       |   41 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs                   |  246 +++++
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs |    6 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/板材仓/StackerCraneJob_BC.cs               |   16 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs     |    8 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/测试架仓/StackerCraneJob_CSJ.cs             |   15 
 代码管理/WMS/WIDESEA_WMSClient/src/views/outbound/outboundOrderDetail.vue               |  148 ++-
 代码管理/WCS/WIDESEAWCS_Client/src/views/Home.vue                                       |    5 
 代码管理/WCS/WIDESEAWCS_Client/src/views/Login.vue                                      | 1182 +++++++-----------------
 29 files changed, 1,833 insertions(+), 985 deletions(-)

diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/Home.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/Home.vue"
index 41ecf97..f851270 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/Home.vue"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/Home.vue"
@@ -39,13 +39,12 @@
   setup() {
     // 瀹氫箟浠撳簱鍒楄〃
     const warehouses = [
-      { name: '鏉挎潗浠�', component: BoardWarehouse },
-      { name: '娴嬭瘯鏋朵粨', component: TestFrameWarehouse },
       { name: '闃荤剨浠�', component: SolderMaskWarehouse },
       { name: 'PP浠�', component: PpWarehouse },
+      { name: '鏉挎潗浠�', component: BoardWarehouse },
+      { name: '娴嬭瘯鏋朵粨', component: TestFrameWarehouse },
       { name: '娌瑰ⅷ浠�', component: InkWarehouse },
       { name: '杈呮枡浠�', component: AuxiliaryWarehouse },
-      { name: '鎴愬搧浠�', component: BoardWarehouse },
       { name: '骞茶啘浠�', component: DryFilmWarehouse},
     ];
 
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/Login.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/Login.vue"
index 78a3fb9..81243fa 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/Login.vue"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/Login.vue"
@@ -1,864 +1,408 @@
 <template>
-  <div id="vol-container" :class="['vol-theme-' + theme]">
-    <div class="vol-aside" :style="{ width: menuWidth + 'px' }">
-      <div class="header" :style="{ width: menuWidth - 1 + 'px' }">
-        <img v-show="!isCollapse" v-bind:src="logo" />
-        <i
-          @click="toggleLeft"
-          class="collapse-menu"
-          :class="isCollapse ? 'el-icon-s-unfold' : 'el-icon-s-fold'"
-        />
-      </div>
-      <div class="vol-menu">
-        <el-scrollbar style="height: 100%">
-          <VolMenu
-            :currentMenuId="currentMenuId"
-            :on-select="onSelect"
-            :enable="true"
-            :open-select="false"
-            :isCollapse="isCollapse"
-            :list="menuOptions"
-          ></VolMenu>
-        </el-scrollbar>
-      </div>
-    </div>
-    <div class="vol-container" :style="{ left: menuWidth - 1 + 'px' }">
-      <div class="vol-header">
-        <div class="project-name">WMS</div>
-        <div class="header-text">
-          <div class="h-link">
-            <a
-              href="javascript:void(0)"
-              @click="to(item)"
-              v-for="(item, index) in links.filter((c) => {
-                return !c.icon;
-              })"
-              :key="index"
-            >
-              <span v-if="!item.icon">{{ item.text }}</span>
-              <i v-else :class="item.icon"></i>
-            </a>
-          </div>
-        </div>
-        <div class="header-info">
-          <div class="h-link">
-            <a
-              href="javascript:void(0)"
-              @click="to(item)"
-              v-for="(item, index) in links.filter((c) => {
-                return c.icon;
-              })"
-              :key="index"
-            >
-              <span v-if="!item.icon">{{ item.text }}</span>
-              <i v-else :class="item.icon"></i>
-            </a>
-          </div>
-          <!--娑堟伅绠$悊-->
-          <div class="h-link" @click="messageModel = true">
-            <a>
-              <i class="el-icon-message-solid">
-                <el-badge
-                  :value="messageList.length"
-                  :type="messageList.length > 0 ? 'danger' : 'success'"
-                  class="item"
-                  style="width: 10px"
-                ></el-badge>
-              </i>
-            </a>
-          </div>
+  <div class="login-container">
+    <div class="project-name">WIDESEA_WMS</div>
+    <div class="login-form">
+      <div class="form-user" @keypress="loginPress">
+        <div class="login-text">
           <div>
-            <img class="user-header" :src="userImg" :onerror="errorImg" />
+            <div>娆㈣繋鐧诲綍...</div>
+            <div class="login-line"></div>
           </div>
-          <div class="user">
-            <span>{{ userName }}</span>
-            <span id="index-date"></span>
-          </div>
-          <div class="settings">
-            <i style="font-size: 20px" class="el-icon-s-tools" @click="drawer_model = true" />
-          </div>
+          <div style="flex: 1"></div>
         </div>
-      </div>
-      <div class="vol-path">
-        <el-tabs
-          @tab-click="selectNav"
-          @tab-remove="removeNav"
-          @contextmenu.prevent="bindRightClickMenu(false)"
-          type="border-card"
-          class="header-navigation"
-          v-model="selectId"
-          :strtch="false"
-        >
-          <el-tab-pane
-            v-for="(item, navIndex) in navigation"
-            type="card"
-            :name="navIndex + ''"
-            :closable="navIndex > 0"
-            :key="navIndex"
-            :label="item.name"
-          >
-            <span style="display: none">{{ navIndex }}</span>
-          </el-tab-pane>
-        </el-tabs>
-        <!-- 鍙抽敭鑿滃崟 -->
-        <div v-show="contextMenuVisible">
-          <ul :style="{ left: menuLeft + 'px', top: menuTop + 'px' }" class="contextMenu">
-            <li v-show="visibleItem.all">
-              <el-button link @click="closeTabs()">
-                <i class="el-icon-close"></i>
-                {{
-                navigation.length == 2 ? "鍏抽棴鑿滃崟" : "鍏抽棴鎵�鏈�"
-                }}
-              </el-button>
-            </li>
-            <li v-show="visibleItem.left">
-              <el-button link @click="closeTabs('left')">
-                <i class="el-icon-back"></i>鍏抽棴宸﹁竟
-              </el-button>
-            </li>
-            <li v-show="visibleItem.right">
-              <el-button link @click="closeTabs('right')">
-                <i class="el-icon-right"></i>鍏抽棴鍙宠竟
-              </el-button>
-            </li>
-            <li v-show="visibleItem.other">
-              <el-button link @click="closeTabs('other')">
-                <i class="el-icon-right"></i>鍏抽棴鍏朵粬
-              </el-button>
-            </li>
-          </ul>
+        <div class="login-text-small">WELCOME TO LOGIN</div>
+        <div class="item">
+          <div class="input-icon el-icon-user"></div>
+          <input
+            type="text"
+            v-focus
+            v-model="userInfo.userName"
+            placeholder="璇疯緭鍏ヨ处鍙�"
+          />
         </div>
-      </div>
-      <div class="vol-main" id="vol-main">
-        <el-scrollbar style="height: 100%" v-if="permissionInited">
-          <loading v-show="$store.getters.isLoading()"></loading>
-          <router-view v-slot="{ Component }">
-            <keep-alive>
-              <component
-                :is="Component"
-                :key="$route.name"
-                v-if="
-                  !$route.meta ||
-                  ($route.meta && !$route.meta.hasOwnProperty('keepAlive'))
-                "
-              />
-            </keep-alive>
-            <component
-              :is="Component"
-              :key="$route.name"
-              v-if="$route.meta && $route.meta.hasOwnProperty('keepAlive')"
-            />
-          </router-view>
-        </el-scrollbar>
-      </div>
-    </div>
-    <el-drawer title="閫夋嫨涓婚" v-model="drawer_model" direction="rtl" destroy-on-close>
-      <div class="theme-selector">
-        <div
-          @click="changeTheme(item.name)"
-          class="item"
-          v-for="(item, index) in theme_color"
-          :key="index"
-          :style="{ background: item.color }"
-        >
-          <div
-            v-show="item.leftColor"
-            :style="{ background: item.leftColor }"
-            style="height: 100%; width: 20px"
-            class="t-left"
-          ></div>
-          <div class="t-right"></div>
+        <div class="item">
+          <div class="input-icon el-icon-lock"></div>
+          <input
+            type="password"
+            v-focus
+            v-model="userInfo.password"
+            placeholder="璇疯緭鍏ュ瘑鐮�"
+          />
         </div>
-      </div>
-    </el-drawer>
+        <div class="item">
+          <div class="input-icon el-icon-mobile"></div>
 
-    <el-drawer title="娑堟伅鍒楄〃" v-model="messageModel" direction="rtl" destroy-on-close size="40%">
-      <Message :list="messageList"></Message>
-    </el-drawer>
+          <input
+            v-focus
+            type="text"
+            v-model="userInfo.verificationCode"
+            placeholder="杈撳叆楠岃瘉鐮�"
+          />
+          <div class="code" @click="getVierificationCode">
+            <img v-show="codeImgSrc != ''" :src="codeImgSrc" />
+          </div>
+        </div>
+      </div>
+      <div class="loging-btn">
+        <el-button
+          size="large"
+          :loading="loading"
+          color="#3a6cd1"
+          :dark="true"
+          @click="login"
+          long
+        >
+          <span v-if="!loading">鐧诲綍</span>
+          <span v-else>姝e湪鐧诲綍...</span>
+        </el-button>
+      </div>
+
+      <!-- 璐﹀彿淇℃伅 -->
+      <!-- <div class="account-info">
+        <p>婕旂ず璐﹀彿锛歛dmin666 &nbsp; &nbsp;瀵嗙爜:123456</p>
+        <p>鏈湴璐﹀彿锛歛dmin &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;瀵嗙爜:123456</p>
+        <p><a href="https://jq.qq.com/?_wv=1027&k=Sqstuy0M" style="text-decoration: none"
+            target="_blank">QQ3缇�:743852316</a>
+          &nbsp; &nbsp;&nbsp; &nbsp;
+          <a href="http://v2.volcore.xyz/document/guide" style="text-decoration: none" target="_blank">妗嗘灦鏂囨。</a>
+        </p>
+      </div> -->
+      <!-- 閾炬帴浣嶇疆 -->
+      <!-- <div class="app-link" >
+        <a href="#" style="text-decoration: none">绉诲姩绔壂鐮�</a>
+        <a>
+          <i class="el-icon-chat-dot-round"></i> 灏忕▼搴�
+          <img src="https://app-1256993465.cos.ap-nanjing.myqcloud.com/wechat.jpg" /></a>
+        <a>
+          <i class="el-icon-apple"></i>
+          Android
+          <img src="https://app-1256993465.cos.ap-nanjing.myqcloud.com/Android.png" /></a>
+        <a>
+          <i class="el-icon-document"></i>
+          H5
+          <img src="https://app-1256993465.cos.ap-nanjing.myqcloud.com/H5.png" /></a>
+      </div> -->
+    </div>
+
+    <!-- 椤甸潰搴曢儴 -->
+    <!-- <div class="login-footer">
+      <a style="text-decoration: none" href="https://beian.miit.gov.cn/" target="_blank">浜琁CP澶�19056538鍙�-1</a>
+
+
+      <a href="https://dotnet9.com/" style="text-decoration: none" target="blank">Dotnet9</a>
+      <a href="https://space.bilibili.com/525836469" style="text-decoration: none" target="blank">NET瑙嗛鏁欑▼(寰蒋MVP-ACE褰曞埗)</a>
+      <a href="https://www.cctalk.com/m/group/90268531" style="text-decoration: none" target="blank">VOL妗嗘灦瑙嗛</a>
+      <a href="http://120.48.115.252:9990" style="text-decoration: none" target="blank">瑙嗛婕旂ず鍦板潃</a>
+    </div> -->
+
+    <img class="login-bg" src="/static/login_bg.png" />
   </div>
 </template>
-<style lang="less" scoped>
-@import "./index/index.less";
-</style>
-<script>
-import loading from "@/components/basic/RouterLoading";
-import VolMenu from "@/components/basic/VolElementMenu.vue";
-import Message from "./index/Message.vue";
-import MessageConfig from "./index/MessageConfig.js";
-var imgUrl = require("@/assets/imgs/wms_x.png");
-var $this;
-var $interval;
-var $indexDate;
+
+
+<script >
 import {
   defineComponent,
-  reactive,
   ref,
-  watch,
-  onMounted,
+  reactive,
+  toRefs,
   getCurrentInstance,
-  h
 } from "vue";
 import { useRouter, useRoute } from "vue-router";
 import store from "../store/index";
 import http from "@/../src/api/http.js";
-import { ElNotification } from "element-plus";
-import { useStore } from "vuex";
-
 export default defineComponent({
-  components: {
-    VolMenu,
-    loading,
-    Message
-  },
-
-  data() {
-    return {
-      allTabs: true,
-      leftTabs: true,
-      rightTabs: true,
-      otherTabs: true,
-      menuLeft: 0,
-      menuTop: 0
-    };
-  },
   setup(props, context) {
-    let client = ref(null);
-    // 鑺傛祦鐩稿叧鍙橀噺锛堝欢杩熸椂闂村缓璁�300-500ms锛屾牴鎹悗绔帹閫侀鐜囪皟鏁达級
-    const THROTTLE_DELAY = 300; // 寤惰繜鏇存柊鏃堕棿锛堟绉掞級
-    let lastUpdateTime = ref(0); // 涓婁竴娆℃洿鏂版椂闂�
-    let latestWsData = ref(null); // 缂撳瓨鏈�鏂扮殑WebSocket鏁版嵁
-    let throttleTimer = ref(null); // 鑺傛祦瀹氭椂鍣�
-
-    // 鑾峰彇鍏ㄥ眬灞炴�у拰鏂规硶
-    const { proxy } = getCurrentInstance();
-
-    // 鑿滃崟瀵艰埅榛樿瀹藉害
-    const menuWidth = ref(200);
-    const contextMenuVisible = ref(false);
-    const isCollapse = ref(false);
-    const drawer_model = ref(false);
-    const messageModel = ref(false);
-    const theme_color = ref([
-      { name: "blue", color: "rgb(45, 140, 240)" },
-      { name: "blue2", color: "rgb(45, 140, 240)", leftColor: "#0068d6" },
-      { name: "red", color: "rgb(237, 64, 20)" },
-      { name: "red2", color: "rgb(237, 64, 20)", leftColor: "#a90000" },
-      { name: "dark", color: "#272929" },
-      { name: "orange", color: "#ff9900" },
-      { name: "orange2", color: "#ff9900", leftColor: "rgb(232 141 5)" },
-      { name: "green", color: "rgb(25, 190, 107)" },
-      { name: "green2", color: "rgb(25, 190, 107)", leftColor: "#019e4f" },
-      { name: "white", color: "#fff" }
-    ]);
-    const links = ref([
-      { text: "涓汉涓績", path: "/UserInfo", id: -1, icon: "el-icon-s-custom" },
-      {
-        text: "瀹夊叏閫�鍑�",
-        path: "/login",
-        id: -4,
-        icon: "el-icon-switch-button"
-      }
-    ]);
-    const errorImg = ref(
-      'this.src="' + require("@/assets/imgs/error-img.png") + '"'
-    );
-    const selectId = ref("1");
-    // 銆愰椤点�戞爣绛惧簭鍙�(褰撳墠鍙抽敭閫変腑鐨勮彍鍗�)
-    const selectMenuIndex = ref("0");
-    //2022.05.29澧炲姞tab閫夐」涓庤彍鍗曡仈鍔ㄥ姛鑳�
-    const currentMenuId = ref(0);
-    const userName = ref("--");
-    const userTrueName = ref("--");
-    const userInfo = ref({});
-    const visibleItem = reactive({
-      left: false,
-      right: false,
-      all: false,
-      other: false
+    store.commit("clearUserInfo", "");
+    const loading = ref(false);
+    const codeImgSrc = ref("");
+    const userInfo = reactive({
+      userName: "",
+      password: "",
+      verificationCode: "",
+      UUID: undefined,
     });
-    const userImg = ref("");
-    const navigation = reactive([
-      { orderNo: "0", id: "1", name: "棣栭〉", path: "/home" }
-    ]);
-    const logo = ref(imgUrl);
-    const theme = ref("blue2");
-    const menuOptions = ref([]);
-    const permissionInited = ref(false);
-    const messageList = reactive([]);
-    let _config = getCurrentInstance().appContext.config.globalProperties;
+
+    const getVierificationCode = () => {
+      http.get("/api/User/getVierificationCode").then((x) => {
+        codeImgSrc.value = "data:image/png;base64," + x.img;
+        userInfo.UUID = x.uuid;
+      });
+    };
+    getVierificationCode();
+    
+    let appContext = getCurrentInstance().appContext;
+    let $message = appContext.config.globalProperties.$message;
     let router = useRouter();
-    const toggleLeft = () => {
-      isCollapse.value = !isCollapse.value;
-      menuWidth.value = isCollapse.value ? 63 : 200;
-    };
-    //2021.08.28寮�鏀炬墜鍔ㄦ姌鍙犺彍鍗曟柟娉�
-    _config.menu = {
-      show() {
-        toggleLeft();
-      },
-      hide() {
-        toggleLeft();
+
+    const login = () => {
+      if (!userInfo.userName) return $message.error("璇疯緭鍏ョ敤鎴峰悕");
+      if (!userInfo.password) return $message.error("璇疯緭鍏ュ瘑鐮�");
+      if (!userInfo.verificationCode) {
+        return $message.error("璇疯緭鍏ラ獙璇佺爜");
       }
-    };
-    const Store = useStore();
-    const s = ref(null);
-
-    // 鑺傛祦澶勭悊WebSocket鏁版嵁锛堟牳蹇冮�昏緫锛�
-    const handleThrottledWsData = (rawData) => {
-      // 缂撳瓨鏈�鏂版暟鎹紙纭繚鏈�缁堟洿鏂扮敤鐨勬槸鏈�鏂板�硷級
-      latestWsData.value = rawData;
-      const now = Date.now();
-
-      // 鎯呭喌1锛氳窛绂讳笂娆℃洿鏂拌秴杩囧欢杩熸椂闂达紝鐩存帴澶勭悊
-      if (now - lastUpdateTime.value >= THROTTLE_DELAY) {
-        processAndUpdateData();
-        lastUpdateTime.value = now;
-      } 
-      // 鎯呭喌2锛氭湭瓒呰繃寤惰繜鏃堕棿锛岀敤瀹氭椂鍣ㄥ欢杩熷鐞嗭紙閬垮厤閲嶅瑙﹀彂锛�
-      else {
-        if (throttleTimer.value) clearTimeout(throttleTimer.value);
-        throttleTimer.value = setTimeout(() => {
-          processAndUpdateData();
-          lastUpdateTime.value = Date.now();
-        }, THROTTLE_DELAY);
-      }
-    };
-
-    // 缁熶竴澶勭悊骞舵洿鏂版暟鎹紙閬垮厤閲嶅浠g爜锛�
-    const processAndUpdateData = () => {
-      if (!latestWsData.value) return;
-      try {
-        // 瑙f瀽WebSocket鏁版嵁
-        const parsedData = typeof latestWsData.value === 'string' 
-          ? JSON.parse(latestWsData.value) 
-          : latestWsData.value;
+      loading.value = true;
+      http.post("/api/User/login", userInfo, "姝e湪鐧诲綍....").then((result) => {
+        if (!result.status) {
+          loading.value = false;
+          getVierificationCode();
+          return $message.error(result.message);
+        }
+        $message.success("鐧诲綍鎴愬姛,姝e湪璺宠浆!");
+        store.commit("setUserInfo", result.data);
         
-        // 1. 鏇存柊Vuex涓殑homedata
-        store.dispatch("sethomedata", parsedData);
-        
-        // 2. 澶勭悊娑堟伅鍒楄〃
-        if (parsedData.title && parsedData.message) {
-          messageList.push(parsedData);
-          // 鏄剧ず閫氱煡
-          ElNotification({
-            title: parsedData.title,
-            message: h("i", { style: "color: teal" }, parsedData.message),
-            position: "bottom-right"
-          });
-        }
-      } catch (err) {
-        console.error("WebSocket鏁版嵁澶勭悊澶辫触锛�", err);
-      }
-    };
-
-    // WebSocket杩炴帴閫昏緫锛堜娇鐢ㄨ妭娴佸鐞嗘暟鎹級
-    const createSocket = url => {
-      // 鍏抽棴宸叉湁杩炴帴锛堥伩鍏嶉噸澶嶈繛鎺ワ級
-      if (client.value) {
-        client.value.close();
-      }
-      
-      // 鍒涘缓WebSocket杩炴帴
-      client.value = new WebSocket("ws:localhost:9260/");
-      
-      client.value.onopen = function() {
-        console.log("WebSocket 杩炴帴鎴愬姛");
-      };
-
-      // 鏀跺埌娑堟伅鍚庝氦缁欒妭娴佸嚱鏁板鐞�
-      client.value.onmessage = function(event) {
-        if (event && event.data) {
-          handleThrottledWsData(event.data);
-        }
-      };
-
-      client.value.onclose = function() {
-        console.log("WebSocket 杩炴帴鍏抽棴");
-        // 閲嶈繛閫昏緫
-        setTimeout(() => createSocket(url), 5000);
-      };
-
-      client.value.onerror = function(err) {
-        console.log("WebSocket 杩炴帴閿欒: ", err);
-        // 閿欒鍚庨噸杩�
-        setTimeout(() => createSocket(url), 5000);
-      };
-    };
-
-    const changeTheme = name => {
-      if (theme.value != name) {
-        theme.value = name;
-      }
-      localStorage.setItem("vol3_theme", name);
-    };
-    const to = item => {
-      if (item.path == "#") {
-        window.open("https://github.com/cq-panda/Vue.NetCore");
-        return;
-      }
-      if (item.path.indexOf("http") != -1) {
-        window.open(item.path);
-        return;
-      }
-      if (typeof item == "string" || item.path == "/login") {
-        if (item == "/login" || item.path == "/login") {
-          store.commit("clearUserInfo", "");
-          window.location.href = "/";
-          return;
-        }
-        router.push({ path: item });
-        return;
-      }
-      if (item.path == "#") return;
-      open(item);
-    };
-    const open = (item, useRoute) => {
-      let _index = navigation.findIndex(x => {
-        return x.path == item.path;
-      });
-      if (_index == -1) {
-        navigation.push({
-          id: item.id + "",
-          name: item.name || item.text || "鏃犳爣棰�",
-          path: item.path,
-          query: item.query
-        });
-        selectId.value = navigation.length - 1 + "";
-      } else {
-        selectId.value = _index + "";
-      }
-      if (useRoute === undefined) {
-        setItem(item);
-        router.push(item);
-      }
-      currentMenuId.value = item.id * 1;
-      // tab鑿滃崟缁戝畾鍙抽敭浜嬩欢
-      proxy.$nextTick(function(e) {
-        proxy.bindRightClickMenu(true);
+        router.push({ path: "/" });
       });
     };
-    const close = path => {
-      let index = navigation.findIndex(x => {
-        return x.path == path;
-      });
-      if (index == -1) {
-        return _config.$Message.error("鏈壘鍒拌彍鍗�");
+    const loginPress = (e) => {
+      if (e.keyCode == 13) {
+        login();
       }
-      removeNav(index);
     };
-    const setItem = item => {
-      localStorage.setItem(
-        window.location.origin + "_tabs",
-        JSON.stringify(item)
-      );
+    const openUrl = (url) => {
+      window.open(url, "_blank");
     };
-    const getItem = () => {
-      let nav = localStorage.getItem(window.location.origin + "_tabs");
-      return nav ? JSON.parse(nav) : null;
-    };
-    const selectNav = item => {
-      selectId.value = item.props.name;
-      let _path = navigation[item.index].path;
-      currentMenuId.value = (
-        menuOptions.value.find(c => {
-          return c.path == _path;
-        }) || { id: 0 }
-      ).id;
-
-      router.push({
-        path: navigation[item.index].path,
-        query: navigation[item.index].query
-      });
-    };
-
-    const removeNav = _index => {
-      return new Promise(() => {
-        //鍏抽棴鐨勫綋鍓嶉」,璺宠浆鍒板墠涓�涓〉闈�
-        if (selectId.value == _index + "") {
-          setItem(navigation[_index - 1]);
-          router.push({
-            path: navigation[_index - 1].path,
-            query: navigation[_index - 1].query
-          });
-          navigation.splice(_index, 1);
-          selectId.value = selectId.value - 1 + "";
-          return;
-        }
-        if (_index < selectId.value) {
-          selectId.value = selectId.value - 1 + "";
-        }
-        navigation.splice(_index, 1);
-        currentMenuId.value = (
-          menuOptions.value.find(c => {
-            return c.path == navigation[selectId.value * 1].path;
-          }) || { id: 0 }
-        ).id;
-      });
-    };
-
-    const getSelectMenuName = id => {
-      return menuOptions.value.find(function(x) {
-        return x.id == id;
-      });
-    };
-    const onSelect = treeId => {
-      var item = getSelectMenuName(treeId);
-      open(item, false);
-    };
-
-    /**
-     * 鏄剧ず鍙抽敭鑿滃崟
-     */
-    const openTabsMenu = function(e) {
-      e.preventDefault();
-      let tabId = e.target.id.split("-")[1] * 1;
-
-      //璁板綍褰撳墠閫変腑鐨勮彍鍗昳ndex
-      selectMenuIndex.value =
-        document.getElementById("pane-" + tabId).children[0].textContent * 1;
-      //鍙湁棣栭〉鏃朵笉鏄剧ず
-      if (navigation.length == 1) {
-        return;
-      }
-
-      //棣栭〉璁剧疆鏄剧ず鍏抽棴鍙宠竟鑿滃崟
-      if (!selectMenuIndex.value) {
-        visibleItem.all = false;
-        visibleItem.right = true;
-        visibleItem.left = false;
-        visibleItem.other = false;
-      } else {
-        visibleItem.all = true;
-        //涓嶆槸鏈�鍚庝竴涓樉绀哄叧闂彸杈硅彍鍗�
-        visibleItem.right = selectMenuIndex.value != navigation.length - 1;
-        //鍙湁涓や釜鑿滃崟鏃朵笉鏄剧ず鍏抽棴宸﹁竟
-        visibleItem.left = navigation.length != 2;
-        //鍙湁涓や釜鑿滃崟鏃朵笉鏄剧ず鍏抽棴鍏朵粬
-        visibleItem.other = navigation.length != 2;
-      }
-      contextMenuVisible.value = true;
-      // 璁剧疆鍙抽敭鑿滃崟鏄剧ず鐨勪綅缃�
-      proxy.menuLeft =
-        e.target.getBoundingClientRect().left - (isCollapse.value ? 63 : 198);
-      proxy.menuTop = 36;
-    };
-
-    /**
-     * 鍏抽棴鍙抽敭鑿滃崟
-     */
-    const closeTabsMenu = () => {
-      contextMenuVisible.value = false;
-    };
-    const toHome = () => {
-      open({
-        text: navigation[0].name,
-        path: navigation[0].path
-      });
-    };
-    /**
-     * 鍏抽棴鍏跺畠鏍囩椤�
-     */
-    const closeTabs = value => {
-      let _menuId = navigation[selectId.value * 1].id;
-      let currnetIndex = selectId.value * 1;
-      switch (value) {
-        case "left": {
-          // 鍒犻櫎宸︿晶tab鏍囩
-          navigation.splice(1, currnetIndex - 1);
-          break;
-        }
-        case "right": {
-          // 鍒犻櫎鍙充晶tab鏍囩
-          if (selectMenuIndex.value == 0) {
-            navigation.splice(currnetIndex);
-            toHome();
-          } else {
-            navigation.splice(currnetIndex + 1);
-            if (selectMenuIndex.value < currnetIndex) {
-              navigation.splice(
-                selectMenuIndex.value,
-                currnetIndex - selectMenuIndex.value
-              );
-            }
-          }
-          break;
-        }
-        case "other": {
-          // 鍒犻櫎鍏朵粬鎵�鏈塼ab鏍囩
-          navigation.splice(currnetIndex + 1);
-          navigation.splice(1, currnetIndex - 1);
-          break;
-        }
-        default: {
-          //鍏抽棴鎵�鏈�
-          navigation.splice(1, navigation.length);
-          toHome();
-          break;
-        }
-      }
-      selectId.value =
-        navigation.findIndex(c => {
-          return c.id == _menuId;
-        }) + "";
-      closeTabsMenu();
-    };
-
-    watch(
-      () => contextMenuVisible.value,
-      (newVal, oldVal) => {
-        if (newVal) {
-          document.body.addEventListener("click", closeTabsMenu);
-        } else {
-          document.body.removeEventListener("click", closeTabsMenu);
-        }
-      }
-    );
-
-    /**
-     * 绯荤粺鍒涘缓寮�濮�
-     */
-    const created = () => {
-      let _theme = localStorage.getItem("vol3_theme");
-      if (_theme) {
-        theme.value = _theme;
-      }
-
-      let _userInfo = store.getters.getUserInfo();
-      if (_userInfo) {
-        userName.value = _userInfo.userName;
-        userTrueName.value = _userInfo.userTrueName;
-        if (_userInfo.img) {
-          userImg.value = _config.base.getImgSrc(_userInfo.img, http.ipAddress);
-        }
-      }
-
-      createSocket(window.webConfig.webSocketUrl);
-
-      Object.assign(_config.$tabs, { open: open, close: close });
-
-      http.get("api/Sys_Menu/getTreeMenu", {}, true).then(data => {
-        data.push({ id: "1", name: "棣栭〉", url: "/home" });
-        data.forEach(d => {
-          d.path = (d.url || "").replace("/Manager", "");
-          d.to = (d.url || "").replace("/Manager", "");
-          if (!d.icon || d.icon.substring(0, 3) != "el-") {
-            d.icon = "el-icon-menu";
-          }
-        });
-
-        store.dispatch("setPermission", data);
-        menuOptions.value = data;
-        permissionInited.value = true;
-
-        //寮�鍚秷鎭帹閫�
-        if (_config.$global.signalR) {
-          MessageConfig(http, result => {
-            messageList.unshift(result);
-          });
-        }
-
-        //褰撳墠鍒锋柊鏄笉鏄椤�
-        if (router.currentRoute.value.path != navigation[0].path) {
-          //鏌ユ壘绯荤粺鑿滃崟
-          let item = menuOptions.value.find(x => {
-            return x.path == router.currentRoute.value.path;
-          });
-          if (item) return onSelect(item.id);
-          //鏌ユ壘椤堕儴蹇嵎杩炴帴
-          item = links.value.find(x => {
-            return x.path == router.currentRoute.value.path;
-          });
-          //鏌ユ壘鏈�鍚庝竴娆¤烦杞殑椤甸潰
-          if (!item) {
-            item = getItem();
-          }
-          if (item) {
-            return open(item, false);
-          }
-        }
-        selectId.value = "1";
-      });
-    };
-    created();
     return {
-      menuWidth,
-      isCollapse,
-      drawer_model,
-      theme_color,
-      errorImg,
+      loading,
+      codeImgSrc,
+      getVierificationCode,
+      login,
       userInfo,
-      userName,
-      userTrueName,
-      userImg,
-      selectId,
-      selectMenuIndex,
-      navigation,
-      links,
-      onSelect,
-      openTabsMenu,
-      selectNav,
-      getSelectMenuName,
-      removeNav,
-      logo,
-      theme,
-      menuOptions,
-      permissionInited,
-      changeTheme,
-      to,
-      toggleLeft,
-      messageModel,
-      messageList,
-      contextMenuVisible,
-      visibleItem,
-      closeTabsMenu,
-      closeTabs,
-      currentMenuId
+      loginPress,
+      openUrl,
     };
   },
-  /**
-   * 鎸傝浇閽╁瓙鍑芥暟
-   */
-  mounted() {
-    let _date = showTime();
-    $indexDate = document.getElementById("index-date");
-    $indexDate.innerText = _date;
-    $interval = setInterval(function() {
-      $indexDate.innerText = showTime();
-    }, 1000);
-
-    this.bindRightClickMenu(true);
+  directives: {
+    focus: {
+      inserted: function (el) {
+        el.focus();
+      },
+    },
   },
+});
+</script>
+<style lang="less" scoped>
+.login-container {
+  display: flex;
+  width: 100%;
+  height: 100%;
+  background: rgb(246, 247, 252);
+  justify-content: flex-end;
+  align-items: center;
+}
 
-  methods: {
-    /**
-     * 缁戝畾鍙抽敭浜嬩欢
-     */
-    bindRightClickMenu(enable) {
-      if (!enable) return;
-      let that = this;
-      // 浣跨敤鍘熺敓js 涓哄崟涓猟om缁戝畾榧犳爣鍙冲嚮浜嬩欢
-      that.$nextTick(() => {
-        let tab_top_dom = Object.assign(
-          [],
-          document.getElementsByClassName("el-tabs__item is-top")
-        );
-        tab_top_dom.forEach((item, index) => {
-          item.oncontextmenu = that.openTabsMenu;
-        });
-      });
-    }
-  },
+.login-form {
+  align-items: center;
+  width: 50%;
+  display: flex;
+  flex-direction: column;
+  // margin-right: 150px;
+  z-index: 999;
 
-  /**
-   * 閿�姣侀挬瀛愬嚱鏁�
-   */
-  destroyed() {
-    $this = null;
-    clearInterval($interval);
-    // 鍏抽棴WebSocket杩炴帴
-    if (client && client.value) {
-      client.value.close();
+  .form-user {
+    // margin: 25px 0;
+
+    .item {
+      border-radius: 5px;
+      border: 1px solid #ececec;
+      display: flex;
+      margin-bottom: 30px;
+      background: #ffff;
+      height: 45px;
+      padding-left: 20px;
+      display: flex;
+
+      .code {
+        position: relative;
+        cursor: pointer;
+        width: 74px;
+        padding: 5px 10px 0 0;
+      }
+
+      .input-icon {
+        line-height: 45px;
+        color: #7a7a7a;
+        padding-right: 20px;
+      }
     }
   }
-});
-const week = new Array(
-  "鏄熸湡涓�",
-  "鏄熸湡浜�",
-  "鏄熸湡涓�",
-  "鏄熸湡鍥�",
-  "鏄熸湡浜�",
-  "鏄熸湡鍏�",
-  "鏄熸湡鏃�"
-);
-function showTime() {
-  let date = new Date();
-  let year = date.getFullYear();
-  let month = date.getMonth() + 1;
-  let day = date.getDate();
-  let hour = date.getHours();
-  let minutes = date.getMinutes();
-  let second = date.getSeconds();
 
-  return (
-    year +
-    "." +
-    (month < 10 ? "0" + month : month) +
-    "." +
-    (day < 10 ? "0" + day : day) +
-    "" +
-    " " +
-    (hour < 10 ? "0" + hour : hour) +
-    ":" +
-    (minutes < 10 ? "0" + minutes : minutes) +
-    ":" +
-    (second < 10 ? "0" + second : second) +
-    " " +
-    (week[date.getDay() - 1] || week[6])
-  );
+  input:-webkit-autofill {
+    box-shadow: 0 0 0px 1000px white inset;
+    -webkit-box-shadow: 0 0 0px 1000px white inset !important;
+  }
+
+  input {
+    background: white;
+    display: block;
+    box-sizing: border-box;
+    width: 100%;
+    min-width: 0;
+    margin: 0;
+    padding: 0;
+    color: #323233;
+    line-height: inherit;
+    text-align: left;
+    border: 0;
+    outline: none;
+    font-size: 16px;
+    line-height: 20px;
+  }
 }
-</script>
+
+.form-user,
+.loging-btn {
+  width: 400px;
+}
+
+.loging-btn {
+  box-shadow: 2px 4px 11px #a4c2ff;
+  margin-top: 10px;
+
+  button {
+    padding: 21px;
+    font-size: 14px !important;
+    width: 100%;
+  }
+}
+
+.login-text {
+  font-weight: bolder;
+  font-size: 20px;
+  letter-spacing: 2px;
+
+  position: relative;
+  display: flex;
+
+  .login-line {
+    z-index: -1;
+    padding: 5px;
+    position: relative;
+    top: -8px;
+    width: 100%;
+    background-image: linear-gradient(to right, #6598ff, white);
+  }
+}
+
+.login-text-small {
+  margin-bottom: 20px;
+  font-size: 13px;
+  color: #7d7c7c;
+}
+
+.login-bg {
+  left: 0;
+  position: absolute;
+  height: 100%;
+  width: 50%;
+  z-index: 0;
+}
+
+.project-name {
+  position: absolute;
+  top: 40px;
+  left: 40px;
+  z-index: 9999;
+  font-weight: bolder;
+  background-image: linear-gradient(to right, #1850c1, #9c009c);
+  -webkit-background-clip: text;
+  color: transparent;
+  font-size: 25px;
+}
+</style>
+<style lang="less" scoped>
+.app-link {
+  // font-weight: bolder;
+  text-align: center;
+  padding-top: 5px;
+  font-size: 12px;
+  width: 400px;
+  padding-left: 40px;
+  display: flex;
+
+  a {
+    flex: 1;
+    position: relative;
+    cursor: pointer;
+    width: 70px;
+    color: #666666;
+    margin: 2px 10px 0 0;
+  }
+
+  img {
+    display: none;
+  }
+
+  a:hover {
+    color: #0545f6 !important;
+
+    img {
+      display: block;
+      position: absolute;
+      z-index: 999999999;
+      top: -130px;
+      width: 120px;
+      left: -22px;
+
+      border: 1px solid #b1b1b1;
+    }
+  }
+}
+
+.login-footer {
+  position: absolute;
+  width: 50%;
+  bottom: 0.5rem;
+  font-size: 12px;
+  text-align: center;
+  padding-bottom: 10px;
+  color: #4f4f4f;
+
+  a {
+    margin-right: 10px;
+    font-size: 12px;
+    color: #4f4f4f;
+  }
+
+  div {
+    margin-bottom: 5px;
+  }
+
+  a:hover {
+    cursor: pointer;
+    color: #0540e3 !important;
+  }
+}
+
+.account-info {
+  font-size: 12px;
+  color: #636363;
+  margin-top: 15px;
+}
+</style>
 
 <style lang="less" scoped>
-.vol-container .vol-path ::v-deep(.el-tabs__content) {
-  padding: 0;
-}
+@media screen and (max-width: 700px) {
+  .login-bg,
+  .account-info,
+  .app-link,
+  .login-footer,
+  .project-name {
+    display: none;
+  }
 
-.item {
-  margin-top: -20px;
-  margin-right: 40px;
-}
+  .login-container {
+    padding: 2rem;
+    justify-content: center;
+  }
 
-.contextMenu {
-  width: 120px;
-  margin: 0;
-  border: 1px solid #eaeaea;
-  background: #fff;
-  z-index: 30000;
-  position: absolute;
-  list-style-type: none;
-  padding: 5px 0;
-  border-radius: 4px;
-  font-size: 14px;
-  color: #333;
-  box-shadow: 2px 2px 3px 0 rgb(182 182 182 / 20%);
-  i,
-  button {
-    font-size: 14px !important;
+  .login-form {
+    width: 100%;
+  }
+
+  .form-user,
+  .loging-btn {
+    width: 100%;
   }
 }
-
-.contextMenu li {
-  margin: 0;
-  padding: 5px 17px;
-}
-
-.contextMenu li:hover {
-  background: #fafafa;
-  cursor: pointer;
-}
-
-.contextMenu li button {
-  color: #626060;
-  font-size: 14px;
-  letter-spacing: 1px;
-}
-
-.el-tabs.el-tabs--top.el-tabs--border-card.header-navigation
-  > .el-tabs__header
-  .el-tabs__item:last-child,
-.el-tabs--top.el-tabs--border-card.header-navigation
-  > .el-tabs__header
-  .el-tabs__item:nth-child(2) {
-  padding: 0;
-}
-
-.header-navigation ::v-deep(.el-tabs__item.is-top) {
-  padding: 0 15px;
-}
-</style>
-<style>
-.horizontal-collapse-transition {
-  transition: 0s width ease-in-out, 0s padding-left ease-in-out,
-    0s padding-right ease-in-out;
-}
-</style>
+</style>
\ No newline at end of file
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/deviceMonitoring/BoardWarehouse.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/deviceMonitoring/BoardWarehouse.vue"
index 8b42e03..0e5e0f5 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/deviceMonitoring/BoardWarehouse.vue"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/deviceMonitoring/BoardWarehouse.vue"
@@ -1,45 +1,341 @@
 <template>
-  <div class="message-container">
-    <div class="item" v-for="(item, index) in list" :key="index">
-      <div class="title">{{ item.title }}({{ item.date }})</div>
-      <div class="content">{{ item.message }}</div>
+  <div id="title">
+    <div id="bkuang" style="border-top: none">
+      <!-- BC浠撳爢鍨涙満鐘舵�侀潰鏉� -->
+      <div class="skuang">
+        <div class="bcuname">鏉挎枡浠撳爢鍨涙満</div>
+        <div class="bcankuang">
+          <div class="xname">鍫嗗灈鏈虹姸鎬�:</div>
+          <div class="xbci" :title="bcData.R_BC_Status">{{ bcData.R_BC_Status || '-' }}</div>
+        </div>
+        <div class="bcankuang">
+          <div class="xname">鍫嗗灈鏈烘墜鑷姩鐘舵��:</div>
+          <div class="xbci" :title="bcData.R_BC_AutoStatus">{{ bcData.R_BC_AutoStatus || '-' }}</div>
+        </div>
+        <div class="bcankuang">
+          <div class="xname">姝e湪鎵ц鐨勪换鍔″彿:</div>
+          <div class="xbci" :title="bcData.R_BC_TaskNum">{{ bcData.R_BC_TaskNum || '-' }}</div>
+        </div>
+        <div class="bcankuang">
+          <div class="xname">鍫嗗灈鏈哄伐浣滅姸鎬�:</div>
+          <div class="xbci" :title="bcData.R_BC_WorkStatus">{{ bcData.R_BC_WorkStatus || '-' }}</div>
+        </div>
+        <div class="bcankuang">
+          <div class="xname">浣滀笟绫诲瀷:</div>
+          <div class="xbci" :title="bcData.R_BC_WorkType">{{ bcData.R_BC_WorkType || '-' }}</div>
+        </div>
+        <div class="bcankuang">
+          <div class="xname">鎵樼洏绫诲瀷:</div>
+          <div class="xbci" :title="bcData.R_BC_TrayType">{{ bcData.R_BC_TrayType || '-' }}</div>
+        </div>
+      </div>
+
+
+      
     </div>
   </div>
 </template>
 
 <script>
+import { ref, nextTick, watch, onUnmounted } from "vue";
+import { useStore } from "vuex";
+import { onMounted } from "vue";
+
 export default {
-  props: {
-    list: {
-      type: Array,
-      default: () => {
-        return [];
-      }
-    }
+  data() {
+    return {
+      xuan: 0
+    };
   },
-  created() {
-    if (!this.list.length) {
-      this.list.push({
-        title: '娑堟伅娴嬭瘯鏍噏weqweqweqw棰�',
-        message: '娑堟伅娴嬭瘯鍐呭娑堟伅娴嬭瘯鍐呭娑堟伅娴嬭瘯鍐呭娑堟伅娴嬭瘯鍐呭',
-        date: '2022-05-02 03:10'
+  setup() {
+    const store = useStore();
+    // 浠呭瓨鍌˙C鏁版嵁锛屼笌鍏朵粬鏁版嵁闅旂
+    const bcData = ref({});
+
+    // 寤惰繜鏇存柊閰嶇疆锛岃В鍐抽棯鐑侀棶棰�
+    const UPDATE_DELAY = 300; // 寤惰繜300ms鏇存柊UI
+    let updateTimer = null;   // 瀹氭椂鍣ㄥ疄渚�
+
+    // BC鏁版嵁鏄犲皠瑙勫垯
+    const bcStatusMap = {
+      R_BC_Status: {
+        1: "姝e父",
+        2: "鏁呴殰",
+        3: "鎬ュ仠",
+      },
+      R_BC_AutoStatus: {
+        0: "缁翠慨",
+        1: "鎵嬪姩",
+        2: "鍗婅嚜鍔�",
+        3: "鑷姩",
+      },
+      R_BC_WorkStatus: {
+        0: "寰呮満",
+        1: "鍙栬揣涓�",
+        2: "鍙栬揣瀹屾垚",
+        4: "鏀捐揣涓�",
+        5: "鏀捐揣瀹屾垚",
+        6: "浠诲姟瀹屾垚",
+      },
+      R_BC_WorkType: {
+        0: "鏃犱綔涓氫换鍔�(0)",
+        1: "鍙栨斁璐т綔涓�(1)",
+        2: "鍙彇璐т綔涓�(2)",
+        3: "鍙斁璐т綔涓�(3)",
+        4: "绉诲姩鍒版寚瀹氫綅缃�"
+      },
+      R_BC_TrayType: {
+        "-1": "绌虹(-1)",
+        1: "灏忔墭鐩�(1)",
+        2: "涓墭鐩�(2)",
+        3: "澶ф墭鐩�(3)",
+        4: "鐗瑰ぇ鎵樼洏(4)",
+      }
+    };
+
+    // BC瀛楁鍒嗙粍
+    const bcFieldGroups = {
+      permissionFields: {
+        keys: ["R_BC_IsCanPut1", "R_BC_IsCanTake1", "R_BC_IsCanPut2", "R_BC_IsCanTake2", 
+               "R_BC_IsCanPut3", "R_BC_IsCanTake3", "R_BC_IsCanPut4", "R_BC_IsCanTake4"],
+        map: { true: "鏄�", false: "鍚�" }
+      },
+      requestFields: {
+        keys: ["W_BC_PutRequest1", "W_BC_TakeRequest1", "W_BC_PutRequest2", "W_BC_TakeRequest2", 
+               "W_BC_PutRequest3", "W_BC_TakeRequest3", "W_BC_PutRequest4", "W_BC_TakeRequest4"],
+        map: { true: "鏄�", false: "鍚�" }
+      },
+      finishFields: {
+        keys: ["W_BC_PutFinish1", "W_BC_TakeFinish1", "W_BC_PutFinish2", "W_BC_TakeFinish2", 
+               "W_BC_PutFinish3", "W_BC_TakeFinish3", "W_BC_PutFinish4", "W_BC_TakeFinish4"],
+        map: { true: "鏄�", false: "鍚�" }
+      },
+      palletTypeFields: {
+        keys: ["R_BC_TakePalletType1", "R_BC_TakePalletType2", "R_BC_TakePalletType3", "R_BC_TakePalletType4",
+               "W_BC_PutPalletType1", "W_BC_PutPalletType2", "W_BC_PutPalletType3", "W_BC_PutPalletType4"],
+        map: { "-1": "绌虹(-1)", 1: "灏忔墭鐩�(1)", 2: "涓墭鐩�(2)", 3: "澶ф墭鐩�(3)", 4: "鐗瑰ぇ鎵樼洏(4)" }
+      }
+    };
+
+    // 澶勭悊BC鍘熷鏁版嵁
+    const processBCData = (rawData) => {
+      if (!rawData) return {};
+      const processedData = { ...rawData };
+
+      // 澶勭悊鏍稿績鐘舵�佸瓧娈�
+      Object.keys(bcStatusMap).forEach(key => {
+        if (processedData.hasOwnProperty(key)) {
+          processedData[key] = bcStatusMap[key][processedData[key]] || processedData[key];
+        }
       });
-    }
+
+      // 澶勭悊鍒嗙粍瀛楁
+      Object.values(bcFieldGroups).forEach(group => {
+        group.keys.forEach(key => {
+          if (processedData.hasOwnProperty(key)) {
+            processedData[key] = group.map[processedData[key]] || processedData[key];
+          }
+        });
+      });
+
+      return processedData;
+    };
+
+    // 寤惰繜鏇存柊BC鏁版嵁锛岄伩鍏嶉珮棰戝埛鏂�
+    const delayedUpdateBCData = (newRawData) => {
+      if (updateTimer) {
+        clearTimeout(updateTimer);
+      }
+
+      updateTimer = setTimeout(() => {
+        // 鍙鐞嗗寘鍚獴C鐗瑰緛瀛楁鐨勬暟鎹�
+        if (newRawData && newRawData.R_BC_Status !== undefined) {
+          bcData.value = processBCData(newRawData);
+          
+          // 鏇存柊鏍峰紡
+          nextTick(() => {
+            const valueElements = document.getElementsByClassName("xbci");
+            for (let i = 0; i < valueElements.length; i++) {
+              if (valueElements[i].innerHTML === "鏄�") {
+                valueElements[i].style.color = "yellow";
+              } else if (valueElements[i].innerHTML === "鍚�") {
+                valueElements[i].style.color = "red";
+              }
+            }
+          });
+        }
+      }, UPDATE_DELAY);
+    };
+
+    onMounted(() => {
+      // 鍒濆鍔犺浇鏁版嵁
+      const initialData = store.state.homedata;
+      if (initialData && initialData.R_BC_Status !== undefined) {
+        bcData.value = processBCData(initialData);
+      }
+
+      // 鐩戝惉鏁版嵁鍙樺寲锛屽彧澶勭悊BC鏁版嵁
+      const unwatch = watch(
+        () => store.state.homedata,
+        (newData) => {
+          if (newData && newData.R_BC_Status !== undefined) {
+            delayedUpdateBCData(newData);
+          }
+        },
+        { deep: true }
+      );
+
+      // 缁勪欢鍗歌浇鏃舵竻鐞�
+      onUnmounted(() => {
+        unwatch();
+        if (updateTimer) {
+          clearTimeout(updateTimer);
+        }
+      });
+    });
+
+    return {
+      bcData
+    };
   }
 };
 </script>
-<style scoped lang="less">
-.message-container {
-  .title {
-    padding-bottom: 10px;
-  }
-  .item {
-    border-bottom: 1px solid #eee;
-    padding: 10px 20px;
-  }
-  .content {
-    color: #7e7e7e;
-    font-size: 13px;
-  }
+
+<style scoped>
+.ding {
+  float: left;
+  width: 20px;
+  height: 20px;
+  margin-top: 7px;
 }
-</style>
\ No newline at end of file
+.yan {
+  color: white;
+  float: left;
+  font-size: 25px;
+}
+.dakuang {
+  width: 250px;
+  height: 50px;
+  position: absolute;
+  top: 150px;
+  left: 200px;
+}
+#xiugai {
+  width: 100px;
+  height: 30px;
+  float: left;
+  border-radius: 5px;
+  text-align: center;
+  line-height: 30px;
+  cursor: pointer;
+  border: 1px solid white;
+  color: white;
+  background: rgba(255, 255, 255, 0.5);
+  font-size: 25px;
+  position: absolute;
+  top: 150px;
+  left: 450px;
+}
+#xiugai:hover {
+  background: #f60;
+}
+#shu1,
+#shu2 {
+  width: 200px;
+  height: 30px;
+  float: left;
+  margin-top: 0px;
+  margin-right: 0px;
+  border-radius: 5px;
+  border: 1px solid white;
+}
+#guan {
+  width: 40px;
+  height: 40px;
+  float: left;
+  font-size: 1.1cqw;
+  text-align: center;
+  line-height: 40px;
+  cursor: pointer;
+  margin-left: 560px;
+  color: white;
+  position: absolute;
+}
+#ti {
+  width: 600px;
+  height: 300px;
+  position: relative;
+  background: rgba(255, 255, 255, 1);
+  border-radius: 10px;
+  top: 230px;
+  left: 35%;
+  display: none;
+  background-image: url("../../img/1.png");
+  background-repeat: no-repeat;
+  background-size: 170%;
+  background-position: -220px 0px;
+}
+.bcuname {
+  width: 100%;
+  height: 5vh;
+  float: left;
+  text-align: center;
+  line-height: 50px;
+  font-weight: 700;
+  font-size: 1.1cqw;
+  color: white;
+}
+.xname {
+  width: 70%;
+  height: 80px;
+  float: left;
+  line-height: 7vh;
+  font-size: 1.1cqw;
+  color: white;
+}
+.xbci {
+  width: 30%;
+  height: 7vh;
+  float: left;
+  line-height: 50px;
+  font-size: 1.1cqw;
+  color: rgb(242, 242, 50);
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+.bcankuang {
+  width: 45%;
+  height: 3vh;
+  margin-top: 10px;
+  margin-left: 5%;
+  float: left;
+}
+#title {
+  float: left;
+  width: 95%;
+  height: 88vh;
+  margin-top: 40px;
+  margin-left: 3%;
+  background-image: url("../../img/1.png");
+  background-repeat: no-repeat;
+  background-size: 100%;
+  container-type: inline-size;
+}
+#bkuang {
+  width: 100%;
+  height: 55vh;
+  float: left;
+}
+.skuang {
+  width: 31%;
+  height: 55vh;
+  float: left;
+  border-top: none;
+  border-left: none;
+  border-bottom: none;
+  background: rgba(255, 255, 255, 0.2);
+  margin-left: 1.7%;
+  border-radius: 10px;
+}
+</style>
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/deviceMonitoring/TestFrameWarehouse.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/deviceMonitoring/TestFrameWarehouse.vue"
index e6514a3..ffa70bb 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/deviceMonitoring/TestFrameWarehouse.vue"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/deviceMonitoring/TestFrameWarehouse.vue"
@@ -1,45 +1,394 @@
 <template>
-  <div class="message-container">
-    <div class="item" v-for="(item, index) in list" :key="index">
-      <div class="title">{{ item.title }}({{ item.date }})</div>
-      <div class="content">{{ item.message }}</div>
+  <div id="title">
+    <div id="bkuang" style="border-top: none">
+      <!-- CSJ浠撳爢鍨涙満鐘舵�侀潰鏉� -->
+      <div class="skuang">
+        <div class="csjuname">娴嬭瘯鏋朵粨鍫嗗灈鏈�</div>
+        <div class="csjankuang">
+          <div class="xname">鍫嗗灈鏈虹姸鎬�:</div>
+          <div class="xcsji" :title="csjData.R_CSJ_Status">{{ csjData.R_CSJ_Status || '-' }}</div>
+        </div>
+        <div class="csjankuang">
+          <div class="xname">鍫嗗灈鏈烘墜鑷姩鐘舵��:</div>
+          <div class="xcsji" :title="csjData.R_CSJ_AutoStatus">{{ csjData.R_CSJ_AutoStatus || '-' }}</div>
+        </div>
+        <div class="csjankuang">
+          <div class="xname">姝e湪鎵ц鐨勪换鍔″彿:</div>
+          <div class="xcsji" :title="csjData.R_CSJ_TaskNum">{{ csjData.R_CSJ_TaskNum || '-' }}</div>
+        </div>
+        <div class="csjankuang">
+          <div class="xname">鍫嗗灈鏈哄伐浣滅姸鎬�:</div>
+          <div class="xcsji" :title="csjData.R_CSJ_WorkStatus">{{ csjData.R_CSJ_WorkStatus || '-' }}</div>
+        </div>
+        <div class="csjankuang">
+          <div class="xname">浣滀笟绫诲瀷:</div>
+          <div class="xcsji" :title="csjData.R_CSJ_WorkType">{{ csjData.R_CSJ_WorkType || '-' }}</div>
+        </div>
+        <div class="csjankuang">
+          <div class="xname">鎵樼洏绫诲瀷:</div>
+          <div class="xcsji" :title="csjData.R_CSJ_TrayType">{{ csjData.R_CSJ_TrayType || '-' }}</div>
+        </div>
+      </div>
+
+      <!-- CSJ鍏宠仈绔欏彴锛堝嚭搴�303+鍑哄簱304锛� -->
+      <div class="skuang">
+        <div class="csjuname">鍑哄簱103绔欏彴</div>
+        <div class="csjankuang">
+          <div class="xname">鏄惁鍏佽鏀捐揣(璇�):</div>
+          <div class="xcsji" :title="csjData.R_CSJ_IsCanPut3">{{ csjData.R_CSJ_IsCanPut3 || '-' }}</div>
+        </div>
+        <div class="csjankuang">
+          <div class="xname">鏄惁鍏佽鍙栬揣(璇�):</div>
+          <div class="xcsji" :title="csjData.R_CSJ_IsCanTake3">{{ csjData.R_CSJ_IsCanTake3 || '-' }}</div>
+        </div>
+        <div class="csjankuang">
+          <div class="xname">鏀捐揣璇锋眰(鍐�):</div>
+          <div class="xcsji" :title="csjData.W_CSJ_PutRequest3">{{ csjData.W_CSJ_PutRequest3 || '-' }}</div>
+        </div>
+        <div class="csjankuang">
+          <div class="xname">鏀捐揣瀹屾垚(鍐�):</div>
+          <div class="xcsji" :title="csjData.W_CSJ_PutFinish3">{{ csjData.W_CSJ_PutFinish3 || '-' }}</div>
+        </div>
+        <div class="csjankuang">
+          <div class="xname">鍙栬揣璇锋眰(鍐�):</div>
+          <div class="xcsji" :title="csjData.W_CSJ_TakeRequest3">{{ csjData.W_CSJ_TakeRequest3 || '-' }}</div>
+        </div>
+        <div class="csjankuang">
+          <div class="xname">鍙栬揣瀹屾垚(鍐�):</div>
+          <div class="xcsji" :title="csjData.W_CSJ_TakeFinish3">{{ csjData.W_CSJ_TakeFinish3 || '-' }}</div>
+        </div>
+
+        <div class="csjuname">鍑哄簱104绔欏彴</div>
+        <div class="csjankuang">
+          <div class="xname">鏄惁鍏佽鏀捐揣(璇�):</div>
+          <div class="xcsji" :title="csjData.R_CSJ_IsCanPut4">{{ csjData.R_CSJ_IsCanPut4 || '-' }}</div>
+        </div>
+        <div class="csjankuang">
+          <div class="xname">鏄惁鍏佽鍙栬揣(璇�):</div>
+          <div class="xcsji" :title="csjData.R_CSJ_IsCanTake4">{{ csjData.R_CSJ_IsCanTake4 || '-' }}</div>
+        </div>
+
+        <div class="csjankuang">
+          <div class="xname">鏀捐揣璇锋眰(鍐�):</div>
+          <div class="xcsji" :title="csjData.W_CSJ_PutRequest4">{{ csjData.W_CSJ_PutRequest4 || '-' }}</div>
+        </div>
+        <div class="csjankuang">
+          <div class="xname">鏀捐揣瀹屾垚(鍐�):</div>
+          <div class="xcsji" :title="csjData.W_CSJ_PutFinish4">{{ csjData.W_CSJ_PutFinish4 || '-' }}</div>
+        </div>
+        <div class="csjankuang">
+          <div class="xname">鍙栬揣璇锋眰(鍐�):</div>
+          <div class="xcsji" :title="csjData.W_CSJ_TakeRequest4">{{ csjData.W_CSJ_TakeRequest4 || '-' }}</div>
+        </div>
+        <div class="csjankuang">
+          <div class="xname">鍙栬揣瀹屾垚(鍐�):</div>
+          <div class="xcsji" :title="csjData.W_CSJ_TakeFinish4">{{ csjData.W_CSJ_TakeFinish4 || '-' }}</div>
+        </div>
+      </div>
     </div>
   </div>
 </template>
 
 <script>
+import { ref, nextTick, watch, onUnmounted } from "vue";
+import { useStore } from "vuex";
+import { onMounted } from "vue";
+
 export default {
-  props: {
-    list: {
-      type: Array,
-      default: () => {
-        return [];
-      }
-    }
+  data() {
+    return {
+      xuan: 0
+    };
   },
-  created() {
-    if (!this.list.length) {
-      this.list.push({
-        title: '娑堟伅werwer娴嬭瘯鏍囬',
-        message: '娑堟伅娴嬭瘯鍐呭娑堟伅娴嬭瘯鍐呭娑堟伅娴嬭瘯鍐呭娑堟伅娴嬭瘯鍐呭',
-        date: '2022-05-02 03:10'
+  setup() {
+    const store = useStore();
+    // 浠呭瓨鍌–SJ鏁版嵁锛屼笌鍏朵粬鏁版嵁闅旂
+    const csjData = ref({});
+
+    // 寤惰繜鏇存柊閰嶇疆锛岃В鍐抽棯鐑侀棶棰�
+    const UPDATE_DELAY = 300; // 寤惰繜300ms鏇存柊UI
+    let updateTimer = null;   // 瀹氭椂鍣ㄥ疄渚�
+
+    // CSJ鏁版嵁鏄犲皠瑙勫垯
+    const csjStatusMap = {
+      R_CSJ_Status: {
+        1: "姝e父",
+        2: "鏁呴殰",
+        3: "鎬ュ仠",
+      },
+      R_CSJ_AutoStatus: {
+        0: "缁翠慨",
+        1: "鎵嬪姩",
+        2: "鍗婅嚜鍔�",
+        3: "鑷姩",
+      },
+      R_CSJ_WorkStatus: {
+        0: "寰呮満",
+        1: "鍙栬揣涓�",
+        2: "鍙栬揣瀹屾垚",
+        4: "鏀捐揣涓�",
+        5: "鏀捐揣瀹屾垚",
+        6: "浠诲姟瀹屾垚",
+      },
+      R_CSJ_WorkType: {
+        0: "鏃犱綔涓氫换鍔�(0)",
+        1: "鍙栨斁璐т綔涓�(1)",
+        2: "鍙彇璐т綔涓�(2)",
+        3: "鍙斁璐т綔涓�(3)",
+        4: "绉诲姩鍒版寚瀹氫綅缃�"
+      },
+      R_CSJ_TrayType: {
+        "-1": "绌虹(-1)",
+        1: "灏忔墭鐩�(1)",
+        2: "涓墭鐩�(2)",
+        3: "澶ф墭鐩�(3)",
+        4: "鐗瑰ぇ鎵樼洏(4)",
+      }
+    };
+
+    // CSJ瀛楁鍒嗙粍
+    const csjFieldGroups = {
+      permissionFields: {
+        keys: ["R_CSJ_IsCanPut1", "R_CSJ_IsCanTake1", "R_CSJ_IsCanPut2", "R_CSJ_IsCanTake2", 
+               "R_CSJ_IsCanPut3", "R_CSJ_IsCanTake3", "R_CSJ_IsCanPut4", "R_CSJ_IsCanTake4"],
+        map: { true: "鏄�", false: "鍚�" }
+      },
+      requestFields: {
+        keys: ["W_CSJ_PutRequest1", "W_CSJ_TakeRequest1", "W_CSJ_PutRequest2", "W_CSJ_TakeRequest2", 
+               "W_CSJ_PutRequest3", "W_CSJ_TakeRequest3", "W_CSJ_PutRequest4", "W_CSJ_TakeRequest4"],
+        map: { true: "鏄�", false: "鍚�" }
+      },
+      finishFields: {
+        keys: ["W_CSJ_PutFinish1", "W_CSJ_TakeFinish1", "W_CSJ_PutFinish2", "W_CSJ_TakeFinish2", 
+               "W_CSJ_PutFinish3", "W_CSJ_TakeFinish3", "W_CSJ_PutFinish4", "W_CSJ_TakeFinish4"],
+        map: { true: "鏄�", false: "鍚�" }
+      },
+      palletTypeFields: {
+        keys: ["R_CSJ_TakePalletType1", "R_CSJ_TakePalletType2", "R_CSJ_TakePalletType3", "R_CSJ_TakePalletType4",
+               "W_CSJ_PutPalletType1", "W_CSJ_PutPalletType2", "W_CSJ_PutPalletType3", "W_CSJ_PutPalletType4"],
+        map: { "-1": "绌虹(-1)", 1: "灏忔墭鐩�(1)", 2: "涓墭鐩�(2)", 3: "澶ф墭鐩�(3)", 4: "鐗瑰ぇ鎵樼洏(4)" }
+      }
+    };
+
+    // 澶勭悊CSJ鍘熷鏁版嵁
+    const processCSJData = (rawData) => {
+      if (!rawData) return {};
+      const processedData = { ...rawData };
+
+      // 澶勭悊鏍稿績鐘舵�佸瓧娈�
+      Object.keys(csjStatusMap).forEach(key => {
+        if (processedData.hasOwnProperty(key)) {
+          processedData[key] = csjStatusMap[key][processedData[key]] || processedData[key];
+        }
       });
-    }
+
+      // 澶勭悊鍒嗙粍瀛楁
+      Object.values(csjFieldGroups).forEach(group => {
+        group.keys.forEach(key => {
+          if (processedData.hasOwnProperty(key)) {
+            processedData[key] = group.map[processedData[key]] || processedData[key];
+          }
+        });
+      });
+
+      return processedData;
+    };
+
+    // 寤惰繜鏇存柊CSJ鏁版嵁锛岄伩鍏嶉珮棰戝埛鏂�
+    const delayedUpdateCSJData = (newRawData) => {
+      if (updateTimer) {
+        clearTimeout(updateTimer);
+      }
+
+      updateTimer = setTimeout(() => {
+        // 鍙鐞嗗寘鍚獵SJ鐗瑰緛瀛楁鐨勬暟鎹�
+        if (newRawData && newRawData.R_CSJ_Status !== undefined) {
+          csjData.value = processCSJData(newRawData);
+          
+          // 鏇存柊鏍峰紡
+          nextTick(() => {
+            const valueElements = document.getElementsByClassName("xcsji");
+            for (let i = 0; i < valueElements.length; i++) {
+              if (valueElements[i].innerHTML === "鏄�") {
+                valueElements[i].style.color = "yellow";
+              } else if (valueElements[i].innerHTML === "鍚�") {
+                valueElements[i].style.color = "red";
+              }
+            }
+          });
+        }
+      }, UPDATE_DELAY);
+    };
+
+    onMounted(() => {
+      // 鍒濆鍔犺浇鏁版嵁
+      const initialData = store.state.homedata;
+      if (initialData && initialData.R_CSJ_Status !== undefined) {
+        csjData.value = processCSJData(initialData);
+      }
+
+      // 鐩戝惉鏁版嵁鍙樺寲锛屽彧澶勭悊CSJ鏁版嵁
+      const unwatch = watch(
+        () => store.state.homedata,
+        (newData) => {
+          if (newData && newData.R_CSJ_Status !== undefined) {
+            delayedUpdateCSJData(newData);
+          }
+        },
+        { deep: true }
+      );
+
+      // 缁勪欢鍗歌浇鏃舵竻鐞�
+      onUnmounted(() => {
+        unwatch();
+        if (updateTimer) {
+          clearTimeout(updateTimer);
+        }
+      });
+    });
+
+    return {
+      csjData
+    };
   }
 };
 </script>
-<style scoped lang="less">
-.message-container {
-  .title {
-    padding-bottom: 10px;
-  }
-  .item {
-    border-bottom: 1px solid #eee;
-    padding: 10px 20px;
-  }
-  .content {
-    color: #7e7e7e;
-    font-size: 13px;
-  }
+
+<style scoped>
+.ding {
+  float: left;
+  width: 20px;
+  height: 20px;
+  margin-top: 7px;
+}
+.yan {
+  color: white;
+  float: left;
+  font-size: 25px;
+}
+.dakuang {
+  width: 250px;
+  height: 50px;
+  position: absolute;
+  top: 150px;
+  left: 200px;
+}
+#xiugai {
+  width: 100px;
+  height: 30px;
+  float: left;
+  border-radius: 5px;
+  text-align: center;
+  line-height: 30px;
+  cursor: pointer;
+  border: 1px solid white;
+  color: white;
+  background: rgba(255, 255, 255, 0.5);
+  font-size: 25px;
+  position: absolute;
+  top: 150px;
+  left: 450px;
+}
+#xiugai:hover {
+  background: #f60;
+}
+#shu1,
+#shu2 {
+  width: 200px;
+  height: 30px;
+  float: left;
+  margin-top: 0px;
+  margin-right: 0px;
+  border-radius: 5px;
+  border: 1px solid white;
+}
+#guan {
+  width: 40px;
+  height: 40px;
+  float: left;
+  font-size: 1.1cqw;
+  text-align: center;
+  line-height: 40px;
+  cursor: pointer;
+  margin-left: 560px;
+  color: white;
+  position: absolute;
+}
+#ti {
+  width: 600px;
+  height: 300px;
+  position: relative;
+  background: rgba(255, 255, 255, 1);
+  border-radius: 10px;
+  top: 230px;
+  left: 35%;
+  display: none;
+  background-image: url("../../img/1.png");
+  background-repeat: no-repeat;
+  background-size: 170%;
+  background-position: -220px 0px;
+}
+.csjuname {
+  width: 100%;
+  height: 5vh;
+  float: left;
+  text-align: center;
+  line-height: 50px;
+  font-weight: 700;
+  font-size: 1.1cqw;
+  color: white;
+}
+.xname {
+  width: 70%;
+  height: 80px;
+  float: left;
+  line-height: 7vh;
+  font-size: 1.1cqw;
+  color: white;
+}
+.xcsji {
+  width: 30%;
+  height: 7vh;
+  float: left;
+  line-height: 50px;
+  font-size: 1.1cqw;
+  color: rgb(242, 242, 50);
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+.csjankuang {
+  width: 45%;
+  height: 3vh;
+  margin-top: 10px;
+  margin-left: 5%;
+  float: left;
+}
+#title {
+  float: left;
+  width: 95%;
+  height: 88vh;
+  margin-top: 40px;
+  margin-left: 3%;
+  background-image: url("../../img/1.png");
+  background-repeat: no-repeat;
+  background-size: 100%;
+  container-type: inline-size;
+}
+#bkuang {
+  width: 100%;
+  height: 55vh;
+  float: left;
+}
+.skuang {
+  width: 31%;
+  height: 55vh;
+  float: left;
+  border-top: none;
+  border-left: none;
+  border-bottom: none;
+  background: rgba(255, 255, 255, 0.2);
+  margin-left: 1.7%;
+  border-radius: 10px;
 }
 </style>
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs"
index e90eadd..4c25144 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs"
@@ -290,5 +290,11 @@
         /// <param name="taskNum"></param>
         /// <returns></returns>
         public WebResponseContent RecWMSTaskCompleted(int taskNum);
+        /// <summary>
+        /// 鎺ユ敹wcs浠诲姟鍙栨秷
+        /// </summary>
+        /// <param name="taskNum"></param>
+        /// <returns></returns>
+        public WebResponseContent RecWMSTaskHandCancel(int taskNum);
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs"
index 4e0d43d..d5a346d 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs"
@@ -121,7 +121,7 @@
                 {
                     return WebResponseContent.Instance.Error("鏈壘鍒拌浠诲姟淇℃伅");
                 }
-                if(task.TaskState == TaskStatusEnum.SC_Executing.ObjToInt())
+                if (task.TaskState == TaskStatusEnum.SC_Executing.ObjToInt() || (task.DeviceCode.Contains("SC01")&& task.TaskState == TaskStatusEnum.Pending.ObjToInt()))
                 {
                     _taskService.UpdateTask(task, TaskStatusEnum.SC_Execute);
                 }
@@ -164,5 +164,11 @@
                 return WebResponseContent.Instance.Error(ex.Message);
             }
         }
+
+        [HttpPost, HttpGet, Route("RecWMSTaskHandCancel"), AllowAnonymous]
+        public WebResponseContent RecWMSTaskHandCancel(int taskNum)
+        {
+            return Service.RecWMSTaskHandCancel(taskNum);
+        }
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs"
index 575691f..2422365 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs"
@@ -1010,5 +1010,28 @@
                 return WebResponseContent.Instance.Error(ex.Message);
             }
         }
+
+        /// <summary>
+        /// 鎺ュ彈WMS鎵嬪姩鍙栨秷浠诲姟
+        /// </summary>
+        /// <param name="taskNum"></param>
+        /// <returns></returns>
+        public WebResponseContent RecWMSTaskHandCancel(int taskNum)
+        {
+            try
+            {
+                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
+                if (task != null)
+                {
+                    task.TaskState = TaskStatusEnum.Cancel.ObjToInt();
+                    BaseDal.DeleteAndMoveIntoHty(task, OperateTypeEnum.浜哄伐鍒犻櫎);
+                }
+                return WebResponseContent.Instance.OK();
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\235\277\346\235\220\344\273\223/BCReadData.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\235\277\346\235\220\344\273\223/BCReadData.cs"
new file mode 100644
index 0000000..aed91ab
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\235\277\346\235\220\344\273\223/BCReadData.cs"
@@ -0,0 +1,41 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEAWCS_Tasks.鏉挎潗浠�
+{
+    public class BCReadData
+    {
+        /// <summary>
+        /// 鍫嗗灈鏈虹姸鎬�
+        /// </summary>
+        public short R_BC_Status;
+
+        /// <summary>
+        /// 鍫嗗灈鏈烘墜鑷姩鐘舵��
+        /// </summary>
+        public short R_BC_AutoStatus;
+
+        /// <summary>
+        /// 褰撳墠姝e湪鎵ц鐨勪换鍔″彿
+        /// </summary>
+        public int R_BC_TaskNum;
+
+        /// <summary>
+        /// 鍫嗗灈鏈哄伐浣滅姸鎬�
+        /// </summary>
+        public short R_BC_WorkStatus;
+
+        /// <summary>
+        /// 浣滀笟绫诲瀷
+        /// </summary>
+        public short R_BC_WorkType;
+
+        /// <summary>
+        /// 鎵樼洏绫诲瀷
+        /// </summary>
+        public short R_BC_TrayType;
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\235\277\346\235\220\344\273\223/StackerCraneJob_BC.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\235\277\346\235\220\344\273\223/StackerCraneJob_BC.cs"
index 5574504..6e7ce35 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\235\277\346\235\220\344\273\223/StackerCraneJob_BC.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\235\277\346\235\220\344\273\223/StackerCraneJob_BC.cs"
@@ -31,6 +31,9 @@
 using Autofac.Core;
 using WIDESEAWCS_DTO.TaskInfo;
 using AutoMapper;
+using WIDESEAWCS_Tasks.鏉挎潗浠�;
+using HslCommunication.WebSocket;
+using WIDESEAWCS_Tasks.娴嬭瘯鏋朵粨;
 
 namespace WIDESEAWCS_Tasks
 {
@@ -45,10 +48,12 @@
         private readonly IRouterService _routerService;
         private readonly IStationMangerRepository _stationMangerRepository;
         private readonly IRouterRepository _routerRepository;
+        public static BCReadData bCReadData = new BCReadData();
         private List<Dt_ApiInfo> apiInfos;
         private readonly List<Dt_WarehouseDevice> warehouseDevices;
+        private WebSocketServer _webSocketServer;
 
-        public StackerCraneJob_BC(IMapper mapper, ITaskService taskService, ICacheService cacheService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService, IStationMangerRepository stationMangerRepository, IRouterRepository routerRepository)
+        public StackerCraneJob_BC(IMapper mapper, ITaskService taskService, ICacheService cacheService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService, IStationMangerRepository stationMangerRepository, IRouterRepository routerRepository,WebSocketServer webSocketServer)
         {
             _mapper = mapper;
             _taskService = taskService;
@@ -58,6 +63,7 @@
             _stationMangerRepository = stationMangerRepository;
             _cacheService = cacheService;
             _routerRepository = routerRepository;
+            _webSocketServer = webSocketServer;
 
             string? apiInfoStr = _cacheService.Get("apiInfos");
             if (!string.IsNullOrEmpty(apiInfoStr))
@@ -127,6 +133,14 @@
                             }
                         }
                     }
+                    bCReadData.R_BC_Status = ((short)commonStackerCrane.StackerCraneStatusValue);
+                    bCReadData.R_BC_AutoStatus = ((short)commonStackerCrane.StackerCraneAutoStatusValue);
+                    bCReadData.R_BC_WorkStatus = ((short)commonStackerCrane.StackerCraneWorkStatusValue);
+                    bCReadData.R_BC_TaskNum = commonStackerCrane.CurrentTaskNum.ObjToInt();
+                    bCReadData.R_BC_WorkType = commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.WorkType);
+                    bCReadData.R_BC_TrayType = commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.TrayType);
+                    string bCData = JsonConvert.SerializeObject(bCReadData);
+                    _webSocketServer.PublishAllClientPayload(bCData);
                 }
             }
             catch (Exception ex)
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\265\213\350\257\225\346\236\266\344\273\223/CSJReadData.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\265\213\350\257\225\346\236\266\344\273\223/CSJReadData.cs"
new file mode 100644
index 0000000..756296d
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\265\213\350\257\225\346\236\266\344\273\223/CSJReadData.cs"
@@ -0,0 +1,108 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEAWCS_Tasks.娴嬭瘯鏋朵粨
+{
+    public class CSJReadData
+    {
+        /// <summary>
+        /// 鍫嗗灈鏈虹姸鎬�
+        /// </summary>
+        public short R_CSJ_Status;
+
+        /// <summary>
+        /// 鍫嗗灈鏈烘墜鑷姩鐘舵��
+        /// </summary>
+        public short R_CSJ_AutoStatus;
+
+        /// <summary>
+        /// 褰撳墠姝e湪鎵ц鐨勪换鍔″彿
+        /// </summary>
+        public int R_CSJ_TaskNum;
+
+        /// <summary>
+        /// 鍫嗗灈鏈哄伐浣滅姸鎬�
+        /// </summary>
+        public short R_CSJ_WorkStatus;
+
+        /// <summary>
+        /// 浣滀笟绫诲瀷
+        /// </summary>
+        public short R_CSJ_WorkType;
+
+        /// <summary>
+        /// 鎵樼洏绫诲瀷
+        /// </summary>
+        public short R_CSJ_TrayType;
+
+
+        ///鍚勭珯鍙拌鍙�103
+
+        ///鍙栬揣鎵樼洏绫诲瀷(璇�)
+        public short R_CSJ_TakePalletType3;
+        /// <summary>
+        /// 鏀捐揣鎵樼洏绫诲瀷(鍐�)
+        /// </summary>
+        public short W_CSJ_PutPalletType3;
+        /// <summary>
+        /// 鏄惁鍏佽鏀捐揣(璇�)
+        /// </summary>
+        public bool R_CSJ_IsCanPut3;
+        /// <summary>
+        /// 鏄惁鍏佽鍙栬揣(璇�)
+        /// </summary>
+        public bool R_CSJ_IsCanTake3;
+        /// <summary>
+        /// 鏀捐揣璇锋眰(鍐�)
+        /// </summary>
+        public bool W_CSJ_PutRequest3;
+        /// <summary>
+        /// 鏀捐揣瀹屾垚(鍐�)
+        /// </summary>
+        public bool W_CSJ_PutFinish3;
+        /// <summary>
+        /// 鍙栬揣璇锋眰(鍐�)
+        /// </summary>
+        public bool W_CSJ_TakeRequest3;
+        /// <summary>
+        /// 鍙栬揣瀹屾垚(鍐�)
+        /// </summary>
+        public bool W_CSJ_TakeFinish3;
+
+        ///鍚勭珯鍙拌鍙�104
+
+        ///鍙栬揣鎵樼洏绫诲瀷(璇�)
+        public short R_CSJ_TakePalletType4;
+        /// <summary>
+        /// 鏀捐揣鎵樼洏绫诲瀷(鍐�)
+        /// </summary>
+        public short W_CSJ_PutPalletType4;
+        /// <summary>
+        /// 鏄惁鍏佽鏀捐揣(璇�)
+        /// </summary>
+        public bool R_CSJ_IsCanPut4;
+        /// <summary>
+        /// 鏄惁鍏佽鍙栬揣(璇�)
+        /// </summary>
+        public bool R_CSJ_IsCanTake4;
+        /// <summary>
+        /// 鏀捐揣璇锋眰(鍐�)
+        /// </summary>
+        public bool W_CSJ_PutRequest4;
+        /// <summary>
+        /// 鏀捐揣瀹屾垚(鍐�)
+        /// </summary>
+        public bool W_CSJ_PutFinish4;
+        /// <summary>
+        /// 鍙栬揣璇锋眰(鍐�)
+        /// </summary>
+        public bool W_CSJ_TakeRequest4;
+        /// <summary>
+        /// 鍙栬揣瀹屾垚(鍐�)
+        /// </summary>
+        public bool W_CSJ_TakeFinish4;
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\265\213\350\257\225\346\236\266\344\273\223/GroundStationJob_CSJ.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\265\213\350\257\225\346\236\266\344\273\223/GroundStationJob_CSJ.cs"
index d2ae90d..d72b0aa 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\265\213\350\257\225\346\236\266\344\273\223/GroundStationJob_CSJ.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\265\213\350\257\225\346\236\266\344\273\223/GroundStationJob_CSJ.cs"
@@ -89,6 +89,24 @@
                                 _taskService.UpdateTask(task, TaskStatusEnum.SC_Execute, currentAddress: stationManger.StackerCraneStationCode, targetAddress: locationCode, nextAddress: locationCode, deviceCode: stationManger.StackerCraneCode);
                             }
                         }
+                        if (item.StationCode == "103")
+                        {
+                            StackerCraneJob_CSJ.cSJReadData.R_CSJ_IsCanPut3 = device.GetValue<GroundStationDBName, bool>(GroundStationDBName.R_IsCanPut, item.StationCode);
+                            StackerCraneJob_CSJ.cSJReadData.R_CSJ_IsCanTake3 = device.GetValue<GroundStationDBName, bool>(GroundStationDBName.R_IsCanTake, item.StationCode);
+                            StackerCraneJob_CSJ.cSJReadData.W_CSJ_PutRequest3 = device.GetValue<GroundStationDBName, bool>(GroundStationDBName.W_PutRequest, item.StationCode);
+                            StackerCraneJob_CSJ.cSJReadData.W_CSJ_PutFinish3 = device.GetValue<GroundStationDBName, bool>(GroundStationDBName.W_PutFinish, item.StationCode);
+                            StackerCraneJob_CSJ.cSJReadData.W_CSJ_TakeRequest3 = device.GetValue<GroundStationDBName, bool>(GroundStationDBName.W_TakeRequest, item.StationCode);
+                            StackerCraneJob_CSJ.cSJReadData.W_CSJ_TakeFinish3 = device.GetValue<GroundStationDBName, bool>(GroundStationDBName.W_TakeFinish, item.StationCode);
+                        }
+                        else if (item.StationCode == "104")
+                        {
+                            StackerCraneJob_CSJ.cSJReadData.R_CSJ_IsCanPut4 = device.GetValue<GroundStationDBName, bool>(GroundStationDBName.R_IsCanPut, item.StationCode);
+                            StackerCraneJob_CSJ.cSJReadData.R_CSJ_IsCanTake4 = device.GetValue<GroundStationDBName, bool>(GroundStationDBName.R_IsCanTake, item.StationCode);
+                            StackerCraneJob_CSJ.cSJReadData.W_CSJ_PutRequest4 = device.GetValue<GroundStationDBName, bool>(GroundStationDBName.W_PutRequest, item.StationCode);
+                            StackerCraneJob_CSJ.cSJReadData.W_CSJ_PutFinish4 = device.GetValue<GroundStationDBName, bool>(GroundStationDBName.W_PutFinish, item.StationCode);
+                            StackerCraneJob_CSJ.cSJReadData.W_CSJ_TakeRequest4 = device.GetValue<GroundStationDBName, bool>(GroundStationDBName.W_TakeRequest, item.StationCode);
+                            StackerCraneJob_CSJ.cSJReadData.W_CSJ_TakeFinish4 = device.GetValue<GroundStationDBName, bool>(GroundStationDBName.W_TakeFinish, item.StationCode);
+                        }
                     }
                     catch (Exception ex)
                     {
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\265\213\350\257\225\346\236\266\344\273\223/StackerCraneJob_CSJ.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\265\213\350\257\225\346\236\266\344\273\223/StackerCraneJob_CSJ.cs"
index 1672eaf..b12e821 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\265\213\350\257\225\346\236\266\344\273\223/StackerCraneJob_CSJ.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\265\213\350\257\225\346\236\266\344\273\223/StackerCraneJob_CSJ.cs"
@@ -1,4 +1,5 @@
 锘縰sing AutoMapper;
+using HslCommunication.WebSocket;
 using Microsoft.AspNetCore.Components.Routing;
 using Newtonsoft.Json;
 using Quartz;
@@ -27,6 +28,7 @@
 using WIDESEAWCS_QuartzJob.StackerCrane.Enum;
 using WIDESEAWCS_Tasks.HoisterJob;
 using WIDESEAWCS_Tasks.StackerCraneJob;
+using WIDESEAWCS_Tasks.娴嬭瘯鏋朵粨;
 
 namespace WIDESEAWCS_Tasks
 {
@@ -36,13 +38,15 @@
         private readonly IMapper _mapper;
         private readonly ICacheService _cacheService;
         private readonly ITaskService _taskService;
+        public static CSJReadData cSJReadData = new CSJReadData();
         private readonly ITaskExecuteDetailService _taskExecuteDetailService;
         private readonly ITaskRepository _taskRepository;
         private readonly IRouterService _routerService;
         private readonly IStationMangerRepository _stationMangerRepository;
+        private WebSocketServer _webSocketServer;
         private List<Dt_ApiInfo> apiInfos;
 
-        public StackerCraneJob_CSJ(ITaskService taskService, ICacheService cacheService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService, IStationMangerRepository stationMangerRepository, IMapper mapper)
+        public StackerCraneJob_CSJ(ITaskService taskService, ICacheService cacheService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService, IStationMangerRepository stationMangerRepository, IMapper mapper, WebSocketServer webSocketServer)
         {
             _taskService = taskService;
             _taskExecuteDetailService = taskExecuteDetailService;
@@ -51,6 +55,7 @@
             _stationMangerRepository = stationMangerRepository;
             _cacheService = cacheService;
             _mapper = mapper;
+            _webSocketServer = webSocketServer;
 
             string? apiInfoStr = _cacheService.Get("apiInfos");
             if (!string.IsNullOrEmpty(apiInfoStr))
@@ -101,6 +106,14 @@
                             }
                         }
                     }
+                    cSJReadData.R_CSJ_Status = ((short)commonStackerCrane.StackerCraneStatusValue);
+                    cSJReadData.R_CSJ_AutoStatus = ((short)commonStackerCrane.StackerCraneAutoStatusValue);
+                    cSJReadData.R_CSJ_WorkStatus = ((short)commonStackerCrane.StackerCraneWorkStatusValue);
+                    cSJReadData.R_CSJ_TaskNum = commonStackerCrane.CurrentTaskNum.ObjToInt();
+                    cSJReadData.R_CSJ_WorkType = commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.WorkType);
+                    cSJReadData.R_CSJ_TrayType = commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.TrayType);
+                    string cSJData = JsonConvert.SerializeObject(cSJReadData);
+                    _webSocketServer.PublishAllClientPayload(cSJData);
                 }
             }
             catch (Exception ex)
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/outbound/outboundOrderDetail.js" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/outbound/outboundOrderDetail.js"
index 24e1d94..79d0141 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/outbound/outboundOrderDetail.js"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/outbound/outboundOrderDetail.js"
@@ -45,12 +45,20 @@
         this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
       },
       modelOpenAfter(row) {
-        //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
-        //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
-        //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
-        //(3)this.editFormFields.瀛楁='xxx';
-        //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
-        //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+        // 鐐瑰嚮缂栬緫鎸夐挳寮瑰嚭妗嗗悗鎵ц
+            if (this.currentAction === 'Edit') { // 鍒ゆ柇褰撳墠鏄紪杈戞搷浣�
+                // 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛锛堝亣璁句粠鍏ㄥ眬鍙橀噺鑾峰彇锛屽叿浣撴牴鎹綘鐨勯」鐩疄鐜帮級
+                const currentUser = this.$store.state.userInfo?.username || '琚汉宸ヤ慨鏀�';
+                
+                // 鑾峰彇褰撳墠鏃堕棿骞舵牸寮忓寲涓哄悗绔渶瑕佺殑鏍煎紡
+                const now = new Date();
+                const formattedDate = now.toISOString().slice(0, 19).replace('T', ' ');
+                
+                // 璁剧疆淇敼浜哄瓧娈�
+                this.editFormFields.modifier = currentUser;
+                // 璁剧疆淇敼鏃堕棿瀛楁
+                this.editFormFields.modifyDate = formattedDate;
+            }
       }
     }
   };
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/stock/stockInfo.js" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/stock/stockInfo.js"
index 6292426..99ff80d 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/stock/stockInfo.js"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/stock/stockInfo.js"
@@ -46,12 +46,20 @@
         this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
       },
       modelOpenAfter(row) {
-        //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
-        //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
-        //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
-        //(3)this.editFormFields.瀛楁='xxx';
-        //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
-        //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+        // 鐐瑰嚮缂栬緫鎸夐挳寮瑰嚭妗嗗悗鎵ц
+            if (this.currentAction === 'Edit') { // 鍒ゆ柇褰撳墠鏄紪杈戞搷浣�
+                // 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛锛堝亣璁句粠鍏ㄥ眬鍙橀噺鑾峰彇锛屽叿浣撴牴鎹綘鐨勯」鐩疄鐜帮級
+                const currentUser = this.$store.state.userInfo?.username || 'system';
+                
+                // 鑾峰彇褰撳墠鏃堕棿骞舵牸寮忓寲涓哄悗绔渶瑕佺殑鏍煎紡
+                const now = new Date();
+                const formattedDate = now.toISOString().slice(0, 19).replace('T', ' ');
+                
+                // 璁剧疆淇敼浜哄瓧娈�
+                this.editFormFields.modifier = currentUser;
+                // 璁剧疆淇敼鏃堕棿瀛楁
+                this.editFormFields.modifyDate = formattedDate;
+            }
       }
     }
   };
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/stock/stockInfoDetail.js" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/stock/stockInfoDetail.js"
index 24e1d94..43dce0e 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/stock/stockInfoDetail.js"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/stock/stockInfoDetail.js"
@@ -45,12 +45,20 @@
         this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
       },
       modelOpenAfter(row) {
-        //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
-        //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
-        //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
-        //(3)this.editFormFields.瀛楁='xxx';
-        //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
-        //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+        // 鐐瑰嚮缂栬緫鎸夐挳寮瑰嚭妗嗗悗鎵ц
+            if (this.currentAction === 'Edit') { // 鍒ゆ柇褰撳墠鏄紪杈戞搷浣�
+                // 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛锛堝亣璁句粠鍏ㄥ眬鍙橀噺鑾峰彇锛屽叿浣撴牴鎹綘鐨勯」鐩疄鐜帮級
+                const currentUser = this.$store.state.userInfo?.username || 'system';
+                
+                // 鑾峰彇褰撳墠鏃堕棿骞舵牸寮忓寲涓哄悗绔渶瑕佺殑鏍煎紡
+                const now = new Date();
+                const formattedDate = now.toISOString().slice(0, 19).replace('T', ' ');
+                
+                // 璁剧疆淇敼浜哄瓧娈�
+                this.editFormFields.modifier = currentUser;
+                // 璁剧疆淇敼鏃堕棿瀛楁
+                this.editFormFields.modifyDate = formattedDate;
+            }
       }
     }
   };
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/taskinfo/task.js" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/taskinfo/task.js"
index 451917f..924e36f 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/taskinfo/task.js"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/taskinfo/task.js"
@@ -32,7 +32,7 @@
           var param = rows[0].taskNum;
           var warehouseId = rows[0].warehouseId;
           this.http
-            .post("api/Task/TaskHandCancel?taskNum="+param+"&&warehouseId="+warehouseId, "鏁版嵁澶勭悊涓�...")
+            .post("api/Task/TaskHandCancel?taskNum="+param, "鏁版嵁澶勭悊涓�...")
             .then((x) => {
               if (x.status) {
                 this.$Message.success('浠诲姟鍙栨秷鎴愬姛.');
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/inbound/inboundOrder.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/inbound/inboundOrder.vue"
index 87db604..faba829 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/inbound/inboundOrder.vue"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/inbound/inboundOrder.vue"
@@ -115,6 +115,7 @@
         require: true,
         align: "left",
       },
+
       {
         field: "inboundOrderNo",
         title: "鍗曟嵁缂栧彿",
@@ -154,6 +155,7 @@
         align: "left",
         bind: { key: "inboundState", data: [] },
       },
+
       {
         field: "createType",
         title: "鍒涘缓鏂瑰紡",
@@ -163,6 +165,13 @@
         bind: { key: "createType", data: [] },
       },
       {
+        field: "id",
+        title: "鍏ュ簱鍗曚富閿�",
+        type: "int",
+        width: 90,
+        align: "left",
+      },
+      {
         field: "creater",
         title: "鍒涘缓浜�",
         type: "string",
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/inbound/inboundOrderDetail.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/inbound/inboundOrderDetail.vue"
index 5046820..ad1446e 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/inbound/inboundOrderDetail.vue"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/inbound/inboundOrderDetail.vue"
@@ -90,11 +90,20 @@
         deviceStatus: "",
       });
       const searchFormOptions = ref([
-        [
-          { title: "璁惧缂栧彿", field: "deviceCode" },
-          { title: "璁惧绫诲瀷", field: "deviceType" },
-          { title: "璁惧鐘舵��", field: "deviceStatus" },
-        ],
+      [
+        { title: "鐗╂枡缂栧彿", field: "materielCode", type: "like" },
+        { title: "鐗╂枡鍚嶇О", field: "materielName", type: "like" },
+        { title: "鍏ュ簱鍗曚富閿�", field: "orderId", type: "int" },
+        { title: "鎵规鍙�", field: "batchNo", type: "like" },
+      ],
+      [
+        {
+          field: "orderDetailStatus",title: "璁㈠崟鏄庣粏鐘舵��",type: "select",dataKey:"orderDetailStatusEnum", data: []
+        },
+        { title: "鍒涘缓鑰�", field: "creater", type: "like" },
+        { title: "鍒涘缓鏃堕棿", field: "createDate", type: "datetime" },
+      ],
+      
       ]);
       const columns = ref([
         {
@@ -162,6 +171,7 @@
           type: "string",
           width: 180,
           align: "left",
+          bind: { key: "orderDetailStatusEnum", data: [] },
         },
         {
           field: "creater",
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/outbound/outboundOrder.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/outbound/outboundOrder.vue"
index 2a93044..bbfcc76 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/outbound/outboundOrder.vue"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/outbound/outboundOrder.vue"
@@ -181,6 +181,13 @@
         bind: { key: "createType", data: [] },
       },
       {
+          field: "id",
+          title: "鍑哄簱鍗曚富閿�",
+          type: "string",
+          width: 90,
+          align: "left",
+        },
+      {
         field: "departmentCode",
         title: "淇敼鏃堕棿",
         type: "string",
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/outbound/outboundOrderDetail.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/outbound/outboundOrderDetail.vue"
index e992c4c..a6540fa 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/outbound/outboundOrderDetail.vue"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/outbound/outboundOrderDetail.vue"
@@ -38,51 +38,91 @@
       });
       const editFormOptions = ref([
         [
-          {
-            title: "璁惧缂栧彿",
-            required: true,
-            field: "deviceCode",
-            type: "string",
-          },
-          {
-            title: "璁惧鍚嶇О",
-            required: true,
-            field: "deviceName",
-            type: "string",
-          },
-          {
-            title: "璁惧绫诲瀷",
-            required: true,
-            field: "deviceType",
-            type: "string",
-          },
-          {
-            title: "璁惧鐘舵��",
-            required: true,
-            field: "deviceStatus",
-            type: "string",
-          },
-        ],
-        [
-          { title: "璁惧IP", required: true, field: "deviceIp", type: "string" },
-          {
-            title: "璁惧绔彛",
-            required: true,
-            field: "devicePort",
-            type: "string",
-          },
-          {
-            title: "PLC绫诲瀷",
-            required: true,
-            field: "devicePlcType",
-            type: "string",
-          },
-          {
-            title: "澶囨敞",
-            field: "deviceRemark",
-            type: "string",
-          },
-        ],
+        {
+          title: "搴撳瓨涓婚敭",
+          readonly:true,
+          field: "orderId",
+          type: "string",
+        },
+        
+        {
+          title: "鐗╂枡缂栧彿",
+          required: true,
+          field: "materielCode",
+          type: "string",
+          readonly: true,
+        },
+        {
+          title: "鐗╂枡鍚嶇О",
+          required: true,
+          field: "materielName",
+          type: "string",
+        },
+        {
+          title: "琛屽彿",
+          readonly: true,
+          field: "rowNo",
+          type: "string",
+        },
+        
+      ],
+      [
+        {
+          title: "鎵规鍙�",
+          field: "batchNo",
+          type: "string",
+        },
+        {
+          field: "orderQuantity",
+          title: "鍗曟嵁鏁伴噺",
+          type: "string",
+          width: 90,
+          align: "left",
+          readonly: true,
+        },
+        {
+          field: "lockQuantity",
+          title: "閿佸畾鏁伴噺",
+          type: "int",
+          width: 120,
+          align: "left",
+          readonly: true,
+        },
+        {
+          field: "overOutQuantity",
+          title: "宸插嚭鏁伴噺",
+          type: "string",
+          width: 200,
+          align: "left",
+          readonly: true,
+        },
+        
+      ],
+      [
+        {
+          field: "orderDetailStatus",
+          title: "璁㈠崟鏄庣粏鐘舵��",
+          type: "select",dataKey:"orderDetailStatusEnum",
+          data: [],
+          readonly: true,
+        },
+        {
+        field: "modifier",
+        title: "淇敼浜�",
+        type: "string",
+        width: 100,
+        align: "left",
+        readonly:true,
+        },
+        {
+          field: "modifyDate",
+          title: "淇敼鏃堕棿",
+          type: "datetime",
+          width: 160,
+          align: "left",
+          readonly:true,
+        },
+      ],
       ]);
       const searchFormFields = ref({
         deviceCode: "",
@@ -91,10 +131,18 @@
       });
       const searchFormOptions = ref([
         [
-          { title: "璁惧缂栧彿", field: "deviceCode" },
-          { title: "璁惧绫诲瀷", field: "deviceType" },
-          { title: "璁惧鐘舵��", field: "deviceStatus" },
-        ],
+        { title: "鐗╂枡缂栧彿", field: "materielCode", type: "like" },
+        { title: "鐗╂枡鍚嶇О", field: "materielName", type: "like" },
+        { title: "鍑哄簱鍗曚富閿�", field: "orderId", type: "int" },
+        { title: "鎵规鍙�", field: "batchNo", type: "like" },
+      ],
+      [
+        {
+          field: "orderDetailStatus",title: "璁㈠崟鏄庣粏鐘舵��",type: "select",dataKey:"orderDetailStatusEnum", data: []
+        },
+        { title: "鍒涘缓鑰�", field: "creater", type: "like" },
+        { title: "鍒涘缓鏃堕棿", field: "createDate", type: "datetime" },
+      ],
       ]);
       const columns = ref([
       {
@@ -112,7 +160,6 @@
           type: "string",
           width: 90,
           align: "left",
-          hidden: true,
         },
         {
           field: "materielCode",
@@ -162,6 +209,7 @@
           type: "string",
           width: 180,
           align: "left",
+          bind: { key: "orderDetailStatusEnum", data: [] },
         },
         {
           field: "creater",
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/stock/stockInfo.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/stock/stockInfo.vue"
index 22f2eea..f4d0f57 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/stock/stockInfo.vue"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/stock/stockInfo.vue"
@@ -38,8 +38,27 @@
       });
       const editFormOptions = ref([
        [
-        {field:'palletCode',title:'鎵樼洏缂栧彿',type:'string'},
-        {field:'locationCode',title:'璐т綅缂栧彿',type:'string'},
+          { title: "鎵樼洏缂栧彿", field: "palletCode", type :"string"},
+          { title: "璐т綅缂栧彿", field: "locationCode",type:"string",readonly: true, },
+          { title: "鎵�灞炰粨搴�", field: "warehouseId",type: "select",dataKey: "warehouses",data: [],readonly: true,},
+          {title: "搴撳瓨鏄庣粏鐘舵��",field: "stockStatus",type: "select",dataKey:"stockStatusEmun", data: [],readonly: true,},
+          
+       ],
+       [
+       { title: "鎵樼洏绫诲瀷", field: "palletType", type :"select",dataKey:"locationTypeEnum",data:[]},
+        {
+        field: "modifier",
+        title: "淇敼浜�",
+        type: "string",
+        readonly: true,
+        },
+        {
+          field: "modifyDate",
+          title: "淇敼鏃堕棿",
+          type: "datetime",
+          readonly: true,
+        },
+          
        ]
       ]);
       const searchFormFields = ref({
@@ -48,8 +67,10 @@
       });
       const searchFormOptions = ref([
         [
-          { title: "鎵樼洏缂栧彿", field: "palletCode" },
-          { title: "璐т綅缂栧彿", field: "locationCode" },
+          { title: "鎵樼洏缂栧彿", field: "palletCode", type :"like"},
+          { title: "璐т綅缂栧彿", field: "locationCode",type:"like" },
+          { title: "鎵�灞炰粨搴�", field: "warehouseId",type: "select",dataKey: "warehouses",data: [],},
+          {title: "搴撳瓨鏄庣粏鐘舵��",field: "status",type: "select",dataKey:"stockStatusEmun", data: []},
         ],
       ]);
       const columns = ref([
@@ -64,6 +85,13 @@
           align: "left",
         },
         {
+          field: "id",
+          title: "搴撳瓨涓婚敭",
+          type: "string",
+          width: 90,
+          align: "left",
+        },
+        {
           field: "palletCode",
           title: "鎵樼洏缂栧彿",
           type: "string",
@@ -71,12 +99,28 @@
           align: "left",
         },
         {
+        field: "palletType",
+        title: "鎵樼洏绫诲瀷",
+        type: "select",
+        width: 120,
+        align: "left",
+        bind: { key: "locationTypeEnum", data: [] },
+      },
+        {
           field: "locationCode",
           title: "璐т綅缂栧彿",
           type: "string",
           width: 150,
           align: "left",
         },
+        {
+        field: "stockStatus",
+        title: "搴撳瓨鏄庣粏鐘舵��",
+        type: "string",
+        width: 120,
+        align: "left",
+        bind: { key: "stockStatusEmun", data: [] },
+      },
         // {
         //   field: "isFull",
         //   title: "鏄惁婊$洏",
@@ -113,7 +157,6 @@
           type: "string",
           width: 100,
           align: "left",
-          hidden:true
         },
         {
           field: "modifyDate",
@@ -121,7 +164,6 @@
           type: "datetime",
           width: 160,
           align: "left",
-          hidden:true
         },
         {
           field: "remark",
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/stock/stockInfoDetail.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/stock/stockInfoDetail.vue"
index e601c24..3d264d4 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/stock/stockInfoDetail.vue"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/stock/stockInfoDetail.vue"
@@ -91,9 +91,9 @@
         },
         {
           title: "鍑哄簱鏁伴噺",
-          required: true,
           field: "outboundQuantity",
           type: "string",
+          readonly:true
         },
         {
           title: "搴撳瓨鏄庣粏鐘舵��",
@@ -107,6 +107,22 @@
           field: "inboundOrderRowNo",
           type: "string",
         },
+        {
+        field: "modifier",
+        title: "淇敼浜�",
+        type: "string",
+        width: 100,
+        align: "left",
+        hidden:true
+      },
+      {
+        field: "modifyDate",
+        title: "淇敼鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+        hidden:true
+      },
       ],
       
     ]);
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/APIEnum/APIEnum.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/APIEnum/APIEnum.cs"
index d32e6fa..3a3404c 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/APIEnum/APIEnum.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/APIEnum/APIEnum.cs"
@@ -82,5 +82,11 @@
         /// </summary>
         [Description("QMS鏉ユ枡妫�楠屾帴鍙�")]
         WMS_QMSReceiveCheckApi,
+
+        /// <summary>
+        /// 鍥炶皟WCS浠诲姟瀹屾垚
+        /// </summary>
+        [Description("鍥炶皟WCS浠诲姟鍙栨秷")]
+        FeedBackWCSTaskHandCancel,
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs"
index 02de6cb..c52acc1 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs"
@@ -397,6 +397,6 @@
         /// <param name="taskNum"></param>
         /// <param name="warehouseId"></param>
         /// <returns></returns>
-        public Task<WebResponseContent> TaskHandCancel(int taskNum, int warehouseId);
+        public Task<WebResponseContent> TaskHandCancel(int taskNum);
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs"
index ac08ba2..fc6cb0c 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs"
@@ -414,7 +414,7 @@
                 var requestBody = new
                 {
                     msgtype = "text",
-                    text = new { content = "灏忔磱涓讳汉璇�: 灏忔磱瑕佸拰灏忓澶╀笅绗竴鏈�鏈�濂�" },
+                    text = new { content = "閽夐拤娑堟伅鎺ㄩ��" },
                 };
                 var jsonBody = JsonConvert.SerializeObject(requestBody);
                 var content = new StringContent(jsonBody, Encoding.UTF8, "application/json");
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs"
index 8b82537..5677732 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs"
@@ -243,6 +243,7 @@
                 if (task.TaskType == TaskTypeEnum.MesPalletLargeReturn.ObjToInt() || task.TaskType == TaskTypeEnum.MesPalletSmallReturn.ObjToInt())
                 {
                     task.TaskStatus = TaskStatusEnum.Finish.ObjToInt();
+                    FeedBackWCSTaskCompleted(taskNum);
                     _unitOfWorkManage.BeginTran();
                     BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.浜哄伐瀹屾垚 : OperateTypeEnum.鑷姩瀹屾垚);
                     _stockService.StockInfoService.Repository.DeleteAndMoveIntoHty(stockInfo, App.User.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚);
@@ -271,6 +272,7 @@
                 {
                     stockInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
                     task.TaskStatus = TaskStatusEnum.Finish.ObjToInt();
+                    FeedBackWCSTaskCompleted(taskNum);
                     stockInfo.Details.ForEach(x =>
                     {
                         x.Status = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
@@ -1156,7 +1158,7 @@
             return content;
         }
 
-        public WebResponseContent InboundTaskHandCancel(int taskNum, int warehouseId)
+        public WebResponseContent InboundTaskHandCancel(int taskNum)
         {
             try
             {
@@ -1165,10 +1167,70 @@
                 {
                     return WebResponseContent.Instance.Error($"鏈壘鍒拌浠诲姟淇℃伅");
                 }
+                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == task.WarehouseId);
+                if (warehouse.WarehouseType == WarehouseTypEnum.鎴愬搧.ToString())
+                {
+                    if(task.TaskType == TaskTypeEnum.EmptyProductBack.ObjToInt())
+                    {
+                        task.TaskStatus = TaskStatusEnum.Cancel.ObjToInt();
+                        FeedBackWCSTaskHandCancel(taskNum);
+                        _unitOfWorkManage.BeginTran();
+                        BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.浜哄伐鍒犻櫎 : OperateTypeEnum.鑷姩鍒犻櫎);
+                        _unitOfWorkManage.CommitTran();
+                        return WebResponseContent.Instance.OK();
+                    }
+                    Dt_ProStockInfo proStockInfo = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>().Where(x => x.PalletCode == task.PalletCode).Includes(x => x.proStockInfoDetails).First();
+                    if (proStockInfo == null)
+                    {
+                        return WebResponseContent.Instance.Error($"鏈壘鍒拌兌妗嗕负{task.PalletCode}缁勭洏淇℃伅");
+                    }
+                    Dt_LocationInfo prolocationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress);
+                    if (prolocationInfo != null)
+                    {
+                        if (prolocationInfo.LocationStatus == LocationStatusEnum.InStock.ObjToInt())
+                        {
+                            return WebResponseContent.Instance.Error($"璐т綅鐘舵�佷笉姝g‘");
+                        }
+                        prolocationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt();
+                    }
+                    if(task.TaskType == TaskTypeEnum.InProduct.ObjToInt())
+                    {
+                        task.TaskStatus = TaskStatusEnum.Cancel.ObjToInt();
+                        _unitOfWorkManage.BeginTran();
+                        FeedBackWCSTaskHandCancel(taskNum);
+                        BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.浜哄伐鍒犻櫎 : OperateTypeEnum.鑷姩鍒犻櫎);
+                        _stockService.ProStockInfoService.Repository.DeleteAndMoveIntoHty(proStockInfo, App.User.UserId == 0 ? OperateTypeEnum.鑷姩鍒犻櫎 : OperateTypeEnum.浜哄伐鍒犻櫎);
+                        _stockService.ProStockInfoDetailService.Repository.DeleteAndMoveIntoHty(proStockInfo.proStockInfoDetails, App.User.UserId == 0 ? OperateTypeEnum.鑷姩鍒犻櫎 : OperateTypeEnum.浜哄伐鍒犻櫎);
+                        _basicService.LocationInfoService.UpdateLocationStatus(prolocationInfo, proStockInfo.PalletType, LocationStatusEnum.Free, proStockInfo.WarehouseId);
+                        _unitOfWorkManage.CommitTran();
+                        return WebResponseContent.Instance.OK();
+                    }
+                    else
+                    {
+                        proStockInfo.StockStatus = StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt();
+                        proStockInfo.proStockInfoDetails.ForEach(x =>
+                        {
+                            x.ProOutDetailStatus = StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt();
+                        });
+                        task.TaskStatus = TaskStatusEnum.Cancel.ObjToInt();
+                        _unitOfWorkManage.BeginTran();
+                        FeedBackWCSTaskHandCancel(taskNum);
+                        BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.浜哄伐鍒犻櫎 : OperateTypeEnum.鑷姩鍒犻櫎);
+                        _stockService.ProStockInfoService.Repository.UpdateData(proStockInfo);
+                        _stockService.ProStockInfoDetailService.Repository.UpdateData(proStockInfo.proStockInfoDetails);
+                        _basicService.LocationInfoService.UpdateLocationStatus(prolocationInfo, proStockInfo.PalletType, LocationStatusEnum.Free, proStockInfo.WarehouseId);
+                        _unitOfWorkManage.CommitTran();
+                        return WebResponseContent.Instance.OK();
+                    }
+                }
                 Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == task.PalletCode && x.WarehouseId == task.WarehouseId).Includes(x => x.Details).First();
                 if (stockInfo == null)
                 {
                     return WebResponseContent.Instance.Error($"鏈壘鍒版墭鐩樺搴旂殑缁勭洏淇℃伅");
+                }
+                if (!string.IsNullOrEmpty(stockInfo.LocationCode))
+                {
+                    return WebResponseContent.Instance.Error($"璇ユ墭鐩樺凡缁戝畾璐т綅");
                 }
                 if (stockInfo.Details.Count == 0 && stockInfo.PalletType != PalletTypeEnum.Empty.ObjToInt())
                 {
@@ -1178,6 +1240,7 @@
                 {
                     task.TaskStatus = TaskStatusEnum.Cancel.ObjToInt();
                     _unitOfWorkManage.BeginTran();
+                    FeedBackWCSTaskHandCancel(taskNum);
                     BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.浜哄伐鍒犻櫎 : OperateTypeEnum.鑷姩鍒犻櫎);
                     _stockService.StockInfoService.Repository.DeleteAndMoveIntoHty(stockInfo, App.User.UserId == 0 ? OperateTypeEnum.鑷姩鍒犻櫎 : OperateTypeEnum.浜哄伐鍒犻櫎);
                     _stockService.StockInfoDetailService.Repository.DeleteAndMoveIntoHty(stockInfo.Details, App.User.UserId == 0 ? OperateTypeEnum.鑷姩鍒犻櫎 : OperateTypeEnum.浜哄伐鍒犻櫎);
@@ -1191,17 +1254,190 @@
                     {
                         return WebResponseContent.Instance.Error($"璐т綅鐘舵�佷笉姝g‘");
                     }
-
-                    LocationStatusEnum lastStatus = (LocationStatusEnum)locationInfo.LocationStatus;
-                    locationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt();
+                    locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt();
                 }
+                Dt_InboundOrder? inboundOrder = _inboundRepository.InboundOrderRepository.Db.Queryable<Dt_InboundOrder>().Where(x => x.InboundOrderNo == stockInfo.Details.FirstOrDefault().OrderNo).Includes(x => x.Details).First();
+                Dt_InboundOrderDetail? inboundOrderDetail = null;
+                Dt_ReturnOrder? returnOrder = null;
+                //鏍囧噯鍏ュ簱娴佺▼鏌ユ壘鍏ュ簱鍗曟嵁
+                if (inboundOrder != null && stockInfo.StockStatus == StockStatusEmun.鍏ュ簱纭.ObjToInt()&&(task.WarehouseId == WarehouseEnum.HA152.ObjToInt()|| task.WarehouseId == WarehouseEnum.HA58.ObjToInt()))
+                {
+                    inboundOrderDetail = inboundOrder.Details.FirstOrDefault(x => x.RowNo == stockInfo.Details.FirstOrDefault()?.InboundOrderRowNo);
+                    foreach (var item in stockInfo.Details)
+                    {
+                        if (inboundOrderDetail == null)
+                        {
+                            continue;
+                        }
+                        inboundOrderDetail.ReceiptQuantity -= item.StockQuantity;
+                    }
+                    //鍒ゆ柇鏄惁涓洪��鏂欏叆搴撳崟
+                    if (inboundOrder.OrderType == InOrderTypeEnum.Return.ObjToInt())
+                    {
+                        returnOrder = _inboundRepository.ReturnOrderRepository.Db.Queryable<Dt_ReturnOrder>().Where(x => x.OrderNo == inboundOrder.UpperOrderNo).Includes(x => x.Details).First();
+                        returnOrder.ReturnOrderStatus = ReturnOrderStatusEnum.Returned.ObjToInt();
+                        foreach (var item in inboundOrder.Details)
+                        {
+                            Dt_ReturnOrderDetail returnOrderDetail = returnOrder.Details?.FirstOrDefault(x => x.MCode == item.MaterielCode);
+                            if (returnOrderDetail != null)
+                            {
+                                returnOrderDetail.ReturnQty -= item.ReceiptQuantity;
+                            }
+                        }
+                    }
+                }
+                if(task.WarehouseId == WarehouseEnum.HA154.ObjToInt()|| task.WarehouseId == WarehouseEnum.HA152.ObjToInt() || task.WarehouseId == WarehouseEnum.HA58.ObjToInt())
+                {
+                    _stockService.StockInfoService.Repository.DeleteAndMoveIntoHty(stockInfo, App.User.UserId == 0 ? OperateTypeEnum.鑷姩鍒犻櫎 : OperateTypeEnum.浜哄伐鍒犻櫎);
+                    _stockService.StockInfoDetailService.Repository.DeleteAndMoveIntoHty(stockInfo.Details, App.User.UserId == 0 ? OperateTypeEnum.鑷姩鍒犻櫎 : OperateTypeEnum.浜哄伐鍒犻櫎);
+                }else
+                {
+                    stockInfo.StockStatus = StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt();
+                }
+
+                task.TaskStatus = TaskStatusEnum.Cancel.ObjToInt();
+                FeedBackWCSTaskHandCancel(taskNum);
+                _unitOfWorkManage.BeginTran();
+                BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.浜哄伐鍒犻櫎 : OperateTypeEnum.浜哄伐鍒犻櫎);
+                _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, stockInfo.PalletType, LocationStatusEnum.Free, stockInfo.WarehouseId);
+                _stockRepository.StockInfoRepository.UpdateData(stockInfo);
+                if (inboundOrder != null && inboundOrderDetail != null)
+                {
+                    _inboundRepository.InboundOrderRepository.UpdateData(inboundOrder);
+                    _inboundRepository.InboundOrderDetailRepository.UpdateData(inboundOrderDetail);
+                }
+                if (returnOrder != null)
+                {
+                    _inboundRepository.ReturnOrderRepository.UpdateData(returnOrder);
+                    _inboundRepository.ReturnOrderDetailRepository.UpdateData(returnOrder.Details);
+                }
+                _unitOfWorkManage.CommitTran();
                 return WebResponseContent.Instance.OK();
-                
+
             }
             catch(Exception ex)
             {
                 return WebResponseContent.Instance.Error(ex.Message);
             }
         }
+
+        public WebResponseContent OutboundTaskHandCancel(int taskNum)
+        {
+            try
+            {
+                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
+                if (task == null)
+                {
+                    return WebResponseContent.Instance.Error($"鏈壘鍒拌浠诲姟淇℃伅");
+                }
+                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == task.WarehouseId);
+                if (warehouse.WarehouseType == WarehouseTypEnum.鎴愬搧.ToString())
+                {
+                   
+                    Dt_ProStockInfo proStockInfo = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>().Where(x => x.PalletCode == task.PalletCode).Includes(x => x.proStockInfoDetails).First();
+                    if (proStockInfo == null)
+                    {
+                        return WebResponseContent.Instance.Error($"鏈壘鍒拌兌妗嗕负{task.PalletCode}缁勭洏淇℃伅");
+                    }
+                    Dt_LocationInfo prolocationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress);
+                    if (prolocationInfo != null)
+                    {
+                        if (prolocationInfo.LocationStatus == LocationStatusEnum.Free.ObjToInt())
+                        {
+                            return WebResponseContent.Instance.Error($"璐т綅鐘舵�佷笉姝g‘");
+                        }
+                        prolocationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt();
+                    }
+                    proStockInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
+                    proStockInfo.proStockInfoDetails.ForEach(x =>
+                    {
+                        x.ProOutDetailStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
+                        x.OutboundQuantity = 0;
+                    });
+                    task.TaskStatus = TaskStatusEnum.Cancel.ObjToInt();
+                    _unitOfWorkManage.BeginTran();
+                    FeedBackWCSTaskHandCancel(taskNum);
+                    BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.浜哄伐鍒犻櫎 : OperateTypeEnum.鑷姩鍒犻櫎);
+                    _stockService.ProStockInfoService.Repository.UpdateData(proStockInfo);
+                    _stockService.ProStockInfoDetailService.Repository.UpdateData(proStockInfo.proStockInfoDetails);
+                    _basicService.LocationInfoService.UpdateLocationStatus(prolocationInfo, proStockInfo.PalletType, LocationStatusEnum.InStock, proStockInfo.WarehouseId);
+                    _unitOfWorkManage.CommitTran();
+                    return WebResponseContent.Instance.OK();
+                }
+                Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == task.PalletCode && x.WarehouseId == task.WarehouseId).Includes(x => x.Details).First();
+                if (stockInfo == null)
+                {
+                    return WebResponseContent.Instance.Error($"鏈壘鍒版墭鐩樺搴旂殑缁勭洏淇℃伅");
+                }
+                if (string.IsNullOrEmpty(stockInfo.LocationCode))
+                {
+                    return WebResponseContent.Instance.Error($"璇ユ墭鐩樺湪绔嬪簱鏈粦瀹氳揣浣�");
+                }
+                if (stockInfo.Details.Count == 0 && stockInfo.PalletType != PalletTypeEnum.Empty.ObjToInt())
+                {
+                    return WebResponseContent.Instance.Error($"鏈壘鍒拌鎵樼洏搴撳瓨鏄庣粏淇℃伅");
+                }
+                Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress);
+                if (locationInfo != null)
+                {
+                    if (locationInfo.LocationStatus == LocationStatusEnum.Free.ObjToInt())
+                    {
+                        return WebResponseContent.Instance.Error($"璐т綅鐘舵�佷笉姝g‘");
+                    }
+                    locationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt();
+                }
+                
+                stockInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
+                stockInfo.Details.ForEach(x =>
+                {
+                    x.Status = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
+                    x.OutboundQuantity = 0;
+                });
+                task.TaskStatus = TaskStatusEnum.Cancel.ObjToInt();
+                FeedBackWCSTaskHandCancel(taskNum);
+                _unitOfWorkManage.BeginTran();
+                BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.浜哄伐鍒犻櫎 : OperateTypeEnum.浜哄伐鍒犻櫎);
+                _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, stockInfo.PalletType, LocationStatusEnum.InStock, stockInfo.WarehouseId);
+                _stockRepository.StockInfoRepository.UpdateData(stockInfo);
+                _stockRepository.StockInfoDetailRepository.UpdateData(stockInfo.Details);
+                _unitOfWorkManage.CommitTran();
+                return WebResponseContent.Instance.OK();
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+
+        public WebResponseContent RelocationTaskHandCancel(Dt_Task task)
+        {
+            Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress);
+            if (stockInfo == null)
+            {
+                return WebResponseContent.Instance.Error($"鏈壘鍒板搴旇揣浣嶇殑搴撳瓨淇℃伅");
+            }
+
+            Dt_LocationInfo locationInfoStart = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress);
+            if (locationInfoStart == null)
+            {
+                return WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑璧风偣璐т綅淇℃伅");
+            }
+
+            Dt_LocationInfo locationInfoEnd = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress);
+            if (locationInfoEnd == null)
+            {
+                return WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑缁堢偣璐т綅淇℃伅");
+            }
+            task.TaskStatus = TaskStatusEnum.Cancel.ObjToInt();
+            FeedBackWCSTaskHandCancel(task.TaskNum);
+            _unitOfWorkManage.BeginTran();
+            stockInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
+            _stockService.StockInfoService.Repository.UpdateData(stockInfo);
+            _basicService.LocationInfoService.UpdateLocationStatus(locationInfoStart, stockInfo.PalletType, LocationStatusEnum.InStock, stockInfo.WarehouseId);
+            _basicService.LocationInfoService.UpdateLocationStatus(locationInfoEnd, stockInfo.PalletType, LocationStatusEnum.Free, stockInfo.WarehouseId);
+            BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? WIDESEA_Core.Enums.OperateTypeEnum.浜哄伐鍒犻櫎 : WIDESEA_Core.Enums.OperateTypeEnum.鑷姩鍒犻櫎);
+            _unitOfWorkManage.CommitTran();
+            return WebResponseContent.Instance.OK();
+        }
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Completed.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Completed.cs"
index 88eaa6f..d24aae0 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Completed.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Completed.cs"
@@ -136,13 +136,38 @@
                 return WebResponseContent.Instance.Error(ex.Message);
             }
         }
+
+        /// <summary>
+        /// 鍥炶皟wcs鎵嬪姩鍙栨秷浠诲姟
+        /// </summary>
+        /// <param name="taskNum"></param>
+        /// <returns></returns>
+        public WebResponseContent FeedBackWCSTaskHandCancel(int taskNum)
+        {
+            try
+            {
+                Dt_ApiInfo? url = _apiInfoRepository.QueryData(x => x.ApiCode == APIEnum.FeedBackWCSTaskHandCancel.ToString()).First();
+                string? apiAddress = url.ApiAddress;
+                if (string.IsNullOrEmpty(apiAddress))
+                {
+                    return WebResponseContent.Instance.Error($"{taskNum},鏈壘鍒癢CS浠诲姟瀹屾垚鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
+                }
+                string responseStr = HttpHelper.Get(apiAddress + "?taskNum=" + taskNum);
+                WebResponseContent content = JsonConvert.DeserializeObject<WebResponseContent>(responseStr) ?? WebResponseContent.Instance.Error("鏈壘鍒颁换鍔″畬鎴愯繑鍥炲��");
+                return content;
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
         /// <summary>
         /// 浠诲姟鍙栨秷
         /// </summary>
         /// <param name="taskNum"></param>
         /// <param name="warehouseId"></param>
         /// <returns></returns>
-        public async Task<WebResponseContent> TaskHandCancel(int taskNum,int warehouseId)
+        public async Task<WebResponseContent> TaskHandCancel(int taskNum)
         {
             try
             {
@@ -153,15 +178,15 @@
                 }
                 if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
                 {
-                    return await Task.FromResult(InboundTaskCompleted(taskNum));
+                    return await Task.FromResult(InboundTaskHandCancel(taskNum));
                 }
                 else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                 {
-                    return await Task.FromResult(OutboundTaskCompleted(taskNum));
+                    return await Task.FromResult(OutboundTaskHandCancel(taskNum));
                 }
                 else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
                 {
-                    return await Task.FromResult(RelocationTaskCompleted(task));
+                    return await Task.FromResult(RelocationTaskHandCancel(task));
                 }
                 else
                 {
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Reloaction.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Reloaction.cs"
index 4cbe66d..7319ce3 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Reloaction.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Reloaction.cs"
@@ -49,7 +49,7 @@
                 }
                 else
                 {
-                    Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.QueryFirst(x => x.LocationCode == needRelocationItem.LocationCode);
+                    Dt_StockInfo stockInfo = _stockService.StockInfoService.Db.Queryable<Dt_StockInfo>().Where(x => x.LocationCode == needRelocationItem.LocationCode).Includes(x => x.Details).First();
                     if (stockInfo == null)
                     {
                         return WebResponseContent.Instance.Error($"鏈壘鍒板搴旇揣浣嶇殑搴撳瓨淇℃伅");
@@ -94,7 +94,15 @@
                             TaskStatus = 0,
                             TaskType = TaskTypeEnum.Relocation.ObjToInt()
                         };
-                        
+                        string MaterielCode = stockInfo.Details?.Where(x => x.StockId == stockInfo.Id).FirstOrDefault()?.MaterielCode;
+                        float Quantity = (float)stockInfo.Details?.Where(x => x.StockId == stockInfo.Id).Sum(x => x.StockQuantity);
+                        string BatchNo = stockInfo.Details?.Where(x => x.StockId == stockInfo.Id).FirstOrDefault()?.BatchNo;
+                        if (MaterielCode != null && Quantity != null && BatchNo != null)
+                        {
+                            newTask.MaterielCode = MaterielCode;
+                            newTask.Quantity = Quantity;
+                            newTask.BatchNo = BatchNo;
+                        }
                         if (stockInfo.StockLength>0)
                         {
                             newTask.TaskLength = stockInfo.StockLength;
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs"
index 7b10097..9dc6662 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs"
@@ -413,10 +413,10 @@
         /// </summary>
         /// <param name="taskNum">浠诲姟鍙�</param>
         /// <returns></returns>
-        [HttpPost, HttpGet, Route("TaskHandCa"), AllowAnonymous]
-        public async Task<WebResponseContent> TaskHandCancel(int taskNum ,int warehouseId)
+        [HttpPost, HttpGet, Route("TaskHandCancel"), AllowAnonymous]
+        public async Task<WebResponseContent> TaskHandCancel(int taskNum)
         {
-            return await Service.TaskHandCancel(taskNum,warehouseId);
+            return await Service.TaskHandCancel(taskNum);
         }
     }
 }

--
Gitblit v1.9.3