|
@@ -27,73 +27,75 @@
|
|
|
</byTable>
|
|
|
|
|
|
<!--详情-->
|
|
|
- <el-dialog :z-index="1500" title="异常处理" v-if="dialogVisible" v-model="formData.data" width="500px" v-loading="loading">
|
|
|
+ <el-dialog :z-index="1500" title="异常处理" v-if="dialogVisible" v-model="formData.data" width="500px" v-loading="loading" @close="closeHandleAction">
|
|
|
<el-steps :active="stepsActiveindex" align-center>
|
|
|
<el-step title="选择异常状态" ></el-step>
|
|
|
<el-step title="处理异常明细" ></el-step>
|
|
|
- <el-step title="确认操作" ></el-step>
|
|
|
</el-steps>
|
|
|
<el-divider></el-divider>
|
|
|
- <el-form class="stepsActive1" :model="sourceList.pagination" style="margin-top: 0px;height: 250px" label-position="top" label-width="100px" v-if="stepsActiveindex == 1">
|
|
|
- <el-form-item label="异常状态">
|
|
|
- <el-select v-model="formData.data.ycStatus" style="width: 100%;">
|
|
|
- <el-option label="Long" value="Long" />
|
|
|
- <el-option label="Long1" value="Long1" />
|
|
|
+ <el-form class="stepsActive1" :model="formData.data" ref="submitform" :rules="rules" style="margin-top: 0px;height: auto"
|
|
|
+ label-position="top" label-width="100px" v-if="stepsActiveindex == 1">
|
|
|
+ <el-form-item label="异常状态" prop="exHandle">
|
|
|
+ <el-select v-model="formData.data.exHandle" style="width: 100%;" @change="treeChange">
|
|
|
+ <el-option v-for="item in abnormalHandleTypeDict" :key="item.value" :label="item.label" :value="item.value"/>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="异常处理" >
|
|
|
- <el-select v-model="formData.data.ycHandleType" style="width: 100%;">
|
|
|
- <el-option label="Long" value="Long" />
|
|
|
- <el-option label="Long1" value="Long1" />
|
|
|
- <el-option label="Long2" value="Long2" />
|
|
|
- <el-option label="Long3" value="Long3" />
|
|
|
- <el-option label="Long4" value="Long4" />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- </el-form>
|
|
|
- <el-form class="stepsActive2" :model="sourceList.pagination" style="margin-top: 20px;height: 250px" label-position="top" label-width="100px" v-if="stepsActiveindex == 2">
|
|
|
- <el-form-item label="仓库1">
|
|
|
- <el-select v-model="formData.data.ycStatus" style="width: 100%;">
|
|
|
- <el-option label="Long" value="Long" />
|
|
|
- <el-option label="Long1" value="Long1" />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="商品1" >
|
|
|
- <el-select v-model="formData.data.ycHandleType" style="width: 100%;">
|
|
|
- <el-option label="Long" value="Long" />
|
|
|
- <el-option label="Long1" value="Long1" />
|
|
|
- <el-option label="Long2" value="Long2" />
|
|
|
- <el-option label="Long3" value="Long3" />
|
|
|
- <el-option label="Long4" value="Long4" />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="仓库2">
|
|
|
- <el-select v-model="formData.data.ycStatus" style="width: 100%;">
|
|
|
- <el-option label="Long" value="Long" />
|
|
|
- <el-option label="Long1" value="Long1" />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="商品2" >
|
|
|
- <el-select v-model="formData.data.ycHandleType" style="width: 100%;">
|
|
|
- <el-option label="Long" value="Long" />
|
|
|
- <el-option label="Long1" value="Long1" />
|
|
|
- <el-option label="Long2" value="Long2" />
|
|
|
- <el-option label="Long3" value="Long3" />
|
|
|
- <el-option label="Long4" value="Long4" />
|
|
|
+ <el-form-item label="异常处理" prop="abnormalHandleType">
|
|
|
+ <el-select v-model="formData.data.abnormalHandleType" style="width: 100%;" >
|
|
|
+ <el-option v-for="item in abnormalHandleTypeChileDict" :key="item.value" :label="item.label" :value="item.value"/>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
+
|
|
|
+
|
|
|
</el-form>
|
|
|
- <div style="margin-top: 20px;height: 250px;display: flex;justify-content: center;
|
|
|
- align-items: center; " v-if="stepsActiveindex == 3">
|
|
|
- <span>请确认无误后,点击确定</span>
|
|
|
- </div>
|
|
|
+ <el-form class="stepsActive2" :model="formData.data" style="margin-top: 20px;height: auto" ref="submitform2" :rules="rules" label-position="top" label-width="100px" v-if="stepsActiveindex == 2">
|
|
|
+
|
|
|
+
|
|
|
+ <el-form-item label="出库仓库" prop="reduceWarehouseId" v-if="reduceFlag">
|
|
|
+ <el-select v-model="formData.data.reduceWarehouseId" style="width: 100%;" @change="(e)=>getProductList(e,2)">
|
|
|
+ <el-option v-for="item in warehouseList" :key="item.value" :label="item.label" :value="item.value"/>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="出库商品" prop="reduceProductId" v-if="reduceFlag">
|
|
|
+ <el-select v-model="formData.data.reduceProductId" filterable style="width: 100%;">
|
|
|
+ <el-option v-for="item in reduceProductList" :key="item.value" :label="item.label" :value="item.value"/>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="出库商品数量" prop="reduceQuantity" v-if="reduceFlag">
|
|
|
+ <el-input v-model="formData.data.reduceQuantity" disabled placeholder="请输入出库商品数量" oninput="value=value.replace(/[^\d.]/g,'')"/>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+
|
|
|
+ <el-form-item label="入库仓库" prop="addWarehouseId" v-if="addFlag">
|
|
|
+ <el-select v-model="formData.data.addWarehouseId" style="width: 100%;" @change="(e)=>getProductList(e,1)">
|
|
|
+ <el-option v-for="item in warehouseList" :key="item.value" :label="item.label" :value="item.value"/>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="入库商品" prop="addProductId" v-if="addFlag">
|
|
|
+ <el-select v-model="formData.data.addProductId" filterable style="width: 100%;">
|
|
|
+ <el-option v-for="item in addProductList" :key="item.value" :label="item.label" :value="item.value"/>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="入库商品数量" prop="addQuantity" v-if="addFlag">
|
|
|
+ <el-input v-model="formData.data.addQuantity" disabled placeholder="请输入出库商品数量" oninput="value=value.replace(/[^\d.]/g,'')"/>
|
|
|
+ </el-form-item>
|
|
|
|
|
|
|
|
|
+ <el-form-item label="快递单号" prop="expressNo" v-if="deliveryFlag">
|
|
|
+ <el-input v-model="formData.data.expressNo" placeholder="请输入快递单号" oninput="value=value.replace(/[^\d.]/g,'')"/>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="备注" prop="remark" v-if="remarkFlag">
|
|
|
+ <el-input type="textarea" :rows="3" v-model="formData.data.remark" placeholder="请输入备注" oninput="value=value.replace(/[^\d.]/g,'')"/>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <span style="color: red" v-if="tipsFlag">*请到京东平台补单</span>
|
|
|
+ </el-form>
|
|
|
+
|
|
|
<template #footer>
|
|
|
<el-divider></el-divider>
|
|
|
- <el-button @click="back" v-if="stepsActiveindex > 1 " size="large">上一步</el-button>
|
|
|
- <el-button @click="next" v-if="stepsActiveindex < 3 " size="large">下一步</el-button>
|
|
|
- <el-button @click="dialogVisible = false" v-if="stepsActiveindex ==3" size="large">确定</el-button>
|
|
|
+ <el-button @click="back" v-if="stepsActiveindex > 1 " size="large" :loading="submitLoading">上一步</el-button>
|
|
|
+ <el-button @click="next" v-if="stepsActiveindex < 2 " size="large" :loading="submitLoading">下一步</el-button>
|
|
|
+ <el-button @click="submit" v-if="stepsActiveindex ==2" size="large" :loading="submitLoading">确定</el-button>
|
|
|
</template>
|
|
|
</el-dialog>
|
|
|
|
|
@@ -138,9 +140,53 @@ const sourceList = ref({
|
|
|
},
|
|
|
});
|
|
|
|
|
|
+const warehouseList = ref([])
|
|
|
+const reduceProductList = ref([])
|
|
|
+const addProductList = ref([])
|
|
|
+
|
|
|
+
|
|
|
+const abnormalHandleTypeDict = ref([])
|
|
|
+const abnormalHandleTypeChileDict = ref([])
|
|
|
+
|
|
|
+const abnormalStatusDictAll = ref([
|
|
|
+ {value: '10',label: '仓库多发',chile:[{value: '101',label: '补单(扣库存)'}]},
|
|
|
+ {value: '20',label: '仓库已发',chile:[{ value: '201',label: '报损'},
|
|
|
+ { value: '202',label: '补单(不扣库存)'},
|
|
|
+ { value: '203',label: '索赔理赔'}]},
|
|
|
+ {value: '30',label: '仓库少发',chile:[{ value: '301',label: '退回库存'}]},
|
|
|
+ {value: '40',label: '仓库发错货物',chile:[{ value: '401',label: '货物退回'},
|
|
|
+ { value: '402',label: '补单'},
|
|
|
+ { value: '403',label: '报损'}]},
|
|
|
+ {value: '50',label: '条码错误',chile:[{ value: '501',label: '货物退回'},
|
|
|
+ { value: '502',label: '补单'},
|
|
|
+ { value: '503',label: '报损'}]}
|
|
|
+])
|
|
|
+
|
|
|
+const treeChange = (e) => {
|
|
|
+ formData.data.abnormalHandleType = ""
|
|
|
+
|
|
|
+ const abnormalStatusDict = abnormalStatusDictAll.value.filter(x=> {
|
|
|
+ return x.value == e
|
|
|
+ });
|
|
|
+ abnormalHandleTypeChileDict.value = abnormalStatusDict[0].chile
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
let rules = ref({
|
|
|
+ abnormalStatus: [{ required: true, message: "请选择异常状态", trigger: "change" }],
|
|
|
+ exHandle: [{ required: true, message: "请选择异常处理", trigger: "change" }],
|
|
|
|
|
|
- confirmNum: [{ required: true, message: "请输入确认数量", trigger: "blur" }],
|
|
|
+ addWarehouseId: [{ required: true, message: "请选择入库仓库", trigger: "change" }],
|
|
|
+ addProductId: [{ required: true, message: "请选择入库商品", trigger: "change" }],
|
|
|
+ addQuantity: [{ required: true, message: "请填写入库数量", trigger: "blur" }],
|
|
|
+
|
|
|
+ reduceWarehouseId: [{ required: true, message: "请选择出库仓库", trigger: "change" }],
|
|
|
+ reduceProductId: [{ required: true, message: "请选择出库商品", trigger: "change" }],
|
|
|
+ reduceQuantity: [{ required: true, message: "请填写出库数量", trigger: "blur" }],
|
|
|
+
|
|
|
+ expressNo: [{ required: true, message: "请填写快递单号", trigger: "blur" }],
|
|
|
+ remark: [{ required: true, message: "请填写快递单号", trigger: "blur" }],
|
|
|
});
|
|
|
|
|
|
const queryDialogVisible = ref(false);
|
|
@@ -302,7 +348,7 @@ const config = computed(() => {
|
|
|
},
|
|
|
renderHTML(row) {
|
|
|
return [
|
|
|
- row.businessStatus !== 0
|
|
|
+ row.handleStatus !== 0
|
|
|
? {
|
|
|
attrs: {
|
|
|
label: "处理",
|
|
@@ -340,26 +386,45 @@ const formOption = reactive({
|
|
|
rules: [],
|
|
|
});
|
|
|
const byform = ref(null);
|
|
|
+const submitform = ref(null);
|
|
|
+const submitform2 = ref(null);
|
|
|
+
|
|
|
+
|
|
|
|
|
|
const getDictlist = async () => {
|
|
|
- proxy
|
|
|
- .getDictOne(["delivery_center", "confirmState", "OrderState"])
|
|
|
- .then((res) => {
|
|
|
- deliveryCenter.value = res["delivery_center"].map((x) => ({
|
|
|
- label: x.dictValue,
|
|
|
- value: x.dictKey,
|
|
|
- }));
|
|
|
- confirmState.value = res["confirmState"].map((x) => ({
|
|
|
- label: x.dictValue,
|
|
|
- value: x.dictKey,
|
|
|
- }));
|
|
|
- orderState.value = res["OrderState"].map((x) => ({
|
|
|
- label: x.dictValue,
|
|
|
- value: x.dictKey,
|
|
|
- }));
|
|
|
- });
|
|
|
+ proxy.post("/warehouse/page", { pageNum: 1, pageSize: 999 }).then((res) => {
|
|
|
+ if (res.rows && res.rows.length > 0) {
|
|
|
+ warehouseList.value = res.rows.map((item) => {
|
|
|
+ return {
|
|
|
+ label: item.name,
|
|
|
+ value: item.id,
|
|
|
+ };
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
};
|
|
|
|
|
|
+const getProductList = async (e,type) =>{
|
|
|
+ proxy.post("/stock/pageByWarehouse", { pageNum: 1, pageSize: 999 ,id:e}).then((res) => {
|
|
|
+ if (res.rows && res.rows.length > 0) {
|
|
|
+ const product = res.rows.map((item) => {
|
|
|
+ return {
|
|
|
+ label: item.productName,
|
|
|
+ value: item.id,
|
|
|
+ };
|
|
|
+ });
|
|
|
+ if (type == 1){
|
|
|
+ addProductList.value = product
|
|
|
+ } else {
|
|
|
+ reduceProductList.value = product
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
const getList = async (req) => {
|
|
|
sourceList.value.pagination = { ...sourceList.value.pagination, ...req };
|
|
|
loading.value = true;
|
|
@@ -412,15 +477,117 @@ const handleQuery = () => {
|
|
|
const openHandleAction = (row) => {
|
|
|
dialogVisible.value = true;
|
|
|
stepsActiveindex.value = 1
|
|
|
+
|
|
|
+ intiFlag()
|
|
|
+
|
|
|
+ let absoluteValue = Math.abs(Number(row.confirmNum) - Number(row.actualNum))
|
|
|
+
|
|
|
+ formData.data = {
|
|
|
+ id:row.id,
|
|
|
+ reduceQuantity : absoluteValue,
|
|
|
+ addQuantity : absoluteValue,
|
|
|
+ }
|
|
|
+
|
|
|
+ abnormalHandleTypeDict.value = abnormalStatusDictAll.value.map(x =>{
|
|
|
+ return {
|
|
|
+ label: x.label,
|
|
|
+ value: x.value,
|
|
|
+ };
|
|
|
+ })
|
|
|
+
|
|
|
+};
|
|
|
+/**
|
|
|
+ * 确认采购单状态
|
|
|
+ * @param row
|
|
|
+ */
|
|
|
+const closeHandleAction = () => {
|
|
|
+ dialogVisible.value = false;
|
|
|
+ stepsActiveindex.value = 1
|
|
|
};
|
|
|
|
|
|
-const next = () => {
|
|
|
+const tipsFlag = ref(false)
|
|
|
+const reduceFlag = ref(false)
|
|
|
+const addFlag = ref(false)
|
|
|
+const remarkFlag = ref(false)
|
|
|
+const deliveryFlag = ref(false)
|
|
|
+
|
|
|
+const intiFlag = () => {
|
|
|
+ tipsFlag.value = false
|
|
|
+ addFlag.value = false
|
|
|
+ reduceFlag.value = false
|
|
|
+ remarkFlag.value = false
|
|
|
+ deliveryFlag.value = false
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+const next = async () => {
|
|
|
+ let flag = await submitform.value.validate();
|
|
|
+ const type = formData.data.abnormalHandleType
|
|
|
+
|
|
|
+ intiFlag()
|
|
|
+
|
|
|
+ //判断 出库
|
|
|
+ if (['101','402','403'].indexOf(type)>-1){
|
|
|
+ reduceFlag.value = true
|
|
|
+ }
|
|
|
+ //判断 入库
|
|
|
+ if (['301','401','402','403','501'].indexOf(type)>-1){
|
|
|
+ addFlag.value = true
|
|
|
+ }
|
|
|
+
|
|
|
+ //判断 备注
|
|
|
+ if (['201','203','403','503'].indexOf(type)>-1){
|
|
|
+ remarkFlag.value = true
|
|
|
+ }
|
|
|
+
|
|
|
+ //判断 快递
|
|
|
+ if (['401','501'].indexOf(type)>-1){
|
|
|
+ deliveryFlag.value = true
|
|
|
+ }
|
|
|
+
|
|
|
+ //判断 提示
|
|
|
+ if (['101','202','402','502'].indexOf(type)>-1){
|
|
|
+ tipsFlag.value = true
|
|
|
+ }
|
|
|
+
|
|
|
stepsActiveindex.value++
|
|
|
}
|
|
|
const back = () => {
|
|
|
stepsActiveindex.value--
|
|
|
}
|
|
|
|
|
|
+const submit = async () => {
|
|
|
+ let flag = await submitform2.value.validate();
|
|
|
+ if (flag){
|
|
|
+ ElMessageBox.confirm("是否确认当前采购单状态?", "提示", {
|
|
|
+ confirmButtonText: "确定",
|
|
|
+ cancelButtonText: "取消",
|
|
|
+ type: "warning",
|
|
|
+ }).then(() => {
|
|
|
+ submitLoading.value = true;
|
|
|
+
|
|
|
+
|
|
|
+ proxy.post("/jdOrderEx/dealEx", formData.data).then(
|
|
|
+ () => {
|
|
|
+ ElMessage({
|
|
|
+ message: "处理成功",
|
|
|
+ type: "success",
|
|
|
+ });
|
|
|
+ dialogVisible.value = false;
|
|
|
+ submitLoading.value = false;
|
|
|
+ getList();
|
|
|
+ },
|
|
|
+ (err) => {
|
|
|
+ console.log(err);
|
|
|
+ submitLoading.value = false;
|
|
|
+ }
|
|
|
+ );
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
getDictlist();
|
|
|
getList();
|
|
|
</script>
|