From 5614ce58181d11029a44d2580388365279b77110 Mon Sep 17 00:00:00 2001 From: Dawn1Ocean <1785590531@qq.com> Date: Fri, 15 Mar 2024 00:54:05 +0800 Subject: [PATCH] add uncompleted ticket list in member page --- .../TicketListItem/TicketListItem.tsx | 9 +++- src/pages/TicketDetail/TicketDetail.tsx | 24 +++++++++- src/pages/member/member.tsx | 38 ++++++++++++++-- src/pages/repair/repair.tsx | 1 - src/pages/user/member/member.tsx | 2 +- src/pages/user/myTicket/myTicket.tsx | 2 +- src/plain-text/MemberPage.ts | 9 ++++ src/plain-text/NavBarTitle.ts | 9 ++-- src/plain-text/TicketDetail.ts | 3 ++ src/service/uncompletedTicket.ts | 45 +++++++++++++++++++ 10 files changed, 130 insertions(+), 12 deletions(-) create mode 100644 src/service/uncompletedTicket.ts diff --git a/src/components/TicketListItem/TicketListItem.tsx b/src/components/TicketListItem/TicketListItem.tsx index 316c2e5..5a3f277 100644 --- a/src/components/TicketListItem/TicketListItem.tsx +++ b/src/components/TicketListItem/TicketListItem.tsx @@ -15,6 +15,7 @@ export class TicketListItem { status: FixStatus; createAt: moment.Moment; iconMap: Map; + isMember: boolean; constructor( id: number, @@ -22,12 +23,14 @@ export class TicketListItem { model: string, status: FixStatus, createAt: moment.Moment, + isMember: boolean, ) { this.id = id; this.brand = brand; this.model = model; this.status = status; this.createAt = createAt; + this.isMember = isMember; this.iconMap = new Map([ [1, repair], [2, repair], @@ -48,7 +51,11 @@ export class TicketListItem { thumb={this.iconMap.get(this.status)} onClick={() => { Taro.navigateTo({ - url: '/pages/TicketDetail/TicketDetail?id=' + this.id, + url: + '/pages/TicketDetail/TicketDetail?id=' + + this.id + + '&isMember=' + + this.isMember, }); }} /> diff --git a/src/pages/TicketDetail/TicketDetail.tsx b/src/pages/TicketDetail/TicketDetail.tsx index 0d61d5c..196d2ef 100644 --- a/src/pages/TicketDetail/TicketDetail.tsx +++ b/src/pages/TicketDetail/TicketDetail.tsx @@ -8,23 +8,45 @@ import PageFooter from '@/components/PageFooter/PageFooter'; interface TicketDetailState { id: number; + isMember: boolean; } export default class TicketDetail extends Component<{}, TicketDetailState> { state: Readonly = { id: 0, + isMember: false, }; componentDidMount(): void { const { router } = getCurrentInstance(); const id = router?.params.id as number; + const isMember = router?.params.isMember as boolean; this.setState({ id: id, + isMember: isMember, }); } render(): ReactNode { - const middleButton = ( + const middleButton = this.state.isMember ? ( + + + {pt.get().ticketDetail.addToOreo} + + + {pt.get().ticketDetail.addNote} + + + ) : ( ; + rs: RequestState; +} + +export default class MemberPage extends Component<{}, UncompletedTicketState> { + state = { + fixList: [new TicketListItem(0, '', '', 1, moment(), false)], + rs: new RequestState(), + }; + + componentDidMount(): void { + Taro.setNavigationBarTitle({ + title: pt.get().navBar.user.member, + }); + getUncompletedTicketList(this); + } + // 以下是TabBar相关 pageCtx = Taro.getCurrentInstance().page; componentDidShow() { @@ -14,9 +37,16 @@ export default class MemberPage extends Component { // 以上是TabBar相关 render(): ReactNode { + if (this.state.rs.loading) { + return loading; + } + if (!this.state.rs.success) { + return Failed; + } + const fixListRenderer = this.state.fixList.map((item) => item.render()); return ( - Member Page + {fixListRenderer} ); } diff --git a/src/pages/repair/repair.tsx b/src/pages/repair/repair.tsx index 8de232e..ff5011c 100644 --- a/src/pages/repair/repair.tsx +++ b/src/pages/repair/repair.tsx @@ -186,7 +186,6 @@ export default class RepairPage extends Component<{}, RepairPageState> { /> )); - console.log(ticketsRenderer); return ( diff --git a/src/pages/user/member/member.tsx b/src/pages/user/member/member.tsx index 8139c26..f0237c2 100644 --- a/src/pages/user/member/member.tsx +++ b/src/pages/user/member/member.tsx @@ -16,7 +16,7 @@ export default class MemberPage extends Component { }; componentDidMount(): void { Taro.setNavigationBarTitle({ - title: pt.get().navBar.user.member, + title: pt.get().navBar.user.memberLogin, }); } handleChangeStuid(stuid: string) { diff --git a/src/pages/user/myTicket/myTicket.tsx b/src/pages/user/myTicket/myTicket.tsx index e4ac320..cce0889 100644 --- a/src/pages/user/myTicket/myTicket.tsx +++ b/src/pages/user/myTicket/myTicket.tsx @@ -16,7 +16,7 @@ interface MyTicketState { export default class MyTicketPage extends Component<{}, MyTicketState> { state = { - fixList: [new TicketListItem(0, '', '', 1, moment())], + fixList: [new TicketListItem(0, '', '', 1, moment(), false)], rs: new RequestState(), }; diff --git a/src/plain-text/MemberPage.ts b/src/plain-text/MemberPage.ts index 2165d63..5d00e46 100644 --- a/src/plain-text/MemberPage.ts +++ b/src/plain-text/MemberPage.ts @@ -7,6 +7,9 @@ export interface MemberPageText { title: string; placeholder: string; }; + uncompletedTicket: { + extra: string; + }; } export const memberPageZhCn: MemberPageText = { @@ -18,6 +21,9 @@ export const memberPageZhCn: MemberPageText = { title: '密码', placeholder: '与 EVA 统一身份认证一致', }, + uncompletedTicket: { + extra: '详细信息', + }, }; export const memberPageEnUs: MemberPageText = { @@ -29,4 +35,7 @@ export const memberPageEnUs: MemberPageText = { title: 'Password', placeholder: 'Consistent with EVA Auth', }, + uncompletedTicket: { + extra: 'Details', + }, }; diff --git a/src/plain-text/NavBarTitle.ts b/src/plain-text/NavBarTitle.ts index 63f6406..ba5eff5 100644 --- a/src/plain-text/NavBarTitle.ts +++ b/src/plain-text/NavBarTitle.ts @@ -3,9 +3,10 @@ export interface NavBarTitle { user: { myTicket: string; report: string; - member: string; + memberLogin: string; inform: string; about: string; + member: string; }; } @@ -16,7 +17,8 @@ export const navBarTitleZhCn: NavBarTitle = { report: '意见反馈', inform: '我的信息', about: '关于我们', - member: '协会成员登录', + memberLogin: '协会成员登录', + member: '协会成员', }, }; @@ -27,6 +29,7 @@ export const navBarTitleEnUs: NavBarTitle = { report: 'Report', inform: 'Information', about: 'About us', - member: 'Member login', + memberLogin: 'Member login', + member: 'Member Page', }, }; diff --git a/src/plain-text/TicketDetail.ts b/src/plain-text/TicketDetail.ts index cdfa88f..c79eafe 100644 --- a/src/plain-text/TicketDetail.ts +++ b/src/plain-text/TicketDetail.ts @@ -11,6 +11,7 @@ export interface TicketDetailText { statusModifyMessage: Map; descTitle: string; tookAway: string; + addToOreo: string; addNote: string; } @@ -32,6 +33,7 @@ export const ticketDetailZhCn: TicketDetailText = { ]), descTitle: '问题描述', tookAway: '已取回', + addToOreo: '加入 Oreo', addNote: '添加评论', }; @@ -53,5 +55,6 @@ export const ticketDetailEnUs: TicketDetailText = { ]), descTitle: 'Problem description', tookAway: 'Already retrieved', + addToOreo: 'Add to Oreo', addNote: 'Add a comment', }; diff --git a/src/service/uncompletedTicket.ts b/src/service/uncompletedTicket.ts new file mode 100644 index 0000000..64f10ba --- /dev/null +++ b/src/service/uncompletedTicket.ts @@ -0,0 +1,45 @@ +import MemberPage from '@/pages/member/member'; +import Taro from '@tarojs/taro'; +import { TicketListItem } from '@/components/TicketListItem/TicketListItem'; +import moment from 'moment'; +import { getUrl } from '.'; + +export function getUncompletedTicketList(that: MemberPage) { + Taro.request({ + url: getUrl('/member/tickets/uncompleted'), + method: 'GET', + data: { + token: 'token_test', + }, + }) + .then((res) => { + let former = that.state.rs; + if (!res.data.success) { + that.setState({ + rs: former.trans(false), + }); + return; + } + that.setState({ + rs: former.trans(true), + fixList: res.data.data.list.map( + (item) => + new TicketListItem( + item.id, + item.device, + item.deviceModel, + item.status, + moment(item.createdTime), + true, + ), + ), + }); + }) + .catch((reason) => { + let former = that.state.rs; + that.setState({ + rs: former.trans(false), + }); + console.log(reason); + }); +}