|
@@ -2,17 +2,18 @@
|
|
<div class="generating_container app-container">
|
|
<div class="generating_container app-container">
|
|
<el-card>
|
|
<el-card>
|
|
<div class="header_top">
|
|
<div class="header_top">
|
|
- <div v-for="(tab,idx) in visibleTabs" :key="idx" class="pointer" :class="{'active-tab': idx== tabActive}"
|
|
|
|
|
|
+ <div v-for="(tab,idx) in visibleTabs" :key="idx" class="pointer"
|
|
|
|
+ :class="{'active-tab': tab.content==tabActive}"
|
|
@click="handleTabChange(idx)">
|
|
@click="handleTabChange(idx)">
|
|
{{ tab.label }}
|
|
{{ tab.label }}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</el-card>
|
|
</el-card>
|
|
<!-- 效果不好,每次tab切换时都会完全重新加载组件,没有缓存效果 -->
|
|
<!-- 效果不好,每次tab切换时都会完全重新加载组件,没有缓存效果 -->
|
|
- <!--<component v-if="currentTab" :is="currentTab.content"></component>-->
|
|
|
|
|
|
+ <!-- <component v-if="tabActive" :is="tabActive"></component>-->
|
|
<!-- NOTE:类似延迟加载 -->
|
|
<!-- NOTE:类似延迟加载 -->
|
|
- <component v-for="tab in visibleTabs" :key="tab.label" :is="tab.content"
|
|
|
|
- v-if="tabVisited.includes(tab.content)" v-show="tab==currentTab"></component>
|
|
|
|
|
|
+ <component v-for="tab in visibleTabs" :is="tab.content" :key="tab.content"
|
|
|
|
+ v-if="tabVisited.includes(tab.content)" v-show="tab.content==tabActive"></component>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</template>
|
|
<script>
|
|
<script>
|
|
@@ -38,72 +39,53 @@ export default {
|
|
},
|
|
},
|
|
data() {
|
|
data() {
|
|
return {
|
|
return {
|
|
- tabs: [{
|
|
|
|
|
|
+ normalTabs: [{
|
|
label: '手动组卷',
|
|
label: '手动组卷',
|
|
- content: PaperByHand.name,
|
|
|
|
- supportNormal: true,
|
|
|
|
- supportPaperWork: false
|
|
|
|
|
|
+ content: PaperByHand.name
|
|
}, {
|
|
}, {
|
|
label: '组卷作业',
|
|
label: '组卷作业',
|
|
- content: PaperByHand.name,
|
|
|
|
- supportNormal: false,
|
|
|
|
- supportPaperWork: true
|
|
|
|
|
|
+ content: PaperByHand.name
|
|
}, {
|
|
}, {
|
|
label: '智能组卷',
|
|
label: '智能组卷',
|
|
- content: PaperByIntelligent.name,
|
|
|
|
- supportNormal: true,
|
|
|
|
- supportPaperWork: false
|
|
|
|
- }, {
|
|
|
|
- label: '组卷记录',
|
|
|
|
- content: PaperRecord.name,
|
|
|
|
- supportNormal: true,
|
|
|
|
- supportPaperWork: false
|
|
|
|
|
|
+ content: PaperByIntelligent.name
|
|
|
|
+ }],
|
|
|
|
+ paperWorkTabs: [{
|
|
|
|
+ label: '组卷作业',
|
|
|
|
+ content: PaperByHand.name
|
|
}, {
|
|
}, {
|
|
label: '视频作业',
|
|
label: '视频作业',
|
|
- content: PaperWorkVideo.name,
|
|
|
|
- supportPaperWork: true
|
|
|
|
|
|
+ content: PaperWorkVideo.name
|
|
}, {
|
|
}, {
|
|
label: '试卷作业',
|
|
label: '试卷作业',
|
|
- content: PaperWorkPast.name,
|
|
|
|
- supportPaperWork: true
|
|
|
|
|
|
+ content: PaperWorkPast.name
|
|
}, {
|
|
}, {
|
|
label: '发布作业',
|
|
label: '发布作业',
|
|
- content: PaperWorkPublish.name,
|
|
|
|
- supportPaperWork: true
|
|
|
|
|
|
+ content: PaperWorkPublish.name
|
|
}, {
|
|
}, {
|
|
label: '检查作业',
|
|
label: '检查作业',
|
|
- content: PaperWorkHistory.name,
|
|
|
|
- supportPaperWork: true
|
|
|
|
|
|
+ content: PaperWorkHistory.name
|
|
}],
|
|
}],
|
|
- tabActive: 0,
|
|
|
|
|
|
+ visibleTabs: [],
|
|
|
|
+ tabActive: '',
|
|
tabVisited: []
|
|
tabVisited: []
|
|
}
|
|
}
|
|
},
|
|
},
|
|
- computed: {
|
|
|
|
- visibleTabs() {
|
|
|
|
- const sceneFilter = (tab) => this.isPaperWork ? tab.supportPaperWork : tab.supportNormal
|
|
|
|
- return this.tabs.filter(sceneFilter)
|
|
|
|
- },
|
|
|
|
- currentTab() {
|
|
|
|
- return this.visibleTabs[this.tabActive]
|
|
|
|
- }
|
|
|
|
- },
|
|
|
|
- watch: {
|
|
|
|
- currentTab: function(newVal) {
|
|
|
|
- const key = newVal?.content
|
|
|
|
- if (!key) return // safe check
|
|
|
|
- if (this.tabVisited.includes(key)) return
|
|
|
|
- this.tabVisited.push(key)
|
|
|
|
- }
|
|
|
|
- },
|
|
|
|
created() {
|
|
created() {
|
|
|
|
+ // visibleTabs不能做成计算属性,否则因为依赖于路由会在任意跳转时刷新
|
|
|
|
+ this.visibleTabs = this.isPaperWork ? this.paperWorkTabs : this.normalTabs
|
|
|
|
+
|
|
let query = this.$route.query
|
|
let query = this.$route.query
|
|
- this.tabActive = query.tabActive * 1 || 0
|
|
|
|
- this.tabVisited.push(this.currentTab.content)
|
|
|
|
|
|
+ const defaultActive = query.tabActive * 1 || 0
|
|
|
|
+ this.handleTabChange(defaultActive)
|
|
},
|
|
},
|
|
methods: {
|
|
methods: {
|
|
handleTabChange(idx) {
|
|
handleTabChange(idx) {
|
|
- this.tabActive = idx
|
|
|
|
|
|
+ if (!(idx < this.visibleTabs.length)) return
|
|
|
|
+ const current = this.visibleTabs[idx]
|
|
|
|
+ this.tabActive = current.content
|
|
|
|
+ if (!this.tabVisited.includes(this.tabActive)) {
|
|
|
|
+ this.tabVisited.push(this.tabActive)
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|