4 Commits
14 changed files with 180 additions and 38 deletions
+1 -1
View File
@@ -3,7 +3,7 @@
{
"id": 6830,
"type": 1,
"status": 5,
"status": 2,
"device": "主机",
"deviceModel": "技嘉",
"owner": "武技栏",
+2 -2
View File
@@ -1,5 +1,5 @@
{
"id": 6847,
"id": 6830,
"type": 1,
"device": "华硕",
"deviceModel": "灵耀X14",
@@ -8,7 +8,7 @@
"description": "清灰",
"workers": [],
"createdTime": "2024-03-07T19:52:48.523303",
"status": 5,
"status": 2,
"isConfirmed": false,
"notes": [
{
+1 -1
View File
@@ -1,7 +1,7 @@
{
"list": [
{
"id": 6830,
"id": 6832,
"type": 1,
"status": 2,
"device": "ROG",
@@ -1,14 +1,21 @@
import { View } from '@tarojs/components';
import { AtCard, AtSteps } from 'taro-ui';
import { Component, ReactNode } from 'react';
import Taro from '@tarojs/taro';
import { TicketInfo, TicketNote } from '@/pages/TicketDetail/TicketNote';
import NoteList from '@/components/NoteList/NoteList';
import PageFooter from '@/components/PageFooter/PageFooter';
import {
ShowElements,
TicketInfo,
TicketNote,
} from '@/pages/TicketDetail/TicketNote';
import pt from '@/plain-text';
import { RequestState } from '@/service';
import { getTicketInfo } from '@/service/ticketsInfo';
import { FixStatus } from '@/common';
import { AtCard, AtSteps } from 'taro-ui';
import NoteList from '../NoteList/NoteList';
interface StepItemData {
title: string;
}
const mapStatusStep: Map<FixStatus, 0 | 1 | 2 | 3> = new Map([
[1, 0],
@@ -18,10 +25,6 @@ const mapStatusStep: Map<FixStatus, 0 | 1 | 2 | 3> = new Map([
[5, 3],
]);
interface StepItemData {
title: string;
}
interface DetailFrameworkState {
current: number;
items: Array<StepItemData>;
@@ -33,6 +36,7 @@ interface DetailFrameworkState {
interface DetailFrameworkProps {
middleButton: JSX.Element;
id: number;
isInfoShow: { [key: string]: boolean };
}
export default class DetailFramework extends Component<
@@ -52,16 +56,20 @@ export default class DetailFramework extends Component<
Taro.setNavigationBarTitle({
title: navBar.ticketDetail,
});
const items = pt.get().ticketDetail.stepItems;
this.setState({
items: items,
});
getTicketInfo(this, this.props.id);
}
props: Readonly<DetailFrameworkProps> = {
middleButton: <View></View>,
id: 0,
isInfoShow: {
device: true,
createdTime: true,
description: true,
current: true,
notelist: true,
showAllNotes: true,
},
};
render(): ReactNode {
@@ -74,18 +82,27 @@ export default class DetailFramework extends Component<
const status = this.state.ticketInfo.status;
this.setState({
current: mapStatusStep.get(status) || 0,
items: pt.get().ticketDetail.stepItems,
});
return (
<View>
const elements: ShowElements = {
device: this.props.isInfoShow['device'] ? (
<View className='at-article__h1'>
{this.state.ticketInfo.device +
' ' +
this.state.ticketInfo.deviceModel}
</View>
) : (
<View></View>
),
createdTime: this.props.isInfoShow['createdTime'] ? (
<View className='at-article__info'>
{pt.get().common.createdAtText(this.state.ticketInfo.createdTime)}
</View>
) : (
<View></View>
),
description: this.props.isInfoShow['description'] ? (
<View style={{ marginTop: 10, marginBottom: 10 }}>
<AtCard title={pt.get().ticketDetail.descTitle}>
<View className='at-article__h3'>
@@ -93,6 +110,10 @@ export default class DetailFramework extends Component<
</View>
</AtCard>
</View>
) : (
<View></View>
),
current: this.props.isInfoShow['current'] ? (
<View style={{ padding: 10 }}>
<AtSteps
items={this.state.items}
@@ -100,13 +121,34 @@ export default class DetailFramework extends Component<
onChange={() => {}}
/>
</View>
) : (
<View></View>
),
notelist: this.props.isInfoShow['notelist'] ? (
this.props.isInfoShow['showAllNotes'] ? (
<View style={{ padding: 10 }}>
<NoteList noteList={this.state.notes} />
</View>
) : (
<View style={{ padding: 10 }}>
<NoteList
noteList={[this.state.notes[this.state.notes.length - 1]]}
/>
</View>
)
) : (
<View></View>
),
};
return (
<View>
{elements.device}
{elements.createdTime}
{elements.description}
{elements.current}
{this.props.middleButton}
<View style={{ padding: 10 }}>
<NoteList noteList={this.state.notes} />
</View>
<PageFooter />
{elements.notelist}
</View>
);
}
@@ -0,0 +1,3 @@
export default {
component: true,
};
+16 -1
View File
@@ -4,6 +4,7 @@ import { getCurrentInstance } from '@tarojs/runtime';
import pt from '@/plain-text';
import { AtButton } from 'taro-ui';
import DetailFramework from '@/components/DetailFramework/DetailFramework';
import PageFooter from '@/components/PageFooter/PageFooter';
interface TicketDetailState {
id: number;
@@ -43,9 +44,23 @@ export default class TicketDetail extends Component<{}, TicketDetailState> {
</View>
);
const isInfoShow = {
device: true,
createdTime: true,
description: true,
current: true,
notelist: true,
showAllNotes: true,
};
return (
<View>
<DetailFramework middleButton={middleButton} id={this.state.id} />
<DetailFramework
middleButton={middleButton}
id={this.state.id}
isInfoShow={isInfoShow}
/>
<PageFooter />
</View>
);
}
+8
View File
@@ -18,4 +18,12 @@ export class TicketNote {
createdTime: moment.Moment;
}
export class ShowElements {
device: JSX.Element;
createdTime: JSX.Element;
description: JSX.Element;
current: JSX.Element;
notelist: JSX.Element;
}
export type StatusStr = '1' | '2' | '3' | '4' | '5';
+28
View File
@@ -15,6 +15,8 @@ import PageFooter from '@/components/PageFooter/PageFooter';
import { submitTicket } from '@/service/submitTicket';
import type CustomTabBar from '@/custom-tab-bar';
import repairLogo from '@/assets/icons/RepairPage/repair.svg';
import DetailFramework from '@/components/DetailFramework/DetailFramework';
import { getCurrentTicket } from '@/service/currentTicket';
import './repair.scss';
interface RepairPageState {
@@ -27,10 +29,22 @@ interface RepairPageState {
isLoading: boolean;
isDisable: boolean;
checkedList: Array<number>;
currentTicketsId: Array<number>;
}
const submitInterval = 5000;
const middleButton = <View></View>;
const isInfoShow = {
device: true,
createdTime: true,
description: false,
current: true,
notelist: true,
showAllNotes: false,
};
export default class RepairPage extends Component<{}, RepairPageState> {
state = {
type: 1 as 0 | 1,
@@ -42,9 +56,12 @@ export default class RepairPage extends Component<{}, RepairPageState> {
isLoading: false,
isDisable: true,
checkedList: [0],
currentTicketsId: [] as Array<number>,
};
componentDidMount(): void {
getCurrentTicket(this, middleButton, isInfoShow);
setTimeout(() => {
this.setState({
isDisable: false,
@@ -145,9 +162,20 @@ export default class RepairPage extends Component<{}, RepairPageState> {
}
render(): ReactNode {
const ticketsRenderer = this.state.currentTicketsId.map((id, idx) => (
<AtCard key={idx}>
<DetailFramework
id={id}
isInfoShow={isInfoShow}
middleButton={middleButton}
/>
</AtCard>
));
console.log(ticketsRenderer);
return (
<View>
<AtMessage />
{ticketsRenderer}
<AtCard
note={pt.get().repairPage.cardText.note}
title={pt.get().repairPage.cardText.title}
+1 -1
View File
@@ -6,8 +6,8 @@ import moment from 'moment';
import pt from '@/plain-text';
import { RequestState } from '@/service';
import { getMyTicketList } from '@/service/myTicket';
import { TicketListItem } from '@/components/TicketListItem/TicketListItem';
import './myTicket.scss';
import { TicketListItem } from './TicketListItem';
interface MyTicketState {
fixList: Array<TicketListItem>;
+18
View File
@@ -1,4 +1,10 @@
export interface RepairPageText {
currentTicket: {
errorMessage: string;
title: string;
note: string;
extra: string;
};
typeText: {
computer: string;
appliance: string;
@@ -40,6 +46,12 @@ export interface RepairPageText {
}
export const repairPageZhCn: RepairPageText = {
currentTicket: {
errorMessage: '未获取到工单!',
title: '',
note: '',
extra: '',
},
typeText: {
computer: '电脑',
appliance: '电器',
@@ -81,6 +93,12 @@ export const repairPageZhCn: RepairPageText = {
};
export const repairPageEnUs: RepairPageText = {
currentTicket: {
errorMessage: '未获取到工单!',
title: '',
note: '',
extra: '',
},
typeText: {
computer: 'Computer',
appliance: 'Appliance',
+35
View File
@@ -0,0 +1,35 @@
import RepairPage from '@/pages/repair/repair';
import Taro from '@tarojs/taro';
import { TicketListItem } from '@/components/TicketListItem/TicketListItem';
import pt from '@/plain-text';
import DetailFramework from '@/components/DetailFramework/DetailFramework';
import { getUrl } from '.';
export function getCurrentTicket(that: RepairPage, middleButton, isInfoShow) {
Taro.request({
url: getUrl('/user/mytickets'),
method: 'GET',
data: {
token: 'token_test',
},
})
.then((res) => {
const data = res.data.data;
let newIdList: Array<number> = [];
data.list.map((ticket: TicketListItem) => {
if (ticket['status'] !== 5) {
newIdList.push(ticket.id);
}
});
that.setState({
currentTicketsId: newIdList,
});
})
.catch((err) => {
console.log(err);
Taro.atMessage({
message: pt.get().button.submitText.error + err.toString(),
type: 'error',
});
});
}
+6 -13
View File
@@ -1,5 +1,5 @@
import MyTicketPage from '@/pages/user/myTicket/myTicket';
import { TicketListItem } from '@/pages/user/myTicket/TicketListItem';
import { TicketListItem } from '@/components/TicketListItem/TicketListItem';
import Taro from '@tarojs/taro';
import moment from 'moment';
import { getUrl } from '.';
@@ -13,20 +13,15 @@ export function getMyTicketList(that: MyTicketPage) {
},
})
.then((res) => {
let former = that.state.rs;
if (!res.data.success) {
that.setState({
rs: {
loading: false,
success: false,
},
rs: former.trans(false),
});
return;
}
that.setState({
rs: {
loading: false,
success: true,
},
rs: former.trans(true),
fixList: res.data.data.list.map(
(item) =>
new TicketListItem(
@@ -40,11 +35,9 @@ export function getMyTicketList(that: MyTicketPage) {
});
})
.catch((reason) => {
let former = that.state.rs;
that.setState({
rs: {
loading: false,
success: false,
},
rs: former.trans(false),
});
console.log(reason);
});