Commit d933f5323849fc06998a109e6a81cf1339ed33e9

Authored by fengtao
2 parents dbc34653 8c3f7f22

Merge branch 'main' into ft-dev

@@ -56,10 +56,15 @@ export function doLogout() { @@ -56,10 +56,15 @@ export function doLogout() {
56 // return defHttp.get({ url: Api.Logout }); 56 // return defHttp.get({ url: Api.Logout });
57 } 57 }
58 export function doRefreshToken(params: RefreshTokenParams) { 58 export function doRefreshToken(params: RefreshTokenParams) {
59 - return defHttp.post<LoginResultModel>({  
60 - url: Api.RefreshToken,  
61 - params,  
62 - }); 59 + return defHttp.post<LoginResultModel>(
  60 + {
  61 + url: Api.RefreshToken,
  62 + params,
  63 + },
  64 + {
  65 + joinPrefix: false,
  66 + }
  67 + );
63 } 68 }
64 export function smsCodeLoginApi(params: SmsLoginParams, mode: ErrorMessageMode = 'modal') { 69 export function smsCodeLoginApi(params: SmsLoginParams, mode: ErrorMessageMode = 'modal') {
65 return defHttp.post<LoginResultModel>( 70 return defHttp.post<LoginResultModel>(
@@ -72,3 +77,10 @@ export function smsCodeLoginApi(params: SmsLoginParams, mode: ErrorMessageMode = @@ -72,3 +77,10 @@ export function smsCodeLoginApi(params: SmsLoginParams, mode: ErrorMessageMode =
72 } 77 }
73 ); 78 );
74 } 79 }
  80 +
  81 +export function forgetPasswordApi(params) {
  82 + return defHttp.post({
  83 + url: '',
  84 + params,
  85 + });
  86 +}
