lex 1 gadu atpakaļ
vecāks
revīzija
0cce8c66ea

+ 1 - 1
src/helpers/request.ts

@@ -83,7 +83,7 @@ request.interceptors.response.use(
     }
     const data = await res.clone().json();
     // 999 为特殊code码
-    const otherCode = [999, 5435, 5436, 5437];
+    const otherCode = [999, 5435, 5436, 5437, 5439];
     if (
       data.code !== 200 &&
       data.errCode !== 0 &&

+ 22 - 12
src/views/creation/index-share.tsx

@@ -49,6 +49,7 @@ export default defineComponent({
       loginTag: false, // 是否登录标识
       loginStatus: false,
       loginChangeState: false, // 切换账号
+      credential: {} as any,
       playType: '' as 'Audio' | 'Video' | '', // 播放类型
       musicDetail: {} as any,
       timer: null as any,
@@ -472,11 +473,18 @@ export default defineComponent({
           <LoginModel
             isRegister
             onClose={() => (state.loginStatus = false)}
-            onConfirm={async (val: boolean) => {
-              state.loginTag = val;
-              state.loginStatus = false;
-              const { data } = await api_openUserMusicDetail(state.id);
-              state.musicDetail = data;
+            onConfirm={async (val: any) => {
+              console.log(val, 'val');
+              if (val.loginTag) {
+                state.loginTag = val.loginTag;
+                state.loginStatus = false;
+                const { data } = await api_openUserMusicDetail(state.id);
+                state.musicDetail = data;
+              } else {
+                state.credential = val.data;
+                state.loginChangeState = true;
+                state.loginStatus = false;
+              }
             }}
           />
         </Popup>
@@ -484,17 +492,19 @@ export default defineComponent({
         <Popup
           v-model:show={state.loginChangeState}
           style={{ background: 'transparent', overflow: 'inherit' }}>
-          {/* <LoginModel
-            isRegister
-            onClose={() => (state.loginChangeState = false)}
-            onConfirm={async (val: boolean) => {
-              state.loginTag = val;
+          <LoginChangeModel
+            credential={state.credential}
+            onClose={() => {
+              state.credential = {};
+              state.loginChangeState = false;
+            }}
+            onConfirm={async (val: any) => {
+              state.loginTag = val.loginTag;
               state.loginChangeState = false;
               const { data } = await api_openUserMusicDetail(state.id);
               state.musicDetail = data;
             }}
-          /> */}
-          <LoginChangeModel onClose={() => (state.loginChangeState = false)} />
+          />
         </Popup>
 
         <MWxTip

+ 56 - 4
src/views/creation/login-change-model/index.module.less

@@ -15,12 +15,14 @@
     background-size: cover;
     width: 18px;
     height: 18px;
+    z-index: 99;
   }
 
   .popupTitle {
     position: relative;
     padding-top: 20px;
     padding-left: 22px;
+    margin-bottom: 16px;
     font-weight: 500;
     font-size: 20px;
     color: #000000;
@@ -46,8 +48,9 @@
 }
 
 .selectStudent {
-  padding: 16px 20px 0;
+  padding: 0 20px 0;
   max-height: 400px;
+  min-height: 200px;
   overflow-x: hidden;
   overflow-y: auto;
 
@@ -57,6 +60,16 @@
     padding: 12px 10px;
     border-radius: 10px;
     margin-bottom: 16px;
+
+    &:last-child {
+      margin-bottom: 0;
+    }
+
+    :global {
+      .van-radio {
+        flex-shrink: 0;
+      }
+    }
   }
 
   .cellSelected {
@@ -75,8 +88,8 @@
     flex: 1;
 
     .userImg {
-      width: 48px;
-      height: 48px;
+      width: 42px;
+      height: 42px;
       border-radius: 50%;
       overflow: hidden;
       margin: 0 10px;
@@ -87,11 +100,32 @@
   .usernames {
     .name {
       font-weight: 600;
-      font-size: 16px;
+      font-size: 14px;
       color: #131415;
       line-height: 22px;
+
+      display: flex;
+      align-items: center;
+    }
+
+    .names {
+      max-width: 160px;
+      overflow: hidden;
+      white-space: nowrap;
+      text-overflow: ellipsis;
     }
 
+    // .info {
+    //   padding: 2px 6px;
+    //   background: #E9ECEF;
+    //   border-radius: 11px;
+    //   margin-left: 4px;
+    //   font-weight: 500;
+    //   font-size: 11px;
+    //   color: #1D9FFF;
+    //   line-height: 16px;
+    // }
+
     .schoolname {
       padding-top: 4px;
       font-weight: 400;
@@ -104,4 +138,22 @@
       text-overflow: ellipsis;
     }
   }
+}
+
+.addStudentBtn {
+  margin: 16px 20px 22px;
+
+  :global {
+    .van-button {
+      font-weight: 600;
+      font-size: 16px;
+      color: #1189FF;
+    }
+
+    .van-button__text {
+      display: flex;
+      align-items: center;
+      justify-content: center;
+    }
+  }
 }

+ 100 - 30
src/views/creation/login-change-model/index.tsx

@@ -1,43 +1,56 @@
-import { defineComponent, ref } from 'vue';
+import { defineComponent, onMounted, ref } from 'vue';
 import styles from './index.module.less';
-import { Radio, RadioGroup, Image } from 'vant';
+import { Radio, RadioGroup, Image, Button } from 'vant';
 import checkBoxActive from './images/icon-n-1.png';
 import checkBoxDefault from './images/icon-n-2.png';
+import request from '@/helpers/request';
+import { storage } from '@/helpers/storage';
+import { ACCESS_TOKEN } from '@/store/mutation-types';
+import { setLogin } from '@/state';
 
 export default defineComponent({
   name: 'login-change-model',
-  emits: ['close'],
-  setup() {
+  props: {
+    credential: {
+      type: Object,
+      default: () => ({})
+    }
+  },
+  emits: ['close', 'confirm'],
+  setup(props, { emit }) {
     const radioChecked = ref();
-    const list = ref([
-      {
-        avatar: 'https://oss.dayaedu.com/gyt/ktyq/student_default_avatar.png',
-        nickname: '小王',
-        subjectName: '陶笛',
-        grade: '五年4班',
+    const btnLoading = ref(false);
+    const list = ref([] as any);
 
-        schoolName: '学校名称'
-      },
-      {
-        avatar: 'https://oss.dayaedu.com/gyt/ktyq/student_default_avatar.png',
-        nickname: '小王',
-        subjectName: '陶笛',
-        grade: '五年4班',
-
-        schoolName: '学校名称'
-      },
-      {
-        avatar: 'https://oss.dayaedu.com/gyt/ktyq/student_default_avatar.png',
-        nickname: '小王',
-        subjectName: '陶笛',
-        grade: '五年4班',
-
-        schoolName: '学校名称'
+    onMounted(async () => {
+      try {
+        const { data } = await request.post('/edu-app/open/user/getMultiUser', {
+          data: {
+            ...props.credential
+          }
+        });
+        const result = data || [];
+        result.forEach((item: any) => {
+          list.value.push({
+            userId: item.studentId,
+            avatar: item.avatar,
+            nickname: item.nickname,
+            schoolName: item.schoolName,
+            token: item.token,
+            tokenExpireTime: item.tokenExpireTime
+          });
+        });
+      } catch {
+        //
       }
-    ]);
+    });
     return () => (
       <div class={styles.loginChangeModel}>
-        <i class={styles.iconClose}></i>
+        <i
+          class={styles.iconClose}
+          onClick={() => {
+            emit('close');
+          }}></i>
         <div class={styles.popupTitle}>
           <span>选择学生</span>
         </div>
@@ -68,7 +81,9 @@ export default defineComponent({
                 <Image src={item.avatar} class={styles.userImg} fit="cover" />
 
                 <div class={styles.usernames}>
-                  <div class={styles.name}>{item.nickname}</div>
+                  <div class={styles.name}>
+                    <span class={styles.names}>{item.nickname}</span>
+                  </div>
                   {item.schoolName && (
                     <div class={styles.schoolname}>{item.schoolName}</div>
                   )}
@@ -77,6 +92,61 @@ export default defineComponent({
             </div>
           ))}
         </RadioGroup>
+
+        <div class={styles.addStudentBtn}>
+          <Button
+            block
+            round
+            loading={btnLoading.value}
+            disabled={!radioChecked.value || btnLoading.value}
+            color="linear-gradient( 135deg, #31C7FF 0%, #007AFE 100%)"
+            onClick={async () => {
+              btnLoading.value = true;
+              try {
+                const item = list.value.find(
+                  (item: any) => item.userId === radioChecked.value
+                );
+                if (!item.userId) return;
+                const forms: any = {
+                  username: props.credential.phone,
+                  client_id: 'cooleshow-student',
+                  client_secret: 'cooleshow-student',
+                  password: item.token,
+                  grant_type: 'password',
+                  loginType: 'TOKEN'
+                };
+                const result = await request.post('/edu-app/userlogin', {
+                  requestType: 'form',
+                  data: {
+                    ...forms
+                  }
+                });
+
+                storage.set(
+                  ACCESS_TOKEN,
+                  result.data.token_type + ' ' + result.data.access_token
+                );
+
+                const userCash = await request.get(
+                  '/edu-app/user/getUserInfo',
+                  {
+                    initRequest: true // 初始化接口
+                  }
+                );
+                setLogin(userCash.data);
+
+                emit('confirm', {
+                  loginTag: true
+                });
+                emit('close');
+              } finally {
+                //
+                btnLoading.value = false;
+              }
+            }}>
+            <span>确认</span>
+          </Button>
+        </div>
       </div>
     );
   }

+ 18 - 7
src/views/creation/login-model/index.tsx

@@ -49,20 +49,31 @@ export default defineComponent({
           autoRegister: props.isRegister
         };
 
-        const { data } = await request.post('/edu-app/userlogin', {
+        const result = await request.post('/edu-app/userlogin', {
           requestType: 'form',
           data: {
             ...forms
           }
         });
-        storage.set(ACCESS_TOKEN, data.token_type + ' ' + data.access_token);
 
-        const userCash = await request.get('/edu-app/user/getUserInfo', {
-          initRequest: true // 初始化接口
-        });
-        setLogin(userCash.data);
+        if (result.code === 5439) {
+          emit('confirm', {
+            loginTag: false,
+            data: { ...result.errorData, phone: state.username }
+          });
+        } else {
+          storage.set(
+            ACCESS_TOKEN,
+            result.data.token_type + ' ' + result.data.access_token
+          );
+
+          const userCash = await request.get('/edu-app/user/getUserInfo', {
+            initRequest: true // 初始化接口
+          });
+          setLogin(userCash.data);
 
-        emit('confirm', true);
+          emit('confirm', { loginTag: true });
+        }
       } catch (e: any) {
         //
         console.log(e);

+ 13 - 9
src/views/student-register/index.tsx

@@ -645,6 +645,7 @@ export default defineComponent({
           data: {
             schoolId: forms.schoolId,
             clientType: 'STUDENT',
+            schoolVerify: true,
             ...extra,
             giftVipDay:
               forms.detailVip.membershipDays || 0 + forms.giftVipDay || 0,
@@ -2071,11 +2072,11 @@ export default defineComponent({
                 const firstStudent = val;
                 studentInfo.extra.nickname = firstStudent.nickname;
                 const tempGrade: any = forms.gradeList || [];
-                if (!firstStudent.currentGradeNum) {
-                  studentInfo.extra.currentGradeNum = null;
-                  forms.gradeNumText = '';
-                  forms.instrumentCode = '';
-                }
+
+                studentInfo.extra.currentGradeNum = null;
+                forms.gradeNumText = '';
+                forms.instrumentCode = '';
+
                 tempGrade?.forEach((i: any) => {
                   if (i.value === firstStudent.currentGradeNum) {
                     forms.instrumentCode = i.instrumentCode;
@@ -2087,10 +2088,10 @@ export default defineComponent({
                     }
                   }
                 });
-                if (!firstStudent.currentClass) {
-                  studentInfo.extra.currentClass = null;
-                  forms.currentClassText = '';
-                }
+
+                studentInfo.extra.currentClass = null;
+                forms.currentClassText = '';
+
                 forms.classList.forEach((i: any) => {
                   if (i.value === firstStudent.currentClass) {
                     forms.currentClassText = i.text;
@@ -2100,6 +2101,8 @@ export default defineComponent({
                 studentInfo.extra.gender = firstStudent.gender;
                 forms.isRegister = 'update';
                 changeTipStatus(true, false);
+
+                forms.showSelectStudent = false;
               } else {
                 // 判断新建学员是否上限了
                 if (forms.studentList.length >= forms.multi_user_limit) {
@@ -2123,6 +2126,7 @@ export default defineComponent({
                   studentInfo.extra.gender = 1;
                   forms.currentClassText = '';
                   forms.gradeNumText = '';
+                  forms.showSelectStudent = false;
                 }
               }
             }}

+ 6 - 0
src/views/student-register/modal/select-student/index.module.less

@@ -19,6 +19,12 @@
     padding: 12px 10px;
     border-radius: 10px;
     margin-bottom: 16px;
+
+    :global {
+      .van-radio {
+        flex-shrink: 0;
+      }
+    }
   }
 
   .cellSelected {

+ 4 - 2
src/views/student-register/modal/select-student/index.tsx

@@ -26,6 +26,8 @@ export default defineComponent({
       () => {
         if (props.studentItem && props.studentItem.userId) {
           radioChecked.value = props.studentItem.userId;
+        } else {
+          radioChecked.value = null;
         }
       }
     );
@@ -80,9 +82,9 @@ export default defineComponent({
             color="linear-gradient( 135deg, #31C7FF 0%, #007AFE 100%)"
             onClick={() => {
               //
-              radioChecked.value = null;
+              // radioChecked.value = null;
               emit('confirm', {});
-              emit('close');
+              // emit('close');
             }}>
             <i class={styles.iconAdd}></i>
             <span>新增学生</span>

+ 34 - 9
src/views/student-register/register-member/index.tsx

@@ -218,6 +218,7 @@ export default defineComponent({
               data: {
                 schoolId: forms.schoolId,
                 clientType: 'STUDENT',
+                schoolVerify: true,
                 ...extra,
                 mobile: username,
                 newRegUser: forms.isRegister === 'create' ? true : false
@@ -850,11 +851,15 @@ export default defineComponent({
             list={forms.studentList}
             onClose={() => (forms.showSelectStudent = false)}
             onConfirm={(val: any) => {
-              forms.studentItem = val;
               if (val.userId) {
+                forms.studentItem = val;
                 const firstStudent = val;
                 studentInfo.extra.nickname = firstStudent.nickname;
                 const tempGrade: any = gradeList.value[0] || [];
+
+                studentInfo.extra.currentGradeNum = '';
+                forms.gradeNumText = '';
+
                 tempGrade?.forEach((i: any) => {
                   if (i.value === firstStudent.currentGradeNum) {
                     // forms.instrumentCode = i.instrumentCode;
@@ -866,6 +871,9 @@ export default defineComponent({
                     // }
                   }
                 });
+
+                forms.currentClassText = '';
+                studentInfo.extra.currentClass = '';
                 classList.forEach((i: any) => {
                   if (i.value === firstStudent.currentClass) {
                     forms.currentClassText = i.text;
@@ -875,15 +883,32 @@ export default defineComponent({
                 studentInfo.extra.gender = firstStudent.gender;
                 forms.isRegister = 'update';
                 changeTipStatus(true, false);
+                forms.showSelectStudent = false;
               } else {
-                forms.isRegister = 'create';
-                changeTipStatus(false, false);
-                studentInfo.extra.nickname = '';
-                studentInfo.extra.currentGradeNum = '';
-                studentInfo.extra.currentClass = '';
-                studentInfo.extra.gender = 1;
-                forms.currentClassText = '';
-                forms.gradeNumText = '';
+                // 判断新建学员是否上限了
+                if (forms.studentList.length >= forms.multi_user_limit) {
+                  otherParams.showOtherMessage = `同一手机号最多创建${forms.multi_user_limit}个学生`;
+                  otherParams.showOtherSchool = true;
+                  otherParams.showCancelButton = false;
+                  otherParams.showCloseButton = true;
+                  otherParams.confirmButtonColor =
+                    'linear-gradient( 305deg, #40C8FF 0%, #3192FF 100%)';
+                  otherParams.confirmButtonText = '我知道了';
+                  otherParams.otherType = 'limit';
+                  otherParams.messageAlign = 'center';
+                  return true;
+                } else {
+                  forms.studentItem = val;
+                  forms.isRegister = 'create';
+                  changeTipStatus(false, false);
+                  studentInfo.extra.nickname = '';
+                  studentInfo.extra.currentGradeNum = '';
+                  studentInfo.extra.currentClass = '';
+                  studentInfo.extra.gender = 1;
+                  forms.currentClassText = '';
+                  forms.gradeNumText = '';
+                  forms.showSelectStudent = false;
+                }
               }
             }}
           />

+ 30 - 9
src/views/student-register/register-new/index.tsx

@@ -912,11 +912,13 @@ export default defineComponent({
             list={forms.studentList}
             onClose={() => (forms.showSelectStudent = false)}
             onConfirm={(val: any) => {
-              forms.studentItem = val;
               if (val.userId) {
+                forms.studentItem = val;
                 const firstStudent = val;
                 studentInfo.extra.nickname = firstStudent.nickname;
                 const tempGrade: any = gradeList.value[0] || [];
+                studentInfo.extra.currentGradeNum = '';
+                forms.gradeNumText = '';
                 tempGrade?.forEach((i: any) => {
                   if (i.value === firstStudent.currentGradeNum) {
                     // forms.instrumentCode = i.instrumentCode;
@@ -928,6 +930,8 @@ export default defineComponent({
                     // }
                   }
                 });
+                forms.currentClassText = '';
+                studentInfo.extra.currentClass = '';
                 classList.forEach((i: any) => {
                   if (i.value === firstStudent.currentClass) {
                     forms.currentClassText = i.text;
@@ -937,15 +941,32 @@ export default defineComponent({
                 studentInfo.extra.gender = firstStudent.gender;
                 forms.isRegister = 'update';
                 changeTipStatus(true, false);
+                forms.showSelectStudent = false;
               } else {
-                forms.isRegister = 'create';
-                changeTipStatus(false, false);
-                studentInfo.extra.nickname = '';
-                studentInfo.extra.currentGradeNum = '';
-                studentInfo.extra.currentClass = '';
-                studentInfo.extra.gender = 1;
-                forms.currentClassText = '';
-                forms.gradeNumText = '';
+                // 判断新建学员是否上限了
+                if (forms.studentList.length >= forms.multi_user_limit) {
+                  otherParams.showOtherMessage = `同一手机号最多创建${forms.multi_user_limit}个学生`;
+                  otherParams.showOtherSchool = true;
+                  otherParams.showCancelButton = false;
+                  otherParams.showCloseButton = true;
+                  otherParams.confirmButtonColor =
+                    'linear-gradient( 305deg, #40C8FF 0%, #3192FF 100%)';
+                  otherParams.confirmButtonText = '我知道了';
+                  otherParams.otherType = 'limit';
+                  otherParams.messageAlign = 'center';
+                  return true;
+                } else {
+                  forms.studentItem = val;
+                  forms.isRegister = 'create';
+                  changeTipStatus(false, false);
+                  studentInfo.extra.nickname = '';
+                  studentInfo.extra.currentGradeNum = '';
+                  studentInfo.extra.currentClass = '';
+                  studentInfo.extra.gender = 1;
+                  forms.currentClassText = '';
+                  forms.gradeNumText = '';
+                  forms.showSelectStudent = false;
+                }
               }
             }}
           />