Browse Source

添加老库存出库菜单

lph 11 months ago
parent
commit
90849c0353

+ 9 - 0
zkqy-ui/src/api/tablelist/commonTable.js

@@ -353,6 +353,15 @@ export function noticeOutStorage(data) {
     //baseURL: process.env.VUE_APP_BASE_API1
     //baseURL: process.env.VUE_APP_BASE_API1
   })
   })
 }
 }
+// 销售出库  旧
+export function oldNoticeOutStorage(data) {
+  return request({
+    url: '/system/ProductInventory/oldNoticeOutStorage',
+    method: 'post',
+    data: data,
+    //baseURL: process.env.VUE_APP_BASE_API1
+  })
+}
 
 
 // 订单管理  打印出库单  获取详情接口
 // 订单管理  打印出库单  获取详情接口
 export function outboundOrderInfo(data) {
 export function outboundOrderInfo(data) {

+ 575 - 0
zkqy-ui/src/views/orderMange/oldOutStock/index.vue

@@ -0,0 +1,575 @@
+<template>
+  <el-card shadow="always" :body-style="{ padding: '10px' }">
+    <div class="app-container">
+      <el-row :gutter="10">
+        <el-col :span="10">
+          <div class="table-area">
+            <el-button
+              class="mb10"
+              type="success"
+              size="small"
+              @click="handleRefresh"
+              :icon="loading ? 'el-icon-loading' : 'el-icon-refresh'"
+              :disabled="loading"
+              >刷新
+            </el-button>
+
+            <el-table
+              :data="leftTableData"
+              border
+              stripe
+              @selection-change="handleSelectionChange"
+              @cell-click="cellClick"
+              highlight-current-row
+            >
+              <!-- <el-table-column type="selection" width="55" /> -->
+              <el-table-column type="index" label="序号" width="50" />
+              <el-table-column
+                align="center"
+                prop="customerName"
+                label="客户名称"
+              >
+              </el-table-column>
+              <el-table-column
+                align="center"
+                prop="noticeNumber"
+                label="通知单号"
+              >
+              </el-table-column>
+              <el-table-column
+                align="center"
+                prop="noticeDate"
+                label="开单日期"
+              >
+              </el-table-column>
+            </el-table></div
+        ></el-col>
+        <el-col :span="14">
+          <div class="form-area">
+            <el-row :gutter="20">
+              <el-form
+                :model="form"
+                ref="form"
+                label-width="80px"
+                :inline="true"
+                size="mini"
+                :rules="rules"
+              >
+                <el-col :span="16">
+                  <el-form-item label="通知单号" prop="noticeNumber">
+                    <div class="text-area">
+                      <span class="mr10">{{ form.noticeNumber }}</span>
+                      <span>{{ form.documentTypeName }}</span>
+                    </div>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="8">
+                  <el-form-item label="销售员" prop="salesman">
+                    {{ form.salesman }}
+                  </el-form-item>
+                </el-col>
+                <el-col :span="16">
+                  <el-form-item label="客户名称" prop="customerName">
+                    {{ form.customerName }}
+                  </el-form-item>
+                </el-col>
+                <el-col :span="8">
+                  <el-form-item label="售货单位" prop="sellingUnit">
+                    {{ form.sellingUnit }}
+                  </el-form-item>
+                </el-col>
+                <el-col :span="16">
+                  <el-form-item label="货车信息" prop="truckRegistration">
+                    {{ form.truckRegistration }}
+                  </el-form-item>
+                </el-col>
+                <el-col :span="8">
+                  <el-form-item label="发货员" prop="deliveryClerk">
+                    {{ form.deliveryClerk }}
+                  </el-form-item>
+                </el-col>
+                <el-col :span="24">
+                  <el-form-item label="备注" prop="dispatchNoteRemark">
+                    {{ form.dispatchNoteRemark }}
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item label="发货日期" prop="deliveryDate">
+                    <el-date-picker
+                      v-model="form.deliveryDate"
+                      type="date"
+                      size="mini"
+                      placeholder="选择日期"
+                    >
+                    </el-date-picker>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item label="发货仓库" prop="deliveryWarehouse">
+                    <el-select
+                      v-model="form.deliveryWarehouse"
+                      clearable
+                      filterable
+                    >
+                      <el-option
+                        v-for="item in warehouseList"
+                        :key="item.id"
+                        :label="item.warehouseName"
+                        :value="item.id"
+                      >
+                      </el-option>
+                    </el-select>
+                  </el-form-item>
+                </el-col>
+                <!-- <el-col :span="12">
+              <el-form-item label="调拨仓库" prop="transferWarehouse">
+                <el-select
+                  v-model="form.transferWarehouse"
+                  clearable
+                  filterable
+                >
+                  <el-option
+                    v-for="item in warehouseList"
+                    :key="item.id"
+                    :label="item.warehouseName"
+                    :value="item.id"
+                  >
+                  </el-option>
+                </el-select>
+              </el-form-item>
+            </el-col> -->
+                <el-col :span="24">
+                  <el-form-item>
+                    <el-button type="primary" @click="outStockHandler"
+                      >出库
+                    </el-button>
+                    <el-button @click="refreshHandler">刷新</el-button>
+                  </el-form-item>
+                </el-col>
+              </el-form>
+            </el-row>
+            <el-table
+              :data="saleProductInfoList"
+              border
+              stripe
+              :span-method="objectSpanMethod"
+              :row-class-name="tableRowClassName"
+            >
+              <el-table-column align="center" label="编码" prop="productCode">
+              </el-table-column>
+              <el-table-column align="center" label="品名" prop="productName">
+              </el-table-column>
+              <el-table-column
+                align="center"
+                label="规格"
+                prop="productSpecifications"
+              >
+              </el-table-column>
+              <el-table-column align="center" label="色泽" prop="productColor">
+              </el-table-column>
+              <el-table-column align="center" label="批号" prop="lotNum">
+              </el-table-column>
+              <el-table-column align="center" label="等级" prop="levels">
+              </el-table-column>
+              <el-table-column align="center" label="通知">
+                <el-table-column
+                  align="center"
+                  label="重量"
+                  prop="actualWeight"
+                >
+                </el-table-column>
+              </el-table-column>
+              <el-table-column align="center" label="实发">
+                <!-- <el-table-column
+                  align="center"
+                  label="总箱数"
+                  prop="coutBoxNum"
+                >
+                  <template slot-scope="scope">
+                    <el-input
+                      v-model="scope.row.coutBoxNum"
+                      size="mini"
+                      @input="iptChange"
+                    ></el-input>
+                  </template>
+                </el-table-column> -->
+                <el-table-column
+                  align="center"
+                  label="箱数"
+                  prop="oldActualBoxNum"
+                >
+                  <template slot-scope="scope">
+                    <el-input
+                      v-model="scope.row.oldActualBoxNum"
+                      size="mini"
+                      @input="iptChange"
+                    ></el-input>
+                  </template>
+                </el-table-column>
+                <!-- <el-table-column
+                  align="center"
+                  label="总重量"
+                  prop="coutweight"
+                >
+                  <template slot-scope="scope">
+                    <el-input
+                      v-model="scope.row.coutweight"
+                      size="mini"
+                      @input="iptChange"
+                    ></el-input>
+                  </template>
+                </el-table-column> -->
+                <el-table-column
+                  align="center"
+                  label="重量"
+                  prop="oldActualWeight"
+                >
+                  <template slot-scope="scope">
+                    <el-input
+                      v-model="scope.row.oldActualWeight"
+                      size="mini"
+                      @input="iptChange"
+                    ></el-input>
+                  </template>
+                </el-table-column>
+              </el-table-column>
+            </el-table>
+          </div>
+        </el-col>
+      </el-row>
+    </div>
+  </el-card>
+</template>
+
+<script>
+import {
+  productInvoiceList,
+  saleStorageDetails,
+  queryDropDownBoxData,
+  noticeOutStorage,
+  oldNoticeOutStorage,
+} from "@/api/tablelist/commonTable";
+import { mapState } from "vuex";
+
+export default {
+  name: "OutStock",
+  props: [],
+  dicts: ["billing_type", "document_type"],
+  components: {},
+  data() {
+    return {
+      spanArr: [], // 用于记录每个 productCode 的跨行信息
+      loading: false,
+      currentIndex: "",
+      form: {
+        noticeNumber: "", //通知单号
+        documentType: "", //通知单类型
+        documentTypeName: "",
+        salesman: "", //销售员
+        sellingUnit: "", //售货单位
+        truckRegistration: "", //货车信息
+        drawer: "", //开票员
+        deliveryClerk: "", // 发货员
+        dispatchNoteRemark: "", //备注
+        customerName: "", //客户名称
+        deliveryDate: new Date(), //发货日期
+        deliveryWarehouse: "", //发货仓库
+        transferWarehouse: "", //调拨仓库
+        id: "",
+      },
+      leftTableData: [],
+      warehouseList: [],
+      saleProductInfoList: [],
+      rules: {
+        deliveryDate: [
+          { required: true, message: "请选择发货日期", trigger: "change" },
+        ],
+        deliveryWarehouse: [
+          { required: true, message: "请选择发货仓库", trigger: "change" },
+        ],
+        transferWarehouse: [
+          { required: true, message: "请选择调拨仓库", trigger: "change" },
+        ],
+      },
+    };
+  },
+  methods: {
+    iptChange(value) {
+      console.log(value);
+      this.$forceUpdate(); //强制刷新
+    },
+    tableRowClassName({ row, rowIndex }) {
+      if (!row.actualWeight && row.actualWeight != 0) {
+        return "warning-row";
+      }
+    },
+    objectSpanMethod({ row, column, rowIndex, columnIndex }) {
+      // 重量
+      if (columnIndex === 6 || columnIndex === 7 || columnIndex === 9) {
+        const prevRow2 = this.saleProductInfoList[rowIndex - 1]; //上一行数据
+        let nextRow2 = this.saleProductInfoList[rowIndex + 1]; //下一行数据
+        // 当上一行的数据等于当前行数据时,当前行单元格隐藏
+        if (
+          prevRow2 &&
+          prevRow2.productCode == row.productCode &&
+          prevRow2.productColor == row.productColor
+        ) {
+          return { rowspan: 0, colspan: 0 };
+        } else {
+          // 反之,则循环判断若下一行数据等于当前行数据,则当前行开始进行合并单元格
+          let countRowspan2 = 1; //用于合并计数多少单元格
+          while (
+            nextRow2 &&
+            nextRow2.productCode == row.productCode &&
+            nextRow2.productColor == row.productColor
+          ) {
+            nextRow2 = this.saleProductInfoList[++countRowspan2 + rowIndex];
+          }
+          if (countRowspan2 > 1) {
+            // this.saleProductInfoList[rowIndex].coutBoxNum = 9;
+            return { rowspan: countRowspan2, colspan: 1 };
+          }
+        }
+      }
+    },
+    // 刷新回调
+    async handleRefresh() {
+      this.loading = true;
+      await this.initData();
+      await this.initWarehouse();
+      this.loading = false;
+    },
+    // 左侧表格点击回调
+    cellClick(row, column, cell, event) {
+      this.currentIndex = this.leftTableData.findIndex(
+        (item) => item.id == row.id
+      );
+      this.initFormData();
+    },
+    // 刷新回调
+    refreshHandler() {
+      this.initFormData();
+    },
+    // 出库回调
+    outStockHandler() {
+      this.$refs.form.validate(async (valid) => {
+        if (valid) {
+          this.$confirm("是否确认出库?", "提示", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning",
+          })
+            .then(async () => {
+              let payLoad = { ...this.form };
+              payLoad.oldProductInvoiceList = this.saleProductInfoList;
+              payLoad.transferWarehouse = payLoad.deliveryWarehouse;
+              if (!this.form.id) {
+                return;
+              }
+              delete payLoad.documentTypeName;
+              let res = await oldNoticeOutStorage(payLoad);
+              if (res.code == 200) {
+                this.$message.success("出库成功");
+                this.currentIndex = 0;
+                await this.initData();
+                this.refreshHandler();
+              } else {
+                this.$message.error(res.msg);
+              }
+            })
+            .catch(() => {
+              this.$message({
+                type: "info",
+                message: "已取消出库",
+              });
+            });
+        } else {
+          return false;
+        }
+      });
+    },
+    handleSelectionChange() {},
+    // 初始化仓库选项数据
+    async initWarehouse() {
+      try {
+        let payload = [
+          {
+            basicMap: {
+              tableName: "warehouse",
+            },
+            conditionMap: {
+              warehouse_type: ["1"],
+            },
+          },
+        ];
+        let res = await queryDropDownBoxData(payload);
+        if (res.code == 200) {
+          this.warehouseList = res.data.resultMap?.warehouse || [];
+        } else {
+          throw new Error(res.msg);
+        }
+      } catch (error) {}
+    },
+    // 初始化数据
+    async initData() {
+      try {
+        let payload = {
+          isEnablePaging: false,
+          status: 1,
+        };
+        let res = await productInvoiceList(payload);
+        if (res.code == 200) {
+          this.leftTableData = res.rows;
+          if (this.leftTableData.length > 0) {
+            this.currentIndex = 0;
+            this.initFormData();
+          }
+        } else {
+          throw new Error(res.msg);
+        }
+      } catch (error) {}
+    },
+    // 根据字典获取文件类型
+    getdocumentTypeName(value) {
+      return (
+        this.dict.type.document_type.find((item) => {
+          return item.value === value;
+        })?.label || ""
+      );
+    },
+    // 加载表单数据
+    async initFormData() {
+      // let { id, customerName } = this.leftTableData[this.currentIndex];
+      let id = false,
+        customerName;
+      if (this.leftTableData[this.currentIndex]) {
+        id = this.leftTableData[this.currentIndex].id;
+        customerName = this.leftTableData[this.currentIndex].customerName;
+      }
+      if (!id) {
+        //重置表单数据
+        Object.assign(this.form, {
+          noticeNumber: "", //通知单号
+          documentType: "", //通知单类型
+          documentTypeName: "", //通知单类型  名
+          salesman: "", //销售员
+          sellingUnit: "", //售货单位
+          truckRegistration: "", //货车信息
+          dispatchNoteRemark: "", //备注
+          customerName: "", //客户名称
+          deliveryClerk: "", //发货员
+          id: "",
+        });
+        return;
+      }
+      try {
+        let res = await saleStorageDetails(id);
+        if (res.code == 200) {
+          let {
+            noticeNumber, //通知单号
+            documentType, //通知单类型
+            salesman, //销售员
+            sellingUnit, //售货单位
+            truckRegistration, //货车信息
+            drawer, //开票员
+            dispatchNoteRemark, //备注
+            saleProductInfoList, //产品信息
+            id,
+          } = res.data;
+          let documentTypeName = this.getdocumentTypeName(documentType);
+          // let list = saleProductInfoList.sort( (a,b)=>{
+          //    let {productColor : colorA,productCode :codeA}=a
+          //    let {productColor : colorB,productCode : codeB}=b
+          //   return (colorA+codeA)-(colorB-codeB)
+          // })
+
+          this.saleProductInfoList = saleProductInfoList;
+          // 使用 reduce 方法来累加相同 productCode 和 productColor 的第一条数据的 boxNum
+          const codeColorSums = this.saleProductInfoList.reduce(
+            (acc, curr, index) => {
+              // 创建一个用于组合 productCode 和 productColor 的键
+              const key = `${curr.productCode}-${curr.productColor}`;
+
+              // 检查当前 key 是否已经存在
+              if (!acc[key]) {
+                // 如果不存在,添加 key 作为键,并将 boxNum 设置为当前值
+                acc[key] = {
+                  firstIndex: index,
+                  sum: curr.boxNum,
+                  weight: curr.weight,
+                  count: 1,
+                };
+              } else {
+                acc[key].count++; // 增加计数
+                acc[key].sum += curr.boxNum;
+                acc[key].weight += curr.weight;
+              }
+              return acc;
+            },
+            {}
+          );
+          this.saleProductInfoList.forEach((item, index) => {
+            if (codeColorSums[`${item.productCode}-${item.productColor}`]) {
+              item.coutBoxNum =
+                codeColorSums[`${item.productCode}-${item.productColor}`].sum;
+              item.coutweight =
+                codeColorSums[
+                  `${item.productCode}-${item.productColor}`
+                ].weight.toFixed(2);
+            }
+          });
+
+          Object.assign(this.form, {
+            noticeNumber, //通知单号
+            documentType, //通知单类型
+            documentTypeName, //通知单类型  名
+            salesman, //销售员
+            sellingUnit, //售货单位
+            truckRegistration, //货车信息
+            dispatchNoteRemark, //备注
+            customerName, //客户名称
+            id,
+          });
+          this.form.deliveryClerk = this.nickName;
+        }
+      } catch (error) {}
+    },
+  },
+  computed: {
+    ...mapState({
+      nickName: (state) => state.user.nickName,
+    }),
+  },
+  mounted() {
+    this.initData();
+    this.initWarehouse();
+  },
+};
+</script>
+
+<style scoped lang="scss">
+.app-container {
+  display: flex;
+  width: 100%;
+
+  .table-area {
+    // width: 600px;
+  }
+
+  .form-area {
+    // flex: 1;
+  }
+}
+
+::v-deep .el-table__body tr.current-row > td.el-table__cell {
+  background-color: #55e905 !important;
+}
+
+.table-data > .gutter {
+  display: table-cell !important;
+}
+
+::v-deep .el-table .warning-row {
+  color: red;
+}
+</style>