15 Commits
42 changed files with 615 additions and 297 deletions
+1 -1
View File
@@ -5,7 +5,7 @@
"semi": true, "semi": true,
"singleQuote": true, "singleQuote": true,
"proseWrap": "preserve", "proseWrap": "preserve",
"arrowParens": "avoid", "arrowParens": "always",
"bracketSpacing": true, "bracketSpacing": true,
"jsxSingleQuote": true, "jsxSingleQuote": true,
"endOfLine": "auto" "endOfLine": "auto"
+14
View File
@@ -58,6 +58,7 @@
## 主页 ## 主页
1. 信息显示 1. 信息显示
1. 不显示是哪一班,只显示今日值班时间
2. (协会成员)相关信息 2. (协会成员)相关信息
3. 提醒事项 3. 提醒事项
4. 如何联系到协会 4. 如何联系到协会
@@ -68,8 +69,21 @@
2. 维修进度提示 2. 维修进度提示
3. (面向协会成员)维修列表 3. (面向协会成员)维修列表
## 成员
1. 最近七天内未取回的工单列表
2. 值班组长上传本班相关信息
3. 现在自己是否要值班(值班时间显示)
## 我的 ## 我的
1. 更改手机号等个人信息(手机号可以填写多个) 1. 更改手机号等个人信息(手机号可以填写多个)
2. (备选)修改用户名、头像 2. (备选)修改用户名、头像
3. 设置真名(可帮助预填写工单) 3. 设置真名(可帮助预填写工单)
# 主席团管理页面
1. 值班表导入、更新
2. 成员权限管理
3. 特殊维修时间(如学园维修)、值班信息更新
+5
View File
@@ -1,5 +1,6 @@
import mytickets from './mytickets.json'; import mytickets from './mytickets.json';
import ticketInfo from './ticketInfo.json'; import ticketInfo from './ticketInfo.json';
import uncompleted from './uncompleted.json';
export default { export default {
'GET /dutyinfo': { 'GET /dutyinfo': {
@@ -51,4 +52,8 @@ export default {
'POST /member/login': { 'POST /member/login': {
data: {}, data: {},
}, },
'GET /member/tickets/uncompleted': {
success: true,
data: uncompleted,
},
}; };
+1 -1
View File
@@ -3,7 +3,7 @@
{ {
"id": 6830, "id": 6830,
"type": 1, "type": 1,
"status": 5, "status": 2,
"device": "主机", "device": "主机",
"deviceModel": "技嘉", "deviceModel": "技嘉",
"owner": "武技栏", "owner": "武技栏",
+2 -2
View File
@@ -1,5 +1,5 @@
{ {
"id": 6847, "id": 6830,
"type": 1, "type": 1,
"device": "华硕", "device": "华硕",
"deviceModel": "灵耀X14", "deviceModel": "灵耀X14",
@@ -8,7 +8,7 @@
"description": "清灰", "description": "清灰",
"workers": [], "workers": [],
"createdTime": "2024-03-07T19:52:48.523303", "createdTime": "2024-03-07T19:52:48.523303",
"status": 5, "status": 2,
"isConfirmed": false, "isConfirmed": false,
"notes": [ "notes": [
{ {
+15
View File
@@ -0,0 +1,15 @@
{
"list": [
{
"id": 6832,
"type": 1,
"status": 2,
"device": "ROG",
"deviceModel": "幻 14 2022",
"owner": "晓洋",
"phone": "18888888887",
"createdTime": "2024-03-07T11:45:14.191981",
"isConfirmed": false
}
]
}
+1
View File
@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1710232513408" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4296" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24"><path d="M816.672 937.344c-8.192 0-16.384-3.136-22.624-9.376l-213.952-213.952c-12.512-12.512-12.512-32.736 0-45.248s32.736-12.512 45.248 0l191.328 191.328 33.408-33.376-190.848-190.848c-12.512-12.512-12.512-32.736 0-45.248s32.736-12.512 45.248 0l213.472 213.472c6.016 6.016 9.376 14.112 9.376 22.624s-3.36 16.64-9.376 22.624l-78.656 78.624C833.024 934.208 824.832 937.344 816.672 937.344z" fill="#5C636E" p-id="4297"></path><path d="M590.752 128c0-0.032 0-0.064 0-0.064 1.472-4.16 2.048-8.352 1.792-12.512 0 0 0 0 0 0 0 0-0.032-0.064-0.032-0.096-0.256-4.128-1.312-8.096-3.104-11.776-0.352-0.704-0.896-1.248-1.28-1.92-1.632-2.848-3.456-5.472-5.952-7.712-0.928-0.864-2.08-1.376-3.136-2.112-1.92-1.376-3.616-3.008-5.888-3.968-0.608-0.256-1.248-0.384-1.888-0.608-0.032 0-0.064-0.032-0.096-0.032-114.144-46.624-243.808-20.704-331.072 66.592C239.328 154.528 239.04 155.584 238.336 156.416 237.472 157.12 236.448 157.408 235.648 158.208L73.664 319.552c-6.016 6.016-9.408 14.144-9.408 22.656s3.36 16.64 9.376 22.656l98.304 98.304c6.016 6.016 14.144 9.376 22.624 9.376s16.64-3.36 22.624-9.376l56.032-56.032 68.192 68.224c6.24 6.24 14.432 9.376 22.624 9.376s16.384-3.136 22.624-9.376c12.512-12.48 12.512-32.736 0-45.248l-90.816-90.848c-12.512-12.512-32.736-12.512-45.248 0L194.56 395.296l-52.992-53.024 139.264-138.72c0.832-0.8 1.12-1.888 1.824-2.752 0.864-0.704 1.92-0.992 2.72-1.824 40-39.936 91.296-63.072 144.864-68.768-2.208 1.664-4.384 3.392-6.56 5.12-8.96 6.784-17.632 14.016-25.664 22.048-0.544 0.544-0.736 1.248-1.216 1.824-19.232 19.36-35.936 41.024-49.568 64.512-2.464 4.224-4.768 8.448-7.008 12.736l0.416 0.224c-12.288 24.64-12.288 53.664 0.48 78.144 1.536 2.944 3.52 5.504 5.76 7.744 0.768 0.96 1.088 2.112 1.984 2.976l70.432 70.464c6.24 6.24 14.432 9.376 22.624 9.376s16.384-3.136 22.624-9.376c12.512-12.48 12.512-32.736 0-45.248l-67.072-67.072c-2.624-6.112-2.688-13.024 0.448-18.976 0.16-0.288 0.128-0.608 0.256-0.896 1.44-2.656 2.848-5.344 4.384-7.968 11.008-18.944 24.48-36.448 40.064-52.032 4.096-4.096 8.608-7.648 12.96-11.456 30.144-25.28 67.232-40.864 106.816-43.136 0.576-0.032 1.056-0.352 1.632-0.416 3.616-0.384 7.104-1.184 10.368-2.72 0.512-0.256 0.896-0.64 1.376-0.896 3.168-1.696 6.048-3.776 8.512-6.496 0.256-0.288 0.384-0.64 0.608-0.928 2.08-2.464 4.128-4.928 5.44-8.064C590.624 129.12 590.528 128.544 590.752 128z" fill="#5C636E" p-id="4298"></path><path d="M289.536 960.032c-28.384 0-56.928-6.368-82.624-18.432-9.408-4.448-16.096-13.184-17.888-23.456-1.792-10.24 1.504-20.736 8.896-28.128l88.064-88.096-33.056-33.024-87.52 87.488c-7.424 7.424-18.048 10.848-28.384 8.832-10.336-1.888-19.104-8.704-23.392-18.304-32.736-72.64-17.088-159.072 38.944-215.104 50.048-50.08 126.048-68.384 193.952-47.04l238.688-238.72c-21.28-67.712-3.648-143.264 47.04-193.952 36.128-36.16 84.256-56.064 135.456-56.064 27.264 0 54.816 5.92 79.648 17.12 9.568 4.32 16.448 13.056 18.304 23.392 1.92 10.336-1.408 20.96-8.832 28.384l-88.8 88.8 33.024 33.056 89.376-89.344c7.392-7.392 17.92-10.72 28.128-8.896 10.272 1.792 19.04 8.48 23.456 17.888 34.496 73.376 19.424 160.96-37.536 217.92-36.096 36.096-84.128 56-135.296 56-20.704 0-41.536-3.392-61.216-9.952l-237.12 237.12c22.688 68.48 5.44 145.024-46.048 196.544C388.736 940.16 340.672 960.032 289.536 960.032zM282.592 895.84c36.352 2.112 71.36-11.392 96.992-37.024 37.952-37.952 47.936-96.384 24.864-145.408-5.76-12.224-3.232-26.72 6.336-36.256l266.816-266.848c9.536-9.536 24.032-12.032 36.256-6.336 47.936 22.56 108 12.544 145.408-24.864 25.952-25.92 38.784-61.408 36.992-96.96l-72.576 72.544c-6.016 6.016-14.112 9.376-22.624 9.376l0 0c-8.512 0-16.64-3.36-22.624-9.376L700.16 276.416c-12.512-12.512-12.512-32.736 0-45.248l71.04-71.04c-35.072-0.896-68.8 12.384-93.696 37.28-37.92 37.92-48.064 94.272-25.856 143.552 5.44 12.128 2.848 26.368-6.56 35.776l-267.936 267.968c-9.376 9.376-23.648 11.936-35.776 6.56-47.68-21.504-106.624-11.104-143.584 25.856-25.504 25.536-38.464 59.392-37.408 93.856l69.92-69.92c12.512-12.512 32.736-12.512 45.248 0l78.304 78.272c6.016 6.016 9.376 14.112 9.376 22.624 0 8.48-3.36 16.64-9.376 22.624L282.592 895.84z" fill="#5C636E" p-id="4299"></path></svg>

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

After

Width:  |  Height:  |  Size: 50 KiB

@@ -0,0 +1,3 @@
export default {
component: true,
};
@@ -0,0 +1,155 @@
import { View } from '@tarojs/components';
import { Component, ReactNode } from 'react';
import Taro from '@tarojs/taro';
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],
[2, 1],
[3, 2],
[4, 2],
[5, 3],
]);
interface DetailFrameworkState {
current: number;
items: Array<StepItemData>;
ticketInfo: TicketInfo;
notes: Array<TicketNote>;
rs: RequestState;
}
interface DetailFrameworkProps {
middleButton: JSX.Element;
id: number;
isInfoShow: { [key: string]: boolean };
}
export default class DetailFramework extends Component<
DetailFrameworkProps,
DetailFrameworkState
> {
state = {
current: 0,
items: [],
ticketInfo: new TicketInfo(),
notes: [new TicketNote()],
rs: new RequestState(),
};
componentDidMount(): void {
const navBar = pt.get().navBar;
Taro.setNavigationBarTitle({
title: navBar.ticketDetail,
});
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 {
if (this.state.rs.loading) {
return <View>Loading</View>;
} else if (!this.state.rs.success) {
return <View>Request failed</View>;
}
const status = this.state.ticketInfo.status;
this.setState({
current: mapStatusStep.get(status) || 0,
items: pt.get().ticketDetail.stepItems,
});
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'>
{this.state.ticketInfo.description}
</View>
</AtCard>
</View>
) : (
<View></View>
),
current: this.props.isInfoShow['current'] ? (
<View style={{ padding: 10 }}>
<AtSteps
items={this.state.items}
current={this.state.current}
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}
{elements.notelist}
</View>
);
}
}
@@ -0,0 +1,3 @@
export default {
component: true,
};
+26 -79
View File
@@ -1,96 +1,30 @@
import { Component, ReactNode } from 'react'; import { Component, ReactNode } from 'react';
import { View } from '@tarojs/components'; import { View } from '@tarojs/components';
import { getCurrentInstance } from '@tarojs/runtime'; import { getCurrentInstance } from '@tarojs/runtime';
import Taro from '@tarojs/taro';
import pt from '@/plain-text'; import pt from '@/plain-text';
import { AtCard, AtSteps, AtButton } from 'taro-ui'; import { AtButton } from 'taro-ui';
import { RequestState } from '@/service'; import DetailFramework from '@/components/DetailFramework/DetailFramework';
import { getTicketInfo } from '@/service/ticketsInfo';
import { FixStatus } from '@/common';
import PageFooter from '@/components/PageFooter/PageFooter'; import PageFooter from '@/components/PageFooter/PageFooter';
import NoteList from '@/components/NoteList/NoteList';
import { TicketNote, TicketInfo } from './TicketNote';
const mapStatusStep: Map<FixStatus, 0 | 1 | 2 | 3> = new Map([
[1, 0],
[2, 1],
[3, 2],
[4, 2],
[5, 3],
]);
interface StepItemData {
title: string;
}
interface TicketDetailState { interface TicketDetailState {
current: number; id: number;
items: Array<StepItemData>;
ticketInfo: TicketInfo;
notes: Array<TicketNote>;
rs: RequestState;
} }
export default class TicketDetail extends Component<{}, TicketDetailState> { export default class TicketDetail extends Component<{}, TicketDetailState> {
state = { state: Readonly<TicketDetailState> = {
current: 0, id: 0,
items: [],
ticketInfo: new TicketInfo(),
notes: [new TicketNote()],
rs: new RequestState(),
}; };
componentDidMount(): void { componentDidMount(): void {
const navBar = pt.get().navBar;
Taro.setNavigationBarTitle({
title: navBar.ticketDetail,
});
const { router } = getCurrentInstance(); const { router } = getCurrentInstance();
const id = router?.params.id as number; const id = router?.params.id as number;
const items = pt.get().ticketDetail.stepItems;
this.setState({ this.setState({
items: items, id: id,
}); });
getTicketInfo(this, id);
} }
render(): ReactNode { render(): ReactNode {
if (this.state.rs.loading) { const middleButton = (
return <View>Loading</View>;
} else if (!this.state.rs.success) {
return <View>Request failed</View>;
}
const status = this.state.ticketInfo.status;
this.setState({
current: mapStatusStep.get(status) || 0,
});
return (
<View>
<View className='at-article__h1'>
{this.state.ticketInfo.device +
' ' +
this.state.ticketInfo.deviceModel}
</View>
<View className='at-article__info'>
{pt.get().common.createdAtText(this.state.ticketInfo.createdTime)}
</View>
<View style={{ marginTop: 10, marginBottom: 10 }}>
<AtCard title={pt.get().ticketDetail.descTitle}>
<View className='at-article__h3'>
{this.state.ticketInfo.description}
</View>
</AtCard>
</View>
<View style={{ padding: 10 }}>
<AtSteps
items={this.state.items}
current={this.state.current}
onChange={() => {}}
/>
</View>
<View <View
className='at-row' className='at-row'
style={{ paddingTop: 10, paddingBottom: 10, width: '100%' }} style={{ paddingTop: 10, paddingBottom: 10, width: '100%' }}
@@ -105,14 +39,27 @@ export default class TicketDetail extends Component<{}, TicketDetailState> {
className='at-col' className='at-col'
style={{ marginRight: 10, paddingLeft: 5, width: '50%' }} style={{ marginRight: 10, paddingLeft: 5, width: '50%' }}
> >
<AtButton type='secondary'> <AtButton type='secondary'>{pt.get().ticketDetail.addNote}</AtButton>
{pt.get().ticketDetail.addNote}
</AtButton>
</View> </View>
</View> </View>
<View style={{ padding: 10 }}> );
<NoteList noteList={this.state.notes} />
</View> const isInfoShow = {
device: true,
createdTime: true,
description: true,
current: true,
notelist: true,
showAllNotes: true,
};
return (
<View>
<DetailFramework
middleButton={middleButton}
id={this.state.id}
isInfoShow={isInfoShow}
/>
<PageFooter /> <PageFooter />
</View> </View>
); );
+8
View File
@@ -18,4 +18,12 @@ export class TicketNote {
createdTime: moment.Moment; 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'; export type StatusStr = '1' | '2' | '3' | '4' | '5';
+2 -1
View File
@@ -49,7 +49,8 @@ class Card extends Component {
<View <View
style={{ style={{
marginLeft: 10, marginLeft: 10,
fontSize: 36, fontSize: 30,
fontWeight: 'bold',
}} }}
> >
{title} {title}
+14 -2
View File
@@ -1,15 +1,27 @@
import React from 'react'; import React from 'react';
import { View } from '@tarojs/components'; import { View, Image } from '@tarojs/components';
import pt from '@/plain-text'; import pt from '@/plain-text';
import logo from '@/assets/images/UserPage/logo.png';
export default class TitleCard extends React.Component { export default class TitleCard extends React.Component {
render(): React.ReactNode { render(): React.ReactNode {
const mainPage = pt.get().mainPage; const mainPage = pt.get().mainPage;
return ( return (
<View className='at-row at-row__align--center'>
<View className='at-col at-col-1 at-col--auto'>
<Image
style='width: 50px; height: 50px; margin-left: 15px;'
src={logo}
mode='aspectFit'
/>
</View>
<View className='page-title'> <View className='page-title'>
<View className='at-article__h1'>{mainPage.mainTitleLine}</View> <View className='at-article__h1' style={{ fontWeight: 'bold' }}>
{mainPage.mainTitleLine}
</View>
<View className='at-article__h2'>{mainPage.subTitleLine}</View> <View className='at-article__h2'>{mainPage.subTitleLine}</View>
</View> </View>
</View>
); );
} }
} }
+6 -6
View File
@@ -69,20 +69,20 @@ export default class MainPage extends Component<{}, MainPageState> {
dutyData: new DutyData(), dutyData: new DutyData(),
dutyInfoCard: { dutyInfoCard: {
title: pt.get().mainPage.cardTitle.dutyInfo, title: pt.get().mainPage.cardTitle.dutyInfo,
note: 'Tips', note: pt.get().mainPage.cardTips.dutyInfo,
extra: '额外信息', extra: pt.get().mainPage.extraInfo.dutyInfo,
content: () => <DutyInfo data={this.state.dutyData} />, content: () => <DutyInfo data={this.state.dutyData} />,
}, },
stepInfoCard: { stepInfoCard: {
title: pt.get().mainPage.cardTitle.stepInfo, title: pt.get().mainPage.cardTitle.stepInfo,
note: 'Tips 请在20:30以前取走自己的物品哦', note: pt.get().mainPage.cardTips.stepInfo,
extra: '额外信息', extra: pt.get().mainPage.extraInfo.dutyInfo,
content: () => <StepInfo />, content: () => <StepInfo />,
}, },
tipsInfoCard: { tipsInfoCard: {
title: pt.get().mainPage.cardTitle.tipsInfo, title: pt.get().mainPage.cardTitle.tipsInfo,
note: 'Tips', note: pt.get().mainPage.cardTips.tipsInfo,
extra: '额外信息', extra: pt.get().mainPage.extraInfo.dutyInfo,
content: () => <TipsInfo />, content: () => <TipsInfo />,
}, },
// rs: new RequestState(), // rs: new RequestState(),
+71 -9
View File
@@ -1,11 +1,22 @@
import { View } from '@tarojs/components'; import { View } from '@tarojs/components';
import { Component, ReactNode } from 'react'; import { Component, ReactNode } from 'react';
import Taro from '@tarojs/taro'; import Taro from '@tarojs/taro';
import { AtForm, AtInput, AtButton, AtRadio, AtCheckbox } from 'taro-ui'; import {
AtForm,
AtInput,
AtButton,
AtCheckbox,
AtCard,
AtSegmentedControl,
AtMessage,
} from 'taro-ui';
import pt from '@/plain-text'; import pt from '@/plain-text';
import PageFooter from '@/components/PageFooter/PageFooter'; import PageFooter from '@/components/PageFooter/PageFooter';
import { submitTicket } from '@/service/submitTicket'; import { submitTicket } from '@/service/submitTicket';
import type CustomTabBar from '@/custom-tab-bar'; 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'; import './repair.scss';
interface RepairPageState { interface RepairPageState {
@@ -18,8 +29,22 @@ interface RepairPageState {
isLoading: boolean; isLoading: boolean;
isDisable: boolean; isDisable: boolean;
checkedList: Array<number>; 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> { export default class RepairPage extends Component<{}, RepairPageState> {
state = { state = {
type: 1 as 0 | 1, type: 1 as 0 | 1,
@@ -29,9 +54,21 @@ export default class RepairPage extends Component<{}, RepairPageState> {
phone: '', phone: '',
description: '', description: '',
isLoading: false, isLoading: false,
isDisable: false, isDisable: true,
checkedList: [0], checkedList: [0],
currentTicketsId: [] as Array<number>,
}; };
componentDidMount(): void {
getCurrentTicket(this, middleButton, isInfoShow);
setTimeout(() => {
this.setState({
isDisable: false,
});
}, submitInterval);
}
// 以下是TabBar相关 // 以下是TabBar相关
pageCtx = Taro.getCurrentInstance().page; pageCtx = Taro.getCurrentInstance().page;
componentDidShow() { componentDidShow() {
@@ -114,20 +151,44 @@ export default class RepairPage extends Component<{}, RepairPageState> {
} }
onSubmit() { onSubmit() {
this.setState({
isLoading: true,
isDisable: true,
});
submitTicket(this); submitTicket(this);
Taro.reLaunch({
url: '/pages/repair/repair',
});
} }
render(): ReactNode { 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 ( return (
<View> <View>
<AtMessage />
{ticketsRenderer}
<AtCard
note={pt.get().repairPage.cardText.note}
title={pt.get().repairPage.cardText.title}
thumb={repairLogo}
>
<AtForm onSubmit={this.onSubmit.bind(this)}> <AtForm onSubmit={this.onSubmit.bind(this)}>
<AtRadio <AtSegmentedControl
options={[ values={[
{ label: pt.get().repairPage.typeText.appliance, value: 0 }, pt.get().repairPage.typeText.appliance,
{ label: pt.get().repairPage.typeText.computer, value: 1 }, pt.get().repairPage.typeText.computer,
]} ]}
value={this.state.type}
onClick={this.handleTypeChange.bind(this)} onClick={this.handleTypeChange.bind(this)}
current={this.state.type}
/> />
<AtInput <AtInput
clear clear
@@ -143,9 +204,9 @@ export default class RepairPage extends Component<{}, RepairPageState> {
clear clear
required required
name='deviceModel' name='deviceModel'
title={pt.get().repairPage.deviceText.title} title={pt.get().repairPage.deviceModelText.title}
type='text' type='text'
placeholder={pt.get().repairPage.deviceText.placeholder} placeholder={pt.get().repairPage.deviceModelText.placeholder}
value={this.state.deviceModel} value={this.state.deviceModel}
onChange={this.handleDeviceModelChange.bind(this)} onChange={this.handleDeviceModelChange.bind(this)}
/> />
@@ -193,6 +254,7 @@ export default class RepairPage extends Component<{}, RepairPageState> {
{pt.get().button.buttonText.submit} {pt.get().button.buttonText.submit}
</AtButton> </AtButton>
</AtForm> </AtForm>
</AtCard>
<PageFooter /> <PageFooter />
</View> </View>
); );
+2 -2
View File
@@ -46,14 +46,14 @@ export default class MemberPage extends Component {
passwd: this.state.passwd, passwd: this.state.passwd,
}, },
}) })
.then(res => { .then((res) => {
console.log(res.data); console.log(res.data);
Taro.atMessage({ Taro.atMessage({
message: pt.get().button.loginText.success, message: pt.get().button.loginText.success,
type: 'success', type: 'success',
}); });
}) })
.catch(err => { .catch((err) => {
console.log(err); console.log(err);
Taro.atMessage({ Taro.atMessage({
message: pt.get().button.loginText.error + err.toString(), message: pt.get().button.loginText.error + err.toString(),
+2 -2
View File
@@ -6,8 +6,8 @@ import moment from 'moment';
import pt from '@/plain-text'; import pt from '@/plain-text';
import { RequestState } from '@/service'; import { RequestState } from '@/service';
import { getMyTicketList } from '@/service/myTicket'; import { getMyTicketList } from '@/service/myTicket';
import { TicketListItem } from '@/components/TicketListItem/TicketListItem';
import './myTicket.scss'; import './myTicket.scss';
import { TicketListItem } from './TicketListItem';
interface MyTicketState { interface MyTicketState {
fixList: Array<TicketListItem>; fixList: Array<TicketListItem>;
@@ -34,7 +34,7 @@ export default class MyTicketPage extends Component<{}, MyTicketState> {
if (!this.state.rs.success) { if (!this.state.rs.success) {
return <View>Failed</View>; return <View>Failed</View>;
} }
const fixListRenderer = this.state.fixList.map(item => item.render()); const fixListRenderer = this.state.fixList.map((item) => item.render());
return ( return (
<View> <View>
<AtList>{fixListRenderer}</AtList> <AtList>{fixListRenderer}</AtList>
+2 -2
View File
@@ -39,14 +39,14 @@ export default class ReportPage extends Component {
report: this.state.report, report: this.state.report,
}, },
}) })
.then(res => { .then((res) => {
console.log(res.data); console.log(res.data);
Taro.atMessage({ Taro.atMessage({
message: pt.get().button.submitText.success, message: pt.get().button.submitText.success,
type: 'success', type: 'success',
}); });
}) })
.catch(err => { .catch((err) => {
console.log(err); console.log(err);
Taro.atMessage({ Taro.atMessage({
message: pt.get().button.submitText.error + err.toString(), message: pt.get().button.submitText.error + err.toString(),
+1
View File
@@ -111,6 +111,7 @@ export default class UserPage extends Component {
onTap={this.onTapImage} onTap={this.onTapImage}
style='width: 100px;height: 100px;' style='width: 100px;height: 100px;'
src={logo} src={logo}
mode='aspectFit'
/> />
</View> </View>
<AtToast <AtToast
+2 -2
View File
@@ -41,7 +41,7 @@ export const buttonEnUs: ButtonText = {
error: 'Error: ', error: 'Error: ',
}, },
loginText: { loginText: {
success: '登录成功', success: 'Login Success',
error: '登录失败', error: 'Login Failed',
}, },
}; };
+2 -2
View File
@@ -23,10 +23,10 @@ export const informPageZhCn: InformPageText = {
export const informPageEnUs: InformPageText = { export const informPageEnUs: InformPageText = {
phoneText: { phoneText: {
title: 'Phone', title: 'Phone',
placeholder: '便于查询工单', placeholder: 'Used for querying tickets',
}, },
nameText: { nameText: {
title: 'Real Name', title: 'Real Name',
placeholder: '必填,与工单绑定', placeholder: '(Required) Bounded to your ticket',
}, },
}; };
+64 -34
View File
@@ -6,6 +6,16 @@ export interface MainPageText {
stepInfo: string; stepInfo: string;
tipsInfo: string; tipsInfo: string;
}; };
cardTips: {
dutyInfo: string;
stepInfo: string;
tipsInfo: string;
};
extraInfo: {
dutyInfo: string;
stepInfo: string;
tipsInfo: string;
};
expandTitle: { expandTitle: {
stepInfo: string; stepInfo: string;
tipsInfo: string; tipsInfo: string;
@@ -31,35 +41,45 @@ export const mainPageZhCn: MainPageText = {
mainTitleLine: '您好,这里是E志者协会', mainTitleLine: '您好,这里是E志者协会',
subTitleLine: '维修请至【东三-204】实验室', subTitleLine: '维修请至【东三-204】实验室',
cardTitle: { cardTitle: {
dutyInfo: '204值班情况', dutyInfo: '204 值班情况',
stepInfo: '维修步骤', stepInfo: '维修步骤',
tipsInfo: '注意事项', tipsInfo: '注意事项',
}, },
cardTips: {
dutyInfo: '提示:可以先前往【维修】页面在线上预填写工单!',
stepInfo: '提示:请在 20:30 之前取走自己的物品哦!',
tipsInfo: '',
},
extraInfo: {
dutyInfo: '',
stepInfo: '',
tipsInfo: '',
},
expandTitle: { expandTitle: {
stepInfo: '查看维修步骤', stepInfo: '查看维修步骤',
tipsInfo: '查看注意事项', tipsInfo: '查看注意事项',
}, },
stepList: [ stepList: [
{ title: '线上填写工单' }, { title: '线上填写工单' },
{ title: '去`东三-204`实验室维修电脑' }, { title: '去【东三-204】实验室维修电脑' },
{ title: '等待电脑维修' }, { title: '等待电脑维修' },
{ title: '维修结束,取回电脑' }, { title: '维修结束,取回电脑' },
], ],
tipsList: [ tipsList: [
{ title: '戴尔、Surface、外星人、苹果电脑不能拆机哦~' }, { title: '戴尔/外星人、Surface、苹果电脑不能拆机哦~' },
{ title: '数据无价,请随时做好数据备份哦~' }, { title: '数据无价,请随时做好数据备份哦~' },
{ title: '204也是实验室,请遵守实验室纪律,请勿饮食~' }, { title: '204 也是实验室,请勿在内饮食~' },
{ title: '我们是志愿服务,不收任何礼物哦~' }, { title: '我们是志愿服务,不收取任何礼物哦~' },
], ],
dutyCard: { dutyCard: {
offDuty: { offDuty: {
title: '未值班', title: '未值班',
reason: s => '值班停止原因:' + s, reason: (s) => '值班停止原因:' + s,
recoverTime: t => '恢复值班时间:' + t, recoverTime: (t) => '恢复值班时间:' + t,
}, },
inDuty: { inDuty: {
title: '值班中', title: '值班中',
currentDutyText: c => { currentDutyText: (c) => {
switch (c) { switch (c) {
case 'off': case 'off':
return '当前未值班'; return '当前未值班';
@@ -71,56 +91,66 @@ export const mainPageZhCn: MainPageText = {
return '第三班 18:00-20:30'; return '第三班 18:00-20:30';
} }
}, },
inDutyCnt: n => '当前值班人数:' + n, inDutyCnt: (n) => '当前值班人数:' + n,
}, },
}, },
}; };
export const mainPageEnUs: MainPageText = { export const mainPageEnUs: MainPageText = {
mainTitleLine: '您好,这里是E志者协会', mainTitleLine: 'Hi! This is EVA.',
subTitleLine: '维修请至【东三-204】实验室', subTitleLine: 'For maintenance, please go to [204 Lab, E3 building]',
cardTitle: { cardTitle: {
dutyInfo: '204值班情况', dutyInfo: 'Duty Situation',
stepInfo: '维修步骤', stepInfo: 'Maintenance Steps',
tipsInfo: '注意事项', tipsInfo: 'Tips',
},
cardTips: {
dutyInfo: 'Tips: Please go to [Repair] and filling out tickets online.',
stepInfo: 'Tips: Please retrieve your devices before 20:30!',
tipsInfo: '',
}, },
expandTitle: { expandTitle: {
stepInfo: '查看维修步骤', stepInfo: 'Check for maintenance steps',
tipsInfo: '查看注意事项', tipsInfo: 'Check for tips',
},
extraInfo: {
dutyInfo: '',
stepInfo: '',
tipsInfo: '',
}, },
stepList: [ stepList: [
{ title: '线上填写工单' }, { title: 'Filling out tickets online' },
{ title: '去`东三-204`实验室维修电脑' }, { title: 'Go to [204 Lab, E3 building] for maintenance' },
{ title: '等待电脑维修' }, { title: 'Waiting for the device maintenance' },
{ title: '维修结束,取回电脑' }, { title: 'The maintenance is over, retrieve the device' },
], ],
tipsList: [ tipsList: [
{ title: '戴尔、Surface、外星人、苹果电脑不能拆机哦~' }, { title: 'Dell/Alienware, Surface, Apple cannot be dissassembled.' },
{ title: '数据无价,请随时做好数据备份哦~' }, { title: 'Data is priceless, please backup your data at any time!' },
{ title: '204也是实验室,请遵守实验室纪律,请勿饮食~' }, { title: '204 is also a laboratory. Do not eat inside.' },
{ title: '我们是志愿服务,不收任何礼物哦~' }, { title: 'We are volunteers and do not take any gifts.' },
], ],
dutyCard: { dutyCard: {
offDuty: { offDuty: {
title: '未值班', title: 'Off Duty',
reason: s => '值班停止原因:' + s, reason: (s) => 'Reason for cessation of duty: ' + s,
recoverTime: t => '恢复值班时间:' + t, recoverTime: (t) => 'Resumption of duty: ' + t,
}, },
inDuty: { inDuty: {
title: '值班中', title: 'On Duty',
currentDutyText: c => { currentDutyText: (c) => {
switch (c) { switch (c) {
case 'off': case 'off':
return '当前未值班'; return 'Currently not on duty';
case '1': case '1':
return '第一班 13:30-16:00'; return '1st Shift 13:30-16:00';
case '2': case '2':
return '第二班 16:00-18:00'; return '2nd Shift 16:00-18:00';
case '3': case '3':
return '第三班 18:00-20:30'; return '3rd Shift 18:00-20:30';
} }
}, },
inDutyCnt: n => '当前值班人数:' + n, inDutyCnt: (n) => 'EVA members on duty: ' + n,
}, },
}, },
}; };
+2 -2
View File
@@ -23,10 +23,10 @@ export const memberPageZhCn: MemberPageText = {
export const memberPageEnUs: MemberPageText = { export const memberPageEnUs: MemberPageText = {
stuidText: { stuidText: {
title: 'Student ID', title: 'Student ID',
placeholder: '与统一身份认证学号一致', placeholder: 'Consistent with EVA Auth',
}, },
passwdText: { passwdText: {
title: 'Password', title: 'Password',
placeholder: '与 EVA 统一身份认证一致', placeholder: 'Consistent with EVA Auth',
}, },
}; };
+1 -1
View File
@@ -9,7 +9,7 @@ export interface NavBarTitle {
}; };
} }
export const navBarTitleZhCh: NavBarTitle = { export const navBarTitleZhCn: NavBarTitle = {
ticketDetail: '工单详情', ticketDetail: '工单详情',
user: { user: {
myTicket: '我的工单', myTicket: '我的工单',
+44 -14
View File
@@ -1,4 +1,10 @@
export interface RepairPageText { export interface RepairPageText {
currentTicket: {
errorMessage: string;
title: string;
note: string;
extra: string;
};
typeText: { typeText: {
computer: string; computer: string;
appliance: string; appliance: string;
@@ -33,9 +39,19 @@ export interface RepairPageText {
desc: string; desc: string;
}; };
}; };
cardText: {
note: string;
title: string;
};
} }
export const repairPageZhCn: RepairPageText = { export const repairPageZhCn: RepairPageText = {
currentTicket: {
errorMessage: '未获取到工单!',
title: '',
note: '',
extra: '',
},
typeText: { typeText: {
computer: '电脑', computer: '电脑',
appliance: '电器', appliance: '电器',
@@ -70,41 +86,55 @@ export const repairPageZhCn: RepairPageText = {
desc: '请于评论中详述', desc: '请于评论中详述',
}, },
}, },
cardText: {
note: '工单描述请尽量简短哦!',
title: '预填写工单',
},
}; };
export const repairPageEnUs: RepairPageText = { export const repairPageEnUs: RepairPageText = {
currentTicket: {
errorMessage: '未获取到工单!',
title: '',
note: '',
extra: '',
},
typeText: { typeText: {
computer: '电脑', computer: 'Computer',
appliance: '电器', appliance: 'Appliance',
}, },
deviceText: { deviceText: {
title: '设备品牌', title: 'Brand',
placeholder: 'e.g. ROG', placeholder: 'e.g. ROG',
}, },
deviceModelText: { deviceModelText: {
title: '设备型号', title: 'Device Model',
placeholder: 'e.g. Zephyrus G14 2022', placeholder: 'e.g. Zephyrus G14 2022',
}, },
ownerText: { ownerText: {
title: '机主姓名', title: 'Name',
placeholder: 'e.g. Dean Ma', placeholder: 'e.g. Dean Ma',
}, },
phoneText: { phoneText: {
title: '联系方式', title: 'Tel',
placeholder: 'e.g. 18888888888', placeholder: 'e.g. 18888888888',
}, },
descriptionText: { descriptionText: {
title: '问题描述', title: 'Problem Description',
placeholder: 'e.g. ZJUWLAN 无法登入校内网站', placeholder: 'e.g. ZJUWLAN inaccessable',
}, },
checkboxText: { checkboxText: {
none: '无附件', none: 'None',
usbDisk: 'U 盘', usbDisk: 'USB Disk',
mouseOrReceiver: '鼠标/接收器', mouseOrReceiver: 'Mouse/Receiver',
powerAdapter: '电源适配器', powerAdapter: 'Power Adapter',
others: { others: {
label: '其他', label: 'Others',
desc: '请于评论中详述', desc: 'Please elaborate in the comments',
}, },
}, },
cardText: {
note: 'Please keep the ticket description as short as possible',
title: 'Pre-filling working tickets',
},
}; };
+1 -1
View File
@@ -9,5 +9,5 @@ export const reportPageZhCn: ReportPageText = {
export const reportPageEnUs: ReportPageText = { export const reportPageEnUs: ReportPageText = {
placeHolderText: placeHolderText:
'无论是有关于小程序的建议,还是关于E志者协会的建议,都可以提出来哦!', 'Feel free to post your suggestions about the weapp or about us!',
}; };
+4 -4
View File
@@ -37,10 +37,10 @@ export const ticketDetailZhCn: TicketDetailText = {
export const ticketDetailEnUs: TicketDetailText = { export const ticketDetailEnUs: TicketDetailText = {
stepItems: [ stepItems: [
{ title: 'Ticket created' }, { title: 'Created' },
{ title: 'Repairing' }, { title: 'Repairing' },
{ title: 'Take home' },
{ title: 'Finished' }, { title: 'Finished' },
{ title: 'Retrieved' },
], ],
createTicketMessage: 'Created ticket', createTicketMessage: 'Created ticket',
statusModifyPrefix: 'Modified repair status to: ', statusModifyPrefix: 'Modified repair status to: ',
@@ -48,10 +48,10 @@ export const ticketDetailEnUs: TicketDetailText = {
['1', 'Repairing'], ['1', 'Repairing'],
['2', '2(?)'], ['2', '2(?)'],
['3', '3(?)'], ['3', '3(?)'],
['4', 'Device to be taken home'], ['4', 'Device to be retrieved'],
['5', 'Ticket finished'], ['5', 'Ticket finished'],
]), ]),
descTitle: 'Problem description', descTitle: 'Problem description',
tookAway: 'Already took home', tookAway: 'Already retrieved',
addNote: 'Add a comment', addNote: 'Add a comment',
}; };
+8 -8
View File
@@ -6,7 +6,7 @@ export interface TicketListText {
} }
export const ticketListZhCn: TicketListText = { export const ticketListZhCn: TicketListText = {
createdAt: time => { createdAt: (time) => {
return '创建于' + ' ' + time; return '创建于' + ' ' + time;
}, },
statusMap: new Map([ statusMap: new Map([
@@ -19,14 +19,14 @@ export const ticketListZhCn: TicketListText = {
}; };
export const ticketListEnUs: TicketListText = { export const ticketListEnUs: TicketListText = {
createdAt: time => { createdAt: (time) => {
return '创建于' + ' ' + time; return 'Created at' + ' ' + time;
}, },
statusMap: new Map([ statusMap: new Map([
[1, '创建成功'], [1, 'Created'],
[2, '维修中'], [2, 'Repairing'],
[3, '待取回'], [3, 'Pending Retrieval'],
[4, '已取回'], [4, 'Retrieved'],
[5, '已取回'], [5, 'Retrieved'],
]), ]),
}; };
+11 -11
View File
@@ -54,27 +54,27 @@ export const userPageZhCn: UserPageText = {
export const userPageEnUs: UserPageText = { export const userPageEnUs: UserPageText = {
memberEntry: { memberEntry: {
front: '再点击 ', front: 'Click ',
behind: ' 次以进入协会成员登录页面', behind: ' more times to enter member login page',
}, },
ticketColumn: { ticketColumn: {
title: '我的工单', title: 'My Tickets',
note: '在这里查看历史工单!', note: 'View the history of your tickets here!',
}, },
infoColumn: { infoColumn: {
title: '我的信息', title: 'My Information',
note: '能帮助亦可更好地找到你哦!', note: 'It will help us contact you!',
}, },
settingsColumn: { settingsColumn: {
title: 'Settings', title: 'Settings',
note: '在这里配置小程序', note: 'Configure the applet here!',
}, },
reportColumn: { reportColumn: {
title: '意见反馈', title: 'Report',
note: '有什么想说的都可以告诉亦可哦!', note: 'Let us know if you have any suggestions!',
}, },
aboutColumn: { aboutColumn: {
title: '关于我们', title: 'About Us',
note: '查看开发者信息', note: 'View developer information.',
}, },
}; };
+2 -2
View File
@@ -8,7 +8,7 @@ import { AboutPageText, aboutPageEnUs, aboutPageZhCn } from './AboutPage';
import { ButtonText, buttonEnUs, buttonZhCn } from './Button'; import { ButtonText, buttonEnUs, buttonZhCn } from './Button';
import { MemberPageText, memberPageEnUs, memberPageZhCn } from './MemberPage'; import { MemberPageText, memberPageEnUs, memberPageZhCn } from './MemberPage';
import { TicketListText, ticketListEnUs, ticketListZhCn } from './TicketList'; import { TicketListText, ticketListEnUs, ticketListZhCn } from './TicketList';
import { NavBarTitle, navBarTitleEnUs, navBarTitleZhCh } from './NavBarTitle'; import { NavBarTitle, navBarTitleEnUs, navBarTitleZhCn } from './NavBarTitle';
import { RepairPageText, repairPageEnUs, repairPageZhCn } from './RepairPage'; import { RepairPageText, repairPageEnUs, repairPageZhCn } from './RepairPage';
import { import {
TicketDetailText, TicketDetailText,
@@ -46,7 +46,7 @@ const textZhCn: TextRecord = {
button: buttonZhCn, button: buttonZhCn,
memberPage: memberPageZhCn, memberPage: memberPageZhCn,
ticketList: ticketListZhCn, ticketList: ticketListZhCn,
navBar: navBarTitleZhCh, navBar: navBarTitleZhCn,
repairPage: repairPageZhCn, repairPage: repairPageZhCn,
ticketDetail: ticketDetailZhCn, ticketDetail: ticketDetailZhCn,
}; };
+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',
});
});
}
+2 -2
View File
@@ -10,7 +10,7 @@ export function getDutyInfo(that: MainPage) {
token: 'token_test', token: 'token_test',
}, },
}) })
.then(res => { .then((res) => {
const data = res.data.data; const data = res.data.data;
if (data.isInDuty) { if (data.isInDuty) {
that.setState({ that.setState({
@@ -30,7 +30,7 @@ export function getDutyInfo(that: MainPage) {
}); });
} }
}) })
.catch(err => { .catch((err) => {
console.log(err); console.log(err);
that.setState({ that.setState({
dutyData: { dutyData: {
+2 -2
View File
@@ -10,7 +10,7 @@ export function setLocaleData(lang: Lang) {
token: 'token_test', token: 'token_test',
lang: lang, lang: lang,
}, },
}).then(res => { }).then((res) => {
console.log(res.data); console.log(res.data);
}); });
} }
@@ -22,7 +22,7 @@ export function getLocaleData() {
data: { data: {
token: 'token_test', token: 'token_test',
}, },
}).then(res => { }).then((res) => {
console.log(res.data); console.log(res.data);
pt.setLang(res.data.data.lang); pt.setLang(res.data.data.lang);
Taro.reLaunch({ Taro.reLaunch({
+9 -16
View File
@@ -1,5 +1,5 @@
import MyTicketPage from '@/pages/user/myTicket/myTicket'; 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 Taro from '@tarojs/taro';
import moment from 'moment'; import moment from 'moment';
import { getUrl } from '.'; import { getUrl } from '.';
@@ -12,23 +12,18 @@ export function getMyTicketList(that: MyTicketPage) {
token: 'token_test', token: 'token_test',
}, },
}) })
.then(res => { .then((res) => {
let former = that.state.rs;
if (!res.data.success) { if (!res.data.success) {
that.setState({ that.setState({
rs: { rs: former.trans(false),
loading: false,
success: false,
},
}); });
return; return;
} }
that.setState({ that.setState({
rs: { rs: former.trans(true),
loading: false,
success: true,
},
fixList: res.data.data.list.map( fixList: res.data.data.list.map(
item => (item) =>
new TicketListItem( new TicketListItem(
item.id, item.id,
item.device, item.device,
@@ -39,12 +34,10 @@ export function getMyTicketList(that: MyTicketPage) {
), ),
}); });
}) })
.catch(reason => { .catch((reason) => {
let former = that.state.rs;
that.setState({ that.setState({
rs: { rs: former.trans(false),
loading: false,
success: false,
},
}); });
console.log(reason); console.log(reason);
}); });
+2 -2
View File
@@ -21,7 +21,7 @@ export function submitTicket(that: RepairPage) {
accessories: that.state.checkedList, accessories: that.state.checkedList,
}, },
}) })
.then(res => { .then((res) => {
console.log(res.data); console.log(res.data);
that.setState({ that.setState({
isLoading: false, isLoading: false,
@@ -31,7 +31,7 @@ export function submitTicket(that: RepairPage) {
type: 'success', type: 'success',
}); });
}) })
.catch(err => { .catch((err) => {
console.log(err); console.log(err);
that.setState({ that.setState({
isLoading: false, isLoading: false,
+5 -5
View File
@@ -1,10 +1,10 @@
import TicketDetail from '@/pages/TicketDetail/TicketDetail';
import { TicketInfo, TicketNote } from '@/pages/TicketDetail/TicketNote'; import { TicketInfo, TicketNote } from '@/pages/TicketDetail/TicketNote';
import DetailFramework from '@/components/DetailFramework/DetailFramework';
import Taro from '@tarojs/taro'; import Taro from '@tarojs/taro';
import moment from 'moment'; import moment from 'moment';
import { getUrl } from '.'; import { getUrl } from '.';
export function getTicketInfo(that: TicketDetail, id: number) { export function getTicketInfo(that: DetailFramework, id: number) {
Taro.request({ Taro.request({
url: getUrl('/tickets/info'), url: getUrl('/tickets/info'),
method: 'GET', method: 'GET',
@@ -12,7 +12,7 @@ export function getTicketInfo(that: TicketDetail, id: number) {
id: id, id: id,
}, },
}) })
.then(res => { .then((res) => {
let former = that.state.rs; let former = that.state.rs;
if (!res.data.success) { if (!res.data.success) {
that.setState({ that.setState({
@@ -30,7 +30,7 @@ export function getTicketInfo(that: TicketDetail, id: number) {
status: data.status, status: data.status,
}; };
const notes: Array<TicketNote> = []; const notes: Array<TicketNote> = [];
data.notes.map(item => { data.notes.map((item) => {
notes.push({ notes.push({
id: item.id, id: item.id,
op: item.op, op: item.op,
@@ -46,7 +46,7 @@ export function getTicketInfo(that: TicketDetail, id: number) {
}); });
} }
}) })
.catch(reason => { .catch((reason) => {
let former = that.state.rs; let former = that.state.rs;
that.setState({ that.setState({
rs: former.trans(false), rs: former.trans(false),
+5 -2
View File
@@ -4,6 +4,9 @@ import pt from '@/plain-text';
import { getUrl } from '.'; import { getUrl } from '.';
export function updateUserInfo(that: InformPage) { export function updateUserInfo(that: InformPage) {
that.setState({
isLoading: true,
});
Taro.request({ Taro.request({
url: getUrl('/user/update'), url: getUrl('/user/update'),
method: 'POST', method: 'POST',
@@ -13,7 +16,7 @@ export function updateUserInfo(that: InformPage) {
phone: that.state.phone, phone: that.state.phone,
}, },
}) })
.then(res => { .then((res) => {
console.log(res.data); console.log(res.data);
that.setState({ that.setState({
isLoading: false, isLoading: false,
@@ -23,7 +26,7 @@ export function updateUserInfo(that: InformPage) {
type: 'success', type: 'success',
}); });
}) })
.catch(err => { .catch((err) => {
console.log(err); console.log(err);
that.setState({ that.setState({
isLoading: false, isLoading: false,