From 8be15ec008994cbe37562ae1e2706c61c6ffd709 Mon Sep 17 00:00:00 2001
From: hutongqing <hutongqing@hnkhzn.com>
Date: 星期一, 11 十一月 2024 15:47:37 +0800
Subject: [PATCH] 前端上传

---
 代码管理/WCS/WIDESEAWCS_Client/src/extension/outbound/extend/outOrderDetail.vue |  421 +++++++
 代码管理/WCS/WIDESEAWCS_Client/src/extension/stock/stockView.js                 |   58 +
 代码管理/WCS/WIDESEAWCS_Client/src/router/viewGird.js                           |   68 +
 代码管理/WCS/WIDESEAWCS_Client/src/views/outbound/outboundOrder.vue             |  321 +++++
 代码管理/WCS/WIDESEAWCS_Client/src/extension/outbound/extend/SelectedStock.vue  |  230 ++++
 代码管理/WCS/WIDESEAWCS_Client/src/views/outbound/outboundOrderDetail.vue       |  221 ++++
 代码管理/WCS/WIDESEAWCS_Client/src/views/stock/stockInfo.vue                    |  187 +++
 代码管理/WCS/WIDESEAWCS_Client/src/views/stock/stockView.vue                    |  344 ++++++
 代码管理/WCS/WIDESEAWCS_Client/src/extension/outbound/outboundOrderDetail.js    |   58 +
 代码管理/WCS/WIDESEAWCS_Client/src/extension/stock/stockInfoDetail.js           |   58 +
 代码管理/WCS/WIDESEAWCS_Client/src/extension/basic/locationInfo.js              |   85 +
 代码管理/WCS/WIDESEAWCS_Client/src/extension/outbound/extend/StockSelect.vue    |  289 +++++
 代码管理/WCS/WIDESEAWCS_Client/src/extension/basic/materielInfo.js              |   58 +
 代码管理/WCS/WIDESEAWCS_Client/src/views/stock/stockInfoDetail.vue              |  228 ++++
 代码管理/WCS/WIDESEAWCS_Client/src/extension/outbound/outboundOrder.js          |   74 +
 代码管理/WCS/WIDESEAWCS_Client/src/views/basic/locationInfo.vue                 |  251 ++++
 代码管理/WCS/WIDESEAWCS_Client/src/extension/stock/stockInfo.js                 |   58 +
 代码管理/WCS/WIDESEAWCS_Client/src/views/basic/materielInfo.vue                 |  230 ++++
 18 files changed, 3,229 insertions(+), 10 deletions(-)

diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/extension/basic/locationInfo.js" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/extension/basic/locationInfo.js"
new file mode 100644
index 0000000..862e1a8
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/extension/basic/locationInfo.js"
@@ -0,0 +1,85 @@
+
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+let extension = {
+  components: {
+    //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+    gridHeader: '',
+    gridBody: '',
+    gridFooter: '',
+    //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+    modelHeader: '',
+    modelBody: '',
+    modelFooter: ''
+  },
+  tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+  buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+  methods: {
+    //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+    onInit() {
+      let enableBtn = this.buttons.find(x => x.value == 'Enable');
+      if (enableBtn) {
+        enableBtn.onClick = function () {
+          this.$message.success('鑷畾涔夋寜閽偣鍑讳簨浠�');
+        }
+      }
+      let disableBtn = this.buttons.find(x => x.value == 'Disable');
+      if (disableBtn) {
+        disableBtn.onClick = function () {
+          this.$message.success('鑷畾涔夋寜閽偣鍑讳簨浠�');
+        }
+      }
+
+      this.columns.push({
+        field: '鎿嶄綔',
+        title: '鎿嶄綔',
+        width: 90,
+        fixed: 'right',
+        align: 'center',
+        formatter: (row) => {
+          return (
+            '<i style="cursor: pointer;color: #2d8cf0;"class="el-icon-view">鏌ョ湅鏄庣粏</i>'
+          );
+        },
+        click: (row) => {
+          this.$refs.gridBody.open(row);
+        }
+      });
+    },
+    onInited() {
+      //妗嗘灦鍒濆鍖栭厤缃悗
+      //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+      //this.detailOptions.columns.forEach(column=>{ });
+    },
+    searchBefore(param) {
+      //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+      //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+      return true;
+    },
+    searchAfter(result) {
+      //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+      return true;
+    },
+    addBefore(formData) {
+      //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+      return true;
+    },
+    updateBefore(formData) {
+      //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+      return true;
+    },
+    rowClick({ row, column, event }) {
+      //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+      // 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)
+    }
+  }
+};
+export default extension;
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/extension/basic/materielInfo.js" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/extension/basic/materielInfo.js"
new file mode 100644
index 0000000..a39e193
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/extension/basic/materielInfo.js"
@@ -0,0 +1,58 @@
+
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+let extension = {
+    components: {
+      //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+      gridHeader: '',
+      gridBody: '',
+      gridFooter: '',
+      //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+      modelHeader: '',
+      modelBody: '',
+      modelFooter: ''
+    },
+    tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+    buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+    methods: {
+       //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+      onInit() {  
+      },
+      onInited() {
+        //妗嗘灦鍒濆鍖栭厤缃悗
+        //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+        //this.detailOptions.columns.forEach(column=>{ });
+      },
+      searchBefore(param) {
+        //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+        //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+        return true;
+      },
+      searchAfter(result) {
+        //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+        return true;
+      },
+      addBefore(formData) {
+        //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+        return true;
+      },
+      updateBefore(formData) {
+        //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+        return true;
+      },
+      rowClick({ row, column, event }) {
+        //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+        // 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)
+      }
+    }
+  };
+  export default extension;
+  
\ 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/extension/outbound/extend/SelectedStock.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/extension/outbound/extend/SelectedStock.vue"
new file mode 100644
index 0000000..b6bdde8
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/extension/outbound/extend/SelectedStock.vue"
@@ -0,0 +1,230 @@
+<template>
+  <div>
+    <vol-box
+      v-model="showDetialBox"
+      :lazy="true"
+      width="75%"
+      :padding="15"
+      title="鍑哄簱璇︽儏"
+    >
+      <div class="box-head">
+        <el-alert :closable="false" style="width: 100%">
+          <el-row>
+            <el-col :span="24">
+              <span class="less-style">鐗╂枡鍚嶇О锛� {{ row.materielName }} </span>
+              <el-divider direction="vertical"></el-divider>
+              <span class="less-style">鐗╂枡缂栧彿锛� {{ row.materielCode }} </span>
+              <el-divider direction="vertical"></el-divider>
+              <span class="less-style"
+                >闇�姹傛暟閲忥細 {{ row.orderQuantity }}
+              </span>
+              <el-divider direction="vertical"></el-divider>
+              <span class="less-style"
+                >宸插垎閰嶆暟閲忥細 {{ row.lockQuantity }}
+              </span>
+            </el-col>
+          </el-row>
+        </el-alert>
+      </div>
+      <div class="box-table" style="margin-top: 1%">
+        <el-table
+          ref="singleTable"
+          :data="tableData"
+          style="width: 100%; height: 100%"
+          highlight-current-row
+          height="500px"
+        >
+          >
+          <el-table-column
+            label="搴忓彿"
+            type="index"
+            fixed="left"
+            width="55"
+            align="center"
+          ></el-table-column>
+          <el-table-column
+            v-for="(item, index) in tableColumns.filter((x) => !x.hidden)"
+            :key="index"
+            :prop="item.prop"
+            :label="item.title"
+            :width="item.width"
+            align="center"
+          >
+            <template #default="scoped" v-if="item.type == 'icon'">
+              <el-tooltip
+                class="item"
+                effect="dark"
+                :content="item.title"
+                placement="bottom"
+                ><el-button
+                  type="text"
+                  @click="tableButtonClick(scoped.row, item)"
+                  ><i :class="item.icon" style="font-size: 22px"></i></el-button
+              ></el-tooltip>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+      <template #footer>
+        <!-- <el-button type="primary" size="small" @click="submit">纭</el-button> -->
+        <el-button type="danger" size="small" @click="showDetialBox = false"
+          >鍏抽棴</el-button
+        >
+      </template>
+    </vol-box>
+  </div>
+</template>
+    <script>
+import VolBox from "@/components/basic/VolBox.vue";
+export default {
+  components: { VolBox },
+  data() {
+    return {
+      row: null,
+      showDetialBox: false,
+      tableData: [],
+      tableColumns: [
+        {
+          prop: "id",
+          title: "涓婚敭",
+          type: "string",
+          width: 150,
+          hidden: true,
+        },
+        {
+          prop: "orderNo",
+          title: "鍗曟嵁缂栧彿",
+          type: "string",
+          width: 150,
+        },
+        {
+          prop: "orderDetailId",
+          title: "鍗曟嵁鏄庣粏涓婚敭",
+          type: "string",
+          width: 150,
+          hidden: true,
+        },
+        {
+          prop: "orderType",
+          title: "鍗曟嵁绫诲瀷",
+          type: "string",
+          width: 90,
+        },
+        {
+          prop: "batchNo",
+          title: "鎵规鍙�",
+          type: "string",
+          width: 120,
+        },
+        {
+          prop: "materielCode",
+          title: "鐗╂枡缂栧彿",
+          type: "string",
+          width: 150,
+        },
+        {
+          prop: "materielName",
+          title: "鐗╂枡鍚嶇О",
+          type: "string",
+          width: 150,
+        },
+        {
+          prop: "stockId",
+          title: "搴撳瓨涓婚敭",
+          type: "string",
+          width: 150,
+          hidden: true,
+        },
+        {
+          prop: "originalQuantity",
+          title: "鍘熷搴撳瓨閲�",
+          type: "string",
+          width: 100,
+        },
+        {
+          prop: "assignQuantity",
+          title: "鍒嗛厤鍑哄簱閲�",
+          type: "string",
+          width: 100,
+        },
+        {
+          prop: "palletCode",
+          title: "鎵樼洏缂栧彿",
+          type: "string",
+          width: 150,
+        },
+        {
+          prop: "locationCode",
+          title: "璐т綅缂栧彿",
+          type: "string",
+          width: 180,
+        },
+        {
+          prop: "status",
+          title: "鐘舵��",
+          type: "string",
+        },
+      ],
+    };
+  },
+  methods: {
+    open(row) {
+      this.row = row;
+      this.showDetialBox = true;
+      this.getData();
+    },
+    getData() {
+      this.http
+        .post(
+          "api/OutStockLockInfo/GetByOrderDetailId?orderDetailId=" +
+            this.row.id,
+          null,
+          "鏌ヨ涓�"
+        )
+        .then((x) => {
+          this.tableData = x;
+        });
+    },
+  },
+};
+</script>
+  <style scoped>
+.less-style {
+  color: black;
+}
+.equle-style {
+  color: green;
+}
+.more-style {
+  color: red;
+}
+</style>
+  
+  <style>
+.text-button:hover {
+  background-color: #f0f9eb !important;
+}
+.el-table .warning-row {
+  background: oldlace;
+}
+.box-table .el-table tbody tr:hover > td {
+  background-color: #d8e0d4 !important;
+  /* color: #ffffff; */
+}
+
+.box-table .el-table tbody tr.current-row > td {
+  background-color: #f0f9eb !important;
+  /* color: #ffffff; */
+}
+
+.el-table .success-row {
+  background: #f0f9eb;
+}
+
+.box-table .el-table {
+  border: 1px solid #ebeef5;
+}
+.box-head .el-alert__content {
+  width: 100%;
+}
+</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/extension/outbound/extend/StockSelect.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/extension/outbound/extend/StockSelect.vue"
new file mode 100644
index 0000000..a02362a
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/extension/outbound/extend/StockSelect.vue"
@@ -0,0 +1,289 @@
+<template>
+  <div>
+    <vol-box
+      v-model="showDetialBox"
+      :lazy="true"
+      width="60%"
+      :padding="15"
+      title="鎸囧畾搴撳瓨"
+    >
+      <div class="box-head">
+        <el-alert :closable="false" style="width: 100%">
+          <el-row>
+            <el-col :span="20">
+              <span class="less-style">鐗╂枡鍚嶇О锛� {{ row.materielName }} </span>
+              <el-divider direction="vertical"></el-divider>
+              <span class="less-style">鐗╂枡缂栧彿锛� {{ row.materielCode }} </span>
+              <el-divider direction="vertical"></el-divider>
+              <span class="less-style"
+                >闇�姹傛暟閲忥細 {{ row.orderQuantity }}
+              </span>
+              <el-divider direction="vertical"></el-divider>
+              <span :class="selectionClass"
+                >宸查�夋暟閲忥細 {{ selectionSum }}
+              </span>
+            </el-col>
+            <el-col :span="4">
+              <el-link
+                type="primary"
+                size="small"
+                style="float: right; height: 20px"
+                @click="revokeAssign"
+                >鎾ら攢鍒嗛厤</el-link
+              ></el-col
+            >
+          </el-row>
+        </el-alert>
+      </div>
+      <div class="box-table" style="margin-top: 1%">
+        <el-table
+          ref="singleTable"
+          :data="tableData"
+          style="width: 100%; height: 100%"
+          highlight-current-row
+          @row-click="handleRowClick"
+          height="500px"
+          @selection-change="handleSelectionChange"
+        >
+          >
+          <el-table-column type="selection" width="55"> </el-table-column>
+          <el-table-column
+            label="搴忓彿"
+            type="index"
+            fixed="left"
+            width="55"
+            align="center"
+          ></el-table-column>
+          <el-table-column
+            v-for="(item, index) in tableColumns.filter((x) => !x.hidden)"
+            :key="index"
+            :prop="item.prop"
+            :label="item.title"
+            :width="item.width"
+            align="center"
+          >
+            <template #default="scoped" v-if="item.type == 'icon'">
+              <el-tooltip
+                class="item"
+                effect="dark"
+                :content="item.title"
+                placement="bottom"
+                ><el-button
+                  type="text"
+                  @click="tableButtonClick(scoped.row, item)"
+                  ><i :class="item.icon" style="font-size: 22px"></i></el-button
+              ></el-tooltip>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+      <template #footer>
+        <el-button type="primary" size="small" @click="outbound"
+          >鐩存帴鍑哄簱</el-button
+        >
+        <el-button type="primary" size="small" @click="lockStock"
+          >閿佸畾搴撳瓨</el-button
+        >
+        <el-button type="danger" size="small" @click="showDetialBox = false"
+          >鍏抽棴</el-button
+        >
+      </template>
+    </vol-box>
+  </div>
+</template>
+  <script>
+import VolBox from "@/components/basic/VolBox.vue";
+export default {
+  components: { VolBox },
+  data() {
+    return {
+      row: null,
+      showDetialBox: false,
+      tableData: [],
+      tableColumns: [
+        {
+          prop: "materielCode",
+          title: "鐗╂枡缂栧彿",
+          type: "string",
+          width: 150,
+        },
+        {
+          prop: "materielName",
+          title: "鐗╂枡鍚嶇О",
+          type: "string",
+          width: 150,
+        },
+        {
+          prop: "palletCode",
+          title: "鎵樼洏缂栧彿",
+          type: "string",
+          width: 150,
+        },
+        {
+          prop: "locationCode",
+          title: "璐т綅缂栧彿",
+          type: "string",
+          width: 180,
+        },
+        {
+          prop: "useableQuantity",
+          title: "鍙敤鏁伴噺",
+          type: "string",
+        },
+      ],
+      selection: [],
+      selectionSum: 0,
+      selectionClass: "less-style",
+      originalQuantity: 0,
+    };
+  },
+  methods: {
+    open(row) {
+      this.row = row;
+      this.showDetialBox = true;
+      this.originalQuantity = this.row.lockQuantity;
+      this.selectionSum = this.row.lockQuantity;
+      this.getData();
+      if (this.selectionSum == this.row.orderQuantity) {
+        this.selectionClass = "equle-style";
+      } else if (this.selectionSum < this.row.orderQuantity) {
+        this.selectionClass = "less-style";
+      } else {
+        this.selectionClass = "more-style";
+      }
+    },
+    lockStock() {
+      this.http
+        .post(
+          "api/OutboundOrderDetail/LockOutboundStock?id=" + this.row.id,
+          this.selection,
+          "鏁版嵁澶勭悊涓�"
+        )
+        .then((x) => {
+          if (!x.status) return this.$message.error(x.message);
+          this.$message.success("鎿嶄綔鎴愬姛");
+          this.showDetialBox = false;
+          this.$emit("parentCall", ($vue) => {
+            $vue.getData();
+          });
+        });
+    },
+    outbound() {
+      this.http
+        .post(
+          "api/Task/GenerateOutboundTask?id=" + this.row.id,
+          this.selection,
+          "鏁版嵁澶勭悊涓�"
+        )
+        .then((x) => {
+          if (!x.status) return this.$message.error(x.message);
+          this.$message.success("鎿嶄綔鎴愬姛");
+          this.showDetialBox = false;
+          this.$emit("parentCall", ($vue) => {
+            $vue.getData();
+          });
+        });
+    },
+    getData() {
+      this.http
+        .post(
+          "api/StockInfo/GetStockSelectViews?materielCode=" +
+            this.row.materielCode,
+          null,
+          "鏌ヨ涓�"
+        )
+        .then((x) => {
+          this.tableData = x;
+        });
+    },
+    revokeAssign() {
+      console.log(this.row);
+      this.http
+        .post(
+          "api/OutboundOrderDetail/RevokeLockOutboundStock?id=" + this.row.id,
+          null,
+          "鏁版嵁澶勭悊涓�"
+        )
+        .then((x) => {
+          if (!x.status) return this.$message.error(x.message);
+          this.$message.success("鎿嶄綔鎴愬姛");
+          this.showDetialBox = false;
+          this.$emit("parentCall", ($vue) => {
+            $vue.getData();
+          });
+        });
+    },
+    handleSelectionChange(val) {
+      this.selection = val;
+      this.selectionSum =
+        val.reduce(
+          (accumulator, currentValue) =>
+            accumulator + currentValue["useableQuantity"],
+          0
+        ) + this.originalQuantity;
+      if (this.selectionSum == this.row.orderQuantity) {
+        this.selectionClass = "equle-style";
+      } else if (this.selectionSum < this.row.orderQuantity) {
+        this.selectionClass = "less-style";
+      } else {
+        this.selectionClass = "more-style";
+      }
+    },
+    toggleSelection(rows) {
+      if (rows) {
+        rows.forEach((row) => {
+          this.$refs.singleTable.toggleRowSelection(row);
+        });
+      } else {
+        this.$refs.singleTable.clearSelection();
+      }
+    },
+    clearSelection() {
+      this.$refs.singleTable.clearSelection();
+    },
+    handleRowClick(row) {
+      this.$refs.singleTable.toggleRowSelection(row);
+    },
+  },
+};
+</script>
+<style scoped>
+.less-style {
+  color: black;
+}
+.equle-style {
+  color: green;
+}
+.more-style {
+  color: red;
+}
+</style>
+
+<style>
+.text-button:hover {
+  background-color: #f0f9eb !important;
+}
+.el-table .warning-row {
+  background: oldlace;
+}
+.box-table .el-table tbody tr:hover > td {
+  background-color: #d8e0d4 !important;
+  /* color: #ffffff; */
+}
+
+.box-table .el-table tbody tr.current-row > td {
+  background-color: #f0f9eb !important;
+  /* color: #ffffff; */
+}
+
+.el-table .success-row {
+  background: #f0f9eb;
+}
+
+.box-table .el-table {
+  border: 1px solid #ebeef5;
+}
+.box-head .el-alert__content {
+  width: 100%;
+}
+</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/extension/outbound/extend/outOrderDetail.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/extension/outbound/extend/outOrderDetail.vue"
new file mode 100644
index 0000000..f40e3f9
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/extension/outbound/extend/outOrderDetail.vue"
@@ -0,0 +1,421 @@
+<template>
+  <div>
+    <vol-box
+      v-model="showDetialBox"
+      :lazy="true"
+      width="75%"
+      :padding="15"
+      title="鍗曟嵁鏄庣粏淇℃伅"
+    >
+      <div class="box-head">
+        <el-alert :closable="false" style="width: 100%">
+          <el-row>
+            <el-col :span="16">
+              <span>宸查�変腑 {{ selection.length }} 椤�</span>
+            </el-col>
+            <el-col :span="8">
+              <el-link
+                type="primary"
+                size="small"
+                style="float: right; height: 20px"
+                @click="lockstocks"
+                >閿佸畾搴撳瓨</el-link
+              >
+              <el-link
+                type="primary"
+                size="small"
+                style="float: right; height: 20px; margin-right: 10px"
+                @click="outbound"
+                >鐩存帴鍑哄簱</el-link
+              >
+              <el-link
+                type="primary"
+                size="small"
+                style="float: right; height: 20px; margin-right: 10px"
+                @click="getData"
+                >鍒锋柊</el-link
+              ></el-col
+            >
+          </el-row>
+        </el-alert>
+      </div>
+      <div class="box-table" style="margin-top: 1%">
+        <el-table
+          ref="singleTable"
+          :data="tableData"
+          style="width: 100%; height: 100%"
+          highlight-current-row
+          @current-change="handleCurrentChange"
+          height="500px"
+          @row-click="handleRowClick"
+          @selection-change="handleSelectionChange"
+        >
+          <el-table-column type="selection" width="55"> </el-table-column>
+          <el-table-column
+            label="搴忓彿"
+            type="index"
+            fixed="left"
+            width="55"
+            align="center"
+          ></el-table-column>
+          <el-table-column
+            v-for="(item, index) in tableColumns.filter((x) => !x.hidden)"
+            :key="index"
+            :prop="item.prop"
+            :label="item.title"
+            :width="item.width"
+            align="center"
+          >
+            <template #default="scoped">
+              <div v-if="item.type == 'icon'">
+                <el-tooltip
+                  class="item"
+                  effect="dark"
+                  :content="item.title"
+                  placement="bottom"
+                  ><el-link
+                    type="primary"
+                    :disabled="getButtonEnable(item.prop, scoped.row)"
+                    @click="tableButtonClick(scoped.row, item)"
+                    ><i :class="item.icon" style="font-size: 22px"></i></el-link
+                ></el-tooltip>
+              </div>
+
+              <div v-else-if="item.type == 'tag'">
+                <el-tag size="small">
+                  {{ getDictionary(scoped.row, item) }}
+                </el-tag>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+    </vol-box>
+    <stock-select ref="child" @parentCall="parentCall"></stock-select>
+    <selected-stock
+      ref="selectedStock"
+      @parentCall="parentCall"
+    ></selected-stock>
+  </div>
+</template>
+<script>
+import VolBox from "@/components/basic/VolBox.vue";
+import VolForm from "@/components/basic/VolForm.vue";
+import StockSelect from "./StockSelect.vue";
+import SelectedStock from "./SelectedStock.vue";
+export default {
+  components: { VolBox, VolForm, StockSelect, SelectedStock },
+  data() {
+    return {
+      row: null,
+      showDetialBox: false,
+      flag: false,
+      currentRow: null,
+      selection: [],
+      tableData: [],
+      tableColumns: [
+        {
+          prop: "id",
+          title: "Id",
+          type: "int",
+          width: 90,
+          hidden: true,
+        },
+        {
+          prop: "orderId",
+          title: "鍑哄簱鍗曚富閿�",
+          type: "string",
+          width: 90,
+          hidden: true,
+        },
+        {
+          prop: "materielCode",
+          title: "鐗╂枡缂栧彿",
+          type: "string",
+          width: 150,
+        },
+        {
+          prop: "materielName",
+          title: "鐗╂枡鍚嶇О",
+          type: "string",
+          width: 150,
+        },
+        {
+          prop: "batchNo",
+          title: "鎵规鍙�",
+          type: "string",
+          width: 90,
+        },
+        {
+          prop: "orderQuantity",
+          title: "鍗曟嵁鏁伴噺",
+          type: "string",
+          width: 90,
+        },
+        {
+          prop: "lockQuantity",
+          title: "閿佸畾鏁伴噺",
+          type: "int",
+          width: 90,
+        },
+        {
+          prop: "overOutQuantity",
+          title: "宸插嚭鏁伴噺",
+          type: "string",
+          width: 90,
+        },
+        {
+          prop: "orderDetailStatus",
+          title: "璁㈠崟鏄庣粏鐘舵��",
+          type: "tag",
+          width: 180,
+          bindKey:"orderDetailStatusEnum"
+        },
+        {
+          prop: "assignStock",
+          title: "鎸囧畾搴撳瓨",
+          type: "icon",
+          width: 90,
+          icon: "el-icon-s-grid",
+        },
+        {
+          prop: "viewDetail",
+          title: "鍑哄簱璇︾粏",
+          type: "icon",
+          width: 90,
+          icon: "el-icon-s-operation",
+        },
+        {
+          prop: "creater",
+          title: "鍒涘缓浜�",
+          type: "string",
+          width: 90,
+        },
+        {
+          prop: "createDate",
+          title: "鍒涘缓鏃堕棿",
+          type: "datetime",
+          width: 160,
+        },
+        {
+          prop: "modifier",
+          title: "淇敼浜�",
+          type: "string",
+          width: 100,
+        },
+        {
+          prop: "modifyDate",
+          title: "淇敼鏃堕棿",
+          type: "datetime",
+          width: 160,
+        },
+        {
+          prop: "remark",
+          title: "澶囨敞",
+          type: "string",
+        },
+      ],
+      paginations: {
+        sort: "id",
+        order: "desc",
+        Foots: "",
+        total: 0,
+        // 2020.08.29澧炲姞鑷畾涔夊垎椤垫潯澶у皬
+        sizes: [30, 60, 100, 120],
+        size: 30, // 榛樿鍒嗛〉澶у皬
+        Wheres: [],
+        page: 1,
+        rows: 30,
+      },
+      searchFormOptions: [
+        [
+          {
+            title: "鍗曟嵁缂栧彿",
+            field: "allocation_code",
+            type: "like",
+          },
+          {
+            title: "鍗曟嵁绫诲瀷",
+            field: "allocation_type",
+            type: "select",
+            dataKey: "OrderType",
+            data: [],
+          },
+          {
+            title: "鍗曟嵁鐘舵��",
+            field: "allocation_state",
+            type: "select",
+            dataKey: "OrderState",
+            data: [],
+          },
+        ],
+      ],
+      searchFormFields: {
+        allocation_code: "",
+        allocation_type: "",
+        allocation_state: "",
+      },
+      dictionaryList: null,
+    };
+  },
+  methods: {
+    open(row) {
+      this.row = row;
+      this.showDetialBox = true;
+      this.getDictionaryData();
+      this.getData();
+    },
+    getData() {
+      var wheres = [{ name: "orderId", value: this.row.id }];
+      var param = {
+        page: this.paginations.page,
+        rows: this.paginations.rows,
+        sort: this.paginations.sort,
+        order: this.paginations.order,
+        wheres: JSON.stringify(wheres), // 鏌ヨ鏉′欢锛屾牸寮忎负[{ name: "瀛楁", value: "xx" }]
+      };
+      this.http
+        .post("api/OutboundOrderDetail/GetPageData", param, "鏌ヨ涓�")
+        .then((x) => {
+          this.tableData = x.rows;
+        });
+    },
+    tableButtonClick(row, column) {
+      if (column.prop == "assignStock") {
+        this.$refs.child.open(row);
+      } else {
+        this.$refs.selectedStock.open(row);
+      }
+    },
+    lockstocks() {
+      if (this.selection.length === 0) {
+        return this.$message.error("璇烽�夋嫨鍗曟嵁鏄庣粏");
+      }
+      var keys = this.selection.map((item) => item.id); // 鑾峰彇閫変腑琛岀殑id
+      this.http
+        .post("api/OutboundOrderDetail/LockOutboundStocks", keys, "鏁版嵁澶勭悊涓�")
+        .then((x) => {
+          if (!x.status) return this.$message.error(x.message);
+          this.$message.success("鎿嶄綔鎴愬姛");
+          this.showDetialBox = false;
+          this.$emit("parentCall", ($vue) => {
+            $vue.getData();
+          });
+        });
+    },
+    outbound() {
+      if (this.selection.length === 0) {
+        return this.$message.error("璇烽�夋嫨鍗曟嵁鏄庣粏");
+      }
+      var keys = this.selection.map((item) => item.id); // 鑾峰彇閫変腑琛岀殑id
+
+      this.http
+        .post("api/Task/GenerateOutboundTasks", keys, "鏁版嵁澶勭悊涓�")
+        .then((x) => {
+          if (!x.status) return this.$message.error(x.message);
+          this.$message.success("鎿嶄綔鎴愬姛");
+          this.showDetialBox = false;
+          this.$emit("parentCall", ($vue) => {
+            $vue.getData();
+          });
+        });
+    },
+    setCurrent(row) {
+      this.$refs.singleTable.setCurrentRow(row);
+    },
+    handleCurrentChange(val) {
+      this.currentRow = val;
+    },
+    getButtonEnable(propName, row) {
+      if (propName == "assignStock") {
+        if (
+          row.orderDetailStatus !== 0 &&
+          row.orderDetailStatus !== 60 &&
+          row.orderDetailStatus !== 70
+        ) {
+          return true;
+        } else {
+          return false;
+        }
+      }
+      return false;
+    },
+    parentCall(fun) {
+      if (typeof fun != "function") {
+        return console.log("鎵╁睍缁勪欢闇�瑕佷紶鍏ヤ竴涓洖璋冩柟娉曟墠鑳借幏鍙栫埗绾ue瀵硅薄");
+      }
+      fun(this);
+    },
+    handleRowClick(row) {
+      this.$refs.singleTable.toggleRowSelection(row);
+    },
+    handleSelectionChange(val) {
+      this.selection = val;
+    },
+    getDictionaryData() {
+      if (this.dictionaryList) {
+        return;
+      }
+      var param = [];
+      this.tableColumns.forEach((x) => {
+        if (x.type == "tag" && x.bindKey != "") {
+          param.push(x.bindKey);
+        }
+      });
+      this.http
+        .post("api/Sys_Dictionary/GetVueDictionary", param, "鏌ヨ涓�")
+        .then((x) => {
+          if (x.length > 0) {
+            this.dictionaryList = x;
+          }
+        });
+    },
+    getDictionary(row, column) {
+      if (this.dictionaryList) {
+        var item = this.dictionaryList.find((x) => x.dicNo == column.bindKey);
+        if (item) {
+          var dicItem = item.data.find((x) => x.key == row[column.prop]);
+          if (dicItem) {
+            return dicItem.value;
+          } else {
+            return row[column.prop];
+          }
+        } else {
+          return row[column.prop];
+        }
+      }
+    },
+  },
+};
+</script>
+<style scoped>
+.text-button {
+  border: 0px;
+}
+</style>
+
+<style>
+.text-button:hover {
+  background-color: #f0f9eb !important;
+}
+.el-table .warning-row {
+  background: oldlace;
+}
+.box-table .el-table tbody tr:hover > td {
+  background-color: #d8e0d4 !important;
+  /* color: #ffffff; */
+}
+
+.box-table .el-table tbody tr.current-row > td {
+  background-color: #f0f9eb !important;
+  /* color: #ffffff; */
+}
+
+.el-table .success-row {
+  background: #f0f9eb;
+}
+
+.box-table .el-table {
+  border: 1px solid #ebeef5;
+}
+</style>
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/extension/outbound/outboundOrder.js" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/extension/outbound/outboundOrder.js"
new file mode 100644
index 0000000..12a97ac
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/extension/outbound/outboundOrder.js"
@@ -0,0 +1,74 @@
+
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+import gridBody from './extend/outOrderDetail.vue'
+let extension = {
+    components: {
+      //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+      gridHeader: '',
+      gridBody: gridBody,
+      gridFooter: '',
+      //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+      modelHeader: '',
+      modelBody: '',
+      modelFooter: ''
+    },
+    tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+    buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+    methods: {
+       //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+      onInit() {  
+        //鎵╁睍椤甸潰鍒濆鍖栨搷浣�
+        this.columns.push({
+          field: '鎿嶄綔',
+          title: '鎿嶄綔',
+          width: 90,
+          fixed: 'right',
+          align: 'center',
+          formatter: (row) => {
+              return (
+                  '<i style="cursor: pointer;color: #2d8cf0;"class="el-icon-view">鏌ョ湅鏄庣粏</i>'
+              );
+          },
+          click: (row) => {
+              this.$refs.gridBody.open(row);
+          }
+      });
+      },
+      onInited() {
+        //妗嗘灦鍒濆鍖栭厤缃悗
+        //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+        //this.detailOptions.columns.forEach(column=>{ });
+      },
+      searchBefore(param) {
+        //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+        //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+        return true;
+      },
+      searchAfter(result) {
+        //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+        return true;
+      },
+      addBefore(formData) {
+        //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+        return true;
+      },
+      updateBefore(formData) {
+        //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+        return true;
+      },
+      rowClick({ row, column, event }) {
+        //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+        // 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)
+      }
+    }
+  };
+  export default extension;
+  
\ 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/extension/outbound/outboundOrderDetail.js" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/extension/outbound/outboundOrderDetail.js"
new file mode 100644
index 0000000..a39e193
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/extension/outbound/outboundOrderDetail.js"
@@ -0,0 +1,58 @@
+
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+let extension = {
+    components: {
+      //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+      gridHeader: '',
+      gridBody: '',
+      gridFooter: '',
+      //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+      modelHeader: '',
+      modelBody: '',
+      modelFooter: ''
+    },
+    tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+    buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+    methods: {
+       //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+      onInit() {  
+      },
+      onInited() {
+        //妗嗘灦鍒濆鍖栭厤缃悗
+        //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+        //this.detailOptions.columns.forEach(column=>{ });
+      },
+      searchBefore(param) {
+        //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+        //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+        return true;
+      },
+      searchAfter(result) {
+        //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+        return true;
+      },
+      addBefore(formData) {
+        //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+        return true;
+      },
+      updateBefore(formData) {
+        //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+        return true;
+      },
+      rowClick({ row, column, event }) {
+        //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+        // 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)
+      }
+    }
+  };
+  export default extension;
+  
\ 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/extension/stock/stockInfo.js" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/extension/stock/stockInfo.js"
new file mode 100644
index 0000000..a39e193
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/extension/stock/stockInfo.js"
@@ -0,0 +1,58 @@
+
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+let extension = {
+    components: {
+      //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+      gridHeader: '',
+      gridBody: '',
+      gridFooter: '',
+      //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+      modelHeader: '',
+      modelBody: '',
+      modelFooter: ''
+    },
+    tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+    buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+    methods: {
+       //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+      onInit() {  
+      },
+      onInited() {
+        //妗嗘灦鍒濆鍖栭厤缃悗
+        //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+        //this.detailOptions.columns.forEach(column=>{ });
+      },
+      searchBefore(param) {
+        //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+        //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+        return true;
+      },
+      searchAfter(result) {
+        //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+        return true;
+      },
+      addBefore(formData) {
+        //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+        return true;
+      },
+      updateBefore(formData) {
+        //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+        return true;
+      },
+      rowClick({ row, column, event }) {
+        //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+        // 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)
+      }
+    }
+  };
+  export default extension;
+  
\ 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/extension/stock/stockInfoDetail.js" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/extension/stock/stockInfoDetail.js"
new file mode 100644
index 0000000..a39e193
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/extension/stock/stockInfoDetail.js"
@@ -0,0 +1,58 @@
+
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+let extension = {
+    components: {
+      //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+      gridHeader: '',
+      gridBody: '',
+      gridFooter: '',
+      //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+      modelHeader: '',
+      modelBody: '',
+      modelFooter: ''
+    },
+    tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+    buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+    methods: {
+       //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+      onInit() {  
+      },
+      onInited() {
+        //妗嗘灦鍒濆鍖栭厤缃悗
+        //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+        //this.detailOptions.columns.forEach(column=>{ });
+      },
+      searchBefore(param) {
+        //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+        //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+        return true;
+      },
+      searchAfter(result) {
+        //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+        return true;
+      },
+      addBefore(formData) {
+        //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+        return true;
+      },
+      updateBefore(formData) {
+        //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+        return true;
+      },
+      rowClick({ row, column, event }) {
+        //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+        // 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)
+      }
+    }
+  };
+  export default extension;
+  
\ 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/extension/stock/stockView.js" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/extension/stock/stockView.js"
new file mode 100644
index 0000000..a39e193
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/extension/stock/stockView.js"
@@ -0,0 +1,58 @@
+
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+let extension = {
+    components: {
+      //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+      gridHeader: '',
+      gridBody: '',
+      gridFooter: '',
+      //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+      modelHeader: '',
+      modelBody: '',
+      modelFooter: ''
+    },
+    tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+    buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+    methods: {
+       //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+      onInit() {  
+      },
+      onInited() {
+        //妗嗘灦鍒濆鍖栭厤缃悗
+        //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+        //this.detailOptions.columns.forEach(column=>{ });
+      },
+      searchBefore(param) {
+        //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+        //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+        return true;
+      },
+      searchAfter(result) {
+        //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+        return true;
+      },
+      addBefore(formData) {
+        //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+        return true;
+      },
+      updateBefore(formData) {
+        //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+        return true;
+      },
+      rowClick({ row, column, event }) {
+        //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+        // 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)
+      }
+    }
+  };
+  export default extension;
+  
\ 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/router/viewGird.js" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/router/viewGird.js"
index cde4249..20a4120 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/router/viewGird.js"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/router/viewGird.js"
@@ -15,7 +15,6 @@
     name: 'permission',
     component: () => import('@/views/system/Permission.vue')
   },
