zouyu
8 天以前 e03ff28fb1dbaa19571b7ea0414e0161f178cf26
浪潮对接单点登录:浪潮配置调整
已添加7个文件
已修改7个文件
700 ■■■■ 文件已修改
.env.production 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/collaborativeApproval/attendanceManagement.js 134 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/collaborativeApproval/enterpriseBook.js 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/collaborativeApproval/noticeManagement.js 95 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/collaborativeApproval/notificationManagement.js 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/collaborativeApproval/officeSupplies.js 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/collaborativeApproval/planTemplate.js 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/collaborativeApproval/rulesRegulationsManagementFile.js 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/inventoryManagement/stockWarningLedger.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/personnelManagement/staffOnJob.js 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/procurementManagement/procurementLedger.js 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/inventoryManagement/stockManagement/components/FormDiaManual.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/inventoryManagement/stockManagement/index.vue 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/inventoryManagement/stockWarningLedger/index.vue 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.env.production
@@ -1,5 +1,5 @@
# é¡µé¢æ ‡é¢˜
VITE_APP_TITLE =芯导-财务管理系统
VITE_APP_TITLE =芯导-仓储物流系统
#10.136.58.65    èН坼-财务管理系统    cwglxt
#10.136.58.66    èН坼-设备管理系统    sbglxt
#10.136.58.67    èН坼-生产管控系统    scgkxt
src/api/collaborativeApproval/attendanceManagement.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,134 @@
import request from "@/utils/request";
// æŸ¥è¯¢å‡æœŸè®¾ç½®åˆ—表
export function listHolidaySettings(query) {
    return request({
        url: "/holidaySettings/getList",
        method: "get",
        params: query,
    });
}
//查询年假规则列表
export function listAnnualLeaveSettingList(query) {
    return request({
        url: "/holidaySettings/getAnnualLeaveSettingList",
        method: "get",
        params: query,
    });
}
//查询加班规则列表
export function listOvertimeSettingList(query) {
    return request({
        url: "/holidaySettings/getOvertimeSettingList",
        method: "get",
        params: query,
    });
}
//查询工作时间规则列表
export function listWorkingHoursSettingList(query) {
    return request({
        url: "/holidaySettings/getWorkingHoursSettingList",
        method: "get",
        params: query,
    });
}
// æ–°å¢žå‡æœŸè®¾ç½®
export function addHolidaySettings(data) {
    return request({
        url: "/holidaySettings/add",
        method: "post",
        data: data,
    });
}
//新增年假规则
export function addAnnualLeaveSetting(data) {
    return request({
        url: "/holidaySettings/addAnnualLeaveSetting",
        method: "post",
        data: data,
    });
}
//新增加班规则
export function addOvertimeSetting(data) {
    return request({
        url: "/holidaySettings/addOvertimeSetting",
        method: "post",
        data: data,
    });
}
//新增工作时间规则
export function addWorkingHoursSetting(data) {
    return request({
        url: "/holidaySettings/addWorkingHoursSetting",
        method: "post",
        data: data,
    });
}
// ä¿®æ”¹å‡æœŸè®¾ç½®
export function updateHolidaySettings(data) {
    return request({
        url: "/holidaySettings/update",
        method: "post",
        data: data,
    });
}
// ä¿®æ”¹å¹´å‡è§„则
export function updateAnnualLeaveSetting(data) {
    return request({
        url: "/holidaySettings/updateAnnualLeaveSetting",
        method: "post",
        data: data,
    });
}
// ä¿®æ”¹åŠ ç­è§„åˆ™
export function updateOvertimeSetting(data) {
    return request({
        url: "/holidaySettings/updateOvertimeSetting",
        method: "post",
        data: data,
    });
}
// ä¿®æ”¹å·¥ä½œæ—¶é—´è§„则
export function updateWorkingHoursSetting(data) {
    return request({
        url: "/holidaySettings/updateWorkingHoursSetting",
        method: "post",
        data: data,
    });
}
// æ‰¹é‡åˆ é™¤å‡æœŸè®¾ç½®
export function delHolidaySettings(query) {
    return request({
        url: "/holidaySettings/delete",
        method: "delete",
        data: query,
    });
}
// æ‰¹é‡åˆ é™¤å¹´å‡è§„则
export function delAnnualLeaveSetting(query) {
    return request({
        url: "/holidaySettings/deleteAnnualLeaveSetting",
        method: "delete",
        data: query,
    });
}
// æ‰¹é‡åˆ é™¤åŠ ç­è§„åˆ™
export function delOvertimeSetting(query) {
    return request({
        url: "/holidaySettings/deleteOvertimeSetting",
        method: "delete",
        data: query,
    });
}
// æ‰¹é‡åˆ é™¤å·¥ä½œæ—¶é—´è§„则
export function delWorkingHoursSetting(query) {
    return request({
        url: "/holidaySettings/deleteWorkingHoursSetting",
        method: "delete",
        data: query,
    });
}
src/api/collaborativeApproval/enterpriseBook.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,67 @@
import request from '@/utils/request'
// æŸ¥è¯¢ä¸ªäººé€šè®¯å½•
// ä¸ªäººé€šè®¯å½•通常是用户收藏或频繁联系的人员
export function getPersonalContacts(page,query) {
    return request({
        url: '/staffContactsPersonal/getList',
        method: 'get',
        params: {
            ...page,
            ...query
        }
    })
}
// æ·»åŠ è”ç³»äººåˆ°ä¸ªäººé€šè®¯å½•
export function addPersonalContact(data) {
    return request({
        url: '/staffContactsPersonal/add',
        method: 'post',
        data: data
    })
}
// ä»Žä¸ªäººé€šè®¯å½•移除联系人
export function removePersonalContact(id) {
    return request({
        url: '/staffContactsPersonal/delete/' + id,
        method: 'delete'
    })
}
// æŸ¥è¯¢å…¬å…±é€šè®¯å½•
// å…¬å…±é€šè®¯å½•通常是所有员工可见的联系方式
export function getPublicContacts(query) {
    return request({
        url: '/staff/contacts/public/list',
        method: 'get',
        params: query
    })
}
// æŸ¥è¯¢å•位通讯录
// å•位通讯录通常按部门组织的员工联系方式
export function getCompanyContacts(query) {
    return request({
        url: '/staff/contacts/company/list',
        method: 'get',
        params: query
    })
}
// æŸ¥è¯¢éƒ¨é—¨é€šè®¯å½•树结构
export function getDepartmentTree() {
    return request({
        url: '/staff/contacts/department/tree',
        method: 'get'
    })
}
// èŽ·å–å‘˜å·¥è¯¦ç»†ä¿¡æ¯
export function getEmployeeDetail(employeeId) {
    return request({
        url: '/staff/staffOnJob/' + employeeId,
        method: 'get'
    })
}
src/api/collaborativeApproval/noticeManagement.js
@@ -2,68 +2,77 @@
// æŸ¥è¯¢å…¬å‘Šåˆ—表
export function listNotice(query) {
  return request({
    url: '/collaborativeApproval/notice/list',
    method: 'get',
    params: query
  })
    return request({
        url: '/collaborativeApproval/notice/page',
        method: 'get',
        params: query
    })
}
// æŸ¥è¯¢å…¬å‘Šè¯¦ç»†
export function getNotice(noticeId) {
  return request({
    url: '/collaborativeApproval/notice/' + noticeId,
    method: 'get'
  })
    return request({
        url: '/collaborativeApproval/notice/' + noticeId,
        method: 'get'
    })
}
// æ–°å¢žå…¬å‘Š
export function addNotice(data) {
  return request({
    url: '/collaborativeApproval/notice',
    method: 'post',
    data: data
  })
    return request({
        url: '/collaborativeApproval/notice/add',
        method: 'post',
        data: data
    })
}
// ä¿®æ”¹å…¬å‘Š
export function updateNotice(data) {
  return request({
    url: '/collaborativeApproval/notice',
    method: 'put',
    data: data
  })
    return request({
        url: '/collaborativeApproval/notice/update',
        method: 'put',
        data: data
    })
}
// åˆ é™¤å…¬å‘Š
export function delNotice(noticeId) {
  return request({
    url: '/collaborativeApproval/notice/' + noticeId,
    method: 'delete'
  })
export function delNotice(ids) {
    return request({
        url: '/collaborativeApproval/notice/' + ids,
        method: 'delete',
    })
}
// æ‰¹é‡åˆ é™¤å…¬å‘Š
export function delNoticeBatch(noticeIds) {
  return request({
    url: '/collaborativeApproval/notice/batch',
    method: 'delete',
    data: noticeIds
  })
// èŽ·å–å…¬å‘Šæ•°é‡
export function getCount() {
    return request({
        url: '/collaborativeApproval/notice/count',
        method: 'get',
    })
}
// å‘布公告
export function publishNotice(noticeId) {
  return request({
    url: '/collaborativeApproval/notice/publish/' + noticeId,
    method: 'put'
  })
// æŸ¥è¯¢å…¬å‘Šç±»åž‹åˆ—表
export function listNoticeType() {
    return request({
        url: '/noticeType/list',
        method: 'get'
    })
}
// ä¸‹çº¿å…¬å‘Š
export function offlineNotice(noticeId) {
  return request({
    url: '/collaborativeApproval/notice/offline/' + noticeId,
    method: 'put'
  })
// æ–°å¢žå…¬å‘Šç±»åž‹
export function addNoticeType(data) {
    return request({
        url: '/noticeType/add',
        method: 'post',
        data: data
    })
}
// åˆ é™¤å…¬å‘Šç±»åž‹
export function delNoticeType(id) {
    return request({
        url: '/noticeType/del',
        method: 'delete',
        data: { id }
    })
}
src/api/collaborativeApproval/notificationManagement.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,63 @@
import request from "@/utils/request";
// æŸ¥è¯¢é€šçŸ¥åˆ—表
export function listNotification(query) {
  return request({
    url: "/notificationManagement/getList",
    method: "get",
    params: query,
  });
}
// æ–°å¢žé€šçŸ¥
export function addNotification(data) {
  return request({
    url: "/notificationManagement/add",
    method: "post",
    data: data,
  });
}
//新增会议
export function addOnlineMeeting(data) {
  return request({
    url: "/notificationManagement/addOnlineMeeting",
    method: "post",
    data: data,
  });
}
//新增文件共享
export function addFileSharing(data) {
  return request({
    url: "/notificationManagement/addFileSharing",
    method: "post",
    data: data,
  });
}
// ä¿®æ”¹é€šçŸ¥
export function updateNotification(data) {
  return request({
    url: "/notificationManagement/update",
    method: "post",
    data: data,
  });
}
// æ‰¹é‡åˆ é™¤é€šçŸ¥
export function delNotification(query) {
  return request({
    url: "/notificationManagement/delete",
    method: "delete",
    data: query,
  });
}
// // æ‰¹é‡åˆ é™¤çŸ¥è¯†åº“
// export function delKnowledgeBaseBatch(knowledgeBaseIds) {
//   return request({
//     url: "/knowledgeBase/batch",
//     method: "delete",
//     data: knowledgeBaseIds,
//   });
// }
src/api/collaborativeApproval/officeSupplies.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
import request from '@/utils/request'
// æŸ¥è¯¢åŠžå…¬ç‰©èµ„åˆ—è¡¨
export function listPage(query) {
    return request({
        url: '/officeSupplies/listPage',
        method: 'get',
        params: query
    })
}
// æ–°å¢žåŠžå…¬ç‰©èµ„
export function add(data) {
    return request({
        url: '/officeSupplies/add',
        method: 'post',
        data
    })
}
// ä¿®æ”¹åŠžå…¬ç‰©èµ„
export function update(data) {
    return request({
        url: '/officeSupplies/update',
        method: 'post',
        data
    })
}
// åˆ é™¤åŠžå…¬ç‰©èµ„
export function deleteOff(data) {
    return request({
        url: '/officeSupplies/delete',
        method: 'delete',
        data
    })
}
src/api/collaborativeApproval/planTemplate.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,64 @@
import request from "@/utils/request";
// æŸ¥è¯¢è®¡åˆ’列表
export function listDutyPlan(query) {
  return request({
    url: "/dutyPlan/getList",
    method: "get",
    params: query
  });
}
//数据
export function NumDutyPlan(query) {
  return request({
    url: "/dutyPlan/getNum",
    method: "get",
    params: query
  });
}
// æ–°å¢žè®¡åˆ’
export function addDutyPlan(data) {
  return request({
    url: "/dutyPlan/add",
    method: "post",
    data: data,
  });
}
// ä¿®æ”¹è®¡åˆ’
export function updateDutyPlan(data) {
  return request({
    url: "/dutyPlan/update",
    method: "post",
    data: data,
  });
}
// åˆ é™¤è®¡åˆ’
export function delDutyPlan(query) {
  return request({
    url: "/dutyPlan/delete",
    method: "delete",
    data: query,
  });
}
// å¯¼å‡ºè®¡åˆ’
export function exportDutyPlan(query) {
  return request({
    url: "/dutyPlan/export",
    method: "post",
    params: query,
  });
}
// // æ‰¹é‡åˆ é™¤è®¡åˆ’
// export function delDutyPlanBatch(dutyPlanIds) {
//   return request({
//     url: "/dutyPlan/batch",
//     method: "delete",
//     data: dutyPlanIds,
//   });
// }
src/api/collaborativeApproval/rulesRegulationsManagementFile.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
import request from "@/utils/request";
// é™„件列表
export function listRuleFiles(query) {
  return request({
    url: "/rulesRegulationsManagementFile/listPage",
    method: "get",
    params: query,
  });
}
// æ–°å¢žé™„ä»¶
export function addRuleFile(data) {
  return request({
    url: "/rulesRegulationsManagementFile/add",
    method: "post",
    data,
  });
}
// åˆ é™¤é™„件(支持传递 id æ•°ç»„)
export function delRuleFile(ids) {
  return request({
    url: "/rulesRegulationsManagementFile/del",
    method: "delete",
    data: ids,
  });
}
src/api/inventoryManagement/stockWarningLedger.js
@@ -3,7 +3,7 @@
// æŸ¥è¯¢åº“存预警台账列表
export const getStockWarningLedgerPage = (params) => {
  return request({
    url: "/stockWarningLedger/listPage",
    url: "/customStorageWarning/pageList",
    method: "get",
    params,
  });
src/api/personnelManagement/staffOnJob.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,54 @@
import request from '@/utils/request'
// æŸ¥è¯¢åœ¨èŒå‘˜å·¥å°è´¦
export function staffOnJobListPage(query) {
    return request({
        url: '/staff/staffOnJob/listPage',
        method: 'get',
        params: query,
    })
}
// æŸ¥è¯¢å‘˜å·¥å…¥èŒä¿¡æ¯
export function staffOnJobInfo(id, query) {
    return request({
        url: '/staff/staffOnJob/' + id,
        method: 'get',
        params: query,
    })
}
// æ–°å¢žå‘˜å·¥
export function createStaffOnJob(params) {
    return request({
        url: "/staff/staffOnJob",
        method: "post",
        data: params,
    });
}
// ä¿®æ”¹å‘˜å·¥
export function updateStaffOnJob(id, params) {
    return request({
        url: "/staff/staffOnJob/" + id,
        method: "put",
        data: params,
    });
}
// åˆ é™¤å‘˜å·¥
export function batchDeleteStaffOnJobs(query) {
    return request({
        url: "/staff/staffOnJob/del",
        method: "delete",
        data: query,
    });
}
// ç»­ç­¾åˆåŒ
export function renewContract(id, params) {
    return request({
        url: "/staff/staffOnJob/renewContract/" + id,
        method: "post",
        data: params,
    });
}
src/api/procurementManagement/procurementLedger.js
@@ -3,72 +3,99 @@
// åˆ†é¡µæŸ¥è¯¢
export function purchaseList(query) {
  return request({
    url: "/purchase/ledger/list",
    method: "get",
    params: query,
  });
    return request({
        url: "/purchase/ledger/list",
        method: "get",
        params: query,
    });
}
// æŸ¥è¯¢åˆåŒå·
export function getSalesNo(query) {
  return request({
    url: "/purchase/ledger/getSalesNo",
    method: "get",
    params: query,
  });
    return request({
        url: "/purchase/ledger/getSalesNo",
        method: "get",
        params: query,
    });
}
// å­è¡¨æ ¼æŸ¥è¯¢
export function productList(query) {
  return request({
    url: "/sales/product/list",
    method: "get",
    params: query,
  });
    return request({
        url: "/sales/product/list",
        method: "get",
        params: query,
    });
}
// æ–°å¢žã€ç¼–辑
export function addOrEditPurchase(query) {
  return request({
    url: "/purchase/ledger/addOrEditPurchase",
    method: "post",
    data: query,
  });
    return request({
        url: "/purchase/ledger/addOrEditPurchase",
        method: "post",
        data: query,
    });
}
// åˆ é™¤
export function delPurchase(query) {
  return request({
    url: "/purchase/ledger/delPurchase",
    method: "delete",
    data: query,
  });
    return request({
        url: "/purchase/ledger/delPurchase",
        method: "delete",
        data: query,
    });
}
// æŸ¥è¯¢è¯¦æƒ…
export function getPurchaseById(query) {
  return request({
    url: "/purchase/ledger/getPurchaseById",
    method: "get",
    params: query,
  });
    return request({
        url: "/purchase/ledger/getPurchaseById",
        method: "get",
        params: query,
    });
}
// æŸ¥è¯¢è¯¦æƒ…
export function getOptions(query) {
  return request({
    url: "/system/supplier/getOptions",
    method: "get",
    params: query,
  });
    return request({
        url: "/system/supplier/getOptions",
        method: "get",
        params: query,
    });
}
// æŸ¥è¯¢é‡‡è´­å°è´¦åˆ—表
export function purchaseListPage(query) {
  return request({
    url: "/purchase/ledger/listPage",
    method: "get",
    params: query,
  });
    return request({
        url: "/purchase/ledger/listPage",
        method: "get",
        params: query,
    });
}
export function createPurchaseNo() {
  return request({
    url: "/purchase/ledger/createPurchaseNo",
    method: "get",
  });
    return request({
        url: "/purchase/ledger/createPurchaseNo",
        method: "get",
    });
}
export function updateApprovalStatus(query) {
    return request({
        url: "/purchase/ledger/updateApprovalStatus",
        method: "post",
        data: query,
    });
}
// ä¿å­˜é‡‡è´­æ¨¡æ¿
// /purchase/ledger/addPurchaseTemplate
export function addPurchaseTemplate(data) {
    return request({
        url: "/purchase/ledger/addPurchaseTemplate",
        method: "post",
        data: data,
    });
}
// æŸ¥è¯¢é‡‡è´­æ¨¡æ¿
// /purchase/ledger/getPurchaseTemplateList
export function getPurchaseTemplateList(query) {
    return request({
        url: "/purchase/ledger/getPurchaseTemplateList",
        method: "get",
        params: query,
    });
}
src/views/inventoryManagement/stockManagement/components/FormDiaManual.vue
@@ -160,4 +160,4 @@
.dialog-footer {
  text-align: center;
}
</style>
</style>
src/views/inventoryManagement/stockManagement/index.vue
@@ -163,7 +163,7 @@
    boundTime: [{ required: true, message: '请选择库存时间', trigger: 'change' }],
    inboundTime: [{ required: true, message: '请选择入库时间', trigger: 'change' }],
    inboundPerson: [{ required: true, message: '请选择出库人', trigger: 'change' }],
        warnNum: [{ required: true, message: '请输入最低库存', trigger: 'blur' }],
        warnNum: [{ required: true, message: '请输入最低库存', trigger: 'blur' }],
  }
})
const { searchForm, form, rules } = toRefs(data)
@@ -194,21 +194,21 @@
  getStockManagePageByCustom(params).then(res => {
    tableLoading.value = false
    tableData.value = res.data.records
    // ä¸ºè¡¨æ ¼æ•°æ®è‡ªåŠ¨è®¡ç®—æ€»ä»·
    tableData.value = tableData.value.map(item => {
      // è®¡ç®—剩余库存
      const stockQuantity = parseFloat(item.inboundNum) || 0
      const outboundQuantity = parseFloat(item.totalInboundNum) || 0
      const remainingStock = Math.max(stockQuantity - outboundQuantity, 0)
      // ææ–™åº“存:含税总价 = å«ç¨Žå•ä»· Ã— å‰©ä½™åº“å­˜
      const taxInclusiveUnitPrice = parseFloat(item.taxInclusiveUnitPrice) || 0
      item.taxInclusiveTotalPrice = (taxInclusiveUnitPrice * remainingStock).toFixed(2)
      return item
    })
    total.value = res.data.total
    // æ•°æ®åŠ è½½å®ŒæˆåŽæ£€æŸ¥åº“å­˜
    // checkStockAndCreatePurchase();
@@ -243,6 +243,7 @@
// æ‰“开弹框
const openForm = async (type, row) => {
  console.log(row)
  operationType.value = type
  form.value = {}
  productData.value = []
@@ -262,7 +263,7 @@
    })
  }
  form.value.entryDate = getCurrentDate() // è®¾ç½®é»˜è®¤å½•入日期为当前日期
  // ä»…材料库存弹框
  manualDialogVisible.value = true
}
@@ -270,17 +271,17 @@
// æäº¤è¡¨å•
const submitForm = (submittedData) => {
  console.log('子组件提交的数据:', submittedData)
  // ä½¿ç”¨å­ç»„件提交的数据,而不是父组件的form对象
  const submitData = { ...submittedData }
  // ææ–™åº“存:移除含税总价字段
  delete submitData.taxInclusiveTotalPrice
  // ç§»é™¤å…¶ä»–可能的总价字段
  delete submitData.taxExclusiveTotalPrice
  console.log('提交给后端的数据(已移除总价字段):', submitData)
  // ææ–™åº“存使用 updateManagementByCustom æŽ¥å£
  updateManagementByCustom(submitData).then(res => {
    proxy.$modal.msgSuccess("提交成功")
@@ -385,4 +386,4 @@
:deep(.row-low-stock:hover > td) {
  background-color: #fcd4d4;
}
</style>
</style>
src/views/inventoryManagement/stockWarningLedger/index.vue
@@ -138,13 +138,13 @@
      if (res.code === 200) {
        tableData.value = res.data.records || []
        total.value = res.data.total || 0
        // è®¡ç®—预警级别和状态
        tableData.value = tableData.value.map(item => {
          const currentStock = parseFloat(item.inboundNum0 || item.currentStock || 0)
          const warnNum = parseFloat(item.warnNum || 0)
          const safetyStock = parseFloat(item.safetyStock || warnNum * 1.2)
          // è®¡ç®—预警级别
          if (currentStock <= 0) {
            item.warningLevel = '紧急'
@@ -159,7 +159,7 @@
            item.warningLevel = ''
            item.warningStatus = '正常'
          }
          // è®¡ç®—预计缺货时间(基于日均消耗量,这里简化处理)
          if (item.warningStatus === '已预警' && currentStock > 0 && warnNum > 0) {
            const dailyConsumption = warnNum / 30 // å‡è®¾30天消耗完最低库存
@@ -170,10 +170,10 @@
              item.expectedShortageTime = date.toISOString().split('T')[0]
            }
          }
          item.currentStock = currentStock
          item.safetyStock = safetyStock
          return item
        })
      }
@@ -209,7 +209,7 @@
const getStockClass = (row) => {
  const currentStock = parseFloat(row.currentStock || row.inboundNum0 || 0)
  const warnNum = parseFloat(row.warnNum || 0)
  if (currentStock <= 0) {
    return 'text-danger'
  } else if (currentStock < warnNum) {