diff --git a/pages/LCLPackage/LCLWarehouse.vue b/pages/LCLPackage/LCLWarehouse.vue
new file mode 100644
index 0000000..45b3762
--- /dev/null
+++ b/pages/LCLPackage/LCLWarehouse.vue
@@ -0,0 +1,463 @@
+
+
+
+
+
+
+ 仓库编号:{{ warehouseInfo.warehouse + ' ' + warehouseInfo.location }}
+
+
+
+ 层号:{{ warehouseInfo.layer }}
+ 货架:{{ warehouseInfo.shelf }}
+
+
+ 总货物数:{{ quantityTotal }}
+ 总箱数:{{ newMaterialList.length }}
+
+
+ 请扫仓库码
+ 请扫箱码
+
+
+
+
+
+
+
+
+
+ 上次批次号:{{ newMaterialList[newMaterialList.length - 2].patchCode }}
+ 上次批次号:
+
+
+
+ 入库清单
+
+
+
+
+
+
+
+ 全部重置
+ 入库
+
+
+
+
+
+
+
diff --git a/pages/LCLPackage/utils.js b/pages/LCLPackage/utils.js
new file mode 100644
index 0000000..9172775
--- /dev/null
+++ b/pages/LCLPackage/utils.js
@@ -0,0 +1,118 @@
+/**
+ * 入库通用工具方法
+ */
+
+/**
+ * 显示操作确认模态框
+ * @param {string} title - 标题
+ * @param {string} content - 内容
+ * @param {boolean} showCancel - 是否显示取消按钮
+ * @returns {Promise} Promise对象
+ */
+export function showOperationConfirm(title, content, showCancel = true) {
+ return new Promise((resolve) => {
+ uni.showModal({
+ title: title || '提示',
+ content: content || '',
+ showCancel: showCancel,
+ cancelText: '取消',
+ confirmText: '确定',
+ success: function(res) {
+ resolve(res);
+ }
+ });
+ });
+}
+
+/**
+ * 检查是否为重复箱
+ * @param {Array} list - 箱子列表
+ * @param {string} patchCode - 批次号
+ * @returns {boolean} 是否重复
+ */
+export function isRepeatPackage(list, patchCode) {
+ if (!list || list.length === 0) return false;
+
+ for (let item of list) {
+ if (item.patchCode === patchCode) {
+ return true;
+ }
+ }
+ return false;
+}
+
+/**
+ * 检查是否更换了批次
+ * @param {Array} list - 箱子列表
+ * @param {string} productionTime - 批次时间
+ * @returns {boolean} 是否更换批次
+ */
+export function isChangeBatch(list, productionTime) {
+ if (!list || list.length === 0) return false;
+
+ const lastItem = list[list.length - 1];
+ return lastItem.productionTime !== productionTime;
+}
+
+/**
+ * 检查是否为重复箱(基于originalCode)
+ * @param {Array} list - 箱子列表
+ * @param {string} originalCode - 原始编码
+ * @returns {boolean} 是否重复
+ */
+export function isRepeatPackageByCode(list, originalCode) {
+ if (!list || list.length === 0) return false;
+
+ for (let item of list) {
+ if (item.originalCode === originalCode) {
+ return true;
+ }
+ }
+ return false;
+}
+
+/**
+ * 清除重复箱
+ * @param {Array} list - 箱子列表
+ * @returns {Array} 清除重复后的列表和重复箱信息
+ */
+export function clearRepeatPackages(list) {
+ let newArray = [];
+ let seen = new Map();
+ let repeatPackage = [];
+
+ list.forEach((item) => {
+ if (!seen.has(item.originalCode)) {
+ seen.set(item.originalCode, true);
+ newArray.push(item);
+ } else {
+ repeatPackage.push(item.patchCode);
+ }
+ });
+
+ return {
+ clearedList: newArray,
+ repeatPackages: repeatPackage
+ };
+}
+
+/**
+ * 防抖函数
+ * @param {Function} func - 要防抖的函数
+ * @param {number} delay - 延迟时间(ms)
+ * @returns {Function} 防抖后的函数
+ */
+export function debounce(func, delay) {
+ let timeoutId;
+ return function (...args) {
+ // 清除之前的定时器
+ if (timeoutId) {
+ clearTimeout(timeoutId);
+ }
+
+ // 设置新的定时器
+ timeoutId = setTimeout(() => {
+ func.apply(this, args);
+ }, delay);
+ };
+}
\ No newline at end of file