zuozhengqing
2024-03-30 b54c83388bce2d768a43415f14048fcf4f5deb01
merge branch 'dev'
1个文件已修改
367 ■■■■ 已修改文件
src/views/sales/salesDetails/index.vue 367 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/sales/salesDetails/index.vue
@@ -6,14 +6,8 @@
    <div v-else class="filter">
      <div class="filter-card">
        <CommonSearch
          :show-add="false"
          :show-download="false"
          :amount-view="false"
          :show-action-btn="false"
          placeholder="请输入订单编号"
          @searchClick="onFilterSearch"
        >
        <CommonSearch :show-add="false" :show-download="false" :amount-view="false" :show-action-btn="false"
          placeholder="请输入订单编号" @searchClick="onFilterSearch">
          <template slot="leftButton">
            <el-button size="small" type="primary" @click="addBtnClick">新建</el-button>
            <!-- <el-button size="small"  @click="delClick">删除</el-button> -->
@@ -26,17 +20,9 @@
      <!-- <div class="body-card"> -->
      <div class="content-top">
        <div class="list-view">
          <TableCommonView
            ref="tableListRef"
            :show-summary="showSummary"
            :table-list="tableList"
            @selClientClick="selClientClick"
            @selCommonClick="selCommonClick"
            @getSelectArray="getSelectArray"
            @selTableCol="selTableCol"
            @tableRowClick="tableRowClick"
            :selectClassRow="selectRow"
          >
          <TableCommonView ref="tableListRef" :show-summary="showSummary" :table-list="tableList"
            @selClientClick="selClientClick" @selCommonClick="selCommonClick" @getSelectArray="getSelectArray"
            @selTableCol="selTableCol" @tableRowClick="tableRowClick" :selectClassRow="selectRow">
            <template slot="tableButton">
              <el-table-column label="操作" width="180">
                <template slot-scope="scope">
@@ -64,54 +50,34 @@
      </div>
      <div class="content-bottom">
        <div class="bottom-tabs" :class="!isDetail ? 'bgcGrey' : 'bgcWhite'">
          <div
            class="tab-pane"
            @click="getTab(0)"
            :style="{
              background: TabsIndex == 0 ? '#2a78fb' : '#F1F3F8',
              color: TabsIndex == 0 ? '#fff' : '#666'
            }"
          >
          <div class="tab-pane" @click="getTab(0)" :style="{
      background: TabsIndex == 0 ? '#2a78fb' : '#F1F3F8',
      color: TabsIndex == 0 ? '#fff' : '#666'
    }">
            产品信息
          </div>
          <div
            class="tab-pane"
            @click="getTab(1)"
            :style="{
              background: TabsIndex == 1 ? '#2a78fb' : '#F1F3F8',
              color: TabsIndex == 1 ? '#fff' : '#666'
            }"
          >
          <div class="tab-pane" @click="getTab(1)" :style="{
      background: TabsIndex == 1 ? '#2a78fb' : '#F1F3F8',
      color: TabsIndex == 1 ? '#fff' : '#666'
    }">
            发货信息
          </div>
          <div
            class="tab-pane"
            @click="getTab(2)"
            :style="{
              background: TabsIndex == 2 ? '#2a78fb' : '#F1F3F8',
              color: TabsIndex == 2 ? '#fff' : '#666'
            }"
          >
          <div class="tab-pane" @click="getTab(2)" :style="{
      background: TabsIndex == 2 ? '#2a78fb' : '#F1F3F8',
      color: TabsIndex == 2 ? '#fff' : '#666'
    }">
            制造信息
          </div>
          <div
            class="tab-pane"
            @click="getTab(3)"
            :style="{
              background: TabsIndex == 3 ? '#2a78fb' : '#F1F3F8',
              color: TabsIndex == 3 ? '#fff' : '#666'
            }"
          >
          <div class="tab-pane" @click="getTab(3)" :style="{
      background: TabsIndex == 3 ? '#2a78fb' : '#F1F3F8',
      color: TabsIndex == 3 ? '#fff' : '#666'
    }">
            采购信息
          </div>
          <div
            class="tab-pane"
            @click="getTab(4)"
            :style="{
              background: TabsIndex == 4 ? '#2a78fb' : '#F1F3F8',
              color: TabsIndex == 4 ? '#fff' : '#666'
            }"
          >
          <div class="tab-pane" @click="getTab(4)" :style="{
      background: TabsIndex == 4 ? '#2a78fb' : '#F1F3F8',
      color: TabsIndex == 4 ? '#fff' : '#666'
    }">
            委外信息
          </div>
        </div>
