From 41b2e3e7722f0448d74f1e98c21927ad2a91c8ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=96=87=E6=98=8A?= Date: Thu, 18 Jun 2026 20:17:02 +0800 Subject: [PATCH] =?UTF-8?q?feat(bid):=20=E5=AE=8C=E6=88=90=E6=89=B9?= =?UTF-8?q?=E9=87=8F=E4=B8=9A=E5=8A=A1=E4=BC=98=E5=8C=96=E4=B8=8E=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 统一所有表格操作列样式,移除固定宽度避免布局溢出 2. 新增报价单自动编号与脏数据清理功能 3. 优化订单状态筛选与展示逻辑,新增closed状态支持 4. 完善操作日志管理,新增统计分析与详情查看功能 5. 优化报价单流程,调整提交审批逻辑与权限控制 6. 修复客户端订单查询SQL,优化关联查询逻辑 7. 新增报价单提交时自动更新提交时间的功能 --- .../bid/BizApprovalActionController.java | 9 +- .../bid/BizOperationLogController.java | 72 ++- .../bid/BizQuotationController.java | 15 +- .../ruoyi/system/mapper/SysOperLogMapper.java | 40 ++ .../system/mapper/bid/BizQuotationMapper.java | 4 + .../system/service/ISysOperLogService.java | 40 ++ .../service/bid/IBizQuotationService.java | 2 + .../bid/impl/BizQuotationServiceImpl.java | 33 + .../service/impl/SysOperLogServiceImpl.java | 30 + .../resources/mapper/bid/BizClientMapper.xml | 26 +- .../mapper/bid/BizDeliveryOrderMapper.xml | 2 +- .../mapper/bid/BizQuotationMapper.xml | 10 + .../mapper/system/SysOperLogMapper.xml | 106 +++- ruoyi-ui/src/api/bid/operation-log.js | 13 + ruoyi-ui/src/api/bid/quotation.js | 3 + ruoyi-ui/src/views/bid/approval/index.vue | 2 +- ruoyi-ui/src/views/bid/approval/pending.vue | 2 +- ruoyi-ui/src/views/bid/category/index.vue | 2 +- ruoyi-ui/src/views/bid/client/index.vue | 11 +- .../src/views/bid/clientDelivery/pending.vue | 2 +- .../src/views/bid/clientDelivery/signed.vue | 4 +- .../src/views/bid/clientDelivery/transit.vue | 2 +- ruoyi-ui/src/views/bid/comparison/index.vue | 2 +- ruoyi-ui/src/views/bid/objection/index.vue | 2 +- .../src/views/bid/operationLog/detail.vue | 180 ++++++ ruoyi-ui/src/views/bid/operationLog/index.vue | 571 ++++++++++++++---- ruoyi-ui/src/views/bid/order/history.vue | 2 +- ruoyi-ui/src/views/bid/order/timeline.vue | 42 +- ruoyi-ui/src/views/bid/quotation/index.vue | 118 ++-- ruoyi-ui/src/views/bid/report/cost.vue | 2 +- ruoyi-ui/src/views/bid/tenant/index.vue | 2 +- 31 files changed, 1146 insertions(+), 205 deletions(-) create mode 100644 ruoyi-ui/src/views/bid/operationLog/detail.vue diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/bid/BizApprovalActionController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/bid/BizApprovalActionController.java index 16065044..5a6d680b 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/bid/BizApprovalActionController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/bid/BizApprovalActionController.java @@ -7,6 +7,7 @@ import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.system.mapper.bid.BizApprovalPendingMapper; import com.ruoyi.system.service.bid.IBizApprovalActionService; +import com.ruoyi.system.service.bid.IBizQuotationService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -18,6 +19,7 @@ public class BizApprovalActionController extends BaseController { @Autowired private IBizApprovalActionService service; @Autowired private BizApprovalPendingMapper pendingMapper; + @Autowired private IBizQuotationService quotationService; @GetMapping("/pending") public AjaxResult pending() { @@ -27,7 +29,12 @@ public class BizApprovalActionController extends BaseController { @Log(title = "提交审批", businessType = BusinessType.UPDATE) @PostMapping("/submit/{bizType}/{id}") public AjaxResult submit(@PathVariable String bizType, @PathVariable Long id) { - return toAjax(service.submit(bizType, id, getUsername())); + int rows = service.submit(bizType, id, getUsername()); + // 报价单提交审批时同步更新 submit_time + if ("QUOTATION".equals(bizType) && rows > 0) { + quotationService.updateSubmitTime(id); + } + return toAjax(rows); } @Log(title = "审批通过", businessType = BusinessType.UPDATE) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/bid/BizOperationLogController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/bid/BizOperationLogController.java index 882a8455..08dc9723 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/bid/BizOperationLogController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/bid/BizOperationLogController.java @@ -1,10 +1,19 @@ package com.ruoyi.web.controller.bid; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; +import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.domain.SysOperLog; import com.ruoyi.system.service.ISysOperLogService; @@ -18,6 +27,67 @@ public class BizOperationLogController extends BaseController { @GetMapping("/list") public TableDataInfo list(SysOperLog log) { startPage(); - return getDataTable(operLogService.selectOperLogList(log)); + List list = operLogService.selectOperLogList(log); + return getDataTable(list); + } + + @PreAuthorize("@ss.hasPermi('bid:operationlog:query')") + @GetMapping("/{operId}") + public AjaxResult getInfo(@PathVariable("operId") Long operId) { + return success(operLogService.selectOperLogById(operId)); + } + + @PreAuthorize("@ss.hasPermi('bid:operationlog:remove')") + @Log(title = "操作日志", businessType = BusinessType.DELETE) + @DeleteMapping("/{operIds}") + public AjaxResult remove(@PathVariable Long[] operIds) { + return toAjax(operLogService.deleteOperLogByIds(operIds)); + } + + @PreAuthorize("@ss.hasPermi('bid:operationlog:remove')") + @Log(title = "操作日志", businessType = BusinessType.CLEAN) + @DeleteMapping("/clean") + public AjaxResult clean() { + operLogService.cleanOperLog(); + return success(); + } + + @PreAuthorize("@ss.hasPermi('bid:operationlog:export')") + @Log(title = "操作日志", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, SysOperLog operLog) { + List list = operLogService.selectOperLogList(operLog); + ExcelUtil util = new ExcelUtil(SysOperLog.class); + util.exportExcel(response, list, "操作日志"); + } + + @PreAuthorize("@ss.hasPermi('bid:operationlog:list')") + @GetMapping("/stats") + public AjaxResult stats(SysOperLog log) { + Map result = new HashMap<>(); + Map basic = operLogService.selectOperLogStats(log); + if (basic != null) { + result.put("basic", basic); + } else { + Map empty = new HashMap<>(); + empty.put("total_count", 0); + empty.put("error_count", 0); + empty.put("today_count", 0); + empty.put("user_count", 0); + empty.put("avg_cost_time", 0); + empty.put("module_count", 0); + result.put("basic", empty); + } + result.put("modules", operLogService.selectModuleStats(log)); + result.put("businessTypes", operLogService.selectBusinessTypeStats(log)); + result.put("trend", operLogService.selectDailyTrend(log)); + result.put("errors", operLogService.selectErrorStats(log)); + return success(result); + } + + @PreAuthorize("@ss.hasPermi('bid:operationlog:list')") + @GetMapping("/modules") + public AjaxResult getModules() { + return success(operLogService.selectModuleStats(new SysOperLog())); } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/bid/BizQuotationController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/bid/BizQuotationController.java index ebeef83c..f586f283 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/bid/BizQuotationController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/bid/BizQuotationController.java @@ -50,6 +50,8 @@ public class BizQuotationController extends BaseController { @PostMapping public AjaxResult add(@RequestBody BizQuotation q) { q.setCreateBy(getUsername()); + Long tenantId = getDeptId(); + q.setTenantId(tenantId != null ? tenantId : 1L); // 供应商新建报价时自动设置 supplier_id if (SecurityUtils.hasRole("supplier")) { BizSupplier supplier = supplierService.selectBizSupplierByUserId(SecurityUtils.getUserId()); @@ -86,13 +88,24 @@ public class BizQuotationController extends BaseController { return toAjax(service.rejectQuotation(quotationId)); } - @PreAuthorize("@ss.hasPermi('bid:quotation:remove') || @ss.hasRole('supplier')") + @PreAuthorize("@ss.hasPermi('bid:quotation:remove')") @Log(title = "报价单", businessType = BusinessType.DELETE) @DeleteMapping("/{quotationIds}") public AjaxResult remove(@PathVariable Long[] quotationIds) { return toAjax(service.deleteBizQuotationByIds(quotationIds)); } + /** + * 清理无编号的脏数据(历史遗留数据,quote_no IS NULL 或空字符串) + */ + @PreAuthorize("@ss.hasPermi('bid:quotation:remove')") + @Log(title = "报价单", businessType = BusinessType.CLEAN) + @DeleteMapping("/clean-null-quote") + public AjaxResult cleanNullQuote() { + int n = service.deleteBizQuotationByNoQuoteNo(); + return success(n > 0 ? "已清理 " + n + " 条无编号报价单" : "没有需要清理的无编号报价单"); + } + /** * 按供应商ID查询报价明细(展开为每行一条物料,支持搜索过滤) * 用于供应商管理页面的"报价历史"Tab diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOperLogMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOperLogMapper.java index 3bf69bb8..219e747d 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOperLogMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOperLogMapper.java @@ -45,4 +45,44 @@ public interface SysOperLogMapper * 清空操作日志 */ public void cleanOperLog(); + + /** + * 查询操作日志统计信息 + * + * @param operLog 操作日志对象(带筛选条件) + * @return 统计结果 + */ + public java.util.Map selectOperLogStats(SysOperLog operLog); + + /** + * 按模块统计操作日志 + * + * @param operLog 操作日志对象(带筛选条件) + * @return 各模块统计列表 + */ + public java.util.List> selectModuleStats(SysOperLog operLog); + + /** + * 按操作类型统计 + * + * @param operLog 操作日志对象(带筛选条件) + * @return 各操作类型统计列表 + */ + public java.util.List> selectBusinessTypeStats(SysOperLog operLog); + + /** + * 查询每日操作趋势 + * + * @param operLog 操作日志对象(带筛选条件) + * @return 每日趋势列表 + */ + public java.util.List> selectDailyTrend(SysOperLog operLog); + + /** + * 按模块统计异常日志 + * + * @param operLog 操作日志对象(带筛选条件) + * @return 各模块异常统计列表 + */ + public java.util.List> selectErrorStats(SysOperLog operLog); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/bid/BizQuotationMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/bid/BizQuotationMapper.java index be8342d0..0d85f97d 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/bid/BizQuotationMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/bid/BizQuotationMapper.java @@ -10,4 +10,8 @@ public interface BizQuotationMapper { int updateBizQuotation(BizQuotation record); int deleteBizQuotationById(Long id); int deleteBizQuotationByIds(Long[] ids); + /** 自动生成报价单号:Q-YYYYMM-NNN */ + String selectNextQuoteNo(); + /** 查询所有无编号报价单ID(用于清理脏数据) */ + List selectIdsByQuoteNoNull(); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOperLogService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOperLogService.java index 241f121a..4c1cab91 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOperLogService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOperLogService.java @@ -45,4 +45,44 @@ public interface ISysOperLogService * 清空操作日志 */ public void cleanOperLog(); + + /** + * 查询操作日志统计信息 + * + * @param operLog 操作日志对象(带筛选条件) + * @return 统计结果 + */ + public java.util.Map selectOperLogStats(SysOperLog operLog); + + /** + * 按模块统计 + * + * @param operLog 操作日志对象(带筛选条件) + * @return 各模块统计列表 + */ + public java.util.List> selectModuleStats(SysOperLog operLog); + + /** + * 按操作类型统计 + * + * @param operLog 操作日志对象(带筛选条件) + * @return 各类型统计列表 + */ + public java.util.List> selectBusinessTypeStats(SysOperLog operLog); + + /** + * 查询每日操作趋势 + * + * @param operLog 操作日志对象(带筛选条件) + * @return 每日趋势列表 + */ + public java.util.List> selectDailyTrend(SysOperLog operLog); + + /** + * 按模块统计异常日志 + * + * @param operLog 操作日志对象(带筛选条件) + * @return 各模块异常统计列表 + */ + public java.util.List> selectErrorStats(SysOperLog operLog); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/bid/IBizQuotationService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/bid/IBizQuotationService.java index 31012e39..16475ab8 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/bid/IBizQuotationService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/bid/IBizQuotationService.java @@ -14,5 +14,7 @@ public interface IBizQuotationService { int rejectQuotation(Long quotationId); int deleteBizQuotationById(Long id); int deleteBizQuotationByIds(Long[] ids); + int deleteBizQuotationByNoQuoteNo(); + void updateSubmitTime(Long quotationId); List selectItemsByQuotationId(Long quotationId); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/bid/impl/BizQuotationServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/bid/impl/BizQuotationServiceImpl.java index e4d3c2a4..a277ad37 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/bid/impl/BizQuotationServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/bid/impl/BizQuotationServiceImpl.java @@ -30,6 +30,12 @@ public class BizQuotationServiceImpl implements IBizQuotationService { @Override @Transactional public int insertBizQuotation(BizQuotation q) { + if (q.getQuoteNo() == null || q.getQuoteNo().isBlank()) { + q.setQuoteNo(mapper.selectNextQuoteNo()); + } + if (q.getStatus() == null) { + q.setStatus("draft"); + } int rows = mapper.insertBizQuotation(q); saveItems(q); return rows; @@ -38,6 +44,13 @@ public class BizQuotationServiceImpl implements IBizQuotationService { @Override @Transactional public int updateBizQuotation(BizQuotation q) { + // 对历史遗留的空编号记录,编辑时自动补号 + if (q.getQuoteNo() == null || q.getQuoteNo().isBlank()) { + BizQuotation existing = mapper.selectBizQuotationById(q.getQuotationId()); + if (existing != null && (existing.getQuoteNo() == null || existing.getQuoteNo().isBlank())) { + q.setQuoteNo(mapper.selectNextQuoteNo()); + } + } itemMapper.deleteByQuotationId(q.getQuotationId()); saveItems(q); return mapper.updateBizQuotation(q); @@ -48,6 +61,7 @@ public class BizQuotationServiceImpl implements IBizQuotationService { BigDecimal total = BigDecimal.ZERO; for (BizQuotationItem item : q.getItems()) { item.setQuotationId(q.getQuotationId()); + if (item.getRfqItemId() == null) item.setRfqItemId(0L); if (item.getUnitPrice() != null && item.getQuantity() != null) { item.setTotalPrice(item.getUnitPrice().multiply(item.getQuantity())); total = total.add(item.getTotalPrice()); @@ -85,12 +99,31 @@ public class BizQuotationServiceImpl implements IBizQuotationService { return mapper.updateBizQuotation(q); } + @Override + public void updateSubmitTime(Long quotationId) { + BizQuotation q = new BizQuotation(); + q.setQuotationId(quotationId); + q.setSubmitTime(new Date()); + mapper.updateBizQuotation(q); + } + @Override public int deleteBizQuotationById(Long id) { return mapper.deleteBizQuotationById(id); } @Override public int deleteBizQuotationByIds(Long[] ids) { return mapper.deleteBizQuotationByIds(ids); } + @Override + @Transactional + public int deleteBizQuotationByNoQuoteNo() { + List ids = mapper.selectIdsByQuoteNoNull(); + if (ids.isEmpty()) return 0; + for (Long id : ids) { + itemMapper.deleteByQuotationId(id); + } + return mapper.deleteBizQuotationByIds(ids.toArray(new Long[0])); + } + @Override public List selectItemsByQuotationId(Long quotationId) { return itemMapper.selectItemsByQuotationId(quotationId); diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java index 785ee1ed..8053a121 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java @@ -73,4 +73,34 @@ public class SysOperLogServiceImpl implements ISysOperLogService { operLogMapper.cleanOperLog(); } + + @Override + public java.util.Map selectOperLogStats(SysOperLog operLog) + { + return operLogMapper.selectOperLogStats(operLog); + } + + @Override + public java.util.List> selectModuleStats(SysOperLog operLog) + { + return operLogMapper.selectModuleStats(operLog); + } + + @Override + public java.util.List> selectBusinessTypeStats(SysOperLog operLog) + { + return operLogMapper.selectBusinessTypeStats(operLog); + } + + @Override + public java.util.List> selectDailyTrend(SysOperLog operLog) + { + return operLogMapper.selectDailyTrend(operLog); + } + + @Override + public java.util.List> selectErrorStats(SysOperLog operLog) + { + return operLogMapper.selectErrorStats(operLog); + } } diff --git a/ruoyi-system/src/main/resources/mapper/bid/BizClientMapper.xml b/ruoyi-system/src/main/resources/mapper/bid/BizClientMapper.xml index 41bce2da..45b40187 100644 --- a/ruoyi-system/src/main/resources/mapper/bid/BizClientMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/bid/BizClientMapper.xml @@ -76,19 +76,21 @@ diff --git a/ruoyi-system/src/main/resources/mapper/bid/BizDeliveryOrderMapper.xml b/ruoyi-system/src/main/resources/mapper/bid/BizDeliveryOrderMapper.xml index 16853147..a4ab800d 100644 --- a/ruoyi-system/src/main/resources/mapper/bid/BizDeliveryOrderMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/bid/BizDeliveryOrderMapper.xml @@ -41,7 +41,7 @@ AND d.type=#{query.type} AND d.do_no LIKE CONCAT('%',#{query.doNo},'%') AND d.supplier_id=#{query.supplierId} - AND d.delivery_status=#{query.deliveryStatus} + AND FIND_IN_SET(d.delivery_status, #{query.deliveryStatus}) AND s.supplier_name LIKE CONCAT('%',#{query.supplierName},'%') AND cl.client_name LIKE CONCAT('%',#{query.clientName},'%') diff --git a/ruoyi-system/src/main/resources/mapper/bid/BizQuotationMapper.xml b/ruoyi-system/src/main/resources/mapper/bid/BizQuotationMapper.xml index 8ed361ad..d54f9fd9 100644 --- a/ruoyi-system/src/main/resources/mapper/bid/BizQuotationMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/bid/BizQuotationMapper.xml @@ -66,11 +66,21 @@ status=#{status}, note=#{note}, submit_time=#{submitTime}, + quote_no=#{quoteNo}, update_time=NOW() WHERE quotation_id=#{quotationId} + + + + DELETE FROM biz_quotation WHERE quotation_id=#{id} DELETE FROM biz_quotation WHERE quotation_id IN diff --git a/ruoyi-system/src/main/resources/mapper/system/SysOperLogMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysOperLogMapper.xml index 0c3fb691..cc19b5f0 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysOperLogMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysOperLogMapper.xml @@ -82,6 +82,110 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" truncate table sys_oper_log - + + + + + + + + + + \ No newline at end of file diff --git a/ruoyi-ui/src/api/bid/operation-log.js b/ruoyi-ui/src/api/bid/operation-log.js index eeb0983d..9f7788d7 100644 --- a/ruoyi-ui/src/api/bid/operation-log.js +++ b/ruoyi-ui/src/api/bid/operation-log.js @@ -1,3 +1,16 @@ import request from '@/utils/request' const baseUrl = '/bid/operationLog' + export const listOperationLog = (params) => request({ url: baseUrl + '/list', method: 'get', params }) + +export const getOperationLog = (operId) => request({ url: baseUrl + '/' + operId, method: 'get' }) + +export const deleteOperationLog = (operIds) => request({ url: baseUrl + '/' + operIds, method: 'delete' }) + +export const cleanOperationLog = () => request({ url: baseUrl + '/clean', method: 'delete' }) + +export const exportOperationLog = (params) => request({ url: baseUrl + '/export', method: 'post', data: params, responseType: 'blob' }) + +export const getOperationLogStats = (params) => request({ url: baseUrl + '/stats', method: 'get', params }) + +export const getOperationLogModules = () => request({ url: baseUrl + '/modules', method: 'get' }) diff --git a/ruoyi-ui/src/api/bid/quotation.js b/ruoyi-ui/src/api/bid/quotation.js index 470f0205..450b65c0 100644 --- a/ruoyi-ui/src/api/bid/quotation.js +++ b/ruoyi-ui/src/api/bid/quotation.js @@ -9,6 +9,9 @@ export const acceptQuotation = (id) => request({ url: baseUrl + '/accept/' + id, export const rejectQuotation = (id) => request({ url: baseUrl + '/reject/' + id, method: 'put' }) export const delQuotation = (ids) => request({ url: baseUrl + '/' + ids, method: 'delete' }) +// 清理无报价单号的脏数据(admin用) +export const cleanNullQuoteNo = () => request({ url: baseUrl + '/clean-null-quote', method: 'delete' }) + // 按供应商ID查询报价明细(展开为每行一条物料,支持搜索过滤参数:materialName, quoteNo, quoteStatus, beginTime, endTime) export const getSupplierQuoteItems = (params) => { const { supplierId, ...query } = params; diff --git a/ruoyi-ui/src/views/bid/approval/index.vue b/ruoyi-ui/src/views/bid/approval/index.vue index 8429f3cb..931928bc 100644 --- a/ruoyi-ui/src/views/bid/approval/index.vue +++ b/ruoyi-ui/src/views/bid/approval/index.vue @@ -47,7 +47,7 @@ - +