Browse Source

添加学生注册

lex 1 year ago
parent
commit
8f543570d6

BIN
src/common/images/message-bg.png


BIN
src/common/images/message-top.png


+ 58 - 0
src/components/m-message-tip/index.module.less

@@ -0,0 +1,58 @@
+.wxPopupDialog {
+  // position: relative;
+  overflow: initial;
+
+  // margin-top: -160px;
+  &::before {
+    position: absolute;
+    content: ' ';
+    top: -22px;
+    left: 50%;
+    margin-left: -45px;
+    display: inline-block;
+    background: url('../../common/images/message-top.png') no-repeat top center;
+    background-size: contain;
+    width: 89px;
+    height: 56px;
+  }
+}
+
+.popupContainer {
+  background: url('../../common/images/message-bg.png') no-repeat top center;
+  background-size: cover;
+  border-radius: 20px;
+  overflow: hidden;
+  padding-bottom: 20px;
+  text-align: center;
+
+  .title1 {
+    padding-top: 53px;
+    text-align: center;
+    font-size: 18px;
+    font-weight: 500;
+    color: #000000;
+  }
+
+  .popupTips {
+    font-size: 15px;
+    color: #666666;
+    line-height: 21px;
+    padding: 16px 20px 20px;
+    word-break: break-all;
+  }
+
+  .button {
+    padding: 0 44px;
+    height: 40px;
+    font-size: 16px;
+    color: #333333;
+    border-color: #AAAAAA;
+    margin: 0 7px;
+  }
+
+  .confirmBtn {
+    background: linear-gradient(305deg, #40C8FF 0%, #3192FF 100%);
+    color: #FFFFFF;
+    border: none;
+  }
+}

+ 106 - 0
src/components/m-message-tip/index.tsx

@@ -0,0 +1,106 @@
+import { Button, Popup } from 'vant';
+import { PropType, defineComponent, onMounted, ref, watch } from 'vue';
+import styles from './index.module.less';
+import { browser } from '@/helpers/utils';
+
+export default defineComponent({
+  name: 'm-wx-tip',
+  props: {
+    // 是否显示微信弹窗
+    show: {
+      type: Boolean,
+      default: true
+    },
+    title: {
+      type: String,
+      default: '温馨提示'
+    },
+    message: {
+      type: String,
+      default: '请使用微信打开'
+    },
+    messageAlign: {
+      type: String as PropType<'center' | 'left' | 'right'>,
+      default: 'center'
+    },
+    /** 是否展示取消按钮 */
+    showCancelButton: {
+      type: Boolean,
+      default: false
+    },
+    /** 取消按钮文案 */
+    showCancelButtonText: {
+      type: String,
+      default: '取消'
+    },
+    /** 是否展示确认按钮 */
+    showConfirmButton: {
+      type: Boolean,
+      default: true
+    },
+    /** 确认按钮文案 */
+    showConfirmButtonText: {
+      type: String,
+      default: '确认'
+    }
+  },
+  emits: ['confirm', 'cancel'],
+  setup(props, { emit }) {
+    const showPopup = ref(false);
+    onMounted(() => {
+      if (props.show) {
+        showPopup.value = true;
+      }
+    });
+
+    watch(
+      () => [props.show, props.message],
+      () => {
+        if (props.show) {
+          showPopup.value = true;
+        } else {
+          showPopup.value = false;
+        }
+      }
+    );
+    return () => (
+      <>
+        <Popup
+          v-model:show={showPopup.value}
+          round
+          style={{ width: '88%', maxWidth: '520px' }}
+          closeOnClickOverlay={false}
+          class={styles.wxPopupDialog}>
+          <div class={styles.popupContainer}>
+            <p class={styles.title1} v-html={props.title}></p>
+            <p
+              class={styles.popupTips}
+              style={{ 'text-align': props.messageAlign }}
+              v-html={props.message}></p>
+
+            {(props.showConfirmButton || props.showConfirmButton) && (
+              <div class={styles.btnGroup}>
+                {props.showCancelButton && (
+                  <Button
+                    round
+                    class={[styles.button, styles.cancelBtn]}
+                    onClick={() => emit('cancel')}>
+                    {props.showCancelButtonText}
+                  </Button>
+                )}
+                {props.showConfirmButton && (
+                  <Button
+                    round
+                    class={[styles.button, styles.confirmBtn]}
+                    onClick={() => emit('confirm')}>
+                    {props.showConfirmButtonText}
+                  </Button>
+                )}
+              </div>
+            )}
+          </div>
+        </Popup>
+      </>
+    );
+  }
+});

+ 7 - 7
src/components/m-wx-tip/index.module.less

@@ -6,19 +6,19 @@
   &::before {
     position: absolute;
     content: ' ';
-    top: -73px;
+    top: -22px;
     left: 50%;
-    margin-left: -86px;
+    margin-left: -45px;
     display: inline-block;
-    background: url('../../common/images/wx-no-top.png') no-repeat top center;
+    background: url('../../common/images/message-top.png') no-repeat top center;
     background-size: contain;
-    width: 172px;
-    height: 154px;
+    width: 89px;
+    height: 56px;
   }
 }
 
 .popupContainer {
-  background: url('../../common/images/wx-no-bg.png') no-repeat top center;
+  background: url('../../common/images/message-bg.png') no-repeat top center;
   background-size: cover;
   border-radius: 20px;
   overflow: hidden;
@@ -50,4 +50,4 @@
     color: #777;
     border-color: #E7E7E7;
   }
