Commit d933f5323849fc06998a109e6a81cf1339ed33e9

Authored by fengtao
2 parents dbc34653 8c3f7f22

Merge branch 'main' into ft-dev

... ... @@ -56,10 +56,15 @@ export function doLogout() {
56 56 // return defHttp.get({ url: Api.Logout });
57 57 }
58 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 69 export function smsCodeLoginApi(params: SmsLoginParams, mode: ErrorMessageMode = 'modal') {
65 70 return defHttp.post<LoginResultModel>(
... ... @@ -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 10 // error log page path
11 11 ERROR_LOG_PAGE: '/error-log/list',
12 12 //消息配置
13   - MESSAGE_CONFIG: '/config/message',
  13 + MESSAGE_CONFIG: '/message/config',
14 14 //设备配置
15 15 DEVICE_PROFILE: '/device/profiles',
16 16 };
... ...
... ... @@ -217,7 +217,7 @@ export const formSchema: FormSchema[] = [
217 217 label: '模板用途',
218 218 required: true,
219 219 component: 'ApiSelect',
220   - helpMessage: ['用户登录、忘记密码模板平台只提供"code"参数', '初始密码设置平台提供"name"参数'],
  220 + helpMessage: ['用户登录、忘记密码模板平台只提供"code"参数'],
221 221 componentProps: {
222 222 api: findDictItemByCode,
223 223 params: {
... ...
... ... @@ -2,24 +2,25 @@
2 2 <template v-if="getShow">
3 3 <LoginFormTitle class="enter-x" />
4 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 5 <FormItem name="mobile" class="enter-x">
14 6 <Input size="large" v-model:value="formData.mobile" :placeholder="t('sys.login.mobile')" />
15 7 </FormItem>
16 8 <FormItem name="sms" class="enter-x">
17 9 <CountdownInput
  10 + :sendCodeApi="sendLoginSms"
18 11 size="large"
19 12 v-model:value="formData.sms"
20 13 :placeholder="t('sys.login.smsCode')"
21 14 />
22 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 25 <FormItem class="enter-x">
25 26 <Button type="primary" size="large" block @click="handleReset" :loading="loading">
... ... @@ -35,30 +36,46 @@
35 36 <script lang="ts" setup>
36 37 import { reactive, ref, computed, unref } from 'vue';
37 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 40 import { CountdownInput } from '/@/components/CountDown';
40 41 import { useI18n } from '/@/hooks/web/useI18n';
41 42 import { useLoginState, useFormRules, LoginStateEnum } from './useLogin';
42   -
  43 + import { forgetPasswordApi } from '/@/api/sys/user';
43 44 const FormItem = Form.Item;
44 45 const { t } = useI18n();
45   - const { handleBackLogin, getLoginState } = useLoginState();
  46 + const { handleBackLogin, getLoginState, setLoginState } = useLoginState();
46 47 const { getFormRules } = useFormRules();
47 48
48 49 const formRef = ref();
49 50 const loading = ref(false);
50   -
  51 + const InputPassword = Input.Password;
51 52 const formData = reactive({
52   - account: '',
53 53 mobile: '',
54 54 sms: '',
  55 + password: '',
55 56 });
56 57
57 58 const getShow = computed(() => unref(getLoginState) === LoginStateEnum.RESET_PASSWORD);
58 59
59 60 async function handleReset() {
  61 + setLoginState(LoginStateEnum.LOGIN);
60 62 const form = unref(formRef);
61 63 if (!form) return;
62 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 81 </script>
... ...
... ... @@ -56,7 +56,6 @@
56 56 import { useI18n } from '/@/hooks/web/useI18n';
57 57 import { useDesign } from '/@/hooks/web/useDesign';
58 58 import { useLocaleStore } from '/@/store/modules/locale';
59   - import { useUserStore } from '/@/store/modules/user';
60 59 defineProps({
61 60 sessionTimeout: {
62 61 type: Boolean,
... ...
... ... @@ -88,7 +88,7 @@ export function useFormRules(formData?: Recordable) {
88 88 // reset password form rules
89 89 case LoginStateEnum.RESET_PASSWORD:
90 90 return {
91   - account: accountFormRule,
  91 + password: passwordFormRule,
92 92 ...mobileRule,
93 93 };
94 94
... ...
... ... @@ -37,39 +37,25 @@
37 37 await resetFields();
38 38 setDrawerProps({ confirmLoading: false });
39 39 isUpdate.value = !!data?.isUpdate;
  40 + let treeData: any[] = await getOrganizationList();
40 41
41 42 //如果是编辑操作,设置页面数据
42 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 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 37 key: 'id',
38 38 value: 'id',
39 39 },
  40 + maxTagCount: 10,
40 41 getPopupContainer: () => document.body,
41 42 },
42 43 },
... ...