add change inDutyCnt button and service

main
Dawn1Ocean 2024-03-19 19:12:33 +08:00
parent 787b37fc42
commit 599166e603
6 changed files with 154 additions and 12 deletions

View File

@ -78,9 +78,9 @@ export default {
success: true, success: true,
data: { data: {
token: 'token_test', token: 'token_test',
isInDuty: false, isInDuty: true,
offDutyReason: '废弃元器件创意设计大赛', inDutyCnt: 6,
dutyRecoverTime: '下周一', currentDuty: '3',
}, },
}, },
}; };

View File

@ -62,6 +62,11 @@ class Card extends Component {
} }
export class MemberDutyInfo extends Component { export class MemberDutyInfo extends Component {
state: {
isLoading: false;
isDisable: false;
};
props = { props = {
data: new MemberDutyData(), data: new MemberDutyData(),
}; };
@ -88,6 +93,12 @@ export class MemberDutyInfo extends Component {
return ( return (
<View> <View>
<Card isInDuty={data.isInDuty} /> <Card isInDuty={data.isInDuty} />
<View
style={{
display: 'flex',
alignItems: 'center',
}}
>
<AtTimeline <AtTimeline
items={[ items={[
{ title: id.currentDutyText(data.currentDuty || 'off') }, { title: id.currentDutyText(data.currentDuty || 'off') },
@ -95,6 +106,7 @@ export class MemberDutyInfo extends Component {
]} ]}
/> />
</View> </View>
</View>
); );
} }

View File

@ -1,6 +1,6 @@
import { View } from '@tarojs/components'; import { View } from '@tarojs/components';
import { Component, ReactNode } from 'react'; 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 Taro from '@tarojs/taro';
import pt from '@/plain-text'; import pt from '@/plain-text';
import { getUncompletedTicketList } from '@/service/uncompletedTicket'; import { getUncompletedTicketList } from '@/service/uncompletedTicket';
@ -10,11 +10,14 @@ import { RequestState } from '@/service';
import moment from 'moment'; import moment from 'moment';
import { getMemberDutyInfo } from '@/service/memberDutyInfo'; import { getMemberDutyInfo } from '@/service/memberDutyInfo';
import PageFooter from '@/components/PageFooter/PageFooter'; import PageFooter from '@/components/PageFooter/PageFooter';
import { changeDutyCnt } from '@/service/changeDutyCount';
import './member.scss'; import './member.scss';
import { MemberDutyData, MemberDutyInfo } from './MemberDutyInfo'; import { MemberDutyData, MemberDutyInfo } from './MemberDutyInfo';
import { MemberStepInfo, MemberTipsInfo } from './MemberStepTipsInfo'; import { MemberStepInfo, MemberTipsInfo } from './MemberStepTipsInfo';
import MemberTitleCard from './MemberTitleCard'; import MemberTitleCard from './MemberTitleCard';
const submitInterval = 5000;
class CardContent { class CardContent {
title: string; title: string;
note: string; note: string;
@ -64,15 +67,18 @@ interface MemberPageState {
fixList: Array<TicketListItem>; fixList: Array<TicketListItem>;
rs: RequestState; rs: RequestState;
dutyData: MemberDutyData; dutyData: MemberDutyData;
inDutyCnt: number;
dutyInfoCard: CardContent; dutyInfoCard: CardContent;
stepInfoCard: CardContent; stepInfoCard: CardContent;
tipsInfoCard: CardContent; tipsInfoCard: CardContent;
//rs: RequestState; isLoading: boolean;
isDisable: boolean;
} }
export default class MemberPage extends Component<{}, MemberPageState> { export default class MemberPage extends Component<{}, MemberPageState> {
state = { state = {
dutyData: new MemberDutyData(), dutyData: new MemberDutyData(),
inDutyCnt: 0,
dutyInfoCard: { dutyInfoCard: {
title: pt.get().mainPage.cardTitle.dutyInfo, title: pt.get().mainPage.cardTitle.dutyInfo,
note: pt.get().mainPage.cardTips.dutyInfo, note: pt.get().mainPage.cardTips.dutyInfo,
@ -91,9 +97,10 @@ export default class MemberPage extends Component<{}, MemberPageState> {
extra: pt.get().mainPage.extraInfo.dutyInfo, extra: pt.get().mainPage.extraInfo.dutyInfo,
content: () => <MemberTipsInfo />, content: () => <MemberTipsInfo />,
}, },
// rs: new RequestState(),
fixList: [new TicketListItem(0, '', '', 1, moment())], fixList: [new TicketListItem(0, '', '', 1, moment())],
rs: new RequestState(), rs: new RequestState(),
isLoading: false,
isDisable: false,
}; };
componentDidMount(): void { componentDidMount(): void {
@ -112,6 +119,25 @@ export default class MemberPage extends Component<{}, MemberPageState> {
} }
// 以上是TabBar相关 // 以上是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 { render(): ReactNode {
const memberPage = pt.get().memberPage; const memberPage = pt.get().memberPage;
if (this.state.rs.loading) { if (this.state.rs.loading) {
@ -128,6 +154,56 @@ export default class MemberPage extends Component<{}, MemberPageState> {
<View style={{ marginTop: '60rpx' }}> <View style={{ marginTop: '60rpx' }}>
{memberPageCard(this.state.dutyInfoCard)} {memberPageCard(this.state.dutyInfoCard)}
{memberPageCard(this.state.tipsInfoCard)} {memberPageCard(this.state.tipsInfoCard)}
{this.state.dutyData.isInDuty ? (
<ExpandItem
title={memberPage.expandTitle.admin}
content={
<View
style={{
display: 'flex',
alignItems: 'center',
marginBottom: '40rpx',
}}
>
<View
className='.at-article__h3'
style={{
marginTop: '40rpx',
}}
>
{pt.get().memberPage.dutyCount.text}
</View>
<View
style={{
marginTop: '40rpx',
}}
>
<AtInputNumber
type='number'
min={0}
max={10}
step={1}
value={this.state.inDutyCnt}
onChange={this.handleCnt.bind(this)}
/>
</View>
<View style={{ marginLeft: 'auto', marginTop: '40rpx' }}>
<AtButton
type='secondary'
size='small'
loading={this.state.isLoading}
disabled={this.state.isDisable}
onClick={this.onChangeCnt.bind(this)}
>
{pt.get().memberPage.dutyCount.button}
</AtButton>
</View>
</View>
}
/>
) : (
<View></View>
)}
<ExpandItem <ExpandItem
title={memberPage.expandTitle.stepInfo} title={memberPage.expandTitle.stepInfo}
content={memberPageCard(this.state.stepInfoCard)} content={memberPageCard(this.state.stepInfoCard)}

View File

@ -1,6 +1,10 @@
export interface MemberPageText { export interface MemberPageText {
mainTitleLine: string; mainTitleLine: string;
subTitleLine: string; subTitleLine: string;
dutyCount: {
button: string;
text: string;
};
stuidText: { stuidText: {
title: string; title: string;
placeholder: string; placeholder: string;
@ -27,6 +31,7 @@ export interface MemberPageText {
expandTitle: { expandTitle: {
stepInfo: string; stepInfo: string;
tipsInfo: string; tipsInfo: string;
admin: string;
}; };
stepList: Array<{ title: string }>; stepList: Array<{ title: string }>;
tipsList: Array<{ title: string }>; tipsList: Array<{ title: string }>;
@ -35,6 +40,10 @@ export interface MemberPageText {
export const memberPageZhCn: MemberPageText = { export const memberPageZhCn: MemberPageText = {
mainTitleLine: '您好这里是E志者协会', mainTitleLine: '您好这里是E志者协会',
subTitleLine: '祝你满绩每一天', subTitleLine: '祝你满绩每一天',
dutyCount: {
button: '更新值班人数',
text: '当前值班人数:',
},
stuidText: { stuidText: {
title: '学号', title: '学号',
placeholder: '与统一身份认证学号一致', placeholder: '与统一身份认证学号一致',
@ -74,6 +83,7 @@ export const memberPageZhCn: MemberPageText = {
expandTitle: { expandTitle: {
stepInfo: '查看维修步骤', stepInfo: '查看维修步骤',
tipsInfo: '查看注意事项', tipsInfo: '查看注意事项',
admin: '组长管理入口',
}, },
stepList: [ stepList: [
{ title: '机主线上填写工单,审核接取维修后加入 Oreo' }, { title: '机主线上填写工单,审核接取维修后加入 Oreo' },
@ -92,6 +102,10 @@ export const memberPageZhCn: MemberPageText = {
export const memberPageEnUs: MemberPageText = { export const memberPageEnUs: MemberPageText = {
mainTitleLine: 'Hi! This is EVA.', mainTitleLine: 'Hi! This is EVA.',
subTitleLine: 'Have a great day!', subTitleLine: 'Have a great day!',
dutyCount: {
button: 'Update Duty Count',
text: 'The duty count: ',
},
stuidText: { stuidText: {
title: 'Student ID', title: 'Student ID',
placeholder: 'Consistent with EVA Auth', placeholder: 'Consistent with EVA Auth',
@ -131,6 +145,7 @@ export const memberPageEnUs: MemberPageText = {
expandTitle: { expandTitle: {
stepInfo: 'Check for maintenance steps', stepInfo: 'Check for maintenance steps',
tipsInfo: 'Check for tips', tipsInfo: 'Check for tips',
admin: 'Entry for admin',
}, },
stepList: [ stepList: [
{ title: 'The owner fills out ticket online. Add it to Oreo after audit.' }, { title: 'The owner fills out ticket online. Add it to Oreo after audit.' },

View File

@ -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',
});
});
}

View File

@ -19,6 +19,7 @@ export function getMemberDutyInfo(that: MemberPage) {
inDutyCnt: data.inDutyCnt, inDutyCnt: data.inDutyCnt,
currentDuty: data.currentDuty, currentDuty: data.currentDuty,
}, },
inDutyCnt: data.inDutyCnt,
}); });
} else { } else {
that.setState({ that.setState({