From 1121cc3f208d1951b8bcef9bfefd92ac0a59c1cc Mon Sep 17 00:00:00 2001 From: XiuYun CHEN Date: Mon, 14 Jul 2025 17:37:45 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=A9=E5=B1=95=E6=B6=88=E6=81=AF=E9=83=A8?= =?UTF-8?q?=E5=88=86=E4=BB=A3=E7=A0=81=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chatkit_ui/src/main/ets/pages/ChatP2PPage.ets | 21 +++- .../main/ets/viewmodel/ChatBaseViewModel.ets | 28 +++-- .../src/main/resources/base/media/more.png | Bin 0 -> 192 bytes .../ets/builder/NavigationBackBuilder.ets | 54 ++++++--- commons/basic/Index.ets | 2 +- .../src/main/ets/constants/BasicConstant.ets | 4 + .../src/main/ets/models/ChatExtModel.ets | 8 ++ .../main/ets/components/ItemCompPublic.ets | 104 +++++++++++++----- .../main/ets/components/ListCompPublic.ets | 4 +- .../main/ets/view/ConsultationDetailComp.ets | 16 +++ .../src/main/ets/view/QuictDoctorComp.ets | 4 +- .../main/ets/view/TabBarConsultationComp.ets | 4 +- .../src/main/ets/view/TabBarTopComp.ets | 4 +- .../main/ets/pages/LocalConversationPage.ets | 11 +- .../pages/Netease/PublicConsultationPage.ets | 9 +- 15 files changed, 200 insertions(+), 73 deletions(-) create mode 100644 chatkit_ui/src/main/resources/base/media/more.png diff --git a/chatkit_ui/src/main/ets/pages/ChatP2PPage.ets b/chatkit_ui/src/main/ets/pages/ChatP2PPage.ets index 39c2e24..4e6fa5a 100644 --- a/chatkit_ui/src/main/ets/pages/ChatP2PPage.ets +++ b/chatkit_ui/src/main/ets/pages/ChatP2PPage.ets @@ -75,7 +75,7 @@ import { TextMessageDetailDialog } from '../view/TextMessageDetailDialog'; import { TeachDialog } from '../view/TeachDialog'; import { NewWaDialog } from '../view/NewWaDialog'; import { PerfactInputSheet } from '@itcast/basic/src/main/ets/Views/PerfactInputSheet' -import { hdHttp, HdResponse,BasicConstant, authStore} from '@itcast/basic' +import { hdHttp, HdResponse,BasicConstant, authStore, preferenceStore, ChatParam} from '@itcast/basic' import { HashMap } from '@kit.ArkTS'; import { customAttachment } from '../view/MessageComponentBuilder' @@ -84,6 +84,8 @@ export struct ChatP2PPage { pathStack: NavPathStack = new NavPathStack() sessionId=''//患者的云信id patientUuid=''//患者uuid + @Local chat_state:string='' + @Local gdxz_sessionType:string= preferenceStore.getItemString('gdxz_sessionType') @Local statusBarHeight:number=0 @Local havestopout:boolean=false;//是否有出诊公告 @Local chatUserInfo: ChatUserInfo = new ChatUserInfo(); @@ -420,6 +422,11 @@ export struct ChatP2PPage { } aboutToAppear() { + if(this.chat_state=='3') + { + this.bottomHeight==0 + } + NEEmojiManager.instance.setup(); DeviceUtils.rootDirPath = getContext(this).filesDir this.operationMoreDataList = setupMoreOperationData() @@ -574,8 +581,8 @@ export struct ChatP2PPage { NavDestination() { NavigationBackBuilder({ title:this.showName , - rightButtonIcon: this.showMultiSelect ? undefined : $r('app.media.ic_public_more_dot'), - rightButtonTitle: this.showMultiSelect ? $r('app.string.chat_msg_dialog_cancel') : undefined, + rightButtonIcon: this.gdxz_sessionType==BasicConstant.general ? $r('app.media.more') :undefined, + rightButtonTitle: this.gdxz_sessionType==BasicConstant.consult && this.chat_state!='3'? '关闭会话' : undefined, top:this.statusBarHeight, rightButtonAction: () => { this.goToSettingPage(this.pathStack) @@ -776,7 +783,7 @@ export struct ChatP2PPage { top: { anchor: "chatPageListView", align: VerticalAlign.Bottom }, }) - if (this.hideInput === false && !this.showMultiSelect) { + if (this.hideInput === false && !this.showMultiSelect&&this.chat_state!='3') { NEChatInputView({ controller: this.controller, placeHolder: (this.chatUserInfo.conversationName ?? '').length > 15 ? @@ -1087,9 +1094,11 @@ export struct ChatP2PPage { .hideTitleBar(true) .onReady((context: NavDestinationContext) => { this.pathStack = context.pathStack - let param = this.pathStack.getParamByName("ChatP2PPage") as string[]; + let param = this.pathStack.getParamByName("ChatP2PPage") as ChatParam[]; if (param.length > 0) { - this.conversationId = param[0]; + this.conversationId = param[0].conversationId; + this.showName= param[0].name+''; + this.chat_state=param[0].chat_state this.loadChatData(); } else { this.pathStack.removeByName("ChatP2PPage") diff --git a/chatkit_ui/src/main/ets/viewmodel/ChatBaseViewModel.ets b/chatkit_ui/src/main/ets/viewmodel/ChatBaseViewModel.ets index 0c5b19e..08b8da0 100644 --- a/chatkit_ui/src/main/ets/viewmodel/ChatBaseViewModel.ets +++ b/chatkit_ui/src/main/ets/viewmodel/ChatBaseViewModel.ets @@ -36,6 +36,7 @@ import { V2NIMMessageFileAttachment, V2NIMMessagePinNotification, V2NIMMessagePinState, + V2NIMMessagePushConfig, V2NIMMessageRevokeNotification, V2NIMMessageSendingState, V2NIMMessageType, @@ -57,10 +58,10 @@ import { ChatKitConfig } from '../ChatKitConfig'; import { sceneMap } from '@kit.MapKit'; import { clearForwardAtMark, createForwardMessageListFileDetail, sendMessageFailedTips } from '../common/MessageHelper'; import { instanceToPlain } from 'class-transformer'; -import { NECommonUtils } from '@nimkit/common'; +import { NECommonUtils, UserUtils } from '@nimkit/common'; import { HashMap, JSON } from '@kit.ArkTS'; import { assign } from '@nimsdk/vendor'; -import { BasicConstant, ChatExtModel } from '@itcast/basic'; +import { BasicConstant, ChatExtModel, preferenceStore } from '@itcast/basic'; @ObservedV2 export class ChatBaseViewModel { @@ -654,13 +655,14 @@ export class ChatBaseViewModel { } // 消息发送之前调用,用于配置消息通用参数 - beforeSendMessage(msg: V2NIMMessage): V2NIMMessage { + beforeSendMessage(msg: V2NIMMessage){ // if (ChatKitConfig.messageReadState) { // let msgConfig: V2NIMMessageConfig = { // readReceiptEnabled: false // } // msg.messageConfig = msgConfig // } + return msg } @@ -689,12 +691,7 @@ export class ChatBaseViewModel { // let extension = JSON.stringify(instanceToPlain(extensionMap)) // message.serverExtension = extension // } - let extension:ChatExtModel= { - gdxz_sessionType: '', - gdxz_consult_uuid: '', - gdxz_nickName: '' - } - message.serverExtension =JSON.stringify(extension) + //设置推送 @@ -911,6 +908,19 @@ export class ChatBaseViewModel { * @param progress 消息发送进度 */ async sendMessage(msg: V2NIMMessage, params?: V2NIMSendMessageParams, progress?: (percentage: number) => void) { + let extension:ChatExtModel= { + gdxz_sessionType: preferenceStore.getItemString('gdxz_sessionType'), + gdxz_consult_uuid: preferenceStore.getItemString('gdxz_consult_uuid')+'', + gdxz_nickName:await UserUtils.getAvatarName(ChatKitClient.nim.conversationIdUtil.parseConversationTargetId(this.conversationId),'') + } + msg.serverExtension =JSON.stringify(extension) + // Map p=new HashMap<>(); + // p.put("classification",1); + // payload.put("vivoField",p);//vivo推送 + // payload.put("apns-collapse-id", "321");//ios需要 + // payload.put("apns-from-id", NimUIKit.getAccount());//ios需要 + // msg.pushConfig = {} as V2NIMMessagePushConfig + // msg.pushConfig.pushPayload='' ChatRepo.sendMessage(this.beforeSendMessage(msg), this.conversationId!, params, progress) .catch((err: BusinessError) => { console.error("net ease send message error", err.code, err.message); diff --git a/chatkit_ui/src/main/resources/base/media/more.png b/chatkit_ui/src/main/resources/base/media/more.png new file mode 100644 index 0000000000000000000000000000000000000000..7267b3b2f524a95b05dc4b4a3e09417a26e5d07d GIT binary patch literal 192 zcmeAS@N?(olHy`uVBq!ia0vp^DnQJ^!3HEJ=EYtGQth5Djv*HQ$tev@b*!AN^=JOa zI>s#9-?N)reoqC% zJ~~|gd!h_;@nQdE`+fR$ICX{nlBk|?^s16?this.item.createDate.substring(1,16):this.item.createDate:'') - .fontSize(15).fontColor($r('app.color.top_title')).padding({left:5}) - Text('').width(11).height(11).backgroundColor('#ffff3e3e').borderRadius(20).margin({top:-20}) - .visibility(this.isHistory?Visibility.Visible:Visibility.None) - } + Column() { + Row() { + Text(this.item.state == 0 ? $r('app.string.cancellation') : this.item.realName) + .fontSize(19) + .fontColor($r('app.color.top_title')) + .layoutWeight(1) + Text(this.item.createDate ? + this.item.createDate.length > 16 ? this.item.createDate.substring(1, 16) : this.item.createDate : '') + .fontSize(15).fontColor($r('app.color.top_title')).padding({ left: 5 }) + Text('') + .width(11) + .height(11) + .backgroundColor('#ffff3e3e') + .borderRadius(20) + .margin({ top: -20 }) + .visibility(this.isHistory ? Visibility.Visible : Visibility.None) + + } + Text(this.item.content) - .fontSize(14).fontColor($r('app.color.common_gray_03')).padding(9).margin({top:10}) - .backgroundColor($r('app.color.f6f6f6')).borderRadius(8) + .fontSize(14) + .fontColor($r('app.color.common_gray_03')) + .padding(9) + .margin({ top: 10 }) + .backgroundColor($r('app.color.f6f6f6')) + .borderRadius(8) .width('100%') .maxLines(2) .textOverflow({ overflow: TextOverflow.Ellipsis }) - Row() - { - Text('问题详情').fontSize(11).backgroundColor($r('app.color.top_title')).fontColor(Color.White) - .width(63).height(25).borderRadius(17).textAlign(TextAlign.Center) + Row() { + Text('问题详情') + .fontSize(11) + .backgroundColor($r('app.color.top_title')) + .fontColor(Color.White) + .width(63) + .height(25) + .borderRadius(17) + .textAlign(TextAlign.Center) .onClick(() => { router.pushUrl({ url: 'pages/Netease/ConsultationDetailPage', - params: { uuid: this.item.uuid,isHistory:this.isHistory+''} + params: { uuid: this.item.uuid, isHistory: this.isHistory + '' } }); }) - Text(this.item.diseaseName.includes("甲、乙、丙、丁")?'肝炎':this.item.diseaseName).fontSize(11).borderColor($r('app.color.top_title')).fontColor($r('app.color.top_title')) - .width(63).height(25).borderRadius(17).borderWidth(1).textAlign(TextAlign.Center).margin({left:10}) + Text(this.item.diseaseName.includes("甲、乙、丙、丁") ? '肝炎' : this.item.diseaseName) + .fontSize(11) + .borderColor($r('app.color.top_title')) + .fontColor($r('app.color.top_title')) + .width(63) + .height(25) + .borderRadius(17) + .borderWidth(1) + .textAlign(TextAlign.Center) + .margin({ left: 10 }) }.alignSelf(ItemAlign.Start) - .margin({top:10}) - + .margin({ top: 10 }) } .width('100%') .padding(10) .onClick(() => { - router.pushUrl({ - url: 'pages/Netease/ConsultationDetailPage', - params: { uuid: this.item.uuid,isHistory:this.isHistory+''} - }); + if(this.isHistory) + { + preferenceStore.setItemString('gdxz_consult_uuid', this.item.uuid) + preferenceStore.setItemString('gdxz_sessionType', BasicConstant.consult) + this.pathStack.pushPath({ + name: "ChatP2PPage", + param: { + conversationId: ChatKitClient.nim.conversationIdUtil.p2pConversationId(this.item.patientUuid.toString() + .toLowerCase()), + name: this.item.realName, + chat_state:this.item.state+'' + } as ChatParam + }) + } + else + { + router.pushUrl({ + url: 'pages/Netease/ConsultationDetailPage', + params: { uuid: this.item.uuid,isHistory:this.isHistory+''} + }); + } + + + + }) + } - - - - } diff --git a/features/netease/src/main/ets/components/ListCompPublic.ets b/features/netease/src/main/ets/components/ListCompPublic.ets index 71430e6..f711c16 100644 --- a/features/netease/src/main/ets/components/ListCompPublic.ets +++ b/features/netease/src/main/ets/components/ListCompPublic.ets @@ -9,7 +9,7 @@ import HashMap from '@ohos.util.HashMap'; @Component export struct ListCompPublic { - + pathStack: NavPathStack = new NavPathStack() @State isEmptyViewVisible: boolean = false; // 控制显隐的状态变量 @Prop @Watch('onUpdate') @@ -207,7 +207,7 @@ export struct ListCompPublic { { ForEach(this.list, (item: ConsulList) => { ListItem() { - ItemCompPublic({ item,isHistory:this.isHistory }) + ItemCompPublic({ item,isHistory:this.isHistory,pathStack: this.pathStack }) } diff --git a/features/netease/src/main/ets/view/ConsultationDetailComp.ets b/features/netease/src/main/ets/view/ConsultationDetailComp.ets index bed936f..f6dd780 100644 --- a/features/netease/src/main/ets/view/ConsultationDetailComp.ets +++ b/features/netease/src/main/ets/view/ConsultationDetailComp.ets @@ -112,6 +112,7 @@ export struct ConsultationDetailComp { if(json.code=='1') { promptAction.showToast({ message: '抢答成功' }) + this.addBonusPoints() } else { @@ -123,6 +124,21 @@ export struct ConsultationDetailComp { }) } + + addBonusPoints() { + const hashMap: HashMap = new HashMap(); + + hashMap.clear(); + hashMap.set('score_type','2'); + hdHttp.httpReq(BasicConstant.addBonusPoints,hashMap).then(async (res: HdResponse) => { + + let json:Record = JSON.parse(res+'') as Record; + promptAction.showToast({ message: json.message }) + + }).catch((err: BusinessError) => { + this.dialog.close(); + }) + } build() { Column() { diff --git a/features/netease/src/main/ets/view/QuictDoctorComp.ets b/features/netease/src/main/ets/view/QuictDoctorComp.ets index 8bb98b0..d95fc96 100644 --- a/features/netease/src/main/ets/view/QuictDoctorComp.ets +++ b/features/netease/src/main/ets/view/QuictDoctorComp.ets @@ -7,14 +7,14 @@ export struct QuictDoctorComp { @Watch('onChangeIndex') activeIndex: number = 0 @State type: number=0 - + pathStack: NavPathStack = new NavPathStack() onChangeIndex() { } build() { Column() { - TabBarTopComp({activeIndex:this.activeIndex,type:this.type}); + TabBarTopComp({activeIndex:this.activeIndex,type:this.type,pathStack: this.pathStack}); diff --git a/features/netease/src/main/ets/view/TabBarConsultationComp.ets b/features/netease/src/main/ets/view/TabBarConsultationComp.ets index 70be375..6e202c1 100644 --- a/features/netease/src/main/ets/view/TabBarConsultationComp.ets +++ b/features/netease/src/main/ets/view/TabBarConsultationComp.ets @@ -6,7 +6,7 @@ import { ManyForOneComp } from '../view/ManyForOneComp' @Component export struct TabBarConsultationComp { - + pathStack: NavPathStack = new NavPathStack() @StorageProp('bottomHeight') bottomHeight: number = 0 @Link activeIndex: number @@ -42,7 +42,7 @@ export struct TabBarConsultationComp { TabContent() { if (index === 0) { - QuictDoctorComp() + QuictDoctorComp({pathStack: this.pathStack}) } else if(index === 1) { diff --git a/features/netease/src/main/ets/view/TabBarTopComp.ets b/features/netease/src/main/ets/view/TabBarTopComp.ets index ebcfbcd..453b3e6 100644 --- a/features/netease/src/main/ets/view/TabBarTopComp.ets +++ b/features/netease/src/main/ets/view/TabBarTopComp.ets @@ -5,7 +5,7 @@ import { ListCompMany } from '../components/ListCompMany' @Component export struct TabBarTopComp { - + pathStack: NavPathStack = new NavPathStack() @StorageProp('bottomHeight') bottomHeight: number = 0 @Link activeIndex: number @@ -46,7 +46,7 @@ export struct TabBarTopComp { TabContent() { if (this.type==0) { - ListCompPublic({isHistory:this.isHistory}) + ListCompPublic({isHistory:this.isHistory,pathStack: this.pathStack}) } else if(this.type==1) diff --git a/localconversationkit_ui/src/main/ets/pages/LocalConversationPage.ets b/localconversationkit_ui/src/main/ets/pages/LocalConversationPage.ets index a3afd60..672a52a 100644 --- a/localconversationkit_ui/src/main/ets/pages/LocalConversationPage.ets +++ b/localconversationkit_ui/src/main/ets/pages/LocalConversationPage.ets @@ -5,6 +5,7 @@ * */ +import { BasicConstant, ChatParam, preferenceStore } from '@itcast/basic'; import { ChatKitClient, ChatRepo, NEUserWithFriend, PersonSelectParam, TeamRepo } from '@nimkit/chatkit'; import { CommonEmptyResult, CommonLongLoadingProgress, NetworkBrokenBuilder } from '@nimkit/common'; import { V2NIMConversationType, V2NIMLocalConversation } from '@nimsdk/base'; @@ -90,7 +91,15 @@ export struct LocalConversationPage { */ goToChatPage(conversationInfo: V2NIMLocalConversation) { if (conversationInfo?.type == V2NIMConversationType.V2NIM_CONVERSATION_TYPE_P2P) { - this.pathStack.pushPath({ name: "ChatP2PPage", param: conversationInfo.conversationId }) + preferenceStore.setItemString('gdxz_consult_uuid','') + preferenceStore.setItemString('gdxz_sessionType',BasicConstant.general) + this.pathStack.pushPath({ name: "ChatP2PPage", + param: { + // gdxz_sessionType:BasicConstant.general, + conversationId:conversationInfo.conversationId + } as ChatParam + + }) } else if (conversationInfo?.type == V2NIMConversationType.V2NIM_CONVERSATION_TYPE_TEAM) { this.pathStack.pushPath({ name: "ChatTeamPage", param: conversationInfo.conversationId }) } diff --git a/products/expert/src/main/ets/pages/Netease/PublicConsultationPage.ets b/products/expert/src/main/ets/pages/Netease/PublicConsultationPage.ets index a901e5f..05a7da3 100644 --- a/products/expert/src/main/ets/pages/Netease/PublicConsultationPage.ets +++ b/products/expert/src/main/ets/pages/Netease/PublicConsultationPage.ets @@ -2,7 +2,7 @@ import { TabBarConsultationComp } from 'netease'; @Entry @Component struct PublicConsultationPage { - + pathStack: NavPathStack = new NavPathStack() @State @Watch('onChangeIndex') @@ -22,14 +22,17 @@ struct PublicConsultationPage { this.onChangeIndex() } build() { - + Navigation(this.pathStack) { Flex() { - TabBarConsultationComp({ activeIndex: this.activeIndex}) + TabBarConsultationComp({ activeIndex: this.activeIndex, pathStack: this.pathStack}) } .backgroundColor($r('app.color.white')) // .backgroundColor(Color.Red) // .height('100%') // .width('100%') + } + .mode(NavigationMode.Auto) + .hideTitleBar(true) } } \ No newline at end of file