647556386
2025-11-22 68dba27a19bdc097f5726095115769709638d7eb
提交
已添加1个文件
已修改5个文件
749 ■■■■■ 文件已修改
项目代码/WIDESEA_WMSClient/src/extension/inbound/extend/allocateOrderDetail.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WIDESEA_WMSClient/src/extension/outbound/extend/NoStockOut.vue 380 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WIDESEA_WMSClient/src/extension/outbound/extend/outOrderDetail.vue 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WIDESEA_WMSClient/src/extension/stock/stockView.js 116 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WIDESEA_WMSClient/src/views/stock/stockView.vue 228 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_DTO/Stock/StockViewDTO.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ÏîÄ¿´úÂë/WIDESEA_WMSClient/src/extension/inbound/extend/allocateOrderDetail.vue
@@ -4,6 +4,7 @@
      v-model="showDetialBox"
      :lazy="true"
      width="75%"
      height="80%"
      title="单据明细信息"
    >
      <div class="box-head">
@@ -362,7 +363,7 @@
        }
      }, {
        default: () => h(ElForm, {
          model: formData,
          model: formData00,
          rules: {
            selectedPlatform: [
              { required: true, message: '请选择出库站台', trigger: 'change' }
ÏîÄ¿´úÂë/WIDESEA_WMSClient/src/extension/outbound/extend/NoStockOut.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,380 @@
<template>
  <div>
    <vol-box
      v-model="showDetailBox"
      :lazy="true"
      width="65%"
      :padding="20"
      title="无库存出库"
      class="custom-vol-box"
    >
      <div>
        <!-- ä¸Šæ–¹è¾“入框 -->
        <el-form :inline="true" :model="formData" ref="formData" style="margin-bottom: 20px; align-items: flex-end;">
          <el-form-item
            label="扫描条码:"
            style="width: 80%"
            prop="barcode"
          >
            <el-input
              ref="barcodeInput"
              v-model="formData.barcode"
              placeholder="请使用扫码枪扫描条码,或手动输入"
              @keyup.enter="handleScan"
              autofocus
              class="custom-input"
            ></el-input>
          </el-form-item>
          <el-form-item>
            <el-button type="primary" size="small" @click="handleScan" class="custom-button">
              <i class="el-icon-search"></i> ç¡®è®¤æ‰«æ
            </el-button>
          </el-form-item>
        </el-form>
        <!-- ä¸‹æ–¹æ˜¾ç¤ºæ¡† -->
        <div class="scan-list">
          <el-card shadow="hover" style="margin-bottom: 10px; border: none;" class="custom-card">
            <div class="card-header">
              <span class="header-title">已扫描条码列表(共{{ scannedBarcodes.length }}条)</span>
              <el-button
                class="clear-all-btn"
                @click="clearAll"
                :disabled="scannedBarcodes.length === 0"
              >清空所有</el-button>
            </div>
            <div class="card-body">
              <el-scrollbar height="400px" class="custom-scrollbar">
                <!-- ä½¿ç”¨ transition-group åŒ…裹以实现动画 -->
                <transition-group name="barcode-item-transition">
                  <div class="barcode-item" v-for="(barcode, index) in scannedBarcodes" :key="barcode" :data-index="index">
                    <span class="barcode-text">{{ index + 1 }}. {{ barcode }}</span>
                    <el-button
                      class="delete-btn"
                      @click="removeItem(index)"
                    >删除</el-button>
                  </div>
                </transition-group>
                <div class="empty-tip" v-if="scannedBarcodes.length === 0">
                  <i class="el-icon-information"></i>
                  <span>暂无扫描记录,请扫描条码</span>
                </div>
              </el-scrollbar>
            </div>
          </el-card>
        </div>
      </div>
      <template #footer>
        <div class="footer-actions">
          <el-button type="primary" size="small" @click="submit" :disabled="scannedBarcodes.length === 0" class="submit-btn">
            <i class="el-icon-check"></i> æäº¤å‡ºåº“
          </el-button>
          <el-button type="text" size="small" @click="showDetailBox = false" class="cancel-btn">
            å–消
          </el-button>
        </div>
      </template>
    </vol-box>
  </div>
</template>
<script>
import VolBox from "@/components/basic/VolBox.vue";
export default {
  components: { VolBox },
  data() {
    return {
      showDetailBox: false,
      formData: {
        barcode: "",
      },
      scannedBarcodes: [],
    };
  },
  methods: {
    open() {
      this.showDetailBox = true;
      this.scannedBarcodes = [];
      this.formData.barcode = "";
      this.$nextTick(() => {
        this.$refs.barcodeInput.focus();
      });
    },
    handleScan() {
      const barcode = this.formData.barcode.trim();
      if (!barcode) {
        this.$refs.barcodeInput.focus();
        return;
      }
      if (this.scannedBarcodes.includes(barcode)) {
        this.$message.warning(`条码 ${barcode} å·²æ‰«æè¿‡ï¼Œè¯·å‹¿é‡å¤æ‰«æ`);
        this.formData.barcode = "";
        this.$refs.barcodeInput.focus();
        return;
      }
      this.scannedBarcodes.push(barcode);
      this.formData.barcode = "";
      this.$nextTick(() => {
        this.$refs.barcodeInput.focus();
      });
    },
    removeItem(index) {
      this.scannedBarcodes.splice(index, 1);
    },
    clearAll() {
      this.$confirm("确定要清空所有扫描记录吗?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      }).then(() => {
        this.scannedBarcodes = [];
      }).catch(() => {
        this.$refs.barcodeInput.focus();
      });
    },
    submit() {
      if (this.scannedBarcodes.length === 0) {
        this.$message.warning("请先扫描至少一条条码");
        this.$refs.barcodeInput.focus();
        return;
      }
      const params = {
        barcodes: this.scannedBarcodes,
      };
      this.http
        .post("/api/OutboundOrder/NoStockOut", params, "数据处理中...")
        .then((res) => {
          if (!res.status) {
            this.$message.error(res.message);
            this.$refs.barcodeInput.focus();
            return;
          }
          this.$message.success("出库成功");
          this.showDetailBox = false;
          this.$emit("parentCall", ($vue) => {
            $vue.refresh();
          });
        })
        .catch((err) => {
          this.$message.error(`请求失败:${err.message || "未知错误"}`);
          this.$refs.barcodeInput.focus();
        });
    },
  },
};
</script>
<style scoped>
/* å…³é”®ï¼šå®šä¹‰åˆ—表项的过渡动画 */
.barcode-item-transition-enter-active,
.barcode-item-transition-leave-active {
  transition: all 0.3s ease;
}
.barcode-item-transition-enter-from {
  opacity: 0;
  transform: translateY(10px);
}
.barcode-item-transition-leave-to {
  opacity: 0;
  transform: translateX(30px);
}
/* ç¡®ä¿åˆ é™¤æ—¶å…¶ä»–元素平滑上移 */
.barcode-item-transition-move {
  transition: transform 1s ease;
}
.scan-list {
  width: 100%;
}
.custom-card {
  border-radius: 12px;
  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08) !important;
  transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1);
}
.custom-card:hover {
  box-shadow: 0 10px 30px rgba(0, 0, 0, 0.12) !important;
}
.card-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 15px;
  padding-bottom: 10px;
  border-bottom: 1px solid #f0f0f0;
}
.header-title {
  font-weight: 600;
  font-size: 15px;
  color: #333;
}
.clear-all-btn {
  color: #f56c6c;
  font-size: 13px;
  transition: color 0.2s;
}
.clear-all-btn:hover {
  color: #e53e3e;
  background: rgba(245, 108, 108, 0.1);
}
.card-body {
  padding: 0;
}
/* è‡ªå®šä¹‰æ»šåŠ¨æ¡ */
.custom-scrollbar ::v-deep .el-scrollbar__thumb {
  background: rgba(0, 0, 0, 0.2);
  border-radius: 4px;
  width: 4px;
}
.custom-scrollbar ::v-deep .el-scrollbar__bar:hover .el-scrollbar__thumb {
  background: rgba(0, 0, 0, 0.3);
  width: 6px;
}
.custom-scrollbar ::v-deep .el-scrollbar__wrap {
  overflow-x: hidden;
}
.barcode-item {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 10px 15px;
  border-bottom: 1px solid #f7f7f7;
  transition: background-color 0.2s ease;
}
.barcode-item:hover {
  background-color: #fafafa;
}
/* ä¸ºå¥‡æ•°è¡Œæ·»åŠ è½»å¾®çš„èƒŒæ™¯è‰²ï¼Œå¢žå¼ºå¯è¯»æ€§ */
.barcode-item:nth-child(odd) {
  background-color: #e1e1e1;
}
.barcode-text {
  flex: 1;
  font-size: 14px;
  color: #666;
  transition: color 0.2s;
}
.barcode-item:hover .barcode-text {
  color: #409eff;
}
.delete-btn {
  color: #ea1919;
  font-size: 20px;
  transition: all 0.2s;
  transform: scale(0.8);
}
.barcode-item:hover .delete-btn {
  opacity: 1;
  transform: scale(1);
}
.delete-btn:hover {
  color: #f56c6c !important; /* ä½¿ç”¨ !important è¦†ç›– Element UI é»˜è®¤æ ·å¼ */
  background: rgba(245, 108, 108, 0.1);
}
.empty-tip {
  text-align: center;
  padding: 80px 0;
  color: #999;
  font-size: 14px;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
}
.empty-tip i {
  font-size: 40px;
  margin-bottom: 15px;
  color: #dcdfe6;
}
/* è‡ªå®šä¹‰è¾“入框 */
.custom-input ::v-deep .el-input__inner {
  border-radius: 6px;
  border-color: #e4e7ed;
  transition: all 0.3s;
  height: 36px;
  line-height: 36px;
}
.custom-input ::v-deep .el-input__inner:focus {
  border-color: #409eff;
  box-shadow: 0 0 0 3px rgba(64, 158, 255, 0.1);
}
/* è‡ªå®šä¹‰æŒ‰é’® */
.custom-button {
  border-radius: 6px;
  height: 36px;
  line-height: 36px;
  font-size: 13px;
  font-weight: 500;
  transition: all 0.2s;
}
.custom-button:hover {
  transform: translateY(-1px);
  box-shadow: 0 4px 12px rgba(64, 158, 255, 0.2);
}
.footer-actions {
  text-align: right;
}
.submit-btn {
  border-radius: 6px;
  font-weight: 500;
  padding: 10px 20px;
  transition: all 0.2s;
}
.submit-btn:hover {
  transform: translateY(-1px);
  box-shadow: 0 4px 12px rgba(46, 164, 79, 0.2);
}
.cancel-btn {
  color: #666;
  margin-right: 10px;
  transition: color 0.2s;
}
.cancel-btn:hover {
  color: #333;
  background: #f5f5f5;
}
</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;
}
.box-table .el-table tbody tr.current-row > td {
  background-color: #f0f9eb !important;
}
.el-table .success-row {
  background: #f0f9eb;
}
.box-table .el-table {
  border: 1px solid #ebeef5;
}
.box-head .el-alert__content {
  width: 100%;
}
</style>
ÏîÄ¿´úÂë/WIDESEA_WMSClient/src/extension/outbound/extend/outOrderDetail.vue
@@ -103,6 +103,7 @@
      ref="selectedStock"
      @parentCall="parentCall"
    ></selected-stock>
    <NoStockOut ref="NoStockOut" @parentCall="parentCall"></NoStockOut>
  </div>
