Newer
Older
smartKitchenFront / src / views / product / snCodeField.vue
Stephanie on 14 Nov 2022 7 KB feat<*>: 设备SN码列表修改
<!--SN码列表-->
<template>
  <div class="product_container">
    <div class="productFun">
      <div class="productInput">
        SN码
        <div class="inputBox" style="width: 350px">
          <el-input
            v-model="selectInfo.keyword"
            placeholder="请输入SN码固定标识/起始序列号/终止序列号"
            clearable
            class="product-input"
          />
        </div>
        设备型号
        <div class="inputBox" style="width: 200px">
          <el-input
            v-model="selectInfo.productCode"
            placeholder="请输入设备型号"
            clearable
            class="product-input"
          />
        </div>
      </div>
      <div class="productBtn">
        <el-button
          type="primary"
          icon="el-icon-search"
          class="btnItem"
          @click="selectData"
        >
          查询
        </el-button>
        <el-button
          type="primary"
          icon="el-icon-refresh-right"
          class="btnItem"
          @click="reset"
        >
          重置
        </el-button>
        <el-button
          type="success"
          icon="el-icon-circle-plus-outline"
          class="btnItem bggreen"
          @click="addCategory"
        >
          新增
        </el-button>
        <el-button
          type="danger"
          icon="el-icon-delete-solid"
          class="btnItem bgred"
          @click=" BatchDelete"
        >
          删除
        </el-button>
        <el-button
          type="primary"
          icon="el-icon-folder-opened"
          class="btnItem"
          @click="exportToExcel"
        >
          导出
        </el-button>
      </div>
    </div>
    <el-table
      ref="multipleTable"
      v-loading="loading"
      :data="tableData.rows"
      :row-class-name="tableRowClassName"
      :header-cell-style="{
        'text-align': 'center',
        background: '  #2483b3',
        color: 'white',
      }"
      :row-style="{ 'text-align': 'center' }"
      style="width: 100%"
    >
      <el-table-column type="selection" width="55" />
      <!--      <el-table-column prop="index" label="序号" />-->
      <el-table-column prop="snFixedId" label="SN码(固定标识)" />
      <el-table-column prop="snFixedIllustration" label="SN码(固定标识)说明" />
      <el-table-column prop="snStartCode" label="SN码(起始序列号)" />
      <el-table-column prop="snEndCode" label="SN码(终止序列号)" />
      <el-table-column prop="snSegmentNum" label="码段个数" />
      <el-table-column prop="productCode" label="设备型号" />
      <el-table-column prop="productDate" label="生产日期" />
      <el-table-column prop="hardwareVersion" label="硬件版本" />
      <el-table-column prop="softwareVersion" label="软件版本" />
      <el-table-column label="操作">
        <template slot-scope="scope">
          <el-button
            type="text"
            size="small"
            @click="showInfo(scope.row)"
          >
            详情
          </el-button>
          <el-button
            type="text"
            size="small"
            @click="Bdelete(scope.row)"
          >
            删除
          </el-button>
          <!-- <el-button type="text" size="small">编辑</el-button> -->
        </template>
      </el-table-column>
    </el-table>
    <!-- 分页组件 -->
    <group-page v-model="isFristPage" :limit="limit" :total="total" :offset="offset" :count="tableData.total" @setOffset="setOffset" @setLimit="setLimit" />
    <!-- 新增弹框 -->
    <sn-code-field-dialog :is-show-add="isShowAdd" @close="closeAdd" />
    <sn-field-info-dialog :is-show-info="isShowInfo" :data-info="rowInfo" @close="closeInfo" />
  </div>
</template>

<script>
// 组件
import SnCodeFieldDialog from '../../components/mycomponent/dialog/snCodeFieldDialog.vue'
import GroupPage from '../../components/mycomponent/groupPage.vue'
import SnFieldInfoDialog from '../../components/mycomponent/dialog/snFieldInfoDialog.vue'
// 逻辑
import { tableRowClassName } from '../../utils/myUtils/changeTableTr'
import { listMixin, elDataDialog } from '../../utils/myUtils/mixins/listPage'
import { SN_listPage, SN_batchDelete, SN_delete, SN_listExport } from '../../api/product/snCodeField'
import { exportFile } from '@/utils/exportutils'

export default {
  components: {
    SnCodeFieldDialog,
    GroupPage,
    SnFieldInfoDialog
  },
  mixins: [listMixin, elDataDialog],
  data() {
    return {
      isShowAdd: false, // 显示新增功能
      selectInfo: { // 搜索框中的数据的数据
        keyword: '',
        productCode: ''
      }
    }
  },

  methods: {
    tableRowClassName: tableRowClassName,
    closeAdd() {
      this.isShowAdd = false
      this.refresh()
    },
    addCategory() {
      this.isShowAdd = true
    },
    // 获取指定页面
    getListPage(limit, offset) {
      this.loading = true
      SN_listPage(`limit=${limit}&offset=${offset}`, this.selectInfo).then(res => {
        this.loading = false
        // 得到相关数据
        res.rows.forEach((item, index) => {
          item.index = (index + 1) + ((offset - 1) * 10)
        })
        this.tableData = res
      }).catch(_ => {
        this.loading = false
      })
    },
    reset() {
      this.selectInfo = {
        keyword: '',
        productCode: ''
      }
      this.limit = 10
      this.offset = 1
      this.refresh()
    },
    exportToExcel() {
      // 全屏加载动画
      const loading = this.$loading({
        lock: true,
        text: '下载中,请稍后...',
        spinner: 'el-icon-loading',
        background: 'rgba(0, 0, 0, 0.7)'
      })
      SN_listExport(this.selectInfo).then(res => {
        console.log()
        loading.close() // 关闭加载动画
        console.log('download===', res)
        const blob = new Blob([res.data])
        let fileName = '设备sn码列表.xlsx'
        fileName = fileName.replace(/-|:| /g, '')
        exportFile(blob, fileName)
      })
    },
    // 批量删除
    BatchDelete() {
      //  得到选中行
      const ids = this.$refs.multipleTable.selection.map(item => item.id)
      SN_batchDelete({ ids: ids }).then(res => {
        this.$message({
          message: '删除成功',
          type: 'success'
        })
        this.refresh()
      })
    },
    // 删除
    Bdelete(row) {
      const id = row.id
      SN_delete({ id: id }).then(res => {
        // 删除成功跟新数据
        this.$message({
          message: '删除成功',
          type: 'success'
        })
        this.refresh()
      })
    }
  }
}
</script>

<style lang="scss" scoped>
.product_container {
  position: relative;
  width: 100%;
  min-height: 700px;
  height: 823px;
  overflow: auto;
  .productData {
    width: 100%;
    display: flex;
    justify-content: center;
    .middle {
      margin: 0 30px;
    }
  }
  .productFun {
    margin: 0px 0px 30px;
    display: flex;
    justify-content: space-between;
    .productInput {
      display: flex;
      align-items: center;
      .inputBox {
        margin: 0 50px 0 10px;
      }
    }
    .productBtn {
      .btnItem {
        margin-right: 10px;
        border-radius: 5px;
        // height: 32px;
        // width: 84px;
        font-size: 16px;
      }

    }
  }
  .footer {
    display: flex;
    justify-content: space-between;
    color: #6666;
    margin: 30px 10px;
  }
}
</style>