diff --git a/mock/api.ts b/mock/api.ts index 98e0133..f4209c5 100644 --- a/mock/api.ts +++ b/mock/api.ts @@ -78,9 +78,9 @@ export default { success: true, data: { token: 'token_test', - isInDuty: false, - offDutyReason: '废弃元器件创意设计大赛', - dutyRecoverTime: '下周一', + isInDuty: true, + inDutyCnt: 6, + currentDuty: '3', }, }, }; diff --git a/src/pages/member/MemberDutyInfo.tsx b/src/pages/member/MemberDutyInfo.tsx index e846738..14b6a44 100644 --- a/src/pages/member/MemberDutyInfo.tsx +++ b/src/pages/member/MemberDutyInfo.tsx @@ -62,6 +62,11 @@ class Card extends Component { } export class MemberDutyInfo extends Component { + state: { + isLoading: false; + isDisable: false; + }; + props = { data: new MemberDutyData(), }; @@ -88,12 +93,19 @@ export class MemberDutyInfo extends Component { return ( - + + + ); } diff --git a/src/pages/member/member.tsx b/src/pages/member/member.tsx index d0c8993..bb2a19b 100644 --- a/src/pages/member/member.tsx +++ b/src/pages/member/member.tsx @@ -1,6 +1,6 @@ import { View } from '@tarojs/components'; import { Component, ReactNode } from 'react'; -import { AtAccordion, AtButton, AtCard, AtList } from 'taro-ui'; +import { AtAccordion, AtButton, AtCard, AtInputNumber, AtList } from 'taro-ui'; import Taro from '@tarojs/taro'; import pt from '@/plain-text'; import { getUncompletedTicketList } from '@/service/uncompletedTicket'; @@ -10,11 +10,14 @@ import { RequestState } from '@/service'; import moment from 'moment'; import { getMemberDutyInfo } from '@/service/memberDutyInfo'; import PageFooter from '@/components/PageFooter/PageFooter'; +import { changeDutyCnt } from '@/service/changeDutyCount'; import './member.scss'; import { MemberDutyData, MemberDutyInfo } from './MemberDutyInfo'; import { MemberStepInfo, MemberTipsInfo } from './MemberStepTipsInfo'; import MemberTitleCard from './MemberTitleCard'; +const submitInterval = 5000; + class CardContent { title: string; note: string; @@ -64,15 +67,18 @@ interface MemberPageState { fixList: Array; rs: RequestState; dutyData: MemberDutyData; + inDutyCnt: number; dutyInfoCard: CardContent; stepInfoCard: CardContent; tipsInfoCard: CardContent; - //rs: RequestState; + isLoading: boolean; + isDisable: boolean; } export default class MemberPage extends Component<{}, MemberPageState> { state = { dutyData: new MemberDutyData(), + inDutyCnt: 0, dutyInfoCard: { title: pt.get().mainPage.cardTitle.dutyInfo, note: pt.get().mainPage.cardTips.dutyInfo, @@ -91,9 +97,10 @@ export default class MemberPage extends Component<{}, MemberPageState> { extra: pt.get().mainPage.extraInfo.dutyInfo, content: () => , }, - // rs: new RequestState(), fixList: [new TicketListItem(0, '', '', 1, moment())], rs: new RequestState(), + isLoading: false, + isDisable: false, }; componentDidMount(): void { @@ -112,6 +119,25 @@ export default class MemberPage extends Component<{}, MemberPageState> { } // 以上是TabBar相关 + handleCnt(inDutyCnt: number) { + this.setState({ + inDutyCnt: inDutyCnt, + }); + return inDutyCnt; + } + + onChangeCnt() { + this.setState({ + isDisable: true, + }); + changeDutyCnt(this); + setTimeout(() => { + this.setState({ + isDisable: false, + }); + }, submitInterval); + } + render(): ReactNode { const memberPage = pt.get().memberPage; if (this.state.rs.loading) { @@ -128,6 +154,56 @@ export default class MemberPage extends Component<{}, MemberPageState> { {memberPageCard(this.state.dutyInfoCard)} {memberPageCard(this.state.tipsInfoCard)} + {this.state.dutyData.isInDuty ? ( + + + {pt.get().memberPage.dutyCount.text} + + + + + + + {pt.get().memberPage.dutyCount.button} + + + + } + /> + ) : ( + + )} ; tipsList: Array<{ title: string }>; @@ -35,6 +40,10 @@ export interface MemberPageText { export const memberPageZhCn: MemberPageText = { mainTitleLine: '您好,这里是E志者协会', subTitleLine: '祝你满绩每一天', + dutyCount: { + button: '更新值班人数', + text: '当前值班人数:', + }, stuidText: { title: '学号', placeholder: '与统一身份认证学号一致', @@ -74,6 +83,7 @@ export const memberPageZhCn: MemberPageText = { expandTitle: { stepInfo: '查看维修步骤', tipsInfo: '查看注意事项', + admin: '组长管理入口', }, stepList: [ { title: '机主线上填写工单,审核接取维修后加入 Oreo' }, @@ -92,6 +102,10 @@ export const memberPageZhCn: MemberPageText = { export const memberPageEnUs: MemberPageText = { mainTitleLine: 'Hi! This is EVA.', subTitleLine: 'Have a great day!', + dutyCount: { + button: 'Update Duty Count', + text: 'The duty count: ', + }, stuidText: { title: 'Student ID', placeholder: 'Consistent with EVA Auth', @@ -131,6 +145,7 @@ export const memberPageEnUs: MemberPageText = { expandTitle: { stepInfo: 'Check for maintenance steps', tipsInfo: 'Check for tips', + admin: 'Entry for admin', }, stepList: [ { title: 'The owner fills out ticket online. Add it to Oreo after audit.' }, diff --git a/src/service/changeDutyCount.ts b/src/service/changeDutyCount.ts new file mode 100644 index 0000000..18fe5eb --- /dev/null +++ b/src/service/changeDutyCount.ts @@ -0,0 +1,38 @@ +import MemberPage from '@/pages/member/member'; +import Taro from '@tarojs/taro'; +import pt from '@/plain-text'; +import { getUrl } from '.'; + +export function changeDutyCnt(that: MemberPage) { + that.setState({ + isLoading: true, + }); + Taro.request({ + url: getUrl('/tickets/addtooreo'), + method: 'POST', + data: { + token: 'token_test', + dutyCnt: that.state.inDutyCnt, + }, + }) + .then((res) => { + console.log(res.data); + that.setState({ + isLoading: false, + }); + Taro.atMessage({ + message: pt.get().button.submitText.success, + type: 'success', + }); + }) + .catch((err) => { + console.log(err); + that.setState({ + isLoading: false, + }); + Taro.atMessage({ + message: pt.get().button.submitText.error + err.toString(), + type: 'error', + }); + }); +} diff --git a/src/service/memberDutyInfo.ts b/src/service/memberDutyInfo.ts index fcf633f..b08351d 100644 --- a/src/service/memberDutyInfo.ts +++ b/src/service/memberDutyInfo.ts @@ -19,6 +19,7 @@ export function getMemberDutyInfo(that: MemberPage) { inDutyCnt: data.inDutyCnt, currentDuty: data.currentDuty, }, + inDutyCnt: data.inDutyCnt, }); } else { that.setState({