dev 9a33b4c5fc
Some checks failed
自动部署测试 / build-and-deploy (push) Has been cancelled
8月份需求修改
2025-08-26 16:58:59 +08:00

726 lines
29 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="p-2">
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width="180px">
<el-form-item label="订单号" prop="orderId">
<el-input v-model="queryParams.orderId" placeholder="请输入订单号" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="FBA货件编号" prop="fbaShipmentId">
<el-input v-model="queryParams.fbaShipmentId" placeholder="请输入FBA货件编号" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="FBA箱号" prop="fbaBoxNumber">
<el-input v-model="queryParams.fbaBoxNumber" placeholder="请输入FBA箱号" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="物流商ID" prop="logisticsProviderId">
<el-input v-model="queryParams.logisticsProviderId" placeholder="请输入物流商ID" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="物流商名称" prop="logisticsProviderName">
<el-input v-model="queryParams.logisticsProviderName" placeholder="请输入物流商名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="物流渠道" prop="logisticsChannel">
<el-input v-model="queryParams.logisticsChannel" placeholder="请输入物流渠道" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="目的地仓库" prop="destination">
<el-input v-model="queryParams.destination" placeholder="请输入目的地仓库" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="物流追踪号" prop="trackingNumber">
<el-input v-model="queryParams.trackingNumber" placeholder="请输入物流追踪号" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="预计签收日期" prop="estimatedDeliveryDate">
<el-date-picker
clearable
v-model="queryParams.estimatedDeliveryDate"
type="date"
value-format="YYYY-MM-DD"
placeholder="请选择预计签收日期"
/>
</el-form-item>
<el-form-item label="实际签收日期" prop="actualDeliveryDate">
<el-date-picker
clearable
v-model="queryParams.actualDeliveryDate"
type="date"
value-format="YYYY-MM-DD"
placeholder="请选择实际签收日期"
/>
</el-form-item>
<el-form-item label="运输时效" prop="timeliness">
<el-input v-model="queryParams.timeliness" placeholder="请输入运输时效" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
</el-card>
</div>
</transition>
<el-card shadow="never">
<template #header>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['amz:logisticsOrderDetail:add']">新增 </el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['amz:logisticsOrderDetail:edit']"
>修改
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['amz:logisticsOrderDetail:remove']"
>删除
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['amz:logisticsOrderDetail:export']">导出 </el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="Download"
@click="openEdit"
v-hasRoles="['superadmin']"
v-hasPermi="['amz:logisticsOrderDetail:export']"
>打开编辑模式
</el-button>
</el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
</template>
<el-table v-loading="loading" :data="logisticsOrderDetailList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="订单号" align="center" prop="orderId" />
<el-table-column label="FBA货件编号" align="center" prop="fbaShipmentId" />
<el-table-column label="FBA箱号" align="center" prop="fbaBoxNumber" />
<el-table-column label="物流商ID" align="center" prop="logisticsProviderId" />
<el-table-column label="物流商名称" align="center" prop="logisticsProviderName" />
<el-table-column label="物流渠道" align="center" prop="logisticsChannel" />
<el-table-column label="目的地仓库" align="center" prop="destination" />
<el-table-column label="计划数量" align="center" prop="plannedQuantity" />
<el-table-column label="实际货件数量" align="center" prop="shipmentQuantity" />
<el-table-column label="物流追踪号" align="center" prop="trackingNumber" />
<el-table-column label="供应商称重-总重量" align="center" prop="supplierWeight" />
<el-table-column label="物流商计重" align="center" prop="logisticsWeight" />
<el-table-column label="称重差异" align="center" prop="weightDiff" />
<el-table-column label="物流单价" align="center" prop="pricePerKg" />
<el-table-column label="物流计价重量" align="center" prop="logisticsCalculationPrice" />
<el-table-column label="其他物流费用" align="center" prop="otherFee" />
<el-table-column label="费用合计" align="center" prop="totalFee" />
<el-table-column label="物流状态" align="center" prop="logisticsStatus" />
<el-table-column label="预计签收日期" align="center" prop="estimatedDeliveryDate" width="180">
<template #default="scope">
<span>{{ parseTime(scope.row.estimatedDeliveryDate, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="实际签收日期" align="center" prop="actualDeliveryDate" width="180">
<template #default="scope">
<span>{{ parseTime(scope.row.actualDeliveryDate, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="运输时效" align="center" prop="timeliness" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-tooltip content="修改" placement="top">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['amz:logisticsOrderDetail:edit']"></el-button>
</el-tooltip>
<el-tooltip content="删除" placement="top">
<el-button
link
type="primary"
icon="Delete"
@click="handleDelete(scope.row)"
v-hasPermi="['amz:logisticsOrderDetail:remove']"
></el-button>
</el-tooltip>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-card>
<el-drawer size="70%" v-model="hotTableDrawer" :direction="'ttb'">
<template #header>
<h4>set title by slot</h4>
</template>
<template #default>
<HotTable class="hot-container" ref="hotTable" :settings="hotSettings" :data="processedData" :key="tableKey"></HotTable>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
</template>
<template #footer>
<div style="flex: auto">
<el-button @click="cancelDataClick">cancel</el-button>
<el-button type="primary" @click="submitDataClick">confirm</el-button>
</div>
</template>
</el-drawer>
<!-- 添加或修改物流订单明细按箱子维度存储对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="800px" append-to-body>
<el-form ref="logisticsOrderDetailFormRef" :model="form" :rules="rules" label-width="180px">
<el-form-item label="订单号" prop="orderId">
<el-input v-model="form.orderId" placeholder="请输入订单号" disabled />
</el-form-item>
<el-form-item label="FBA货件编号" prop="fbaShipmentId">
<el-input v-model="form.fbaShipmentId" placeholder="请输入FBA货件编号" disabled />
</el-form-item>
<el-form-item label="FBA箱号" prop="fbaBoxNumber">
<el-input v-model="form.fbaBoxNumber" placeholder="请输入FBA箱号" disabled />
</el-form-item>
<el-form-item label="物流商ID" prop="logisticsProviderId">
<el-input v-model="form.logisticsProviderId" placeholder="请输入物流商ID" disabled />
</el-form-item>
<el-form-item label="物流商名称" prop="logisticsProviderName">
<el-input v-model="form.logisticsProviderName" placeholder="请输入物流商名称" disabled />
</el-form-item>
<el-form-item label="物流渠道" prop="logisticsChannel">
<el-input v-model="form.logisticsChannel" placeholder="请输入物流渠道" disabled />
</el-form-item>
<el-form-item label="目的地仓库" prop="destination">
<el-input v-model="form.destination" placeholder="请输入目的地仓库" disabled />
</el-form-item>
<el-form-item label="计划数量" prop="plannedQuantity">
<el-input v-model="form.plannedQuantity" placeholder="请输入计划数量" disabled />
</el-form-item>
<el-form-item label="实际货件数量" prop="shipmentQuantity">
<el-input v-model="form.shipmentQuantity" placeholder="请输入实际货件数量" />
</el-form-item>
<el-form-item label="物流追踪号" prop="trackingNumber">
<el-input v-model="form.trackingNumber" placeholder="请输入物流追踪号" />
</el-form-item>
<el-form-item label="供应商称重-总重量" prop="supplierWeight">
<el-input v-model="form.supplierWeight" placeholder="请输入供应商称重-总重量" />
</el-form-item>
<el-form-item label="物流商计重" prop="logisticsWeight">
<el-input v-model="form.logisticsWeight" placeholder="请输入物流商计重" />
</el-form-item>
<el-form-item label="称重差异" prop="weightDiff">
<el-input v-model="form.weightDiff" placeholder="请输入称重差异" />
</el-form-item>
<el-form-item label="物流单价" prop="pricePerKg">
<el-input v-model="form.pricePerKg" placeholder="请输入物流单价" />
</el-form-item>
<el-form-item label="物流计价重量" prop="logisticsCalculationPrice">
<el-input v-model="form.logisticsCalculationPrice" placeholder="请输入物流计价重量" />
</el-form-item>
<el-form-item label="其他物流费用" prop="otherFee">
<el-input v-model="form.otherFee" placeholder="请输入其他物流费用" />
</el-form-item>
<el-form-item label="费用合计" prop="totalFee">
<el-input v-model="form.totalFee" placeholder="请输入费用合计" />
</el-form-item>
<el-form-item label="物流状态" prop="logisticsStatus">
<el-select v-model="form.logisticsStatus" clearable placeholder="物流状态">
<el-option
v-model="form.logisticsStatus"
v-for="dict in biz_logistics_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="预计签收日期" prop="estimatedDeliveryDate">
<el-date-picker
clearable
v-model="form.estimatedDeliveryDate"
type="datetime"
value-format="YYYY-MM-DD HH:mm:ss"
placeholder="请选择预计签收日期"
>
</el-date-picker>
</el-form-item>
<el-form-item label="实际签收日期" prop="actualDeliveryDate">
<el-date-picker
clearable
v-model="form.actualDeliveryDate"
type="datetime"
value-format="YYYY-MM-DD HH:mm:ss"
placeholder="请选择实际签收日期"
>
</el-date-picker>
</el-form-item>
<el-form-item label="运输时效" prop="timeliness">
<el-input v-model="form.timeliness" placeholder="请输入运输时效" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup name="LogisticsOrderDetail" lang="ts">
import {
listLogisticsOrderDetail,
getLogisticsOrderDetail,
delLogisticsOrderDetail,
addLogisticsOrderDetail,
updateLogisticsOrderDetail
} from '@/api/amz/logisticsOrderDetail';
import { LogisticsOrderDetailVO, LogisticsOrderDetailQuery, LogisticsOrderDetailForm } from '@/api/amz/logisticsOrderDetail/types';
import { checkPermi } from '@/utils/permission';
import { ref, computed, watch, onMounted, onUnmounted } from 'vue';
import { HotTable } from '@handsontable/vue3';
import { registerAllModules } from 'handsontable/registry';
import 'handsontable/dist/handsontable.full.min.css';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { biz_logistics_status } = toRefs<any>(proxy?.useDict('biz_logistics_status'));
const logisticsOrderDetailList = ref<LogisticsOrderDetailVO[]>([]);
const buttonLoading = ref(false);
const loading = ref(true);
const showSearch = ref(true);
const ids = ref<Array<string | number>>([]);
const single = ref(true);
const multiple = ref(true);
const hotTableDrawer = ref(false);
const total = ref(0);
const queryFormRef = ref<ElFormInstance>();
const logisticsOrderDetailFormRef = ref<ElFormInstance>();
// 初始化注册所有模块
registerAllModules();
// 表格实例引用
const hotTable = ref<InstanceType<typeof HotTable>>();
const tableKey = ref(0);
// 处理后的表格数据(包含派生字段)
const processedData = computed(() => {
return logisticsOrderDetailList.value.map((item) => ({
...item,
weightDiff: item.logisticsWeight - item.supplierWeight,
estimatedDeliveryDateFormatted: proxy.parseTime(item.estimatedDeliveryDate, '{y}-{m}-{d}'),
actualDeliveryDateFormatted: proxy.parseTime(item.actualDeliveryDate, '{y}-{m}-{d}')
}));
});
// 表格配置-------
const hotSettings = ref({
licenseKey: 'non-commercial-and-evaluation',
manualColumnResize: true, // 手动调整列宽默认 false
rowHeaders: false, // 关闭行号
filters: true, // 启用筛选
// dropdownMenu: true, // 启用菜单
// contextMenu: true, // 启用右键菜单
height: 'auto', // 初始高度
manualRowResize: true, // 允许行高调整
autoWrapRow: true, // 自动换行
multiSelect: true, // 多选支持
stretchH: 'all', // 列宽自适应
afterGetColHeader: (col: number, th: HTMLElement) => {
const columnDef = hotSettings.value.columns[col];
const isEditable = !columnDef?.readOnly; // 判断是否可编辑
// 添加可编辑标识
if (isEditable) {
th.style.backgroundColor = '#f0f9eb'; // Element Plus 成功色浅版
th.style.borderLeft = '3px solid #67c23a';
th.innerHTML = `
${th.innerText}
`;
}
},
afterChange: (changes) => {
if (!changes) return;
console.log('changes:', changes);
// changes.forEach(([row, prop, oldVal, newVal]) => {
// console.log('修改的行:', row);
// console.log('修改的列:', prop);
// console.log('旧值:', oldVal);
// console.log('新值:', newVal);
// });
},
colHeaders: [
'选择',
'订单号',
'FBA货件编号',
'FBA箱号',
'物流商ID',
'物流商名称',
// '物流渠道',
// '目的地仓库',
'计划数量',
'实际货件数量',
'物流追踪号',
'供应商称重-总重量',
'物流商计重',
'称重差异',
'物流单价',
'物流计价重量',
'其他物流费用',
'费用合计',
'物流状态',
'预计签收日期',
'实际签收日期',
'运输时效',
'操作'
],
columns: [
{
// 选择列
type: 'checkbox',
className: 'htCenter',
width: 55
},
{ data: 'orderId', className: 'htCenter', readOnly: true },
{ data: 'fbaShipmentId', className: 'htCenter', readOnly: true },
// ... 其他数据列配置
{ data: 'fbaBoxNumber', className: 'htCenter', readOnly: true }, // FBA箱号
{ data: 'logisticsProviderId', className: 'htCenter', readOnly: true }, // 物流商ID
{ data: 'logisticsProviderName', className: 'htCenter', readOnly: true }, // 物流商名称
// { data: 'logisticsChannel', className: 'htCenter', readOnly: true }, // 物流渠道
// { data: 'destinationWarehouse', className: 'htCenter', readOnly: true }, // 目的地仓库
{ data: 'plannedQuantity', className: 'htCenter', readOnly: true }, // 计划数量
{ data: 'actualShipmentQuantity', className: 'htCenter', readOnly: true }, // 实际货件数量
{ data: 'trackingNumber', className: 'htCenter', readOnly: false }, // 物流追踪号
{ data: 'supplierWeight', className: 'htCenter', readOnly: true }, // 供应商称重-总重量
{ data: 'logisticsWeight', className: 'htCenter', readOnly: true }, // 物流商计重
{
data: 'weightDiff', // 称重差异
className: 'htCenter',
renderer: (instance, td) => {
// 添加差异颜色标识
const value = instance.getDataAtCell(td.row, td.col);
td.style.color = value > 0 ? '#67C23A' : '#F56C6C';
td.innerText = value;
return td;
}
},
{ data: 'pricePerKg', className: 'htCenter', readOnly: true }, // 物流单价
{ data: 'logisticsBillingWeight', className: 'htCenter', readOnly: true }, // 物流计价重量
{ data: 'otherLogisticsFee', className: 'htCenter', readOnly: true }, // 其他物流费用
{ data: 'totalFee', className: 'htCenter', readOnly: true }, // 费用合计
{
data: 'logisticsStatus',
className: 'htCenter',
readOnly: false,
type: 'dropdown',
source: ['水果', '蔬菜', '肉类']
}, // 物流状态
{
// 预计签收日期
data: 'estimatedDeliveryDateFormatted',
className: 'htCenter',
width: 180
},
{
// 实际签收日期
data: 'actualDeliveryDateFormatted',
className: 'htCenter',
width: 180
},
{
// 操作列
// renderer: (instance, td, row, col, prop, value, cellProperties) => {
// const canEdit = checkPermi(['amz:logisticsOrderDetail:edit']);
// const canDelete = checkPermi(['amz:logisticsOrderDetail:remove']);
//
// td.innerHTML = `
// <div class="action-buttons">
// ${
// canEdit
// ? `
// <button
// class="edit-btn"
// data-row="${row}"
// :disabled="buttonLoading"
// >
// <i class="icon-edit"></i>
// </button>
// `
// : ''
// }
// ${
// canDelete
// ? `
// <button
// class="delete-btn"
// data-row="${row}"
// :disabled="buttonLoading"
// >
// <i class="icon-delete"></i>
// </button>
// `
// : ''
// }
// </div>
// `;
// td.className = 'htCenter';
// return td;
// },
readOnly: true,
width: 150
}
],
afterOnCellMouseDown: (event, coords) => {
if (buttonLoading.value) return;
if (coords.col === 21) {
const rowData = logisticsOrderDetailList.value[coords.row];
const target = event.target.closest('button');
if (target?.classList.contains('edit-btn')) {
buttonLoading.value = true;
handleUpdate(rowData).finally(() => {
buttonLoading.value = false;
});
} else if (target?.classList.contains('delete-btn')) {
buttonLoading.value = true;
handleDelete(rowData).finally(() => {
buttonLoading.value = false;
});
}
}
},
contextMenu: {
items: {
editRow: {
name: '修改',
disabled: () => !checkPermi(['amz:logisticsOrderDetail:edit']) || buttonLoading.value,
callback: (_, selection) => {
const rowData = logisticsOrderDetailList.value[selection[0].start.row];
buttonLoading.value = true;
handleUpdate(rowData).finally(() => {
buttonLoading.value = false;
});
}
}
}
}
});
// 监听数据变化
watch(
logisticsOrderDetailList,
() => {
tableKey.value++;
},
{ deep: true }
);
//表格结束-----
const submitDataClick = () => {
// 提交数据
console.log('提交数据');
};
const cancelDataClick = () => {
// 取消数据
console.log('取消数据');
};
const openEdit = () => {
hotTableDrawer.value = true;
};
const dialog = reactive<DialogOption>({
visible: false,
title: ''
});
const initFormData: LogisticsOrderDetailForm = {
id: undefined,
orderId: undefined,
fbaShipmentId: undefined,
fbaBoxNumber: undefined,
logisticsProviderId: undefined,
logisticsProviderName: undefined,
logisticsChannel: undefined,
destination: undefined,
plannedQuantity: undefined,
shipmentQuantity: undefined,
trackingNumber: undefined,
supplierWeight: undefined,
logisticsWeight: undefined,
weightDiff: undefined,
pricePerKg: undefined,
logisticsCalculationPrice: undefined,
otherFee: undefined,
totalFee: undefined,
logisticsStatus: undefined,
estimatedDeliveryDate: undefined,
actualDeliveryDate: undefined,
timeliness: undefined
};
const data = reactive<PageData<LogisticsOrderDetailForm, LogisticsOrderDetailQuery>>({
form: { ...initFormData },
queryParams: {
pageNum: 1,
pageSize: 10,
orderId: undefined,
fbaShipmentId: undefined,
fbaBoxNumber: undefined,
logisticsProviderId: undefined,
logisticsProviderName: undefined,
logisticsChannel: undefined,
destination: undefined,
plannedQuantity: undefined,
shipmentQuantity: undefined,
trackingNumber: undefined,
supplierWeight: undefined,
logisticsWeight: undefined,
weightDiff: undefined,
pricePerKg: undefined,
logisticsCalculationPrice: undefined,
otherFee: undefined,
totalFee: undefined,
logisticsStatus: undefined,
estimatedDeliveryDate: undefined,
actualDeliveryDate: undefined,
timeliness: undefined,
params: {}
},
rules: {
id: [{ required: true, message: '主键不能为空', trigger: 'blur' }],
orderId: [{ required: true, message: '订单号不能为空', trigger: 'blur' }],
fbaShipmentId: [{ required: true, message: 'FBA货件编号不能为空', trigger: 'blur' }],
fbaBoxNumber: [{ required: true, message: 'FBA箱号不能为空', trigger: 'blur' }],
logisticsProviderId: [{ required: true, message: '物流商ID不能为空', trigger: 'blur' }],
logisticsProviderName: [{ required: true, message: '物流商名称不能为空', trigger: 'blur' }],
logisticsChannel: [{ required: true, message: '物流渠道不能为空', trigger: 'blur' }],
destination: [{ required: true, message: '目的地仓库不能为空', trigger: 'blur' }],
plannedQuantity: [{ required: true, message: '计划数量不能为空', trigger: 'blur' }],
shipmentQuantity: [{ required: true, message: '实际货件数量不能为空', trigger: 'blur' }],
trackingNumber: [{ required: true, message: '物流追踪号不能为空', trigger: 'blur' }],
supplierWeight: [{ required: true, message: '供应商称重-总重量不能为空', trigger: 'blur' }],
logisticsWeight: [{ required: true, message: '物流商计重不能为空', trigger: 'blur' }],
weightDiff: [{ required: true, message: '称重差异不能为空', trigger: 'blur' }],
pricePerKg: [{ required: true, message: '物流单价不能为空', trigger: 'blur' }],
logisticsCalculationPrice: [{ required: true, message: '物流计价重量不能为空', trigger: 'blur' }],
otherFee: [{ required: true, message: '其他物流费用不能为空', trigger: 'blur' }],
totalFee: [{ required: true, message: '费用合计不能为空', trigger: 'blur' }],
logisticsStatus: [{ required: true, message: '物流状态不能为空', trigger: 'change' }],
estimatedDeliveryDate: [{ required: true, message: '预计签收日期不能为空', trigger: 'blur' }],
actualDeliveryDate: [{ required: true, message: '实际签收日期不能为空', trigger: 'blur' }],
timeliness: [{ required: true, message: '运输时效不能为空', trigger: 'blur' }]
}
});
const { queryParams, form, rules } = toRefs(data);
/** 查询物流订单明细(按箱子维度存储)列表 */
const getList = async () => {
loading.value = true;
const res = await listLogisticsOrderDetail(queryParams.value);
logisticsOrderDetailList.value = res.rows;
total.value = res.total;
loading.value = false;
};
/** 取消按钮 */
const cancel = () => {
reset();
dialog.visible = false;
};
/** 表单重置 */
const reset = () => {
form.value = { ...initFormData };
logisticsOrderDetailFormRef.value?.resetFields();
};
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.value.pageNum = 1;
getList();
};
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value?.resetFields();
handleQuery();
};
/** 多选框选中数据 */
const handleSelectionChange = (selection: LogisticsOrderDetailVO[]) => {
ids.value = selection.map((item) => item.id);
single.value = selection.length != 1;
multiple.value = !selection.length;
};
/** 新增按钮操作 */
const handleAdd = () => {
reset();
dialog.visible = true;
dialog.title = '添加物流订单明细(按箱子维度存储)';
};
/** 修改按钮操作 */
const handleUpdate = async (row?: LogisticsOrderDetailVO) => {
reset();
const _id = row?.id || ids.value[0];
const res = await getLogisticsOrderDetail(_id);
Object.assign(form.value, res.data);
dialog.visible = true;
dialog.title = '修改物流订单明细(按箱子维度存储)';
};
/** 提交按钮 */
const submitForm = () => {
logisticsOrderDetailFormRef.value?.validate(async (valid: boolean) => {
if (valid) {
buttonLoading.value = true;
if (form.value.id) {
await updateLogisticsOrderDetail(form.value).finally(() => (buttonLoading.value = false));
} else {
await addLogisticsOrderDetail(form.value).finally(() => (buttonLoading.value = false));
}
proxy?.$modal.msgSuccess('操作成功');
dialog.visible = false;
await getList();
}
});
};
/** 删除按钮操作 */
const handleDelete = async (row?: LogisticsOrderDetailVO) => {
const _ids = row?.id || ids.value;
await proxy?.$modal.confirm('是否确认删除物流订单明细(按箱子维度存储)编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false));
await delLogisticsOrderDetail(_ids);
proxy?.$modal.msgSuccess('删除成功');
await getList();
};
/** 导出按钮操作 */
const handleExport = () => {
proxy?.download(
'amz/logisticsOrderDetail/export',
{
...queryParams.value
},
`logisticsOrderDetail_${new Date().getTime()}.xlsx`
);
};
// onMounted(() => {
// console.log('组件已挂载hotInstance:', hotTable.value?.hotInstance);
//
// getList();
// });
onActivated(() => {
getList();
});
</script>
<style scoped>
.hot-container {
height: 70vh; /* 可视区域高度的70% */
min-height: 400px; /* 最小高度保证 */
max-height: 1000px; /* 防止数据过多时过高 */
overflow: auto; /* 容器内滚动 */
}
</style>