table封裝成全局組件


主要是利用了插槽

<!-- table全局組件 -->
<template>
  <el-table
    v-if="tableData.length"
    :data="tableData"
    style="width: 100%"
    row-key="classification"
  >
    <el-table-column
      align="center"
      stripe
      v-for="(item, index) in tableConfig.head"
      :key="index"
      :label="item.label"
    >
      <template slot-scope="scope">
        <template v-if="item.slotName">
          <slot
            :name="item.slotName"
            :rowData="scope.row"
            :index="scope.$index"
          >
            <!-- 1使用作用域插槽 給外部用戶預留了插槽,但是如果外面不用,就是用默認值 -->
            {{ scope.row[item.prop] }}
          </slot>
        </template>
        <!-- 如果沒帶slotName屬性,就默認展示該條數據信息 -->
        <template v-else>{{ scope.row[item.prop] }}</template>
      </template>
    </el-table-column>
  </el-table>
</template>
<script>
export default {
  name: "VTable",
  props: {
    tableConfig: {
      type: Object,
      required: true,
      default: () => {},
    },
    tableData: {
      type: Array,
      required: true,
      default: () => [],
    },
  },
  data() {
    return {};
  },
  methods: {
    /**********************************************網絡請求模塊******************************************************/
    /*********************************************數據邏輯處理模塊**************************************************/
  },
};
</script>
<style lang="scss" scoped>
</style>

 使用

<!--1 Application Management 應用管理-->
<template>
  <div class="app-management">
    <v-table :table-config="tableConfig" :table-data="tableData">
      <!-- 插入applicationName內容 實現外部自定義樣式 -->
      <template #applicationName="{ rowData }">
        <span class="application-name">{{ rowData.applicationName }}</span>
      </template>
      <!-- 插入opt 實現自定義表格最右邊操作選項 -->
      <template #opt="{ rowData, index }">
        <div class="table-opt">
          <span @click="pointDetail(index, rowData)">積分詳情</span>
          <span class="line"></span>
          <span @click="editCategory(index, rowData)">編輯分類</span>
        </div>
      </template>
    </v-table>
  </div>
</template>
<script>
export default {
  name: "ApplicationManagement",
  data() {
    return {
      tableConfig: {
        head: [
          {
            prop: "applicationName",
            label: "應用名稱",
           slotName: "applicationName",
          },
          {
            prop: "pointName",
            label: "積分名稱",
          },
          {
            prop: "categoryName",
            label: "分類",
          },
          {
            prop: "createTime",
            label: "創建時間",
          },
          {
            prop: "updateTime",
            label: "更新時間",
          },
          {
            prop: "opt",
            label: "操作",
            slotName: "opt",
          },
        ],
      },
      tableData: [
        {
          applicationName: "天府市民雲",
          pointName: "雲豆",
          categoryName: "任務分類1,任務分類2,任務分類3",
          createTime: "2020-10-22 19:21:21",
          updateTime: "2020-10-22 19:21:21",
        },
        {
          applicationName: "全國版市民雲",
          pointName: "雲幣",
          categoryName: "任務分類1,任務分類3",
          createTime: "2020-10-22 19:21:21",
          updateTime: "2020-10-22 19:21:21",
        },
      ],
    };
  },
  methods: {
    /**********************************************網絡請求模塊******************************************************/
    /*********************************************數據邏輯處理模塊**************************************************/
    //積分詳情
    pointDetail(index, row) {
      console.log(index, row);
    },
    //編輯分類
    editCategory(index, row) {
      console.log(index, row);
      this.$router.push({ name: "TaskClassification" });
    },
  },
  created() {},
};
</script>
<style lang="scss" scoped>
.app-management {
  .application-name {
    color: #3894ff;
  }
}
</style>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM