yangfeng
2024-02-28 7979474ca5570945126d7f087fa4363272d964b4
src/views/other/commonDialog/SelectCommonDialog.vue
@@ -28,11 +28,27 @@
            <el-button type="primary" size="mini" disabled>快速创建</el-button> -->
          </div>
        </div>
        <TableCommonView ref="tableListRef" :table-list="tableList" :select-box="false" @selCommonClick="selNameClick">
        <TableCommonView
          class="bg-list"
          ref="tableListRef"
          :table-list="tableList"
          :select-box="editCommonConfig.isSelectBox"
          :selectBoxList="selectBoxList"
          @selCommonClick="selNameClick"
          @selTableCol="selTableCol"
          @getSelectArray="getSelectArray"
        >
        </TableCommonView>
        <div slot="footer" class="dialog-footer">
          <div class="remark">说明:支持多字段模糊查询,仅显示符合条件的前5条数据</div>
          <!-- <div class="remark">说明:支持多字段模糊查询,仅显示符合条件的前5条数据</div> -->
          <div class="btn-pager">
            <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
          </div>
        </div>
      </div>
      <div slot="footer" class="dialog-footer" v-if="editCommonConfig.isSelectBox">
        <el-button type="primary" size="small" @click="saveClick()">确定</el-button>
        <el-button size="small" @click="editConfig.editVisible = false">取消</el-button>
      </div>
    </el-dialog>
  </div>
