فهرست منبع

以下功能实现:
- 调度任务实现
- 工装、设备标签打印实现
- 领料车功能实现
- 盘点流程实现

liuyanpeng 7 ماه پیش
والد
کامیت
41c474b24e
32فایلهای تغییر یافته به همراه7844 افزوده شده و 59 حذف شده
  1. 0 11
      PcClient.code-workspace
  2. 3 3
      package.json
  3. 2607 0
      src/custom/api/asset/AssetInstanceResource.js
  4. 611 0
      src/custom/api/asset/AssetInventoryResource.js
  5. 41 40
      src/custom/common/CommonTable.vue
  6. 10 0
      src/custom/common/utils.js
  7. 42 0
      src/custom/inventory/AssetInventory.vue
  8. 121 0
      src/custom/inventory/AssetInventoryStep.vue
  9. 107 0
      src/custom/inventory/AssetInventoryStep1.vue
  10. 152 0
      src/custom/inventory/AssetInventoryStep2.vue
  11. 171 0
      src/custom/inventory/AssetInventoryStep3.vue
  12. 277 0
      src/custom/inventory/AssetInventoryStep4.vue
  13. 178 0
      src/custom/inventory/AssetInventoryStep5.vue
  14. 95 0
      src/custom/inventory/InventoryDataProcessing.vue
  15. 113 0
      src/custom/inventory/InventoryDataProcessingStep1.vue
  16. 203 0
      src/custom/inventory/InventoryDataProcessingStep2.vue
  17. 42 0
      src/custom/inventory/InventoryDataProcessingStep3.vue
  18. 194 0
      src/custom/inventory/InventoryDataProcessingStep4.vue
  19. 544 0
      src/custom/inventory/InventoryDataProcessingStep5.vue
  20. 165 0
      src/custom/inventory/InventoryDataProcessingStep6.vue
  21. 207 0
      src/custom/inventory/InventoryDataProcessingStep7.vue
  22. 152 0
      src/custom/inventory/InventoryDataProcessingStep8.vue
  23. 2 2
      src/custom/printer/AssetLabelPrinting.vue
  24. 820 0
      src/custom/printer/ClampPrinting.vue
  25. 293 0
      src/custom/stock/StockPickingCar.vue
  26. 271 0
      src/custom/stock/StockRequisition.vue
  27. 97 0
      src/custom/stock/columns.js
  28. 270 0
      src/custom/transferTask/TransferTask.vue
  29. 40 0
      src/custom/transferTask/transferTask.js
  30. 1 1
      src/main.js
  31. 14 1
      src/routes/custom.js
  32. 1 1
      src/routes/route-wms-v5.js

+ 0 - 11
PcClient.code-workspace

@@ -1,11 +0,0 @@
-{
-	"folders": [
-		{
-			"path": "."
-		},
-		{
-			"path": "../Plugins"
-		}
-	],
-	"settings": {}
-}

+ 3 - 3
package.json

