Merge remote-tracking branch 'origin/master'

This commit is contained in:
zjf committed 2025-03-25 17:29:30 +08:00
commit 5bf5aa64e9
18 files changed
+823 -209

No files matched your search

-9
View File
@@ -1,14 +1,5 @@
import request from "/@/utils/request" import request from "/@/utils/request"
// 获取库存盘点列表
export function getStockTakingPage(params?: object) {
return request({
url: "/supermarket/smErpInventoryRecords/savePD",
method: "get",
params,
})
}
// 库存盘点新增 // 库存盘点新增
export function stockTakingAdd(data?: object) { export function stockTakingAdd(data?: object) {
return request({ return request({
+6 -6
View File
@@ -2,24 +2,24 @@ import { defineStore } from "pinia"
export const usePurchase = defineStore("purchase", { export const usePurchase = defineStore("purchase", {
state: () => ({ state: () => ({
smErpCgPlan: { purchaseFormState: {
id: "", id: "",
disabled: false, disabled: false,
}, },
}), }),
actions: { actions: {
setSmErpCgPlanId(id: string) { setPurchaseFormId(id: string) {
this.smErpCgPlan.id = id this.purchaseFormState.id = id
}, },
setSmErpCgPlanDisabled(disabled: boolean) { setPurchaseFormDisabled(disabled: boolean) {
this.smErpCgPlan.disabled = disabled this.purchaseFormState.disabled = disabled
}, },
}, },
persist: { persist: {
enabled: true, enabled: true,
strategies: [ strategies: [
{ {
key: "smErpCgPlan", //自定义 Key值 key: "purchaseFormState", //自定义 Key值
storage: localStorage, // 选择存储方式 storage: localStorage, // 选择存储方式
}, },
], ],
@@ -1,13 +1,13 @@
<template> <template>
<div class="layout-padding"> <div v-loading="loading" :element-loading-svg="svg" element-loading-svg-view-box="-10, -10, 50, 50" class="layout-padding">
<div v-loading="loading" class="layout-padding-auto layout-padding-view" style="overflow: scroll"> <div v-if="baseDataForm.inventoryCode" class="layout-padding-auto layout-padding-view" style="overflow: scroll">
<el-form ref="baseDataFormRef" :model="baseDataForm" :rules="dataRules" label-width="100px"> <el-form v-if="!disabled" ref="baseDataFormRef" :model="baseDataForm" :rules="dataRules" label-width="100px">
<div class="flex flex-wrap"> <div class="flex flex-wrap">
<el-form-item label="单据编号" prop="inventoryCode"> <el-form-item label="单据编号" prop="inventoryCode">
<el-input v-model.trim="baseDataForm.inventoryCode" readonly style="width: 200px" /> <el-input v-model.trim="baseDataForm.inventoryCode" readonly style="width: 200px" :disabled="disabled" />
</el-form-item> </el-form-item>
<el-form-item label="单据日期" prop="inventoryDate"> <el-form-item label="单据日期" prop="inventoryDate">
<el-input v-model.trim="baseDataForm.inventoryDate" readonly style="width: 200px" /> <el-input v-model.trim="baseDataForm.inventoryDate" readonly style="width: 200px" :disabled="disabled" />
</el-form-item> </el-form-item>
<el-form-item label="关联入库单" prop="linkCode"> <el-form-item label="关联入库单" prop="linkCode">
<el-input <el-input
@@ -17,21 +17,59 @@
readonly readonly
placeholder="请选择采购入库单" placeholder="请选择采购入库单"
style="width: 200px" style="width: 200px"
:disabled="disabled"
/> />
</el-form-item> </el-form-item>
<el-form-item label="经办人" prop="handlerUserId"> <el-form-item label="经办人" prop="handlerUserId">
<SelectHandlerUser v-model.trim="baseDataForm.handlerUserId" placeholder="请选择经办人" style="width: 200px" /> <SelectHandlerUser
v-model.trim="baseDataForm.handlerUserId"
placeholder="请选择经办人"
style="width: 200px"
:disabled="disabled"
/>
</el-form-item> </el-form-item>
<el-form-item label="货商" prop="supplierId"> <el-form-item label="货商" prop="supplierId">
<select-supplier v-model="baseDataForm.supplierId" style="width: 200px" /> <select-supplier v-model="baseDataForm.supplierId" style="width: 200px" :disabled="disabled" />
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="remark"> <el-form-item label="备注" prop="remark">
<el-input v-model.trim="baseDataForm.remark" placeholder="请输入备注" style="width: 200px" /> <el-input v-model.trim="baseDataForm.remark" placeholder="请输入备注" style="width: 200px" :disabled="disabled" />
</el-form-item> </el-form-item>
</div> </div>
</el-form> </el-form>
<div v-else ref="baseDataInfoRef">
<div style="margin-bottom: 8px; padding: 8px 16px; color: #606279">
<div style="display: inline-block; width: 100%">
<div style="float: left; width: 33.33%; height: 28px; line-height: 28px">
<span class="font-bold">单据编号:</span>
<span>{{ baseDataForm.inventoryCode }}</span>
</div>
<div style="float: left; width: 33.33%; height: 28px; line-height: 28px">
<span class="font-bold">单据日期:</span>
<span>{{ baseDataForm.inventoryDate }}</span>
</div>
<div style="float: left; width: 33.33%; height: 28px; line-height: 28px">
<span class="font-bold">经办人:</span>
<span>{{ baseDataForm.handlerUserId }}</span>
</div>
</div>
<div style="display: inline-block; width: 100%">
<div style="float: left; width: 33.33%; height: 28px; line-height: 28px">
<span class="font-bold">关联补货申请:</span>
<span>{{ baseDataForm.linkCode }}</span>
</div>
<div style="float: left; width: 33.33%; height: 28px; line-height: 28px">
<span class="font-bold">货商:</span>
<span>{{ baseDataForm.supplierId }}</span>
</div>
<div style="float: left; width: 33.33%; height: 28px; line-height: 28px">
<span class="font-bold">备注:</span>
<span>{{ baseDataForm.remark }}</span>
</div>
</div>
</div>
</div>
<el-row class="my-3"> <el-row v-if="!disabled" class="my-3">
<el-button @click="addEvent">新增(顶部)</el-button> <el-button @click="addEvent">新增(顶部)</el-button>
<el-button @click="pushEvent">新增(尾部)</el-button> <el-button @click="pushEvent">新增(尾部)</el-button>
<el-button @click="insertEvent"> <el-button @click="insertEvent">
@@ -62,11 +100,12 @@
:edit-config="{ :edit-config="{
trigger: 'click', trigger: 'click',
mode: 'cell', mode: 'cell',
beforeEditMethod({ row, column }:any) { beforeEditMethod({ row, column, rowIndex }:any) {
// 禁止编辑 // 禁止编辑
if (column.property === '') { // if (column.property === '') {
return false // return false
} // }
if(disabled) return false
return true return true
}, },
}" }"
@@ -139,14 +178,17 @@
<el-row class="my-3"> <el-row class="my-3">
<el-tooltip effect="dark" content="返回列表页面" placement="top"> <el-tooltip effect="dark" content="返回列表页面" placement="top">
<el-button type="primary" plain @click="router.back()">取消</el-button> <el-button type="primary" plain @click="router.back()">{{ disabled ? "返回" : "取消" }}</el-button>
</el-tooltip> </el-tooltip>
<el-tooltip v-if="!baseDataForm.id" effect="dark" content="保存并清空数据" placement="top"> <el-tooltip v-if="!baseDataForm.id" effect="dark" content="保存并清空数据" placement="top">
<el-button type="primary" plain @click="onContinueAdd">继续添加</el-button> <el-button type="primary" plain @click="onContinueAdd">继续添加</el-button>
</el-tooltip> </el-tooltip>
<el-tooltip effect="dark" content="保存并返回列表页面" placement="top"> <el-tooltip v-if="!disabled" effect="dark" content="保存并返回列表页面" placement="top">
<el-button type="primary" plain @click="onSave">保存</el-button> <el-button type="primary" plain @click="onSave">保存</el-button>
</el-tooltip> </el-tooltip>
<el-tooltip v-if="disabled" effect="dark" content="打印清单" placement="top">
<el-button type="success" plain @click="printEvent">打印</el-button>
</el-tooltip>
</el-row> </el-row>
<!-- 商品选择对话框 --> <!-- 商品选择对话框 -->
@@ -170,7 +212,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, reactive, computed, onMounted } from "vue" import { ref, reactive, computed, onMounted } from "vue"
import { useRouter, useRoute } from "vue-router" import { useRouter } from "vue-router"
import { useMessage } from "/@/hooks/message" import { useMessage } from "/@/hooks/message"
import { getObj, addObj, putObj } from "/@/api/supermarketerp/smErpInventoryRecords" import { getObj, addObj, putObj } from "/@/api/supermarketerp/smErpInventoryRecords"
import { getPlanCode, getErpSpuSimpleAll, getCgInventoryPage } from "/@/api/supermarketerp/common" import { getPlanCode, getErpSpuSimpleAll, getCgInventoryPage } from "/@/api/supermarketerp/common"
@@ -180,14 +222,18 @@ import { Search } from "@element-plus/icons-vue"
import erpSpuSelectDialog from "/@/views/supermarketerp/components/erpSpuSelectDialog.vue" import erpSpuSelectDialog from "/@/views/supermarketerp/components/erpSpuSelectDialog.vue"
import linkCodeDialog from "/@/views/supermarketerp/components/linkCodeDialog.vue" import linkCodeDialog from "/@/views/supermarketerp/components/linkCodeDialog.vue"
import { displayPrice } from "/@/utils/formatMoney" import { displayPrice } from "/@/utils/formatMoney"
import { usePurchase } from "/@/stores/purchase"
import { tablePrint } from "../../supermarketUtils"
const purchaseStore = usePurchase()
const router = useRouter() const router = useRouter()
const route = useRoute()
const loading = ref(false) // 采购计划加载 const loading = ref(false) // 采购计划加载
const disabled = ref(false)
const erpSpuSelectDialogRef = ref() // 商品选择对话框ref const erpSpuSelectDialogRef = ref() // 商品选择对话框ref
const linkCgPlanDialogRef = ref() // 关联采购申请单对话框ref const linkCgPlanDialogRef = ref() // 关联采购申请单对话框ref
const baseDataFormRef = ref() // 基本数据表单ref const baseDataFormRef = ref() // 基本数据表单ref
const editableTableRef = ref<VxeTableInstance<any>>() // 可编辑表格ref const editableTableRef = ref<VxeTableInstance<any>>() // 可编辑表格ref
const baseDataInfoRef = ref() // 基本信息ref
// 基本信息表单数据 // 基本信息表单数据
const baseDataForm = reactive<any>({ const baseDataForm = reactive<any>({
id: "", id: "",
@@ -223,6 +269,14 @@ const state = reactive<{
erpSpuSelectDialogVisible: false, // 商品选择对话框开关 erpSpuSelectDialogVisible: false, // 商品选择对话框开关
linkCgPlanDialogVisible: false, // 关联采购申请单对话框开关 linkCgPlanDialogVisible: false, // 关联采购申请单对话框开关
}) })
const svg = `<path class="path" d="
M 30 15
L 28 17
M 25.61 25.61
A 15 15, 0, 0, 1, 15 30
A 15 15, 0, 1, 1, 27.99 7.5
L 15 15
" style="stroke-width: 4px; fill: rgba(0, 0, 0, 0)"/>`
// 基本信息表单校验规则 // 基本信息表单校验规则
const dataRules = ref({ const dataRules = ref({
@@ -241,7 +295,9 @@ const validRules = ref<VxeTablePropTypes.EditRules<any>>({
// 初始化数据 // 初始化数据
const getInitData = async () => { const getInitData = async () => {
baseDataForm.id = undefined baseDataForm.id = undefined
const id = route.query.id as string // const id = route.query.id as string
const id = purchaseStore.purchaseFormState.id
disabled.value = purchaseStore.purchaseFormState.disabled
if (id) { if (id) {
loading.value = true loading.value = true
// 获取采购计划数据 & 获取简要商品列表 // 获取采购计划数据 & 获取简要商品列表
@@ -254,12 +310,14 @@ const getInitData = async () => {
state.editableTableData = cgPlanData.data.items state.editableTableData = cgPlanData.data.items
state.erpSpuItemsMemo = cgPlanData.data.items state.erpSpuItemsMemo = cgPlanData.data.items
} }
return
} }
loading.value = true
// 获取采购退货编号 // 获取采购退货编号
const [erpSpuSimpleAll, planCode] = await Promise.allSettled([getErpSpuSimpleAll(), getPlanCode({ type: 4 })]).then((results) => const [erpSpuSimpleAll, planCode] = await Promise.allSettled([getErpSpuSimpleAll(), getPlanCode({ type: 4 })])
results.map((result) => (result.status === "fulfilled" ? result.value : null)), .then((results) => results.map((result) => (result.status === "fulfilled" ? result.value : null)))
) .finally(() => (loading.value = false))
erpSpuSimpleAll && erpSpuSimpleAll.code === 0 && (state.erpSpuSimpleAll = erpSpuSimpleAll.data) erpSpuSimpleAll && erpSpuSimpleAll.code === 0 && (state.erpSpuSimpleAll = erpSpuSimpleAll.data)
planCode && planCode.code === 0 && (baseDataForm.inventoryCode = planCode.data) planCode && planCode.code === 0 && (baseDataForm.inventoryCode = planCode.data)
} }
@@ -516,6 +574,11 @@ const clearData = () => {
return true return true
} }
// 点击打印
const printEvent = () => {
tablePrint(editableTableRef.value, baseDataInfoRef.value, state.editableTableData, 23, "采购退货")
}
onMounted(() => { onMounted(() => {
getInitData() getInitData()
}) })
@@ -87,11 +87,21 @@
<el-table-column label="操作" width="150"> <el-table-column label="操作" width="150">
<template #default="scope"> <template #default="scope">
<el-button <el-button
v-if="scope.row.checkStatus == '2'"
icon="MessageBox"
text
type="success"
@click="handleClickEditInventoryRecord(scope.row)"
>
详情
</el-button>
<el-button
v-else
icon="edit-pen" icon="edit-pen"
text text
type="primary" type="primary"
v-auth="'supermarket_smErpInventoryRecords_edit'" v-auth="'supermarket_smErpInventoryRecords_edit'"
@click="handleClickEditInventoryRecord(scope.row.id)" @click="handleClickEditInventoryRecord(scope.row)"
> >
编辑 编辑
</el-button> </el-button>
@@ -118,6 +128,7 @@ import { BasicTableProps, useTable } from "/@/hooks/table"
import { fetchList, delObjs } from "/@/api/supermarketerp/smErpInventoryRecords" import { fetchList, delObjs } from "/@/api/supermarketerp/smErpInventoryRecords"
import { useMessage, useMessageBox } from "/@/hooks/message" import { useMessage, useMessageBox } from "/@/hooks/message"
import { useDict } from "/@/hooks/dict" import { useDict } from "/@/hooks/dict"
import { usePurchase } from "/@/stores/purchase"
const router = useRouter() const router = useRouter()
const { check_status } = useDict("check_status") const { check_status } = useDict("check_status")
@@ -134,6 +145,7 @@ const state: BasicTableProps = reactive<BasicTableProps>({
}, },
pageList: fetchList, pageList: fetchList,
}) })
const purchaseStore = usePurchase()
// table hook // table hook
const { getDataList, currentChangeHandle, sizeChangeHandle, sortChangeHandle, downBlobFile, tableStyle } = useTable(state) const { getDataList, currentChangeHandle, sizeChangeHandle, sortChangeHandle, downBlobFile, tableStyle } = useTable(state)
@@ -159,10 +171,21 @@ const selectionChangHandle = (objs: { id: string }[]) => {
} }
// 点击创建出库入库记录表 // 点击创建出库入库记录表
const handleClickCreateInventoryRecord = () => router.push({ path: "/supermarketerp/purchaseManagement/smErpCgBack/form" }) const handleClickCreateInventoryRecord = () => {
purchaseStore.setPurchaseFormId("")
purchaseStore.setPurchaseFormDisabled(false)
router.push({ path: "/supermarketerp/purchaseManagement/smErpCgBack/form" })
}
// 点击编辑出库入库记录表 // 点击编辑出库入库记录表
const handleClickEditInventoryRecord = (id: string) => const handleClickEditInventoryRecord = (row: any) => {
router.push({ path: "/supermarketerp/purchaseManagement/smErpCgBack/form", query: { id } }) row.id ? purchaseStore.setPurchaseFormId(row.id) : useMessage().warning("清单id不存在")
if (row.checkStatus == 2) {
purchaseStore.setPurchaseFormDisabled(true)
} else {
purchaseStore.setPurchaseFormDisabled(false)
}
router.push({ path: "/supermarketerp/purchaseManagement/smErpCgBack/form" })
}
// 删除操作 // 删除操作
const handleDelete = async (ids: string[]) => { const handleDelete = async (ids: string[]) => {
@@ -1,16 +1,21 @@
<template> <template>
<div class="layout-padding"> <div v-loading="loading" :element-loading-svg="svg" element-loading-svg-view-box="-10, -10, 50, 50" class="layout-padding">
<div v-loading="loading" class="layout-padding-auto layout-padding-view" style="overflow: scroll"> <div v-if="baseDataForm.code" class="layout-padding-auto layout-padding-view" style="overflow: scroll">
<el-form ref="baseDataFormRef" :model="baseDataForm" :rules="dataRules" label-width="100px"> <el-form v-if="!disabled" ref="baseDataFormRef" :model="baseDataForm" :rules="dataRules" label-width="100px">
<div class="flex flex-wrap"> <div class="flex flex-wrap">
<el-form-item label="编号" prop="code"> <el-form-item label="编号" prop="code">
<el-input v-model="baseDataForm.code" readonly style="width: 200px" /> <el-input v-model="baseDataForm.code" readonly style="width: 200px" :disabled="disabled" />
</el-form-item> </el-form-item>
<el-form-item label="单据日期" prop="dDate"> <el-form-item label="单据日期" prop="dDate">
<el-input v-model="baseDataForm.ddDate" readonly style="width: 200px" /> <el-input v-model="baseDataForm.ddDate" readonly style="width: 200px" :disabled="disabled" />
</el-form-item> </el-form-item>
<el-form-item label="经办人" prop="handlerUserId"> <el-form-item label="经办人" prop="handlerUserId">
<SelectHandlerUser v-model.trim="baseDataForm.handlerUserId" placeholder="请选择经办人" style="width: 200px" /> <SelectHandlerUser
v-model.trim="baseDataForm.handlerUserId"
placeholder="请选择经办人"
style="width: 200px"
:disabled="disabled"
/>
</el-form-item> </el-form-item>
<el-form-item label="关联补货申请" prop="linkCode"> <el-form-item label="关联补货申请" prop="linkCode">
<el-input <el-input
@@ -20,18 +25,51 @@
readonly readonly
placeholder="请选择补货申请单" placeholder="请选择补货申请单"
style="width: 200px" style="width: 200px"
:disabled="disabled"
/> />
</el-form-item> </el-form-item>
<el-form-item label="货商" prop="supplierId"> <el-form-item label="货商" prop="supplierId">
<select-supplier v-model="baseDataForm.supplierId" style="width: 200px" /> <select-supplier v-model="baseDataForm.supplierId" style="width: 200px" :disabled="disabled" />
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="remark"> <el-form-item label="备注" prop="remark">
<el-input v-model="baseDataForm.remark" placeholder="请输入备注" style="width: 200px" /> <el-input v-model="baseDataForm.remark" placeholder="请输入备注" style="width: 200px" :disabled="disabled" />
</el-form-item> </el-form-item>
</div> </div>
</el-form> </el-form>
<div v-else ref="baseDataInfoRef">
<div style="margin-bottom: 8px; padding: 8px 16px; color: #606279">
<div style="display: inline-block; width: 100%">
<div style="float: left; width: 33.33%; height: 28px; line-height: 28px">
<span class="font-bold">编号:</span>
<span>{{ baseDataForm.code }}</span>
</div>
<div style="float: left; width: 33.33%; height: 28px; line-height: 28px">
<span class="font-bold">单据日期:</span>
<span>{{ baseDataForm.ddDate }}</span>
</div>
<div style="float: left; width: 33.33%; height: 28px; line-height: 28px">
<span class="font-bold">经办人:</span>
<span>{{ baseDataForm.handlerUserId }}</span>
</div>
</div>
<div style="display: inline-block; width: 100%">
<div style="float: left; width: 33.33%; height: 28px; line-height: 28px">
<span class="font-bold">关联补货申请:</span>
<span>{{ baseDataForm.linkCode }}</span>
</div>
<div style="float: left; width: 33.33%; height: 28px; line-height: 28px">
<span class="font-bold">货商:</span>
<span>{{ baseDataForm.supplierId }}</span>
</div>
<div style="float: left; width: 33.33%; height: 28px; line-height: 28px">
<span class="font-bold">备注:</span>
<span>{{ baseDataForm.remark }}</span>
</div>
</div>
</div>
</div>
<el-row class="my-3"> <el-row v-if="!disabled" class="my-3">
<el-button @click="addEvent">新增(顶部)</el-button> <el-button @click="addEvent">新增(顶部)</el-button>
<el-button @click="pushEvent">新增(尾部)</el-button> <el-button @click="pushEvent">新增(尾部)</el-button>
<el-button @click="insertEvent"> <el-button @click="insertEvent">
@@ -62,11 +100,12 @@
:edit-config="{ :edit-config="{
trigger: 'click', trigger: 'click',
mode: 'cell', mode: 'cell',
beforeEditMethod({ row, column }:any) { beforeEditMethod({ row, column, rowIndex }:any) {
// 禁止编辑 // 禁止编辑
if (column.property === '') { // if (column.property === '') {
return false // return false
} // }
if(disabled) return false
return true return true
}, },
}" }"
@@ -139,14 +178,17 @@
<el-row class="my-3"> <el-row class="my-3">
<el-tooltip effect="dark" content="返回列表页面" placement="top"> <el-tooltip effect="dark" content="返回列表页面" placement="top">
<el-button type="primary" plain @click="router.back()">取消</el-button> <el-button type="primary" plain @click="router.back()">{{ disabled ? "返回" : "取消" }}</el-button>
</el-tooltip> </el-tooltip>
<el-tooltip v-if="!baseDataForm.id" effect="dark" content="保存并清空数据" placement="top"> <el-tooltip v-if="!baseDataForm.id" effect="dark" content="保存并清空数据" placement="top">
<el-button type="primary" plain @click="onContinueAdd">继续添加</el-button> <el-button type="primary" plain @click="onContinueAdd">继续添加</el-button>
</el-tooltip> </el-tooltip>
<el-tooltip effect="dark" content="保存并返回列表页面" placement="top"> <el-tooltip v-if="!disabled" effect="dark" content="保存并返回列表页面" placement="top">
<el-button type="primary" plain @click="onSave">保存</el-button> <el-button type="primary" plain @click="onSave">保存</el-button>
</el-tooltip> </el-tooltip>
<el-tooltip v-if="disabled" effect="dark" content="打印清单" placement="top">
<el-button type="success" plain @click="printEvent">打印</el-button>
</el-tooltip>
</el-row> </el-row>
<!-- 商品选择对话框 --> <!-- 商品选择对话框 -->
@@ -170,7 +212,7 @@
<script setup lang="ts" name="smErpCgDd"> <script setup lang="ts" name="smErpCgDd">
import { ref, reactive, computed, onMounted } from "vue" import { ref, reactive, computed, onMounted } from "vue"
import { useRouter, useRoute } from "vue-router" import { useRouter } from "vue-router"
import { useMessage } from "/@/hooks/message" import { useMessage } from "/@/hooks/message"
import { getObj, addObj, putObj } from "/@/api/supermarketerp/smErpCgDd" import { getObj, addObj, putObj } from "/@/api/supermarketerp/smErpCgDd"
import { getPlanCode, getErpSpuSimpleAll, getCgsqPage } from "/@/api/supermarketerp/common" import { getPlanCode, getErpSpuSimpleAll, getCgsqPage } from "/@/api/supermarketerp/common"
@@ -180,14 +222,18 @@ import { Search } from "@element-plus/icons-vue"
import erpSpuSelectDialog from "/@/views/supermarketerp/components/erpSpuSelectDialog.vue" import erpSpuSelectDialog from "/@/views/supermarketerp/components/erpSpuSelectDialog.vue"
import linkCodeDialog from "/@/views/supermarketerp/components/linkCodeDialog.vue" import linkCodeDialog from "/@/views/supermarketerp/components/linkCodeDialog.vue"
import { displayPrice } from "/@/utils/formatMoney" import { displayPrice } from "/@/utils/formatMoney"
import { usePurchase } from "/@/stores/purchase"
import { tablePrint } from "../../supermarketUtils"
const purchaseStore = usePurchase()
const router = useRouter() const router = useRouter()
const route = useRoute()
const loading = ref(false) // 采购计划加载 const loading = ref(false) // 采购计划加载
const disabled = ref(false)
const erpSpuSelectDialogRef = ref() // 商品选择对话框ref const erpSpuSelectDialogRef = ref() // 商品选择对话框ref
const linkCgPlanDialogRef = ref() // 关联采购申请单对话框ref const linkCgPlanDialogRef = ref() // 关联采购申请单对话框ref
const baseDataFormRef = ref() // 基本数据表单ref const baseDataFormRef = ref() // 基本数据表单ref
const editableTableRef = ref<VxeTableInstance<any>>() // 可编辑表格ref const editableTableRef = ref<VxeTableInstance<any>>() // 可编辑表格ref
const baseDataInfoRef = ref() // 基本信息ref
// 基本信息表单数据 // 基本信息表单数据
const baseDataForm = reactive<any>({ const baseDataForm = reactive<any>({
id: "", id: "",
@@ -223,6 +269,14 @@ const state = reactive<{
erpSpuSelectDialogVisible: false, // 商品选择对话框开关 erpSpuSelectDialogVisible: false, // 商品选择对话框开关
linkCgPlanDialogVisible: false, // 关联采购申请单对话框开关 linkCgPlanDialogVisible: false, // 关联采购申请单对话框开关
}) })
const svg = `<path class="path" d="
M 30 15
L 28 17
M 25.61 25.61
A 15 15, 0, 0, 1, 15 30
A 15 15, 0, 1, 1, 27.99 7.5
L 15 15
" style="stroke-width: 4px; fill: rgba(0, 0, 0, 0)"/>`
// 基本信息表单校验规则 // 基本信息表单校验规则
const dataRules = ref({ const dataRules = ref({
@@ -241,7 +295,9 @@ const validRules = ref<VxeTablePropTypes.EditRules<any>>({
// 初始化数据 // 初始化数据
const getInitData = async () => { const getInitData = async () => {
baseDataForm.id = undefined baseDataForm.id = undefined
const id = route.query.id as string // const id = route.query.id as string
const id = purchaseStore.purchaseFormState.id
disabled.value = purchaseStore.purchaseFormState.disabled
if (id) { if (id) {
loading.value = true loading.value = true
// 获取采购计划数据 & 获取简要商品列表 // 获取采购计划数据 & 获取简要商品列表
@@ -254,12 +310,14 @@ const getInitData = async () => {
state.editableTableData = cgPlanData.data.items state.editableTableData = cgPlanData.data.items
state.erpSpuItemsMemo = cgPlanData.data.items state.erpSpuItemsMemo = cgPlanData.data.items
} }
return
} }
loading.value = true
// 获取采购订单编号 // 获取采购订单编号
const [erpSpuSimpleAll, planCode] = await Promise.allSettled([getErpSpuSimpleAll(), getPlanCode({ type: 2 })]).then((results) => const [erpSpuSimpleAll, planCode] = await Promise.allSettled([getErpSpuSimpleAll(), getPlanCode({ type: 2 })])
results.map((result) => (result.status === "fulfilled" ? result.value : null)), .then((results) => results.map((result) => (result.status === "fulfilled" ? result.value : null)))
) .finally(() => (loading.value = false))
erpSpuSimpleAll && erpSpuSimpleAll.code === 0 && (state.erpSpuSimpleAll = erpSpuSimpleAll.data) erpSpuSimpleAll && erpSpuSimpleAll.code === 0 && (state.erpSpuSimpleAll = erpSpuSimpleAll.data)
planCode && planCode.code === 0 && (baseDataForm.code = planCode.data) planCode && planCode.code === 0 && (baseDataForm.code = planCode.data)
} }
@@ -516,6 +574,11 @@ const clearData = () => {
return true return true
} }
// 点击打印
const printEvent = () => {
tablePrint(editableTableRef.value, baseDataInfoRef.value, state.editableTableData, 23, "采购订单")
}
onMounted(() => { onMounted(() => {
getInitData() getInitData()
}) })
@@ -42,22 +42,26 @@
<el-table-column prop="ddDate" label="单据日期" show-overflow-tooltip /> <el-table-column prop="ddDate" label="单据日期" show-overflow-tooltip />
<el-table-column prop="productName" label="商品信息" show-overflow-tooltip /> <el-table-column prop="productName" label="商品信息" show-overflow-tooltip />
<el-table-column prop="handlerUserName" label="经办人" show-overflow-tooltip /> <el-table-column prop="handlerUserName" label="经办人" show-overflow-tooltip />
<el-table-column prop="checkStatus" label="审批状态" show-overflow-tooltip> <el-table-column prop="checkStatus" label="审批状态" show-overflow-tooltip>
<template #default="scope"> <template #default="scope">
<dict-tag :options="check_status" :value="scope.row.checkStatus" /> <dict-tag :options="check_status" :value="scope.row.checkStatus" />
</template> </template>
</el-table-column> </el-table-column>
<!-- <el-table-column prop="totalAmount" label="金额合计" show-overflow-tooltip /> --> <!-- <el-table-column prop="totalAmount" label="金额合计" show-overflow-tooltip /> -->
<el-table-column prop="supplierId" label="货商" show-overflow-tooltip /> <el-table-column prop="supplierId" label="货商" show-overflow-tooltip />
<el-table-column prop="remark" label="备注" show-overflow-tooltip /> <el-table-column prop="remark" label="备注" show-overflow-tooltip />
<el-table-column label="操作" width="150"> <el-table-column label="操作" width="150">
<template #default="scope"> <template #default="scope">
<el-button v-if="scope.row.checkStatus == '2'" icon="MessageBox" text type="success" @click="handleClickEditCgPlan(scope.row)">
详情
</el-button>
<el-button <el-button
v-else
icon="edit-pen" icon="edit-pen"
text text
type="primary" type="primary"
v-auth="'supermarket_smErpCgDd_edit'" v-auth="'supermarket_smErpCgDd_edit'"
@click="handleClickEditCgPlan(scope.row.id)" @click="handleClickEditCgPlan(scope.row)"
> >
编辑 编辑
</el-button> </el-button>
@@ -78,6 +82,7 @@ import { BasicTableProps, useTable } from "/@/hooks/table"
import { fetchList, delObjs } from "/@/api/supermarketerp/smErpCgDd" import { fetchList, delObjs } from "/@/api/supermarketerp/smErpCgDd"
import { useMessage, useMessageBox } from "/@/hooks/message" import { useMessage, useMessageBox } from "/@/hooks/message"
import { useDict } from "/@/hooks/dict" import { useDict } from "/@/hooks/dict"
import { usePurchase } from "/@/stores/purchase"
const router = useRouter() const router = useRouter()
const { check_status } = useDict("check_status") const { check_status } = useDict("check_status")
@@ -85,6 +90,7 @@ const showSearch = ref(true)
// 多选变量 // 多选变量
const selectObjs = ref([]) as any const selectObjs = ref([]) as any
const multiple = ref(true) const multiple = ref(true)
const purchaseStore = usePurchase()
const state: BasicTableProps = reactive<BasicTableProps>({ const state: BasicTableProps = reactive<BasicTableProps>({
queryForm: {}, queryForm: {},
@@ -115,9 +121,21 @@ const selectionChangHandle = (objs: { id: string }[]) => {
} }
// 点击创建采购清单 // 点击创建采购清单
const handleClickCreateCgPlan = () => router.push({ path: "/supermarketerp/purchaseManagement/smErpCgDd/form" }) const handleClickCreateCgPlan = () => {
purchaseStore.setPurchaseFormId("")
purchaseStore.setPurchaseFormDisabled(false)
router.push({ path: "/supermarketerp/purchaseManagement/smErpCgDd/form" })
}
// 点击编辑采购清单 // 点击编辑采购清单
const handleClickEditCgPlan = (id: string) => router.push({ path: "/supermarketerp/purchaseManagement/smErpCgDd/form", query: { id } }) const handleClickEditCgPlan = (row: any) => {
row.id ? purchaseStore.setPurchaseFormId(row.id) : useMessage().warning("清单id不存在")
if (row.checkStatus == 2) {
purchaseStore.setPurchaseFormDisabled(true)
} else {
purchaseStore.setPurchaseFormDisabled(false)
}
router.push({ path: "/supermarketerp/purchaseManagement/smErpCgDd/form" })
}
// 删除操作 // 删除操作
const handleDelete = async (ids: string[]) => { const handleDelete = async (ids: string[]) => {
@@ -1,13 +1,13 @@
<template> <template>
<div class="layout-padding"> <div v-loading="loading" :element-loading-svg="svg" element-loading-svg-view-box="-10, -10, 50, 50" class="layout-padding">
<div v-loading="loading" class="layout-padding-auto layout-padding-view" style="overflow: scroll"> <div v-if="baseDataForm.inventoryCode" class="layout-padding-auto layout-padding-view" style="overflow: scroll">
<el-form ref="baseDataFormRef" :model="baseDataForm" :rules="dataRules" label-width="100px"> <el-form v-if="!disabled" ref="baseDataFormRef" :model="baseDataForm" :rules="dataRules" label-width="100px">
<div class="flex flex-wrap"> <div class="flex flex-wrap">
<el-form-item label="单据编号" prop="inventoryCode"> <el-form-item label="单据编号" prop="inventoryCode">
<el-input v-model.trim="baseDataForm.inventoryCode" readonly style="width: 200px" /> <el-input v-model.trim="baseDataForm.inventoryCode" readonly style="width: 200px" :disabled="disabled" />
</el-form-item> </el-form-item>
<el-form-item label="单据日期" prop="inventoryDate"> <el-form-item label="单据日期" prop="inventoryDate">
<el-input v-model.trim="baseDataForm.inventoryDate" readonly style="width: 200px" /> <el-input v-model.trim="baseDataForm.inventoryDate" readonly style="width: 200px" :disabled="disabled" />
</el-form-item> </el-form-item>
<el-form-item label="关联采购订单" prop="linkCode"> <el-form-item label="关联采购订单" prop="linkCode">
<el-input <el-input
@@ -17,21 +17,59 @@
readonly readonly
placeholder="请选择采购订单" placeholder="请选择采购订单"
style="width: 200px" style="width: 200px"
:disabled="disabled"
/> />
</el-form-item> </el-form-item>
<el-form-item label="经办人" prop="handlerUserId"> <el-form-item label="经办人" prop="handlerUserId">
<SelectHandlerUser v-model.trim="baseDataForm.handlerUserId" placeholder="请选择经办人" style="width: 200px" /> <SelectHandlerUser
v-model.trim="baseDataForm.handlerUserId"
placeholder="请选择经办人"
style="width: 200px"
:disabled="disabled"
/>
</el-form-item> </el-form-item>
<el-form-item label="货商" prop="supplierId"> <el-form-item label="货商" prop="supplierId">
<select-supplier v-model="baseDataForm.supplierId" style="width: 200px" /> <select-supplier v-model="baseDataForm.supplierId" style="width: 200px" :disabled="disabled" />
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="remark"> <el-form-item label="备注" prop="remark">
<el-input v-model.trim="baseDataForm.remark" placeholder="请输入备注" style="width: 200px" /> <el-input v-model.trim="baseDataForm.remark" placeholder="请输入备注" style="width: 200px" :disabled="disabled" />
</el-form-item> </el-form-item>
</div> </div>
</el-form> </el-form>
<div v-else ref="baseDataInfoRef">
<div style="margin-bottom: 8px; padding: 8px 16px; color: #606279">
<div style="display: inline-block; width: 100%">
<div style="float: left; width: 33.33%; height: 28px; line-height: 28px">
<span class="font-bold">单据编号:</span>
<span>{{ baseDataForm.inventoryCode }}</span>
</div>
<div style="float: left; width: 33.33%; height: 28px; line-height: 28px">
<span class="font-bold">单据日期:</span>
<span>{{ baseDataForm.inventoryDate }}</span>
</div>
<div style="float: left; width: 33.33%; height: 28px; line-height: 28px">
<span class="font-bold">经办人:</span>
<span>{{ baseDataForm.handlerUserId }}</span>
</div>
</div>
<div style="display: inline-block; width: 100%">
<div style="float: left; width: 33.33%; height: 28px; line-height: 28px">
<span class="font-bold">关联补货申请:</span>
<span>{{ baseDataForm.linkCode }}</span>
</div>
<div style="float: left; width: 33.33%; height: 28px; line-height: 28px">
<span class="font-bold">货商:</span>
<span>{{ baseDataForm.supplierId }}</span>
</div>
<div style="float: left; width: 33.33%; height: 28px; line-height: 28px">
<span class="font-bold">备注:</span>
<span>{{ baseDataForm.remark }}</span>
</div>
</div>
</div>
</div>
<el-row class="my-3"> <el-row v-if="!disabled" class="my-3">
<el-button @click="addEvent">新增(顶部)</el-button> <el-button @click="addEvent">新增(顶部)</el-button>
<el-button @click="pushEvent">新增(尾部)</el-button> <el-button @click="pushEvent">新增(尾部)</el-button>
<el-button @click="insertEvent"> <el-button @click="insertEvent">
@@ -62,11 +100,12 @@
:edit-config="{ :edit-config="{
trigger: 'click', trigger: 'click',
mode: 'cell', mode: 'cell',
beforeEditMethod({ row, column }:any) { beforeEditMethod({ row, column, rowIndex }:any) {
// 禁止编辑 // 禁止编辑
if (column.property === '') { // if (column.property === '') {
return false // return false
} // }
if(disabled) return false
return true return true
}, },
}" }"
@@ -139,14 +178,17 @@
<el-row class="my-3"> <el-row class="my-3">
<el-tooltip effect="dark" content="返回列表页面" placement="top"> <el-tooltip effect="dark" content="返回列表页面" placement="top">
<el-button type="primary" plain @click="router.back()">取消</el-button> <el-button type="primary" plain @click="router.back()">{{ disabled ? "返回" : "取消" }}</el-button>
</el-tooltip> </el-tooltip>
<el-tooltip v-if="!baseDataForm.id" effect="dark" content="保存并清空数据" placement="top"> <el-tooltip v-if="!baseDataForm.id" effect="dark" content="保存并清空数据" placement="top">
<el-button type="primary" plain @click="onContinueAdd">继续添加</el-button> <el-button type="primary" plain @click="onContinueAdd">继续添加</el-button>
</el-tooltip> </el-tooltip>
<el-tooltip effect="dark" content="保存并返回列表页面" placement="top"> <el-tooltip v-if="!disabled" effect="dark" content="保存并返回列表页面" placement="top">
<el-button type="primary" plain @click="onSave">保存</el-button> <el-button type="primary" plain @click="onSave">保存</el-button>
</el-tooltip> </el-tooltip>
<el-tooltip v-if="disabled" effect="dark" content="打印清单" placement="top">
<el-button type="success" plain @click="printEvent">打印</el-button>
</el-tooltip>
</el-row> </el-row>
<!-- 商品选择对话框 --> <!-- 商品选择对话框 -->
@@ -170,7 +212,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, reactive, computed, onMounted } from "vue" import { ref, reactive, computed, onMounted } from "vue"
import { useRouter, useRoute } from "vue-router" import { useRouter } from "vue-router"
import { useMessage } from "/@/hooks/message" import { useMessage } from "/@/hooks/message"
import { getObj, addObj, putObj } from "/@/api/supermarketerp/smErpInventoryRecords" import { getObj, addObj, putObj } from "/@/api/supermarketerp/smErpInventoryRecords"
import { getPlanCode, getErpSpuSimpleAll, getCgddPage } from "/@/api/supermarketerp/common" import { getPlanCode, getErpSpuSimpleAll, getCgddPage } from "/@/api/supermarketerp/common"
@@ -180,16 +222,18 @@ import { Search } from "@element-plus/icons-vue"
import erpSpuSelectDialog from "/@/views/supermarketerp/components/erpSpuSelectDialog.vue" import erpSpuSelectDialog from "/@/views/supermarketerp/components/erpSpuSelectDialog.vue"
import linkCodeDialog from "/@/views/supermarketerp/components/linkCodeDialog.vue" import linkCodeDialog from "/@/views/supermarketerp/components/linkCodeDialog.vue"
import { displayPrice } from "/@/utils/formatMoney" import { displayPrice } from "/@/utils/formatMoney"
import { useDict } from "/@/hooks/dict" import { usePurchase } from "/@/stores/purchase"
import { tablePrint } from "../../supermarketUtils"
const purchaseStore = usePurchase()
const router = useRouter() const router = useRouter()
const route = useRoute()
const loading = ref(false) // 采购计划加载 const loading = ref(false) // 采购计划加载
const disabled = ref(false)
const erpSpuSelectDialogRef = ref() // 商品选择对话框ref const erpSpuSelectDialogRef = ref() // 商品选择对话框ref
const linkCgPlanDialogRef = ref() // 关联采购申请单对话框ref const linkCgPlanDialogRef = ref() // 关联采购申请单对话框ref
const baseDataFormRef = ref() // 基本数据表单ref const baseDataFormRef = ref() // 基本数据表单ref
const editableTableRef = ref<VxeTableInstance<any>>() // 可编辑表格ref const editableTableRef = ref<VxeTableInstance<any>>() // 可编辑表格ref
const { check_status } = useDict("check_status") const baseDataInfoRef = ref() // 基本信息ref
// 基本信息表单数据 // 基本信息表单数据
const baseDataForm = reactive<any>({ const baseDataForm = reactive<any>({
id: "", id: "",
@@ -225,6 +269,14 @@ const state = reactive<{
erpSpuSelectDialogVisible: false, // 商品选择对话框开关 erpSpuSelectDialogVisible: false, // 商品选择对话框开关
linkCgPlanDialogVisible: false, // 关联采购申请单对话框开关 linkCgPlanDialogVisible: false, // 关联采购申请单对话框开关
}) })
const svg = `<path class="path" d="
M 30 15
L 28 17
M 25.61 25.61
A 15 15, 0, 0, 1, 15 30
A 15 15, 0, 1, 1, 27.99 7.5
L 15 15
" style="stroke-width: 4px; fill: rgba(0, 0, 0, 0)"/>`
// 基本信息表单校验规则 // 基本信息表单校验规则
const dataRules = ref({ const dataRules = ref({
@@ -243,7 +295,9 @@ const validRules = ref<VxeTablePropTypes.EditRules<any>>({
// 初始化数据 // 初始化数据
const getInitData = async () => { const getInitData = async () => {
baseDataForm.id = undefined baseDataForm.id = undefined
const id = route.query.id as string // const id = route.query.id as string
const id = purchaseStore.purchaseFormState.id
disabled.value = purchaseStore.purchaseFormState.disabled
if (id) { if (id) {
loading.value = true loading.value = true
// 获取采购计划数据 & 获取简要商品列表 // 获取采购计划数据 & 获取简要商品列表
@@ -256,12 +310,14 @@ const getInitData = async () => {
state.editableTableData = cgPlanData.data.items state.editableTableData = cgPlanData.data.items
state.erpSpuItemsMemo = cgPlanData.data.items state.erpSpuItemsMemo = cgPlanData.data.items
} }
return
} }
loading.value = true
// 获取采购入库编号 // 获取采购入库编号
const [erpSpuSimpleAll, planCode] = await Promise.allSettled([getErpSpuSimpleAll(), getPlanCode({ type: 3 })]).then((results) => const [erpSpuSimpleAll, planCode] = await Promise.allSettled([getErpSpuSimpleAll(), getPlanCode({ type: 3 })])
results.map((result) => (result.status === "fulfilled" ? result.value : null)), .then((results) => results.map((result) => (result.status === "fulfilled" ? result.value : null)))
) .finally(() => (loading.value = false))
erpSpuSimpleAll && erpSpuSimpleAll.code === 0 && (state.erpSpuSimpleAll = erpSpuSimpleAll.data) erpSpuSimpleAll && erpSpuSimpleAll.code === 0 && (state.erpSpuSimpleAll = erpSpuSimpleAll.data)
planCode && planCode.code === 0 && (baseDataForm.inventoryCode = planCode.data) planCode && planCode.code === 0 && (baseDataForm.inventoryCode = planCode.data)
} }
@@ -518,6 +574,11 @@ const clearData = () => {
return true return true
} }
// 点击打印
const printEvent = () => {
tablePrint(editableTableRef.value, baseDataInfoRef.value, state.editableTableData, 23, "采购入库")
}
onMounted(() => { onMounted(() => {
getInitData() getInitData()
}) })
@@ -87,15 +87,26 @@
<el-table-column label="操作" width="150"> <el-table-column label="操作" width="150">
<template #default="scope"> <template #default="scope">
<el-button <el-button
v-if="scope.row.checkStatus == '2'"
icon="MessageBox"
text
type="success"
@click="handleClickEditInventoryRecord(scope.row)"
>
详情
</el-button>
<el-button
v-else
icon="edit-pen" icon="edit-pen"
text text
type="primary" type="primary"
v-auth="'supermarket_smErpInventoryRecords_edit'" v-auth="'supermarket_smErpInventoryRecords_edit'"
@click="handleClickEditInventoryRecord(scope.row.id)" @click="handleClickEditInventoryRecord(scope.row)"
> >
编辑 编辑
</el-button> </el-button>
<el-button <el-button
v-else
icon="delete" icon="delete"
text text
type="primary" type="primary"
@@ -118,9 +129,10 @@ import { BasicTableProps, useTable } from "/@/hooks/table"
import { fetchList, delObjs } from "/@/api/supermarketerp/smErpInventoryRecords" import { fetchList, delObjs } from "/@/api/supermarketerp/smErpInventoryRecords"
import { useMessage, useMessageBox } from "/@/hooks/message" import { useMessage, useMessageBox } from "/@/hooks/message"
import { useDict } from "/@/hooks/dict" import { useDict } from "/@/hooks/dict"
import { usePurchase } from "/@/stores/purchase"
const router = useRouter() const router = useRouter()
const { erp_order_type, inventory_type, check_status } = useDict("erp_order_type", "inventory_type", "check_status") const { check_status } = useDict("check_status")
// 搜索变量 // 搜索变量
const queryRef = ref() const queryRef = ref()
const showSearch = ref(true) const showSearch = ref(true)
@@ -134,6 +146,7 @@ const state: BasicTableProps = reactive<BasicTableProps>({
}, },
pageList: fetchList, pageList: fetchList,
}) })
const purchaseStore = usePurchase()
// table hook // table hook
const { getDataList, currentChangeHandle, sizeChangeHandle, sortChangeHandle, downBlobFile, tableStyle } = useTable(state) const { getDataList, currentChangeHandle, sizeChangeHandle, sortChangeHandle, downBlobFile, tableStyle } = useTable(state)
@@ -159,10 +172,21 @@ const selectionChangHandle = (objs: { id: string }[]) => {
} }
// 点击创建出库入库记录表 // 点击创建出库入库记录表
const handleClickCreateInventoryRecord = () => router.push({ path: "/supermarketerp/purchaseManagement/smErpCgInventory/form" }) const handleClickCreateInventoryRecord = () => {
purchaseStore.setPurchaseFormId("")
purchaseStore.setPurchaseFormDisabled(false)
router.push({ path: "/supermarketerp/purchaseManagement/smErpCgInventory/form" })
}
// 点击编辑出库入库记录表 // 点击编辑出库入库记录表
const handleClickEditInventoryRecord = (id: string) => const handleClickEditInventoryRecord = (row: any) => {
router.push({ path: "/supermarketerp/purchaseManagement/smErpCgInventory/form", query: { id } }) row.id ? purchaseStore.setPurchaseFormId(row.id) : useMessage().warning("清单id不存在")
if (row.checkStatus == 2) {
purchaseStore.setPurchaseFormDisabled(true)
} else {
purchaseStore.setPurchaseFormDisabled(false)
}
router.push({ path: "/supermarketerp/purchaseManagement/smErpCgInventory/form" })
}
// 删除操作 // 删除操作
const handleDelete = async (ids: string[]) => { const handleDelete = async (ids: string[]) => {
@@ -1,24 +1,59 @@
<template> <template>
<div class="layout-padding"> <div v-loading="loading" :element-loading-svg="svg" element-loading-svg-view-box="-10, -10, 50, 50" class="layout-padding">
<div v-loading="loading" class="layout-padding-auto layout-padding-view" style="overflow: scroll"> <div v-if="baseDataForm.planCode" class="layout-padding-auto layout-padding-view" style="overflow: scroll">
<el-form ref="baseDataFormRef" :model="baseDataForm" :rules="dataRules" label-width="100px"> <el-form v-if="!disabled" ref="baseDataFormRef" :model="baseDataForm" :rules="dataRules" label-width="100px">
<div class="flex flex-wrap"> <div class="flex flex-wrap">
<el-form-item label="编号" prop="planCode"> <el-form-item label="编号" prop="planCode">
<el-input v-model="baseDataForm.planCode" readonly style="width: 200px" /> <el-input v-model="baseDataForm.planCode" readonly style="width: 200px" :disabled="disabled" />
</el-form-item> </el-form-item>
<el-form-item label="单据日期" prop="planDate"> <el-form-item label="单据日期" prop="planDate">
<el-input v-model="baseDataForm.planDate" readonly style="width: 200px" /> <el-input v-model="baseDataForm.planDate" readonly style="width: 200px" :disabled="disabled" />
</el-form-item> </el-form-item>
<el-form-item label="经办人" prop="handlerUserId"> <el-form-item label="经办人" prop="handlerUserId">
<SelectHandlerUser v-model.trim="baseDataForm.handlerUserId" placeholder="请选择经办人" style="width: 200px" /> <SelectHandlerUser
v-model.trim="baseDataForm.handlerUserId"
placeholder="请选择经办人"
style="width: 200px"
:disabled="disabled"
/>
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="remark"> <el-form-item label="备注" prop="remark">
<el-input v-model.trim="baseDataForm.remark" placeholder="请输入备注" maxlength="200" style="width: 200px" /> <el-input
v-model.trim="baseDataForm.remark"
placeholder="请输入备注"
maxlength="200"
style="width: 200px"
:disabled="disabled"
/>
</el-form-item> </el-form-item>
</div> </div>
</el-form> </el-form>
<div v-else ref="baseDataInfoRef">
<div style="margin-bottom: 8px; padding: 8px 16px; color: #606279">
<div style="display: inline-block; width: 100%">
<div style="float: left; width: 33.33%; height: 28px; line-height: 28px">
<span class="font-bold">编号:</span>
<span>{{ baseDataForm.planCode }}</span>
</div>
<div style="float: left; width: 33.33%; height: 28px; line-height: 28px">
<span class="font-bold">单据日期:</span>
<span>{{ baseDataForm.planDate }}</span>
</div>
<div style="float: left; width: 33.33%; height: 28px; line-height: 28px">
<span class="font-bold">经办人:</span>
<span>{{ baseDataForm.handlerUserId }}</span>
</div>
</div>
<div style="display: inline-block; width: 100%">
<div style="float: left; width: 33.33%; height: 28px; line-height: 28px">
<span class="font-bold">备注:</span>
<span>{{ baseDataForm.remark }}</span>
</div>
</div>
</div>
</div>
<el-row class="my-3"> <el-row v-if="!disabled" class="my-3">
<el-button @click="addEvent">新增(顶部)</el-button> <el-button @click="addEvent">新增(顶部)</el-button>
<el-button @click="pushEvent">新增(尾部)</el-button> <el-button @click="pushEvent">新增(尾部)</el-button>
<el-button @click="insertEvent"> <el-button @click="insertEvent">
@@ -49,11 +84,12 @@
:edit-config="{ :edit-config="{
trigger: 'click', trigger: 'click',
mode: 'cell', mode: 'cell',
beforeEditMethod({ row, column }:any) { beforeEditMethod({ row, column, rowIndex }:any) {
// 禁止编辑 // 禁止编辑
if (column.property === '') { // if (column.property === '') {
return false // return false
} // }
if(disabled) return false
return true return true
}, },
}" }"
@@ -77,7 +113,7 @@
<vxe-column field="productName" title="库存商品"> <vxe-column field="productName" title="库存商品">
<template #default="{ row }"> <template #default="{ row }">
<span v-if="row.productName">{{ row.productName }}</span> <span v-if="row.productName">{{ row.productName }}</span>
<span v-else>{{ row.erpSpuId && state.erpSpuSimpleAll.find((item: any) => item.id === row.erpSpuId).productName }}</span> <span v-else>{{ row.erpSpuId && state.erpSpuSimpleAll.find((item: any) => item.id === row.erpSpuId)?.productName }}</span>
</template> </template>
</vxe-column> </vxe-column>
<vxe-column field="unitId" title="包装单位" :edit-render="{}"> <vxe-column field="unitId" title="包装单位" :edit-render="{}">
@@ -135,14 +171,17 @@
<el-row class="my-3"> <el-row class="my-3">
<el-tooltip effect="dark" content="返回列表页面" placement="top"> <el-tooltip effect="dark" content="返回列表页面" placement="top">
<el-button type="primary" plain @click="router.back()">取消</el-button> <el-button type="primary" plain @click="router.back()">{{ disabled ? "返回" : "取消" }}</el-button>
</el-tooltip> </el-tooltip>
<el-tooltip v-if="!baseDataForm.id" effect="dark" content="保存并清空数据" placement="top"> <el-tooltip v-if="!baseDataForm.id" effect="dark" content="保存并清空数据" placement="top">
<el-button type="primary" plain @click="onContinueAdd">继续添加</el-button> <el-button type="primary" plain @click="onContinueAdd">继续添加</el-button>
</el-tooltip> </el-tooltip>
<el-tooltip effect="dark" content="保存并返回列表页面" placement="top"> <el-tooltip v-if="!disabled" effect="dark" content="保存并返回列表页面" placement="top">
<el-button type="primary" plain @click="onSave">保存</el-button> <el-button type="primary" plain @click="onSave">保存</el-button>
</el-tooltip> </el-tooltip>
<el-tooltip v-if="disabled" effect="dark" content="打印清单" placement="top">
<el-button type="success" plain @click="printEvent">打印</el-button>
</el-tooltip>
</el-row> </el-row>
<!-- 商品选择对话框 --> <!-- 商品选择对话框 -->
@@ -158,7 +197,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, reactive, computed, onMounted } from "vue" import { ref, reactive, computed, onMounted } from "vue"
import { useRouter, useRoute } from "vue-router" import { useRouter } from "vue-router"
import { useMessage } from "/@/hooks/message" import { useMessage } from "/@/hooks/message"
import { VxeTableEvents, VxeTablePropTypes, type VxeTableInstance } from "vxe-table" import { VxeTableEvents, VxeTablePropTypes, type VxeTableInstance } from "vxe-table"
import { getObj, addObj, putObj } from "/@/api/supermarketerp/smErpCgPlan" import { getObj, addObj, putObj } from "/@/api/supermarketerp/smErpCgPlan"
@@ -166,14 +205,16 @@ import { getPlanCode, getErpSpuSimpleAll } from "/@/api/supermarketerp/common"
import erpSpuSelectDialog from "/@/views/supermarketerp/components/erpSpuSelectDialog.vue" import erpSpuSelectDialog from "/@/views/supermarketerp/components/erpSpuSelectDialog.vue"
import { formatDate } from "/@/utils/formatTime" import { formatDate } from "/@/utils/formatTime"
import { usePurchase } from "/@/stores/purchase" import { usePurchase } from "/@/stores/purchase"
import { tablePrint } from "../../supermarketUtils"
const purchaseStore = usePurchase() const purchaseStore = usePurchase()
const router = useRouter() const router = useRouter()
const route = useRoute()
const erpSpuSelectDialogRef = ref() // 商品选择对话框ref const erpSpuSelectDialogRef = ref() // 商品选择对话框ref
const loading = ref(false) // 采购计划加载 const loading = ref(false) // 采购计划加载
const disabled = ref(false)
const baseDataFormRef = ref() // 基本数据表单ref const baseDataFormRef = ref() // 基本数据表单ref
const editableTableRef = ref<VxeTableInstance<any>>() // 可编辑表格ref const editableTableRef = ref<VxeTableInstance<any>>() // 可编辑表格ref
const baseDataInfoRef = ref() // 基本信息ref
// 基本信息表单数据 // 基本信息表单数据
const baseDataForm = reactive<any>({ const baseDataForm = reactive<any>({
id: undefined, id: undefined,
@@ -197,6 +238,14 @@ const state = reactive<{
erpSpuSimpleAll: [], // 简要商品列表 erpSpuSimpleAll: [], // 简要商品列表
erpSpuSelectDialogVisible: false, // 商品选择对话框开关 erpSpuSelectDialogVisible: false, // 商品选择对话框开关
}) })
const svg = `<path class="path" d="
M 30 15
L 28 17
M 25.61 25.61
A 15 15, 0, 0, 1, 15 30
A 15 15, 0, 1, 1, 27.99 7.5
L 15 15
" style="stroke-width: 4px; fill: rgba(0, 0, 0, 0)"/>`
// 基本信息表单校验规则 // 基本信息表单校验规则
const dataRules = ref({ const dataRules = ref({
@@ -215,7 +264,8 @@ const validRules = ref<VxeTablePropTypes.EditRules<any>>({
const getInitData = async () => { const getInitData = async () => {
baseDataForm.id = undefined baseDataForm.id = undefined
// const id = route.query.id as string // const id = route.query.id as string
const id = purchaseStore.smErpCgPlan.id const id = purchaseStore.purchaseFormState.id
disabled.value = purchaseStore.purchaseFormState.disabled
if (id) { if (id) {
loading.value = true loading.value = true
// 获取补货申请编号 & 获取简要商品列表 // 获取补货申请编号 & 获取简要商品列表
@@ -229,12 +279,14 @@ const getInitData = async () => {
state.erpSpuItemsMemo = cgPlanData.data.items state.erpSpuItemsMemo = cgPlanData.data.items
} }
erpSpuSimpleAll && erpSpuSimpleAll.code === 0 && (state.erpSpuSimpleAll = erpSpuSimpleAll.data) erpSpuSimpleAll && erpSpuSimpleAll.code === 0 && (state.erpSpuSimpleAll = erpSpuSimpleAll.data)
return
} }
loading.value = true
// 获取采购计划编号 // 获取采购计划编号
const [planCode] = await Promise.allSettled([getPlanCode({ type: 1 })]).then((results) => const [planCode] = await Promise.allSettled([getPlanCode({ type: 1 })])
results.map((result) => (result.status === "fulfilled" ? result.value : null)), .then((results) => results.map((result) => (result.status === "fulfilled" ? result.value : null)))
) .finally(() => (loading.value = false))
planCode && planCode.code === 0 && (baseDataForm.planCode = planCode.data) planCode && planCode.code === 0 && (baseDataForm.planCode = planCode.data)
} }
@@ -465,6 +517,11 @@ const clearData = () => {
return true return true
} }
// 点击打印
const printEvent = () => {
tablePrint(editableTableRef.value, baseDataInfoRef.value, state.editableTableData, 23, "补货申请")
}
onMounted(() => { onMounted(() => {
getInitData() getInitData()
}) })
@@ -72,12 +72,16 @@
<el-table-column prop="remark" label="备注" show-overflow-tooltip /> <el-table-column prop="remark" label="备注" show-overflow-tooltip />
<el-table-column label="操作" width="150"> <el-table-column label="操作" width="150">
<template #default="scope"> <template #default="scope">
<el-button v-if="scope.row.checkStatus == '2'" icon="MessageBox" text type="success" @click="handleClickEditCgPlan(scope.row)">
详情
</el-button>
<el-button <el-button
v-else
icon="edit-pen" icon="edit-pen"
text text
type="primary" type="primary"
v-auth="'supermarket_smErpCgPlan_edit'" v-auth="'supermarket_smErpCgPlan_edit'"
@click="handleClickEditCgPlan(scope.row.id)" @click="handleClickEditCgPlan(scope.row)"
> >
编辑 编辑
</el-button> </el-button>
@@ -139,14 +143,18 @@ const selectionChangHandle = (objs: { id: string }[]) => {
// 点击创建采购清单 // 点击创建采购清单
const handleClickCreateCgPlan = () => { const handleClickCreateCgPlan = () => {
purchaseStore.setSmErpCgPlanId("") purchaseStore.setPurchaseFormId("")
purchaseStore.setSmErpCgPlanDisabled(false) purchaseStore.setPurchaseFormDisabled(false)
router.push({ path: "/supermarketerp/purchaseManagement/smErpCgPlan/form" }) router.push({ path: "/supermarketerp/purchaseManagement/smErpCgPlan/form" })
} }
// 点击编辑采购清单 // 点击编辑采购清单
const handleClickEditCgPlan = (id: string) => { const handleClickEditCgPlan = (row: any) => {
purchaseStore.setSmErpCgPlanId(id) row.id ? purchaseStore.setPurchaseFormId(row.id) : useMessage().warning("清单id不存在")
purchaseStore.setSmErpCgPlanDisabled(true) if (row.checkStatus == 2) {
purchaseStore.setPurchaseFormDisabled(true)
} else {
purchaseStore.setPurchaseFormDisabled(false)
}
router.push({ path: "/supermarketerp/purchaseManagement/smErpCgPlan/form" }) router.push({ path: "/supermarketerp/purchaseManagement/smErpCgPlan/form" })
} }
@@ -1,13 +1,13 @@
<template> <template>
<div class="layout-padding"> <div v-loading="loading" :element-loading-svg="svg" element-loading-svg-view-box="-10, -10, 50, 50" class="layout-padding">
<div v-loading="loading" class="layout-padding-auto layout-padding-view" style="overflow: scroll"> <div v-if="baseDataForm.inventoryCode" class="layout-padding-auto layout-padding-view" style="overflow: scroll">
<el-form ref="baseDataFormRef" :model="baseDataForm" :rules="dataRules" label-width="100px"> <el-form v-if="!disabled" ref="baseDataFormRef" :model="baseDataForm" :rules="dataRules" label-width="100px">
<div class="flex flex-wrap"> <div class="flex flex-wrap">
<el-form-item label="单据编号" prop="inventoryCode"> <el-form-item label="单据编号" prop="inventoryCode">
<el-input v-model.trim="baseDataForm.inventoryCode" readonly style="width: 200px" /> <el-input v-model.trim="baseDataForm.inventoryCode" readonly style="width: 200px" :disabled="disabled" />
</el-form-item> </el-form-item>
<el-form-item label="单据日期" prop="inventoryDate"> <el-form-item label="单据日期" prop="inventoryDate">
<el-input v-model.trim="baseDataForm.inventoryDate" readonly style="width: 200px" /> <el-input v-model.trim="baseDataForm.inventoryDate" readonly style="width: 200px" :disabled="disabled" />
</el-form-item> </el-form-item>
<el-form-item label="关联采购订单" prop="linkCode"> <el-form-item label="关联采购订单" prop="linkCode">
<el-input <el-input
@@ -17,29 +17,77 @@
readonly readonly
placeholder="请选择采购订单" placeholder="请选择采购订单"
style="width: 200px" style="width: 200px"
:disabled="disabled"
/> />
</el-form-item> </el-form-item>
<el-form-item label="经办人" prop="handlerUserId"> <el-form-item label="经办人" prop="handlerUserId">
<SelectHandlerUser v-model.trim="baseDataForm.handlerUserId" placeholder="请选择经办人" style="width: 200px" /> <SelectHandlerUser
v-model.trim="baseDataForm.handlerUserId"
placeholder="请选择经办人"
style="width: 200px"
:disabled="disabled"
/>
</el-form-item> </el-form-item>
<el-form-item label="审批状态" prop="checkStatus"> <el-form-item label="审批状态" prop="checkStatus">
<el-select v-model="baseDataForm.checkStatus" placeholder="请选择审批状态" style="width: 200px"> <el-select v-model="baseDataForm.checkStatus" placeholder="请选择审批状态" style="width: 200px">
<el-option :label="item.label" :value="item.value" v-for="(item, index) in check_status" :key="index" /> <el-option :label="item.label" :value="item.value" v-for="(item, index) in check_status" :key="index" :disabled="disabled" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="货商" prop="supplierId"> <el-form-item label="货商" prop="supplierId">
<select-supplier v-model="baseDataForm.supplierId" style="width: 200px" /> <select-supplier v-model="baseDataForm.supplierId" style="width: 200px" :disabled="disabled" />
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="remark"> <el-form-item label="备注" prop="remark">
<el-input v-model.trim="baseDataForm.remark" placeholder="请输入备注" style="width: 200px" /> <el-input v-model.trim="baseDataForm.remark" placeholder="请输入备注" style="width: 200px" :disabled="disabled" />
</el-form-item> </el-form-item>
<el-form-item label="会员卡号" prop="memberNumber"> <el-form-item label="会员卡号" prop="memberNumber">
<el-input v-model.trim="baseDataForm.memberNumber" placeholder="请输入会员卡号" style="width: 200px" /> <el-input v-model.trim="baseDataForm.memberNumber" placeholder="请输入会员卡号" style="width: 200px" :disabled="disabled" />
</el-form-item> </el-form-item>
</div> </div>
</el-form> </el-form>
<div v-else ref="baseDataInfoRef">
<div style="margin-bottom: 8px; padding: 8px 16px; color: #606279">
<div style="display: inline-block; width: 100%">
<div style="float: left; width: 33.33%; height: 28px; line-height: 28px">
<span class="font-bold">单据编号:</span>
<span>{{ baseDataForm.inventoryCode }}</span>
</div>
<div style="float: left; width: 33.33%; height: 28px; line-height: 28px">
<span class="font-bold">单据日期:</span>
<span>{{ baseDataForm.inventoryDate }}</span>
</div>
<div style="float: left; width: 33.33%; height: 28px; line-height: 28px">
<span class="font-bold">经办人:</span>
<span>{{ baseDataForm.handlerUserId }}</span>
</div>
</div>
<div style="display: inline-block; width: 100%">
<div style="float: left; width: 33.33%; height: 28px; line-height: 28px">
<span class="font-bold">关联补货申请:</span>
<span>{{ baseDataForm.linkCode }}</span>
</div>
<div style="float: left; width: 33.33%; height: 28px; line-height: 28px">
<span class="font-bold">货商:</span>
<span>{{ baseDataForm.supplierId }}</span>
</div>
<div style="float: left; width: 33.33%; height: 28px; line-height: 28px">
<span class="font-bold">备注:</span>
<span>{{ baseDataForm.remark }}</span>
</div>
</div>
<div style="display: inline-block; width: 100%">
<div style="float: left; width: 33.33%; height: 28px; line-height: 28px">
<span class="font-bold">审批状态:</span>
<span>{{ baseDataForm.checkStatus }}</span>
</div>
<div style="float: left; width: 33.33%; height: 28px; line-height: 28px">
<span class="font-bold">会员卡号:</span>
<span>{{ baseDataForm.memberNumber }}</span>
</div>
</div>
</div>
</div>
<el-row class="my-3"> <el-row v-if="!disabled" class="my-3">
<el-button @click="addEvent">新增(顶部)</el-button> <el-button @click="addEvent">新增(顶部)</el-button>
<el-button @click="pushEvent">新增(尾部)</el-button> <el-button @click="pushEvent">新增(尾部)</el-button>
<el-button @click="insertEvent"> <el-button @click="insertEvent">
@@ -72,11 +120,12 @@
:edit-config="{ :edit-config="{
trigger: 'click', trigger: 'click',
mode: 'cell', mode: 'cell',
beforeEditMethod({ row, column }:any) { beforeEditMethod({ row, column, rowIndex }:any) {
// 禁止编辑 // 禁止编辑
if (column.property === '') { // if (column.property === '') {
return false // return false
} // }
if(disabled) return false
return true return true
}, },
}" }"
@@ -173,9 +222,12 @@
<el-tooltip v-if="!baseDataForm.id" effect="dark" content="保存并清空数据" placement="top"> <el-tooltip v-if="!baseDataForm.id" effect="dark" content="保存并清空数据" placement="top">
<el-button type="primary" plain @click="onContinueAdd">继续添加</el-button> <el-button type="primary" plain @click="onContinueAdd">继续添加</el-button>
</el-tooltip> </el-tooltip>
<el-tooltip effect="dark" content="保存并返回列表页面" placement="top"> <el-tooltip v-if="!disabled" effect="dark" content="保存并返回列表页面" placement="top">
<el-button type="primary" plain @click="onSave">保存</el-button> <el-button type="primary" plain @click="onSave">保存</el-button>
</el-tooltip> </el-tooltip>
<el-tooltip v-if="disabled" effect="dark" content="打印清单" placement="top">
<el-button type="success" plain @click="printEvent">打印</el-button>
</el-tooltip>
</el-row> </el-row>
<!-- 商品选择对话框 --> <!-- 商品选择对话框 -->
@@ -199,7 +251,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, reactive, computed, onMounted } from "vue" import { ref, reactive, computed, onMounted } from "vue"
import { useRouter, useRoute } from "vue-router" import { useRouter } from "vue-router"
import { useMessage } from "/@/hooks/message" import { useMessage } from "/@/hooks/message"
import { getObj, addObj, putObj } from "/@/api/supermarketerp/smErpInventoryRecords" import { getObj, addObj, putObj } from "/@/api/supermarketerp/smErpInventoryRecords"
import { getPlanCode, getErpSpuSimpleAll, getCgInventoryPage } from "/@/api/supermarketerp/common" import { getPlanCode, getErpSpuSimpleAll, getCgInventoryPage } from "/@/api/supermarketerp/common"
@@ -210,15 +262,19 @@ import erpSpuSelectDialog from "/@/views/supermarketerp/components/erpSpuSelectD
import linkCodeDialog from "/@/views/supermarketerp/components/linkCodeDialog.vue" import linkCodeDialog from "/@/views/supermarketerp/components/linkCodeDialog.vue"
import { displayPrice, storePrice } from "/@/utils/formatMoney" import { displayPrice, storePrice } from "/@/utils/formatMoney"
import { useDict } from "/@/hooks/dict" import { useDict } from "/@/hooks/dict"
import { usePurchase } from "/@/stores/purchase"
import { tablePrint } from "../../supermarketUtils"
const purchaseStore = usePurchase()
const router = useRouter() const router = useRouter()
const route = useRoute()
const loading = ref(false) // 采购计划加载 const loading = ref(false) // 采购计划加载
const disabled = ref(false)
const erpSpuSelectDialogRef = ref() // 商品选择对话框ref const erpSpuSelectDialogRef = ref() // 商品选择对话框ref
const linkCgPlanDialogRef = ref() // 关联采购申请单对话框ref const linkCgPlanDialogRef = ref() // 关联采购申请单对话框ref
const baseDataFormRef = ref() // 基本数据表单ref const baseDataFormRef = ref() // 基本数据表单ref
const editableTableRef = ref<VxeTableInstance<any>>() // 可编辑表格ref const editableTableRef = ref<VxeTableInstance<any>>() // 可编辑表格ref
const { check_status } = useDict("check_status") const { check_status } = useDict("check_status")
const baseDataInfoRef = ref() // 基本信息ref
// 基本信息表单数据 // 基本信息表单数据
const baseDataForm = reactive<any>({ const baseDataForm = reactive<any>({
id: "", id: "",
@@ -255,6 +311,14 @@ const state = reactive<{
erpSpuSelectDialogVisible: false, // 商品选择对话框开关 erpSpuSelectDialogVisible: false, // 商品选择对话框开关
linkCgPlanDialogVisible: false, // 关联采购申请单对话框开关 linkCgPlanDialogVisible: false, // 关联采购申请单对话框开关
}) })
const svg = `<path class="path" d="
M 30 15
L 28 17
M 25.61 25.61
A 15 15, 0, 0, 1, 15 30
A 15 15, 0, 1, 1, 27.99 7.5
L 15 15
" style="stroke-width: 4px; fill: rgba(0, 0, 0, 0)"/>`
// 合计金额表单数据 // 合计金额表单数据
const receiveAmountForm = reactive<{ receiveAmount: number }>({ const receiveAmountForm = reactive<{ receiveAmount: number }>({
receiveAmount: 0, receiveAmount: 0,
@@ -285,7 +349,9 @@ const receiveAmountFormRules = ref({
// 初始化数据 // 初始化数据
const getInitData = async () => { const getInitData = async () => {
baseDataForm.id = undefined baseDataForm.id = undefined
const id = route.query.id as string // const id = route.query.id as string
const id = purchaseStore.purchaseFormState.id
disabled.value = purchaseStore.purchaseFormState.disabled
if (id) { if (id) {
loading.value = true loading.value = true
// 获取采购计划数据 & 获取简要商品列表 // 获取采购计划数据 & 获取简要商品列表
@@ -298,12 +364,14 @@ const getInitData = async () => {
state.editableTableData = cgPlanData.data.items state.editableTableData = cgPlanData.data.items
state.erpSpuItemsMemo = cgPlanData.data.items state.erpSpuItemsMemo = cgPlanData.data.items
} }
return
} }
loading.value = true
// 获取采购入库编号 // 获取采购入库编号
const [erpSpuSimpleAll, planCode] = await Promise.allSettled([getErpSpuSimpleAll(), getPlanCode({ type: 6 })]).then((results) => const [erpSpuSimpleAll, planCode] = await Promise.allSettled([getErpSpuSimpleAll(), getPlanCode({ type: 6 })])
results.map((result) => (result.status === "fulfilled" ? result.value : null)), .then((results) => results.map((result) => (result.status === "fulfilled" ? result.value : null)))
) .finally(() => (loading.value = false))
erpSpuSimpleAll && erpSpuSimpleAll.code === 0 && (state.erpSpuSimpleAll = erpSpuSimpleAll.data) erpSpuSimpleAll && erpSpuSimpleAll.code === 0 && (state.erpSpuSimpleAll = erpSpuSimpleAll.data)
planCode && planCode.code === 0 && (baseDataForm.inventoryCode = planCode.data) planCode && planCode.code === 0 && (baseDataForm.inventoryCode = planCode.data)
} }
@@ -563,6 +631,11 @@ const clearData = () => {
return true return true
} }
// 点击打印
const printEvent = () => {
tablePrint(editableTableRef.value, baseDataInfoRef.value, state.editableTableData, 23, "零售退货")
}
onMounted(() => { onMounted(() => {
getInitData() getInitData()
}) })
@@ -87,11 +87,21 @@
<el-table-column label="操作" width="150"> <el-table-column label="操作" width="150">
<template #default="scope"> <template #default="scope">
<el-button <el-button
v-if="scope.row.checkStatus == '2'"
icon="MessageBox"
text
type="success"
@click="handleClickEditInventoryRecord(scope.row)"
>
详情
</el-button>
<el-button
v-else
icon="edit-pen" icon="edit-pen"
text text
type="primary" type="primary"
v-auth="'supermarket_smErpInventoryRecords_edit'" v-auth="'supermarket_smErpInventoryRecords_edit'"
@click="handleClickEditInventoryRecord(scope.row.id)" @click="handleClickEditInventoryRecord(scope.row)"
> >
编辑 编辑
</el-button> </el-button>
@@ -118,6 +128,7 @@ import { BasicTableProps, useTable } from "/@/hooks/table"
import { fetchList, delObjs } from "/@/api/supermarketerp/smErpInventoryRecords" import { fetchList, delObjs } from "/@/api/supermarketerp/smErpInventoryRecords"
import { useMessage, useMessageBox } from "/@/hooks/message" import { useMessage, useMessageBox } from "/@/hooks/message"
import { useDict } from "/@/hooks/dict" import { useDict } from "/@/hooks/dict"
import { usePurchase } from "/@/stores/purchase"
const { check_status } = useDict("check_status") const { check_status } = useDict("check_status")
const router = useRouter() const router = useRouter()
@@ -134,6 +145,7 @@ const state: BasicTableProps = reactive<BasicTableProps>({
}, },
pageList: fetchList, pageList: fetchList,
}) })
const purchaseStore = usePurchase()
// table hook // table hook
const { getDataList, currentChangeHandle, sizeChangeHandle, sortChangeHandle, downBlobFile, tableStyle } = useTable(state) const { getDataList, currentChangeHandle, sizeChangeHandle, sortChangeHandle, downBlobFile, tableStyle } = useTable(state)
@@ -159,10 +171,21 @@ const selectionChangHandle = (objs: { id: string }[]) => {
} }
// 点击创建出库入库记录表 // 点击创建出库入库记录表
const handleClickCreateInventoryRecord = () => router.push({ path: "/supermarketerp/retailManagement/smErpRetailBack/form" }) const handleClickCreateInventoryRecord = () => {
purchaseStore.setPurchaseFormId("")
purchaseStore.setPurchaseFormDisabled(false)
router.push({ path: "/supermarketerp/retailManagement/smErpRetailBack/form" })
}
// 点击编辑出库入库记录表 // 点击编辑出库入库记录表
const handleClickEditInventoryRecord = (id: string) => const handleClickEditInventoryRecord = (row: any) => {
router.push({ path: "/supermarketerp/retailManagement/smErpRetailBack/form", query: { id } }) row.id ? purchaseStore.setPurchaseFormId(row.id) : useMessage().warning("清单id不存在")
if (row.checkStatus == 2) {
purchaseStore.setPurchaseFormDisabled(true)
} else {
purchaseStore.setPurchaseFormDisabled(false)
}
router.push({ path: "/supermarketerp/retailManagement/smErpRetailBack/form" })
}
// 删除操作 // 删除操作
const handleDelete = async (ids: string[]) => { const handleDelete = async (ids: string[]) => {
@@ -1,13 +1,13 @@
<template> <template>
<div class="layout-padding"> <div v-loading="loading" :element-loading-svg="svg" element-loading-svg-view-box="-10, -10, 50, 50" class="layout-padding">
<div v-loading="loading" class="layout-padding-auto layout-padding-view" style="overflow: scroll"> <div v-if="baseDataForm.inventoryCode" class="layout-padding-auto layout-padding-view" style="overflow: scroll">
<el-form ref="baseDataFormRef" :model="baseDataForm" :rules="dataRules" label-width="100px"> <el-form v-if="!disabled" ref="baseDataFormRef" :model="baseDataForm" :rules="dataRules" label-width="100px">
<div class="flex flex-wrap"> <div class="flex flex-wrap">
<el-form-item label="单据编号" prop="inventoryCode"> <el-form-item label="单据编号" prop="inventoryCode">
<el-input v-model.trim="baseDataForm.inventoryCode" readonly style="width: 200px" /> <el-input v-model.trim="baseDataForm.inventoryCode" readonly style="width: 200px" :disabled="disabled" />
</el-form-item> </el-form-item>
<el-form-item label="单据日期" prop="inventoryDate"> <el-form-item label="单据日期" prop="inventoryDate">
<el-input v-model.trim="baseDataForm.inventoryDate" readonly style="width: 200px" /> <el-input v-model.trim="baseDataForm.inventoryDate" readonly style="width: 200px" :disabled="disabled" />
</el-form-item> </el-form-item>
<el-form-item label="关联采购订单" prop="linkCode"> <el-form-item label="关联采购订单" prop="linkCode">
<el-input <el-input
@@ -17,29 +17,67 @@
readonly readonly
placeholder="请选择采购订单" placeholder="请选择采购订单"
style="width: 200px" style="width: 200px"
:disabled="disabled"
/> />
</el-form-item> </el-form-item>
<el-form-item label="经办人" prop="handlerUserId"> <el-form-item label="经办人" prop="handlerUserId">
<SelectHandlerUser v-model.trim="baseDataForm.handlerUserId" placeholder="请选择经办人" style="width: 200px" /> <SelectHandlerUser
v-model.trim="baseDataForm.handlerUserId"
placeholder="请选择经办人"
style="width: 200px"
:disabled="disabled"
/>
</el-form-item> </el-form-item>
<el-form-item label="审批状态" prop="checkStatus"> <el-form-item label="审批状态" prop="checkStatus">
<el-select v-model="baseDataForm.checkStatus" placeholder="请选择审批状态" style="width: 200px"> <el-select v-model="baseDataForm.checkStatus" placeholder="请选择审批状态" style="width: 200px">
<el-option :label="item.label" :value="item.value" v-for="(item, index) in check_status" :key="index" /> <el-option :label="item.label" :value="item.value" v-for="(item, index) in check_status" :key="index" :disabled="disabled" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="货商" prop="supplierId"> <el-form-item label="货商" prop="supplierId">
<select-supplier v-model="baseDataForm.supplierId" style="width: 200px" /> <select-supplier v-model="baseDataForm.supplierId" style="width: 200px" :disabled="disabled" />
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="remark"> <el-form-item label="备注" prop="remark">
<el-input v-model.trim="baseDataForm.remark" placeholder="请输入备注" style="width: 200px" /> <el-input v-model.trim="baseDataForm.remark" placeholder="请输入备注" style="width: 200px" :disabled="disabled" />
</el-form-item> </el-form-item>
<el-form-item label="会员卡号" prop="memberNumber"> <el-form-item label="会员卡号" prop="memberNumber">
<el-input v-model.trim="baseDataForm.memberNumber" placeholder="请输入会员卡号" style="width: 200px" /> <el-input v-model.trim="baseDataForm.memberNumber" placeholder="请输入会员卡号" style="width: 200px" :disabled="disabled" />
</el-form-item> </el-form-item>
</div> </div>
</el-form> </el-form>
<div v-else ref="baseDataInfoRef">
<div style="margin-bottom: 8px; padding: 8px 16px; color: #606279">
<div style="display: inline-block; width: 100%">
<div style="float: left; width: 33.33%; height: 28px; line-height: 28px">
<span class="font-bold">单据编号:</span>
<span>{{ baseDataForm.inventoryCode }}</span>
</div>
<div style="float: left; width: 33.33%; height: 28px; line-height: 28px">
<span class="font-bold">单据日期:</span>
<span>{{ baseDataForm.inventoryDate }}</span>
</div>
<div style="float: left; width: 33.33%; height: 28px; line-height: 28px">
<span class="font-bold">经办人:</span>
<span>{{ baseDataForm.handlerUserId }}</span>
</div>
</div>
<div style="display: inline-block; width: 100%">
<div style="float: left; width: 33.33%; height: 28px; line-height: 28px">
<span class="font-bold">关联补货申请:</span>
<span>{{ baseDataForm.linkCode }}</span>
</div>
<div style="float: left; width: 33.33%; height: 28px; line-height: 28px">
<span class="font-bold">货商:</span>
<span>{{ baseDataForm.supplierId }}</span>
</div>
<div style="float: left; width: 33.33%; height: 28px; line-height: 28px">
<span class="font-bold">备注:</span>
<span>{{ baseDataForm.remark }}</span>
</div>
</div>
</div>
</div>
<el-row class="my-3"> <el-row v-if="!disabled" class="my-3">
<el-button @click="addEvent">新增(顶部)</el-button> <el-button @click="addEvent">新增(顶部)</el-button>
<el-button @click="pushEvent">新增(尾部)</el-button> <el-button @click="pushEvent">新增(尾部)</el-button>
<el-button @click="insertEvent"> <el-button @click="insertEvent">
@@ -72,11 +110,12 @@
:edit-config="{ :edit-config="{
trigger: 'click', trigger: 'click',
mode: 'cell', mode: 'cell',
beforeEditMethod({ row, column }:any) { beforeEditMethod({ row, column, rowIndex }:any) {
// 禁止编辑 // 禁止编辑
if (column.property === '') { // if (column.property === '') {
return false // return false
} // }
if(disabled) return false
return true return true
}, },
}" }"
@@ -173,9 +212,12 @@
<el-tooltip v-if="!baseDataForm.id" effect="dark" content="保存并清空数据" placement="top"> <el-tooltip v-if="!baseDataForm.id" effect="dark" content="保存并清空数据" placement="top">
<el-button type="primary" plain @click="onContinueAdd">继续添加</el-button> <el-button type="primary" plain @click="onContinueAdd">继续添加</el-button>
</el-tooltip> </el-tooltip>
<el-tooltip effect="dark" content="保存并返回列表页面" placement="top"> <el-tooltip v-if="!disabled" effect="dark" content="保存并返回列表页面" placement="top">
<el-button type="primary" plain @click="onSave">保存</el-button> <el-button type="primary" plain @click="onSave">保存</el-button>
</el-tooltip> </el-tooltip>
<el-tooltip v-if="disabled" effect="dark" content="打印清单" placement="top">
<el-button type="success" plain @click="printEvent">打印</el-button>
</el-tooltip>
</el-row> </el-row>
<!-- 商品选择对话框 --> <!-- 商品选择对话框 -->
@@ -199,7 +241,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, reactive, computed, onMounted } from "vue" import { ref, reactive, computed, onMounted } from "vue"
import { useRouter, useRoute } from "vue-router" import { useRouter } from "vue-router"
import { useMessage } from "/@/hooks/message" import { useMessage } from "/@/hooks/message"
import { getObj, addObj, putObj } from "/@/api/supermarketerp/smErpInventoryRecords" import { getObj, addObj, putObj } from "/@/api/supermarketerp/smErpInventoryRecords"
import { getPlanCode, getErpSpuSimpleAll, getCgddPage } from "/@/api/supermarketerp/common" import { getPlanCode, getErpSpuSimpleAll, getCgddPage } from "/@/api/supermarketerp/common"
@@ -210,15 +252,19 @@ import erpSpuSelectDialog from "/@/views/supermarketerp/components/erpSpuSelectD
import linkCodeDialog from "/@/views/supermarketerp/components/linkCodeDialog.vue" import linkCodeDialog from "/@/views/supermarketerp/components/linkCodeDialog.vue"
import { displayPrice, storePrice } from "/@/utils/formatMoney" import { displayPrice, storePrice } from "/@/utils/formatMoney"
import { useDict } from "/@/hooks/dict" import { useDict } from "/@/hooks/dict"
import { usePurchase } from "/@/stores/purchase"
import { tablePrint } from "../../supermarketUtils"
const purchaseStore = usePurchase()
const router = useRouter() const router = useRouter()
const route = useRoute()
const loading = ref(false) // 采购计划加载 const loading = ref(false) // 采购计划加载
const disabled = ref(false)
const erpSpuSelectDialogRef = ref() // 商品选择对话框ref const erpSpuSelectDialogRef = ref() // 商品选择对话框ref
const linkCgPlanDialogRef = ref() // 关联采购申请单对话框ref const linkCgPlanDialogRef = ref() // 关联采购申请单对话框ref
const baseDataFormRef = ref() // 基本数据表单ref const baseDataFormRef = ref() // 基本数据表单ref
const editableTableRef = ref<VxeTableInstance<any>>() // 可编辑表格ref const editableTableRef = ref<VxeTableInstance<any>>() // 可编辑表格ref
const { check_status } = useDict("check_status") const { check_status } = useDict("check_status")
const baseDataInfoRef = ref() // 基本信息ref
// 基本信息表单数据 // 基本信息表单数据
const baseDataForm = reactive<any>({ const baseDataForm = reactive<any>({
id: "", id: "",
@@ -255,6 +301,14 @@ const state = reactive<{
erpSpuSelectDialogVisible: false, // 商品选择对话框开关 erpSpuSelectDialogVisible: false, // 商品选择对话框开关
linkCgPlanDialogVisible: false, // 关联采购申请单对话框开关 linkCgPlanDialogVisible: false, // 关联采购申请单对话框开关
}) })
const svg = `<path class="path" d="
M 30 15
L 28 17
M 25.61 25.61
A 15 15, 0, 0, 1, 15 30
A 15 15, 0, 1, 1, 27.99 7.5
L 15 15
" style="stroke-width: 4px; fill: rgba(0, 0, 0, 0)"/>`
// 合计金额表单数据 // 合计金额表单数据
const receiveAmountForm = reactive<{ receiveAmount: number }>({ const receiveAmountForm = reactive<{ receiveAmount: number }>({
receiveAmount: 0, receiveAmount: 0,
@@ -285,7 +339,9 @@ const receiveAmountFormRules = ref({
// 初始化数据 // 初始化数据
const getInitData = async () => { const getInitData = async () => {
baseDataForm.id = undefined baseDataForm.id = undefined
const id = route.query.id as string // const id = route.query.id as string
const id = purchaseStore.purchaseFormState.id
disabled.value = purchaseStore.purchaseFormState.disabled
if (id) { if (id) {
loading.value = true loading.value = true
// 获取采购计划数据 & 获取简要商品列表 // 获取采购计划数据 & 获取简要商品列表
@@ -298,12 +354,14 @@ const getInitData = async () => {
state.editableTableData = cgPlanData.data.items state.editableTableData = cgPlanData.data.items
state.erpSpuItemsMemo = cgPlanData.data.items state.erpSpuItemsMemo = cgPlanData.data.items
} }
return
} }
loading.value = true
// 获取采购入库编号 // 获取采购入库编号
const [erpSpuSimpleAll, planCode] = await Promise.allSettled([getErpSpuSimpleAll(), getPlanCode({ type: 5 })]).then((results) => const [erpSpuSimpleAll, planCode] = await Promise.allSettled([getErpSpuSimpleAll(), getPlanCode({ type: 5 })])
results.map((result) => (result.status === "fulfilled" ? result.value : null)), .then((results) => results.map((result) => (result.status === "fulfilled" ? result.value : null)))
) .finally(() => (loading.value = false))
erpSpuSimpleAll && erpSpuSimpleAll.code === 0 && (state.erpSpuSimpleAll = erpSpuSimpleAll.data) erpSpuSimpleAll && erpSpuSimpleAll.code === 0 && (state.erpSpuSimpleAll = erpSpuSimpleAll.data)
planCode && planCode.code === 0 && (baseDataForm.inventoryCode = planCode.data) planCode && planCode.code === 0 && (baseDataForm.inventoryCode = planCode.data)
} }
@@ -563,6 +621,11 @@ const clearData = () => {
return true return true
} }
// 点击打印
const printEvent = () => {
tablePrint(editableTableRef.value, baseDataInfoRef.value, state.editableTableData, 23, "零售出库")
}
onMounted(() => { onMounted(() => {
getInitData() getInitData()
}) })
@@ -18,11 +18,11 @@
<el-form-item label="经办人" prop="handlerUserId"> <el-form-item label="经办人" prop="handlerUserId">
<SelectHandlerUser v-model.trim="state.queryForm.handlerUserId" placeholder="请选择经办人" style="width: 200px" /> <SelectHandlerUser v-model.trim="state.queryForm.handlerUserId" placeholder="请选择经办人" style="width: 200px" />
</el-form-item> </el-form-item>
<!-- <el-form-item label="审批状态" prop="checkStatus">--> <el-form-item label="审批状态" prop="checkStatus">
<!-- <el-select v-model="state.queryForm.checkStatus" placeholder="请选择审批状态">--> <el-select v-model="state.queryForm.checkStatus" placeholder="请选择审批状态">
<!-- <el-option :label="item.label" :value="item.value" v-for="(item, index) in check_status" :key="index" />--> <el-option :label="item.label" :value="item.value" v-for="(item, index) in check_status" :key="index" />
<!-- </el-select>--> </el-select>
<!-- </el-form-item>--> </el-form-item>
<el-form-item> <el-form-item>
<el-button icon="search" type="primary" @click="getDataList">查询</el-button> <el-button icon="search" type="primary" @click="getDataList">查询</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
@@ -87,11 +87,21 @@
<el-table-column label="操作" width="150"> <el-table-column label="操作" width="150">
<template #default="scope"> <template #default="scope">
<el-button <el-button
v-if="scope.row.checkStatus == '2'"
icon="MessageBox"
text
type="success"
@click="handleClickEditInventoryRecord(scope.row)"
>
详情
</el-button>
<el-button
v-else
icon="edit-pen" icon="edit-pen"
text text
type="primary" type="primary"
v-auth="'supermarket_smErpInventoryRecords_edit'" v-auth="'supermarket_smErpInventoryRecords_edit'"
@click="handleClickEditInventoryRecord(scope.row.id)" @click="handleClickEditInventoryRecord(scope.row)"
> >
编辑 编辑
</el-button> </el-button>
@@ -118,6 +128,7 @@ import { BasicTableProps, useTable } from "/@/hooks/table"
import { fetchList, delObjs } from "/@/api/supermarketerp/smErpInventoryRecords" import { fetchList, delObjs } from "/@/api/supermarketerp/smErpInventoryRecords"
import { useMessage, useMessageBox } from "/@/hooks/message" import { useMessage, useMessageBox } from "/@/hooks/message"
import { useDict } from "/@/hooks/dict" import { useDict } from "/@/hooks/dict"
import { usePurchase } from "/@/stores/purchase"
const router = useRouter() const router = useRouter()
const { check_status } = useDict("check_status") const { check_status } = useDict("check_status")
@@ -134,6 +145,7 @@ const state: BasicTableProps = reactive<BasicTableProps>({
}, },
pageList: fetchList, pageList: fetchList,
}) })
const purchaseStore = usePurchase()
// table hook // table hook
const { getDataList, currentChangeHandle, sizeChangeHandle, sortChangeHandle, downBlobFile, tableStyle } = useTable(state) const { getDataList, currentChangeHandle, sizeChangeHandle, sortChangeHandle, downBlobFile, tableStyle } = useTable(state)
@@ -159,10 +171,21 @@ const selectionChangHandle = (objs: { id: string }[]) => {
} }
// 点击创建出库入库记录表 // 点击创建出库入库记录表
const handleClickCreateInventoryRecord = () => router.push({ path: "/supermarketerp/retailManagement/smErpRetailDelivery/form" }) const handleClickCreateInventoryRecord = () => {
purchaseStore.setPurchaseFormId("")
purchaseStore.setPurchaseFormDisabled(false)
router.push({ path: "/supermarketerp/retailManagement/smErpRetailDelivery/form" })
}
// 点击编辑出库入库记录表 // 点击编辑出库入库记录表
const handleClickEditInventoryRecord = (id: string) => const handleClickEditInventoryRecord = (row: any) => {
router.push({ path: "/supermarketerp/retailManagement/smErpRetailDelivery/form", query: { id } }) row.id ? purchaseStore.setPurchaseFormId(row.id) : useMessage().warning("清单id不存在")
if (row.checkStatus == 2) {
purchaseStore.setPurchaseFormDisabled(true)
} else {
purchaseStore.setPurchaseFormDisabled(false)
}
router.push({ path: "/supermarketerp/retailManagement/smErpRetailDelivery/form" })
}
// 删除操作 // 删除操作
const handleDelete = async (ids: string[]) => { const handleDelete = async (ids: string[]) => {
+76 -23
View File
@@ -1,24 +1,53 @@
<template> <template>
<div class="layout-padding"> <div v-loading="loading" :element-loading-svg="svg" element-loading-svg-view-box="-10, -10, 50, 50" class="layout-padding">
<div v-loading="loading" class="layout-padding-auto layout-padding-view" style="overflow: scroll"> <div v-if="baseDataForm.inventoryCode" class="layout-padding-auto layout-padding-view" style="overflow: scroll">
<el-form ref="baseDataFormRef" :model="baseDataForm" :rules="dataRules" label-width="100px"> <el-form v-if="!disabled" ref="baseDataFormRef" :model="baseDataForm" :rules="dataRules" label-width="100px">
<div class="flex flex-wrap"> <div class="flex flex-wrap">
<el-form-item label="单据编号" prop="inventoryCode"> <el-form-item label="单据编号" prop="inventoryCode">
<el-input v-model.trim="baseDataForm.inventoryCode" readonly style="width: 200px" /> <el-input v-model.trim="baseDataForm.inventoryCode" readonly style="width: 200px" :disabled="disabled" />
</el-form-item> </el-form-item>
<el-form-item label="单据日期" prop="inventoryDate"> <el-form-item label="单据日期" prop="inventoryDate">
<el-input v-model="baseDataForm.inventoryDate" readonly style="width: 200px" /> <el-input v-model="baseDataForm.inventoryDate" readonly style="width: 200px" :disabled="disabled" />
</el-form-item> </el-form-item>
<el-form-item label="经办人" prop="handlerUserId"> <el-form-item label="经办人" prop="handlerUserId">
<SelectHandlerUser v-model.trim="baseDataForm.handlerUserId" placeholder="请选择经办人" style="width: 200px" /> <SelectHandlerUser
v-model.trim="baseDataForm.handlerUserId"
placeholder="请选择经办人"
style="width: 200px"
:disabled="disabled"
/>
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="remark"> <el-form-item label="备注" prop="remark">
<el-input v-model.trim="baseDataForm.remark" placeholder="请输入备注" style="width: 200px" /> <el-input v-model.trim="baseDataForm.remark" placeholder="请输入备注" style="width: 200px" :disabled="disabled" />
</el-form-item> </el-form-item>
</div> </div>
</el-form> </el-form>
<div v-else ref="baseDataInfoRef">
<div style="margin-bottom: 8px; padding: 8px 16px; color: #606279">
<div style="display: inline-block; width: 100%">
<div style="float: left; width: 33.33%; height: 28px; line-height: 28px">
<span class="font-bold">单据编号:</span>
<span>{{ baseDataForm.inventoryCode }}</span>
</div>
<div style="float: left; width: 33.33%; height: 28px; line-height: 28px">
<span class="font-bold">单据日期:</span>
<span>{{ baseDataForm.inventoryDate }}</span>
</div>
<div style="float: left; width: 33.33%; height: 28px; line-height: 28px">
<span class="font-bold">经办人:</span>
<span>{{ baseDataForm.handlerUserId }}</span>
</div>
</div>
<div style="display: inline-block; width: 100%">
<div style="float: left; width: 33.33%; height: 28px; line-height: 28px">
<span class="font-bold">备注:</span>
<span>{{ baseDataForm.remark }}</span>
</div>
</div>
</div>
</div>
<el-row class="my-3"> <el-row v-if="!disabled" class="my-3">
<el-button @click="addEvent">新增(顶部)</el-button> <el-button @click="addEvent">新增(顶部)</el-button>
<el-button @click="pushEvent">新增(尾部)</el-button> <el-button @click="pushEvent">新增(尾部)</el-button>
<el-button @click="insertEvent"> <el-button @click="insertEvent">
@@ -49,11 +78,12 @@
:edit-config="{ :edit-config="{
trigger: 'click', trigger: 'click',
mode: 'cell', mode: 'cell',
beforeEditMethod({ row, column }:any) { beforeEditMethod({ row, column, rowIndex }:any) {
// 禁止编辑 // 禁止编辑
if (column.property === '') { // if (column.property === '') {
return false // return false
} // }
if(disabled) return false
return true return true
}, },
}" }"
@@ -170,9 +200,12 @@
<el-tooltip v-if="!baseDataForm.id" effect="dark" content="保存并清空数据" placement="top"> <el-tooltip v-if="!baseDataForm.id" effect="dark" content="保存并清空数据" placement="top">
<el-button type="primary" plain @click="onContinueAdd">继续添加</el-button> <el-button type="primary" plain @click="onContinueAdd">继续添加</el-button>
</el-tooltip> </el-tooltip>
<el-tooltip effect="dark" content="保存并返回列表页面" placement="top"> <el-tooltip v-if="!disabled" effect="dark" content="保存并返回列表页面" placement="top">
<el-button type="primary" plain @click="onSave">保存</el-button> <el-button type="primary" plain @click="onSave">保存</el-button>
</el-tooltip> </el-tooltip>
<el-tooltip v-if="disabled" effect="dark" content="打印清单" placement="top">
<el-button type="success" plain @click="printEvent">打印</el-button>
</el-tooltip>
</el-row> </el-row>
<!-- 商品选择对话框 --> <!-- 商品选择对话框 -->
@@ -189,25 +222,28 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, reactive, computed, onMounted, watch } from "vue" import { ref, reactive, computed, onMounted } from "vue"
import { useRouter, useRoute } from "vue-router" import { useRouter } from "vue-router"
import { useMessage } from "/@/hooks/message" import { useMessage } from "/@/hooks/message"
import { addObj, putObj } from "/@/api/supermarketerp/smErpInventoryRecords"
import { getPlanCode, getErpSpuSimpleAll } from "/@/api/supermarketerp/common" import { getPlanCode, getErpSpuSimpleAll } from "/@/api/supermarketerp/common"
import { getStockTakingDeatil } from "/@/api/supermarketerp/stockTaking" import { getStockTakingDeatil, stockTakingAdd } from "/@/api/supermarketerp/stockTaking"
import { VxeTableEvents, VxeTablePropTypes, type VxeTableInstance } from "vxe-table" import { VxeTableEvents, VxeTablePropTypes, type VxeTableInstance } from "vxe-table"
import { formatDate } from "/@/utils/formatTime" import { formatDate } from "/@/utils/formatTime"
import erpSpuSelectDialog from "/@/views/supermarketerp/components/erpSpuSelectDialog.vue" import erpSpuSelectDialog from "/@/views/supermarketerp/components/erpSpuSelectDialog.vue"
import barCodeEnter from "./barCodeEnter.vue" import barCodeEnter from "./barCodeEnter.vue"
import { displayPrice } from "/@/utils/formatMoney" import { displayPrice } from "/@/utils/formatMoney"
import { usePurchase } from "/@/stores/purchase"
import { tablePrint } from "../supermarketUtils"
const purchaseStore = usePurchase()
const router = useRouter() const router = useRouter()
const route = useRoute()
const loading = ref(false) // 采购计划加载 const loading = ref(false) // 采购计划加载
const disabled = ref(false)
const erpSpuSelectDialogRef = ref() // 商品选择对话框ref const erpSpuSelectDialogRef = ref() // 商品选择对话框ref
const barCodeEnterRef = ref() // 条码录入对话框ref const barCodeEnterRef = ref() // 条码录入对话框ref
const baseDataFormRef = ref() // 基本数据表单ref const baseDataFormRef = ref() // 基本数据表单ref
const editableTableRef = ref<VxeTableInstance<any>>() // 可编辑表格ref const editableTableRef = ref<VxeTableInstance<any>>() // 可编辑表格ref
const baseDataInfoRef = ref() // 基本信息ref
// 基本信息表单数据 // 基本信息表单数据
const baseDataForm = reactive<any>({ const baseDataForm = reactive<any>({
id: "", id: "",
@@ -238,6 +274,14 @@ const state = reactive<{
erpSpuSelectDialogVisible: false, // 商品选择对话框开关 erpSpuSelectDialogVisible: false, // 商品选择对话框开关
linkCgPlanDialogVisible: false, // 关联采购申请单对话框开关 linkCgPlanDialogVisible: false, // 关联采购申请单对话框开关
}) })
const svg = `<path class="path" d="
M 30 15
L 28 17
M 25.61 25.61
A 15 15, 0, 0, 1, 15 30
A 15 15, 0, 1, 1, 27.99 7.5
L 15 15
" style="stroke-width: 4px; fill: rgba(0, 0, 0, 0)"/>`
// 基本信息表单校验规则 // 基本信息表单校验规则
const dataRules = ref({ const dataRules = ref({
@@ -254,7 +298,9 @@ const validRules = ref<VxeTablePropTypes.EditRules<any>>({
// 初始化数据 // 初始化数据
const getInitData = async () => { const getInitData = async () => {
baseDataForm.id = undefined baseDataForm.id = undefined
const id = route.query.id as string // const id = route.query.id as string
const id = purchaseStore.purchaseFormState.id
disabled.value = purchaseStore.purchaseFormState.disabled
if (id) { if (id) {
loading.value = true loading.value = true
// 获取采购计划数据 & 获取简要商品列表 // 获取采购计划数据 & 获取简要商品列表
@@ -267,12 +313,14 @@ const getInitData = async () => {
state.editableTableData = cgPlanData.data.items state.editableTableData = cgPlanData.data.items
state.erpSpuItemsMemo = cgPlanData.data.items state.erpSpuItemsMemo = cgPlanData.data.items
} }
return
} }
loading.value = true
// 获取采购入库编号 // 获取采购入库编号
const [erpSpuSimpleAll, planCode] = await Promise.allSettled([getErpSpuSimpleAll(), getPlanCode({ type: 7 })]).then((results) => const [erpSpuSimpleAll, planCode] = await Promise.allSettled([getErpSpuSimpleAll(), getPlanCode({ type: 7 })])
results.map((result) => (result.status === "fulfilled" ? result.value : null)), .then((results) => results.map((result) => (result.status === "fulfilled" ? result.value : null)))
) .finally(() => (loading.value = false))
erpSpuSimpleAll && erpSpuSimpleAll.code === 0 && (state.erpSpuSimpleAll = erpSpuSimpleAll.data) erpSpuSimpleAll && erpSpuSimpleAll.code === 0 && (state.erpSpuSimpleAll = erpSpuSimpleAll.data)
planCode && planCode.code === 0 && (baseDataForm.inventoryCode = planCode.data) planCode && planCode.code === 0 && (baseDataForm.inventoryCode = planCode.data)
} }
@@ -554,7 +602,7 @@ const submitData = async () => {
console.log("提交的数据:", _pa) console.log("提交的数据:", _pa)
const res = baseDataForm.id ? await putObj(_pa) : await addObj(_pa) const res = baseDataForm.id ? await putObj(_pa) : await stockTakingAdd(_pa)
if (res.code === 0) { if (res.code === 0) {
useMessage().success(baseDataForm.id ? "修改成功" : "添加成功") useMessage().success(baseDataForm.id ? "修改成功" : "添加成功")
return true return true
@@ -619,6 +667,11 @@ const handleEditChange = ({ row, column }: any) => {
// } // }
} }
// 点击打印
const printEvent = () => {
tablePrint(editableTableRef.value, baseDataInfoRef.value, state.editableTableData, 23, "库存盘点")
}
onMounted(() => { onMounted(() => {
getInitData() getInitData()
}) })
+27 -4
View File
@@ -68,7 +68,16 @@
<!-- <el-table-column prop="totalAmount" label="入库总金额" show-overflow-tooltip /> --> <!-- <el-table-column prop="totalAmount" label="入库总金额" show-overflow-tooltip /> -->
<el-table-column label="操作" width="150"> <el-table-column label="操作" width="150">
<template #default="scope"> <template #default="scope">
<el-button icon="edit-pen" text type="primary" @click="handleClickEditStockTaking(scope.row.id)">编辑</el-button> <el-button
v-if="scope.row.checkStatus == '2'"
icon="MessageBox"
text
type="success"
@click="handleClickEditStockTaking(scope.row)"
>
详情
</el-button>
<el-button v-else icon="edit-pen" text type="primary" @click="handleClickEditStockTaking(scope.row)">编辑</el-button>
<el-button icon="delete" text type="primary" @click="handleDelete([scope.row.id])">删除</el-button> <el-button icon="delete" text type="primary" @click="handleDelete([scope.row.id])">删除</el-button>
</template> </template>
</el-table-column> </el-table-column>
@@ -83,7 +92,8 @@ import { useRouter } from "vue-router"
import { BasicTableProps, useTable } from "/@/hooks/table" import { BasicTableProps, useTable } from "/@/hooks/table"
import { useMessage, useMessageBox } from "/@/hooks/message" import { useMessage, useMessageBox } from "/@/hooks/message"
import { useDict } from "/@/hooks/dict" import { useDict } from "/@/hooks/dict"
import { fetchList } from "/@/api/supermarketerp/smErpCgDd" import { fetchList } from "/@/api/supermarketerp/smErpInventoryRecords"
import { usePurchase } from "/@/stores/purchase"
const router = useRouter() const router = useRouter()
const { check_status } = useDict("check_status") const { check_status } = useDict("check_status")
@@ -100,6 +110,7 @@ const state: BasicTableProps = reactive<BasicTableProps>({
}, },
pageList: fetchList, pageList: fetchList,
}) })
const purchaseStore = usePurchase()
// table hook // table hook
const { getDataList, currentChangeHandle, sizeChangeHandle, sortChangeHandle, downBlobFile, tableStyle } = useTable(state) const { getDataList, currentChangeHandle, sizeChangeHandle, sortChangeHandle, downBlobFile, tableStyle } = useTable(state)
@@ -124,8 +135,20 @@ const selectionChangHandle = (objs: { id: string }[]) => {
multiple.value = !objs.length multiple.value = !objs.length
} }
const handleClickCreateStockTaking = () => router.push({ path: "/supermarketerp/stockTaking/form" }) const handleClickCreateStockTaking = () => {
const handleClickEditStockTaking = (id: string) => router.push({ path: "/supermarketerp/stockTaking/form", query: { id } }) purchaseStore.setPurchaseFormId("")
purchaseStore.setPurchaseFormDisabled(false)
router.push({ path: "/supermarketerp/stockTaking/form" })
}
const handleClickEditStockTaking = (row: any) => {
row.id ? purchaseStore.setPurchaseFormId(row.id) : useMessage().warning("清单id不存在")
if (row.checkStatus == 2) {
purchaseStore.setPurchaseFormDisabled(true)
} else {
purchaseStore.setPurchaseFormDisabled(false)
}
router.push({ path: "/supermarketerp/stockTaking/form" })
}
// 删除操作 // 删除操作
const handleDelete = async (ids: string[]) => { const handleDelete = async (ids: string[]) => {
@@ -164,7 +164,7 @@ const handleTabChange = (name: TabPaneName) => (currentTabPaneIndex.value = tabP
// 计算包装单位列表 // 计算包装单位列表
const usePackageUnitList = () => { const usePackageUnitList = () => {
const curRadioRowUnit = packageUnitRef.value.getRadioEvent() const curRadioRowUnit = packageUnitRef.value.getRadioEvent()
const smErpUnitEntityList = JSON.parse(JSON.stringify(form.smErpUnitEntityList)) // 深拷贝 const smErpUnitEntityList = JSON.parse(JSON.stringify(form.smErpUnitEntityList))
return smErpUnitEntityList.map((item: rowVU) => { return smErpUnitEntityList.map((item: rowVU) => {
if (item.id === curRadioRowUnit.id) { if (item.id === curRadioRowUnit.id) {
item.isBase = true item.isBase = true
@@ -0,0 +1,48 @@
import { VxeUI } from "vxe-table"
// 数组分块分组
function chunk<T>(array: T[], size: number): T[][] {
if (size <= 0) {
throw new Error("组的大小必须大于0")
}
const result: T[][] = []
for (let i = 0; i < array.length; i += size) {
result.push(array.slice(i, i + size))
}
return result
}
// 表格分页 + 表单信息 打印
export const tablePrint = (
editableTableRef: any,
baseDataInfoRef: any,
editableTableData: any,
tableChunkSize: number = 20,
printTitle: string = "",
) => {
const $table = editableTableRef
const formPrintHtml = baseDataInfoRef ? baseDataInfoRef.innerHTML : ""
if ($table && formPrintHtml) {
// 分割每页20条
Promise.all(
chunk(editableTableData, tableChunkSize).map((pageData: any, index: number) => {
return $table
.getPrintHtml({
data: pageData,
})
.then(({ html }: any) => {
return {
bodyHtml: index === 0 ? formPrintHtml + html : html,
}
})
}),
).then((pageBreaks) => {
VxeUI.print({
title: printTitle,
showPageNumber: true,
pageBreaks,
})
})
}
}