Prechádzať zdrojové kódy

Merge branch 'iteration-20240618' into dev

lex 9 mesiacov pred
rodič
commit
8219930832

BIN
src/teacher/music/upload/images/banner-bg.png


BIN
src/teacher/music/upload/images/icon-brid.png


+ 43 - 8
src/teacher/music/upload/index.module.less

@@ -11,6 +11,7 @@
   position: absolute;
   top: -100px;
   right: -14px;
+  z-index: 101;
   font-weight: 500;
   font-size: 12px;
   color: #FFFFFF;
@@ -29,6 +30,19 @@
   height: 31px;
 }
 
+.bridSection {
+  position: relative;
+
+  .iconBrid {
+    position: absolute;
+    right: 23px;
+    width: 131px;
+    height: 135px;
+    top: -30px;
+
+  }
+}
+
 .area {
   position: relative;
   padding: 34px 0 12px;
@@ -36,7 +50,7 @@
   border-radius: 16px;
 
   &.topArea {
-    margin-top: 100px;
+    margin-top: 70px;
   }
 
   .section-title {
@@ -66,11 +80,20 @@
       font-size: 16px;
       color: #000;
       margin-right: 0;
-      flex: 1 auto;
+      flex: initial;
     }
 
     .van-field__value {
       font-size: 16px;
+      flex: 1 auto;
+    }
+
+    .van-field__control--min-height {
+      --van-field-text-area-min-height: 80px;
+    }
+
+    .van-cell:after {
+      --van-padding-md: 12px;
     }
 
   }
@@ -136,6 +159,7 @@
       }
 
       .titleTip {
+        font-weight: 400;
         font-size: 12px;
         color: #AAAAAA;
       }
@@ -150,6 +174,7 @@
         border-radius: 10px;
         padding-left: 10px;
         padding-right: 10px;
+        padding-bottom: 12px;
       }
 
       .van-field__word-limit {
@@ -223,6 +248,14 @@
   >p>span {
     color: var(--strong--color);
     font-weight: bold;
+    font-size: 16px;
+    display: inline-flex;
+    align-items: center;
+
+    span {
+      font-size: 14px;
+      padding-left: 4px;
+    }
   }
 }
 
