| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318 | <template>  <div class="borderless" v-loading="pageLoading">    <div class="customer-head">      <div class="customer-back">        <el-button          type="danger"          style="border: none;background: none;color: red"          icon="el-icon-arrow-left"          @click="backToList"          >返回列表        </el-button>      </div>      <div class="add-customer-btn" v-if="showBut">        <el-button type="info" @click="saveSell">生成采购单</el-button>        <el-button type="success" disabled>          复制新单        </el-button>        <el-button          type="primary"          :disabled="disabled"          @click="editCustomer"          :loading="subLoading"          v-if="detailData.status != 1"          >{{ form.id ? "确认修改" : "确认新增" }}        </el-button>      </div>    </div>    <div style="margin-top: 60px;margin-bottom:35px">      <containerTitle title="基础信息"></containerTitle>      <basic-container>        <avue-form ref="form" v-model="form" :option="option">          <template slot="portOfLoad">            <port-info              v-model="form.portOfLoad"              :disabled="detailData.status == 1"            />          </template>          <template slot="portOfDestination">            <port-info              v-model="form.portOfDestination"              :disabled="detailData.status == 1"            />          </template>          <template slot="corpId">            <select-component              v-model="form.corpId"              :configuration="configuration"              :disabled="detailData.status == 1"            ></select-component>          </template>          <template slot="boxNumber">            <el-input              size="mini"              v-model="form.boxNumber"              oninput='this.value=this.value.replace(/[^(\d.)]/g,"").replace(/^(\d+)\.(\d\d).*$/,            "$1.$2")'              placeholder="请输入 起订量"              :disabled="detailData.status == 1"            />          </template>          <template slot="minOrder">            <el-input              size="mini"              v-model="form.minOrder"              oninput='this.value=this.value.replace(/[^(\d.)]/g,"").replace(/^(\d+)\.(\d\d).*$/,            "$1.$2")'              placeholder="请输入 起订量"              :disabled="detailData.status == 1"            />          </template>          <template slot="predictOceanFreight">            <el-input              size="mini"              v-model="form.predictOceanFreight"              oninput='this.value=this.value.replace(/[^(\d.)]/g,"").replace(/^(\d+)\.(\d\d).*$/,            "$1.$2")'              placeholder="请输入 预计海运费"              :disabled="detailData.status == 1"            />          </template>          <template slot="referenceOceanFreight">            <el-input              size="mini"              v-model="form.referenceOceanFreight"              oninput='this.value=this.value.replace(/[^(\d.)]/g,"").replace(/^(\d+)\.(\d\d).*$/,            "$1.$2")'              placeholder="请输入 参考海运费"              :disabled="detailData.status == 1"            />          </template>          <template slot="oceanFreight">            <el-input              size="mini"              v-model="form.oceanFreight"              oninput='this.value=this.value.replace(/[^(\d.)]/g,"").replace(/^(\d+)\.(\d\d).*$/,            "$1.$2")'              placeholder="请输入 实际海运费"              :disabled="detailData.status == 1"            />          </template>          <template slot="orderNo">            <el-input              size="mini"              v-model="form.orderNo"              oninput="this.value=this.value.toUpperCase()"              placeholder="请输入 "              :disabled="detailData.status == 1"            />          </template>        </avue-form>      </basic-container>      <div>        <containerTitle title="商品信息"></containerTitle>        <basic-container>          <avue-crud            ref="crud"            :data="data"            :option="tableOption"            @row-del="rowDel"            @selection-change="goodsSelectionChange"            @saveColumn="saveColumn"            :summary-method="summaryMethod"          >            <template slot="cname" slot-scope="{ row, index }">              <el-button                size="small"                type="text"                @click="rePick(row, index)"                :disabled="disabled"                class="picker"                style="padding:4px 10px;float:left"                >选择</el-button              >              <span> {{ row.cname }}</span>            </template>            <template slot="itemType" slot-scope="{ row }">              <el-select                v-if="row.$cellEdit"                v-model="row.itemType"                filterable                allow-create                default-first-option                placeholder="请输入"                @focus="itemTypeFocus(row)"              >                <el-option                  v-for="(item, index) in itemtypeList"                  :key="index"                  :label="item.value"                  :value="item.value"                >                </el-option>              </el-select>              <span v-else>{{ row.itemType }}</span>            </template>            <template slot="priorityReferrer" slot-scope="{ row }">              <el-checkbox                :disabled="!row.$cellEdit"                v-model="row.priorityReferrer"                :true-label="1"                :false-label="0"              />            </template>            <template slot="corpId" slot-scope="{ row, index }">              <customer-dialog                v-if="row.$cellEdit"                v-model="row.corpName"                :cropIndex="index"                @getcorpId="getcorpId"              ></customer-dialog>              <span v-else>{{ row.corpName }}</span>            </template>            <template slot="purchaseAmount" slot-scope="{ row }">              <el-input                v-if="row.$cellEdit"                v-model="row.purchaseAmount"                size="small"                placeholder="请输入"                @change="priceChange(row)"                oninput='this.value=this.value.replace(/[^(\d.)]/g,"").replace(/^(\d+)\.(\d\d).*$/, "$1.$2")'              ></el-input>              <span v-else>{{ row.purchaseAmount | micrometerFormat }}</span>            </template>            <template slot="price" slot-scope="{ row }">              <el-input                v-if="row.$cellEdit"                v-model="row.price"                size="small"                oninput='this.value=this.value.replace(/[^(\d.)]/g,"").replace(/^(\d+)\.(\d\d).*$/, "$1.$2")'                @change="priceChange(row)"              ></el-input>              <span v-else>{{ row.price | micrometerFormat }}</span>            </template>            <template slot="amount" slot-scope="{ row }">              <span>{{ row.amount | micrometerFormat }}</span>            </template>            <template slot="orderQuantity" slot-scope="{ row }">              <el-input                v-if="row.$cellEdit"                v-model="row.orderQuantity"                size="small"                oninput='this.value=this.value.replace(/[^(\d.)]/g,"").replace(/^(\d+)\.(\d\d).*$/, "$1.$2")'                @change="priceChange(row)"              ></el-input>              <span v-else>{{ row.orderQuantity }}</span>            </template>            <template slot="discount" slot-scope="{ row }">              <el-input                v-if="row.$cellEdit"                v-model="row.discount"                size="small"                oninput='this.value=this.value.replace(/[^(\d.)]/g,"").replace(/^(\d+)\.(\d\d).*$/, "$1.$2")'                @change="discountChange(row)"              ></el-input>              <span v-else>{{ row.discount | isDiscount }}</span>            </template>            <template slot="insurance" slot-scope="{ row }">              <el-input                v-if="row.$cellEdit"                v-model="row.insurance"                size="small"                oninput='this.value=this.value.replace(/[^(\d.)]/g,"").replace(/^(\d+)\.(\d\d).*$/, "$1.$2")'                @change="priceChange(row)"              ></el-input>              <span v-else>{{ row.insurance | micrometerFormat }}</span>            </template>            <template slot="freight" slot-scope="{ row }">              <el-input                v-if="row.$cellEdit"                v-model="row.freight"                size="small"                oninput='this.value=this.value.replace(/[^(\d.)]/g,"").replace(/^(\d+)\.(\d\d).*$/, "$1.$2")'                @change="priceChange(row)"              ></el-input>              <span v-else>{{ row.freight | micrometerFormat }}</span>            </template>            <template slot="taxRate" slot-scope="{ row }">              <el-input                v-if="row.$cellEdit"                v-model="row.taxRate"                size="small"                oninput='this.value=this.value.replace(/[^(\d.)]/g,"").replace(/^(\d+)\.(\d\d).*$/, "$1.$2")'                @change="taxRateChange(row)"              ></el-input>              <span v-else>{{ row.taxRate | isPercentage }}</span>            </template>            <template slot="menuLeft">              <el-button                type="primary"                icon="el-icon-plus"                size="small"                @click.stop="newDetails"                :disabled="detailData.status == 1"                >新增明细</el-button              >              <el-button                type="info"                icon="el-icon-printer"                size="small"                @click.stop="openReport()"                >报 表</el-button              >              <el-button                type="warning"                icon="el-icon-plus"                size="small"                :disabled="detailData.status == 1 || orderItemIds.length == 0"                @click="getInvoice"                >生成发货单              </el-button>            </template>            <template slot="menu" slot-scope="{ row, index }">              <el-button                size="small"                icon="el-icon-edit"                type="text"                @click="rowCell(row, index)"                :disabled="disabled"                >{{ row.$cellEdit ? "保存" : "修改" }}</el-button              >              <el-button                size="small"                icon="el-icon-edit"                type="text"                @click="rowDel(row, index)"                :disabled="detailData.status == 1"                >删 除</el-button              >            </template>          </avue-crud>        </basic-container>      </div>      <fee-info        ref="feeInfo"        :orderFeesList="orderFeesList"        :disabled="detailData.status == 1"        feeUrl="/blade-purchase-sales/orderfees/update"      />      <upload-file        ref="uploadFile"        title="合同附件"        :orderFilesList="orderFilesList"        :disabled="detailData.status == 1"        delUrl="/blade-purchase-sales/orderfiles/update"      />      <div>        <containerTitle title="银行信息"></containerTitle>        <basic-container>          <avue-form ref="form" v-model="form" :option="bankOption" />        </basic-container>      </div>      <div>        <containerTitle title="保险信息"></containerTitle>        <basic-container>          <avue-form ref="form" v-model="form" :option="insuranceOption" />        </basic-container>      </div>      <div>        <containerTitle title="唛头"></containerTitle>        <basic-container>          <avue-form ref="form" v-model="form" :option="markOption" />        </basic-container>      </div>    </div>    <el-dialog      title="导入商品"      append-to-body      class="el-dialogDeep"      :visible.sync="dialogVisible"      width="60%"      :close-on-click-modal="false"      :destroy-on-close="true"      :close-on-press-escape="false"      @close="closeGoods"      top="10vh"    >      <span>        <el-row>          <el-col :span="5">            <div>              <el-scrollbar>                <basic-container style="margin-top:45px">                  <avue-tree :option="treeOption" @node-click="nodeClick" />                </basic-container>              </el-scrollbar>            </div>          </el-col>          <el-col :span="19">            <avue-crud              :option="goodsOption"              :table-loading="loading"              :data="goodsList"              ref="goodsCrud"              @refresh-change="refreshChange"              @selection-change="selectionChange"              @row-click="rowClick"              :page.sync="page"              @on-load="onLoad"              @saveColumn="saveGoodsColumn"            ></avue-crud>          </el-col>        </el-row>      </span>      <span slot="footer" class="dialog-footer">        <el-button @click="dialogVisible = false">取 消</el-button>        <el-button          type="primary"          @click="importGoods"          :disabled="selectionList.length == 0"          >导入</el-button        >      </span>    </el-dialog>    <report-dialog      :switchDialog="switchDialog"      :reportId="form.id"      reportName="客户询价"      @onClose="onClose()"    ></report-dialog>  </div></template><script>import tableOption from "./config/customerContact.json";import goodsOption from "./config/commodity.json";import feeInfo from "@/components/fee-info/main";import uploadFile from "@/components/upload-file/main";import {  detail,  submit,  delItem,  getDeptLazyTree,  getGoods,  deliverGoods,  getPorts,  getSpecification,  saveSell} from "@/api/basicData/salesContract";import _ from "lodash";import reportDialog from "@/components/report-dialog/main";import { micrometerFormat } from "@/util/validate";import { contrastObj, contrastList } from "@/util/contrastData";import customerDialog from "@/components/customer-dialog/main";export default {  name: "detailsPageEdit",  data() {    return {      configuration: {        multipleChoices: false,        multiple: false,        collapseTags: false,        placeholder: "请点击右边按钮选择",        dicData: []      },      switchDialog: false,      form: {        orderStatus: "录入"      },      disabled: false,      dialogVisible: false,      tableOption: {},      option: {        menuBtn: false,        labelWidth: 100,        column: [          {            label: "客户名称",            prop: "corpId",            rules: [              {                required: true,                message: "",                trigger: "blur"              }            ],            span: 16,            slot: true          },          {            label: "系统号",            prop: "sysNo",            span: 8,            disabled: true          },          {            label: "联系人",            prop: "corpAttn",            span: 8          },          {            label: "电话",            prop: "corpTel",            span: 8          },          {            label: "订单状态",            prop: "orderStatus",            span: 8,            type: "select",            dicUrl: "/api/blade-system/dict-biz/dictionary?code=order_status",            props: {              label: "dictValue",              value: "dictValue"            }          },          {            label: "起运港",            prop: "portOfLoad",            span: 8,            type: "select",            filterable: true,            dicData: [],            props: {              label: "name",              value: "name"            }          },          {            label: "目的港",            prop: "portOfDestination",            span: 8,            type: "select",            filterable: true,            dicData: [],            props: {              label: "name",              value: "name"            }          },          {            label: "运输方式",            prop: "transport",            span: 8,            type: "select",            dicUrl: "/api/blade-system/dict-biz/dictionary?code=mode_transport",            props: {              label: "dictValue",              value: "dictValue"            }          },          {            label: "价格条款",            prop: "priceTerms",            span: 8,            type: "select",            dicUrl: "/api/blade-system/dict-biz/dictionary?code=pricing_terms",            props: {              label: "dictValue",              value: "dictValue"            }          },          {            label: "条款说明",            prop: "priceTermsDescription",            span: 16          },          {            label: "收款方式",            prop: "paymentType",            span: 8,            type: "select",            dicUrl: "/api/blade-system/dict-biz/dictionary?code=payment_term",            props: {              label: "dictValue",              value: "dictValue"            }          },          {            label: "收款说明",            prop: "paymentTypeDescription",            span: 16          },          {            label: "订单日期",            prop: "businesDate",            span: 8,            type: "date",            format: "yyyy-MM-dd",            valueFormat: "yyyy-MM-dd 00:00:00",            rules: [              {                required: true,                message: "",                trigger: "blur"              }            ]          },          {            label: "预交日期",            prop: "plannedDeliveryDate",            span: 8,            type: "date",            format: "yyyy-MM-dd",            valueFormat: "yyyy-MM-dd 00:00:00"          },          {            label: "销售订单号",            prop: "orderNo",            span: 8          },          {            label: "币别",            prop: "currency",            span: 8,            type: "select",            dicUrl: "/api/blade-system/dict-biz/dictionary?code=currency",            props: {              label: "dictValue",              value: "dictValue"            },            change: ({ value }) => {              if (value == "CNY") {                this.form.exchangeRate = 1;              }              if (value == "USD") {                this.form.exchangeRate = 6.3843;              }            }          },          {            label: "汇率",            prop: "exchangeRate",            span: 8,            slot: true,            row: true,            disabled: true          },          {            label: "箱型",            prop: "boxPile",            span: 8          },          {            label: "箱量",            prop: "boxNumber",            span: 8          },          {            label: "起订量",            prop: "minOrder",            span: 8          },          {            label: "预计海运费",            prop: "predictOceanFreight",            span: 8          },          {            label: "参考海运费",            prop: "referenceOceanFreight",            span: 8          },          {            label: "实际海运费",            prop: "oceanFreight",            span: 8          },          {            label: "毛利额",            prop: "grossProfit",            span: 8,            disabled: true          },          {            label: "毛利率",            prop: "grossProfitRate",            span: 8,            row: true,            append: "%",            disabled: true          },          {            label: "备注",            prop: "orderRemark",            type: "textarea",            minRows: 2,            span: 8          },          {            label: "采购备注",            prop: "purchaseRemark",            type: "textarea",            minRows: 2,            span: 8          },          {            label: "船务备注",            prop: "shippingRemark",            type: "textarea",            minRows: 2,            span: 8          }        ]      },      treeOption: {        nodeKey: "id",        lazy: true,        treeLoad: function(node, resolve) {          const parentId = node.level === 0 ? 0 : node.data.id;          getDeptLazyTree(parentId).then(res => {            resolve(              res.data.data.map(item => {                return {                  ...item,                  leaf: !item.hasChildren                };              })            );          });        },        addBtn: false,        menu: false,        size: "small",        props: {          label: "title",          value: "value",          children: "children"        }      },      bankOption: {        menuBtn: false,        labelWidth: 100,        column: [          {            label: "外币银行",            prop: "banks",            span: 8          },          {            label: "银行信息",            prop: "banksAccountName",            span: 16,            type: "textarea",            minRows: 2          }        ]      },      insuranceOption: {        menuBtn: false,        labelWidth: 100,        column: [          {            label: "保险描述",            prop: "insuranceRemarks",            span: 24,            type: "textarea",            minRows: 2          }        ]      },      markOption: {        menuBtn: false,        labelWidth: 100,        column: [          {            label: "唛头描述",            prop: "marks",            span: 24,            type: "textarea",            minRows: 2          }        ]      },      page: {        pageSize: 10,        currentPage: 1,        total: 0      },      loading: false,      goodsOption: {},      data: [],      goodsList: [],      selectionList: [],      treeDeptId: null,      orderFeesList: [],      orderFilesList: [],      orderItemIds: [],      itemtypeList: [],      reData: null,      oldform: {        orderStatus: "录入"      },      olddata: [],      oldorderFeesList: [],      oldorderFilesList: [],      subLoading: false,       pageLoading: false,      showBut: true    };  },  props: {    detailData: {      type: Object    }  },  components: {    reportDialog,    feeInfo,    uploadFile,    customerDialog  },  async created() {    this.tableOption = await this.getColumnData(      this.getColumnName(5),      tableOption    );    this.goodsOption = await this.getColumnData(      this.getColumnName(28),      goodsOption    );    if (this.detailData.id) {      this.getDetail(this.detailData.id);    }    if (this.detailData.status == 1) {      this.option.disabled = true;      this.bankOption.disabled = true;      this.insuranceOption.disabled = true;      this.markOption.disabled = true;    }    let _this = this;    this.tableOption.column.forEach(e => {      if (e.prop == "taxRate") {        e.formatter = function(row) {          return _this.textFormat(            Number(row.taxRate ? row.taxRate : 0) / 100,            "0.00%"          );        };      }      if (e.prop == "amount" || e.prop == "price") {        e.formatter = function(row) {          return _this.textFormat(            Number(row.amount ? row.amount : 0),            "#,##0.00"          );        };      }    });    getPorts().then(res => {      this.findObject(this.option.column, "portOfLoad").dicData = res.data;      this.findObject(this.option.column, "portOfDestination").dicData =        res.data;    });    this.getWorkDicts("product_properties").then(res => {      this.findObject(this.tableOption.column, "itemProp").dicData =        res.data.data;    });    this.getWorkDicts("unit").then(res => {      this.findObject(this.tableOption.column, "unit").dicData = res.data.data;    });  },  methods: {    saveSell() {      if (!this.form.id) {        return this.$message.error("此单据没有提交记录,请先提交");      }      this.$confirm("是否生成采购单?", {        confirmButtonText: "确定",        cancelButtonText: "取消",        type: "warning"      }).then(() => {        saveSell(this.form.id).then(res => {          if (res.data.code == 200) {            this.$message.success("生成成功");          }        });      });    },    getcorpId(row) {      this.data[row.index].corpId = row.id;    },    rePick(row, index) {      this.reData = {        ...row,        index: index      };      this.newDetails();    },    rowCell(row, index) {      if (row.$cellEdit == true) {        this.$set(row, "$cellEdit", false);      } else {        this.$set(row, "$cellEdit", true);      }    },    itemTypeFocus(row) {      this.itemtypeList = [];      getSpecification({ goodId: row.itemId }).then(res => {        const data = res.data.data;        this.itemtypeList = data.map(item => ({ value: item }));      });    },    priceChange(row) {      const sum = _.multiply(        _.add(          Number(            _.multiply(              row.price ? row.price : 0,              row.orderQuantity ? row.orderQuantity : 0            )          ),          Number(            _.add(              Number(row.insurance ? row.insurance : 0),              Number(row.freight ? row.freight : 0)            )          )        ),        _.divide(row.discount ? row.discount : 10, 10)      );      row.amount = Number(sum ? sum : 0).toFixed(2);      // let amountSum = 0;      // let purchaseAmountSum = 0;      // let grossProfitRate = 0;      // this.data.forEach(e => {      //   amountSum = _.add(amountSum, Number(e.amount));      //   purchaseAmountSum = _.add(      //     purchaseAmountSum,      //     Number(      //       _.multiply(      //         Number(e.purchaseAmount ? e.purchaseAmount : 0),      //         Number(e.orderQuantity)      //       )      //     )      //   );      //   this.form.grossProfit = _.subtract(amountSum, purchaseAmountSum);      //   grossProfitRate =      //     amountSum != 0      //       ? _.multiply(      //           _.divide(_.subtract(amountSum, purchaseAmountSum), amountSum),      //           100      //         )      //       : 0;      //   this.form.grossProfitRate = Number(      //     grossProfitRate ? grossProfitRate : 0      //   ).toFixed(2);      // });    },    quantityChange(row) {      if (Number(row.orderQuantity) < Number(row.actualQuantity)) {        row.orderQuantity = row.actualQuantity;        this.$message.error("修改的数量不能低于发货数量");      }      if (!row.orderQuantity) {        row.orderQuantity = 0;      } else {        row.amount = _.multiply(row.price, row.orderQuantity).toFixed(2);      }    },    taxRateChange(row) {      if (Number(row.taxRate) >= 100) {        row.taxRate = 0;        this.$message.error("税率不能超过100%");      }    },    grossProfitRateChange(row) {      if (row >= 100) {        this.form.grossProfitRate = 0;        this.$message.error("毛利率不能超过100%");      }    },    rowSave(row) {      console.log(row);      this.$set(row, "$cellEdit", false);    },    rowDel(row, index) {      this.$confirm("确定删除数据?", {        confirmButtonText: "确定",        cancelButtonText: "取消",        type: "warning"      }).then(() => {        if (row.id) {          delItem(row.id).then(res => {            this.$message({              type: "success",              message: "删除成功!"            });            this.data.splice(index, 1);          });        } else {          this.$message({            type: "success",            message: "删除成功!"          });          this.data.splice(index, 1);        }      });    },    importGoods() {      if (this.reData) {        console.log(this.reData);        if (this.selectionList.length != 1) {          return this.$message.error("重新选择的时候只能选择一条数据");        } else {          this.selectionList.forEach(e => {            this.data.forEach((item, index) => {              if (index == this.reData.index) {                item.itemId = e.id;                item.code = e.code;                item.cname = e.cname;                item.priceCategory = e.goodsTypeName;                item.itemUrl = e.url;                item.itemProp = this.reData.itemProp;                item.itemDescription = e.cnameDescription;                item.itemType = this.reData.itemType;                item.tradeTerms = this.reData.tradeTerms;                item.price = this.reData.price;                item.orderQuantity = this.reData.orderQuantity;                item.insurance = this.reData.insurance;                item.freight = this.reData.freight;                item.discount = this.reData.discount;                item.amount = this.reData.amount;                item.taxRate = this.reData.taxRate;                item.unit = e.unit;                item.remarks = this.reData.remarks;                item.$cellEdit = true;              }            });          });        }      } else {        this.selectionList.forEach(e => {          this.data.push({            itemId: e.id,            code: e.code,            cname: e.cname,            priceCategory: e.goodsTypeName,            itemUrl: e.url,            itemProp: null,            itemDescription: e.cnameDescription,            itemType: null,            tradeTerms: null,            price: 0,            orderQuantity: 0,            insurance: 0,            freight: 0,            discount: null,            amount: 0,            taxRate: 0,            unit: e.unit,            remarks: null,            $cellEdit: true          });        });      }      this.dialogVisible = false;    },    closeGoods() {      this.selectionList = [];      this.treeDeptId = "";      this.reData = null;    },    goodsSelectionChange(list) {      this.orderItemIds = [];      list.map(e => {        this.orderItemIds.push(e.id);      });    },    selectionChange(list) {      this.selectionList = list;    },    rowClick(row) {      this.$refs.goodsCrud.toggleSelection([this.goodsList[row.$index]]);    },    nodeClick(data) {      this.treeDeptId = data.id;      this.page.currentPage = 1;      this.onLoad(this.page);    },    //费用查询    onLoad(page, params = {}) {      this.loading = true;      getGoods(page.currentPage, page.pageSize, this.treeDeptId).then(res => {        const data = res.data.data;        this.page.total = data.total;        this.goodsList = data.records;        this.loading = false;        if (this.page.total) {          this.goodsOption.height = window.innerHeight - 550;        } else {          this.goodsOption.height = window.innerHeight - 475;        }      });    },    //商品明细导入    newDetails() {      this.dialogVisible = !this.dialogVisible;    },    getDetail(id) {      this.showBut = false;      this.pageLoading = true;      detail(id)        .then(res => {          this.form = res.data.data;          this.data = res.data.data.orderItemsList;          this.orderFeesList = res.data.data.orderFeesList;          this.orderFilesList = res.data.data.orderFilesList;          this.configuration.dicData = this.form.corpName;          this.oldform = res.data.data;          this.olddata = this.deepClone(res.data.data.orderItemsList);          this.oldorderFeesList = this.deepClone(res.data.data.orderFeesList);          this.oldorderFilesList = this.deepClone(res.data.data.orderFilesList);        })        .finally(() => {          this.showBut = true;          this.pageLoading = false;        });    },    //修改提交触发    editCustomer(status) {      this.$refs["form"].validate((valid, done) => {        done();        if (valid) {          if (this.data.length > 0) {            for (let i = 0; i < this.data.length; i++) {              if (this.data[i].corpId == null) {                return this.$message.error(`请输入第${i + 1}行的供应商`);              }            }          }          const orderFeesList = this.$refs.feeInfo.submitData();          for (let i = 0; i < orderFeesList.length; i++) {            if (orderFeesList[i].corpId == null) {              return this.$message.error(`请输入第${i + 1}行的结算中心`);            }            if (orderFeesList[i].price == 0) {              return this.$message.error(`请正确输入第${i + 1}行的价格`);            }            if (orderFeesList[i].quantity == 0) {              return this.$message.error(`请正确输入第${i + 1}行的数量`);            }          }          const orderFilesList = this.$refs.uploadFile.submitData();          this.subLoading = true;          submit({            ...this.form,            orderItemsList: this.data,            orderFeesList: orderFeesList,            orderFilesList: orderFilesList          })            .then(res => {              this.form = res.data.data;              this.data = res.data.data.orderItemsList;              this.orderFeesList = res.data.data.orderFeesList;              this.orderFilesList = res.data.data.orderFilesList;              this.$message.success(this.form.id ? "修改成功" : "提交成功");              this.oldform = res.data.data;              this.olddata = this.deepClone(res.data.data.orderItemsList);              this.oldorderFeesList = this.deepClone(                res.data.data.orderFeesList              );              this.oldorderFilesList = this.deepClone(                res.data.data.orderFilesList              );              if (status == "goBack") {                this.$emit("goBack");              }            })            .finally(() => {              this.subLoading = false;            });        } else {          return false;        }      });    },    //返回列表    backToList() {      let orderFeesList = this.$refs.feeInfo.submitData();      let orderFilesList = this.$refs.uploadFile.submitData();      if (        contrastObj(this.form, this.oldform) ||        contrastList(this.data, this.olddata) ||        contrastList(orderFeesList, this.oldorderFeesList) ||        contrastList(orderFilesList, this.oldorderFilesList)      ) {        this.$confirm("数据发生变化未有提交记录, 是否提交?", "提示", {          confirmButtonText: "确定",          cancelButtonText: "取消",          type: "warning"        })          .then(() => {            this.editCustomer("goBack");          })          .catch(() => {            this.$emit("goBack");          });      } else {        this.$emit("goBack");      }    },    openReport() {      this.switchDialog = !this.switchDialog;    },    onClose(val) {      this.switchDialog = val;    },    getInvoice() {      if (this.$store.getters.outStatus) {        this.$alert("出口发货单存在,请保存发货单再进行操作", "温馨提示", {          confirmButtonText: "确定",          type: "warning",          callback: action => {            console.log(action);          }        });      } else {        this.inInvoice();      }    },    inInvoice() {      const data = { id: this.form.id, orderItemIds: this.orderItemIds };      deliverGoods(data).then(res => {        if (res.data.code == 200) {          this.$message.success("生成成功");          if (data) {            const data = res.data.data;            data.orderItemsList.forEach(e => {              e.actualQuantity = e.orderQuantity;              e.contractAmount = e.amount;              e.srcId = e.id;              e.specificationAndModel = e.itemType;              delete e.id;              delete e.version;              delete e.status;              delete e.createUser;              delete e.createTime;              delete e.updateUser;              delete e.updateTime;              delete e.isDeleted;            });            delete data.id;            delete data.version;            delete data.status;            delete data.createUser;            delete data.createTime;            delete data.updateUser;            delete data.updateTime;            delete data.isDeleted;            delete data.orderStatus;            data.deliveryStatus = "录入";            data.srcOrderNo = data.sysNo;            delete data.sysNo;            this.$router.$avueRouter.closeTag("/exportTrade/invoice/index");            this.$router.push({              path: "/exportTrade/invoice/index",              query: {                pageType: "Generate",                data: JSON.stringify(data)              }            });          }        }      });    },    async saveColumn() {      const inSave = await this.saveColumnData(        this.getColumnName(5),        this.tableOption      );      if (inSave) {        this.$message.success("保存成功");        //关闭窗口        this.$refs.crud.$refs.dialogColumn.columnBox = false;      }    },    summaryMethod({ columns, data }) {      const sums = [];      if (columns.length > 0) {        columns.forEach((item, index) => {          sums[0] = "合计";          if (item.property == "orderQuantity" || item.property == "amount") {            let qtySum = 0;            let amountSum = 0;            data.forEach(e => {              qtySum = _.add(qtySum, Number(e.orderQuantity));              amountSum = _.add(amountSum, Number(e.amount));            });            //数量总计            if (item.property == "orderQuantity") {              sums[index] = qtySum ? qtySum.toFixed(2) : "0.00";            }            //金额总计            if (item.property == "amount") {              sums[index] = micrometerFormat(amountSum);            }          }        });      }      return sums;    },    async saveGoodsColumn() {      const inSave = await this.saveColumnData(        this.getColumnName(28),        this.goodsOption      );      if (inSave) {        this.$message.success("保存成功");        //关闭窗口        this.$refs.goodsCrud.$refs.dialogColumn.columnBox = false;      }    }  }};</script><style lang="scss" scoped>.customer-head {  position: fixed;  top: 105px;  width: 100%;  margin-left: -10px;  height: 62px;  background: #ffffff;  box-shadow: 0 4px 12px 0px rgba(232, 232, 235, 1);  z-index: 999;}.customer-back {  cursor: pointer;  line-height: 62px;  font-size: 16px;  color: #323233;  font-weight: 400;}.back-icon {  line-height: 64px;  font-size: 20px;  margin-right: 8px;}.sell-customer-btn {  position: fixed;  right: 244px;  top: 115px;}.copy-customer-btn {  position: fixed;  right: 140px;  top: 115px;}.add-customer-btn {  position: fixed;  right: 36px;  top: 115px;}::v-deep .el-form-item {  margin-bottom: 8px;}::v-deep .el-form-item__error {  display: none;}::v-deep .select-component {  display: flex;}</style>
 |