浏览代码

新增供应商调拨

lichao 3 年之前
父节点
当前提交
b0b6fb5b5c

+ 61 - 0
src/api/dealer/allocation.js

@@ -0,0 +1,61 @@
+import request from '@/router/axios';
+
+// 列表查询
+export function getList(data) {
+  return request({
+    url: '/api/blade-deliver-goods/allot/list',
+    method: 'get',
+    params: data
+  })
+}
+// 列表删除
+export function deleteList(data) {
+  return request({
+    url: '/api/blade-deliver-goods/allot/update',
+    method: 'post',
+    data: {
+      id:data
+    }
+  })
+}
+//详情
+export function dataDetail(data) {
+  return request({
+    url: '/api/blade-deliver-goods/allot/detail?id='+data,
+    method: 'get'
+  })
+}
+//保存&&修改
+export function typeSave(data) {
+  return request({
+    url: '/api/blade-deliver-goods/allot/submit',
+    method: 'post',
+    data: data
+  })
+}
+//明细删除
+export function removeGoods(data) {
+  return request({
+    url: '/api/blade-deliver-goods/deliveryitems/update',
+    method: 'post',
+    data: {
+      id:data
+    }
+  })
+}
+//确认调拨
+export function confirmAllot(data) {
+  return request({
+    url: '/api/blade-deliver-goods/allot/affirmAllot',
+    method: 'post',
+    data
+  })
+}
+//撤销调拨
+export function repealAllot(data) {
+  return request({
+    url: '/api/blade-deliver-goods/allot/repealAllot',
+    method: 'post',
+    data
+  })
+}

+ 10 - 12
src/views/dealer/allocation/config/customerContact.json

@@ -15,12 +15,17 @@
   "summaryText": "合计",
   "sumColumnList": [
     {
-      "name": "orderQuantity",
+      "name": "inventoryNumber",
       "type": "sum",
       "decimals": 0
     },
     {
-      "name": "amount",
+      "name": "actualQuantity",
+      "type": "sum",
+      "decimals": 0
+    },
+    {
+      "name": "deliveryAmount",
       "type": "sum"
     }
   ],
