mirror of https://gitee.com/answerdev/answer.git
Merge branch 'ui' of git.backyard.segmentfault.com:opensource/answer into ui
This commit is contained in:
commit
7e6de19f1c
|
@ -80,7 +80,7 @@ export interface RegisterReqParams extends LoginReqParams {
|
|||
name: string;
|
||||
}
|
||||
|
||||
export interface ModifyPassReq {
|
||||
export interface ModifyPasswordReq {
|
||||
old_pass: string;
|
||||
pass: string;
|
||||
}
|
||||
|
@ -137,7 +137,7 @@ export interface ImgCodeRes {
|
|||
verify: boolean;
|
||||
}
|
||||
|
||||
export interface PssRetReq extends ImgCodeReq {
|
||||
export interface PasswordResetReq extends ImgCodeReq {
|
||||
e_mail: string;
|
||||
}
|
||||
|
||||
|
@ -145,11 +145,11 @@ export interface CheckImgReq {
|
|||
action: 'login' | 'e_mail' | 'find_pass';
|
||||
}
|
||||
|
||||
export interface NoticeSetReq {
|
||||
export interface SetNoticeReq {
|
||||
notice_switch: boolean;
|
||||
}
|
||||
|
||||
export interface QuDetailRes {
|
||||
export interface QuestionDetailRes {
|
||||
id: string;
|
||||
title: string;
|
||||
content: string;
|
||||
|
|
|
@ -36,7 +36,7 @@ const Form = ({
|
|||
<Mentions pageUsers={pageUsers.getUsers()}>
|
||||
<TextArea size="sm" value={value} onChange={handleChange} />
|
||||
</Mentions>
|
||||
<div className="text-muted fs-14">{t(`tip_${mode}`)}</div>
|
||||
<div className="form-text">{t(`tip_${mode}`)}</div>
|
||||
</div>
|
||||
{type === 'edit' ? (
|
||||
<div className="d-flex flex-column">
|
||||
|
|
|
@ -22,7 +22,7 @@ const Form = ({ userName, onSendReply, onCancel, mode }) => {
|
|||
<Mentions pageUsers={pageUsers.getUsers()}>
|
||||
<TextArea size="sm" value={value} onChange={handleChange} />
|
||||
</Mentions>
|
||||
<div className="text-muted fs-14">{t(`tip_${mode}`)}</div>
|
||||
<div className="form-text">{t(`tip_${mode}`)}</div>
|
||||
</div>
|
||||
<div className="d-flex flex-column">
|
||||
<Button
|
||||
|
|
|
@ -14,7 +14,7 @@ import { useSearchParams, NavLink, Link, useNavigate } from 'react-router-dom';
|
|||
|
||||
import { Avatar, Icon } from '@answer/components';
|
||||
import { userInfoStore, siteInfoStore, interfaceStore } from '@answer/stores';
|
||||
import { logout, useQueryNotificationRedDot } from '@answer/api';
|
||||
import { logout, useQueryNotificationStatus } from '@answer/api';
|
||||
import Storage from '@answer/utils/storage';
|
||||
|
||||
import './index.scss';
|
||||
|
@ -28,7 +28,7 @@ const Header: FC = () => {
|
|||
const [searchStr, setSearch] = useState('');
|
||||
const siteInfo = siteInfoStore((state) => state.siteInfo);
|
||||
const { interface: interfaceInfo } = interfaceStore();
|
||||
const { data: redDot } = useQueryNotificationRedDot();
|
||||
const { data: redDot } = useQueryNotificationStatus();
|
||||
const handleInput = (val) => {
|
||||
setSearch(val);
|
||||
};
|
||||
|
|
|
@ -5,7 +5,7 @@ import { useTranslation } from 'react-i18next';
|
|||
|
||||
import { Modal } from '@answer/components';
|
||||
import { useReportModal, useToast } from '@answer/hooks';
|
||||
import { questionDelete, answerDelete } from '@answer/api';
|
||||
import { deleteQuestion, deleteAnswer } from '@answer/api';
|
||||
import { isLogin } from '@answer/utils';
|
||||
import Share from '../Share';
|
||||
|
||||
|
@ -61,7 +61,7 @@ const Index: FC<IProps> = ({
|
|||
confirmBtnVariant: 'danger',
|
||||
confirmText: t('delete', { keyPrefix: 'btns' }),
|
||||
onConfirm: () => {
|
||||
questionDelete({
|
||||
deleteQuestion({
|
||||
id: qid,
|
||||
}).then(() => {
|
||||
toast.onShow({
|
||||
|
@ -82,7 +82,7 @@ const Index: FC<IProps> = ({
|
|||
confirmBtnVariant: 'danger',
|
||||
confirmText: t('delete', { keyPrefix: 'btns' }),
|
||||
onConfirm: () => {
|
||||
answerDelete({
|
||||
deleteAnswer({
|
||||
id: aid,
|
||||
}).then(() => {
|
||||
// refersh page
|
||||
|
|
|
@ -194,7 +194,7 @@ const TagSelector: FC<IProps> = ({
|
|||
{item.slug_name}
|
||||
|
||||
<span className="ms-1" onMouseUp={() => handleRemove(item)}>
|
||||
x
|
||||
×
|
||||
</span>
|
||||
</Button>
|
||||
);
|
||||
|
|
|
@ -2,7 +2,7 @@ import React, { useState, useEffect } from 'react';
|
|||
import { Button, Col } from 'react-bootstrap';
|
||||
import { Trans, useTranslation } from 'react-i18next';
|
||||
|
||||
import { emailReSend, checkImgCode } from '@answer/api';
|
||||
import { resendEmail, checkImgCode } from '@answer/api';
|
||||
import { PicAuthCodeModal } from '@answer/components/Modal';
|
||||
import type {
|
||||
ImgCodeRes,
|
||||
|
@ -53,7 +53,7 @@ const Index: React.FC<IProps> = ({ visible = false }) => {
|
|||
captcha_id: imgCode.captcha_id,
|
||||
};
|
||||
}
|
||||
emailReSend(obj)
|
||||
resendEmail(obj)
|
||||
.then(() => {
|
||||
setSuccess(true);
|
||||
setModalState(false);
|
||||
|
|
|
@ -23,7 +23,7 @@ import { useEditStatusModal, useReportModal } from '@answer/hooks';
|
|||
import {
|
||||
useQuestionSearch,
|
||||
changeQuestionStatus,
|
||||
questionDelete,
|
||||
deleteQuestion,
|
||||
} from '@answer/api';
|
||||
import * as Type from '@answer/common/interface';
|
||||
|
||||
|
@ -89,7 +89,7 @@ const Questions: FC = () => {
|
|||
confirmBtnVariant: 'danger',
|
||||
confirmText: t('delete', { keyPrefix: 'btns' }),
|
||||
onConfirm: () => {
|
||||
questionDelete({
|
||||
deleteQuestion({
|
||||
id,
|
||||
}).then(() => {
|
||||
refreshList();
|
||||
|
|
|
@ -9,7 +9,7 @@ import { scrollTop } from '@answer/utils';
|
|||
import { usePageUsers } from '@answer/hooks';
|
||||
import type {
|
||||
ListResult,
|
||||
QuDetailRes,
|
||||
QuestionDetailRes,
|
||||
AnswerItem,
|
||||
} from '@answer/common/interface';
|
||||
|
||||
|
@ -30,7 +30,7 @@ const Index = () => {
|
|||
|
||||
const page = Number(urlSearch.get('page') || 0);
|
||||
const order = urlSearch.get('order') || '';
|
||||
const [question, setQuestion] = useState<QuDetailRes | null>(null);
|
||||
const [question, setQuestion] = useState<QuestionDetailRes | null>(null);
|
||||
const [answers, setAnswers] = useState<ListResult<AnswerItem>>({
|
||||
count: -1,
|
||||
list: [],
|
||||
|
|
|
@ -2,10 +2,10 @@ import { FC, memo, useEffect, useState } from 'react';
|
|||
import { Form, Button } from 'react-bootstrap';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
|
||||
import { passRetrieve, checkImgCode } from '@answer/api';
|
||||
import { resetPassword, checkImgCode } from '@answer/api';
|
||||
import type {
|
||||
ImgCodeRes,
|
||||
PssRetReq,
|
||||
PasswordResetReq,
|
||||
FormDataType,
|
||||
} from '@answer/common/interface';
|
||||
|
||||
|
@ -70,7 +70,7 @@ const Index: FC<IProps> = ({ visible = false, callback }) => {
|
|||
if (e) {
|
||||
e.preventDefault();
|
||||
}
|
||||
const params: PssRetReq = {
|
||||
const params: PasswordResetReq = {
|
||||
e_mail: formData.e_mail.value,
|
||||
};
|
||||
if (imgCode.verify) {
|
||||
|
@ -78,7 +78,7 @@ const Index: FC<IProps> = ({ visible = false, callback }) => {
|
|||
params.captcha_id = imgCode.captcha_id;
|
||||
}
|
||||
|
||||
passRetrieve(params)
|
||||
resetPassword(params)
|
||||
.then(() => {
|
||||
callback?.(2, formData.e_mail.value);
|
||||
setModalState(false);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import { FC, memo, useEffect } from 'react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
|
||||
import { accountActivate } from '@answer/api';
|
||||
import { activateAccount } from '@answer/api';
|
||||
import { userInfoStore } from '@answer/stores';
|
||||
import { getQueryString } from '@answer/utils';
|
||||
|
||||
|
@ -14,7 +14,7 @@ const Index: FC = () => {
|
|||
const code = getQueryString('code');
|
||||
|
||||
if (code) {
|
||||
accountActivate(encodeURIComponent(code)).then((res) => {
|
||||
activateAccount(encodeURIComponent(code)).then((res) => {
|
||||
updateUser(res);
|
||||
setTimeout(() => {
|
||||
window.location.href = '/users/account-activation/success';
|
||||
|
|
|
@ -5,8 +5,8 @@ import { useParams, useNavigate } from 'react-router-dom';
|
|||
|
||||
import {
|
||||
useQueryNotifications,
|
||||
clearUnReadNotification,
|
||||
clearNotificationRedDot,
|
||||
clearUnreadNotification,
|
||||
clearNotificationStatus,
|
||||
readNotification,
|
||||
} from '@answer/api';
|
||||
import { PageTitle } from '@answer/components';
|
||||
|
@ -29,7 +29,7 @@ const Notifications = () => {
|
|||
});
|
||||
|
||||
useEffect(() => {
|
||||
clearNotificationRedDot(type);
|
||||
clearNotificationStatus(type);
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
|
@ -56,7 +56,7 @@ const Notifications = () => {
|
|||
};
|
||||
|
||||
const handleUnreadNotification = async () => {
|
||||
await clearUnReadNotification(type);
|
||||
await clearUnreadNotification(type);
|
||||
mutate();
|
||||
};
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ import { Container, Col, Form, Button } from 'react-bootstrap';
|
|||
import { Link } from 'react-router-dom';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
|
||||
import { passRetrieveSet } from '@answer/api';
|
||||
import { replacementPassword } from '@answer/api';
|
||||
import { userInfoStore } from '@answer/stores';
|
||||
import { getQueryString, isLogin } from '@answer/utils';
|
||||
import type { FormDataType } from '@answer/common/interface';
|
||||
|
@ -98,7 +98,7 @@ const Index: React.FC = () => {
|
|||
console.error('code is required');
|
||||
return;
|
||||
}
|
||||
passRetrieveSet({
|
||||
replacementPassword({
|
||||
code: encodeURIComponent(code),
|
||||
pass: formData.pass.value,
|
||||
})
|
||||
|
|
|
@ -3,7 +3,7 @@ import { Form, Button } from 'react-bootstrap';
|
|||
import { useTranslation } from 'react-i18next';
|
||||
|
||||
import type { FormDataType } from '@answer/common/interface';
|
||||
import { noticeSet, getUserInfo } from '@answer/api';
|
||||
import { setNotice, getUserInfo } from '@answer/api';
|
||||
import { useToast } from '@answer/hooks';
|
||||
|
||||
const Index = () => {
|
||||
|
@ -34,7 +34,7 @@ const Index = () => {
|
|||
const handleSubmit = (event: FormEvent) => {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
noticeSet({
|
||||
setNotice({
|
||||
notice_switch: formData.notice_switch.value,
|
||||
}).then(() => {
|
||||
toast.onShow({
|
||||
|
|
|
@ -29,7 +29,7 @@ export const readNotification = (id) => {
|
|||
});
|
||||
};
|
||||
|
||||
export const useQueryNotificationRedDot = () => {
|
||||
export const useQueryNotificationStatus = () => {
|
||||
const apiUrl = '/answer/api/v1/notification/status';
|
||||
|
||||
return useSWR<{ inbox: number; achievement: number }>(
|
||||
|
@ -41,13 +41,13 @@ export const useQueryNotificationRedDot = () => {
|
|||
);
|
||||
};
|
||||
|
||||
export const clearNotificationRedDot = (type) => {
|
||||
export const clearNotificationStatus = (type) => {
|
||||
return request.instance.put('/answer/api/v1/notification/status', {
|
||||
type,
|
||||
});
|
||||
};
|
||||
|
||||
export const clearUnReadNotification = (type) => {
|
||||
export const clearUnreadNotification = (type) => {
|
||||
return request.instance.put('/answer/api/v1/notification/read/state/all', {
|
||||
type,
|
||||
});
|
||||
|
|
|
@ -96,11 +96,11 @@ export const logout = () => {
|
|||
return request.get('/answer/api/v1/user/logout');
|
||||
};
|
||||
|
||||
export const emailVerify = (code: string) => {
|
||||
export const verifyEmail = (code: string) => {
|
||||
return request.get(`/answer/api/v1/email/verify?code=${code}`);
|
||||
};
|
||||
|
||||
export const emailReSend = (params?: Type.ImgCodeReq) => {
|
||||
export const resendEmail = (params?: Type.ImgCodeReq) => {
|
||||
params = qs.parse(
|
||||
qs.stringify(params, {
|
||||
skipNulls: true,
|
||||
|
@ -119,7 +119,7 @@ export const getUserInfo = () => {
|
|||
return request.get<Type.UserInfoRes>('/answer/api/v1/user/info');
|
||||
};
|
||||
|
||||
export const modifyPassword = (params: Type.ModifyPassReq) => {
|
||||
export const modifyPassword = (params: Type.ModifyPasswordReq) => {
|
||||
return request.post('/answer/api/v1/user/password/modify', params);
|
||||
};
|
||||
|
||||
|
@ -131,15 +131,15 @@ export const uploadAvatar = (params: Type.AvatarUploadReq) => {
|
|||
return request.post('/answer/api/v1/user/avatar/upload', params);
|
||||
};
|
||||
|
||||
export const passRetrieve = (params: Type.PssRetReq) => {
|
||||
export const resetPassword = (params: Type.PasswordResetReq) => {
|
||||
return request.post('/answer/api/v1/user/password/reset', params);
|
||||
};
|
||||
|
||||
export const passRetrieveSet = (params: { code: string; pass: string }) => {
|
||||
export const replacementPassword = (params: { code: string; pass: string }) => {
|
||||
return request.post('/answer/api/v1/user/password/replacement', params);
|
||||
};
|
||||
|
||||
export const accountActivate = (code: string) => {
|
||||
export const activateAccount = (code: string) => {
|
||||
return request.post(`/answer/api/v1/user/email/verification`, { code });
|
||||
};
|
||||
|
||||
|
@ -149,7 +149,7 @@ export const checkImgCode = (params: Type.CheckImgReq) => {
|
|||
);
|
||||
};
|
||||
|
||||
export const noticeSet = (params: Type.NoticeSetReq) => {
|
||||
export const setNotice = (params: Type.SetNoticeReq) => {
|
||||
return request.post('/answer/api/v1/user/notice/set', params);
|
||||
};
|
||||
|
||||
|
@ -158,7 +158,9 @@ export const saveQuestion = (params: Type.QuestionParams) => {
|
|||
};
|
||||
|
||||
export const questionDetail = (id: string) => {
|
||||
return request.get<Type.QuDetailRes>(`/answer/api/v1/question/info?id=${id}`);
|
||||
return request.get<Type.QuestionDetailRes>(
|
||||
`/answer/api/v1/question/info?id=${id}`,
|
||||
);
|
||||
};
|
||||
|
||||
export const langConfig = () => {
|
||||
|
@ -227,11 +229,11 @@ export const postReport = (params: {
|
|||
return request.post('/answer/api/v1/report', params);
|
||||
};
|
||||
|
||||
export const questionDelete = (params: { id: string }) => {
|
||||
export const deleteQuestion = (params: { id: string }) => {
|
||||
return request.delete('/answer/api/v1/question', params);
|
||||
};
|
||||
|
||||
export const answerDelete = (params: { id: string }) => {
|
||||
export const deleteAnswer = (params: { id: string }) => {
|
||||
return request.delete('/answer/api/v1/answer', params);
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue