zuozhengqing
2024-03-18 85a5e415a9f5534551809564ce5e7ea38430377f
销售明细单添加发货,添加采购信息和委外信息,调整列表字段
3个文件已修改
1个文件已添加
922 ■■■■■ 已修改文件
src/api/sales/salesDetails.js 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/makepager/CommonFormTableView.vue 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/sales/salesDetails/index.vue 229 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/sales/salesDetails/shipmentsDialog.vue 652 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/sales/salesDetails.js
@@ -70,3 +70,22 @@
    data
  })
}
// 产品入库信息
export function getDeliveryPrepareInfo(data) {
  return request({
    url: "/api/salesDetails/getDeliveryPrepareInfo",
    method: "post",
    data
  })
}
// 确认发货
export function confirmOutput(data) {
  return request({
    url: "/api/salesDetails/confirmOutput",
    method: "post",
    data
  })
}
src/components/makepager/CommonFormTableView.vue
@@ -153,6 +153,28 @@
              </span>
            </template>
            <el-form-item
                v-else-if="item.inputFloat"
                label=" "
                :prop="'tableData.' + scope.$index + '.' + item.prop"
                :rules="[{ required: item.isRequird ? true : false, message: '输入不能为空' }]"
              >
                <el-input-number
                  v-model="scope.row[item.prop]"
                  placeholder=""
                  :min="0"
                  :precision="2"
                  :disabled="!isOperate"
                  :controls="false"
                  size="mini"
                  style="width: 100%; margin-right: 5px"
                  @change="
                    (val) => {
                      commonInputChange(val, item.prop, scope.row, scope)
                    }
                  "
                ></el-input-number>
              </el-form-item>
            <el-form-item
              v-else-if="item.inputNumber && selectBox"
              label=" "
              :prop="'tableData.' + scope.$index + '.' + item.prop"
src/views/sales/salesDetails/index.vue
@@ -47,6 +47,9 @@
                    <!-- <el-button @click="delClick(scope.row.id)" type="text" size="small">删除</el-button> -->
                    <el-button @click.stop="closeClick(scope.row)" type="text" size="small">关闭</el-button>
                  </template>
                  <template v-if="scope.row.status === 3||scope.row.status === 4">
                    <el-button @click.stop="shipmentsClick(scope.row)" type="text" size="small">发货</el-button>
                  </template>
                </template>
              </el-table-column>
            </template>
@@ -98,6 +101,16 @@
          >
            采购信息
          </div>
          <div
            class="tab-pane"
            @click="getTab(4)"
            :style="{
              background: TabsIndex == 4 ? '#2a78fb' : '#F1F3F8',
              color: TabsIndex == 4 ? '#fff' : '#666'
            }"
          >
            委外信息
          </div>
        </div>
        <div class="list-view">
          <TableCommonView :loading="loading" :table-list="productTableList" @selTableCol="selBottomTableCol">
@@ -138,6 +151,12 @@
      :edit-common-config="editConfig"
      @addCollectionPlanClick="addCollectionPlanClick"
    />
    <!-- 发货 -->
    <ShipmentsDialog
      v-if="editShipmentsConfig.visible"
      :edit-common-config="editShipmentsConfig"
      @addCollectionPlanClick="addCollectionPlanClick"
    />
    <!-- 销售明细详情 -->
    <DetailSpecification v-if="specificationDetail.visible" :specification-detail="specificationDetail" />
    <!-- 客户详情 -->
@@ -149,6 +168,7 @@
<script>
import AddSalesDetailsDialog from "@/views/sales/salesDetails/AddSalesDetailsDialog"
import ShipmentsDialog from "@/views/sales/salesDetails/shipmentsDialog"
import {
  getSalesDetailsList,
  getDelSalesDetails,
@@ -179,6 +199,7 @@
  mixins: [pageMixin],
  components: {
    AddSalesDetailsDialog,
    ShipmentsDialog,
    DetailSpecification,
    DetailClientManage: () => import("@/views/client/client/DetailClientManage"),
    AddCollectionPlan
@@ -191,34 +212,46 @@
  data() {
    // 产品信息
    const productColumn = [
      { label: "产品编号", prop: "number", default: true },
      { label: "产品名称", prop: "name" },
      { label: "数量", prop: "amount" },
      { label: "产品编号", prop: "productId", default: true },
      { label: "产品名称", prop: "productName" },
      { label: "产品规格", prop: "specs" },
      { label: "单位", prop: "unit" },
      { label: "订单数量", prop: "amount" },
      { label: "已完成数量", prop: "finishAmount" },
      { label: "已发货数量", prop: "deliveryAmount" },
      { label: "采购数量", prop: "purchaseAmount" },
      { label: "生产数量", prop: "makeAmount" },
      { label: "委外数量", prop: "outsourcingAmount" },
      { label: "销售单价", prop: "price", price: true },
      { label: "成本单价", prop: "cost" },
      { label: "毛利", prop: "profit" },
      { label: "毛利率(%)", prop: "margin" },
      { label: "价税合计", prop: "total", price: true }
    ]
    // 库存信息
    // 发货信息
    const inventoryColumn = [
      { label: "出库单", prop: "invoice" },
      { label: "仓库", prop: "warehouse" },
      { label: "产品编号", prop: "number", default: true },
      { label: "产品名称", prop: "name" },
      { label: "产品规格", prop: "specs" },
      { label: "产品单位", prop: "unit" },
      { label: "发货数量", prop: "amount" },
      { label: "订单数量", prop: "orderAmount" },
      { label: "发货单", prop: "invoice" },
      { label: "承运商", prop: "carrier" },
      { label: "运单号", prop: "waybill" },
      { label: "仓库", prop: "warehouse" },
      { label: "在库数量", prop: "amount" },
      { label: "可用库存", prop: "availableNumber" },
      { label: "单位", prop: "unit" }
      { label: "创建时间", prop: "warehouse" },
      { label: "状态", prop: "status" },
    ]
    // 制造信息
    const makeColumn = [
      { label: "生产订单", prop: "orderId", default: true },
      { label: "产品编号", prop: "productId" },
      { label: "产品名称", prop: "productName" },
      { label: "订单状态", prop: "orderStatus" },
      { label: "产品规格", prop: "specs" },
      { label: "产品单位", prop: "unit" },
      { label: "订单数量", prop: "amount" },
      { label: "完成数量", prop: "finishAmount" },
      { label: "工单编号", prop: "workOrderId" },
      { label: "工单状态", prop: "workOrderStatus" },
      { label: "计划开始时间", prop: "startTime" },
@@ -232,6 +265,36 @@
        default: true
      },
      {
        label: "产品编号",
        prop: "productId",
        default: true
      },
      {
        label: "产品名称",
        prop: "productName",
        default: true
      },
      {
        label: "产品规格",
        prop: "specs",
        default: true
      },
      {
        label: "产品单位",
        prop: "unit",
        default: true
      },
      {
        label: "计划采购量",
        prop: "amount",
        default: true
      },
      {
        label: "完成采购量",
        prop: "finishAmount",
        default: true
      },
      {
        label: "采购单名称",
        prop: "purchaseName"
      },
@@ -239,16 +302,74 @@
        label: "供应商名称",
        prop: "supplierName"
      },
      {
        label: "采购数量",
        prop: "amount"
      },
      // {
      //   label: "采购数量",
      //   prop: "amount"
      // },
      {
        label: "状态",
        prop: "status",
        isCallMethod: true,
        getCallMethod: this.getpurchaseStatus
      }
    ]
    // 委外
    const outsourceColumn = [
      {
        label: "委外订单",
        prop: "outsourcingId",
        default: true
      },
      {
        label: "产品编号",
        prop: "productId",
        default: true
      },
      {
        label: "产品名称",
        prop: "productName",
        default: true
      },
      {
        label: "产品规格",
        prop: "specs",
        default: true
      },
      {
        label: "产品单位",
        prop: "unit",
        default: true
      },
      {
        label: "委外数量",
        prop: "amount",
        default: true
      },
      {
        label: "完成数量",
        prop: "finishAmount",
        default: true
      },
      {
        label: "订单状态",
        prop: "status",
        default: true
      },
      {
        label: "委外供应商",
        prop: "supplierName",
        default: true
      },
      {
        label: "签约日期",
        prop: "startTime",
        default: true
      },
      {
        label: "交付日期",
        prop: "endTime",
        default: true
      },
    ]
    return {
      tableList: {},
@@ -257,6 +378,15 @@
        visible: false,
        title: "新建",
        infomation: {}
      },
      editShipmentsConfig:{
        visible: false,
        title: "新建",
        infomation: {
          saleDetailID:null,
          saleDetailNumber:null,
        }
      },
      showSummary: {
        show: false,
@@ -309,25 +439,29 @@
      TabsIndex: "0",
      productTableList: {},
      productColumn: productColumn,
      showProductCol: ["产品编号", "产品名称", "数量", "单位", "销售单价", "成本单价", "毛利", "毛利率(%)", "价税合计"],
      showProductCol: ["产品编号", "产品名称","产品规格", "单位", "订单数量", "已完成数量", "已发货数量", "采购数量", "生产数量", "委外数量","销售单价","成本单价","毛利","毛利率","价税合计"],
      inventoryColumn: inventoryColumn,
      showInventoryCol: [
        "出库单",
        "仓库",
        "产品编号",
        "产品名称",
        "产品规格",
        "产品单位",
        "发货数量",
        "订单数量",
        "发货单",
        "承运商",
        "运单号",
        "仓库",
        "在库数量",
        "可用库存",
        "单位"
        "创建时间",
        "状态"
      ],
      makeColumn: makeColumn,
      showMakeCol: ["生产订单", "产品名称", "订单状态", "工单编号", "工单状态", "计划开始时间", "计划结束时间"],
      // 采购
      purchaseColumn: purchaseColumn,
      showPurchaseCol: ["采购单号", "采购单名称", "供应商名称", "采购数量", "状态"],
      outsourceColumn:outsourceColumn,
      showPurchaseCol: ["采购单号", "产品编号", "产品名称", "产品规格", "产品单位","计划采购量","完成采购量","采购单名称","供应商名称","状态"],
      showOutsourceCol:["委外订单", "产品编号", "产品名称", "产品规格", "产品单位","委外数量","完成数量","订单状态","委外供应商","签约日期","交付日期"],
      selectRow: {},
      projectList: [],
      projectListShow: false,
@@ -486,7 +620,14 @@
    // 获取产品/库存信息
    async getProductInventoryInfo(row) {
      if (this.TabsIndex == 0 || row.status == 1) {
        this.productTableList.tableInfomation = row.products || []
        this.getProductOrderInfo(row)
        // row.products.map((item)=>{
        //   item.purchaseAmount=item.purchaseFinishAmount+"/"+item.purchaseAmount
        //   item.makeAmount=item.makeFinishAmount+"/"+item.makeAmount
        //   item.outsourcingAmount=item.outsourcingFinishAmount+"/"+item.outsourcingAmount
        // })
        // this.productTableList.tableInfomation = row.products || []
      } else {
        if (row.number) {
          this.loading = true
@@ -508,10 +649,23 @@
        this.loading = true
        await getProductOrderInfo(number)
          .then((res) => {
            if (this.TabsIndex == 3) {
              this.productTableList.tableInfomation = res.data && res.data.purchaseInfo ? res.data.purchaseInfo : []
            } else {
            if (this.TabsIndex == 0) {
              if(res&&res.data){
                res.data.productInfo.map((item=>{
                  item.purchaseAmount=item.purchaseFinishAmount+"/"+item.purchaseAmount
                  item.makeAmount=item.makeFinishAmount+"/"+item.makeAmount
                  item.outsourcingAmount=item.outsourcingFinishAmount+"/"+item.outsourcingAmount
                }))
              }
              this.productTableList.tableInfomation = res.data && res.data.productInfo ? res.data.productInfo : []
            } else if (this.TabsIndex == 1) {
              this.productTableList.tableInfomation = res.data ? res.data : []
            } 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 : []
            }
            this.loading = false
          })
@@ -574,6 +728,13 @@
          }
        })
      }
    },
    // 发货
    shipmentsClick(row){
      this.editShipmentsConfig.visible=true
      this.editShipmentsConfig.infomation.saleDetailID=row.id
      this.editShipmentsConfig.infomation.saleDetailNumber=row.number
      this.editShipmentsConfig.infomation.projectId=row.projectId
    },
    // 关闭
    closeClick(row) {
@@ -653,12 +814,12 @@
      this.TabsIndex = tab
      if (this.TabsIndex == 0) {
        // 产品信息列表
        this.tableBottomColumn = this.productColumn
        this.showBottomCol = this.showProductCol
        this.tableBottomColumn = this.productColumn // 表头
        this.showBottomCol = this.showProductCol  // 动态表头
        this.setBottomList()
        this.getProductInventoryInfo(this.selectRow)
        this.getProductInventoryInfo(this.selectRow.number)
      } else if (this.TabsIndex == 1) {
        // 库存信息列表
        // 发货信息列表
        this.tableBottomColumn = this.inventoryColumn
        this.showBottomCol = this.showInventoryCol
        this.setBottomList()
@@ -679,17 +840,23 @@
        this.showBottomCol = this.showPurchaseCol
        this.setBottomList()
        this.getProductOrderInfo(this.selectRow.number)
      }if (this.TabsIndex == 4) {
        // 委外信息列表
        this.tableBottomColumn = this.outsourceColumn
        this.showBottomCol = this.showOutsourceCol
        this.setBottomList()
        this.getProductOrderInfo(this.selectRow.number)
      }
    },
    // 状态
    getStatus(val) {
      return val === 1 ? "待确认" : val === 2 ? "待出库" : val === 3 ? "出库完成" : val === 4 ? "已关闭" : "--"
      return val === 1 ? "待确认" : val === 2 ? "待出库" : val === 3 ? "备货中" : val === 4 ? "待出库" : val === 5 ? "出库完成" : val=== 6 ? "已关闭": "--"
    },
    // top 行点击
    tableRowClick(row) {
      this.selectRow = row
      if (this.TabsIndex == 0) {
        this.getProductInventoryInfo(this.selectRow)
        this.getProductInventoryInfo(this.selectRow.number)
      } else if (this.TabsIndex == 1) {
        if (this.selectRow.status == 1) {
          this.productTableList.tableInfomation = []
src/views/sales/salesDetails/shipmentsDialog.vue
New file
@@ -0,0 +1,652 @@
<template>
  <div class="add-sales-details">
    <el-dialog
      :title="'发货单'"
      :visible.sync="editConfig.visible"
      :width="dialogWidth"
      :before-close="handleClose"
      append-to-body
      custom-class="iframe-dialog"
    >
      <el-form
        ref="form"
        :model="editConfig.infomation"
        :rules="rules"
        label-position="right"
        label-width="10%"
        size="mini"
        style="height: 60vh; overflow-x: hidden"
      >
        <!-- 信息 -->
        <div class="basic-info">
          <!-- 交付信息 -->
          <div class="basic-info-view">
            <el-row>
              <el-col :span="24">
                <el-form-item width="50%" label="交付类型" prop="addressee">
                  <el-radio-group v-model="shipmentsType" @change="handleRadioChange">
                    <el-radio :label="1">一次发货</el-radio>
                    <el-radio :label="2">多次发货</el-radio>
                  </el-radio-group>
                </el-form-item>
              </el-col>
              <el-col :span="24">
                <el-form-item label="关联项目" prop="projectId">
                  <el-select
                    v-model="editConfig.infomation.projectId"
                    placeholder="请选择"
                    size="mini"
                    :disabled="true"
                  >
                    <el-option
                      v-for="item in projectList"
                      :key="item.projectId"
                      :label="item.projectName"
                      :value="item.projectId"
                    >
                    </el-option>
                  </el-select>
                </el-form-item>
              </el-col>
              <!-- <el-col :span="24">
                <el-form-item  label="发货仓库" prop="addressee">
                  <el-select  v-model="value" placeholder="请选择">
                    <el-option
                      v-for="item in options"
                      :key="item.value"
                      :label="item.label"
                      :value="item.value">
                    </el-option>
                  </el-select>
                </el-form-item>
              </el-col> -->
            </el-row>
          </div>
          <div class="product-view">
            <CommonFormTableView
              ref="commonFormTableView"
              :detail-enter="isView ? true : false"
              :selectBox="false"
              :addTypeIdMultiple="true"
              pageName="quotation"
              :detailEnter="true"
              :isOperate="
                (autoCodeHeadersObj.Bjd == 'yes' && editConfig.infomation.quotation_number) ||
                autoCodeHeadersObj.Bjd != 'yes'
                  ? true
                  : false
              "
              :quotationNumber="autoCodeHeadersObj.Bjd == 'yes' ? editConfig.infomation.quotation_number : ''"
              :product-table-list="productTableList"
              @inputContent="inputContent"
              @addProductClick="addProductClick"
              @getSelectArray="getSelectArray"
              @emptyProductClick="emptyProductClick"
              @clearupProduct="clearupProduct"
            ></CommonFormTableView>
          </div>
          <p class="tips" v-if="completely"><i class="el-icon-warning-outline">当前仓库能满足发货需求,直接发货吧</i></p>
          <p class="tips" v-if="satisfyPartly"><i class="el-icon-warning-outline"></i>当前仓库只能部分满足发货需求,是否确认发货</p>
          <p class="tips" v-if="dissatisfy"><i class="el-icon-warning-outline"></i>当前仓库库存不足,不能完成一次发货,请选择其他仓库吧</p>
        </div>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" size="small" :disabled="dissatisfy" @click="saveClick('form')">确定发货</el-button>
        <el-button size="small" @click="editConfig.visible = false">取消</el-button>
      </div>
    </el-dialog>
  </div>
</template>
<script>
import CommonFormTableView from "@/components/makepager/CommonFormTableView"
import { getAllData } from "@/api/client/client"
import { getProjectList,getDeliveryPrepareInfo,confirmOutput } from "@/api/sales/salesDetails"
import codeMixin from "@/components/makepager/mixin/codeMixin"
import { getSaleChanceList } from "@/api/sales/salesOpportunity"
import { getDataByType } from "@/api/data"
import { mapActions } from "vuex"
import { getQuotationList } from "@/api/sales/quotation"
export default {
  name: "ShipmentsDialog",
  mixins: [codeMixin],
  props: {
    editCommonConfig: {
      type: Object,
      default: () => {
        return {
          visible: false,
          title: "新建",
          infomation: {}
        }
      }
    }
  },
  components: { CommonFormTableView },
  computed: {
    clientList() {
      return this.$store.state.getClientName.clientList
    },
  },
  data() {
    return {
      dialogWidth: "60%",
      editConfig: this.editCommonConfig,
      rules: {
        client_name: [{ required: true, message: "请选择客户名称", trigger: "change" }],
      },
      memberOptions: [],
      selSourceOrderOptions: [],
      wechatOrderStatusOptions: [], // 微信订单状态
      currencyOptions: [{ id: 1, name: "人民币" }], // 币种
      approvalWorkflowOptions: [], // 审批流程
      productTableList: {},
      showSummary: {
        show: true,
        total: true,
        sumProp: ["Amount", "total"],
        mergeNumber: 7
      },
      editSelectClientConfig: {
        editVisible: false,
        title: "",
        infomation: {}
      },
      editSelectChanceConfig: {
        editVisible: false,
        title: "",
        infomation: {},
        search_map: {}
      },
      editSelCommonConfig: {
        editVisible: false,
        title: "",
        infomation: {}
      },
      clientId: this.editCommonConfig.infomation.client_id,
      saleChanceId: this.editCommonConfig.infomation.sale_chance_id,
      subbillId: this.editCommonConfig.infomation.subbillId,
      productId: 1,
      isNoProduct: true,
      addCollectionConfig: {
        visible: false,
        title: "新建",
        infomation: {}
      },
      amountTotal: 0,
      isNameChanceEdit: false,
      isAddQuatation: true,
      // 交付类型
      deliveryTypeList: getDataByType("deliveryType"),
      projectList: [],
      quotationList: [],
      quotationId: this.editCommonConfig.infomation.quotationId,
      tableData: [],
      isView: this.editCommonConfig.title === "查看",
      thatMember: {},
      pickerOptions: {
        disabledDate(time) {
          return time.getTime() < Date.now() - 8.64e7
        }
      },
      pickerOptionsBefore: {
        disabledDate(time) {
          return time.getTime() > Date.now()
        }
      },
      shipmentsType:1,
      options: [{
        value: '1',
        label: '仓库1--库存不足的情况'
      }, {
        value: '2',
        label: '仓库1--库存充足的情况'
      }],
      value:"",
      dissatisfy:false, // 一次发货-不足
      completely:false, // 多次发货,充足
      satisfyPartly:false, //多次发货,部分满足
    }
  },
  mounted(){
    this.getSaleChanceList()
    this.getQuotation()
  },
  created() {
    this.$store.dispatch("geClient")
    this.setTableForm()
    this.getCommonData()
    this.formInfo()
    this.getUseSystemSet({ modeType: "xsmx" })
    this.getProjectList()
    this.getDeliveryPrepareInfo({
      saleDetailID: this.editCommonConfig.infomation.saleDetailID,
      saleDetailNumber: this.editCommonConfig.infomation.saleDetailNumber
    })
  },
  watch: {
    "editClientManageConfig.visible"(val) {
      if (val) {
        this.formInfo()
      }
    }
  },
  methods: {
    ...mapActions(["getChanceFilter", "getSubunitFliter"]),
    formInfo() {
      this.objCode.type = "销售明细编码"
      this.objCode.codeStandID = ""
      if (this.editConfig.infomation.codeStandID) {
        this.objCode.codeStandID = this.editConfig.infomation.codeStandID
      }
      this.getRCodeStandardList()
    },
    getCommonData() {
      getAllData()
        .then((res) => {
          this.memberOptions = res.data.member
          if (this.editConfig.title === "新建") {
            let username = document.cookie.replace(/(?:(?:^|.*;\s*)username\s*=\s*([^;]*).*$)|^.*$/, "$1")
            this.memberOptions.map((item) => {
              if (item.username == username) {
                this.$set(this.editConfig.infomation, "memberId", item.id)
              }
            })
          }
        })
        .catch((err) => {
          console.log(err)
        })
    },
    dataProcess() {
      this.saleChancelist.map((item) => {
        if (this.saleChanceId === item.id) {
          this.editConfig.infomation.sale_chance_name = item.name
        }
      })
    },
    // 保存
    saveClick(formName) {
      this.$refs[formName].validate((valid) => {
        if (valid) {
          const params = this.saveParams()
          confirmOutput(params).then((res)=>{
            console.log(res,"res")
            if(res&&res.code===200){
              this.$message.success("发货成功!")
              this.$parent.getData()
              this.editConfig.visible=false
            }
          })
        }
      })
    },
    saveParams() {
      let params = {
        products:[],
        saleDetailNumber:this.editCommonConfig.infomation.saleDetailNumber
      }
      this.productTableList.tableData.map((item)=>{
        let obj={
          number:item.number,
          outputAmount:item.outputAmount||''
        }
        params.products.push(obj)
      })
      return params
    },
    handleClose() {
      this.editConfig.visible = false
    },
    // 获取报价单
    getQuotation(id, value) {
     let params={
         page: 0,
        pageSize: 0,
     }
     if(id){
      params.search_map={
        sale_chance_id: id
      }
     }
      getQuotationList(params).then((res) => {
        if (res.code == 200) {
          console.log(res)
          this.quotationList = res.data.list
          this.count = res.data.count
        }
      })
    },
    // 选择客户相关方法
    querySearchAsync(queryString, cb, value) {
      var restaurants = []
      if (value === "client") {
        restaurants = this.clientList
        console.log(restaurants, "客户单")
      } else if (value === "chance") {
          restaurants = this.saleChancelist
      } else if (value === "subbill") {
        restaurants = this.subOrderList
      } else if (value === "quotation") {
          restaurants = this.quotationList
      }
      var results = queryString ? restaurants.filter(this.createStateFilter(queryString, value)) : restaurants
      cb(results)
    },
    createStateFilter(queryString, value) {
      return (state) => {
        if (value === "subbill" || value === "quotation") {
          return state.number.toLowerCase().indexOf(queryString.toLowerCase()) === 0
        } else {
          return state.name.toLowerCase().indexOf(queryString.toLowerCase()) === 0
        }
      }
    },
    // 销售机会列表
    async getSaleChanceList(item) {
      let params={}
      if(item){
        params={
          page: 0,
          pageSize: 0,
        }
        params.search_map={
          client_id: item.id
        }
      }else{
        params={
          page: 0,
          pageSize: 0,
        }
      }
      await getSaleChanceList(params).then((res) => {
        console.log(res)
        this.saleChancelist = res.data.list
      })
    },
    selClientClick(value) {
      if (value === "client") {
        this.editSelectClientConfig.editVisible = true
      } else if (value === "chance") {
        if (this.clientId) {
          this.editSelectChanceConfig.clientId = this.clientId
        }
        this.editSelectChanceConfig.editVisible = true
      } else if (value === "subbill") {
        this.editSelCommonConfig.title = "销售子单"
        this.editSelCommonConfig.editVisible = true
        this.editSelCommonConfig.clientId = this.clientId
      } else if (value === "quotation") {
        this.editSelCommonConfig.title = "报价单"
        if (this.saleChanceId && this.clientId) {
          this.editSelCommonConfig.clientId = this.clientId
          // 正向选择客户 销售机会  报价单
          this.editSelCommonConfig.isRequest = false
          this.editSelCommonConfig.count = this.count
          this.editSelCommonConfig.tableInfomation = [...this.quotationList]
        } else {
          // 反向选择
          this.editSelCommonConfig.isRequest = true
        }
        this.editSelCommonConfig.editVisible = true
      }
    },
    setTableForm() {
      if (this.editConfig.title === "新建" || this.editConfig.infomation.products.length === 0) {
        this.tableData = [
          {
            productId: this.productId,
            id: 0,
            amount: 0,
            desc: "",
            name: "",
            number: "",
            price: 0,
            cost: "",
            profit: "",
            margin: "",
            total: 0,
            unit: ""
          }
        ]
      } else {
        this.tableData = this.editConfig.infomation.products
        this.tableData.map((item, index) => {
          item.productId = index + 1
        })
        this.getQuotation(this.editConfig.infomation.saleChanceId, "全部产品")
      }
      this.productTableList = {
        tableData: this.tableData,
        isReturn: true,
        tableColumn: [
          { label: "产品编号", prop: "number" },
          { label: "产品名称", prop: "name",   min: 110 },
          { label: "订单数量", prop: "specs" },
          { label: "订单完成数量", prop: "type" },
          // { label: "可用库存", prop: "unit" },
        ]
      }
    },
    // 产品列表输入
    inputContent(val, prop, row) {
      // this.productId = row.productId
      this.tableData.map((item) => {
        if (item.number === row.number) {
          item[prop] = val
        }
      })
    },
    // 产品新增
    addProductClick() {
    },
    // 新增方式修改
    getSelectArray(val, index) {
      if (this.tableData.length == 1 && this.tableData[0].number.length == 0) {
        this.tableData = []
      }
      if (index < this.tableData.length) {
        this.tableData.splice(index, 1)
        val.map((item, ind) => {
          this.tableData.splice(index + ind, 0, item)
        })
      } else {
        this.tableData = this.tableData.concat(val)
      }
      this.productTableList.tableData = this.tableData
      this.showSummary.show = true
    },
    //  产品清空
    emptyProductClick() {
      this.productId = 1
      this.tableData = [
        {
          productId: this.productId,
          id: 0,
          amount: 0,
          desc: "",
          name: "",
          number: "",
          price: 0,
          cost: "",
          profit: "",
          margin: "",
          total: 0,
          unit: ""
        }
      ]
      this.productTableList.tableData = this.tableData
    },
    clearupProduct(data) {
      this.tableData = data
      this.productTableList.tableData = this.tableData
    },
    // 获取项目列表
    async getProjectList() {
      await getProjectList({
        page: 1,
        pageSize: 100
      }).then((res) => {
        this.projectList = res.data
      })
    },
    // 销售负责人自定义校验规则
    validateMemberId(rule, value, callback) {
      if (this.editConfig.infomation?.memberId > 0) {
        callback()
      } else {
        callback(new Error("请选择销售负责人"))
      }
    },
    // 选择发货方式
    handleRadioChange(value) {
      if(value===1){
        this.completely=false
        this.satisfyPartly=false
        this.productTableList.tableColumn=[
          { label: "产品编号", prop: "number" },
          { label: "产品名称", prop: "name",   min: 110 },
          { label: "订单数量", prop: "orderAmount" },
          { label: "订单完成数量", prop: "finishAmount" },
          { label: "可用库存", prop: "availableAmount" },
        ]
        this.dissatisfy=false
        let portion=0
        this.productTableList.tableData.map((item)=>{
          if(item.availableAmount-item.leftAmount<0){
            this.dissatisfy=true
            return this.dissatisfy
          }else{
            portion++
          }
        })
        if(portion===this.productTableList.tableData.length){
          this.dissatisfy=false
          this.completely=false
          this.completely=true
        }
      }else if(value===2){
        this.dissatisfy=false
        this.productTableList.tableColumn= [
          { label: "产品编号", prop: "number" },
          { label: "产品名称", prop: "name",  min: 110 },
          { label: "订单数量", prop: "orderAmount" },
          { label: "订单完成数量", prop: "finishAmount" },
          { label: "可用库存", prop: "availableAmount" },
          { label: "未发货数量", prop: "leftAmount",  },
          { label: "本次发货数量", prop: "outputAmount", inputFloat: true,isRequird: true  },
          { label: "剩余发货数量", prop: "availableAmount",},
        ]
        let portion=0
        this.productTableList.tableData.map((item)=>{
          if(item.availableAmount-item.leftAmount>=0){
            portion++
          }
        })
        if(0<portion<this.productTableList.tableData.length){
          this.satisfyPartly=true
        }else if(portion===this.productTableList.tableData.length){
          this.completely=true
          this.dissatisfy=fasle
        }else if(portion===0){
          this.dissatisfy=true
          this.completely=false
        }
      }
    },
    // 产品入库信息
    async getDeliveryPrepareInfo(params){
      await getDeliveryPrepareInfo(params).then((res)=>{
        if(res&&res.code===200){
          this.productTableList.tableData=res.data||[]
          if(this.shipmentsType===1){
            this.productTableList.tableData.map((item)=>{
              if(item.availableAmount-item.leftAmount<0){
                this.dissatisfy=true
                return this.dissatisfy
              }
            })
          }
        }
      })
    }
  }
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style lang="scss" scoped>
::v-deep {
  .iframe-dialog .el-dialog__body {
    .el-form {
      .el-form-item {
        width: 100%;
      }
    }
    .basic-info {
      .basic-info-title {
        background-color: #f4f8fe;
        padding-left: 10px;
        font-size: 15px;
        font-weight: bold;
        color: #666;
        height: 42px;
        line-height: 42px;
      }
      .basic-info-view {
        margin-top: 10px;
        padding-right: 40px;
        .custom-name,
        .common-select {
          display: flex;
          .common-select-sel {
            width: 270px;
          }
          .common-select-btn {
            margin-left: 5px;
            font-size: 16px;
            cursor: pointer;
          }
        }
      }
      .annex-view {
        display: flex;
        color: #6166d3;
        .setFormat {
          margin-left: 10px;
        }
      }
      .tips{
        font-size: 16px;
        color: #FF9C49;
        display: flex;
        margin-left: 20px;
        i{
          font-size: 24px;
          margin-right: 10px;
        }
      }
    }
    .unflod-collapse {
      display: flex;
      height: 30px;
      justify-content: center;
      align-items: center;
      color: #6166d3;
    }
    .dialog-footer {
      background-color: #f5f5f5;
      height: 55px;
      line-height: 55px;
    }
    .el-input__inner {
      text-align: left;
    }
  }
}
</style>