-}
+}

+ 1 - 0
src/views/student-register/index.tsx

@@ -28,6 +28,7 @@ import iconTip2 from './images/new/icon-tip2.png';
 import functionBg from './images/new/function-bg.png';
 import giftTip from './images/new/gift-tip.png';
 import dayjs from 'dayjs';
+import MMessageTip from '@/components/m-message-tip';
 
 export default defineComponent({
   name: 'student-register',

+ 36 - 4
src/views/student-register/register-member/index.tsx

@@ -30,6 +30,7 @@ import { setLoginInit, state } from '@/state';
 import iconGift from '../images/icon-gift.png';
 import { useRoute, useRouter } from 'vue-router';
 import MSticky from '@/components/m-sticky';
+import MMessageTip from '@/components/m-message-tip';
 const classList: any = [];
 for (let i = 1; i <= 40; i++) {
   classList.push({ text: i + '班', value: i });
@@ -84,12 +85,15 @@ export default defineComponent({
       classStatus: false,
       loading: false,
       schoolId: route.query.sId as any,
+      details: {} as any,
       gradeYear: null,
       schoolType: null,
       giftVipDay: null,
       showTips: false,
       showButton: false,
-      showMessage: '请使用微信打开'
+      showMessage: '请使用微信打开',
+      showOtherSchool: false,
+      showOtherMessage: ''
     });
     const studentInfo = reactive({
       autoRegister: true,
@@ -133,10 +137,25 @@ export default defineComponent({
       countDownRef.value.reset();
     };
 
-    const onSubmit = async () => {
+    const onSubmit = async (isRegister = false) => {
       try {
         if (checkForm()) return;
         forms.loading = true;
+        if (!isRegister) {
+          const checkSchool = await request.get(
+            `/edu-app/open/student/studentSchool?mobile=${studentInfo.username}&code=${studentInfo.password}&type=REGISTER`
+          );
+          if (checkSchool && checkSchool.schoolId !== forms.schoolId) {
+            forms.showOtherSchool = true;
+            forms.showOtherMessage = `您已绑定【${
+              forms.details.name || ''
+            }】,提交后将更换到【${
+              checkSchool.data?.schoolName
+            }】,是否确认提交?`;
+            return;
+          }
+        }
+
         await request.get('/edu-app/open/student/schoolQuery', {
           params: {
             schoolId: forms.schoolId,
@@ -209,7 +228,7 @@ export default defineComponent({
         forms.gradeYear = data.gradeYear;
         studentInfo.extra.giftVipDay = data.giftVipDay;
         studentInfo.extra.registerType = data.registerType;
-
+        forms.details = data;
         if (browser().weixin) {
           if (data.registerType !== 'GIFT_VIP_DAY' || data.status === 0) {
             forms.showTips = true;
@@ -374,7 +393,7 @@ export default defineComponent({
             class={styles.submitBtn}
             color="linear-gradient(121deg, #FFD892 0%, #FFCB75 100%)"
             block
-            onClick={onSubmit}
+            onClick={() => onSubmit()}
             disabled={forms.loading}
             loading={forms.loading}>
             确认
@@ -449,6 +468,19 @@ export default defineComponent({
             });
           }}
         />
+
+        <MMessageTip
+          show={forms.showOtherSchool}
+          messageAlign="left"
+          message={forms.showOtherMessage}
+          showCancelButton
+          onCancel={() => (forms.showOtherSchool = false)}
+          onConfirm={() => {
+            forms.showOtherSchool = false;
+            // 直接注册
+            onSubmit(true);
+          }}
+        />
       </div>
     );
   }

+ 36 - 5
src/views/student-register/register-modal/index.tsx

@@ -44,6 +44,7 @@ import Payment from '@/views/adapay/payment';
 import { beforeSubmit } from '../order-state';
 import OPopup from '@/components/m-popup';
 import MSticky from '@/components/m-sticky';
+import MMessageTip from '@/components/m-message-tip';
 const studentRegisterStore = useStudentRegisterStore();
 const classList: any = [];
 for (let i = 1; i <= 40; i++) {
@@ -69,6 +70,7 @@ export default defineComponent({
       gradeStatus: false,
       classStatus: false,
       loading: false,
+      details: {} as any,
       schoolType: '', // 学校类型
       gradeYear: '', // 学制
       bugGoods: false, // 是否购买AI
@@ -82,6 +84,8 @@ export default defineComponent({
       countDownTimePay: 60 * 1000,
       dialogConfig: {} as any,
       showMore: true,
+      showOtherSchool: false,
+      showOtherMessage: '',
       showTips: false,
       showButton: false,
       showMessage: '请使用微信打开'
@@ -156,11 +160,26 @@ export default defineComponent({
       countDownRef.value.reset();
     };
 
-    const onSubmit = async () => {
+    const onSubmit = async (isRegister = false) => {
       try {
         if (checkForm()) return;
         forms.loading = true;
         const { extra, ...res } = studentInfo;
+        if (!isRegister) {
+          const checkSchool = await request.get(
+            `/edu-app/open/student/studentSchool?mobile=${studentInfo.username}&code=${studentInfo.password}&type=REGISTER`
+          );
+          if (checkSchool && checkSchool.schoolId !== forms.schoolId) {
+            forms.showOtherSchool = true;
+            forms.showOtherMessage = `您已绑定【${
+              forms.details.schoolName || ''
+            }】,提交后将更换到【${
+              checkSchool.data?.schoolName
+            }】,是否确认提交?`;
+            return;
+          }
+        }
+
         const result = await request.post('/edu-app/userlogin', {
           // hideLoading: false,
           requestType: 'form',
@@ -320,7 +339,7 @@ export default defineComponent({
       //   amount += Number(good.price) * good.quantity;
       //   originAmount += Number(good.originalPrice) * good.quantity;
       // });
-      console.log(studentRegisterStore.getVip);
+      // console.log(studentRegisterStore.getVip);
       return {
         amount,
         originAmount
@@ -749,7 +768,6 @@ export default defineComponent({
               v-model={studentInfo.password}
               maxlength={6}
               onUpdate:modelValue={(val: any) => {
-                console.log(val, 'val');
                 getUserInfos();
               }}>
               {{
@@ -892,7 +910,7 @@ export default defineComponent({
                   )}
                 </div>
               </div>
-              <div class={styles.paymentBtn} onClick={onSubmit}>
+              <div class={styles.paymentBtn} onClick={() => onSubmit()}>
                 <Button round disabled={forms.loading} loading={forms.loading}>
                   立即支付
                 </Button>
@@ -983,7 +1001,7 @@ export default defineComponent({
             //     orderNo: paymentConfig.orderNo
             //   }
             // });
-            console.log(forms.dialogConfig, 'dialogConfig');
+            // console.log(forms.dialogConfig, 'dialogConfig');
 
             countDown.pause();
             const paymentConfig = forms.dialogConfig.paymentConfig;
@@ -1039,6 +1057,19 @@ export default defineComponent({
           buttonText="刷新"
           onConfirm={() => window.location.reload()}
         />
+
+        <MMessageTip
+          show={forms.showOtherSchool}
+          messageAlign="left"
+          message={forms.showOtherMessage}
+          showCancelButton
+          onCancel={() => (forms.showOtherSchool = false)}
+          onConfirm={() => {
+            forms.showOtherSchool = false;
+            // 直接注册
+            onSubmit(true);
+          }}
+        />
       </div>
     );
   }

+ 59 - 21
src/views/student-register/register-new/index.tsx

@@ -30,10 +30,11 @@ import { setLoginInit, state } from '@/state';
 import iconGift from '../images/icon-gift.png';
 import { useRoute, useRouter } from 'vue-router';
 import MSticky from '@/components/m-sticky';
-import registerBgIcon from "../images/register-bg.png";
-import vipGiftIcon from "../images/vip-gift-icon.png";
+import registerBgIcon from '../images/register-bg.png';
+import vipGiftIcon from '../images/vip-gift-icon.png';
 import agreeYes from '../images/agree-yes.png';
 import agreeNo from '../images/agree-no.png';
+import MMessageTip from '@/components/m-message-tip';
 
 const classList: any = [];
 for (let i = 1; i <= 40; i++) {
@@ -89,12 +90,15 @@ export default defineComponent({
       classStatus: false,
       loading: false,
       schoolId: route.query.sId as any,
+      details: {} as any,
       gradeYear: null,
       schoolType: null,
       giftVipDay: null,
       showTips: false,
       showButton: false,
-      showMessage: '请使用微信打开'
+      showMessage: '请使用微信打开',
+      showOtherSchool: false,
+      showOtherMessage: ''
     });
     const isAgree = ref(false);
     const studentInfo = reactive({
@@ -189,10 +193,25 @@ export default defineComponent({
       countDownRef.value.reset();
     };
 
-    const onSubmit = async () => {
+    const onSubmit = async (isRegister = false) => {
       try {
         if (checkForm()) return;
         forms.loading = true;
+        if (!isRegister) {
+          const checkSchool = await request.get(
+            `/edu-app/open/student/studentSchool?mobile=${studentInfo.username}&code=${studentInfo.password}&type=REGISTER`
+          );
+          if (checkSchool && checkSchool.schoolId !== forms.schoolId) {
+            forms.showOtherSchool = true;
+            forms.showOtherMessage = `您已绑定【${
+              forms.details.name || ''
+            }】,提交后将更换到【${
+              checkSchool.data?.schoolName
+            }】,是否确认提交?`;
+            return;
+          }
+        }
+
         await request.get('/edu-app/open/student/schoolQuery', {
           params: {
             schoolId: forms.schoolId,
@@ -259,6 +278,7 @@ export default defineComponent({
         forms.giftVipDay = data.giftVipDay;
         forms.schoolType = data.schoolType;
         forms.gradeYear = data.gradeYear;
+        forms.details = data;
         studentInfo.extra.giftVipDay = data.giftVipDay;
         studentInfo.extra.registerType = data.registerType;
 
@@ -291,10 +311,10 @@ export default defineComponent({
         ) : (
           ''
         )}
-        
+
         <img class={styles.headBg} src={registerBgIcon} />
         <Form labelAlign="top" class={styles.registerForm}>
-        <Field
+          <Field
             clearable={false}
             label="联系方式"
             placeholder="请输入手机号码"
@@ -314,12 +334,12 @@ export default defineComponent({
                 </div>
               )
             }}
-          </Field> 
+          </Field>
           <div class={[styles.fieldTipsGroup]}>
-              <div class={[styles.fieldTips]}>
-                手机号是音乐数字课堂的唯一登录账户
-              </div>
-          </div>            
+            <div class={[styles.fieldTips]}>
+              手机号是音乐数字课堂的唯一登录账户
+            </div>
+          </div>
           <Field
             center
             clearable={false}
@@ -356,7 +376,7 @@ export default defineComponent({
                   />
                 )
             }}
-          </Field>                 
+          </Field>
           <Field
             clearable={false}
             label="学生姓名"
@@ -386,7 +406,9 @@ export default defineComponent({
                     size="large"
                     type="primary"
                     color={
-                      !(studentInfo.extra.gender === 1) ? '#F5F6FA' : 'linear-gradient( 135deg, #31C7FF 0%, #007AFE 100%)'
+                      !(studentInfo.extra.gender === 1)
+                        ? '#F5F6FA'
+                        : 'linear-gradient( 135deg, #31C7FF 0%, #007AFE 100%)'
                     }
                     textColor={
                       !(studentInfo.extra.gender === 1) ? '#626264' : '#fff'
@@ -399,7 +421,9 @@ export default defineComponent({
                     size="large"
                     type="primary"
                     color={
-                      !(studentInfo.extra.gender === 0) ? '#F5F6FA' : 'linear-gradient( 135deg, #31C7FF 0%, #007AFE 100%)'
+                      !(studentInfo.extra.gender === 0)
+                        ? '#F5F6FA'
+                        : 'linear-gradient( 135deg, #31C7FF 0%, #007AFE 100%)'
                     }
                     textColor={
                       !(studentInfo.extra.gender === 0) ? '#626264' : '#fff'
@@ -436,15 +460,16 @@ export default defineComponent({
             required
             input-align="right"
           />
-          {
-            (studentInfo.extra.registerType === 'GIFT_VIP_DAY' && forms.giftVipDay && Number(forms.giftVipDay) > 0) ?
+          {studentInfo.extra.registerType === 'GIFT_VIP_DAY' &&
+          forms.giftVipDay &&
+          Number(forms.giftVipDay) > 0 ? (
             <div class={styles.giftTips}>
               <img src={vipGiftIcon} />
-              <span>注册成功即可获得乐器AI学练工具<i>{forms.giftVipDay}</i>天有效期</span>
+              <span>
+                注册成功即可获得乐器AI学练工具<i>{forms.giftVipDay}</i>天有效期
+              </span>
             </div>
-            : null
-          }
-
+          ) : null}
         </Form>
         {/* <div class={styles.agreeColumn}>
           <img src={isAgree.value ? agreeYes : agreeNo} onClick={() => (isAgree.value = !isAgree.value)} />
@@ -465,7 +490,7 @@ export default defineComponent({
             class={styles.submitBtn}
             color="linear-gradient( 135deg, #31C7FF 0%, #007AFE 100%)"
             block
-            onClick={onSubmit}
+            onClick={() => onSubmit()}
             disabled={forms.loading}
             loading={forms.loading}>
             确认
@@ -540,6 +565,19 @@ export default defineComponent({
             });
           }}
         />
+
+        <MMessageTip
+          show={forms.showOtherSchool}
+          messageAlign="left"
+          message={forms.showOtherMessage}
+          showCancelButton
+          onCancel={() => (forms.showOtherSchool = false)}
+          onConfirm={() => {
+            forms.showOtherSchool = false;
+            // 直接注册
+            onSubmit(true);
+          }}
+        />
       </div>
     );
   }