| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758 | <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="primary"          size="small"          v-if="detailData.status == 1"          class="el-button--small-yh "          @click.stop="openEdit"          >编辑        </el-button>        <el-button          type="primary"          :disabled="disabled && detailData.status == 1"          @click="editCustomer('submit')"          v-if="form.id && detailData.status != 1"          :loading="subLoading"          size="small"          >保存数据        </el-button>        <el-button          type="primary"          :disabled="disabled && detailData.status == 1"          v-if="detailData.status != 1"          @click="editCustomer('fix')"          size="small"          >提 交        </el-button>      </div>    </div>    <div class="customer-main">      <containerTitle title="基础信息"></containerTitle>      <basic-container>        <avue-form          class="trading-form"          ref="form"          v-model="form"          :option="option"        >          <template slot="portOfLoad">            <port-info v-model="form.portOfLoad" :disabled="true" />          </template>          <template slot="portOfDestination">            <port-info v-model="form.portOfDestination" :disabled="true" />          </template>        </avue-form>      </basic-container>      <containerTitle title="商品信息"></containerTitle>      <basic-container>        <avue-crud          ref="crud"          :data="data"          :option="tableOption"          @row-del="rowDel"          @saveColumn="saveColumn"          @resetColumn="resetColumn"          :summary-method="summaryMethod"          :cell-style="cellStyle"        >          <template slot-scope="{ row }" slot="orderQuantity">            <span>{{ row.orderQuantity | IntegerFormat }}</span>          </template>        </avue-crud>      </basic-container>      <containerTitle title="运费明细"></containerTitle>      <basic-container>        <avue-crud          ref="freightCrud"          :data="freightData"          :option="freightOption"          @row-del="rowDel"          @saveColumn="saveFreightColumn"          :cell-style="cellStyle"        >          <template slot="shippingHouse" slot-scope="{ row, index }">            <crop-select              v-show="row.$cellEdit"              v-model="row.shippingHouse"              :cropIndex="index"              @getCorpData="rowCorpData"              corpType="GYS"            ></crop-select>            <span v-show="!row.$cellEdit">{{ row.shippingHouseName }}</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="oceanFreight" slot-scope="{ row }">            <el-input              size="small"              v-model="row.oceanFreight"              oninput="value=value.replace(/[^0-9.]/g,'').replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3')"              placeholder="请输入"              :disabled="detailData.status == 1"              v-if="row.$cellEdit"            />            <span v-else>{{ row.oceanFreight }}</span>          </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>          <template slot="menuLeft">            <el-button              type="primary"              icon="el-icon-plus"              size="small"              @click.stop="addFreight"              :disabled="detailData.status == 1"              >新增</el-button            ></template          >        </avue-crud>      </basic-container>    </div>    <el-dialog      title="导入商品"      append-to-body      class="el-dialogDeep"      :visible.sync="dialogVisible"      width="80%"      :close-on-click-modal="false"      :destroy-on-close="true"      :close-on-press-escape="false"      @close="closeGoods"      top="5vh"      v-dialog-drag    >      <span>        <el-row>          <el-col :span="4">            <div>              <el-scrollbar>                <basic-container>                  <avue-tree                    :option="treeOption"                    @node-click="nodeClick"                    :style="treeStyle"                  />                </basic-container>              </el-scrollbar>            </div>          </el-col>          <el-col :span="20">            <avue-crud              :option="goodsOption"              :table-loading="loading"              :data="goodsList"              ref="goodsCrud"              :search.sync="search"              @search-change="searchChange"              @refresh-change="refreshChange"              @selection-change="selectionChange"              @row-click="rowClick"              :page.sync="page"              @on-load="onLoad"              @saveColumn="saveGoodsColumn"              @resetColumn="resetGoodsColumn"              :cell-style="cellStyle"            ></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 freightOption from "./config/freight.json";import customerDialog from "@/components/customer-dialog/main";import {  detail,  submit,  getDeptLazyTree,  getGoods,  getPorts,  delItem,  commit} from "@/api/basicData/shippingInquiry";import reportDialog from "@/components/report-dialog/main";import { micrometerFormat, IntegerFormat } from "@/util/validate";import { contrastObj, contrastList } from "@/util/contrastData";import _ from "lodash";export default {  name: "detailsPageEdit",  data() {    return {      treeStyle: "height:" + (window.innerHeight - 315) + "px",      switchDialog: false,      form: {},      disabled: false,      dialogVisible: false,      freightOption: freightOption,      tableOption: {},      option: {        menuBtn: false,        labelWidth: 100,        disabled: true,        column: [          {            label: "系统号",            prop: "sysNo",            span: 8          },          {            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: "orderNo",            span: 8          },          {            label: "计划交期",            prop: "plannedDeliveryDate",            span: 8,            type: "date",            format: "yyyy-MM-dd",            valueFormat: "yyyy-MM-dd 00:00:00",            row: true          },          {            label: "箱型",            prop: "boxPile",            type: "select",            dicUrl: "/api/blade-system/dict-biz/dictionary?code=boxType",            props: {              label: "dictValue",              value: "dictValue"            },            span: 8          },          {            label: "箱量",            prop: "boxNumber",            span: 8          },          {            label: "起订量",            prop: "minOrder",            span: 8          },          {            label: "销售指示",            prop: "orderRemark",            type: "textarea",            minRows: 2,            span: 24          }        ]      },      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"        }      },      page: {        pageSize: 10,        currentPage: 1,        total: 0      },      loading: false,      goodsOption: {},      data: [],      goodsList: [],      selectionList: [],      treeDeptId: null,      orderFeesList: [],      freightData: [],      oldform: {},      olddata: [],      oldfreightData: [],      subLoading: false,      pageLoading: false,      showBut: true,      search: {}    };  },  props: {    detailData: {      type: Object    }  },  components: {    reportDialog,    customerDialog  },  async created() {    if (this.detailData.id) {      this.getDetail(this.detailData.id);    }    this.tableOption = await this.getColumnData(      this.getColumnName(13),      tableOption    );    this.goodsOption = await this.getColumnData(      this.getColumnName(32),      goodsOption    );    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;    });  },  filters: {    IntegerFormat(num) {      return IntegerFormat(num);    }  },  methods: {    cellStyle() {      return "padding:0;height:40px;";    },    rowCorpData(row) {      this.data[row.index].shippingHouseName = row.cname;    },    rowCell(row, index) {      if (row.$cellEdit == true) {        this.$set(row, "$cellEdit", false);      } else {        this.$set(row, "$cellEdit", true);      }    },    rowDel(row, index) {      this.$confirm("确定删除数据?", {        confirmButtonText: "确定",        cancelButtonText: "取消",        type: "warning"      }).then(() => {        if (row.id) {          delItem(row.id).then(res => {            this.$message({              type: "success",              message: "删除成功!"            });            this.freightData.splice(index, 1);          });        } else {          this.$message({            type: "success",            message: "删除成功!"          });          this.freightData.splice(index, 1);        }      });    },    rowSave(row) {      this.$set(row, "$cellEdit", false);    },    importGoods() {      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: null,          itemType: null,          orderQuantity: 0,          tradeTerms: null,          price: 0,          amount: 0,          taxRate: 0,          unit: e.unit,          remarks: null,          $cellEdit: true        });      });      this.dialogVisible = false;    },    closeGoods() {      this.selectionList = [];      this.treeDeptId = "";    },    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);    },    searchChange(params, done) {      this.search = this.deepClone(params);      this.onLoad(this.page, params);      done();    },    //费用查询    onLoad(page, params = {}) {      let obj = this.deepClone(Object.assign(params, this.search));      this.loading = true;      getGoods(page.currentPage, page.pageSize, this.treeDeptId, obj).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 - 350;          }        }      );    },    getDetail(id) {      this.showBut = false;      this.pageLoading = true;      detail(id)        .then(res => {          this.form = res.data.data;          this.data = res.data.data.itemsVOList            ? res.data.data.itemsVOList            : [];          this.freightData = res.data.data.orderFreightList            ? res.data.data.orderFreightList            : [];          this.oldform = res.data.data;          this.olddata = this.deepClone(            res.data.data.itemsVOList ? res.data.data.itemsVOList : []          );          this.oldfreightData = this.deepClone(            res.data.data.orderFreightList ? res.data.data.orderFreightList : []          );        })        .finally(() => {          this.showBut = true;          this.pageLoading = false;        });    },    addFreight() {      this.freightData.push({ $cellEdit: true });    },    //修改提交触发    editCustomer(status, status2) {      this.$refs["form"].validate((valid, done) => {        done();        if (valid) {          if (status == "submit") {            this.subLoading = true;            submit({              id: this.form.id,              orderFreightList: this.freightData            })              .then(res => {                this.$message.success("修改成功");                this.form = res.data.data;                this.data = res.data.data.itemsVOList                  ? res.data.data.itemsVOList                  : [];                this.freightData = res.data.data.orderFreightList                  ? res.data.data.orderFreightList                  : [];                this.oldform = res.data.data;                this.olddata = this.deepClone(                  res.data.data.itemsVOList ? res.data.data.itemsVOList : []                );                this.oldfreightData = this.deepClone(                  res.data.data.orderFreightList                    ? res.data.data.orderFreightList                    : []                );                if (status2 == "goBack") {                  if (this.form.id) {                    this.unLock({                      moduleName: "cw",                      tableName: "business_order",                      billId: this.form.id,                      billNo: this.form.orgOrderNo                    });                  }                  this.$emit("goBack");                  this.leaveDetailsKey(this.$route.name);                }              })              .finally(() => {                this.subLoading = false;              });          }          if (status == "fix") {            commit({              id: this.form.id,              orderFreightList: this.freightData            }).then(res => {              this.$message.success("提交成功");              this.form = res.data.data;              this.data = res.data.data.orderItemsList                ? res.data.data.orderItemsList                : [];              this.freightData = res.data.data.orderFreightList                ? res.data.data.orderFreightList                : [];              this.oldform = res.data.data;              this.olddata = this.deepClone(                res.data.data.orderItemsList ? res.data.data.orderItemsList : []              );              this.oldfreightData = this.deepClone(                res.data.data.orderFreightList                  ? res.data.data.orderFreightList                  : []              );            });          }        } else {          return false;        }      });    },    //返回列表    backToList() {      if (        contrastObj(this.form, this.oldform) ||        contrastList(this.data, this.olddata) ||        contrastList(this.freightData, this.oldfreightData)      ) {        this.$confirm("数据发生变化未有提交记录, 是否提交?", "提示", {          confirmButtonText: "确定",          cancelButtonText: "取消",          type: "warning"        })          .then(() => {            this.editCustomer("submit", "goBack");          })          .catch(() => {            if (this.form.id) {              this.unLock({                moduleName: "cw",                tableName: "business_order",                billId: this.form.id,                billNo: this.form.orgOrderNo              });            }            this.$emit("goBack");            this.leaveDetailsKey(this.$route.name);          });      } else {        if (this.form.id) {          this.unLock({            moduleName: "cw",            tableName: "business_order",            billId: this.form.id,            billNo: this.form.orgOrderNo          });        }        this.$emit("goBack");        this.leaveDetailsKey(this.$route.name);      }    },    onClose(val) {      this.switchDialog = val;    },    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;    },    openEdit() {      const data = {        moduleName: "cw",        tableName: "business_order",        billId: this.form.id,        no: localStorage.getItem("browserID"),        billNo: this.form.orgOrderNo      };      this.inDetailsKey(this.$route.name, {        moduleName: "cw",        tableName: "business_order",        billId: this.form.id,        billNo: this.form.orgOrderNo      });      this.checkLock(data).then(res => {        if (res.data.code == 200) {          this.onLock(data);          this.detailData.status = 2;          this.option = this.$options.data().option;        }      });    },    async saveColumn() {      const inSave = await this.saveColumnData(        this.getColumnName(13),        this.tableOption      );      if (inSave) {        this.$message.success("保存成功");        //关闭窗口        this.$refs.crud.$refs.dialogColumn.columnBox = false;      }    },    async resetColumn() {      this.tableOption = tableOption;      const inSave = await this.delColumnData(        this.getColumnName(13),        tableOption      );      if (inSave) {        this.$message.success("重置成功");        //关闭窗口        setTimeout(() => {          this.$refs.crud.$refs.dialogColumn.columnBox = false;        }, 1000);      }    },    async saveGoodsColumn() {      const inSave = await this.saveColumnData(        this.getColumnName(32),        this.goodsOption      );      if (inSave) {        this.$message.success("保存成功");        //关闭窗口        this.$refs.goodsCrud.$refs.dialogColumn.columnBox = false;      }    },    async resetGoodsColumn() {      this.goodsOption = goodsOption;      const inSave = await this.delColumnData(        this.getColumnName(32),        goodsOption      );      if (inSave) {        this.$message.success("重置成功");        //关闭窗口        setTimeout(() => {          this.$refs.goodsCrud.$refs.dialogColumn.columnBox = false;        }, 1000);      }    }  }};</script><style lang="scss" scoped>.trading-form ::v-deep .el-form-item {  margin-bottom: 8px !important;}::v-deep .el-form-item__error {  display: none !important;}::v-deep .select-component {  display: flex !important;}</style>
 |