lex il y a 2 ans
Parent
commit
62f99985b5

+ 5 - 0
src/business-components/course-video-item/index.module.less

@@ -100,6 +100,11 @@
     text-overflow: ellipsis;
   }
 
+  .song {
+    border-radius: 8px 0 8px 0;
+    padding: 0 6px;
+  }
+
   &.albumInfo {
     background: #e0f7f3;
     color: #2dc7aa;

+ 10 - 2
src/business-components/course-video-item/index.tsx

@@ -1,6 +1,6 @@
 import { defineComponent, PropType } from 'vue'
 import styles from './index.module.less'
-import { Cell, Icon, Image } from 'vant'
+import { Cell, Icon, Image, Tag } from 'vant'
 import videoStop from '@common/images/icon_video_stop.png'
 import bars from '@common/svg/bars.svg'
 import iconAlbum from '@views/music/component/images/icon_album_active.png'
@@ -122,7 +122,15 @@ export default defineComponent({
                 <span>曲目:{info.musicAlbumName}</span>
               )}
             </div>
-            <Icon name="arrow" />
+
+            <div>
+              {info.useRelationType !== 'GIFT' && (
+                <Tag type="primary" class={styles.song}>
+                  赠送
+                </Tag>
+              )}
+              <Icon name="arrow" />
+            </div>
           </div>
         ))}
       </div>

+ 21 - 6
src/business-components/user-detail/index.module.less

@@ -31,7 +31,7 @@
       white-space: nowrap;
       text-overflow: ellipsis;
       overflow: hidden;
