This commit is contained in:
1 parent
150b493080
commit
a4d7b72b86
4 files changed
+62
-48
No files matched your search
@@ -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())
|
||||
|
||||
Reference in new issue
Block a user