4 Achegas 396c8582ce ... 63c69e7081

Autor SHA1 Mensaxe Data
  tzx 63c69e7081 fix: 锁库问题解决 hai 1 día
  mlchen 3571c86361 fix:5358【库存台账】拆批操作,此库存包装比较多,进行点击一键分配界面会卡死没反应 hai 4 días
  mlchen 98f7b4e34b fix:5357【盘点工单】计划下发来,点击去报工,提示我不是盘点人员,此校验基本都复现,时而又会好 hai 4 días
  mlchen db4407823f fix:5374【库存调拨】新增操作,进行关键词搜索物品编码,搜索不成功,一直加载中 hai 4 días

+ 12 - 0
src/api/inventory/index.js

@@ -63,6 +63,18 @@ export async function getPlanOrderList(params) {
   return Promise.reject(new Error(res.data.message));
 }
 
+// 校验当前用户是否可以报工
+export async function checkReportWork(planOrderId) {
+  const res = await request.get(
+    `/wms/planOrder/checkReportWork/${planOrderId}`,
+    { showErrorToast: false }
+  );
+  if (res.data.code == 0) {
+    return res.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
 // 盘点工单详情
 export async function getOrderInfoByPlanId(params) {
   const res = await request.get('/wms/plan/getOrderInfoByPlanId', {

+ 10 - 0
src/api/warehouseManagement/index.js

@@ -664,6 +664,16 @@ export default {
     }
     return Promise.reject(new Error(res.data.message));
   },
+  //库存台账-锁库明细(点击锁库数量)
+  getLockDetail: async (data) => {
+    const res = await request.get('/wms/lockOrder/v1/lock-detail', {
+      params: data
+    });
+    if (res.data.code == 0) {
+      return res.data.data;
+    }
+    return Promise.reject(new Error(res.data.message));
+  },
   // 解锁提交
   submitUnlock: async (data) => {
     const res = await request.post('/bpm/inventoryUnlockApprove/submit', data);

+ 7 - 0
src/api/warehouseManagement/stockBatchChange.js

@@ -14,6 +14,13 @@ export default {
   detail: (id) => request.get(`${base}/getById/${id}`).then(unwrap),
   sourceDetails: (stockBatchIds) =>
     request.post(`${base}/sourceDetails`, { stockBatchIds }).then(unwrap),
+  checkSplit: (categoryIds) =>
+    request.post(`${base}/checkSplit`, { categoryIds }).then((res) => {
+      if (res.data.code === 0 || res.data.code === '0') {
+        return res.data.data;
+      }
+      return Promise.reject(new Error(res.data.message || '操作失败'));
+    }),
   save: (data) => request.post(`${base}/save`, data).then(unwrap),
   submit: (data) =>
     request

+ 2 - 8
src/views/warehouseManagement/inventoryAllocation/add.vue

@@ -982,6 +982,8 @@
           size: limit
         });
         console.log('data------', data);
+        data = data || {};
+        data.list = Array.isArray(data.list) ? data.list : [];
         data.list = data.list.map(item => {
           // 入库计量数量不会随出库变化,可用数量使用当前批次库存余额计算
           const inventoryBalance = Number(item.availableCountBase) || 0;
@@ -1309,12 +1311,10 @@
       queryReset() {
         this.query = {};
         this.page = 1;
-        this.getProductList();
         this.reload();
       },
       querySearch() {
         this.page = 1;
-        this.getProductList();
         this.reload();
       },
       //获取工厂列表
@@ -1376,7 +1376,6 @@
           this.inFreightList = []; // 调入货位列表
         }
         console.log('this.params------~~~', this.params);
-        await this.getProductList();
         await this.reload();
       },
       outCargoAreaChange(val) {
@@ -1392,7 +1391,6 @@
         this.params.outFreightId = ''; // 调出货位
         this.params.outFreightName = '';
         this.outFreightList = []; // 调出货位列表
-        this.getProductList();
         this.reload();
       },
       outShelvesChange(val) {
@@ -1405,14 +1403,12 @@
         this.productList = [];
         this.params.outFreightId = ''; // 调出货位
         this.params.outFreightName = '';
-        this.getProductList();
         this.reload();
       },
       outFreightIdChange(val) {
         this.params.outFreightName = this.outFreightList.filter(
           (item) => item.id == val
         )[0].name;
-        this.getProductList();
         this.reload();
       },
       inWarehouseChange(val) {
@@ -1487,7 +1483,6 @@
         console.log(this.$refs.outTree.getNodeByValue(val));
         let obj = this.$refs.outTree.getNodeByValue(val);
         this.currentObj = obj;
-        this.getProductList();
         this.reload();
       },
       // 调入区域改变
@@ -1495,7 +1490,6 @@
         let obj = this.$refs.outTree.getNodeByValue(val);
       },
       handledime() {
-        this.getProductList();
         this.reload();
         this.selection=[]
         this.selectionIds = []

+ 35 - 1
src/views/warehouseManagement/stockLedger/components/item-list.vue

@@ -173,6 +173,19 @@
         <el-link type="primary" @click="openQRCode(row, 3)"> 查看 </el-link>
       </template>
 
+      <!-- 锁定数量:点击查看锁库详情 -->
+      <template v-slot:lockQuantity="{ row }">
+        <el-link
+          v-if="Number(row.lockQuantity) > 0"
+          type="primary"
+          :underline="false"
+          @click="showLockDetail(row)"
+        >
+          {{ row.lockQuantity }}
+        </el-link>
+        <span v-else>{{ row.lockQuantity || 0 }}</span>
+      </template>
+
       <template v-slot:areaName="{ row }">
         <el-link type="primary" @click="openUploadDetail(row, 'list')">
           查看
@@ -255,6 +268,7 @@
     />
     <unlockModal ref="unlockModalRef"></unlockModal>
     <BatchChangeDialog ref="batchChangeRef" @success="reload" />
+    <lockDetailDialog ref="lockDetailDialogRef" />
   </div>
 </template>
 
@@ -287,7 +301,9 @@
   import exportButton from '@/components/upload/exportButton.vue';
   import printQRCode from '@/views/warehouseManagement/stockManagement/components/printQRCode.vue';
   import unlockModal from '@/views/warehouseManagement/unlockApplication/components/unlockModal.vue';
+  import lockDetailDialog from './lockDetailDialog.vue';
   import BatchChangeDialog from './BatchChangeDialog.vue';
+  import stockBatchChange from '@/api/warehouseManagement/stockBatchChange';
 
   export default {
     mixins: [tabMixins],
@@ -300,6 +316,7 @@
       printQRCode,
       ItemListed,
       unlockModal,
+      lockDetailDialog,
       BatchChangeDialog
     },
     props: {
@@ -464,6 +481,7 @@
           {
             prop: 'lockQuantity',
             label: '锁定数量',
+            slot: 'lockQuantity',
             align: 'center',
             showOverflowTooltip: true
           },
@@ -747,7 +765,7 @@
         }
         this.$refs.unlockModalRef.open('add', this.checkRadioData[0]);
       },
-      openBatchChange(mode) {
+      async openBatchChange(mode) {
         if (mode === 'split' && this.checkRadioData.length !== 1)
           return this.$message.warning('拆批请选择一条库存批次');
         if (mode === 'merge' && this.checkRadioData.length < 2)
@@ -760,12 +778,28 @@
         ) {
           return this.$message.warning('数量为0的库存批次不支持拆批和合批');
         }
+        if (mode === 'split') {
+          try {
+            const isUnpack = await stockBatchChange.checkSplit(
+              this.checkRadioData.map((row) => row.categoryId)
+            );
+            if (isUnpack) {
+              return this.$message.warning('拆包产品不支持拆批');
+            }
+          } catch (error) {
+            return this.$message.error(error.message || '拆批校验失败');
+          }
+        }
         this.$refs.batchChangeRef.open(mode, this.checkRadioData);
       },
 
       openUploadDetail(row, type) {
         this.$refs.itemListedRef.open(row, type, 'detail', this.selectedDime);
       },
+      // 查看锁库详情(客户名称、订单号等)
+      showLockDetail(row) {
+        this.$refs.lockDetailDialogRef.open(row);
+      },
       openQRCode(row, type) {
         this.$refs.printQRCodeRef.open(row, type);
       },

+ 161 - 0
src/views/warehouseManagement/stockLedger/components/lockDetailDialog.vue

@@ -0,0 +1,161 @@
+<template>
+  <ele-modal
+    title="锁库详情"
+    :visible.sync="visible"
+    :before-close="handleClose"
+    :close-on-click-modal="false"
+    :close-on-press-escape="false"
+    append-to-body
+    width="75%"
+    :maxable="true"
+  >
+    <el-card shadow="never">
+      <el-descriptions :column="3">
+        <el-descriptions-item label="物品编码">{{
+          formData.categoryCode || '-'
+        }}</el-descriptions-item>
+        <el-descriptions-item label="物品名称">{{
+          formData.categoryName || '-'
+        }}</el-descriptions-item>
+        <el-descriptions-item label="批次号">{{
+          formData.batchNo || '-'
+        }}</el-descriptions-item>
+      </el-descriptions>
+      <div style="margin-top: 12px">
+        <ele-pro-table
+          ref="eleTable"
+          :columns="columns"
+          :datasource="detailList"
+          height="calc(100vh - 460px)"
+          full-height="calc(100vh - 116px)"
+          tool-class="ele-toolbar-form"
+          :needPage="false"
+          :initLoad="false"
+        >
+          <template v-slot:sourceType="{ row }">
+            <span>{{ LockOrderSourceTypeEnum[row.sourceType] || '-' }}</span>
+          </template>
+          <template v-slot:status="{ row }">
+            <span>{{ lockStatusEnum[row.status] || '-' }}</span>
+          </template>
+        </ele-pro-table>
+      </div>
+    </el-card>
+  </ele-modal>
+</template>
+<script>
+  import storageApi from '@/api/warehouseManagement';
+  export default {
+    data() {
+      return {
+        visible: false,
+        formData: {},
+        detailList: [],
+        loading: false,
+        columns: [
+          {
+            columnKey: 'index',
+            type: 'index',
+            width: 50,
+            align: 'center',
+            label: '序号',
+            showOverflowTooltip: true,
+            fixed: 'left'
+          },
+          {
+            prop: 'orderNo',
+            label: '锁库单号',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 140
+          },
+          {
+            prop: 'sourceOrderNo',
+            label: '订单号',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 140
+          },
+          {
+            prop: 'sourceType',
+            label: '单据类型',
+            slot: 'sourceType',
+            align: 'center',
+            width: 110
+          },
+          {
+            prop: 'customerName',
+            label: '客户名称',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 160
+          },
+          {
+            prop: 'quantity',
+            label: '锁定数量',
+            align: 'center',
+            width: 110
+          },
+          {
+            prop: 'status',
+            label: '锁定状态',
+            slot: 'status',
+            align: 'center',
+            width: 100
+          },
+          {
+            prop: 'orderDate',
+            label: '锁库时间',
+            align: 'center',
+            showOverflowTooltip: true,
+            width: 160
+          }
+        ],
+        LockOrderSourceTypeEnum: {
+          0: '无定义',
+          1: '销售发货单',
+          2: '领料出库单',
+          3: '调拨出库单',
+          4: '销售订单'
+        },
+        lockStatusEnum: {
+          1: '锁定中',
+          2: '已扣减',
+          3: '已释放'
+        }
+      };
+    },
+    methods: {
+      async open(row) {
+        this.visible = true;
+        this.formData = row || {};
+        this.detailList = [];
+        await this.loadData();
+      },
+      async loadData() {
+        const row = this.formData || {};
+        const params = {
+          pageNum: 1,
+          size: 999,
+          productId: row.categoryId,
+          productCode: row.categoryCode,
+          batchNo: row.batchNo,
+          systemBatchNo: row.systemBatchNo,
+          warehouseId: row.warehouseId
+        };
+        try {
+          this.loading = true;
+          const res = await storageApi.getLockDetail(params);
+          this.detailList = res || [];
+        } catch (e) {
+          this.detailList = [];
+        } finally {
+          this.loading = false;
+        }
+      },
+      handleClose() {
+        this.visible = false;
+      }
+    }
+  };
+</script>

+ 9 - 12
src/views/warehouseManagement/stocktaking/work/index.vue

@@ -35,7 +35,7 @@
 <script>
   import DisposeDialog from './components/disposeDialog.vue';
   import WorkSearch from './components/work-search.vue';
-  import { getPlanOrderList } from '@/api/inventory';
+  import { checkReportWork, getPlanOrderList } from '@/api/inventory';
   export default {
     components: {
       WorkSearch,
@@ -146,18 +146,15 @@
     },
     methods: {
       control(row) {
-        const currentUserId = localStorage.getItem('userId');
-        if (
-          !currentUserId ||
-          String(row.executorId) !== String(currentUserId)
-        ) {
-          this.$message({
-            type: 'error',
-            message: '您不是盘点人员,不能报工!',
+        checkReportWork(row.id)
+          .then(() => {
+            this.$refs.disposeDialogRef.open(row.id);
+          })
+          .catch((error) => {
+            this.$message.error(
+              error.message || '校验报工权限失败,请稍后重试!'
+            );
           });
-          return;
-        }
-        this.$refs.disposeDialogRef.open(row.id);
       },
       /* 表格数据源 */
       datasource({ page, limit, where, order }) {