zuozhengqing
2024-03-22 05b72b58002a8733b8b31825ea5edabe7e279283
src/views/other/commonDialog/SelectCommonDialog.vue
@@ -1,80 +1,93 @@
<template>
  <div class="edit-selClient-box">
    <el-dialog
      :title="editCommonConfig.title"
      :visible.sync="editConfig.editVisible"
      :width="dialogWidth"
      :before-close="handleClose"
      :append-to-body="true"
      :close-on-click-modal="false"
    >
      <div slot="title" class="tac drawerHeader">{{ editCommonConfig.title }}</div>
      <div class="bg-view">
        <div class="query-bg">
          <!-- <el-input placeholder="请输入内容" v-model="queryInput" size="mini" class="input-with-select">
            <el-select v-model="select" slot="prepend" placeholder="请选择">
              <el-option v-for="item in commonOptions" :key="item.id" :label="item.name" :value="item.name">
              </el-option>
            </el-select>
          </el-input> -->
          <SearchCommonView
            ref="searchCommonView"
            :search-options="searchOptions"
            @searchClick="searchClick"
            @resetClick="resetClick"
            :search-sel="searchSel"
          />
          <div class="btn">
            <!-- <el-button type="primary" size="mini" disabled>设置字段</el-button>
            <el-button type="primary" size="mini" disabled>快速创建</el-button> -->
          </div>
          <el-input
            v-model="bomParams.keyword"
            placeholder="搜索产品名称,编码等关键词"
            style="width: 60%; margin-right: 10px"
          ></el-input>
          <el-button type="primary" @click="searchClick">查询</el-button>
        </div>
        <TableCommonView ref="tableListRef" :table-list="tableList" :select-box="false" @selCommonClick="selNameClick">
        <TableCommonView
          class="bg-list"
          ref="tableListRef"
          :loading="loading"
          :table-list="tableList"
          :select-box="editCommonConfig.isSelectBox"
          @selCommonClick="selNameClick"
          @selTableCol="selTableCol"
          @getSelectArray="getSelectArray"
        >
        </TableCommonView>
        <div slot="footer" class="dialog-footer">
          <div class="remark">说明:支持多字段模糊查询,仅显示符合条件的前5条数据</div>
          <div class="btn-pager">
            <PagerView
              class="page"
              :pager-options="pagerOptions"
              :pagerCount="pagerCount"
              layout="total, sizes, prev, pager, next"
              v-on="pagerEvents"
            />
          </div>
        </div>
      </div>
      <div slot="footer" class="dialog-footer" v-if="editCommonConfig.isSelectBox">
        <el-button type="primary" @click="saveClick()">确定</el-button>
        <el-button @click="editConfig.editVisible = false">取消</el-button>
      </div>
    </el-dialog>
  </div>
