shmily1213 hai 1 mes
pai
achega
2154ec6c02

+ 3 - 2
src/api/login.js

@@ -64,7 +64,7 @@ export function validateSms(params) {
 // 验证码校验
 export function improveUserInfo(params) {
     return request({
-        url: '/improveUserInfo',
+        url: '/improve',
         method: 'post',
         data: params
     })
@@ -158,7 +158,8 @@ export function bindPhone(data) {
 /// 考生类别
 export function getExamTypes(params) {
     return request({
-        url: '/getExamTypes',
+        // url: '/getExamTypes',
+        url: '/front/comm/dict/exam_type',
         method: 'get',
         params,
         custom: {autoFitNoToken: true}

+ 6 - 2
src/components/mx-picker/mx-picker.vue

@@ -2,7 +2,7 @@
     <view class="flex-1 fx-row fx-end-cen gap-10" @click="handleClick">
         <view v-if="valueMode" class="text-sm">{{ display }}</view>
         <view v-else class="text-sm text-light">{{ placeholder }}</view>
-        <uv-icon name="arrow-down"/>
+        <uv-icon v-if="!disabled" name="arrow-down"/>
         <uv-picker ref="picker" :columns="columns" :default-index="defaultIndex" :title="title" :key-name="labelProp"
                    @confirm="handleConfirm" @change="handleChange"/>
     </view>
@@ -25,7 +25,8 @@ const props = defineProps({
     labelProp: createPropDefine(''),
     valueProp: createPropDefine(''),
     emptyDisplay: createPropDefine(''),
-    treeProp: createPropDefine('')
+    treeProp: createPropDefine(''),
+    disabled: createPropDefine(false, Boolean)
 })
 const emits = defineEmits(['change', 'update:modelValue'])
 
@@ -42,6 +43,9 @@ const columns = ref([])
 const defaultIndex = ref([])
 
 const handleClick = function () {
+  if (props.disabled) {
+    return;
+  }
     setDefaultColumnsAndIndexs()
     picker.value.open()
 }

+ 1 - 1
src/pagesMain/pages/me/components/me-info.vue

@@ -5,7 +5,7 @@
       <view class="flex-1 min-w-1">
         <view class="text-40 text-fore-title flex items-center gap-x-20">
           <text class="font-bold">{{ nickName }}</text>
-          <ie-image v-if="!isVip" src="/static/personal/vip_tag.png" custom-class="w-100 h-36" />
+          <ie-image v-if="isVip" src="/static/personal/vip_tag.png" custom-class="w-100 h-36" />
         </view>
         <view v-if="phonenumber" class="text-30 text-fore-subcontent">{{ phonenumber }}</view>
       </view>

+ 12 - 3
src/pagesOther/pages/ie/components/card/pretty-card.vue

@@ -5,8 +5,12 @@
             <slot>
                 <view class="fx-row fx-bet-cen text-primary text-xs font-[PingFang] font-thin">
                     <view style="max-width: 33vw" class="truncate">姓名:{{ userSnapshot.nickName }}</view>
-                    <view>省份:{{ userSnapshot.provinceName }}</view>
-                    <view>类别:{{ userSnapshot.examType }}</view>
+                    <view>省份:{{ userSnapshot.location }}</view>
+                    <!-- <view>类别:{{ userSnapshot.examType }}</view> -->
+                     <view>
+                      类别:
+                      <ie-dict :dict-name="EnumDictName.EXAM_TYPE" :dict-value="userStore.userInfo.examType || '--'" />
+                    </view>
                 </view>
             </slot>
         </view>
@@ -15,6 +19,8 @@
 
 <script>
 import {useInjectUserSnapshot} from "@/pagesOther/pages/ie/hooks/useUserSnapshotInjection";
+import { useUserStore } from '@/store/userStore';
+import { EnumDictName } from '@/common/enum';
 
 export default {
     name: "pretty-card",
@@ -26,8 +32,11 @@ export default {
     },
     setup() {
         const {userSnapshot} = useInjectUserSnapshot()
+        const userStore = useUserStore();
         return {
-            userSnapshot
+            userSnapshot,
+            userStore,
+            EnumDictName
         }
     }
 }

+ 12 - 4
src/pagesOther/pages/ie/components/card/pure-card.vue

@@ -4,8 +4,12 @@
         <slot>
             <view class="mt-10 fx-row fx-bet-cen text-white text-xs font-light">
                 <view style="max-width: 33vw" class="truncate">姓名:{{ userSnapshot.nickName }}</view>
-                <view>省份:{{ userSnapshot.provinceName }}</view>
-                <view>类别:{{ userSnapshot.examType }}</view>
+                <view>省份:{{ userSnapshot.location }}</view>
+                <!-- <view>类别:{{ userSnapshot.examType }}</view> -->
+                <view>
+                      类别:
+                      <ie-dict :dict-name="EnumDictName.EXAM_TYPE" :dict-value="userStore.userInfo.examType || '--'" />
+                    </view>
             </view>
         </slot>
     </view>
@@ -14,14 +18,18 @@
 <script>
 import PrettyCard from "@/pagesOther/pages/ie/components/card/pretty-card.vue";
 import {useInjectUserSnapshot} from "@/pagesOther/pages/ie/hooks/useUserSnapshotInjection";
-
+import { useUserStore } from '@/store/userStore';
+import { EnumDictName } from '@/common/enum';
 export default {
     name: "pure-card",
     extends: PrettyCard,
     setup() {
         const {userSnapshot} = useInjectUserSnapshot()
+        const userStore = useUserStore();
         return {
-            userSnapshot
+            userSnapshot,
+            userStore,
+            EnumDictName
         }
     }
 }

+ 4 - 4
src/pagesOther/pages/login/components/hooks/defineFormModels.js

@@ -10,7 +10,7 @@ export const createRegisterModelRules = function () {
         newPwdRepeat: '',
         nickName: '',
         sex: '',
-        provinceName: '',
+        location: '',
         examType: '',
         examMajor: ''
     }
@@ -71,7 +71,7 @@ export const createBindPhoneModelRules = function () {
         smsCode: '',
         nickName: '',
         sex: '',
-        provinceName: '',
+        location: '',
         schoolId: '',
         customSchoolName: '',
         customClassName: '',
@@ -93,7 +93,7 @@ export const createActivateCardModelRules = function () {
         username: '',
         password: '',
         gaokaoYear: '',
-        provinceName: '',
+        location: '',
         schoolId: '',
         customSchoolName: '',
         customClassName: '',
@@ -123,7 +123,7 @@ export const createBasicInfoModelRules = function (modelRef) {
     const rules = {}
     const mapping = {
         nickName: 'name',
-        provinceName: 'provinceName',
+        location: 'location',
         sex: 'sex',
         customSchoolName: 'customSchoolName',
         customClassName: 'customClassName',

+ 15 - 11
src/pagesOther/pages/login/components/hooks/useExamTypeService.js

@@ -11,26 +11,30 @@ export const useExamTypeService = function (props) {
     const examTypeOptions = ref([])
     const examMajorOptions = ref([])
     const isModelCultural = computed(() => model.value.examType == mxConst.keyCulturalExamType)
-
+    console.log(model.value, 111)
     // 这个watch主要是消除切换省份时getExamMajors会多触发一次
     // 如: 当前isModelCultural=true, 此时切换省份会触发getExamMajors查询
-    watch(() => model.value.proviceName, () => {
+    watch(() => model.value.location, () => {
         if (props.disabled) return
         model.value.examType = ''
         model.value.examMajor = ''
     })
 
     watchEffect(async () => {
-        if (props.disabled) return
+        // if (props.disabled) return
         // 必须提供有效的省份值,才能触发数据加载,
         // 所以useExamTypeService的核心也在于外部提供的proRefOrGetter
-        const {provinceName} = model.value
-        if (!provinceName) return
+        const {location} = model.value
+        console.log(1111, location)
+        if (!location) return
 
-        const res = await getExamTypes({provinceName})
-        examTypeOptions.value = res.data
-        if (!examTypeOptions.value.includes(model.value.examType)) {
+        const res = await getExamTypes({location})
+        console.log(res, model.value.examType)
+        examTypeOptions.value = res.data.exam_type
+        console.log(examTypeOptions.value.map(item => item.dictValue), model.value.examType)
+        if (!examTypeOptions.value.map(item => item.dictValue).includes(model.value.examType)) {
             // 清空无效值
+            console.log('清空无效值')
             model.value.examType = ''
             model.value.examMajor = ''
         }
@@ -39,12 +43,12 @@ export const useExamTypeService = function (props) {
     watchEffect(async () => {
         if (props.disabled) return
         // 同上
-        const {provinceName, examType} = model.value
-        if (!provinceName || !examType) return
+        const {location, examType} = model.value
+        if (!location || !examType) return
         // 只有职高对口升学才有考生专业的概念
         if (!isModelCultural.value) return model.value.examMajor = ''
 
-        const res = await getExamMajors({provinceName, examType})
+        const res = await getExamMajors({location, examType})
         examMajorOptions.value = res.data
         if (examMajorOptions.value.every(op => op.code != model.value.examMajor)) {
             // 清空无效值

+ 1 - 1
src/pagesOther/pages/login/components/hooks/useFormDataInjection.js

@@ -49,7 +49,7 @@ export const useProvideFormData = function (pureModel, overrideRules = {}) {
         ],
         nickName: [{required: true, message: '请输入学生姓名', trigger: 'error-change'}],
         sex: [{required: true, message: '请选择学生性别', trigger: 'error-change'}],
-        provinceName: [{required: true, message: '请选择所在省份', trigger: 'error-change'}],
+        location: [{required: true, message: '请选择所在省份', trigger: 'error-change'}],
         examType: [{required: true, message: '请选择考生类别', trigger: 'error-change'}],
         examMajor: [{required: true, message: '请选择专业类别', trigger: 'error-change'}],
         schoolId: [{required: true, message: '请选择学校', transform, trigger: 'error-change'}],

+ 10 - 4
src/pagesOther/pages/login/components/register-fields/province-field.vue

@@ -1,23 +1,29 @@
 <template>
-    <mx-form-item v-if="disabled" v-model="model[propProvince]" :prop="propProvince" :label="labelProvince" disabled/>
-    <mx-form-item v-else :prop="propProvince" :label="labelProvince">
-        <mx-picker v-model="model[propProvince]" placeholder="请选择省份" :data="provinceOptions"/>
+    <!-- <mx-form-item v-if="disabled" v-model="model[propProvince]" :prop="propProvince" :label="labelProvince" disabled/> -->
+    <mx-form-item :prop="propProvince" :label="labelProvince">
+        <mx-picker :disabled="disabled" v-model="model[propProvince]" label-prop="dictLabel" value-prop="dictValue" placeholder="请选择省份" :data="provinceList"/>
     </mx-form-item>
 </template>
 
 <script setup>
+import {getProvinces} from '@/api/modules/system'
 import {createPropDefine} from "@/utils";
 import {useInjectFormData} from "@/pagesOther/pages/login/components/hooks/useFormDataInjection";
 import {useInjectProvince} from "@/pagesOther/pages/login/components/hooks/useProvinceInjection";
 
 defineProps({
-    propProvince: createPropDefine('provinceName'),
+    propProvince: createPropDefine('location'),
     labelProvince: createPropDefine('所在省份'),
     disabled: createPropDefine(false, Boolean)
 })
 
 const [model] = useInjectFormData()
 const {provinceOptions} = useInjectProvince({provinceOptions: []})
+console.log(provinceOptions, 333, model)
+const provinceList = ref([])
+getProvinces().then(res => {
+  provinceList.value = res.data
+})
 </script>
 
 <style scoped>

+ 4 - 4
src/pagesOther/pages/login/components/register-fields/school-info-fields.vue

@@ -22,7 +22,7 @@ const props = defineProps({
 const [model] = useInjectFormData()
 const schoolOptions = ref([])
 
-watch(() => model.value.provinceName, () => {
+watch(() => model.value.location, () => {
     if (props.disabled) return
     // 省份变更时,清空原值
     model.value.schoolId = ''
@@ -33,10 +33,10 @@ watchEffect(async () => {
     if (props.disabled) return
     // 在绑卡场景下才能解析出username,password,此时卡的优先级就提高了
     // 如果在bindPhone场景下,相当于没有传入username, password,后台使用当前用户的权限信息
-    const {provinceName, username, password} = model.value
-    if (!provinceName) return
+    const {location, username, password} = model.value
+    if (!location) return
 
-    const res = await getAreaSchoolTree({provinceName, username, password})
+    const res = await getAreaSchoolTree({location, username, password})
     schoolOptions.value = res.data
 })
 </script>

+ 4 - 3
src/pagesOther/pages/login/components/register-fields/type-major-fields.vue

@@ -1,7 +1,7 @@
 <template>
-    <mx-form-item v-if="disabled" v-model="model.examType" label="考生类别" disabled/>
-    <mx-form-item v-else prop="examType" label="考生类别">
-        <mx-picker v-model="model.examType" :data="examTypeOptions" placeholder="请选择考生类别"/>
+    <!-- <mx-form-item v-if="disabled" v-model="model.examType" label="考生类别"/> -->
+    <mx-form-item prop="examType" label="考生类别">
+        <mx-picker :disabled="disabled" v-model="model.examType" :data="examTypeOptions" label-prop="dictLabel" value-prop="dictValue" placeholder="请选择考生类别"/>
     </mx-form-item>
     <template v-if="isModelCultural">
         <mx-form-item v-if="disabled" v-model="model.examMajorName" label="专业类别" disabled/>
@@ -24,6 +24,7 @@ const props = defineProps({
 
 const [model] = useInjectFormData()
 const {isModelCultural, examTypeOptions, examMajorOptions} = useExamTypeService(props)
+console.log(examTypeOptions, props, 12)
 </script>
 
 <style scoped>

+ 1 - 1
src/pagesOther/pages/personal-center/basic-info/basic-info.vue

@@ -39,7 +39,7 @@ const [, rules] = useProvideFormData(m, r)
 
 // hooks
 watch(currentUser, () => _.assign(model.value, currentUser.value), {immediate: true})
-
+console.log(currentUser)
 // methods
 const handleSubmit = async () => {
     await form.value.validate()

+ 32 - 13
src/pagesSystem/pages/login/login.vue

@@ -73,7 +73,7 @@ const userStore = useUserStore();
 const { validatePhone, validateTelephone } = useValidation();
 
 const loginType = ref('phone');
-const phone = ref('13222222222');
+const phone = ref('17363958507');
 const password = ref('');
 const cardNo = ref('20000002');
 const cardPassword = ref('823749');
@@ -141,8 +141,8 @@ const handleLogin = async () => {
   if (loginType.value === 'phone') {
     submitLogin();
   } else if (loginType.value === 'card') {
-    // captchaRef.value.open();
-    submitLogin();
+    captchaRef.value.open();
+    // submitLogin();
   }
 }
 
@@ -190,20 +190,39 @@ const handleMobileLogin = async (params: MobileLoginRequestDTO) => {
   })
 }
 const handleCardLogin = (params: MobileLoginRequestDTO) => {
-  verifyCard(cardNo.value, cardPassword.value).then(res => {
-    console.log(res)
-    if (res.data) {
-      transferTo('/pagesSystem/pages/phone-verify/phone-verify', {
-        data: {
-          card: res.data,
-          cardNo: res.data.cardNo,
-          password: res.data.password
+  uni.$ie.showLoading();
+  mobileLogin(params).then(res => {
+    if (res.token) {
+      userStore.login(res.token).then((success: boolean) => {
+        uni.$ie.hideLoading();
+        if (success) {
+          transferBack(true);
+        } else {
+          uni.$ie.showToast('登录失败')
         }
       });
+    } else if (res.data.code === 101) {
+      // 
+      verifyCard(cardNo.value, cardPassword.value).then(res => {
+        console.log(res)
+        if (res.data) {
+          transferTo('/pagesSystem/pages/phone-verify/phone-verify', {
+            data: {
+              card: res.data,
+              cardNo: res.data.cardNo,
+              password: res.data.password
+            }
+          });
+        }
+      }).catch(err => {
+        console.log('验证会员卡失败', err);
+      })
     }
   }).catch(err => {
-    console.log('验证会员卡失败', err);
-  })
+    uni.$ie.hideLoading();
+    console.log('登录失败', err)
+  });
+
 }
 
 const handleValid = (data: { code: string; uuid: string }) => {