瀏覽代碼

Merge branch 'newVersion' into dev

mo 3 年之前
父節點
當前提交
7327a14341

+ 11 - 0
package-lock.json

@@ -32,6 +32,7 @@
         "print-js": "^1.6.0",
         "qrcode.vue": "^3.3.3",
         "query-string": "^7.1.1",
+        "rgbaster": "^2.1.1",
         "swiper": "^8.2.4",
         "umi-request": "^1.4.0",
         "vant": "^3.5.2",
@@ -8884,6 +8885,11 @@
       "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==",
       "dev": true
     },
+    "node_modules/rgbaster": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/rgbaster/-/rgbaster-2.1.1.tgz",
+      "integrity": "sha512-vUQI+ldMMSGXEbWtqb/6aqLY1LHc33OtXg2Q9S0TCxzt2KxGncRJB6dk860KzhWTjms+Fz4wkxrJu8MlCrFpYg=="
+    },
     "node_modules/rimraf": {
       "version": "3.0.2",
       "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz",
@@ -17251,6 +17257,11 @@
       "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==",
       "dev": true
     },
+    "rgbaster": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/rgbaster/-/rgbaster-2.1.1.tgz",
+      "integrity": "sha512-vUQI+ldMMSGXEbWtqb/6aqLY1LHc33OtXg2Q9S0TCxzt2KxGncRJB6dk860KzhWTjms+Fz4wkxrJu8MlCrFpYg=="
+    },
     "rimraf": {
       "version": "3.0.2",
       "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz",

+ 1 - 0
package.json

@@ -44,6 +44,7 @@
     "print-js": "^1.6.0",
     "qrcode.vue": "^3.3.3",
     "query-string": "^7.1.1",
+    "rgbaster": "^2.1.1",
     "swiper": "^8.2.4",
     "umi-request": "^1.4.0",
     "vant": "^3.5.2",

+ 11 - 4
src/components/banner/index.module.less

@@ -1,14 +1,21 @@
 .mySwiper {
   cursor: pointer;
 }
-.bannerImg {
-  object-fit: cover;
-  height: 400px;
+.bannerWrap {
+  width: 100%;
+  display: flex;
+  flex-direction: row;
+  align-items: center;
+  .bannerImg {
+    max-width: 1920px;
+    object-fit: cover;
+    height: 400px;
+    margin: 0 auto;
+  }
 }
 
 :global {
   .bannerSwiper {
-
     .mySwiper {
       overflow: hidden;
       height: 400px;

+ 12 - 11
src/components/banner/index.tsx

@@ -21,7 +21,7 @@ export default defineComponent({
   setup(props, conent) {
     const state = reactive({
       title: props.title,
-      modules: [Navigation, Pagination, Scrollbar, Autoplay,A11y ],
+      modules: [Navigation, Pagination, Scrollbar, Autoplay, A11y],
       bannerList: [],
       leftHover: false,
       rightHover: false
@@ -62,7 +62,7 @@ export default defineComponent({
             class={[classes.mySwiper, 'mySwiper']}
             slides-per-view={1}
             space-between={0}
-            pagination={{  clickable: true }}
+            pagination={{ clickable: true }}
             autoplay={{
               delay: 3000,
               disableOnInteraction: false,
@@ -70,7 +70,6 @@ export default defineComponent({
               pauseOnMouseEnter: true,
               reverseDirection: true
             }}
-
             navigation={{
               nextEl: '.myprev',
               prevEl: '.mynext'
@@ -83,14 +82,16 @@ export default defineComponent({
               return (
                 <>
                   <swiper-slide>
-                    <img
-                      src={item.coverImage}
-                      alt=""
-                      class={classes.bannerImg}
-                      onClick={() => {
-                        gotoBannerInfo(item)
-                      }}
-                    />
+                    <div class={classes.bannerWrap} style={{'background':item.background}}>
+                      <img
+                        src={item.coverImage}
+                        alt=""
+                        class={classes.bannerImg}
+                        onClick={() => {
+                          gotoBannerInfo(item)
+                        }}
+                      />
+                    </div>
                   </swiper-slide>
                 </>
               )

+ 3 - 2
src/components/col-header/modals/loganInfo.tsx

@@ -21,10 +21,11 @@ import changeIcon from '../images/changeIcon.png'
 import backIcon from '../images/backIcon.png'
 import peopleIcon from '../images/peopleIcon.png'
 import planIcon from '../images/planIcon.png'
-import ablumIcon from '../images/ablumIcon.png'
-import noAblumIcon from '../images/noAblumIcon.png'
 import memberIcon from '../images/memberIcon.png'
 import noMemberIcon from '../images/noMemberIcon.png'
+
+import ablumIcon from '../images/ablumIcon.png'
+import noAblumIcon from '../images/noAblumIcon.png'
 import onlineIcon from '../images/onlineIcon.png'
 import noOnlineIcon from '../images/noOnlineIcon.png'
 import styleIcon from '../images/styleIcon.png'

+ 1 - 1
src/components/musicLIstItem/index.module.less

@@ -73,7 +73,7 @@
   flex-direction: row;
   justify-content: space-between;
   width: 100%;
-  padding: 16px 0px;
+  padding: 22px 0px 16px;
   border-bottom: 1px solid #ececec;
   cursor: pointer;
   .left {

+ 3 - 3
src/views/albumDetail/modals/musicLIstItem/index.module.less

@@ -65,14 +65,14 @@
   --music-list-item-charge-bg: #3f90d6;
   --music-list-item-charge-color: #3f90d6;
 
-  height: 188px;
+  // height: 188px;
   background: #ffffff;
   // border-radius: 12px;
   display: flex;
   flex-direction: row;
   justify-content: space-between;
   width: 100%;
-  padding: 16px 0px;
+  padding: 20px 0px ;
   border-bottom: 1px solid #ececec;
 
   cursor: pointer;
@@ -126,7 +126,7 @@
     flex-direction: row;
     align-items: center;
     justify-content: space-between;
-    margin-top: 35px;
+    margin-top: 32px;
     .authorInfo {
       display: flex;
       flex-direction: row;

+ 4 - 0
src/views/home/index.module.less

@@ -141,6 +141,10 @@
       }
       .chioseRow {
         margin-top: 38px;
+        .chioseTagWrap {
+          max-height: 168px;
+          overflow: hidden;
+        }
         p {
           font-size: 20px;
           font-weight: 600;

+ 14 - 0
src/views/muiscDetial/index.module.less

@@ -527,6 +527,20 @@
       }
     }
   }
+  .iconWrapList {
+    display: flex;
+    flex-direction: row;
+    align-items: center;
+    .teacherDetailIcon {
+      width: 26px;
+      height: 26px;
+    }
+    .vipIcon {
+      width: 42px;
+      height: 26px;
+
+    }
+  }
 }
 
 :global {

+ 260 - 196
src/views/muiscDetial/index.tsx

@@ -31,12 +31,24 @@ import music from '@/components/musicLIstItem/images/music.png'
 import tagItem from '@/components/tagItem'
 import code from '@/common/images/student_download.png'
 import musicItem from './modals/musicItem'
+
+import ablumIcon from '@/components/col-header/images/ablumIcon.png'
+import noAblumIcon from '@/components/col-header/images/noAblumIcon.png'
+import onlineIcon from '@/components/col-header/images/onlineIcon.png'
+import noOnlineIcon from '@/components/col-header/images/noOnlineIcon.png'
+import styleIcon from '@/components/col-header/images/styleIcon.png'
+import nostyleIcon from '@/components/col-header/images/nostyleIcon.png'
+import videoIcon from '@/components/col-header/images/videoIcon.png'
+import noVideoIcon from '@/components/col-header/images/noVideoIcon.png'
+import vipIcon from '@/components/col-header/images/vipIcon.png'
+import noVipIcon from '@/components/col-header/images/noVipIcon.png'
+
 import request from '@/helpers/request'
 import { useRoute, useRouter } from 'vue-router'
 import gou from './images/gou.png'
 import member from './images/member.png'
 import palyer from './images/palyer.png'
-import vipIcon from '../images/vipIcon.png'
+// import vipIcon from '../images/vipIcon.png'
 import {
   getUserType,
   vaildTeachingUrl,
@@ -103,28 +115,29 @@ export default defineComponent({
       accompanyUrl: '',
       imgData: '',
       imgUrl: '',
-      showImg: ''
+      showImg: '',
+      iconList: [] as any
+    })
+    nextTick(() => {
+      // 禁用右键
+      // @ts-ignore:无法被执行的代码的错误
+      document.oncontextmenu = new Function('event.returnValue=false')
+      // @ts-ignore:无法被执行的代码的错误
+      // 禁用选择
+      document.onselectstart = new Function('event.returnValue=false')
+      // @ts-ignore:无法被执行的代码的错误
+      //禁止f12
+      document.οnkeydοwn = new Function('event.returnValue=false')
     })
-     nextTick(() => {
-        // 禁用右键
-         // @ts-ignore:无法被执行的代码的错误
-        document.oncontextmenu  = new Function('event.returnValue=false')
-         // @ts-ignore:无法被执行的代码的错误
-        // 禁用选择
-        document.onselectstart = new Function('event.returnValue=false')
-         // @ts-ignore:无法被执行的代码的错误
-        //禁止f12
-        document.οnkeydοwn  = new Function('event.returnValue=false')
-      })
 
-      // 上面的禁止f12那段代码没有生效,但是加了下面这段就能生效。
-      document.onkeydown = function (e) {
-        if (e && e.keyCode === 123) {
-          e.returnValue = false
-          // e.keyCode = 0   //去掉也可以的,倘若要写,则需要setter 以及 getter配合使用,不配合,会报错
-          return false
-        }
+    // 上面的禁止f12那段代码没有生效,但是加了下面这段就能生效。
+    document.onkeydown = function (e) {
+      if (e && e.keyCode === 123) {
+        e.returnValue = false
+        // e.keyCode = 0   //去掉也可以的,倘若要写,则需要setter 以及 getter配合使用,不配合,会报错
+        return false
       }
+    }
     const print = ref()
     const getMusicList = async () => {
       try {
@@ -147,6 +160,7 @@ export default defineComponent({
 
         state.teacherDetail = res.data.teacher
         setAccompanyUrl()
+        setUser()
       } catch (e) {
         console.log(e)
       }
@@ -212,6 +226,30 @@ export default defineComponent({
       // 拼链接
       getMusicList()
     })
+
+    const setUser = () => {
+      state.iconList = [] as any
+      if (state.teacherDetail.tag.indexOf('STYLE') != -1) {
+        state.iconList.push(styleIcon)
+      } else {
+        state.iconList.push(nostyleIcon)
+      }
+      if (state.teacherDetail.tag.indexOf('VIDEO') != -1) {
+        state.iconList.push(videoIcon)
+      } else {
+        state.iconList.push(noVideoIcon)
+      }
+      if (state.teacherDetail.tag.indexOf('LIVE') != -1) {
+        state.iconList.push(onlineIcon)
+      } else {
+        state.iconList.push(noOnlineIcon)
+      }
+      if (state.teacherDetail.tag.indexOf('MUSIC') != -1) {
+        state.iconList.push(ablumIcon)
+      } else {
+        state.iconList.push(noAblumIcon)
+      }
+    }
     const printHander = async () => {
       const tempCanvas = await imgToCanvas(state.imgData)
       const showImg = convasToImg(tempCanvas)
@@ -265,14 +303,14 @@ export default defineComponent({
     }
     return () => (
       <>
-      <div class={classes.wallWrap}>
-        <div class={classes.wall}></div>
-        <div class={classes.musicWraps}>
-          <div class={[classes.width1200]}>
-            <div class={[classes.musicWrap]}>
-              <div class={classes.left}>
-              <div class={classes.title}>
-                  {/* <div class={classes.titleLeft}>
+        <div class={classes.wallWrap}>
+          <div class={classes.wall}></div>
+          <div class={classes.musicWraps}>
+            <div class={[classes.width1200]}>
+              <div class={[classes.musicWrap]}>
+                <div class={classes.left}>
+                  <div class={classes.title}>
+                    {/* <div class={classes.titleLeft}>
                     <p>声部:</p>
                     <ElSelect
                       class="w-full subjectChiose"
@@ -291,150 +329,161 @@ export default defineComponent({
                       ))}
                     </ElSelect>
                   </div> */}
-                  <div class={classes.titleRight} onClick={() => printHander()}>
-                    <img src={printIcon} alt="" />
-                    <p>下载乐谱</p>
+                    <div
+                      class={classes.titleRight}
+                      onClick={() => printHander()}
+                    >
+                      <img src={printIcon} alt="" />
+                      <p>下载乐谱</p>
+                    </div>
                   </div>
-                </div>
 
-                <div class={classes.musicContent}>
-                  {/*        id="iframe"       ref="iframe"*/}
+                  <div class={classes.musicContent}>
+                    {/*        id="iframe"       ref="iframe"*/}
 
-                  <img
-                    class={classes.musicStag}
-                    src={chargeImg[state.musicDetail.chargeType]}
-                    alt=""
-                  />
-                  <iframe
-                    id="containerPrint"
-                    ref="print"
-                    style="width: 538px;page-break-after:always; "
-                    src={state.accompanyUrl}
-                    class={classes.iframe}
-                  />
-                  <p class={classes.musicTitle}>
-                    {state.musicDetail.musicSheetName}
-                  </p>
-                  {state.showImg ? (
-                    <img src={state.showImg} alt="" />
+                    <img
+                      class={classes.musicStag}
+                      src={chargeImg[state.musicDetail.chargeType]}
+                      alt=""
+                    />
+                    <iframe
+                      id="containerPrint"
+                      ref="print"
+                      style="width: 538px;page-break-after:always; "
+                      src={state.accompanyUrl}
+                      class={classes.iframe}
+                    />
+                    <p class={classes.musicTitle}>
+                      {state.musicDetail.musicSheetName}
+                    </p>
+                    {state.showImg ? (
+                      <img src={state.showImg} alt="" />
+                    ) : (
+                      <div>
+                        <Vue3Lottie
+                          animationData={AstronautJSON}
+                          class={classes.finch}
+                        ></Vue3Lottie>
+                        <p class={classes.finchLoad}>加载中...</p>
+                      </div>
+                    )}
+                  </div>
+
+                  {state.mp3Type == 'MP3' ? (
+                    <colVideo
+                      src={state.activeRow.audioFileUrl}
+                      styleValue={{
+                        height: '68px',
+                        bacground: '#333'
+                      }}
+                      type={'audto'}
+                      settings={[
+                        'captions',
+                        'quality',
+                        'speed',
+                        'loop',
+                        'title'
+                      ]}
+                      class={classes.audios}
+                      poster={state.activeRow.title}
+                    ></colVideo>
                   ) : (
-                    <div>
-                      <Vue3Lottie
-                        animationData={AstronautJSON}
-                        class={classes.finch}
-                      ></Vue3Lottie>
-                      <p class={classes.finchLoad}>加载中...</p>
-                    </div>
+                    <>
+                      <div class={classes.noMoreWrap}>
+                        <img src={noMore} alt="" />
+                        <p>温馨提示:该曲目暂不支持播放喔~</p>
+                      </div>
+                    </>
                   )}
-                </div>
 
-                {state.mp3Type == 'MP3' ? (
-                  <colVideo
-                    src={state.activeRow.audioFileUrl}
-                    styleValue={{
-                      height: '68px',
-                      bacground: '#333'
-                    }}
-                    type={'audto'}
-                    settings={['captions', 'quality', 'speed', 'loop', 'title']}
-                    class={classes.audios}
-                    poster={state.activeRow.title}
-                  ></colVideo>
-                ) : (
-                  <>
-                    <div class={classes.noMoreWrap}>
-                      <img src={noMore} alt="" />
-                      <p>温馨提示:该曲目暂不支持播放喔~</p>
-                    </div>
-                  </>
-                )}
-
-                {state.showCode ? (
-                  <div class={classes.showCode}>
-                    <div class={classes.showCodeWrap}>
-                      <img
-                        class={classes.close}
-                        src={iconClose}
-                        alt=""
-                        onClick={() => {
-                          state.showCode = false
-                        }}
-                      />
-                      <img class={classes.code} src={code} alt="" />
-                      {/* <h2 class={classes.title}>酷乐秀</h2>
+                  {state.showCode ? (
+                    <div class={classes.showCode}>
+                      <div class={classes.showCodeWrap}>
+                        <img
+                          class={classes.close}
+                          src={iconClose}
+                          alt=""
+                          onClick={() => {
+                            state.showCode = false
+                          }}
+                        />
+                        <img class={classes.code} src={code} alt="" />
+                        {/* <h2 class={classes.title}>酷乐秀</h2>
                   <p class={classes.conent}>扫码下载酷乐秀APP</p>
                   <p class={classes.subConent}>
                     使用小酷Ai即可智能练习本首曲目哦!
                   </p> */}
-                      <img src={banner} class={classes.banner} alt="" />
-                    </div>
-                  </div>
-                ) : null}
-              </div>
-              <div class={classes.right}>
-                <div class={classes.musicInfo}>
-                  <h2>
-                    <span
-                      class={[
-                        classes.musicTag,
-                        classes[chargeClass[state.musicDetail.chargeType]]
-                      ]}
-                    >
-                      {chargeTypes[state.musicDetail.chargeType]}
-                    </span>
-                    {state.musicDetail.musicSheetName}
-                  </h2>
-                  <div class={classes.collectWrap}>
-                    <div class={classes.masker} onClick={favoriteMusic}>
-                      <img
-                        src={state.musicDetail.favorite ? lineStart : start}
-                        alt=""
-                      />
+                        <img src={banner} class={classes.banner} alt="" />
+                      </div>
                     </div>
-                    <img src={music} class={classes.musiceIcon} alt="" />
-                    <div>
-                      <div class={classes.collect} onClick={favoriteMusic}>
+                  ) : null}
+                </div>
+                <div class={classes.right}>
+                  <div class={classes.musicInfo}>
+                    <h2>
+                      <span
+                        class={[
+                          classes.musicTag,
+                          classes[chargeClass[state.musicDetail.chargeType]]
+                        ]}
+                      >
+                        {chargeTypes[state.musicDetail.chargeType]}
+                      </span>
+                      {state.musicDetail.musicSheetName}
+                    </h2>
+                    <div class={classes.collectWrap}>
+                      <div class={classes.masker} onClick={favoriteMusic}>
                         <img
-                          src={state.musicDetail.favorite ? oLineStart : oStart}
-                          class={classes.start}
+                          src={state.musicDetail.favorite ? lineStart : start}
                           alt=""
                         />
-                        <p>{state.musicDetail.favoriteNum}人收藏</p>
-                      </div>
-
-                      <div class={classes.tagList}>
-                        {state.tagList.map((item: any) => {
-                          return <div class={classes.tag}>{item}</div>
-                        })}
                       </div>
-                      <p class={classes.subTitle}>
-                        作曲人:<span>{state.musicDetail.composer}</span>
-                      </p>
-                      <p class={classes.subTitle}>
-                        声部:<span>{state.musicDetail.subjectNames}</span>
-                      </p>
-                    </div>
-                  </div>
-                </div>
-                <div class={classes.btooom}>
-                  {state.teacherDetail.userId ? (
-                    <div class={classes.teacherInfo}>
-                      <h2>上传者</h2>
-                      <div class={classes.teacherHeadWrap}>
-                        <div class={classes.teacherHeadLeft}>
+                      <img src={music} class={classes.musiceIcon} alt="" />
+                      <div>
+                        <div class={classes.collect} onClick={favoriteMusic}>
                           <img
                             src={
-                              state.teacherDetail.userAvatar
-                                ? state.teacherDetail.userAvatar
-                                : teacherHeader
+                              state.musicDetail.favorite ? oLineStart : oStart
                             }
+                            class={classes.start}
                             alt=""
-                            class={classes.teacherHeader}
                           />
-                          <div class={classes.teacherHeadInfo}>
-                            <div class={classes.teacherHeadName}>
-                              <p>{state.teacherDetail.userName}</p>
-                              {/* {!state.teacherDetail.entryFlag ? (
+                          <p>{state.musicDetail.favoriteNum}人收藏</p>
+                        </div>
+
+                        <div class={classes.tagList}>
+                          {state.tagList.map((item: any) => {
+                            return <div class={classes.tag}>{item}</div>
+                          })}
+                        </div>
+                        <p class={classes.subTitle}>
+                          作曲人:<span>{state.musicDetail.composer}</span>
+                        </p>
+                        <p class={classes.subTitle}>
+                          声部:<span>{state.musicDetail.subjectNames}</span>
+                        </p>
+                      </div>
+                    </div>
+                  </div>
+                  <div class={classes.btooom}>
+                    {state.teacherDetail.userId ? (
+                      <div class={classes.teacherInfo}>
+                        <h2>上传者</h2>
+                        <div class={classes.teacherHeadWrap}>
+                          <div class={classes.teacherHeadLeft}>
+                            <img
+                              src={
+                                state.teacherDetail.userAvatar
+                                  ? state.teacherDetail.userAvatar
+                                  : teacherHeader
+                              }
+                              alt=""
+                              class={classes.teacherHeader}
+                            />
+                            <div class={classes.teacherHeadInfo}>
+                              <div class={classes.teacherHeadName}>
+                                <p>{state.teacherDetail.userName}</p>
+                                {/* {!state.teacherDetail.entryFlag ? (
                             ''
                           ) : (
                             <img
@@ -452,64 +501,79 @@ export default defineComponent({
                               alt=""
                             />
                           )} */}
-                              {state.userType == 'STUDENT' ? (
-                                <div
-                                  class={[
-                                    classes.teacherHeadRight,
-                                    state.teacherDetail.star
-                                      ? classes.isStart
-                                      : ''
-                                  ]}
-                                  onClick={() => followVideo()}
-                                >
-                                  {state.teacherDetail.star
-                                    ? '已关注'
-                                    : '+ 关注'}
-                                </div>
-                              ) : null}
+                                {state.userType == 'STUDENT' ? (
+                                  <div
+                                    class={[
+                                      classes.teacherHeadRight,
+                                      state.teacherDetail.star
+                                        ? classes.isStart
+                                        : ''
+                                    ]}
+                                    onClick={() => followVideo()}
+                                  >
+                                    {state.teacherDetail.star
+                                      ? '已关注'
+                                      : '+ 关注'}
+                                  </div>
+                                ) : (
+                                  <div class={classes.iconWrapList}>
+                                    <img
+                                      src={ state.teacherDetail.isVip?vipIcon:noVipIcon}
+                                      class={classes.vipIcon}
+                                      alt=""
+                                    />
+                                    {state.iconList.map(item => (
+                                      <img
+                                        class={classes.teacherDetailIcon}
+                                        src={item}
+                                        alt=""
+                                      />
+                                    ))}
+                                  </div>
+                                )}
+                              </div>
                             </div>
                           </div>
-                        </div>
-                        <div>
-                          <p class={classes.fensNum}>
-                            {state.teacherDetail.fansNum}
-                          </p>
-                          <p class={classes.fens}>粉丝数</p>
+                          <div>
+                            <p class={classes.fensNum}>
+                              {state.teacherDetail.fansNum}
+                            </p>
+                            <p class={classes.fens}>粉丝数</p>
+                          </div>
                         </div>
                       </div>
-                    </div>
-                  ) : null}
+                    ) : null}
 
-                  <div class={classes.otherMusic}>
-                    <div class={classes.videoNav}>
-                      <h5>TA的曲谱</h5>
-                      <div
-                        class={classes.wrapRight}
-                        onClick={() => gotoMusic()}
-                      >
-                        <span>更多</span>
-                        <img class={classes.arrow} src={arrow} alt="" />
+                    <div class={classes.otherMusic}>
+                      <div class={classes.videoNav}>
+                        <h5>TA的曲谱</h5>
+                        <div
+                          class={classes.wrapRight}
+                          onClick={() => gotoMusic()}
+                        >
+                          <span>更多</span>
+                          <img class={classes.arrow} src={arrow} alt="" />
+                        </div>
                       </div>
-                    </div>
 
-                    <div class={classes.otherMusicList}>
-                      {state.musicList.map(item => {
-                        return (
-                          <musicItem
-                            item={item}
-                            onMusicDetail={val => getDetail(val)}
-                          ></musicItem>
-                        )
-                      })}
+                      <div class={classes.otherMusicList}>
+                        {state.musicList.map(item => {
+                          return (
+                            <musicItem
+                              item={item}
+                              onMusicDetail={val => getDetail(val)}
+                            ></musicItem>
+                          )
+                        })}
+                      </div>
                     </div>
                   </div>
                 </div>
+                {/* <img src={state.imgUrl} alt="" /> */}
               </div>
-              {/* <img src={state.imgUrl} alt="" /> */}
             </div>
           </div>
         </div>
-        </div>
       </>
     )
   }

+ 8 - 6
src/views/student-info/my-follow/item.tsx

@@ -35,7 +35,7 @@ export default defineComponent({
   computed: {
     subjects() {
       const { subjectName } = this.item
-      return subjectName.split(',')
+      return subjectName.split(',') || []
     }
   },
   methods: {
@@ -69,12 +69,14 @@ export default defineComponent({
         case 'VIDEO':
         case 'LIVE':
         case 'MUSIC':
-          if (teacher.tag) {
+          if (teacher && teacher.tag) {
             status = teacher.tag.indexOf(type) > -1
           }
           break
         case 'VIP':
-          status = teacher.isVip > 0
+          if (teacher) {
+            status = teacher.isVip > 0
+          }
           break
         default:
           status = false
@@ -100,21 +102,21 @@ export default defineComponent({
               {item.userName}
             </p>
             <div class="flex items-center">
-              <ElImage
+              {/* <ElImage
                 src={
                   this.checkBadge('VIP')
                     ? getAssetsHomeFile('icon_vip.png')
                     : getAssetsHomeFile('icon_vip_default.png')
                 }
                 class="h-7 -ml-1"
-              />
+              /> */}
               <img
                 src={
                   this.checkBadge('STYLE')
                     ? getAssetsHomeFile('icon_cert.png')
                     : getAssetsHomeFile('icon_cert_default.png')
                 }
-                class="h-[26px] px-1"
+                class="h-[26px] -ml-1"
               />
               <img
                 src={

+ 1 - 1
src/views/user-info/live-operation/course-info/index.tsx

@@ -133,7 +133,7 @@ export default defineComponent({
           >
             <ElInput
               v-model={createState.live.name}
-              maxlength={50}
+              maxlength={20}
               placeholder="请输入课程名称"
             />
           </ElFormItem>

+ 2 - 2
src/views/user-info/my-fans/index.tsx

@@ -57,7 +57,7 @@ export default defineComponent({
   },
   render() {
     return (
-      <div class="h-full rounded-md overflow-hidden">
+      <div class="rounded-md overflow-hidden">
         <div class="text-2xl font-semibold text-black leading-none px-6 py-5 ">
           我的粉丝
         </div>
@@ -137,7 +137,6 @@ export default defineComponent({
           </ElSkeleton>
         </div>
 
-        {this.dataShow && <ColEmpty />}
         <Pagination
           total={this.pageInfo.total}
           v-model:page={this.pageInfo.page}
@@ -145,6 +144,7 @@ export default defineComponent({
           pageSizes={this.pageInfo.page_size}
           pagination={this.getList}
         />
+        {this.dataShow && <ColEmpty />}
       </div>
     )
   }

+ 1 - 1
src/views/user-info/video-operation/course-info/index.tsx

@@ -124,7 +124,7 @@ export default defineComponent({
           >
             <ElInput
               v-model={createState.lessonGroup.lessonName}
-              maxlength={50}
+              maxlength={20}
               placeholder="请输入课程名称"
             />
           </ElFormItem>

二進制
src/views/videoDetailList/images/styleBG.jpg


+ 14 - 0
src/views/videoDetailList/index.module.less

@@ -242,6 +242,20 @@
             margin-right: 5px;
           }
         }
+        .iconWrapList {
+          display: flex;
+          flex-direction: row;
+          align-items: center;
+          .teacherDetailIcon {
+            width: 26px;
+            height: 26px;
+          }
+          .vipIcon {
+            width: 42px;
+            height: 26px;
+
+          }
+        }
       }
       .fensNum {
         font-size: 24px;

+ 54 - 2
src/views/videoDetailList/videoDetail.tsx

@@ -19,6 +19,20 @@ import teacher from './images/teacher.png'
 import teacherHeader from '@/common/images/icon_teacher.png'
 import musiceIcon from './images/musiceIcon.png'
 import TimetableIcon from './images/TimetableIcon.png'
+
+
+import ablumIcon from '@/components/col-header/images/ablumIcon.png'
+import noAblumIcon from '@/components/col-header/images/noAblumIcon.png'
+import onlineIcon from '@/components/col-header/images/onlineIcon.png'
+import noOnlineIcon from '@/components/col-header/images/noOnlineIcon.png'
+import styleIcon from '@/components/col-header/images/styleIcon.png'
+import nostyleIcon from '@/components/col-header/images/nostyleIcon.png'
+import videoIcon from '@/components/col-header/images/videoIcon.png'
+import noVideoIcon from '@/components/col-header/images/noVideoIcon.png'
+import vipIcon from '@/components/col-header/images/vipIcon.png'
+import noVipIcon from '@/components/col-header/images/noVipIcon.png'
+
+
 import styles from './index.module.less'
 import videoDetailItem from '@/components/videoDetailItem'
 import colVideo from '@/components/col-video/index'
@@ -88,7 +102,8 @@ export default defineComponent({
       userType: '',
       showVideoDetail: false,
       activeItem: null as any,
-      styleList:[]as any
+      styleList:[]as any,
+      iconList:[] as any
     })
 
     const route = useRoute()
@@ -127,6 +142,7 @@ export default defineComponent({
           `/api-website/open/teacher/detail/${res.data.lessonGroup.teacherId}`
         )
         state.teacherDetail = { ...teacherRes.data }
+        setUser()
 
       } catch (e) {}
     }
@@ -153,6 +169,29 @@ export default defineComponent({
         _init()
       })
     }
+    const setUser = () => {
+      state.iconList = [] as any
+      if (state.teacherDetail.tag.indexOf('STYLE') != -1) {
+        state.iconList.push(styleIcon)
+      } else {
+        state.iconList.push(nostyleIcon)
+      }
+      if (state.teacherDetail.tag.indexOf('VIDEO') != -1) {
+        state.iconList.push(videoIcon)
+      } else {
+        state.iconList.push(noVideoIcon)
+      }
+      if (state.teacherDetail.tag.indexOf('LIVE') != -1) {
+        state.iconList.push(onlineIcon)
+      } else {
+        state.iconList.push(noOnlineIcon)
+      }
+      if (state.teacherDetail.tag.indexOf('MUSIC') != -1) {
+        state.iconList.push(ablumIcon)
+      } else {
+        state.iconList.push(noAblumIcon)
+      }
+    }
     const _init = () => {
       getVideoList()
       setTimeout(() => {
@@ -275,7 +314,20 @@ export default defineComponent({
                             >
                               {state.teacherDetail.isStar ? '已关注' : '+ 关注'}
                             </div>
-                          ) : null}
+                          ) :   <div class={styles.iconWrapList}>
+                          <img
+                            src={ state.teacherDetail.isVip?vipIcon:noVipIcon}
+                            class={styles.vipIcon}
+                            alt=""
+                          />
+                          {state.iconList.map(item => (
+                            <img
+                              class={styles.teacherDetailIcon}
+                              src={item}
+                              alt=""
+                            />
+                          ))}
+                        </div>}
                         </div>
                       </div>
                     </div>

+ 5 - 9
yarn.lock

@@ -2893,10 +2893,6 @@
   "resolved" "https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz"
   "version" "0.9.3"
 
-"esbuild-darwin-64@0.13.15":
-  "integrity" "sha512-ihOQRGs2yyp7t5bArCwnvn2Atr6X4axqPpEdCFPVp7iUj4cVSdisgvEKdNR7yH3JDjW6aQDw40iQFoTqejqxvQ=="
-  "version" "0.13.15"
-
 "esbuild@^0.13.12":
   "integrity" "sha512-raCxt02HBKv8RJxE8vkTSCXGIyKHdEdGfUmiYb8wnabnaEmHzyW7DCHb5tEN0xU8ryqg5xw54mcwnYkC4x3AIw=="
   "version" "0.13.15"
@@ -3275,11 +3271,6 @@
   "resolved" "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz"
   "version" "1.0.0"
 
-"fsevents@~2.3.2":
-  "integrity" "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA=="
-  "resolved" "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz"
-  "version" "2.3.2"
-
 "function-bind@^1.1.1":
   "integrity" "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
   "resolved" "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz"
@@ -4989,6 +4980,11 @@
   "resolved" "https://registry.npmmirror.com/rfdc/-/rfdc-1.3.0.tgz"
   "version" "1.3.0"
 
+"rgbaster@^2.1.1":
+  "integrity" "sha512-vUQI+ldMMSGXEbWtqb/6aqLY1LHc33OtXg2Q9S0TCxzt2KxGncRJB6dk860KzhWTjms+Fz4wkxrJu8MlCrFpYg=="
+  "resolved" "https://registry.npmmirror.com/rgbaster/-/rgbaster-2.1.1.tgz"
+  "version" "2.1.1"
+
 "rimraf@^3.0.2":
   "integrity" "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA=="
   "resolved" "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz"