feat(wms): 物料调拨

dev
wanghao 4 months ago
parent 7af783ebf6
commit 856f487896

@ -0,0 +1,76 @@
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { MaterialTransferRecordVO, MaterialTransferRecordForm, MaterialTransferRecordQuery } from '@/api/wms/materialTransferRecord/types';
/**
*
* @param query
* @returns {*}
*/
export const listMaterialTransferRecord = (query?: MaterialTransferRecordQuery): AxiosPromise<MaterialTransferRecordVO[]> => {
return request({
url: '/wms/materialTransferRecord/list',
method: 'get',
params: query
});
};
/**
*
* @param transferRecordId
*/
export const getMaterialTransferRecord = (transferRecordId: string | number): AxiosPromise<MaterialTransferRecordVO> => {
return request({
url: '/wms/materialTransferRecord/' + transferRecordId,
method: 'get'
});
};
/**
*
* @param data
*/
export const addMaterialTransferRecord = (data: MaterialTransferRecordForm | MaterialTransferRecordForm[]) => {
return request({
url: '/wms/materialTransferRecord',
method: 'post',
data: data
});
};
/**
*
* @param data
*/
export const updateMaterialTransferRecord = (data: MaterialTransferRecordForm) => {
return request({
url: '/wms/materialTransferRecord',
method: 'put',
data: data
});
};
/**
*
* @param transferRecordId
*/
export const delMaterialTransferRecord = (transferRecordId: string | number | Array<string | number>) => {
return request({
url: '/wms/materialTransferRecord/' + transferRecordId,
method: 'delete'
});
};
/**
*
* @param query
* @returns {*}
*/
export function getWmsMaterialTransferRecordList (query) {
return request({
url: '/wms/materialTransferRecord/getWmsMaterialTransferRecordList',
method: 'get',
params: query
});
};

@ -0,0 +1,155 @@
export interface MaterialTransferRecordVO {
/**
* ID
*/
transferRecordId: string | number;
/**
* ID
*/
materielId: string | number;
/**
*
*/
batchNumber: string;
/**
*
*/
transferQty: number;
/**
*
*/
unitName: string;
/**
*
*/
transferOutStoreId: string | number;
/**
*
*/
transferInStoreId: string | number;
/**
* id
*/
inventoryDetailsId: string | number;
/**
*
*/
tenantId: string | number;
/**
* 0 1
*/
delFlag: string;
/**
*
*/
createDept: number;
/**
*
*/
createBy: number;
/**
*
*/
createTime: string;
/**
*
*/
updateBy: number;
/**
*
*/
updateTime: string;
}
export interface MaterialTransferRecordForm extends BaseEntity {
transferRecordId?: string | number;
/**
* ID
*/
materielId?: string | number;
/**
*
*/
batchNumber?: string;
/**
*
*/
transferQty?: number;
/**
*
*/
unitName?: string;
productCode?: string;
productName?: string;
/**
*
*/
transferOutStoreId?: string | number;
/**
*
*/
transferInStoreId?: string | number;
/**
* id
*/
inventoryDetailsId?: string | number;
}
export interface MaterialTransferRecordQuery extends PageQuery {
/**
* ID
*/
materielId?: string | number;
/**
*
*/
productCode?: string;
/**
*
*/
productName?: string;
/**
*
*/
batchNumber?: string;
/**
*
*/
transferOutStoreId?: string | number;
/**
*
*/
transferInStoreId?: string | number;
orderByColumn: string;
isAsc: string;
/**
*
*/
params?: any;
}

@ -184,8 +184,12 @@ export interface OutStockBillQuery extends PageQuery {
*/
createTime?: string;
orderByColumn?: string;
/**
*
*/
params?: any;
isAsc?: string;
}