@@ -45,18 +61,35 @@
import { getServiceContractList } from "@/api/serviceManage/serviceContract"
import { getServiceOrderList } from "@/api/serviceManage/clientServiceOrder"
import { getProductList } from "@/api/common/other"
import { getSalesReturnList } from "@/api/sales/salesReturn"
import { getSubOrderList } from "@/api/sales/subOrder"
import pageMixin from "@/components/makepager/pager/mixin/pageMixin"
export default {
  name: "EditSelCommonDialog",
  mixins: [pageMixin],
  props: {
    editCommonConfig: {
      type: Object,
      default: () => {
        return {
          editVisible: false,
          isSelectBox: false,
          title: "",
          clientId: 0,
          isRequest: true,
          client_name: "",
          tableInfomation: []
        }
      }
    },
    // 根据报价单查询产品
    quotationNumber: {
      type: [String, Number],
      default: ""
    },
    selectBoxList: {
      type: Array,
      default: () => []
    }
  },
  components: {},
@@ -75,89 +108,187 @@
      search_map: {},
      searchSel: {},
      keyword: "",
      keywordType: ""
      keywordType: "",
      tableColumn: [],
      showCol: [],
      selectArray: []
    }
  },
  created() {
    this.search_map = {
      client_id: this.editConfig.clientId
    }
    this.keyword = this.editConfig.client_name
    this.keywordType = "客户名称"
    this.setTable()
    this.getData()
  },
  methods: {
    setTable() {
      if (this.editConfig.title === "销售总单") {
        this.tableColumn = [
          { label: "单据编号", prop: "number", isClick: true, default: true }, // 单据编号
          { label: "负责人", prop: "member_name" } // 负责人
        ]
        this.showCol = ["单据编号", "负责人"]
        this.tableList = {
          selectIndex: true,
          tableInfomation: [],
          tableColumn: [
            { label: "单据编号", prop: "number", isClick: true }, // 单据编号
            { label: "负责人", prop: "member_name" } // 负责人
          ]
          allcol: [],
          showcol: this.showCol,
          tableColumn: this.setColumnVisible(this.showCol)
        }
        this.searchSel = { value: "number", label: "单据编号" }
      } else if (this.editConfig.title === "服务合同") {
        this.tableColumn = [
          { label: "客户名称", prop: "client_name", default: true }, // 客户名称
          { label: "服务合同编号", prop: "number", isClick: true }, // 服务合同编号
          { label: "负责人", prop: "member_name" }, // 负责人
          { label: "合计", prop: "total" }, // 合计
          { label: "签约日期", prop: "signTime", isTime: true }, // 签约日期
          { label: "合同状态", prop: "serviceContractStatus" } // 合同状态
        ]
        this.showCol = ["客户名称", "服务合同编号", "负责人", "合计", "签约日期", "合同状态"]
        this.tableList = {
          selectIndex: true,
          tableInfomation: [],
          tableColumn: [
            { label: "客户名称", prop: "client_name" }, // 客户名称
            { label: "服务合同编号", prop: "number", isClick: true }, // 服务合同编号
            { label: "负责人", prop: "member_name" }, // 负责人
            { label: "合计", prop: "total" }, // 合计
            { label: "签约日期", prop: "signTime", isTime: true }, // 签约日期
            { label: "合同状态", prop: "serviceContractStatus" } // 合同状态
          ]
          allcol: [],
          showcol: this.showCol,
          tableColumn: this.setColumnVisible(this.showCol)
        }
        this.searchSel = { value: "number", label: "服务合同编号" }
      } else if (this.editConfig.title === "销售明细单") {
        this.tableColumn = [
          { label: "客户名称", prop: "client_name", default: true }, // 客户名称
          { label: "订单编号", prop: "number", isClick: true }, // 订单编号
          { label: "签约日期", prop: "signTime" }, // 签约日期
          { label: "销售负责人", prop: "member_name" }, // 销售负责人
          { label: "合计", prop: "tptal" } // 合计
        ]
        this.showCol = ["客户名称", "订单编号", "签约日期", "销售负责人", "合计"]
        this.tableList = {
          selectIndex: true,
          tableInfomation: [],
          tableColumn: [
            { label: "客户名称", prop: "client_name" }, // 客户名称
            { label: "订单编号", prop: "number", isClick: true }, // 订单编号
            { label: "签约日期", prop: "signTime" }, // 签约日期
            { label: "销售负责人", prop: "member_name" }, // 销售负责人
            { label: "合计", prop: "tptal" } // 合计
          ]
          allcol: [],
          showcol: this.showCol,
          tableColumn: this.setColumnVisible(this.showCol)
        }
        this.searchSel = { value: "number", label: "订单编号" }
      } else if (this.editConfig.title === "报价单") {
        this.tableColumn = [
          { label: "报价单号", prop: "number", isClick: true, default: true }, // 报价单号
          { label: "报价名称", prop: "quotationName" },
          { label: "销售负责人", prop: "member_name" }, // 销售负责人
          { label: "客户名称", prop: "client_name" },
          { label: "所属业务机会", prop: "sale_chance_name" },
          { label: "报价单状态", prop: "quotationStatus" },
          { label: "合计", prop: "amountTotal" }
        ]
        this.showCol = ["报价单号", "报价名称", "销售负责人", "客户名称", "所属业务机会", "报价单状态", "合计"]
        this.tableList = {
          selectIndex: true,
          tableInfomation: [],
          tableColumn: [
            { label: "报价单号", prop: "number", isClick: true }, // 报价单号
            { label: "销售负责人", prop: "member_name" } // 销售负责人
          ]
          allcol: [],
          showcol: this.showCol,
          tableColumn: this.setColumnVisible(this.showCol)
        }
        this.searchSel = { value: "number", label: "报价单号" }
      } else if (this.editConfig.title === "客户服务单") {
        this.tableColumn = [
          { label: "服务单编号", prop: "serviceNumber", isClick: true, default: true }, // 服务单编号
          { label: "主题", prop: "subject" }, // 主题
          { label: "服务方式", prop: "serviceType_name" }, // 服务方式
          { label: "服务人员", prop: "serviceMan_name" }, // 服务人员
          { label: "优先级别", prop: "priorityLevel_name" }, // 优先级别
          { label: "处理状态", prop: "serviceOrderStatus_name" }, // 处理状态
          { label: "客户签名", prop: "qianming" } // 客户签名
        ]
        this.showCol = ["服务单编号", "主题", "服务方式", "服务人员", "优先级别", "处理状态", "客户签名"]
        this.tableList = {
          selectIndex: true,
          tableInfomation: [],
          tableColumn: [
            { label: "服务单编号", prop: "serviceNumber", isClick: true }, // 服务单编号
            { label: "主题", prop: "subject" }, // 主题
            { label: "服务方式", prop: "serviceType_name" }, // 服务方式
            { label: "服务人员", prop: "serviceMan_name" }, // 服务人员
            { label: "优先级别", prop: "priorityLevel_name" }, // 优先级别
            { label: "处理状态", prop: "serviceOrderStatus_name" }, // 处理状态
            { label: "客户签名", prop: "qianming" } // 客户签名
          ]
          allcol: [],
          showcol: this.showCol,
          tableColumn: this.setColumnVisible(this.showCol)
        }
        this.searchSel = { value: "serviceNumber", label: "服务单编号" }
      } else if (this.editConfig.title === "产品名称") {
        this.tableColumn = [
          { label: "产品名称", prop: "name", isClick: this.editCommonConfig.isSelectBox ? false : true, default: true }, // 产品名称
          { label: "产品编号", prop: "number" },
          { label: "销售单价", prop: "price" },
          { label: "单位", prop: "unit" },
          { label: "产品规格", prop: "specs" },
          { label: "型号", prop: "type" }
        ]
        this.showCol = ["产品名称", "产品编号", "销售单价", "单位", "产品规格", "型号"]
        this.tableList = {
          selectIndex: true,
          tableInfomation: [],
          tableColumn: [
            { label: "产品名称", prop: "Name", isClick: true },
            { label: "产品编号", prop: "Number" },
            { label: "规格型号", prop: "MaterialMode" }
          ]
          allcol: [],
          showcol: this.showCol,
          tableColumn: this.setColumnVisible(this.showCol)
        }
        this.searchSel = { value: "Name", label: "产品名称" }
        this.searchSel = { value: "name", label: "产品名称" }
      } else if (this.editConfig.title === "销售退货单") {
        this.tableColumn = [
          { label: "退货单编号", prop: "number", isClick: true, default: true }, // 退货单编号
          { label: "退货日期", prop: "returnDate" },
          { label: "状态", prop: "salesReturnStatus_name" },
          { label: "退入仓库", prop: "repository" }
        ]
        this.showCol = ["退货单编号", "退货日期", "状态", "退入仓库"]
        this.tableList = {
          selectIndex: true,
          tableInfomation: [],
          allcol: [],
          showcol: this.showCol,
          tableColumn: this.setColumnVisible(this.showCol)
        }
        this.searchSel = { value: "number", label: "销售退货单编号" }
      } else if (this.editConfig.title === "销售子单") {
        this.tableColumn = [
          { label: "单据编号", prop: "number", isClick: true, default: true }, // 单据编号
          { label: "负责人", prop: "member_name" } // 负责人
        ]
        this.showCol = ["单据编号", "负责人"]
        this.tableList = {
          selectIndex: true,
          tableInfomation: [],
          allcol: [],
          showcol: this.showCol,
          tableColumn: this.setColumnVisible(this.showCol)
        }
        this.searchSel = { value: "number", label: "单据编号" }
      }
      this.tableList.allcol = this.tableList.tableColumn.filter((ele) => !ele.default).map((ele) => ele.label)
      this.searchOptions = []
      for (let i = 0; i < this.tableList.tableColumn.length; i++) {
        const label = this.tableList.tableColumn[i].label
        const value = this.tableList.tableColumn[i].prop
        this.searchOptions.push({ value: value, label: label })
      }
    },
    setColumnVisible(showCol) {
      return this.tableColumn.map((ele) => {
        return {
          ...ele,
          isShowColumn: showCol.includes(ele.label)
        }
      })
    },
    selTableCol(val) {
      this.showcol = val
      this.tableList.tableColumn = this.setColumnVisible(val)
    },
    // 列表多选
    getSelectArray(val) {
      this.selectArray = val
    },
    saveClick() {
      this.$emit("getSelectArray", this.selectArray)
      this.editConfig.editVisible = false
    },
    // 请求数据
    async getData() {
@@ -174,14 +305,18 @@
        this.getServiceOrderList()
      } else if (this.editConfig.title === "产品名称") {
        this.getProductList()
      } else if (this.editConfig.title === "销售退货单") {
        this.getSalesReturnList()
      } else if (this.editConfig.title === "销售子单") {
        this.getSubOrderList()
      }
    },
    // 销售总单
    async getMasterOrderList() {
      await getMasterOrderList({
        search_map: this.search_map,
        page: 0,
        pageSize: 0
        page: this.pagerOptions.currPage,
        pageSize: this.pagerOptions.pageSize
      }).then((res) => {
        if (res.code === 200) {
          if (res.data.list && res.data.list.length > 0) {
@@ -191,7 +326,8 @@
                member_name: item.member.username
              }
            })
            this.tableList.tableInfomation = list.slice(0, 5) || []
            this.tableList.tableInfomation = list || []
            this.pagerOptions.totalCount = res.data.count
          } else {
            this.tableList.tableInfomation = []
          }
@@ -204,8 +340,8 @@
      await getServiceContractList({
        keyword: this.keyword,
        keywordType: this.keywordType,
        page: 0,
        pageSize: 0
        page: this.pagerOptions.currPage,
        pageSize: this.pagerOptions.pageSize
      }).then((res) => {
        if (res.code === 200) {
          if (res.data.list && res.data.list.length > 0) {
@@ -217,7 +353,8 @@
                serviceContractStatus: item.serviceContractStatus.name
              }
            })
            this.tableList.tableInfomation = list.slice(0, 5) || []
            this.tableList.tableInfomation = list || []
            this.pagerOptions.totalCount = res.data.count
          } else {
            this.tableList.tableInfomation = []
          }
@@ -227,20 +364,37 @@
    },
    // 报价单
    async getQuotationList() {
      if (!this.editConfig.isRequest) {
        this.tableList.tableInfomation = this.editConfig.tableInfomation.map((item) => {
          return {
            ...item,
            client_name: item.client.name,
            sale_chance_name: item.sale_chance.name,
            member_name: item.member.username,
            quotationStatus: item.quotation_status.name
          }
        })
        this.pagerOptions.totalCount = this.editConfig.count ? this.editConfig.count : 0
        return true
      }
      await getQuotationList({
        search_map: this.search_map,
        page: 0,
        pageSize: 0
        page: this.pagerOptions.currPage,
        pageSize: this.pagerOptions.pageSize
      }).then((res) => {
        if (res.code === 200) {
          if (res.data.list && res.data.list.length > 0) {
            const list = res.data.list.map((item) => {
              return {
                ...item,
                member_name: item.member.username
                client_name: item.client.name,
                sale_chance_name: item.sale_chance.name,
                member_name: item.member.username,
                quotationStatus: item.quotation_status.name
              }
            })
            this.tableList.tableInfomation = list.slice(0, 5) || []
            this.tableList.tableInfomation = list || []
            this.pagerOptions.totalCount = res.data.count
          } else {
            this.tableList.tableInfomation = []
          }
@@ -251,10 +405,9 @@
    // 销售明细单
    async getSalesDetailsList() {
      await getSalesDetailsList({
        keyword: this.keyword,
        keywordType: this.keywordType,
        page: 0,
        pageSize: 0
        clientId: Number(this.editCommonConfig.clientId),
        page: this.pagerOptions.currPage,
        pageSize: this.pagerOptions.pageSize
      }).then((res) => {
        if (res.code === 200) {
          if (res.data.list && res.data.list.length > 0) {
@@ -265,7 +418,8 @@
                member_name: item.Member.username
              }
            })
            this.tableList.tableInfomation = list.slice(0, 5) || []
            this.tableList.tableInfomation = list || []
            this.pagerOptions.totalCount = res.data.count
          } else {
            this.tableList.tableInfomation = []
          }
@@ -278,8 +432,8 @@
      await getServiceOrderList({
        keyword: this.keyword,
        keywordType: this.keywordType,
        page: 0,
        pageSize: 0
        page: this.pagerOptions.currPage,
        pageSize: this.pagerOptions.pageSize
      }).then((res) => {
        if (res.code === 200) {
          if (res.data.data && res.data.data.length > 0) {
@@ -295,7 +449,8 @@
                serviceOrderStatus_name: item.ServiceOrderStatus_name
              }
            })
            this.tableList.tableInfomation = list.slice(0, 5) || []
            this.tableList.tableInfomation = list || []
            this.pagerOptions.totalCount = res.data.count
          } else {
            this.tableList.tableInfomation = []
          }
@@ -305,21 +460,74 @@
    },
    // 产品名称
    async getProductList() {
      await getProductList({
        productName: "",
        productNumber: "",
        page: 1,
        pageSize: 5
      }).then((res) => {
      let params = {
        productName: this.keywordType === "产品名称" ? this.keyword : "",
        productNumber: this.keywordType === "产品编号" ? this.keyword : "",
        page: this.pagerOptions.currPage,
        pageSize: this.pagerOptions.pageSize
      }
      // 根据报价单查询产品
      if (this.quotationNumber) {
        params.quotationNumber = this.quotationNumber
      }
      await getProductList(params).then((res) => {
        console.log(res.data)
        if (res.data.code === 200) {
          if (res.data.data.data && res.data.data.data.length > 0) {
            const list = res.data.data.data.map((item) => {
        if (res.code === 200) {
          if (res.data.data && res.data.data.length > 0) {
            const list = res.data.data.map((item) => {
              return {
                ...item
              }
            })
            this.tableList.tableInfomation = list.slice(0, 5) || []
            this.tableList.tableInfomation = list || []
            this.pagerOptions.totalCount = res.data.count
          } else {
            this.tableList.tableInfomation = []
          }
        }
        this.loading = false
      })
    },
    async getSalesReturnList() {
      await getSalesReturnList({
        clientId: Number(this.editCommonConfig.clientId),
        page: this.pagerOptions.currPage,
        pageSize: this.pagerOptions.pageSize
      }).then((res) => {
        if (res.code === 200) {
          if (res.data.list && res.data.list.length > 0) {
            const list = res.data.list.map((item) => {
              return {
                ...item,
                salesReturnStatus_name: item.SalesReturnStatus.name
              }
            })
            this.tableList.tableInfomation = list || []
            this.pagerOptions.totalCount = res.data.count
          } else {
            this.tableList.tableInfomation = []
          }
        }
        this.loading = false
      })
    },
    // 销售子单
    async getSubOrderList() {
      await getSubOrderList({
        search_map: this.search_map,
        page: this.pagerOptions.currPage,
        pageSize: this.pagerOptions.pageSize
      }).then((res) => {
        if (res.code === 200) {
          if (res.data.list && res.data.list.length > 0) {
            const list = res.data.list.map((item) => {
              return {
                ...item,
                member_name: item.member.username
              }
            })
            this.tableList.tableInfomation = list || []
            this.pagerOptions.totalCount = res.data.count
          } else {
            this.tableList.tableInfomation = []
          }
@@ -331,6 +539,9 @@
      this.editConfig.editVisible = false
    },
    selNameClick(row) {
      if (this.editCommonConfig.isSelectBox) {
        return true
      }
      this.editConfig.editVisible = false
      if (this.editConfig.title === "销售总单") {
        this.$emit("selClient", row, "master")
@@ -344,6 +555,10 @@
        this.$emit("selClient", row, "customService")
      } else if (this.editConfig.title === "产品名称") {
        this.$emit("selClient", row, "productName")
      } else if (this.editConfig.title === "销售退货单") {
        this.$emit("selClient", row, "salesReturn")
      } else if (this.editConfig.title === "销售子单") {
        this.$emit("selClient", row, "subbill")
      }
    },
    // 搜索
@@ -370,6 +585,9 @@
<style lang="scss" scoped>
.bg-view {
  margin: 10px;
  .bg-list {
    min-height: 370px;
  }
  .query-bg {
    margin-left: -20px;
    margin-bottom: 10px;
@@ -381,6 +599,7 @@
        width: 100px;
      }
    }
    .btn {
      float: right;
    }
@@ -391,9 +610,16 @@
  cursor: pointer;
}
.dialog-footer {
  height: 40px;
  line-height: 40px;
  height: 50px;
  line-height: 50px;
  color: red;
  .btn-pager {
    display: flex;
    margin-top: 0px;
    .page {
      margin-left: auto;
    }
  }
}
::v-deep {
  .input-with-select .el-input-group__prepend {