浏览代码

Merge branch 'iteration-20241011' into dev

lex-xin 7 月之前
父节点
当前提交
d030e94982
共有 27 个文件被更改,包括 83 次插入87 次删除
  1. 1 1
      src/business-components/group-plan-step/index.module.less
  2. 10 26
      src/business-components/user-detail/index.tsx
  3. 1 1
      src/router/routes-teacher.ts
  4. 1 1
      src/student/discount-card/index.module.less
  5. 3 3
      src/student/group-class/group-detail.tsx
  6. 5 2
      src/student/live-class/live-detail.tsx
  7. 18 15
      src/student/teacher-dependent/components/group.tsx
  8. 1 1
      src/student/teacher-dependent/components/live.module.less
  9. 3 3
      src/student/teacher-dependent/components/live.tsx
  10. 1 0
      src/student/teacher-dependent/components/practice.tsx
  11. 1 0
      src/student/teacher-dependent/components/vip.tsx
  12. 1 1
      src/student/teacher-dependent/model/teacher-header.module.less
  13. 5 4
      src/teacher/group-class/create-components/course-start.tsx
  14. 3 4
      src/teacher/group-class/create-components/detail.tsx
  15. 6 8
      src/teacher/group-class/group-detail.tsx
  16. 3 2
      src/teacher/live-class/create-components/course-start.tsx
  17. 2 1
      src/teacher/live-class/create-components/detail.tsx
  18. 1 2
      src/teacher/live-class/live-detail.tsx
  19. 1 1
      src/teacher/piano-room/class-arrangement/class-info/index.tsx
  20. 7 9
      src/teacher/share-page/share-group/index.tsx
  21. 1 1
      src/tenant/member-center/index.module.less
  22. 1 0
      src/views/cart/index.tsx
  23. 1 1
      src/views/live-class/live-item.tsx
  24. 1 0
      src/views/order-detail/order-discount/index.tsx
  25. 1 0
      src/views/order-detail/order-vip/index.tsx
  26. 1 0
      src/views/shop-mall/modal/add-goods-cart/index.tsx
  27. 3 0
      src/views/trade/trade-detail.module.less

+ 1 - 1
src/business-components/group-plan-step/index.module.less

