This commit is contained in:
weiwei committed 2025-05-13 15:46:55 +08:00
1 parent 150b493080
commit a4d7b72b86
4 files changed
+62 -48

No files matched your search

+1 -1
View File
@@ -3,7 +3,7 @@ import request from "/@/utils/request"
// 获取食堂业务流水编号
export function getCanteenSequence(params?: { type: string | number }) {
return request({
url: "/canteen/common/getSequence",
url: "/canteen/canteen/common/getSequence",
method: "get",
params,
})
@@ -12,9 +12,6 @@
<el-form-item label="经办人" prop="handlerUserId">
<SelectHandlerUser v-model.trim="baseForm.handlerUserId" placeholder="请选择经办人" style="width: 200px" />
</el-form-item>
<el-form-item label="商户" prop="merchantId">
<select-mch v-model="baseForm.merchantId" :apiParams="{ types: '1' }" style="width: 200px" />
</el-form-item>
<el-form-item label="货商" prop="supplierId">
<SelectCanteenSupplier v-model="baseForm.supplierId" style="width: 200px" />
</el-form-item>
@@ -94,6 +91,21 @@
<el-input v-model="row.realPrice" />
</template>
</vxe-column>
<vxe-column field="totalNumber" title="总数" :edit-render="{ autoFocus: 'input', placeholder: '请输入' }">
<template #edit="{ row }">
<el-input v-model="row.totalNumber" />
</template>
</vxe-column>
<vxe-column field="taxAmount" title="税前金额" :edit-render="{ autoFocus: 'input', placeholder: '请输入' }">
<template #edit="{ row }">
<el-input v-model="row.taxAmount" />
</template>
</vxe-column>
<vxe-column field="taxRate" title="税率(%)" :edit-render="{ autoFocus: 'input', placeholder: '请输入' }">
<template #edit="{ row }">
<el-input v-model="row.taxRate" />
</template>
</vxe-column>
<vxe-column field="totalAmount" title="累计总金额">
<template #default="{ row }">
{{ (Number(row.quantity || 0) * Number(row.realPrice || 0)).toFixed(2) }}
@@ -125,7 +137,7 @@
</template>
<script setup lang="ts">
import { ref, reactive, computed, onMounted } from "vue"
import { ref, reactive, onMounted } from "vue"
import { getObj, addObj, putObj } from "/@/api/canteen/canteenInventoryRecords"
import { getCanteenSequence } from "/@/api/canteen/common"
import { VxeTableEvents, VxeTablePropTypes, type VxeTableInstance } from "vxe-table"
@@ -155,11 +167,11 @@ const baseForm = reactive<any>({
inventoryCode: "",
inventoryDate: formatDate(new Date(), "YYYY-mm-dd"),
handlerUserId: "",
merchantId: "",
supplierId: "",
remark: "",
inventoryType: "1",
orderType: "1",
totalAmount: 0,
})
const state = reactive<any>({
selectDialogVisible: false, // 对话框选择开关
@@ -173,13 +185,15 @@ const dataRules = ref({
inventoryDate: [{ required: true, message: "出入库记录表单据日期不能为空", trigger: "blur" }],
handlerUserId: [{ required: true, message: "经办人不能为空", trigger: "blur" }],
supplierId: [{ required: true, message: "货商不能为空", trigger: "blur" }],
merchantId: [{ required: true, message: "商户不能为空", trigger: "blur" }],
})
// 可编辑表格校验规则
const validRules = ref<VxeTablePropTypes.EditRules<any>>({
quantity: [{ required: true, type: "number", min: 1, message: "必需大于等于0" }],
realPrice: [{ required: true, type: "number", min: 1, message: "必填" }],
totalNumber: [{ required: true, type: "number", min: 1, message: "必填" }],
taxAmount: [{ required: true, type: "number", min: 1, message: "必填" }],
taxRate: [{ required: true, type: "number", min: 1, message: "必填" }],
})
// 初始化数据
@@ -253,18 +267,24 @@ const removeSelectedRows = () => {
}
// 整理数据
const tableFormItems = state.itemTableForm.map((item: any) => {
return {
// id: item.isNew ? undefined : item.id,
erpMaterialId: item.erpMaterialId,
quantity: item.quantity,
unitPrice: item.price,
realPrice: item.realPrice ? storePrice(item.realPrice) : 0,
totalAmount: (Number(item.quantity || 0) * Number(item.realPrice || 0)).toFixed(2),
stock: item.stock,
remark: item.remark,
}
})
const tableFormItems = () => {
return state.itemTableForm.map((item: any) => {
return {
// id: item.isNew ? undefined : item.id,
erpMaterialId: item.erpMaterialId,
quantity: item.quantity,
unitPrice: storePrice(item.price),
realPrice: item.realPrice ? storePrice(item.realPrice) : 0,
totalAmount: storePrice((Number(item.quantity || 0) * Number(item.realPrice || 0)).toFixed(2)),
stock: item.stock,
remark: item.remark,
orderType: 1,
totalNumber: item.totalNumber,
taxAmount: item.taxAmount,
taxRate: item.taxRate,
}
})
}
// 点击继续添加
const onContinueAdd = async () => {
@@ -305,16 +325,16 @@ const itemTableFormValidate = async () => {
// 提交数据 成功返回 true 失败返回 false
const submitData = async () => {
const canteenInventoryRecordsItemDTOS = tableFormItems()
const _pa = {
...baseForm,
totalAmount: canteenInventoryRecordsItemDTOS.reduce((acc: number, cur: any) => acc + Number(cur.totalAmount), 0),
canteenInventoryRecordsItemDTOS,
}
console.log("提交的数据:", _pa)
try {
loading.value = true
const _pa = {
...baseForm,
items: tableFormItems(),
}
console.log("提交的数据:", _pa)
const res = baseForm.id ? await putObj(_pa) : await addObj(_pa)
if (res.code == 0) {
useMessage().success(baseForm.id ? "修改成功" : "添加成功")
@@ -122,7 +122,7 @@ const formState = reactive<{ formId: string | undefined; showForm: boolean }>({
const state: BasicTableProps = reactive<BasicTableProps>({
queryForm: {
inventoryType: "3",
inventoryType: "1",
},
pageList: fetchList,
})
@@ -12,8 +12,8 @@
</el-form>
</el-row>
<el-table
ref="spuMultipleTableRef"
:data="spuDataList"
ref="tableRef"
:data="dataList"
v-loading="loading"
:row-key="(row:any) => row.id"
:reserve-selection="true"
@@ -57,13 +57,13 @@ const props = withDefaults(
)
const queryRef = ref()
const spuMultipleTableRef = ref() // 对话框多选表格ref
const tableRef = ref() // 对话框多选表格ref
const loading = ref(false) // 对话框多选表格loading
const queryForm = reactive<any>({
name: "",
})
const total = ref<number>(0)
const spuDataList = ref<any[]>([]) // 对话框多选表格数据
const dataList = ref<any[]>([]) // 对话框多选表格数据
// 打开弹窗
const openDialog = () => {
@@ -75,32 +75,26 @@ const openDialog = () => {
const getDataListAndSelect = async () => {
loading.value = true
try {
const { code, data } = await fetchErpMaterialPageList(queryForm).finally(() => (loading.value = false))
if (code === 0) {
spuDataList.value = data.records.map((item: any) => ({ ...item, erpMaterialId: item.id }))
const { code, data } = await fetchErpMaterialPageList(queryForm)
if (code == 0) {
dataList.value = data.records.map((item: any) => ({ ...item, erpMaterialId: item.id }))
total.value = data.total
// 保存当前已选中的行
// const currentSelectedRows = spuMultipleTableRef.value?.getSelectionRows() || []
// 清空表格数据后重新设置
nextTick(() => {
// 合并当前页面数据中的已选行和之前保存的已选行
const rowsToSelect = [
// ...currentSelectedRows,
...props.selectedRows.filter((row) => spuDataList.value.some((item) => item.erpMaterialId === row.erpMaterialId)),
...props.selectedRows.filter((row) => dataList.value.some((item) => item.erpMaterialId === row.erpMaterialId)),
]
// 去重
const uniqueRowsToSelect = Array.from(new Map(rowsToSelect.map((row) => [row.erpMaterialId, row])).values())
// 为匹配的行设置选中状态
uniqueRowsToSelect.forEach((row) => {
const targetRow = spuDataList.value.find((item) => item.erpMaterialId === row.erpMaterialId)
targetRow && spuMultipleTableRef.value?.toggleRowSelection(targetRow, true)
const targetRow = dataList.value.find((item) => item.erpMaterialId === row.erpMaterialId)
targetRow && tableRef.value?.toggleRowSelection(targetRow, true)
})
})
}
} catch (error) {
spuDataList.value = []
loading.value = false
dataList.value = []
} finally {
loading.value = false
}
@@ -123,19 +117,19 @@ const resetQuery = () => {
// 点击商品列表表格行
const rowClick = (row: any) => {
spuMultipleTableRef.value.toggleRowSelection(row)
tableRef.value.toggleRowSelection(row)
}
// 商品选择对话框确认
const dialogConfirm = () => {
const $table = spuMultipleTableRef.value
const $table = tableRef.value
if ($table) {
// 获取所有选中的行,包括其他页面的选择
const currentSelectedRows = $table.getSelectionRows()
// 合并当前选中的行和之前已选的行(排除当前页面的行)
const allSelectedRows = [
...currentSelectedRows,
...props.selectedRows.filter((row) => !spuDataList.value.some((item) => item.erpMaterialId === row.erpMaterialId)),
...props.selectedRows.filter((row) => !dataList.value.some((item) => item.erpMaterialId === row.erpMaterialId)),
]
// 去重
const uniqueSelectedRows = Array.from(new Map(allSelectedRows.map((row) => [row.erpMaterialId, row])).values())