diff --git a/src/hooks/smProcessFormAction.ts b/src/hooks/smProcessFormAction.ts index c532850..0257964 100644 --- a/src/hooks/smProcessFormAction.ts +++ b/src/hooks/smProcessFormAction.ts @@ -25,7 +25,7 @@ export function useSmProcessFormAction() { } // 提交数据 成功返回 true 失败返回 false - const submitData = async (baseDataForm: any, vxeTableItems: Ref, loading: Ref, putObj: any, addObj: any) => { + const submitData = async (baseDataForm: any, vxeTableItems: any, loading: Ref, putObj: any, addObj: any) => { try { loading.value = true diff --git a/src/views/supermarketerp/purchaseManagement/smErpCgInventory/form.vue b/src/views/supermarketerp/purchaseManagement/smErpCgInventory/form.vue index cbd45aa..b67ad66 100644 --- a/src/views/supermarketerp/purchaseManagement/smErpCgInventory/form.vue +++ b/src/views/supermarketerp/purchaseManagement/smErpCgInventory/form.vue @@ -1,7 +1,7 @@ @@ -194,10 +189,9 @@ import { ref, reactive, computed, onMounted } from "vue" import { getObj, addObj, putObj } from "/@/api/supermarketerp/smErpInventoryRecords" import { getPlanCode, getErpSpuSimpleAll, getCgddPage } from "/@/api/supermarketerp/common" -import { VxeTableEvents, VxeTablePropTypes, type VxeTableInstance } from "vxe-table" +import { VxeTablePropTypes, type VxeTableInstance } from "vxe-table" import { formatDate } from "/@/utils/formatTime" -import { Search } from "@element-plus/icons-vue" -import LinkCodeDialog from "/@/views/supermarketerp/components/link-code-dialog.vue" +// import LinkCodeDialog from "/@/views/supermarketerp/components/link-code-dialog.vue" import { displayPrice, storePrice } from "/@/utils/formatMoney" import { tablePrint } from "../../supermarketUtils" import { useSmProcessFormAction } from "/@/hooks/smProcessFormAction" @@ -206,220 +200,167 @@ const SelectDialog = defineAsyncComponent(() => import("/@/views/supermarketerp/ const props = withDefaults( defineProps<{ - formId: string | undefined + formId: string disabled: boolean }>(), { - formId: undefined, - disabled: true, + formId: "", + disabled: false, }, ) const emit = defineEmits(["close"]) -const loading = ref(false) // 采购计划加载 +const loading = ref(false) const disabled = ref(false) -const erpSpuSelectDialogRef = ref() // 商品选择对话框ref -const linkCodeDialogRef = ref() // 关联采购申请单对话框ref -const baseDataFormRef = ref() // 基本数据表单ref -const editableTableRef = ref>() // 可编辑表格ref -const baseDataInfoRef = ref() // 基本信息ref -// 基本信息表单数据 +const erpSpuSelectDialogRef = ref() +// const linkCodeDialogRef = ref() +const baseFormRef = ref() +const vxeTableRef = ref>() +const baseInfoRef = ref() const baseDataForm = reactive({ id: "", inventoryCode: "", inventoryDate: formatDate(new Date(), "YYYY-mm-dd"), handlerUserId: "", - checkStatus: "", - checkUserId: "", - checkTime: "", supplierId: "", remark: "", inventoryType: "3", orderType: "1", - totalAmount: "", -}) -const state = reactive<{ - editableTableData: any[] - erpSpuItemsMemo: any[] - selectedRowsErpSpuIds: string[] - erpSpuSimpleAll: any -}>({ - editableTableData: [], // 可编辑表格数据 - erpSpuItemsMemo: [], // 请求到的可编辑表格商品数据的缓存 - selectedRowsErpSpuIds: [], // 可编辑表格已选行的ErpSpuId - erpSpuSimpleAll: [], // 简要商品列表 }) +const vxeTableData = ref([]) +const erpSpuSimpleAll = ref([]) // 基本信息表单校验规则 const dataRules = ref({ - inventoryCode: [{ required: true, message: "出入库记录表编号不能为空", trigger: "blur" }], - inventoryDate: [{ required: true, message: "出入库记录表单据日期不能为空", trigger: "blur" }], - handlerUserId: [{ required: true, message: "经办人不能为空", trigger: "blur" }], + inventoryCode: [{ required: true, message: "编号不能为空", trigger: "blur" }], + inventoryDate: [{ required: true, message: "单据日期不能为空", trigger: "blur" }], supplierId: [{ required: true, message: "货商不能为空", trigger: "blur" }], }) // 可编辑表格校验规则 const validRules = ref>({ - unitObj: [{ required: true, message: "必须选择" }], + selectedUnitObj: [{ required: true, message: "必须选择" }], quantity: [{ required: true, type: "number", min: 1, message: "必需大于等于0" }], }) +onMounted(() => { + getInitData() +}) + // 初始化数据 const getInitData = async () => { - baseDataForm.id = undefined + baseDataForm.id = "" const id = props.formId disabled.value = props.disabled if (id) { loading.value = true // 获取清单数据 - const [cgPlanData] = await Promise.allSettled([getObj(id)]) - .then((results) => results.map((result) => (result.status === "fulfilled" ? result.value : null))) - .finally(() => (loading.value = false)) + const [cgPlanData] = await Promise.allSettled([getObj(id)]).then((results) => + results.map((result) => (result.status === "fulfilled" ? result.value : null)), + ) - if (cgPlanData && cgPlanData.code === 0) { + if (cgPlanData?.code === 0) { Object.assign(baseDataForm, cgPlanData.data) - state.editableTableData = cgPlanData.data.items.map((item: any) => { - const unitObj = item.erpUnitVos.find((unit: any) => unit.id === item.unitId) + vxeTableData.value = cgPlanData.data.items.map((item: any) => { + const selectedUnitObj = item.erpUnitVos.find((unit: any) => unit.id === item.unitId) return { ...item, - unitObj: { ...unitObj, realPrice: displayPrice(item?.realPrice, "") || 0 }, - } - }) - state.erpSpuItemsMemo = cgPlanData.data.items.map((item: any) => { - const unitObj = item.erpUnitVos.find((unit: any) => unit.id === item.unitId) - return { - ...item, - unitObj: { ...unitObj, realPrice: displayPrice(item?.realPrice, "") || 0 }, + selectedUnitObj: { ...selectedUnitObj, realPrice: displayPrice(item?.realPrice, "") || 0 }, } }) } } else { loading.value = true // 获取采购入库编号 - const [planCode] = await Promise.allSettled([getPlanCode({ type: 3 })]) - .then((results) => results.map((result) => (result.status === "fulfilled" ? result.value : null))) - .finally(() => (loading.value = false)) + const [planCode] = await Promise.allSettled([getPlanCode({ type: 3 })]).then((results) => + results.map((result) => (result.status === "fulfilled" ? result.value : null)), + ) planCode && planCode.code === 0 && (baseDataForm.inventoryCode = planCode.data) } - loading.value = true // 获取简要商品列表 - const [erpSpuSimpleAll] = await Promise.allSettled([getErpSpuSimpleAll()]) + const [erpSpuSimpleAllData] = await Promise.allSettled([getErpSpuSimpleAll()]) .then((results) => results.map((result) => (result.status === "fulfilled" ? result.value : null))) .finally(() => (loading.value = false)) - erpSpuSimpleAll && erpSpuSimpleAll.code === 0 && (state.erpSpuSimpleAll = erpSpuSimpleAll.data) -} - -// 点击关联采购申请编号 -const handleClickLinkCode = () => linkCodeDialogRef.value.openLinkCodeDialog(2) - -// 获取选择的采购申请 -const getSelectedLinkCode = (selectionRows: any) => { - console.log("被选择的关联数据", selectionRows) - - baseDataForm.linkCode = selectionRows.code - state.editableTableData = selectionRows.items.map((item: any) => ({ - ...item, - unitObj: {}, - realPrice: displayPrice(item.purchasePrice, ""), - })) - state.erpSpuItemsMemo = selectionRows.items.map((item: any) => ({ - ...item, - unitObj: {}, - realPrice: displayPrice(item.purchasePrice, ""), - })) -} - -// 删除选中的行 -const removeSelectRowEvent = () => { - const $table = editableTableRef.value - if ($table) { - const selectRecords = $table.getCheckboxRecords() - if (selectRecords.length > 0) { - state.editableTableData = state.editableTableData.filter((item) => !selectRecords.some((row) => row.erpSpuId === item.erpSpuId)) - } - } -} - -// 可编辑表格行勾选 -const selectChangeEvent: VxeTableEvents.CheckboxChange = ({ checked }) => { - const $table = editableTableRef.value - if ($table) { - const records = $table.getCheckboxRecords() - console.log(checked ? "勾选事件" : "取消事件", records) - state.selectedRowsErpSpuIds = records.map((item) => item.erpSpuId) - } + erpSpuSimpleAllData && erpSpuSimpleAllData.code === 0 && (erpSpuSimpleAll.value = erpSpuSimpleAllData.data) } // 点击商品选择 const handleClickSpuSelect = () => erpSpuSelectDialogRef.value.openDialog() +// 点击关联采购申请编号 +// const handleClickLinkCode = () => linkCodeDialogRef.value.openLinkCodeDialog(2) + +// 获取选择的采购申请 +// const getSelectedLinkCode = (selectionRows: any) => { +// console.log("被选择的关联数据", selectionRows) + +// baseDataForm.linkCode = selectionRows.code +// vxeTableData.value = selectionRows.items.map((item: any) => ({ +// ...item, +// selectedUnitObj: {}, +// realPrice: displayPrice(item.purchasePrice, ""), +// })) +// } + // 获取被选择的商品行 const getSelectedRows = (selectionRows: any) => { console.log("被选择的商品行", selectionRows) // 筛选新勾选的项 const addedItems = selectionRows - .filter((item: any) => !state.editableTableData.some((editableTableItem: any) => editableTableItem.erpSpuId === item.erpSpuId)) + .filter((item: any) => !vxeTableData.value.some((vxeTableItem: any) => vxeTableItem.erpSpuId === item.erpSpuId)) .map((addItem: any) => { - const index = state.erpSpuItemsMemo.findIndex((item: any) => item.erpSpuId === addItem.erpSpuId) - if (index !== -1) return state.erpSpuItemsMemo[index] + // const index = state.erpSpuItemsMemo.findIndex((item: any) => item.erpSpuId === addItem.erpSpuId) + // if (index !== -1) return state.erpSpuItemsMemo[index] return { ...addItem, erpUnitVos: addItem.erpUnitVos.map((item: any) => ({ ...item, realPrice: displayPrice(item.purchasePrice, "") })), - unitObj: addItem.erpUnitVos[0], + selectedUnitObj: addItem.erpUnitVos[0], + unitId: addItem.erpUnitVos[0].id, + quantity: 1, isNew: true, } }) // 仅添加新勾选的项 - state.editableTableData = [...state.editableTableData, ...addedItems] + vxeTableData.value.push(...addedItems) // 筛选取消勾选的项 - const removedItems = state.editableTableData.filter( - (item: any) => !selectionRows.some((selectedItem: any) => selectedItem.erpSpuId === item.erpSpuId), - ) + // const removedItems = vxeTableData.value.filter( + // (item: any) => !selectionRows.some((selectedItem: any) => selectedItem.erpSpuId === item.erpSpuId), + // ) // 仅移除取消勾选的项 - state.editableTableData = state.editableTableData.filter( - (item: any) => !removedItems.some((removeItem: any) => removeItem.erpSpuId === item.erpSpuId), - ) - // state.editableTableData.push(item) - // nextTick(() => { - // const $table = editableTableRef.value - // if ($table) { - // $table.setRow(item) - // } - // }) - console.log("state.editableTableData", state.editableTableData) + // vxeTableData.value = vxeTableData.value.filter( + // (item: any) => !removedItems.some((removeItem: any) => removeItem.erpSpuId === item.erpSpuId), + // ) + console.log("vxeTableData.value", vxeTableData.value) } -// 整理数据 -const cgPlanSpuItems = computed(() => { - return state.editableTableData.map((item: any) => { - if (item.erpUnitVos) { - const unitObj = item.unitObj - return { - id: item.isNew ? undefined : item.id, - erpSpuId: item.erpSpuId, - quantity: item.quantity, - unitPrice: unitObj.purchasePrice ? Number(unitObj?.purchasePrice) : 0, - realPrice: unitObj.realPrice ? storePrice(unitObj?.realPrice) : 0, - totalAmount: storePrice(Number(unitObj?.realPrice || 0) * item.quantity), - remark: item.remark, - unitId: unitObj.id, - orderType: baseDataForm.orderType, - } - } else { - return { - id: item.isNew ? undefined : item.id, - erpSpuId: item.erpSpuId, - quantity: item.quantity, - unitPrice: item.purchasePrice ? Number(item.purchasePrice) : 0, - realPrice: item.realPrice ? storePrice(item.realPrice) : 0, - totalAmount: item?.realPrice && item.quantity ? storePrice(Number(item.realPrice) * item.quantity) : 0, - remark: item.remark, - unitId: item.unitId, - orderType: baseDataForm.orderType, - } +// 删除选中的行 +const removeRow = () => { + const $table = vxeTableRef.value + if ($table) { + const selectRecords = $table.getCheckboxRecords() + if (selectRecords.length > 0) { + vxeTableData.value = vxeTableData.value.filter((item: any) => !selectRecords.some((row) => row.erpSpuId === item.erpSpuId)) + } + } +} + +// 整理table数据 +const settledTableItems = computed(() => { + return vxeTableData.value.map((item: any) => { + const selectedUnitObj = item.selectedUnitObj + return { + id: item.isNew ? "" : item.id, + erpSpuId: item.erpSpuId, + quantity: item.quantity, + unitPrice: selectedUnitObj.purchasePrice ? Number(selectedUnitObj?.purchasePrice) : 0, + realPrice: selectedUnitObj.realPrice ? storePrice(selectedUnitObj?.realPrice) : 0, + totalAmount: storePrice(Number(selectedUnitObj?.realPrice || 0) * item.quantity), + remark: item.remark, + unitId: selectedUnitObj.id, + orderType: baseDataForm.orderType, } }) }) @@ -429,40 +370,34 @@ const { formValidate, submitData } = useSmProcessFormAction() // 点击继续添加 const onContinueAdd = async () => { console.log("baseDataForm", baseDataForm) - console.log("state.editableTableData", state.editableTableData) - ;(await formValidate(baseDataFormRef, editableTableRef, state.editableTableData.length)) && - (await submitData(baseDataForm, cgPlanSpuItems, loading, putObj, addObj)) && + console.log("vxeTableData.value", vxeTableData.value) + ;(await formValidate(baseFormRef, vxeTableRef, vxeTableData.value.length)) && + (await submitData(baseDataForm, settledTableItems.value, loading, putObj, addObj)) && clearData() } // 点击保存 const onSave = async () => { console.log("baseDataForm", baseDataForm) - console.log("state.editableTableData", state.editableTableData) - ;(await formValidate(baseDataFormRef, editableTableRef, state.editableTableData.length)) && - (await submitData(baseDataForm, cgPlanSpuItems, loading, putObj, addObj)) && + console.log("vxeTableData.value", vxeTableData.value) + ;(await formValidate(baseFormRef, vxeTableRef, vxeTableData.value.length)) && + (await submitData(baseDataForm, settledTableItems.value, loading, putObj, addObj)) && clearData() && emit("close") } -// 清空填写的数据 返回 true +// 清空填写的数据 const clearData = () => { for (const key in baseDataForm) { if (key === "id" || key === "inventoryCode" || key === "inventoryDate" || key === "inventoryType" || key === "orderType") continue baseDataForm[key] = "" } - state.editableTableData = [] - state.erpSpuItemsMemo = [] - state.selectedRowsErpSpuIds = [] + vxeTableData.value = [] return true } // 点击打印 -const printEvent = () => { - tablePrint(editableTableRef.value, baseDataInfoRef.value, state.editableTableData, 23, "采购入库") -} - -onMounted(() => { - getInitData() -}) +// const printEvent = () => { +// tablePrint(vxeTableRef.value, baseInfoRef.value, vxeTableData.value, 23, "采购入库") +// } diff --git a/src/views/supermarketerp/purchaseManagement/smErpCgInventory/index.vue b/src/views/supermarketerp/purchaseManagement/smErpCgInventory/index.vue index 4df8ebf..b65b162 100644 --- a/src/views/supermarketerp/purchaseManagement/smErpCgInventory/index.vue +++ b/src/views/supermarketerp/purchaseManagement/smErpCgInventory/index.vue @@ -1,6 +1,6 @@ @@ -130,35 +101,63 @@ import { BasicTableProps, useTable } from "/@/hooks/table" import { fetchList, delObjs } from "/@/api/supermarketerp/smErpInventoryRecords" import { useMessage, useMessageBox } from "/@/hooks/message" -import { useDict } from "/@/hooks/dict" -import ProcessDrawer from "/@/components/processDrawer/index.vue" import { displayPrice } from "/@/utils/formatMoney" -import { useSmProcessTableAction } from "/@/hooks/smProcessTableAction" const SmForm = defineAsyncComponent(() => import("./form.vue")) -const { check_status } = useDict("check_status") -// 搜索变量 const queryRef = ref() const showSearch = ref(true) -// 多选变量 const selectObjs = ref([]) as any const multiple = ref(true) -const processFormState = reactive<{ formId: string | undefined; formDisabled: boolean; showForm: boolean }>({ - formId: undefined, - formDisabled: true, - showForm: false, -}) -const processDrawerRef = ref | null>(null) - const state: BasicTableProps = reactive({ queryForm: { inventoryType: "3", }, pageList: fetchList, }) +const showForm = ref(false) +const formDisabled = ref(false) +const formId = ref("") + +// 新增 +const create = () => { + formDisabled.value = false + formId.value = "" + showForm.value = true +} + +// 删除操作 +const handleDelete = async (ids: string[]) => { + try { + await useMessageBox().confirm("此操作将永久删除") + } catch { + return + } + + try { + await delObjs(ids) + getDataList() + useMessage().success("删除成功") + } catch (err: any) { + useMessage().error(err.msg) + } +} + +// 编辑 +const edit = (row: any) => { + if (!row.id) return useMessage().warning("清单id不存在") + formId.value = row.id + showForm.value = true +} + +// 表单关闭 +const formClose = () => { + showForm.value = false + formId.value = "" + formDisabled.value = false + getDataList() +} -// table hook const { getDataList, currentChangeHandle, sizeChangeHandle, sortChangeHandle, downBlobFile, tableStyle } = useTable(state) // 清空搜索条件 @@ -180,28 +179,4 @@ const selectionChangHandle = (objs: { id: string }[]) => { selectObjs.value = objs.map(({ id }) => id) multiple.value = !objs.length } - -const { create, edit, close } = useSmProcessTableAction(processFormState) - -const formClose = () => { - close() - getDataList() -} - -// 删除操作 -const handleDelete = async (ids: string[]) => { - try { - await useMessageBox().confirm("此操作将永久删除") - } catch { - return - } - - try { - await delObjs(ids) - getDataList() - useMessage().success("删除成功") - } catch (err: any) { - useMessage().error(err.msg) - } -} diff --git a/src/views/supermarketerp/retailManagement/smErpRetailDelivery/form.vue b/src/views/supermarketerp/retailManagement/smErpRetailDelivery/form.vue index 1f8f4c7..485baa8 100644 --- a/src/views/supermarketerp/retailManagement/smErpRetailDelivery/form.vue +++ b/src/views/supermarketerp/retailManagement/smErpRetailDelivery/form.vue @@ -220,7 +220,6 @@ const baseDataForm = reactive({ receiveAmount: 0, }) const vxeTableData = ref([]) -const vxeTableDataMemo = ref([]) const erpSpuSimpleAll = ref([]) const dataRules = ref({ @@ -252,7 +251,6 @@ const getInitData = async () => { if (cgPlanData?.code === 0) { Object.assign(baseDataForm, cgPlanData.data) vxeTableData.value = cgPlanData.data.items - vxeTableDataMemo.value = cgPlanData.data.items } } else { loading.value = true @@ -286,16 +284,16 @@ const getSelectedRows = (selectionRows: any) => { return { ...addItem, unitId: addItem.erpUnitVos[0].id, quantity: 1, isNew: true } }) // 仅添加新勾选的项 - vxeTableData.value = [...vxeTableData.value, ...addedItems] + vxeTableData.value.push(...addedItems) // 筛选取消勾选的项 - const removedItems = vxeTableData.value.filter( - (item: any) => !selectionRows.some((selectedItem: any) => selectedItem.erpSpuId === item.erpSpuId), - ) + // const removedItems = vxeTableData.value.filter( + // (item: any) => !selectionRows.some((selectedItem: any) => selectedItem.erpSpuId === item.erpSpuId), + // ) // 仅移除取消勾选的项 - vxeTableData.value = vxeTableData.value.filter( - (item: any) => !removedItems.some((removeItem: any) => removeItem.erpSpuId === item.erpSpuId), - ) + // vxeTableData.value = vxeTableData.value.filter( + // (item: any) => !removedItems.some((removeItem: any) => removeItem.erpSpuId === item.erpSpuId), + // ) console.log("vxeTableData.value", vxeTableData.value) } @@ -358,7 +356,6 @@ const clearData = () => { baseDataForm[key] = "" } vxeTableData.value = [] - vxeTableDataMemo.value = [] return true } diff --git a/src/views/supermarketerp/supermarketSpu/index.vue b/src/views/supermarketerp/supermarketSpu/index.vue index 1c81cfc..147006f 100644 --- a/src/views/supermarketerp/supermarketSpu/index.vue +++ b/src/views/supermarketerp/supermarketSpu/index.vue @@ -3,14 +3,19 @@
+ + + + + + + + - - - - - + + 查询 @@ -103,6 +108,9 @@ + + +