From 1cf16472d25d388eff0d4194fec8f613d2053a1e Mon Sep 17 00:00:00 2001 From: Dawn1Ocean <1785590531@qq.com> Date: Mon, 25 Mar 2024 23:04:33 +0800 Subject: [PATCH] add ticketList page --- src/app.config.ts | 1 + src/pages/TicketList/TicketList.config.ts | 3 ++ src/pages/TicketList/TicketList.scss | 0 src/pages/TicketList/TicketList.tsx | 44 +++++++++++++++++++ src/pages/index/index.tsx | 2 +- src/plain-text/NavBarTitle.ts | 3 ++ src/service/ticketList.ts | 52 +++++++++++++++++++++++ 7 files changed, 104 insertions(+), 1 deletion(-) create mode 100644 src/pages/TicketList/TicketList.config.ts create mode 100644 src/pages/TicketList/TicketList.scss create mode 100644 src/pages/TicketList/TicketList.tsx create mode 100644 src/service/ticketList.ts diff --git a/src/app.config.ts b/src/app.config.ts index 472a856..e8f67f1 100644 --- a/src/app.config.ts +++ b/src/app.config.ts @@ -9,6 +9,7 @@ export default defineAppConfig({ 'pages/user/report/report', 'pages/user/member/member', 'pages/TicketDetail/TicketDetail', + 'pages/ticketList/ticketList', ], window: { backgroundTextStyle: 'light', diff --git a/src/pages/TicketList/TicketList.config.ts b/src/pages/TicketList/TicketList.config.ts new file mode 100644 index 0000000..a9ca517 --- /dev/null +++ b/src/pages/TicketList/TicketList.config.ts @@ -0,0 +1,3 @@ +export default definePageConfig({ + usingComponents: {}, +}); diff --git a/src/pages/TicketList/TicketList.scss b/src/pages/TicketList/TicketList.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/pages/TicketList/TicketList.tsx b/src/pages/TicketList/TicketList.tsx new file mode 100644 index 0000000..8cf3d0b --- /dev/null +++ b/src/pages/TicketList/TicketList.tsx @@ -0,0 +1,44 @@ +import { Component, ReactNode } from 'react'; +import { View } from '@tarojs/components'; +import { AtList } from 'taro-ui'; +import Taro from '@tarojs/taro'; +import moment from 'moment'; +import pt from '@/plain-text'; +import { RequestState } from '@/service'; +import { getTicketList } from '@/service/ticketList'; +import { TicketListItem } from '@/components/TicketListItem/TicketListItem'; +import './TicketList.scss'; + +interface TicketListState { + fixList: Array; + rs: RequestState; +} + +export default class TicketListPage extends Component<{}, TicketListState> { + state = { + fixList: [new TicketListItem(0, '', '', 1, moment())], + rs: new RequestState(), + }; + + componentDidMount(): void { + Taro.setNavigationBarTitle({ + title: pt.get().navBar.ticketList, + }); + getTicketList(this); + } + + 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 ( + + {fixListRenderer} + + ); + } +} diff --git a/src/pages/index/index.tsx b/src/pages/index/index.tsx index 7a64573..3c26484 100644 --- a/src/pages/index/index.tsx +++ b/src/pages/index/index.tsx @@ -175,7 +175,7 @@ export default class MainPage extends Component<{}, MainPageState> { ticketListPage() { Taro.navigateTo({ - url: '/pages/user/report/report', + url: '/pages/ticketList/ticketList', }); } diff --git a/src/plain-text/NavBarTitle.ts b/src/plain-text/NavBarTitle.ts index ba5eff5..fcf54bf 100644 --- a/src/plain-text/NavBarTitle.ts +++ b/src/plain-text/NavBarTitle.ts @@ -1,5 +1,6 @@ export interface NavBarTitle { ticketDetail: string; + ticketList: string; user: { myTicket: string; report: string; @@ -12,6 +13,7 @@ export interface NavBarTitle { export const navBarTitleZhCn: NavBarTitle = { ticketDetail: '工单详情', + ticketList: '所有工单', user: { myTicket: '我的工单', report: '意见反馈', @@ -24,6 +26,7 @@ export const navBarTitleZhCn: NavBarTitle = { export const navBarTitleEnUs: NavBarTitle = { ticketDetail: 'Ticket Detail', + ticketList: 'All Tickets', user: { myTicket: 'My Tickets', report: 'Report', diff --git a/src/service/ticketList.ts b/src/service/ticketList.ts new file mode 100644 index 0000000..8d2d522 --- /dev/null +++ b/src/service/ticketList.ts @@ -0,0 +1,52 @@ +import TicketListPage from '@/pages/TicketList/TicketList'; +import { TicketListItem } from '@/components/TicketListItem/TicketListItem'; +import Taro from '@tarojs/taro'; +import moment from 'moment'; +import { FixStatus } from '@/common'; +import wechatUser from '@/wechat'; +import { getUrl } from '.'; + +export function getTicketList(that: TicketListPage) { + Taro.request({ + url: getUrl('/tickets/list'), + method: 'GET', + data: { + token: wechatUser.getToken(), + }, + }) + .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.data.map( + (item: { + id: number; + device: string; + deviceModel: string; + status: FixStatus; + createdTime: moment.MomentInput; + }) => + new TicketListItem( + item.id, + item.device, + item.deviceModel, + item.status, + moment(item.createdTime), + ), + ), + }); + }) + .catch((reason) => { + let former = that.state.rs; + that.setState({ + rs: former.trans(false), + }); + console.log(reason); + }); +}