</template>
<script>
// import { getProductListFromGrpc,getProductList } from "@/api/productManage/product"
import { getProductList } from "@/api/product/product"
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: []
        }
      }
    },
    sign: {
      type: String,
      default: ""
    }
  },
  components: {},
  computed: {},
  data() {
    return {
      dialogWidth: "50%",
      dialogWidth: "42rem",
      pagerCount: 5,
      editConfig: this.editCommonConfig,
      queryInput: "",
      select: "全部字段",
      tableData: [],
      searchSelOptions: [],
      loading: false,
      tableList: {},
      searchOptions: [],
      search_map: {},
      searchSel: {},
      keyword: "",
      keywordType: ""
      showcolTop: ["产品规格", "产品型号"],
      selectArray: [],
      bomParams: {
        keyword: "",
        page: 1,
        pageSize: 10,
        types: ["原材料", "半成品", "成品"]
      }
    }
  },
  created() {
@@ -83,22 +96,66 @@
  },
  methods: {
    setTable() {
      if (this.editConfig.title === "产品名称") {
        this.tableList = {
          tableInfomation: [],
          tableColumn: [
            { label: "产品名称", prop: "name", isClick: true },
            { label: "产品编号", prop: "number" }
          ]
        }
        this.searchSel = { value: "name", label: "产品名称" }
      this.tableList = {
        tableInfomation: [],
        selectIndex: false,
        selectBox: this.editCommonConfig.isSelectBox,
        showcol: this.showcolTop,
        allcol: [],
        tableColumn: this.setTopTableColumn(this.showcolTop)
      }
      this.searchOptions = []
      let allcol = []
      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 })
        if (!this.tableList.tableColumn[i].default) {
          const label = this.tableList.tableColumn[i].label
          allcol.push(label)
        }
      }
      this.tableList.allcol = allcol
    },
    setTopTableColumn(showcol) {
      let tableColumn = [
        {
          label: "产品名称",
          prop: "name",
          isShowColumn: true,
          default: true,
          isClick: true
        },
        {
          label: "产品编码",
          prop: "id",
          min: 110,
          isShowColumn: true,
          default: true
        },
        {
          label: "产品规格",
          prop: "specs",
          isShowColumn: showcol.includes("产品规格"),
          default: false
        },
        {
          label: "产品型号",
          prop: "type",
          width: 90,
          isShowColumn: showcol.includes("产品型号"),
          default: false
        }
      ]
      return tableColumn
    },
    selTableCol(val) {
      this.showcolTop = val
      this.tableList.tableColumn = this.setTopTableColumn(val)
    },
    // 列表多选
    getSelectArray(val) {
      this.selectArray = val
    },
    saveClick() {
      this.$emit("getSelectArray", this.selectArray)
      this.editConfig.editVisible = false
    },
    // 请求数据
    async getData() {
@@ -109,21 +166,15 @@
    },
    // 产品名称
    async getProductList() {
      // let fn = this.sign == "purchase" ? getProductList : getProductListFromGrpc;
      let fn
      await fn({
        page: 1,
        pageSize: 100
      }).then((res) => {
      this.bomParams.page = this.pagerOptions.currPage ? this.pagerOptions.currPage : 1
      this.bomParams.pageSize = this.pagerOptions.pageSize ? this.pagerOptions.pageSize : 15
      let params = JSON.parse(JSON.stringify(this.bomParams))
      await getProductList(params).then((res) => {
        console.log(res.data)
        if (res.data.code === 200) {
          if (res.data.data.list && res.data.data.list.length > 0) {
            const list = res.data.data.list.map((item) => {
              return {
                ...item
              }
            })
            this.tableList.tableInfomation = list.slice(0, 5) || []
        if (res.code === 200) {
          if (res.data) {
            this.tableList.tableInfomation = res.data || []
            this.pagerOptions.totalCount = res.total ? res.total : 0
          } else {
            this.tableList.tableInfomation = []
          }
@@ -135,25 +186,22 @@
      this.editConfig.editVisible = false
    },
    selNameClick(row) {
      if (this.editCommonConfig.isSelectBox) {
        return true
      }
      this.editConfig.editVisible = false
      if (this.editConfig.title === "产品名称") {
        this.$emit("selClient", row, "productName")
      }
    },
    // 搜索
    searchClick(val, content) {
      console.log(val, content)
      this.search_map = {
        [val.value]: content
      }
      this.keyword = content
      this.keywordType = val.label
    searchClick() {
      this.bomParams.page = 1
      this.total = 0
      this.getData()
    },
    resetClick() {
      this.search_map = {}
      this.keyword = ""
      this.keywordType = ""
      this.getData()
    }
  }
@@ -163,18 +211,18 @@
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style lang="scss" scoped>
.bg-view {
  margin: 10px;
  .bg-list {
    height: 370px;
  }
  .query-bg {
    margin-left: -20px;
    margin-bottom: 10px;
    display: flex;
    justify-content: space-between;
    .el-input {
      width: 310px;
      .el-select {
        width: 100px;
      }
    }
    .btn {
      float: right;
    }
@@ -185,13 +233,17 @@
  cursor: pointer;
}
.dialog-footer {
  height: 40px;
  line-height: 40px;
  color: red;
  .btn-pager {
    display: flex;
    margin-top: 0px;
    .page {
      margin-left: auto;
    }
  }
}
::v-deep {
  .input-with-select .el-input-group__prepend {
    background-color: #fff;
  .el-dialog__body {
    padding-bottom: 10px !important;
  }
}
</style>