123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303 |
- import {Button, message} from 'antd';
- import React, {useEffect} from 'react';
- import {PageHeaderWrapper} from '@ant-design/pro-layout';
- import {useSingleState} from 'nice-hooks';
- import Quill from "@/pages/Memory/components/Quill";
- import {TableListItem} from '../MemoryList/data.d';
- import service from './service';
- import UpdateForm from "@/pages/Memory/components/UpdateForm";
- import styles from './index.less'
- enum Step {
- MAIN = 0,
- MEMORY = 1,
- ADD = 2,
- }
- interface State {
- remindCount: number;
- step: Step;
- showBack?: boolean;
- }
- const TableList: React.FC<{}> = () => {
- const [state, setState] = useSingleState<State>({
- remindCount: 0,
- step: Step.MAIN, // 0 主页,1 复习,2 添加
- showBack: false,
- });
- const [memory, setMemory] = useSingleState<TableListItem>({
- back: "",
- front: "",
- id: undefined,
- period: 0,
- remindTime: new Date(),
- tag: "",
- updateTime: "",
- userId: 0
- });
- /**
- * 查询用户待提醒数量
- * @param fields
- */
- const countRemind = async () => {
- const hide = message.loading('正在查询');
- try {
- const res = await service.countRemind({});
- hide();
- if (res.success) {
- setState({remindCount: parseInt(res.data, 10)});
- }
- } catch (error) {
- hide();
- message.error('查询异常!');
- }
- };
- useEffect(() => {
- countRemind();
- setTimeout(() => {
- countRemind();
- }, 1000 * 60 * 60) // 每隔一个小时查询一次
- document.onkeydown = (ev)=> {
- if (ev.key === ' ' && state.step === Step.MEMORY) {
- ev.preventDefault(); // 关闭浏览器快捷键
- if (state.showBack == false) {
- setState({showBack: true});
- } else {
- memorySuccess(2);
- }
- }
- }
- }, []);
- /**
- * 清空memory
- */
- const clearMemory = () => {
- setMemory({
- id: undefined,
- front: '',
- back: '',
- });
- };
- /**
- * 每次修改step,都关闭背面
- */
- useEffect(() => {
- setState({showBack: false});
- clearMemory();
- }, [state.step]);
- useEffect(() => {
- // console.log(state)
- // console.log(memory)
- });
- /**
- * 进入统计页面
- */
- const changStepMain = () => {
- setState({step: Step.MAIN});
- countRemind();
- };
- const findNextLine = async () => {
- const res = await service.findNext({});
- if (res.success) {
- setMemory({...memory, ...res.data});
- } else {
- changStepMain();
- }
- };
- /**
- * 初次进入复习页面
- */
- const changStepMemory = async () => {
- if (state.remindCount <= 0) {
- message.info('已经复习完了哟!');
- return;
- }
- setState({step: Step.MEMORY});
- await findNextLine();
- };
- /**
- * 处理返回值
- * @param res
- */
- const memoryRes = (res: any) => {
- if (res.success) {
- setState({showBack: false});
- setMemory({...memory, ...res.data});
- } else {
- changStepMain();
- }
- }
- const memorySuccess = async (factorInt: number) => {
- memoryRes(await service.memorySuccess({id: memory.id, factor: factorInt}));
- };
- const changStepAdd = () => {
- setState({step: Step.ADD});
- };
- return (
- <PageHeaderWrapper title={false}>
- {state.step === Step.MAIN ? (
- <div>
- <div>待复习: {state.remindCount}</div>
- <p/>
- <Button type="primary" size="large" onClick={changStepMemory}>
- 复习
- </Button>
- <p/>
- <Button type="primary" size="large" onClick={changStepAdd}>
- 添加
- </Button>
- </div>
- ) : null}
- {state.step === Step.MEMORY ? (
- <div>
- 问题:
- <p/>
- <Quill
- readonly
- onChange={() => {
- }}
- value={memory.front}/>
- <p/>
- {state.showBack ? (
- <div>
- <Quill
- readonly
- onChange={() => {
- }}
- value={memory.back}/>
- <p/>
- <div className={styles.divBottom}>
- <Button
- type="primary"
- onClick={() => {
- memorySuccess(0.5);
- }}
- >
- 生疏
- </Button>
- <span> </span>
- <Button
- type="primary"
- onClick={() => {
- memorySuccess(2);
- }}
- >
- 一般(空格)
- </Button>
- <span> </span>
- <Button
- type="primary"
- onClick={() => {
- memorySuccess(3);
- }}
- >
- 简单
- </Button>
- <span> </span>
- <Button
- type="primary"
- onClick={async () => {
- memoryRes(await service.delay(memory));
- }}
- >
- 搁置
- </Button>
- <p/>
- <div>
- <Button
- type="primary"
- onClick={async () => {
- memoryRes(await service.restart(memory));
- }}
- >
- 重新开始复习
- </Button>
- <span> </span>
- <Button
- type="primary"
- onClick={async () => {
- memoryRes(await service.noMemory(memory));
- }}
- >
- 不在复习
- </Button>
- <span> </span>
- <Button
- type="primary"
- onClick={async () => {
- memoryRes(await service.delete(memory));
- }}
- >
- 删除
- </Button>
- </div>
- <p/>
- <div>
- <Button
- type="primary"
- onClick={() => {
- changStepAdd();
- }}
- >
- 编辑
- </Button>
- <span> </span>
- <Button
- type="primary"
- onClick={() => {
- changStepMain();
- }}
- >
- 关闭
- </Button>
- </div>
- </div>
- </div>
- ) : (
- <div>
- <Button
- type="primary"
- onClick={() => {
- setState({showBack: true});
- }}
- >
- 显示答案(空格)
- </Button>
- </div>
- )}
- </div>
- ) : null}
- {state.step === Step.ADD ? (
- <UpdateForm
- onCancel={() => {
- changStepMain();
- }}
- modalVisible={state.step === Step.ADD}
- values={memory}>
- </UpdateForm>
- ) : null}
- </PageHeaderWrapper>
- );
- };
- export default TableList;
|