| 
					
				 | 
			
			
				@@ -1,356 +1,366 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import { Button, Cell, Icon, Image, Popup, showConfirmDialog, Toast } from 'vant'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import { defineComponent } from 'vue'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import styles from './index.module.less'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import request from '@/helpers/request'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import { setLogin, state } from '@/state'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import iconStudent from '@common/images/icon_student.png'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import iconTeacher from '@common/images/icon_teacher.png'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import iconDiscount from './images/icon_discount.png'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import iconMemberLogo from './images/member_logo.png'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// import { orderStatus } from '@/views/order-detail/orderStatus'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import dayjs from 'dayjs'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import { memberType } from '@/constant'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import { moneyFormat } from '@/helpers/utils'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import OHeader from '@/components/o-header'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import member1 from './images/member-1.png'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import member2 from './images/member-2.png'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import member3 from './images/member-3.png'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import iconQuestion from './images/icon-question.png'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import ODialog from '@/components/o-dialog'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-export const getAssetsHomeFile = (fileName: string) => {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  const path = `./images/${fileName}`
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  const modules = import.meta.globEager('./images/*')
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  return modules[path].default
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-export default defineComponent({
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  name: 'MemberCenter',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  data() {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const query = this.$route.query
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      functionList: [] as any,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      selectMember: {} as any,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      users: {} as any,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      memberStatus: false
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  },
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  computed: {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    userInfo() {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      const users: any = this.users
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      return {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        username: users?.nickname || '',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        phone: users?.phone || '',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        avatar: users?.avatar,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        id: users?.id,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        isVip: users?.vipMember,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        membershipDays: users?.membershipDays,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        membershipEndTime: users?.membershipEndTime
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  },
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  async mounted() {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    try {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      const userInfo = await request.get('/api-student/student/member')
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      this.users = userInfo.data || {}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      // this.functionList = [
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //   {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //     title: '五线谱<br />跟播',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //     icon: getAssetsHomeFile(`1.png`)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //   },
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //   {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //     title: '演奏指法<br />跟播',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //     icon: getAssetsHomeFile(`2.png`)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //   },
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //   {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //     title: '原声/伴奏<br />切换',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //     icon: getAssetsHomeFile(`3.png`)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //   },
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //   {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //     title: '播放速度<br />调整',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //     icon: getAssetsHomeFile(`4.png`)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //   },
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //   {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //     title: '五线谱选段<br />播放',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //     icon: getAssetsHomeFile(`5.png`)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //   },
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //   {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //     title: '智能评测',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //     icon: getAssetsHomeFile(`6.png`)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //   },
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //   {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //     title: '评测报告',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //     icon: getAssetsHomeFile(`7.png`)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //   },
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //   {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //     title: '评测音视频<br />云储存',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //     icon: getAssetsHomeFile(`8.png`)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //   }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      // ]
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      const { data } = await request.post(`/api-student/cityFeeSetting/member`)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      this.selectMember = data
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      this.paymentOrderUnpaid()
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } catch {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    //
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  },
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  methods: {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // 查询未支付订单
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    async paymentOrderUnpaid() {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      try {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        const { data } = await request.get('/api-student/userPaymentOrder/unpaid', {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          requestType: 'form',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          params: {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            paymentType: 'VIP'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        })
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 判断是否有待支付订单
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (data.id) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          showConfirmDialog({
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            message: '您有待支付的订单,是否继续支付',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            cancelButtonText: '取消订单',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            confirmButtonText: '继续支付'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          })
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            .then(() => {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              const paymentConfig = data.paymentConfig
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              this.$router.push({
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                path: '/orderDetail',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                query: {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  config: JSON.stringify(paymentConfig.paymentConfig),
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  orderNo: paymentConfig.orderNo
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              })
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            })
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            .catch(async () => {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              try {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                await request.post('/api-student/userPaymentOrder/cancelPayment/' + data.orderNo)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              } catch {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            })
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } catch {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    },
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    calcSalePrice(item: any) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      // discount
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      if (item.discount === 1) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        const tempPrice = Number((item.salePrice - item.discountPrice).toFixed(2))
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return tempPrice >= 0 ? tempPrice : 0
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      return item.salePrice
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    },
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // 购买
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    async onSubmit() {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      try {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        const selectMember = this.selectMember
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        const params: any = [
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            goodsId: selectMember.id,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            goodsNum: 1,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            goodsType: 'VIP',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            paymentCashAmount: selectMember.salePrice, // 现金支付金额
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            paymentCouponAmount: 0 // 优惠券金额
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        ] // 支付参数
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 创建订单
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        const { data } = await request.post('/api-student/userPaymentOrder/executeOrder', {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          data: {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            orderType: 'VIP',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            paymentCashAmount: this.selectMember.salePrice || 0,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            paymentCouponAmount: 0,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            goodsInfos: params,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            orderName: '团练宝购买',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            orderDesc: '团练宝购买'
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        })
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        console.log(data)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        this.$router.push({
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          path: '/orderDetail',
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          query: {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            config: JSON.stringify(data.paymentConfig),
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            orderNo: data.orderNo
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        })
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } catch (e: any) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        console.log(e)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  },
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  render() {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return (
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      <div class={styles['member-center']}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        <OHeader background="#ffe5cc" border={false} />
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        <div class={styles.member_container}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          <Cell
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            class={[
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              styles.userMember,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              this.users.purchaseMemberRecord ? styles.purchaseMember : ''
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            ]}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            labelClass={styles.timeRemaining}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            center
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            v-slots={{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              icon: () => (
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                <div class={styles.userImgSection}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  <Image
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    class={styles.userImg}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    src={this.userInfo.avatar || iconStudent}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    fit="cover"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  />
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                </div>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              ),
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              title: () => (
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                <div class={styles.userInfo}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  <span class={styles.name}>{this.userInfo.username}</span>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  {!!this.userInfo.isVip && (
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    <Image
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      class={styles.level}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      src="https://daya.ks3-cn-beijing.ksyun.com/202107/ScSTL1D.png"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    />
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  )}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  {this.userInfo.phone && (
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    <span class={styles.phone} v-html={`(${this.userInfo.phone})`}></span>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  )}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                </div>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              ),
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              label: () => (
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                <div class={styles.member_time}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  {!this.users.purchaseMemberRecord ? (
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    <>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      {this.userInfo.isVip ? (
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        <div>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                          会员权益有效期剩余
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                          <span class={styles.remaining}>{this.userInfo.membershipDays}</span>天
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        </div>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      ) : (
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        <div>亲,您还不是会员哟</div>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      )}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    </>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  ) : (
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    <div class={styles.beforeQuestion}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      <Icon
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        name={iconQuestion}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        class={styles.iconQeustion}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        onClick={() => (this.memberStatus = true)}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      />
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      您有<span>待激活</span>团练宝
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    </div>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  )}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                </div>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              )
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          ></Cell>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        </div>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        <div
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          class={[
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            styles.memberContainer,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            this.users.purchaseMemberRecord ? styles.beforMemberContainer : ''
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          ]}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        >
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          <div class={styles.memberItem}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            <div class={styles.title}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              会员<span>VIP</span>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            </div>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            {!this.users.purchaseMemberRecord ? (
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              <div class={styles['system-list']}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                <div class={[styles['system-item'], styles.active]}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  <p class={[styles.title, 'van-hairline--bottom']}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    半年会员
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    <span>(6个月)</span>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  </p>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  <div class={styles.priceGroup}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    <p class={styles.price}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      <span>¥</span>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      {moneyFormat(this.selectMember.salePrice)}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    </p>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    <del class={styles.originalPrice}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      ¥{moneyFormat(this.selectMember.originalPrice)}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    </del>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  </div>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                </div>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              </div>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            ) : (
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              ''
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            )}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          </div>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          <div class={styles.memberImgs}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            <img src={member1} />
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            <img src={member2} />
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            <img src={member3} />
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          </div>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          {/* <div class={[styles.intro]}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            <p>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              团练宝会员使用包括平台提供教材的所有训练乐谱,并专享“乐器练习云教练”八大核心功能,孩子在家就能轻松完成乐器自主规范练习。
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            </p>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          </div>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          <div class={styles.memberItem}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            <div class={styles.title}>会员功能</div>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            <div class={styles.member_function}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              {this.functionList.map((item: any) => (
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                <div class={styles.function_item}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  <Icon name={item.icon} size={34} />
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  <div class={styles.function_text} v-html={item.title}></div>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                </div>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              ))}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            </div>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          </div> */}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        </div>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        {!this.users.purchaseMemberRecord ? (
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          <div class={styles.btnGroup}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            <div class={styles.priceSection}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              支付金额:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              <div class={styles.price}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                <span class={styles.priceUnit}>¥</span>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                <span class={styles.priceNum}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  {moneyFormat(this.calcSalePrice(this.selectMember) || 0)}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                </span>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              </div>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              {this.selectMember?.discount == 1 && (
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                <div class={[styles.discountItem, styles.discountBuy]}>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  <img src={iconDiscount} />
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                </div>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              )}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            </div>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            {this.userInfo.id ? (
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              <Button
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                color="linear-gradient(220deg, #DFA164 0%, #FAC87E 100%)"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                round
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                class={styles.btn}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                onClick={this.onSubmit}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              >
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                {this.userInfo.isVip ? '立即续费' : '立即开通'}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              </Button>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            ) : (
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              ''
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            )}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          </div>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        ) : (
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          ''
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        )}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        {/*  */}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        <ODialog
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          v-model:show={this.memberStatus}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          title="待激活团练宝"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          message="为让团员有效使用乐团学习工具,首次加入乐团且购买团练宝的团员,团练宝的生效时间为乐团首次训练之日,具体训练时间可查看课表。"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          messageAlign="left"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          dialogMarginTop="env(safe-area-inset-top)"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          confirmButtonText="我知道了"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        />
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      </div>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    )
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-})
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { Button, Cell, Icon, Image, Popup, showConfirmDialog, Toast } from 'vant' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { defineComponent } from 'vue' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import styles from './index.module.less' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import request from '@/helpers/request' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { setLogin, state } from '@/state' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import iconStudent from '@common/images/icon_student.png' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import iconTeacher from '@common/images/icon_teacher.png' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import iconDiscount from './images/icon_discount.png' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import iconMemberLogo from './images/member_logo.png' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// import { orderStatus } from '@/views/order-detail/orderStatus' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import dayjs from 'dayjs' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { memberType } from '@/constant' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { moneyFormat } from '@/helpers/utils' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import OHeader from '@/components/o-header' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import member1 from './images/member-1.png' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import member2 from './images/member-2.png' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import member3 from './images/member-3.png' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import iconQuestion from './images/icon-question.png' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import ODialog from '@/components/o-dialog' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+export const getAssetsHomeFile = (fileName: string) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const path = `./images/${fileName}` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const modules = import.meta.globEager('./images/*') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  return modules[path].default 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+export default defineComponent({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  name: 'MemberCenter', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  data() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const query = this.$route.query 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      functionList: [] as any, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      selectMember: {} as any, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      users: {} as any, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      memberStatus: false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  computed: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    userInfo() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const users: any = this.users 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        username: users?.nickname || '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        phone: users?.phone || '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        avatar: users?.avatar, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        id: users?.id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        isVip: users?.vipMember, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        membershipDays: users?.membershipDays, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        membershipEndTime: users?.membershipEndTime 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  async mounted() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const userInfo = await request.get('/api-student/student/member') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.users = userInfo.data || {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // this.functionList = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //   { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //     title: '五线谱<br />跟播', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //     icon: getAssetsHomeFile(`1.png`) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //   }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //   { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //     title: '演奏指法<br />跟播', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //     icon: getAssetsHomeFile(`2.png`) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //   }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //   { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //     title: '原声/伴奏<br />切换', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //     icon: getAssetsHomeFile(`3.png`) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //   }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //   { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //     title: '播放速度<br />调整', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //     icon: getAssetsHomeFile(`4.png`) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //   }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //   { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //     title: '五线谱选段<br />播放', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //     icon: getAssetsHomeFile(`5.png`) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //   }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //   { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //     title: '智能评测', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //     icon: getAssetsHomeFile(`6.png`) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //   }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //   { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //     title: '评测报告', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //     icon: getAssetsHomeFile(`7.png`) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //   }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //   { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //     title: '评测音视频<br />云储存', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //     icon: getAssetsHomeFile(`8.png`) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const { data } = await request.post(`/api-student/cityFeeSetting/member`) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.selectMember = data 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.paymentOrderUnpaid() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } catch { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  methods: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 查询未支付订单 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    async paymentOrderUnpaid() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const { data } = await request.get('/api-student/userPaymentOrder/unpaid', { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          requestType: 'form', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          params: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            paymentType: 'VIP' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 判断是否有待支付订单 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (data.id) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          showConfirmDialog({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            message: '您有待支付的订单,是否继续支付', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cancelButtonText: '取消订单', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            confirmButtonText: '继续支付' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            .then(() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              const paymentConfig = data.paymentConfig 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              this.$router.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                path: '/orderDetail', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                query: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  config: JSON.stringify(paymentConfig.paymentConfig), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  orderNo: paymentConfig.orderNo 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            .catch(async () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                await request.post('/api-student/userPaymentOrder/cancelPayment/' + data.orderNo) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              } catch { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } catch { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    calcSalePrice(item: any) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // discount 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (item.discount === 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const tempPrice = Number((item.salePrice - item.discountPrice).toFixed(2)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return tempPrice >= 0 ? tempPrice : 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return item.salePrice 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 购买 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    async onSubmit() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const selectMember = this.selectMember 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const params: any = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            goodsId: selectMember.id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            goodsNum: 1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            goodsType: 'VIP', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            paymentCashAmount: selectMember.salePrice, // 现金支付金额 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            paymentCouponAmount: 0 // 优惠券金额 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ] // 支付参数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 创建订单 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const { data } = await request.post('/api-student/userPaymentOrder/executeOrder', { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          data: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            orderType: 'VIP', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            paymentCashAmount: this.selectMember.salePrice || 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            paymentCouponAmount: 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            goodsInfos: params, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            orderName: '团练宝购买', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            orderDesc: '团练宝购买' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        console.log(data) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const res = await request.get('/api-student/userPaymentOrder/detail/' + data.orderNo) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (res.data.status !== 'WAIT_PAY' && res.data.status !== 'PAYING') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          this.$router.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            path: '/payment-result', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            query: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              orderNo: data.orderNo 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          this.$router.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            path: '/orderDetail', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            query: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              config: JSON.stringify(data.paymentConfig), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              orderNo: data.orderNo 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } catch (e: any) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        console.log(e) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  render() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      <div class={styles['member-center']}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <OHeader background="#ffe5cc" border={false} /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <div class={styles.member_container}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <Cell 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            class={[ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              styles.userMember, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              this.users.purchaseMemberRecord ? styles.purchaseMember : '' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ]} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            labelClass={styles.timeRemaining} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            center 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            v-slots={{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              icon: () => ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                <div class={styles.userImgSection}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  <Image 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    class={styles.userImg} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    src={this.userInfo.avatar || iconStudent} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    fit="cover" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              ), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              title: () => ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                <div class={styles.userInfo}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  <span class={styles.name}>{this.userInfo.username}</span> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  {!!this.userInfo.isVip && ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    <Image 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      class={styles.level} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      src="https://daya.ks3-cn-beijing.ksyun.com/202107/ScSTL1D.png" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  )} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  {this.userInfo.phone && ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    <span class={styles.phone} v-html={`(${this.userInfo.phone})`}></span> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  )} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              ), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              label: () => ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                <div class={styles.member_time}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  {!this.users.purchaseMemberRecord ? ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    <> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      {this.userInfo.isVip ? ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        <div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                          会员权益有效期剩余 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                          <span class={styles.remaining}>{this.userInfo.membershipDays}</span>天 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      ) : ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        <div>亲,您还不是会员哟</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      )} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    </> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  ) : ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    <div class={styles.beforeQuestion}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      <Icon 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        name={iconQuestion} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        class={styles.iconQeustion} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        onClick={() => (this.memberStatus = true)} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      您有<span>待激活</span>团练宝 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  )} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          ></Cell> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <div 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          class={[ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            styles.memberContainer, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.users.purchaseMemberRecord ? styles.beforMemberContainer : '' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          ]} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        > 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <div class={styles.memberItem}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <div class={styles.title}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              会员<span>VIP</span> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            {!this.users.purchaseMemberRecord ? ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              <div class={styles['system-list']}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                <div class={[styles['system-item'], styles.active]}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  <p class={[styles.title, 'van-hairline--bottom']}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    半年会员 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    <span>(6个月)</span> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  </p> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  <div class={styles.priceGroup}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    <p class={styles.price}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      <span>¥</span> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      {moneyFormat(this.selectMember.salePrice)} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    </p> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    <del class={styles.originalPrice}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      ¥{moneyFormat(this.selectMember.originalPrice)} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    </del> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ) : ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              '' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            )} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <div class={styles.memberImgs}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <img src={member1} /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <img src={member2} /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <img src={member3} /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          {/* <div class={[styles.intro]}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <p> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              团练宝会员使用包括平台提供教材的所有训练乐谱,并专享“乐器练习云教练”八大核心功能,孩子在家就能轻松完成乐器自主规范练习。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            </p> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <div class={styles.memberItem}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <div class={styles.title}>会员功能</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <div class={styles.member_function}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              {this.functionList.map((item: any) => ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                <div class={styles.function_item}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  <Icon name={item.icon} size={34} /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  <div class={styles.function_text} v-html={item.title}></div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              ))} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          </div> */} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        {!this.users.purchaseMemberRecord ? ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <div class={styles.btnGroup}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <div class={styles.priceSection}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              支付金额: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              <div class={styles.price}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                <span class={styles.priceUnit}>¥</span> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                <span class={styles.priceNum}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  {moneyFormat(this.calcSalePrice(this.selectMember) || 0)} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                </span> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              {this.selectMember?.discount == 1 && ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                <div class={[styles.discountItem, styles.discountBuy]}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  <img src={iconDiscount} /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              )} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            {this.userInfo.id ? ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              <Button 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                color="linear-gradient(220deg, #DFA164 0%, #FAC87E 100%)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                round 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                class={styles.btn} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                onClick={this.onSubmit} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              > 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                {this.userInfo.isVip ? '立即续费' : '立即开通'} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              </Button> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ) : ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              '' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            )} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ) : ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          '' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        )} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        {/*  */} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <ODialog 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          v-model:show={this.memberStatus} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          title="待激活团练宝" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          message="为让团员有效使用乐团学习工具,首次加入乐团且购买团练宝的团员,团练宝的生效时间为乐团首次训练之日,具体训练时间可查看课表。" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          messageAlign="left" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          dialogMarginTop="env(safe-area-inset-top)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          confirmButtonText="我知道了" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}) 
			 |