diff --git a/src/pages/TicketDetail/TicketDetail.tsx b/src/pages/TicketDetail/TicketDetail.tsx index 4b37518..3b0aee5 100644 --- a/src/pages/TicketDetail/TicketDetail.tsx +++ b/src/pages/TicketDetail/TicketDetail.tsx @@ -2,21 +2,40 @@ import { Component, ReactNode } from 'react'; import { View } from '@tarojs/components'; import { getCurrentInstance } from '@tarojs/runtime'; import pt from '@/plain-text'; -import { AtButton, AtModal } from 'taro-ui'; +import { + AtButton, + AtFloatLayout, + AtForm, + AtMessage, + AtModal, + AtTextarea, +} from 'taro-ui'; import DetailFramework from '@/components/DetailFramework/DetailFramework'; import PageFooter from '@/components/PageFooter/PageFooter'; +import { submitComment } from '@/service/submitComment'; +import Taro from '@tarojs/taro'; + +const submitInterval = 5000; interface TicketDetailState { id: number; isMember: boolean; - showModel: boolean; + showOreoModal: boolean; + showCommentModal: boolean; + comment: string; + isLoading: boolean; + isDisable: boolean; } export default class TicketDetail extends Component<{}, TicketDetailState> { state: Readonly = { id: 0, isMember: false, - showModel: false, + showOreoModal: false, + showCommentModal: false, + comment: '', + isLoading: false, + isDisable: false, }; componentDidMount(): void { @@ -31,20 +50,67 @@ export default class TicketDetail extends Component<{}, TicketDetailState> { onAddToOreo(): void { this.setState({ - showModel: true, + showOreoModal: true, }); } - handleCancel(): void { + onAddComment(): void { this.setState({ - showModel: false, + showCommentModal: true, }); } - handleConfirm(): void { + handleOreoCancel(): void { + this.setState({ + showOreoModal: false, + }); + } + + handleCommentCancel(): void { + this.setState({ + showCommentModal: false, + }); + } + + handleOreoConfirm(): void { return; } + handleCommentConfirm(): void { + return; + } + + handleCommentChange(comment: string) { + this.setState({ + comment: comment, + }); + return comment; + } + + onCommentSubmit() { + this.setState({ + isDisable: true, + }); + if (this.state.comment == '') { + Taro.atMessage({ + message: pt.get().button.submitText.blank, + type: 'error', + }); + setTimeout(() => { + this.setState({ + isDisable: false, + }); + }, submitInterval); + return; + } + submitComment(this); + setTimeout(() => { + this.setState({ + isDisable: false, + }); + }, submitInterval); + } + render(): ReactNode { const middleButton = this.state.isMember ? ( { {pt.get().ticketDetail.addNote} @@ -103,14 +170,38 @@ export default class TicketDetail extends Component<{}, TicketDetailState> { return ( + + + + + + {pt.get().button.buttonText.submit} + + + { + this.setState({ + isDisable: false, + }); + }, submitInterval); return; } updateUserInfo(this); diff --git a/src/plain-text/TicketDetail.ts b/src/plain-text/TicketDetail.ts index 0077306..86e54dc 100644 --- a/src/plain-text/TicketDetail.ts +++ b/src/plain-text/TicketDetail.ts @@ -14,6 +14,10 @@ export interface TicketDetailText { addToOreo: string; addNote: string; pick: string; + comment: { + title: string; + placeholder: string; + }; } export const ticketDetailZhCn: TicketDetailText = { @@ -37,6 +41,10 @@ export const ticketDetailZhCn: TicketDetailText = { addToOreo: '加入 Oreo', addNote: '添加评论', pick: '认领', + comment: { + title: '添加评论', + placeholder: '可以在这里交流机器情况、维修进度、提出问题~', + }, }; export const ticketDetailEnUs: TicketDetailText = { @@ -60,4 +68,8 @@ export const ticketDetailEnUs: TicketDetailText = { addToOreo: 'Add to Oreo', addNote: 'Comment', pick: 'Pick', + comment: { + title: '添加评论', + placeholder: '可以在这里交流机器情况、维修进度、提出问题~', + }, }; diff --git a/src/service/submitComment.ts b/src/service/submitComment.ts new file mode 100644 index 0000000..521634a --- /dev/null +++ b/src/service/submitComment.ts @@ -0,0 +1,38 @@ +import TicketDetail from '@/pages/TicketDetail/TicketDetail'; +import Taro from '@tarojs/taro'; +import pt from '@/plain-text'; +import { getUrl } from '.'; + +export function submitComment(that: TicketDetail) { + that.setState({ + isLoading: true, + }); + Taro.request({ + url: getUrl('/report'), + method: 'POST', + data: { + token: 'token_test', + comment: that.state.comment, + }, + }) + .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', + }); + }); +}