| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594 | <template>  <div>    <basic-container      v-show="isShow">      <avue-crud :option="option"                 :data="dataList"                 ref="crud"                 v-model="form"                 :page.sync="page"                 @row-del="rowDel"                 @row-update="rowUpdate"                 :before-open="beforeOpen"                 :before-close="beforeClose"                 :search.sync="search"                 @row-save="rowSave"                 @saveColumn="saveColumn"                 @search-change="searchChange"                 @search-reset="searchReset"                 @selection-change="selectionChange"                 @current-change="currentChange"                 @size-change="sizeChange"                 @refresh-change="refreshChange"                 @on-load="onLoad"                 @tree-load="treeLoad"                 :cell-style="tableRowClassName"                 :table-loading="loading"                 @expand-change="expandChange"                 @resetColumn="resetColumn"                 @search-criteria-switch="searchCriteriaSwitch"      >        <template slot-scope="scope" slot="expand">          <el-table :data="scope.row.insideList" v-loading="scope.row.loading" :cell-style="tableRowClassName">            <el-table-column  label="产品分类" prop="priceCategory" align="center" show-overflow-tooltip width="200"></el-table-column>            <el-table-column  label="价格类别" prop="priceType" align="center" show-overflow-tooltip width="180"></el-table-column>            <el-table-column  label="商品名称" prop="cname" align="center" show-overflow-tooltip width="120"></el-table-column>            <el-table-column  label="编码" prop="code" align="center" show-overflow-tooltip width="120"></el-table-column>            <el-table-column  label="规格型号" prop="typeno" align="center" show-overflow-tooltip width="120"></el-table-column>            <el-table-column  label="供应商" prop="corpName" align="center" show-overflow-tooltip width="120"></el-table-column>            <el-table-column  label="订货数量" prop="orderQuantity" align="center" show-overflow-tooltip width="180"></el-table-column>            <el-table-column  label="发货数量" prop="actualQuantity" align="center" show-overflow-tooltip width="200"></el-table-column>            <el-table-column  label="库存" prop="storageQuantity" align="center" show-overflow-tooltip width="200"></el-table-column>            <el-table-column  label="采购价格" prop="purchaseAmount" align="center" show-overflow-tooltip width="200"></el-table-column>            <el-table-column  label="最新单价" prop="price" align="center" show-overflow-tooltip width="200"></el-table-column>            <el-table-column  label="金额" prop="amount" align="center" show-overflow-tooltip width="200"></el-table-column>          </el-table>        </template>        <template slot-scope="scope" slot="orderNo">          <span style="color: #409EFF;cursor: pointer" @click.stop="beforeOpenPage(scope.row,scope.index)">{{ scope.row.orgOrderNo }}</span>        </template>        <template slot="corpIdSearch">          <crop-select            v-model="search.corpId"            corpType="KH"          ></crop-select>        </template>        <template slot-scope="scope" slot="corpId">          <span style="color: #409EFF;cursor: pointer" @click.stop="beforeOpenPage(scope.row,scope.index)">{{ scope.row.corpsName }}</span>        </template>        <template slot-scope="scope" slot="createUser">          {{ scope.row.createUserName }}        </template>        <template slot-scope="scope" slot="createPurchase">          {{ scope.row.createPurchase == 1? '是': '否' }}        </template>        <template slot-scope="scope" slot="createFreight">          {{ scope.row.createFreight == 1? '是': '否' }}        </template>        <template slot="status" slot-scope="scope">          <span v-if="scope.row.status == 0">暂存</span>          <span v-else-if="scope.row.status == 1">提交请核</span>          <span v-else-if="scope.row.status == 2">审批中</span>          <span v-else-if="scope.row.status == 3">审批通过</span>        </template>        <template slot="menuLeft" slot-scope="{size}">          <el-button type="success" :size="size" @click="copyOrder" :disabled="single">复制单据</el-button>          <el-button type="info" :size="size" icon="el-icon-printer">报表打印</el-button>          <el-button            type="info"            size="small"            icon="el-icon-download"            @click="exportHandle"          >库 存</el-button>        </template>        <template slot-scope="scope" slot="menu">          <el-button            type="text"            size="small"            @click="saveSell(scope.row)"            :disabled="scope.row.status < 3 || scope.row.createPurchase == 1"          >生成采购</el-button>          <el-button            type="text"            icon="el-icon-delete"            size="small"            @click.stop="rowDel(scope.row,scope.index)"            :disabled="scope.row.status > 0"          >删除          </el-button>        </template>      </avue-crud>    </basic-container>    <detail-page      ref="detail"      @goBack="goBack"      :detailData="detailData"      v-if="!isShow"    ></detail-page>  </div></template><script>import option from "./configuration/mainList.json";import {customerList, typeSave, deleteDetails, saveSell,detail} from "@/api/basicData/configuration"import detailPage from "./detailsPageEdit";import search from "../../../page/index/search";import { defaultDate } from "@/util/date";import { getToken } from "@/util/auth";import os from "os";import { gainUser } from "@/api/basicData/customerInquiry";export default {  name: "customerInformation",  components: {    detailPage  },  data() {    return {      loading: false,      configuration: {        multipleChoices: false,        multiple: false,        collapseTags: false,        placeholder: "请点击右边按钮选择",        dicData: [],        clearable: true      },      form: {},      option: {},      parentId: 0,      search:{},      dataList: [],      page: {        pageSize: 10,        currentPage: 1,        total: 0,        pageSizes: [10,50,100,200,300]      },      // 非单个禁用      single: true,      // 非多个禁用      multiple: true,      selection: [],      isShow: true,      detailData: {},    }  },  async created() {    this.search.businesDate = defaultDate(1)    // this.option = option    this.option = await this.getColumnData(this.getColumnName(14), option);    this.getWorkDicts("payment_term").then(res => {      this.findObject(this.option.column, "paymentType").dicData =        res.data.data;    });    this.getWorkDicts("order_status").then(res => {      this.findObject(this.option.column, "orderStatus").dicData =        res.data.data;    });    gainUser().then(res => {      this.findObject(this.option.column, "createUser").dicData = res.data.data;    })    let i = 0;    this.option.column.forEach(item => {      if (item.search) i++    })    if (i % 3 !== 0){      const num = 3 - Number(i % 3)      this.option.searchMenuSpan = num * 8;      this.option.searchMenuPosition = "right";    }    this.option.column.forEach(item => {      if (item.pickerOptions) {        item.pickerOptions = {          shortcuts: [{            text: '最近一周',            onClick(picker) {              const end = new Date();              const start = new Date();              start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);              picker.$emit('pick', [start, end]);            }          }, {            text: '最近一个月',            onClick(picker) {              const end = new Date();              const start = new Date();              start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);              picker.$emit('pick', [start, end]);            }          }, {            text: '最近三个月',            onClick(picker) {              const end = new Date();              const start = new Date();              start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);              picker.$emit('pick', [start, end]);            }          }]        }      }    })  },  activated() {    setTimeout(() => {      if (this.$route.query.id) {        this.isShow = true        this.beforeOpenPage({id: this.$route.query.id})      }      if (this.$route.query.check) {        this.isShow = true        // this.beforeOpenPage({id: this.$route.query.check.billId})        this.detailData = {          id: this.$route.query.check.billId,          check: this.$route.query.check,          auditId: this.$route.query.check.id,        };        this.isShow = false;        this.$store.commit("DOMXS_IN_DETAIL");      }      if (this.$route.query.params) {        this.beforeOpenPage({id: this.$route.query.params})      }    }, 100)  },  methods: {    searchCriteriaSwitch(type){      if (type){        this.option.height = this.option.height - 190      }else {        this.option.height = this.option.height + 190      }      this.$refs.crud.getTableHeight()    },    tableRowClassName({row, column, rowIndex, columnIndex}) {      if (row.orderStatus == '录入' && columnIndex == 19){        return {          background: '#eceb3c',        }      } else if (row.orderStatus == '成交') {        return 'success-row'      } else if (row.orderStatus == '已报价') {        return 'quote-row'      } else if (row.orderStatus == '未成交') {        return 'warning-row'      }      return "padding:0;height:40px;";    },    //删除列表后面的删除按钮触发触发(row, index, done)    rowDel(row, index, done) {      this.$confirm("确定将选择数据删除?", {        confirmButtonText: "确定",        cancelButtonText: "取消",        type: "warning"      }).then(() => {        return deleteDetails(row.id);      }).then(() => {        this.$message({          type: "success",          message: "操作成功!"        });        this.page.currentPage = 1;        this.onLoad(this.page, {parentId: 0});      });    },    //修改时的修改按钮点击触发    rowUpdate(row, index, done, loading) {      typeSave(row).then(() => {        this.$message({          type: "success",          message: "操作成功!"        });        // 数据回调进行刷新        done(row);      }, error => {        window.console.log(error);        loading();      });    },    //新增修改时保存触发    rowSave(row, done, loading) {      typeSave(row).then(res => {        console.log(res)        done()      })    },    //查询全部    initData() {      customerList().then(res => {        console.log(this.form);        const column = this.findObject(this.option.column, "parentId");        column.dicData = res.data.data.records;      });    },    //新增子项触发    handleAdd(row) {      this.parentId = row.id;      const column = this.findObject(this.option.column, "parentId");      column.value = row.id;      column.addDisabled = true;      this.$refs.crud.rowAdd();    },    closeDetailPage() {      this.isShow = true    },    //查看跳转页面    beforeOpenPage(row, index) {      const data = {        moduleName: 'xs',        tableName: 'business_order',        billId: row.id,        no: localStorage.getItem('browserID')      }      this.checkLock(data).then(res => {        if (res.data.code == 200) {          this.detailData = {            seeDisabled: true,            id: row.id,          };          this.isShow = false;          this.$store.commit("DOMXS_IN_DETAIL");        }      }).catch(err => {        this.detailData = {          id: row.id,          seeDisabled: true,          opDisabled: true        };        this.isShow = false;        this.$store.commit("DOMXS_IN_DETAIL");      })    },    //新增跳转页面    beforeOpen(row, index) {      this.detailData = {        id: row.id,      };      this.isShow = false;      this.$store.commit("DOMXS_IN_DETAIL");    },    editOpen(row, index) {      this.detailData = {        id: row.id,      };      this.isShow = false;      this.$store.commit("DOMXS_IN_DETAIL");    },    // 复制新单    copyOrder() {      const id = this.selection[0].id;      this.detailData = {        copyId: id,      };      this.isShow = false;      this.$store.commit("DOMXS_IN_DETAIL");    },    //点击新增时触发    beforeClose(done) {      this.parentId = "";      const column = this.findObject(this.option.column, "parentId");      column.value = "";      column.addDisabled = false;      done();    },    //点击搜索按钮触发    searchChange(params, done) {      if (params.businesDate) {        params.orderStartDate = params.businesDate[0]+ " " + "00:00:00"        params.orderEndDate = params.businesDate[1]+ " " + "23:59:59"        delete params.businesDate;      }      if (params.requiredDeliveryDate) {        params.deliveryStartDate = params.requiredDeliveryDate[0]+ " " + "00:00:00"        params.deliveryEndDate = params.requiredDeliveryDate[1]+ " " + "23:59:59"        this.$delete(params,'requiredDeliveryDate')      }      if (params.requiredArrivalDate) {        params.arrivalDateStart = params.requiredArrivalDate[0]+ " " + "00:00:00"        params.arrivalDateEnd = params.requiredArrivalDate[1]+ " " + "23:59:59"        this.$delete(params,'requiredArrivalDate')      }      if (params.actualDeliveryDate) {        params.actualDeliveryDateStart = params.actualDeliveryDate[0]+ " " + "00:00:00"        params.actualDeliveryDateEnd = params.actualDeliveryDate[1]+ " " + "23:59:59"        this.$delete(params,'actualDeliveryDate')      }      if (params.createTime) {        params.createTimeStart = params.createTime[0]+ " " + "00:00:00"        params.createTimeEnd = params.createTime[1]+ " " + "23:59:59"        this.$delete(params,'createTime')      }      this.page.currentPage = 1;      this.onLoad(this.page, params);      done()    },    searchReset() {      this.configuration.dicData = []    },    // 选择框    selectionChange(list) {      this.selection = list;      this.single = list.length !== 1;    },    currentChange(currentPage) {      this.page.currentPage = currentPage;    },    sizeChange(pageSize) {      this.page.pageSize = pageSize;    },    //列表刷新触发    refreshChange() {      this.dataList.forEach(item => {        this.$refs.crud.toggleRowExpansion(item, false)      })      this.page.currentPage = 1;      this.onLoad(this.page,this.search);    },    // 表格展开触发    expandChange(row, index) {      if (row.loading) {        detail(row.id).then(res => {          row.insideList = res.data.data.orderItemsList          row.loading = false        })      }    },    onLoad(page, params) {      // 重置掉展开      this.dataList.forEach(item => {        this.$refs.crud.toggleRowExpansion(item, false)      })      let data = this.gobackSearch(params)      let queryParams = Object.assign({}, data, {        size: page.pageSize,        current: page.currentPage,        billType:'XS',        corpsTypeId: this.treeDeptId      })      this.loading = true;      customerList(queryParams).then(res => {        this.dataList = res.data.data.records        this.dataList.forEach(item => {          this.$set(item,'insideList',[])          this.$set(item,'loading', true)        })        this.page.total = res.data.data.total        this.option.height = window.innerHeight - 240;      }).finally(() => {        this.loading = false;      })    },    //树桩列点击展开触发    treeLoad(tree, treeNode, resolve) {      const parentId = tree.id;      customerList({parentId: parentId}).then(res => {        resolve(res.data.data.records);      });    },    goBack() {      this.detailData=this.$options.data().detailData      if (JSON.stringify(this.$route.query) != "{}") {        this.$router.$avueRouter.closeTag();        this.$router.push({          path: "/businessManagement/salesOrder/index"        });      }      this.dataList.forEach(item => {        this.$refs.crud.toggleRowExpansion(item, false)      })      this.isShow = true;      this.onLoad(this.page, this.search);    },    gobackSearch(params) {      params = Object.assign({}, this.search)      if (params.businesDate && params.businesDate != '') {        params.orderStartDate = params.businesDate[0]+ " " + "00:00:00"        params.orderEndDate = params.businesDate[1]+ " " + "23:59:59"        this.$delete(params,'businesDate')      }      if (params.requiredDeliveryDate && params.requiredDeliveryDate != '') {        params.deliveryStartDate = params.requiredDeliveryDate[0]+ " " + "00:00:00"        params.deliveryEndDate = params.requiredDeliveryDate[1]+ " " + "23:59:59"        this.$delete(params,'requiredDeliveryDate')      }      if (params.requiredArrivalDate && params.requiredArrivalDate != '') {        params.arrivalDateStart = params.requiredArrivalDate[0]+ " " + "00:00:00"        params.arrivalDateEnd = params.requiredArrivalDate[1]+ " " + "23:59:59"        this.$delete(params,'requiredArrivalDate')      }      if (params.actualDeliveryDate && params.actualDeliveryDate != '') {        params.actualDeliveryDateStart = params.actualDeliveryDate[0]+ " " + "00:00:00"        params.actualDeliveryDateEnd = params.actualDeliveryDate[1]+ " " + "23:59:59"        this.$delete(params,'actualDeliveryDate')      }      if (params.createTime && params.createTime != '') {        params.createTimeStart = params.createTime[0]+ " " + "00:00:00"        params.createTimeEnd = params.createTime[1]+ " " + "23:59:59"        this.$delete(params,'createTime')      }      return params    },    //列保存触发    async saveColumn() {      /**       * 已定义全局方法,直接使用,saveColumnData保存列数据方法,参数传值(表格名称,当前表格的option数据)       * 已定义全局方法,直接使用,getColumnName方法用来获取枚举值,参数根据自己定义的code值获取中文名       * 一定要执行异步操作,要等接口成功返回,才能执行下一行代码       */      const inSave = await this.saveColumnData(        this.getColumnName(14),        this.option      );      if (inSave) {        this.$message.success("保存成功");        //关闭窗口        this.$refs.crud.$refs.dialogColumn.columnBox = false;        this.$nextTick(() => {          this.$refs.crud.doLayout()        })      }    },    async resetColumn() {      this.option = option;      const inSave = await this.delColumnData(this.getColumnName(14),option);      if (inSave) {        this.$nextTick(() => {          this.$refs.crud.doLayout()        })        this.$message.success("重置成功");        //关闭窗口        this.$refs.crud.$refs.dialogColumn.columnBox = false;      }    },    // 导出    exportHandle() {      this.$confirm('是否导出产品信息?', '提示', {        confirmButtonText: '确定',        cancelButtonText: '取消',        type: 'warning'      }).then(() => {        window.open(          `/api/blade-client/goodsdesc/export-out-info?${            this.website.tokenHeader          }=${getToken()}`        );      }).catch(() => {        this.$message({          type: 'info',          message: '已取消' //        });      })    },    // 生成采购    saveSell(row) {      this.$confirm(row.createPurchase == 1? "已经生成过采购单,是否继续生成?": "是否生成采购单?", {        confirmButtonText: "确定",        cancelButtonText: "取消",        type: "warning"      }).then(() => {        saveSell(row.id).then(res => {          if (res.data.code == 200) {            this.$message.success("生成成功");            this.onLoad(this.page, this.search)          }        })      })    },  }}</script><style scoped>/deep/ .el-table__expanded-cell .el-table__header-wrapper .cell {  font-size: 8px !important;}/deep/ .el-table__body-wrapper .cell {  font-size: 8px;}/*/deep/ .el-table__expanded-cell {*//*  padding-left: 90px;*//*}*/</style>
 |