<template>
  <el-dialog
    title="制品License列表"
    v-model="dialogVisible"
    :close-on-click-modal="false"
    width="70%"
    custom-class="sbom-dialog"
  >
  <div class="query-list">
    <div class="query-item">
      <span class="label">License 名称:</span> 
      <el-input 
        v-model="licenseId" 
        placeholder="输入license名称搜索" 
        :prefix-icon="Search"
        @keyup.enter="search" 
        @blur="search"
      />
    </div>
  </div>
  <div class="sbom-table">
    <el-table
      :data="tableData" 
      stripe 
      border
      highlight-current-row 
    >
      <template #empty>
        <div class="no-data">
          <img src="@/assets/images/no-data.png" alt="" />
          <p>暂无相关内容</p>
        </div>
      </template>
      <el-table-column 
        v-for="(col,colIndex) in columns"
        :key="colIndex"
        :label="col.label"
        :width="col.width"
        :show-overflow-tooltip="col.showTooltip"
      >
        <template #default="scope">
          <div v-if="col.link" @click="goPath(scope.row)" :class="{ link: scope.row.licenseUrl }">{{ scope.row[col.prop] }}</div>
          <span v-else>{{ scope.row[col.prop] }}</span>
        </template>
      </el-table-column>
    </el-table>
    <div class="sbom-pagination">
      <el-pagination 
        layout="total, sizes, prev, pager, next, jumper" 
        :page-sizes="[10, 15, 20, 25, 30]"
        :total="pagination.total" 
        :page-size="pagination.pageSize" 
        v-model:page-size="pagination.pageSize" 
        v-model:currentPage="pagination.pageNum"
        @current-change="handlePageChange" 
        @size-change="handleSizeChange"
      />
    </div>
  </div>
    
  </el-dialog>
</template>

<script lang="ts">
import { defineComponent, ref } from "vue";
import SbomDataService from "@/services/SbomDataService";
import { mapGetters} from 'vuex';
import ResponseData from "@/types/ResponseData";
import { Search } from '@element-plus/icons-vue'
import { ElMessage } from 'element-plus';
function defaultPagination() {
  return {
    pageNum: 1,
    pageSize: 10,
    total: 0
  }
}
export default defineComponent({
  name: "SbomLicenseTable",
  data() {
    return {
      Search: Search,
      dialogVisible: false,
      pagination: defaultPagination(),
      columns: [
        { label: '名称', prop: 'licenseId', link: true },
        { label: '是否OSI/FSF认证', prop: 'isLegal' },
        { label: '数量', prop: 'count' },
      ],
      tableData: [],
      licenseId: '',
      orderBy: ''
    };
  },
  computed:{
    ...mapGetters([
      'getProductName'
    ])
  },
  methods: {
    search() {
      this.pagination.pageNum = 1
      this.pagination.pageSize = 10
      this.getDataList()
    },
    handlePageChange(val: number) {
      this.pagination.pageNum = val
      this.getDataList()
    },
    handleSizeChange( val: number) {
      this.pagination.pageNum = 1
      this.pagination.pageSize = val
      this.getDataList()
    },
    goPath(item: any) {
      if(item.licenseUrl) {
        window.open(item.licenseUrl, '_blank')
      }
    },
    getDataList() {
      let params:any = {
        productName: this.getProductName,
        page: this.pagination.pageNum - 1,
        size: this.pagination.pageSize
      }
      if(this.orderBy) {
        params.orderBy = this.orderBy
      }
      if(this.licenseId) {
        params.license = this.licenseId
      }
      SbomDataService.queryLicenseUniversalApi(params)
        .then((response: ResponseData) => {
          response.data.content.length && response.data.content.map(item => {
            item.isLegal = item.legal ? '是' : '否'
          })
          this.tableData = response.data.content;
          this.pagination.total = response.data.totalElements;
        })
        .catch((e: any) => {
          if (e.response && e.response.status == 500) {
            ElMessage({
            message: e.response.data,
            type: 'error'
            })
          }
          this.tableData = []
          this.pagination.total = 0
        });
        
    },
    openDiaog() {
      this.dialogVisible = true
      this.search()
    }
  },
});

</script>


<style scoped>

</style>