-
   {
     path: '/Sys_Dictionary',
     name: 'Sys_Dictionary',
@@ -25,38 +24,87 @@
     path: '/Sys_Role',
     name: 'Sys_Role',
     component: () => import('@/views/system/Sys_Role.vue')
-  }, {
+  },
+  {
     path: '/Sys_Role1',
     name: 'Sys_Role1',
     component: () => import('@/views/system/Sys_Role1.vue')
-  }, {
+  },
+  {
     path: '/Sys_DictionaryList',
     name: 'Sys_DictionaryList',
     component: () => import('@/views/system/Sys_DictionaryList.vue')
-  }, {
+  },
+  {
     path: '/deviceInfo',
     name: 'deviceInfo',
     component: () => import('@/views/quartzJob/deviceInfo.vue')
-  }, {
+  },
+  {
     path: '/deviceProtocol',
     name: 'deviceProtocol',
     component: () => import('@/views/quartzJob/deviceProtocol.vue')
-  }, {
+  },
+  {
     path: '/deviceProtocolDetail',
     name: 'deviceProtocolDetail',
     component: () => import('@/views/quartzJob/deviceProtocolDetail.vue')
-  }, {
+  },
+  {
     path: '/dispatchInfo',
     name: 'dispatchInfo',
     component: () => import('@/views/quartzJob/dispatchInfo.vue')
-  }, {
+  },
+  {
     path: '/task',
     name: 'task',
     component: () => import('@/views/taskinfo/task.vue')
-  }, {
+  },
+  {
     path: '/router',
     name: 'router',
     component: () => import('@/views/basicinfo/router.vue')
-  }]
+  },
+  {
+    path: '/outboundOrder',
+    name: 'outboundOrder',
+    component: () => import('@/views/outbound/outboundOrder.vue')
+  },
+  {
+    path: '/outboundOrderDetail',
+    name: 'outboundOrderDetail',
+    component: () => import('@/views/outbound/outboundOrderDetail.vue')
+  },
+  {
+    path: '/stockInfo',
+    name: 'stockInfo',
+    component: () => import('@/views/stock/stockInfo.vue')
+  },
+  {
+    path: '/stockInfoDetail',
+    name: 'stockInfoDetail',
+    component: () => import('@/views/stock/stockInfoDetail.vue')
+  },
+  {
+    path: '/task',
+    name: 'task',
+    component: () => import('@/views/taskinfo/task.vue')
+  },
+  {
+    path: '/stockView',
+    name: 'stockView',
+    component: () => import('@/views/stock/stockView.vue')
+  },
+  {
+    path: '/locationInfo',
+    name: 'locationInfo',
+    component: () => import('@/views/basic/locationInfo.vue')
+  },
+  {
+    path: '/materielInfo',
+    name: 'materielInfo',
+    component: () => import('@/views/basic/materielInfo.vue')
+  }
+]
 
 export default viewgird
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/basic/locationInfo.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/basic/locationInfo.vue"
new file mode 100644
index 0000000..dd114ec
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/basic/locationInfo.vue"
@@ -0,0 +1,251 @@
+
+<template>
+  <view-grid
+    ref="grid"
+    :columns="columns"
+    :detail="detail"
+    :editFormFields="editFormFields"
+    :editFormOptions="editFormOptions"
+    :searchFormFields="searchFormFields"
+    :searchFormOptions="searchFormOptions"
+    :table="table"
+    :extend="extend"
+  >
+  </view-grid>
+</template>
+    <script>
+import extend from "@/extension/basic/locationInfo.js";
+import { ref, defineComponent } from "vue";
+export default defineComponent({
+  setup() {
+    const table = ref({
+      key: "id",
+      footer: "Foots",
+      cnName: "璐т綅淇℃伅",
+      name: "locationInfo",
+      url: "/LocationInfo/",
+      sortName: "id",
+    });
+    const editFormFields = ref({
+      row: "",
+      column: "",
+      layer: "",
+      depth: "",
+      locationType: "",
+      locationStatus: "",
+      enalbeStatus: "",
+      remark: "",
+    });
+    const editFormOptions = ref([
+      [
+        {
+          title: "璐т綅琛�",
+          required: true,
+          field: "row",
+          type: "string",
+        },
+        {
+          title: "璐т綅鍒�",
+          required: true,
+          field: "column",
+          type: "string",
+        },
+        {
+          title: "璐т綅灞�",
+          required: true,
+          field: "layer",
+          type: "string",
+        },
+        {
+          title: "璐т綅娣卞害",
+          required: true,
+          field: "depth",
+          type: "string",
+        },
+      ],
+      [
+        {
+          title: "璐т綅绫诲瀷",
+          required: true,
+          field: "locationType",
+          type: "string",
+        },
+        {
+          title: "鍖哄煙涓婚敭",
+          required: true,
+          field: "areaId",
+          type: "string",
+        },
+        {
+          title: "宸烽亾缂栧彿",
+          required: true,
+          field: "roadwayNo",
+          type: "string",
+        },
+      ],
+    ]);
+    const searchFormFields = ref({
+      locationCode: "",
+      roadwayNo: "",
+    });
+    const searchFormOptions = ref([
+      [
+        { title: "璐т綅缂栧彿", field: "locationCode" },
+        { title: "宸烽亾缂栧彿", field: "roadwayNo" },
+      ],
+    ]);
+    const columns = ref([
+      {
+        field: "id",
+        title: "Id",
+        type: "int",
+        width: 90,
+        hidden: true,
+        readonly: true,
+        require: true,
+        align: "left",
+      },
+      {
+        field: "areaId",
+        title: "鍖哄煙涓婚敭",
+        type: "string",
+        width: 90,
+        align: "left",
+        bind: {
+          key: "areainfo",
+          data: []
+        }
+      },
+      {
+        field: "locationCode",
+        title: "璐т綅缂栧彿",
+        type: "string",
+        width: 180,
+        align: "left",
+      },
+      {
+        field: "locationName",
+        title: "璐т綅鍚嶇О",
+        type: "string",
+        width: 220,
+        align: "left",
+      },
+      {
+        field: "roadwayNo",
+        title: "宸烽亾缂栧彿",
+        type: "decimal",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "row",
+        title: "璐т綅琛�",
+        type: "string",
+        width: 90,
+        align: "left",
+        hidden: true,
+      },
+      {
+        field: "column",
+        title: "璐т綅鍒�",
+        type: "int",
+        width: 120,
+        align: "left",
+        hidden: true,
+      },
+      {
+        field: "layer",
+        title: "璐т綅灞�",
+        type: "string",
+        width: 200,
+        align: "left",
+        hidden: true,
+      },
+      {
+        field: "depth",
+        title: "璐т綅娣卞害",
+        type: "string",
+        width: 180,
+        align: "left",
+        hidden: true,
+      },
+      {
+        field: "locationType",
+        title: "璐т綅绫诲瀷",
+        type: "string",
+        width: 120,
+        align: "left",
+        bind:{key: "locationTypeEnum", data: []}
+      },
+      {
+        field: "locationStatus",
+        title: "璐т綅鐘舵��",
+        type: "string",
+        width: 200,
+        align: "left",
+        bind: { key: "locationStatusEnum", data: [] },
+      },
+      {
+        field: "enableStatus",
+        title: "绂佺敤鐘舵��",
+        type: "string",
+        width: 180,
+        align: "left",
+        bind: { key: "enableStatusEnum", data: [] },
+      },
+      {
+        field: "creater",
+        title: "鍒涘缓浜�",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "createDate",
+        title: "鍒涘缓鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "modifier",
+        title: "淇敼浜�",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+      {
+        field: "modifyDate",
+        title: "淇敼鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "remark",
+        title: "澶囨敞",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+    ]);
+    const detail = ref({
+      cnName: "#detailCnName",
+      table: "",
+      columns: [],
+      sortName: "",
+    });
+    return {
+      table,
+      extend,
+      editFormFields,
+      editFormOptions,
+      searchFormFields,
+      searchFormOptions,
+      columns,
+      detail,
+    };
+  },
+});
+</script>
+    
\ 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/basic/materielInfo.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/basic/materielInfo.vue"
new file mode 100644
index 0000000..e9860cd
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/basic/materielInfo.vue"
@@ -0,0 +1,230 @@
+
+<template>
+  <view-grid
+    ref="grid"
+    :columns="columns"
+    :detail="detail"
+    :editFormFields="editFormFields"
+    :editFormOptions="editFormOptions"
+    :searchFormFields="searchFormFields"
+    :searchFormOptions="searchFormOptions"
+    :table="table"
+    :extend="extend"
+  >
+  </view-grid>
+</template>
+    <script>
+import extend from "@/extension/basic/materielInfo.js";
+import { ref, defineComponent } from "vue";
+export default defineComponent({
+  setup() {
+    const table = ref({
+      key: "id",
+      footer: "Foots",
+      cnName: "鐗╂枡淇℃伅",
+      name: "materielInfo",
+      url: "/MaterielInfo/",
+      sortName: "id",
+    });
+    const editFormFields = ref({
+      areaId: "",
+      materielCode: "",
+      materielName: "",
+      materielDes: "",
+      isMixBatch: "",
+      isMixMateriel: "",
+    });
+    const editFormOptions = ref([
+      [
+        {
+          title: "鍖哄煙",
+          required: true,
+          field: "areaId",
+          type: "string",
+        },
+        {
+          title: "鐗╂枡缂栧彿",
+          required: true,
+          field: "materielCode",
+          type: "string",
+        },
+        {
+          title: "鐗╂枡鍚嶇О",
+          required: true,
+          field: "materielName",
+          type: "string",
+        },
+        {
+          title: "璁¢噺鍗曚綅",
+          required: true,
+          field: "unit",
+          type: "string",
+        },
+      ],
+      [
+        {
+          title: "鍏佽娣锋壒",
+          field: "isMixBatch",
+          type: "string",
+        },
+        {
+          title: "鍏佽娣锋枡",
+          field: "isMixMateriel",
+          type: "string",
+        },
+        {
+          title: "鐗╂枡鎻忚堪",
+          field: "materielDes",
+          type: "textarea",
+        },
+      ],
+    ]);
+    const searchFormFields = ref({
+      materielCode: "",
+      materielName: "",
+      areaId: "",
+    });
+    const searchFormOptions = ref([
+      [
+        { title: "鐗╂枡缂栧彿", field: "materielCode", type: "like" },
+        { title: "鐗╂枡鍚嶇О", field: "materielName", type: "like" },
+        { title: "璁惧鐘舵��", field: "deviceStatus" },
+      ],
+    ]);
+    const columns = ref([
+      {
+        field: "id",
+        title: "Id",
+        type: "int",
+        width: 90,
+        hidden: true,
+        readonly: true,
+        require: true,
+        align: "left",
+      },
+      {
+        field: "areaId",
+        title: "鍖哄煙涓婚敭",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "materielCode",
+        title: "鐗╂枡缂栧彿",
+        type: "string",
+        width: 150,
+        align: "left",
+      },
+      {
+        field: "materielName",
+        title: "鐗╂枡鍚嶇О",
+        type: "string",
+        width: 150,
+        align: "left",
+      },
+      {
+        field: "materielDes",
+        title: "鐗╂枡鎻忚堪",
+        type: "decimal",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "cotainerType",
+        title: "瀹瑰櫒绫诲瀷",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "packspes",
+        title: "鍖呰瑙勬牸",
+        type: "int",
+        width: 120,
+        align: "left",
+      },
+      {
+        field: "attribute",
+        title: "鐗╂枡灞炴��",
+        type: "string",
+        width: 200,
+        align: "left",
+      },
+      {
+        field: "unit",
+        title: "璁¢噺鍗曚綅",
+        type: "string",
+        width: 180,
+        align: "left",
+      },
+      {
+        field: "validity",
+        title: "鏈夋晥鏈�",
+        type: "string",
+        width: 120,
+        align: "left",
+      },
+      {
+        field: "safetyStock",
+        title: "瀹夊叏搴撳瓨",
+        type: "string",
+        width: 120,
+        align: "left",
+      },
+      {
+        field: "creater",
+        title: "鍒涘缓浜�",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "createDate",
+        title: "鍒涘缓鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "modifier",
+        title: "淇敼浜�",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+      {
+        field: "modifyDate",
+        title: "淇敼鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "remark",
+        title: "澶囨敞",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+    ]);
+    const detail = ref({
+      cnName: "#detailCnName",
+      table: "",
+      columns: [],
+      sortName: "",
+    });
+    return {
+      table,
+      extend,
+      editFormFields,
+      editFormOptions,
+      searchFormFields,
+      searchFormOptions,
+      columns,
+      detail,
+    };
+  },
+});
+</script>
+    
\ 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/outbound/outboundOrder.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/outbound/outboundOrder.vue"
new file mode 100644
index 0000000..bb4071b
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/outbound/outboundOrder.vue"
@@ -0,0 +1,321 @@
+
+<template>
+  <view-grid
+    ref="grid"
+    :columns="columns"
+    :detail="detail"
+    :editFormFields="editFormFields"
+    :editFormOptions="editFormOptions"
+    :searchFormFields="searchFormFields"
+    :searchFormOptions="searchFormOptions"
+    :table="table"
+    :extend="extend"
+  >
+  </view-grid>
+</template>
+    <script>
+import extend from "@/extension/outbound/outboundOrder.js";
+import { ref, defineComponent } from "vue";
+export default defineComponent({
+  setup() {
+    const table = ref({
+      key: "id",
+      footer: "Foots",
+      cnName: "鍑哄簱鍗�",
+      name: "outboundOrder",
+      url: "/OutboundOrder/",
+      sortName: "id",
+    });
+    const editFormFields = ref({
+      orderType: "",
+      upperOrderNo: "",
+      orderStatus: "",
+      remark: "",
+    });
+    const editFormOptions = ref([
+      [
+        {
+          title: "鍗曟嵁绫诲瀷",
+          required: true,
+          field: "orderType",
+          type: "select",
+          dataKey: "outOrderType",
+          data: [],
+        },
+        {
+          title: "涓婃父鍗曟嵁缂栧彿",
+          field: "upperOrderNo",
+          type: "string",
+        },
+        {
+          title: "鍗曟嵁鐘舵��",
+          field: "orderStatus",
+          type: "select",
+          dataKey: "inboundState",
+          data: [],
+          readonly: true,
+        },
+        {
+          title: "澶囨敞",
+          field: "remark",
+          type: "textarea",
+        },
+      ],
+    ]);
+    const searchFormFields = ref({
+      orderNo: "",
+      upperOrderNo: "",
+      orderType: "",
+      orderStatus: "",
+      createType: "",
+      creater: "",
+      createDate: "",
+    });
+    const searchFormOptions = ref([
+      [
+        { title: "鍗曟嵁缂栧彿", field: "orderNo", type: "like" },
+        { title: "涓婃父鍗曟嵁缂栧彿", field: "upperOrderNo", type: "like" },
+        {
+          title: "鍗曟嵁绫诲瀷",
+          field: "orderType",
+          type: "select",
+          dataKey: "outOrderType",
+          data: [],
+        },
+        {
+          title: "鍗曟嵁鐘舵��",
+          field: "orderStatus",
+          type: "select",
+          dataKey: "inboundState",
+          data: [],
+        },
+      ],
+      [
+        {
+          title: "鍒涘缓鏂瑰紡",
+          field: "createType",
+          type: "select",
+          dataKey: "createType",
+          data: [],
+        },
+        { title: "鍒涘缓鑰�", field: "creater", type: "like" },
+        { title: "鍒涘缓鏃堕棿", field: "createDate", type: "datatime" },
+      ],
+    ]);
+    const columns = ref([
+      {
+        field: "id",
+        title: "Id",
+        type: "int",
+        width: 90,
+        hidden: true,
+        readonly: true,
+        require: true,
+        align: "left",
+      },
+      {
+        field: "orderNo",
+        title: "鍗曟嵁缂栧彿",
+        type: "string",
+        width: 120,
+        align: "left",
+        link: true,
+      },
+      {
+        field: "upperOrderNo",
+        title: "涓婃父鍗曟嵁缂栧彿",
+        type: "string",
+        width: 150,
+        align: "left",
+      },
+      {
+        field: "orderType",
+        title: "鍗曟嵁绫诲瀷",
+        type: "string",
+        width: 150,
+        align: "left",
+        bind: { key: "outOrderType", data: [] },
+      },
+      {
+        field: "orderStatus",
+        title: "鍗曟嵁鐘舵��",
+        type: "decimal",
+        width: 90,
+        align: "left",
+        bind: { key: "outboundStatusEnum", data: [] },
+      },
+      {
+        field: "createType",
+        title: "鍒涘缓鏂瑰紡",
+        type: "string",
+        width: 90,
+        align: "left",
+        bind: { key: "createType", data: [] },
+      },
+      {
+        field: "creater",
+        title: "鍒涘缓浜�",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "createDate",
+        title: "鍒涘缓鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "modifier",
+        title: "淇敼浜�",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+      {
+        field: "modifyDate",
+        title: "淇敼鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "remark",
+        title: "澶囨敞",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+    ]);
+    const detail = ref({
+      cnName: "鍑哄簱鏄庣粏鍗�",
+      table: "OnboundOrderDetail",
+      columns: [
+        {
+          field: "id",
+          title: "Id",
+          type: "int",
+          width: 90,
+          hidden: true,
+          readonly: true,
+          require: true,
+          align: "left",
+        },
+        {
+          field: "orderId",
+          title: "鍑哄簱鍗曚富閿�",
+          type: "string",
+          width: 90,
+          align: "left",
+          hidden: true,
+        },
+        {
+          field: "materielCode",
+          title: "鐗╂枡缂栧彿",
+          type: "string",
+          width: 150,
+          align: "left",
+          edit: { type: "string" },
+          required: true,
+        },
+        {
+          field: "materielName",
+          title: "鐗╂枡鍚嶇О",
+          type: "string",
+          width: 150,
+          align: "left",
+        },
+        {
+          field: "batchNo",
+          title: "鎵规鍙�",
+          type: "decimal",
+          width: 90,
+          align: "left",
+          edit: { type: "string" },
+          required: true,
+        },
+        {
+          field: "orderQuantity",
+          title: "鍗曟嵁鏁伴噺",
+          type: "string",
+          width: 90,
+          align: "left",
+          edit: { type: "number" },
+          required: true,
+        },
+        {
+          field: "lockQuantity",
+          title: "閿佸畾鏁伴噺",
+          type: "int",
+          width: 120,
+          align: "left",
+        },
+        {
+          field: "overOutQuantity",
+          title: "宸插嚭鏁伴噺",
+          type: "string",
+          width: 200,
+          align: "left",
+        },
+        {
+          field: "orderDetailStatus",
+          title: "璁㈠崟鏄庣粏鐘舵��",
+          type: "string",
+          width: 180,
+          align: "left",
+          bind: { key: "orderDetailStatusEnum", data: [] },
+        },
+        {
+          field: "creater",
+          title: "鍒涘缓浜�",
+          type: "string",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "createDate",
+          title: "鍒涘缓鏃堕棿",
+          type: "datetime",
+          width: 160,
+          align: "left",
+        },
+        {
+          field: "modifier",
+          title: "淇敼浜�",
+          type: "string",
+          width: 100,
+          align: "left",
+        },
+        {
+          field: "modifyDate",
+          title: "淇敼鏃堕棿",
+          type: "datetime",
+          width: 160,
+          align: "left",
+        },
+        {
+          field: "remark",
+          title: "澶囨敞",
+          type: "string",
+          width: 100,
+          align: "left",
+        },
+      ],
+      sortName: "id",
+      key: "id",
+    });
+    return {
+      table,
+      extend,
+      editFormFields,
+      editFormOptions,
+      searchFormFields,
+      searchFormOptions,
+      columns,
+      detail,
+    };
+  },
+});
+</script>
+    
\ 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/outbound/outboundOrderDetail.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/outbound/outboundOrderDetail.vue"
new file mode 100644
index 0000000..e992c4c
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/outbound/outboundOrderDetail.vue"
@@ -0,0 +1,221 @@
+
+<template>
+    <view-grid
+      ref="grid"
+      :columns="columns"
+      :detail="detail"
+      :editFormFields="editFormFields"
+      :editFormOptions="editFormOptions"
+      :searchFormFields="searchFormFields"
+      :searchFormOptions="searchFormOptions"
+      :table="table"
+      :extend="extend"
+    >
+    </view-grid>
+  </template>
+    <script>
+  import extend from "@/extension/outbound/outboundOrderDetail.js";
+  import { ref, defineComponent } from "vue";
+  export default defineComponent({
+    setup() {
+      const table = ref({
+        key: "id",
+        footer: "Foots",
+        cnName: "鍑哄簱鍗曟槑缁�",
+        name: "outboundOrderDetail",
+        url: "/OutboundOrderDetail/",
+        sortName: "id",
+      });
+      const editFormFields = ref({
+        deviceCode: "",
+        deviceName: "",
+        deviceType: "",
+        deviceStatus: "",
+        deviceIp: "",
+        devicePort: "",
+        devicePlcType: "",
+        deviceRemark: "",
+      });
+      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",
+          },
+        ],
+      ]);
+      const searchFormFields = ref({
+        deviceCode: "",
+        deviceType: "",
+        deviceStatus: "",
+      });
+      const searchFormOptions = ref([
+        [
+          { title: "璁惧缂栧彿", field: "deviceCode" },
+          { title: "璁惧绫诲瀷", field: "deviceType" },
+          { title: "璁惧鐘舵��", field: "deviceStatus" },
+        ],
+      ]);
+      const columns = ref([
+      {
+          field: "id",
+          title: "Id",
+          type: "int",
+          width: 90,
+          hidden: true,
+          readonly: true,
+          align: "left",
+        },
+        {
+          field: "orderId",
+          title: "鍑哄簱鍗曚富閿�",
+          type: "string",
+          width: 90,
+          align: "left",
+          hidden: true,
+        },
+        {
+          field: "materielCode",
+          title: "鐗╂枡缂栧彿",
+          type: "string",
+          width: 150,
+          align: "left",
+        },
+        {
+          field: "materielName",
+          title: "鐗╂枡鍚嶇О",
+          type: "string",
+          width: 150,
+          align: "left",
+        },
+        {
+          field: "batchNo",
+          title: "鎵规鍙�",
+          type: "decimal",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "orderQuantity",
+          title: "鍗曟嵁鏁伴噺",
+          type: "string",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "lockQuantity",
+          title: "閿佸畾鏁伴噺",
+          type: "int",
+          width: 120,
+          align: "left",
+        },
+        {
+          field: "overOutQuantity",
+          title: "宸插嚭鏁伴噺",
+          type: "string",
+          width: 200,
+          align: "left",
+        },
+        {
+          field: "orderDetailStatus",
+          title: "璁㈠崟鏄庣粏鐘舵��",
+          type: "string",
+          width: 180,
+          align: "left",
+        },
+        {
+          field: "creater",
+          title: "鍒涘缓浜�",
+          type: "string",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "createDate",
+          title: "鍒涘缓鏃堕棿",
+          type: "datetime",
+          width: 160,
+          align: "left",
+        },
+        {
+          field: "modifier",
+          title: "淇敼浜�",
+          type: "string",
+          width: 100,
+          align: "left",
+        },
+        {
+          field: "modifyDate",
+          title: "淇敼鏃堕棿",
+          type: "datetime",
+          width: 160,
+          align: "left",
+        },
+        {
+          field: "remark",
+          title: "澶囨敞",
+          type: "string",
+          width: 100,
+          align: "left",
+        },
+      ]);
+      const detail = ref({
+        cnName: "#detailCnName",
+        table: "",
+        columns: [],
+        sortName: "",
+      });
+      return {
+        table,
+        extend,
+        editFormFields,
+        editFormOptions,
+        searchFormFields,
+        searchFormOptions,
+        columns,
+        detail,
+      };
+    },
+  });
+  </script>
+    
\ 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/stock/stockInfo.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/stock/stockInfo.vue"
new file mode 100644
index 0000000..0adaf93
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/stock/stockInfo.vue"
@@ -0,0 +1,187 @@
+
+<template>
+    <view-grid
+      ref="grid"
+      :columns="columns"
+      :detail="detail"
+      :editFormFields="editFormFields"
+      :editFormOptions="editFormOptions"
+      :searchFormFields="searchFormFields"
+      :searchFormOptions="searchFormOptions"
+      :table="table"
+      :extend="extend"
+    >
+    </view-grid>
+  </template>
+    <script>
+  import extend from "@/extension/stock/stockInfo.js";
+  import { ref, defineComponent } from "vue";
+  export default defineComponent({
+    setup() {
+      const table = ref({
+        key: "id",
+        footer: "Foots",
+        cnName: "搴撳瓨淇℃伅",
+        name: "stockInfo",
+        url: "/StockInfo/",
+        sortName: "id",
+      });
+      const editFormFields = ref({
+        deviceCode: "",
+        deviceName: "",
+        deviceType: "",
+        deviceStatus: "",
+        deviceIp: "",
+        devicePort: "",
+        devicePlcType: "",
+        deviceRemark: "",
+      });
+      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",
+          },
+        ],
+      ]);
+      const searchFormFields = ref({
+        deviceCode: "",
+        deviceType: "",
+        deviceStatus: "",
+      });
+      const searchFormOptions = ref([
+        [
+          { title: "璁惧缂栧彿", field: "deviceCode" },
+          { title: "璁惧绫诲瀷", field: "deviceType" },
+          { title: "璁惧鐘舵��", field: "deviceStatus" },
+        ],
+      ]);
+      const columns = ref([
+        {
+          field: "id",
+          title: "Id",
+          type: "int",
+          width: 90,
+          hidden: true,
+          readonly: true,
+          require: true,
+          align: "left",
+        },
+        {
+          field: "palletCode",
+          title: "鎵樼洏缂栧彿",
+          type: "string",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "locationCode",
+          title: "璐т綅缂栧彿",
+          type: "string",
+          width: 150,
+          align: "left",
+        },
+        {
+          field: "isFull",
+          title: "鏄惁婊$洏",
+          type: "string",
+          width: 150,
+          align: "left",
+          bind: { key: "yesno", data: [] },
+        },
+        {
+          field: "creater",
+          title: "鍒涘缓浜�",
+          type: "string",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "createDate",
+          title: "鍒涘缓鏃堕棿",
+          type: "datetime",
+          width: 160,
+          align: "left",
+        },
+        {
+          field: "modifier",
+          title: "淇敼浜�",
+          type: "string",
+          width: 100,
+          align: "left",
+        },
+        {
+          field: "modifyDate",
+          title: "淇敼鏃堕棿",
+          type: "datetime",
+          width: 160,
+          align: "left",
+        },
+        {
+          field: "remark",
+          title: "澶囨敞",
+          type: "string",
+          width: 100,
+          align: "left",
+        },
+      ]);
+      const detail = ref({
+        cnName: "#detailCnName",
+        table: "",
+        columns: [],
+        sortName: "",
+      });
+      return {
+        table,
+        extend,
+        editFormFields,
+        editFormOptions,
+        searchFormFields,
+        searchFormOptions,
+        columns,
+        detail,
+      };
+    },
+  });
+  </script>
+    
\ 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/stock/stockInfoDetail.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/stock/stockInfoDetail.vue"
new file mode 100644
index 0000000..e9a039c
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/stock/stockInfoDetail.vue"
@@ -0,0 +1,228 @@
+
+<template>
+    <view-grid
+      ref="grid"
+      :columns="columns"
+      :detail="detail"
+      :editFormFields="editFormFields"
+      :editFormOptions="editFormOptions"
+      :searchFormFields="searchFormFields"
+      :searchFormOptions="searchFormOptions"
+      :table="table"
+      :extend="extend"
+    >
+    </view-grid>
+  </template>
+    <script>
+  import extend from "@/extension/stock/stockInfoDetail.js";
+  import { ref, defineComponent } from "vue";
+  export default defineComponent({
+    setup() {
+      const table = ref({
+        key: "id",
+        footer: "Foots",
+        cnName: "搴撳瓨淇℃伅鏄庣粏",
+        name: "stockInfoDetail",
+        url: "/StockInfoDetail/",
+        sortName: "id",
+      });
+      const editFormFields = ref({
+        deviceCode: "",
+        deviceName: "",
+        deviceType: "",
+        deviceStatus: "",
+        deviceIp: "",
+        devicePort: "",
+        devicePlcType: "",
+        deviceRemark: "",
+      });
+      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",
+          },
+        ],
+      ]);
+      const searchFormFields = ref({
+        deviceCode: "",
+        deviceType: "",
+        deviceStatus: "",
+      });
+      const searchFormOptions = ref([
+        [
+          { title: "璁惧缂栧彿", field: "deviceCode" },
+          { title: "璁惧绫诲瀷", field: "deviceType" },
+          { title: "璁惧鐘舵��", field: "deviceStatus" },
+        ],
+      ]);
+      const columns = ref([
+        {
+          field: "id",
+          title: "Id",
+          type: "int",
+          width: 90,
+          hidden: true,
+          readonly: true,
+          require: true,
+          align: "left",
+        },
+        {
+          field: "stockId",
+          title: "搴撳瓨淇℃伅涓婚敭",
+          type: "string",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "materielCode",
+          title: "鐗╂枡缂栧彿",
+          type: "string",
+          width: 150,
+          align: "left",
+        },
+        {
+          field: "materielName",
+          title: "鐗╂枡鍚嶇О",
+          type: "string",
+          width: 150,
+          align: "left",
+        },
+        {
+          field: "orderNo",
+          title: "鍗曟嵁缂栧彿",
+          type: "decimal",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "batchNo",
+          title: "鎵规鍙�",
+          type: "string",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "serialNumber",
+          title: "搴忓垪鍙�",
+          type: "int",
+          width: 120,
+          align: "left",
+        },
+        {
+          field: "stockQuantity",
+          title: "搴撳瓨鏁伴噺",
+          type: "string",
+          width: 200,
+          align: "left",
+        },
+        {
+          field: "outboundQuantity",
+          title: "鍑哄簱鏁伴噺",
+          type: "string",
+          width: 180,
+          align: "left",
+        },
+        {
+          field: "status",
+          title: "搴撳瓨鏄庣粏鐘舵��",
+          type: "string",
+          width: 120,
+          align: "left",
+        },
+        {
+          field: "creater",
+          title: "鍒涘缓浜�",
+          type: "string",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "createDate",
+          title: "鍒涘缓鏃堕棿",
+          type: "datetime",
+          width: 160,
+          align: "left",
+        },
+        {
+          field: "modifier",
+          title: "淇敼浜�",
+          type: "string",
+          width: 100,
+          align: "left",
+        },
+        {
+          field: "modifyDate",
+          title: "淇敼鏃堕棿",
+          type: "datetime",
+          width: 160,
+          align: "left",
+        },
+        {
+          field: "remark",
+          title: "澶囨敞",
+          type: "string",
+          width: 100,
+          align: "left",
+        },
+      ]);
+      const detail = ref({
+        cnName: "#detailCnName",
+        table: "",
+        columns: [],
+        sortName: "",
+      });
+      return {
+        table,
+        extend,
+        editFormFields,
+        editFormOptions,
+        searchFormFields,
+        searchFormOptions,
+        columns,
+        detail,
+      };
+    },
+  });
+  </script>
+    
\ 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/stock/stockView.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/stock/stockView.vue"
new file mode 100644
index 0000000..26d463e
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/stock/stockView.vue"
@@ -0,0 +1,344 @@
+
+<template>
+  <view-grid
+    ref="grid"
+    :columns="columns"
+    :detail="detail"
+    :editFormFields="editFormFields"
+    :editFormOptions="editFormOptions"
+    :searchFormFields="searchFormFields"
+    :searchFormOptions="searchFormOptions"
+    :table="table"
+    :extend="extend"
+  >
+  </view-grid>
+</template>
+    <script>
+import extend from "@/extension/stock/stockView.js";
+import { ref, defineComponent } from "vue";
+export default defineComponent({
+  setup() {
+    const table = ref({
+      key: "stockId",
+      footer: "Foots",
+      cnName: "搴撳瓨瑙嗗浘",
+      name: "stockView",
+      url: "/stockView/",
+      sortName: "stockId",
+    });
+    const editFormFields = ref({
+      palletCode: "",
+      locationCode: "",
+      locationName: "",
+    });
+    const editFormOptions = ref([
+      [
+        {
+          title: "鎵樼洏缂栧彿",
+          required: true,
+          field: "palletCode",
+          type: "string",
+        },
+        {
+          title: "璐т綅缂栧彿",
+          required: true,
+          field: "locationCode",
+          type: "string",
+        },
+        {
+          title: "璐т綅鍚嶇О",
+          required: true,
+          field: "locationName",
+          type: "string",
+        },
+      ],
+    ]);
+    const searchFormFields = ref({
+      palletCode: "",
+      locationCode: "",
+    });
+    const searchFormOptions = ref([
+      [
+        { title: "鎵樼洏缂栧彿", field: "palletCode" },
+        { title: "璐т綅缂栧彿", field: "locationCode" },
+      ],
+    ]);
+    const columns = ref([
+      {
+        field: "stockId",
+        title: "Id",
+        type: "int",
+        width: 90,
+        hidden: true,
+        readonly: true,
+        require: true,
+        align: "left",
+      },
+      {
+        field: "palletCode",
+        title: "鎵樼洏缂栧彿",
+        type: "string",
+        width: 150,
+        link: true,
+        align: "left",
+      },
+      {
+        field: "locationCode",
+        title: "璐т綅缂栧彿",
+        type: "string",
+        width: 180,
+        align: "left",
+      },
+      {
+        field: "locationName",
+        title: "璐т綅鍚嶇О",
+        type: "string",
+        width: 220,
+        align: "left",
+      },
+      {
+        field: "roadwayNo",
+        title: "宸烽亾缂栧彿",
+        type: "decimal",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "row",
+        title: "璐т綅琛�",
+        type: "string",
+        width: 90,
+        align: "left",
+        hidden: true,
+      },
+      {
+        field: "column",
+        title: "璐т綅鍒�",
+        type: "int",
+        width: 120,
+        align: "left",
+        hidden: true,
+      },
+      {
+        field: "layer",
+        title: "璐т綅灞�",
+        type: "string",
+        width: 200,
+        align: "left",
+        hidden: true,
+      },
+      {
+        field: "depth",
+        title: "璐т綅娣卞害",
+        type: "string",
+        width: 180,
+        align: "left",
+        hidden: true,
+      },
+      {
+        field: "stockStatus",
+        title: "搴撳瓨鐘舵��",
+        type: "string",
+        width: 200,
+        align: "left",
+        bind: { key: "stockStatusEmun", data: [] },
+      },
+      {
+        field: "locationType",
+        title: "璐т綅绫诲瀷",
+        type: "string",
+        width: 120,
+        align: "left",
+        bind:{key: "locationTypeEnum", data: []}
+      },
+      {
+        field: "locationStatus",
+        title: "璐т綅鐘舵��",
+        type: "string",
+        width: 200,
+        align: "left",
+        bind: { key: "locationStatusEnum", data: [] },
+      },
+      {
+        field: "enalbeStatus",
+        title: "绂佺敤鐘舵��",
+        type: "string",
+        width: 180,
+        align: "left",
+        bind: { key: "enableStatusEnum", data: [] },
+      },
+      {
+        field: "isFull",
+        title: "鏄惁婊$洏",
+        type: "string",
+        width: 150,
+        align: "left",
+        hidden: true,
+          bind: { key: "yesno", data: [] },
+      },
+      {
+        field: "creater",
+        title: "鍒涘缓浜�",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "createDate",
+        title: "鍒涘缓鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "modifier",
+        title: "淇敼浜�",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+      {
+        field: "modifyDate",
+        title: "淇敼鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "remark",
+        title: "澶囨敞",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+    ]);
+    const detail = ref({
+      cnName: "搴撳瓨鏄庣粏淇℃伅",
+      table: "StockInfoDetail",
+      columns: [
+        {
+          field: "id",
+          title: "Id",
+          type: "int",
+          width: 90,
+          hidden: true,
+          readonly: true,
+          require: true,
+          align: "left",
+        },
+        {
+          field: "stockId",
+          title: "搴撳瓨淇℃伅涓婚敭",
+          type: "string",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "materielCode",
+          title: "鐗╂枡缂栧彿",
+          type: "string",
+          width: 150,
+          align: "left",
+        },
+        {
+          field: "materielName",
+          title: "鐗╂枡鍚嶇О",
+          type: "string",
+          width: 150,
+          align: "left",
+        },
+        {
+          field: "orderNo",
+          title: "鍗曟嵁缂栧彿",
+          type: "decimal",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "batchNo",
+          title: "鎵规鍙�",
+          type: "string",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "serialNumber",
+          title: "搴忓垪鍙�",
+          type: "int",
+          width: 120,
+          align: "left",
+        },
+        {
+          field: "stockQuantity",
+          title: "搴撳瓨鏁伴噺",
+          type: "string",
+          width: 200,
+          align: "left",
+        },
+        {
+          field: "outboundQuantity",
+          title: "鍑哄簱鏁伴噺",
+          type: "string",
+          width: 180,
+          align: "left",
+        },
+        {
+          field: "status",
+          title: "搴撳瓨鏄庣粏鐘舵��",
+          type: "string",
+          width: 120,
+          align: "left",
+        },
+        {
+          field: "creater",
+          title: "鍒涘缓浜�",
+          type: "string",
+          width: 90,
+          align: "left",
+        },
+        {
+          field: "createDate",
+          title: "鍒涘缓鏃堕棿",
+          type: "datetime",
+          width: 160,
+          align: "left",
+        },
+        {
+          field: "modifier",
+          title: "淇敼浜�",
+          type: "string",
+          width: 100,
+          align: "left",
+        },
+        {
+          field: "modifyDate",
+          title: "淇敼鏃堕棿",
+          type: "datetime",
+          width: 160,
+          align: "left",
+        },
+        {
+          field: "remark",
+          title: "澶囨敞",
+          type: "string",
+          width: 100,
+          align: "left",
+        },
+      ],
+      sortName: "id",
+      key: "id",
+    });
+    return {
+      table,
+      extend,
+      editFormFields,
+      editFormOptions,
+      searchFormFields,
+      searchFormOptions,
+      columns,
+      detail,
+    };
+  },
+});
+</script>
+    
\ No newline at end of file

--
Gitblit v1.9.3