소스 검색

京东异常采购单明细
1、异常处理弹框
2、提交异常处理

41235 1 년 전
부모
커밋
7422fa5a14
1개의 변경된 파일239개의 추가작업 그리고 72개의 파일을 삭제
  1. 239 72
      src/views/WDLY/jd/abnormalDetails/index.vue

+ 239 - 72
src/views/WDLY/jd/abnormalDetails/index.vue

@@ -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>