@@ -56,7 +56,7 @@
       margin-right: 5px;
     }
     .subjectName {
-      padding: 1px 4px 2px;
+      padding: 3px 4px 2px;
       background: #FFF1DE;
       border-radius: 4px;
       font-size: 11px;

+ 10 - 26
src/business-components/user-detail/index.tsx

@@ -14,6 +14,7 @@ import iconCourse from './images/icon-course.png'
  * @param {type} headUrl 头像
  * @param {type} username 姓名
  * @param {type} startTime 开始时间
+ * @param {type} courseStartTime
  * @param {type} buyNum 购买用户数
  * @param {type} payType 收费方式
  * @param {type} type 课程类型
@@ -31,6 +32,7 @@ interface UserType {
   headUrl: string
   username: string
   startTime?: string
+  courseStartTime?: any
   id?: number
   buyNum?: number
   payType?: string
@@ -39,7 +41,7 @@ interface UserType {
   lessonPrice: number
   lessonNum?: number
   lessonDesc?: string
-  mixStudentNum?: string
+  mixStudentNum?: string | number
   lessonCoverUrl: string
   lessonName: string
   auditVersion: number
@@ -93,31 +95,13 @@ export default defineComponent({
                   <span
                     class={styles.timers}
                   >
-                    <div class={styles.timerSpan}>
-                      <Icon
-                        name={iconTimer}
-                        size="16"
-                        style={{ marginRight: '5px' }}
-                      />
-                      开课时间:
-                      {this.userInfo.startTime}
-                    </div>
-
-                    {this.showBuy && ['live', 'group'].includes(this.userInfo.type || '') && (
-                      <div class={[styles.buyNum, styles.buyNumOther]}>
-                        {this.userInfo.type === 'live' ? (
-                          <span>
-                            {this.userInfo.buyNum}人已
-                            {this.userInfo.lessonPrice <= 0 &&
-                            this.userInfo.auditVersion === 0
-                              ? '领取'
-                              : '购买'}
-                          </span>
-                        ) : this.userInfo.type === "group" ?
-                          ((this.userInfo.mixStudentNum || 0 > 0) ? <>剩余{this.userInfo.mixStudentNum}个名额</> : '')
-                        : ''}
-                      </div>
-                    )}
+                    <Icon
+                      name={iconTimer}
+                      size="16"
+                      style={{ marginRight: '5px' }}
+                    />
+                    开课时间:
+                    {this.userInfo.courseStartTime}
                   </span>
                 )
             }}

+ 1 - 1
src/router/routes-teacher.ts

@@ -214,7 +214,7 @@ export default [
         name: 'groupDetail',
         component: () => import('@/teacher/group-class/group-detail'),
         meta: {
-          title: '小组课详情'
+          title: '课程组详情'
         }
       },
       {

+ 1 - 1
src/student/discount-card/index.module.less

@@ -216,7 +216,7 @@
       line-height: 15px;
     }
     .chapterBottom {
-      font-family: DINAlternate, DINAlternate;
+      font-family: DIN;
       font-weight: bold;
       font-size: 22px;
       color: #ffffff;

+ 3 - 3
src/student/group-class/group-detail.tsx

@@ -51,7 +51,7 @@ export default defineComponent({
       const planList = live.planList || []
       const startTime = planList[0]?.startTime || new Date()
       const endTime = planList[0]?.endTime || new Date()
-      const studentNum = live.maxStudentNum || 0 - live.studentCount || 0
+      const studentNum = (live.maxStudentNum || 0) - (live.studentCount || 0)
       return {
         avatar: live.avatar,
         headUrl: live.avatar,
@@ -70,7 +70,7 @@ export default defineComponent({
         lessonCoverUrl: live.backgroundPic || live.backgroundPicTemplate,
         lessonName: live.courseGroupName,
         subjectName: live.subjectName,
-        courseStartTime: live.courseStartTime,
+        courseStartTime: dayjs(live.courseStartTime).format('YYYY-MM-DD HH:mm'),
         auditVersion: live.auditVersion || 0,
         isDegree: live.degreeFlag ? true : false,
         isTeacher: live.teacherFlag ? true : false
@@ -95,7 +95,7 @@ export default defineComponent({
           ).format('HH:mm')}~${dayjs(endTime).format('HH:mm')}`,
           coursePlan: item.plan,
           roomUid: item.roomUid,
-          teacherName: live.teacherName,
+          teacherName: live.userName,
           subjectName: live.subjectName,
           liveState: item.liveState,
           id: item.courseId

+ 5 - 2
src/student/live-class/live-detail.tsx

@@ -53,7 +53,11 @@ export default defineComponent({
         headUrl: live.avatar,
         username: live.userName || `游客${live.teacherId || ''}`,
         id: live.teacherId,
-        startTime: `${dayjs(startTime).format('YYYY-MM-DD')} ${dayjs(startTime).format('HH:mm')}` || '',
+        startTime:
+          `${dayjs(startTime).format('YYYY-MM-DD')} ${dayjs(startTime).format(
+            'HH:mm'
+          )}` || '',
+        courseStartTime: dayjs(live.courseStartTime).format('YYYY-MM-DD HH:mm'),
         buyNum: live.studentCount,
         type: 'live',
         lessonId: live.courseGroupId,
@@ -65,7 +69,6 @@ export default defineComponent({
         lessonCoverUrl: live.backgroundPic || live.backgroundPicTemplate,
         lessonName: live.courseGroupName,
         subjectName: live.subjectName,
-        courseStartTime: live.courseStartTime,
         auditVersion: live.auditVersion || 0,
         isDegree: live.degreeFlag ? true : false,
         isTeacher: live.teacherFlag ? true : false

+ 18 - 15
src/student/teacher-dependent/components/group.tsx

@@ -32,10 +32,10 @@ export default defineComponent({
   methods: {
     formatTime(time: string) {
       const timeStr = dayjs(time || new Date())
-      const weekStr = ['周日', '周一', '周二', '周三', '周四', '周五', '周六']
-      // console.log(timeStr.day())
+      // const weekStr = ['周日', '周一', '周二', '周三', '周四', '周五', '周六']
+      // // console.log(timeStr.day())
 
-      return timeStr.format('YYYY-MM-DD')  + `(${weekStr[timeStr.day()]})`
+      return timeStr.format('YYYY-MM-DD HH:mm')
     },
     async getList() {
       try {
@@ -60,6 +60,11 @@ export default defineComponent({
         if (this.list.length > 0 && result.pageNo === 1) {
           return
         }
+        const rows = result.rows || []
+        rows.forEach((item: any) => {
+          const num = item.maxStudentNum - item.studentCount
+          item.studentLastCount = num <= 0 ? 0 : num
+        })
         this.list = this.list.concat(result.rows || [])
         this.finished = result.pageNo >= result.totalPage
         this.params.page = result.pageNo + 1
@@ -103,7 +108,7 @@ export default defineComponent({
               >
                 <div class={styles.liveTop}>
                   <img src={iconLive} class={styles.iconLive} />
-                  <span>开课时间: {this.formatTime(item.salesStartDate)} </span>
+                  <span>开课时间: {this.formatTime(item.courseStartTime)} </span>
                 </div>
                 <div class={styles.liveCenter}>
                   <Image
@@ -120,20 +125,18 @@ export default defineComponent({
                   </div>
                   <div class={styles.users}>
                     <div class={styles.lean}>
-                      <span class={styles.num}>
-                        {item.studentCount}人学习
-                      </span>
+                      {item.studentLastCount > 0 ? (<span class={styles.num}>
+                        剩余{item.studentLastCount}个名额
+                      </span>) : ""}
                     </div>
                     <div class={styles.price}>
                       {item.coursePrice > 0 && (
-                        <>
-                          <span class={styles.priceNum}>
-                            <i>¥</i>
-                            {(this as any).$filters.moneyFormat(
-                              item.coursePrice
-                            )}
-                          </span>
-                        </>
+                        <span class={styles.priceNum}>
+                          <i>¥</i>
+                          {(this as any).$filters.moneyFormat(
+                            item.coursePrice
+                          )}
+                        </span>
                       )}
                       <span class={styles.label}>
                         {item.coursePrice > 0 && '/'}

+ 1 - 1
src/student/teacher-dependent/components/live.module.less

@@ -64,7 +64,7 @@
   .priceNum {
     color: #ff0000;
     font-size: 22px;
-    // font-family: DINAlternate, DINAlternate;
+    font-family: DIN;
     font-weight: bold;
     i {
       font-size: 14px;

+ 3 - 3
src/student/teacher-dependent/components/live.tsx

@@ -35,10 +35,10 @@ export default defineComponent({
   methods: {
     formatTime(time: string) {
       const timeStr = dayjs(time || new Date())
-      const weekStr = ['周日', '周一', '周二', '周三', '周四', '周五', '周六']
+      // const weekStr = ['周日', '周一', '周二', '周三', '周四', '周五', '周六']
       // console.log(timeStr.day())
 
-      return timeStr.format('YYYY-MM-DD')  + `(${weekStr[timeStr.day()]})`
+      return timeStr.format('YYYY-MM-DD HH:mm')
     },
     async getList() {
       try {
@@ -106,7 +106,7 @@ export default defineComponent({
               >
                 <div class={styles.liveTop}>
                   <img src={iconLive} class={styles.iconLive} />
-                  <span>开课时间: {this.formatTime(item.salesStartDate)} </span>
+                  <span>开课时间: {this.formatTime(item.courseStartTime)} </span>
                 </div>
                 <div class={styles.liveCenter}>
                   <Image

+ 1 - 0
src/student/teacher-dependent/components/practice.tsx

@@ -430,6 +430,7 @@ export default defineComponent({
                           max={12}
                           min={4}
                           buttonSize={22}
+                          longPress={false}
                           onChange={() => {
                             this.selectCourseList = []
                           }}

+ 1 - 0
src/student/teacher-dependent/components/vip.tsx

@@ -426,6 +426,7 @@ export default defineComponent({
                         <Stepper
                           v-model={this.courseNum}
                           theme="round"
+                          longPress={false}
                           max={12}
                           min={4}
                           buttonSize={22}

+ 1 - 1
src/student/teacher-dependent/model/teacher-header.module.less

@@ -163,7 +163,7 @@
 
     span {
       font-weight: 500;
-      font-family: DINAlternate, DINAlternate;
+      font-family: DIN;
       font-weight: bold;
       font-size: 15px;
       color: #fff;

+ 5 - 4
src/teacher/group-class/create-components/course-start.tsx

@@ -26,6 +26,7 @@ import { formatterDate } from '@/helpers/utils'
 import activeButtonIcon from '@common/images/icon_checkbox.png'
 import inactiveButtonIcon from '@common/images/icon_checkbox_default.png'
 import dayjs from 'dayjs'
+import TheSticky from '@/components/the-sticky'
 
 export default defineComponent({
   name: 'course-start',
@@ -162,14 +163,14 @@ export default defineComponent({
               maxlength={8}
               disabled={this.disabled}
               formatter={this.onFormatterInt}
-              rules={[{ required: true, message: '请输入最低开课人数' }]}
+              rules={[{ required: true, message: `1~${createState.live.maxStudentNum}` }]}
               v-slots={{
                 button: () => <span>人</span>
               }}
             />
           </ColField>
           <div class={styles.stepTips}>
-            课程停售时付费学员达到该人数可开课,若未达到该人数课程将会失效,已付费学员将自动退款
+            课程停售时付费学员达到该人数可开课,若未达到该人数,则成课失败,已付费学员将自动退款。
           </div>
         </ColFieldGroup>
 
@@ -290,7 +291,7 @@ export default defineComponent({
           </ColField>
         </ColFieldGroup>
 
-        <Sticky offsetBottom={0} position="bottom">
+        <TheSticky position="bottom">
           <div class={['btnGroup', 'btnMore']}>
             <Button
               block
@@ -314,7 +315,7 @@ export default defineComponent({
               下一步
             </Button>
           </div>
-        </Sticky>
+        </TheSticky>
 
         <Popup show={this.dateStatus} position="bottom" round>
           <DatetimePicker

+ 3 - 4
src/teacher/group-class/create-components/detail.tsx

@@ -31,12 +31,11 @@ export default defineComponent({
         username:
           state.user.data?.username || `游客${state.user.data?.userId || ''}`,
         startTime:
-          `${dayjs(startTime).format('YYYY-MM-DD')} ${dayjs(startTime).format(
-            'HH:mm'
-          )}` || '',
+          `${dayjs(startTime).format('YYYY-MM-DD HH:mm')}` || '',
+        courseStartTime: dayjs(startTime).format('YYYY-MM-DD HH:mm'),
         buyNum: 0,
         type: 'group',
-        mixStudentNum: createState.live.mixStudentNum,
+        mixStudentNum: createState.live.maxStudentNum,
         lessonPrice: createState.live.coursePrice,
         lessonNum: createState.live.courseNum,
         lessonDesc: createState.live.courseIntroduce,

+ 6 - 8
src/teacher/group-class/group-detail.tsx

@@ -45,17 +45,15 @@ export default defineComponent({
       const live = this.live as any
       const planList = live.planList || []
       const startTime = planList[0]?.startTime || new Date()
-      const endTime = planList[0]?.endTime || new Date()
-      const studentNum = live.maxStudentNum || 0 - live.studentCount || 0
+      // const endTime = planList[0]?.endTime || new Date()
+      const studentNum = (live.maxStudentNum || 0) - (live.studentCount || 0)
       return {
         headUrl: live.avatar,
         avatar: live.avatar,
         username: live.userName,
         id: live.teacherId,
         startTime:
-          `${dayjs(startTime).format('YYYY-MM-DD')} ${dayjs(startTime).format(
-            'HH:mm'
-          )}~${dayjs(endTime).format('HH:mm')}` || '',
+          `${dayjs(startTime).format('YYYY-MM-DD HH:mm')}` || '',
         lessonPrice: live.coursePrice,
         buyNum: live.studentCount || 0,
         type: 'group',
@@ -68,7 +66,7 @@ export default defineComponent({
         lessonCoverUrl: live.backgroundPic || live.backgroundPicTemplate,
         lessonName: live.courseGroupName,
         subjectName: live.subjectName,
-        courseStartTime: live.courseStartTime,
+        courseStartTime: dayjs(live.courseStartTime).format('YYYY-MM-DD HH:mm'),
         auditVersion: live.auditVersion || 0,
         isDegree: live.degreeFlag ? true : false,
         isTeacher: live.teacherFlag ? true : false
@@ -86,7 +84,7 @@ export default defineComponent({
             startTime
           ).format('HH:mm')}~${dayjs(endTime).format('HH:mm')}`,
           coursePlan: item.plan,
-          teacherName: live.teacherName,
+          teacherName: live.userName,
           subjectName: live.subjectName,
           roomUid: item.roomUid,
           liveState: item.liveState,
@@ -264,7 +262,7 @@ export default defineComponent({
           <>
             {this.courseOffStatus && (
               <ColSticky position="bottom" background="white">
-                <div class={['btnGroup']} style={{ paddingTop: '12px' }}>
+                <div class={['btnGroup']} >
                   <Button
                     block
                     round

+ 3 - 2
src/teacher/live-class/create-components/course-start.tsx

@@ -26,6 +26,7 @@ import { formatterDate } from '@/helpers/utils'
 import activeButtonIcon from '@common/images/icon_checkbox.png'
 import inactiveButtonIcon from '@common/images/icon_checkbox_default.png'
 import dayjs from 'dayjs'
+import TheSticky from '@/components/the-sticky'
 
 export default defineComponent({
   name: 'course-start',
@@ -284,7 +285,7 @@ export default defineComponent({
           </ColField>
         </ColFieldGroup>
 
-        <Sticky offsetBottom={0} position="bottom">
+        <TheSticky position="bottom">
           <div class={['btnGroup', 'btnMore']}>
             <Button
               block
@@ -308,7 +309,7 @@ export default defineComponent({
               下一步
             </Button>
           </div>
-        </Sticky>
+        </TheSticky>
 
         <Popup show={this.dateStatus} position="bottom" round>
           <DatetimePicker

+ 2 - 1
src/teacher/live-class/create-components/detail.tsx

@@ -23,6 +23,7 @@ export default defineComponent({
   computed: {
     userInfo() {
       const startTime = createState.live.coursePlanList[0].startTime
+      // const endTime = createState.live.coursePlanList[0].endTime
       return {
         headUrl: state.user.data?.heardUrl,
         username:
@@ -31,6 +32,7 @@ export default defineComponent({
           `${dayjs(startTime).format('YYYY-MM-DD')} ${dayjs(startTime).format(
             'HH:mm'
           )}` || '',
+        courseStartTime: dayjs(startTime).format('YYYY-MM-DD HH:mm'),
         buyNum: 0,
         lessonPrice: createState.live.coursePrice,
         lessonNum: createState.live.courseNum,
@@ -68,7 +70,6 @@ export default defineComponent({
     async onSubmit() {
       if(this.submitLoading) return
       this.submitLoading = true;
-      
       try {
         const params = {
           ...createState.live,

+ 1 - 2
src/teacher/live-class/live-detail.tsx

@@ -42,7 +42,6 @@ export default defineComponent({
       const live = this.live as any
       const planList = live.planList || []
       const startTime = planList[0]?.startTime || new Date()
-      // const endTime = planList[0]?.endTime || new Date()
       return {
         headUrl: live.avatar,
         avatar: live.avatar,
@@ -52,6 +51,7 @@ export default defineComponent({
           `${dayjs(startTime).format('YYYY-MM-DD')} ${dayjs(startTime).format(
             'HH:mm'
           )}` || '',
+        courseStartTime: dayjs(live.courseStartTime).format('YYYY-MM-DD HH:mm'),
         lessonPrice: live.coursePrice,
         buyNum: live.studentCount || 0,
         type: 'live',
@@ -63,7 +63,6 @@ export default defineComponent({
         lessonCoverUrl: live.backgroundPic || live.backgroundPicTemplate,
         lessonName: live.courseGroupName,
         subjectName: live.subjectName,
-        courseStartTime: live.courseStartTime,
         auditVersion: live.auditVersion || 0,
         isDegree: live.degreeFlag ? true : false,
         isTeacher: live.teacherFlag ? true : false

+ 1 - 1
src/teacher/piano-room/class-arrangement/class-info/index.tsx

@@ -207,7 +207,7 @@ export default defineComponent({
                 placeholder="请输入课时数"
                 v-slots={{
                   input: () => (
-                    <Stepper disable-input v-model={params.classNum}></Stepper>
+                    <Stepper disable-input longPress={false} v-model={params.classNum}></Stepper>
                   )
                 }}
               />

+ 7 - 9
src/teacher/share-page/share-group/index.tsx

@@ -12,6 +12,7 @@ import { defineComponent } from 'vue'
 import { shareCall } from '../share'
 import styles from './index.module.less'
 import qs from 'query-string'
+import GroupPlanStep from '@/business-components/group-plan-step'
 export const getAssetsHomeFile = (fileName: string) => {
   const path = `../images/${fileName}`
   const modules = import.meta.globEager('../images/*')
@@ -20,8 +21,9 @@ export const getAssetsHomeFile = (fileName: string) => {
 interface IProps {
   courseTime: string
   coursePlan: string
-  videoPosterUrl?: string
   roomUid?: string
+  teacherName: string
+  subjectName: string
   liveState?: number
   id?: number | string
 }
@@ -65,6 +67,7 @@ export default defineComponent({
     },
     courseInfo() {
       const tempArr = [] as IProps[]
+      const live = this.live
       const coursePlanList = this.live.planList || []
       coursePlanList.forEach((item: any) => {
         const startTime = item.startTime || new Date()
@@ -74,6 +77,8 @@ export default defineComponent({
             startTime
           ).format('HH:mm')}~${dayjs(endTime).format('HH:mm')}`,
           coursePlan: item.plan,
+          teacherName: live.userName,
+          subjectName: live.subjectName,
           roomUid: item.roomUid,
           liveState: item.liveState,
           id: item.courseId
@@ -171,14 +176,7 @@ export default defineComponent({
           <p class={styles.introduction}>{this.userInfo.lessonDesc}</p>
         </SectionDetail>
 
-        <SectionDetail
-          title="课程列表"
-          icon="courseList"
-          border
-          // contentStyle={{ paddingTop: '0' }}
-        >
-          <CoursePlanStep courseInfo={this.courseInfo} hideVideo={true} />
-        </SectionDetail>
+        <GroupPlanStep courseInfo={this.courseInfo as any}  />
 
         <ColSticky position="bottom">
           <div class={['btnGroup']} style={{ paddingTop: '12px' }}>

+ 1 - 1
src/tenant/member-center/index.module.less

@@ -354,7 +354,7 @@
       color: #EF2F56;
       font-size: 25px;
       line-height: 1.5;
-      font-family: DINAlternate-Bold, DINAlternate;
+      font-family: DIN;
       font-weight: bold;
 
       span {

+ 1 - 0
src/views/cart/index.tsx

@@ -216,6 +216,7 @@ export default defineComponent({
                           v-slots={{
                             num: () => (
                               <Stepper
+                                longPress={false}
                                 v-model={item.quantity}
                                 onClick={e => {
                                   e.stopPropagation()

+ 1 - 1
src/views/live-class/live-item.tsx

@@ -12,7 +12,7 @@ interface IProps {
   courseGroupId: number
   courseGroupName: string
   courseNum: string
-  courseStartTime?: number
+  courseStartTime?: string
   coursePrice: number
   payType?: string
   teacherName: string

+ 1 - 0
src/views/order-detail/order-discount/index.tsx

@@ -52,6 +52,7 @@ export default defineComponent({
                   <div class={styles.addNum}>
                     <Stepper
                       disableInput
+                      longPress={false}
                       disabled={item.period === 'PERPETUAL' || this.disabled}
                       v-model={item.num}
                       theme="round"

+ 1 - 0
src/views/order-detail/order-vip/index.tsx

@@ -162,6 +162,7 @@ export default defineComponent({
                   <div class={styles.addNum}>
                     <Stepper
                       disableInput
+                      longPress={false}
                       disabled={item.period === 'PERPETUAL' || this.disabled}
                       v-model={item.num}
                       theme="round"

+ 1 - 0
src/views/shop-mall/modal/add-goods-cart/index.tsx

@@ -264,6 +264,7 @@ export default defineComponent({
             inputWidth="50px"
             theme="round"
             buttonSize="24px"
+            longPress={false}
             max={this.selectItem.stock > 200 ? 200 : this.selectItem.stock}
             min={1}
             disabled={this.selectItem.stock <= 0}

+ 3 - 0
src/views/trade/trade-detail.module.less

@@ -91,6 +91,9 @@
       .van-cell__title {
         flex-basis: 40%;
       }
+      .van-cell__value {
+        flex-basis: 20%;
+      }
     }
   }