<template>
|
<div class="wmsRecordTrans-container">
|
<el-dialog v-model="dialogVisible" :title="dialogType == 'add' ? '添加' : dialogType == 'edit' ? '编辑' : '详情'" width="60%" @close="closeDialog">
|
<el-form :model="addForm" label-width="110px" ref="dialogRef" :rules="formRules">
|
<el-row>
|
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
|
<el-form-item label="策略代码" prop="strategyCode">
|
<el-input :disabled="dialogType != 'add'" v-model="addForm.strategyCode" placeholder="请输入策略代码" maxlength="50" show-word-limit clearable />
|
</el-form-item>
|
</el-col>
|
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
|
<el-form-item label="策略名称" prop="strategyName">
|
<el-input :disabled="dialogType == 'detail'" v-model="addForm.strategyName" placeholder="请输入策略名称" maxlength="255" show-word-limit clearable />
|
</el-form-item>
|
</el-col>
|
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
|
<el-form-item label="策略生效时间" prop="startTime">
|
<el-date-picker :disabled="dialogType == 'detail'" v-model="addForm.startTime" type="date" placeholder="策略生效时间" />
|
</el-form-item>
|
</el-col>
|
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
|
<el-form-item label="策略失效时间" prop="endTime">
|
<el-date-picker :disabled="dialogType == 'detail'" v-model="addForm.endTime" type="date" placeholder="策略失效时间" />
|
</el-form-item>
|
</el-col>
|
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
|
<el-form-item :disabled="dialogType == 'detail'" label="是否禁用" prop="isDisabled">
|
<el-switch :disabled="dialogType == 'detail'" v-model="addForm.isDisabled" active-text="是" inactive-text="否" />
|
</el-form-item>
|
</el-col>
|
|
</el-row>
|
</el-form>
|
<!-- 盘点物料 -->
|
<div class="msi-content" style="margin-top: 0">
|
<!-- 策略选择 -->
|
<!-- <open-allprop titleAuthor="1" warehousOrderDetails.sync="WmsConfigUnshelveStrategyChoose" ref="propALlProp" @getTabelData="handleQuerySelect"></open-allprop> -->
|
|
<div class="header">
|
<div>
|
<el-button type="primary" icon="el-icon-plus" @click="confirmAddMaterial2" v-if="dialogType != 'detail'">新增策略</el-button>
|
<el-button icon="el-icon-delete" plain :disabled="checkedDetails2.length == 0" @click="delCheckedDetails2" v-if="dialogType != 'detail'">删除选中行</el-button>
|
</div>
|
</div>
|
<br />
|
|
<el-table :data="warehousOrderDetails2" border style="width: 100%" row-key="id" ref="detailRef" @selection-change="detailsCheckChange2" :max-height="280">
|
<el-table-column align="center" width="60" type="selection" />
|
<el-table-column label="序号" align="center" width="60" type="index" />
|
|
<el-table-column label="策略选项" align="center" min-width="100">
|
<template #default="scope">
|
<el-select :disabled="dialogType == 'detail'" v-model="scope.row.strategyOption" placeholder="请选择策略选项">
|
<el-option v-for="(item, index) in getEnumInputControlData" :key="index" :value="item.value" :label="`${item.describe}`"></el-option>
|
</el-select>
|
</template>
|
</el-table-column>
|
|
<el-table-column label="优先级" align="center" min-width="110">
|
<template #default="scope">
|
<el-select :disabled="dialogType == 'detail'" v-model="scope.row.priority" placeholder="请选择优先级">
|
<el-option v-for="(item, index) in getEnumPriorityData" :key="index" :value="item.value" :label="`${item.describe}`"></el-option>
|
</el-select>
|
</template>
|
</el-table-column>
|
|
</el-table>
|
<br />
|
|
<div class="header">
|
<div>
|
<el-button type="primary" icon="el-icon-plus" @click="addMaterialDialog" v-if="dialogType != 'detail'">新增物料</el-button>
|
<el-button icon="el-icon-delete" plain :disabled="checkedDetails.length == 0" @click="delCheckedDetails" v-if="dialogType != 'detail'">删除选中行</el-button>
|
<!-- <el-button icon="el-icon-download" plain @click="getMaterialTemplate"
|
>下载导入模板</el-button
|
>
|
<el-button icon="el-icon-upload2" plain @click="openUploadDialog"
|
>批量导入</el-button
|
> -->
|
</div>
|
<br />
|
</div>
|
<el-table :data="warehousOrderDetails" border style="width: 100%" row-key="wareMaterialCode" ref="detailRef" @selection-change="detailsCheckChange" max-height="480">
|
<el-table-column align="center" width="60" type="selection" />
|
<el-table-column label="序号" align="center" width="60" type="index" />
|
<el-table-column label="物料编号" min-width="140" prop="materialCode" align="center" show-overflow-tooltip />
|
<el-table-column label="物料名称" min-width="140" prop="materialName" align="center" show-overflow-tooltip />
|
|
<!-- <el-table-column label="采购单位" prop="poUnit" align="center" min-width="140" show-overflow-tooltip /> -->
|
<!-- <el-table-column label="数量" align="center" width="180">
|
<template #default="scope">
|
<el-input-number :precision="3" min="0" v-model="scope.row.quantity" size="small" />
|
</template>
|
</el-table-column> -->
|
</el-table>
|
</div>
|
<template #footer>
|
<span class="dialog-footer">
|
<!-- <el-button @click="planBl" v-if="addForm.CheckType == 0 && dialogType != 'detail'">计算比例</el-button> -->
|
<el-button @click="dialogVisible = false">取消</el-button>
|
<el-button v-if="dialogType != 'detail'" type="primary" :disabled="disabled_btn" @click="confirm">确认</el-button>
|
</span>
|
</template>
|
</el-dialog>
|
<!-- 添加物料 -->
|
<el-dialog v-model="addMaterialVisible" title="添加物料详情" width="60%" @close="closeMaterialDialog">
|
<div class="msi-form" style="padding-top: 0px">
|
<el-form :model="materialForm" label-width="90px">
|
<el-row>
|
<el-col :span="8">
|
<el-form-item label="物料编号">
|
<el-input v-model="materialForm.MaterialCode" placeholder="请输入物料编号" clearable></el-input>
|
</el-form-item>
|
</el-col>
|
|
<el-col :span="8">
|
<el-form-item label="物料名称:">
|
<el-input v-model="materialForm.MaterialName" placeholder="请输入物料名称" clearable></el-input>
|
</el-form-item>
|
</el-col>
|
|
<!-- <el-col :span="8">
|
<el-form-item label="批次:">
|
<el-input v-model="materialForm.BatchNo" placeholder="请输入物料批次" clearable></el-input>
|
</el-form-item>
|
</el-col> -->
|
|
<el-col :span="8">
|
<el-form-item>
|
<el-button type="primary" icon="el-icon-search" @click="getMaterialList">查询</el-button>
|
<!-- <el-button icon="el-icon-refresh-right" @click="resetMaterialForm"
|
>重置</el-button
|
> -->
|
</el-form-item>
|
</el-col>
|
</el-row>
|
</el-form>
|
</div>
|
<br />
|
<div class="msi-content" style="padding-top: 0; margin-top: 0px">
|
<el-table :data="materialList" border style="width: 100%" row-key="wareMaterialCode" ref="materialRef" @selection-change="materialSelectionChange">
|
<el-table-column align="center" width="60" type="selection" />
|
<el-table-column label="序号" align="center" width="60" type="index" />
|
<el-table-column label="物料编号" prop="materialCode" align="center" min-width="140" show-overflow-tooltip />
|
<el-table-column label="物料名称" prop="materialName" align="center" min-width="140" show-overflow-tooltip />
|
<el-table-column label="采购单位" prop="poUnit" align="center" min-width="140" show-overflow-tooltip />
|
</el-table>
|
<Pagination
|
:total="materialTotal"
|
v-model:page="materialForm.Page"
|
v-model:limit="materialForm.PageSize"
|
@pagination="getMaterialList"
|
style="margin-top: 20px; text-align: center"
|
></Pagination>
|
</div>
|
<template #footer>
|
<span class="dialog-footer">
|
<el-button @click="addMaterialVisible = false">取消</el-button>
|
<el-button type="primary" @click="confirmAddMaterial">确认</el-button>
|
</span>
|
</template>
|
</el-dialog>
|
</div>
|
</template>
|
|
<script lang="ts" setup>
|
import { ref, nextTick, computed, watch, onMounted, getCurrentInstance } from 'vue';
|
import { getCheckPlanRange, passCheckTjPlan, passCheckChPlan } from '/@/api/main/Check/checkOrder';
|
|
import { ElMessage, ElMessageBox } from 'element-plus';
|
|
import { getAPI } from '/@/utils/axios-utils';
|
import { SysEnumApi } from '/@/api-services/api';
|
import commonFunction from '/@/utils/commonFunction';
|
import Pagination from '/@/components/Pagination/index.vue';
|
const loading = ref(false);
|
|
import { pageWmsMaterial } from '/@/api/main/WmsBase/wmsMaterial';
|
|
import { addWmsConfigUnshelveStrategy, detailWmsConfigUnshelveStrategy, updateWmsConfigUnshelveStrategy } from '/@/api/main/WmsSystemConfig/wmsConfigUnshelveStrategy';
|
|
const { proxy }: any = getCurrentInstance(); // 访问实例上下文 proxy同时支持开发 线上环境v
|
const emits = defineEmits(['getTabelData']);
|
|
const getEnumCheckModeData_Index = ref<any>([]);
|
|
//选中的行
|
const checkRows = ref<{ id: number }[]>([]);
|
|
// 选择
|
const handleSelectionChange = (val: any) => {
|
checkRows.value = val;
|
};
|
|
//-------------------------盘点计划范围-------------------------
|
//入库单下物料详情请求
|
const detailForm = ref({
|
orderId: '',
|
CheckType: '',
|
Page: 1,
|
PageSize: 10,
|
});
|
|
// 物料详情抽屉
|
const drawerVisible = ref(false);
|
|
//单据号
|
const orderNo = ref('');
|
|
//打开抽屉
|
const openDrawer = (scope: any = {}) => {
|
//当前入库单号id
|
detailForm.value.orderId = scope.id;
|
detailForm.value.CheckType = scope.checkType;
|
//计划号
|
orderNo.value = scope.orderNo;
|
//获取物料列表
|
getDetail();
|
drawerVisible.value = true;
|
};
|
|
//关闭抽屉
|
const handleDrawerClose = () => {
|
detailForm.value = {
|
orderId: '',
|
CheckType: '',
|
Page: 1,
|
PageSize: 10,
|
};
|
|
deltailList.value = [];
|
detailCount.value = 0;
|
};
|
|
//盘点计划范围列表
|
const deltailList = ref<any[]>([]);
|
|
//盘点计划范围数据条数
|
const detailCount = ref(0);
|
|
const getDetail = () => {
|
getCheckPlanRange(detailForm.value)
|
.then((res) => {
|
if (res.code == 200) {
|
const { data } = res;
|
const result = data;
|
deltailList.value = result.rows;
|
detailCount.value = result.totalRows;
|
} else {
|
ElMessage.error(JSON.stringify(`获取计划范围失败${res.code}:${JSON.stringify(res.message)}`));
|
}
|
})
|
.catch((err) => ElMessage.error(JSON.stringify(err)));
|
};
|
|
//窗口类型
|
const dialogType = ref('add');
|
|
const dialogVisible = ref(false);
|
|
//操作表单ref
|
const dialogRef = ref();
|
|
const loadingWmsInventoryCheckPlanDetails = ref(false);
|
const disabled_btnWmsInventoryCheckPlanDetails = ref(false);
|
|
const getPlanDetail = async (id: number, checkType: number) => {
|
loadingWmsInventoryCheckPlanDetails.value = true;
|
disabled_btnWmsInventoryCheckPlanDetails.value = true;
|
var res = await detailWmsConfigUnshelveStrategy({
|
StrategyId: id,
|
});
|
if (res.data.type == 'success') {
|
warehousOrderDetails2.value = res.data.result.wmsConfigUnshelveStrategyChooseList ?? [];
|
warehousOrderDetails.value = res.data.result.wmsConfigUnshelveStrategyRangeList ?? [];
|
}
|
loadingWmsInventoryCheckPlanDetails.value = false;
|
disabled_btnWmsInventoryCheckPlanDetails.value = false;
|
};
|
|
const getEnumInputControlData = ref<any>([]);
|
const getEnumPriorityData = ref<any>([]);
|
//打开窗口
|
const openDialog = async (type: number, scope: any = {}) => {
|
dialogVisible.value = true;
|
getEnumInputControlData.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('StrategyOptionEnum')).data.result ?? [];
|
getEnumPriorityData.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('PriorityEnum')).data.result ?? [];
|
warehousOrderDetails2.value = [];
|
warehousOrderDetails.value = []
|
|
debugger;
|
if (type == 1) {
|
dialogType.value = 'add';
|
} else if (type == 2) {
|
dialogType.value = 'edit';
|
addForm.value = JSON.parse(JSON.stringify(scope));
|
// addForm.value.CreateDate = [scope.planStartDate, scope.planEndDate];
|
getPlanDetail(scope.id, scope.checkType);
|
} else if (type == 3) {
|
dialogType.value = 'detail';
|
addForm.value = JSON.parse(JSON.stringify(scope));
|
// addForm.value.CreateDate = [scope.planStartDate, scope.planEndDate];
|
getPlanDetail(scope.id, scope.checkType);
|
}
|
|
nextTick(() => {
|
if (dialogRef) {
|
dialogRef.value.clearValidate();
|
}
|
});
|
};
|
|
//添加/编辑
|
let addForm = ref({
|
checkMode: '',
|
planDate: '',
|
remarks: '',
|
areaName: [],
|
areaCode: [],
|
materials: [] as { wareMaterialCode: string }[],
|
});
|
//时间选择不能大于当前时间
|
const disabledDate = (time: Date) => {
|
return time.getTime() < Date.now();
|
};
|
|
//rules
|
const formRules = {
|
strategyCode: [{ required: true, message: '请输入策略代码!', trigger: 'blur' }],
|
strategyName: [{ required: true, message: '请输入策略名称!', trigger: 'blur' }],
|
// isDisabled: [{required: true, message: '请选择是否禁用!', trigger: 'change',},],
|
// isDelete: [{required: true, message: '请选择软删除!', trigger: 'change',},],
|
};
|
const disabled_btn = ref(false);
|
const WmsConfigUnshelveStrategyChoose = ref([]);
|
//操作提交
|
const confirm = () => {
|
dialogRef.value.validate(async (vali: any) => {
|
if (vali) {
|
// addForm.value.materials = warehousOrderDetails.value;
|
var param = JSON.parse(JSON.stringify(addForm.value));
|
var WmsConfigUnshelveStrategyRange = warehousOrderDetails.value || [];
|
var WmsConfigUnshelveStrategyChoose = warehousOrderDetails2.value || [];
|
var pram = {
|
...param,
|
WmsConfigUnshelveStrategyChoose: WmsConfigUnshelveStrategyChoose,
|
WmsConfigUnshelveStrategyRange: WmsConfigUnshelveStrategyRange,
|
};
|
//添加
|
if (dialogType.value == 'add') {
|
disabled_btn.value = true;
|
loading.value = true;
|
let ret = {};
|
ret = await addWmsConfigUnshelveStrategy(pram);
|
loading.value = false;
|
disabled_btn.value = false;
|
if (ret.data.type == 'success') {
|
ElMessage.success('新增成功');
|
emits('getTabelData');
|
dialogVisible.value = false;
|
}
|
} else if (dialogType.value == 'edit') {
|
loading.value = true;
|
disabled_btn.value = true;
|
let ret = {};
|
ret = await updateWmsConfigUnshelveStrategy(pram);
|
loading.value = false;
|
disabled_btn.value = false;
|
if (ret.data.type == 'success') {
|
ElMessage.success('编辑成功');
|
emits('getTabelData');
|
dialogVisible.value = false;
|
}
|
} else {
|
dialogVisible.value = false;
|
}
|
} else {
|
ElMessage.warning('表单验证失败');
|
}
|
});
|
};
|
|
//关闭窗口
|
const closeDialog = () => {
|
addForm.value = {
|
checkMode: '',
|
planDate: '',
|
remarks: '',
|
areaName: [],
|
areaCode: [],
|
materials: [] as { wareMaterialCode: string }[],
|
};
|
warehousOrderDetails.value = [];
|
checkedDetails.value = [];
|
disabled_btn.value = false;
|
detailRef.value.clearSelection();
|
};
|
|
// ---------------材料盘点列表-------------------------
|
//物料详情的table ref
|
const detailRef = ref();
|
|
//添加编辑窗口物料列表
|
const warehousOrderDetails = ref<any[]>([]);
|
|
//物料详情列表选中的物料
|
const checkedDetails = ref<any[]>([]);
|
|
//物料详情列表中勾选事件
|
const detailsCheckChange = (val: any) => {
|
checkedDetails.value = val;
|
};
|
const detailsCheckChange2 = (val: any) => {
|
checkedDetails2.value = val;
|
};
|
//删除选中的物料详情
|
const delCheckedDetails = () => {
|
ElMessageBox.confirm('是否确认删除?', '提示', {
|
confirmButtonText: '确认',
|
cancelButtonText: '取消',
|
type: 'warning',
|
})
|
.then(() => {
|
checkedDetails.value.forEach((item) => {
|
const index = warehousOrderDetails.value.findIndex((detail) => detail.wareMaterialCode == item.wareMaterialCode);
|
warehousOrderDetails.value.splice(index, 1);
|
});
|
})
|
.catch(() => ElMessage.info('已取消删除'));
|
};
|
|
// -----------------添加物料操作-------------------------
|
//物料基础数据窗口
|
const addMaterialVisible = ref(false);
|
|
//物料基础数据列表
|
const materialList = ref([]);
|
|
//物料基础数据条数
|
const materialTotal = ref(0);
|
|
//物料基础数据form
|
const materialForm = ref({
|
WareMaterialCode: '',
|
WareMaterialName: '',
|
BatchNo: '',
|
Page: 1,
|
PageSize: 10,
|
});
|
|
//获取物料基础列表
|
const getMaterialList = async () => {
|
debugger;
|
|
loading.value = true;
|
// var res = await pageWmsMaterial(Object.assign(queryParams.value, tableParams.value));
|
var res = await pageWmsMaterial(Object.assign(materialForm.value));
|
|
materialList.value = res.data.result?.items ?? [];
|
//tableParams.value.total = res.data.result?.total;
|
materialTotal.value = res.data.result?.total;
|
loading.value = false;
|
};
|
|
//重置物料
|
const resetMaterialForm = () => {
|
materialForm.value = {
|
WareMaterialCode: '',
|
WareMaterialName: '',
|
BatchNo: '',
|
Page: 1,
|
PageSize: 10,
|
};
|
getMaterialList();
|
};
|
|
//选中的基础物料数据
|
const checkedMaterial = ref<any[]>([]);
|
|
//物料基础数据勾选
|
const materialSelectionChange = (val: any) => {
|
checkedMaterial.value = val;
|
};
|
|
//打开新增物料窗口
|
const addMaterialDialog = () => {
|
getMaterialList();
|
addMaterialVisible.value = true;
|
};
|
|
//基础物料table的ref对象
|
const materialRef = ref();
|
|
//确认添加材料
|
const confirmAddMaterial = () => {
|
//物料列表没数据,直接添加
|
if (warehousOrderDetails.value.length == 0) {
|
warehousOrderDetails.value.push(...checkedMaterial.value);
|
} else {
|
for (let i = 0; i < checkedMaterial.value.length; i++) {
|
let idx = warehousOrderDetails.value.findIndex((item: any) => item.materialCode == checkedMaterial.value[i].materialCode);
|
if (idx > -1) {
|
return ElMessage.warning(`物料编号${checkedMaterial.value[i].materialCode}在物料列表中已存在,请去除勾选`);
|
}
|
}
|
warehousOrderDetails.value.push(...checkedMaterial.value);
|
}
|
|
addMaterialVisible.value = false;
|
};
|
|
//关闭新增物料窗口
|
const closeMaterialDialog = () => {
|
materialForm.value = {
|
WareMaterialCode: '',
|
WareMaterialName: '',
|
BatchNo: '',
|
Page: 1,
|
PageSize: 10,
|
};
|
materialList.value = [];
|
checkedMaterial.value = [];
|
materialRef.value.clearSelection();
|
};
|
|
//提交
|
const pass = (orderNo: string) => {
|
ElMessageBox.confirm('是否确认提交?', '提示', {
|
confirmButtonText: '确认',
|
cancelButtonText: '取消',
|
type: 'warning',
|
})
|
.then(() => {
|
passCheckTjPlan({ OrderNo: orderNo })
|
.then()
|
.then((res) => {
|
if (res.code == 200) {
|
ElMessage.success('提交成功');
|
getTabelData();
|
dialogVisible.value = false;
|
} else {
|
ElMessage.error(`失败${res.code}:${JSON.stringify(res.message)}`);
|
}
|
})
|
.catch((err) => ElMessage.error(JSON.stringify(err)));
|
})
|
.catch(() => ElMessage.info('已取消'));
|
};
|
//撤回
|
const passCh = (orderNo: string) => {
|
ElMessageBox.confirm('是否确认撤回?', '提示', {
|
confirmButtonText: '确认',
|
cancelButtonText: '取消',
|
type: 'warning',
|
})
|
.then(() => {
|
passCheckChPlan({ OrderNo: orderNo })
|
.then()
|
.then((res) => {
|
if (res.code == 200) {
|
ElMessage.success('撤回成功');
|
getTabelData();
|
dialogVisible.value = false;
|
} else {
|
ElMessage.error(`失败${res.code}:${JSON.stringify(res.message)}`);
|
}
|
})
|
.catch((err) => ElMessage.error(JSON.stringify(err)));
|
})
|
.catch(() => ElMessage.info('已取消'));
|
};
|
|
//时间
|
const detailTimeArr = ref([]);
|
|
const showAdvanceQueryUI = ref(false);
|
// 改变高级查询的控件显示状态
|
const changeAdvanceQueryUI = () => {
|
showAdvanceQueryUI.value = !showAdvanceQueryUI.value;
|
};
|
|
const handleQuerySelect = () => {
|
};
|
|
const getEnumCheckStageData_Index = ref<any>([]);
|
const getEnumIsAuditData_Index = ref<any>([]);
|
|
const { getEnumDesc } = commonFunction();
|
|
onMounted(async () => {
|
getEnumCheckModeData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('CheckModeEnum')).data.result ?? [];
|
getEnumCheckStageData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('CheckStageEnum')).data.result ?? [];
|
getEnumIsAuditData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('TrueFalseEnum')).data.result ?? [];
|
});
|
|
const warehousOrderDetails2 = ref<any[]>([]);
|
const confirmAddMaterial2 = () => {
|
warehousOrderDetails2.value.push({
|
id: warehousOrderDetails2.value.length + 1,
|
});
|
};
|
const checkedDetails2 = ref<any[]>([]);
|
//删除选中的物料详情
|
const delCheckedDetails2 = () => {
|
ElMessageBox.confirm('是否确认删除?', '提示', {
|
confirmButtonText: '确认',
|
cancelButtonText: '取消',
|
type: 'warning',
|
})
|
.then(() => {
|
checkedDetails2.value.forEach((item) => {
|
const index = warehousOrderDetails2.value.findIndex((detail) => detail.id == item.id);
|
warehousOrderDetails2.value.splice(index, 1);
|
});
|
checkedDetails2.value = [];
|
// detailRef.value.clearSelection();
|
})
|
.catch(() => ElMessage.info('已取消删除'));
|
};
|
|
// 暴露方法
|
defineExpose({ openDialog, openDrawer });
|
</script>
|
<style lang="less">
|
.el-dialog__title {
|
color: white !important;
|
font-size: 14px;
|
}
|
|
.under_line {
|
color: #f18201;
|
text-decoration: underline;
|
cursor: pointer;
|
}
|
</style>
|