@@ -1,7 +1,7 @@
 {
   "name": "pc-client-cf",
   "description": "Leanwo Prodog Client",
-  "version": "1.0.6-1",
+  "version": "1.0.6-2",
   "author": "yangzhijie1488 <yangzhijie1488@163.com>",
   "scripts": {
     "ins": "npm install --registry=http://wuzhixin.vip:4873 -force",
@@ -17,12 +17,12 @@
     "ant-design-vue": "^4.2.1",
     "axios": "^0.19.2",
     "click-outside-vue3": "^4.0.1",
-    "client-base-v5": "1.0.5",
+    "client-base-v5": "1.0.6",
     "client-dic-v3": "^3.0.52",
     "client-eam-v5": "1.0.2",
     "client-role-v3": "^3.0.26",
     "client-sensor-v3": "^1.0.4",
-    "client-wms-v5": "1.0.0",
+    "client-wms-cf": "1.0.0-2",
     "client-finance-v3": "^0.0.4",
     "dayjs": "^1.11.6",
     "dingtalk-jsapi": "^2.8.33",

+ 2607 - 0
src/custom/api/asset/AssetInstanceResource.js

@@ -0,0 +1,2607 @@
+import Common from '../../common/Common.js';
+
+/**
+ * 工具类自动生成的API,请勿做任何修改,请勿做任何修改,请勿做任何修改(重要的事情说3遍)
+ * 工具作者: 杨志杰
+ * AssetInstanceResource******************************************END********************************************************** 
+ */
+export default {
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 新增资产. 
+   */
+  addAsset: function (assetDto) {
+    var requestUrl = 'AssetInstanceResource/addAsset';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'post',
+        contentType: 'application/json',
+
+        dataType: 'json',
+        data: JSON.stringify(assetDto),
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 根据id查找资产卡片 
+   */
+  assetInstanceRecipientsToReturn: function (epc, userId, imageSrc, position) {
+    var requestUrl = 'AssetInstanceResource/assetInstanceRecipientsToReturn';
+    var paramCount = 0;
+    if (epc != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('epc=' + epc);
+      paramCount++;
+    }
+    if (userId != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('userId=' + userId);
+      paramCount++;
+    }
+    if (imageSrc != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('imageSrc=' + imageSrc);
+      paramCount++;
+    }
+    if (position != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('position=' + position);
+      paramCount++;
+    }
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'get',
+        contentType: 'application/json',
+
+
+
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 资产卡片搜索 
+   */
+  assetInstanceSearch: function (queryParam) {
+    var requestUrl = 'AssetInstanceResource/assetInstanceSearch';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'post',
+        contentType: 'application/json',
+
+        dataType: 'json',
+        data: JSON.stringify(queryParam),
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 固定资产查询. 
+   */
+  assetSearch: function (condition, length, start) {
+    var requestUrl = 'AssetInstanceResource/assetSearch';
+
+    var formData = {};
+    if (condition != null) {
+      formData.condition = condition;
+    }
+    if (length != null) {
+      formData.length = length;
+    }
+    if (start != null) {
+      formData.start = start;
+    }
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'post',
+        contentType: 'application/x-www-form-urlencoded',
+
+
+
+        data: formData,
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 固定资产注册查询. 
+   */
+  assetSearchNoPrint: function (condition, length, start, isPrinted) {
+    var requestUrl = 'AssetInstanceResource/assetSearchNoPrint';
+    var paramCount = 0;
+    if (condition != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('condition=' + condition);
+      paramCount++;
+    }
+    if (length != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('length=' + length);
+      paramCount++;
+    }
+    if (start != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('start=' + start);
+      paramCount++;
+    }
+    if (isPrinted != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('isPrinted=' + isPrinted);
+      paramCount++;
+    }
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'get',
+
+
+
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 根据资产卡片编码查询是否有此资产卡片编码 
+   */
+  byBarCode: function (byBarCode) {
+    var requestUrl = 'AssetInstanceResource/byBarCode';
+    var paramCount = 0;
+    if (byBarCode != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('byBarCode=' + byBarCode);
+      paramCount++;
+    }
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'get',
+        contentType: 'application/json',
+
+
+
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 盘点 
+   */
+  check: function (assetInstanceIds, checkId, locationId) {
+    var requestUrl = 'AssetInstanceResource/check';
+
+    var formData = {};
+    if (assetInstanceIds != null) {
+      formData.assetInstanceIds = assetInstanceIds;
+    }
+    if (checkId != null) {
+      formData.checkId = checkId;
+    }
+    if (locationId != null) {
+      formData.locationId = locationId;
+    }
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'post',
+        contentType: 'application/x-www-form-urlencoded',
+
+
+
+        data: formData,
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 清空待搜索的资产卡片 
+   */
+  delectAssetSearch: function () {
+    var requestUrl = 'AssetInstanceResource/delectAssetSearch';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'get',
+        contentType: 'application/json',
+
+
+
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 根据ID删除资产卡片(只删除资产卡片)App功能 
+   */
+  deleteAssetInstance: function (assetInstanceId) {
+    var requestUrl = 'AssetInstanceResource/deleteAssetInstance';
+    var paramCount = 0;
+    if (assetInstanceId != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('assetInstanceId=' + assetInstanceId);
+      paramCount++;
+    }
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'get',
+
+
+
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 根据assetInstanceId删除对应资产 
+   */
+  deleteById: function (assetInstanceId) {
+    var requestUrl = 'AssetInstanceResource/deleteById';
+    var paramCount = 0;
+    if (assetInstanceId != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('assetInstanceId=' + assetInstanceId);
+      paramCount++;
+    }
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'get',
+
+        dataType: 'json',
+
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 导出资产卡片清单数据 
+   */
+  exportAssetInstanceData: function (queryParam) {
+    var requestUrl = 'AssetInstanceResource/exportAssetData';
+
+    var formData = {};
+    if (queryParam != null) {
+      formData.queryParam = queryParam;
+    }
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'post',
+        contentType: 'application/x-www-form-urlencoded',
+
+
+
+        data: formData,
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 根据资产卡片Id查询资产卡片详细信息。 
+   */
+  findAssetInstanceById: function (assetInstanceId) {
+    var requestUrl = 'AssetInstanceResource/findAssetInstanceById';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'post',
+        contentType: 'application/json',
+
+        dataType: 'json',
+        data: JSON.stringify(assetInstanceId),
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 模糊查询车辆类资产卡片 
+   */
+  findAssetInstanceDto: function (start, length, searchString, systemCode) {
+    var requestUrl = 'AssetInstanceResource/findAssetInstanceDto';
+    var paramCount = 0;
+    if (start != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('start=' + start);
+      paramCount++;
+    }
+    if (length != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('length=' + length);
+      paramCount++;
+    }
+    if (searchString != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('searchString=' + searchString);
+      paramCount++;
+    }
+    if (systemCode != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('systemCode=' + systemCode);
+      paramCount++;
+    }
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'get',
+        contentType: 'application/json',
+
+
+
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 根据资产卡片生成资产 
+   */
+  generateAssetByAssetInstance: function () {
+    var requestUrl = 'AssetInstanceResource/generateAssetByAssetInstance';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'post',
+        contentType: 'application/json',
+
+        dataType: 'json',
+
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 通过二维码查询固定资产实例 
+   */
+  getAssetByBarCode: function (barCode, loginClientAssetInstance) {
+    var requestUrl = 'AssetInstanceResource/getAssetByBarCode';
+    var paramCount = 0;
+    if (barCode != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('barCode=' + barCode);
+      paramCount++;
+    }
+    if (loginClientAssetInstance != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('loginClientAssetInstance=' + loginClientAssetInstance);
+      paramCount++;
+    }
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'get',
+
+        dataType: 'json',
+
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 通过EPC编码查询固定资产实例 
+   */
+  getAssetByEpc: function (epc) {
+    var requestUrl = 'AssetInstanceResource/getAssetByEpc';
+    var paramCount = 0;
+    if (epc != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('epc=' + epc);
+      paramCount++;
+    }
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'get',
+
+        dataType: 'json',
+
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 根据ID查询资产. 
+   */
+  getAssetById: function (assetId) {
+    var requestUrl = 'AssetInstanceResource/getAssetById';
+    var paramCount = 0;
+    if (assetId != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('assetId=' + assetId);
+      paramCount++;
+    }
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'get',
+
+
+
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 查询一定时间内和存放地点所有读写器记录的资产 
+   */
+  getAssetByTime: function (startTime, endTime, locationId) {
+    var requestUrl = 'AssetInstanceResource/getAssetByTime';
+    var paramCount = 0;
+    if (startTime != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('startTime=' + startTime);
+      paramCount++;
+    }
+    if (endTime != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('endTime=' + endTime);
+      paramCount++;
+    }
+    if (locationId != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('locationId=' + locationId);
+      paramCount++;
+    }
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'get',
+
+        dataType: 'json',
+
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 根据资产EPC查询资产图片 
+   */
+  getAssetImageInfosByEpc: function (epc, start, length, startDate, endDate) {
+    var requestUrl = 'AssetInstanceResource/getAssetImageInfosByEpc';
+
+    var formData = {};
+    if (epc != null) {
+      formData.epc = epc;
+    }
+    if (start != null) {
+      formData.start = start;
+    }
+    if (length != null) {
+      formData.length = length;
+    }
+    if (startDate != null) {
+      formData.startDate = startDate;
+    }
+    if (endDate != null) {
+      formData.endDate = endDate;
+    }
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'post',
+        contentType: 'application/x-www-form-urlencoded',
+
+        dataType: 'json',
+
+        data: formData,
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 扫描二维码查询资产卡片 
+   */
+  getAssetInstanceByBarCode: function (barcode) {
+    var requestUrl = 'AssetInstanceResource/getAssetInstanceByBarCode';
+    var paramCount = 0;
+    if (barcode != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('barcode=' + barcode);
+      paramCount++;
+    }
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'get',
+        contentType: 'application/json',
+
+        dataType: 'json',
+
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 通过二维码查询固定资产卡片(盘点用) 
+   */
+  getAssetInstanceByBarCodeForInventory: function (barCode) {
+    var requestUrl = 'AssetInstanceResource/getAssetInstanceByBarCodeForInventory';
+    var paramCount = 0;
+    if (barCode != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('barCode=' + barCode);
+      paramCount++;
+    }
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'get',
+
+        dataType: 'json',
+
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 通过epc查询资产卡片(盘点用) 
+   */
+  getAssetInstanceByEpcForInventory: function (epcs) {
+    var requestUrl = 'AssetInstanceResource/getAssetInstanceByEpcForInventory';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'post',
+        contentType: 'application/json',
+
+        dataType: 'json',
+        data: JSON.stringify(epcs),
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 根据资产epc获取资产 
+   */
+  getAssetInstanceByEpcList: function (assetInstanceQueryParam) {
+    var requestUrl = 'AssetInstanceResource/getAssetInstanceByEpcList';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'post',
+        contentType: 'application/json',
+
+        dataType: 'json',
+        data: JSON.stringify(assetInstanceQueryParam),
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 查询该单位下所有资产卡片 
+   */
+  getAssetInstanceByMaxId: function (maxId) {
+    var requestUrl = 'AssetInstanceResource/getAssetInstanceByMaxId';
+    var paramCount = 0;
+    if (maxId != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('maxId=' + maxId);
+      paramCount++;
+    }
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'get',
+
+        dataType: 'json',
+
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 获取资产清单ForApp 
+   */
+  getAssetList: function (param) {
+    var requestUrl = 'AssetInstanceResource/getAssetList';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'post',
+        contentType: 'application/json',
+
+        dataType: 'json',
+        data: JSON.stringify(param),
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 根据部门和分类查询资产 
+   */
+  getByOrganizationAndCategory: function (queryParam) {
+    var requestUrl = 'AssetInstanceResource/getByOrganizationAndCategory';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'post',
+        contentType: 'application/json',
+
+        dataType: 'json',
+        data: JSON.stringify(queryParam),
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 通过二维码查询固定资产卡片(车辆管理使用) 
+   */
+  getCarAssetInstanceByBarCode: function (barCode) {
+    var requestUrl = 'AssetInstanceResource/getCarAssetInstanceByBarCode';
+    var paramCount = 0;
+    if (barCode != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('barCode=' + barCode);
+      paramCount++;
+    }
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'get',
+
+        dataType: 'json',
+
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 根据单位Id查询资产实例分类统计信息 
+   */
+  getCategoryStatistics: function (clientId) {
+    var requestUrl = 'AssetInstanceResource/getCategoryStatistics';
+
+    var formData = {};
+    if (clientId != null) {
+      formData.clientId = clientId;
+    }
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'post',
+        contentType: 'application/x-www-form-urlencoded',
+
+        dataType: 'json',
+
+        data: formData,
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 查询资产实例分类统计信息 
+   */
+  getCategoryStatisticsNew: function (statisticsQueryDto) {
+    var requestUrl = 'AssetInstanceResource/getCategoryStatisticsNew';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'post',
+
+
+        data: JSON.stringify(statisticsQueryDto),
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 根据单位和月份查询保养统计数据 
+   */
+  getCategoryStatisticsNew2: function (paramDto) {
+    var requestUrl = 'AssetInstanceResource/getCategoryStatisticsNew2';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'post',
+        contentType: 'application/json',
+
+        dataType: 'json',
+        data: JSON.stringify(paramDto),
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 查询计量单位 
+   */
+  getComputationUnit: function () {
+    var requestUrl = 'AssetInstanceResource/getComputationUnit';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'get',
+        contentType: 'application/json',
+
+
+
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 查询生命周期 
+   */
+  getHistoryEvent: function (assetInstanceId) {
+    var requestUrl = 'AssetInstanceResource/getHistoryEvent';
+    var paramCount = 0;
+    if (assetInstanceId != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('assetInstanceId=' + assetInstanceId);
+      paramCount++;
+    }
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'get',
+
+        dataType: 'json',
+
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 查询对应资产抓拍照片 
+   */
+  getImageUrlByAsset: function (assetEpc, readerResultId) {
+    var requestUrl = 'AssetInstanceResource/getImageUrlByAsset';
+    var paramCount = 0;
+    if (assetEpc != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('assetEpc=' + assetEpc);
+      paramCount++;
+    }
+    if (readerResultId != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('readerResultId=' + readerResultId);
+      paramCount++;
+    }
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'get',
+
+        dataType: 'json',
+
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 查询资产新增统计数据 
+   */
+  getIncreaseStatistics: function (startDate, endDate) {
+    var requestUrl = 'AssetInstanceResource/getIncreaseStatistics';
+
+    var formData = {};
+    if (startDate != null) {
+      formData.startDate = startDate;
+    }
+    if (endDate != null) {
+      formData.endDate = endDate;
+    }
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'post',
+        contentType: 'application/x-www-form-urlencoded',
+
+
+
+        data: formData,
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 查询资产新增统计数据New 
+   */
+  getIncreaseStatisticsNew: function (statisticsQueryDto) {
+    var requestUrl = 'AssetInstanceResource/getIncreaseStatisticsNew';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'post',
+
+
+        data: JSON.stringify(statisticsQueryDto),
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 根据选择的单位和月份查询保养统计数据 
+   */
+  getIncreaseStatisticsNew1: function (paramDto) {
+    var requestUrl = 'AssetInstanceResource/getIncreaseStatisticsNew1';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'post',
+        contentType: 'application/json',
+
+        dataType: 'json',
+        data: JSON.stringify(paramDto),
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 根据单位和月份查询保养统计数据 
+   */
+  getIncreaseStatisticsNew2: function (paramDto) {
+    var requestUrl = 'AssetInstanceResource/getIncreaseStatisticsNew2';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'post',
+        contentType: 'application/json',
+
+        dataType: 'json',
+        data: JSON.stringify(paramDto),
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   *  
+   */
+  getNoAssetNo: function () {
+    var requestUrl = 'AssetInstanceResource/getNoAssetNo';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'get',
+
+        dataType: 'json',
+
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 根据单位Id查询资产实例部门统计信息 
+   */
+  getOrganizationStatistics: function (clientId) {
+    var requestUrl = 'AssetInstanceResource/getOrganizationStatistics';
+
+    var formData = {};
+    if (clientId != null) {
+      formData.clientId = clientId;
+    }
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'post',
+        contentType: 'application/x-www-form-urlencoded',
+
+
+
+        data: formData,
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 查询资产部门统计 
+   */
+  getOrganizationStatisticsNew: function (statisticsQueryDto) {
+    var requestUrl = 'AssetInstanceResource/getOrganizationStatisticsNew';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'post',
+
+
+        data: JSON.stringify(statisticsQueryDto),
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 根据资产epc获取查询屏蔽的资产 
+   */
+  getShieldDatas: function (assetInstanceQueryParam) {
+    var requestUrl = 'AssetInstanceResource/getShieldDatas';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'post',
+        contentType: 'application/json',
+
+        dataType: 'json',
+        data: JSON.stringify(assetInstanceQueryParam),
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 查询资产使用状况统计 
+   */
+  getStatusOfUseStatisticsNew: function (statisticsQueryDto) {
+    var requestUrl = 'AssetInstanceResource/getStatusOfUseStatisticsNew';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'post',
+
+
+        data: JSON.stringify(statisticsQueryDto),
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 根据用户id查询用户借出归还结果 
+   */
+  getStockOutOrInResultByUserId: function (userId) {
+    var requestUrl = 'AssetInstanceResource/getStockOutOrInResultByUserId';
+    var paramCount = 0;
+    if (userId != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('userId=' + userId);
+      paramCount++;
+    }
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'get',
+
+        dataType: 'json',
+
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 待搜索资产卡片中添加资产卡片 
+   */
+  insertAssetSearch: function (assetInstanceId) {
+    var requestUrl = 'AssetInstanceResource/insertAssetSearch';
+    var paramCount = 0;
+    if (assetInstanceId != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('assetInstanceId=' + assetInstanceId);
+      paramCount++;
+    }
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'get',
+        contentType: 'application/json',
+
+
+
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 查询登陆单位下所有资产卡片 
+   */
+  listAssetInstance: function () {
+    var requestUrl = 'AssetInstanceResource/getAssetInstance';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'get',
+
+        dataType: 'json',
+
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 根据条件查询可访问部门的资产DTO 
+   */
+  listByAssetQueryParamDto: function (param) {
+    var requestUrl = 'AssetInstanceResource/listByAssetQueryParamDto';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'post',
+        contentType: 'application/json',
+
+        dataType: 'json',
+        data: JSON.stringify(param),
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 通过二维码查询固定资产实例 
+   */
+  listSimpleByBarCode: function (barCode) {
+    var requestUrl = 'AssetInstanceResource/listSimpleByBarCode';
+    var paramCount = 0;
+    if (barCode != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('barCode=' + barCode);
+      paramCount++;
+    }
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'get',
+
+        dataType: 'json',
+
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 查询未打印的资产卡片的数量 
+   */
+  noPrintAssetCount: function () {
+    var requestUrl = 'AssetInstanceResource/noPrintAssetInstanceCount';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'get',
+        contentType: 'application/json',
+
+
+
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 查询未打印的资产卡片 
+   */
+  noPrintAssetInstance: function (start, length, searchString, isPrinted, addSelectCondition) {
+    var requestUrl = 'AssetInstanceResource/noPrintAssetInstance';
+    var paramCount = 0;
+    if (start != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('start=' + start);
+      paramCount++;
+    }
+    if (length != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('length=' + length);
+      paramCount++;
+    }
+    if (searchString != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('searchString=' + searchString);
+      paramCount++;
+    }
+    if (isPrinted != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('isPrinted=' + isPrinted);
+      paramCount++;
+    }
+    if (addSelectCondition != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('addSelectCondition=' + addSelectCondition);
+      paramCount++;
+    }
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'get',
+        contentType: 'application/json',
+
+
+
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * ********************************betweet***************************************************生成图片库 
+   */
+  plistDownLoad: function () {
+    var requestUrl = 'AssetInstanceResource/plistDownLoad';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'get',
+        contentType: 'application/x-www-form-urlencoded',
+
+
+
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 根据资产卡片Id打印资产卡片 V2.0 
+   */
+  print: function (assetInstanceIds) {
+    var requestUrl = 'AssetInstanceResource/print';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'post',
+        contentType: 'application/json',
+
+        dataType: 'json',
+        data: JSON.stringify(assetInstanceIds),
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 打印档案 
+   */
+  printArchivesByAssetInstanceId: function (token, recordIds) {
+    var requestUrl = 'AssetInstanceResource/printArchivesByAssetInstanceId';
+    var paramCount = 0;
+    if (token != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('token=' + token);
+      paramCount++;
+    }
+    if (recordIds != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('recordIds=' + recordIds);
+      paramCount++;
+    }
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'get',
+
+        dataType: 'text',
+
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 查询已打印的资产卡片的数量 
+   */
+  printAssetCount: function () {
+    var requestUrl = 'AssetInstanceResource/printAssetInstanceCount';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'get',
+        contentType: 'application/json',
+
+
+
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * RFID领用报表 
+   */
+  printAssetInstanceStockIn: function (recordId) {
+    var requestUrl = 'AssetInstanceResource/printAssetInstanceStockIn';
+    var paramCount = 0;
+    if (recordId != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('recordId=' + recordId);
+      paramCount++;
+    }
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'get',
+
+        dataType: 'json',
+
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * RFID归还报表 
+   */
+  printAssetInstanceStockOut: function (recordId) {
+    var requestUrl = 'AssetInstanceResource/printAssetInstanceStockOut';
+    var paramCount = 0;
+    if (recordId != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('recordId=' + recordId);
+      paramCount++;
+    }
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'get',
+
+        dataType: 'json',
+
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 根据资产卡片Id打印资产卡片 V1.0 
+   */
+  printByAssetId: function (token, recordIds) {
+    var requestUrl = 'AssetInstanceResource/printByAssetInstanceId';
+    var paramCount = 0;
+    if (token != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('token=' + token);
+      paramCount++;
+    }
+    if (recordIds != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('recordIds=' + recordIds);
+      paramCount++;
+    }
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'get',
+
+        dataType: 'text',
+
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 根据资产实例Id打印二维码 
+   */
+  printByAssetInstanceId: function (assetInstanceId) {
+    var requestUrl = 'AssetInstanceResource/printAssetInstanceById';
+
+    var formData = {};
+    if (assetInstanceId != null) {
+      formData.assetInstanceId = assetInstanceId;
+    }
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'post',
+        contentType: 'application/x-www-form-urlencoded',
+
+        dataType: 'json',
+
+        data: formData,
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 查询所有的资产. 
+   */
+  queryAllAssetDtos: function (start, length, searchString) {
+    var requestUrl = 'AssetInstanceResource/queryAllAssetDtos';
+    var paramCount = 0;
+    if (start != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('start=' + start);
+      paramCount++;
+    }
+    if (length != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('length=' + length);
+      paramCount++;
+    }
+    if (searchString != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('searchString=' + searchString);
+      paramCount++;
+    }
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'get',
+        contentType: 'application/json',
+
+
+
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 查询集团公司下所有的资产卡片 
+   */
+  queryAssetInstanceByClient: function () {
+    var requestUrl = 'AssetInstanceResource/queryAssetInstanceByClient';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'get',
+
+        dataType: 'json',
+
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 根据epc和是否显示不识别参数查询固定资产 
+   */
+  queryAssetInstanceByEpcs: function (organizationAssetQueryDto) {
+    var requestUrl = 'AssetInstanceResource/queryAssetInstanceByEpcs';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'post',
+        contentType: 'application/json',
+
+        dataType: 'json',
+        data: JSON.stringify(organizationAssetQueryDto),
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 根据添加人和公司查询待搜索中的资产卡片 
+   */
+  queryAssetSearchByUser: function () {
+    var requestUrl = 'AssetInstanceResource/queryAssetSearchByUser';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'get',
+        contentType: 'application/json',
+
+
+
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 根据epc集合查询资产集合 
+   */
+  queryByEpcSet: function (assetInstanceDtos) {
+    var requestUrl = 'AssetInstanceResource/queryByEpcSet';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'post',
+        contentType: 'application/json',
+
+        dataType: 'json',
+        data: JSON.stringify(assetInstanceDtos),
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 设置打印模板 
+   */
+  queryYearlyWork: function (assetInstanceId, templateId) {
+    var requestUrl = 'AssetInstanceResource/setPrintTemplate';
+    var paramCount = 0;
+    if (assetInstanceId != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('assetInstanceId=' + assetInstanceId);
+      paramCount++;
+    }
+    if (templateId != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('templateId=' + templateId);
+      paramCount++;
+    }
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'get',
+
+
+
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 添加资产. 
+   */
+  sava: function (assetDto) {
+    var requestUrl = 'AssetInstanceResource/save';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'post',
+        contentType: 'application/json',
+
+
+        data: JSON.stringify(assetDto),
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 保存资产编号. 
+   */
+  saveNoAssetNo: function (assetDtos) {
+    var requestUrl = 'AssetInstanceResource/saveNoAssetNo';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'post',
+        contentType: 'application/json',
+
+
+        data: JSON.stringify(assetDtos),
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * RFID归还 
+   */
+  stockIn: function (assetStockDto) {
+    var requestUrl = 'AssetInstanceResource/stockIn';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'post',
+        contentType: 'application/json',
+
+        dataType: 'json',
+        data: JSON.stringify(assetStockDto),
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * RFID领用归还 
+   */
+  stockInForSZWL: function (assetStockDto) {
+    var requestUrl = 'AssetInstanceResource/stockInForSZWL';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'post',
+        contentType: 'application/json',
+
+        dataType: 'json',
+        data: JSON.stringify(assetStockDto),
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * RFID领用 
+   */
+  stockOut: function (assetStockDto) {
+    var requestUrl = 'AssetInstanceResource/stockOut';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'post',
+        contentType: 'application/json',
+
+        dataType: 'json',
+        data: JSON.stringify(assetStockDto),
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * RFID领用 
+   */
+  stockOutForSZWL: function (assetStockDto) {
+    var requestUrl = 'AssetInstanceResource/stockOutForSZWL';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'post',
+        contentType: 'application/json',
+
+        dataType: 'json',
+        data: JSON.stringify(assetStockDto),
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 根据id查找资产卡片 
+   */
+  uniqueAssetInstance: function (assetInstanceId) {
+    var requestUrl = 'AssetInstanceResource/uniqueAssetInstance';
+    var paramCount = 0;
+    if (assetInstanceId != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('assetInstanceId=' + assetInstanceId);
+      paramCount++;
+    }
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'get',
+        contentType: 'application/json',
+
+
+
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 修改资产信息. 
+   */
+  updateAsset: function (assetDto) {
+    var requestUrl = 'AssetInstanceResource/updateAsset';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'post',
+        contentType: 'application/json',
+
+        dataType: 'json',
+        data: JSON.stringify(assetDto),
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 扫描上传资产卡片图片 
+   */
+  updateImageName: function (assetInstanceDto) {
+    var requestUrl = 'AssetInstanceResource/updateImageName';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'post',
+        contentType: 'application/json',
+
+        dataType: 'json',
+        data: JSON.stringify(assetInstanceDto),
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 扫描上传资产卡片其他图片 
+   */
+  updateOtherImages: function (assetInstanceDto) {
+    var requestUrl = 'AssetInstanceResource/updateOtherImages';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'post',
+        contentType: 'application/json',
+
+        dataType: 'json',
+        data: JSON.stringify(assetInstanceDto),
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 资产卡片复制
+   */
+  copy: function (assetInstanceCopyRequest) {
+    var requestUrl = 'AssetInstanceResource/copy';
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiURL(requestUrl),
+        type: 'post',
+        contentType: 'application/json',
+
+        dataType: 'json',
+        data: JSON.stringify(assetInstanceCopyRequest),
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+};

+ 611 - 0
src/custom/api/asset/AssetInventoryResource.js

@@ -0,0 +1,611 @@
+import { Common } from 'pc-component-v3';
+
+/**
+ * 工具类自动生成的API,请勿做任何修改,请勿做任何修改,请勿做任何修改(重要的事情说3遍)
+ * 工具作者: 杨志杰
+ * 盘点单资源 
+ */
+export default {
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * AGV抽盘生成一张盘点单 
+   */
+  agvGenerateAssetInventory: function (agvAssetInventorySaveRequest) {
+    var requestUrl = 'api/assetInventoryResource/agvGenerateAssetInventory';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiUrl2(requestUrl),
+        type: 'post',
+        contentType: 'application/json',
+
+
+        data: JSON.stringify(agvAssetInventorySaveRequest),
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 盘点 
+   */
+  check: function (saveInventoryDto) {
+    var requestUrl = 'api/assetInventoryResource/check';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiUrl2(requestUrl),
+        type: 'post',
+        contentType: 'application/json',
+
+
+        data: JSON.stringify(saveInventoryDto),
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 生成合并盘点单 
+   */
+  consolidatedAssetInventory: function (assetInventoryRequest) {
+    var requestUrl = 'api/assetInventoryResource/consolidatedAssetInventory';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiUrl2(requestUrl),
+        type: 'post',
+        contentType: 'application/json',
+
+
+        data: JSON.stringify(assetInventoryRequest),
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 全公司每个部门生成一张盘点单 
+   */
+  departmentGeneratesCountSheet: function (assetInventoryDepartmentRequest) {
+    var requestUrl = 'api/assetInventoryResource/departmentGeneratesCountSheet';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiUrl2(requestUrl),
+        type: 'post',
+        contentType: 'application/json',
+
+
+        data: JSON.stringify(assetInventoryDepartmentRequest),
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 根据条件查询盘点单 
+   */
+  findByAssetInventoryRequest: function (assetInventoryRequest) {
+    var requestUrl = 'api/assetInventoryResource/findByAssetInventoryRequest';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiUrl2(requestUrl),
+        type: 'post',
+        contentType: 'application/json',
+
+
+        data: JSON.stringify(assetInventoryRequest),
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 根据所属部门、使用部门、资产类别查询资产生成资产盘点明细
+
+数据权限:功能:资产盘点, 功能项:发起盘点任务 
+   */
+  generateAssetInventoryLineByOrganizationAndCategory: function (assetInventoryLineGenerateRequest) {
+    var requestUrl = 'api/assetInventoryResource/generateAssetInventoryLineByOrganizationAndCategory';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiUrl2(requestUrl),
+        type: 'post',
+        contentType: 'application/json',
+
+
+        data: JSON.stringify(assetInventoryLineGenerateRequest),
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 抽盘生成一张盘点单 
+   */
+  generateCountSheetBySampling: function (assetInventoryDrawingRequest) {
+    var requestUrl = 'api/assetInventoryResource/generateCountSheetBySampling';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiUrl2(requestUrl),
+        type: 'post',
+        contentType: 'application/json',
+
+
+        data: JSON.stringify(assetInventoryDrawingRequest),
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 获取资产盘点的统计数据 <br>
+x1 盘点单 (全部) x2 盘点单 (已完成) x3 盘点单 (未完成) 
+   */
+  getAssetInventoryStastic: function (tabQueryParam) {
+    var requestUrl = 'api/assetInventoryResource/getAssetInventoryStastic';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiUrl2(requestUrl),
+        type: 'post',
+        contentType: 'application/json',
+
+
+        data: JSON.stringify(tabQueryParam),
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 获取资产盘点进度 
+   */
+  getInventoryProgress: function (tabQueryParam) {
+    var requestUrl = 'api/assetInventoryResource/getInventoryProgress';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiUrl2(requestUrl),
+        type: 'post',
+        contentType: 'application/json',
+
+
+        data: JSON.stringify(tabQueryParam),
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 获取所属部门,使用部门,资产类别 
+   */
+  getOrganizationsAndOrganizationsAndCategory: function () {
+    var requestUrl = 'api/assetInventoryResource/getOrganizationsAndOrganizationsAndCategory';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiUrl2(requestUrl),
+        type: 'get',
+        contentType: 'application/json',
+
+
+
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 获取盘点单中已经选择的所属部门,使用部门,资产类别
+
+数据权限:功能:资产盘点, 功能项:发起盘点任务 
+   */
+  getResponseOrganizationsAndOrganizationsAndCategory: function (assetInventoryId) {
+    var requestUrl = 'api/assetInventoryResource/getResponseOrganizationsAndOrganizationsAndCategory';
+    var paramCount = 0;
+    if (assetInventoryId != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('assetInventoryId=' + assetInventoryId);
+      paramCount++;
+    }
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiUrl2(requestUrl),
+        type: 'get',
+        contentType: 'application/json',
+
+
+
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 根据单位Id查询盘点单 
+   */
+  list: function (range) {
+    var requestUrl = 'api/assetInventoryResource/list';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiUrl2(requestUrl),
+        type: 'post',
+        contentType: 'application/json',
+
+
+        data: JSON.stringify(range),
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 查询本公司的盘点单 
+   */
+  listAssetInventory: function (start, length, searchString) {
+    var requestUrl = 'api/assetInventoryResource/listAssetInventory';
+    var paramCount = 0;
+    if (start != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('start=' + start);
+      paramCount++;
+    }
+    if (length != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('length=' + length);
+      paramCount++;
+    }
+    if (searchString != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('searchString=' + searchString);
+      paramCount++;
+    }
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiUrl2(requestUrl),
+        type: 'get',
+        contentType: 'application/json',
+
+
+
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 离线盘点数据上传 
+   */
+  offlineInventoryDataUpload: function (saveInventoryDto) {
+    var requestUrl = 'api/assetInventoryResource/offlineInventoryDataUpload';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiUrl2(requestUrl),
+        type: 'post',
+        contentType: 'application/json',
+
+
+        data: JSON.stringify(saveInventoryDto),
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 根据盘点单id查询盘点主表信息 
+   */
+  queryById: function (assetInventoryId) {
+    var requestUrl = 'api/assetInventoryResource/queryById';
+    var paramCount = 0;
+    if (assetInventoryId != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('assetInventoryId=' + assetInventoryId);
+      paramCount++;
+    }
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiUrl2(requestUrl),
+        type: 'post',
+        contentType: 'application/json',
+
+
+
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 新增/更新盘点单 
+   */
+  save: function (assetInventoryDto) {
+    var requestUrl = 'api/assetInventoryResource/save';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiUrl2(requestUrl),
+        type: 'post',
+        contentType: 'application/json',
+
+
+        data: JSON.stringify(assetInventoryDto),
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 设置盘点单processed的状态 
+   */
+  setProcessed: function (id, processed) {
+    var requestUrl = 'api/assetInventoryResource/setProcessed';
+    var paramCount = 0;
+    if (id != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('id=' + id);
+      paramCount++;
+    }
+    if (processed != null) {
+      requestUrl += (paramCount > 0) ? '&' : '?';
+      requestUrl += ('processed=' + processed);
+      paramCount++;
+    }
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiUrl2(requestUrl),
+        type: 'post',
+        contentType: 'application/json',
+
+
+
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+
+  /**
+   * 工具类自动生成的方法
+   * 工具作者: 杨志杰
+   * 静态盘点数据处理 
+   */
+  staticInventory: function (dto) {
+    var requestUrl = 'api/assetInventoryResource/staticInventory';
+
+
+    return new Promise((resolve, reject) => {
+      $.ajax({
+        url: Common.getApiUrl2(requestUrl),
+        type: 'post',
+        contentType: 'application/json',
+
+
+        data: JSON.stringify(dto),
+
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          resolve(data);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          reject(XMLHttpRequest);
+        },
+      });
+    });
+  },
+};

+ 41 - 40
src/custom/common/CommonTable.vue

@@ -1,45 +1,25 @@
 <template>
   <div class="tablePaganations">
     <!-- <a-config-provider :locale="locale"> -->
-    <a-table
-      id="commonTable"
-      class="ant-table-striped"
-      bordered
-      size="small"
-      height="1000px"
-      :loading="isLoading"
-      :data-source="dataSource"
-      :columns="columns"
-      :row-key="(record) => record.id"
-      :scroll="{ y: yScroll }"
-      :pagination="havePage ? pagination : false"
-      :row-class-name="
-        (_record, index) => (index % 2 === 1 ? 'table-striped' : null)
-      "
-      :row-selection="
-        isSelect
+    <a-table id="commonTable" class="ant-table-striped" bordered size="small" height="1000px" :loading="isLoading"
+      :data-source="dataSource" :columns="columns" :row-key="(record) => record.id" :scroll="{ y: yScroll }"
+      :pagination="havePage ? pagination : false" :row-class-name="(_record, index) => (index % 2 === 1 ? 'table-striped' : null)
+        " :row-selection="isSelect
           ? {
             selectedRowKeys: state.selectedRowKeys,
             onSelect: selectEvent,
             onSelectAll: selectAllEvent,
           }
           : null
-      "
-      @change="tableChange"
-      @resize-column="handleResizeColumn"
-    >
-      <template
-        v-for="(item, index) in renderArr"
-        #[item]="scope"
-        :key="index"
-      >
+        " @change="tableChange" @resize-column="handleResizeColumn">
+      <template v-for="(item, index) in renderArr" #[item]="scope" :key="index">
         <slot :name="item" :scope="scope" v-bind="scope || {}" />
       </template>
     </a-table>
     <!-- </a-config-provider> -->
   </div>
 </template>
-  
+
 <script setup>
 import {
   useSlots,
@@ -115,9 +95,11 @@ const pagination = reactive({
   onShowSizeChange: (current, pageSize) => showSizeChange(current, pageSize),
   onChange: (current, pageSize) => changePage(current, pageSize), //点击页码事件
   total: props.total,
-  position:props.topRight ? ['topRight'] : ['bottomRight'],
+  position: props.topRight ? ['topRight'] : ['bottomRight'],
 });
 
+const isPageSizeChange = ref(false);
+
 const yScroll = ref(400); //默认滚动高度
 const extraHeight = ref(undefined); //表格距离底部值
 
@@ -136,7 +118,7 @@ onMounted(() => {
   } else {
     extraHeight.value = props.extraHeight;
   }
-  if(props.extraHeight){
+  if (props.extraHeight) {
     extraHeight.value = props.extraHeight;
   }
   onResizeTable();
@@ -155,17 +137,28 @@ const onResizeTable = () => {
 
 //点击页码事件
 const changePage = (current, size) => {
-  pagination.current = current;
-  emit('getPager', pagination.current, size);
+  // pagination.current = current;
+  // emit('getPager', pagination.current, size);
+
+  if (isPageSizeChange.value) {
+    pagination.current = 1;
+    isPageSizeChange.value = false;
+    emit('getPager', 1, size);
+  } else {
+    pagination.current = current;
+    emit('getPager', current, size);
+  }
+  pagination.pageSize = size;
 };
 
-// 改变每页数量时更新显示
+// 改变每页数量时更新显示,每页条数改变(会自动触发点击页码事件)
 const showSizeChange = (current, pageSize) => {
-  setTimeout(() => {
-    pagination.current = 1;
-    emit('getPager', pagination.current, pageSize);
-  });
-  pagination.pageSize = pageSize;
+  // setTimeout(() => {
+  //   pagination.current = 1;
+  //   emit('getPager', pagination.current, pageSize);
+  // });
+  // pagination.pageSize = pageSize;
+  isPageSizeChange.value = true;
 };
 
 // 回到第一页
@@ -256,6 +249,15 @@ watch(
   },
   { immediate: true, deep: true },
 );
+
+watch(
+  () => props.selectedKeys,
+  newData => {
+    state.selectedRowKeys = newData;
+    state.selectedRows = newData.map(item => props.dataSource.find(data => data.id === item));
+  },
+  { immediate: true, deep: true },
+);
 // 插槽的实例
 const slots = useSlots();
 const renderArr = Object.keys(slots);
@@ -265,9 +267,8 @@ const renderArr = Object.keys(slots);
   width: 100%;
   margin-top: 8px;
 }
+
 .ant-table-striped :deep(.table-striped) td {
   background-color: #fafafa;
 }
-</style>
-  
-  
+</style>

+ 10 - 0
src/custom/common/utils.js

@@ -0,0 +1,10 @@
+// 防抖函数
+export const debounce = (fn, wait = 1000) => {
+  let timer;
+  return function (...args) {
+    clearTimeout(timer);
+    timer = setTimeout(() => {
+      fn.call(this, args);
+    }, wait);
+  };
+};

+ 42 - 0
src/custom/inventory/AssetInventory.vue

@@ -0,0 +1,42 @@
+<template>
+  <section>
+    <section>
+      <div>
+        <Navbar title="无人线边库盘点" :is-go-back="false" />
+      </div>
+      <div id="step-container">
+        <a-steps direction="vertical" :current="2">
+          <a-step title="发起盘点任务" description="发起一个盘点任务,可以是全部盘点,也可以是抽盘。"
+            @click="openRouter('/wms/asset-inventory-step')" />
+          <a-step title="盘点数据处理" description="查看盘点报表。" @click="openRouter('/wms/inventory-data-processing')" />
+        </a-steps>
+      </div>
+    </section>
+  </section>
+</template>
+
+
+<script>
+
+export default {
+  components: {
+  },
+
+  data: function () {
+    return {
+    };
+  },
+
+  mounted: function () {
+  },
+
+  methods: {
+    openRouter: function (url) {
+      this.$router.push(url);
+    },
+  },
+
+};
+</script>
+
+<style scoped></style>

+ 121 - 0
src/custom/inventory/AssetInventoryStep.vue

@@ -0,0 +1,121 @@
+<template>
+  <div>
+    <Navbar title="发起盘点任务" :is-go-back="false" />
+  </div>
+
+  <section style="margin-top: 20px">
+    <a-steps :current="pageInformation.currentStep">
+      <a-step title="选择盘点类型" />
+      <a-step title="确认盘点数据" />
+      <a-step title="生成盘点单" />
+    </a-steps>
+  </section>
+
+  <a-divider style="margin:20px 0  6px 0 !important;" />
+
+  <section>
+    <asset-inventory-step1 v-if="pageInformation.showPage == 0" :current-step="pageInformation" @next="nextStep"
+      @previous="previousStep" />
+    <asset-inventory-step2 v-if="pageInformation.showPage == 1" :current-step="pageInformation" @next="nextStep"
+      @previous="previousStep" />
+    <asset-inventory-step3 v-if="pageInformation.showPage == 2" :current-step="pageInformation" @next="nextStep"
+      @previous="previousStep" />
+    <asset-inventory-step4 v-if="pageInformation.showPage == 3" :current-step="pageInformation" @next="nextStep"
+      @previous="previousStep" />
+    <asset-inventory-step5 v-if="pageInformation.showPage == 4" :current-step="pageInformation" @next="nextStep"
+      @previous="previousStep" />
+  </section>
+</template>
+
+<script>
+
+import AssetInventoryStep1 from './AssetInventoryStep1.vue';
+import AssetInventoryStep2 from './AssetInventoryStep2.vue';
+import AssetInventoryStep3 from './AssetInventoryStep3.vue';
+import AssetInventoryStep4 from './AssetInventoryStep4.vue';
+import AssetInventoryStep5 from './AssetInventoryStep5.vue';
+
+export default {
+
+  components: {
+    'asset-inventory-step1': AssetInventoryStep1,
+    'asset-inventory-step2': AssetInventoryStep2,
+    'asset-inventory-step3': AssetInventoryStep3,
+    'asset-inventory-step4': AssetInventoryStep4,
+    'asset-inventory-step5': AssetInventoryStep5,
+  },
+  data: function () {
+    return {
+      pageInformation: {
+        currentStep: 0,
+        showPage: 0,
+      },
+    };
+  },
+
+  methods: {
+    nextStep: function (data) {
+      var _self = this;
+      _self.pageInformation = data;
+      Object.assign(this.pageInformation, data);
+    },
+    previousStep: function (data) {
+      var _self = this;
+      _self.pageInformation = data;
+    },
+    /**
+         * 修改数据
+         */
+    update: function (pageInformation) {
+      Object.assign(this.pageInformation, pageInformation);
+    },
+
+    mounted: function () {
+
+    },
+  },
+};
+</script>
+<style scoped>
+.grid-container {
+  display: grid;
+  grid-template-rows: 8% 8% 84%;
+  grid-template-columns: 100%;
+  width: 100%;
+  /*视口被均分为 100 单位的 vh 占据整个窗口,扣掉顶部 topNav 的距离后,计算得到 responseOrganizationSelect 的高度*/
+  height: calc(100vh - 130px);
+  margin-top: 10px;
+}
+
+.grid-item-1 {
+  grid-row: 1/2;
+}
+
+.grid-item-2 {
+  grid-row: 2/3;
+}
+
+.grid-item-3 {
+  grid-row: 3/4;
+}
+
+.box {
+  border: 1px #ccc solid;
+  margin-bottom: 15px;
+  padding-top: 10px;
+  border-radius: 5px;
+  background-color: #ffffff;
+}
+
+.label {
+  float: left;
+}
+
+.div-form {
+  margin-bottom: 10px;
+}
+
+:deep(.ant-divider-horizontal) {
+  margin: 0 !important;
+}
+</style>

+ 107 - 0
src/custom/inventory/AssetInventoryStep1.vue

@@ -0,0 +1,107 @@
+<template>
+  <div>
+    <a-radio-group v-model:value="value">
+      <a-radio :style="radioStyle" :value="1">全盘。</a-radio>
+      <a-radio :style="radioStyle" :value="3">抽盘。</a-radio>
+    </a-radio-group>
+  </div>
+  <a-divider style="margin:14px 0 20px 0 !important;" />
+  <a-button type="primary" @click="previousStep">上一步</a-button>
+  <a-button style="float: right;" type="primary" @click="next">下一步</a-button>
+</template>
+
+<script>
+
+
+import { Notify } from 'pc-component-v3';
+
+export default {
+
+  components: {},
+  props: {
+    currentStep: {
+      type: Object,
+      default() {
+        return {};
+      },
+    },
+  },
+  emits: ['next'],
+  data: function () {
+    return {
+      value: undefined,
+      radioStyle: {
+        size: 'large',
+        display: 'flex',
+        height: '60px',
+        lineHeight: '60px',
+      },
+      isShow: false,
+      step: undefined,
+    };
+  },
+
+  methods: {
+    next: function () {
+      var _self = this;
+      if (_self.value == undefined || _self.value == null) {
+        Notify.error('错误', '未选择盘点类型', 1000);
+        return;
+      }
+      var data = {
+        currentStep: 1,
+        showPage: _self.value,
+        assetInventoryStep3: undefined,
+      };
+      _self.$emit('next', data);
+    },
+    previousStep: function () {
+      var _self = this;
+      _self.$router.push('/wms/asset-inventory');
+    },
+
+    mounted: function () {
+
+    },
+  },
+};
+</script>
+<style scoped>
+.grid-container {
+  display: grid;
+  grid-template-rows: 8% 8% 84%;
+  grid-template-columns: 100%;
+  width: 100%;
+  /*视口被均分为 100 单位的 vh 占据整个窗口,扣掉顶部 topNav 的距离后,计算得到 responseOrganizationSelect 的高度*/
+  height: calc(100vh - 130px);
+  margin-top: 10px;
+}
+
+.grid-item-1 {
+  grid-row: 1/2;
+}
+
+.grid-item-2 {
+  grid-row: 2/3;
+}
+
+.grid-item-3 {
+  grid-row: 3/4;
+}
+
+.box {
+  border: 1px #ccc solid;
+  margin-bottom: 15px;
+  padding-top: 10px;
+  border-radius: 5px;
+  background-color: #ffffff;
+}
+
+.label {
+  float: left;
+}
+
+.div-form {
+  margin-bottom: 10px;
+}
+</style>

+ 152 - 0
src/custom/inventory/AssetInventoryStep2.vue

@@ -0,0 +1,152 @@
+<template>
+  <div>
+    <a-form :label-col="{ span: 4 }" :wrapper-col="{ span: 16 }">
+      <a-form-item label="盘点单名称" :rules="[{ required: true }]" class="m-form-item">
+        <a-input v-model:value="inventorySheetName" placeholder="请输入盘点单名称" />
+      </a-form-item>
+    </a-form>
+    <a-divider style="margin:14px 0 20px 0 !important;" />
+    <a-button type="primary" @click="previous">上一步</a-button>
+    <a-button style="float: right;" type="primary" @click="next">下一步</a-button>
+  </div>
+</template>
+
+<script>
+import { Notify } from 'pc-component-v3';
+
+
+export default {
+
+  components: {},
+
+  props: {
+    currentStep: {
+      type: Object,
+      default() {
+        return {};
+      },
+    },
+  },
+
+  // 定义抛出的事件名称
+  emits: ['previous', 'next'],
+  data: function () {
+    return {
+      inventorySheetName: null,
+      currentStepTempory: {},
+    };
+  },
+
+  watch: {
+    currentStep: {
+      handler(newVal, oldVal) {
+        console.log(newVal);
+        if (newVal != null) {
+          this.currentStepTempory = JSON.parse(JSON.stringify(newVal));
+        }
+      },
+      immediate: true,
+    },
+
+    currentStepTempory: {
+      handler(newVal, oldVal) {
+        clearTimeout(this.timer); //清除延迟执行
+        let _self = this;
+        this.timer = setTimeout(() => { //设置延迟执行
+          _self.$emit('update', _self.currentStepTempory);
+        }, 1000);
+      },
+      deep: true,
+    },
+  },
+  mounted: function () { },
+
+  methods: {
+    next: function () {
+      var _self = this;
+      if (_self.inventorySheetName == null || _self.inventorySheetName == '') {
+        Notify.error('错误', '请填写盘点单名称', 1000);
+        return;
+      }
+
+      var param = {
+        inventorySheetName: _self.inventorySheetName,
+      };
+
+
+      console.log(this.currentStep);
+      var data = {
+        currentStep: 2,
+        showPage: 2,
+        assetInventoryStep3: param,
+        assetInventoryStep4: undefined,
+        assetInventoryStep5: undefined,
+      };
+      this.$emit('next', data);
+    },
+
+    previous: function () {
+      var data = {
+        currentStep: 0,
+        showPage: 0,
+      };
+      this.$emit('previous', data);
+    },
+  },
+};
+</script>
+<style scoped>
+.grid-container {
+  display: grid;
+  grid-template-rows: 8% 8% 84%;
+  grid-template-columns: 100%;
+  width: 100%;
+  /*视口被均分为 100 单位的 vh 占据整个窗口,扣掉顶部 topNav 的距离后,计算得到 responseOrganizationSelect 的高度*/
+  height: calc(100vh - 130px);
+  margin-top: 10px;
+}
+
+.grid-item-1 {
+  grid-row: 1/2;
+}
+
+.grid-item-2 {
+  grid-row: 2/3;
+}
+
+.grid-item-3 {
+  grid-row: 3/4;
+}
+
+.box {
+  border: 1px #ccc solid;
+  margin-bottom: 15px;
+  padding-top: 10px;
+  border-radius: 5px;
+  background-color: #ffffff;
+}
+
+.label {
+  float: left;
+}
+
+.div-form {
+  margin-bottom: 10px;
+}
+
+.m-monthly-picker>>>.month-year-display {
+  height: 35px;
+  font-size: 1.5rem;
+  padding-left: 0.9rem;
+  font-weight: 400;
+}
+
+.m-form-item {
+  margin-bottom: 5px;
+}
+
+:deep(.ant-form-item-label > label) {
+  font-size: 14px !important;
+  font-weight: 500 !important;
+}
+</style>

+ 171 - 0
src/custom/inventory/AssetInventoryStep3.vue

@@ -0,0 +1,171 @@
+<template>
+  <div>
+    <a-result v-if="isShow" status="success" title="操作成功!" sub-title="恭喜您,全盘生成盘点单成功.">
+      <template #extra>
+        <div style="text-align: left; margin-bottom: 20px;">
+          <a-table :columns="columns" :data-source="organizationNames">
+            <template #bodyCell="{ column, record }">
+              <template v-if="column.key === 'name'" />
+              <template v-else-if="column.key === 'documentName'">
+                <span>
+                  {{ record.documentName }}
+                </span>
+              </template>
+              <template v-else-if="column.key === 'documentNo'">
+                <span>
+                  {{ record.documentNo }}
+                </span>
+              </template>
+              <template v-else-if="column.key === 'operation'">
+                <a-button type="primary" @click="openCurdWindow(record.id)">查看盘点单</a-button>
+              </template>
+            </template>
+          </a-table>
+        </div>
+      </template>
+    </a-result>
+
+    <a-result v-else title="全盘生成一个盘点单">
+      <template #extra>
+        <a-button key="console" type="primary" @click="end">确认生成盘点单</a-button>
+      </template>
+    </a-result>
+
+
+    <a-divider style="margin:14px 0 20px 0 !important;" />
+
+    <a-button key="console" type="primary" @click="previous">上一步</a-button>
+    <a-button key="console" style="float: right;" type="primary" @click="next">返回</a-button>
+    <Loading v-if="loading" />
+  </div>
+</template>
+
+<script>
+
+import Common from '../common/Common.js';
+import { Notify, Uuid } from 'pc-component-v3';
+import AssetInventoryResource from '../api/asset/AssetInventoryResource.js';
+
+export default {
+
+  components: {},
+
+  props: {
+    currentStep: {
+      type: Object,
+      default() {
+        return {};
+      },
+    },
+  },
+
+  // 定义抛出的事件名称
+  emits: ['previous', 'next'],
+  data: function () {
+    return {
+      currentStepTempory: {},
+      isShow: false,
+      loading: false,
+      organizationNames: [],
+      columns: [{
+        title: '部门',
+        dataIndex: 'name',
+        key: 'name',
+      }, {
+        title: '盘点单名称',
+        dataIndex: 'documentName',
+        key: 'documentName',
+      }, {
+        title: '盘点单编号',
+        dataIndex: 'documentNo',
+        key: 'documentNo',
+      },
+      {
+        title: '操作',
+        dataIndex: 'operation',
+        key: 'operation',
+      }],
+    };
+  },
+
+  watch: {
+    currentStep: {
+      handler(newVal, oldVal) {
+        console.log(newVal);
+        if (newVal != null) {
+          this.currentStepTempory = JSON.parse(JSON.stringify(newVal));
+        }
+      },
+      immediate: true,
+    },
+
+    currentStepTempory: {
+      handler(newVal, oldVal) {
+        clearTimeout(this.timer);  //清除延迟执行
+        let _self = this;
+        this.timer = setTimeout(() => {   //设置延迟执行
+          _self.$emit('update', _self.currentStepTempory);
+        }, 1000);
+      },
+      deep: true,
+    },
+  },
+  mounted: function () {
+
+  },
+
+  methods: {
+    /**
+       * 打开资产盘点单的CURD窗口
+       */
+    openCurdWindow: function (data) {
+      let url = Common.getRedirectUrl('#/desktop/window1/window-read/view/041101/0/' + data +
+        '?currPage=1&currIndex=1&totalCount=1&uuid=' + Uuid.createUUID());
+      window.open(url);
+    },
+
+    end: function () {
+      var _self = this;
+      var param = _self.currentStep.assetInventoryStep3;
+      _self.loading = true;
+      AssetInventoryResource.departmentGeneratesCountSheet(param).then(
+        data => {
+          if (data.errorCode != 0) {
+            Notify.error('失败', data.errorMessage, false);
+          } else {
+            data.datas.forEach(function (item) {
+              var organizationName = {
+                name: item.organizationName,
+                documentNo: item.documentNo,
+                documentName: item.name,
+                id: item.id,
+              };
+              _self.organizationNames.push(organizationName);
+            });
+            Notify.success('成功', '全单位生成盘点单成功', 2000);
+          }
+
+          _self.isShow = true;
+          _self.loading = false;
+        }, xmlHttpRequest => {
+          _self.loading = false;
+          Common.processException(xmlHttpRequest);
+        });
+    },
+
+    previous: function () {
+      var data = {
+        currentStep: 1,
+        showPage: 1,
+        assetInventoryStep3: undefined,
+      };
+      this.$emit('previous', data);
+    },
+    next: function () {
+      var _self = this;
+      _self.$router.push('/wms/asset-inventory');
+    },
+  },
+};
+</script>
+<style></style>

+ 277 - 0
src/custom/inventory/AssetInventoryStep4.vue

@@ -0,0 +1,277 @@
+<template>
+  <div style="padding: 0 10px;">
+    <div class="action-buttons">
+      <a-button type="primary" @click="searchDatas">搜索</a-button>
+      <a-button danger @click="clear">清空</a-button>
+      <div>
+        <a-form-item label="盘点单名称" :rules="[{ required: true, message: '请输入盘点单名称' }]">
+          <a-input v-model:value="inventorySheetName" placeholder="请输入盘点单名称" />
+        </a-form-item>
+      </div>
+    </div>
+    <div style="display: flex; gap: 10px;">
+      <div style="width: 20%;">
+        <div class="filter-section">
+          <div class="category-panel">
+            <a-form layout="horizontal" :model="formState">
+
+              <a-form-item label="名称">
+                <a-input v-model:value="formState.inventoryName" placeholder="请输入名称" @keyup.enter="getCurrentStock" />
+              </a-form-item>
+              <a-form-item label="编号">
+                <a-input v-model:value="formState.inventoryNo" placeholder="请输入编号" @keyup.enter="getCurrentStock" />
+              </a-form-item>
+              <a-form-item label="类型">
+                <a-select v-model:value="formState.inventoryType" :allow-clear="true" placeholder="请选择类型" @change="getCurrentStock">
+                  <a-select-option :value="undefined">全部</a-select-option>
+                  <a-select-option value="Clamp">工装</a-select-option>
+                  <a-select-option value="Instrument">设备</a-select-option>
+                  <a-select-option value="FinishProduct">成品</a-select-option>
+                </a-select>
+              </a-form-item>
+              <a-form-item label="仓库">
+                <a-select v-model:value="formState.inventoryWarehouse" :allow-clear="true" placeholder="请选择仓库" @change="getCurrentStock">
+                  <a-select-option :value="undefined">全部仓库</a-select-option>
+                </a-select>
+              </a-form-item>
+            </a-form>
+          </div>
+        </div>
+      </div>
+      <div style="width: 80%;margin:10px 0 0 10px;">
+        <CommonTable ref="tableRef" :extra-height="100" :columns="currentStockColumns" :data-source="currentStocks"
+          :total="currentStocks.length" :is-custom-row-click="true" @custom-row-click="openWindow">
+          <template #bodyCell="{ column, index }">
+            <span v-if="column.dataIndex === 'index'">
+              {{ index + 1 }}
+            </span>
+          </template>
+        </CommonTable>
+      </div>
+    </div>
+    <div style="display: flex; justify-content: space-between;">
+      <a-button type="primary" @click="previous">上一步</a-button>
+      <a-button type="primary" @click="next">
+        下一步
+      </a-button>
+    </div>
+    <Loading v-if="loading" />
+  </div>
+</template>
+
+<script>
+import Common from '../common/Common.js';
+import { message } from 'ant-design-vue';
+import CommonTable from '../common/CommonTable.vue';
+import { UserStorageResource, Uuid, Notify } from 'pc-component-v3';
+import { DownOutlined, RightOutlined } from '@ant-design/icons-vue';
+
+export default {
+  components: { CommonTable, DownOutlined, RightOutlined },
+  emits: ['previous', 'next'],
+  data() {
+    return {
+      checked: false,
+      inventoryClasses: [],
+      type: 0,
+      warehouseId: null,
+      warehouseName: null,
+      checkVouchId: null,
+      currentStocks: [],
+      pagination: {
+        total: 0,
+        pageSize: 10,
+        current: 1,
+      },
+      isCurrentStock: true,
+      uuid: Uuid.createUUID(),
+      loading: false,
+      panelVisible: true,
+      namePanelVisible: true,
+      inventorySheetName: '',
+      formState: {
+        inventoryName: undefined,
+        inventoryNo: undefined,
+        inventoryType: undefined,
+        inventoryWarehouse: undefined,
+      },
+    };
+  },
+  computed: {
+    currentStockColumns() {
+      return [
+        { title: '序号', dataIndex: 'index', width: 50 },
+        { title: '名称', dataIndex: 'inventoryName', width: 100 },
+        { title: '编号', dataIndex: 'inventoryNo', width: 120 },
+        { title: '类型', dataIndex: 'inventoryType', width: 140 },
+        { title: '默认货位', dataIndex: 'inventoryPosition', width: 140 },
+        { title: '实际货位', dataIndex: 'inventoryActulPosition', width: 140 },
+        { title: '所在仓库', dataIndex: 'inventoryWarehouse', width: 100 },
+      ].map(item => {
+        return { ...item, align: 'center' };
+      });
+    },
+  },
+
+  created() {
+    const _self = this;
+    const uuid = this.$route.params.uuid;
+    UserStorageResource.uniqueByKey(uuid + '_modelData').then(
+      str => {
+        if (str.data) {
+          const modelData = JSON.parse(str.data);
+          _self.checkVouchId = modelData.id;
+          _self.warehouseId = modelData.data.warehouse.id;
+          _self.warehouseName = modelData.data.warehouse.displayValue[0];
+        }
+      },
+      errorData => {
+        Common.processException(errorData);
+      },
+    );
+  },
+  mounted() {
+    this.getCurrentStock();
+  },
+  methods: {
+
+    previous: function () {
+      var data = {
+        currentStep: 0,
+        showPage: 0,
+        assetInventoryStep3: undefined,
+      };
+      this.$emit('previous', data);
+    },
+    next: function () {
+      var _self = this;
+      if (_self.inventorySheetName == null || _self.inventorySheetName == '') {
+        Notify.error('错误', '请填写盘点单名称', 1000);
+        return;
+      }
+
+      var param = {
+        inventorySheetName: _self.inventorySheetName,
+        ..._self.formState,
+      };
+      console.log(param, 'param');
+      var data = {
+        currentStep: 2,
+        showPage: 4,
+        assetInventoryStep3: param,
+        assetInventoryStep4: undefined,
+        assetInventoryStep5: undefined,
+      };
+      this.$emit('next', data);
+    },
+
+    searchDatas() {
+      this.getCurrentStock();
+    },
+
+
+    // 查询数据
+    getCurrentStock() {
+      const _self = this;
+
+      _self.loading = true;
+      const obj = {
+        inventoryName: _self.formState.inventoryName,
+        inventoryNo: _self.formState.inventoryNo,
+        inventoryType: _self.formState.inventoryType,
+        inventoryWarehouse: _self.formState.inventoryWarehouse,
+      };
+      $.ajax({
+        url: Common.getApiURL('InventoryResource/checkVouchFindInventoryByCondition'),
+        type: 'post',
+        dataType: 'json',
+        contentType: 'application/json',
+        data: JSON.stringify(obj),
+        beforeSend: request => {
+          Common.addTokenToRequest(request);
+        },
+        success: data => {
+          if (data.errorCode === 0) {
+            _self.currentStocks = data.datas
+          } else {
+            message.warning(data.errorMessage);
+          }
+          _self.loading = false;
+        },
+        error: (XMLHttpRequest, textStatus, errorThrown) => {
+          _self.loading = false;
+          Common.processException(XMLHttpRequest, textStatus, errorThrown);
+        },
+      });
+    },
+
+    clear() {
+      this.formState = {
+        inventoryName: undefined,
+        inventoryNo: undefined,
+        inventoryType: undefined,
+        inventoryWarehouse: undefined,
+      };
+      this.getCurrentStock();
+    },
+    openWindow(item) {
+      console.log(item);
+      // window.open(
+      //   `#/desktop/window1/window-read/view/050405/0/${item.id}?currPage=1&currIndex=1&totalCount=1&uuid=${Uuid.createUUID()}`,
+      // );
+    },
+  },
+};
+</script>
+
+<style scoped>
+.action-buttons {
+  margin-top: 20px;
+  display: flex;
+  gap: 10px;
+}
+
+.panel-header {
+  background-color: #fafafa;
+  padding: 10px;
+  border-radius: 5px;
+  cursor: pointer;
+  font-size: 14px;
+}
+
+.selected-positions {
+  margin-top: 20px;
+  display: flex;
+  flex-wrap: wrap;
+  gap: 5px;
+}
+
+.filter-section {
+  margin-top: 20px;
+}
+
+.category-panel,
+.position-panel {
+  margin-top: 20px;
+}
+
+.inventory-table {
+  margin-top: 20px;
+}
+
+.pagination-info {
+  margin-top: 20px;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+
+:deep(.ant-form-item) {
+  margin-bottom: 10px !important;
+}
+
+:deep(.ant-form-item-label > label) {
+  font-size: 14px !important;
+  font-weight: 600 !important;
+}
+</style>

+ 178 - 0
src/custom/inventory/AssetInventoryStep5.vue

@@ -0,0 +1,178 @@
+<template>
+  <div>
+    <a-result v-if="isShow" status="success" title="操作成功!" sub-title="恭喜您,抽盘生成盘点单成功.">
+      <template #extra>
+        <div style="text-align: left; margin-bottom: 20px;">
+          <a-table :columns="columns" :data-source="organizationNames">
+            <template #bodyCell="{ column, record }">
+              <template v-if="column.key === 'name'" />
+              <template v-else-if="column.key === 'documentName'">
+                <span>
+                  {{ record.documentName }}
+                </span>
+              </template>
+              <template v-else-if="column.key === 'documentNo'">
+                <span>
+                  {{ record.documentNo }}
+                </span>
+              </template>
+              <template v-else-if="column.key === 'operation'">
+                <a-button type="primary" @click="openCurdWindow(record.id)">查看盘点单</a-button>
+              </template>
+            </template>
+          </a-table>
+        </div>
+      </template>
+    </a-result>
+
+
+    <a-result v-else title="抽盘生成盘点单">
+      <template #extra>
+        <a-button key="console" type="primary" @click="end">确认生成盘点单</a-button>
+      </template>
+    </a-result>
+
+
+    <a-divider style="margin:14px 0 20px 0 !important;" />
+    <a-button key="console" type="primary" @click="previous">上一步</a-button>
+    <a-button key="console" style="float: right;" type="primary" @click="next">返回</a-button>
+    <Loading v-if="loading" />
+  </div>
+</template>
+
+<script>
+
+import Common from '../common/Common.js';
+import { Notify, Uuid } from 'pc-component-v3';
+import AssetInventoryResource from '../api/asset/AssetInventoryResource.js';
+
+
+export default {
+
+  components: {},
+
+  props: {
+    currentStep: {
+      type: Object,
+      default() {
+        return {};
+      },
+    },
+  },
+
+  // 定义抛出的事件名称
+  emits: ['previous'],
+  data: function () {
+    this.treeList = [];
+    return {
+      treeData: [],
+      expandedKeys: [],
+      checkedKeys: [],
+      autoExpandParent: true,
+      inventorySheetName: null,
+      currentStepTempory: {},
+      isShow: false,
+      loading: false,
+      organizationNames: [],
+      columns: [{
+        title: '部门',
+        dataIndex: 'name',
+        key: 'name',
+      }, {
+        title: '盘点单名称',
+        dataIndex: 'documentName',
+        key: 'documentName',
+      }, {
+        title: '盘点单编号',
+        dataIndex: 'documentNo',
+        key: 'documentNo',
+      },
+      {
+        title: '操作',
+        dataIndex: 'operation',
+        key: 'operation',
+      },
+      ],
+    };
+  },
+
+  watch: {
+    currentStep: {
+      handler(newVal, oldVal) {
+        console.log(newVal);
+        if (newVal != null) {
+          this.currentStepTempory = JSON.parse(JSON.stringify(newVal));
+        }
+      },
+      immediate: true,
+    },
+
+    currentStepTempory: {
+      handler(newVal, oldVal) {
+        clearTimeout(this.timer); //清除延迟执行
+        let _self = this;
+        this.timer = setTimeout(() => { //设置延迟执行
+          _self.$emit('update', _self.currentStepTempory);
+        }, 1000);
+      },
+      deep: true,
+    },
+  },
+  mounted: function () {
+
+  },
+
+  methods: {
+    /**
+       * 打开资产盘点单的CURD窗口
+       */
+    openCurdWindow: function (data) {
+      let url = Common.getRedirectUrl('#/desktop/window1/window-read/view/041101/0/' + data +
+        '?currPage=1&currIndex=1&totalCount=1&uuid=' + Uuid.createUUID());
+      window.open(url);
+    },
+
+    // 确认生成抽盘盘点单
+    end: function () {
+      var _self = this;
+      var param = _self.currentStep.assetInventoryStep3;
+      console.log(param, '抽盘参数---');
+      _self.loading = true;
+      AssetInventoryResource.generateCountSheetBySampling(param).then(
+        data => {
+          _self.loading = false;
+          if (data.errorCode == 0) {
+            var organizationName = {
+              name: data.organizationName,
+              documentNo: data.documentNo,
+              documentName: data.name,
+              id: data.id,
+            };
+            _self.organizationNames.push(organizationName);
+            Notify.success('成功', '抽盘生成盘点单成功', 2000);
+            _self.isShow = true;
+          } else {
+            Notify.error('错误', data.errorMessage, 2000);
+          }
+        }, xmlHttpRequest => {
+          _self.loading = false;
+          Common.processException(xmlHttpRequest);
+        });
+    },
+
+    previous: function () {
+      var data = {
+        currentStep: 1,
+        showPage: 3,
+        assetInventoryStep3: undefined,
+      };
+      this.$emit('previous', data);
+    },
+    next: function () {
+      var _self = this;
+      _self.$router.push('/wms/asset-inventory');
+    },
+  },
+};
+</script>
+<style></style>

+ 95 - 0
src/custom/inventory/InventoryDataProcessing.vue

@@ -0,0 +1,95 @@
+<template>
+  <div>
+    <div>
+      <Navbar v-if="pageInformation.showPage === 0" :title="$t('lang.AssetInventory.inventoryDataProcessing')"
+        :is-go-back="false" />
+      <div v-if="pageInformation.showPage === 0" id="step-container" style="margin-top: 20px;">
+        <section>
+          <a-steps :current="pageInformation.currentStep">
+            <a-step :title="$t('lang.ConsolidatedAssetInventory.selectInventoryDataProcessingType')" />
+            <a-step :title="$t('lang.ConsolidatedAssetInventory.processInventoryData')" />
+          </a-steps>
+        </section>
+        <a-divider style="margin:20px 0  6px 0 !important;" />
+      </div>
+      <section>
+        <inventory-data-processing-step1 v-if="pageInformation.showPage == 0" :current-step="pageInformation"
+          @next="nextStep" />
+        <inventory-data-processing-step2 v-if="pageInformation.showPage == 1" :current-step="pageInformation"
+          @next="nextStep" @previous="previousStep" />
+        <inventory-data-processing-step3 v-if="pageInformation.showPage == 2" :current-step="pageInformation"
+          @next="nextStep" @previous="previousStep" />
+        <inventory-data-processing-step4 v-if="pageInformation.showPage == 3" :current-step="pageInformation"
+          @next="nextStep" @previous="previousStep" />
+        <inventory-data-processing-step7 v-if="pageInformation.showPage == 7" :current-step="pageInformation"
+          @next="nextStep" @previous="previousStep" />
+        <inventory-data-processing-step8 v-if="pageInformation.showPage == 8" :current-step="pageInformation"
+          @previous="previousStep" />
+      </section>
+    </div>
+  </div>
+</template>
+
+<script>
+
+import InventoryDataProcessingStep1 from './InventoryDataProcessingStep1.vue';
+import InventoryDataProcessingStep2 from './InventoryDataProcessingStep2.vue';
+import InventoryDataProcessingStep3 from './InventoryDataProcessingStep3.vue';
+import InventoryDataProcessingStep4 from './InventoryDataProcessingStep4.vue';
+import InventoryDataProcessingStep7 from './InventoryDataProcessingStep7.vue';
+import InventoryDataProcessingStep8 from './InventoryDataProcessingStep8.vue';
+
+export default {
+
+  components: {
+
+    'inventory-data-processing-step1': InventoryDataProcessingStep1,
+    'inventory-data-processing-step2': InventoryDataProcessingStep2,
+    'inventory-data-processing-step3': InventoryDataProcessingStep3,
+    'inventory-data-processing-step4': InventoryDataProcessingStep4,
+    'inventory-data-processing-step7': InventoryDataProcessingStep7,
+    'inventory-data-processing-step8': InventoryDataProcessingStep8,
+
+  },
+  data: function () {
+    return {
+      pageInformation: {
+        currentStep: 0,
+        showPage: 0,
+        assetInventoryStep3: undefined,
+      },
+    };
+  },
+
+  methods: {
+    nextStep: function (data) {
+      var _self = this;
+      _self.pageInformation = data;
+      Object.assign(this.pageInformation, data);
+    },
+    previousStep: function (data) {
+      var _self = this;
+      _self.pageInformation = data;
+    },
+    /**
+     * 修改数据
+     */
+    update: function (pageInformation) {
+      Object.assign(this.pageInformation, pageInformation);
+    },
+
+    mounted: function () {
+
+    },
+  },
+};
+</script>
+<style scoped>
+#step-container {
+  margin: 0 !important;
+}
+
+.ant-divider-horizontal {
+  margin: 8px 0;
+}
+</style>

+ 113 - 0
src/custom/inventory/InventoryDataProcessingStep1.vue

@@ -0,0 +1,113 @@
+<template>
+  <div>
+    <div>
+      <a-radio-group v-model:value="value">
+        <a-radio :style="radioStyle" :value="1">
+          合并盘点单
+        </a-radio>
+        <a-radio :style="radioStyle" :value="2">
+          生成盘点报表
+        </a-radio>
+        <a-radio :style="radioStyle" :value="3">
+          关闭盘点单
+        </a-radio>
+      </a-radio-group>
+    </div>
+    <a-divider style="margin:14px 0 20px 0 !important;" />
+    <a-button type="primary" @click="previousStep">上一步</a-button>
+    <a-button style="float: right;" type="primary" @click="next">下一步</a-button>
+  </div>
+</template>
+
+<script>
+import { Notify } from 'pc-component-v3';
+
+export default {
+  components: {},
+  props: {
+    currentStep: {
+      type: Object,
+      default() {
+        return {};
+      },
+    },
+  },
+  emits: ['next'],
+  data: function () {
+    return {
+      value: undefined,
+      radioStyle: {
+        size: 'large',
+        display: 'flex',
+        height: '60px',
+        lineHeight: '60px',
+      },
+      isShow: false,
+      step: undefined,
+    };
+  },
+
+  methods: {
+    next: function () {
+      var _self = this;
+      if (_self.value == undefined || _self.value == null) {
+        Notify.error('错误', '未选择处理盘点数据类型', 1000);
+        return;
+      }
+      var data = {
+        currentStep: 1,
+        showPage: _self.value,
+        assetInventoryStep3: undefined,
+      };
+      _self.$emit('next', data);
+    },
+    previousStep: function () {
+      var _self = this;
+      _self.$router.push('/wms/asset-inventory');
+    },
+
+    mounted: function () {
+
+    },
+  },
+};
+</script>
+<style scoped>
+.grid-container {
+  display: grid;
+  grid-template-rows: 8% 8% 84%;
+  grid-template-columns: 100%;
+  width: 100%;
+  /*视口被均分为 100 单位的 vh 占据整个窗口,扣掉顶部 topNav 的距离后,计算得到 responseOrganizationSelect 的高度*/
+  height: calc(100vh - 130px);
+  margin-top: 10px;
+}
+
+.grid-item-1 {
+  grid-row: 1/2;
+}
+
+.grid-item-2 {
+  grid-row: 2/3;
+}
+
+.grid-item-3 {
+  grid-row: 3/4;
+}
+
+.box {
+  border: 1px #ccc solid;
+  margin-bottom: 15px;
+  padding-top: 10px;
+  border-radius: 5px;
+  background-color: #ffffff;
+}
+
+.label {
+  float: left;
+}
+
+.div-form {
+  margin-bottom: 10px;
+}
+</style>

+ 203 - 0
src/custom/inventory/InventoryDataProcessingStep2.vue

@@ -0,0 +1,203 @@
+<template>
+  <div>
+    <Navbar :title="$t('lang.ConsolidatedAssetInventory.consolidatedAssetInventory')" :is-go-back="false" />
+    <a-space>
+      <label>{{ $t("lang.ConsolidatedAssetInventory.inventoryName") }}</label>
+      <a-input v-model:value="name" @press-enter="resetQuery" />
+      <label>{{ $t("lang.ConsolidatedAssetInventory.inventoryNo") }}</label>
+      <a-input v-model:value="documentNo" @press-enter="resetQuery" />
+      <a-button type="primary" @click="resetQuery">
+        {{ $t("lang.ConsolidatedAssetInventory.query") }}
+      </a-button>
+      <a-button style="background-color: #4aa14a; color: white;" @click="resetQuery">
+        {{ $t("lang.ConsolidatedAssetInventory.mergeInventorySheet") }}
+        <span style="color: white;">{{ '(' + (mergeInventorySheetId == null ? 0 : 1) + ')' }}</span>
+      </a-button>
+    </a-space>
+    <CommonTable ref="table1" :columns="columns" :data-source="inventoryDtos" :total="pagination.total"
+      :is-select="true" :select-type="'radio'" :extra-height="120" @get-pager="getPageParams"
+      @get-selected="getSelectParams" />
+    <div class="footer">
+      <a-button type="primary" @click="previous">上一步</a-button>
+      <a-button style="float: right;" type="primary" @click="next">下一步</a-button>
+    </div>
+    <Loading v-if="loading" />
+  </div>
+</template>
+
+<script>
+import Common from '../common/Common.js';
+import { Notify } from 'pc-component-v3';
+import CommonTable from '../common/CommonTable.vue';
+import AssetInventoryResource from '../api/asset/AssetInventoryResource.js';
+
+export default {
+  components: {
+    CommonTable,
+  },
+  props: {
+    currentStep: {
+      type: Object,
+      default() {
+        return {};
+      },
+    },
+  },
+  emits: ['next', 'previous'],
+  data: function () {
+    return {
+      inventoryDtos: [],
+      mergeInventorySheetId: null, //合并盘点单
+      pagination: {
+        total: 0,
+        per_page: Common.pageSize, // required
+        current_page: 1, // required
+        last_page: 0, // required
+      },
+      name: null,
+      documentNo: null,
+      checked: false,
+      loading: false,
+      modal: false,
+      columns: [
+        {
+          title: this.$t('lang.ConsolidatedAssetInventory.departmentName'),
+          dataIndex: 'organizationName',
+        },
+        {
+          title: this.$t('lang.ConsolidatedAssetInventory.organizationName'),
+          dataIndex: 'clientName',
+        },
+        {
+          title: this.$t('lang.ConsolidatedAssetInventory.inventoryName'),
+          dataIndex: 'name',
+        },
+        {
+          title: this.$t('lang.ConsolidatedAssetInventory.inventoryNo'),
+          dataIndex: 'documentNo',
+        },
+        {
+          title: this.$t('lang.ConsolidatedAssetInventory.startDate'),
+          dataIndex: 'inventoryStartDate',
+        },
+        {
+          title: this.$t('lang.ConsolidatedAssetInventory.expirationDate'),
+          dataIndex: 'inventoryEndDate',
+        },
+        {
+          title: this.$t('lang.ConsolidatedAssetInventory.accountDate'),
+          dataIndex: 'accountDate',
+        },
+      ].map(column => ({
+        ...column,
+        ellipsis: true,
+        align: 'center',
+        resizable: true,
+      })),
+    };
+  },
+  computed: {},
+
+  watch: {
+    // 如果路由有变化,会再次执行该方法
+    $route: 'init',
+  },
+
+  mounted: function () {
+    this.init();
+  },
+
+  methods: {
+    getPageParams(current, pageSize) {
+      this.pagination.current_page = current;
+      this.pagination.per_page = pageSize;
+      this.getDatas();
+    },
+    getSelectParams(selected) {
+      this.mergeInventorySheetId = selected.selectedRowKeys[0];
+    },
+
+    previous: function () {
+      var data = {
+        currentStep: 0,
+        showPage: 0,
+      };
+      this.$emit('previous', data);
+    },
+    next: function () {
+      var _self = this;
+      if (_self.mergeInventorySheetId == undefined || _self.mergeInventorySheetId == null) {
+        Notify.error('错误', '未选择合并盘点单', 1000);
+        return;
+      }
+      var data = {
+        currentStep: 1,
+        showPage: 7,
+        mergeInventorySheetId: _self.mergeInventorySheetId,
+      };
+      _self.$emit('next', data);
+    },
+    /**
+       * 重置分页,然后查询
+       */
+    resetQuery: function () {
+      this.$refs.table1.backFirstPage();
+    },
+
+    /**
+       * 查询数据
+       */
+    getDatas: function () {
+      var _self = this;
+      _self.loading = true;
+      var param = {
+        range: {
+          start: (_self.pagination.current_page - 1) * _self.pagination.per_page,
+          length: _self.pagination.per_page,
+        },
+        name: _self.name,
+        documentNo: _self.documentNo,
+      };
+      AssetInventoryResource.findByAssetInventoryRequest(param).then(
+        successData => {
+          _self.pagination.total = successData.totalSize;
+          if (successData.dataList) {
+            successData.dataList.forEach(item => {
+              item.checked = false;
+            });
+          }
+          _self.inventoryDtos = successData.dataList;
+          _self.loading = false;
+          if (
+            successData.dataList == undefined ||
+            successData.dataList.length == 0
+          ) {
+            return;
+          }
+          _self.pagination.last_page = Math.ceil(
+            successData.totalSize / successData.range.length,
+          );
+        },
+        errorData => {
+          _self.loading = false;
+          Common.processException(errorData);
+        },
+      );
+    },
+
+    init: function () {
+      var _self = this;
+      _self.getDatas();
+    },
+  },
+};
+</script>
+
+
+<style scoped>
+.footer {
+  margin-top: 6px;
+  display: flex;
+  justify-content: space-between;
+}
+</style>

+ 42 - 0
src/custom/inventory/InventoryDataProcessingStep3.vue

@@ -0,0 +1,42 @@
+<template>
+  <div>
+    <InfoWindow :show-back="false" :info-window-no="infoWindowNo" :where-clause-source="whereClauseSource" />
+    <a-button type="primary" @click="previous">上一步</a-button>
+  </div>
+</template>
+<script>
+
+
+export default {
+  components: {},
+
+  emits: ['previous'],
+
+  data: function () {
+    return {
+      'infoWindowNo': '20220505_131425',
+      'whereClauseSource': {
+        customerDataDimensions: [{
+          fieldName: 'c.id',
+          dataDimensionTypeNo: '202201191757',
+          defaultDataDimensionTypeValueNo: '1',
+        }],
+      },
+    };
+  },
+
+  mounted: function () {
+
+  },
+
+  methods: {
+    previous: function () {
+      var data = {
+        currentStep: 0,
+        showPage: 0,
+      };
+      this.$emit('previous', data);
+    },
+  },
+};
+</script>

+ 194 - 0
src/custom/inventory/InventoryDataProcessingStep4.vue

@@ -0,0 +1,194 @@
+<template>
+  <div>
+    <Navbar :title="$t('lang.ConsolidatedAssetInventory.closeInventorySheet')" :is-go-back="false" />
+    <div>
+      <label>单据号</label>
+      <a-input v-model:value="searchParams.documentNo" class="common" @press-enter="searchChange" />
+      <label class="common">单据名称</label>
+      <a-input v-model:value="searchParams.documentName" class="common" @press-enter="searchChange" />
+      <a-button class="common" type="primary" @click="searchChange">
+        查询
+      </a-button>
+    </div>
+    <CommonTable ref="table" :columns="columns" :data-source="dataSource" :total="total" @get-pager="getPageParams">
+      <template #bodyCell="{ column, record }">
+        <template v-if="column.key === 'processed'">
+          <span>
+            {{
+              record.processed === null || record.processed === false
+                ? "打开"
+                : "关闭"
+            }}</span>
+        </template>
+        <template v-if="column.key === 'operation'">
+          <a-button v-if="
+            record.processed === undefined ||
+            record.processed === null ||
+            record.processed === false
+          " type="primary" danger @click="operate(record)">
+            关闭
+          </a-button>
+          <a-button v-if="record.processed === true" type="primary" @click="operate(record)">
+            打开
+          </a-button>
+        </template>
+      </template>
+    </CommonTable>
+    <a-button class="previousBtn" type="primary" @click="previous">
+      上一步
+    </a-button>
+  </div>
+</template>
+<script setup>
+import Common from '../common/Common';
+import { Modal } from 'ant-design-vue';
+import { SqlApi } from 'pc-component-v3';
+import { debounce } from '../common/utils.js';
+import CommonTable from '../common/CommonTable.vue';
+import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
+import { ref, reactive, defineEmits, onMounted, createVNode } from 'vue';
+import AssetInventoryResource from '../api/asset/AssetInventoryResource.js';
+
+// 查询参数
+const searchParams = reactive({
+  documentNo: '',
+  documentName: '',
+  offset: 0,
+  limit: 20,
+});
+
+// 表格数据
+const columns = reactive(
+  [
+    {
+      title: '单位名称',
+      key: 'cname',
+      dataIndex: 'cname',
+    },
+    {
+      title: '单据号',
+      key: 'documentNo',
+      dataIndex: 'documentNo',
+      width: 200,
+    },
+    {
+      title: '单据名称',
+      key: 'name',
+      dataIndex: 'name',
+      width: 200,
+    },
+    {
+      title: '盘点状态',
+      key: 'inventoryStatus',
+      dataIndex: 'inventoryStatus',
+    },
+    {
+      title: '盘点总数',
+      key: 'totalCount',
+      dataIndex: 'totalCount',
+    },
+    {
+      title: '已盘点数量',
+      key: 'countedQuantity',
+      dataIndex: 'countedQuantity',
+    },
+    {
+      title: '状态',
+      key: 'processed',
+      dataIndex: 'processed',
+    },
+    {
+      title: '操作',
+      key: 'operation',
+      dataIndex: 'operation',
+      fixed: 'right',
+    },
+  ].map(item => ({ ...item, align: 'center', resizable: true, ellipsis: true })),
+);
+const dataSource = ref([]);
+const total = ref(0); // 数据总数
+const table = ref();
+// 打开关闭盘点单操作
+const operate = record => {
+  Modal.confirm({
+    title:
+      record.processed === null || record.processed === false
+        ? '关闭盘点单'
+        : '打开盘点单',
+    icon: createVNode(ExclamationCircleOutlined),
+    content: createVNode(
+      'div',
+      {
+        style: 'color:red;',
+      },
+      record.processed === null || record.processed === false
+        ? `您确定要关闭盘点单:${record.documentNo} 吗?`
+        : `您确定要打开盘点单:${record.documentNo} 吗?`,
+    ),
+    onOk() {
+      if (record.processed === null || record.processed === false) {
+        AssetInventoryResource.setProcessed(record.id, true);
+      } else {
+        AssetInventoryResource.setProcessed(record.id, false);
+      }
+      queryAssetDiscovery();
+    },
+    class: 'setProcessed',
+  });
+};
+
+// 查询按钮功能
+const searchChange = debounce(() => {
+  table.value.backFirstPage();
+}, 500);
+
+const emits = defineEmits(['previous']);
+// const amisWindowNo = '20220516_164216';
+
+// 从子组件获取的分页参数
+const getPageParams = (start, length) => {
+  searchParams.offset = (start - 1) * length;
+  searchParams.limit = length;
+  queryAssetDiscovery();
+};
+
+onMounted(() => {
+  queryAssetDiscovery();
+});
+// 资产盘点单查询,用于界面设置盘点单状态
+const queryAssetDiscovery = () => {
+  SqlApi.execute('20220520_145516', searchParams).then(
+    successData => {
+      if (successData.errorCode === 0) {
+        dataSource.value = successData.items;
+        total.value = successData.total;
+      }
+    },
+    errorData => {
+      Common.processException(errorData);
+    },
+  );
+};
+
+const previous = () => {
+  var data = {
+    currentStep: 0,
+    showPage: 0,
+  };
+  emits('previous', data);
+};
+</script>
+<style scoped>
+input {
+  width: 200px;
+}
+
+.common {
+  margin-left: 8px;
+}
+
+.previousBtn {
+  position: fixed;
+  top: 95%;
+}
+</style>

+ 544 - 0
src/custom/inventory/InventoryDataProcessingStep5.vue

@@ -0,0 +1,544 @@
+<template>
+  <div>
+    <div class="grid-container">
+      <div class="grid-item-1">
+        <div style="margin-top: 10px">
+          <div class="col-md-12">
+            <div class="form-inline">
+              <div class="form-group">
+                <label for="name">{{
+                  $t("lang.ConsolidatedAssetInventory.inventoryName")
+                }}</label>
+                <input
+                  id="name"
+                  v-model="name"
+                  type="text"
+                  class="form-control"
+                  @keydown.enter="resetQuery"
+                />
+              </div>
+              <div class="form-group">
+                <label for="documentNo">{{
+                  $t("lang.ConsolidatedAssetInventory.inventoryNo")
+                }}</label>
+                <input
+                  id="documentNo"
+                  v-model="documentNo"
+                  type="text"
+                  class="form-control"
+                  @keydown.enter="resetQuery"
+                />
+              </div>
+              <div class="form-group">
+                <button class="btn btn-primary" @click="resetQuery">
+                  {{ $t("lang.ConsolidatedAssetInventory.query") }}
+                </button>
+                <!-- <button
+                  class="btn btn-success"
+                  @click="selectCombinedInventory"
+                >
+                  {{
+                    $t(
+                      "lang.ConsolidatedAssetInventory.selectCombinedInventory"
+                    )
+                  }}
+                  <span class="badge">{{ selectCombinedInventoryCount }}</span>
+                </button> -->
+                <button
+                  class="btn btn-success"
+                  @click="viewConsolidatedCountSheet"
+                >
+                  {{
+                    $t(
+                      "lang.ConsolidatedAssetInventory.viewConsolidatedCountSheet"
+                    )
+                  }}
+                  <span class="badge">{{ selectCombinedInventoryCount }}</span>
+                </button>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+
+      <div class="grid-item-2">
+        <table
+          class="fixed-table table-striped table-bordered"
+          style="margin-top: 10px"
+        >
+          <thead>
+            <tr>
+              <th class="col-md-1">
+                <input
+                  v-model="checked"
+                  type="checkbox"
+                  :checked="checked"
+                  @change="selectAll()"
+                />
+              </th>
+              <th class="col-md-2">
+                {{ $t("lang.ConsolidatedAssetInventory.departmentName") }}
+              </th>
+              <th class="col-md-3">
+                {{ $t("lang.ConsolidatedAssetInventory.organizationName") }}
+              </th>
+              <th class="col-md-4">
+                {{ $t("lang.ConsolidatedAssetInventory.inventoryName") }}
+              </th>
+              <th class="col-md-5">
+                {{ $t("lang.ConsolidatedAssetInventory.inventoryNo") }}
+              </th>
+              <th class="col-md-6">
+                {{ $t("lang.ConsolidatedAssetInventory.startDate") }}
+              </th>
+              <th class="col-md-7">
+                {{ $t("lang.ConsolidatedAssetInventory.expirationDate") }}
+              </th>
+              <th class="col-md-8">
+                {{ $t("lang.ConsolidatedAssetInventory.accountDate") }}
+              </th>
+            </tr>
+          </thead>
+          <tbody v-if="inventoryDtos.length > 0">
+            <tr
+              v-for="item in inventoryDtos"
+              :key="item.id"
+            >
+              <td class="col-md-1">
+                <input
+                  type="checkbox"
+                  name="checkboxinput"
+                  :checked="item.checked"
+                  @click="changeSelect(item)"
+                />
+              </td>
+              <td class="col-md-2">{{ item.organizationName }}</td>
+              <td class="col-md-3">{{ item.clientName }}</td>
+              <td class="col-md-4">{{ item.name }}</td>
+              <td class="col-md-5">{{ item.documentNo }}</td>
+              <td class="col-md-6">{{ item.inventoryStartDate }}</td>
+              <td class="col-md-7">{{ item.inventoryEndDate }}</td>
+              <td class="col-md-8">{{ item.accountDate }}</td>
+            </tr>
+          </tbody>
+        </table>
+      </div>
+      <div class="grid-item-3">
+        <div>
+          <div class="pull-left">
+            <span>{{ $t("lang.ConsolidatedAssetInventory.the")
+            }}{{ (pagination.current_page - 1) * pagination.per_page + 1 }}-{{
+              pagination.current_page * pagination.per_page
+            }}{{ $t("lang.ConsolidatedAssetInventory.strip") }},{{
+              $t("lang.ConsolidatedAssetInventory.inTotal")
+            }}{{ pagination.total
+            }}{{ $t("lang.ConsolidatedAssetInventory.strip") }},{{
+              $t("lang.ConsolidatedAssetInventory.eachPage")
+            }}</span>
+            <PageSizeSelect @page-size-changed="pageSizeChanged" />
+            <span>{{ $t("lang.ConsolidatedAssetInventory.strip") }}</span>
+          </div>
+          <div class="pull-right">
+            <Pagination
+              v-if="pagination.last_page > 0"
+              :pagination="pagination"
+              :callback="getDatas"
+              :show-head-and-tail="true"
+            />
+          </div>
+        </div>
+      </div>
+      <div>
+        <a-button type="primary" @click="previous">上一步</a-button>
+      </div>
+      <div>
+        <a-button style="float: right;" type="primary" @click="next">下一步</a-button>
+      </div>
+      <Modal
+        v-model:show="modal"
+        title="查看被合并盘点单"
+        small="true"
+      >
+        <div style="height: calc(100vh - 280px); margin-top: 10px">
+          <table
+            class="fixed-table table-striped table-bordered"
+            style="margin-top: 10px"
+          >
+            <thead>
+              <tr>
+                <th class="col-md-2">
+                  {{ $t("lang.ConsolidatedAssetInventory.inventoryName") }}
+                </th>
+                <th class="col-md-3">
+                  {{ $t("lang.ConsolidatedAssetInventory.inventoryNo") }}
+                </th>
+                <th class="col-md-1">操作</th>
+              </tr>
+            </thead>
+            <tbody v-if="inventoryDtos1.length > 0">
+              <tr
+                v-for="item in inventoryDtos1"
+                :key="item.id"
+              >
+                <td>{{ item.name }}</td>
+                <td>{{ item.documentNo }}</td>
+                <td>
+                  <button class="btn btn-danger" @click="deleteAssetInventory(item)">
+                    {{ $t("lang.ConsolidatedAssetInventory.delete") }}
+                  </button>
+                </td>
+              </tr>
+            </tbody>
+          </table>
+        </div>
+      </Modal>
+    </div>
+    <Loading v-if="loading" />
+  </div>
+</template>
+
+<script>
+import dayjs from 'dayjs';
+import Common from '../common/Common.js';
+import AssetInventoryResource from '../api/asset/AssetInventoryResource.js';
+
+module.exports = {
+  props: {
+    consolidatedCountSheet: {
+      type: Object,
+      default(){
+        return {};
+      },
+    },
+  },
+
+  emits: ['previous','next'],
+  data: function () {
+    return {
+      inventoryDtos: [],
+      inventoryDtos1: [],
+      combinedInventoryIds: [], //被合并的盘点单
+      mergeIntoInventoryIds: [], //合并至的盘点单
+      pagination: {
+        total: 0,
+        per_page: Common.pageSize, // required
+        current_page: 1, // required
+        last_page: 0, // required
+      },
+
+      name: null,
+      documentNo: null,
+      name1: null,
+      documentNo1: null,
+      checked: false,
+      selectCombinedInventoryCount: 0,
+      loading: false,
+      modal: false,
+    };
+  },
+  components: {
+    Common,
+    NavBar,
+    Loading,
+    Pagination,
+    DateWidget,
+    Modal,
+    PageSizeSelect,
+  },
+
+  methods: {
+    next: function() {
+      var _self = this;
+      if(_self.combinedInventoryIds.length < 1){
+        Common.showDialog('提示', '请至少选择一条被合并盘点单', 'error');
+        return;
+      }
+      var data = {
+        currentStep: 2,
+        showPage: 2,
+        combinedInventoryIds: _self.combinedInventoryIds,
+        mergeIntoInventoryIds: _self.consolidatedCountSheet.mergeIntoInventoryIds,
+      };
+      this.$emit('next', data);
+    },
+    previous: function() {
+      var data = {
+        currentStep: 0,
+        showPage: 0,
+        combinedInventoryIds: [],
+        mergeIntoInventoryIds: [],
+      };
+      this.$emit('previous', data);
+    },
+    /**
+     * 全选和反选
+     */
+    selectAll: function () {
+      var _self = this;
+      if (_self.checked) {
+        for (var i = 0; i < _self.inventoryDtos.length; i++) {
+          _self.inventoryDtos[i].checked = true;
+          if (_self.combinedInventoryIds.indexOf(_self.inventoryDtos[i].id,0) == -1) {
+            _self.inventoryDtos1.push(_self.inventoryDtos[i]);
+            _self.combinedInventoryIds.push(_self.inventoryDtos[i].id);
+            _self.selectCombinedInventoryCount = _self.combinedInventoryIds.length;
+          }
+        }
+      } else {
+        for (var j = 0; j < _self.inventoryDtos.length; j++) {
+          _self.inventoryDtos[j].checked = false;
+          let index = _self.inventoryDtos1.indexOf(_self.inventoryDtos[j]);
+          _self.inventoryDtos1.splice(index, 1);
+          let index1 = _self.combinedInventoryIds.indexOf(_self.inventoryDtos[j].id);
+          _self.combinedInventoryIds.splice(index1, 1);
+          _self.selectCombinedInventoryCount = _self.combinedInventoryIds.length;
+        }
+      }
+    },
+
+    /**
+     * 重置分页,然后查询
+     */
+    resetQuery: function () {
+      var _self = this;
+      _self.pagination.current_page = 1;
+      _self.getDatas();
+    },
+    /**
+     * 表格显示行数发生改变
+     */
+    pageSizeChanged: function (newPageSize) {
+      this.pagination.per_page = newPageSize;
+      this.pagination.current_page = 1;
+      this.getDatas();
+    },
+
+    /**
+     * 查询数据
+     */
+    getDatas: function () {
+      var _self = this;
+      _self.loading=true;
+      var param = {
+        range: {
+          start:
+            (_self.pagination.current_page - 1) * _self.pagination.per_page,
+          length: _self.pagination.per_page,
+        },
+        name: _self.name,
+        documentNo: _self.documentNo,
+      };
+      AssetInventoryResource.findByAssetInventoryRequest(param).then(
+        successData => {
+          _self.pagination.total = successData.totalSize;
+          if (successData.dataList) {
+            var isChange = true;
+            successData.dataList.forEach(item => {
+              if (_self.combinedInventoryIds.indexOf(item.id) < 0) {
+                item.checked = false;
+                isChange = false;
+              }else {
+                item.checked = true;
+              }
+              item.inventoryStartDate = dayjs(item.inventoryStartDate).format('YYYY-MM-DD');
+              item.inventoryEndDate = dayjs(item.inventoryEndDate).format('YYYY-MM-DD');
+              item.accountDate = dayjs(item.accountDate).format('YYYY-MM-DD');
+            });
+            _self.checked = isChange;
+          }
+          _self.inventoryDtos = successData.dataList;
+          _self.loading=false;
+          if (
+            successData.dataList == undefined ||
+            successData.dataList.length == 0
+          ) {
+            return;
+          }
+          _self.pagination.last_page = Math.ceil(
+            successData.totalSize / successData.range.length,
+          );
+          _self.fixedTableHeader();
+        },
+        errorData => {
+          _self.loading=false;
+          Common.processException(errorData);
+        },
+      );
+    },
+    changeSelect: function(data) {
+      var _self = this;
+      data.checked = !data.checked;
+      if (data.checked && _self.combinedInventoryIds.indexOf(data.id,0) == -1) {
+        _self.inventoryDtos1.push(data);
+        _self.combinedInventoryIds.push(data.id);
+        _self.selectCombinedInventoryCount = _self.combinedInventoryIds.length;
+      }
+      else{
+        let index = _self.inventoryDtos1.indexOf(data);
+        _self.inventoryDtos1.splice(index, 1);
+        let index1 = _self.combinedInventoryIds.indexOf(data.id);
+        _self.combinedInventoryIds.splice(index1, 1);
+        _self.selectCombinedInventoryCount = _self.combinedInventoryIds.length;
+      }
+    },
+
+    /**
+     * 加入至被合并盘点单中
+     */
+    selectCombinedInventory: function () {
+      var _self = this;
+      _self.loading=true;
+      this.inventoryDtos.forEach(function (item) {
+        if (item.checked && _self.combinedInventoryIds.indexOf(item.id,0) == -1) {
+          _self.inventoryDtos1.push(item);
+          _self.combinedInventoryIds.push(item.id);
+        }
+      });
+
+      if (_self.combinedInventoryIds.length < 1) {
+        _self.loading=false;
+        Common.showDialog('提示', '请选择数据后再提交', 'error');
+        return;
+      }
+
+      if (_self.combinedInventoryIds.length > 0) {
+        _self.loading=false;
+        _self.selectCombinedInventoryCount = _self.combinedInventoryIds.length;
+        Common.showDialog('提示', '加入成功', 'success');
+      } else {
+        _self.loading=false;
+        Common.showDialog('提示', '请选择要提交的内容', 'error');
+      }
+    },
+
+    /**
+     * 查看被合并盘点单模态框
+     */
+    viewConsolidatedCountSheet: function () {
+      var _self = this;
+      _self.modal = true;
+    },
+    /**
+     * 删除选中的被合并盘点单
+     */
+    deleteAssetInventory: function (data) {
+      var _self = this;
+      var isSuccess = false;
+      for(var i = 0 ;i < _self.inventoryDtos1.length; i++){
+        if(_self.inventoryDtos1[i].id == data.id){
+          _self.inventoryDtos1.splice(i,1);
+          isSuccess = true;
+          break;
+        }
+      }
+      for(var j = 0 ;j < _self.combinedInventoryIds.length; j++){
+        if(_self.combinedInventoryIds[j] == data.id){
+          _self.combinedInventoryIds.splice(j,1);
+          isSuccess = true;
+          break;
+        }
+      }
+      for(var k = 0 ;k < _self.inventoryDtos.length; k++){
+        if(_self.inventoryDtos[k].id == data.id){
+          _self.inventoryDtos[k].checked = false;
+          isSuccess = true;
+          break;
+        }
+      }
+      if(isSuccess){
+        _self.selectCombinedInventoryCount = _self.combinedInventoryIds.length;
+        Common.showDialog('提示', '删除成功', 'success');
+      }else{
+        Common.showDialog('提示', '删除失败', 'error');
+      }
+
+    },
+
+    /**
+     * 冻结表头
+     */
+    fixedTableHeader: function () {
+      let _self = this;
+      _self.$nextTick(function () {
+        $('.fixed-table').tableFixer({
+          head: true,
+        });
+      });
+    },
+
+    init: function () {
+      var _self = this;
+
+      _self.getDatas();
+
+      this.fixedTableHeader();
+
+      // 可调整表格列宽
+      _self.$nextTick(function () {
+        $('.fixed-table').resizableColumns();
+      });
+    },
+  },
+
+  mounted: function () {
+    this.init();
+  },
+
+  watch: {
+    // 如果路由有变化,会再次执行该方法
+    $route: 'init',
+  },
+};
+</script>
+
+
+<style scoped>
+.grid-container {
+  margin-top: 10px;
+  display: grid;
+  grid-template-columns: 300px auto;
+  grid-template-rows: 35px 1fr 40px 40px;
+  gap: 10px;
+  justify-items: stretch;
+  align-items: stretch;
+  height: calc(100vh - 170px);
+  overflow: auto;
+}
+
+.grid-item-1 {
+  grid-row-start: 1;
+  grid-row-end: 3;
+  grid-column-start: 1;
+  grid-column-end: 3;
+}
+
+.grid-item-2 {
+  grid-row-start: 2;
+  grid-row-end: 3;
+  grid-column-start: 1;
+  grid-column-end: 3;
+  overflow: auto;
+}
+
+.grid-item-3 {
+  grid-row-start: 3;
+  grid-row-end: 4;
+  grid-column-start: 1;
+  grid-column-end: 3;
+}
+
+.fixed-table {
+  table-layout: fixed;
+}
+
+table.fixed-table tr {
+  height: 40px;
+}
+
+table.fixed-table th,
+table.fixed-table td {
+  overflow: hidden;
+  white-space: nowrap;
+  text-overflow: ellipsis;
+}
+</style>

+ 165 - 0
src/custom/inventory/InventoryDataProcessingStep6.vue

@@ -0,0 +1,165 @@
+<template>
+  <div>
+    <a-result v-if="isShow" status="success" title="操作成功!" sub-title="恭喜您,合并盘点单成功.">
+      <template #extra>
+        <div style="text-align: left; margin-bottom: 20px;">
+          <a-table :columns="columns" :data-source="organizationNames">
+            <template #bodyCell="{ column,record }">
+              <template v-if="column.key === 'name'" />
+              <template v-else-if="column.key === 'documentName'">
+                <span>
+                  {{ record.documentName }}
+                </span>
+              </template>
+              <template v-else-if="column.key === 'documentNo'">
+                <span>
+                  {{ record.documentNo }}
+                </span>
+              </template>
+              <template v-else-if="column.key === 'operation'">
+                <a-button type="primary" @click="openCurdWindow(record.id)">查看盘点单</a-button>
+              </template>
+            </template>
+          </a-table>
+        </div>
+      </template>
+    </a-result>
+    <a-button v-if="!isShow" style="float: left" type="primary" @click="end">确定合并盘点</a-button>
+    <a-divider />
+    <Loading v-if="loading" />
+    <a-button type="primary" @click="previous">上一步</a-button>
+    <a-button key="console" style="float: right;" type="primary" @click="next">下一步</a-button>
+  </div>
+</template>
+
+<script>
+import Common from '../common/Common.js';
+import { Notify, Uuid } from 'pc-component-v3';
+import AssetInventoryResource from '../api/asset/AssetInventoryResource.js';
+
+module.exports = {
+
+  props: {
+    consolidatedCountSheet: {
+      type: Object,
+      default () {
+        return {};
+      },
+    },
+  },
+
+  // 定义抛出的事件名称
+  emits: ['previous'],
+  data: function() {
+    this.treeList = [];
+    return {
+      treeData: [],
+      expandedKeys: [],
+      checkedKeys: [],
+      autoExpandParent: true,
+      inventorySheetName: null,
+      currentStepTempory: {},
+      isShow: false,
+      loading: false,
+      organizationNames: [],
+      columns: [{
+        title: '部门',
+        dataIndex: 'name',
+        key: 'name',
+      }, {
+        title: '盘点单名称',
+        dataIndex: 'documentName',
+        key: 'documentName',
+      }, {
+        title: '盘点单编号',
+        dataIndex: 'documentNo',
+        key: 'documentNo',
+      },
+      {
+        title: '操作',
+        dataIndex: 'operation',
+        key: 'operation',
+      },
+      ],
+    };
+  },
+
+  components: {
+    Loading,
+    Common,
+    Notify,
+  },
+
+  methods: {
+    /**
+       * 打开资产盘点单的CURD窗口
+       */
+    openCurdWindow: function(data) {
+      let url = Common.getRedirectUrl('#/desktop/window1/window-read/view/041101/0/' + data +
+          '?currPage=1&currIndex=1&totalCount=1&uuid=' + Uuid.createUUID());
+      window.open(url);
+    },
+    end: function() {
+      var _self = this;
+      // if (_self.consolidatedCountSheet.mergeIntoInventoryIds.length == 0) {
+      //   if (_self.consolidatedCountSheet.combinedInventoryIds.length == 0) {
+      //     Common.showDialog('提示', '请先选择加入到被合并盘点单', 'error');
+      //     return;
+      //   }
+      // }else{
+      if (_self.consolidatedCountSheet.combinedInventoryIds.length == 0) {
+        Common.showDialog('提示', '请先选择加入到被合并盘点单', 'error');
+        return;
+      }
+      _self.loading=true;
+      var param = {
+        combinedInventoryIds: _self.consolidatedCountSheet.combinedInventoryIds,
+        mergeIntoInventoryIds: _self.consolidatedCountSheet.mergeIntoInventoryIds,
+      };
+      AssetInventoryResource.consolidatedAssetInventory(param).then(
+        successData => {
+          if (successData.errorCode == 0) {
+            _self.isShow=true;
+            var organizationName = {
+              name: successData.organizationName,
+              documentNo: successData.documentNo,
+              documentName: successData.name,
+              id: successData.id,
+            };
+            _self.organizationNames.push(organizationName);
+            Common.showDialog('提示', successData.errorMessage, 'success');
+          } else {
+            Common.showDialog('提示', successData.errorMessage, 'error');
+          }
+          console.log(successData);
+          _self.loading=false;
+        },
+        errorData => {
+          _self.loading=false;
+        },
+      );
+      // }
+    },
+
+    previous: function() {
+      var _self = this;
+      var data = {
+        currentStep: 1,
+        showPage: 1,
+        combinedInventoryIds: [],
+        mergeIntoInventoryIds: _self.consolidatedCountSheet.mergeIntoInventoryIds,
+      };
+      this.$emit('previous', data);
+    },
+    next: function() {
+      var _self = this;
+      _self.$router.push('/eam/assetInventory');
+    },
+  },
+  mounted: function() {
+
+  },
+};
+</script>
+<style>
+</style>

+ 207 - 0
src/custom/inventory/InventoryDataProcessingStep7.vue

@@ -0,0 +1,207 @@
+<template>
+  <div>
+    <Navbar :title="$t('lang.ConsolidatedAssetInventory.consolidatedAssetInventory')" :is-go-back="false" />
+    <a-space>
+      <label>{{ $t("lang.ConsolidatedAssetInventory.inventoryName") }}</label>
+      <a-input v-model:value="name" @press-enter="resetQuery" />
+      <label>{{ $t("lang.ConsolidatedAssetInventory.inventoryNo") }}</label>
+      <a-input v-model:value="documentNo" @press-enter="resetQuery" />
+      <a-button type="primary" @click="resetQuery">
+        {{ $t("lang.ConsolidatedAssetInventory.query") }}
+      </a-button>
+      <a-button style="background-color: #4aa14a; color: white;" @click="resetQuery">
+        {{ $t("lang.ConsolidatedAssetInventory.combinedInventory") }}
+        <span style="color: white;">{{ '(' + consolidatedInventorySheetIds.length + ')' }}</span>
+      </a-button>
+    </a-space>
+    <CommonTable
+      ref="table2" :columns="columns" :data-source="inventoryDtos" :total="pagination.total"
+      :is-select="true" :extra-height="120" @get-pager="getPageParams" @get-selected="getSelectParams"
+    />
+    <div class="footer">
+      <a-button type="primary" @click="previous">上一步</a-button>
+      <a-button style="float: right;" type="primary" @click="next">下一步</a-button>
+    </div>
+    <Loading v-if="loading" />
+  </div>
+</template>
+
+<script>
+import Common from '../common/Common.js';
+import { Notify } from 'pc-component-v3';
+import CommonTable from '../common/CommonTable.vue';
+import AssetInventoryResource from '../api/asset/AssetInventoryResource.js';
+
+export default {
+  components: {
+    CommonTable,
+  },
+  props: {
+    currentStep: {
+      type: Object,
+      default() {
+        return {};
+      },
+    },
+  },
+  emits: ['previous', 'next'],
+  data: function () {
+    return {
+      inventoryDtos: [],
+      consolidatedInventorySheetIds: [], //被合并的盘点单
+      pagination: {
+        total: 0,
+        per_page: Common.pageSize, // required
+        current_page: 1, // required
+        last_page: 0, // required
+      },
+      name: null,
+      documentNo: null,
+      checked: false,
+      loading: false,
+      columns: [
+        {
+          title: this.$t('lang.ConsolidatedAssetInventory.departmentName'),
+          dataIndex: 'organizationName',
+        },
+        {
+          title: this.$t('lang.ConsolidatedAssetInventory.organizationName'),
+          dataIndex: 'clientName',
+        },
+        {
+          title: this.$t('lang.ConsolidatedAssetInventory.inventoryName'),
+          dataIndex: 'name',
+        },
+        {
+          title: this.$t('lang.ConsolidatedAssetInventory.inventoryNo'),
+          dataIndex: 'documentNo',
+        },
+        {
+          title: this.$t('lang.ConsolidatedAssetInventory.startDate'),
+          dataIndex: 'inventoryStartDate',
+        },
+        {
+          title: this.$t('lang.ConsolidatedAssetInventory.expirationDate'),
+          dataIndex: 'inventoryEndDate',
+        },
+        {
+          title: this.$t('lang.ConsolidatedAssetInventory.accountDate'),
+          dataIndex: 'accountDate',
+        },
+      ].map(column => ({
+        ...column,
+        ellipsis: true,
+        align: 'center',
+        resizable: true,
+      })),
+    };
+  },
+  computed: {
+  },
+
+  watch: {
+    // 如果路由有变化,会再次执行该方法
+    $route: 'init',
+  },
+
+  mounted: function () {
+    this.init();
+    console.log(this.currentStep);
+  },
+
+  methods: {
+    getPageParams(current, pageSize) {
+      this.pagination.current_page = current;
+      this.pagination.per_page = pageSize;
+      this.getDatas();
+    },
+    getSelectParams(selected) {
+      this.consolidatedInventorySheetIds = selected.selectedRowKeys;
+    },
+    previous: function () {
+      var data = {
+        currentStep: 1,
+        showPage: 1,
+      };
+      this.$emit('previous', data);
+    },
+    next: function () {
+      var _self = this;
+      if (_self.consolidatedInventorySheetIds == undefined || _self.consolidatedInventorySheetIds == null || _self.consolidatedInventorySheetIds.length < 1) {
+        Notify.error('错误', '未选择被合并盘点单', 1000);
+        return;
+      }
+      var data = {
+        currentStep: 1,
+        showPage: 8,
+        mergeInventorySheetId: _self.currentStep.mergeInventorySheetId,
+        consolidatedInventorySheetIds: _self.consolidatedInventorySheetIds,
+      };
+      _self.$emit('next', data);
+    },
+
+    /**
+       * 重置分页,然后查询
+       */
+    resetQuery: function () {
+      this.$refs.table2.backFirstPage();
+    },
+
+    /**
+       * 查询数据
+       */
+    getDatas: function () {
+      var _self = this;
+      _self.loading = true;
+      var param = {
+        range: {
+          start: (_self.pagination.current_page - 1) * _self.pagination.per_page,
+          length: _self.pagination.per_page,
+        },
+        name: _self.name,
+        documentNo: _self.documentNo,
+      };
+      AssetInventoryResource.findByAssetInventoryRequest(param).then(
+        successData => {
+          _self.pagination.total = successData.totalSize;
+          if (successData.dataList) {
+            successData.dataList.forEach(item => {
+              item.checked = false;
+            });
+          }
+          _self.inventoryDtos = successData.dataList;
+          _self.loading = false;
+          if (
+            successData.dataList == undefined ||
+            successData.dataList.length == 0
+          ) {
+            return;
+          }
+          _self.pagination.last_page = Math.ceil(
+            successData.totalSize / successData.range.length,
+          );
+        },
+        errorData => {
+          _self.loading = false;
+          Common.processException(errorData);
+        },
+      );
+    },
+
+
+
+    init: function () {
+      var _self = this;
+      _self.getDatas();
+    },
+  },
+};
+</script>
+
+
+<style scoped>
+.footer {
+  display: flex;
+  justify-content: space-between;
+}
+</style>

+ 152 - 0
src/custom/inventory/InventoryDataProcessingStep8.vue

@@ -0,0 +1,152 @@
+<template>
+  <div>
+    <a-result v-if="isShow" status="success" title="操作成功!" sub-title="恭喜您,合并盘点单成功.">
+      <template #extra>
+        <div style="text-align: left; margin-bottom: 20px;">
+          <a-table :columns="columns" :data-source="organizationNames">
+            <template #bodyCell="{ column, record }">
+              <template v-if="column.key === 'name'" />
+              <template v-else-if="column.key === 'documentName'">
+                <span>
+                  {{ record.documentName }}
+                </span>
+              </template>
+              <template v-else-if="column.key === 'documentNo'">
+                <span>
+                  {{ record.documentNo }}
+                </span>
+              </template>
+              <template v-else-if="column.key === 'operation'">
+                <a-button type="primary" @click="openCurdWindow(record.id)">查看盘点单</a-button>
+              </template>
+            </template>
+          </a-table>
+        </div>
+      </template>
+    </a-result>
+    <a-result v-else title="合并盘点单">
+      <template #extra>
+        <a-button key="console" type="primary" @click="end">确定合并盘点</a-button>
+      </template>
+    </a-result>
+    <a-divider />
+    <Loading v-if="loading" />
+    <a-button key="console" type="primary" @click="previous">上一步</a-button>
+    <a-button key="console" style="float: right;" type="primary" @click="next">下一步</a-button>
+  </div>
+</template>
+
+<script>
+import { Uuid } from 'pc-component-v3';
+import Common from '../common/Common.js';
+import AssetInventoryResource from '../api/asset/AssetInventoryResource.js';
+
+export default {
+  components: {},
+
+  props: {
+    currentStep: {
+      type: Object,
+      default() {
+        return {};
+      },
+    },
+  },
+
+  // 定义抛出的事件名称
+  emits: ['previous'],
+  data: function () {
+    this.treeList = [];
+    return {
+      treeData: [],
+      expandedKeys: [],
+      checkedKeys: [],
+      autoExpandParent: true,
+      inventorySheetName: null,
+      currentStepTempory: {},
+      isShow: false,
+      loading: false,
+      organizationNames: [],
+      columns: [{
+        title: '部门',
+        dataIndex: 'name',
+        key: 'name',
+      }, {
+        title: '盘点单名称',
+        dataIndex: 'documentName',
+        key: 'documentName',
+      }, {
+        title: '盘点单编号',
+        dataIndex: 'documentNo',
+        key: 'documentNo',
+      },
+      {
+        title: '操作',
+        dataIndex: 'operation',
+        key: 'operation',
+      },
+      ],
+    };
+  },
+  mounted: function () {
+    console.log(this.currentStep);
+  },
+  methods: {
+    /**
+       * 打开资产盘点单的CURD窗口
+       */
+    openCurdWindow: function (data) {
+      let url = Common.getRedirectUrl('#/desktop/window1/window-read/view/041101/0/' + data +
+        '?currPage=1&currIndex=1&totalCount=1&uuid=' + Uuid.createUUID());
+      window.open(url);
+    },
+    end: function () {
+      var _self = this;
+      _self.loading = true;
+      var mergeIntoInventoryIds = [];
+      mergeIntoInventoryIds.push(_self.currentStep.mergeInventorySheetId);
+      var param = {
+        combinedInventoryIds: _self.currentStep.consolidatedInventorySheetIds,
+        mergeIntoInventoryIds: mergeIntoInventoryIds,
+      };
+      AssetInventoryResource.consolidatedAssetInventory(param).then(
+        successData => {
+          if (successData.errorCode == 0) {
+            _self.isShow = true;
+            var organizationName = {
+              name: successData.organizationName,
+              documentNo: successData.documentNo,
+              documentName: successData.name,
+              id: successData.id,
+            };
+            _self.organizationNames.push(organizationName);
+            Common.showDialog('提示', successData.errorMessage, 'success');
+          } else {
+            Common.showDialog('提示', successData.errorMessage, 'error');
+          }
+          console.log(successData);
+          _self.loading = false;
+        },
+        errorData => {
+          _self.loading = false;
+        },
+      );
+    },
+
+    previous: function () {
+      var _self = this;
+      var data = {
+        currentStep: 1,
+        showPage: 7,
+        mergeInventorySheetId: _self.currentStep.mergeInventorySheetId,
+      };
+      this.$emit('previous', data);
+    },
+    next: function () {
+      var _self = this;
+      _self.$router.push('/eam/assetInventory');
+    },
+  },
+};
+</script>
+<style></style>

+ 2 - 2
src/custom/printer/AssetLabelPrinting.vue

@@ -1,6 +1,6 @@
 <template>
   <div style="width: 98% !important">
-    <Navbar title="标签打印" :is-go-back="false" />
+    <Navbar title="设备打印" :is-go-back="false" />
     <div class="all">
       <div class="globalMain">
         <ul class="siteList">
@@ -540,7 +540,7 @@ export default {
         length: _self.pagination.per_page,
       };
       const searchParams = _self.searchParams;
-      const params = { ...searchParams, ...{ range } };
+      const params = { ...searchParams, ...{ range }, inventoryType: 'Instrument' };
       $.ajax({
         url: Common.getApiURL('InventoryResource/queryInventoryPrint'),
         type: 'post',

+ 820 - 0
src/custom/printer/ClampPrinting.vue

@@ -0,0 +1,820 @@
+<template>
+  <div style="width: 98% !important">
+    <Navbar title="工装打印" :is-go-back="false" />
+    <div class="all">
+      <div class="globalMain">
+        <ul class="siteList">
+          <li class="last">
+            <div class="site">
+              <label class="labelStyle">所属部门</label>
+              <div class="form-inline-div">
+                <SearchWidget style="width: 200px" :info-window-no="organizationWindowNo" :field="organizationField"
+                  :field-value="organizationFieldValue" :display-name="organizationField.listDisplayFieldName"
+                  :where-clause-source="organizationWCS" @value-changed="organizationValueChanged" />
+              </div>
+            </div>
+          </li>
+          <li class="site">
+            <label class="labelStyle">名称</label>
+            <div class="form-inline-div">
+              <a-input v-model:value="searchParams.name" class="form-input" @keyup.enter="reQuery" />
+            </div>
+          </li>
+          <li class="site">
+            <label class="labelStyle">编号</label>
+            <div class="form-inline-div">
+              <a-input v-model:value="searchParams.no" class="form-input" @keyup.enter="reQuery" />
+            </div>
+          </li>
+          <li class="site">
+            <label class="labelStyle">规格型号</label>
+            <div class="form-inline-div">
+              <a-input v-model:value="searchParams.type" class="form-input" @keyup.enter="reQuery" />
+            </div>
+          </li>
+          <li class="site">
+            <label class="labelStyle">{{ $t("lang.AssetLabelPrint.printStatus") }}</label>
+            <div class="form-inline-div">
+              <a-select v-model:value="searchParams.printStatus" class="form-input">
+                <a-select-option :value="null">{{ $t("lang.AssetLabelPrint.all") }}</a-select-option>
+                <a-select-option :value="false">
+                  {{ $t("lang.AssetLabelPrint.notPrint") }}
+                </a-select-option>
+                <a-select-option :value="true">
+                  {{ $t("lang.AssetLabelPrint.havePrint") }}
+                </a-select-option>
+              </a-select>
+            </div>
+          </li>
+        </ul>
+      </div>
+      <ul class="siteList">
+        <li class="site">
+          <label class="labelStyle">{{ $t("lang.AssetLabelPrint.selectPrintTemplate") }}</label>
+          <div class="form-inline-div">
+            <a-select v-model:value="templateId" class="form-input">
+              <a-select-option value="" />
+              <a-select-option v-for="item in templates" :key="'templates' + item.name" :value="item.id">
+                {{ item.name }}
+              </a-select-option>
+            </a-select>
+          </div>
+        </li>
+        <li class="site">
+          <label for="selectPrinter" class="labelStyle">{{ $t("lang.AssetLabelPrint.selectPrinter") }}</label>
+          <div class="form-inline-div">
+            <a-select v-model:value="selectedPrinter" class="form-input">
+              <a-select-option value="" />
+              <a-select-option v-for="printer in printers" :key="printer" :value="printer">
+                {{ printer }}
+              </a-select-option>
+            </a-select>
+          </div>
+        </li>
+        <li style=" margin-left: 36px; display: flex; justify-content: space-between; ">
+          <a-button type="primary" style="width: 80px" @click="print()">
+            {{ $t("lang.AssetLabelPrint.print") }}
+          </a-button>
+          <PrintEpc ref="printEpc" v-model:visible="printEpcVisible" :printer-name="selectedPrinterCard"
+            @ok="closePrintEpc" />
+          <a-button type="primary" style="width: 80px;margin-left: 12px" @click="reQuery()">
+            {{ $t("lang.AssetLabelPrint.query") }}
+          </a-button>
+          <a-button style="width: 80px; margin-left: 12px" type="dashed" @click="clearFilter()">
+            {{ $t("lang.AssetLabelPrint.clear") }}
+          </a-button>
+        </li>
+      </ul>
+    </div>
+
+    <CommonTable ref="commonTableRef" :extra-height="70" :columns="labelPrintColumns"
+      :data-source="assetInstanceDtoList" :total="pagination.total" :is-select="true" @get-pager="getPageParams"
+      @get-selected="getSelectParams">
+      <template #bodyCell="{ column, record }">
+        <div v-if="column.dataIndex === 'printStatus'">
+          {{ record.printStatus ? '已打印' : '未打印' }}
+        </div>
+      </template>
+    </CommonTable>
+
+    <Loading v-if="loading" />
+  </div>
+</template>
+
+<script>
+import Printer from './printer.js';
+import { message } from 'ant-design-vue';
+import CommonTable from '../common/CommonTable.vue';
+import { assetLabelPrintColumns } from './columns.js';
+import { Common, Notify, PrintEpc } from 'pc-component-v3';
+
+export default {
+  components: { PrintEpc, CommonTable },
+  data: function () {
+    return {
+      assetInstanceDtoList: [],
+      checked: false, //全选,
+      labelPrintColumns: assetLabelPrintColumns,
+      pagination: {
+        total: 0, //总页数
+        per_page: 20, // 每页大小
+        current_page: 1, // 当前页数
+        last_page: 0, // 最后一页编号
+      },
+      rangeDate: [],
+      // 请求查询参数
+      searchParams: {
+        no: null, // 资产编号
+        name: null, // 资产名称
+        type: null,
+        printStatus: null, // 打印状态
+        organizationId: null, // 部门id
+      },
+      userWindowNo: '050408',
+      organizationWindowNo: '20220420_233656',
+      organizationField: {
+        name: '',
+        listDisplayFieldName: 'name',
+      },
+      organizationFieldValue: {
+        id: null,
+        displayValue: [''],
+        fieldType: 'Key',
+      },
+      custodianNameField: {
+        name: '',
+        listDisplayFieldName: 'name',
+      },
+      custodianNameFieldValue: {
+        id: null,
+        displayValue: [''],
+        fieldType: 'Key',
+      },
+      userField: {
+        name: '',
+        listDisplayFieldName: 'name',
+      },
+      userFieldValue: {
+        id: null,
+        displayValue: [''],
+        fieldType: 'Key',
+      },
+      applyPurchaseUserField: {
+        name: '',
+        listDisplayFieldName: 'name',
+      },
+      applyPurchaseUserFieldValue: {
+        id: null,
+        displayValue: [''],
+        fieldType: 'Key',
+      },
+      organizationWCS: {
+        customerDataDimensions: [
+          {
+            fieldName: 'client.id',
+            dataDimensionTypeNo: '202201191757',
+            defaultDataDimensionTypeValueNo: '4',
+          },
+        ],
+      },
+      custodianIdWhereClauseSource: {
+        customerDataDimensions: [
+          {
+            fieldName: 'client.id',
+            dataDimensionTypeNo: '202201191757',
+            defaultDataDimensionTypeValueNo: '4',
+          },
+        ],
+      },
+      templates: [], //打印模板
+      printers: [], //打印机
+      selectedPrinter: '', // 选择的打印机
+      templateId: '',
+      printPages: [],
+      printPreviews: [],
+      loading: false,
+      modal: false,
+      selectedPrinterCard: '发卡机',
+      printEpcVisible: false,
+      isCardEpc: false,
+      selectedIds: [],
+    };
+  },
+  computed: {},
+
+  watch: {},
+  mounted: function () {
+    const _self = this;
+
+    _self.pagination.current_page = 1;
+    _self.getAssetInstancePrint();
+    _self.loadTemplateData();
+
+    Printer.getPrinters().then(
+      success => {
+        if (success.errorCode === 0) {
+          if (success.data && success.data.length > 0) {
+            success.data.forEach(item => {
+              _self.printers.push(item);
+            });
+          }
+        } else {
+          message.warning(success.errorMessage);
+        }
+      },
+      error => {
+        console.log(error);
+      },
+    );
+  },
+
+  beforeUnmount: function () { },
+
+  methods: {
+    // 所属部门搜索框条件改变
+    organizationValueChanged: function (newFieldValue) {
+      this.organizationFieldValue = newFieldValue;
+      this.searchParams.organizationId = newFieldValue.id;
+    },
+    // 责任人
+    custodianNameValueChanged: function (newFieldValue) {
+      this.custodianNameFieldValue = newFieldValue;
+      this.searchParams.custodianId = newFieldValue.id;
+    },
+    // 保管人
+    userValueChanged: function (newFieldValue) {
+      this.userFieldValue = newFieldValue;
+      this.searchParams.depositoryUserId = newFieldValue.id;
+    },
+    // 申购人
+    applyPurchaseUserValueChanged: function (newFieldValue) {
+      this.applyPurchaseUserFieldValue = newFieldValue;
+      this.searchParams.applyPurchaseUserId = newFieldValue.id;
+    },
+    /**
+     * 获取选择数据的id集合
+     */
+    getSelectedRecordIds: function () {
+      const _self = this;
+      // let recordIds = [];
+
+      // for (let i = 0; i < _self.assetInstanceDtoList.length; i++) {
+      //   if (_self.assetInstanceDtoList[i].checked == true) {
+      //     recordIds.push(_self.assetInstanceDtoList[i].assetInstanceId);
+      //   }
+      // }
+
+      return _self.selectedIds;
+    },
+
+    onRangeChange(_, str) {
+      this.searchParams.startDate = str[0] === '' ? null : str[0];
+      this.searchParams.endDate = str[1] === '' ? null : str[1];
+    },
+
+    getPageParams(page, pageSize) {
+      this.pagination.current_page = page;
+      this.pagination.per_page = pageSize;
+      this.getAssetInstancePrint();
+    },
+    getSelectParams(selected) {
+      const _self = this;
+      if (_self.isCardEpc) {
+        return;
+      }
+      let templateId = _self.templateId;
+      if (templateId == '' || templateId == null) {
+        _self.templateId = '';
+        _self.$refs.commonTableRef.clear(false);
+        Notify.error('错误', '请先选择打印模板', false);
+        return;
+      }
+
+      _self.selectedIds = selected.selectedRowKeys;
+    },
+
+    getPrintData: function (recordIds) {
+      const _self = this;
+      let contents = [];
+
+      $.ajax({
+        url: Common.getApiURL(
+          'AssetInstanceResource/print?printPreview=' +
+          false +
+          '&templateId=' +
+          _self.templateId,
+        ),
+        dataType: 'json',
+        type: 'post',
+        contentType: 'application/json',
+        data: JSON.stringify(recordIds),
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+          _self.loading = true;
+        },
+        success: function (datas) {
+          datas.forEach(function (item) {
+            var printItem = {
+              id: null,
+              name: null,
+              content: item,
+            };
+            if (
+              printItem.content == null ||
+              printItem.content.printItems == null ||
+              printItem.content.printItems.length == 0
+            ) {
+              Notify.error('错误', '打印模板无数据,不能打印。');
+              return;
+            }
+            var content = JSON.stringify(printItem.content);
+            if (content == null || content == '' || content == '{}') {
+              Notify.error('错误', '请先选择模板,再点击下载。');
+              return;
+            }
+            contents.push(printItem.content);
+          });
+          _self.loading = false;
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          _self.loading = false;
+          Common.processException(XMLHttpRequest, textStatus, errorThrown);
+        },
+      });
+    },
+
+    /**
+     * 打印文件
+     */
+    print: function () {
+      const _self = this;
+      let templateId = _self.templateId;
+      if (templateId == null || templateId.length == 0) {
+        Notify.error('提示', '请先选择打印模板。', false);
+        return;
+      }
+
+      let selectedPrinter = _self.selectedPrinter;
+      if (selectedPrinter == null || selectedPrinter.length == 0) {
+        Notify.error('提示', '请先选择打印机。', false);
+        return;
+      }
+
+      let recordIds = _self.getSelectedRecordIds();
+      if (recordIds == null || recordIds.length == 0) {
+        Notify.error('提示', '请先选择打印数据。', false);
+        return;
+      }
+      console.log(templateId, recordIds, selectedPrinter, '打印数据');
+      const cardIds = recordIds.join();
+      const url = `/barcode.html#/chartPrint?templateId=${templateId}&printName=${selectedPrinter}&cardIds=${cardIds}`;
+      window.open(url);
+    },
+
+    cardEpc: function () {
+      const _self = this;
+      _self.isCardEpc = true;
+      let recordIds = _self.getSelectedRecordIds();
+      if (recordIds == null || recordIds.length == 0) {
+        Notify.error('提示', '请先选择发卡数据。', false);
+        return;
+      }
+
+      if (recordIds.length > 1) {
+        Notify.error('提示', '至多选择一条发卡数据。', false);
+        return;
+      }
+
+      let contents = [];
+      let contentCards = [];
+
+      $.ajax({
+        url: Common.getApiURL(
+          'AssetInstanceResource/print?printPreview=' +
+          false +
+          '&templateId=' +
+          _self.templateId,
+        ),
+        dataType: 'json',
+        type: 'post',
+        contentType: 'application/json',
+        data: JSON.stringify(recordIds),
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+          _self.loading = true;
+        },
+        success: function (datas) {
+          datas.forEach(function (item) {
+            var printItem = {
+              id: null,
+              name: null,
+              content: item,
+            };
+            if (
+              printItem.content == null ||
+              printItem.content.printItems == null ||
+              printItem.content.printItems.length == 0
+            ) {
+              Notify.error('错误', '打印模板无数据,不能打印。');
+              return;
+            }
+            var content = JSON.stringify(printItem.content);
+            if (content == null || content == '' || content == '{}') {
+              Notify.error('错误', '请先选择模板,再点击下载。');
+              return;
+            }
+            contents.push(printItem.content);
+          });
+          _self.printEpcVisible = true;
+          _self.$refs.printEpc.printPrintPages(contents);
+          _self.loading = false;
+          _self.isCardEpc = false;
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          _self.loading = false;
+          _self.isCardEpc = false;
+          Common.processException(XMLHttpRequest, textStatus, errorThrown);
+        },
+      });
+    },
+
+    closePrintEpc: function () {
+      const _self = this;
+      _self.printEpcVisible = false;
+    },
+
+    /**
+     * 打印模板change
+     */
+    templateChange: function (assetInstance) {
+      const _self = this;
+      if (_self.isCardEpc) {
+        return;
+      }
+      let templateId = _self.templateId;
+      if (templateId == '' || templateId == null) {
+        _self.templateId = '';
+        assetInstance.checked = false;
+        Notify.error('错误', '未请先选择打印模板', false);
+        return;
+      }
+    },
+
+    /**
+     * 设置模板
+     */
+    setTemplate: function (assetInstanceId, templateId) {
+      var _self = this;
+      _self.loading = true;
+      $.ajax({
+        url: Common.getApiURL('AssetInstanceResource/setPrintTemplate'),
+        type: 'get',
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        data: {
+          assetInstanceId: assetInstanceId,
+          templateId: templateId,
+        },
+        success: function (data) {
+          _self.loading = false;
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          _self.loading = false;
+          Common.processException(XMLHttpRequest, textStatus, errorThrown);
+        },
+      });
+    },
+
+    /**
+     * 加载打印模板数据
+     */
+    loadTemplateData: function () {
+      var _self = this;
+
+      Printer.queryTemplates().then(
+        success => {
+          if (success.errorCode === 0) {
+            if (success.datas && success.datas.length > 0) {
+              _self.templates = success.datas;
+            }
+          } else {
+            message.warning(success.errorMessage);
+          }
+        },
+        error => {
+          Common.processException(error);
+        },
+      );
+    },
+
+    /**
+     * 20200615
+     * 点击全选
+     */
+    selectAll: function () {
+      var _self = this;
+      for (var i = 0; i < _self.assetInstanceDtoList.length; i++) {
+        _self.assetInstanceDtoList[i].checked = _self.checked;
+      }
+    },
+
+    /**
+     * 重新查询
+     */
+    reQuery: function () {
+      let _self = this;
+      _self.$refs.commonTableRef.backFirstPage();
+    },
+
+    /**
+     * 查询资产卡片打印的数据
+     */
+    getAssetInstancePrint: function () {
+      var _self = this;
+      _self.loading = true;
+
+      _self.checked = false;
+      const range = {
+        start: (_self.pagination.current_page - 1) * _self.pagination.per_page,
+        length: _self.pagination.per_page,
+      };
+      const searchParams = _self.searchParams;
+      const params = { ...searchParams, ...{ range }, inventoryType: 'Clamp' };
+      $.ajax({
+        url: Common.getApiURL('InventoryResource/queryInventoryPrint'),
+        type: 'post',
+        contentType: 'application/json',
+
+        dataType: 'json',
+        data: JSON.stringify(params),
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (successData) {
+
+          if (successData.errorCode == 0) {
+            if (successData.datas && successData.datas.length > 0) {
+              _self.assetInstanceDtoList = successData.datas;
+              _self.assetInstanceDtoList.forEach(function (item) {
+                item.id = item.inventoryId;
+                item.checked = false;
+              });
+
+            } else {
+              _self.assetInstanceDtoList = [];
+            }
+            _self.pagination.total = successData.total;
+          }
+          _self.loading = false;
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          Common.processException(XMLHttpRequest, textStatus, errorThrown);
+          _self.loading = false;
+        },
+      });
+    },
+
+    /**
+     * 清空条件
+     */
+    clearFilter: function () {
+      const _self = this;
+      (_self.searchParams = {
+        epc: null,
+        assetNo: null,
+        assetInstanceName: null,
+        printStatus: null,
+        type: null,
+        organizationId: null,
+        custodianId: null,
+        depositoryUserId: null,
+        applyPurchaseUserId: null,
+        locationName: null,
+        startDate: null,
+        endDate: null,
+      }),
+        _self.rangeDate = [];
+      (_self.organizationFieldValue = {});
+      _self.custodianNameFieldValue = {};
+      _self.userFieldValue = {};
+      _self.applyPurchaseUserFieldValue = {};
+      _self.reQuery();
+    },
+
+    /**
+     * 修改页Size
+     */
+    gridSizeSelect: function (newPageSize) {
+      this.pagination.per_page = newPageSize;
+      this.pagination.current_page = 1;
+      this.getAssetInstancePrint();
+    },
+  },
+};
+</script>
+
+
+
+<style scoped>
+.grid-container {
+  display: grid;
+  grid-template-columns: 100%;
+  /*将视图分为四个模块,每个模块的高度*/
+  grid-template-rows: 53px min-content auto 40px;
+  /*视口被均分为 100 单位的 vh 占据整个窗口,扣掉顶部 topNav 的距离后,计算得到 responseOrgnizationSelect 的高度*/
+  height: calc(100vh - 90px);
+  width: 100%;
+  overflow: hidden;
+}
+
+.grid-item-1 {
+  grid-column: 1 / 2;
+  grid-row: 1 / 2;
+}
+
+.grid-item-2 {
+  grid-column: 1 / 2;
+  grid-row: 2 / 3;
+}
+
+.grid-item-3 {
+  padding-top: 0px;
+  padding-right: 10px;
+  overflow: hidden;
+  grid-column: 1 / 2;
+  grid-row: 3/4;
+  height: 100%;
+}
+
+.grid-item-4 {
+  padding-top: 10px;
+  grid-column: 1 / 2;
+  grid-row: 4/5;
+}
+</style>
+
+<style scoped>
+.m-form-group {
+  margin-left: 5px !important;
+  margin-right: 5px !important;
+  margin-bottom: 5px !important;
+}
+
+@media (max-width: 768px) {
+  .m-form-group-label {
+    text-align: left;
+    padding-right: 10px;
+  }
+}
+
+@media (min-width: 768px) {
+  .m-form-group-label {
+    width: 100px;
+    text-align: center;
+    padding-right: 10px;
+  }
+
+  .input-switches {
+    width: 100%;
+  }
+}
+
+.form-control-complex {
+  width: 200px !important;
+}
+
+.form-input {
+  border-radius: 4px !important;
+}
+
+.m-form-input {
+  border-radius: 4px !important;
+  width: 200px !important;
+}
+
+.form-inline-div {
+  display: inline-block;
+  height: 34px;
+}
+
+.m-btn {
+  margin-left: 5px !important;
+  margin-right: 5px !important;
+  margin-bottom: 5px !important;
+}
+
+.table-header-left {
+  float: left;
+  /* margin: 20px 0; */
+}
+
+.table-header-right {
+  margin-top: -2px;
+  float: right;
+}
+</style>
+
+<style scoped>
+.room_img {
+  width: 150px;
+  height: 100px;
+  float: left;
+  margin-right: 10px;
+}
+
+.room_img img {
+  width: 100%;
+  height: 100%;
+}
+
+.room_img span {
+  position: relative;
+  right: -130px;
+  top: -100px;
+  font-size: 20px;
+  color: red;
+}
+
+.modal-img-box {
+  width: 100%;
+  height: 400px;
+  text-align: center;
+  overflow: auto;
+}
+
+.m-small-img {
+  cursor: pointer;
+}
+
+.m-img {
+  width: 100%;
+}
+
+.labelStyle {
+  width: 120px;
+  text-align: right;
+  padding: 8px;
+}
+
+.grid-item-row2-column2 {
+  grid-row-start: 2;
+  grid-row-end: 3;
+  grid-column-start: 2;
+  grid-column-end: 3;
+  overflow: auto;
+  margin-top: 0px;
+}
+
+.globalMain {
+  max-width: 100%;
+  margin-left: auto;
+  margin-right: auto;
+}
+
+.siteList {
+  display: flex;
+  flex-wrap: wrap;
+  justify-content: space-between;
+}
+
+@media (min-width: 500px) {
+  .siteList {
+    margin-left: 0;
+    margin-right: -25px;
+    justify-content: flex-start;
+  }
+}
+
+.siteList>li {
+  margin-bottom: 10px;
+}
+
+@media (min-width: 500px) {
+  .siteList>li {
+    margin-right: 8px;
+  }
+}
+
+.siteList .site {
+  width: 300px;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  /* flex-direction: column; */
+  position: relative;
+}
+
+* {
+  margin: 0;
+  padding: 0;
+  list-style: none;
+  box-sizing: border-box;
+}
+
+.form-input {
+  width: 200px !important;
+  height: 30px !important;
+  padding-left: 6px !important;
+}
+</style>

+ 293 - 0
src/custom/stock/StockPickingCar.vue

@@ -0,0 +1,293 @@
+<template>
+    <Navbar title="领料车" :is-go-back="false">
+        <a-space>
+            <div @click="goToHome()" style="cursor: pointer;">
+                <HomeOutlined style="font-size: 26px;" />
+            </div>
+        </a-space>
+    </Navbar>
+
+    <a-form :colon="false">
+        <a-row :gutter="[8, 0]" justify="space-start">
+
+            <a-col>
+                <a-form-item label="选择仓库" :label-col="{ style: 'width: 80px' }" class="horizontal-form-item">
+                    <a-select v-model:value="warehouseId" placeholder="选择仓库" class="w-full" allow-clear
+                        @change="getDatas">
+                        <a-select-option v-for="item in warehouseList" :key="item.id" :value="item.id">
+                            {{ item.name }}
+                        </a-select-option>
+                    </a-select>
+                </a-form-item>
+            </a-col>
+            <a-col>
+                <a-form-item label="设备名称" :label-col="{ style: 'width: 80px' }" class="horizontal-form-item">
+                    <a-input v-model:value="inventoryName" placeholder="设备名称" class="w-full" @keyup.enter="getDatas" />
+                </a-form-item>
+            </a-col>
+            <a-col>
+                <a-form-item label="设备编码" :label-col="{ style: 'width: 80px' }" class="horizontal-form-item">
+                    <a-input v-model:value="inventoryNo" placeholder="设备编码" class="w-full" @keyup.enter="getDatas" />
+                </a-form-item>
+            </a-col>
+            <a-col>
+                <a-form-item label="设备型号" :label-col="{ style: 'width: 80px' }" class="horizontal-form-item">
+                    <a-select v-model:value="inventoryType" placeholder="设备型号" class="w-full" allow-clear
+                        :options="inventoryTypeList" @change="getDatas">
+                    </a-select>
+                </a-form-item>
+            </a-col>
+            <a-col>
+                <a-form-item>
+                    <a-space>
+                        <a-button style="margin-left: 12px;" type="primary" @click="getDatas">查询</a-button>
+                        <a-button style="background: #269745;color: #fff;" @click="submitStock">领料</a-button>
+                        <a-button danger @click="deleteStock">删除</a-button>
+                    </a-space>
+                </a-form-item>
+            </a-col>
+        </a-row>
+    </a-form>
+    <CommonTable ref="carTableRef" :extra-height="70" :columns="inventoryList" :data-source="carList"
+        :total="pagination.total" :is-select="true"  @get-pager="getPageParams" @get-selected="getSelectParams">
+    </CommonTable>
+    <Loading v-if="loading" />
+</template>
+
+<script setup>
+import { ref, onMounted } from 'vue';
+import { message, Modal } from 'ant-design-vue';
+import Common from '../common/Common.js';
+import CommonTable from '../common/CommonTable.vue';
+import { HomeOutlined } from '@ant-design/icons-vue';
+import { carColumns, typeList } from './columns.js';
+import { useRouter } from 'vue-router';
+
+const router = useRouter();
+const carTableRef = ref(null);
+const userId = ref(undefined);
+const warehouseId = ref(undefined);
+const inventoryName = ref('');
+const inventoryNo = ref('');
+const inventoryType = ref(undefined);
+const warehouseList = ref([]);
+const carList = ref([]);
+const selectedIds = ref([]);
+const loading = ref(false);
+const inventoryList = ref(carColumns);
+const inventoryTypeList = ref(typeList);
+const pagination = ref({
+    total: 0,
+    start: 1,
+    lang: 20,
+});
+
+// 返回领料
+const goToHome = () => {
+    router.push('/wms/stock-requisition');
+}
+
+// 获取分页参数
+const getPageParams = (page, pageSize) => {
+    pagination.value.start = page;
+    pagination.value.lang = pageSize;
+    getPickerCarList();
+}
+
+// 获取选中的物料ID
+const getSelectParams = (selected) => {
+    selectedIds.value = selected.selectedRowKeys;
+}
+
+// 从领料车里删除工装设备
+const deleteStock = () => {
+    if (selectedIds.value.length == 0) {
+        message.warning('请至少选择一个工装设备');
+        return;
+    }
+    Modal.confirm({
+        title: '确认将工装设备从领料车中删除吗?',
+        content: '确认的话请点击【确认】按钮,否则请点击【取消】按钮',
+        okText: '确认',
+        okType: 'danger',
+        cancelText: '取消',
+        onOk() {
+            deleteStockCarApi();
+        },
+        onCancel() {
+            console.log('Cancel');
+        },
+    });
+
+}
+
+// 查询物料数据
+const getPickerCarList = () => {
+    loading.value = true;
+    const loginInfo = localStorage.getItem('#LoginInfo');
+    if (loginInfo) {
+        const loginInfoObj = JSON.parse(loginInfo);
+        userId.value = loginInfoObj.userId;
+    }
+    const params = {
+        inventoryName: inventoryName.value,
+        inventoryNo: inventoryNo.value,
+        inventoryType: inventoryType.value,
+        warehouseId: warehouseId.value,
+        userId: userId.value,
+        start: (pagination.value.start - 1) * pagination.value.lang,
+        length: pagination.value.lang,
+    };
+    $.ajax({
+        url: Common.getApiURL('PickingCarResource/queryCFPickCar'),
+        type: 'post',
+        contentType: 'application/json',
+
+        dataType: 'json',
+        data: JSON.stringify(params),
+        beforeSend: function (request) {
+            Common.addTokenToRequest(request);
+        },
+        success: function (successData) {
+
+            if (successData.errorCode == 0) {
+                if (successData.datas && successData.datas.length > 0) {
+                    carList.value = successData.datas;
+                } else {
+                    carList.value = [];
+                }
+                pagination.value.total = successData.total;
+            }
+            loading.value = false;
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+            Common.processException(XMLHttpRequest, textStatus, errorThrown);
+            loading.value = false;
+        },
+    });
+}
+
+//  删除接口
+const deleteStockCarApi = () => {
+    loading.value = true;
+    const params = {
+        pickingCarIds: selectedIds.value,
+    }
+    $.ajax({
+        url: Common.getApiURL('PickingCarResource/deleteCFPickCar'),
+        type: 'post',
+        contentType: 'application/json',
+
+        dataType: 'json',
+        data: JSON.stringify(params),
+        beforeSend: function (request) {
+            Common.addTokenToRequest(request);
+        },
+        success: function (successData) {
+            if (successData.errorCode == 0) {
+                message.success('工装设备从领料车中删除成功');
+                carTableRef.value.clear();
+                getDatas();
+            } else {
+                message.warning(successData.errorMessage);
+            }
+            loading.value = false;
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+            Common.processException(XMLHttpRequest, textStatus, errorThrown);
+            loading.value = false;
+        },
+    });
+}
+// 获取仓库列表
+const getWarehouseList = () => {
+    $.ajax({
+        type: 'get',
+        dataType: 'json',
+        url: Common.getApiURL('WarehouseResource/queryByCondition'),
+        contentType: 'application/json',
+        beforeSend: function (request) {
+            Common.addTokenToRequest(request);
+        },
+        success: function ({ datas, errorCode, errorMessage }) {
+            if (errorCode == 0) {
+                if (datas && datas.length > 0) {
+                    warehouseList.value = datas;
+                } else {
+                    warehouseList.value = [];
+                }
+            } else {
+                message.warning(errorMessage);
+            }
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+            Common.processException(XMLHttpRequest, textStatus, errorThrown);
+        },
+    });
+}
+
+// 查询回到第一页
+const getDatas = () => {
+    carTableRef.value.backFirstPage();
+}
+
+// 领料
+const submitStock = () => {
+    if (selectedIds.value.length == 0) {
+        message.warning('请至少选择一个工装设备');
+        return;
+    }
+    loading.value = true;
+    const params = {
+        pickingCarIds: selectedIds.value,
+    }
+    $.ajax({
+        url: Common.getApiURL('StockOutPrepareResource/saveCFStockOutPrepare'),
+        type: 'post',
+        contentType: 'application/json',
+
+        dataType: 'json',
+        data: JSON.stringify(params),
+        beforeSend: function (request) {
+            Common.addTokenToRequest(request);
+        },
+        success: function (successData) {
+
+            if (successData.errorCode == 0) {
+                getDatas();
+                message.success('领料单生成成功,请前往闸机进行领料登记等相关操作');
+            }
+            loading.value = false;
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+            Common.processException(XMLHttpRequest, textStatus, errorThrown);
+            loading.value = false;
+        },
+    });
+}
+onMounted(() => {
+    getDatas();
+    getWarehouseList();
+})
+</script>
+
+<style scoped>
+.horizontal-form-item {
+    display: flex;
+    align-items: center;
+    gap: 8px;
+}
+
+.w-full {
+    width: 192px;
+}
+
+:deep(.ant-form-item) {
+    margin-bottom: 10px !important;
+}
+
+:deep(.ant-form-item-label > label) {
+    font-size: 14px !important;
+    font-weight: 600 !important;
+}
+</style>

+ 271 - 0
src/custom/stock/StockRequisition.vue

@@ -0,0 +1,271 @@
+<template>
+    <Navbar title="领料" :is-go-back="false">
+        <a-space>
+            <div @click="openStockOutCar()" style="cursor: pointer;">
+                <a-badge :count="count" show-zero :number-style="{ backgroundColor: '#52c41a', marginTop: '10px' }">
+                    <ShoppingCartOutlined style="font-size: 26px;" />
+                </a-badge>
+            </div>
+        </a-space>
+    </Navbar>
+
+    <a-form :colon="false">
+        <a-row :gutter="[8, 0]" justify="space-start">
+
+            <a-col>
+                <a-form-item label="选择仓库" :label-col="{ style: 'width: 80px' }" class="horizontal-form-item">
+                    <a-select v-model:value="warehouseId" placeholder="选择仓库" class="w-full" allow-clear
+                        @change="getDatas">
+                        <a-select-option v-for="item in warehouseList" :key="item.id" :value="item.id">
+                            {{ item.name }}
+                        </a-select-option>
+                    </a-select>
+                </a-form-item>
+            </a-col>
+            <a-col>
+                <a-form-item label="设备名称" :label-col="{ style: 'width: 80px' }" class="horizontal-form-item">
+                    <a-input v-model:value="inventoryName" placeholder="设备名称" class="w-full" @keyup.enter="getDatas" />
+                </a-form-item>
+            </a-col>
+            <a-col>
+                <a-form-item label="设备编码" :label-col="{ style: 'width: 80px' }" class="horizontal-form-item">
+                    <a-input v-model:value="inventoryNo" placeholder="设备编码" class="w-full" @keyup.enter="getDatas" />
+                </a-form-item>
+            </a-col>
+            <a-col>
+                <a-form-item label="设备型号" :label-col="{ style: 'width: 80px' }" class="horizontal-form-item">
+                    <a-select v-model:value="inventoryType" placeholder="设备型号" class="w-full" allow-clear
+                        :options="inventoryTypeList" @change="getDatas">
+                    </a-select>
+                </a-form-item>
+            </a-col>
+            <a-col>
+                <a-form-item>
+                    <a-space>
+                        <a-button style="margin-left: 12px;" type="primary" @click="getDatas">查询</a-button>
+                        <a-button style="background: #269745;color: #fff;" @click="submitStock">加入领料车</a-button>
+                    </a-space>
+                </a-form-item>
+            </a-col>
+        </a-row>
+    </a-form>
+    <CommonTable ref="commonTableRef" :extra-height="70" :columns="inventoryList" :data-source="stockRequisitionList"
+        :total="pagination.total" :is-select="true" @get-pager="getPageParams" @get-selected="getSelectParams">
+    </CommonTable>
+
+    <Loading v-if="loading" />
+</template>
+
+<script setup>
+import { ref, onMounted } from 'vue';
+import { message } from 'ant-design-vue';
+import Common from '../common/Common.js';
+import CommonTable from '../common/CommonTable.vue';
+import { ShoppingCartOutlined } from '@ant-design/icons-vue';
+import { stockRequisitionColumns, typeList } from './columns.js';
+import { useRouter } from 'vue-router';
+
+const router = useRouter();
+const commonTableRef = ref(null);
+const warehouseId = ref(undefined);
+const inventoryName = ref('');
+const inventoryNo = ref('');
+const inventoryType = ref(undefined);
+const count = ref(0);
+const warehouseList = ref([]);
+const stockRequisitionList = ref([]);
+const selectedIds = ref([]);
+const loading = ref(false);
+const inventoryList = ref(stockRequisitionColumns);
+const inventoryTypeList = ref(typeList);
+const pagination = ref({
+    total: 0,
+    start: 1,
+    lang: 20,
+});
+
+// 打开领料车
+const openStockOutCar = () => {
+    router.push('/wms/stock-picking-car');
+}
+
+// 获取分页参数
+const getPageParams = (page, pageSize) => {
+    pagination.value.start = page;
+    pagination.value.lang = pageSize;
+    getStockRequisitionList();
+}
+
+// 获取选中的物料ID
+const getSelectParams = (selected) => {
+    selectedIds.value = selected.selectedRowKeys;
+    console.log(selected)
+}
+
+// 查询物料数据
+const getStockRequisitionList = () => {
+    loading.value = true;
+    const params = {
+        inventoryName: inventoryName.value,
+        inventoryNo: inventoryNo.value,
+        inventoryType: inventoryType.value,
+        warehouseId: warehouseId.value,
+        range: {
+            start: (pagination.value.start - 1) * pagination.value.lang,
+            length: pagination.value.lang,
+        }
+    };
+    $.ajax({
+        url: Common.getApiURL('InventoryResource/findInventoryByCondition'),
+        type: 'post',
+        contentType: 'application/json',
+
+        dataType: 'json',
+        data: JSON.stringify(params),
+        beforeSend: function (request) {
+            Common.addTokenToRequest(request);
+        },
+        success: function (successData) {
+
+            if (successData.errorCode == 0) {
+                if (successData.datas && successData.datas.length > 0) {
+                    stockRequisitionList.value = successData.datas;
+                } else {
+                    stockRequisitionList.value = [];
+                }
+                pagination.value.total = successData.total;
+            }
+            loading.value = false;
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+            Common.processException(XMLHttpRequest, textStatus, errorThrown);
+            loading.value = false;
+        },
+    });
+}
+
+// 获取仓库列表
+const getWarehouseList = () => {
+    $.ajax({
+        type: 'get',
+        dataType: 'json',
+        url: Common.getApiURL('WarehouseResource/queryByCondition'),
+        contentType: 'application/json',
+        beforeSend: function (request) {
+            Common.addTokenToRequest(request);
+        },
+        success: function ({ datas, errorCode, errorMessage }) {
+            if (errorCode == 0) {
+                if (datas && datas.length > 0) {
+                    warehouseList.value = datas;
+                } else {
+                    warehouseList.value = [];
+                }
+            } else {
+                message.warning(errorMessage);
+            }
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+            Common.processException(XMLHttpRequest, textStatus, errorThrown);
+        },
+    });
+}
+
+// 查询
+const getDatas = () => {
+    console.log('getDatas');
+    commonTableRef.value.backFirstPage();
+}
+
+// 加入领料车
+const submitStock = () => {
+    if (selectedIds.value.length == 0) {
+        message.warning('请至少选择一个工装设备');
+        return;
+    }
+    loading.value = true;
+    const params = {
+        inventoryIds: selectedIds.value,
+    }
+    $.ajax({
+        url: Common.getApiURL('PickingCarResource/generateCFPickCar'),
+        type: 'post',
+        contentType: 'application/json',
+
+        dataType: 'json',
+        data: JSON.stringify(params),
+        beforeSend: function (request) {
+            Common.addTokenToRequest(request);
+        },
+        success: function (successData) {
+
+            if (successData.errorCode == 0) {
+                commonTableRef.value.clear();
+                getDatas();
+                queryPickingCarCount();
+                message.success('添加领料车成功');
+            }
+            loading.value = false;
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+            Common.processException(XMLHttpRequest, textStatus, errorThrown);
+            loading.value = false;
+        },
+    });
+}
+
+    /**
+     * 查询领料车中的数量
+     */
+    const queryPickingCarCount = () => {
+      $.ajax({
+        type: 'get',
+        dataType: 'json',
+        url: Common.getApiURL('PickingCarResource/queryPickingCarCount'),
+        contentType: 'application/json',
+        beforeSend: function (request) {
+            Common.addTokenToRequest(request);
+        },
+        success: function ({ data, errorCode, errorMessage }) {
+            if (errorCode == 0) {
+                if (data) {
+                    count.value = data;
+                } else {
+                    count.value = 0;
+                }
+            } else {
+                message.warning(errorMessage);
+            }
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+            Common.processException(XMLHttpRequest, textStatus, errorThrown);
+        },
+    });
+    }
+onMounted(() => {
+    getDatas();
+    getWarehouseList();
+    queryPickingCarCount();
+})
+</script>
+
+<style scoped>
+.horizontal-form-item {
+    display: flex;
+    align-items: center;
+    gap: 8px;
+}
+
+.w-full {
+    width: 192px;
+}
+
+:deep(.ant-form-item) {
+    margin-bottom: 10px !important;
+}
+
+:deep(.ant-form-item-label > label) {
+    font-size: 14px !important;
+    font-weight: 600 !important;
+}
+</style>

+ 97 - 0
src/custom/stock/columns.js

@@ -0,0 +1,97 @@
+
+
+export const stockRequisitionColumns = [
+    {
+        title: '序号',
+        dataIndex: 'index',
+        key: 'index',
+        width: 75,
+        customRender: ({ text, record, index }) => `${index + 1}`,
+    },
+    {
+        title: '仓库名称',
+        dataIndex: 'inventoryWarehouse',
+        key: 'inventoryWarehouse',
+        width: 150,
+    },
+    {
+        title: '设备名称',
+        dataIndex: 'inventoryName',
+        key: 'inventoryName',
+        width: 150,
+    },
+    {
+        title: '设备编码',
+        dataIndex: 'inventoryNo',
+        key: 'inventoryNo',
+        width: 150,
+    },
+    {
+        title: '设备型号',
+        dataIndex: 'inventoryType',
+        key: 'inventoryType',
+        width: 150,
+    },
+    {
+        title: '默认货位',
+        dataIndex: 'inventoryPosition',
+        key: 'inventoryPosition',
+        width: 150,
+    },
+    {
+        title: '实际货位',
+        dataIndex: 'inventoryActulPosition',
+        key: 'inventoryActulPosition',
+        width: 150,
+    },
+
+
+].map(item => ({ ...item, align: 'center', resizable: true, maxWidth: 300, minWidth: 75 }));
+
+export const carColumns = [
+    {
+        title: '序号',
+        dataIndex: 'index',
+        key: 'index',
+        width: 75,
+        customRender: ({ text, record, index }) => `${index + 1}`,
+    },
+    {
+        title: '仓库名称',
+        dataIndex: 'warehouseName',
+        key: 'warehouseName',
+        width: 150,
+    },
+    {
+        title: '设备名称',
+        dataIndex: 'inventoryName',
+        key: 'inventoryName',
+        width: 150,
+    },
+    {
+        title: '设备编码',
+        dataIndex: 'inventoryNo',
+        key: 'inventoryNo',
+        width: 150,
+    },
+    {
+        title: '设备型号',
+        dataIndex: 'inventoryType',
+        key: 'inventoryType',
+        width: 150,
+    },
+    {
+        title: '货位名称',
+        dataIndex: 'positionName',
+        key: 'positionName',
+        width: 150,
+    },
+
+
+].map(item => ({ ...item, align: 'center', resizable: true, maxWidth: 300, minWidth: 75 }));
+
+export const typeList = [
+    { value: 'Clamp', label: '工装' },
+    { value: 'Instrument', label: '设备' },
+    { value: 'FinishProduct', label: '成品' },
+]

+ 270 - 0
src/custom/transferTask/TransferTask.vue

@@ -0,0 +1,270 @@
+<template>
+  <Navbar title="调度任务" :is-go-back="false" />
+  <div>
+    <a-form :colon="false" :label-col="labelStyle">
+      <a-row :gutter="[8, 14]" justify="space-start">
+        <a-form-item label="任务类型" class="horizontal-form-item">
+          <a-select
+            v-model:value="formData.workCategory" class="w-full" :options="workTypes" allow-clear
+            placeholder="请选择任务类型" @change="searchDatas"
+          />
+        </a-form-item>
+        <a-form-item label="起始货位编号" class="horizontal-form-item">
+          <a-input
+            v-model:value="formData.positionBeginNo" class="w-full" placeholder="请输入起始货位编号"
+            @press-enter="searchDatas"
+          />
+        </a-form-item>
+        <a-form-item label="终点货位编号" class="horizontal-form-item">
+          <a-input
+            v-model:value="formData.positionEndNo" class="w-full" placeholder="请输入起始货位编号"
+            @press-enter="searchDatas"
+          />
+        </a-form-item>
+        <a-form-item label="执行状态" class="horizontal-form-item">
+          <a-select
+            v-model:value="formData.executeStatus" class="w-full" :options="executeStatus" allow-clear
+            placeholder="请选择执行状态" @change="searchDatas"
+          />
+        </a-form-item>
+        <a-form-item label="AGV编号" class="horizontal-form-item">
+          <a-input v-model:value="formData.agvNo" class="w-full" placeholder="请输入AGV编号" @press-enter="searchDatas" />
+        </a-form-item>
+        <a-form-item label="是否成功" class="horizontal-form-item">
+          <a-select
+            v-model:value="formData.success" class="w-full" :options="successTypes" allow-clear
+            placeholder="请选择是否成功" @change="searchDatas"
+          />
+        </a-form-item>
+        <a-form-item label="" class="horizontal-form-item">
+          <a-space>
+            <a-button danger @click="clearFilter">清空</a-button>
+            <a-button type="primary" @click="searchDatas">查询</a-button>
+          </a-space>
+        </a-form-item>
+      </a-row>
+    </a-form>
+
+    <CommonTable
+      ref="commonTableRef" :columns="columns" :data-source="taskList" :total="totalSize" :is-select="false" :extra-height="90"
+      @get-pager="getPageParams"
+    >
+      <template #bodyCell="{ column, record, index }">
+        <template v-if="column.dataIndex === 'index'">
+          {{ index + 1 }}
+        </template>
+        <!-- <template v-if="column.dataIndex === 'documentNo'">
+          <a-button type="link" @click="openWindow(record)">{{ record.documentNo }}</a-button>
+        </template> -->
+        <template v-if="column.dataIndex === 'success'">
+          <a-tag v-if="record.success === true" color="green">成功</a-tag>
+        </template>
+        <template v-if="column.dataIndex === 'operation'">
+          <a-tag v-if="record.executeStatus === '已完成'" color="green">已完成</a-tag>
+          <a-button v-if="record.executeStatus === '执行中'" type="link" danger @click="cancelTask(record)">取消任务</a-button>
+          <a-button v-if="record.executeStatus === '未开始'" type="link" @click="executeTask(record)">
+            执行
+          </a-button>
+        </template>
+      </template>
+    </CommonTable>
+  </div>
+  <Loading v-if="loading" />
+</template>
+
+<script setup>
+import { ref, onMounted } from 'vue';
+import Common from '../common/Common';
+import { Uuid } from 'pc-component-v3';
+import { message } from 'ant-design-vue';
+import CommonTable from '../common/CommonTable.vue';
+import { taskColumns, workOptions, executeOptions, successOptions } from './transferTask.js';
+
+const loading = ref(false);
+const commonTableRef = ref(null);
+
+const labelStyle = { style: { width: '90px' } };
+
+const columns = ref(taskColumns);
+const taskList = ref([]);
+
+const formData = ref({
+  workCategory: null,
+  positionBeginNo: null,
+  positionEndNo: null,
+  executeStatus: null,
+  agvNo: null,
+  success: null,
+});
+
+const totalSize = ref(0);
+const pagination = ref({
+  start: 1,
+  length: 20,
+});
+
+const workTypes = ref(workOptions);
+const successTypes = ref(successOptions);
+const executeStatus = ref(executeOptions);
+
+// 获取分页参数后查询
+const getPageParams = (page, pageSize) => {
+  pagination.value.start = page;
+  pagination.value.length = pageSize;
+  getTableDatas();
+};
+
+// 执行任务
+const executeTask = record => {
+  executeTaskById(record.schedulingTasksId);
+};
+
+// 执行任务
+const cancelTask = record => {
+  cancelTaskById(record.schedulingTasksId);
+};
+
+// 打开窗口
+const openWindow = record => {
+  const url = Common.getHostPageBaseURL() + `#/desktop/window1/window-read/view/${record.windowNo}/0/${record.documentId}?currPage=1&currIndex=1&totalCount=1&uuid=${Uuid.createUUID()}`;
+  window.open(url,'_blank');
+};
+
+// 条件变化查询
+const searchDatas = () => {
+  commonTableRef.value.backFirstPage();
+};
+
+// 清空条件
+const clearFilter = () => {
+  formData.value = {
+    workCategory: null,
+    positionBeginNo: null,
+    positionEndNo: null,
+    executeStatus: null,
+    agvNo: null,
+    success: null,
+  };
+  searchDatas();
+};
+
+onMounted(() => {
+  getTableDatas();
+});
+
+// 查询调度任务
+const getTableDatas = () => {
+  const start = (pagination.value.start - 1) * pagination.value.length;
+  const params = {
+    ...formData.value,
+    ...pagination.value,
+    start,
+  };
+  loading.value = true;
+  $.ajax({
+    url: Common.getApiURL('SchedulingTasksResource/querySchedulingTasks'),
+    type: 'post',
+    contentType: 'application/json',
+
+    dataType: 'json',
+    data: JSON.stringify(params),
+    beforeSend: function (request) {
+      Common.addTokenToRequest(request);
+    },
+    success: function ({ errorCode, errorMessage, datas, total }) {
+      if (errorCode === 0) {
+        if (datas && datas.length > 0) {
+          taskList.value = datas;
+          totalSize.value = total;
+        } else {
+          taskList.value = [];
+          totalSize.value = 0;
+        }
+      } else {
+        taskList.value = [];
+        totalSize.value = 0;
+        message.warning(errorMessage);
+      }
+      loading.value = false;
+    },
+    error: function (XMLHttpRequest, textStatus, errorThrown) {
+      Common.processException(XMLHttpRequest, textStatus, errorThrown);
+      loading.value = false;
+    },
+  });
+};
+
+// 执行任务Api
+const executeTaskById = id => {
+  loading.value = true;
+  $.ajax({
+    type: 'get',
+    url: Common.getApiURL(`SchedulingTasksResource/executeTaskById?schedulingTasksId=${id}`),
+    beforeSend(request) {
+      Common.addTokenToRequest(request);
+    },
+    success: function ({ errorCode, errorMessage }) {
+      if (errorCode === 0) {
+        searchDatas();
+        message.success('执行成功!');
+      } else {
+        searchDatas();
+        message.warning(errorMessage);
+      }
+      loading.value = false;
+    },
+    error: function (XMLHttpRequest, textStatus, errorThrown) {
+      loading.value = false;
+      Common.processException(XMLHttpRequest, textStatus, errorThrown);
+    },
+  });
+
+};
+// 取消任务Api
+const cancelTaskById = id => {
+  loading.value = true;
+  $.ajax({
+    type: 'get',
+    url: Common.getApiURL(`SchedulingTasksResource/cancelWorkById?schedulingTasksId=${id}`),
+    beforeSend(request) {
+      Common.addTokenToRequest(request);
+    },
+    success: function ({ errorCode, errorMessage }) {
+      if (errorCode === 0) {
+        searchDatas();
+        message.success('取消成功!');
+      } else {
+        searchDatas();
+        message.warning(errorMessage);
+      }
+      loading.value = false;
+    },
+    error: function (XMLHttpRequest, textStatus, errorThrown) {
+      loading.value = false;
+      Common.processException(XMLHttpRequest, textStatus, errorThrown);
+    },
+  });
+};
+</script>
+
+<style scoped>
+.horizontal-form-item {
+  display: flex;
+  align-items: center;
+  gap: 8px;
+}
+
+.w-full {
+  width: 230px;
+}
+
+:deep(.ant-form-item-label > label) {
+  font-size: 14px !important;
+  font-weight: 600 !important;
+}
+
+:deep(.ant-form-item) {
+  margin-bottom: 0px !important;
+  margin-right: 16px !important;
+}
+</style>

+ 40 - 0
src/custom/transferTask/transferTask.js

@@ -0,0 +1,40 @@
+// 列名
+export const taskColumns = [
+  { title: '序号', dataIndex: 'index', width: 80 },
+  { title: '任务类型', dataIndex: 'workCategory', width: 150 },
+  { title: '单据编号', dataIndex: 'documentNo', width: 150 },
+  { title: '创建时间', dataIndex: 'created', width: 150 },
+  { title: '执行时间', dataIndex: 'excuteDate', width: 150 },
+  { title: '起始货位编号', dataIndex: 'positionBeginNo', width: 150 },
+  { title: '起始货位编号2', dataIndex: 'positionBeginNo2', width: 150 },
+  { title: '终点货位编号', dataIndex: 'positionEndNo', width: 150 },
+  { title: '终点货位编号2', dataIndex: 'positionEndNo2', width: 150 },
+  { title: 'AGV编号', dataIndex: 'agvNo', width: 150 },
+  { title: '备注', dataIndex: 'description', width: 150 },
+  // { title: '执行状态', dataIndex: 'executeStatus', width: 150 },
+  { title: '执行成功', dataIndex: 'success', width: 150 },
+  { title: '成功时间', dataIndex: 'successDate', width: 150 },
+  { title: '失败时间', dataIndex: 'errorDate', width: 150 },
+  { title: '失败原因', dataIndex: 'errorMessage', width: 150 },
+  { title: '上次执行时间', dataIndex: 'lastExcuteDate', width: 150 },
+  { title: '执行次数', dataIndex: 'countExcute', width: 150 },
+  { title: '操作', dataIndex: 'operation', width: 100, fixed: 'right' },
+].map(item => ({ ...item, align: 'center', ellipsis: true, resizable: true }));
+// 任务类型
+export const workOptions = [
+  { label: '入库', value: 'STOCKIN' },
+  { label: '出库', value: 'STOCKOUT' },
+  { label: '全部', value: '' },
+];
+// 执行状态
+export const executeOptions = [
+  { label: '执行中', value: 'Executing' },
+  { label: '已完成', value: 'Completed' },
+  { label: '未开始', value: 'NotStarted' },
+  { label: '全部', value: '' },
+];
+// 成功状态
+export const successOptions = [
+  { label: '是', value: true },
+  { label: '否', value: false },
+];

+ 1 - 1
src/main.js

@@ -48,7 +48,7 @@ import 'client-role-v3/dist/client-role-v3.css';
 import 'client-dic-v3/dist/client-dic-v3.css';
 
 import 'client-eam-v5/dist/client-eam-v5.css';
-import 'client-wms-v5/dist/client-wms-v5.css';
+import 'client-wms-cf/dist/client-wms-v5.css';
 import 'client-sensor-v3/dist/client-sensor-v3.css';
 import 'client-finance-v3/dist/client-finance-v3.css';
 

+ 14 - 1
src/routes/custom.js

@@ -1,8 +1,21 @@
 import AssetLabelPrinting from '../custom/printer/AssetLabelPrinting.vue'
-
+import ClampPrinting from '../custom/printer/ClampPrinting.vue'
+import TransferTask from '../custom/transferTask/TransferTask.vue'
+import StockRequisition from '../custom/stock/StockRequisition.vue'
+import StockPickingCar from '../custom/stock/StockPickingCar.vue'
+import AssetInventory from '../custom/inventory/AssetInventory.vue'
+import AssetInventoryStep from '../custom/inventory/AssetInventoryStep.vue'
+import InventoryDataProcessing from '../custom/inventory/InventoryDataProcessing.vue'
 
 const router = [
     { path: '/wms/inventory-label-printing', component: AssetLabelPrinting },
+    { path: '/wms/clamp-printing', component: ClampPrinting },
+    { path: '/wms/transfer-task', component: TransferTask },
+    { path: '/wms/stock-requisition', component: StockRequisition },
+    { path: '/wms/stock-picking-car', component: StockPickingCar },
+    { path: '/wms/asset-inventory', component: AssetInventory },
+    { path: '/wms/asset-inventory-step', component: AssetInventoryStep },
+    { path: '/wms/inventory-data-processing', component: InventoryDataProcessing },
 ];
 
 export default router;

+ 1 - 1
src/routes/route-wms-v5.js

@@ -49,7 +49,7 @@ import {
   LightSetting,
   LightStockInOrOut,
   ShelfBoard,
-} from 'client-wms-v5/dist/client-wms-v5.js';
+} from 'client-wms-cf/dist/client-wms-v5.js';