diff --git a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/controller/admin/purorder/PurOrderController.java b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/controller/admin/purorder/PurOrderController.java index 4597ca1..5ca0f94 100644 --- a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/controller/admin/purorder/PurOrderController.java +++ b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/controller/admin/purorder/PurOrderController.java @@ -83,12 +83,20 @@ public class PurOrderController { @PreAuthorize("@ss.hasPermission('tsc:pur-order:export')") @OperateLog(type = EXPORT) public void exportPurOrderExcel(@Valid PurOrderPageReqVO pageReqVO, - HttpServletResponse response) throws IOException { + HttpServletResponse response) throws IOException { pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); List list = purOrderService.getPurOrderPage(pageReqVO).getList(); // 导出 Excel ExcelUtils.write(response, "采购订单主.xls", "数据", PurOrderRespVO.class, - BeanUtils.toBean(list, PurOrderRespVO.class)); + BeanUtils.toBean(list, PurOrderRespVO.class)); } + // 审批接口,通过,驳回 审计 + @PutMapping("/audit") + @Operation(summary = "审批采购订单主") + @PreAuthorize("@ss.hasPermission('tsc:pur-order:approve')") + public CommonResult approvePurOrder(@RequestBody PurOrderSaveReqVO approveReqVO) { + purOrderService.approvePurOrder(approveReqVO.getIds(), approveReqVO.getPurStatus()); + return success(true); + } } diff --git a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/controller/admin/purorder/vo/PurOrderSaveReqVO.java b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/controller/admin/purorder/vo/PurOrderSaveReqVO.java index 1fc0105..3ed92fe 100644 --- a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/controller/admin/purorder/vo/PurOrderSaveReqVO.java +++ b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/controller/admin/purorder/vo/PurOrderSaveReqVO.java @@ -19,6 +19,8 @@ public class PurOrderSaveReqVO { @Schema(description = "自增字段", requiredMode = Schema.RequiredMode.REQUIRED, example = "5253") private Integer id; + private List ids; + @Schema(description = "采购订单号(CGDD+年份+月份+3位流水号)") private String purOrdNo; diff --git a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/purorder/PurOrderService.java b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/purorder/PurOrderService.java index 2de4baa..8fa1675 100644 --- a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/purorder/PurOrderService.java +++ b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/purorder/PurOrderService.java @@ -6,6 +6,7 @@ import com.ningxia.yunxi.chemmes.module.biz.controller.admin.purorder.vo.PurOrde import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.purorder.PurOrderDO; import javax.validation.Valid; +import java.util.List; /** * 采购订单主 Service 接口 @@ -60,4 +61,5 @@ public interface PurOrderService { */ PurOrderSaveReqVO getPurOrderWithItems(Integer id); + void approvePurOrder(List ids, String approveResult); } diff --git a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/purorder/PurOrderServiceImpl.java b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/purorder/PurOrderServiceImpl.java index 7ea6d28..d5f3be0 100644 --- a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/purorder/PurOrderServiceImpl.java +++ b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/purorder/PurOrderServiceImpl.java @@ -53,6 +53,10 @@ public class PurOrderServiceImpl implements PurOrderService { validatePurOrderExists(updateReqVO.getId()); // 更新 PurOrderDO updateObj = BeanUtils.toBean(updateReqVO, PurOrderDO.class); + // 已驳回 + if ("4".equals(updateObj.getPurStatus())) { + updateObj.setPurStatus("1"); + } purOrderMapper.updateById(updateObj); updatePurOrderItemList(updateReqVO.getId(), updateReqVO.getItemList()); @@ -77,7 +81,13 @@ public class PurOrderServiceImpl implements PurOrderService { @Override public void deletePurOrder(Integer id) { // 校验存在 - validatePurOrderExists(id); + PurOrderDO purOrderDO = purOrderMapper.selectById(id); + if (purOrderDO == null) { + throw exception("采购订单不存在,请刷新页面!"); + } + if ("2".equals(purOrderDO.getPurStatus()) || "3".equals(purOrderDO.getPurStatus())) { + throw exception("该采购单已确认或审批不允许删除,请刷新界面!"); + } // 删除 purOrderMapper.deleteById(id); } @@ -135,4 +145,21 @@ public class PurOrderServiceImpl implements PurOrderService { } + @Override + @Transactional(rollbackFor = Exception.class) + public void approvePurOrder(List ids, String approveResult) { + for (Integer id : ids) { + PurOrderDO purOrderDO = purOrderMapper.selectById(id); + if (purOrderDO == null) { + throw exception("采购订单不存在,请刷新页面!"); + } + if (!"2".equals(purOrderDO.getPurStatus())) { + throw exception("采购订单状态不等于已确认,请刷新界面!"); + } + purOrderDO.setPurStatus(approveResult); + purOrderMapper.updateById(purOrderDO); + } + + } + } diff --git a/mes-ui/mes-ui-admin-vue3/src/api/biz/purorder/index.ts b/mes-ui/mes-ui-admin-vue3/src/api/biz/purorder/index.ts index 91417f0..31efdf2 100644 --- a/mes-ui/mes-ui-admin-vue3/src/api/biz/purorder/index.ts +++ b/mes-ui/mes-ui-admin-vue3/src/api/biz/purorder/index.ts @@ -51,3 +51,8 @@ export const deletePurOrder = async (id: number) => { export const exportPurOrder = async (params) => { return await request.download({ url: `/tsc/pur-order/export-excel`, params }) } + +// 审批采购订单主 +export const auditPurOrder = async (ids: number[], purStatus: string) => { + return await request.put({ url: `/tsc/pur-order/audit`, data: { ids, purStatus } }) +} diff --git a/mes-ui/mes-ui-admin-vue3/src/types/auto-components.d.ts b/mes-ui/mes-ui-admin-vue3/src/types/auto-components.d.ts index d4d55e5..ec8df3d 100644 --- a/mes-ui/mes-ui-admin-vue3/src/types/auto-components.d.ts +++ b/mes-ui/mes-ui-admin-vue3/src/types/auto-components.d.ts @@ -11,6 +11,7 @@ declare module 'vue' { AppLinkSelectDialog: typeof import('./../components/AppLinkInput/AppLinkSelectDialog.vue')['default'] Backtop: typeof import('./../components/Backtop/src/Backtop.vue')['default'] CardTitle: typeof import('./../components/Card/src/CardTitle.vue')['default'] + 'CheckstyleIdea.xml': typeof import('./../../.idea/checkstyle-idea.xml.tmp')['default'] ColorInput: typeof import('./../components/ColorInput/index.vue')['default'] ComponentContainer: typeof import('./../components/DiyEditor/components/ComponentContainer.vue')['default'] ComponentContainerProperty: typeof import('./../components/DiyEditor/components/ComponentContainerProperty.vue')['default'] diff --git a/mes-ui/mes-ui-admin-vue3/src/views/biz/purorder/PurOrderDetail.vue b/mes-ui/mes-ui-admin-vue3/src/views/biz/purorder/PurOrderDetail.vue index c390686..642c91e 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/biz/purorder/PurOrderDetail.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/biz/purorder/PurOrderDetail.vue @@ -1,5 +1,5 @@ - - - - - - - + + + + + + + + + + + - + + - - @@ -135,14 +137,7 @@ const open = async (id: number) => { try { const data = await PurOrderApi.getPurOrder(id) Object.assign(formData, data) - - // 加载子表数据 - const itemData = await PurOrderItemApi.getPurOrderItemPage({ - pageNo: 1, - pageSize: 100, - purId: id - }) - itemList.value = (itemData.list || []).map((item: any) => ({ + itemList.value = (data.itemList || []).map((item: any) => ({ materialCode: item.materialCode, materialName: item.materialName, spec: item.spec, diff --git a/mes-ui/mes-ui-admin-vue3/src/views/biz/purorder/PurOrderForm.vue b/mes-ui/mes-ui-admin-vue3/src/views/biz/purorder/PurOrderForm.vue index 00911a1..fc7b927 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/biz/purorder/PurOrderForm.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/biz/purorder/PurOrderForm.vue @@ -252,6 +252,7 @@ import * as UserApi from '@/api/system/user' import { handleTree } from '@/utils/tree' import MoneyInput from '../components/MoneyInput.vue' import { getDictOptions } from '@/utils/dict' +import * as DeptApi from '@/api/system/dept' const { t } = useI18n() const message = useMessage() @@ -266,10 +267,10 @@ const supplierOptions = ref([]) const supplierLoading = ref(false) // 部门相关 -const deptList = ref([]) +const deptList = ref([]) // 采购人员相关 -const userList = ref([]) +const userList = ref([]) const userSelectLoading = ref(false) // 物料选择弹窗 @@ -308,9 +309,11 @@ const itemList = ref([]) const formRules = reactive({ purDate: [{ required: true, message: '订单日期不能为空', trigger: 'change' }], billType: [{ required: true, message: '单据类型不能为空', trigger: 'change' }], + applyType: [{ required: true, message: '申请类型不能为空', trigger: 'change' }], supplierId: [{ required: true, message: '供应商不能为空', trigger: 'change' }], purDeptId: [{ required: true, message: '采购部门不能为空', trigger: 'change' }], - purEmpId: [{ required: true, message: '采购人员不能为空', trigger: 'change' }], + purStatus: [{ required: true, message: '单据状态不能为空', trigger: 'change' }], + acceptMeth: [{ required: true, message: '验收方式不能为空', trigger: 'change' }], }) const formRef = ref() diff --git a/mes-ui/mes-ui-admin-vue3/src/views/biz/purorder/index.vue b/mes-ui/mes-ui-admin-vue3/src/views/biz/purorder/index.vue index a1936a6..b032ba4 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/biz/purorder/index.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/biz/purorder/index.vue @@ -97,16 +97,16 @@ @selection-change="handleSelectionChange" > - - + + - - + + - + - + - + - - - - + + + + - - + + @@ -338,6 +338,7 @@ const handleDelete = async (id: number) => { } } + /** 审批操作 */ const handleAudit = async () => { if (selectedIds.value.length === 0) { @@ -347,6 +348,7 @@ const handleAudit = async () => { try { await message.confirm('确认审批选中的采购订单吗?') // 这里调用审批API + await PurOrderApi.auditPurOrder(selectedIds.value, '3') message.success('审批成功') getList() } catch (error) { @@ -363,6 +365,7 @@ const handleReject = async () => { try { await message.confirm('确认驳回选中的采购订单吗?') // 这里调用驳回API + await PurOrderApi.auditPurOrder(selectedIds.value, '4') message.success('驳回成功') getList() } catch (error) { diff --git a/mes-ui/mes-ui-admin-vue3/src/views/biz/tsoorder/OrderForm.vue b/mes-ui/mes-ui-admin-vue3/src/views/biz/tsoorder/OrderForm.vue index c9470bd..feaaf30 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/biz/tsoorder/OrderForm.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/biz/tsoorder/OrderForm.vue @@ -492,20 +492,6 @@ const formRules = reactive({ const emit = defineEmits(['success', 'close']) -/** 详情偶发多包一层:根上无 items,但 data.items 为数组时取内层 */ -const unwrapOrderDetail = (raw: Record) => { - if (!raw || typeof raw !== 'object') { - return raw - } - if (Array.isArray(raw.items)) { - return raw - } - const inner = raw.data - if (inner && typeof inner === 'object' && !Array.isArray(inner) && Array.isArray(inner.items)) { - return inner - } - return raw -} /** 获取业务部门列表 */ const loadDeptList = async () => {