feat(wmsShippingBill/index): 优化发货单列表操作逻辑

- 根据流程状态动态显示修改、删除和查看按钮,新增收货单附件下载和审批记录查看功能,并根据选中行状态控制批量操作按钮显示
- 草稿、退回、撤销:显示修改、删除、打印。
  进入流程后的单据:显示查看、审批记录、打印。
dev
zangch@mesnac.com 3 days ago
parent c60927eb38
commit 3dd8f83fa3

@ -65,12 +65,26 @@
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['wms:wmsShippingBill:add']"></el-button> <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['wms:wmsShippingBill:add']"></el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['wms:wmsShippingBill:edit']" <el-button
v-if="!hideBatchEditDeleteButtons"
type="success"
plain
icon="Edit"
:disabled="single"
@click="handleUpdate()"
v-hasPermi="['wms:wmsShippingBill:edit']"
>修改</el-button >修改</el-button
> >
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['wms:wmsShippingBill:remove']" <el-button
v-if="!hideBatchEditDeleteButtons"
type="danger"
plain
icon="Delete"
:disabled="multiple"
@click="handleDelete()"
v-hasPermi="['wms:wmsShippingBill:remove']"
>删除</el-button >删除</el-button
> >
</el-col> </el-col>
@ -125,32 +139,58 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="到货确认人" align="center" prop="arrivalConfirmByName" width="110" show-overflow-tooltip v-if="columns[12].visible" /> <el-table-column label="到货确认人" align="center" prop="arrivalConfirmByName" width="110" show-overflow-tooltip v-if="columns[12].visible" />
<el-table-column label="计划到货时间" align="center" prop="planArrivalTime" width="110" v-if="columns[13].visible"> <el-table-column label="收货单附件" align="center" min-width="160" v-if="columns[13].visible">
<template #default="scope">
<template v-if="getArrivalReceiptOssIds(scope.row).length > 0">
<el-button
v-for="(ossId, index) in getArrivalReceiptOssIds(scope.row)"
:key="`${scope.row.shippingBillId}-${ossId}`"
link
type="primary"
icon="Download"
@click="downloadArrivalReceipt(ossId)"
>
附件{{ index + 1 }}
</el-button>
</template>
<span v-else style="color: #999">暂无附件</span>
</template>
</el-table-column>
<el-table-column label="计划到货时间" align="center" prop="planArrivalTime" width="110" v-if="columns[14].visible">
<template #default="scope"> <template #default="scope">
<span>{{ proxy?.parseTime(scope.row.planArrivalTime, '{y}-{m}-{d}') }}</span> <span>{{ proxy?.parseTime(scope.row.planArrivalTime, '{y}-{m}-{d}') }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="实际发货时间" align="center" prop="shippingTime" width="110" v-if="columns[14].visible"> <el-table-column label="实际发货时间" align="center" prop="shippingTime" width="110" v-if="columns[15].visible">
<template #default="scope"> <template #default="scope">
<span>{{ proxy?.parseTime(scope.row.shippingTime, '{y}-{m}-{d}') }}</span> <span>{{ proxy?.parseTime(scope.row.shippingTime, '{y}-{m}-{d}') }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="110" v-if="columns[15].visible"> <el-table-column label="创建时间" align="center" prop="createTime" width="110" v-if="columns[16].visible">
<template #default="scope"> <template #default="scope">
<span>{{ proxy?.parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span> <span>{{ proxy?.parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" fixed="right" width="180" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" fixed="right" width="220" class-name="small-padding fixed-width">
<template #default="scope"> <template #default="scope">
<el-tooltip content="查看" placement="top"> <el-tooltip v-if="isEditableFlowStatus(scope.row)" content="修改" placement="top">
<el-button link type="primary" icon="View" @click="handleView(scope.row)" v-hasPermi="['wms:wmsShippingBill:query']"></el-button>
</el-tooltip>
<el-tooltip content="修改" placement="top">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['wms:wmsShippingBill:edit']"></el-button> <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['wms:wmsShippingBill:edit']"></el-button>
</el-tooltip> </el-tooltip>
<el-tooltip content="删除" placement="top"> <el-tooltip v-if="shouldShowViewButton(scope.row)" content="查看" placement="top">
<el-button
link
type="info"
icon="DocumentChecked"
@click="handleView(scope.row)"
v-hasPermi="['wms:wmsShippingBill:query']"
></el-button>
</el-tooltip>
<el-tooltip v-if="isEditableFlowStatus(scope.row)" content="删除" placement="top">
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['wms:wmsShippingBill:remove']"></el-button> <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['wms:wmsShippingBill:remove']"></el-button>
</el-tooltip> </el-tooltip>
<el-tooltip v-if="shouldShowApprovalRecord(scope.row)" content="审批记录" placement="top">
<el-button link type="warning" icon="Histogram" @click="handleApprovalRecord(scope.row)"></el-button>
</el-tooltip>
<el-tooltip content="打印" placement="top"> <el-tooltip content="打印" placement="top">
<el-button <el-button
link link
@ -166,6 +206,7 @@
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" /> <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-card> </el-card>
<ApprovalRecord ref="approvalRecordRef" />
<!-- 添加或修改发货单对话框 --> <!-- 添加或修改发货单对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body> <el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
<el-form ref="wmsShippingBillFormRef" :model="form" :rules="rules" label-width="120px"> <el-form ref="wmsShippingBillFormRef" :model="form" :rules="rules" label-width="120px">
@ -292,6 +333,7 @@ import {
updateWmsShippingBill updateWmsShippingBill
} from '@/api/wms/wmsShippingBill'; } from '@/api/wms/wmsShippingBill';
import { WmsShippingBillForm, WmsShippingBillQuery, WmsShippingBillVO } from '@/api/wms/wmsShippingBill/types'; import { WmsShippingBillForm, WmsShippingBillQuery, WmsShippingBillVO } from '@/api/wms/wmsShippingBill/types';
import ApprovalRecord from '@/components/Process/approvalRecord.vue';
const router = useRouter(); const router = useRouter();
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;
@ -306,6 +348,7 @@ const buttonLoading = ref(false);
const loading = ref(true); const loading = ref(true);
const showSearch = ref(true); const showSearch = ref(true);
const ids = ref<Array<string | number>>([]); const ids = ref<Array<string | number>>([]);
const selectedRows = ref<WmsShippingBillVO[]>([]);
const single = ref(true); const single = ref(true);
const multiple = ref(true); const multiple = ref(true);
const total = ref(0); const total = ref(0);
@ -333,9 +376,10 @@ const columns = ref<FieldOption[]>([
{ key: 10, label: '到货标识', visible: true }, { key: 10, label: '到货标识', visible: true },
{ key: 11, label: '到货确认时间', visible: true }, { key: 11, label: '到货确认时间', visible: true },
{ key: 12, label: '到货确认人', visible: false }, { key: 12, label: '到货确认人', visible: false },
{ key: 13, label: '计划到货时间', visible: true }, { key: 13, label: '收货单附件', visible: true },
{ key: 14, label: '实际发货时间', visible: true }, { key: 14, label: '计划到货时间', visible: true },
{ key: 15, label: '创建时间', visible: false } { key: 15, label: '实际发货时间', visible: true },
{ key: 16, label: '创建时间', visible: false }
]); ]);
const initFormData: WmsShippingBillForm = { const initFormData: WmsShippingBillForm = {
@ -428,6 +472,33 @@ const data = reactive<PageData<WmsShippingBillForm, WmsShippingBillQuery>>({
const { queryParams, form, rules } = toRefs(data); const { queryParams, form, rules } = toRefs(data);
const arrivalConfirmTimeRange = ref<string[]>(); const arrivalConfirmTimeRange = ref<string[]>();
const approvalRecordRef = ref<InstanceType<typeof ApprovalRecord>>();
const isEditableFlowStatus = (row?: WmsShippingBillVO) => {
const flowStatus = String(row?.flowStatus || '').trim();
return !flowStatus || flowStatus === 'draft' || flowStatus === 'back' || flowStatus === 'cancel';
};
const shouldShowViewButton = (row?: WmsShippingBillVO) => !isEditableFlowStatus(row);
const shouldShowApprovalRecord = (row?: WmsShippingBillVO) => {
const flowStatus = String(row?.flowStatus || '').trim();
return !!flowStatus && flowStatus !== 'draft';
};
const getArrivalReceiptOssIds = (row?: WmsShippingBillVO) => {
const ossIds = String(row?.arrivalReceiptOssId || '')
.split(',')
.map((item) => item.trim())
.filter((item) => item.length > 0);
return Array.from(new Set(ossIds));
};
const downloadArrivalReceipt = (ossId: string) => {
proxy?.$download.oss(ossId as any);
};
const hideBatchEditDeleteButtons = computed(() => selectedRows.value.some((item) => !isEditableFlowStatus(item)));
/** 查询发货单列表 */ /** 查询发货单列表 */
const getList = async () => { const getList = async () => {
@ -475,6 +546,7 @@ const resetQuery = () => {
/** 多选框选中数据 */ /** 多选框选中数据 */
const handleSelectionChange = (selection: WmsShippingBillVO[]) => { const handleSelectionChange = (selection: WmsShippingBillVO[]) => {
selectedRows.value = selection;
ids.value = selection.map((item) => item.shippingBillId); ids.value = selection.map((item) => item.shippingBillId);
single.value = selection.length != 1; single.value = selection.length != 1;
multiple.value = !selection.length; multiple.value = !selection.length;
@ -490,6 +562,12 @@ const handleView = (row: WmsShippingBillVO) => {
router.push({ path: '/shipping/wmsShippingBill/edit', query: { type: 'view', id: row.shippingBillId } }); router.push({ path: '/shipping/wmsShippingBill/edit', query: { type: 'view', id: row.shippingBillId } });
}; };
/** 审批记录 */
const handleApprovalRecord = (row: WmsShippingBillVO) => {
// ID
approvalRecordRef.value?.init(row.shippingBillId);
};
/** 修改按钮操作 */ /** 修改按钮操作 */
const handleUpdate = async (row?: WmsShippingBillVO) => { const handleUpdate = async (row?: WmsShippingBillVO) => {
const _shippingBillId = row?.shippingBillId || ids.value[0]; const _shippingBillId = row?.shippingBillId || ids.value[0];

Loading…
Cancel
Save