@ -163,6 +163,16 @@ export interface SampleLedgerForm extends BaseEntity {
*
*/
isReturn?: string;
/**
*
*/
disposalType: string;
/**
*
*/
disposalQty: number;
}
export interface SampleLedgerQuery extends PageQuery {
@ -170,6 +180,8 @@ export interface SampleLedgerQuery extends PageQuery {
*
*/
warehouseId?: string | number;
orderByColumn: string;
isAsc: string;
/**
* ID

@ -0,0 +1,425 @@
<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="100px">
<el-form-item label="物料编码" prop="productCode">
<el-input v-model="queryParams.productCode" placeholder="请输入物料编码" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="物料名称" prop="productName">
<el-input v-model="queryParams.productName" placeholder="请输入物料编码" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="批次号" prop="batchNumber">
<el-input v-model="queryParams.batchNumber" placeholder="请输入批次号" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="调出仓库" prop="transferOutStoreId">
<el-select v-model="queryParams.transferOutStoreId" placeholder="请选择调出仓库" clearable @keyup.enter="handleQuery">
<el-option v-for="item in warehouseInfoList" :key="item.warehouseId" :label="item.warehouseName" :value="item.warehouseId" />
</el-select>
</el-form-item>
<el-form-item label="调入仓库" prop="transferInStoreId">
<el-select v-model="queryParams.transferInStoreId" placeholder="请选择调入仓库" clearable @keyup.enter="handleQuery">
<el-option v-for="item in warehouseInfoList" :key="item.warehouseId" :label="item.warehouseName" :value="item.warehouseId" />
</el-select>
</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="['wms:materialTransferRecord:add']"> </el-button>
</el-col>
<!--<el-col :span="1.5">-->
<!-- <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['wms:materialTransferRecord:edit']"-->
<!-- >修改-->
<!-- </el-button>-->
<!--</el-col>-->
<!--<el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="danger"-->
<!-- plain-->
<!-- icon="Delete"-->
<!-- :disabled="multiple"-->
<!-- @click="handleDelete()"-->
<!-- v-hasPermi="['wms:materialTransferRecord:remove']"-->
<!-- >删除-->
<!-- </el-button>-->
<!--</el-col>-->
<el-col :span="1.5">
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['wms:materialTransferRecord:export']"> </el-button>
</el-col>
<right-toolbar v-model:showSearch="showSearch" :columns="columns" :search="true" @queryTable="getList"></right-toolbar>
</el-row>
</template>
<el-table v-loading="loading" border :data="materialTransferRecordList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="调拨记录ID" align="center" prop="transferRecordId" v-if="columns[0].visible" />
<el-table-column label="物料编码" align="center" prop="productCode" v-if="columns[1].visible" />
<el-table-column label="物料名称" align="center" prop="productName" v-if="columns[1].visible" />
<el-table-column label="物料说明" align="center" prop="productSpe" v-if="columns[1].visible" />
<el-table-column label="批次号" align="center" prop="batchNumber" v-if="columns[2].visible" />
<el-table-column label="调拨数量" align="center" prop="transferQty" v-if="columns[3].visible" />
<el-table-column label="单位" align="center" prop="unitName" v-if="columns[4].visible" />
<el-table-column label="调出仓库" align="center" prop="transferOutStoreId" v-if="columns[5].visible">
<template #default="scope">
{{ getWarehouseName(scope.row.transferOutStoreId) }}
</template>
</el-table-column>
<el-table-column label="调入仓库" align="center" prop="transferInStoreId" v-if="columns[6].visible">
<template #default="scope">
{{ getWarehouseName(scope.row.transferInStoreId) }}
</template>
</el-table-column>
<el-table-column label="库存id" align="center" prop="inventoryDetailsId" v-if="columns[7].visible" />
<el-table-column label="租户编号" align="center" prop="tenantId" v-if="columns[8].visible" />
<el-table-column label="删除标志" align="center" prop="delFlag" v-if="columns[9].visible" />
<el-table-column label="创建部门" align="center" prop="createDept" v-if="columns[10].visible" />
<el-table-column label="创建人" align="center" prop="createBy" v-if="columns[11].visible" />
<el-table-column label="调拨时间" align="center" prop="createTime" width="180" v-if="columns[12].visible">
<template #default="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
</template>
</el-table-column>
<el-table-column label="更新人" align="center" prop="updateBy" v-if="columns[13].visible" />
<el-table-column label="更新时间" align="center" prop="updateTime" width="180" v-if="columns[14].visible">
<template #default="scope">
<span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
</template>
</el-table-column>
<!-- <el-table-column label="操作" align="center" fixed="right" 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="['wms:materialTransferRecord:edit']"
></el-button>
</el-tooltip>
<el-tooltip content="删除" placement="top">
<el-button
link
type="primary"
icon="Delete"
@click="handleDelete(scope.row)"
v-hasPermi="['wms:materialTransferRecord: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-dialog :title="dialog.title" v-model="dialog.visible" width="1000px" append-to-body>
<el-form ref="materialTransferRecordFormRef" :model="form" :rules="rules" label-width="120px">
<el-row>
<el-col :span="12">
<el-form-item label="调出仓库" prop="transferOutStoreId">
<el-select v-model="form.transferOutStoreId" placeholder="请选择调出仓库">
<el-option v-for="item in warehouseInfoList" :key="item.warehouseId" :label="item.warehouseName" :value="item.warehouseId" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="调入仓库" prop="transferInStoreId">
<el-select v-model="form.transferInStoreId" placeholder="请选择调入仓库">
<el-option v-for="item in warehouseInfoList" :key="item.warehouseId" :label="item.warehouseName" :value="item.warehouseId" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<div>
<el-card>
<template #header>
<div>添加出库物料</div>
</template>
<el-button type="primary" @click="openInventorySelect"></el-button>
<div v-if="selectInventorys.length > 0" style="margin-top: 20px">
<h4>已选择的物料</h4>
<el-table border :data="selectInventorys">
<el-table-column label="批次号" align="center" prop="batchNumber" />
<el-table-column label="物料编码" align="center" prop="productCode" />
<el-table-column label="物料名称" align="center" prop="productName" />
<el-table-column label="单价" align="center" prop="unitPrice" width="80" />
<el-table-column label="当前库存" align="center" prop="inventoryAmount" width="90" />
<el-table-column label="调拨数量" align="center" prop="transferQty" width="140">
<template #default="scope">
<el-input-number
v-model="scope.row.transferQty"
:min="0"
:precision="2"
:step="1"
:max="scope.row.inventoryAmount"
controls-position="right"
size="small"
placeholder="请输入出库数量"
/>
</template>
</el-table-column>
<el-table-column label="单位" align="center" prop="unitName" width="80" />
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width" width="60">
<template #default="scope">
<el-button link type="danger" icon="Delete" @click="removeOutDetail(scope.$index)"></el-button>
</template>
</el-table-column>
</el-table>
</div>
</el-card>
<wms-inventory-select
ref="inventorySelectRef"
:multiple="true"
:warehouse-id="form.transferOutStoreId"
@confirmCallBack="handleInventorySelect"
/>
</div>
</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="MaterialTransferRecord" lang="ts">
import {
addMaterialTransferRecord,
delMaterialTransferRecord,
getMaterialTransferRecord,
listMaterialTransferRecord,
updateMaterialTransferRecord
} from '@/api/wms/materialTransferRecord';
import { MaterialTransferRecordForm, MaterialTransferRecordQuery, MaterialTransferRecordVO } from '@/api/wms/materialTransferRecord/types';
import { getWmsWarehouseInfoList } from '@/api/wms/warehouseInfo';
import WmsInventorySelect from '@/components/WmsInventorySelect/index.vue';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const materialTransferRecordList = ref<MaterialTransferRecordVO[]>([]);
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 total = ref(0);
const queryFormRef = ref<ElFormInstance>();
const materialTransferRecordFormRef = ref<ElFormInstance>();
//
const warehouseInfoList = ref([]);
//
const inventorySelectRef = ref();
//
const selectInventorys = ref([]);
/** 根据仓库ID获取仓库名称 */
const getWarehouseName = (warehouseId) => {
const warehouse = warehouseInfoList.value.find((item) => item.warehouseId === warehouseId);
return warehouse ? warehouse.warehouseName : warehouseId;
};
/** 打开库存选择器 */
const openInventorySelect = () => {
if (!form.value.transferOutStoreId) {
ElMessage.warning('请先选择仓库');
return;
}
// inventorySelectRef.value.warehouseId = form.value.transferOutStoreId;
inventorySelectRef.value.open();
};
/** 处理库存选择器确认选择 */
const handleInventorySelect = (selectedInventorys) => {
selectInventorys.value = selectedInventorys;
console.log(selectedInventorys);
};
/** 删除选中的出库明细 */
const removeOutDetail = (index) => {
selectInventorys.value.splice(index, 1);
};
const dialog = reactive<DialogOption>({
visible: false,
title: ''
});
/** 获取仓库列表 */
const getWarehouseInfoList = async () => {
const res = await getWmsWarehouseInfoList();
warehouseInfoList.value = res.data || [];
};
//
const columns = ref<FieldOption[]>([
{ key: 0, label: `调拨记录ID`, visible: false },
{ key: 1, label: `物料ID`, visible: true },
{ key: 2, label: `批次号`, visible: true },
{ key: 3, label: `调拨数量`, visible: true },
{ key: 4, label: `单位`, visible: true },
{ key: 5, label: `调出仓库`, visible: true },
{ key: 6, label: `调入仓库`, visible: true },
{ key: 7, label: `库存id`, visible: false },
{ key: 8, label: `租户编号`, visible: false },
{ key: 9, label: `删除标志`, visible: false },
{ key: 10, label: `创建部门`, visible: false },
{ key: 11, label: `创建人`, visible: false },
{ key: 12, label: `调拨时间`, visible: true },
{ key: 13, label: `更新人`, visible: false },
{ key: 14, label: `更新时间`, visible: false }
]);
const initFormData: MaterialTransferRecordForm = {
materielId: undefined,
batchNumber: undefined,
transferQty: undefined,
unitName: undefined,
transferOutStoreId: undefined,
transferInStoreId: undefined,
inventoryDetailsId: undefined
};
const data = reactive<PageData<MaterialTransferRecordForm, MaterialTransferRecordQuery>>({
form: { ...initFormData },
queryParams: {
pageNum: 1,
pageSize: 10,
productCode: undefined,
productName: undefined,
batchNumber: undefined,
transferOutStoreId: undefined,
transferInStoreId: undefined,
orderByColumn: 'createTime',
isAsc: 'desc',
params: {}
},
rules: {
transferOutStoreId: [{ required: true, message: '调出仓库不能为空', trigger: 'blur' }],
transferInStoreId: [{ required: true, message: '调入仓库不能为空', trigger: 'blur' }]
}
});
const { queryParams, form, rules } = toRefs(data);
/** 查询物料调拨列表 */
const getList = async () => {
loading.value = true;
const res = await listMaterialTransferRecord(queryParams.value);
materialTransferRecordList.value = res.rows;
total.value = res.total;
loading.value = false;
};
/** 取消按钮 */
const cancel = () => {
reset();
dialog.visible = false;
};
/** 表单重置 */
const reset = () => {
form.value = { ...initFormData };
materialTransferRecordFormRef.value?.resetFields();
};
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.value.pageNum = 1;
getList();
};
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value?.resetFields();
handleQuery();
};
/** 多选框选中数据 */
const handleSelectionChange = (selection: MaterialTransferRecordVO[]) => {
ids.value = selection.map((item) => item.transferRecordId);
single.value = selection.length != 1;
multiple.value = !selection.length;
};
/** 新增按钮操作 */
const handleAdd = () => {
reset();
dialog.visible = true;
dialog.title = '添加物料调拨';
};
/** 修改按钮操作 */
const handleUpdate = async (row?: MaterialTransferRecordVO) => {
reset();
const _transferRecordId = row?.transferRecordId || ids.value[0];
const res = await getMaterialTransferRecord(_transferRecordId);
Object.assign(form.value, res.data);
dialog.visible = true;
dialog.title = '修改物料调拨';
};
/** 提交按钮 */
const submitForm = () => {
materialTransferRecordFormRef.value?.validate(async (valid: boolean) => {
if (valid) {
buttonLoading.value = true;
if (form.value.transferRecordId) {
await updateMaterialTransferRecord(form.value).finally(() => (buttonLoading.value = false));
} else {
const transferAdd: MaterialTransferRecordForm[] = selectInventorys.value.map((item) => ({
materielId: item.materielId,
batchNumber: item.batchNumber,
transferQty: item.transferQty,
unitName: item.unitName,
transferOutStoreId: form.value.transferOutStoreId,
transferInStoreId: form.value.transferInStoreId,
inventoryDetailsId: item.inventoryDetailsId
}));
await addMaterialTransferRecord(transferAdd).finally(() => (buttonLoading.value = false));
}
proxy?.$modal.msgSuccess('操作成功');
dialog.visible = false;
await getList();
}
});
};
/** 删除按钮操作 */
const handleDelete = async (row?: MaterialTransferRecordVO) => {
const _transferRecordIds = row?.transferRecordId || ids.value;
await proxy?.$modal.confirm('是否确认删除物料调拨编号为"' + _transferRecordIds + '"的数据项?').finally(() => (loading.value = false));
await delMaterialTransferRecord(_transferRecordIds);
proxy?.$modal.msgSuccess('删除成功');
await getList();
};
/** 导出按钮操作 */
const handleExport = () => {
proxy?.download(
'wms/materialTransferRecord/export',
{
...queryParams.value
},
`materialTransferRecord_${new Date().getTime()}.xlsx`
);
};
onMounted(() => {
getList();
getWarehouseInfoList();
});
</script>

@ -4,9 +4,12 @@
<div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width="100px">
<el-form-item label="仓库ID" prop="warehouseId">
<el-input v-model="queryParams.warehouseId" placeholder="请输入仓库ID" clearable @keyup.enter="handleQuery" />
<el-form-item label="仓库" prop="warehouseId">
<el-select v-model="queryParams.warehouseId" placeholder="请选择仓库" clearable filterable>
<el-option v-for="item in warehouseInfoList" :key="item.warehouseId" :label="item.warehouseName" :value="item.warehouseId" />
</el-select>
</el-form-item>
<el-form-item label="物料ID" prop="materielId">
<el-input v-model="queryParams.materielId" placeholder="请输入物料ID" clearable @keyup.enter="handleQuery" />
</el-form-item>
@ -39,7 +42,7 @@
<el-card shadow="never">
<template #header>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<!-- <el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['wms:outStockDetails:add']"> </el-button>
</el-col>
<el-col :span="1.5">
@ -51,7 +54,7 @@
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['wms:outStockDetails:remove']"
>删除
</el-button>
</el-col>
</el-col>-->
<el-col :span="1.5">
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['wms:outStockDetails:export']"> </el-button>
</el-col>
@ -63,8 +66,10 @@
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="出库单明细ID" align="center" prop="outStockDetailsId" v-if="columns[0].visible" />
<el-table-column label="租户编号" align="center" prop="tenantId" v-if="columns[1].visible" />
<el-table-column label="仓库ID" align="center" prop="warehouseId" v-if="columns[2].visible" />
<el-table-column label="物料ID" align="center" prop="materielId" v-if="columns[3].visible" />
<el-table-column label="出库仓库" align="center" prop="warehouseName" v-if="columns[2].visible" />
<el-table-column label="物料编码" align="center" prop="productCode" v-if="columns[3].visible" />
<el-table-column label="物料名称" align="center" prop="productName" v-if="columns[3].visible" />
<el-table-column label="物料描述" align="center" prop="productSpe" v-if="columns[3].visible" />
<el-table-column label="批次号" align="center" prop="batchNumber" v-if="columns[4].visible" />
<el-table-column label="单价" align="center" prop="unitPrice" v-if="columns[5].visible" />
<el-table-column label="出库数量" align="center" prop="outStockAmount" v-if="columns[6].visible" />
@ -73,7 +78,7 @@
<el-table-column label="删除标志" align="center" prop="delFlag" v-if="columns[9].visible" />
<el-table-column label="创建部门" align="center" prop="createDept" v-if="columns[10].visible" />
<el-table-column label="创建人" align="center" prop="createBy" v-if="columns[11].visible" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180" v-if="columns[12].visible">
<el-table-column label="出库时间" align="center" prop="createTime" width="180" v-if="columns[12].visible">
<template #default="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
</template>
@ -152,6 +157,9 @@
<script setup name="OutStockDetails" lang="ts">
import { addOutStockDetails, delOutStockDetails, getOutStockDetails, listOutStockDetails, updateOutStockDetails } from '@/api/wms/outStockDetails';
import { OutStockDetailsForm, OutStockDetailsQuery, OutStockDetailsVO } from '@/api/wms/outStockDetails/types';
import { getWmsWarehouseInfoList } from '@/api/wms/warehouseInfo';
import { getCrmCustomerInfoList } from '@/api/oa/crm/customerInfo';
import { getErpProjectInfoList } from '@/api/oa/erp/projectInfo';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
@ -167,7 +175,12 @@ const dateRangeCreateTime = ref<[DateModelType, DateModelType]>(['', '']);
const queryFormRef = ref<ElFormInstance>();
const outStockDetailsFormRef = ref<ElFormInstance>();
//
const projectInfoList = ref([]);
//
const customerInfoList = ref([]);
//
const warehouseInfoList = ref([]);
const dialog = reactive<DialogOption>({
visible: false,
title: ''
@ -175,8 +188,8 @@ const dialog = reactive<DialogOption>({
//
const columns = ref<FieldOption[]>([
{ key: 0, label: `出库单明细ID`, visible: true },
{ key: 1, label: `租户编号`, visible: true },
{ key: 0, label: `出库单明细ID`, visible: false },
{ key: 1, label: `租户编号`, visible: false },
{ key: 2, label: `仓库ID`, visible: true },
{ key: 3, label: `物料ID`, visible: true },
{ key: 4, label: `批次号`, visible: true },
@ -184,16 +197,16 @@ const columns = ref<FieldOption[]>([
{ key: 6, label: `出库数量`, visible: true },
{ key: 7, label: `单位`, visible: true },
{ key: 8, label: `总价`, visible: true },
{ key: 9, label: `删除标志`, visible: true },
{ key: 10, label: `创建部门`, visible: true },
{ key: 11, label: `创建人`, visible: true },
{ key: 9, label: `删除标志`, visible: false },
{ key: 10, label: `创建部门`, visible: false },
{ key: 11, label: `创建人`, visible: false },
{ key: 12, label: `创建时间`, visible: true },
{ key: 13, label: `更新人`, visible: true },
{ key: 14, label: `更新时间`, visible: true },
{ key: 13, label: `更新人`, visible: false },
{ key: 14, label: `更新时间`, visible: false },
{ key: 15, label: `原项目ID`, visible: true },
{ key: 16, label: `新项目ID`, visible: true },
{ key: 17, label: `出库单ID`, visible: true },
{ key: 18, label: `库存ID`, visible: true }
{ key: 17, label: `出库单ID`, visible: false },
{ key: 18, label: `库存ID`, visible: false }
]);
const initFormData: OutStockDetailsForm = {
@ -231,6 +244,24 @@ const data = reactive<PageData<OutStockDetailsForm, OutStockDetailsQuery>>({
const { queryParams, form, rules } = toRefs(data);
/** 获取项目列表 */
const getProjectInfoList = async () => {
const res = await getErpProjectInfoList({});
projectInfoList.value = res.data || [];
};
/** 获取客户列表 */
const getCustomerInfoList = async () => {
const res = await getCrmCustomerInfoList(null);
customerInfoList.value = res.data || [];
};
/** 获取仓库列表 */
const getWarehouseInfoList = async () => {
const res = await getWmsWarehouseInfoList();
warehouseInfoList.value = res.data || [];
};
/** 查询出库单明细列表 */
const getList = async () => {
loading.value = true;
@ -329,6 +360,8 @@ const handleExport = () => {
};
onMounted(() => {
getWarehouseInfoList();
getProjectInfoList();
getList();
});
</script>

@ -1,289 +1,305 @@
<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='100px'>
<el-form-item label="批次号" prop="batchNumber">
<el-input v-model="queryParams.batchNumber" placeholder="请输入批次号" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="处置类型" prop="disposalType">
<el-select v-model="queryParams.disposalType" placeholder="请选择处置类型" clearable >
<el-option v-for="dict in wms_disposal_type" :key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="样品台账ID" prop="sampleLedgerId">
<el-input v-model="queryParams.sampleLedgerId" placeholder="请输入样品台账ID" 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="['wms:sampleDisposalRecord:add']"></el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['wms:sampleDisposalRecord:edit']"></el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['wms:sampleDisposalRecord:remove']"></el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['wms:sampleDisposalRecord:export']"></el-button>
</el-col>
<right-toolbar v-model:showSearch="showSearch" :columns="columns" :search="true" @queryTable="getList"></right-toolbar>
</el-row>
</template>
<el-table v-loading="loading" border :data="sampleDisposalRecordList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="样品处理记录ID" align="center" prop="sampleRecordId" v-if="columns[0].visible"/>
<el-table-column label="物料ID" align="center" prop="materielId" v-if="columns[2].visible"/>
<el-table-column label="批次号" align="center" prop="batchNumber" v-if="columns[3].visible"/>
<el-table-column label="处置数量" align="center" prop="disposalQty" v-if="columns[4].visible"/>
<el-table-column label="单位" align="center" prop="unitName" v-if="columns[5].visible"/>
<el-table-column label="处置类型" align="center" prop="disposalType" v-if="columns[6].visible">
<template #default="scope">
<dict-tag :options="wms_disposal_type" :value="scope.row.disposalType"/>
</template>
</el-table-column>
<el-table-column label="创建部门" align="center" prop="createDept" v-if="columns[8].visible"/>
<el-table-column label="创建人" align="center" prop="createBy" v-if="columns[9].visible"/>
<el-table-column label="创建时间" align="center" prop="createTime" width="180" v-if="columns[10].visible">
<template #default="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
</template>
</el-table-column>
<el-table-column label="更新人" align="center" prop="updateBy" v-if="columns[11].visible"/>
<el-table-column label="更新时间" align="center" prop="updateTime" width="180" v-if="columns[12].visible">
<template #default="scope">
<span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
</template>
</el-table-column>
<el-table-column label="样品台账ID" align="center" prop="sampleLedgerId" v-if="columns[13].visible"/>
<el-table-column label="操作" align="center" fixed="right" 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="['wms:sampleDisposalRecord:edit']"></el-button>
</el-tooltip>
<el-tooltip content="删除" placement="top">
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['wms:sampleDisposalRecord: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" />
<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="100px">
<el-form-item label="批次号" prop="batchNumber">
<el-input v-model="queryParams.batchNumber" placeholder="请输入批次号" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="处置类型" prop="disposalType">
<el-select v-model="queryParams.disposalType" placeholder="请选择处置类型" clearable>
<el-option v-for="dict in wms_disposal_type" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="样品台账ID" prop="sampleLedgerId">
<el-input v-model="queryParams.sampleLedgerId" placeholder="请输入样品台账ID" 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>
<!-- 添加或修改样品处置记录对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
<el-form ref="sampleDisposalRecordFormRef" :model="form" :rules="rules" label-width="120px">
<el-form-item label="物料ID" prop="materielId">
<el-input v-model="form.materielId" placeholder="请输入物料ID" />
</el-form-item>
<el-form-item label="批次号" prop="batchNumber">
<el-input v-model="form.batchNumber" placeholder="请输入批次号" />
</el-form-item>
<el-form-item label="处置数量" prop="disposalQty">
<el-input v-model="form.disposalQty" placeholder="请输入处置数量" />
</el-form-item>
<el-form-item label="单位" prop="unitName">
<el-input v-model="form.unitName" placeholder="请输入单位" />
</el-form-item>
<el-form-item label="处置类型" prop="disposalType">
<el-select v-model="form.disposalType" placeholder="请选择处置类型">
<el-option
v-for="dict in wms_disposal_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="样品台账ID" prop="sampleLedgerId">
<el-input v-model="form.sampleLedgerId" placeholder="请输入样品台账ID" />
</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>
</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="['wms:sampleDisposalRecord:add']"> </el-button>-->
<!--</el-col>-->
<!--<el-col :span="1.5">-->
<!-- <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['wms:sampleDisposalRecord:edit']"-->
<!-- >修改-->
<!-- </el-button>-->
<!--</el-col>-->
<!--<el-col :span="1.5">-->
<!-- <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['wms:sampleDisposalRecord:remove']"-->
<!-- >删除-->
<!-- </el-button>-->
<!--</el-col>-->
<el-col :span="1.5">
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['wms:sampleDisposalRecord:export']"> </el-button>
</el-col>
<right-toolbar v-model:showSearch="showSearch" :columns="columns" :search="true" @queryTable="getList"></right-toolbar>
</el-row>
</template>
<el-table v-loading="loading" border :data="sampleDisposalRecordList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="样品处理记录ID" align="center" prop="sampleRecordId" v-if="columns[0].visible" />
<el-table-column label="物料编码" align="center" prop="productCode" v-if="columns[2].visible" />
<el-table-column label="物料名称" align="center" prop="productName" v-if="columns[2].visible" />
<el-table-column label="物料描述" align="center" prop="productSpe" v-if="columns[2].visible" />
<el-table-column label="批次号" align="center" prop="batchNumber" v-if="columns[3].visible" />
<el-table-column label="处置数量" align="center" prop="disposalQty" v-if="columns[4].visible" />
<el-table-column label="单位" align="center" prop="unitName" v-if="columns[5].visible" />
<el-table-column label="处置类型" align="center" prop="disposalType" v-if="columns[6].visible">
<template #default="scope">
<dict-tag :options="wms_disposal_type" :value="scope.row.disposalType" />
</template>
</el-table-column>
<el-table-column label="创建部门" align="center" prop="createDept" v-if="columns[8].visible" />
<el-table-column label="创建人" align="center" prop="createBy" v-if="columns[9].visible" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180" v-if="columns[10].visible">
<template #default="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
</template>
</el-table-column>
<el-table-column label="更新人" align="center" prop="updateBy" v-if="columns[11].visible" />
<el-table-column label="更新时间" align="center" prop="updateTime" width="180" v-if="columns[12].visible">
<template #default="scope">
<span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
</template>
</el-table-column>
<el-table-column label="样品台账ID" align="center" prop="sampleLedgerId" v-if="columns[13].visible" />
<!--<el-table-column label="操作" align="center" fixed="right" 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="['wms:sampleDisposalRecord:edit']"></el-button>-->
<!-- </el-tooltip>-->
<!-- <el-tooltip content="删除" placement="top">-->
<!-- <el-button-->
<!-- link-->
<!-- type="primary"-->
<!-- icon="Delete"-->
<!-- @click="handleDelete(scope.row)"-->
<!-- v-hasPermi="['wms:sampleDisposalRecord: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-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
<el-form ref="sampleDisposalRecordFormRef" :model="form" :rules="rules" label-width="120px">
<el-form-item label="物料ID" prop="materielId">
<el-input v-model="form.materielId" placeholder="请输入物料ID" />
</el-form-item>
<el-form-item label="批次号" prop="batchNumber">
<el-input v-model="form.batchNumber" placeholder="请输入批次号" />
</el-form-item>
<el-form-item label="处置数量" prop="disposalQty">
<el-input v-model="form.disposalQty" placeholder="请输入处置数量" />
</el-form-item>
<el-form-item label="单位" prop="unitName">
<el-input v-model="form.unitName" placeholder="请输入单位" />
</el-form-item>
<el-form-item label="处置类型" prop="disposalType">
<el-select v-model="form.disposalType" placeholder="请选择处置类型">
<el-option v-for="dict in wms_disposal_type" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
</el-select>
</el-form-item>
<!--<el-form-item label="样品台账ID" prop="sampleLedgerId">-->
<!-- <el-input v-model="form.sampleLedgerId" placeholder="请输入样品台账ID" />-->
<!--</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="SampleDisposalRecord" lang="ts">
import { listSampleDisposalRecord, getSampleDisposalRecord, delSampleDisposalRecord, addSampleDisposalRecord, updateSampleDisposalRecord } from '@/api/wms/sampleDisposalRecord';
import { SampleDisposalRecordVO, SampleDisposalRecordQuery, SampleDisposalRecordForm } from '@/api/wms/sampleDisposalRecord/types';
import {
addSampleDisposalRecord,
delSampleDisposalRecord,
getSampleDisposalRecord,
listSampleDisposalRecord,
updateSampleDisposalRecord
} from '@/api/wms/sampleDisposalRecord';
import { SampleDisposalRecordForm, SampleDisposalRecordQuery, SampleDisposalRecordVO } from '@/api/wms/sampleDisposalRecord/types';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { wms_disposal_type } = toRefs<any>(proxy?.useDict('wms_disposal_type'));
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { wms_disposal_type } = toRefs<any>(proxy?.useDict('wms_disposal_type'));
const sampleDisposalRecordList = ref<SampleDisposalRecordVO[]>([]);
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 total = ref(0);
const sampleDisposalRecordList = ref<SampleDisposalRecordVO[]>([]);
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 total = ref(0);
const queryFormRef = ref<ElFormInstance>();
const sampleDisposalRecordFormRef = ref<ElFormInstance>();
const queryFormRef = ref<ElFormInstance>();
const sampleDisposalRecordFormRef = ref<ElFormInstance>();
const dialog = reactive<DialogOption>({
visible: false,
title: ''
});
const dialog = reactive<DialogOption>({
visible: false,
title: ''
});
//
const columns = ref<FieldOption[]>([
{ key: 0, label: `样品处理记录ID`, visible: true },
{ key: 1, label: `租户编号`, visible: true },
{ key: 2, label: `物料ID`, visible: true },
{ key: 3, label: `批次号`, visible: true },
{ key: 4, label: `处置数量`, visible: true },
{ key: 5, label: `单位`, visible: true },
{ key: 6, label: `处置类型`, visible: true },
{ key: 7, label: `删除标志`, visible: true },
{ key: 8, label: `创建部门`, visible: true },
{ key: 9, label: `创建人`, visible: true },
{ key: 10, label: `创建时间`, visible: true },
{ key: 11, label: `更新人`, visible: true },
{ key: 12, label: `更新时间`, visible: true },
{ key: 13, label: `样品台账ID`, visible: true },
]);
//
const columns = ref<FieldOption[]>([
{ key: 0, label: `样品处理记录ID`, visible: false },
{ key: 1, label: `租户编号`, visible: false },
{ key: 2, label: `物料ID`, visible: true },
{ key: 3, label: `批次号`, visible: true },
{ key: 4, label: `处置数量`, visible: true },
{ key: 5, label: `单位`, visible: true },
{ key: 6, label: `处置类型`, visible: true },
{ key: 7, label: `删除标志`, visible: true },
{ key: 8, label: `创建部门`, visible: false },
{ key: 9, label: `创建人`, visible: false },
{ key: 10, label: `创建时间`, visible: true },
{ key: 11, label: `更新人`, visible: false },
{ key: 12, label: `更新时间`, visible: true },
{ key: 13, label: `样品台账ID`, visible: false }
]);
const initFormData: SampleDisposalRecordForm = {
sampleRecordId: undefined,
materielId: undefined,
batchNumber: undefined,
disposalQty: undefined,
unitName: undefined,
disposalType: undefined,
sampleLedgerId: undefined
const initFormData: SampleDisposalRecordForm = {
sampleRecordId: undefined,
materielId: undefined,
batchNumber: undefined,
disposalQty: undefined,
unitName: undefined,
disposalType: undefined,
sampleLedgerId: undefined
};
const data = reactive<PageData<SampleDisposalRecordForm, SampleDisposalRecordQuery>>({
form: { ...initFormData },
queryParams: {
pageNum: 1,
pageSize: 10,
batchNumber: undefined,
disposalType: undefined,
sampleLedgerId: undefined,
orderByColumn: 'createTime',
isAsc: 'desc',
params: {}
},
rules: {
sampleRecordId: [{ required: true, message: '样品处理记录ID不能为空', trigger: 'blur' }]
}
});
const { queryParams, form, rules } = toRefs(data);
/** 查询样品处置记录列表 */
const getList = async () => {
loading.value = true;
const res = await listSampleDisposalRecord(queryParams.value);
sampleDisposalRecordList.value = res.rows;
total.value = res.total;
loading.value = false;
};
/** 取消按钮 */
const cancel = () => {
reset();
dialog.visible = false;
};
/** 表单重置 */
const reset = () => {
form.value = { ...initFormData };
sampleDisposalRecordFormRef.value?.resetFields();
};
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.value.pageNum = 1;
getList();
};
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value?.resetFields();
handleQuery();
};
/** 多选框选中数据 */
const handleSelectionChange = (selection: SampleDisposalRecordVO[]) => {
ids.value = selection.map((item) => item.sampleRecordId);
single.value = selection.length != 1;
multiple.value = !selection.length;
};
/** 新增按钮操作 */
const handleAdd = () => {
reset();
dialog.visible = true;
dialog.title = '添加样品处置记录';
};
/** 修改按钮操作 */
const handleUpdate = async (row?: SampleDisposalRecordVO) => {
reset();
const _sampleRecordId = row?.sampleRecordId || ids.value[0];
const res = await getSampleDisposalRecord(_sampleRecordId);
Object.assign(form.value, res.data);
dialog.visible = true;
dialog.title = '修改样品处置记录';
};
/** 提交按钮 */
const submitForm = () => {
sampleDisposalRecordFormRef.value?.validate(async (valid: boolean) => {
if (valid) {
buttonLoading.value = true;
if (form.value.sampleRecordId) {
await updateSampleDisposalRecord(form.value).finally(() => (buttonLoading.value = false));
} else {
await addSampleDisposalRecord(form.value).finally(() => (buttonLoading.value = false));
}
proxy?.$modal.msgSuccess('操作成功');
dialog.visible = false;
await getList();
}
const data = reactive<PageData<SampleDisposalRecordForm, SampleDisposalRecordQuery>>({
form: {...initFormData},
queryParams: {
pageNum: 1,
pageSize: 10,
batchNumber: undefined,
disposalType: undefined,
sampleLedgerId: undefined,
params: {
}
},
rules: {
sampleRecordId: [
{ required: true, message: "样品处理记录ID不能为空", trigger: "blur" }
],
}
});
});
};
const { queryParams, form, rules } = toRefs(data);
/** 删除按钮操作 */
const handleDelete = async (row?: SampleDisposalRecordVO) => {
const _sampleRecordIds = row?.sampleRecordId || ids.value;
await proxy?.$modal.confirm('是否确认删除样品处置记录编号为"' + _sampleRecordIds + '"的数据项?').finally(() => (loading.value = false));
await delSampleDisposalRecord(_sampleRecordIds);
proxy?.$modal.msgSuccess('删除成功');
await getList();
};
/** 查询样品处置记录列表 */
const getList = async () => {
loading.value = true;
const res = await listSampleDisposalRecord(queryParams.value);
sampleDisposalRecordList.value = res.rows;
total.value = res.total;
loading.value = false;
}
/** 导出按钮操作 */
const handleExport = () => {
proxy?.download(
'wms/sampleDisposalRecord/export',
{
...queryParams.value
},
`sampleDisposalRecord_${new Date().getTime()}.xlsx`
);
};
/** 取消按钮 */
const cancel = () => {
reset();
dialog.visible = false;
}
/** 表单重置 */
const reset = () => {
form.value = {...initFormData};
sampleDisposalRecordFormRef.value?.resetFields();
}
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.value.pageNum = 1;
getList();
}
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value?.resetFields();
handleQuery();
}
/** 多选框选中数据 */
const handleSelectionChange = (selection: SampleDisposalRecordVO[]) => {
ids.value = selection.map(item => item.sampleRecordId);
single.value = selection.length != 1;
multiple.value = !selection.length;
}
/** 新增按钮操作 */
const handleAdd = () => {
reset();
dialog.visible = true;
dialog.title = "添加样品处置记录";
}
/** 修改按钮操作 */
const handleUpdate = async (row?: SampleDisposalRecordVO) => {
reset();
const _sampleRecordId = row?.sampleRecordId || ids.value[0]
const res = await getSampleDisposalRecord(_sampleRecordId);
Object.assign(form.value, res.data);
dialog.visible = true;
dialog.title = "修改样品处置记录";
}
/** 提交按钮 */
const submitForm = () => {
sampleDisposalRecordFormRef.value?.validate(async (valid: boolean) => {
if (valid) {
buttonLoading.value = true;
if (form.value.sampleRecordId) {
await updateSampleDisposalRecord(form.value).finally(() => buttonLoading.value = false);
} else {
await addSampleDisposalRecord(form.value).finally(() => buttonLoading.value = false);
}
proxy?.$modal.msgSuccess("操作成功");
dialog.visible = false;
await getList();
}
});
}
/** 删除按钮操作 */
const handleDelete = async (row?: SampleDisposalRecordVO) => {
const _sampleRecordIds = row?.sampleRecordId || ids.value;
await proxy?.$modal.confirm('是否确认删除样品处置记录编号为"' + _sampleRecordIds + '"的数据项?').finally(() => loading.value = false);
await delSampleDisposalRecord(_sampleRecordIds);
proxy?.$modal.msgSuccess("删除成功");
await getList();
}
/** 导出按钮操作 */
const handleExport = () => {
proxy?.download('wms/sampleDisposalRecord/export', {
...queryParams.value
}, `sampleDisposalRecord_${new Date().getTime()}.xlsx`)
}
onMounted(() => {
getList();
});
onMounted(() => {
getList();
});
</script>

@ -83,8 +83,32 @@
</el-row>
</template>
<el-table v-loading="loading" border :data="sampleLedgerList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table
v-loading="loading"
border
:data="sampleLedgerList"
@selection-change="handleSelectionChange"
@expand-change="handleExpandChange"
:row-key="(row) => row.sampleLedgerId"
>
<el-table-column type="expand">
<template #default="{ row }">
<el-table v-loading="row.loading" border :data="row.data" :style="{ width: '95%', margin: '0 auto' }">
<el-table-column label="处置类型" align="center" prop="disposalType">
<template #default="scope">
<dict-tag :options="wms_disposal_type" :value="scope.row.disposalType" />
</template>
</el-table-column>
<el-table-column label="时间" align="center" prop="createTime">
<template #default="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
</template>
</el-table-column>
<el-table-column label="处置数量" align="center" prop="disposalQty" />
<el-table-column label="单位" align="center" prop="unitName" />
</el-table>
</template>
</el-table-column>
<el-table-column label="样品台账ID" align="center" prop="sampleLedgerId" v-if="columns[0].visible" />
<el-table-column label="出库仓库" align="center" prop="warehouseId" v-if="columns[2].visible">
<template #default="scope">
@ -269,10 +293,10 @@
</el-dialog>
<!-- 处置样品 -->
<el-dialog title="处置样品" v-model="disposalDialog.visible" width="50%" append-to-body>
<el-form ref="sampleLedgerFormRef" :model="form" :rules="rules" label-width="120px" :disabled="true">
<el-form ref="sampleLedgerFormRef" :model="form" :rules="rules" label-width="120px">
<el-row>
<el-col :span="12">
<el-form-item label="出库仓库" >
<el-form-item label="出库仓库">
<el-select v-model="form.warehouseId" placeholder="请选择出库仓库" :disabled="true">
<el-option v-for="item in warehouseInfoList" :key="item.warehouseId" :label="item.warehouseName" :value="item.warehouseId" />
</el-select>
@ -308,7 +332,6 @@
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="借出数量" prop="lentQty">
<el-input v-model="form.lentQty" placeholder="请输入借出数量" :disabled="true" />
@ -316,10 +339,38 @@
</el-col>
<el-col :span="12">
<el-form-item label="未处理数量" prop="returnQty">
<el-input v-model="form.returnQty" placeholder="请输入未处理数量" :disabled="true"/>
<el-input v-model="form.returnQty" placeholder="请输入未处理数量" :disabled="true" />
</el-form-item>
</el-col>
</el-row>
<el-card>
<template #header>
<div>样品处置结果</div>
</template>
<el-row>
<el-col :span="12">
<el-form-item label="处置类型" prop="disposalType">
<el-select v-model="form.disposalType" placeholder="请选择处置类型">
<el-option v-for="dict in wms_disposal_type" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="处置数量" prop="disposalQty">
<el-input-number
v-model="form.disposalQty"
placeholder="请输入处置数量"
:min="0"
:precision="2"
:step="1"
:max="form.returnQty || 0"
controls-position="right"
style="width: 100%"
/>
</el-form-item>
</el-col>
</el-row>
</el-card>
<!-- <el-form-item label="物料ID" prop="materielId">-->
<!-- <el-input v-model="form.materielId" placeholder="请输入物料ID" />-->
@ -328,12 +379,19 @@
<!-- <el-input v-model="form.batchNumber" 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="SampleLedger" lang="ts">
import { addSampleLedger, delSampleLedger, getSampleLedger, listSampleLedger } from '@/api/wms/sampleLedger';
import { addSampleLedger, delSampleLedger, getSampleLedger, listSampleLedger, updateSampleLedger } from '@/api/wms/sampleLedger';
import { SampleLedgerForm, SampleLedgerQuery, SampleLedgerVO } from '@/api/wms/sampleLedger/types';
import { getErpProjectInfoList } from '@/api/oa/erp/projectInfo';
import { getCrmCustomerInfoList } from '@/api/oa/crm/customerInfo';
@ -341,9 +399,10 @@ import { getWmsWarehouseInfoList } from '@/api/wms/warehouseInfo';
import { ElMessage } from 'element-plus';
import WmsInventorySelect from '@/components/WmsInventorySelect/index.vue';
import { ref } from 'vue';
import { addSampleDisposalRecord, getWmsSampleDisposalRecordList } from '@/api/wms/sampleDisposalRecord';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { wms_sample_state, sys_yes_no } = toRefs<any>(proxy?.useDict('wms_sample_state', 'sys_yes_no'));
const { wms_sample_state, sys_yes_no, wms_disposal_type } = toRefs<any>(proxy?.useDict('wms_sample_state', 'sys_yes_no', 'wms_disposal_type'));
const dateRangeCreateTime = ref<[DateModelType, DateModelType]>(['', '']);
const sampleLedgerList = ref<SampleLedgerVO[]>([]);
const buttonLoading = ref(false);
@ -397,7 +456,7 @@ const columns = ref<FieldOption[]>([
{ key: 16, label: `创建人`, visible: false },
{ key: 17, label: `创建时间`, visible: true },
{ key: 18, label: `更新人`, visible: false },
{ key: 19, label: `更新时间`, visible: true }
{ key: 19, label: `更新时间`, visible: false }
]);
const initFormData: SampleLedgerForm = {
@ -414,7 +473,9 @@ const initFormData: SampleLedgerForm = {
customerNumber: undefined,
lentRemark: undefined,
sampleState: undefined,
isReturn: 'Y'
isReturn: 'Y',
disposalType: undefined,
disposalQty: 1
};
const data = reactive<PageData<SampleLedgerForm, SampleLedgerQuery>>({
form: { ...initFormData },
@ -428,6 +489,8 @@ const data = reactive<PageData<SampleLedgerForm, SampleLedgerQuery>>({
customerId: undefined,
isReturn: undefined,
sampleState: undefined,
orderByColumn: 'createTime',
isAsc: 'desc',
params: {}
},
rules: {
@ -437,6 +500,8 @@ const data = reactive<PageData<SampleLedgerForm, SampleLedgerQuery>>({
customerUser: [{ required: true, message: '联系人不能为空', trigger: 'blur' }],
customerNumber: [{ required: true, message: '联系电话不能为空', trigger: 'blur' }],
lentRemark: [{ required: true, message: '样品用途不能为空', trigger: 'blur' }]
// disposalType: [{ required: true, message: '', trigger: 'blur' }],
// disposalQty: [{ required: true, message: '', trigger: 'blur' }]
}
});
@ -509,6 +574,7 @@ const getList = async () => {
const cancel = () => {
reset();
dialog.visible = false;
disposalDialog.visible = false;
};
/** 表单重置 */
@ -535,7 +601,17 @@ const handleSelectionChange = (selection: SampleLedgerVO[]) => {
single.value = selection.length != 1;
multiple.value = !selection.length;
};
/** 展开子表*/
const handleExpandChange = async (row, expandRows) => {
if (expandRows.length && !row.data) {
row.loading = true;
const recordList = await getWmsSampleDisposalRecordList({
sampleLedgerId: row.sampleLedgerId
});
row.data = recordList.data;
row.loading = false;
}
};
/** 新增按钮操作 */
const handleAdd = () => {
reset();
@ -545,6 +621,10 @@ const handleAdd = () => {
/** 修改按钮操作 */
const handleUpdate = async (row?: SampleLedgerVO) => {
if (row?.returnQty === 0 || row?.sampleState === '2') {
ElMessage.warning('当前样品已处置完成');
return;
}
reset();
const _sampleLedgerId = row?.sampleLedgerId || ids.value[0];
const res = await getSampleLedger(_sampleLedgerId);
@ -558,7 +638,25 @@ const submitForm = () => {
if (valid) {
buttonLoading.value = true;
if (form.value.sampleLedgerId) {
// await updateSampleLedger(form.value).finally(() => (buttonLoading.value = false));
// disposalType
if (!form.value.disposalType) {
ElMessage.warning('处置类型不能为空');
buttonLoading.value = false;
return;
}
//
if (form.value.disposalQty > form.value.returnQty) {
ElMessage.error('处置数量不能超过未处理数量');
buttonLoading.value = false;
return;
}
const result = await updateSampleLedger(form.value).finally(() => (buttonLoading.value = false));
// console.log('' + result.value);
// if (!(result.data.code !== 200)) {
// proxy?.$modal.msgError('');
// return;
// }
await addSampleDisposalRecord(form.value).finally(() => (buttonLoading.value = false));
} else {
const returnFlag = form.value.isReturn;
const submitFlowData = selectInventorys.value.map((item) => ({
@ -582,6 +680,7 @@ const submitForm = () => {
}
proxy?.$modal.msgSuccess('操作成功');
dialog.visible = false;
disposalDialog.visible = false;
await getList();
}
});

Loading…
Cancel
Save