index.vue 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <template>
  2. <div class="ele-body">
  3. <el-card shadow="never">
  4. <!-- Tab 页 -->
  5. <el-tabs v-model="activeTab" @tab-click="handleTabClick">
  6. <el-tab-pane label="我的工单" name="myWork" lazy>
  7. <inspection-work-list ref="myWorkRef" :my-work="true" />
  8. </el-tab-pane>
  9. <el-tab-pane label="检测工单" name="workList" lazy>
  10. <inspection-work-list ref="workListRef" :my-work="false" />
  11. </el-tab-pane>
  12. </el-tabs>
  13. </el-card>
  14. </div>
  15. </template>
  16. <script>
  17. import InspectionWorkList from './components/inspectionWorkList.vue';
  18. // 可用的 tab 名称
  19. const TAB_NAMES = ['myWork', 'workList'];
  20. export default {
  21. name: 'InspectionWork',
  22. components: {
  23. InspectionWorkList
  24. },
  25. data() {
  26. return {
  27. activeTab: 'myWork',
  28. // 已挂载过的 tab:lazy 面板首次挂载时表格会自动加载数据,无需再手动 search
  29. mountedTabs: {}
  30. };
  31. },
  32. created() {
  33. const name = this.$route.query.name;
  34. this.activeTab = TAB_NAMES.includes(name) ? name : 'myWork';
  35. this.$set(this.mountedTabs, this.activeTab, true);
  36. },
  37. methods: {
  38. /* Tab 切换 */
  39. handleTabClick(tab) {
  40. console.log(tab, 'tab');
  41. const name = tab.paneName;
  42. this.$nextTick(() => {
  43. const ref =
  44. name === 'myWork' ? this.$refs.myWorkRef : this.$refs.workListRef;
  45. if (!ref) {
  46. return;
  47. }
  48. if (this.mountedTabs[name]) {
  49. // 面板之前已挂载,手动刷新
  50. ref.search();
  51. } else {
  52. // 首次挂载,ele-pro-table 会自动加载数据,这里只做标记,避免重复请求
  53. this.$set(this.mountedTabs, name, true);
  54. }
  55. });
  56. }
  57. }
  58. };
  59. </script>
  60. <style scoped lang="scss">
  61. :deep(.el-tabs__content) {
  62. padding-top: 20px;
  63. }
  64. :deep(.el-tabs__header) {
  65. margin-bottom: 0;
  66. }
  67. </style>