Merge pull request 'add:主页进入详情的页面;' (#37) from yangws_ws into main
Reviewed-on: #37
This commit is contained in:
commit
c0c7fa3298
|
@ -60,7 +60,21 @@ export const constantRoutes = [
|
||||||
path: 'management',
|
path: 'management',
|
||||||
component: () => import('@/views/job-management/index.vue'),
|
component: () => import('@/views/job-management/index.vue'),
|
||||||
name: 'job-management',
|
name: 'job-management',
|
||||||
meta: { title: '作业管理' }
|
meta: { title: '作业管理' },
|
||||||
|
// children: [
|
||||||
|
// {
|
||||||
|
// path: 'details',
|
||||||
|
// component: () => import('@/views/job-management/Details/index.vue'),
|
||||||
|
// name: 'details',
|
||||||
|
// meta: { title: '详情' }
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// path: 'right',
|
||||||
|
// component: () => import('@/views/job-management/Right/index.vue'),
|
||||||
|
// name: 'right',
|
||||||
|
// meta: { title: '主页' }
|
||||||
|
// },
|
||||||
|
// ]
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
2222
|
||||||
|
</div>
|
||||||
|
</template>
|
|
@ -0,0 +1,97 @@
|
||||||
|
<template>
|
||||||
|
<div class="tabs-container">
|
||||||
|
<div class="button-div">
|
||||||
|
<el-button @click="goBack" type="primary" size="small">返回主页</el-button>
|
||||||
|
<el-button type="default" size="small">推送</el-button>
|
||||||
|
<el-button type="primary" size="small">保存</el-button>
|
||||||
|
</div>
|
||||||
|
<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
|
||||||
|
<template v-for="(item,index) in props.parameter.titleList">
|
||||||
|
<el-tab-pane :label="item.label" :name="item.id">
|
||||||
|
<el-row :gutter="10" class="tempalte-main">
|
||||||
|
<el-col :span="16">
|
||||||
|
<!-- 左侧组件 -->
|
||||||
|
<transition name="fade">
|
||||||
|
<component :is="currentComponent"/>
|
||||||
|
</transition>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<!-- 右侧 -->
|
||||||
|
<el-scrollbar class="right-box" :height="pageHeight">
|
||||||
|
<el-form label-position="top">
|
||||||
|
<el-form-item label="作业名称">
|
||||||
|
<el-input></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="作业说明">
|
||||||
|
<el-input type="textarea" :row="5"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</el-scrollbar>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</el-tab-pane>
|
||||||
|
</template>
|
||||||
|
</el-tabs>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
<script setup>
|
||||||
|
import { ref,defineProps ,defineEmits,nextTick , onMounted,shallowRef } from 'vue'
|
||||||
|
import ClassroomPresentation from './classroomPresentation/index.vue'
|
||||||
|
import selfSearchQuestions from './selfSearchQuestions/index.vue'
|
||||||
|
const props = defineProps({
|
||||||
|
parameter: Object
|
||||||
|
});
|
||||||
|
const emits = defineEmits(['goBack'])
|
||||||
|
const currentComponent = shallowRef(null)
|
||||||
|
|
||||||
|
const activeName = ref(1)
|
||||||
|
const pageHeight = ref(0)
|
||||||
|
|
||||||
|
const handleClick = (tab, event) => {
|
||||||
|
console.log(tab, event)
|
||||||
|
}
|
||||||
|
// 返回主页
|
||||||
|
const goBack = () => {
|
||||||
|
emits('goBack')
|
||||||
|
}
|
||||||
|
|
||||||
|
// 对应的组件
|
||||||
|
const rightComponets = (str) => {
|
||||||
|
switch (str) {
|
||||||
|
case 'classroomPresentation':
|
||||||
|
return ClassroomPresentation
|
||||||
|
case 'selfSearchQuestions':
|
||||||
|
return selfSearchQuestions
|
||||||
|
default:
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 监听主页传过来的值
|
||||||
|
onMounted(() => {
|
||||||
|
currentComponent.value = rightComponets(props.parameter.components)
|
||||||
|
// 获取当前高度加上滚动条的高度
|
||||||
|
nextTick(() => {
|
||||||
|
pageHeight.value = window.innerHeight + window.scrollY - 156;
|
||||||
|
});
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.tabs-container{
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.button-div{
|
||||||
|
position: absolute;
|
||||||
|
top: 5px;
|
||||||
|
right: 0;
|
||||||
|
z-index: 999;
|
||||||
|
}
|
||||||
|
.right-box{
|
||||||
|
background-color: #fff;
|
||||||
|
padding:5px;
|
||||||
|
border-radius: 4px;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -0,0 +1,5 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
11111
|
||||||
|
</div>
|
||||||
|
</template>
|
|
@ -12,29 +12,90 @@
|
||||||
<CustomButton :item="{ type: item.type, text: item.text, plain: true }" />
|
<CustomButton :item="{ type: item.type, text: item.text, plain: true }" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { ref,markRaw } from 'vue';
|
import { ref, markRaw } from 'vue';
|
||||||
import { Plus, ArrowDown, Document, User, Setting } from '@element-plus/icons-vue';
|
import { Plus, ArrowDown, Document, User, Setting } from '@element-plus/icons-vue';
|
||||||
import CustomButton from '../components/button.vue'
|
import CustomButton from '../components/button.vue';
|
||||||
|
const emits = defineEmits(['skipDetail']);
|
||||||
|
|
||||||
const items = ref([
|
const items = ref([
|
||||||
{ title: '自主搜题', description: '1111111', icon: markRaw(Document),type:'default',text:'习题训练' },
|
{ title: '自主搜题', description: '1111111', icon: markRaw(Document), type: 'default', text: '习题训练',components:'classroomPresentation',titleList:[
|
||||||
{ title: '校本题库', description: '222222', icon: markRaw(Document),type:'default',text:'习题训练' },
|
{
|
||||||
{ title: '个人题库', description: '333333', icon: markRaw(Document),type:'default',text:'习题训练' },
|
id:1,
|
||||||
{ title: '智能推荐', description: '444444', icon: markRaw(Document),type:'',text:'' },
|
label:'自主搜题',
|
||||||
{ title: '课堂展示', description: '555555', icon: markRaw(Document),type:'primary',text:'课堂展示' },
|
},
|
||||||
{ title: '常规作业', description: '555555', icon: markRaw(Document),type:'danger',text:'常规作业' },
|
{
|
||||||
{ title: 'AI设计作业', description: '555555', icon: markRaw(Document),type:'danger',text:'常规作业' },
|
id:2,
|
||||||
|
label:'校本题库',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id:3,
|
||||||
|
label:'个人题库',
|
||||||
|
},
|
||||||
|
]},
|
||||||
|
{ title: '校本题库', description: '222222', icon: markRaw(Document), type: 'default', text: '习题训练',components:'classroomPresentation',titleList:[
|
||||||
|
{
|
||||||
|
id:1,
|
||||||
|
label:'自主搜题',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id:2,
|
||||||
|
label:'校本题库',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id:3,
|
||||||
|
label:'个人题库',
|
||||||
|
},
|
||||||
|
] },
|
||||||
|
{ title: '个人题库', description: '333333', icon: markRaw(Document), type: 'default', text: '习题训练',components:'classroomPresentation',titleList:[
|
||||||
|
{
|
||||||
|
id:1,
|
||||||
|
label:'自主搜题',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id:2,
|
||||||
|
label:'校本题库',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id:3,
|
||||||
|
label:'个人题库',
|
||||||
|
},
|
||||||
|
] },
|
||||||
|
{ title: '智能推荐', description: '444444', icon: markRaw(Document), type: '', text: '',components:'classroomPresentation',titleList:[
|
||||||
|
{
|
||||||
|
id:1,
|
||||||
|
label:'智能推荐',
|
||||||
|
},
|
||||||
|
] },
|
||||||
|
{ title: '课堂展示', description: '555555', icon: markRaw(Document), type: 'primary', text: '课堂展示',components:'selfSearchQuestions',titleList:[
|
||||||
|
{
|
||||||
|
id:1,
|
||||||
|
label:'课堂展示',
|
||||||
|
},
|
||||||
|
] },
|
||||||
|
{ title: '常规作业', description: '555555', icon: markRaw(Document), type: 'danger', text: '常规作业',components:'selfSearchQuestions',titleList:[
|
||||||
|
{
|
||||||
|
id:1,
|
||||||
|
label:'常规作业',
|
||||||
|
},
|
||||||
|
] },
|
||||||
|
{ title: 'AI设计作业', description: '555555', icon: markRaw(Document), type: 'danger', text: '常规作业',components:'selfSearchQuestions',titleList:[
|
||||||
|
{
|
||||||
|
id:1,
|
||||||
|
label:'AI设计作业',
|
||||||
|
},
|
||||||
|
] },
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const handleClick = (item) => {
|
const handleClick = (item) => {
|
||||||
console.log('Clicked on:', item.title);
|
emits('skipDetail', item);
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
@ -96,12 +157,23 @@ const handleClick = (item) => {
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
word-break: break-all;
|
word-break: break-all;
|
||||||
}
|
}
|
||||||
.title-header{
|
|
||||||
|
.title-header {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
.item-bottom{
|
|
||||||
|
.item-bottom {
|
||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 过渡动画 */
|
||||||
|
.fade-enter-active, .fade-leave-active {
|
||||||
|
transition: opacity 0.3s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fade-enter, .fade-leave-to {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
|
@ -46,7 +46,6 @@ const toggleDropup = () => {
|
||||||
};
|
};
|
||||||
|
|
||||||
const selectOption = (option) => {
|
const selectOption = (option) => {
|
||||||
selectedOption.value = option;
|
|
||||||
isDropdownOpen.value = false;
|
isDropdownOpen.value = false;
|
||||||
emits('select-click', option)
|
emits('select-click', option)
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,36 +1,37 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="page-template flex">
|
<div class="page-template flex">
|
||||||
<!-- // 顶部 -->
|
<!-- // 顶部 -->
|
||||||
<div class="mb-4">
|
<div class="mb-4">
|
||||||
<div>
|
<div>
|
||||||
<el-button type="danger" :disabled="!isChceked">批量删除</el-button>
|
<el-button type="danger" :disabled="!isChceked">批量删除</el-button>
|
||||||
<el-button type="primary" :disabled="!isChceked">批量推送</el-button>
|
<el-button type="primary" :disabled="!isChceked">批量推送</el-button>
|
||||||
</div>
|
</div>
|
||||||
<CustomSelect
|
<CustomSelect
|
||||||
:options="options"
|
:options="options"
|
||||||
placeholder="设计新作业"
|
placeholder="设计新作业"
|
||||||
@select-click="selectClick"
|
@select-click="selectClick"
|
||||||
/>
|
/>
|
||||||
</div>
|
|
||||||
<div :style="{height:viewportHeight - 72}" class="no-horizontal-scroll">
|
|
||||||
<el-row :gutter="20" class="tempalte-main">
|
|
||||||
<el-col :span="6">
|
|
||||||
<!--左侧列表-->
|
|
||||||
<Left @checked="checked"/>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="18">
|
|
||||||
<!--右侧-->
|
|
||||||
<Right/>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
<div :style="{height: viewportHeight - 72 + 'px'}" class="no-horizontal-scroll">
|
||||||
|
<el-row :gutter="20" class="tempalte-main">
|
||||||
|
<el-col :span="6">
|
||||||
|
<!-- 左侧列表 -->
|
||||||
|
<Left @checked="checked"/>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="18">
|
||||||
|
<!-- 右侧 -->
|
||||||
|
<component :is="currentComponent" v-on="listeners" :parameter="parameter" />
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { ref, onMounted, nextTick } from 'vue';
|
import { ref, shallowRef, onMounted, nextTick, computed } from 'vue';
|
||||||
import Right from './Right/index.vue';
|
import Right from './Right/index.vue';
|
||||||
import Left from './Left/index.vue';
|
import Left from './Left/index.vue';
|
||||||
|
import Detials from './Details/index.vue';
|
||||||
import CustomSelect from './components/customSelect.vue';
|
import CustomSelect from './components/customSelect.vue';
|
||||||
|
|
||||||
const options = ref(['自主搜题', '校本题库', '个人题库', '智能推荐', '课堂展示', '常规作业', 'AI作业设计']);
|
const options = ref(['自主搜题', '校本题库', '个人题库', '智能推荐', '课堂展示', '常规作业', 'AI作业设计']);
|
||||||
|
@ -38,17 +39,31 @@ const options = ref(['自主搜题', '校本题库', '个人题库', '智能推
|
||||||
// 判断是否有选中的checkbox框
|
// 判断是否有选中的checkbox框
|
||||||
const isChceked = ref(false);
|
const isChceked = ref(false);
|
||||||
const viewportHeight = ref(0);
|
const viewportHeight = ref(0);
|
||||||
|
const isSkip = ref(false);
|
||||||
|
// 点击主页传的参数
|
||||||
|
const parameter = ref({});
|
||||||
// 选中的checkbox框
|
// 选中的checkbox框
|
||||||
const checked = (val) => {
|
const checked = (val) => {
|
||||||
console.log(val);
|
console.log(val);
|
||||||
val.length > 0 ? isChceked.value = true : isChceked.value = false;
|
val.length > 0 ? isChceked.value = true : isChceked.value = false;
|
||||||
}
|
}
|
||||||
|
const currentComponent = shallowRef(Right);
|
||||||
|
|
||||||
// 选择的作业设计类型
|
// 选择的作业设计类型
|
||||||
const selectClick = (val) => {
|
const selectClick = (val) => {
|
||||||
console.log(val);
|
console.log(val);
|
||||||
}
|
}
|
||||||
|
// 右侧点击路由跳转
|
||||||
|
const skipDetail = (val) => {
|
||||||
|
parameter.value = Object.assign({}, val);
|
||||||
|
isSkip.value = true;
|
||||||
|
currentComponent.value = Detials;
|
||||||
|
}
|
||||||
|
// 回到主页
|
||||||
|
const goBack = () => {
|
||||||
|
isSkip.value = false;
|
||||||
|
currentComponent.value = Right;
|
||||||
|
}
|
||||||
|
|
||||||
// 获取视口高度
|
// 获取视口高度
|
||||||
const getViewportHeight = () => {
|
const getViewportHeight = () => {
|
||||||
|
@ -65,8 +80,13 @@ onMounted(() => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const listeners = computed(() => ({
|
||||||
|
skipDetail,
|
||||||
|
goBack
|
||||||
|
}));
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.mb-4 {
|
.mb-4 {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
@ -86,8 +106,8 @@ onMounted(() => {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.no-horizontal-scroll{
|
.no-horizontal-scroll {
|
||||||
overflow-y: scroll;
|
overflow: auto;
|
||||||
overflow-x: hidden;
|
overflow-x: hidden;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
Loading…
Reference in New Issue