</template>
<script>
@@ -110,10 +111,12 @@
import VolForm from "@/components/basic/VolForm.vue";
import StockSelect from "./StockSelect.vue";
import SelectedStock from "./SelectedStock.vue";
import NoStockOut from "./NoStockOut.vue";
import { h,createVNode, render,reactive  } from 'vue';
import { ElDialog , ElForm, ElFormItem, ElSelect,ElOption, ElButton, ElMessage } from 'element-plus';
import { th } from 'element-plus/es/locale';
export default {
  components: { VolBox, VolForm, StockSelect, SelectedStock },
  components: { VolBox, VolForm, StockSelect, SelectedStock,NoStockOut},
  data() {
    return {
      row: null,
@@ -189,7 +192,7 @@
          prop: "orderDetailStatus",
          title: "订单明细状态",
          type: "tag",
          width: 180,
          width: 90,
          bindKey: "orderDetailStatusEnum",
        },
        {
@@ -198,6 +201,13 @@
          type: "icon",
          width: 90,
          icon: "el-icon-s-grid",
        },
        {
          prop: "NoStockOut",
          title: "无库存出库",
          type: "icon",
          width: 100,
          icon: "el-icon-setting",
        },
        {
          prop: "viewDetail",
@@ -304,6 +314,8 @@
    tableButtonClick(row, column) {
      if (column.prop == "assignStock") {
        this.$refs.child.open(row);
      } else if (column.prop == "NoStockOut") {
        this.$refs.NoStockOut.open(row);
      } else {
        //点击打开出库详情
        this.$refs.selectedStock.open(row);
ÏîÄ¿´úÂë/WIDESEA_WMSClient/src/extension/stock/stockView.js
@@ -1,8 +1,4 @@
//此js文件是用来自定义扩展业务代码,可以扩展一些自定义页面或者重新配置生成的代码
import { el } from "element-plus/es/locales.mjs";
let extension = {
  components: {
    //查询界面扩展组件
@@ -35,65 +31,65 @@
      //       });
      //   }
      // }
      this.columns.forEach(column => {
        if (column.field == 'materielCode') {
          column.formatter = (row) => {
            var str = '';
            var list = row.materielCode.split(',');
            for (let index = 0; index < list.length; index++) {
              str += list[index] + '<br>';
            }
            return str = list[0] == "" ? "空箱" : str;
          }
        }
        if (column.field == 'batchNo') {
          column.formatter = (row) => {
            var str = '';
            var list = row.batchNo.split(',');
            for (let index = 0; index < list.length; index++) {
              str += list[index] + '<br>';
            }
            return str = list[0] == "" ? "无" : str;
          }
        }
        if (column.field == 'materielInfo') {
          const today = new Date()
          column.formatter = (row) => {
            if (row.details.length > 0) {
              const today = new Date();
              const closestDate = row.details
                .map(x => {
                  const date = new Date(x.effectiveDate);
                  const diffInDays = Math.ceil(Math.abs((today - date) / (1000 * 60 * 60 * 24)));
                  return { date, diffInDays };
                })
                .reduce((closest, current) => (current.diffInDays < closest.diffInDays ? current : closest))
                .date;
      // this.columns.forEach(column => {
      //   if (column.field == 'materielCode') {
      //     column.formatter = (row) => {
      //       var str = '';
      //       var list = row.materielCode.split(',');
      //       for (let index = 0; index < list.length; index++) {
      //         str += list[index] + '<br>';
      //       }
      //       return str = list[0] == "" ? "空箱" : str;
      //     }
      //   }
      //   if (column.field == 'batchNo') {
      //     column.formatter = (row) => {
      //       var str = '';
      //       var list = row.batchNo.split(',');
      //       for (let index = 0; index < list.length; index++) {
      //         str += list[index] + '<br>';
      //       }
      //       return str = list[0] == "" ? "无" : str;
      //     }
      //   }
      //   if (column.field == 'materielInfo') {
      //     const today = new Date()
      //     column.formatter = (row) => {
      //       if (row.details.length > 0) {
      //         const today = new Date();
      //         const closestDate = row.details
      //           .map(x => {
      //             const date = new Date(x.effectiveDate);
      //             const diffInDays = Math.ceil(Math.abs((today - date) / (1000 * 60 * 60 * 24)));
      //             return { date, diffInDays };
      //           })
      //           .reduce((closest, current) => (current.diffInDays < closest.diffInDays ? current : closest))
      //           .date;
              const daysSinceClosest = Math.ceil(Math.abs((today - closestDate) / (1000 * 60 * 60 * 24)));
              return '<span style="color: #F56C6C">' + daysSinceClosest + "天" + '</span>';
            } else {
              return '<span style="color: #F56C6C">' + "无保质期" + '</span>';
            }
      //         const daysSinceClosest = Math.ceil(Math.abs((today - closestDate) / (1000 * 60 * 60 * 24)));
      //         return '<span style="color: #F56C6C">' + daysSinceClosest + "天" + '</span>';
      //       } else {
      //         return '<span style="color: #F56C6C">' + "无保质期" + '</span>';
      //       }
          }
        }
        if (column.field == 'sumStock') {
          column.formatter = (row) => {
            if (row.details.length > 0) {
              var sum = 0;
              const closestDate = row.details
                .map(x => {
                  sum += (x.stockQuantity)
                })
              return '<span style="color: #F56C6C">' + sum + row.details[0].unit + '</span>';
            } else {
              return '<span style="color: #F56C6C">' + "1个" + '</span>';
            }
      //     }
      //   }
      //   if (column.field == 'sumStock') {
      //     column.formatter = (row) => {
      //       if (row.details.length > 0) {
      //         var sum = 0;
      //         const closestDate = row.details
      //           .map(x => {
      //             sum += (x.stockQuantity)
      //           })
      //         return '<span style="color: #F56C6C">' + sum + row.details[0].unit + '</span>';
      //       } else {
      //         return '<span style="color: #F56C6C">' + "1个" + '</span>';
      //       }
          }
        }
      })
      //     }
      //   }
      // })
    },
    onInited() {
      //框架初始化配置后
ÏîÄ¿´úÂë/WIDESEA_WMSClient/src/views/stock/stockView.vue
@@ -27,18 +27,12 @@
      sortName: "stockId",
    });
    const editFormFields = ref({
      palletCode: "",
      locationCode: "",
      locationName: "",
    });
    const editFormOptions = ref([
      
    ]);
    const searchFormFields = ref({
      palletCode: "",
      // locationCode: "",
      materielCode:"",
      batchNo:""
    });
    const searchFormOptions = ref([
      [
@@ -69,7 +63,7 @@
        title: "托盘编号",
        type: "string",
        width: 150,
        link: true,
        // link: true,
        align: "left",
      },
      {
@@ -92,7 +86,6 @@
        type: "string",
        width: 80,
        align: "left",
        bind: { key: "warehouses", data: [] },
      },
      {
        field: "roadwayNo",
@@ -110,90 +103,13 @@
        align: "left",
      },
      {
        field: "batchNo",
        title: "所含物料批次",
        type: "string",
        width: 200,
        align: "left"
      },
      {
        field: "materielInfo",
        title: "所含物料最早临期",
        type: "string",
        width: 140,
        align: "left",
      },
      {
        field: "sumStock",
        title: "总库存",
        type: "string",
        width: 140,
        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: 100,
        align: "left",
        bind:{key: "locationTypeEnum", data: []}
      },
      {
        field: "locationStatus",
        title: "货位状态",
        type: "string",
        width: 120,
        align: "left",
        bind: { key: "locationStatusEnum", data: [] },
      },
      {
        field: "enalbeStatus",
        title: "禁用状态",
        type: "string",
        width: 80,
        align: "left",
        bind: { key: "enableStatusEnum", data: [] },
      },
      {
        field: "creater",
        title: "创建人",
@@ -235,143 +151,7 @@
      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",
          hidden: true
        },
        {
          field: "materielCode",
          title: "物料编号",
          type: "string",
          width: 110,
          align: "left",
        },
        {
          field: "materielName",
          title: "物料名称",
          type: "string",
          width: 130,
          align: "left",
        },
        {
          field: "orderNo",
          title: "单据编号",
          type: "decimal",
          width: 130,
          align: "left",
        },
        {
          field: "batchNo",
          title: "批次号",
          type: "string",
          width: 180,
          align: "left",
        },
        {
          field: "serialNumber",
          title: "序列号",
          type: "int",
          width: 120,
          align: "left",
          hidden: true,
        },
        {
          field: "stockQuantity",
          title: "库存数量",
          type: "string",
          width: 80,
          align: "left",
        },
        {
          field: "outboundQuantity",
          title: "出库数量",
          type: "string",
          width: 80,
          align: "left",
        },
        {
          field: "unit",
          title: "单位",
          type: "string",
          width: 50,
          align: "left",
        },
        {
          field: "productionDate",
          title: "生产日期",
          type: "string",
          width: 80,
          align: "left",
        },
        {
          field: "effectiveDate",
          title: "有效日期",
          type: "string",
          width: 80,
          align: "left",
        },
        {
          field: "status",
          title: "库存明细状态",
          type: "string",
          width: 120,
          align: "left",
          bind: { key: "stockStatusEmun", data: [] }
        },
        {
          field: "creater",
          title: "创建人",
          type: "string",
          width: 90,
          align: "left",
          hidden: true
        },
        {
          field: "createDate",
          title: "创建时间",
          type: "datetime",
          width: 160,
          align: "left",
          hidden: true
        },
        {
          field: "modifier",
          title: "修改人",
          type: "string",
          width: 100,
          align: "left",
          hidden: true
        },
        {
          field: "modifyDate",
          title: "修改时间",
          type: "datetime",
          width: 160,
          align: "left",
          hidden: true
        },
        {
          field: "remark",
          title: "备注",
          type: "string",
          width: 100,
          align: "left",
          hidden: true
        },
      ],
      sortName: "id",
      key: "id",
ÏîÄ¿´úÂë/WMSÎÞ²Ö´¢°æ/WIDESEA_WMSServer/WIDESEA_DTO/Stock/StockViewDTO.cs
@@ -22,11 +22,13 @@
        /// <summary>
        /// è´§ä½ç¼–号
        /// </summary>
        [SugarColumn(Length = 255, ColumnDescription = "货位编号")]
        public string LocationCode { get; set; }
        /// <summary>
        /// è´§ä½åç§°
        /// </summary>
        [SugarColumn(Length = 255, ColumnDescription = "货位名称")]
        public string LocationName { get; set; }
        /// <summary>
@@ -62,6 +64,7 @@
        /// <summary>
        /// å··é“编号
        /// </summary>
        [SugarColumn(Length = 255, ColumnDescription = "巷道编号")]
        public string RoadwayNo { get; set; }
        /// <summary>
@@ -77,6 +80,7 @@
        /// <summary>
        /// æ‰˜ç›˜å·
        /// </summary>
        [SugarColumn(Length = 255, ColumnDescription = "托盘号")]
        public string PalletCode { get; set; }
        /// <summary>
@@ -87,11 +91,13 @@
        /// <summary>
        /// ç‰©æ–™ç¼–码
        /// </summary>
        [SugarColumn(Length = 255, ColumnDescription = "物料编码")]
        public string MaterielCode { get; set; }
        /// <summary>
        /// ç‰©æ–™æ‰¹å·
        /// </summary>
        [SugarColumn(Length = 255, ColumnDescription = "物料批号")]
        public string BatchNo { get; set; }
        /// <summary>