Merge remote-tracking branch 'origin/master'

master
夜笙歌 2 days ago
commit 86b3962904

@ -1,6 +1,6 @@
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { QcUnqualifiedReviewVO, QcUnqualifiedReviewForm, QcUnqualifiedReviewQuery } from '@/api/qms/qcUnqualifiedReview/types';
import { QcUnqualifiedReviewVO, QcUnqualifiedReviewForm, QcUnqualifiedReviewQuery, CompleteTaskRequest } from '@/api/qms/qcUnqualifiedReview/types';
/**
*
@ -87,3 +87,17 @@ export const handleUnqualified = (dispositionType: string | number, reviewId: st
method: 'get'
});
};
/**
*
* @param data
*/
export const completeTask = (data: QcUnqualifiedReviewForm) => {
return request({
url: '/qms/qcUnqualifiedReview/completeTask',
method: 'post',
data: data
});
};

@ -72,6 +72,11 @@ export interface InstockRecordVO {
*/
updateTime: string;
/**
* 01退
*/
specialType: string | number;
}
export interface InstockRecordForm extends BaseEntity {
@ -142,6 +147,11 @@ export interface InstockRecordForm extends BaseEntity {
*/
erpSynchronousQty?: number;
/**
* 01退
*/
specialType?: string | number;
}
export interface InstockRecordQuery extends PageQuery {
@ -198,6 +208,11 @@ export interface InstockRecordQuery extends PageQuery {
*/
erpSynchronousQty?: number;
/**
* 01退
*/
specialType?: string | number;
/**
*
*/

@ -2,12 +2,12 @@ import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { OutstockDetailVO, OutstockDetailForm, OutstockDetailQuery } from '@/api/wms/outstockDetail/types';
/**
* -
* @param query
* @returns {*}
*/
export const listOutstockDetail = (query?: OutstockDetailQuery): AxiosPromise<OutstockDetailVO[]> => {
return request({
url: '/wms/outstockDetail/list',
@ -61,3 +61,16 @@ export const delOutstockDetail = (outstockDetailId: string | number | Array<stri
method: 'delete'
});
};
/**
* -
* @param query
* @returns {*}
*/
export const getOutstockDetailList = (query?: OutstockDetailQuery): AxiosPromise<OutstockDetailVO[]> => {
return request({
url: '/wms/outstockDetail/getOutstockDetailList',
method: 'get',
params: query
});
};

@ -53,6 +53,11 @@ export interface OutstockDetailVO {
*/
agvStatus: string;
/**
* (0,1)
*/
isHighValue: string;
}
export interface OutstockDetailForm extends BaseEntity {
@ -104,6 +109,11 @@ export interface OutstockDetailForm extends BaseEntity {
*/
agvStatus?: string;
/**
* (0,1)
*/
isHighValue?: string;
}
export interface OutstockDetailQuery extends PageQuery {
@ -156,6 +166,11 @@ export interface OutstockDetailQuery extends PageQuery {
*/
agvStatus?: string;
/**
* (0,1)
*/
isHighValue?: string;
/**
*

@ -2,6 +2,7 @@ import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { OutstockOrderVO, OutstockOrderForm, OutstockOrderQuery } from '@/api/wms/outstockOrder/types';
/**
*
* @param query
@ -72,4 +73,18 @@ export const approveOutstockOrder = (data: Partial<OutstockOrderForm>) => {
method: 'put',
data: data
});
};
};
/**
*
* @param query
* @returns {*}
*/
export const getOutstockOrderList = (query?: OutstockOrderQuery): AxiosPromise<OutstockOrderVO[]> => {
return request({
url: '/wms/outstockOrder/getOutstockOrderList',
method: 'get',
params: query
});
};

@ -57,6 +57,11 @@ export interface OutstockOrderVO {
*/
auditComments: string;
/**
* idorder_type1
*/
customerId: string | number;
}
export interface OutstockOrderForm extends BaseEntity {
@ -117,6 +122,11 @@ export interface OutstockOrderForm extends BaseEntity {
*/
auditComments?: string;
/**
* idorder_type1
*/
customerId?: string | number;
}
export interface OutstockOrderQuery extends PageQuery {
@ -178,6 +188,11 @@ export interface OutstockOrderQuery extends PageQuery {
*/
auditComments?: string;
/**
* idorder_type1
*/
customerId?: string | number;
/**
*
*/

@ -62,6 +62,12 @@ export interface OutstockRecordVO {
*/
erpSynchronousQty: number;
/**
* 01退
*/
specialType: string | number;
}
export interface OutstockRecordForm extends BaseEntity {
@ -122,6 +128,12 @@ export interface OutstockRecordForm extends BaseEntity {
*/
erpSynchronousQty?: number;
/**
* 01退
*/
specialType?: string | number;
}
export interface OutstockRecordQuery extends PageQuery {
@ -148,6 +160,11 @@ export interface OutstockRecordQuery extends PageQuery {
*/
erpSynchronousStatus?: string;
/**
* 01退
*/
specialType?: string | number;
/**
*
*/

@ -0,0 +1,77 @@
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { WmsBaseCustomerVO, WmsBaseCustomerForm, WmsBaseCustomerQuery } from '@/api/wms/wmsBaseCustomer/types';
/**
*
* @param query
* @returns {*}
*/
export const listWmsBaseCustomer = (query?: WmsBaseCustomerQuery): AxiosPromise<WmsBaseCustomerVO[]> => {
return request({
url: '/wms/wmsBaseCustomer/list',
method: 'get',
params: query
});
};
/**
*
* @param customerId
*/
export const getWmsBaseCustomer = (customerId: string | number): AxiosPromise<WmsBaseCustomerVO> => {
return request({
url: '/wms/wmsBaseCustomer/' + customerId,
method: 'get'
});
};
/**
*
* @param data
*/
export const addWmsBaseCustomer = (data: WmsBaseCustomerForm) => {
return request({
url: '/wms/wmsBaseCustomer',
method: 'post',
data: data
});
};
/**
*
* @param data
*/
export const updateWmsBaseCustomer = (data: WmsBaseCustomerForm) => {
return request({
url: '/wms/wmsBaseCustomer',
method: 'put',
data: data
});
};
/**
*
* @param customerId
*/
export const delWmsBaseCustomer = (customerId: string | number | Array<string | number>) => {
return request({
url: '/wms/wmsBaseCustomer/' + customerId,
method: 'delete'
});
};
/**
*
* @param query
* @returns {*}
*/
export function getWmsBaseCustomerList (query) {
return request({
url: '/wms/wmsBaseCustomer/getWmsBaseCustomerList',
method: 'get',
params: query
});
};

@ -0,0 +1,161 @@
export interface WmsBaseCustomerVO {
/**
* ID
*/
customerId: string | number;
/**
*
*/
customerCode: string;
/**
*
*/
customerName: string;
/**
*
*/
contactPerson: string;
/**
*
*/
contactPhone: string;
/**
*
*/
address: string;
/**
*
*/
fax: string;
/**
*
*/
email: string;
/**
* 0 1
*/
status: string;
/**
*
*/
remark: string;
}
export interface WmsBaseCustomerForm extends BaseEntity {
/**
* ID
*/
customerId?: string | number;
/**
*
*/
customerCode?: string;
/**
*
*/
customerName?: string;
/**
*
*/
contactPerson?: string;
/**
*
*/
contactPhone?: string;
/**
*
*/
address?: string;
/**
*
*/
fax?: string;
/**
*
*/
email?: string;
/**
* 0 1
*/
status?: string;
/**
*
*/
remark?: string;
}
export interface WmsBaseCustomerQuery extends PageQuery {
/**
* ID
*/
customerId?: string | number;
/**
*
*/
customerCode?: string;
/**
*
*/
customerName?: string;
/**
*
*/
contactPerson?: string;
/**
*
*/
contactPhone?: string;
/**
*
*/
address?: string;
/**
*
*/
fax?: string;
/**
*
*/
email?: string;
/**
* 0 1
*/
status?: string;
/**
*
*/
params?: any;
}

@ -0,0 +1,77 @@
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { WmsCheckTaskVO, WmsCheckTaskForm, WmsCheckTaskQuery } from '@/api/wms/wmsCheckTask/types';
/**
*
* @param query
* @returns {*}
*/
export const listWmsCheckTask = (query?: WmsCheckTaskQuery): AxiosPromise<WmsCheckTaskVO[]> => {
return request({
url: '/wms/wmsCheckTask/list',
method: 'get',
params: query
});
};
/**
*
* @param taskId
*/
export const getWmsCheckTask = (taskId: string | number): AxiosPromise<WmsCheckTaskVO> => {
return request({
url: '/wms/wmsCheckTask/' + taskId,
method: 'get'
});
};
/**
*
* @param data
*/
export const addWmsCheckTask = (data: WmsCheckTaskForm) => {
return request({
url: '/wms/wmsCheckTask',
method: 'post',
data: data
});
};
/**
*
* @param data
*/
export const updateWmsCheckTask = (data: WmsCheckTaskForm) => {
return request({
url: '/wms/wmsCheckTask',
method: 'put',
data: data
});
};
/**
*
* @param taskId
*/
export const delWmsCheckTask = (taskId: string | number | Array<string | number>) => {
return request({
url: '/wms/wmsCheckTask/' + taskId,
method: 'delete'
});
};
/**
*
* @param query
* @returns {*}
*/
export function getWmsCheckTaskList (query) {
return request({
url: '/wms/wmsCheckTask/getWmsCheckTaskList',
method: 'get',
params: query
});
};

@ -0,0 +1,202 @@
export interface WmsCheckTaskVO {
/**
*
*/
taskId: string | number;
/**
*
*/
taskCode: string;
/**
*
*/
taskName: string;
/**
* 01
*/
wmsCheckTaskType: string;
/**
*
*/
materialTypeId: string | number;
/**
*
*/
checkRate: number;
/**
*
*/
cron: string;
/**
*
*/
warehouseId: string | number;
/**
* (012)
*/
wmsCheckTaskFrequency: string;
/**
* (1-31 or 'L')
*/
executeDay?: string;
/**
*
*/
intervalMonths?: number;
/**
* (1-12)
*/
executeMonth?: number;
/**
*
*/
matrialTypeName: string;
/**
*
*/
warehouseName: string;
}
export interface WmsCheckTaskForm extends BaseEntity {
/**
*
*/
taskId?: string | number;
/**
*
*/
taskCode?: string;
/**
*
*/
taskName?: string;
/**
* 01
*/
wmsCheckTaskType?: string;
/**
*
*/
materialTypeId?: string | number;
/**
*
*/
checkRate?: number;
/**
*
*/
cron?: string;
/**
*
*/
warehouseId?: string | number;
/**
* (012)
*/
wmsCheckTaskFrequency?: string;
executeDay?: string;
intervalMonths?: number;
executeMonth?: number;
/**
*
*/
matrialTypeName?: string;
/**
*
*/
warehouseName?: string;
}
export interface WmsCheckTaskQuery extends PageQuery {
/**
*
*/
taskId?: string | number;
/**
*
*/
taskCode?: string;
/**
*
*/
taskName?: string;
/**
* 01
*/
wmsCheckTaskType?: string;
/**
*
*/
materialTypeId?: string | number;
/**
*
*/
checkRate?: number;
/**
*
*/
cron?: string;
/**
*
*/
warehouseId?: string | number;
/**
* (012)
*/
wmsCheckTaskFrequency?: string;
/**
*
*/
matrialTypeName?: string;
/**
*
*/
warehouseName?: string;
/**
*
*/
params?: any;
}

@ -52,9 +52,9 @@ import { countTaskWaitByCurrentUser } from '@/api/workflow/task';
const badge = ref(1);
const getBadge = () => {
countTaskWaitByCurrentUser().then(e => {
badge.value = e.data;
});
// countTaskWaitByCurrentUser().then(e => {
// badge.value = e.data;
// });
};
onMounted(() => {
setInterval(() => {

@ -13,16 +13,16 @@
<el-form-item label="物料大类" prop="materialCategoryId">
<el-input v-model="queryParams.materialCategoryId" placeholder="请输入物料大类" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="出库仓库ID" prop="planWarehouseId">
<el-input v-model="queryParams.planWarehouseId" placeholder="请输入出库仓库ID" clearable @keyup.enter="handleQuery" />
<el-form-item label="出库仓库" prop="planWarehouseId">
<el-input v-model="queryParams.planWarehouseId" placeholder="请输入出库仓库" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="工单状态" prop="orderStatus">
<el-select v-model="queryParams.orderStatus" placeholder="请选择工单状态" clearable >
<el-option v-for="dict in wms_allocate_status" :key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="入库仓库ID" prop="targetWarehouseId">
<el-input v-model="queryParams.targetWarehouseId" placeholder="请输入入库仓库ID" clearable @keyup.enter="handleQuery" />
<el-form-item label="入库仓库" prop="targetWarehouseId">
<el-input v-model="queryParams.targetWarehouseId" placeholder="请输入入库仓库" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="审核人" prop="auditBy">
<el-input v-model="queryParams.auditBy" placeholder="请输入审核人" clearable @keyup.enter="handleQuery" />
@ -93,13 +93,13 @@
<el-table-column label="物料大类" align="center" prop="materialCategoryId" v-if="columns[2].visible">
</el-table-column>
<el-table-column label="出库仓库ID" align="center" prop="planWarehouseCode" v-if="columns[3].visible"/>
<el-table-column label="出库仓库" align="center" prop="planWarehouseCode" v-if="columns[3].visible"/>
<el-table-column label="工单状态" align="center" prop="orderStatus" v-if="columns[4].visible">
<template #default="scope">
<dict-tag :options="wms_allocate_status" :value="scope.row.orderStatus"/>
</template>
</el-table-column>
<el-table-column label="入库仓库ID" align="center" prop="targetWarehouseCode" v-if="columns[5].visible"/>
<el-table-column label="入库仓库" align="center" prop="targetWarehouseCode" v-if="columns[5].visible"/>
<el-table-column label="审核人" align="center" prop="auditBy" v-if="columns[6].visible"/>
<el-table-column label="审核时间" align="center" prop="auditTime" width="180" v-if="columns[7].visible">
<template #default="scope">
@ -299,9 +299,9 @@ const columns = ref<FieldOption[]>([
{ key: 0, label: `表主键`, visible: true },
{ key: 1, label: `调拨单号`, visible: true },
{ key: 2, label: `物料大类`, visible: true },
{ key: 3, label: `出库仓库ID`, visible: true },
{ key: 3, label: `出库仓库`, visible: true },
{ key: 4, label: `工单状态`, visible: true },
{ key: 5, label: `入库仓库ID`, visible: true },
{ key: 5, label: `入库仓库`, visible: true },
{ key: 6, label: `审核人`, visible: true },
{ key: 7, label: `审核时间`, visible: true },
{ key: 8, label: `审核状态(0待审核,1审核通过,2审核未通过)`, visible: true },
@ -372,13 +372,13 @@ const data = reactive<PageData<AllocateOrderForm, AllocateOrderQuery>>({
{ required: true, message: "物料大类不能为空", trigger: "blur" }
],
planWarehouseId: [
{ required: true, message: "出库仓库ID不能为空", trigger: "blur" }
{ required: true, message: "出库仓库不能为空", trigger: "blur" }
],
orderStatus: [
{ required: true, message: "工单状态不能为空", trigger: "change" }
],
targetWarehouseId: [
{ required: true, message: "入库仓库ID不能为空", trigger: "blur" }
{ required: true, message: "入库仓库不能为空", trigger: "blur" }
],
auditBy: [
{ required: true, message: "审核人不能为空", trigger: "blur" }

@ -13,16 +13,16 @@
<!-- <el-form-item label="物料大类" prop="materialCategoryId">
<el-input v-model="queryParams.materialCategoryId" placeholder="请输入物料大类" clearable @keyup.enter="handleQuery" />
</el-form-item>-->
<el-form-item label="出库仓库ID" prop="planWarehouseId">
<el-input v-model="queryParams.planWarehouseId" placeholder="请输入出库仓库ID" clearable @keyup.enter="handleQuery" />
<el-form-item label="出库仓库" prop="planWarehouseId">
<el-input v-model="queryParams.planWarehouseId" placeholder="请输入出库仓库" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="工单状态" prop="orderStatus">
<el-select v-model="queryParams.orderStatus" placeholder="请选择工单状态" clearable >
<el-option v-for="dict in wms_allocate_status" :key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="入库仓库ID" prop="targetWarehouseId">
<el-input v-model="queryParams.targetWarehouseId" placeholder="请输入入库仓库ID" clearable @keyup.enter="handleQuery" />
<el-form-item label="入库仓库" prop="targetWarehouseId">
<el-input v-model="queryParams.targetWarehouseId" placeholder="请输入入库仓库" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="审核人" prop="auditBy">
<el-input v-model="queryParams.auditBy" placeholder="请输入审核人" clearable @keyup.enter="handleQuery" />
@ -93,13 +93,13 @@
<el-table-column label="物料大类" align="center" prop="materialCategoryId" v-if="columns[2].visible">
</el-table-column>
<el-table-column label="出库仓库ID" align="center" prop="planWarehouseCode" v-if="columns[3].visible"/>
<el-table-column label="出库仓库" align="center" prop="planWarehouseCode" v-if="columns[3].visible"/>
<el-table-column label="工单状态" align="center" prop="orderStatus" v-if="columns[4].visible">
<template #default="scope">
<dict-tag :options="wms_allocate_status" :value="scope.row.orderStatus"/>
</template>
</el-table-column>
<el-table-column label="入库仓库ID" align="center" prop="targetWarehouseCode" v-if="columns[5].visible"/>
<el-table-column label="入库仓库" align="center" prop="targetWarehouseCode" v-if="columns[5].visible"/>
<el-table-column label="审核人" align="center" prop="auditBy" v-if="columns[6].visible"/>
<el-table-column label="审核时间" align="center" prop="auditTime" width="180" v-if="columns[7].visible">
<template #default="scope">
@ -301,9 +301,9 @@ const columns = ref<FieldOption[]>([
{ key: 0, label: `表主键`, visible: true },
{ key: 1, label: `调拨单号`, visible: true },
{ key: 2, label: `物料大类`, visible: true },
{ key: 3, label: `出库仓库ID`, visible: true },
{ key: 3, label: `出库仓库`, visible: true },
{ key: 4, label: `工单状态`, visible: true },
{ key: 5, label: `入库仓库ID`, visible: true },
{ key: 5, label: `入库仓库`, visible: true },
{ key: 6, label: `审核人`, visible: true },
{ key: 7, label: `审核时间`, visible: true },
{ key: 8, label: `审核状态(0待审核,1审核通过,2审核未通过)`, visible: true },
@ -374,13 +374,13 @@ const data = reactive<PageData<AllocateOrderForm, AllocateOrderQuery>>({
{ required: true, message: "物料大类不能为空", trigger: "blur" }
],
planWarehouseId: [
{ required: true, message: "出库仓库ID不能为空", trigger: "blur" }
{ required: true, message: "出库仓库不能为空", trigger: "blur" }
],
orderStatus: [
{ required: true, message: "工单状态不能为空", trigger: "change" }
],
targetWarehouseId: [
{ required: true, message: "入库仓库ID不能为空", trigger: "blur" }
{ required: true, message: "入库仓库不能为空", trigger: "blur" }
],
auditBy: [
{ required: true, message: "审核人不能为空", trigger: "blur" }

@ -176,6 +176,7 @@ import { AllocateOrderDetailVO, AllocateOrderDetailQuery, AllocateOrderDetailFor
import { getAllocateOrder } from '@/api/wms/allocateOrder';
import { AllocateOrderVO, AllocateOrderForm, AllocateOrderQuery } from '@/api/wms/allocateOrder/types';
import { useRoute } from 'vue-router';
import { getBaseMaterialCategoryListInWMS } from '@/api/wms/baseMaterialCategory';
const router = useRoute();
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { erp_synchronous_status } = toRefs<any>(proxy?.useDict('erp_synchronous_status', 'wms_allocate_way'));
@ -402,7 +403,7 @@ const handleExport = () => {
let mategoryOptions = ref([]);
const getMaterialCategorySelect = async () => {
const res = await getBaseMaterialCategoryList(null);
const res = await getBaseMaterialCategoryListInWMS(null);
mategoryOptions.value = res.data;
};

@ -217,7 +217,7 @@ const columns = ref<FieldOption[]>([
{ key: 5, label: `审批是否`, visible: true },
{ key: 6, label: `审批类型`, visible: true },
{ key: 7, label: `审批代码`, visible: true },
{ key: 8, label: `仓库ID`, visible: true },
{ key: 8, label: `仓库`, visible: true },
{ key: 9, label: `审批范围`, visible: true },
]);
@ -267,7 +267,7 @@ const data = reactive<PageData<ConfigurationForm, ConfigurationQuery>>({
{ required: true, message: "审批代码不能为空", trigger: "blur" }
],
warehouseId: [
{ required: true, message: "仓库ID不能为空", trigger: "blur" }
{ required: true, message: "仓库不能为空", trigger: "blur" }
],
approveRange: [
{ required: true, message: "审批范围不能为空", trigger: "blur" }

@ -40,7 +40,7 @@
<el-form-item label="审核意见" prop="auditComments">
<el-input v-model="queryParams.auditComments" placeholder="请输入审核意见" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="仓库ID" prop="warehouseId">
<el-form-item label="仓库" prop="warehouseId">
<el-select v-model="form.warehouseId" placeholder="请选择所属仓库">
<el-option
v-for="item in baseStoreList"
@ -103,7 +103,7 @@
</template>
</el-table-column>
<el-table-column label="审核意见" align="center" prop="auditComments" v-if="columns[13].visible"/>
<el-table-column label="仓库ID" align="center" prop="warehouseCode" v-if="columns[14].visible"/>
<el-table-column label="仓库" align="center" prop="warehouseCode" v-if="columns[14].visible"/>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-tooltip content="修改" placement="top">
@ -187,7 +187,7 @@
<el-form-item label="审核意见" prop="auditComments">
<el-input v-model="form.auditComments" placeholder="请输入审核意见" />
</el-form-item> -->
<el-form-item label="仓库ID" prop="warehouseId">
<el-form-item label="仓库" prop="warehouseId">
<el-select v-model="form.warehouseId" placeholder="请选择所属仓库">
<el-option
v-for="item in baseStoreList"
@ -252,7 +252,7 @@ const columns = ref<FieldOption[]>([
{ key: 11, label: `审核时间`, visible: true },
{ key: 12, label: `审核状态(0待审核,1审核通过,2审核未通过)`, visible: true },
{ key: 13, label: `审核意见`, visible: true },
{ key: 14, label: `仓库ID`, visible: true },
{ key: 14, label: `仓库`, visible: true },
]);
const initFormData: InstockOrderForm = {
@ -316,7 +316,7 @@ const data = reactive<PageData<InstockOrderForm, InstockOrderQuery>>({
{ required: true, message: "审核意见不能为空", trigger: "blur" }
],
warehouseId: [
{ required: true, message: "仓库ID不能为空", trigger: "blur" }
{ required: true, message: "仓库不能为空", trigger: "blur" }
]
}
});

@ -62,7 +62,6 @@
@current-change="parentTableCellClick"
@selection-change="selectionChange" ref="parentTableRef">
<el-table-column type="selection" width="55"/>
<el-table-column type="selection" width="55" align="center" />
<!-- <el-table-column label="入库单 主键" align="center" prop="instockId"/> -->
<el-table-column label="入库单号" align="center" prop="instockCode"/>
<el-table-column label="物料大类" align="center" prop="materialCategoryName">
@ -90,7 +89,7 @@
</template>
</el-table-column>
<el-table-column label="审核意见" align="center" prop="auditComments"/>
<el-table-column label="仓库ID" align="center" prop="warehouseCode"/>
<el-table-column label="仓库" align="center" prop="warehouseCode"/>
<!-- <el-table-column label="入库方式" align="center" prop="inMethod">
<template #default="scope">
<dict-tag :options="wms_allocate_way" :value="scope.row.inMethod"/>
@ -163,7 +162,7 @@
<el-dialog v-model="dialogVisible" :title="dialogTitle" width="80%">
<el-card shadow="never">
<el-form :model="dialogForm" :inline="true" label-width="120px" :disabled="isView">
<el-form :model="dialogForm" :inline="true" label-width="120px" :disabled="isView" ref="dialogFormRef" :rules="dialogFormRules">
<el-form-item label="物料大类" prop="materialCategoryId">
<el-select v-model="dialogForm.materialCategoryId" placeholder="请选择物料大类" @change="setMaterialList">
<el-option v-for="item in mategoryOptions"
@ -174,7 +173,7 @@
</el-select>
</el-form-item>
<el-form-item label="工单类型" prop="instockType">
<el-select v-model="dialogForm.instockType" placeholder="请选择工单类型(1采购订单,2生产订单,3手工,4系统生成)">
<el-select v-model="dialogForm.instockType" placeholder="请选择工单类型">
<el-option
v-for="dict in wms_instock_type"
:key="dict.value"
@ -209,7 +208,7 @@
/>
</el-select>
</el-form-item> -->
<el-form-item label="仓库ID" prop="warehouseId">
<el-form-item label="仓库" prop="warehouseId">
<el-select v-model="dialogForm.warehouseId" placeholder="请选择所属仓库">
<el-option
v-for="item in baseStoreList"
@ -224,7 +223,7 @@
<el-card style="margin-top: 8px" shadow="never">
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="addDialogTableCell"></el-button>
<el-button type="primary" plain icon="Plus" @click="addDialogTableCell" :disabled="isAddDisabled">新增</el-button>
</el-col>
</el-row>
<el-table :data="dialogtable" style="width: 100%">
@ -470,16 +469,16 @@
</el-dialog>
<el-dialog v-model="parentTableApproveVisible" title="审批" width="40%">
<el-form :model="parentTableApproveForm" label-width="120px">
<el-form-item label="审核人" prop="auditBy">
<el-select v-model="parentTableApproveForm.auditBy" placeholder="请选择审核人" style="width:100px;" :disabled="true">
<el-option
v-for="item in userList"
:key="item.userId"
:label="item.userName"
:value="item.userName"
/>
</el-select>
</el-form-item>
<!-- <el-form-item label="审核人" prop="auditBy">-->
<!-- <el-select v-model="parentTableApproveForm.auditBy" placeholder="请选择审核人" style="width:100px;" :disabled="true">-->
<!-- <el-option-->
<!-- v-for="item in userList"-->
<!-- :key="item.userId"-->
<!-- :label="item.userName"-->
<!-- :value="item.userName"-->
<!-- />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<el-form-item label="审核状态" prop="auditStatus">
<el-radio-group v-model='parentTableApproveForm.auditStatus'>
<el-radio
@ -532,6 +531,13 @@
>{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
<!--
<el-form-item>
<el-button @click="batchConfigVisible = true">配置条码</el-button>
</el-form-item>
-->
<el-form-item label="已包数量" prop="printedNum">
<el-input v-model="childrenTableInfoForm.printedNum" placeholder="" :disabled="true"/>
</el-form-item>
@ -552,6 +558,17 @@
</template>
</el-dialog>
<!-- <el-dialog v-model="batchConfigVisible" title="条码配置" width="40%">
<el-select v-model="selectedComponents" multiple placeholder="选择并排序组成部分">
<el-option v-for="comp in batchComponents" :key="comp" :label="comp" :value="comp" />
</el-select>
<template #footer>
<el-button @click="batchConfigVisible = false">取消</el-button>
<el-button type="primary" @click="saveBatchConfig"></el-button>
</template>
</el-dialog>-->
<!-- 添加物料信息对话框 -->
<el-dialog title="选择物料信息" v-model="materialOpen" width='1200px' append-to-body>
<MaterialSelectInWMS
@ -571,8 +588,8 @@
<script setup name="Linkage" lang="ts">
import { listInstockOrder, getInstockOrder, delInstockOrder, addInstockOrder, updateInstockOrder, approveInstockOrder } from '@/api/wms/instockOrder';
import type { InstockOrderForm } from '@/api/wms/instockOrder/types';
import {onMounted, reactive, watch, computed} from 'vue'
import type { InstockOrderForm, InstockOrderVO } from '@/api/wms/instockOrder/types';
import { ref, onMounted, reactive, watch, computed, getCurrentInstance, toRefs, ComponentInternalInstance } from 'vue'
import {ElMessage, ElMessageBox} from 'element-plus'
import {getBaseWarehouseList} from "@/api/wms/baseWarehouse";
import {UserVO} from "@/api/system/user/types";
@ -590,6 +607,8 @@ import { getBaseMaterialCategoryListInWMS } from '@/api/wms/baseMaterialCategory
import { getWmsPurchaseOrderDetailList } from '@/api/wms/wmsPurchaseOrderDetail';
import { getProdOrderInfoList, listOrderInfo } from '@/api/wms/orderInfo';
import { getWmsPurchaseOrderList } from '@/api/wms/wmsPurchaseOrder';
import { useRoute } from 'vue-router';
import { parseTime } from '@/utils/ruoyi';
const {proxy} = getCurrentInstance() as ComponentInternalInstance;
const {audit_behave,
@ -663,6 +682,8 @@ const parentTableLoad = ref(false)
const childrenTableLoad = ref(false)
const isView = ref(false)
const partntTableSelectCell = ref({})
const showSearch = ref(true)
const columns = ref([])
const state = reactive({
showPurchaseOrderSelect: false,
@ -675,10 +696,11 @@ const state = reactive({
});
//
getBaseWarehouseList().then(e => {
getBaseWarehouseList(null).then(e => {
baseStoreList.value = e.data
})
listUser().then(e => {
listUser({ pageNum: 1, pageSize: 99999 }).then(e => {
userList.value = e.rows;
})
/** 提交按钮 */
@ -710,11 +732,38 @@ const submitForm = async() => {
}
}
/* // 生成batchCode基于配置
childrenTableInfoForm.value.batchCode = generateBatchCode(childrenTableInfoForm.value)*/
await updateInstockDetail(childrenTableInfoForm.value)
getChildrenTable({instockId: partntTableSelectCell.value.instockId})
childrenTableInfoVisible.value = false
}
/*
//
const batchConfigVisible = ref(false)
const batchComponents = ref(['当前时间', '入库单号', '物料编码']) //
const selectedComponents = ref([]) //
onMounted(() => {
const saved = localStorage.getItem('batchCodeConfig')
if (saved) selectedComponents.value = JSON.parse(saved)
})
const saveBatchConfig = () => {
localStorage.setItem('batchCodeConfig', JSON.stringify(selectedComponents.value))
batchConfigVisible.value = false
}
const generateBatchCode = (form) => {
if (!selectedComponents.value.length) return '' //
return selectedComponents.value.map(comp => {
if (comp === '当前时间') return new Date().toISOString().slice(0,10)
if (comp === '入库单号') return form.instockCode
if (comp === '物料编码') return form.materialCode
return ''
}).join('-') // -
}
*/
let mategoryOptions = ref([]);
const getMaterialCategorySelect = async () => {
const res = await getBaseMaterialCategoryListInWMS(null);
@ -780,8 +829,15 @@ const query = async () => {
}
const reset = () => {
queryForm.value = {
instockId: '',
instockMethond: routeInstockMethondValue, // 使
warehouseId: '',
instockCode: '',
materialCategoryId: '',
materialCategoryName: '',
warehouseId: '',
instockType: '',
instockMethond: routeInstockMethondValue,// 使
pageNum: 1,
pageSize: 10
}
getParentTable()
}
@ -800,9 +856,9 @@ const selectionChange = (e) => {
const viewDetails = (e) => {
isView.value = true
dialogVisible.value = true
viewAllocateOrder(e.aoId).then(v => {
dialogForm.value = v.data
})
// viewAllocateOrder(e.aoId).then(v => { // Comment out or remove undefined function
// dialogForm.value = v.data
// })
}
//
@ -887,6 +943,7 @@ const addDialogTableCell = () => {
//
const dialogSubmit = () => {
console.log(dialogtable.value)
//
const detailList = (dialogtable.value || [])
.map((item: any) => ({
@ -895,22 +952,26 @@ const dialogSubmit = () => {
materialName: item.materialName,
materialSpe: item.materialSpec, // materialSpec -> materialSpe
unitName: item.materialUnit, // materialUnit -> unitName
instockQty: item.instockQty,
instockQty: Number(item.instockQty || 0),
codeYesNo: item.codeYesNo || '0',
materialCategoryId: dialogForm.value.materialCategoryId
}))
.filter(d => d.materialId && d.materialCode && Number(d.instockQty) > 0);
.filter( d =>d.materialCode && Number(d.instockQty) > 0);
console.log(detailList)
if (!detailList.length) {
ElMessage.error('请添加至少一条入库明细且数量>0');
ElMessage.error('请添加至少一条物料且数量>0');
return;
}
console.log(detailList,dialogtable.value);
const payload: InstockOrderForm = {
...dialogForm.value,
detailListBo: detailList
};
console.log(payload)
addInstockOrder(payload).then(() => {
ElMessage.success('保存成功');
dialogVisible.value = false;
@ -923,19 +984,18 @@ const dialogSubmit = () => {
const parentTableApproveSubmit = () =>{
approveInstockOrder(parentTableApproveForm.value).then(e=>{
console.log(e)
if(e.data==0){
ElMessage({
type: 'error',
message: '请通知对应负责人审批',
})
}
if(e.data!=0){
ElMessage({
type: 'success',
message: '审批完成',
})
}
// if(e.data==0){
// ElMessage({
// type: 'error',
// message: '',
// })
// }
// if(e.data!=0){
// ElMessage({
// type: 'success',
// message: '',
// })
// }
parentTableApproveVisible.value = false
getParentTable()
})
@ -953,7 +1013,14 @@ const parentTableInfoSubmit = () =>{
//
const childrenTableUpdate = async (e) => {
childrenTableInfoForm.value = (await getInstockDetail(e.instockDetailId)).data
const detail = (await getInstockDetail(e.instockDetailId)).data
const remaining = Number(detail.instockQty) - Number(detail.printedNum || 0)
if(remaining <= 0){
ElMessage.error('无剩余数量可打印')
return
}
childrenTableInfoForm.value = detail
childrenTableInfoForm.value.splitPackageCount = 1
childrenTableInfoForm.value.printCopies = 1
childrenTableInfoVisible.value = true
@ -1030,6 +1097,7 @@ const submitMaterialForm = () => {
if (selectedMaterial.value) {
if (selectType.value === 'material') {
//
console.log(selectedMaterial.value);
if (currentRowIndex.value >= 0 && dialogtable.value[currentRowIndex.value]) {
dialogtable.value[currentRowIndex.value].materialId = selectedMaterial.value.materialId;
dialogtable.value[currentRowIndex.value].materialName = selectedMaterial.value.materialName;
@ -1109,7 +1177,6 @@ const handlePurchaseOrderSelect = (order) => {
const handleProductionOrderSelect = (order) => {
state.selectedProductionOrder = order;
dialogForm.value.orderNo = order.orderCode;
// For production, do not auto-populate materials; user adds manually
};
//
@ -1142,6 +1209,16 @@ const remainingQty = computed(() => {
return Math.max(0, instock - printed) // Math.max
})
const dialogFormRef = ref();
const dialogFormRules = ref({
warehouseId: [{ required: true, message: '请选择仓库', trigger: 'change' }],
instockType: [{ required: true, message: '请选择工单类型', trigger: 'change' }]
});
const isAddDisabled = computed(() => {
return dialogForm.value.instockType === '1';
});
</script>
<style>
.demo-form-inline .el-input {

@ -76,13 +76,12 @@
<el-table-column label="入库单号" align="center" prop="instockCode" v-if="columns[1].visible"/>
<el-table-column label="批次码" align="center" prop="batchCode" v-if="columns[2].visible"/>
<!-- <el-table-column label="物料id" align="center" prop="materialId" v-if="columns[3].visible"/> -->
<el-table-column label="仓库ID" align="center" prop="warehouseId" v-if="columns[4].visible"/>
<el-table-column label="仓库" align="center" prop="warehouseId" v-if="columns[4].visible"/>
<el-table-column label="库位编码" align="center" prop="locationCode" v-if="columns[5].visible"/>
<el-table-column label="物料编码" align="center" prop="materialCode" v-if="columns[6].visible"/>
<el-table-column label="物料名称" align="center" prop="materialName" v-if="columns[7].visible"/>
<el-table-column label="入库数量" align="center" prop="instockQty" v-if="columns[8].visible"/>
<el-table-column label="物料大类" align="center" prop="materialCategoryName" v-if="columns[9].visible">
</el-table-column>
<el-table-column label="入库人" align="center" prop="createBy" v-if="columns[10].visible"/>
<el-table-column label="创建时间" align="center" prop="createTime" width="180" v-if="columns[11].visible">
@ -96,11 +95,16 @@
</template>
</el-table-column>
<el-table-column label="erp同步数量" align="center" prop="erpSynchronousQty" v-if="columns[13].visible"/>
<el-table-column label="同步时间" align="center" prop="updateTime" width="180" v-if="columns[15].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" prop="specialType" v-if="columns[15].visible">
<template #default="scope">
<dict-tag :options="wms_special_type" :value="scope.row.specialType"/>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-tooltip content="修改" placement="top">
@ -185,7 +189,7 @@ import { InstockRecordVO, InstockRecordQuery, InstockRecordForm } from '@/api/wm
import {getBaseWarehouseList} from "@/api/wms/baseWarehouse";
import { getBaseMaterialCategoryListInWMS } from '@/api/wms/baseMaterialCategory';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { material_mategories, sys_common_status } = toRefs<any>(proxy?.useDict('material_mategories', 'sys_common_status'));
const { material_mategories, sys_common_status, wms_special_type } = toRefs<any>(proxy?.useDict('material_mategories', 'sys_common_status', 'wms_special_type'));
const instockRecordList = ref<InstockRecordVO[]>([]);
const buttonLoading = ref(false);
@ -211,7 +215,7 @@ const columns = ref<FieldOption[]>([
{ key: 1, label: `入库单号`, visible: true },
{ key: 2, label: `批次码`, visible: true },
{ key: 3, label: `物料id`, visible: true },
{ key: 4, label: `仓库ID`, visible: false },
{ key: 4, label: `仓库`, visible: false },
{ key: 5, label: `库位编码`, visible: true },
{ key: 6, label: `物料编码`, visible: true },
{ key: 7, label: `物料名称`, visible: true },
@ -221,10 +225,10 @@ const columns = ref<FieldOption[]>([
{ key: 11, label: `创建时间`, visible: true },
{ key: 12, label: `erp同步状态`, visible: true },
{ key: 13, label: `erp同步数量`, visible: true },
{ key: 14, label: `修改人`, visible: true },
{ key: 15, label: `同步时间`, visible: true },
{ key: 16, label: `创建部门`, visible: true },
{ key: 17, label: `租户号`, visible: true },
// { key: 14, label: ``, visible: true },
{ key: 14, label: `同步时间`, visible: true },
// { key: 16, label: ``, visible: true },
// { key: 17, label: ``, visible: true },
]);
const initFormData: InstockRecordForm = {
@ -239,6 +243,7 @@ const initFormData: InstockRecordForm = {
materialCategoryName: undefined,//
erpSynchronousStatus: undefined,
erpSynchronousQty: undefined,
specialType: undefined,
}
const data = reactive<PageData<InstockRecordForm, InstockRecordQuery>>({
form: {...initFormData},
@ -251,9 +256,10 @@ const data = reactive<PageData<InstockRecordForm, InstockRecordQuery>>({
materialCode: undefined,
materialName: undefined,
materialCategoryId: undefined,
materialCategoryName: undefined,//
materialCategoryName: undefined,//
erpSynchronousStatus: undefined,
erpSynchronousQty: undefined,
specialType: undefined,
params: {
}
},

@ -154,7 +154,7 @@
>{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item> -->
<el-form-item label="仓库ID" prop="storeId">
<el-form-item label="仓库" prop="storeId">
<el-select v-model="form.warehouseId" placeholder="请选择所属仓库">
<el-option
v-for="item in baseStoreList"
@ -217,7 +217,7 @@ const columns = ref<FieldOption[]>([
{ key: 7, label: `更新时间`, visible: true },
{ key: 8, label: `锁定状态`, visible: true },
{ key: 9, label: `库存状态`, visible: true },
{ key: 10, label: `仓库ID`, visible: true },
{ key: 10, label: `仓库`, visible: true },
// { key: 11, label: `${comment}`, visible: true },
// { key: 12, label: `${comment}`, visible: true },
// { key: 13, label: `${comment}`, visible: true },
@ -279,7 +279,7 @@ const data = reactive<PageData<InventoryForm, InventoryQuery>>({
{ required: true, message: "库存状态不能为空", trigger: "change" }
],
storeId: [
{ required: true, message: "仓库ID不能为空", trigger: "blur" }
{ required: true, message: "仓库不能为空", trigger: "blur" }
],
}
});

@ -147,7 +147,7 @@
>{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item> -->
<el-form-item label="仓库ID" prop="storeId">
<el-form-item label="仓库" prop="storeId">
<el-select v-model="form.warehouseId" placeholder="请选择所属仓库">
<el-option
v-for="item in baseStoreList"
@ -206,7 +206,7 @@ const columns = ref<FieldOption[]>([
{ key: 7, label: `更新时间`, visible: true },
{ key: 8, label: `锁定状态`, visible: true },
{ key: 9, label: `库存状态`, visible: true },
{ key: 10, label: `仓库ID`, visible: true },
{ key: 10, label: `仓库`, visible: true },
// { key: 11, label: `${comment}`, visible: true },
// { key: 12, label: `${comment}`, visible: true },
// { key: 13, label: `${comment}`, visible: true },
@ -268,7 +268,7 @@ const data = reactive<PageData<InventoryForm, InventoryQuery>>({
{ required: true, message: "库存状态不能为空", trigger: "change" }
],
storeId: [
{ required: true, message: "仓库ID不能为空", trigger: "blur" }
{ required: true, message: "仓库不能为空", trigger: "blur" }
],
}
});

@ -68,7 +68,8 @@
<el-table-column label="计划仓库" align="center" prop="warehouseCode" v-if="columns[4].visible"/>
<el-table-column label="盘点类型" align="center" prop="checkType" v-if="columns[5].visible">
<template #default="scope">
<dict-tag :options="wms_stocking_type" :value="scope.row.checkType"/>
<!-- <dict-tag :options="wms_stocking_type" :value="scope.row.checkType"/>-->
<dict-tag :options="wms_check_task_type" :value="scope.row.checkType"/>
</template>
</el-table-column>
<el-table-column label="盘点状态" align="center" prop="checkStatus" v-if="columns[6].visible">
@ -200,8 +201,14 @@
</el-form-item>
<el-form-item label="盘点类型" prop="checkType">
<el-select v-model="form.checkType" placeholder="请选择盘点类型">
<!-- <el-option-->
<!-- v-for="dict in wms_stocking_type"-->
<!-- :key="dict.value"-->
<!-- :label="dict.label"-->
<!-- :value="dict.value"-->
<!-- ></el-option>-->
<el-option
v-for="dict in wms_stocking_type"
v-for="dict in wms_check_task_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
@ -217,16 +224,16 @@
>{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item> -->
<el-form-item label="审核人" prop="auditBy">
<el-select v-model="form.auditBy" placeholder="请选择审核人">
<el-option
v-for="item in userList"
:key="item.userId"
:label="item.userName"
:value="item.userName"
/>
</el-select>
</el-form-item>
<!-- <el-form-item label="审核人" prop="auditBy">-->
<!-- <el-select v-model="form.auditBy" placeholder="请选择审核人">-->
<!-- <el-option-->
<!-- v-for="item in userList"-->
<!-- :key="item.userId"-->
<!-- :label="item.userName"-->
<!-- :value="item.userName"-->
<!-- />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="审核时间" prop="auditTime">
<el-date-picker clearable
v-model="form.auditTime"
@ -297,8 +304,9 @@ const {
material_mategories,
wms_stocking_type,
approve_status,
wms_stocking_status
} = toRefs<any>(proxy?.useDict('material_mategories', 'wms_stocking_type', 'approve_status', 'wms_stocking_status'));
wms_stocking_status,
wms_check_task_type
} = toRefs<any>(proxy?.useDict('material_mategories', 'wms_stocking_type', 'approve_status', 'wms_stocking_status', 'wms_check_task_type'));
const inventoryCheckList = ref<InventoryCheckVO[]>([]);
const inventoryCheckRecordList = ref<InventoryCheckRecordVO[]>([]);
const buttonLoading = ref(false);
@ -323,16 +331,16 @@ const columns = ref<FieldOption[]>([
{key: 0, label: `表主键`, visible: true},
{key: 1, label: `租户号`, visible: true},
{key: 2, label: `盘点单号`, visible: true},
{key: 3, label: `物料大类`, visible: true},
{key: 4, label: `计划仓库ID`, visible: true},
{key: 3, label: `物料大类`, visible: false},
{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: `审核状态(0待审核,1审核通过,2审核未通过)`, visible: true},
{key: 12, label: `审核意见`, visible: true},
{key: 9, label: `审核人`, visible: false},
{key: 10, label: `审核时间`, visible: false},
{key: 11, label: `审核状态`, visible: false},
{key: 12, label: `审核意见`, visible: false},
{key: 13, label: `开始时间`, visible: true},
{key: 14, label: `结束时间`, visible: true},
]);
@ -383,7 +391,7 @@ const data = reactive<PageData<InventoryCheckForm, InventoryCheckQuery>>({
{required: true, message: "物料大类不能为空", trigger: "blur"}
],
planWarehouseId: [
{required: true, message: "计划仓库ID不能为空", trigger: "blur"}
{required: true, message: "计划仓库不能为空", trigger: "blur"}
],
checkType: [
{required: true, message: "盘点类型不能为空", trigger: "change"}

@ -41,13 +41,13 @@
<el-table-column label="调拨单号" align="center" prop="allocateOrderCode"/>
<el-table-column label="物料大类" align="center" prop="materialCategoryName">
</el-table-column>
<el-table-column label="出库仓库ID" align="center" prop="planWarehouseCode"/>
<el-table-column label="出库仓库" align="center" prop="planWarehouseCode"/>
<el-table-column label="工单状态" align="center" prop="orderStatus">
<template #default="scope">
<dict-tag :options="wms_allocate_status" :value="scope.row.orderStatus"/>
</template>
</el-table-column>
<el-table-column label="入库仓库ID" align="center" prop="targetWarehouseCode"/>
<el-table-column label="入库仓库" align="center" prop="targetWarehouseCode"/>
<el-table-column label="审核人" align="center" prop="auditBy"/>
<el-table-column label="审核时间" align="center" prop="auditTime" width="180">
<template #default="scope">
@ -186,6 +186,9 @@
/>
</el-select>
</el-form-item>
<el-form-item label="调拨原因" prop="allocateReason">
<el-input v-model="dialogForm.allocateReason" placeholder="请输入调拨原因" clearable />
</el-form-item>
</el-form>
</el-card>
<el-card style="margin-top: 8px" shadow="never">
@ -755,8 +758,8 @@ const submitMaterialForm = () => {
dialogtable.value[currentRowIndex.value].materialId = Number(selectedMaterial.value.materialId);
dialogtable.value[currentRowIndex.value].materialName = selectedMaterial.value.materialName;
dialogtable.value[currentRowIndex.value].materialCode = selectedMaterial.value.materialCode;
dialogtable.value[currentRowIndex.value].materialUnit = selectedMaterial.value.materialUnit;
dialogtable.value[currentRowIndex.value].materialSpec = selectedMaterial.value.materialSpec;
dialogtable.value[currentRowIndex.value].unitName = selectedMaterial.value.materialUnit;
dialogtable.value[currentRowIndex.value].materialSpe = selectedMaterial.value.materialSpec;
//
}
}

@ -299,7 +299,7 @@ const columns = ref<FieldOption[]>([
{ key: 1, label: `租户号`, visible: true },
{ key: 2, label: `物料ID`, visible: true },
{ key: 3, label: `物料大类`, visible: true },
{ key: 4, label: `仓库ID`, visible: true },
{ key: 4, label: `仓库`, visible: true },
{ key: 5, label: `计划库位`, visible: true },
{ key: 6, label: `工单状态(0执行中1完成2关闭)`, visible: true },
{ key: 7, label: `目标库位`, visible: true },
@ -364,7 +364,7 @@ const data = reactive<PageData<MoveOrderForm, MoveOrderQuery>>({
{ required: true, message: "物料大类不能为空", trigger: "blur" }
],
warehouseId: [
{ required: true, message: "仓库ID不能为空", trigger: "blur" }
{ required: true, message: "仓库不能为空", trigger: "blur" }
],
planLocationCode: [
{ required: true, message: "计划库位不能为空", trigger: "blur" }

@ -7,7 +7,7 @@
<el-form-item label="出库单 主键" prop="outstockId">
<el-input v-model="queryParams.outstockId" placeholder="请输入出库单 主键" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="仓库ID" prop="warehouseId">
<el-form-item label="仓库" prop="warehouseId">
<el-select v-model="form.warehouseId" placeholder="请选择所属仓库">
<el-option
v-for="item in baseStoreList"
@ -86,7 +86,7 @@
<el-table v-loading="loading" :data="outstockOrderList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<!-- <el-table-column label="出库单 主键" align="center" prop="outstockId" v-if="columns[0].visible"/> -->
<el-table-column label="仓库ID" align="center" prop="warehouseCode" v-if="columns[1].visible"/>
<el-table-column label="仓库" align="center" prop="warehouseCode" v-if="columns[1].visible"/>
<el-table-column label="出库单号" align="center" prop="outstockCode" v-if="columns[2].visible"/>
<el-table-column label="出库类型" align="center" prop="outstockType" v-if="columns[3].visible">
<template #default="scope">
@ -136,7 +136,7 @@
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
<el-form ref="outstockOrderFormRef" :model="form" :rules="rules" label-width="80px">
<el-form-item label="仓库ID" prop="warehouseId">
<el-form-item label="仓库" prop="warehouseId">
<el-select v-model="form.warehouseId" placeholder="请选择所属仓库">
<el-option
v-for="item in baseStoreList"
@ -248,7 +248,7 @@ const dialog = reactive<DialogOption>({
//
const columns = ref<FieldOption[]>([
{ key: 0, label: `出库单 主键`, visible: true },
{ key: 1, label: `仓库ID`, visible: true },
{ key: 1, label: `仓库`, visible: true },
{ key: 2, label: `出库单号`, visible: true },
{ key: 3, label: `出库类型`, visible: true },
{ key: 4, label: `租户号`, visible: true },
@ -304,7 +304,7 @@ const data = reactive<PageData<OutstockOrderForm, OutstockOrderQuery>>({
{ required: true, message: "出库单 主键不能为空", trigger: "blur" }
],
warehouseId: [
{ required: true, message: "仓库ID不能为空", trigger: "blur" }
{ required: true, message: "仓库不能为空", trigger: "blur" }
],
outstockCode: [
{ required: true, message: "出库单号不能为空", trigger: "blur" }

@ -0,0 +1,848 @@
<template>
<div class="p-2">
<el-card shadow="never">
<el-form label-width="120px" label-position="right" :inline="true" :model="queryForm" class="demo-form-inline">
<el-form-item label="仓库" prop="warehouseId">
<el-select v-model="queryForm.warehouseId" placeholder="请选择所属仓库">
<el-option
v-for="item in baseStoreList"
:key="item.warehouseId"
:label="item.warehouseName"
:value="item.warehouseId"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="出库单号" prop="outstockCode">
<el-input v-model="queryForm.outstockCode" placeholder="请输入出库单号" clearable/>
</el-form-item>
</el-form>
</el-card>
<el-card style="margin-top: 8px" shadow="never">
<template #header>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="parentTableAdd"></el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="Edit" :disabled="ids.length !== 1" @click="parentTableUpdate()">
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="ids.length < 1" @click="parentTableDelete()">
</el-button>
</el-col>
<!-- <el-col :span="1.5">-->
<!-- <el-button type="warning" plain icon="Download" @click="handleExport"></el-button>-->
<!-- </el-col>-->
<right-toolbar v-model:showSearch="showSearch" :columns="columns" :search="true"
@queryTable="getParentTable"></right-toolbar>
</el-row>
</template>
<el-table v-loading="parentTableLoad" :data="parentTableData" style="width: 100%" highlight-current-row
@current-change="parentTableCellClick"
@selection-change="selectionChange" ref="parentTableRef">
<el-table-column type="selection" width="55"/>
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="仓库" align="center" prop="warehouseCode"/>
<el-table-column label="出库单号" align="center" prop="outstockCode"/>
<el-table-column label="出库类型" align="center" prop="outstockType">
<template #default="scope">
<dict-tag :options="wms_out_type" :value="scope.row.outstockType"/>
</template>
</el-table-column>
<!-- <el-table-column label="物料大类" align="center" prop="materialCategoryId">
<template #default="scope">
<dict-tag :options="material_mategories" :value="scope.row.materialCategoryId"/>
</template>
</el-table-column>-->
<el-table-column label="工单类型" align="center" prop="orderType">
<template #default="scope">
<dict-tag :options="wms_instock_type" :value="scope.row.orderType"/>
</template>
</el-table-column>
<el-table-column label="订单编号" align="center" prop="orderNo"/>
<el-table-column label="审核人" align="center" prop="auditBy"/>
<el-table-column label="审核时间" align="center" prop="auditTime" width="180">
<template #default="scope">
<span>{{ parseTime(scope.row.auditTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
</template>
</el-table-column>
<el-table-column label="审核状态" align="center" prop="auditStatus">
<template #default="scope">
<dict-tag :options="approve_status" :value="scope.row.auditStatus"/>
</template>
</el-table-column>
<el-table-column label="审核意见" align="center" prop="auditComments"/>
<!-- <el-table-column label="入库方式" align="center" prop="inMethod">
<template #default="scope">
<dict-tag :options="wms_allocate_way" :value="scope.row.inMethod"/>
</template>
</el-table-column> -->
<el-table-column label="操作" fixed="right" width="200">
<template #default="scope">
<!-- <el-button size="small" @click.stop="viewDetails(scope.row)">-->
<!-- 查看-->
<!-- </el-button>-->
<el-button size="small" @click.stop="parentTableUpdate(scope.row)">
修改
</el-button>
<el-button
size="small"
type="danger"
@click.stop="parentTableDelete(scope.row)"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="parentTableTotal > 0" :total="parentTableTotal" v-model:page="queryForm.pageNum"
v-model:limit="queryForm.pageSize" @pagination="getParentTable"/>
</el-card>
<el-card style="margin-top: 8px" shadow="never">
<el-table :data="childrenTableData" style="width: 100%" v-loading="childrenTableLoad">
<el-table-column label="出库单号" align="center" prop="outstockCode"/>
<!-- <el-table-column label="出库单 主键" align="center" prop="outstockId" v-if="columns[2].visible"/> -->
<el-table-column label="物料" align="center" prop="materialCode"/>
<el-table-column label="出库数量" align="center" prop="outstockQty"/>
<el-table-column label="物料大类" align="center" prop="materialCategoryName">
</el-table-column>
<el-table-column label="操作" fixed="right" width="200">
<template #default="scope">
<!-- <el-button size="small" @click="childrenTableUpdate( scope.row)">
打印
</el-button> -->
<el-button
size="small"
type="danger"
@click="childrenTableUDelete(scope.row)"
>
删除
</el-button>
<!-- <el-tooltip content="打印" placement="top">
<el-button type="primary" @click="handlePrint(scope.row)"></el-button>
</el-tooltip> -->
</template>
</el-table-column>
</el-table>
</el-card>
<el-dialog v-model="dialogVisible" :title="dialogTitle" width="80%">
<el-card shadow="never">
<el-form :model="dialogForm" :inline="true" label-width="120px" :disabled="isView">
<el-form-item label="仓库ID" prop="warehouseId">
<el-select v-model="dialogForm.warehouseId" placeholder="请选择所属仓库">
<el-option
v-for="item in baseStoreList"
:key="item.warehouseId"
:label="item.warehouseName"
:value="item.warehouseId"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="出库类型" prop="outstockType">
<el-select v-model="dialogForm.outstockType" placeholder="请选择出库类型">
<el-option
v-for="dict in wms_out_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="物料大类" prop="materialCategoryId">
<el-select v-model="dialogForm.materialCategoryId" placeholder="请选择物料大类" @change="setMaterialList">
<el-option v-for="item in mategoryOptions"
:key="item.materialCategoryId"
:label="item.materialCategoryName"
:value="item.materialCategoryId"
/>
</el-select>
</el-form-item>
<el-form-item label="工单类型" prop="orderType">
<el-select v-model="dialogForm.orderType" placeholder="请选择工单类型(字典1销售订单,2生产订单,3手工,4系统生成)">
<el-option
v-for="dict in wms_instock_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="审核人" prop="auditBy">
<el-select v-model="dialogForm.auditBy" placeholder="请选择审核人">
<el-option
v-for="item in userList"
:key="item.userId"
:label="item.userName"
:value="item.userName"
/>
</el-select>
</el-form-item>
</el-form>
</el-card>
<el-card style="margin-top: 8px" shadow="never">
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="addDialogTableCell"></el-button>
</el-col>
</el-row>
<el-table :data="dialogtable" style="width: 100%">
<el-table-column label="物料大类" prop="materialCategoryId">
<el-select v-model="dialogForm.materialCategoryId" placeholder="" :disabled="true">
<el-option v-for="item in mategoryOptions"
:key="item.materialCategoryId"
:label="item.materialCategoryName"
:value="item.materialCategoryId"
/>
</el-select>
</el-table-column>
<el-table-column label="物料编码" prop="materialCode">
<!-- <template #default="scope">
<el-select
v-model="scope.row.materialId"
placeholder="选择物料"
style="width: 240px"
>
<el-option
v-for="i in materialList"
:label="i.materialCode+'('+i.materialName+')'"
:value="i.materialId"
:key="i.materialId"
/>
</el-select>
</template>-->
<template #default="scope">
<el-input
v-model="scope.row.materialCode"
placeholder="请点击检索物料"
@click="handleMaterialAdd('material', scope.$index)" >
<template #append>
<el-icon class="el-input__icon"><search/></el-icon>
</template>
</el-input>
</template>
</el-table-column>
<el-table-column label="物料名称" prop="materialName">
<template #default="scope">
<el-select
v-model="scope.row.materialName"
placeholder="选择物料"
style="width: 240px"
:disabled="true"
>
<el-option
v-for="i in materialList"
:label="i.materialName"
:value="i.materialName"
:key="i.materialId"
/>
</el-select>
</template>
</el-table-column>
<el-table-column label="物料单位" prop="materialUnit">
<template #default="scope">
<el-select
v-model="scope.row.materialUnit"
placeholder="选择物料"
style="width: 240px"
:disabled="true"
>
<el-option
v-for="i in materialList"
:label="i.materialUnit"
:value="i.materialUnit"
:key="i.materialId"
/>
</el-select>
</template>
</el-table-column>
<el-table-column label="物料规格" prop="materialSpec">
<template #default="scope">
<el-select
v-model="scope.row.materialSpec"
placeholder="选择物料"
style="width: 240px"
:disabled="true"
>
<el-option
v-for="i in materialList"
:label="i.materialSpec"
:value="i.materialSpec"
:key="i.materialId"
/>
</el-select>
</template>
</el-table-column>
<el-table-column label="出库数量" prop="outstockQty">
<template #default="scope">
<el-input v-model="scope.row.outstockQty" placeholder="请输入出库数量" style="width: 200px;"/>
</template>
</el-table-column>
<el-table-column label="操作" fixed="right" width="200">
<template #default="scope">
<el-button
size="small"
type="danger"
@click="tableUDelete(scope.row)"
>
删除
</el-button>
</template>
</el-table-column>
<!-- <el-table-column label="已包数量" prop="printedNum">
<template #default="scope">
<el-input v-model="scope.row.printedNum" placeholder="请输入已包数量" />
</template>
</el-table-column> -->
<!-- <el-table-column label="分包数量" prop="printNum">
<template #default="scope">
<el-input v-model="scope.row.printNum" placeholder="请输入分包数量" />
</template>
</el-table-column>
<el-table-column label="打印数量" prop="barcodeNum">
<template #default="scope">
<el-input v-model="scope.row.barcodeNum" placeholder="请输入打印数量" />
</template> -->
<!-- </el-table-column> -->
<!-- <el-table-column label="erp同步状态" prop="erpSynchronousStatus">-->
<!-- <template #default="scope">-->
<!-- <el-select-->
<!-- v-model="scope.row.erpSynchronousStatus"-->
<!-- placeholder="选择erp同步状态"-->
<!-- >-->
<!-- <el-option-->
<!-- label="1"-->
<!-- value="1"-->
<!-- />-->
<!-- <el-option-->
<!-- label="2"-->
<!-- value="2"-->
<!-- />-->
<!-- </el-select>-->
<!-- </template>-->
<!-- </el-table-column>-->
</el-table>
</el-card>
<template #footer>
<div class="dialog-footer">
<el-button @click="dialogVisible = false">关闭</el-button>
<el-button type="primary" @click="dialogSubmit">
确定
</el-button>
</div>
</template>
</el-dialog>
<el-dialog v-model="parentTableInfoVisible" title="修改父表格" width="40%">
<el-form :model="parentTableInfoForm" label-width="120px">
<el-form-item label="仓库ID" prop="warehouseId">
<el-select v-model="parentTableInfoForm.warehouseId" placeholder="请选择所属仓库" :disabled="true">
<el-option
v-for="item in baseStoreList"
:key="item.warehouseId"
:label="item.warehouseName"
:value="item.warehouseId"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="出库类型" prop="outstockType">
<el-select v-model="parentTableInfoForm.outstockType" placeholder="请选择出库类型">
<el-option
v-for="dict in wms_out_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="物料大类" prop="materialCategoryId">
<el-select v-model="parentTableInfoForm.materialCategoryId" placeholder="请选择物料大类">
<el-option v-for="item in mategoryOptions"
:key="item.materialCategoryId"
:label="item.materialCategoryName"
:value="item.materialCategoryId"
/>
</el-select>
</el-form-item>
<el-form-item label="工单类型" prop="orderType">
<el-select v-model="parentTableInfoForm.orderType" placeholder="请选择工单类型(字典1销售订单,2生产订单,3手工,4系统生成)" :disabled="true">
<el-option
v-for="dict in wms_instock_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="审核人" prop="auditBy">
<el-select v-model="parentTableInfoForm.auditBy" placeholder="请选择审核人" :disabled="true">
<el-option
v-for="item in userList"
:key="item.userId"
:label="item.userName"
:value="item.userName"
/>
</el-select>
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button @click="parentTableInfoVisible = false">关闭</el-button>
<el-button type="primary" @click="parentTableInfoSubmit">
确定
</el-button>
</div>
</template>
</el-dialog>
<el-dialog v-model="childrenTableInfoVisible" title="条码生成" width="40%">
<el-form :model="childrenTableInfoForm" label-width="120px">
<el-form-item label="物料" prop="materialId">
<el-select v-model="childrenTableInfoForm.materialId" placeholder="请选择物料">
<el-option
v-for="item in materialList"
:key="item.materialId"
:label="item.materialCode"
:value="item.materialId"
/>
</el-select>
</el-form-item>
<el-form-item label="入库数量" prop="instockQty">
<el-input v-model="childrenTableInfoForm.instockQty" placeholder="请输入入库数量" />
</el-form-item>
<el-form-item label="有无条码" prop="codeYesNo">
<el-radio-group v-model="childrenTableInfoForm.codeYesNo">
<el-radio
v-for="dict in wms_barcode_if"
:key="dict.value"
:value="dict.value"
>{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="已包数量" prop="printedNum">
<el-input v-model="childrenTableInfoForm.printedNum" placeholder="" />
</el-form-item>
<el-form-item label="分包数量" prop="printNum">
<el-input v-model="childrenTableInfoForm.printNum" placeholder="请输入分包数量" />
</el-form-item>
<el-form-item label="打印数量" prop="barcodeNum">
<el-input v-model="childrenTableInfoForm.barcodeNum" placeholder="请输入打印条码数量" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button @click="childrenTableInfoVisible = false">关闭</el-button>
<el-button type="primary" @click="submitForm">
确定
</el-button>
</div>
</template>
</el-dialog>
<!-- 添加物料信息对话框 -->
<el-dialog title="选择物料信息" v-model="materialOpen" width='1200px' append-to-body>
<MaterialSelectInWMS
@selection="handleSelection"
ref="materialSelectRef"
v-if="materialOpen"
:materialCategoryId="dialogForm.materialCategoryId"
></MaterialSelectInWMS>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitMaterialForm"> </el-button>
<el-button @click="materialOpen = false"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script setup name="Linkage" lang="ts">
import { listOutstockOrder, getOutstockOrder, delOutstockOrder, addOutstockOrder, updateOutstockOrder } from '@/api/wms/outstockOrder';
import { OutstockOrderVO, OutstockOrderQuery, OutstockOrderForm } from '@/api/wms/outstockOrder/types';
import {reactive} from 'vue'
import {ElMessage, ElMessageBox} from 'element-plus'
import {getBaseWarehouseList} from "@/api/wms/baseWarehouse";
import {UserVO} from "@/api/system/user/types";
import {listUser} from "@/api/system/user";
import { listOutstockDetail, getOutstockDetail, delOutstockDetail, addOutstockDetail, updateOutstockDetail } from '@/api/wms/outstockDetail';
import { OutstockDetailVO, OutstockDetailQuery, OutstockDetailForm } from '@/api/wms/outstockDetail/types';
import { getMaterialListVo, getMaterailCount } from '@/api/wms/instockDetail';
import {
getMaterialList
} from '@/api/wms/linkage'
import MaterialSelectInWMS from "@/views/wms/baseMaterialInfo/addMaterialInWMS.vue";
import { getBaseMaterialCategoryListInWMS } from '@/api/wms/baseMaterialCategory';
const {proxy} = getCurrentInstance() as ComponentInternalInstance;
const {
wms_out_type,
wms_barcode_if,
wms_instock_type,
approve_status,
erp_synchronous_status,
material_mategories,
mes_material_categories,
wms_allocate_status,
wms_allocate_create,
wms_allocate_way
} = toRefs<any>(proxy?.useDict('wms_out_type', 'wms_barcode_if', 'wms_instock_type', 'approve_status', 'erp_synchronous_status', 'material_mategories', 'mes_material_categories', 'wms_allocate_status', 'wms_allocate_create', 'wms_allocate_way'));
interface User {
date: string
name: string
address: string
}
const parentTableTotal = ref(0)
const dialogVisible = ref(false)
const parentTableInfoVisible = ref(false)
const childrenTableInfoVisible = ref(false)
// const childrenTableInfoSubmit = ref(false)
const updateDialog = ref(false)
const dialogTitle = ref('添加')
const dialogForm = ref({})
const parentTableInfoForm = ref({})
const childrenTableInfoForm = ref({})
const queryForm = ref({
outstockCode: '',
materialCategoryId: '',
materialCategoryName: '',
warehouseId: '',
pageNum: 1,
pageSize: 10
})
const parentTableRef = ref()
const parentTableData = ref([])
const ids = ref([])
const childrenTableData = ref([])
const dialogtable = ref([])
const baseStoreList = ref([]);
const userList = ref([]);
const materialList = ref([]);
const parentTableLoad = ref(false)
const childrenTableLoad = ref(false)
const isView = ref(false)
const partntTableSelectCell = ref({})
let supplierList = ref([]);
/** 查询出库单大类下物料数量接口 */
const getMaterialCount = async () => {
const materialId = form.value.materialId
console.log(materialId)
const res = await getMaterailCount({'materialId':materialId});
console.log(res.data);
form.value.stockQty = res.data;
console.log(form.stockQty)
}
//
getBaseWarehouseList().then(e => {
baseStoreList.value = e.data
})
listUser().then(e => {
userList.value = e.rows;
})
/** 提交按钮 */
const submitForm = () => {
updateInstockDetail(childrenTableInfoForm.value).finally(() => childrenTableInfoVisible.value = false);
}
let mategoryOptions = ref([]);
const getMaterialCategorySelect = async () => {
const res = await getBaseMaterialCategoryListInWMS(null);
mategoryOptions.value = res.data;
};
//
const getParentTable = async () => {
await getMaterialCategorySelect();
parentTableLoad.value = true
await listOutstockOrder(queryForm.value).then(async (e) => {
parentTableLoad.value = false
parentTableData.value = e.rows
parentTableTotal.value = e.total
if (e.rows.length > 0) {
parentTableRef.value.setCurrentRow(e.rows[0])
await getChildrenTable({outstockId: e.rows[0].outstockId})
} else {
childrenTableData.value = []
}
})
}
//
const getChildrenTable = async (form) => {
childrenTableLoad.value = true
console.log(form)
await listOutstockDetail(form).then(e => {
childrenTableLoad.value = false
childrenTableData.value = e.rows
// parentTableTotal.value = e.total
})
}
getParentTable()
/** 打印按钮操作 */
const handlePrint = async (row?: InstockDetailVO) => {
reset();
const _instockDetailId = row?.instockDetailId || ids.value[0]
const res = await getInstockDetail(_instockDetailId);
Object.assign(childrenTableInfoForm.value, res.data);
}
//
const query = async () => {
ids.value = []
parentTableRef.value?.clearSelection()
await getParentTable()
}
const reset = () => {
queryForm.value = {
instockId: ''
}
}
//
const parentTableCellClick = async (e) => {
partntTableSelectCell.value = e
await getChildrenTable({outstockId: e.outstockId})
}
//
const selectionChange = (e) => {
ids.value = e.map(v => v.outstockId)
}
//
const viewDetails = (e) => {
isView.value = true
dialogVisible.value = true
viewAllocateOrder(e.aoId).then(v => {
dialogForm.value = v.data
})
}
//
const parentTableAdd = () => {
dialogVisible.value = true
dialogForm.value = {}
dialogtable.value = []
}
//
const parentTableUpdate = async (e) => {
let id = ref(null)
if (e) {
id.value = e.outstockId
} else {
id.value = ids.value?.[0]
}
if (!id.value) return
parentTableInfoForm.value = (await getOutstockOrder(id.value)).data
parentTableInfoVisible.value = true
updateDialog.value = true
}
//
const parentTableDelete = async (e) => {
const delList = ref([])
if (e) {
delList.value = [e.outstockId]
} else {
delList.value = ids.value
}
ElMessageBox.confirm(
'确定要删除这些数据吗?',
'Warning',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}
)
.then(async () => {
await delOutstockOrder(delList.value.toString()).then(e => {
ElMessage({
type: 'success',
message: '删除完成',
})
getParentTable()
})
})
.catch(() => {
ElMessage({
type: 'info',
message: '取消',
})
})
}
//
const setMaterialList = (materialCategoryId) => {
getMaterialList({materialCategoryId}).then(e => {
materialList.value = e.data
})
}
//
const addDialogTableCell = () => {
dialogtable.value.push({})
}
//
const dialogSubmit = () => {
addOutstockOrder(dialogForm.value).then(e => {
addOutstockDetail(dialogtable.value.map(item => {
return {...item, outstockCode: e.data.outstockCode,outstockId: e.data.outstockId, materialCategoryId: e.data.materialCategoryId}
}
)
).then(v => {
dialogVisible.value = false
getParentTable()
})
})
}
const parentTableInfoSubmit = () =>{
updateOutstockOrder(parentTableInfoForm.value).then(e=>{
ElMessage({
type: 'success',
message: '修改完成',
})
parentTableInfoVisible.value = false
getParentTable()
})
}
//
const childrenTableUpdate = async (e) => {
childrenTableInfoForm.value = (await getInstockDetail(e.instockDetailId)).data
childrenTableInfoVisible.value = true
}
//
const tableUDelete = (row) => {
ElMessageBox.confirm(
'确定要删除这些数据吗?',
'Warning',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}
)
.then(async () => {
const index = dialogtable.value.indexOf(row);
console.log(index)
dialogtable.value.splice(index,1)
})
}
//
const childrenTableUDelete = (e) => {
ElMessageBox.confirm(
'确定要删除这些数据吗?',
'Warning',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}
)
.then(async () => {
await delOutstockDetail(e.outstockDetailId).then(async (e) => {
ElMessage({
type: 'success',
message: '删除完成',
})
await getChildrenTable({outstockId: partntTableSelectCell.value.outstockId})
})
})
.catch(() => {
ElMessage({
type: 'info',
message: '取消',
})
})
}
/* 以下为添加物料信息对话框相关方法 */
let materialSelectRef = ref();//
const materialOpen = ref(false);//
const selectType = ref(''); //
const selectedMaterial = ref(null); //
const currentRowIndex = ref(-1); //
/** 处理从MaterialSelect组件接收到的选择 */
const handleSelection = (row) => {
selectedMaterial.value = row;
};
/** 提交物料BOM信息按钮 */
const submitMaterialForm = () => {
if (!selectedMaterial.value) {
//
selectedMaterial.value = materialSelectRef.value.tableRef.store.states.currentRow.value;
}
if (selectedMaterial.value) {
if (selectType.value === 'material') {
//
if (currentRowIndex.value >= 0 && dialogtable.value[currentRowIndex.value]) {
dialogtable.value[currentRowIndex.value].materialId = selectedMaterial.value.materialId;
dialogtable.value[currentRowIndex.value].materialName = selectedMaterial.value.materialName;
dialogtable.value[currentRowIndex.value].materialCode = selectedMaterial.value.materialCode;
dialogtable.value[currentRowIndex.value].materialUnit = selectedMaterial.value.materialUnit;
dialogtable.value[currentRowIndex.value].materialSpec = selectedMaterial.value.materialSpec;
//
}
}
}
//
selectedMaterial.value = null;
materialOpen.value = false;
};
/** 新增按钮操作 */
const handleMaterialAdd = (type, index) => {
selectType.value = type;
currentRowIndex.value = index; //
materialOpen.value = true;
}
</script>
<style>
.demo-form-inline .el-input {
--el-input-width: 220px;
}
.demo-form-inline .el-select {
--el-select-width: 220px;
}
</style>

@ -32,6 +32,7 @@
<el-button type="danger" plain icon="Delete" :disabled="ids.length < 1" @click="parentTableDelete()">
</el-button>
</el-col>
<!-- <el-col :span="1.5">-->
<!-- <el-button type="warning" plain icon="Download" @click="handleExport"></el-button>-->
<!-- </el-col>-->
@ -79,11 +80,17 @@
<dict-tag :options="wms_allocate_way" :value="scope.row.inMethod"/>
</template>
</el-table-column> -->
<el-table-column label="操作" fixed="right" width="200">
<el-table-column label="操作" fixed="right" width="260">
<template #default="scope">
<!-- <el-button size="small" @click.stop="viewDetails(scope.row)">-->
<!-- 查看-->
<!-- </el-button>-->
<el-button
size="small"
type="warning"
v-if="scope.row.needApprove &amp;&amp; (scope.row.auditStatus === null || scope.row.auditStatus === undefined || scope.row.auditStatus === '')"
@click.stop="openApprove(scope.row)"
>审批</el-button>
<el-button size="small" @click.stop="parentTableUpdate(scope.row)">
修改
</el-button>
@ -108,7 +115,8 @@
<el-table-column label="物料" align="center" prop="materialCode"/>
<el-table-column label="出库数量" align="center" prop="outstockQty"/>
<el-table-column label="物料大类" align="center" prop="materialCategoryName">
</el-table-column>
<el-table-column label="是否高价值" align="center" prop="isHighValue">
</el-table-column>
<el-table-column label="操作" fixed="right" width="200">
<template #default="scope">
@ -133,7 +141,7 @@
<el-dialog v-model="dialogVisible" :title="dialogTitle" width="80%">
<el-card shadow="never">
<el-form :model="dialogForm" :inline="true" label-width="120px" :disabled="isView">
<el-form-item label="仓库ID" prop="warehouseId">
<el-form-item label="仓库" prop="warehouseId">
<el-select v-model="dialogForm.warehouseId" placeholder="请选择所属仓库">
<el-option
v-for="item in baseStoreList"
@ -348,7 +356,7 @@
<el-dialog v-model="parentTableInfoVisible" title="修改父表格" width="40%">
<el-form :model="parentTableInfoForm" label-width="120px">
<el-form-item label="仓库ID" prop="warehouseId">
<el-form-item label="仓库" prop="warehouseId">
<el-select v-model="parentTableInfoForm.warehouseId" placeholder="请选择所属仓库" :disabled="true">
<el-option
v-for="item in baseStoreList"
@ -466,18 +474,39 @@
</div>
</el-dialog>
<!-- 审批对话框 -->
<el-dialog v-model="approveDialogVisible" title="出库单审批" width="40%">
<el-form :model="approveForm" label-width="120px">
<el-form-item label="审核状态" prop="auditStatus">
<el-select v-model="approveForm.auditStatus" placeholder="请选择审核状态">
<el-option v-for="d in approve_status" :key="d.value" :label="d.label" :value="d.value" />
</el-select>
</el-form-item>
<el-form-item label="审核意见" prop="auditComments">
<el-input v-model="approveForm.auditComments" type="textarea" placeholder="请输入审核意见" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button @click="approveDialogVisible = false">取消</el-button>
<el-button type="primary" @click="submitApprove"></el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup name="Linkage" lang="ts">
import { listOutstockOrder, getOutstockOrder, delOutstockOrder, addOutstockOrder, updateOutstockOrder } from '@/api/wms/outstockOrder';
import { approveOutstockOrder } from '@/api/wms/outstockOrder';
import { OutstockOrderVO, OutstockOrderQuery, OutstockOrderForm } from '@/api/wms/outstockOrder/types';
import {reactive} from 'vue'
import {ElMessage, ElMessageBox} from 'element-plus'
import {getBaseWarehouseList} from "@/api/wms/baseWarehouse";
import {UserVO} from "@/api/system/user/types";
import {listUser} from "@/api/system/user";
import { listOutstockDetail, getOutstockDetail, delOutstockDetail, addOutstockDetail, updateOutstockDetail } from '@/api/wms/outstockDetail';
import { getUserList, listUser } from '@/api/system/user';
import { listOutstockDetail, getOutstockDetail, delOutstockDetail, addOutstockDetail, updateOutstockDetail, getOutstockDetailList } from '@/api/wms/outstockDetail';
import { OutstockDetailVO, OutstockDetailQuery, OutstockDetailForm } from '@/api/wms/outstockDetail/types';
import { getMaterialListVo, getMaterailCount } from '@/api/wms/instockDetail';
import {
@ -515,24 +544,44 @@ const parentTableTotal = ref(0)
const dialogVisible = ref(false)
const parentTableInfoVisible = ref(false)
const childrenTableInfoVisible = ref(false)
//
const approveDialogVisible = ref(false)
const approveForm = ref<Partial<OutstockOrderForm>>({ outstockId: undefined, auditStatus: '', auditComments: '' })
// const childrenTableInfoSubmit = ref(false)
const updateDialog = ref(false)
const dialogTitle = ref('添加')
const dialogForm = ref({})
const parentTableInfoForm = ref({})
const childrenTableInfoForm = ref({})
// Initialize dialogForm with properties
const dialogForm = ref<OutstockOrderForm>({});
// Similarly for parentTableInfoForm
const parentTableInfoForm = ref<OutstockOrderForm>({});
// For childrenTableInfoForm
const childrenTableInfoForm = ref({
materialId: undefined,
instockQty: undefined,
codeYesNo: undefined,
printedNum: undefined,
printNum: undefined,
barcodeNum: undefined,
isHighValue : undefined,
})
const queryForm = ref({
outstockCode: '',
materialCategoryId: '',
materialCategoryName: '',
warehouseId: '',
outstockType: '',
pageNum: 1,
pageSize: 10
})
const parentTableRef = ref()
const parentTableData = ref([])
const ids = ref([])
//
const showSearch = ref(true)
const columns = ref([])
const childrenTableData = ref([])
const dialogtable = ref([])
const baseStoreList = ref([]);
@ -544,14 +593,21 @@ const isView = ref(false)
const partntTableSelectCell = ref({})
let supplierList = ref([]);
/** 查询出库单大类下物料数量接口 */
const getMaterialCount = async () => {
const materialId = form.value.materialId
console.log(materialId)
const res = await getMaterailCount({'materialId':materialId});
console.log(res.data);
form.value.stockQty = res.data;
console.log(form.stockQty)
//
const route = useRoute();//
//
let routeOutstockTypeValue = '';
if (route.query.outstockType) {
//
const outstockTypeValue = Array.isArray(route.query.outstockType)
? route.query.outstockType[0]
: route.query.outstockType;
queryForm.value.outstockType = outstockTypeValue;
routeOutstockTypeValue = outstockTypeValue; //
}
//
getBaseWarehouseList().then(e => {
baseStoreList.value = e.data
@ -561,7 +617,7 @@ listUser().then(e => {
})
/** 提交按钮 */
const submitForm = () => {
updateInstockDetail(childrenTableInfoForm.value).finally(() => childrenTableInfoVisible.value = false);
updateOutstockDetail(childrenTableInfoForm.value).finally(() => childrenTableInfoVisible.value = false);
}
let mategoryOptions = ref([]);
@ -580,6 +636,11 @@ const getParentTable = async () => {
parentTableLoad.value = false
parentTableData.value = e.rows
parentTableTotal.value = e.total
const promises = parentTableData.value.map(async (row) => {
const res = await getOutstockDetailList({ outstockId: row.outstockId });
row.needApprove = res.data.some(d => d.isHighValue === '1');
});
await Promise.all(promises);
if (e.rows.length > 0) {
parentTableRef.value.setCurrentRow(e.rows[0])
await getChildrenTable({outstockId: e.rows[0].outstockId})
@ -593,19 +654,19 @@ const getParentTable = async () => {
const getChildrenTable = async (form) => {
childrenTableLoad.value = true
console.log(form)
await listOutstockDetail(form).then(e => {
await getOutstockDetailList({...form}).then(e => {
childrenTableLoad.value = false
childrenTableData.value = e.rows
childrenTableData.value = e.data
// parentTableTotal.value = e.total
})
}
getParentTable()
/** 打印按钮操作 */
const handlePrint = async (row?: InstockDetailVO) => {
const handlePrint = async (row?: OutstockDetailVO) => {
reset();
const _instockDetailId = row?.instockDetailId || ids.value[0]
const res = await getInstockDetail(_instockDetailId);
const _outstockDetailId = row?.outstockDetailId || ids.value[0]
const res = await getOutstockDetail(_outstockDetailId);
Object.assign(childrenTableInfoForm.value, res.data);
@ -618,9 +679,13 @@ const query = async () => {
await getParentTable()
}
const reset = () => {
queryForm.value = {
instockId: ''
}
queryForm.value.outstockCode = '';
queryForm.value.materialCategoryId = '';
queryForm.value.materialCategoryName = '';
queryForm.value.warehouseId = '';
queryForm.value.outstockType = routeOutstockTypeValue;
queryForm.value.pageNum = 1;
queryForm.value.pageSize = 10;
}
//
@ -633,14 +698,7 @@ const parentTableCellClick = async (e) => {
const selectionChange = (e) => {
ids.value = e.map(v => v.outstockId)
}
//
const viewDetails = (e) => {
isView.value = true
dialogVisible.value = true
viewAllocateOrder(e.aoId).then(v => {
dialogForm.value = v.data
})
}
//
const parentTableAdd = () => {
@ -712,10 +770,14 @@ const addDialogTableCell = () => {
const dialogSubmit = () => {
addOutstockOrder(dialogForm.value).then(e => {
addOutstockDetail(dialogtable.value.map(item => {
return {...item, outstockCode: e.data.outstockCode,outstockId: e.data.outstockId, materialCategoryId: e.data.materialCategoryId}
}
)
// addOutstockDetail(dialogtable.value.map(item => {
// return {...item, outstockCode: e.data.outstockCode,outstockId: e.data.outstockId, materialCategoryId: e.data.materialCategoryId}
// }
// )
Promise.all(dialogtable.value.map(async (item) => {
const detail = {...item, outstockCode: e.data.outstockCode, outstockId: e.data.outstockId, materialCategoryId: e.data.materialCategoryId};
return addOutstockDetail(detail);
})
).then(v => {
dialogVisible.value = false
getParentTable()
@ -737,7 +799,8 @@ const parentTableInfoSubmit = () =>{
//
const childrenTableUpdate = async (e) => {
childrenTableInfoForm.value = (await getInstockDetail(e.instockDetailId)).data
const res = (await getOutstockDetail(e.outstockDetailId));
childrenTableInfoForm.value = res.data;
childrenTableInfoVisible.value = true
}
//
@ -816,8 +879,8 @@ const submitMaterialForm = () => {
dialogtable.value[currentRowIndex.value].materialId = selectedMaterial.value.materialId;
dialogtable.value[currentRowIndex.value].materialName = selectedMaterial.value.materialName;
dialogtable.value[currentRowIndex.value].materialCode = selectedMaterial.value.materialCode;
dialogtable.value[currentRowIndex.value].materialUnit = selectedMaterial.value.materialUnit;
dialogtable.value[currentRowIndex.value].materialSpec = selectedMaterial.value.materialSpec;
dialogtable.value[currentRowIndex.value].unitName = selectedMaterial.value.materialUnit;
dialogtable.value[currentRowIndex.value].materialSpe = selectedMaterial.value.materialSpec;
//
}
}
@ -836,6 +899,48 @@ const handleMaterialAdd = (type, index) => {
}
//
const openApprove = (row) => {
if (!row || !row.outstockId) {
ElMessage({ type: 'warning', message: '未获取到出库单ID' })
return
}
approveForm.value = {
outstockId: row.outstockId,
auditStatus: approveForm.value.auditStatus ?? '',
auditComments: approveForm.value.auditComments ?? ''
}
approveDialogVisible.value = true
}
//
const submitApprove = async () => {
const payload = {
outstockId: approveForm.value.outstockId!,
auditStatus: approveForm.value.auditStatus ?? '',
auditComments: approveForm.value.auditComments ?? ''
}
if (!payload.outstockId) {
ElMessage({ type: 'warning', message: '缺少出库单ID无法提交审批' })
return
}
if (!payload.auditStatus) {
ElMessage({ type: 'warning', message: '请选择审核状态' })
return
}
try {
await approveOutstockOrder(payload)
ElMessage({ type: 'success', message: '审批成功' })
approveDialogVisible.value = false
//
await getParentTable()
} catch (err) {
ElMessage({ type: 'error', message: '审批失败,请重试' })
}
}
</script>
<style>
.demo-form-inline .el-input {

@ -84,6 +84,11 @@
</template>
</el-table-column>
<el-table-column label="erp同步数量" align="center" prop="erpSynchronousQty" v-if="columns[11].visible"/>
<el-table-column label="特殊标识" align="center" prop="specialType" v-if="columns[12].visible">
<template #default="scope">
<dict-tag :options="wms_special_type" :value="scope.row.specialType"/>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-tooltip content="修改" placement="top">
@ -187,7 +192,7 @@ import { getBaseMaterialCategoryListInWMS } from '@/api/wms/baseMaterialCategory
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { sys_common_status, wms_return_flag, } = toRefs<any>(proxy?.useDict('sys_common_status' ,'wms_return_flag'));
const { sys_common_status, wms_return_flag, wms_special_type } = toRefs<any>(proxy?.useDict('sys_common_status' ,'wms_return_flag', 'wms_special_type'));
const outstockRecordList = ref<OutstockRecordVO[]>([]);
const buttonLoading = ref(false);
@ -220,6 +225,7 @@ const columns = ref<FieldOption[]>([
{ key: 9, label: `提交时间`, visible: true },
{ key: 10, label: `erp同步状态`, visible: true },
{ key: 11, label: `erp同步数量`, visible: true },
{ key: 12, label: `特殊标识`, visible: true },
// { key: 12, label: `${comment}`, visible: true },
// { key: 13, label: `${comment}`, visible: true },
// { key: 14, label: `${comment}`, visible: true },
@ -239,6 +245,7 @@ const initFormData: OutstockRecordForm = {
createBy: undefined,
erpSynchronousStatus: undefined,
erpSynchronousQty: undefined,
specialType: undefined,
}
const data = reactive<PageData<OutstockRecordForm, OutstockRecordQuery>>({
form: {...initFormData},
@ -248,8 +255,9 @@ const data = reactive<PageData<OutstockRecordForm, OutstockRecordQuery>>({
outstockCode: undefined,
locationCode: undefined,
materialCategoryId: undefined,
materialCategoryName: undefined,//
materialCategoryName: undefined,//
erpSynchronousStatus: undefined,
specialType: undefined,
params: {
}
},

@ -7,8 +7,8 @@
<!-- <el-form-item label="区域ID" prop="areaId">
<el-input v-model="queryParams.areaId" placeholder="请输入区域ID" clearable @keyup.enter="handleQuery" />
</el-form-item>
<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-input v-model="queryParams.warehouseId" placeholder="请输入仓库" clearable @keyup.enter="handleQuery" />
</el-form-item> -->
<el-form-item label="区域编码" prop="areaCode">
<el-input v-model="queryParams.areaCode" placeholder="请输入区域编码" clearable @keyup.enter="handleQuery" />
@ -105,9 +105,9 @@
<el-input v-model="form.areaId" placeholder="请输入区域ID" />
</el-form-item> -->
<el-form-item label="所属仓库" prop="warehouseId">
<el-select
v-model="form.warehouseId"
placeholder="请选择所属仓库"
<el-select
v-model="form.warehouseId"
placeholder="请选择所属仓库"
:disabled="!!form.areaId"
@change="handleWarehouseChange"
>
@ -120,8 +120,8 @@
</el-select>
</el-form-item>
<el-form-item label="区域代号" prop="areaCodeSuffix" v-if="!form.areaId">
<el-input
v-model="form.areaCodeSuffix"
<el-input
v-model="form.areaCodeSuffix"
placeholder="请输入区域代号A、B等"
@input="generateAreaCode"
:disabled="!!form.areaId"
@ -198,7 +198,7 @@ const dialog = reactive<DialogOption>({
const columns = ref<FieldOption[]>([
{ key: 0, label: `序号`, visible: true },
// { key: 1, label: ``, visible: true },
{ key: 2, label: `仓库ID`, visible: true },
{ key: 2, label: `仓库`, visible: true },
{ key: 3, label: `仓库`, visible: true },
{ key: 4, label: `区域编码`, visible: true },
{ key: 5, label: `区域名称`, visible: true },
@ -324,7 +324,7 @@ const handleUpdate = async (row?: WmsBaseAreaVO) => {
const _areaId = row?.areaId || ids.value[0];
const res = await getWmsBaseArea(_areaId);
const data = res.data;
//
form.value.areaId = data.areaId;
form.value.warehouseId = data.warehouseId;
@ -336,12 +336,12 @@ const handleUpdate = async (row?: WmsBaseAreaVO) => {
form.value.areaManager = data.areaManager;
form.value.activeFlag = data.activeFlag || '1';
form.value.remark = data.remark;
//
if (data.areaCode && data.warehouseCode) {
form.value.areaCodeSuffix = data.areaCode.replace(data.warehouseCode, '');
}
dialog.visible = true;
dialog.title = "修改区域信息";
};
@ -376,7 +376,7 @@ const submitForm = () => {
}
form.value.areaCode = `${form.value.warehouseCode}${form.value.areaCodeSuffix.toUpperCase()}`;
}
buttonLoading.value = true;
try {
if (form.value.areaId) {

@ -0,0 +1,325 @@
<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" >
<!-- <el-form-item label="客户ID" prop="customerId">-->
<!-- <el-input v-model="queryParams.customerId" placeholder="请输入客户ID" clearable @keyup.enter="handleQuery" />-->
<!-- </el-form-item>-->
<el-form-item label="客户编码" prop="customerCode">
<el-input v-model="queryParams.customerCode" placeholder="请输入客户编码" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="客户名称" prop="customerName">
<el-input v-model="queryParams.customerName" placeholder="请输入客户名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<!-- <el-form-item label="联系人" prop="contactPerson">-->
<!-- <el-input v-model="queryParams.contactPerson" placeholder="请输入联系人" clearable @keyup.enter="handleQuery" />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="联系电话" prop="contactPhone">-->
<!-- <el-input v-model="queryParams.contactPhone" placeholder="请输入联系电话" clearable @keyup.enter="handleQuery" />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="地址" prop="address">-->
<!-- <el-input v-model="queryParams.address" placeholder="请输入地址" clearable @keyup.enter="handleQuery" />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="传真" prop="fax">-->
<!-- <el-input v-model="queryParams.fax" placeholder="请输入传真" clearable @keyup.enter="handleQuery" />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="邮箱" prop="email">-->
<!-- <el-input v-model="queryParams.email" placeholder="请输入邮箱" clearable @keyup.enter="handleQuery" />-->
<!-- </el-form-item>-->
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable >
<el-option v-for="dict in active_flag" :key="dict.value" :label="dict.label" :value="dict.value"/>
</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:wmsBaseCustomer:add']"></el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['wms:wmsBaseCustomer:edit']"></el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['wms:wmsBaseCustomer:remove']"></el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['wms:wmsBaseCustomer: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" :data="wmsBaseCustomerList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<!-- <el-table-column label="客户ID" align="center" prop="customerId" v-if="columns[0].visible"/>-->
<el-table-column label="客户编码" align="center" prop="customerCode" v-if="columns[0].visible"/>
<el-table-column label="客户名称" align="center" prop="customerName" v-if="columns[1].visible"/>
<el-table-column label="联系人" align="center" prop="contactPerson" v-if="columns[2].visible"/>
<el-table-column label="联系电话" align="center" prop="contactPhone" v-if="columns[3].visible"/>
<el-table-column label="地址" align="center" prop="address" v-if="columns[4].visible"/>
<el-table-column label="传真" align="center" prop="fax" v-if="columns[5].visible"/>
<el-table-column label="邮箱" align="center" prop="email" v-if="columns[6].visible"/>
<el-table-column label="状态" align="center" prop="status" v-if="columns[7].visible">
<template #default="scope">
<dict-tag :options="active_flag" :value="scope.row.status"/>
</template>
</el-table-column>
<el-table-column label="备注信息" align="center" prop="remark" v-if="columns[8].visible"/>
<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="['wms:wmsBaseCustomer:edit']"></el-button>
</el-tooltip>
<el-tooltip content="删除" placement="top">
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['wms:wmsBaseCustomer: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="wmsBaseCustomerFormRef" :model="form" :rules="rules" label-width="120px">
<!-- <el-form-item label="客户ID" prop="customerId">
<el-input v-model="form.customerId" placeholder="请输入客户ID" />
</el-form-item> -->
<el-form-item label="客户编码" prop="customerCode">
<el-input v-model="form.customerCode" placeholder="请输入客户编码" />
</el-form-item>
<el-form-item label="客户名称" prop="customerName">
<el-input v-model="form.customerName" placeholder="请输入客户名称" />
</el-form-item>
<el-form-item label="联系人" prop="contactPerson">
<el-input v-model="form.contactPerson" placeholder="请输入联系人" />
</el-form-item>
<el-form-item label="联系电话" prop="contactPhone">
<el-input v-model="form.contactPhone" placeholder="请输入联系电话" />
</el-form-item>
<el-form-item label="地址" prop="address">
<el-input v-model="form.address" placeholder="请输入地址" />
</el-form-item>
<el-form-item label="传真" prop="fax">
<el-input v-model="form.fax" placeholder="请输入传真" />
</el-form-item>
<el-form-item label="邮箱" prop="email">
<el-input v-model="form.email" placeholder="请输入邮箱" />
</el-form-item>
<el-form-item label="状态" prop="status">
<el-radio-group v-model="form.status">
<el-radio
v-for="dict in active_flag"
:key="dict.value"
:value="dict.value"
>{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="备注信息" prop="remark">
<el-input v-model="form.remark" 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="WmsBaseCustomer" lang="ts">
import { listWmsBaseCustomer, getWmsBaseCustomer, delWmsBaseCustomer, addWmsBaseCustomer, updateWmsBaseCustomer } from '@/api/wms/wmsBaseCustomer';
import { WmsBaseCustomerVO, WmsBaseCustomerQuery, WmsBaseCustomerForm } from '@/api/wms/wmsBaseCustomer/types';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { active_flag } = toRefs<any>(proxy?.useDict('active_flag'));
const wmsBaseCustomerList = ref<WmsBaseCustomerVO[]>([]);
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 wmsBaseCustomerFormRef = ref<ElFormInstance>();
const dialog = reactive<DialogOption>({
visible: false,
title: ''
});
//
const columns = ref<FieldOption[]>([
// { key: 0, label: `ID`, visible: true },
// { key: 1, label: ``, visible: true },
{ key: 0, label: `客户编码`, visible: true },
{ key: 1, label: `客户名称`, 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: `状态`, visible: true },
{ key: 8, label: `备注信息`, visible: true },
// { key: 11, label: ``, visible: true },
// { key: 12, label: ``, visible: true },
// { key: 13, label: ``, visible: true },
// { key: 14, label: ``, visible: true },
]);
const initFormData: WmsBaseCustomerForm = {
customerId: undefined,
customerCode: undefined,
customerName: undefined,
contactPerson: undefined,
contactPhone: undefined,
address: undefined,
fax: undefined,
email: undefined,
status: '0',
remark: undefined,
}
const data = reactive<PageData<WmsBaseCustomerForm, WmsBaseCustomerQuery>>({
form: {...initFormData},
queryParams: {
pageNum: 1,
pageSize: 10,
customerId: undefined,
customerCode: undefined,
customerName: undefined,
contactPerson: undefined,
contactPhone: undefined,
address: undefined,
fax: undefined,
email: undefined,
status: undefined,
params: {
}
},
rules: {
customerCode: [
{ required: true, message: "客户编码不能为空", trigger: "blur" }
],
customerName: [
{ required: true, message: "客户名称不能为空", trigger: "blur" }
],
status: [
{ required: true, message: "状态不能为空", trigger: "change" }
],
}
});
const { queryParams, form, rules } = toRefs(data);
/** 查询客户基础信息列表 */
const getList = async () => {
loading.value = true;
const res = await listWmsBaseCustomer(queryParams.value);
wmsBaseCustomerList.value = res.rows;
total.value = res.total;
loading.value = false;
}
/** 取消按钮 */
const cancel = () => {
reset();
dialog.visible = false;
}
/** 表单重置 */
const reset = () => {
form.value = {...initFormData};
wmsBaseCustomerFormRef.value?.resetFields();
}
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.value.pageNum = 1;
getList();
}
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value?.resetFields();
handleQuery();
}
/** 多选框选中数据 */
const handleSelectionChange = (selection: WmsBaseCustomerVO[]) => {
ids.value = selection.map(item => item.customerId);
single.value = selection.length != 1;
multiple.value = !selection.length;
}
/** 新增按钮操作 */
const handleAdd = () => {
reset();
dialog.visible = true;
dialog.title = "添加客户基础信息";
}
/** 修改按钮操作 */
const handleUpdate = async (row?: WmsBaseCustomerVO) => {
reset();
const _customerId = row?.customerId || ids.value[0]
const res = await getWmsBaseCustomer(_customerId);
Object.assign(form.value, res.data);
dialog.visible = true;
dialog.title = "修改客户基础信息";
}
/** 提交按钮 */
const submitForm = () => {
wmsBaseCustomerFormRef.value?.validate(async (valid: boolean) => {
if (valid) {
buttonLoading.value = true;
if (form.value.customerId) {
await updateWmsBaseCustomer(form.value).finally(() => buttonLoading.value = false);
} else {
await addWmsBaseCustomer(form.value).finally(() => buttonLoading.value = false);
}
proxy?.$modal.msgSuccess("操作成功");
dialog.visible = false;
await getList();
}
});
}
/** 删除按钮操作 */
const handleDelete = async (row?: WmsBaseCustomerVO) => {
const _customerIds = row?.customerId || ids.value;
await proxy?.$modal.confirm('是否确认删除客户基础信息编号为"' + _customerIds + '"的数据项?').finally(() => loading.value = false);
await delWmsBaseCustomer(_customerIds);
proxy?.$modal.msgSuccess("删除成功");
await getList();
}
/** 导出按钮操作 */
const handleExport = () => {
proxy?.download('wms/wmsBaseCustomer/export', {
...queryParams.value
}, `wmsBaseCustomer_${new Date().getTime()}.xlsx`)
}
onMounted(() => {
getList();
});
</script>

@ -0,0 +1,561 @@
<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" >
<!-- <el-form-item label="任务主键" prop="taskId">-->
<!-- <el-input v-model="queryParams.taskId" placeholder="请输入任务主键" clearable @keyup.enter="handleQuery" />-->
<!-- </el-form-item>-->
<el-form-item label="任务编码" prop="taskCode">
<el-input v-model="queryParams.taskCode" placeholder="请输入任务编码" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="任务名称" prop="taskName">
<el-input v-model="queryParams.taskName" placeholder="请输入任务名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="任务类型" prop="wmsCheckTaskType">
<el-select v-model="queryParams.wmsCheckTaskType" placeholder="请选择任务类型" clearable >
<el-option v-for="dict in wms_check_task_type" :key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<!-- <el-form-item label="物料类型" prop="materialTypeId">-->
<!-- <el-input v-model="queryParams.materialTypeId" placeholder="请输入物料类型" clearable @keyup.enter="handleQuery" />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="抽检率" prop="checkRate">-->
<!-- <el-input v-model="queryParams.checkRate" placeholder="请输入抽检率" clearable @keyup.enter="handleQuery" />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="定时任务" prop="cron">-->
<!-- <el-input v-model="queryParams.cron" placeholder="请输入定时任务" clearable @keyup.enter="handleQuery" />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="仓库主键" prop="warehouseId">-->
<!-- <el-input v-model="queryParams.warehouseId" placeholder="请输入仓库主键" clearable @keyup.enter="handleQuery" />-->
<!-- </el-form-item>-->
<el-form-item label="频率选项" prop="wmsCheckTaskFrequency">
<el-select v-model="queryParams.wmsCheckTaskFrequency" placeholder="请选择定时任务频率选项" clearable >
<el-option v-for="dict in wms_check_task_frequency" :key="dict.value" :label="dict.label" :value="dict.value"/>
</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:wmsCheckTask:add']"></el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['wms:wmsCheckTask:edit']"></el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['wms:wmsCheckTask:remove']"></el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['wms:wmsCheckTask: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" :data="wmsCheckTaskList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<!-- <el-table-column label="任务主键" align="center" prop="taskId" v-if="columns[0].visible"/> -->
<el-table-column label="任务编码" align="center" prop="taskCode" v-if="columns[0].visible"/>
<el-table-column label="任务名称" align="center" prop="taskName" v-if="columns[1].visible"/>
<el-table-column label="任务类型" align="center" prop="wmsCheckTaskType" v-if="columns[2].visible">
<template #default="scope">
<dict-tag :options="wms_check_task_type" :value="scope.row.wmsCheckTaskType"/>
</template>
</el-table-column>
<el-table-column label="定时任务" align="center" prop="cron" v-if="columns[3].visible"/>
<el-table-column label="频率选项" align="center" prop="wmsCheckTaskFrequency" v-if="columns[5].visible">
<template #default="scope">
<dict-tag :options="wms_check_task_frequency" :value="scope.row.wmsCheckTaskFrequency"/>
</template>
</el-table-column>
<el-table-column label="仓库名称" align="center" prop="warehouseName" v-if="columns[4].visible"/>
<el-table-column label="物料类型" align="center" prop="matrialTypeName" v-if="columns[6].visible"/>
<el-table-column label="抽检率" align="center" prop="checkRate" v-if="columns[7].visible"/>
<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="['wms:wmsCheckTask:edit']"></el-button>
</el-tooltip>
<el-tooltip content="删除" placement="top">
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['wms:wmsCheckTask: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="wmsCheckTaskFormRef" :model="form" :rules="rules" label-width="120px">
<!-- <el-form-item label="任务主键" prop="taskId">-->
<!-- <el-input v-model="form.taskId" placeholder="请输入任务主键" />-->
<!-- </el-form-item>-->
<el-form-item label="任务编码" prop="taskCode">
<el-input v-model="form.taskCode" placeholder="请输入任务编码" />
</el-form-item>
<el-form-item label="任务名称" prop="taskName">
<el-input v-model="form.taskName" placeholder="请输入任务名称" />
</el-form-item>
<el-form-item label="任务类型" prop="wmsCheckTaskType">
<el-select v-model="form.wmsCheckTaskType" placeholder="请选择任务类型" :disabled="!!form.taskId">
<el-option
v-for="dict in wms_check_task_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="频率选项" prop="wmsCheckTaskFrequency">
<el-row :gutter="20">
<el-col :span="8">
<el-card :class="{'selected': form.wmsCheckTaskFrequency === '0'}" @click="form.wmsCheckTaskFrequency = '0'">
月度计划
</el-card>
</el-col>
<el-col :span="8">
<el-card :class="{'selected': form.wmsCheckTaskFrequency === '1'}" @click="form.wmsCheckTaskFrequency = '1'">
年度计划
</el-card>
</el-col>
<el-col :span="8">
<el-card :class="{'selected': form.wmsCheckTaskFrequency === '2'}" @click="form.wmsCheckTaskFrequency = '2'">
自定义计划
</el-card>
</el-col>
</el-row>
</el-form-item>
<el-form-item v-if="form.wmsCheckTaskFrequency === '0'" label="执行日期">
<el-select v-model="form.executeDay" title="推荐使用'L'以适应月份变异,如闰年">
<el-option v-for="day in 27" :key="day" :value="day.toString()">{{day}}</el-option>
<el-option value="L">最后一天</el-option>
</el-select>
</el-form-item>
<el-form-item v-if="form.wmsCheckTaskFrequency === '0'" label="间隔月数">
<el-input-number v-model="form.intervalMonths" :min="0" :step="1" />
</el-form-item>
<el-form-item v-if="form.wmsCheckTaskFrequency === '1'" label="执行月份">
<el-select v-model="form.executeMonth">
<el-option v-for="m in 12" :key="m" :value="m">{{m}}</el-option>
</el-select>
</el-form-item>
<el-form-item v-if="form.wmsCheckTaskFrequency === '1'" label="执行日期">
<el-select v-model="form.executeDay">
<el-option v-for="day in getMaxDay(form.executeMonth)" :key="day" :value="day.toString()">{{day}}</el-option>
<el-option value="L" v-if="showLastDay(form.executeMonth)"></el-option>
</el-select>
</el-form-item>
<el-form-item v-if="form.wmsCheckTaskFrequency === '2'" label="定时计划" prop="cron">
<el-input
v-model="form.cron"
readonly
placeholder="只能点击右侧生成器">
<template #append>
<el-button type="primary" @click="handleShowCron">
点击生成计划表达式
</el-button>
</template>
</el-input>
</el-form-item>
<el-dialog title="Cron表达式生成器" v-model="dialogCron.visible" append-to-body destroy-on-close class="scrollbar">
<Crontab @hide="dialogCron.visible = false" @fill="crontabFill" :expression="expression"></Crontab>
</el-dialog>
<el-form-item label="抽检率(%" prop="checkRate" v-if="form.wmsCheckTaskType == 0">
<el-input-number v-model="form.checkRate" :precision="2" :step="0.01" :min="0" :max="100" placeholder="请输入抽检率" />
</el-form-item>
<el-form-item label="仓库" prop="warehouseId">
<!-- <el-input v-model="form.warehouseId" placeholder="请输入仓库主键" />-->
<el-select v-model="form.warehouseId" placeholder="请选择仓库">
<el-option
v-for="item in warehouseList"
:key="item.warehouseId"
:label="item.warehouseName"
:value="item.warehouseId"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="预览Cron">
<code>{{ previewCron }}</code>
</el-form-item>
<!-- <el-form-item label="下次执行时间">-->
<!-- <CrontabResult :ex="previewCron" />-->
<!-- </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="WmsCheckTask" lang="ts">
import { listWmsCheckTask, getWmsCheckTask, delWmsCheckTask, addWmsCheckTask, updateWmsCheckTask } from '@/api/wms/wmsCheckTask';
import { WmsCheckTaskVO, WmsCheckTaskQuery, WmsCheckTaskForm } from '@/api/wms/wmsCheckTask/types';
import { getBaseWarehouseList } from '@/api/wms/baseWarehouse';
import Crontab from '@/components/Crontab/index.vue';
import CrontabResult from '@/components/Crontab/result.vue';
import { getBaseMaterialTypeList } from '@/api/mes/baseMaterialType';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { wms_check_task_type, wms_check_task_frequency } = toRefs<any>(proxy?.useDict('wms_check_task_type', 'wms_check_task_frequency'));
const wmsCheckTaskList = ref<WmsCheckTaskVO[]>([]);
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 wmsCheckTaskFormRef = ref<ElFormInstance>();
const dialog = reactive<DialogOption>({
visible: false,
title: ''
});
//
const columns = ref<FieldOption[]>([
// { key: 0, label: ``, visible: true },
// { key: 1, label: ``, visible: true },
{ key: 0, label: `任务编码`, visible: true },
{ key: 1, label: `任务名称`, visible: true },
{ key: 2, label: `任务类型`, visible: true },
{ key: 3, label: `定时任务`, visible: true },
{ key: 4, 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: 5, label: `频率选项`, visible: true },
{ key: 6, label: `物料类型`, visible: true },
{ key: 7, label: `抽检率`, visible: false },
]);
const initFormData: WmsCheckTaskForm = {
taskId: undefined,
taskCode: undefined,
taskName: undefined,
wmsCheckTaskType: undefined,
materialTypeId: undefined,
checkRate: undefined,
cron: undefined,
warehouseId: undefined,
wmsCheckTaskFrequency: undefined,
matrialTypeName: undefined,
warehouseName: undefined,
}
const data = reactive<PageData<WmsCheckTaskForm, WmsCheckTaskQuery>>({
form: {...initFormData},
queryParams: {
pageNum: 1,
pageSize: 10,
taskId: undefined,
taskCode: undefined,
taskName: undefined,
wmsCheckTaskType: undefined,
materialTypeId: undefined,
checkRate: undefined,
cron: undefined,
warehouseId: undefined,
wmsCheckTaskFrequency: undefined,
matrialTypeName: undefined,
warehouseName: undefined,
params: {
}
},
rules: {
taskCode: [
{ required: true, message: "任务编码不能为空", trigger: "blur" }
],
taskName: [
{ required: true, message: "任务名称不能为空", trigger: "blur" }
],
wmsCheckTaskType: [
{ required: true, message: "任务类型不能为空", trigger: "change" }
],
wmsCheckTaskFrequency: [
{ required: true, message: "频率选项不能为空", trigger: "change" }
],
executeDay: [{ required: true, message: '执行日期不能为空', trigger: 'change' }],
intervalMonths: [
{ required: true, message: '间隔月数不能为空', trigger: 'blur' },
{ type: 'integer', min: 0, message: '间隔月数必须为非负整数 (0表示每月)', trigger: 'blur' }
],
executeMonth: [{ required: true, message: '执行月份不能为空', trigger: 'change' }],
cron: [{ required: true, message: '定时任务不能为空', trigger: 'change' }]
}
});
const { queryParams, form, rules } = toRefs(data);
/** 查询仓储盘点任务列表 */
const getList = async () => {
loading.value = true;
try {
const res = await listWmsCheckTask(queryParams.value);
wmsCheckTaskList.value = res.rows;
total.value = res.total;
} catch (e: any) {
proxy?.$modal.msgError('获取列表失败: ' + e.message);
} finally {
loading.value = false;
}
}
/** 取消按钮 */
const cancel = () => {
console.log('cancel called');
reset();
dialog.visible = false;
}
/** 表单重置 */
const reset = () => {
form.value = {...initFormData};
wmsCheckTaskFormRef.value?.resetFields();
}
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.value.pageNum = 1;
getList();
}
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value?.resetFields();
handleQuery();
}
/** 多选框选中数据 */
const handleSelectionChange = (selection: WmsCheckTaskVO[]) => {
ids.value = selection.map(item => item.taskId);
single.value = selection.length != 1;
multiple.value = !selection.length;
}
/** 新增按钮操作 */
const handleAdd = () => {
reset();
dialog.visible = true;
dialog.title = "添加仓储盘点任务";
}
/** 修改按钮操作 */
const handleUpdate = async (row?: WmsCheckTaskVO) => {
reset();
const _taskId = row?.taskId || ids.value[0]
try {
const res = await getWmsCheckTask(_taskId);
Object.assign(form.value, res.data);
dialog.visible = true;
dialog.title = "修改仓储盘点任务";
// Add parse function
const parseCron = (cron: string) => {
// Simple parsing logic, assume cron format '0 0 0 day month ? *' or similar
const parts = cron.split(' ');
if (parts.length < 6) return { frequency: '2', cron }; // fallback to custom
const day = parts[3];
const month = parts[4];
const year = parts[6];
if (month.startsWith('*/')) {
// Monthly
const interval = parseInt(month.slice(2));
return { frequency: '0', executeDay: day, intervalMonths: interval, cron };
} else if (year === '*' && month !== '*' && month !== '*/' ) {
// Yearly
return { frequency: '1', executeDay: day, executeMonth: parseInt(month), cron };
} else {
return { frequency: '2', cron };
}
};
// In handleUpdate after res
const parsed = parseCron(res.data.cron);
form.value.wmsCheckTaskFrequency = parsed.frequency;
if (parsed.frequency === '0') {
form.value.executeDay = parsed.executeDay;
form.value.intervalMonths = parsed.intervalMonths;
} else if (parsed.frequency === '1') {
form.value.executeDay = parsed.executeDay;
form.value.executeMonth = parsed.executeMonth;
}
form.value.cron = parsed.cron;
} catch (e: any) {
proxy?.$modal.msgError('获取详情失败: ' + e.message);
}
}
/** 提交按钮 */
const submitForm = () => {
wmsCheckTaskFormRef.value?.validate(async (valid: boolean) => {
if (valid) {
buttonLoading.value = true;
try {
if (form.value.taskId) {
console.log(form.value);
await updateWmsCheckTask(form.value);
} else {
console.log(form.value);
await addWmsCheckTask(form.value);
}
proxy?.$modal.msgSuccess("操作成功");
dialog.visible = false;
await getList();
} catch (e: any) {
proxy?.$modal.msgError('操作失败: ' + e.message);
} finally {
buttonLoading.value = false;
}
}
});
}
/** 删除按钮操作 */
const handleDelete = async (row?: WmsCheckTaskVO) => {
const _taskIds = row?.taskId || ids.value;
await proxy?.$modal.confirm('是否确认删除仓储盘点任务编号为"' + _taskIds + '"的数据项?').finally(() => loading.value = false);
try {
await delWmsCheckTask(_taskIds);
proxy?.$modal.msgSuccess("删除成功");
await getList();
} catch (e: any) {
proxy?.$modal.msgError('删除失败: ' + e.message);
}
}
/** 导出按钮操作 */
const handleExport = () => {
proxy?.download('wms/wmsCheckTask/export', {
...queryParams.value
}, `wmsCheckTask_${new Date().getTime()}.xlsx`)
}
const previewDescription = ref('');
const previewCron = ref('');
watch(() => form.value, (newForm) => {
// Generate cron and description based on frequency
let cron = '';
let desc = '';
if (newForm.wmsCheckTaskFrequency === '0') {
cron = `0 0 0 ${newForm.executeDay || '?'} */${newForm.intervalMonths || 1} ?`;
desc = `${newForm.intervalMonths || 1}个月的${newForm.executeDay === 'L' ? '最后一天' : newForm.executeDay + '日'} 00:00 执行`;
} else if (newForm.wmsCheckTaskFrequency === '1') {
cron = `0 0 0 ${newForm.executeDay || '?'} ${newForm.executeMonth || '?'} ? *`;
desc = `每年${newForm.executeMonth}月的${newForm.executeDay === 'L' ? '最后一天' : newForm.executeDay + '日'} 00:00 执行`;
} else if (newForm.wmsCheckTaskFrequency === '2') {
cron = newForm.cron || '';
desc = '自定义计划: ' + cron;
}
previewCron.value = cron;
previewDescription.value = desc;
// For non-custom, set form.cron
if (newForm.wmsCheckTaskFrequency !== '2') {
newForm.cron = cron;
}
cron = cron + ' *'; // year *
}, { deep: true });
//
let warehouseList = ref([]);
const getWarehouseList = async () => {
const res = await getBaseWarehouseList(null);
warehouseList.value = res.data;
}
//
let materialTypeList = ref([]);
const getMaterialTypeList = async () => {
const res = await getBaseMaterialTypeList(null);
materialTypeList.value = res.data;
}
const dialogCron = reactive({ visible: false });
const expression = ref('');
const handleShowCron = () => {
expression.value = form.value.cron || '';
dialogCron.visible = true;
};
const crontabFill = (value: string) => {
form.value.cron = value;
dialogCron.visible = false;
};
const monthMaxDays = [0,31,27,31,30,31,30,31,31,30,31,30,31]; // Feb 27
const getMaxDay = (month: number) => {
if (!month) return 27; // default 27
return monthMaxDays[month] || 27; // default 27
};
const showLastDay = (month: number) => {
return getMaxDay(month) < 30; // Hide if max >=30
};
watch(() => form.value.executeMonth, (newMonth) => {
if (form.value.wmsCheckTaskFrequency === '1' && form.value.executeDay && form.value.executeDay !== 'L') {
const dayNum = parseInt(form.value.executeDay);
if (dayNum > getMaxDay(newMonth)) {
form.value.executeDay = null;
}
}
});
watch(() => form.value.wmsCheckTaskType, (newType) => {
if (newType !== '0') {
form.value.checkRate = undefined;
}
});
onMounted(() => {
getList();
getWarehouseList();
getMaterialTypeList();
});
</script>
<style scoped>
.selected {
border-color: #409EFF;
background-color: #E6F7FF;
}
</style>
Loading…
Cancel
Save