@@ -265,7 +298,7 @@
     }
 
     .van-button:active:before {
-      opacity: 1;
+      opacity: 0;
     }
 
     .van-button__text {
@@ -298,8 +331,10 @@
     }
 
     .van-tag--large {
-      width: 94px;
+      width: 80px;
       height: 30px;
+      padding-left: 0;
+      padding-right: 0;
       font-size: 16px;
       text-align: center;
       display: flex;
@@ -326,14 +361,14 @@
   margin-right: 5px;
   margin-bottom: 5px;
   // margin-top: 5px;
-  background: #F2FFFC;
+  background: #F2FFFC !important;
   border-radius: 4px;
   height: 28px;
   font-size: 14px;
   color: #00B2A7 !important;
-  padding-top: 0;
-  padding-bottom: 0;
-  border: 1px solid #9FE2DE;
+  padding-top: 0 !important;
+  padding-bottom: 0 !important;
+  border: 1px solid #9FE2DE !important;
 }
 
 .file {

+ 59 - 32
src/teacher/music/upload/index.tsx

@@ -23,6 +23,7 @@ import request from '@/helpers/request'
 import requestOrigin from 'umi-request'
 import UploadIcon from './images/music-icon.png'
 import btnBg from './images/btn-bg.png'
+import iconBrid from './images/icon-brid.png'
 import iconTitleUpload from './images/icon-title-upload.png'
 import iconTitleUpdate from './images/icon-title-update.png'
 import ColUpload from '@/components/col-upload'
@@ -72,7 +73,7 @@ export default defineComponent({
       playSpeed: '' as any,
       // hasBeat: 0,
       musicCover: '',
-      paymentType: 'CHARGE',
+      paymentType: 'FREE',
       // showFingering: 1,
       // canEvaluate: 1,
       // notation: 1,
@@ -112,6 +113,10 @@ export default defineComponent({
     }
   },
   async mounted() {
+    const isCatchTip = localStorage.getItem('isCatchTip')
+    if (!isCatchTip) {
+      this.messageTipStatus = true
+    }
     // 获取基础数据
     request
       .get('/api-teacher/sysConfig/queryByParamNameList', {
@@ -385,12 +390,12 @@ export default defineComponent({
     },
     onFormatter2(val: any) {
       const num = verifiyNumberInteger(val)
-      if (num && Number(num) > 270) {
-        return '270'
-      }
-      if (num && Number(num) < 45) {
-        return '45'
-      }
+      // if (num && Number(num) > 270) {
+      //   return '270'
+      // }
+      // if (num && Number(num) < 45) {
+      //   return '45'
+      // }
       return num
     },
     fileName(name = '') {
@@ -485,6 +490,9 @@ export default defineComponent({
           border={false}
         />
 
+        <div class={styles.bridSection}>
+          <img src={iconBrid} class={styles.iconBrid} />
+        </div>
         <CellGroup class={[styles.area, styles.topArea]} border={false}>
           <div
             class={styles.uploadMessage}
@@ -503,7 +511,7 @@ export default defineComponent({
           />
 
           <div class={styles['section-title']}></div>
-          <Field required label="播放类型" center inputAlign="right">
+          <Field required label="播放模式" center inputAlign="right">
             {{
               input: () => (
                 <RadioGroup
@@ -646,7 +654,7 @@ export default defineComponent({
             name="xmlFileUrl"
             class={styles.fieldTypeBottom}
             modelValue={this.xmlFileUrl}
-            rules={[{ required: true, message: '请选择XML/MusicXML文件' }]}
+            rules={[{ required: true, message: '请选择XML文件' }]}
           >
             {{
               label: () => (
@@ -654,9 +662,7 @@ export default defineComponent({
                   <span>
                     <i>*</i>上传XML
                   </span>
-                  <span class={styles.titleTip}>
-                    仅支持XML/MusicXML格式文件
-                  </span>
+                  <span class={styles.titleTip}>仅支持XML格式文件</span>
                 </div>
               ),
               input: () =>
@@ -790,7 +796,7 @@ export default defineComponent({
 
           <Field
             label="曲目名称"
-            clearable
+            required
             name="name"
             modelValue={this.name}
             rules={[{ required: true, message: '请输入曲目名称' }]}
@@ -804,7 +810,7 @@ export default defineComponent({
 
           <Field
             label="音乐人"
-            clearable
+            required
             name="composer"
             modelValue={this.composer}
             rules={[{ required: true, message: '请输入音乐人' }]}
@@ -855,20 +861,28 @@ export default defineComponent({
           <Field
             required
             label="曲目速度"
-            center
             name="playSpeed"
             inputAlign="right"
             rules={[{ required: true, message: '请输入曲目速度' }]}
             errorMessageAlign="right"
             v-model={this.playSpeed}
+            placeholder="请输入曲目速度,范围45-270"
             // class={styles.inputControl}
             formatter={this.onFormatter2}
+            onBlur={() => {
+              if (this.playSpeed && Number(this.playSpeed) > 270) {
+                this.playSpeed = '270'
+              }
+              if (this.playSpeed && Number(this.playSpeed) < 45) {
+                this.playSpeed = '45'
+              }
+            }}
             autocomplete="off"
           ></Field>
 
           <Field
             label="曲目标签"
-            placeholder=""
+            placeholder="请选择曲目标签"
             inputAlign="right"
             isLink
             required
@@ -959,8 +973,18 @@ export default defineComponent({
               />
 
               <div class={styles.rule}>
-                <p>扣除手续费后该曲目预计收入为:</p>
                 <p>
+                  扣除手续费后该曲目预计收入为:
+                  <span>
+                    {(
+                      ((parseFloat(this.musicPrice || '0') || 0) *
+                        (100 - this.music_sheet_service_fee)) /
+                      100
+                    ).toFixed(2)}
+                    <span>元/人</span>
+                  </span>
+                </p>
+                {/* <p>
                   每人:
                   <span>
                     {(
@@ -970,7 +994,7 @@ export default defineComponent({
                     ).toFixed(2)}
                   </span>
                   元/人
-                </p>
+                </p> */}
 
                 <p>
                   您的乐谱收入在学员购买后{this.music_account_period}
@@ -981,19 +1005,19 @@ export default defineComponent({
           )}
         </CellGroup>
 
-        <ColSticky position="bottom" background="transparent">
-          <div class={styles['button-area']}>
-            <Button
-              type="primary"
-              block
-              round
-              native-type="submit"
-              disabled={this.submitLoading}
-            >
-              <img src={btnBg} />
-            </Button>
-          </div>
-        </ColSticky>
+        {/* <ColSticky position="bottom" background="transparent"> */}
+        <div class={[styles['button-area']]}>
+          <Button
+            type="primary"
+            block
+            round
+            native-type="submit"
+            disabled={this.submitLoading}
+          >
+            <img src={btnBg} />
+          </Button>
+        </div>
+        {/* </ColSticky> */}
         {/* <Popup
           show={this.showPicker}
           round
@@ -1023,7 +1047,7 @@ export default defineComponent({
           round
           closeable
           position="bottom"
-          style={{ height: '60%' }}
+          style={{ height: '35%' }}
           teleport="body"
           onUpdate:show={val => (this.tagVisibility = val)}
         >
@@ -1043,6 +1067,9 @@ export default defineComponent({
           type={this.messageTipType}
           show={this.messageTipStatus}
           onConfirm={() => {
+            if (this.messageTipType === 'upload') {
+              localStorage.setItem('isCatchTip', '1')
+            }
             this.messageTipStatus = false
           }}
         />

+ 10 - 3
src/teacher/music/upload/message-tip/index.module.less

@@ -29,7 +29,7 @@
   background-size: contain;
   border-radius: 20px;
   overflow: hidden;
-  padding-bottom: 16px;
+  padding-bottom: 20px;
 
   .title1 {
     padding-top: 57px;
@@ -46,11 +46,12 @@
         content: '';
         position: absolute;
         left: 0;
-        bottom: 0;
+        bottom: 1px;
         z-index: -1;
         width: 100%;
         height: 8px;
         background: linear-gradient(to right, rgba(45, 199, 170, 1), rgba(91, 236, 255, 0.20));
+        opacity: 0.68;
       }
     }
   }
@@ -60,6 +61,8 @@
     font-size: 15px;
     color: #777777;
     line-height: 21px;
+    padding-bottom: 16px;
+    padding-top: 16px;
 
 
     // &::before {
@@ -76,7 +79,7 @@
       max-height: 300px;
       overflow-x: hidden;
       overflow-y: auto;
-      padding: 16px 20px 0;
+      padding: 0 20px 0;
     }
 
     .cTitle {
@@ -92,6 +95,10 @@
       line-height: 24px;
       padding-bottom: 14px;
 
+      &.cContentBottom {
+        padding-bottom: 0;
+      }
+
       span {
         color: #14BC9C;
         cursor: pointer;

+ 3 - 3
src/teacher/music/upload/message-tip/index.tsx

@@ -104,7 +104,7 @@ export default defineComponent({
                     ,如果您上传了文件,即认为您完全同意并遵守该协议的内容。
                   </div>
                   <p class={styles.cTitle}>曲谱审核标准:</p>
-                  <div class={styles.cContent}>
+                  <div class={[styles.cContent, styles.cContentBottom]}>
                     1、文件大小不要超过5MB,不符合版面规范的乐谱,审核未通过的不予上架,详情参考
                     <span onClick={() => onDetail('music')}>
                       《曲谱排版规范》
@@ -122,7 +122,7 @@ export default defineComponent({
 
               {props.type === 'error' && (
                 <div class={styles.container}>
-                  <div class={styles.cContent}>
+                  <div class={[styles.cContent, styles.cContentBottom]}>
                     声轨名称解析失败,请对照
                     <span onClick={() => onDetail('music')}>
                       《曲谱排版规范》
@@ -134,7 +134,7 @@ export default defineComponent({
 
               {props.type === 'origin' && (
                 <div class={styles.container}>
-                  <div class={styles.cContent}>
+                  <div class={[styles.cContent, styles.cContentBottom]}>
                     1、同一首曲目不可重复上传,如有不同版本统一用“()”补充。举例:人生的旋转木马(长笛二重奏版)
                     <br />
                     2、曲目名后可添加曲目信息备注,包含但不限于曲目类型等。曲目名《XXX》,举例:人声的旋转木马《哈尔的移动城堡》(长笛二重奏版)

+ 21 - 0
src/teacher/music/upload/select-tag/index.module.less

@@ -19,6 +19,21 @@
   flex-wrap: wrap;
   text-align: center;
 
+  :global {
+    .van-tag {
+      background: #F6F6F6 !important;
+      font-size: 14px;
+      color: #777777 !important;
+      border-color: #F6F6F6 !important;
+    }
+
+    .van-tag--primary {
+      background: #E9FFF8 !important;
+      border-color: #2DC7AA !important;
+      color: #14BC9C !important;
+    }
+  }
+
   .item {
     display: block;
     margin-right: 5px;
@@ -77,6 +92,12 @@
 
 .btn {
   width: 164px;
+  font-size: 18px;
+  font-weight: bold;
+
+  &.btnCancel {
+    border-color: #DBDBDB;
+  }
 }
 
 .select {

+ 24 - 11
src/teacher/music/upload/select-tag/index.tsx

@@ -53,13 +53,13 @@ export default defineComponent({
     )
 
     const resetTags = () => {
-      tagList.value = [...props.defaultValue]
-      emit('close')
+      tagList.value = []
+      // emit('close')
     }
     return () => {
       return (
         <div class={styles.select}>
-          <h4 class={styles.title}>全部声部</h4>
+          <h4 class={styles.title}>曲目标签</h4>
           <div class={styles.content}>
             <CheckboxGroup
               class={classNames(styles.childContent, styles['radio-group'])}
@@ -69,23 +69,32 @@ export default defineComponent({
                 onSelect!(val)
               }}
             >
-              {props.tagList.map((item: any) => (
+              {props.tagList.map((item: any, index: number) => (
                 <Checkbox
                   key={item.id}
                   name={item.id}
                   class={styles.radio}
                   onClick={() => {
-                    if (tagList.value.length >= 3) {
-                      Toast('最多只能选3个标签')
-                      return
+                    if (tagList.value.includes(item.id)) {
+                      const index = tagList.value.findIndex(
+                        tag => tag === item.id
+                      )
+                      tagList.value.splice(index, 1)
+                    } else {
+                      if (tagList.value.length >= 3) {
+                        Toast('最多只能选3个标签')
+                        return
+                      }
+                      onSelect!([item.id])
                     }
-                    onSelect!([item.id])
                   }}
                 >
                   <Tag
                     class={classNames(styles.item, 'van-ellipsis')}
-                    plain={!tagList.value.includes(item.id)}
-                    type="primary"
+                    plain
+                    type={
+                      !tagList.value.includes(item.id) ? 'default' : 'primary'
+                    }
                     round
                     size="large"
                   >
@@ -96,7 +105,11 @@ export default defineComponent({
             </CheckboxGroup>
           </div>
           <footer class="van-safe-area-bottom van-hairline--top">
-            <Button class={styles.btn} round onClick={resetTags}>
+            <Button
+              class={[styles.btn, styles.btnCancel]}
+              round
+              onClick={resetTags}
+            >
               重置
             </Button>
             <Button

+ 7 - 1
src/tenant/music/music-detail/new-index.tsx

@@ -1088,7 +1088,13 @@ export default defineComponent({
                   opacity: loading.value ? 0 : 1
                 }}
                 src={staffData.iframeSrc}
-                onLoad={musicIframeLoad}
+                onLoad={() => {
+                  if (!defaultImgs.value[staff.radio]) {
+                    onChangeStaff(staff.radio)
+                  } else {
+                    musicIframeLoad()
+                  }
+                }}
               ></iframe>
               {/* <OsmdPreview ref={osmdPreviewRef} /> */}
             </>