@@ -133,12 +99,8 @@
      <el-form label-width="100px" class="demo-ruleForm" ref="form" :rules="rules" :model="projects">
        <el-form-item label="选择项目" prop="projectId">
          <el-select v-model="projects.projectId" placeholder="请选择" size="mini" style="width: 100%">
            <el-option
              v-for="item in projectList"
              :key="item.projectId"
              :label="item.projectName"
              :value="item.projectId"
            >
            <el-option v-for="item in projectList" :key="item.projectId" :label="item.projectName"
              :value="item.projectId">
            </el-option>
          </el-select>
        </el-form-item>
@@ -149,17 +111,11 @@
      </span>
    </el-dialog>
    <!-- 新建/编辑 -->
    <AddSalesDetailsDialog
      v-if="editConfig.visible"
      :edit-common-config="editConfig"
      @addCollectionPlanClick="addCollectionPlanClick"
    />
    <AddSalesDetailsDialog v-if="editConfig.visible" :edit-common-config="editConfig"
      @addCollectionPlanClick="addCollectionPlanClick" />
    <!-- 发货 -->
    <ShipmentsDialog
      v-if="editShipmentsConfig.visible"
      :edit-common-config="editShipmentsConfig"
      @addCollectionPlanClick="addCollectionPlanClick"
    />
    <ShipmentsDialog v-if="editShipmentsConfig.visible" :edit-common-config="editShipmentsConfig"
      @addCollectionPlanClick="addCollectionPlanClick" />
    <!-- 销售明细详情 -->
    <DetailSpecification v-if="specificationDetail.visible" :specification-detail="specificationDetail" />
    <!-- 客户详情 -->
@@ -221,26 +177,33 @@
      { label: "产品规格", prop: "specs" },
      { label: "单位", prop: "unit" },
      { label: "订单数量", prop: "amount" },
      {
        label: "已完成数量",
      {
        label: "已完成数量",
        prop: "finishAmount",
        isClass: true,
        getClassName: this.getAmountClassName,
        getClassName: this.getAmountClassName,
      },
      { label: "已发货数量", prop: "deliveryAmount",
      {
        label: "已发货数量", prop: "deliveryAmount",
        isClass: true,
        getClassName: this.getAmountClassName,  },
      { label: "采购数量",
        getClassName: this.getAmountClassName,
      },
      {
        label: "采购数量",
        isClass: true,
        getClassName: this.getFinishAmountClassName,
        getClassName: this.getFinishAmountClassName,
        prop: "purchaseAmount",
      },
      { label: "生产数量", prop: "makeAmount" ,
      {
        label: "生产数量", prop: "makeAmount",
        isClass: true,
        getClassName: this.getFinishAmountClassName, },
      { label: "委外数量", prop: "outsourcingAmount",
        getClassName: this.getFinishAmountClassName,
      },
      {
        label: "委外数量", prop: "outsourcingAmount",
        isClass: true,
        getClassName: this.getFinishAmountClassName,  },
        getClassName: this.getFinishAmountClassName,
      },
      { label: "销售单价", prop: "price", price: true },
      { label: "成本单价", prop: "cost" },
      { label: "毛利", prop: "profit" },
@@ -260,7 +223,7 @@
      { label: "承运商", prop: "carrier" },
      { label: "运单号", prop: "waybill" },
      { label: "创建时间", prop: "warehouse" },
      { label: "状态", prop: "status",isCallMethod: true,getCallMethod: this.getStatusFive },
      { label: "状态", prop: "status", isCallMethod: true, getCallMethod: this.getStatusFive },
    ]
    // 制造信息
    const makeColumn = [
@@ -387,12 +350,12 @@
        title: "新建",
        infomation: {}
      },
      editShipmentsConfig:{
      editShipmentsConfig: {
        visible: false,
        title: "新建",
        infomation: {
          saleDetailID:null,
          saleDetailNumber:null,
          saleDetailID: null,
          saleDetailNumber: null,
        }
      },
@@ -447,7 +410,7 @@
      TabsIndex: "0",
      productTableList: {},
      productColumn: productColumn,
      showProductCol: ["产品编号", "产品名称","产品规格", "单位", "订单数量", "已完成数量", "已发货数量", "采购数量", "生产数量", "委外数量","销售单价","成本单价","毛利","毛利率(%)","价税合计"],
      showProductCol: ["产品编号", "产品名称", "产品规格", "单位", "订单数量", "已完成数量", "已发货数量", "采购数量", "生产数量", "委外数量", "销售单价", "成本单价", "毛利", "毛利率(%)", "价税合计"],
      inventoryColumn: inventoryColumn,
      showInventoryCol: [
        "出库单",
@@ -464,12 +427,12 @@
        "状态"
      ],
      makeColumn: makeColumn,
      showMakeCol: ["生产订单", "产品编号", "产品名称", "产品规格", "产品单位", "订单数量", "完成数量","工单编号","工单状态","计划开始时间","计划结束时间"],
      showMakeCol: ["生产订单", "产品编号", "产品名称", "产品规格", "产品单位", "订单数量", "完成数量", "工单编号", "工单状态", "计划开始时间", "计划结束时间"],
      // 采购
      purchaseColumn: purchaseColumn,
      outsourceColumn:outsourceColumn,
      showPurchaseCol: ["采购单号", "产品编号", "产品名称", "产品规格", "产品单位","计划采购量","完成采购量","采购单名称","供应商名称","状态"],
      showOutsourceCol:["委外订单", "产品编号", "产品名称", "产品规格", "产品单位","委外数量","完成数量","订单状态","委外供应商","签约日期","交付日期"],
      outsourceColumn: outsourceColumn,
      showPurchaseCol: ["采购单号", "产品编号", "产品名称", "产品规格", "产品单位", "计划采购量", "完成采购量", "采购单名称", "供应商名称", "状态"],
      showOutsourceCol: ["委外订单", "产品编号", "产品名称", "产品规格", "产品单位", "委外数量", "完成数量", "订单状态", "委外供应商", "签约日期", "交付日期"],
      selectRow: {},
      projectList: [],
      projectListShow: false,
@@ -483,7 +446,7 @@
      purchaseStatusList: getDataByType("purchaseStatus"),
      loading: false,
      isRequest: true, //请求
      productDataBottom:{},
      productDataBottom: {},
    }
  },
  created() {
@@ -500,25 +463,24 @@
  },
  methods: {
    getFinishAmountClassName(val, row) {
      console.log(val,"val")
      let parts = val.split("/");
      let parts = val.split("/");
      let numerator = parseInt(parts[0], 10); // 分子  
      let denominator = parseInt(parts[1], 10); // 分母 
      let classname = "";
      if (numerator / denominator === 0||numerator===0) {
      if (numerator / denominator === 0 || numerator === 0) {
        classname = "error";
      }else if(numerator / denominator === 1){
      } else if (numerator / denominator === 1) {
        classname = "success";
      }else if((numerator / denominator) > 0&&(numerator / denominator) <1){
      } else if ((numerator / denominator) > 0 && (numerator / denominator) < 1) {
        classname = "warning-radio";
      }
      console.log(classname, numerator,denominator,"看下")
      console.log(classname, numerator, denominator, "看下")
      return classname;
    },
    getAmountClassName(val){
      console.log(val,"val11")
    getAmountClassName(val) {
      console.log(val, "val11")
      let classname = "";
      if(val===0){
      if (val === 0) {
        classname = "error";
      }
      return classname;
@@ -653,19 +615,18 @@
    },
    // 获取产品/库存信息
    async getProductInventoryInfo(number) {
        if (number) {
          this.loading = true
          await getProductInventoryInfo(number)
            .then((res) => {
              console.log(res,"resss")
      if (number) {
        await getProductInventoryInfo(number)
          .then((res) => {
            console.log(res, "resss")
            if (this.TabsIndex == 1) {
              this.productTableList.tableInfomation = res.data?.length > 0 ? res.data : []
              this.loading = false
            })
            .catch(() => {
              this.productTableList.tableInfomation = []
              this.loading = false
            })
        }
            }
          })
          .catch(() => {
            this.productTableList.tableInfomation = []
          })
      }
    },
    // 获取制造信息
    async getProductOrderInfo(number) {
@@ -676,95 +637,93 @@
          this.tableBottomColumn = this.productColumn // 表头
          this.showBottomCol = this.showProductCol  // 动态表头
          this.setBottomList()
        }else if(this.TabsIndex == 1){
        } else if (this.TabsIndex == 1) {
          // 发货信息列表
          this.tableBottomColumn = this.inventoryColumn
          this.showBottomCol = this.showInventoryCol
          this.setBottomList()
        }else if (this.TabsIndex == 2) {
        } else if (this.TabsIndex == 2) {
          // 制造信息列表
          this.tableBottomColumn = this.makeColumn
          this.showBottomCol = this.showMakeCol
          this.setBottomList()
        } else if (this.TabsIndex == 3) {
          // 采购信息列表
          this.tableBottomColumn = this.purchaseColumn
          this.showBottomCol = this.showPurchaseCol
          this.setBottomList()
        }else if (this.TabsIndex == 4) {
        } else if (this.TabsIndex == 4) {
          // 委外信息列表
          this.tableBottomColumn = this.outsourceColumn
          this.showBottomCol = this.showOutsourceCol
          this.setBottomList()
        }
        console.log(this.isRequest,'===isRequest')
        if (this.TabsIndex != 1&&this.isRequest == false) {
        if (this.TabsIndex != 1 && this.isRequest == false) {
          this.isRequest = true;
          this.getListValue(this.productDataBottom)
          return true;
        }
          if (this.TabsIndex == 1&&this.selectRow.status == 1) {
        this.loading = true
        if (this.TabsIndex == 1 && this.selectRow.status == 1) {
          this.productTableList.tableInfomation = []
        }
        this.getProductInventoryInfo(number)
        await getProductOrderInfo(number)
          .then((res) => {
            this.productDataBottom = res;
            this.getListValue(this.productDataBottom)
          })
          .catch(() => {
            this.productTableList.tableInfomation = []
          }
          console.log(this.selectRow,"看看")
          this.getProductInventoryInfo(number)
          this.loading = true
          await getProductOrderInfo(number)
            .then((res) => {
              this.productDataBottom=res;
              this.getListValue(this.productDataBottom)
              this.loading = false
            })
            .catch(() => {
              this.productTableList.tableInfomation = []
              this.loading = false
            })
          })
        this.loading = false
      }
    },
    getListValue(res){
    getListValue(res) {
      if (this.TabsIndex == 0) {
              if(res&&res.data){
                res.data.productInfo.map((item=>{
                  let string1 = "--";
                  let number1 = item.purchaseFinishAmount;
                  let val1=item.purchaseAmount
                  if ((val1 && val1 != 0) || (number1 && number1 != 0)) {
                    let a1 = val1 || val1 == 0 ? val1 : "--";
                    let b1 = number1 || number1 == 0 ? number1 : "--";
                    string1 = b1 + "/" + a1;
                  }
                  item.purchaseAmount=string1
                  let string2 = "--";
                  let number2 = item.makeFinishAmount;
                  let val2=item.makeAmount
                  if ((val2 && val2 != 0) || (number2 && number2 != 0)) {
                    let a2 = val2 || val2 == 0 ? val2 : "--";
                    let b2 = number2 || number2 == 0 ? number2 : "--";
                    string2 = b2 + "/" + a2;
                  }
                  item.makeAmount=string2
                  let string3 = "--";
                  let number3 = item.outsourcingFinishAmount;
                  let val3=item.outsourcingAmount
                  if ((val3 && val3 != 0) || (number3 && number3 != 0)) {
                    let a3 = val3 || val3 == 0 ? val3 : "--";
                    let b3 = number3 || number3 == 0 ? number3 : "--";
                    string3 = b3 + "/" + a3;
                  }
                  item.outsourcingAmount=string3
                }))
              }
              this.productTableList.tableInfomation = res.data && res.data.productInfo ? res.data.productInfo : []
            }  else if (this.TabsIndex == 2) {
              this.productTableList.tableInfomation = res.data && res.data.makeInfo ? res.data.makeInfo : []
            } else if (this.TabsIndex == 3) {
              this.productTableList.tableInfomation = res.data && res.data.purchaseInfo ? res.data.purchaseInfo : []
            } else if(this.TabsIndex == 4) {
              this.productTableList.tableInfomation = res.data && res.data.outsourcingInfo ? res.data.outsourcingInfo : []
        if (res && res.data) {
          res.data.productInfo.map((item => {
            let string1 = "--";
            let number1 = item.purchaseFinishAmount;
            let val1 = item.purchaseAmount
            if ((val1 && val1 != 0) || (number1 && number1 != 0)) {
              let a1 = val1 || val1 == 0 ? val1 : "--";
              let b1 = number1 || number1 == 0 ? number1 : "--";
              string1 = b1 + "/" + a1;
            }
            item.purchaseAmount = string1
            let string2 = "--";
            let number2 = item.makeFinishAmount;
            let val2 = item.makeAmount
            if ((val2 && val2 != 0) || (number2 && number2 != 0)) {
              let a2 = val2 || val2 == 0 ? val2 : "--";
              let b2 = number2 || number2 == 0 ? number2 : "--";
              string2 = b2 + "/" + a2;
            }
            item.makeAmount = string2
            let string3 = "--";
            let number3 = item.outsourcingFinishAmount;
            let val3 = item.outsourcingAmount
            if ((val3 && val3 != 0) || (number3 && number3 != 0)) {
              let a3 = val3 || val3 == 0 ? val3 : "--";
              let b3 = number3 || number3 == 0 ? number3 : "--";
              string3 = b3 + "/" + a3;
            }
            item.outsourcingAmount = string3
          }))
        }
        this.productTableList.tableInfomation = res.data && res.data.productInfo ? res.data.productInfo : []
      } else if (this.TabsIndex == 2) {
        this.productTableList.tableInfomation = res.data && res.data.makeInfo ? res.data.makeInfo : []
      } else if (this.TabsIndex == 3) {
        this.productTableList.tableInfomation = res.data && res.data.purchaseInfo ? res.data.purchaseInfo : []
      } else if (this.TabsIndex == 4) {
        this.productTableList.tableInfomation = res.data && res.data.outsourcingInfo ? res.data.outsourcingInfo : []
      }
    },
    // 搜索
    onFilterSearch(searchText) {
@@ -821,21 +780,21 @@
      }
    },
    // 发货
    shipmentsClick(row){
      this.editShipmentsConfig.visible=true
      this.editShipmentsConfig.infomation.saleDetailID=row.id
      this.editShipmentsConfig.infomation.deliverType=row.deliverType?row.deliverType:1
      this.editShipmentsConfig.infomation.saleDetailNumber=row.number
      this.editShipmentsConfig.infomation.projectId=row.projectId
    shipmentsClick(row) {
      this.editShipmentsConfig.visible = true
      this.editShipmentsConfig.infomation.saleDetailID = row.id
      this.editShipmentsConfig.infomation.deliverType = row.deliverType ? row.deliverType : 1
      this.editShipmentsConfig.infomation.saleDetailNumber = row.number
      this.editShipmentsConfig.infomation.projectId = row.projectId
    },
    // 确认发货完成
    async confirmClick(row){
    async confirmClick(row) {
      this.selectRow = row
      await getProductInventoryInfo(this.selectRow.number)
        .then((res) => {
          console.log(res,"resss")
          if(res.data){
          this.productTableList.tableInfomation = res.data?.length > 0 ? res.data : []
          console.log(res, "resss")
          if (res.data) {
            this.productTableList.tableInfomation = res.data?.length > 0 ? res.data : []
            // let accumulator=res.data
            // const reducedArray = array.reduce((accumulator, currentItem) => {  
            //   // 查找当前number是否已存在于accumulator中  
@@ -849,7 +808,7 @@
            //   }  
            //   return accumulator;  
            // }, []); // 初始化accumulator为一个空数组  
            // console.log(reducedArray,"新数组");
          }
          this.loading = false
@@ -934,7 +893,7 @@
            }
          })
        })
        .catch(() => {})
        .catch(() => { })
      // } else {
      //   this.$message.warning("请至少选择一条记录")
      // }
@@ -974,15 +933,15 @@
    getTab(tab) {
      this.TabsIndex = tab
      if (this.TabsIndex == 1) {
        this.isRequest =true;
      } else{
        this.isRequest = true;
      } else {
        this.isRequest = false;
      }
      this.getProductOrderInfo(this.selectRow.number)
    },
    // 状态
    getStatus(val) {
      return val === 1 ? "待确认" : val === 2 ? "待分解" : val === 3 ? "备货中" : val === 4 ? "待出库" : val === 5 ? "出库完成" : val=== 6 ? "已关闭": "--"
      return val === 1 ? "待确认" : val === 2 ? "待分解" : val === 3 ? "备货中" : val === 4 ? "待出库" : val === 5 ? "出库完成" : val === 6 ? "已关闭" : "--"
    },
    // top 行点击
    tableRowClick(row) {
@@ -1049,7 +1008,7 @@
    },
    getStatusFive(val) {
      if (val) {
        return val==0?'就绪':'完成'
        return val == 0 ? '就绪' : '完成'
      } else {
        return "--";
      }
@@ -1064,6 +1023,7 @@
  .el-table .el-table__cell {
    padding: 0;
  }
  .el-table__footer-wrapper tbody td.el-table__cell {
    height: 48px;
  }
@@ -1072,11 +1032,13 @@
.sales-details {
  height: 100%;
  overflow: hidden;
  .filter {
    height: 80px;
    display: flex;
    align-items: center;
    padding: 12px 20px 0 20px;
    &-card {
      height: 80px;
      display: flex;
@@ -1088,27 +1050,32 @@
      background-color: #fff;
    }
  }
  .body {
    box-sizing: border-box;
    padding: 10px 20px;
    border-radius: 12px;
    height: calc(100% - 70px);
    .content-top {
      background-color: #fff;
      border-radius: 12px;
      min-height: 70px;
      height: 48%;
      position: relative;
      .list-view {
        height: calc(100% - 60px);
      }
    }
    .content-bottom {
      .bottom-tabs {
        height: 40px;
        line-height: 40px;
        background: #e6ecf2;
        display: flex;
        .tab-pane {
          width: 100px;
          margin-right: 20px;
@@ -1120,28 +1087,34 @@
          border-top-right-radius: 20px;
        }
      }
      .lable-view {
        background: #e6ecf2;
        height: 40px;
        line-height: 40px;
        .name {
          border-left: 4px solid #2a78fb;
          padding-left: 10px;
        }
      }
      background-color: #fff;
      border-radius: 12px;
      min-height: 70px;
      height: calc(52% - 60px);
      margin-top: 10px;
      // padding: 10px 20px;
      .list-view {
        height: calc(100% - 10px);
      }
    }
    .btn-pager {
      display: flex;
      margin-top: 10px;
      .page {
        margin-left: auto;
      }
@@ -1152,15 +1125,19 @@
.bgcGrey {
  background: #e6ecf2;
}
.bgcWhite {
  background: #fff !important;
}
.el-form-item {
  width: 80%;
  margin: 20px auto;
}
::v-deep .el-dialog__footer {
  text-align: right !important;
  .el-button {
    margin-right: 10px;
  }