@@ -76,23 +81,16 @@
     },
     {
       "label": "结余库存",
-      "prop": "balance",
+      "prop": "inventoryNumber",
       "index": 8,
       "width": 140,
       "overHidden": true
     },
     {
       "label": "调拨件数",
-      "prop": "orderQuantity",
-      "index": 9,
-      "width": 140,
-      "overHidden": true
-    },
-    {
-      "label": "金额",
-      "prop": "amount",
+      "prop": "actualQuantity",
       "index": 10,
-      "width": 100,
+      "width": 140,
       "overHidden": true
     },
     {

+ 7 - 7
src/views/dealer/allocation/config/mainList.json

@@ -28,28 +28,28 @@
     },
     {
       "label": "原仓库",
-      "prop": "origWarehouse",
+      "prop": "storageName",
       "overHidden": true,
       "minWidth": 120,
       "search": true
     },
     {
-      "label": "仓库",
-      "prop": "warehouse",
+      "label": "调拨仓库",
+      "prop": "allotStorageName",
       "overHidden": true,
       "minWidth": 120,
       "search": true
     },
     {
       "label": "数量",
-      "prop": "quantity",
+      "prop": "totalQuantity",
       "overHidden": true,
       "minWidth": 120,
       "search": false
     },
     {
       "label": "金额",
-      "prop": "amount",
+      "prop": "deliveryAmount",
       "overHidden": true,
       "minWidth": 120,
       "search": false
@@ -68,7 +68,7 @@
     },
     {
       "label": "仓管员",
-      "prop": "keeper",
+      "prop": "freightUser",
       "overHidden": true,
       "minWidth": 120,
       "search": false
@@ -82,7 +82,7 @@
     },
     {
       "label": "制单人",
-      "prop": "createName",
+      "prop": "createUserName",
       "overHidden": true,
       "minWidth": 120,
       "search": false

+ 172 - 114
src/views/dealer/allocation/detail.vue

@@ -32,14 +32,22 @@
           type="primary"
           size="small"
         >审核进度</el-button>
-<!--        <el-button-->
-<!--          type="primary"-->
-<!--          v-if="!checkDisabled"-->
-<!--          :disabled="!form.id || disabled"-->
-<!--          size="small"-->
-<!--          @click="pleaseCheck"-->
-<!--          :loading="btnLoading"-->
-<!--        >请核</el-button>-->
+        <el-button
+          v-if="confirmDisabled"
+          :disabled="disabled"
+          size="small"
+          type="primary"
+          @click="repealAllot"
+          :loading="btnLoading"
+        >撤销调拨</el-button>
+        <el-button
+          v-if="!confirmDisabled"
+          :disabled="!form.id || disabled"
+          size="small"
+          type="primary"
+          @click="confirmAllot"
+          :loading="btnLoading"
+        >确认调拨</el-button>
         <el-button
           type="success"
           :disabled="!form.id"
@@ -72,8 +80,6 @@
               clearable
               size="small"
               placeholder="请选择"
-              @change="userHandle"
-              @clear="form.userName == null"
               disabled
             >
               <el-option
@@ -84,13 +90,13 @@
               ></el-option>
             </el-select>
           </template>
-          <template slot="deptId">
+          <template slot="createDept">
             <avue-input-tree
               leaf-only
               style="width: 100%;"
               size="small"
               :props="{ label: 'title' }"
-              v-model="form.deptId"
+              v-model="form.createDept"
               placeholder=" "
               type="tree"
               :dic="dic"
@@ -98,15 +104,19 @@
               disabled=""
             ></avue-input-tree>
           </template>
-          <template slot="origWarehouse">
+          <template slot="storageId">
             <warehouse-select
-              v-model="form.origWarehouse"
-              :configuration="configurationWarehouse"/>
+              v-model="form.storageId"
+              :configuration="configurationWarehouse"
+              :disabled="disabled || confirmDisabled"
+            />
           </template>
-          <template slot="warehouse">
+          <template slot="allotStorageId">
             <warehouse-select
-              v-model="form.warehouse"
-              :configuration="configurationWarehouse"/>
+              v-model="form.allotStorageId"
+              :configuration="configurationWarehouse"
+              :disabled="disabled || confirmDisabled"
+            />
           </template>
         </avue-form>
       </basic-container>
@@ -126,7 +136,7 @@
               icon="el-icon-plus"
               size="small"
               @click.stop="newDetails"
-              :disabled="disabled || checkDisabled"
+              :disabled="disabled || confirmDisabled"
             >录入明细</el-button>
             <el-button
               type="info"
@@ -141,14 +151,14 @@
               icon="el-icon-edit"
               type="text"
               @click="rowCell(row, index)"
-              :disabled="disabled || checkDisabled"
+              :disabled="disabled || confirmDisabled"
             >{{ row.$cellEdit ? "保存" : "修改" }}</el-button>
             <el-button
               size="small"
               icon="el-icon-delete"
               type="text"
               @click="rowDel(row, index)"
-              :disabled="disabled || checkDisabled"
+              :disabled="disabled || confirmDisabled"
             >删除</el-button>
           </template>
           <template slot="code" slot-scope="{ row, index }">
@@ -203,16 +213,28 @@
             </span>
             <span v-else> {{ row.cname }}</span>
           </template>
-          <template slot="orderQuantity" slot-scope="{ row, index }">
+          <template slot="actualQuantity" slot-scope="{ row, index }">
             <el-input-number
               v-if="row.$cellEdit"
-              v-model="row.orderQuantity"
+              v-model="row.actualQuantity"
               size="small"
               :controls="false"
               :precision="0"
               style="width: 100%"
+              @change="actualQuantityChange(row)"
+            />
+            <span v-else>{{ row.actualQuantity | IntegerFormat }}</span>
+          </template>
+          <template slot="deliveryAmount" slot-scope="{ row, index }">
+            <el-input-number
+              v-if="row.$cellEdit"
+              v-model="row.deliveryAmount"
+              size="small"
+              :controls="false"
+              :precision="2"
+              style="width: 100%"
             />
-            <span v-else>{{ row.orderQuantity | IntegerFormat }}</span>
+            <span v-else>{{ row.deliveryAmount | decimalFormat }}</span>
           </template>
         </avue-crud>
       </basic-container>
@@ -363,14 +385,14 @@ import { gainUser } from "@/api/basicData/customerInquiry";
 import {getUserInfo} from "@/api/system/user";
 import {getDeptTree} from "@/api/system/dept";
 import { getCurrentDate } from "@/util/date";
-import {dataDetail, typeSave, removeGoods, pleaseCheck} from "@/api/standAlone/reimbursement";
+import {dataDetail, typeSave, removeGoods, confirmAllot, repealAllot} from "@/api/dealer/allocation";
 import { contrastObj, contrastList } from "@/util/contrastData";
 import check from "@/components/check/check";
 import checkSchedule from "@/components/check/checkSchedule";
 import reportDialog from "@/components/report-dialog/main";
 import {getDeptLazyTree,
   getGoods,} from "@/api/basicData/customerInquiry";
-
+import {selectGoodsNum} from "@/api/basicData/inventoryAccount";
 
 export default {
   name: "detail",
@@ -389,14 +411,16 @@ export default {
       disabled: false,
       pageLoading: false,
       btnLoading: false,
-      form: {},
+      form: {
+        deliveryStatus: '录入'
+      },
       option: {
         menuBtn: false,
         labelWidth: 100,
         column: [
           {
             label: "原仓库",
-            prop: "origWarehouse",
+            prop: "storageId",
             rules: [
               {
                 required: true,
@@ -408,8 +432,8 @@ export default {
             slot: true,
           },
           {
-            label: "仓库",
-            prop: "warehouse",
+            label: "仓库",
+            prop: "allotStorageId",
             rules: [
               {
                 required: true,
@@ -437,7 +461,7 @@ export default {
           },
           {
             label: "仓管员",
-            prop: "keeper",
+            prop: "freightUser",
             rules: [
               {
                 required: true,
@@ -457,7 +481,7 @@ export default {
           },
           {
             label: "制单部门",
-            prop: "deptId",
+            prop: "createDept",
             span: 8,
             slot: true,
             disabled: true
@@ -480,6 +504,13 @@ export default {
             disabled: true,
           },
           {
+            label: "单据状态",
+            prop: "deliveryStatus",
+            span: 8,
+            slot: true,
+            disabled: true,
+          },
+          {
             label: "备注",
             prop: "remarks",
             type: "textarea",
@@ -538,7 +569,6 @@ export default {
       },
       oldForm: {},
       oldDataList: [],
-      checkDisabled: false, // 审核状态
       checker: false,
       checkId: '',
       batchNo:'',
@@ -561,6 +591,7 @@ export default {
         currentPage: 1,
         total: 0
       },
+      confirmDisabled: false, // 调拨状态禁用
     }
   },
   async created() {
@@ -577,15 +608,6 @@ export default {
     gainUser().then(res => {
       this.userList = res.data.data;
     });
-    getUserInfo().then(res => {
-      this.$set(this.form, 'createUser', res.data.data.id);
-      this.$set(this.form, 'userName', res.data.data.realName);
-      this.$set(this.form, 'deptId', res.data.data.deptId);
-      this.$set(this.form, 'deptName', res.data.data.deptName);
-      this.$set(this.form, 'postId', res.data.data.postId.split(',')[0]);
-      this.$set(this.form, 'postName', res.data.data.postName.split(',')[0]);
-      this.loginUser = res.data.data.realName;
-    })
     getDeptTree().then(res => {
       this.dic = res.data.data
     })
@@ -614,6 +636,18 @@ export default {
       this.checker = true;
       this.batchNo = this.detailData.check.batchNo
       this.queryData(this.detailData.id);
+    } else {
+      getUserInfo().then(res => {
+        this.$set(this.form, 'createUser', res.data.data.id);
+        this.$set(this.form, 'userName', res.data.data.realName);
+        this.$set(this.form, 'createDept', res.data.data.deptId);
+        this.$set(this.form, 'deptName', res.data.data.deptName);
+        this.$set(this.form, 'postId', res.data.data.postId.split(',')[0]);
+        this.$set(this.form, 'postName', res.data.data.postName.split(',')[0]);
+        this.loginUser = res.data.data.realName;
+        this.oldForm = Object.assign({}, this.form);
+        this.oldDataList = this.deepClone(this.dataList);
+      })
     }
   },
   filters: {
@@ -628,13 +662,13 @@ export default {
     // 查询
     queryData(id) {
       this.pageLoading = true;
-      dataDetail({id: id}).then(res => {
+      dataDetail(id).then(res => {
         this.form = res.data.data;
-        this.dataList = this.form.itemList? this.form.itemList: [];
+        this.confirmDisabled = this.form.deliveryStatus === '确认调拨'? true: false;
+        this.dataList = this.form.deliveryItemsList? this.form.deliveryItemsList: [];
+        // delete this.form.deliveryItemsList;
         this.oldForm = {...this.form};
         this.oldDataList = [...this.dataList];
-        delete this.form.itemList;
-        this.checkDisabled = this.form.status > 0? true: false;
         if (this.form.status > 0) {
           this.option.column.map(e => {
             this.$set(e, 'disabled', true)
@@ -646,18 +680,20 @@ export default {
     },
     //返回列表
     backToList() {
-      this.$emit("goBack");
+      if (this.verification()) {
+        this.$emit("goBack");
+      }
     },
     // 编辑按钮触发
     openEdit() {
       this.disabled = false;
       this.option.column.map(e => {
-        if (this.checkDisabled) {
-          this.$set(e, 'disabled', true)
-        } else {
-          if (e.prop != 'serialNo') {
-            this.$set(e, 'disabled', false)
+        if (!this.confirmDisabled) {
+          if (e.prop != 'sysNo' && e.prop != 'createTime' && e.prop != 'deliveryStatus') {
+            this.$set(e, 'disabled', false);
           }
+        } else {
+          this.$set(e, 'disabled', true);
         }
       })
     },
@@ -670,14 +706,22 @@ export default {
       this.$refs["form"].validate((valid, done) => {
         done();
         if (valid) {
-          if (this.form.origWarehouse == this.form.warehouse) {
-            return this.$message.error('原仓库与调拨仓库不能一致')
+          if (this.form.storageId == this.form.allotStorageId) {
+            return this.$message.error('原仓库与仓库不能一致')
           }
-          this.$set(this.form, 'itemList', this.dataList)
+          let totalQuantity = 0; //总数量
+          let deliveryAmount = 0; //总金额
+          this.dataList.forEach(item => {
+            deliveryAmount += Number(item.deliveryAmount);
+            totalQuantity += Number(item.actualQuantity);
+          })
+          this.$set(this.form, 'deliveryAmount', deliveryAmount);
+          this.$set(this.form, 'totalQuantity', totalQuantity);
+          this.$set(this.form, 'deliveryItemsList', this.dataList)
           this.btnLoading = true;
           typeSave(this.form).then(res => {
             this.$message({type: "success", message: this.form.id ? "修改成功!" : "新增成功!"});
-            this.queryData(res.data.data);
+            this.queryData(res.data.data.id);
           }).finally(() => {
             this.btnLoading = false;
           })
@@ -760,9 +804,6 @@ export default {
       });
     },
     getKHData(row) {},
-    userHandle() {
-      this.form.userName = this.userList.find(item => item.id == this.form.createUser).realName;
-    },
     // 验证新旧值对比
     verification() {
       if (contrastObj(this.form, this.oldForm) ||
@@ -795,28 +836,6 @@ export default {
     choceScheduleFun(){
       this.checkScheduleDialog = false
     },
-    // 请核
-    pleaseCheck() {
-      if (this.verification()) {
-        const data = {
-          id : this.form.id,
-          checkType: 'fybx',
-          url: '/reimbursement/index',
-          pageStatus:"this.$store.getters.reimbursementStatus",
-          pageLabel:"报销",
-          checkFlag: 1,
-        }
-        this.btnLoading = true;
-        pleaseCheck(data).then(res => {
-          this.$message.success('请核成功')
-          this.queryData(this.form.id)
-        }).catch(() => {
-          this.$message.error('请核失败')
-        }).finally(() => {
-          this.btnLoading = false;
-        })
-      }
-    },
     // 报表
     openReport() {
       this.switchDialog =! this.switchDialog;
@@ -835,6 +854,13 @@ export default {
     codeChange(row) {
       this.goodsoptions.forEach(async e => {
         if (e.code == row.code) {
+          await selectGoodsNum({
+            goodsId: e.id,
+            tradeType: 'JXS',
+            storageId: this.form.storageId
+          }).then(res => {
+            row.inventoryNumber = res.data.data;
+          })
           row.itemId = e.id;
           row.storageQuantity =  e.storageQuantity;
           row.cname = e.cname;
@@ -847,19 +873,20 @@ export default {
           row.typeno = e.typeno;
           row.unit = e.unit;
           row.size = e.size;
-          row.arr = e.arr;
           row.priceCategory = e.goodsTypeName;
-          row.purchaseAmount = e.purchaseAmount;
-          row.batch = e.batch;
-          row.newJob = e.newJob;
-          row.newDate = e.newDate;
-          row.price = e.price;
         }
       });
     },
     cnameChange(row) {
       this.goodsoptions.forEach(async e => {
         if (e.id == row.itemId) {
+          await selectGoodsNum({
+            goodsId: e.id,
+            tradeType: 'JXS',
+            storageId: this.form.storageId
+          }).then(res => {
+            row.inventoryNumber = res.data.data;
+          })
           row.storageQuantity =  e.storageQuantity
           row.cname = e.cname;
           row.code = e.code;
@@ -871,13 +898,7 @@ export default {
           row.typeno = e.typeno;
           row.unit = e.unit;
           row.size = e.size;
-          row.arr = e.arr;
           row.priceCategory = e.goodsTypeName;
-          row.purchaseAmount = e.purchaseAmount;
-          row.batch = e.batch;
-          row.newDate = e.newDate;
-          row.newJob = e.newJob;
-          row.price = e.price;
         }
       });
     },
@@ -888,6 +909,13 @@ export default {
         } else {
           this.selectionList.forEach(e => {
             this.dataList.forEach(async (item, index) => {
+              await selectGoodsNum({
+                goodsId: e.id,
+                tradeType: 'JXS',
+                storageId: this.form.storageId
+              }).then(res => {
+                e.inventoryNumber = res.data.data;
+              })
               if (index == this.reData.index) {
                 item.itemId = e.id;
                 item.code = e.code;
@@ -901,11 +929,7 @@ export default {
                 item.unit = e.unit;
                 item.size = e.size;
                 item.priceCategory = e.goodsTypeName;
-                item.purchaseAmount = e.purchaseAmount;
-                item.batch = e.batch;
-                item.newDate = e.newDate;
-                item.newJob = e.newJob;
-                item.price = e.price;
+                item.inventoryNumber = e.inventoryNumber;
                 item.$cellEdit = true;
               }
             });
@@ -914,6 +938,13 @@ export default {
       } else {
         if (this.goodsListSave.length > 0) { // 暂存的有数据
           this.goodsListSave.forEach(async e => {
+            await selectGoodsNum({
+              goodsId: e.id,
+              tradeType: 'JXS',
+              storageId: this.form.storageId
+            }).then(res => {
+              e.inventoryNumber = res.data.data;
+            })
             this.dataList.push({
               itemId: e.id,
               code: e.code,
@@ -927,19 +958,22 @@ export default {
               unit: e.unit,
               size: e.size,
               price: e.price,
-              amount: 0,
-              orderQuantity: 0,
+              deliveryAmount: 0,
+              actualQuantity: 0,
               storageQuantity: e.storageQuantity,
-              purchaseAmount: e.purchaseAmount,
-              batch: e.batch,
-              arr: e.arr,
-              newJob:e.newJob,
-              newDate: e.newDate,
+              inventoryNumber: e.inventoryNumber,
               $cellEdit: true
             });
           });
         } else {
           this.selectionList.forEach(async e => {
+            await selectGoodsNum({
+              goodsId: e.id,
+              tradeType: 'JXS',
+              storageId: this.form.storageId
+            }).then(res => {
+              e.inventoryNumber = res.data.data;
+            })
             this.dataList.push({
               itemId: e.id,
               code: e.code,
@@ -952,15 +986,9 @@ export default {
               corpName: e.corpName,
               unit: e.unit,
               size: e.size,
-              amount: 0,
-              orderQuantity: 0,
-              storageQuantity: e.storageQuantity,
-              purchaseAmount: e.purchaseAmount,
-              batch: e.batch,
-              arr: e.arr,
-              newJob: e.newJob,
-              newDate: e.newDate,
-              price: e.price,
+              deliveryAmount: 0,
+              actualQuantity: 0,
+              inventoryNumber: e.inventoryNumber,
               $cellEdit: true
             });
           });
@@ -1057,6 +1085,36 @@ export default {
     importStagList(row, index) {
       this.goodsListSave.push(row);
     },
+    actualQuantityChange(row) {
+      if (Number(row.actualQuantity) > Number(row.inventoryNumber)) {
+        this.$set(row, 'actualQuantity', '0');
+        this.$message.error('调拨件数不能超过结余库存')
+      }
+    },
+    // 确认调拨
+    confirmAllot() {
+      if (this.verification()) {
+        this.btnLoading = true;
+        this.$set(this.form, 'deliveryItemsList', this.dataList);
+        confirmAllot(this.form).then(res => {
+          this.queryData(this.form.id);
+          this.$message.success('调拨成功');
+        }).finally(() => {
+          this.btnLoading = false;
+        })
+      }
+    },
+    // 撤销调拨
+    repealAllot() {
+      this.btnLoading = true;
+      this.$set(this.form, 'deliveryItemsList', this.dataList);
+      repealAllot(this.form).then(res => {
+        this.queryData(this.form.id);
+        this.$message.success('撤销成功');
+      }).finally(() => {
+        this.btnLoading = false;
+      })
+    },
   },
 }
 </script>

+ 24 - 6
src/views/dealer/allocation/index.vue

@@ -42,10 +42,20 @@
             icon="el-icon-delete"
             size="small"
             @click.stop="rowDel(scope.row, scope.index)"
-            :disabled="scope.row.status == 3"
+            :disabled="scope.row.deliveryStatus === '确认调拨'"
           >删除
           </el-button>
         </template>
+        <template slot="storageNameSearch">
+          <warehouse-select
+            v-model="search.storageId"
+            :configuration="configurationWarehouse"/>
+        </template>
+        <template slot="allotStorageNameSearch">
+          <warehouse-select
+            v-model="search.allotStorageId"
+            :configuration="configurationWarehouse"/>
+        </template>
         <template slot-scope="scope" slot="sysNo">
           <span style="color: #409EFF;cursor: pointer" @click.stop="beforeOpenPage(scope.row,scope.index)">{{ scope.row.sysNo }}</span>
         </template>
@@ -64,7 +74,7 @@
 import option from "./config/mainList.json";
 import detailPage from "./detail";
 import { gainUser } from "@/api/basicData/customerInquiry";
-import {getList, deleteList} from "@/api/standAlone/reimbursement";
+import {getList, deleteList} from "@/api/dealer/allocation";
 
 export default {
   name: "index",
@@ -88,6 +98,14 @@ export default {
       selection: [],
       detailData: {},
       userOption: [],
+      // 仓库配置
+      configurationWarehouse: {
+        multipleChoices: false,
+        multiple: false,
+        collapseTags: false,
+        placeholder: "请点击右边按钮选择",
+        dicData: [],
+      },
     }
   },
   async created() {
@@ -147,14 +165,14 @@ export default {
         size: page.pageSize,
         current: page.currentPage,
       })
-      if (queryParams.claimDate && queryParams.claimDate.length > 0) {
+      if (queryParams.businessDate && queryParams.businessDate.length > 0) {
         queryParams = {
           ...queryParams,
-          beginClaimDate: queryParams.claimDate[0] + ' 00:00:00',
-          endClaimDate: queryParams.claimDate[1] + ' 23:59:59',
+          businessStartDate: queryParams.businessDate[0] + ' 00:00:00',
+          businessEndDate: queryParams.businessDate[1] + ' 23:59:59',
         }
       }
-      delete queryParams.claimDate;
+      delete queryParams.businessDate;
       this.loading = true;
       getList(queryParams).then(res => {
         this.dataList = res.data.data.records;