123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- <template>
- <view class="menuBox">
- <template>
- <view v-for="(item, index) in menuList" :key="index">
- <!--模块 -->
- <view v-if="item.type == 1">
- <courseModule :sectionMaxNum="sectionMaxNum" :needOpen="sectionItem.moduleId == item.menuId"
- :preItem="menuList[index - 1]" :isBuy="isBuy" :menuItem="item" :levelId="item.menuId"
- :goodsType="goodsType" :isRebuild="isRebuild"></courseModule>
- </view>
- <!--章 -->
- <view v-if="item.type == 2">
- <courseChapter :sectionMaxNum="sectionMaxNum" :needOpen="
- !sectionItem.moduleId && sectionItem.chapterId == item.menuId
- " :preItem="menuList[index - 1]" :isBuy="isBuy" :menuItem="item" :levelId="'0-' + item.menuId"
- :goodsType="goodsType" :isRebuild="isRebuild"></courseChapter>
- </view>
- <!--节 -->
- <view v-if="item.type == 3">
- <courseSection ref="MoudleSection" :sectionMaxNum="sectionMaxNum" :preItem="menuList[index - 1]"
- :isBuy="isBuy" :menuItem="item" :levelId="'0-0-' + item.menuId" :goodsType="goodsType"
- :testType="3" :isRebuild="isRebuild" @playEnd="getMenuList"></courseSection>
- </view>
- </view>
- </template>
- </view>
- </template>
- <script>
- import courseModule from "@/components/course/courseModule.vue";
- import courseChapter from "@/components/course/courseChapter.vue";
- import courseSection from "@/components/course/courseSection.vue";
- export default {
- name: "SaasMiniprogramCourseTree",
- inject: ["paramsFn"],
- props: {
- isBuy: {
- //是否是已购买商品
- type: Boolean,
- default: true,
- },
- isRebuild: {
- //是否重修目录
- type: Boolean,
- default: false,
- },
- sectionMaxNum: {
- default: undefined,
- },
- // 商品类型 1视频2题库 3补考 4前培 5虚拟赠送题库 6直播
- goodsType: {
- type: [Number, String],
- default: 1,
- },
- // 兼容props传参
- propParam: {
- type: Object,
- default: () => {
- return {};
- },
- },
- },
- data() {
- return {
- menuList: [],
- };
- },
- mounted() {},
- methods: {
- getMenuList() {
- const fn = this.isBuy ? "reMenuList" : "menuList";
- this.$api[fn](
- this.isBuy ?
- {
- ...this.params,
- rebuild: +this.isRebuild,
- } :
- {
- courseId: this.courseId
- }
- ).then((res) => {
- if (res.data.code == 200) {
- for (let i = 0; i < res.data.rows.length; i++) {
- let item = res.data.rows[i];
- // 显示重修目录
- if (item.rebuild) {
- this.$emit("isHaverebuild");
- }
- item.down = true;
- item.id = item.menuId;
- item.name = item.menuName;
- item.menuType = item.type;
- }
- this.menuList = res.data.rows;
- console.log(this.menuList, 'menuList')
- }
- });
- },
- },
- provide() {
- return {
- paramsFn: this.propParamFn
- };
- },
- computed: {
- isProps() {
- return !this.$method.isEmptyObject(this.propParam);
- },
- propParamFn() {
- return (key) => {
- return {
- ...this.paramsFn(key),
- ...this.propParam
- };
- };
- },
- params() {
- return this.propParamFn(["orderGoodsId", "gradeId", "courseId"]);
- },
- sectionItem() {
- if (this.isBuy) {
- return this.propParamFn(["sectionItem"])['sectionItem'];
- } else {
- return this.propParamFn(["sectionItem"]);
- }
- },
- courseId() {
- return this.params.courseId;
- },
- },
- watch: {
- courseId: {
- handler(val) {
- this.menuList = [];
- this.getMenuList();
- },
- immediate: true,
- deep: true,
- },
- },
- components: {
- courseModule,
- courseChapter,
- courseSection,
- },
- };
- </script>
- <style lang="scss" scoped>
- .top {
- &__header {
- position: relative;
- width: 100%;
- height: 150rpx;
- padding: 24rpx 150rpx 24rpx 24rpx;
- .img {
- position: absolute;
- left: 0;
- top: 0;
- width: 100%;
- }
- .note {
- position: relative;
- z-index: 10;
- font-size: 24rpx;
- font-family: PingFang SC;
- font-weight: bold;
- color: #efdbff;
- }
- .title {
- position: relative;
- z-index: 10;
- font-size: 26rpx;
- font-family: PingFang SC;
- font-weight: bold;
- color: #ffffff;
- }
- }
- }
- .menuBox {
- width: 100%;
- background: #ffffff;
- border-radius: 16rpx;
- padding: 0rpx 20rpx;
- margin-bottom: 20rpx;
- }
- </style>
|