-      .userHonor{
+      .userHonor {
         width: 39px;
         height: 16px;
         margin-top: 4px;
@@ -49,7 +49,7 @@
     .buyNumInfo {
       font-size: 14px;
       line-height: 20px;
-      color: #FF802C;
+      color: #ff802c;
       .iconBuy {
         margin-right: 5px;
       }
@@ -60,12 +60,12 @@
       font-weight: 600;
       color: var(--van-primary);
       line-height: 20px;
-      color: #FA6400;
-      .infoPrice{
+      color: #fa6400;
+      .infoPrice {
         font-size: 16px;
         font-weight: bold;
       }
-      .infoNum{
+      .infoNum {
         font-size: 14px;
         color: #999;
         font-weight: 400;
@@ -99,8 +99,23 @@
       }
     }
   }
+
+  .buyTips {
+    font-size: 12px;
+    color: #ff8900;
+    padding: 3px 10px !important;
+    background: #ffefe0;
+    border-radius: 6px;
+    margin: 0 14px 12px;
+    width: auto;
+    span {
+      line-height: 21px;
+      color: #ff8900;
+    }
+  }
 }
-.iconTeacher{
+
+.iconTeacher {
   margin-top: 3px;
   margin-right: 6px;
   width: 39px;

+ 8 - 0
src/business-components/user-detail/index.tsx

@@ -18,6 +18,7 @@ import IconJiaozi from '@common/images/icon-jiaozi.png'
  * @param {type} lessonDesc 课程描述
  * @param {type} lessonNum 课程数
  * @param {type} lessonName 课程名称
+ * @param {type} relationType 赠送类型
  */
 interface UserType {
   headUrl: string
@@ -31,6 +32,7 @@ interface UserType {
   lessonCoverUrl: string
   lessonName: string
   auditVersion: number
+  relationType?: string
 }
 
 export default defineComponent({
@@ -139,6 +141,12 @@ export default defineComponent({
               )
             }}
           ></Cell>
+          {this.userInfo.relationType === 'GIFT' && (
+            <Cell
+              class={styles.buyTips}
+              value={'注:购买本课程即可购买相关曲目或专辑终生使用权限~'}
+            ></Cell>
+          )}
         </CellGroup>
       </div>
     )

+ 1 - 0
src/student/video-class/video-detail.tsx

@@ -61,6 +61,7 @@ export default defineComponent({
           lessonName: lessonGroup.lessonName,
           lessonDesc: lessonGroup.lessonDesc,
           lessonPrice: lessonGroup.lessonPrice,
+          relationType: lessonGroup.relationType,
           teacherId: lessonGroup.teacherId,
           lessonCoverUrl: lessonGroup.lessonCoverUrl,
           auditVersion: lessonGroup.auditVersion,

+ 1 - 0
src/teacher/share-page/share-video/index.tsx

@@ -97,6 +97,7 @@ export default defineComponent({
         lessonName: lessonGroup.lessonName,
         lessonDesc: lessonGroup.lessonDesc,
         lessonPrice: lessonGroup.lessonPrice,
+        relationType: lessonGroup.relationType,
         lessonCoverUrl: lessonGroup.lessonCoverUrl
       }
 

+ 2 - 1
src/teacher/video-class/createState.tsx

@@ -31,6 +31,7 @@ export const createState = reactive({
     lessonDesc: '',
     lessonPrice: null as any,
     lessonCoverUrl: '',
+    relationType: 'RECOMMEND',
     lessonCoverTemplateUrl: ''
   },
   lessonList: [
@@ -39,7 +40,7 @@ export const createState = reactive({
       videoContent: '',
       videoUrl: '',
       coverUrl: '',
-      relationType: 'GIFT',
+      relationType: 'RECOMMEND',
       relationList: [] as any,
       posterUrl: '' // 视频封面图
     }

+ 3 - 1
src/teacher/video-class/video-detail.tsx

@@ -61,6 +61,7 @@ export default defineComponent({
         lessonDesc: result.lessonGroup.lessonDesc,
         lessonPrice: result.lessonGroup.lessonPrice,
         lessonCoverUrl: result.lessonGroup.lessonCoverUrl,
+        relationType: result.lessonGroup.relationType,
         lessonSubjectName: result.lessonGroup.lessonSubjectName,
         auditVersion: result.lessonGroup.auditVersion,
         isDegree: result.degreeFlag ? true : false,
@@ -152,7 +153,8 @@ export default defineComponent({
                 return {
                   relationMusicAlbum: info.relationType,
                   musicAlbumName: info.name,
-                  musicAlbumId: info.musicAlbumId
+                  musicAlbumId: info.musicAlbumId,
+                  useRelationType: item.relationType
                 }
               })
               return (

+ 22 - 3
src/views/music/personal/album-my.tsx

@@ -1,4 +1,4 @@
-import { defineComponent, reactive, ref } from 'vue'
+import { defineComponent, reactive, ref, watch } from 'vue'
 import { List } from 'vant'
 import request from '@/helpers/request'
 import Item from '../album/item'
@@ -10,11 +10,18 @@ import styles from './index.module.less'
 
 export default defineComponent({
   name: 'MusicList',
-  setup() {
+  props: {
+    gift: {
+      type: Number,
+      default: 0
+    }
+  },
+  setup(props) {
     const route = useRoute()
     const router = useRouter()
     const params = reactive({
-      page: 1
+      page: 1,
+      gift: props.gift
     })
     const rows = ref<any>([])
     const data = ref<any>(null)
@@ -44,6 +51,18 @@ export default defineComponent({
       loading.value = false
     }
 
+    watch(
+      () => props.gift,
+      gift => {
+        isError.value = false
+        rows.value = []
+        params.page = 1
+        finished.value = false
+        params.gift = gift
+        FetchList()
+      }
+    )
+
     return () => (
       <List
         loading={loading.value}

+ 9 - 2
src/views/music/personal/index.tsx

@@ -47,16 +47,23 @@ export default defineComponent({
             <Tab title="我的专辑" name="personal-album"></Tab>
             <Tab title="收藏单曲" name="collection"></Tab>
             <Tab title="收藏专辑" name="album"></Tab>
+            <Tab title="赠送单曲" name="personal-gift"></Tab>
+            <Tab title="赠送专辑" name="album-gift"></Tab>
           </Tabs>
-          {activeTab.value === 'personal' && (
+          {(activeTab.value === 'personal' ||
+            activeTab.value === 'personal-gift') && (
             <Personal
               ref={personal}
+              gift={activeTab.value === 'personal-gift' ? 1 : 0}
               onFavorite={() => {
                 practice.value?.reload?.()
               }}
             />
           )}
-          {activeTab.value === 'personal-album' && <AlbumMy />}
+          {(activeTab.value === 'personal-album' ||
+            activeTab.value === 'album-gift') && (
+            <AlbumMy gift={activeTab.value === 'personal-gift' ? 1 : 0} />
+          )}
           {activeTab.value === 'collection' && (
             <Collection
               ref={collection}

+ 20 - 1
src/views/music/personal/personal.tsx

@@ -1,4 +1,4 @@
-import { defineComponent, reactive, ref } from 'vue'
+import { defineComponent, reactive, ref, watch } from 'vue'
 import { List } from 'vant'
 import request from '@/helpers/request'
 import { useRoute, useRouter } from 'vue-router'
@@ -6,16 +6,24 @@ import ColResult from '@/components/col-result'
 import { state } from '@/state'
 import styles from './index.module.less'
 import Song from '../component/song'
+import { number } from 'echarts/core'
 
 export default defineComponent({
   name: 'MusicList',
   emits: ['favorite'],
+  props: {
+    gift: {
+      type: Number,
+      default: 0
+    }
+  },
   setup(props, { expose, emit }) {
     const route = useRoute()
     const router = useRouter()
     const params = reactive({
       search: (route.query.search as string) || '',
       musicTagIds: route.query.tagids || '',
+      gift: props.gift,
       page: 1
     })
     const data = ref<any>(null)
@@ -48,6 +56,17 @@ export default defineComponent({
       loading.value = false
     }
 
+    watch(
+      () => props.gift,
+      gift => {
+        isError.value = false
+        rows.value = []
+        params.page = 1
+        finished.value = false
+        params.gift = gift
+        FetchList()
+      }
+    )
     expose({
       reset: () => {
         isError.value = false