@@ -10,7 +10,7 @@ export const PageEnum = { @@ -10,7 +10,7 @@ export const PageEnum = {
10 // error log page path 10 // error log page path
11 ERROR_LOG_PAGE: '/error-log/list', 11 ERROR_LOG_PAGE: '/error-log/list',
12 //消息配置 12 //消息配置
13 - MESSAGE_CONFIG: '/config/message', 13 + MESSAGE_CONFIG: '/message/config',
14 //设备配置 14 //设备配置
15 DEVICE_PROFILE: '/device/profiles', 15 DEVICE_PROFILE: '/device/profiles',
16 }; 16 };
@@ -217,7 +217,7 @@ export const formSchema: FormSchema[] = [ @@ -217,7 +217,7 @@ export const formSchema: FormSchema[] = [
217 label: '模板用途', 217 label: '模板用途',
218 required: true, 218 required: true,
219 component: 'ApiSelect', 219 component: 'ApiSelect',
220 - helpMessage: ['用户登录、忘记密码模板平台只提供"code"参数', '初始密码设置平台提供"name"参数'], 220 + helpMessage: ['用户登录、忘记密码模板平台只提供"code"参数'],
221 componentProps: { 221 componentProps: {
222 api: findDictItemByCode, 222 api: findDictItemByCode,
223 params: { 223 params: {
@@ -2,24 +2,25 @@ @@ -2,24 +2,25 @@
2 <template v-if="getShow"> 2 <template v-if="getShow">
3 <LoginFormTitle class="enter-x" /> 3 <LoginFormTitle class="enter-x" />
4 <Form class="p-4 enter-x" :model="formData" :rules="getFormRules" ref="formRef"> 4 <Form class="p-4 enter-x" :model="formData" :rules="getFormRules" ref="formRef">
5 - <FormItem name="account" class="enter-x">  
6 - <Input  
7 - size="large"  
8 - v-model:value="formData.account"  
9 - :placeholder="t('sys.login.userName')"  
10 - />  
11 - </FormItem>  
12 -  
13 <FormItem name="mobile" class="enter-x"> 5 <FormItem name="mobile" class="enter-x">
14 <Input size="large" v-model:value="formData.mobile" :placeholder="t('sys.login.mobile')" /> 6 <Input size="large" v-model:value="formData.mobile" :placeholder="t('sys.login.mobile')" />
15 </FormItem> 7 </FormItem>
16 <FormItem name="sms" class="enter-x"> 8 <FormItem name="sms" class="enter-x">
17 <CountdownInput 9 <CountdownInput
  10 + :sendCodeApi="sendLoginSms"
18 size="large" 11 size="large"
19 v-model:value="formData.sms" 12 v-model:value="formData.sms"
20 :placeholder="t('sys.login.smsCode')" 13 :placeholder="t('sys.login.smsCode')"
21 /> 14 />
22 </FormItem> 15 </FormItem>
  16 + <FormItem name="password" class="enter-x">
  17 + <InputPassword
  18 + size="large"
  19 + v-model:value="formData.password"
  20 + visibilityToggle
  21 + :placeholder="t('sys.login.password')"
  22 + />
  23 + </FormItem>
23 24
24 <FormItem class="enter-x"> 25 <FormItem class="enter-x">
25 <Button type="primary" size="large" block @click="handleReset" :loading="loading"> 26 <Button type="primary" size="large" block @click="handleReset" :loading="loading">
@@ -35,30 +36,46 @@ @@ -35,30 +36,46 @@
35 <script lang="ts" setup> 36 <script lang="ts" setup>
36 import { reactive, ref, computed, unref } from 'vue'; 37 import { reactive, ref, computed, unref } from 'vue';
37 import LoginFormTitle from './LoginFormTitle.vue'; 38 import LoginFormTitle from './LoginFormTitle.vue';
38 - import { Form, Input, Button } from 'ant-design-vue'; 39 + import { Form, Input, Button, message } from 'ant-design-vue';
39 import { CountdownInput } from '/@/components/CountDown'; 40 import { CountdownInput } from '/@/components/CountDown';
40 import { useI18n } from '/@/hooks/web/useI18n'; 41 import { useI18n } from '/@/hooks/web/useI18n';
41 import { useLoginState, useFormRules, LoginStateEnum } from './useLogin'; 42 import { useLoginState, useFormRules, LoginStateEnum } from './useLogin';
42 - 43 + import { forgetPasswordApi } from '/@/api/sys/user';
43 const FormItem = Form.Item; 44 const FormItem = Form.Item;
44 const { t } = useI18n(); 45 const { t } = useI18n();
45 - const { handleBackLogin, getLoginState } = useLoginState(); 46 + const { handleBackLogin, getLoginState, setLoginState } = useLoginState();
46 const { getFormRules } = useFormRules(); 47 const { getFormRules } = useFormRules();
47 48
48 const formRef = ref(); 49 const formRef = ref();
49 const loading = ref(false); 50 const loading = ref(false);
50 - 51 + const InputPassword = Input.Password;
51 const formData = reactive({ 52 const formData = reactive({
52 - account: '',  
53 mobile: '', 53 mobile: '',
54 sms: '', 54 sms: '',
  55 + password: '',
55 }); 56 });
56 57
57 const getShow = computed(() => unref(getLoginState) === LoginStateEnum.RESET_PASSWORD); 58 const getShow = computed(() => unref(getLoginState) === LoginStateEnum.RESET_PASSWORD);
58 59
59 async function handleReset() { 60 async function handleReset() {
  61 + setLoginState(LoginStateEnum.LOGIN);
60 const form = unref(formRef); 62 const form = unref(formRef);
61 if (!form) return; 63 if (!form) return;
62 await form.resetFields(); 64 await form.resetFields();
63 } 65 }
  66 +
  67 + async function sendLoginSms() {
  68 + const reg =
  69 + /^[1](([3][0-9])|([4][0,1,4-9])|([5][0-3,5-9])|([6][2,5,6,7])|([7][0-8])|([8][0-9])|([9][0-3,5-9]))[0-9]{8}$/;
  70 + if (reg.test(formData.mobile)) {
  71 + const sendRes = await forgetPasswordApi(formData.mobile);
  72 + if (!sendRes) {
  73 + message.error('发送失败');
  74 + return false;
  75 + }
  76 + return true;
  77 + } else {
  78 + message.error('请输入正确手机号码');
  79 + }
  80 + }
64 </script> 81 </script>
@@ -56,7 +56,6 @@ @@ -56,7 +56,6 @@
56 import { useI18n } from '/@/hooks/web/useI18n'; 56 import { useI18n } from '/@/hooks/web/useI18n';
57 import { useDesign } from '/@/hooks/web/useDesign'; 57 import { useDesign } from '/@/hooks/web/useDesign';
58 import { useLocaleStore } from '/@/store/modules/locale'; 58 import { useLocaleStore } from '/@/store/modules/locale';
59 - import { useUserStore } from '/@/store/modules/user';  
60 defineProps({ 59 defineProps({
61 sessionTimeout: { 60 sessionTimeout: {
62 type: Boolean, 61 type: Boolean,
@@ -88,7 +88,7 @@ export function useFormRules(formData?: Recordable) { @@ -88,7 +88,7 @@ export function useFormRules(formData?: Recordable) {
88 // reset password form rules 88 // reset password form rules
89 case LoginStateEnum.RESET_PASSWORD: 89 case LoginStateEnum.RESET_PASSWORD:
90 return { 90 return {
91 - account: accountFormRule, 91 + password: passwordFormRule,
92 ...mobileRule, 92 ...mobileRule,
93 }; 93 };
94 94
@@ -37,39 +37,25 @@ @@ -37,39 +37,25 @@
37 await resetFields(); 37 await resetFields();
38 setDrawerProps({ confirmLoading: false }); 38 setDrawerProps({ confirmLoading: false });
39 isUpdate.value = !!data?.isUpdate; 39 isUpdate.value = !!data?.isUpdate;
  40 + let treeData: any[] = await getOrganizationList();
40 41
41 //如果是编辑操作,设置页面数据 42 //如果是编辑操作,设置页面数据
42 if (unref(isUpdate)) { 43 if (unref(isUpdate)) {
43 //为表单赋值 44 //为表单赋值
44 - await setFieldsValue({  
45 - ...data.record,  
46 - });  
47 - organizationId = Reflect.get(data.record, 'id');  
48 - let treeData: any = await getOrganizationList();  
49 - 45 + await setFieldsValue(data.record);
  46 + const organizationId = Reflect.get(data.record, 'id');
50 // 过滤当前选中的组织, 47 // 过滤当前选中的组织,
51 - function filterTransFun(treeData: any[]) { 48 + (function filterTransFun(treeData: any[]) {
52 treeData.forEach((item, index, arr) => { 49 treeData.forEach((item, index, arr) => {
53 - if (item.id === organizationId) {  
54 - arr.splice(index, 1);  
55 - }  
56 - if (item.children.length) {  
57 - filterTransFun(item.children);  
58 - } 50 + if (item.id === organizationId) arr.splice(index, 1);
  51 + if (item.children.length) filterTransFun(item.children);
59 }); 52 });
60 - }  
61 - filterTransFun(treeData);  
62 - await updateSchema({  
63 - field: 'parentId',  
64 - componentProps: { treeData },  
65 - });  
66 - } else {  
67 - let treeData = await getOrganizationList();  
68 - await updateSchema({  
69 - field: 'parentId',  
70 - componentProps: { treeData },  
71 - }); 53 + })(treeData);
72 } 54 }
  55 + await updateSchema({
  56 + field: 'parentId',
  57 + componentProps: { treeData },
  58 + });
73 }); 59 });
74 60
75 //得到页面标题 61 //得到页面标题
@@ -37,6 +37,7 @@ export const formSchema: FormSchema[] = [ @@ -37,6 +37,7 @@ export const formSchema: FormSchema[] = [
37 key: 'id', 37 key: 'id',
38 value: 'id', 38 value: 'id',
39 }, 39 },
  40 + maxTagCount: 10,
40 getPopupContainer: () => document.body, 41 getPopupContainer: () => document.body,
41 }, 42 },
42 }, 43 },